HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Frage zum Editing (Vehicle Respawn) (https://hx3.de/editing-scripting-167/frage-editing-vehicle-respawn-16522/)

Low 02.06.2009 17:03

Frage zum Editing (Vehicle Respawn)
 
Hi Leute

Also vorweg, ich bin erst relativ jungfreulich im Umgang mit Editing, deswegen habt ein wenig Geduld mit mir :) (BETRIFFT ARMA 2)


Folgendes Problem: Ich versuch schon die ganze Zeit auf der Karte Fahrzeuge (A10) so hinnzustellen das diese wieder am Startplatz respawnen. Gestern hatte ich es kurz aber dann ging es plötzlich nicht mehr.

Folgendes habe ich gemacht:

Fahrzeug Leer platziert

dann einen Auslöser platziert wie folgt:
Name: Veh2Guard
Bedingung: !Canmove Veh2
Bei Aktivierung: [Veh2,"A10",Veh2Pos,360,2,10,1,0,0]exec"vehicle-respawn.sqs"
Achse a/b: 0/0

Und dann nochmal einen Auslöser abgeändert auf eine Logik
Name: Veh2Pos
Bei Bedingung habe ich this stehen gelassen


Eine vehicle-respawn.sqs habe ich auch erstellt und in diese das hier eingefügt
?!(Local Server): exit
_vehicle = _this select 0
_vehicleClass = _this select 1
_respawnArea = _this select 2
_azimutCode = _this select 3
_respawnDelay = _this select 4
_respawnrate = _this select 5
_deletevehicle = _this select 6
_staticrespawn = _this select 7
_deleteeffect = _this select 8
_counter = 0
#Start
~1
?(Canmove _Vehicle) : goto "Start"
;// Respawnrate (Number of Respawns)
? (_counter >= _respawnrate) : exit
_counter = _counter +1
;// Staticposition (0=Flexible/1=Static)
? (_staticrespawn == 0) : _respawnArea setpos getpos _vehicle
? (_staticrespawn == 0) : _VehAzimut = getdir _vehicle
~_respawnDelay
;// Deletevehicle (0=No Delete/1=Delete)
? (_deletevehicle == 0) : goto "Respawn"
deleteVehicle _vehicle
;// Delete effect
? (_deleteeffect == 0) : goto "Respawn"
_bomb="M_Javelin_AT" createVehicle [0,0,1000]
_bomb setpos getpos _vehicle
;// Respawn
#Respawn
~2
_vehicle = _vehicleClass createVehicle getpos _respawnArea
_vehicle setdir _azimutCode
? (_staticrespawn == 0) : _vehicle setdir _VehAzimut
goto "Start


Die Fahrzeuge respawnen zwar aber leider immer an ihrem Todespunkt, bzw wo es abgestürtzt ist und ich weiß einfach nicht mehr an was es liegen könnte.

Bitte um Hilfe
MFG LOW

[HSP] NoFu 02.06.2009 17:17

Ach. Das geht viel einfacher. Ich habe da mal ein Script.
Sobald ich Feierabend habe, werde ich es hier reinschreiben.

Das hat auch den Vorteil, das die Fahrzeuge an den Erstellungs-Platz respawnen, sobald das Benzin leer ist oder die Fahrzeuge im Eimer sind.

Low 02.06.2009 17:34

Das wäre super

Danke schon mal im voraus



PS: aber trotzdem ginge es auch so wie ich es oben probiert habe?bzw an was es liegen könnte weißt du auch nicht zufällig. Würd mich nur interessieren um es schön langsam zu lernen


MFG Low

[HSP] NoFu 02.06.2009 21:09

Sooo. Wie versprochen kommt hier das Script.

Hier erstmal die "respawn_vehicle.sqs":

Code:

? !(local server) : exit


_vehicle = vehicle _this
_startpos = getpos _vehicle
_direction = getdir _vehicle
_typ = typeOf _this


#loop
~10
? (getdammage _vehicle > 0.98) : goto "checkdamage"
? !(canMove _vehicle) : goto "checkmove"
? (fuel _vehicle == 0) : goto "checkfuel"
goto "loop"


#checkdamage
~10
? (getdammage _vehicle > 0.98) : goto "destruct"
goto "loop"


#checkmove
~10
? (getdammage _vehicle == 1) : goto "destruct"
~120
? (canMove _vehicle) : goto "loop"
goto "destruct"


#checkfuel
~10
? (getdammage _vehicle == 1) : goto "destruct"
~120
? (fuel _vehicle > 0) : goto "loop"
goto "destruct"


#destruct
? (getdammage _vehicle < 1) : _vehicle setdammage 1
~30
deletevehicle _vehicle
goto "createnew"


#createnew
~10
_new = _typ createVehicle [_startpos select 0, _startpos select 1,0]
_new setdir _direction
_new exec "respawn_vehicle.sqs"

exit

In die Init der zu respawnenden Fahrzeuge schreibst Du:

Code:

this exec "respawn_vehicle.sqs"
Ganz wichtig ist auch, das Du auf der Karte eine "Spiele-Logic"
mit dem Namen server erstellst.
Ansonsten kann es vorkommen, das im Multiplayer plötzlich mehr als ein Fahrzeug respawnt werden. Schaut zwar lustig aus, erfüllt aber nich den gewünschten Zweck. :schlau:

Hoffe, ich konnte helfen.

Fogu 03.06.2009 00:20

@[HSP] NoFu

echt cool das du dein script hier postest:daumen:

könntest du mir noch sagen wo man einstellt das dass vehicle erst nach sagen wir mal 120sec oder so spawnt?:angel:

thnx

Low 03.06.2009 04:09

Echt super danke nochmal, hat sehr viel geholfen und funktioniert *freu*

@Fogu

Ich habe ein wenig herumgespeilt und beim ändern auf jeweils das hier

? !(local server) : exit


_vehicle = vehicle _this
_startpos = getpos _vehicle
_direction = getdir _vehicle
_typ = typeOf _this


#loop
~2
? (getdammage _vehicle > 0.98) : goto "checkdamage"
? !(canMove _vehicle) : goto "checkmove"
? (fuel _vehicle == 0) : goto "checkfuel"
goto "loop"


#checkdamage
~2
? (getdammage _vehicle > 0.98) : goto "destruct"
goto "loop"


#checkmove
~2
? (getdammage _vehicle == 1) : goto "destruct"
~120
? (canMove _vehicle) : goto "loop"
goto "destruct"


#checkfuel
~2
? (getdammage _vehicle == 1) : goto "destruct"
~120
? (fuel _vehicle > 0) : goto "loop"
goto "destruct"


#destruct
? (getdammage _vehicle < 1) : _vehicle setdammage 1
~2
deletevehicle _vehicle
goto "createnew"


#createnew
~2
_new = _typ createVehicle [_startpos select 0, _startpos select 1,0]
_new setdir _direction
_new exec "respawn_vehicle.sqs"

exit


ist der Flieger nach 2 sec wieder aufgetaucht. habe aber sicher eines zuviel eingestellt od umsonst

[HSP] NoFu 03.06.2009 07:10

Zitat:

Zitat von Fogu (Beitrag 239353)
@[HSP] NoFu

echt cool das du dein script hier postest:daumen:

könntest du mir noch sagen wo man einstellt das dass vehicle erst nach sagen wir mal 120sec oder so spawnt?:angel:

thnx

Die Zahlen, die der gute Low einen Post höher makiert hat. Das sind die Werte, mit denen Du rumspielen kannst. :daumen:

Fogu 03.06.2009 09:36

hatte es mir ja fast schon gedacht.......:rolleyes:
thnx

Althalus 21.08.2009 20:00

wie bekomme ich das skript marker bezogen hin? also ich habe vor meine einheiten während der mission versetzen zu lassen, aber mit dem vehirespawn script ist es so das die fahrzeuge da spawnen wo sie am anfang der map aufgestellt waren, also fernab jeglichen spielgeschehens ^^

Althalus 22.08.2009 11:01

Code:

F1="T34" createVehicle getMarkerPos "Base3";
F2="UAZ_AGS30_CDF" createVehicle getMarkerPos "Base4";
F3="UAZ_MG_CDF" createVehicle getMarkerPos "Base5";
F4="UAZ_AGS30_CDF" createVehicle getMarkerPos "Base6";
F5="UAZ_MG_CDF" createVehicle getMarkerPos "Base7";
F6="UAZ_MG_CDF" createVehicle getMarkerPos "Base8";

Mit dem Code kommen schonmal alle Fahrzeuge auf die Position wo sie erstellt werden sollen, zwar nciht exakt aber das ist mir erstmal nicht so wichtig.
Wenn ich jedoch das hier noch mit eintippe
Code:

F1="T34" createVehicle getMarkerPos "Base3"; F1 execVM "sqf\vrs.sqf"];
 F2="UAZ_AGS30_CDF" createVehicle getMarkerPos "Base4"; F2 execVM "sqf\vrs.sqf"];
 F3="UAZ_MG_CDF" createVehicle getMarkerPos "Base5"; F3 execVM "sqf\vrs.sqf"];
 F4="UAZ_AGS30_CDF" createVehicle getMarkerPos "Base6"; F4 execVM "sqf\vrs.sqf"];
 F5="UAZ_MG_CDF" createVehicle getMarkerPos "Base7"; F5 execVM "sqf\vrs.sqf"];
 F6="UAZ_MG_CDF" createVehicle getMarkerPos "Base8"; F6 execVM "sqf\vrs.sqf"];

Dann kommt nur das erste Fahrzeug... Jedoch funktioniert das respawn script da. Nur die anderen Fahrzeuge kommen nciht -.- was ist falsch an der zeile? Laut Debug verlangt er irgendwo ein ";" aber k.A. wo ich das noch eintragen soll.

Headios 22.08.2009 12:23

Ich habe das mal getestet.

Meine Init.sqs, damit die Fahrzeuge zu Beginn vorhanden sind:
Code:

F1="T34" createVehicle getMarkerPos "Base3"; F1 exec "respawn_vehicle.sqs";
F2="UAZ_AGS30_CDF" createVehicle getMarkerPos "Base4"; F2 exec "respawn_vehicle.sqs";
F3="UAZ_MG_CDF" createVehicle getMarkerPos "Base5"; F3 exec "respawn_vehicle.sqs";
F4="UAZ_AGS30_CDF" createVehicle getMarkerPos "Base6"; F4 exec "respawn_vehicle.sqs";
F5="UAZ_MG_CDF" createVehicle getMarkerPos "Base7"; F5 exec "respawn_vehicle.sqs";
F6="UAZ_MG_CDF" createVehicle getMarkerPos "Base8"; F6 exec "respawn_vehicle.sqs";

Dann das Script "respawn_vehicle.sqs":

Code:

? !(local server) : exit


_vehicle = vehicle _this
_startpos = getpos _vehicle
_direction = getdir _vehicle
_typ = typeOf _this


#loop
~10
? (getdammage _vehicle > 0.98) : goto "checkdamage"
? !(canMove _vehicle) : goto "checkmove"
? (fuel _vehicle == 0) : goto "checkfuel"
goto "loop"


#checkdamage
~10
? (getdammage _vehicle > 0.98) : goto "destruct"
goto "loop"


#checkmove
~10
? (getdammage _vehicle == 1) : goto "destruct"
~120
? (canMove _vehicle) : goto "loop"
goto "destruct"


#checkfuel
~10
? (getdammage _vehicle == 1) : goto "destruct"
~120
? (fuel _vehicle > 0) : goto "loop"
goto "destruct"


#destruct
? (getdammage _vehicle < 1) : _vehicle setdammage 1
~30
deletevehicle _vehicle
goto "createnew"


#createnew
~10
_new = _typ createVehicle [_startpos select 0, _startpos select 1,0]
_new setdir _direction
_new exec "respawn_vehicle.sqs"

exit

Wenn ich nun F4 zerstöre, respawnt es an der Stelle, wo ich den Marker Base6 erstellt habe. Zerstöre ich F3, respawnt es beim Marker Base5.

Probier das doch mal aus, ich hab es eben für dich ausprobiert und es ging problemlos.

Gruß,
Headios

Althalus 22.08.2009 12:39

toll.. ich hab zuviel eingetragen :D darauf erstmal kommen. Also beim Aufruf der respawn.sqs hab ich zuviel eingetragen nagut :) vielen dank für die hilfe. übrigens geht es auch in der sqf, das die erst erstellt werden wenn die bedingung erfüllt ist dafür.

Anemia 27.08.2009 20:09

Zitat:

Zitat von [HSP] NoFu (Beitrag 239298)
Ganz wichtig ist auch, das Du auf der Karte eine "Spiele-Logic"
mit dem Namen server erstellst.
Ansonsten kann es vorkommen, das im Multiplayer plötzlich mehr als ein Fahrzeug respawnt werden. Schaut zwar lustig aus, erfüllt aber nich den gewünschten Zweck. :schlau:

Hoffe, ich konnte helfen.

Hmmm also ich habe eine spiel-logic erstellt mit dem namen server ... muss da nichts drin stehen ?!

