PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fahrzeug Warnmeldung


Duke49th
09.06.2008, 09:45
Kann mir jemand verraten, wo mein Fehler liegt?

(Script reagiert nicht)
Habs auch schon mit:_plane = vehicle _this

Am Anfang probiert. Dann gibts aber ne Fehlermeldung.

Script(.sqs ... oder sollte ich lieber .sqf nehmen?):
_plane = vehicle _player


#checkEngine

?!(alive _plane): goto "exit"
? (isEngineOn _plane) : goto "Dammage"
~0.2
goto "checkEngine"

#Dammage
? (getdammage _plane > 0.7) : goto "Loop"
~0.2
goto "Dammage"


#Loop
?!(alive _plane): goto "exit"
?! (isEngineOn _plane) : goto "sleep"
?! (getdammage _plane > 0.6) : goto "Dammage"
_plane vehicleRadio "F16_Caution";
~6

goto "Loop"

#sleep
?!(alive _plane): goto "exit"
? (isEngineOn _plane) : goto "Dammage"
~0.2
goto "sleep"



#exit
exit


edit: Wo wir dabei sind.

Bei dem Script stimmt auch was nicht: (Dürfte aber wahrscheinlich auch in der zweiten Zeile ein Fehler sein...?)

_F16 = vehicle _this
_alarm = "zsu"
_kv = 1.0

#checkEngine

?!(alive _F16): goto "exit"
? (isEngineOn _F16) : goto "scan"
~0.2
goto "checkEngine"

#scan
_kv = _alarm knowsabout _F16 : goto "Loop"
goto "scan"

#Loop
?!(alive _F16): goto "exit"
?! (isEngineOn _F16) : goto "sleep"
_F16 vehicleRadio "F16_gundish";
~0.980

goto "Loop"

#sleep
?!(alive _F16): goto "exit"
? (isEngineOn _F16) : goto "Loop"
~0.2
goto "sleep"



#exit
exit

Buliwyf
09.06.2008, 10:39
Nuuuunnnn... also ich persönlich würde SQF benutzen, aber das bleibt in 99% dem Scripter selbst überlassen. Da eine plausible Erklärung warum SQS oder SQF zu finden ist mir bis heute noch nicht gelungen... :ugly:

Weiterhin würde ich das erste Script grundsätzlich anders aufrufen. Und zwar würde ich dem Flugzeug eine EventHandler Engine verpassen, der sobald das Flugzeug den Motor startet, das Script aufruft. Ich finde es jedenfalls unnötig ein Script in einem Loop laufen zu lassen, bis der Motor an ist... :komisch:

Ansonsten solltest Du im ersten Script _plane = _this select 0; einfügen. Begriffen habe es auch nie, aber manchmal hilfts... ;)


Zum zweiten Script, das übrigens noch mehr Fehler als nur die zweite enthält...

_alarm = "zsu" wird nicht funktionieren, weil zsu ein Variablenname ist und sowas nicht in Hochkommata gestellt wird.
Also: _alarm = zsu wäre die richtige Variante.

Die knowsAbout-Zeile solltest Du auch nochmal überdenken... ;)

Duke49th
09.06.2008, 10:49
Danke soweit!


Weiterhin würde ich das erste Script grundsätzlich anders aufrufen. Und zwar würde ich dem Flugzeug eine EventHandler Engine verpassen, der sobald das Flugzeug den Motor startet, das Script aufruft. Ich finde es jedenfalls unnötig ein Script in einem Loop laufen zu lassen, bis der Motor an ist...



Und wie das?

Ich bin ja schon froh, überhaupt herausgefunden zu haben, daß man über die config ein Script aufrufen kann. Da mir in 4 verschiedenen Foren nicht einer verraten konnte oder wollte wie das geht.:rolleyes: (Wen modemMaik mir nicht den Tipp gegeben hätte mal ins Scud Addon zu schauen, hätt ichs auch aufgegeben...)


Das mit dem knowsabout war nur ne Idee. Da es ja sowas wie eine Aufschaltung durch die KI scheinbar nicht gibt bzw. es wohl scheinbar nicht abgefragt werden kann.

