Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 09.03.2013, 16:33   #1 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard 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";
Der erste Parameter ist der Name des Fahrzeugs, der Zweite die Respawnzeit nach der Zerstörung und der dritte die Respawnzeit nachdem das Fahrzeug zurückgelassen wurde.
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.
Angehängte Dateien
Dateityp: zip vehicle_respawn.Stratis.zip (1,7 KB, 84x aufgerufen)

Geändert von JoeJoe87577 (09.03.2013 um 16:40 Uhr).
JoeJoe87577 ist offline  
Alt 09.03.2013, 18:32   #2 (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

Zitat von JoeJoe87577 Beitrag anzeigen

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.

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}
 }
Edit: Fehler in dieser Zeile:

//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).
Vienna ist offline  
Alt 10.03.2013, 17:39   #3 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Registriert seit: 16.07.2008
Beiträge: 2.692
Standard

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ß
__________________
Marscl ist offline  
Alt 10.03.2013, 19:30   #4 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

Ah gut das du das gemerkt hast . Da steht ein Pfad fest im Script, den muss ich noch ändern. Abhilfe bis dahin, das Script in deinem Missionsordner in den Ordner scripts packen.
JoeJoe87577 ist offline  
Alt 11.03.2013, 18:41   #5 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

So ich hab das Script angepasst und ein Kommentar eingefügt, welche Zeile mein ändern muss um einen eigenen Scriptordner zu verwenden.
Angehängte Dateien
Dateityp: zip vehicle_respawn.Stratis.zip (1,8 KB, 54x aufgerufen)
JoeJoe87577 ist offline  
Alt 11.03.2013, 21:18   #6 (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 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
   }
 }
Vienna ist offline  
Alt 12.03.2013, 00:06   #7 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge2.500 Beiträge
 
Registriert seit: 16.07.2008
Beiträge: 2.692
Standard

Was muss ich machen damit dass Fahrzeug nur neu gespawnt wird wenn es zerstört wurde?
__________________
Marscl ist offline  
Alt 12.03.2013, 09:53   #8 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Tajin
 
Registriert seit: 17.01.2008
Beiträge: 267
Standard

Kannste in dem Fall nicht sogar einfach die Standardfunktion verwenden?

http://community.bistudio.com/wiki/respawnVehicle
__________________
Tajin ist offline  
Alt 12.03.2013, 10:48   #9 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

Nicht wirklich, wenn man RespawnVehicle benutzt landet das Fahrzeug bei einem Zentralen marker und nicht an irgendeiner gewünschten Position. Da kann ich auch mein Script nehmen.
JoeJoe87577 ist offline  
Alt 12.03.2013, 11:54   #10 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Tajin
 
Registriert seit: 17.01.2008
Beiträge: 267
Standard

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:
if (isServerthen {
    
_obj _this select 0;
    
_time _this select 1;
    
_delay _this select 2;
    
_count _this select 3;
    
_init _this select 4;
    
_name vehicleVarName _obj;
    
    
_pos getPos _obj;
    
_dmg getDamage _obj;
    
_vup vectorUp _obj;
    
_vdir vectorDir _obj;
    
_fuel fuel _obj;
    
_fire canFire _obj;
    
_type typeOf _obj;
    
    
_count 0;
    
    for [{
_loop=0},{(_count >= _delay)},{_loop=_loop}] do 
    {
    
        if ({
alive _xcount crew _obj 0then {
            
_count 0;
        } else {
            if (!
canMove _objthen {
                
_count _count 2;
            };
            if ((
getPos _obj distance _pos) > 10then {
                
_count _count 1;
            };
            if (
_fire != canFire _objthen {
                
_count _count 1;
            };    
            if (
damage _obj 0.95then {
                
_count _count 3;
            };    
        };
        
sleep 1;
    };
    
    
deleteVehicle _obj;
    
sleep _time;
    
    if (
_count != 0then {
        
_count _count 1;
        
_new _type createVehicle _pos;
        
_new setPos _pos;
        
_new setVectorDirAndUp [_vdir,_vup];
        
_new setDamage _dmg;
        
_new setFuel _fuel;
        
_new setVehicleInit format ["nul=[this,%1,%2,%3,%4] execVM 't-respawn.sqf';%5 = this;%4",_time,_delay,_count,_init,_name];
        
processInitCommands;
    };
}; 
In dem Fall respawnt das Fahrzeug unterschiedlich schnell wieder, jenachdem ob es kaputt ist, nichtmehr schiessen kann, bewegungsunfähig ist oder einfach irgendwo stehen gelassen wurde.

Wenn du also an dieser Stelle die Zahlen veränderst, kannst du diese Bedingungen beliebig anpassen:
PHP-Code:
            if (!canMove _objthen {
                
_count _count 2;
            };
            if ((
getPos _obj distance _pos) > 10then {
                
_count _count 1;
            };
            if (
_fire != canFire _objthen {
                
_count _count 1;
            };    
            if (
damage _obj 0.95then {
                
_count _count 3;
            }; 
Wenn eine Respawnzeit von 30 sekunden eingestellt ist, respawnt das Fahrzeut in dem Fall hier nach 30 sekunden wenn es stehen gelassen wurde.
Ist es zerstört, spawnt es bereits nach 10 sekunden. (sollte selbsterklärend sein)
__________________
Tajin ist offline  
Alt 12.03.2013, 15:11   #11 (permalink)
10 Jahre hx3
500 Beiträge
 
Registriert seit: 13.04.2003
Beiträge: 761
Standard

Ah sehr genial Tajin. Genau das, was ich für das Clan-ArmA-III-Bootcamp benötige.
Danke dafür !
[HSP] NoFu ist offline  
Alt 12.03.2013, 15:20   #12 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Tajin
 
Registriert seit: 17.01.2008
Beiträge: 267
Standard

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.
__________________
Tajin ist offline  
Alt 12.03.2013, 16:06   #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

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
  }
 }
Vienna ist offline  
 

Stichworte
fahrzeug hervorbringen, vehicle respawn


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


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 117 118 119