|
|
#1 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
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ß |
|
|
|
|
#2 (permalink) |
![]() ![]() ![]() Registriert seit: 11.03.2005
Ort: HH
Alter: 54
Beiträge: 1.931
|
Hi..
...eigentlich versteh' ich nur Bahnhof, aber ich versuch's trotzdem mal.. ![]() 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. |
|
|
|
|
#3 (permalink) |
![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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
{
_dam = -1;
while {alive _this} do
{
waitUntil {getDammage _this != _dam};
_dam = getDammage _this;
hint format ["Schaden: %1%2", floor(_dam * 100),"%"];
};
hint "Schaden: 100%"
};
|
|
|
|
|
#5 (permalink) |
![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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. |
|
|
|
|
#7 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
Okay das funktioniert. Das script habe ich fast geschnackelt. Was genau macht diese Zeile temp = this spawn 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. |
|
|
|
|
#9 (permalink) |
![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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]; |
|
|
|
|
#10 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
Die Seite ist mir wohl bekannt und ich bin da auch schwer am Lesen. Aber wenns so einfach wäre... @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.
|
|
|
|
|
#11 (permalink) |
![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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. |
|
|
|
|
#12 (permalink) |
![]() Registriert seit: 30.11.2012
Beiträge: 15
|
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! |
|
|
|
|
#13 (permalink) |
![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Schau einmal hier rein: Missionserstellung Tipps&Tricks
|
|
|
|
|
#14 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
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
desen Config die *.sqf aufgerufen wird (hier die Werstatt)
_dam = 0;
_dam2 = 0;
while {alive _blub} do
{
_no = nearestObjects [_blub,"car",15];
_dam = getDammage _blub; // Schaden Werkstatt >> nur Test
_dam2 = getDammage _no; // Schaden Fahrzeug
player sideChat format ["%1",_dam]; // funtioniert
player commandChat format ["%1",_no]; // funktioniert
player globalChat format ["%1",_dam2]; // :(
sleep 2.5;
};
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? Geändert von Drunken Officer (01.12.2012 um 06:34 Uhr). |
|
|
|
|
#15 (permalink) |
![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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)
_dam = 0;
_dam2 = 0;
while {alive _blub} do
{
_no = nearestObjects [_blub,"car",15];
_dam = getDammage _blub; // Schaden Werkstatt >> nur Test
player sideChat format ["%1",_dam]; // funtioniert
player commandChat format ["%1",_no]; // funktioniert
{
_dam2 = getDammage _x; // Schaden Fahrzeug
player globalChat format ["_x: %1 Schaden: %2", _x, _dam2];
sleep 1
} forEach _no;
sleep 2.5
};
|
|
|
|
|
#16 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
Code:
_blub = _this select 0;
_dam1 = -1;
while {alive _blub} do
{
_no = nearestObjects [_blub,"car",15];
_dam = getDammage _blub;
player commandChat format ["%1",_no];
{
waitUntil {getDammage _x != _dam1}; _dam1 = getDammage _x;
player globalChat format ["_x: %1 Schaden: %2", _x, _dam1];
} forEach _no;
sleep 2.5
};
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? |
|
|
|
|
#18 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
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. |
|
|
|
|
#19 (permalink) |
![]() ![]() ![]() Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Diese Funktion gibt die Grade zurück, wie wenn du ein Objekt mit dem Kompass anvisierst.
Code:
F_dir2pos =
{
private["_p1","_p2","_d"];
_p1=_this select 1;
_p2=_this select 0;
_d=((_p1 select 0) - (_p2 select 0))atan2((_p1 select 1) - (_p2 select 1));
if (_d<0)then{_d=_d+360};
_d
};
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. |
|
|
|
|
#20 (permalink) |
![]() ![]() Registriert seit: 15.05.2011
Beiträge: 1.110
|
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"];
bla bla bla
_no = nearestObjects[(_this select 0),["car"], 100];
_driverx = name driver _x;
{
while {alive _no} do
{ cutText [format ["%1" >>hier benötige ich nen Zeilenumbruch<< WARNING, you are to close",_ driverx],0.3];
...
...
};
} forEach _no;
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. Geändert von Drunken Officer (26.12.2012 um 08:48 Uhr). |
|
|
| Stichworte |
| script erstellen, scripting |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| 2 Fragen zum Little Bird "MH-6J" | Sol.LrMartyn | Editing & Scripting | 6 | 30.01.2013 16:42 |
| A3, new scripting technology | Xeno | Community | 37 | 03.03.2012 19:07 |
| Lua Scripting Bücher und Einführung gesucht | JoeJoe87577 | Hilfe | 3 | 22.08.2011 00:22 |
| Diverse Fragen.... | Mafmaf | Editing & Scripting | 52 | 21.11.2010 20:29 |
| Einige Fragen | gedanke. | Editing & Scripting | 4 | 31.08.2010 18:53 |