Hallo,
wisst ihr, ob das BF- Alarm- Script mit dem Startscript aus der Angänger Mod kompatibel ist?
Hier die Scripte:
BF- Alarm
Spoiler
/**************************************************
** Berufsfeuerwehr-Alarmierungsscript by Wingman **
** Das Alarmierungsscript ist stark vereinfacht, **
** sodass auch anfänger es verstehen sollten. **
** Regeln entnehmen sie der Readme, bei der zu **
** beachten ist das sie aktuell ist. Auch **
** mündlich oder schriftlich ausgesprochene **
** Verbote gelten. -Wingman- **
**************************************************/
const char *Startpunkt = "VOName"; // Hier der Name des Virtuellen Objektes an dem die Personen starten sollen
const char *Fahrzeugname = "Fahrzeug"; // Hier den Namen des Fahrzeuges, in dem die Personen einsteigen sollen
const char *PersonenProto1 = "modrototypes/Persons/Fire Department/firefighternorm_upgrade2.e4p"; // Hier den Pfad zu einem Prototypen von denen Personen erstellt werden soll
const char *PersonenProto2 = "modrototypes/Persons/Fire Department/firefighterabc_upgraded2.e4p"; // Hier den Pfad zu einem Prototypen von denen Personen erstellt werden soll. Falls nicht benötigt frei lassen
const char *PersonenProto3 = "modrototypes/Persons/Fire Department/firefightermask_upgraded2.e4p"; // Hier den Pfad zu einem Prototypen von denen Personen erstellt werden soll. Falls nicht benötigt frei lassen
int AnzahlProto1 = 3; // Hier die Anzahl der Personen die vonm Prototyp 1 erstellt werden soll. Wenn keine erstellt werden sollen einfach eine 0.
int AnzahlProto2 = 2; // Hier die Anzahl der Personen die vonm Prototyp 2 erstellt werden soll. Wenn keine erstellt werden sollen einfach eine 0.
int AnzahlProto3 = 1; // Hier die Anzahl der Personen die vonm Prototyp 3 erstellt werden soll. Wenn keine erstellt werden sollen einfach eine 0.
int ZurEst = 0; // Hier kannst du einstellen ob das Fahrzeug direkt zur Einsatzstelle fahren soll oder ob es vom user gesteuert wird. 0 = Direkt. 1 = User.
int SoSiAn = 0; //Hier kannst du einstellen ob das Fahrzeug ein Sondersignal einschalten soll. Hierzu wird ein zusätzliches Script benötigt. 0 = An. 1 = Aus.
const char *SoSiScript = "VCmdSiren"; // Hier muss der Name des Commandscripts vom SoSi-Script rein. Falls vorhanden.
float WarteZeit = 5.f; //Hier kannst du die Wartezeit einstellen bis die Personen erscheinen und zu den fahrzeugen laufen.
Vector EPos;
const char *SoundPfad = "mod:Audio/Alarm.wav"; // Hier den Sound der bei der Alarmierung abgespielt werden soll. Falls keiner einfach frei lassen.
int TorAuf = 1; // Hier stellen sie ein ob ein tor geöffnet werden soll. 0 = auf. 1 = Nichts.
const char *TorName = "GateFZ1"; // Hier den Namen des Tores, das geöffnet werden soll.
const char *TorAniName = "open"; // Hier den Namen der Animation von dem Tor.
object AlarmFahrzeug1 : CommandScript
{
AlarmFahrzeug1()
{
SetIcon("IconName"); // Hier den Icon Namen
SetCursor("CursorName"); // Hier den Cursorname
if (ZurEst == 0)
SetValidTargets(ACTOR_STREET || ACTOR_FLOOR);
else
SetActivationByLeftClick(true);
}
bool CheckPossible(GameObject *Caller)
{
GameObjectList gol;
gol = Game::GetGameObjects(Fahrzeugname);
GameObject *go;
go = *gol.GetObject(0);
Vehicle v(go);
if (v.HasCommand("DUMMYFPSetFreeForAlertFalse"))
return false;
return true;
}
bool CheckTarget(GameObject *Caller, Actor *Target, int ChildID)
{
return true;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
GameObjectList gol;
gol = Game::GetGameObjects(Fahrzeugname);
GameObject *go;
go = *gol.GetObject(0);
Vehicle v(go);
ActorList al = Game::GetActors(Startpunkt);
Actor a = *al.GetActor(0);
Vector SP = a.GetPosition();
EPos = Game::GetCommandPos();
v.AssignCommand("DUMMYFPSetFreeForAlertFalse");
v.SetMaxPassengers((AnzahlProto1 + AnzahlProto2 + AnzahlProto3));
Audio:laySample(SoundPfad);
if (TorAuf == 0)
{
GameObjectList gol = Game::GetGameObjects(TorName);
GameObject *go1;
go1 = *gol.GetObject(0);
go1->PushActionSwitchAnim(ACTION_APPEND, TorAniName);
}
for (int i = 0; i < AnzahlProto1 || i < AnzahlProto2 || i < AnzahlProto3; i++)
{
if (i < AnzahlProto1)
{
Person p = Game::CreatePerson(PersonenProto1,"Unnamed");
p.PushActionShowHide(ACTION_NEWLIST, true);
p.SetRole(ROLE_SQUAD);
p.SetUpgradeLevel(3);
p.PushActionWait(ACTION_APPEND, WarteZeit);
Game::FindFreePosition(&p, SP, 100.f);
p.SetPosition(SP);
p.PushActionShowHide(ACTION_APPEND, false);
p.PushActionMove(ACTION_APPEND, v.GetPosition());
p.PushActionEnterCar(ACTION_APPEND, &v);
p.PushActionExecuteCommand(ACTION_APPEND, "FahrenAlarmFahrzeug1", &v, 0, false);
}
if (i < AnzahlProto2)
{
Person p = Game::CreatePerson(PersonenProto2,"Unnamed");
p.PushActionShowHide(ACTION_NEWLIST, true);
p.SetRole(ROLE_SQUAD);
p.SetUpgradeLevel(3);
p.PushActionWait(ACTION_APPEND, WarteZeit);
Game::FindFreePosition(&p, SP, 100.f);
p.SetPosition(SP);
p.PushActionShowHide(ACTION_APPEND, false);
p.PushActionMove(ACTION_APPEND, v.GetPosition());
p.PushActionEnterCar(ACTION_APPEND, &v);
p.PushActionExecuteCommand(ACTION_APPEND, "FahrenAlarmFahrzeug1", &v, 0, false);
}
if (i < AnzahlProto3)
{
Person p = Game::CreatePerson(PersonenProto3,"Unnamed");
p.PushActionShowHide(ACTION_NEWLIST, true);
p.SetRole(ROLE_SQUAD);
p.SetUpgradeLevel(3);
p.PushActionWait(ACTION_APPEND, WarteZeit);
Game::FindFreePosition(&p, SP, 100.f);
p.SetPosition(SP);
p.PushActionShowHide(ACTION_APPEND, false);
p.PushActionMove(ACTION_APPEND, v.GetPosition());
p.PushActionEnterCar(ACTION_APPEND, &v);
p.PushActionExecuteCommand(ACTION_APPEND, "FahrenAlarmFahrzeug1", &v, 0, false);
}
}
}
};
object FahrenAlarmFahrzeug1 : CommandScript
{
FahrenAlarmFahrzeug1()
{
SetIcon("IconName");
SetCursor("CursorName");
}
bool CheckPossible(GameObject *Caller)
{
return true;
}
bool CheckTarget(GameObject *Caller, Actor *Target, int ChildID)
{
return true;
}
void PushActions(GameObject *Caller, Actor *Target, int childID)
{
Person p(Caller);
Vehicle v(Target);
if (v.GetNumPassengers() == (AnzahlProto1 + AnzahlProto2 + AnzahlProto3))
{
if (ZurEst == 0)
v.PushActionMove(ACTION_APPEND, EPos);
if (SoSiAn == 0)
v.PushActionExecuteCommand(ACTION_INSERT, SoSiScript, &v, 0, false);
}
}
};
SimComNet Startscript:
Spoiler
void Start()
{
System::Log("Startscript - Start");
//Anfang Fahrzeug Generation
//Anzahl der Fahrzeuge insgesamt. Um Mehrere Fahrzeuge einzusetzen, muss die 1 zu der entsprechenden Fahrzeug hochgezählt werden. Bei 20 Fahrzeugen, muss hier also 20 stehen.
const int MAX_FZ = 1;
/*
Feld für die Fahrzeugnamen gennerieren
Aufbau:
+--------------+-----------+--------------+
+ Fahrzeugname + Prototype + PersonProto. +
+--------------+-----------+--------------+
+ ELW + modro.. + modroto... +
+--------------+-----------+--------------+
+ (...) + (...) + (...) +
*/
const char * kennung[MAX_FZ][4];
//Das Feld mit den Fahrzeugnammen befüllen
//Erstes Fahrzeug
kennung[0][0]="ELW_1"; //Name des Fahrzeuges
kennung[0][1]="modrototypes/Vehicles/Fire Department/mtw_elw.e4p"; //Prototype des Fahrzeuges
kennung[0][2]="modrototypes/Persons/Fire Department/firefighternorm.e4p"; //Prototype der Insassen (alle gleich)
kennung[0][3]="ausrichtung"; // Objekt zur Ausrichtung des Fahrzeuges
//Zweites Fahrzeug. Zum Aktivieren, die // vor den nächsten drei Zeilen entfernen.
//kennung[0][0]="LF_1"; //Name des Fahrzeuges
//kennung[0][1]="modrototypes/Vehicles/Fire Department/Chi_LF16_01.e4p"; //Prototype des Fahrzeuges
//kennung[0][2]="modrototypes/Persons/Fire Department/firefighternorm.e4p"; //Prototype der Insassen (alle gleich)
/*
Feld für die Sitzplätze gennerieren
Aufbau:
+------------+------------+
+ Passagiere + Transports +
+------------+------------+
+ 2 + 0 +
+------------+------------+
+ (...) + (...) +
*/
int platz[MAX_FZ][2];
//Das Feld mit den Sitzplätzen befüllen
//Erstes Fahrzeug
platz[0][0]=2; //Einsatzkräfte
platz[0][1]=0; //Verbrechner/Verletzte (etc)
//Zweites Fahrzeug. Zum Aktivieren, die // vor den nächsten drei Zeilen entfernen.
//platz[0][0]=9; //Einsatzkräfte
//platz[0][1]=0; //Verbrechner/Verletzte (etc)
System::Log("Startscript - Ende Felder");
//Nun sind alle Daten erfast und Emergency kann angeweisen werden, die Fahrzeuge zu generieren.
//Sonstige Variablen
Vehicle vec; //Das Fahrzeug ansich
Actor fz; //Die Prakposition ansich
GameObject *ofz; //Fahrzeug als Gameobjekt
GameObjectList lfz; //Liste von Objekten
ActorList fzl; //Liste der Prakpositionen
Vector Wache; //Die Position der Prakposition
float rot[9]; //Feld für Position 1
float childRot[9]; //Feld für Position 2
//Start der ersten Schleife zur Fahrzeug generation
System::Log("Startscript - Forschleife 1");
for(int i=0; i<MAX_FZ; i++)
{
System::Log("Startscript - Forschleife 1-1");
fzl=Game::GetActors(kennung[0]); // Parkposition auslesen
if(fzl.GetNumActors() > 0) //Wenn die Parkposition vorhanden ist, weiter machen.
{
System::Log("Startscript - Prakposition");
fz = *fzl.GetActor(0); //Parkposition umwandlen
Wache=fz.GetPosition(); //Parkposition abspeichern
}
//Erzeuge das Fahrzeuges ansich
System::Log("Startscript - Fahrzeug erzeugen");
vec = Game::CreateVehicle(kennung[i][1],kennung[i][0]); //Erst Prototype, dann Fahrzeugname
vec.SetSpeed(12.0.f); //Geschwindigkeit setzen
//Platz schaffen
System::Log("Startscript - Plätze");
vec.SetMaxPassengers(platz[i][0]); //Passagieranzahl setzen
vec.SetMaxTransports(platz[i][1]); //Transportanzahl setzen
//Personen erzeugen und ins Auto setzen (von anfang an im Fahrzeug)
System::Log("Startscript - Forschleife 1-2");
for(int j=0; j<platz[i][0]; j++)
{
System::Log("Startscript - Forschleife 2-1");
Person p = Game::CreatePerson(kennung[i][2], vec.GetName()); //Person erzeugen
vec.AddPassenger(&p); //Person ins Fahrzeug setzen
}
System::Log("Startscript - Licht");
//Lichter ausschlaten
vec.EnableBlueLights(false); //Blaulicht
vec.EnableBreakLights(false); //Bremslichter
vec.EnableSpecialLights(false);//Speziallscher, z.B. Umfeld.
//Fahrzeug Drehen
System::Log("Startscript - Drehen");
GameObject mBarrel;
GameObjectList bl = Game::GetGameObjects(kennung[i][3]);
if(bl.GetNumObjects() == 0)
System::Log("?Object ausrichtung not found!");
else
mBarrel = *bl.GetObject(0);
mBarrel.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
Math::EulerToMatrix(0.0.f, 0.f, 0.f, childRot); //In Eulerische Matridx umwandlen
Math::MultiplyMatrices(childRot, rot); //Die Matrix multiplizieren
//vec.SetRotation(mBarrel);
vec.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]); //Fahrzeug schliesslich drehen
lfz = Game::GetGameObjects(kennung[i][0]); //Fahrzeug als Objekt umwandlen
//Position setzen
System::Log("Startscript - Position");
Game::FindFreePosition(&vec, Wache); //Prüfen ob die Position Frei ist, ansonsten sucht Emergency automatisch eine freie Position in der nähe (Da Auto steht an aber ggf. falsch)
vec.SetPosition(Wache); //Position endgültig setzen.
//umwandeln und schliesslich Frontscheinwerfer ausmachen
ofz=*lfz.GetObject(0); //Fahrzeug umwandeln
ofz->EnableHeadLights(false); //Frontscheinwerfer ausschalten
System::Log("Startscript - Forschleife 1-3");
}
System::Log("Startscript - Ende");
};
bool OnLoad()
{
Start();
Process::Kill();
return true;
}
Ich habe überhaupt keine Ahnung vom Scripting, versuche aber auch es zu lernen.
Grüße
SEK- Schütze