wie dem auch sei .. es werden nachdem eines der fahrzeuge zerstört wurden dennoch mehr fahrzeuge respawnt ?!?!?!

kann mir jemand helfen ?

Vocoder 27.08.2009 21:30

Das Script sollte nur auf dem Server laufen, klassisches Lokalität Problem! ;)

Denk ich mal!

[HSP] NoFu 27.08.2009 22:38

So Männers,

ich hab hier mal was für Euch. Es stammt aus dem ArmA-Editing Guide DE und somit aus der Feder von Mr-Murray.

(Mr-Murray bitte sei mir nicht böse, das ich hier aus Deinem Buch zitiere. ^^)*prost*

Zitat:

Logik Server bzw. Logik AI
Bei Mehrspielermissionen setzt man grundsätzlich eine Logik auf die Karte, die Server heißt. Eine alternative Variante wäre AI, wie BI sie bezeichnet, was aber grundsätzlich keinen Unterschied macht. Also bleibt man dabei, die Logik mit dem Namen Server zu versehen. Diese Logik wird nur vom Server erstellt und taucht auf dem Client nicht auf. Diese gibt an, dass das System Server ist. Mit folgenden Befehlen kann man also nun festlegen, was auf dem Server ausgeführt werden soll und was nicht.

?!(local server):exit
Taucht diese Syntax am Anfang eines Skriptes auf, wird das Skript nur auf dem Server ausgeführt. Das System macht hierbei keinen Unterschied zwischen einem Lokalen Host und einem Dedicated Server. Das Skript wird nun auf jeden Fall bei beiden Varianten ganz normal ausgeführt.
Diese Syntax wird grundsätzlich verwendet. Es wird also serverseitig bzw. global gearbeitet, was in der Regel am meisten Sinn macht, da ja die meisten Informationen auch an die Mitspieler weitergegeben werden müssen. Wir arbeiten also grundsätzlich global!
Zitat ende.


Ich hoffe,ich konnte damit helfen.

Beste Grüße
NoFu

P.S. @ Anemia: Ich weiß nicht ob es Dein Blog ist, der in Deiner Sig. steht. Aber vielen Dank für den Link. Die ArmA-Module sind da echt gut erklärt. :danke:

Asso-Loki 28.08.2009 00:32

Das mit der Logik-Unit mit Namen Server könnt ihr euch - schon seit ArmA - sparen. Dafür gibts den Befehl "isServer".
Wenn man Einheiten in einer MP-Mission spawnen lässt so werden sie auf jedem Rechner gespawnt auf den das jeweilige Script läuft. Da man aber meistens eine Einheit ja nur einmal spawnen will, sorgt man dafür dass das jeweilige Script nur auf dem Server ausgeführt wird. Deshalb am Anfang eines sqf-Scripts folgenden Eintrag:
Code:

if (! isServer) exitWith {};
Alternativ halt für sqs:
Code:

? (! isServer): exit
Ich empfehle übrigens Jedem doch lieber langsam von den sqs-Scripts auf sqf-Scripts umzusteigen. Das Umgewöhnen geht schneller als man denkt und man hat viel mehr Möglichkeiten.

[HSP] NoFu 28.08.2009 00:39

@ Asso-Loki:

Kannst Du einem altem Scripter mal helfen und mir sagen, wo ich nachlesen kann, was die Änderungen im sqf sind und warum ich am Besten umsteigen sollte ?

Wenn ich mein Buch (Editing Guide) richtig durchblättere, ist das hier alles sqs oder ?

[HSP] NoFu 28.08.2009 07:33

Habe hier mal was bei BIS zum Thema SQF gefunden.


SQS to SQF conversion

Irgendwie ist diese SQF-Sache total an mir vorbei gegangen. Wurde das schon zusammen mit ArmA I eingeführt ?

Anemia 28.08.2009 08:37

Zitat:

Zitat von [HSP] NoFu (Beitrag 263546)

P.S. @ Anemia: Ich weiß nicht ob es Dein Blog ist, der in Deiner Sig. steht. Aber vielen Dank für den Link. Die ArmA-Module sind da echt gut erklärt. :danke:

Jo .. is meiner :naughty:

:danke: fürs Lob

svenjost 28.08.2009 09:27

Mal eine Frage hineinwerf ....

Warum arbeitet Ihr nicht mit "waituntil"

Warum mit Schleifen?


Gruss Sven


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.

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