Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 15.09.2008, 14:45   #1 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard Bullet Cam Addon

Jo, bin gerade im Addonerstellen Fieber und versuche gerade wieder aus einem Skript ein Addon zu basteln

Als Skript habe ich die Bullet Cam 1.01 von Vienna.

Also meine config.cpp schaut folgendermaßen aus:
Code:
class CfgPatches
{
	class GeschossCamera
	{
		units[]={};
		requiredVersion = 1.08;
		requiredAddons[] = {"Extended_Init_EventHandlers"};
	};
};

class Extended_Init_EventHandlers
{

	class Man
	{
		Init_Car ="_this execVM ""GeschossCamera\Init.sqf"";";
	};
	class Car
	{
		Init_Car ="_this execVM ""GeschossCamera\Init.sqf"";";
	};
	class Tank
	{
		HULK_Init_Car ="_this execVM ""GeschossCamera\Init.sqf"";";
	};
	class Plane
	{
		Init_Car ="_this execVM ""GeschossCamera\Init.sqf"";";
	};
	class Helicopter
	{
		Init_Car ="_this execVM ""GeschossCamera\Init.sqf"";";
	};
	class Ship
	{
		Init_Car ="_this execVM ""GeschossCamera\Init.sqf"";";
	};
	class StaticWeapon
	{
		Init_Car ="_this execVM ""GeschossCamera\Init.sqf"";";
	};
};
Und da man für die Skripte zwei Auslöser braucht, wollte ich die über die init.sqf erstellen:
Code:
_caminf = createtrigger ["NONE", getpos player];
_caminf setTriggerArea [0,0,0,false];
_caminf setTriggerStatements ["player == vehicle player","infanterieGeschossAktion = player addAction ["Infanterie-Geschosssicht ein/aus","GeschossCamera\infanterieGeschossCam_on_off.sqf,[],-1,false,true,""]","player removeAction infanterieGeschossAktion; if(ViennasInfanterieFiredAktion) then {temp= execVM "GeschossCamera\infanterieGeschossCam_on_off.sqf"}"];

_camveh = createtrigger ["NONE", getpos player];
_camveh setTriggerArea [0,0,0,false];
_camveh setTriggerStatements ["player != vehicle player","PlayersGeschossKameraVehicle=vehicle Player; vehicleGeschossAktion = PlayersGeschossKameraVehicle addAction ["Fahrzeug-Geschosssicht ein/aus","GeschossCamera\vehicleGeschossCam_on_off.sqf",[],1,false,true,""]","PlayersGeschossKameraVehicle removeAction vehicleGeschossAktion; if(ViennasVehicleFiredAktion) then {temp= execVM "GeschossCamera\vehicleGeschossCam_on_off.sqf"}"];
Das Problem ist in der init.sqf. Diese Fehlermeldung kommt dann jedesmal beim Start von ArmA:


Was habe ich da falsch gemacht? Wollte die Bulletcam auch in die Kampagnen usw. nutzen ohne die erst jedesmal in die Missionen einzubauen.
Miniaturansicht angehängter Grafiken
bullet-cam-addon-arma-121.jpg  
Cyborg11 ist offline   Mit Zitat antworten
Alt 15.09.2008, 17:14   #2 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

" beendet einen String, um den String nicht zu beenden sondern ein " in den String zu bekommen musst du "" schreiben.
i0n0s ist offline   Mit Zitat antworten
Alt 15.09.2008, 22:36   #3 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Ok, danke. Jetzt ist der Fehler weg
Nur funktioniert mein Addon irgendwie nicht so wie es soll. Also soll heißen, dsas ich einfach keine Actioneinträge in der Mission bekomme. Ich weiß auch nicht warum

__________________________________________________ _________________


Ok, ich hab jetzt mal meine init.sqf umgeschrieben. Es funktioniert die Infanterie Bullet Cam. Aber es funktioniert nicht die Fahrzeug Cam. Und für jede Einheit (egal ob leeres Fahrzeug, Feind, Freund) bekomme ich jedesmal die Aktion "Infanterie-Geschossansicht" <.< Also wenn 10 Soldaten auf der Karte sind, dann hab ich 11x die Aktion (da ich ja als Spieler auch dazuzähle).

