09.03.2013, 16:33 | #1 (permalink) |
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
|
Respawnscript für Fahrzeuge
Hallo zusammen,
im Zuge meiner Missionsentwicklung habe ich ein Respawnscript geschrieben, mit dem Fahrzeuge nachdem sie zerstört oder zurückgelassen wurden einfach neu spawnen lassen kann. Das ist mein erstes Script das ich veröffentliche und es gibt sicherlich noch einiges zum verbessern. Zur Benutzung: Einfach in die Initzeile eines Fahrzeuges folgenden Aufruf: Code:
nul = [this, 15,60] execVM "vehicle_respawn.sqf"; Das Script sollte auf Dedizierten Servern funktionieren. Bekannte Fehler: - Wenn Fahrzeuge unterhalb von Gebäuden (z.B. Tankstellen) oder auf schrägem Terrain gesetzt werden, spawnen sie erneut ein paar Meter weiter weg. Eine Beispielmission hängt mit dran. Edit: ihr dürft das Script natürlich ohne Rückfrage verwenden und bearbeiten, aber bitte meinen Namen als Ersteller drinlassen. Geändert von JoeJoe87577 (09.03.2013 um 16:40 Uhr). |
09.03.2013, 18:32 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Das ist so gewollt, damit Objekte nicht mit anderen Objekten überschneiden, wie es z.B. mit setPos geschehen kann. Es müsste reichen so ein Skript einmal aufzurufen. Für diese Anwendung ist der Befehl waitUntil {} recht brauchbar. Code:
Position und Richtung in der Basis sichern; while {isServer} do { //warten bis Fahrzeug besetzt waitUntil {count crew _vehicle > 0}; //warten bis keine Crew im Fahrzeug (Tote werden nicht gezählt) waitUntil {{alive _x} count crew _vehicle == 0}; Wartezeit initialisieren; //warten bis Zeit abgelaufen oder Fahrzeug wieder besetzt waitUntil {Zeit abgelaufen or count crew _vehicle > 0}; if (Zeit abgelaufen) then {Fahrzeug entfernen und neu erstellen} } //warten bis Zeit abgelaufen oder Fahrzeug wieder besetzt waitUntil {Zeit abgelaufen or count crew _vehicle > 0}; ...or {alive _x} count crew _vehicle > 0 ist zu verwenden oder man entfernt vor der Abfrage eventuelle Tote aus dem Fahrzeug; {if(!alive _x)then{moveOut _x}}forEach crew _vehicle; Geändert von Vienna (09.03.2013 um 19:10 Uhr). |
10.03.2013, 17:39 | #3 (permalink) |
Registriert seit: 16.07.2008
Beiträge: 2.692
|
Hey JoeJoe,
hab dein Script für meine Mission mal ausprobiert. Funktioniert soweit auch ganz gut, nur bekomme ich wenn ein Fahrzeug zerstört wurde die Fehlermeldung: "Script scripts\verhicle_respawn.sqf not found", das Fahrzeug wird allerdings trotzdem neu gespawnt. Beim spawnen nach dem verlassen eines Fahrzeuges erscheint die Fehlermeldung nicht. Gruß |
11.03.2013, 21:18 | #6 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Du erstellst in der Schleife deines Skripts Abfragen, für welches es mit den Befehlen von Arma einfachere Möglichkeiten gibt.
Code:
// Fahrzeug-Respawn wenn stark beschädigt oder unbesetzt. [Vienna 11.03.2013] // Einmaliger Aufruf. Läuft beim Server. // // Parameter: FahrzeugObjekt // Respawnzeit bei starker Beschädigung in Sekunden // Rewpawnzeit wenn unbesetzt in Sekunden // // Aufrufbeispiel in der Initialisierungszeile des Fahrzeuges: // temp = [this, 60, 120] execVM "Fahrzeug_Respawn.sqf"; private ["_vehicle","_warten1","_warten2","_type","_pos","_dir","_zeit"]; //Parameter übernehmen _vehicle = _this select 0; _warten1 = _this select 1; _warten2 = _this select 2; //Fahrzeugtype sowie Position und Ausrichtung vom Aufstellungsort speichern. _type = typeOf _vehicle; _pos = getPos _vehicle; _dir = getDir _vehicle; //Endlosschleife while {isServer} do { waitUntil {count crew _vehicle > 0 or getDammage _vehicle > 0.8}; //warten bis Fahrzeug besetzt/beschädigt waitUntil {{alive _x} count crew _vehicle == 0}; //warten bis keine Crew im Fahrzeug (Tote werden nicht gezählt) sleep 5; //Pause damit Tote nicht zu schnell verschwinden {if(!alive _x)then{_x setPos [0,0];deleteVehicle _x}}forEach crew _vehicle; // Tote Crew löschen if (getDammage _vehicle > 0.8) then //Wartezeit wenn Fahrzeug stark beschädigt {_zeit = time + _warten1 - 5} else //Wartezeit wenn Fahrzeug unbesetzt {_zeit = time + _warten2 - 5}; waitUntil {time > _zeit or count crew _vehicle > 0}; //warten bis Zeit abgelaufen oder Fahrzeug wieder besetzt if (time > _zeit) then //wenn Zeitablauf, dann neues Fahrzeug an Startposition erstellen { deleteVehicle _vehicle; _vehicle = _type createVehicle _pos; _vehicle setDir _dir } } |
12.03.2013, 09:53 | #8 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Kannste in dem Fall nicht sogar einfach die Standardfunktion verwenden?
http://community.bistudio.com/wiki/respawnVehicle
__________________
|
12.03.2013, 11:54 | #10 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Ach stimmt da war ja was.
Könnte man aber mit nem Respawn Eventhandler lösen und das Fahrzeug dann an die gewünschte Stelle bewegen. Aber ok wenn es dann schon so anfängt macht man sich wohl doch einfach gleich nen eigenes Script. Hier ist noch nen altes Fahrzeug-spawnscript das ich noch rumliegen hatte: PHP-Code:
Wenn du also an dieser Stelle die Zahlen veränderst, kannst du diese Bedingungen beliebig anpassen: PHP-Code:
Ist es zerstört, spawnt es bereits nach 10 sekunden. (sollte selbsterklärend sein)
__________________
|
12.03.2013, 15:20 | #12 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Keine Ursache.
Hab grad gesehen das es den original Thread davon sogar noch gibt: Vehicle Respawn with Name & Init Kaum zu glauben wie lang das schonwieder her ist.
__________________
|
12.03.2013, 16:06 | #13 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Wie aus Tajins Post ersichtlich, sind Fahrzeuge oft schon unbrauchbar bevor sie zerstört wurden. Ein Auto kann z.B. durch einen zerschossenen Reifen bereits unbrauchbar sein. Wobei die Beschädigung unter 5% liegt.
Folgend ein Skirpt welches bereits nicht mehr brauchbare Fahrzeuge erneuert. canFire wurde dabei nicht berücksichtigt, weil hier bei einem unbesetzten Fahrzeug false angezeigt wird. Beim Skript-Aufruf ist auch einstellbar ob das alte Fahrzeug gelöscht werden soll und wie oft ein Respawn möglich ist. Skript Fahrzeug_Respawn_2.sqf Code:
// Fahrzeug-Respawn wenn Fahrzeug zerstört oder unlenkbar. [Vienna 12.03.2013] // Die neuen Fahrzeuge werden an der ursprünglichen Position erstellt. // Einmaliger Aufruf. Läuft beim Server. // // Parameter: FahrzeugObjekt // Zeit in Sekunden bis zum Respawn // unbrauchbares Fahrzeug löschen (true/false) // maximale Anzahl der neu zu erstelltenden Fahrzeuge // // Aufrufbeispiel in der Initialisierungszeile des Fahrzeuges: // temp = [this, 120, true, 5] execVM "Fahrzeug_Respawn_2.sqf"; private ["_vehicle","_respawnZeit","_entfernen","_respawnAnzahl","_type","_pos","_dir","_respawn"]; //Parameter übernehmen _vehicle = _this select 0; _respawnZeit = _this select 1; _entfernen = _this select 2; _respawnAnzahl = _this select 3; //Fahrzeugtype sowie Position und Ausrichtung vom Aufstellungsort speichern. _type = typeOf _vehicle; _pos = getPos _vehicle; _dir = getDir _vehicle; //Schleife bis maximale Anzahl erreicht. Letztes Fahrzeug wird, wenn gewollt, noch gelöscht. _respawn = 0; while {isServer and _respawn <= _respawnAnzahl} do { waitUntil {!canMove _vehicle or fuel _vehicle == 0}; //warten bis Fahrzeug zerstört oder unlenkbar waitUntil {{alive _x} count crew _vehicle == 0}; //warten bis keine Crew im Fahrzeug (Tote werden nicht gezählt) _vehicle lock true; //Fahrzeug sperren (kein Einsteigen möglich) sleep 5; //Pause damit Tote nicht zu schnell verschwinden {if(!alive _x)then{_x setPos [0,0];deleteVehicle _x}}forEach crew _vehicle; // Tote Crew löschen sleep (_respawnZeit - 5); //warten bis Respawnzeit um if (_entfernen) then {deleteVehicle _vehicle}; //Fahrzeug löschen, wenn gewollt. if (_respawn < _respawnAnzahl) then //neues Fahrzeug erstellen { _vehicle = _type createVehicle _pos; _vehicle setDir _dir; _respawn = _respawn + 1; sleep 1 } } |
Stichworte |
fahrzeug hervorbringen, vehicle respawn |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Alle waffen und Fahrzeuge. | Muffinknight | Multiplayer | 2 | 14.08.2012 17:25 |
SILVIE - ALICE Fahrzeuge | Anemia | Editing & Scripting | 7 | 25.12.2010 11:20 |
Mehr Leistung für Fahrzeuge und Hubschrauber? | der_Thomas | Editing & Scripting | 4 | 14.12.2010 10:05 |
Fahrzeuge nur bestimmte Personen zuweisen | Bowi | Editing & Scripting | 7 | 17.10.2010 10:38 |
Kit zum Fahrzeuge reparieren | Dr_Cox1911 | Editing & Scripting | 2 | 11.05.2010 15:19 |