![]() |
#1 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]()
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"";"; }; }; 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"}"]; Was habe ich da falsch gemacht? ![]()
__________________
|
![]() |
![]() |
![]() |
#3 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]()
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,""]}; Danke shconmal im Voraus.
__________________
|
![]() |
![]() |
![]() |
#5 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]() 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). |
![]() |
![]() |
![]() |
#6 (permalink) |
![]() ![]() Registriert seit: 06.06.2008
Beiträge: 209
|
![]()
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. |
![]() |
![]() |
![]() |
#7 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]() Ka oO Ja schon, aber das demotiviert auch ^^ Außerdem kann man nicht einfach alles selber lernen, manchmal braucht man eben die Hilfe von anderen <.<
__________________
|
![]() |
![]() |
![]() |
#9 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]() Also ne IF Abfrage kann ich. Aber ich steh grad aufm Schlauch ![]() Code:
player vehicle = isnil pveh If (player == pveh) then {...} ![]()
__________________
|
![]() |
![]() |
![]() |
#10 (permalink) |
![]() ![]() Registriert seit: 06.06.2008
Beiträge: 209
|
![]()
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? |
![]() |
![]() |
![]() |
#11 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]()
_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
__________________
|
![]() |
![]() |
![]() |
#12 (permalink) |
![]() ![]() Registriert seit: 06.06.2008
Beiträge: 209
|
![]() _pokus hat den Wert 0, du meintest vermutlich: _pokus wird 10 mal ein Wert zugewiesen. Das ist aber falsch. 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]; |
![]() |
![]() |
![]() |
#13 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]()
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? ![]()
__________________
|
![]() |
![]() |
![]() |
#14 (permalink) |
![]() ![]() Registriert seit: 06.06.2008
Beiträge: 209
|
![]() ![]() 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. |
![]() |
![]() |
![]() |
#15 (permalink) |
![]() ![]() Registriert seit: 09.01.2008
Beiträge: 1.599
|
![]()
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). |
![]() |
![]() |
![]() |
#16 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]() 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,""]}; ![]() 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?
__________________
|
![]() |
![]() |
![]() |
#17 (permalink) |
![]() ![]() Registriert seit: 06.06.2008
Beiträge: 209
|
![]()
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]; 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; |
![]() |
![]() |
![]() |
#18 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]()
Danke, jetzt klappt das mit der Inf Bullet Cam
![]() 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,""]}; Könntest du mir da bitte nocheinmal behilflich sein, mein Meister i0n0s?? ![]() Zu private: Aha ok. Danke für die Information ![]() Code:
_bla = "Hallo"; if (true) then { private "_bla"; _bla = "Tach"; player sidechat _bla }; ~2 Player sideChat _bla;
__________________
|
![]() |
![]() |
![]() |
#19 (permalink) |
![]() ![]() Registriert seit: 06.06.2008
Beiträge: 209
|
![]()
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 |
![]() |
![]() |
![]() |
#20 (permalink) |
![]() ![]() ![]() Registriert seit: 26.03.2008
Beiträge: 2.822
|
![]()
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?
__________________
|
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
![]() |
||||
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 |