Meine neue init.sqf schaut nun so aus:
Code:
If (player == vehicle player) then {infanterieGeschossAktion = player addAction ["Infanterie-Geschosssicht ein/aus","GeschossCamera\infanterieGeschossCam_on_off.sqf",[],-1,false,true,""]};
If (vehicle player != player) then {vehicleGeschossAktion = player addAction ["Fahrzeug-Geschosssicht ein/aus","GeschossCamera\vehicleGeschossCam_on_off.sqf",[],1,false,true,""]};
Weiß jemand, was nun daran falsch ist? Komme hier nicht mehr weiter =(
Danke shconmal im Voraus.
Cyborg11 ist offline   Mit Zitat antworten
Alt 15.09.2008, 22:53   #4 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

Du musst dafür sorgen, dass die Init nur einmal läuft.
Ansonsten musst du bei Fahrzeugen auch dem Fahrzeug den Eintrag ins Actionmenü geben. Und am Ende auch wieder entfernen!
i0n0s ist offline   Mit Zitat antworten
Alt 16.09.2008, 13:50   #5 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Zitat von i0n0s Beitrag anzeigen

Du musst dafür sorgen, dass die Init nur einmal läuft.
Ansonsten musst du bei Fahrzeugen auch dem Fahrzeug den Eintrag ins Actionmenü geben. Und am Ende auch wieder entfernen!

Und wie kann ich das machen, dass die init nur einmal bei nem Missionsstart läuft?

Weil das ist blöd, wenn ich für jeden Soldaten/Fahrzeug die Aktion bekomme <------ Das bezieht sich aber nur auf verbündete Einheiten und auf leere Fahrzeuge.

Geändert von Cyborg11 (16.09.2008 um 13:58 Uhr).
Cyborg11 ist offline   Mit Zitat antworten
Alt 16.09.2008, 14:29   #6 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

Wie machen es denn die anderen Addons? Bzw. wie macht man im Allgemeinen das ein bestimmter Code nur unter einer Bedingung ausgeführt wird?

Sorry für die Gegenfragen, aber ohne sowas kommen immer wieder solche Fragen weil die Leute nicht anfangen zu lernen.
i0n0s ist offline   Mit Zitat antworten
Alt 16.09.2008, 14:35   #7 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Zitat von i0n0s Beitrag anzeigen

Wie machen es denn die anderen Addons? Bzw. wie macht man im Allgemeinen das ein bestimmter Code nur unter einer Bedingung ausgeführt wird?

Ka oO

Zitat von i0n0s Beitrag anzeigen

Sorry für die Gegenfragen, aber ohne sowas kommen immer wieder solche Fragen weil die Leute nicht anfangen zu lernen.

Ja schon, aber das demotiviert auch ^^ Außerdem kann man nicht einfach alles selber lernen, manchmal braucht man eben die Hilfe von anderen <.<
Cyborg11 ist offline   Mit Zitat antworten
Alt 16.09.2008, 14:54   #8 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

Hey, du benötigst hier eine IF-Abfrage. Und wenn du die nicht kennst...
Das einzige Problem ist, dass du vorher noch keine Variable initialisieren konntest auf die du zurückgreifen kannst. Aber dafür gibt es isNil.
i0n0s ist offline   Mit Zitat antworten
Alt 16.09.2008, 15:21   #9 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Zitat von i0n0s Beitrag anzeigen

Hey, du benötigst hier eine IF-Abfrage. Und wenn du die nicht kennst...
Das einzige Problem ist, dass du vorher noch keine Variable initialisieren konntest auf die du zurückgreifen kannst. Aber dafür gibt es isNil.

Also ne IF Abfrage kann ich. Aber ich steh grad aufm Schlauch Wie muss die IF-Abfrage dann für die Inf und Veh Cam ausschauen?

Code:
player vehicle = isnil pveh

If (player == pveh) then {...}
So in etwa?
Cyborg11 ist offline   Mit Zitat antworten
Alt 16.09.2008, 15:27   #10 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

Hm, wo fangen wir an?
Zu erst liest man sich die Parameter von isNil durch, dann schaut man was isNil zurückgibt

Dann ist "player vehicle" kein gültiger Ausdruck, und selbst wenn es einer wäre ("vehicle player"), dann kann man ihn keinem Wert zuweisen.

Ich hätte jetzt auf den Editing Guide verwiesen, ihn dem taucht aber isNil und nil nicht auf, von daher schau es dir im Biki mal durch was die Funktion macht. Vorallem das Beispiel im Biki kannst du dir mal anschauen. Wenn du das Beispiel 10 mal aufrufst, wie oft wird dann _pokus einen Wert zugewiesen?
i0n0s ist offline   Mit Zitat antworten
Alt 16.09.2008, 17:11   #11 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

_pokus hätte den Wert 10, oder? Aber ich verstehe isnil so: Wenn die Variable nicht definiert ist, dann soll ArmA zum then Teil kommen, stimmt doch irgendwie so oder? =D

Aber trotzdem kein Plan wie ich das einbinden soll oO Hab noch nirgends irgendwie mit isnil gearbeitet und ein Addon mit isNil ist mir auch noch nicht untergekommen ... außerdem verstehe ich irgendwie den Sinn von isNill nicht oO
Cyborg11 ist offline   Mit Zitat antworten
Alt 16.09.2008, 17:27   #12 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

Zitat von Cyborg11 Beitrag anzeigen

_pokus hätte den Wert 10, oder?

_pokus hat den Wert 0, du meintest vermutlich: _pokus wird 10 mal ein Wert zugewiesen. Das ist aber falsch.

Zitat von Cyborg11 Beitrag anzeigen

Aber ich verstehe isnil so: Wenn die Variable nicht definiert ist, dann soll ArmA zum then Teil kommen, stimmt doch irgendwie so oder? =D

Ja, das stimmt, nur wendest du es irgendwie nicht an.

Versuchen wir es mal so:
Code:
private ["_pokus"];
if (isNil "_pokus") then {_pokus = 0};
if (isNil "_pokus") then {_pokus = 1};
Player sideChat format ["%1", _pokus];
Geh den Code bitte mal erst auf Papier durch und poste hier, was der Spieler sagt (also den Wert von _pokus). Danach kannst du den Schnipsel mal in ArmA ausführen lassen.
i0n0s ist offline   Mit Zitat antworten
Alt 16.09.2008, 17:33   #13 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

ALso mal ohne es in ArmA zu testen, denke ich, dass _pokus den Wert 1 hat. Denn es wird ja von oben nach unten ausgeführt. Zuerst hat _pokus den Wert 0 und dann bekommt er den Wert 1.

Nein Stop! Das ist falsch. Denn wenn _pokus den Wert 0 bekommt, dann ist _pokus ja definiert und dadurch wird dann die nächste Zeile nicht ausgeführt bzw. da passiert nichts und somit sagt dann der Spieler: "0".

Ist es so richtig?



Kurze Frage nebenbei: Wofür braucht man das private? Wird das in ArmA auch ausgeführt? Oder schreibt man da alle Variablen rein um nen beseren Überblick zu bekommen?
Cyborg11 ist offline   Mit Zitat antworten
Alt 16.09.2008, 17:49   #14 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

Jetzt hast du deinen Fehler erkannt.

Und was macht der Code jetzt (im Bezug auf die thens) und wie hilft er dir bei der Originalfragestellung?

Bzgl dem private:
Jeder Codeblock ({ beginnt einen Codeblock, ein Script ist ein Codeblock) kann eigene Variablen haben.
Wenn das private fehlt würde _pokus undefiniert sein, da es nur im Block der then existiert. Im generellen sollten alle privaten Variablen in privates aufgeführt werden. Wenn man später Funktionen verwendet, hilft es sehr viele komische Fehler zu vermeiden.
i0n0s ist offline   Mit Zitat antworten
Alt 16.09.2008, 17:52   #15 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 09.01.2008
Beiträge: 1.599
Standard

Jo, korrekt... denk' ich jedenfalls

Im aktuellen Ike-T90 findet Ihr z.B. den Smokelauncher, welcher eine bestimmte Anzahl von "Schüssen" beinhaltet. Das kommt doch eurem Problem relativ nahe, weil auch Addon.

BR,
mike

Geändert von modEmMaik (16.09.2008 um 17:55 Uhr).
modEmMaik ist offline   Mit Zitat antworten
Alt 16.09.2008, 18:19   #16 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Zitat von i0n0s Beitrag anzeigen

Jetzt hast du deinen Fehler erkannt.

Und was macht der Code jetzt (im Bezug auf die thens) und wie hilft er dir bei der Originalfragestellung?

Der Thenteil gibt der Variable einen Wert und somit wird dann isNil nicht mehr ausgeführt. Also wird die Skriptzeile nur einmal ausgeführt und das hilft mir ungemein weiter, damit es bei mir auch nur einmal ausgeführt wird

Nach dem Prinzip hab ich das jetzt mal versucht in meine Skriptzeile miteinzubauen:
Code:
If (isNil "_cam" AND vehicle player == player) then {_cam = 1; infanterieGeschossAktion = player addAction ["Infanterie-Geschosssicht ein/aus","GeschossCamera\infanterieGeschossCam_on_off.sqf",[],-1,false,true,""]};
Das Problem: Ich krieg die Aktion immer noch mehrmals. Was hab ich jetzt schon wieder falsch gemacht? _cam wurde noch nie zuvor im Skript erwähnt. Soll ich das Addon mal hochladen? Wenn du willst kannst du ja mal nen Blick drüberwerfen



Zitat von i0n0s Beitrag anzeigen

Bzgl dem private:
Jeder Codeblock ({ beginnt einen Codeblock, ein Script ist ein Codeblock) kann eigene Variablen haben.
Wenn das private fehlt würde _pokus undefiniert sein, da es nur im Block der then existiert. Im generellen sollten alle privaten Variablen in privates aufgeführt werden. Wenn man später Funktionen verwendet, hilft es sehr viele komische Fehler zu vermeiden.

Aber wird durch das private die Variable nicht definiert? Dadurch dürfte doch dann isNil nicht mehr funktioinieren oder nicht? Oder muss die Variable dafür mit =, >, usw. definiert werden, damit isNil nicht mehr funktioniert?
Cyborg11 ist offline   Mit Zitat antworten
Alt 16.09.2008, 19:52   #17 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

Du verwendest eine lokale Variable. Jeder Eventhandler ist aber ein eigenes Script und somit ist die Variable nie belegt. Du musst eine globale Variable nehmen.

Bzgl. private:
Es gibt die Codeblöcke, Scopes. In dem folgenden Beispiel hast du 3 Scopes: Der globale, dann das erste then und dann das zweite then.
Code:
if (player == vehicle player) then {
    _vehicle = true;
} else {
    _vehicle = false;
};
Player sideChat format ["%1", _vehicle];
_vehicle wird hier im Scope eines der thens erstellt, somit ist die Variable für den ersten Scope nicht bekannt. Daher muss man sie ihm erst bekannt machen. Dies geht entweder über "_vehicle = false;" oder eben durch "private "_vehicle"".

Was noch schöner ist: Wenn im einen übergeordneten Scope die Variable existiert, kann man sich mit private unter denselben Namen für den Scope eine neue Variable holen:
Code:
_bla = "Hallo";
if (true) then {
    private "_bla";
    _bla = "Tach";
};
Player sideChat _bla;
Der Spieler sagt also "Hallo", auch wenn _bla "Tach" zugewiesen wurde. Einfach aus dem Grund, dass wegen dem private das _bla im then-scope eine neue Variable ist.
i0n0s ist offline   Mit Zitat antworten
Alt 16.09.2008, 20:23   #18 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Danke, jetzt klappt das mit der Inf Bullet Cam Wusste gar nicht, dass man da nur globale Variabeln nehmen darf.

Aber jetzt hänge ich bei der Vehicle Cam
Auslöser für die Vehicle Cam schaut so aus:
Bedingung: player != vehicle player
Aktivierung: PlayersGeschossKameraVehicle=vehicle Player; vehicleGeschossAktion = PlayersGeschossKameraVehicle addAction [format["*** %1-Geschoßsicht ein/aus ***",typeOF PlayersGeschossKameraVehicle],"Vienna\GeschossCamera\vehicleGeschossCam_on_off. sqf",[],1,false,true,""]
Deaktivierung: PlayersGeschossKameraVehicle removeAction vehicleGeschossAktion; if(ViennasVehicleFiredAktion) then {temp= execVM "Vienna\GeschossCamera\vehicleGeschossCam_on_off.s qf"}

Meine Skriptzeile schaut so aus:
Code:
If (isNil "camveh" AND vehicle player != player) then {camveh = 1; PlayersGeschossKameraVehicle=vehicle Player; vehicleGeschossAktion = PlayersGeschossKameraVehicle addAction ["Fahrzeug-Geschosssicht ein/aus","GeschossCamera\vehicleGeschossCam_on_off.sqf",[],1,false,true,""]};
Ich glaube, ich weiß an was das liegt. Ich habe nämlich die Zeilen von der Deaktivierung aus dem Auslöser nicht in meiner Skriptzeile. Aber wie soll ich das einbinden? Als else? Das wäre aber falsch, da sich eine Auslöserdeaktivierung ja ganz anders verhält als ein else-Teil.

Könntest du mir da bitte nocheinmal behilflich sein, mein Meister i0n0s??



Zu private:
Aha ok. Danke für die Information Und wenn man das Skript so erweitern würde (das 2.):
Code:
_bla = "Hallo";
if (true) then {
    private "_bla";
    _bla = "Tach";
    player sidechat _bla
};
~2
Player sideChat _bla;
Dann müsste man doch zuerst "Tach" angezeigt werden und dann nach 2 Sekunden müsste doch eigetnlich dann "Hallo" erscheinen oder?
Cyborg11 ist offline   Mit Zitat antworten
Alt 16.09.2008, 20:29   #19 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 06.06.2008
Beiträge: 209
Standard

Zum ersten:
Init wird nur bei der Init ausgeführt. Somit müsstest du schon in einem Fahrzeug sein, damit das aktiv wird.

Zum private:
Ja, genau.

Dann zu deiner globalen Variable: Les dir mal das bzgl. Tags durch: OFPEC Tag System
i0n0s ist offline   Mit Zitat antworten
Alt 16.09.2008, 20:40   #20 (permalink)
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Cyborg11
 
Registriert seit: 26.03.2008
Beiträge: 2.822
Standard

Danke für den Link

Ja ich meine, dass wenn ich in einem Fahrzeug sitze, dass bei mir dann keine Action "Fahrzeug-Geschossansicht an/aus" kommt. Weiß aber nicht warum
Oder funktioniert das dann nicht mehr, wenn ich am Anfang ein Infanterist bin und mich dann in ein Fahrzeug setze? Wie muss ich das Skript dann umbauen, sodass es immer in irgendeinem Fahrzeug (egal wie weit die Mission schon fortgeschritten ist) funktioniert?
Cyborg11 ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Patrone mit Cam im Bullet Mode verfolgen feldhase Editing 22 19.08.2008 17:51
AddOn`s schotte Multiplayer 0 05.11.2006 09:35
Was ist das für ein Addon? Delta1 Mod und Addon Ecke 1 18.04.2006 18:11
Jam Addon Fitch Mod und Addon Ecke 4 11.10.2004 16:32
Addon Tip Sir Franzis Drake Hilfe 4 25.05.2004 18:42


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119