Scripting - viele Fragen
An die Mods, weil ich sicherlich noch viele viele Fragen haben werde, habe ich den Titel allg. gehalten.
So wieder paar Fragen. 1. Wie lese ich den Damagewert vom Objekt A durch Objekt B aus? Schreibe ich es in die Init von einem Objekt, klappt es Code:
this setDammage 0.3;cd = getDammage car, hint format["%1",cd]; Code car Code:
this setDamage 0.4 Code:
cd = getDammage car; hint format["%1",cd] 2. Wie erreiche ich, dass der Damage-Wert nur als hint angezeigt wird, wenn er sich ändert? Ich habe leider nur die endlosschleife. Und wenn ich sage waitUntil cd != cd .... schaut mich Arma2 mit großemn fragenden Augen an. Mein scriptansatz: Code:
while {alive car} do {cd = getDammage car; if (cd != 0) then {hint format ["%1",cd]; waitUntil cd != cd; }; 3. Wenn ich eibn kleines script bei meinen Modelen schreibe, kann ich denn sleep befehl nutzen. Bei er Init im Editor wird der einfach übergangen. Muß ich im Editor im Gegensatz zur *.sqf etwas besonderes beim sleep-Befehl beachten? 4. kann ich beim "nearestObjects-Befehl" die Klasse "LandVehicle" auslesen? Damit würde ich jedes Fahrzeug erfassen, nicht nur Pkw o.ä. Gruß |
Hi..
...eigentlich versteh' ich nur Bahnhof, aber ich versuch's trotzdem mal.. :D zu 1) Abgesehen davon, dass Dir die Werte nicht richtig angezeigt werden, warum schreibst Du nicht: Code:
hint format["%1",getDammage car]; zu 2) Du musst mit einer zweiten Variable arbeiten, in der der Anfangsschaden steckt und mit einer Variablen, in der der aktuelle Schaden steckt und die beiden laufend vergleichen. zu 3) In einer init-Zeile funktioniert das so dirket nicht. Du musst dann mit spawn ein neues Script starten, wenn es unbedingt aus der init-Zeile sein muss. zu 4) Ja, warum nicht... allerdings auch die ganzen statischen Waffen. |
Bei einem Code musst du schon nach und logisch denken. Da muss jedes Zeichen passen!
Ob alle geöffneten Klammern auch geschlossen sind. Ob Befehle korrket aufgerufen werden wie z.B. waitUntil {...}. Ob eine Abfrage Sinn ergibt. Wie cd != cd. Wie soll eine Variable nicht gleich sich selbst sein? Zu 2. Kopiere das in die Initialisierungszeile eines Fahrzeuges: Code:
temp = this spawn |
Zitat:
|
Du trägst nur zur Verwirrung bei, es geht hier um eine brauchbare logische Abfrage!
Ist die Variable nicht initialisiert, auf NIL oder NULL gesetzt, dann erhält man bei dieser Abfrage: if (cd != cd) then {hint "THEN"} else {hint "ELSE"}; weder THEN noch ELSE angezeigt. Ist ein Wert in der Variablen, dann zeigt die Anzeige immer ELSE. Das ist ja nicht der Sinn einer solchen Abfrage. Eine Zeile im Skript: waitUntil {cd != cd}; blockiert das Skript auf dieser Zeile. Egal ob die Variable NULL, NIL, eine Zahl oder einen Text enthält. Bei einem logischer Wert stürzt das Skript ab. |
*deleted*
Xeno |
Zitat:
Sorry fürs viele Fragen. In meinen Modelen habe ich diese Zeile noch nie benutzen müssen. Aber ohne diese Zeile funktioniert es ja nicht. Zur (exteren) Abfrage Damage-Wert. Es wird ständig 0 ausgeworfen, wenn ich z.B. den Schaden am Fahrzeug durch die Werkstatt ausgelesen haben möchte. |
|
Skripte in externen Dateien ruft man mit <Parameter> execVM "SkriptName.sqf"; auf.
Mit <Parameter> spawn {...Code...}; ist es möglich Code direkt aufzurufen. z.B. in einem Auslöser oder in einem externen Skript als "Unterprogramm". temp = benötigt man nur beim Aufruf im Editor (frag mich nicht warum). Die eigentliche Routine beginnt erst mit this spawn {....}; In spawn kannst du fast alles wie in ein Skript reinschreiben und das läuft als eigenständiges Skript. this enthält in diesem Fall den "Namen" des Objekts (Fahrzeug, Soldat, usw.) und wird dem Spawn-Skript als Parameter übergeben. Als Parameter kann man eine eine einzelne Variable übergeben (in diesem Fall this spawn {...};). Diese ruft man dann im Skript mit _this allein ab! Übergibt man einem Skript ein Array [1,2,3,...] spawn {...}; dann werden die einzelnen Inhalte des Arrays im Skript mit _this select 0; _this select 1; _this select 2; usw. abgerufen. Wenn eine Damage-Abfrage auch bei einem beschädigten Objekt immer nur 0 ausgibt, dann machst du was falsch. Teste das mit einem Funk-Auslöser: player groupChat format["%1", getDammage Objektname]; |
Zitat:
@Vienna Es stellt doch eigentlich keinen Unterschied dar, ob ich den Wer via Hint oder Chat wiedergeben lasse. Oder kann es sein, dass ich erstmal das Objekt als nearestObject auslesen muss um den Wert zu bekommen? Wie bereits geschrieben, in der INIT des betreffenden Objektes klappt es. Dein Script läuft ja wunderbar. Ich werde mal mit nearestObject basteln. Aber so wie ich Experte mich kenne, werde ich eh wieder Hilfe brauchen. :zahn: |
Hint-Ausgaben überschreiben den vorherigen Text. Bei groupChat wird der Text eine Zeile nach oben geschoben. Das ist vorteilhaft, wenn kurz nacheinander unterschiedliche Texte angezeigt werden.
Um dir den Wert anzeigen zu lassen benötigst du den Namen des Objekts. Bei unbekanntem Namen ist nearestObject eine der Möglichkeiten den festzustellen. |
Hallo Leute,
mich würde sehr gern Intressieren was brauche ich Unbedingt für Skripte, so das ich unter dem Mod ACE und ACRE eine Multiplayer Mission basteln kann. Bei den Skripten benötige ich die Mindest angabe "was da drin stehn muss um ein Briefing zu sehen!" z.b. MAP : CHERNARUS sie sind in Balota und müssen nach Chernagorsk..... Wenn du dann in Chernagorsk am Auslöser bist soll es als Abgehackt markiert werden. Leider bekomm ich das Alles nicht hin. für hilfe wäre ich extrem Dankbar! |
Schau einmal hier rein: http://hx3.de/editing-scripting-167/...-tricks-22044/
|
Okay, ich habe wieder eine Frage.
Das script wird in der Config zu meiner Werkstatt aufgerufen Irgendwo ist der Fehler Code:
_blub = _this select 0; // damit wird das Objekt angesprochen mit Der Name von _no wird angezeigt bzw. [] wenn leer ABER, bei _dam2 hängt sich das script auf! Muss ich da irgendwie mit isNil arbeiten? |
Der Fehler liegt in dieser Zeile:
_dam2 = getDammage _no; // Schaden Fahrzeug Die Variable _no enthält ein Array, getDammage erfordert aber ein Objekt. Versuche es so: Code:
_blub = _this select 0; // damit wird das Objekt angesprochen mit desen Config die *.sqf aufgerufen wird (hier die Werstatt) |
Code:
_blub = _this select 0; player commandChat format ["%1",_no]; Wenn sich kein Fahrzeug im Bereich befindet kommt; .... []; Das "Problem" ist, dass sich der letzte Schaden innerhalb der Werkstatt gemerkt wird. Erst wenn das Fahrzeug aus dem Bereich ist UND außerhalb neuen Schaden nimmt, erst dann kann bei einem anderen neuem Fahrzeug der Wert bestimmt werden. Nach meiner Logik müßte also ausgelesen werden, dass wenn der Bereich null ist, der _dam1 = -1 ist. Ich habe des mit if (!isNull _no) then {...} probiert. Da stürzt das Script ab. if (_no == "") oder auch if(_no == []) führten nicht zum Erfolg. Wie kann ich auslesen ob der Wert im Array == 0 ist? |
|
Erstmal danke Vienna, es hat viel geholfen.
es funktioniert sowiet Nächstes Projekt ist ein Geschwindigkeitsmessanlage NearestObject erfasst alle Objekte im 306° Winkel. Bekomme ich hin. Ich benötige aber die relative Position vom Objekt zur Kamera. ich habe mit getDir gearbeitet. Die Posi der Kamera bekomme ich ausgelesen. Auch die des Objektes. Allerdings würde sich jede getDir Abfrage auf die absolute Ausrichtung des Objektes beziehen. Wie bekomme ich es hin, dass nur Fahrzeug erfasst werden, die sich in der relativen Richtung 0 (+/- 20) zur Kamera befinden? Quasi: Kamera schaut 90°. Fahrzeuge erfassen die sich im winkel 80 - 110 befinden. |
Diese Funktion gibt die Grade zurück, wie wenn du ein Objekt mit dem Kompass anvisierst.
Code:
F_dir2pos = player groupChat format["Kompass zeigt: %1 Grad",floor([getPos player, getPos Objekt] call F_dir2pos)]; In Kombination mit getDir player wirst du dir eine passende Routine erstellen können. |
Ich habe eine Frage zu "cutText".
Den Text bekomme ich angezeigt. Ich kann leider zu Hause nicht testen, ob er local oder global ist. Ziel: nur der Fahrer (_driverx) des Fahrzeuges soll den Text angezeigt bekommen. Ich habe zum Anfang auf Code:
private = ["_driverx"]; Desweiteren benötzige ich nen Zeilenumbruch. Aus meiner HTML Zeit kenne ich noch <br> und </br>. hat aber in sämtlichen Varianten nicht funktioniert. Gibt's da ne Möglichkeit nen Zeilenumbruch zu gestalten? Wenn ich 2x cutText mache, werden sie überblendet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias