Armed-Assault.de Twitter
Antwort
 
Themen-Optionen Ansicht
Alt 24.11.2012, 19:06   #1 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.104
Standard 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];
Versuche ich den Wert "cd (cardamage)" des Autos (car) in der Werkstatt auszulesen, bekomme ich "0".
Code car
Code:
this setDamage 0.4
Code Werstatt
Code:
cd = getDammage car; hint format["%1",cd]
Eigentlich frage ich das Auto ab.

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; };
Hier weiß ich nicht, wie ich den Wertevergleich anstellen soll.

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ß
Drunken Officer ist offline   Mit Zitat antworten
Alt 24.11.2012, 20:27   #2 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

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];
Und ob "car" eine gültige zu verwendende Variable ist, damit wäre ich vorsichtig, weil "car" auch gleichzeitig ein ArmA-Klassenname ist. Da würde ich was anderes nehmen. Wovon ich aber eher ausgehe ist, dass bei Deiner Variante die Werkstatt das Fahrzeug noch unbeschädigt kennt und Dir deshalb keinen Schaden auswirft. Du solltest da was mit zB nearestObjekt einbauen, damit der Schaden erst ausgelesen wird, wenn das Fahrzeug in der Nähe des Gebäudes ist.

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.
__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 24.11.2012, 23:22   #3 (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

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%"
 };
Beachte, dass this außerhalb des Skripts ohne und im Skript mit Unterstrich geschrieben wird!
Vienna ist offline   Mit Zitat antworten
Alt 25.11.2012, 13:03   #4 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von TeRp
 
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
Standard

Zitat von Vienna Beitrag anzeigen

Ob eine Abfrage Sinn ergibt. Wie cd != cd. Wie soll eine Variable nicht gleich sich selbst sein?

Wenn sie null / nil ist.
__________________

TeRp ist offline   Mit Zitat antworten
Alt 25.11.2012, 16:09   #5 (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

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.
Vienna ist offline   Mit Zitat antworten
Alt 25.11.2012, 18:20   #6 (permalink)
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 77
Beiträge: 6.547
Standard

*deleted*

Xeno

Geändert von Xeno (08.12.2013 um 16:25 Uhr).
Xeno ist offline   Mit Zitat antworten
Alt 27.11.2012, 02:14   #7 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.104
Standard

Zitat von Vienna Beitrag anzeigen

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%"
 };
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.
Drunken Officer ist offline   Mit Zitat antworten
Alt 27.11.2012, 05:40   #8 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Buliwyf
 
Registriert seit: 11.03.2005
Ort: HH
Alter: 46
Beiträge: 1.927
Standard

Scripting Commands ArmA2

__________________
Buliwyf ist offline   Mit Zitat antworten
Alt 27.11.2012, 08:13   #9 (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

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];
Vienna ist offline   Mit Zitat antworten
Alt 27.11.2012, 15:52   #10 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.104
Standard

Zitat von Buliwyf Beitrag anzeigen

Scripting Commands ArmA2

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.
Drunken Officer ist offline   Mit Zitat antworten
Alt 27.11.2012, 16:38   #11 (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

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.
Vienna ist offline   Mit Zitat antworten
Alt 30.11.2012, 05:38   #12 (permalink)
Newbie
 
Registriert seit: 30.11.2012
Beiträge: 15
Standard

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!
schworzi ist offline   Mit Zitat antworten
Alt 30.11.2012, 13:09   #13 (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

Schau einmal hier rein: Missionserstellung Tipps&Tricks
Vienna ist offline   Mit Zitat antworten
Alt 01.12.2012, 06:28   #14 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.104
Standard

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 Schaden von _dam wird angezeigt.
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).
Drunken Officer ist offline   Mit Zitat antworten
Alt 01.12.2012, 07:20   #15 (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

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
};
Vienna ist offline   Mit Zitat antworten
Alt 13.12.2012, 08:59   #16 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.104
Standard

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?
Drunken Officer ist offline   Mit Zitat antworten
Alt 13.12.2012, 09:39   #17 (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

http://community.bistudio.com/wiki/count
Vienna ist offline   Mit Zitat antworten
Alt 17.12.2012, 17:39   #18 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.104
Standard

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.
Drunken Officer ist offline   Mit Zitat antworten
Alt 17.12.2012, 20:46   #19 (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

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
 };
Aufruf:

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.
Vienna ist offline   Mit Zitat antworten
Alt 26.12.2012, 08:42   #20 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Drunken Officer
 
Registriert seit: 15.05.2011
Beiträge: 1.104
Standard

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;
gesetzt. Ist es jetzt local?
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).
Drunken Officer ist offline   Mit Zitat antworten
Antwort

Stichworte
script erstellen, scripting


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
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


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