Buliwyf
09.06.2008, 11:02
Hast Du schonmal was vom Wiki (http://community.bistudio.com/wiki/Category:Scripting_Commands_ArmA) gehört? Dort findest Du eigentlich immer gute Erklärungen zum jeweiligen Befehl. Manchmal auch Beispiele. Villeicht auch im aktuellen Editing Guide von MrMurray, den ich allerdings nicht gelesen habe.

:confused:

pspsps91
09.06.2008, 11:29
Ich hab das erste Script mal in SQF geschrieben und jede Zeile mit einem Kommentar erklärt. Was das zweite Script genau machen soll ist mir aber ein Rätsel?!

_plane = vehicle _this; //Aktivierung über >>>nul=PLANE execVM "script.sqf";<<< keine []!!!!

while {alive _plane} do { //Das Script wiederholt sich, solange das Flugzeug noch lebt
waitUntil{((IsEngineOn _plane) && (getDammage _plane > .7) || !(alive _plane)}; //Solange warten bis der Motor an ist UND die Beschädigung größer als 0.7 ist ODER das Flugzeug nicht mehr lebt
if (alive _plane) then { //Wenn das Flugzeug noch lebt die folgenden Zeile ausführen, ansonsten gehts gleich wieder in die Schleife, die aber beendet wird, da das Flugzeug nicht mehr lebt
_plane vehicleRadio "F16_Caution"; //Der Funkspruch
waitUntil{(getDammage _plane) < .7}; //Warten, bis der Schaden wieder kleiner ist und dann die Schleife durchlaufen
};
};

Duke49th
09.06.2008, 17:39
Ich hab das erste Script mal in SQF geschrieben und jede Zeile mit einem Kommentar erklärt. Was das zweite Script genau machen soll ist mir aber ein Rätsel?!


Danke, werds probieren.

Das zweite Script soll etwas in Richtung RWR werden. Also ein Radarfrühwarngerät. Weiß halt nicht wie es rüberkommen werden wird mit knowsabout....obs überhaupt so klappt.


@Bulliwyf: Nein, wiki? Was ist das? :rolleyes:

Was soll denn an den Erklärungen bitte gut sein? Vieles im Wiki ist undokumentiert oder schlecht dokumentiert.
Für Dich vielleicht ausreichend, für nen script-noob wie mich ist es absolut unbefriedigend.

Mr-Murray's Editing Guide ist zwar nicht schlecht, aber wenn Du ihn noch nicht gelesen hast, dann wunderts mich auch nicht warum Du öfters auf diesen verweist.

Da stehen einige script Basics drinnen...mehr nicht. Da gehts ums Missionsediting, nicht um Addonerstellung.

Buliwyf
09.06.2008, 18:26
Im Wiki steht, das mit dem knowsAbout-Befehl einen Wert zwischen 0-4 zurückgegeben wird. Das ist in den Notizen von Hardrock sogar noch explizit beschrieben. Dort ist zwar alles auf Englisch geschrieben, aber wenn man sich in die Computerwelt begibt, dann muss man sich zwangsläufig mit Englisch auseinandersetzen. Wie auch immer...

Du schreibst in Deinem Script _kv = _alarm knowsabout _F16 : goto "Loop", bekommst aber von knowsAbout eine Zahl geliefert... was glaubst Du, passiert mit Deinem Script?

:komisch:

Duke49th
09.06.2008, 20:26
@pspsps91: Funktioniert auch nicht. Gibt keine Fehlermeldung, aber passiert auch nichts.

Danke trotzdem für die Mühe.

pspsps91
09.06.2008, 20:52
@pspsps91: Funktioniert auch nicht. Gibt keine Fehlermeldung, aber passiert auch nichts.
ok sry,... ich habs nicht getestet...

nearTargets - Bohemia Interactive Community (http://community.bistudio.com/wiki/nearTargets)
Aber das könnte deinen knowsAbout Befehl ersetzten...

irgendwie mit einer ForEach Schleife alle erkannten Feinde abfragen und prüfen obs ein Shilka, oder was auch immer ist.

i0n0s
09.06.2008, 20:57
Ich bin ja schon froh, überhaupt herausgefunden zu haben, daß man über die config ein Script aufrufen kann. Da mir in 4 verschiedenen Foren nicht einer verraten konnte oder wollte wie das geht.
Schau dir doch einfach die Beispiele bei Extendend_Eventhandlers an. Ansonsten zerschiesst du dir andere Mods.

_kv = _alarm knowsabout _F16 : goto &quot;Loop&quot;Kommt er an der Stelle nicht in eine Endlosschleife? Denn es müsst ein '?' am Anfang stehen damit die Abfrage stimmt. Ansonsten wird in _kv nur der Wert von knowsabout gespeichert.
Desweiteren benötigt knowsAbout laut Biki eine lokale Einheit. Und im MP sollte sie selten lokal sein.

Duke49th
09.06.2008, 21:56
Schau dir doch einfach die Beispiele bei Extendend_Eventhandlers an. Ansonsten zerschiesst du dir andere Mods.

Ohne es genau zu wissen, denke ich nicht. Sind ja nur ein paar kleine scripts, die Sounds abspielen.


_kv = _alarm knowsabout _F16 : goto &quot;Loop&quot;Kommt er an der Stelle nicht in eine Endlosschleife? Denn es müsst ein '?' am Anfang stehen damit die Abfrage stimmt. Ansonsten wird in _kv nur der Wert von knowsabout gespeichert.
Desweiteren benötigt knowsAbout laut Biki eine lokale Einheit. Und im MP sollte sie selten lokal sein.

Ich hab das Prinzip des knowsabout ja scheinbar eh falsch verstanden.

Aber die schleife ist ja gewollt...nur das rauskommen ausm loop hab ich vergessen...

Ist ja auch egal...solange ich es eh nicht schaffe mehr als ein Script aufzurufen, isses alles wurscht.
Noch schlimmer ist das ich die Texturen nur im Buldozer und nicht im Spiel angezigt bekomme.