Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 15.02.2013, 20:27   #1 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard Lokale Variabel in String?

Hallo zusammen,

ich hab mal eine Frage (vielleicht eine dumme) an euch:
Geht es, dass man den Inhalt einer lokalen Variabeln in einem String wiedergibt?
Beispiel:
Ich habe den Namen einer Einheit (KI) ausgelesen,
Code:
_unitname = vehicleVarName _unit;
hab einen Trigger (per Skript) erstellt (der Funktioniert auch )
und will diesem nun als Bedingung hinzufügen, dass oben ausgelesene Einheit am leben ist:
Code:
_trg1 setTriggerStatements ["this && alive /*Hier irgendwie den Inhalt aus _unitname einfügen */", "CODE'", "CODE"];
Ohne die Abfrage, ob die Einheit noch am Leben ist, funktioniert auch alles gut... Nur weiß ich nicht wie ich den Namen einfügen soll, ohne dass es eine Konstante ist.

Muss man überhaupt den Namen der Einheit auslesen oder kann man auch mit dem Inhalt aus _unit was anfangen (Falls die Einheit keinen Namen hat o.ä.)?

Vielen Dank schonmal an alle, die sich mit meinem Problem beschäftigen
TheRhisd ist offline  
Alt 15.02.2013, 21:08   #2 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Benutzerbild von Lester
 
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 58
Beiträge: 3.013
Standard

hint str(_meinevariable);
player sidechat str(_meinevariable);

...
sicherer ist aber sowas:
hint str([_meinevariable]);
Der gibt dann nämlich bei ner null variable auch etwas aus
__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547
Lester ist offline  
Alt 15.02.2013, 21:31   #3 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Danke für dein Bemühen aber leider will ich den Namen/Einheitenbezeichnung nicht ausgeben lassen, sondern von meinem Skript in den String "schreiben", sodass man das Skript universell anwenden kann, ohne jedesmal etwas daran zu ändern...
Weißt du, oder jemand anderes, wie man einen konstanten String mit dem Namen (also dem Inhalt der Variabel) "zusammenschweißt" , um diesen dann in eine Variabel zu schreiben, die man dann an den Trigger übergibt? Etwas verwirrend die Frage aber ich hoffe ihr wisst was ich meine...

Edit: Das Ganze am Besten, ohne etwas in der description.ext zu änder/reinschreiben/definieren.
Hab das probiert aber leider nicht hinbekommen

Geändert von TheRhisd (15.02.2013 um 21:34 Uhr).
TheRhisd ist offline  
Alt 15.02.2013, 21:36   #4 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

_unit enthält die Identifikation des Objekts (hier die Einheit). Die Abfrage lautet somit this && alive _unit, weil alive ein Objekt benötigt, nicht einen String.


vehicleVarName gibt den Identifikations-Namen als String zurück, den du dem Objekt im Editor gegeben hast. Eine Verwendung dieses Strings macht nur Sinn, wenn du einen Code als String erstellen willst, der dann mit call compile ausgeführt wird.

Beispiel für das Zusammenstellen eines Codes als String und anschließender Ausführung mit call compile:

Die Figur des Spielers hat im Editor den Namen Soldat1 erhalten.

_code = format ["if (alive %1) then {hint 'Hallo %1!'}", vehicleVarName player];
call compile _code;

Es wird der Text Hallo Soldat1! angezeigt, wenn dieser lebt.

Den Code-Text von _code kannst du dir z.B. mit hint _code; anzeigen lassen.
Vienna ist offline  
Alt 15.02.2013, 21:45   #5 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Das Problem ist, dass ich die Abfrage in meinem Skript nicht so lassen kann, da in dem Skript ein neuer Trigger generiert wird, und dieser dann die lokale Variable aus dem Skript in der Bedingung hat -> Resultat: Trigger wird nicht ausgelöst...
Globale Variabeln würde ich gerne vermeiden, da das Skript auch mehrfach laufen sollte, ohne die Einheiten eines der anderen Skripte zu beeinflussen.
TheRhisd ist offline  
Alt 15.02.2013, 21:56   #6 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Erstelle deine Code-Zeile als String und rufe sie dann wie oben beschrieben auf.

_code = format["_trg1 setTriggerStatements [this && alive %1, ..., ...]",vehicleVarName _unit];

Beachte, dass Strings im Code-Text mit einfachen Anführungszeichen anzuführen sind.

Korrekte Lösung ab Post #14!

Geändert von Vienna (16.02.2013 um 00:11 Uhr).
Vienna ist offline  
Alt 15.02.2013, 22:05   #7 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Danke genau so etwas habe ich gesucht
Ich werd das Ganze dann mal jetzt testen.
Vielen Dank für die Hilfe
TheRhisd ist offline  
Alt 15.02.2013, 22:11   #8 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Kann sein, dass der Code-Text so aussehen muss:

_code = format["%1 setTriggerStatements [this && alive %2, ..., ...]",_trg1,vehicleVarName _unit];

Korrekte Lösung ab Post #14!

Geändert von Vienna (16.02.2013 um 00:11 Uhr).
Vienna ist offline  
Alt 15.02.2013, 22:36   #9 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard Klappt leider nicht

