PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage [distance]


Ghost_Aut
17.02.2009, 04:26
Ich habe ein problem mit der distance!

#test
?Player distance Obj1<50: goto "test1"
~1
goto "test"

#test1
[] exec "scripts\test.sqs"
~0.1
exit

Das problem ist das es zwar beim spieler der den server macht geht aber
bei den mitspielern nicht anspricht!!

Könnte da mir vielleicht jemand helfen wie ich das problem lösen könnte!

LG: Ghost

Garstiger Hobbit
17.02.2009, 08:37
Nun das ist eine localitätsfrage, da dies ein spielerscript ist musst du es auch vom Spieler aus öffnen,sonst funktioniert das nur beim Spieler der den Server macht.

Ich weiß ja nun nicht wo bzw wann du dieses script öffnest dann könnte ich dir sagen wie du es machen kannst.

Ghost_Aut
17.02.2009, 15:49
Zum Beispiel, das script mit der Player distance lauft am anfang der Mission; als schleife bis sich ein spieler 50M, an das obj1 nähert dann solte
es aktivirtwerden!

Vienna
17.02.2009, 17:40
Das geht einfach im Editor mit einem Auslöser, die sind für alle Spieler aktiv:

Bedingung: Player distance Obj1 < 50
BeiAkt.: [] exec "scripts\test.sqs"

Ghost_Aut
17.02.2009, 18:57
Na Hallo Vienna, ja habe ich schon versucht geht aber leider nicht nur bei den spieler der den server machte!

Und es solte auch auf den decatserver funktionieren!

Bedingung: Player distance Obj1 < 50
BeiAkt.: obj1=true; [] exec "scripts\test.sqs"

Versucht aber leider kein erfolg!

Lg: Ghost

Vienna
17.02.2009, 19:06
Da habe ich dich falsch verstanden. Mein Vorschlag von hier sollte auch bei dir funktionieren:
http://hx3.de/editing-139/trigger-ki-binden-15794/

Edit: dir genügt wahrscheinlich die Art der Bedingung

Bedingung: call{_a=false;{if(NameZielperson distance _x < 10)then{_a=true}}forEach thislist;_a}

Ghost_Aut
18.02.2009, 02:13
Na Hallo Vienna!
Ja ich weiss schon was du meinst, ist auch ne gute not lösung mit einem auslöser durch aktivirung der seite, aber ist nicht ganz das was ich suche
leider!

Andere frage wie kann ich über ein script jeden einzelnen spieler über distance zu einen Obj ansprechen ??

:(LG: Ghost

Vienna
18.02.2009, 10:02
Ich verstehe nicht was du da genau machen willst. Nochmal mit Auslösern:


Wenn es nur der auslösende Spieler zu wissen braucht und das Skript nur bei ihm startet, dann ist eben das die Lösung:

Bedingung: Player distance Obj1 < 50
BeiAkt.: [Player] exec "scripts\test.sqs"


Wenn es alle Spieler wissen sollen wer ausgelöst hat und bei allen Spielern das Skript startet, dann halt so:

Bedingung: call{_a=false;{if(_x distance Obj1 < 50)then{_a=true;DerAuslösendeSpieler=_x}}forEach thislist;_a}
BeiAkt.: [DerAuslösendeSpieler] exec "scripts\test.sqs"


Eine andere Lösung wenn für alle das Skript starten soll:

InDistance = false (diese Variable muss bei allen Spielern gesetzt sein)

Bedingung: Player distance Obj1 < 50 OR InDistance
BeiAkt.: InDistance = true;publicVariable "InDistance";[] exec"scripts\test.sqs"

publicVariable setzt die Variable auf allen PC in neuen Zustand. publicVariable - Bohemia Interactive Community (http://community.bistudio.com/wiki/publicVariable)



Es könnte auch so gehen (der Befehl ist neu musst du testen):

InDistance = false
"InDistance" addPublicVariableEventHandler {if(_this select 1)then{[] exec"scripts\test.sqs"}}

Bedingung: Player distance Obj1 < 50
BeiAkt.: InDistance = true

Ghost_Aut
18.02.2009, 12:53
Das Könnte gehn muss ich mal versuch, zum glück hab ich einen 2PC das ich es testen kann!


Bedingung: Player distance Obj1 < 50 OR InDistance
BeiAkt.: InDistance = true;publicVariable "InDistance";[] exec"scripts\test.sqs"


Ich möchte mich auf jeden fall mal bedanken für deine Mühe und Tipps Vienna und dein LaserAirstrike_V102 script ist echt Gut gemacht! Hoffe es
stört dich nicht wenn ich es mit einbaue mit dem GeschossCam Script!!

LG: Ghost

Ghost_Aut
18.02.2009, 13:39
Na Hallo Vienna !

ich dachte ich mach mal kurz ein Beispiel script das du dir ein bild machen kannst was ich genau meine, wennst lust und liebe hast kannst du es dir ja mal gerne anschauen ob ich so in der richtung richtig liege wehr echt nett Thx!

LG: Ghost

Mr-Murray
18.02.2009, 14:19
Bitte die threads themenbezogen benennen ! ! !

Vienna
18.02.2009, 15:22
Du verwendest in deinem Skript Objektnamen als Variable, das geht nicht!!!!!

Dann vermeide nach Möglichkeit Goto Sprünge. Das ist unübersichtlich und verwirrt nur.

Ich gehe davon aus, dass du den zweiten Skriptaufruf erst machen willst, nachdem der erste Aufruf erfolgt ist.


Zu Beginn solltest du deine Variablen initialisieren. z.B.

Next1=true
Next2=false
Next3=false
Ende=false

Dann die Schleife:

#Loop

if (Next1 AND player distance Objekt1 < 5000) then {Next1=false;publicVariable "Next1";Next2=true;publicVariable "Next2";[] exec "scripts\heli1.sqs"}

if (Next2 AND player distance Objekt1 < 4000) then {Next2=false;publicVariable "Next2";Next3=true;publicVariable "Next3";[] exec "scripts\heli2.sqs"}

if (Next3 AND (player distance Objekt2 < 2000 OR !alive Objekt2)) then {Ende=true;publicVariable "Ende";}

if (Ende) then {[] exec "scripts\konvoi.sqs"; exit}

~1
goto "Loop"

Das ersetzt jetzt nicht dein Skript, sondern soll dir nur zeigen wie du es programmieren sollst.

Bei den Skripts ist zu überpfüfen, ob wie wirklich von allen Spielern aktiviert werden sollen. Wenn darin z.B. 10 Einheiten erstellt werden, dann erstellt jeder Spieler diese Einheiten. Bei zwei spielern hättest du z.B. 20 und bei fünf Spielern 50 Einheiten.

Ghost_Aut
18.02.2009, 19:22
Na Hallo Vienna!

Super möchte mich mal bedanken bei dir Vienna, hast mir sehr geholfen wenn das so klappt, ich versuche schon 6 Monate herum zu Bastelln mit der distance!

Naja kenn mich ja auch nicht wirklich mit scripts aus leider!
aber du gerne hobimessieg herum experimentieren so zu sagen danke noch mal!!

LG: Ghost

Gelöschter Benutzer
18.02.2009, 21:45
Bitte die threads themenbezogen benennen ! ! !

Jup, habs mal geändert. :)