Ich habe grade versucht das Script mit der von dir genannten Lösung zu gestalten, was allerdings nicht funktioniert hat.
-ShowScriptErrors hat mir auch Fehlermeldungen ausgegeben, nur leider weiß ich nicht genau was ich tuen soll...
Ich habe die Fehlermeldungen in den Anhang gepackt.
Skript zur obersten Fehlermeldung:
Code:
_code = format["_trg1 setTriggerStatements [this && alive %1 , 'handle = [(thislist select 0)] spawn {_target = _this select 0; while{true} do{tatgrp move position _target; sleep 1;}};', ''];", vehicleVarName _unit];
mittlere Fehlermeldung:
Code:
_code = format["_trg1 setTriggerStatements ['this && alive %1' ,  'handle = [(thislist select 0)] spawn {_target = _this select 0;  while{true} do{tatgrp move position _target; sleep 1;}};', ''];",  vehicleVarName _unit];
untere Fehlermeldung:
Code:
_code = format["%1 setTriggerStatements [this && alive %2, 'handle = [(thislist select 0)] spawn {_target = _this select 0; while{true} do{tatgrp move position _target; sleep 1;}};', ''];",_trg1,vehicleVarName _unit];
Fällt dir was auf/ein Vienna?
Miniaturansicht angehängter Grafiken
lokale-variabel-string-fehlermeldungen.png  
TheRhisd ist offline  
Alt 15.02.2013, 22:54   #10 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Anstelle von _trg1 darfst du im Text nur %1 anführen. Als Code nach der Abfrage gibt vorerst nur eine Textausgabe ein, um den Fehler einzugrenzen.
Vienna ist offline  
Alt 15.02.2013, 23:00   #11 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Hab den unteren Code mal geändert:
Code:
_code = format["%1 setTriggerStatements [this && alive %2,hint 'klappt', ''];",_trg1,vehicleVarName _unit];
immer noch der gleiche Fehler wie vorher (unterer auf dem Bild)
TheRhisd ist offline  
Alt 15.02.2013, 23:12   #12 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Funktioniert es, wenn du den Code direkt eingibst:

_trg1 setTriggerStatements [this && alive _unit, hint 'klappt', ''];

Korrekte Lösung ab Post #14!

Geändert von Vienna (16.02.2013 um 00:12 Uhr).
Vienna ist offline  
Alt 15.02.2013, 23:22   #13 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Wenn ich den Code so direkt eingebe, wird der Trigger ausgelöst, ohne dass die Aktivierungsbedingungen ( West, Present ) ausgelöst wurden...
Ein normal auf der Karte erstellter Trigger mit gleichen Einstellungen löst erst aus wenn ich hineingehe also liegt es sehr wahrscheinlich an dem Code.
TheRhisd ist offline  
Alt 15.02.2013, 23:33   #14 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Ich sehe gerade, dass die Bedingung und die Aktionen alle als String einzugeben sind. Also muss die Codezeile bei der direkten Eingabe so aussehen:

_trg1 setTriggerStatements [format["this && alive %1",vehicleVarName _unit], "hint 'klappt'", ""];
Vienna ist offline  
Alt 15.02.2013, 23:41   #15 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Super klappt jetzt danke
Noch ne kleine Frage nebenbei:
Kann/Sollte man Trigger im Verlauf der Mission löschen (aus Performancegründen) oder fressen die kaum Leistung wenn sie nicht mehr Benutzbar sind, weil Einheiten tot sind etc. ?
Falls ja gibts nen extra Befehl dafür oder auch mit deleteVehicle? Hab da (http://community.bistudio.com/wiki/C...pting_Commands) nämlich nichts in die Richtung gesehen...

Nachtrag:
Jetzt klappt zwar die Abfrage des Triggers richtig aber der Code-Block bei Aktivierung wird gar nicht oder falsch ausgeführt:
Code:
_trg1 setTriggerStatements [format["this && alive %1",vehicleVarName _unit], "'handle = [thislist select 0] spawn {_target = _this select 0; while{true} do{tatgrp move position _target; sleep 1;}};'", ""];

Geändert von TheRhisd (15.02.2013 um 23:54 Uhr).
TheRhisd ist offline  
Alt 16.02.2013, 00:03   #16 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Vermutlich sind die einfachen Anführungszeichen bei der Aktion zuviel. Wir so gehen: "...code...". Die einfachen Anführungszeichen sind nur erforderlich, wenn der Code Text enthält.

Jetzt ist es nicht mehr notwendig die gesamte Codezeile als Text zu erstellen.

Es ist sicher besser nicht mehr benötigte Trigger zu löschen.

Geht mit z.B. deleteVehicle _trg1
Vienna ist offline  
Alt 16.02.2013, 00:26   #17 (permalink)
Newbie
 
Benutzerbild von TheRhisd
 
Registriert seit: 12.09.2012
Beiträge: 33
Standard

Vielen Dank für deine Hilfe klappt jetzt eig. alles so wie es soll.
Ich wünsche noch eine schöne Nacht
TheRhisd ist offline  
Alt 16.02.2013, 00:42   #18 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Jetzt ist die Funktionsweise klar. In alle Parameter wird Code als String eingegeben, das call compile macht der Befehl setTriggerStatements automatisch.

Nun können wir ruhig schlafen.
Vienna ist offline  
 


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
Leerzeichen aus String entfernen Buliwyf Editing & Scripting 5 12.07.2011 09:03
Multiplayer PROBLEM!!! Panzagrenadier Multiplayer 15 18.06.2010 15:12


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