Zugalarm - Fahrzeuge machen was sie wollen

  • Zugalarm - Fahrzeuge machen was sie wollen

    Moin moin,
    ich habe mal wieder ein Problem mit einem Script, welches ich nicht gelöst bekomme.
    Ich nutze in meiner Mod von a-rescue und Magicman den Alarmscript sowohl für Züge als auch einzelne Fahrzeuge.

    Seit ich meine Mod angefangen habe neu aufzubauen haut aber irgenwas nicht mehr hin.
    Zwar habe ich im Script definiert, wann welches Auto losfahren soll, allerdings machen alle Fahrzeuge wie es ihnen gefällt.
    Und das wiederrum gefällt mir absolut nicht.

    Vielleicht hat jemand eine Idee woran es liegen könnte.
    Hier der Script:

    Quellcode

    1. //////////////////////////////////////////////////////////////////////////////////////////////////////////
    2. // Freeplay Alarm TLF - Script v1.0 //
    3. // ************************************************ //
    4. // //
    5. // 1.0| PCmdFPAlarmTLF //
    6. // //
    7. // _____________________ //
    8. // a-rescue und Magicman mŸssen in der Readme genannt werden & der Kommentar muss so bleiben. //
    9. // Sonst freie Nutzung fŸr alle. //
    10. //////////////////////////////////////////////////////////////////////////////////////////////////////////
    11. const char IMG_ICON[] = "lz3"; // Name des Icons
    12. const char IMG_CURSOR[] = "lz3"; // Name des Cursors
    13. const char COMMANDABLE_TRUE[] = "DUMMYSetCommandableTrue";
    14. const char COMMANDABLE_FALSE[] = "DUMMYSetCommandableFalse";
    15. const char FREEFORALERT_TRUE[] = "DUMMYFPSetFreeForAlertTrue";
    16. const char FREEFORALERT_FALSE[] = "DUMMYFPSetFreeForAlertFalse";
    17. const char FREEFORALERT[] = "DUMMYFPIsFreeForAlert";
    18. const char INBASE_TRUE[] = "DUMMYFPSetInBaseTrue";
    19. const char INBASE_FALSE[] = "DUMMYFPSetInBaseFalse";
    20. const char INBASE[] = "DUMMYFPIsInBase";
    21. // 1.0
    22. object rufe_lz3 : CommandScript //Name des Commands
    23. {
    24. rufe_lz3() //Name des Commands
    25. {
    26. SetIcon(IMG_ICON);
    27. SetCursor(IMG_CURSOR);
    28. SetValidTargets(ACTOR_FLOOR | ACTOR_STREET);
    29. }
    30. bool CheckPossible(GameObject *Caller)
    31. {
    32. GameObjectList ol;
    33. GameObject *o;
    34. ol = Game::GetGameObjects("hlf2"); //Name des zu alarmierenden Fahrzeuges
    35. o = *ol.GetObject(0);
    36. Vehicle v(o);
    37. if (!v.HasCommand(FREEFORALERT))
    38. return false;
    39. return true;
    40. }
    41. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    42. {
    43. if (Caller->GetID() == Target->GetID())
    44. return false;
    45. return true;
    46. }
    47. void PushActions(GameObject *Caller, Actor *Target, int childID)
    48. {
    49. GameObjectList ol;
    50. GameObject *o;
    51. ActorList al;
    52. Actor spawnpoint;
    53. Vector spawnpos;
    54. float rot[9];
    55. float childRot[9];
    56. Vector tpos;
    57. PersonList pl;
    58. Person p;
    59. ActorList al;
    60. Actor spawnpoint;
    61. Vector spawnpos;
    62. ol = Game::GetGameObjects("hlf2"); //Name des zu alarmierenden Fahrzeuges
    63. o = *ol.GetObject(0);
    64. Vehicle v(o);
    65. if (v.IsDestroyed())
    66. {
    67. Mission::PlayHint("Fahrzeug wurde zerstoert und steht deshalb nicht mehr zur Verfuegung.");
    68. return;
    69. }
    70. if (!v.HasCommand(FREEFORALERT))
    71. {
    72. Mission::PlayHint("Fahrzeug befindet sich bereits im Einsatz.");
    73. return;
    74. }
    75. else
    76. {
    77. Mission::PlayHint("Vollalarm OF Rüstringen"); //Alarmmeldung die angezeigt werden soll
    78. Audio::PlaySample("mod:Audio/FX/Alarm/lz3.wav"); //Pfad zum Alarmsound der abspielt werden soll
    79. Game::ExecuteCommand("alarm_fhz12",Caller,Target); //Hier Alarm Commands der weiteren Fahrzeuge einfŸgen
    80. Game::ExecuteCommand("alarm_fhz13",Caller,Target);
    81. Game::ExecuteCommand("alarm_fhz15",Caller,Target);
    82. //Um weitere Fahrzeuge in einen Lšschzug zu alarmieren, Commands hier einfŸgen..
    83. v.PushActionExecuteCommand(ACTION_NEWLIST, FREEFORALERT_FALSE, &v, 1, true);
    84. al=Game::GetActors("hlf2"); //Name des viruelles Objektes wo die EinsatzkrŠfte erstellt werden soll
    85. if(al.GetNumActors() > 0)
    86. {
    87. spawnpoint = *al.GetActor(0);
    88. spawnpos = spawnpoint.GetPosition();
    89. }
    90. else
    91. {
    92. Mission::PlayHint("Kann Eingang fuer Personal nicht finden!");
    93. return;
    94. }
    95. bool ob_personal = false;
    96. pl = v.GetPassengers();
    97. for(int i=0; i < pl.GetNumPersons(); i++)
    98. {
    99. if (pl.GetPerson(i)->HasCommand("entercar"))
    100. {
    101. ob_personal = true;
    102. }
    103. }
    104. bool vinbase = false;
    105. if(v.HasCommand(INBASE))
    106. {
    107. vinbase = true;
    108. }
    109. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    110. if (!ob_personal && vinbase)
    111. {
    112. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    113. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    114. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    115. Math::MultiplyMatrices(childRot, rot);
    116. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    117. GameObject *px(p);
    118. Game::FindFreePosition(px, spawnpos, 100);
    119. p.SetPosition(spawnpos);
    120. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    121. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    122. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    123. }
    124. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    125. if (!ob_personal && vinbase)
    126. {
    127. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Gruppenfuehrer.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    128. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    129. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    130. Math::MultiplyMatrices(childRot, rot);
    131. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    132. GameObject *px(p);
    133. Game::FindFreePosition(px, spawnpos, 100);
    134. p.SetPosition(spawnpos);
    135. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    136. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    137. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    138. }
    139. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    140. if (!ob_personal && vinbase)
    141. {
    142. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    143. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    144. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    145. Math::MultiplyMatrices(childRot, rot);
    146. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    147. GameObject *px(p);
    148. Game::FindFreePosition(px, spawnpos, 100);
    149. p.SetPosition(spawnpos);
    150. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    151. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    152. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    153. }
    154. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    155. if (!ob_personal && vinbase)
    156. {
    157. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    158. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    159. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    160. Math::MultiplyMatrices(childRot, rot);
    161. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    162. GameObject *px(p);
    163. Game::FindFreePosition(px, spawnpos, 100);
    164. p.SetPosition(spawnpos);
    165. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    166. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    167. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    168. }
    169. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    170. if (!ob_personal && vinbase)
    171. {
    172. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    173. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    174. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    175. Math::MultiplyMatrices(childRot, rot);
    176. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    177. GameObject *px(p);
    178. Game::FindFreePosition(px, spawnpos, 100);
    179. p.SetPosition(spawnpos);
    180. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    181. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    182. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    183. }
    184. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    185. if (!ob_personal && vinbase)
    186. {
    187. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    188. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    189. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    190. Math::MultiplyMatrices(childRot, rot);
    191. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    192. GameObject *px(p);
    193. Game::FindFreePosition(px, spawnpos, 100);
    194. p.SetPosition(spawnpos);
    195. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    196. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    197. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    198. }
    199. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    200. if (!ob_personal && vinbase)
    201. {
    202. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    203. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    204. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    205. Math::MultiplyMatrices(childRot, rot);
    206. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    207. GameObject *px(p);
    208. Game::FindFreePosition(px, spawnpos, 100);
    209. p.SetPosition(spawnpos);
    210. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    211. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    212. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    213. }
    214. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    215. if (!ob_personal && vinbase)
    216. {
    217. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    218. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    219. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    220. Math::MultiplyMatrices(childRot, rot);
    221. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    222. GameObject *px(p);
    223. Game::FindFreePosition(px, spawnpos, 100);
    224. p.SetPosition(spawnpos);
    225. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    226. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    227. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    228. }
    229. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    230. //FŸr weitere EinsatzkrŠfte einfach neue Blšcke hier hinzufŸgen
    231. bool ready = false;
    232. if (ob_personal)
    233. {
    234. ready= true;
    235. }
    236. if (vinbase)
    237. {
    238. v.PushActionWait(ACTION_APPEND, 20.0); //Zeit bevor Tor aufgeht
    239. v.PushActionExecuteCommand(ACTION_APPEND, "OpenGate", &v, 1, true);
    240. v.PushActionWait(ACTION_APPEND, 0.0); //Zeit bis Fahrzeug fŠhrt nachdem das Tor offen ist
    241. }
    242. if (!ready && !vinbase))
    243. {
    244. Mission::PlayHint("Ohne Personal, Einsatz nicht moeglich!");
    245. }
    246. v.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &v, 1, true);
    247. if(!v.HasCommand("DUMMYHasSiren"))
    248. {
    249. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    250. }
    251. v.PushActionExecuteCommand(ACTION_APPEND, INBASE_FALSE, &v, 1, true);
    252. if (ready && !vinbase))
    253. {
    254. if(!v.HasCommand("DUMMYHasSiren"))
    255. {
    256. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    257. }
    258. }
    259. //Wenn nicht in Basis aber Einsatzbereit?
    260. tpos = Game::GetCommandPos();
    261. if (!vinbase && ready)
    262. {
    263. v.EnableBlueLights(true);
    264. v.PushActionExecuteCommand(ACTION_NEWLIST, "Status3",Caller,0,false);
    265. v.PushActionMove(ACTION_APPEND, tpos);
    266. v.PushActionExecuteCommand(ACTION_APPEND, "Status4",Caller,0,false);
    267. }
    268. // losfahren zum einsatzort;
    269. tpos = Game::GetCommandPos();
    270. v.PushActionExecuteCommand(ACTION_APPEND, "Status3",Caller,0,false);
    271. v.PushActionMove(ACTION_APPEND, tpos);
    272. v.PushActionExecuteCommand(ACTION_APPEND, "Status4",Caller,0,false);
    273. }
    274. }
    275. };
    276. object alarm_fhz12 : CommandScript //Name des Commands (muss mit oben Ÿbereinstimmen!)
    277. {
    278. alarm_fhz12() //Name des Commands
    279. {
    280. SetIcon(IMG_ICON);
    281. SetCursor(IMG_CURSOR);
    282. SetValidTargets(ACTOR_FLOOR | ACTOR_STREET);
    283. }
    284. bool CheckPossible(GameObject *Caller)
    285. {
    286. GameObjectList ol;
    287. GameObject *o;
    288. ol = Game::GetGameObjects("tsfw1"); //Name des zu alarmierenden Fahrzeuges
    289. o = *ol.GetObject(0);
    290. Vehicle v(o);
    291. if (!v.HasCommand(FREEFORALERT))
    292. return false;
    293. return true;
    294. }
    295. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    296. {
    297. if (Caller->GetID() == Target->GetID())
    298. return false;
    299. return true;
    300. }
    301. void PushActions(GameObject *Caller, Actor *Target, int childID)
    302. {
    303. GameObjectList ol;
    304. GameObject *o;
    305. ActorList al;
    306. Actor spawnpoint;
    307. Vector spawnpos;
    308. float rot[9];
    309. float childRot[9];
    310. Vector tpos;
    311. PersonList pl;
    312. Person p;
    313. ActorList al;
    314. Actor spawnpoint;
    315. Vector spawnpos;
    316. ol = Game::GetGameObjects("tsfw1"); //Name des zu alarmierenden Fahrzeuges
    317. o = *ol.GetObject(0);
    318. Vehicle v(o);
    319. if (v.IsDestroyed())
    320. {
    321. Mission::PlayHint("Fahrzeug wurde zerstoert und steht deshalb nicht mehr zur Verfuegung.");
    322. return;
    323. }
    324. if (!v.HasCommand(FREEFORALERT))
    325. {
    326. Mission::PlayHint("Der 20/41-20 ist bereits im Einsatz!");
    327. return;
    328. }
    329. else
    330. {
    331. v.PushActionExecuteCommand(ACTION_NEWLIST, FREEFORALERT_FALSE, &v, 1, true);
    332. al=Game::GetActors("tsfw1"); //Name des viruelles Objektes wo die EinsatzkrŠfte erstellt werden soll
    333. if(al.GetNumActors() > 0)
    334. {
    335. spawnpoint = *al.GetActor(0);
    336. spawnpos = spawnpoint.GetPosition();
    337. }
    338. else
    339. {
    340. Mission::PlayHint("Kann Eingang fuer Personal nicht finden!");
    341. return;
    342. }
    343. bool ob_personal = false;
    344. pl = v.GetPassengers();
    345. for(int i=0; i < pl.GetNumPersons(); i++)
    346. {
    347. if (pl.GetPerson(i)->HasCommand("entercar"))
    348. {
    349. ob_personal = true;
    350. }
    351. }
    352. bool vinbase = false;
    353. if(v.HasCommand(INBASE))
    354. {
    355. vinbase = true;
    356. }
    357. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    358. if (!ob_personal && vinbase)
    359. {
    360. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    361. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    362. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    363. Math::MultiplyMatrices(childRot, rot);
    364. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    365. GameObject *px(p);
    366. Game::FindFreePosition(px, spawnpos, 100);
    367. p.SetPosition(spawnpos);
    368. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    369. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    370. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    371. }
    372. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    373. if (!ob_personal && vinbase)
    374. {
    375. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Gruppenfuehrer.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    376. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    377. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    378. Math::MultiplyMatrices(childRot, rot);
    379. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    380. GameObject *px(p);
    381. Game::FindFreePosition(px, spawnpos, 100);
    382. p.SetPosition(spawnpos);
    383. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    384. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    385. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    386. }
    387. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    388. if (!ob_personal && vinbase)
    389. {
    390. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    391. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    392. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    393. Math::MultiplyMatrices(childRot, rot);
    394. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    395. GameObject *px(p);
    396. Game::FindFreePosition(px, spawnpos, 100);
    397. p.SetPosition(spawnpos);
    398. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    399. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    400. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    401. }
    402. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    403. if (!ob_personal && vinbase)
    404. {
    405. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    406. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    407. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    408. Math::MultiplyMatrices(childRot, rot);
    409. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    410. GameObject *px(p);
    411. Game::FindFreePosition(px, spawnpos, 100);
    412. p.SetPosition(spawnpos);
    413. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    414. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    415. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    416. }
    417. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    418. if (!ob_personal && vinbase)
    419. {
    420. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    421. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    422. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    423. Math::MultiplyMatrices(childRot, rot);
    424. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    425. GameObject *px(p);
    426. Game::FindFreePosition(px, spawnpos, 100);
    427. p.SetPosition(spawnpos);
    428. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    429. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    430. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    431. }
    432. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    433. if (!ob_personal && vinbase)
    434. {
    435. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    436. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    437. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    438. Math::MultiplyMatrices(childRot, rot);
    439. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    440. GameObject *px(p);
    441. Game::FindFreePosition(px, spawnpos, 100);
    442. p.SetPosition(spawnpos);
    443. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    444. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    445. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    446. }
    447. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    448. //FŸr weitere EinsatzkrŠfte einfach neue Blšcke hier hinzufŸgen
    449. bool ready = false;
    450. if (ob_personal)
    451. {
    452. ready= true;
    453. }
    454. if (vinbase)
    455. {
    456. v.PushActionWait(ACTION_APPEND, 40.0); //Zeit bevor Tor aufgeht
    457. v.PushActionExecuteCommand(ACTION_APPEND, "OpenGate", &v, 1, true);
    458. v.PushActionWait(ACTION_APPEND, 0.0); //Zeit bis Fahrzeug fŠhrt nachdem das Tor offen ist
    459. }
    460. if (!ready && !vinbase))
    461. {
    462. Mission::PlayHint("Ohne Personal, Einsatz nicht moeglich!");
    463. }
    464. v.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &v, 1, true);
    465. if(!v.HasCommand("DUMMYHasSiren"))
    466. {
    467. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    468. }
    469. v.PushActionExecuteCommand(ACTION_APPEND, INBASE_FALSE, &v, 1, true);
    470. if (ready && !vinbase))
    471. {
    472. if(!v.HasCommand("DUMMYHasSiren"))
    473. {
    474. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    475. }
    476. }
    477. tpos = Game::GetCommandPos();
    478. v.PushActionMove(ACTION_APPEND, tpos);
    479. }
    480. }
    481. };
    482. object alarm_fhz13 : CommandScript //Name des Commands (muss mit oben Ÿbereinstimmen!)
    483. {
    484. alarm_fhz13() //Name des Commands
    485. {
    486. SetIcon(IMG_ICON);
    487. SetCursor(IMG_CURSOR);
    488. SetValidTargets(ACTOR_FLOOR | ACTOR_STREET);
    489. }
    490. bool CheckPossible(GameObject *Caller)
    491. {
    492. GameObjectList ol;
    493. GameObject *o;
    494. ol = Game::GetGameObjects("lf2"); //Name des zu alarmierenden Fahrzeuges
    495. o = *ol.GetObject(0);
    496. Vehicle v(o);
    497. if (!v.HasCommand(FREEFORALERT))
    498. return false;
    499. return true;
    500. }
    501. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    502. {
    503. if (Caller->GetID() == Target->GetID())
    504. return false;
    505. return true;
    506. }
    507. void PushActions(GameObject *Caller, Actor *Target, int childID)
    508. {
    509. GameObjectList ol;
    510. GameObject *o;
    511. ActorList al;
    512. Actor spawnpoint;
    513. Vector spawnpos;
    514. float rot[9];
    515. float childRot[9];
    516. Vector tpos;
    517. PersonList pl;
    518. Person p;
    519. ActorList al;
    520. Actor spawnpoint;
    521. Vector spawnpos;
    522. ol = Game::GetGameObjects("lf2"); //Name des zu alarmierenden Fahrzeuges
    523. o = *ol.GetObject(0);
    524. Vehicle v(o);
    525. if (v.IsDestroyed())
    526. {
    527. Mission::PlayHint("Fahrzeug wurde zerstoert und steht deshalb nicht mehr zur Verfuegung.");
    528. return;
    529. }
    530. if (!v.HasCommand(FREEFORALERT))
    531. {
    532. Mission::PlayHint("Der 20/44-20 ist bereits im Einsatz!");
    533. return;
    534. }
    535. else
    536. {
    537. v.PushActionExecuteCommand(ACTION_NEWLIST, FREEFORALERT_FALSE, &v, 1, true);
    538. al=Game::GetActors("lf2"); //Name des viruelles Objektes wo die EinsatzkrŠfte erstellt werden soll
    539. if(al.GetNumActors() > 0)
    540. {
    541. spawnpoint = *al.GetActor(0);
    542. spawnpos = spawnpoint.GetPosition();
    543. }
    544. else
    545. {
    546. Mission::PlayHint("Kann Eingang fuer Personal nicht finden!");
    547. return;
    548. }
    549. bool ob_personal = false;
    550. pl = v.GetPassengers();
    551. for(int i=0; i < pl.GetNumPersons(); i++)
    552. {
    553. if (pl.GetPerson(i)->HasCommand("entercar"))
    554. {
    555. ob_personal = true;
    556. }
    557. }
    558. bool vinbase = false;
    559. if(v.HasCommand(INBASE))
    560. {
    561. vinbase = true;
    562. }
    563. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    564. if (!ob_personal && vinbase)
    565. {
    566. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    567. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    568. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    569. Math::MultiplyMatrices(childRot, rot);
    570. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    571. GameObject *px(p);
    572. Game::FindFreePosition(px, spawnpos, 100);
    573. p.SetPosition(spawnpos);
    574. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    575. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    576. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    577. }
    578. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    579. if (!ob_personal && vinbase)
    580. {
    581. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    582. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    583. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    584. Math::MultiplyMatrices(childRot, rot);
    585. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    586. GameObject *px(p);
    587. Game::FindFreePosition(px, spawnpos, 100);
    588. p.SetPosition(spawnpos);
    589. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    590. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    591. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    592. }
    593. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    594. if (!ob_personal && vinbase)
    595. {
    596. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Gruppenfuehrer.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    597. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    598. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    599. Math::MultiplyMatrices(childRot, rot);
    600. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    601. GameObject *px(p);
    602. Game::FindFreePosition(px, spawnpos, 100);
    603. p.SetPosition(spawnpos);
    604. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    605. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    606. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    607. }
    608. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    609. if (!ob_personal && vinbase)
    610. {
    611. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    612. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    613. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    614. Math::MultiplyMatrices(childRot, rot);
    615. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    616. GameObject *px(p);
    617. Game::FindFreePosition(px, spawnpos, 100);
    618. p.SetPosition(spawnpos);
    619. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    620. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    621. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    622. }
    623. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    624. if (!ob_personal && vinbase)
    625. {
    626. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    627. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    628. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    629. Math::MultiplyMatrices(childRot, rot);
    630. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    631. GameObject *px(p);
    632. Game::FindFreePosition(px, spawnpos, 100);
    633. p.SetPosition(spawnpos);
    634. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    635. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    636. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    637. }
    638. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    639. if (!ob_personal && vinbase)
    640. {
    641. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    642. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    643. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    644. Math::MultiplyMatrices(childRot, rot);
    645. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    646. GameObject *px(p);
    647. Game::FindFreePosition(px, spawnpos, 100);
    648. p.SetPosition(spawnpos);
    649. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    650. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    651. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    652. }
    653. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    654. if (!ob_personal && vinbase)
    655. {
    656. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    657. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    658. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    659. Math::MultiplyMatrices(childRot, rot);
    660. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    661. GameObject *px(p);
    662. Game::FindFreePosition(px, spawnpos, 100);
    663. p.SetPosition(spawnpos);
    664. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    665. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    666. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    667. }
    668. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    669. if (!ob_personal && vinbase)
    670. {
    671. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    672. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    673. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    674. Math::MultiplyMatrices(childRot, rot);
    675. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    676. GameObject *px(p);
    677. Game::FindFreePosition(px, spawnpos, 100);
    678. p.SetPosition(spawnpos);
    679. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    680. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    681. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    682. }
    683. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    684. if (!ob_personal && vinbase)
    685. {
    686. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    687. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    688. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    689. Math::MultiplyMatrices(childRot, rot);
    690. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    691. GameObject *px(p);
    692. Game::FindFreePosition(px, spawnpos, 100);
    693. p.SetPosition(spawnpos);
    694. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    695. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    696. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    697. }
    698. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    699. //FŸr weitere EinsatzkrŠfte einfach neue Blšcke hier hinzufŸgen
    700. bool ready = false;
    701. if (ob_personal)
    702. {
    703. ready= true;
    704. }
    705. if (vinbase)
    706. {
    707. v.PushActionWait(ACTION_APPEND, 30.0); //Zeit bevor Tor aufgeht
    708. v.PushActionExecuteCommand(ACTION_APPEND, "OpenGate", &v, 1, true);
    709. v.PushActionWait(ACTION_APPEND, 0.0); //Zeit bis Fahrzeug fŠhrt nachdem das Tor offen ist
    710. }
    711. if (!ready && !vinbase))
    712. {
    713. Mission::PlayHint("Ohne Personal, Einsatz nicht moeglich!");
    714. }
    715. v.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &v, 1, true);
    716. if(!v.HasCommand("DUMMYHasSiren"))
    717. {
    718. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    719. }
    720. v.PushActionExecuteCommand(ACTION_APPEND, INBASE_FALSE, &v, 1, true);
    721. if (ready && !vinbase))
    722. {
    723. if(!v.HasCommand("DUMMYHasSiren"))
    724. {
    725. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    726. }
    727. }
    728. tpos = Game::GetCommandPos();
    729. v.PushActionMove(ACTION_APPEND, tpos);
    730. }
    731. }
    732. };
    733. object alarm_fhz15 : CommandScript //Name des Commands (muss mit oben Ÿbereinstimmen!)
    734. {
    735. alarm_fhz15() //Name des Commands
    736. {
    737. SetIcon(IMG_ICON);
    738. SetCursor(IMG_CURSOR);
    739. SetValidTargets(ACTOR_FLOOR | ACTOR_STREET);
    740. }
    741. bool CheckPossible(GameObject *Caller)
    742. {
    743. GameObjectList ol;
    744. GameObject *o;
    745. ol = Game::GetGameObjects("tlf1"); //Name des zu alarmierenden Fahrzeuges
    746. o = *ol.GetObject(0);
    747. Vehicle v(o);
    748. if (!v.HasCommand(FREEFORALERT))
    749. return false;
    750. return true;
    751. }
    752. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    753. {
    754. if (Caller->GetID() == Target->GetID())
    755. return false;
    756. return true;
    757. }
    758. void PushActions(GameObject *Caller, Actor *Target, int childID)
    759. {
    760. GameObjectList ol;
    761. GameObject *o;
    762. ActorList al;
    763. Actor spawnpoint;
    764. Vector spawnpos;
    765. float rot[9];
    766. float childRot[9];
    767. Vector tpos;
    768. PersonList pl;
    769. Person p;
    770. ActorList al;
    771. Actor spawnpoint;
    772. Vector spawnpos;
    773. ol = Game::GetGameObjects("tlf1"); //Name des zu alarmierenden Fahrzeuges
    774. o = *ol.GetObject(0);
    775. Vehicle v(o);
    776. if (v.IsDestroyed())
    777. {
    778. Mission::PlayHint("Fahrzeug wurde zerstoert und steht deshalb nicht mehr zur Verfuegung.");
    779. return;
    780. }
    781. if (!v.HasCommand(FREEFORALERT))
    782. {
    783. Mission::PlayHint("Der 20/20-20 ist bereits im Einsatz!");
    784. return;
    785. }
    786. else
    787. {
    788. v.PushActionExecuteCommand(ACTION_NEWLIST, FREEFORALERT_FALSE, &v, 1, true);
    789. al=Game::GetActors("tlf1"); //Name des viruelles Objektes wo die EinsatzkrŠfte erstellt werden soll
    790. if(al.GetNumActors() > 0)
    791. {
    792. spawnpoint = *al.GetActor(0);
    793. spawnpos = spawnpoint.GetPosition();
    794. }
    795. else
    796. {
    797. Mission::PlayHint("Kann Eingang fuer Personal nicht finden!");
    798. return;
    799. }
    800. bool ob_personal = false;
    801. pl = v.GetPassengers();
    802. for(int i=0; i < pl.GetNumPersons(); i++)
    803. {
    804. if (pl.GetPerson(i)->HasCommand("entercar"))
    805. {
    806. ob_personal = true;
    807. }
    808. }
    809. bool vinbase = false;
    810. if(v.HasCommand(INBASE))
    811. {
    812. vinbase = true;
    813. }
    814. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    815. if (!ob_personal && vinbase)
    816. {
    817. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tlf1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    818. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    819. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    820. Math::MultiplyMatrices(childRot, rot);
    821. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    822. GameObject *px(p);
    823. Game::FindFreePosition(px, spawnpos, 100);
    824. p.SetPosition(spawnpos);
    825. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    826. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    827. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    828. }
    829. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    830. if (!ob_personal && vinbase)
    831. {
    832. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tlf1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    833. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    834. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    835. Math::MultiplyMatrices(childRot, rot);
    836. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    837. GameObject *px(p);
    838. Game::FindFreePosition(px, spawnpos, 100);
    839. p.SetPosition(spawnpos);
    840. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    841. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    842. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    843. }
    844. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    845. if (!ob_personal && vinbase)
    846. {
    847. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Gruppenfuehrer.e4p","tlf1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    848. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    849. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    850. Math::MultiplyMatrices(childRot, rot);
    851. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    852. GameObject *px(p);
    853. Game::FindFreePosition(px, spawnpos, 100);
    854. p.SetPosition(spawnpos);
    855. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    856. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    857. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    858. }
    859. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    860. //FŸr weitere EinsatzkrŠfte einfach neue Blšcke hier hinzufŸgen
    861. bool ready = false;
    862. if (ob_personal)
    863. {
    864. ready= true;
    865. }
    866. if (vinbase)
    867. {
    868. v.PushActionWait(ACTION_APPEND, 45.0); //Zeit bevor Tor aufgeht
    869. v.PushActionExecuteCommand(ACTION_APPEND, "OpenGate", &v, 1, true);
    870. v.PushActionWait(ACTION_APPEND, 0.0); //Zeit bis Fahrzeug fŠhrt nachdem das Tor offen ist
    871. }
    872. if (!ready && !vinbase))
    873. {
    874. Mission::PlayHint("Ohne Personal, Einsatz nicht moeglich!");
    875. }
    876. v.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &v, 1, true);
    877. if(!v.HasCommand("DUMMYHasSiren"))
    878. {
    879. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    880. }
    881. v.PushActionExecuteCommand(ACTION_APPEND, INBASE_FALSE, &v, 1, true);
    882. if (ready && !vinbase))
    883. {
    884. if(!v.HasCommand("DUMMYHasSiren"))
    885. {
    886. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    887. }
    888. }
    889. tpos = Game::GetCommandPos();
    890. v.PushActionMove(ACTION_APPEND, tpos);
    891. }
    892. }
    893. };
    894. //Hier neuer Command hinzufŸgen um eine weiteres Fahrzeug im Lšschzug zu alarmieren....
    Alles anzeigen
  • Habe ich sogleich mal ausprobiert,
    war natürlich nicht die Lösung des Problems.
    Nichtmal die Tor öffnen sich nach den eingestellten Zeiten sondern einfach nach Zufallsprinzip.
    Ich habe das ganze jetzt 4x hintereinander alarmiert und jedes Mal rücken die anders aus.

    Das Problem habe ich bei 9 von 12 Zugalarmen und ich weiß mittlerweile echt nicht mehr wo der Hase im Pfeffer liegt.
    3 Züge rücken so aus, wie ich das gerne hätte, 9 machen was sie wollen :hmm:
  • Mir fällt da gerade noch was ein:
    Öffne dir mal den Texteditor und kopier dir den Inhalt deines Scriptes dort hinein.

    Dann Speichern unter..
    Irgend wo kannst du unten dann (als ich glaube Protokoll) ASCII auswählen und speicherst es als .txt auf dem Desktop.
    Nun Editor schließen und die .txt Datei erneut mit dem Editor öffnen und jetzt speichern unter-> Scriptname.script.
    Und diese Datei nun in deinen Script Ordner.

    Edit: Okay es ist Codierung und es muss ANSI ausgewählt werden.
    Mein Schienbein hilft mir im dunkeln Meine Schränke zu finden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Befa ()

  • Versuche es jetzt mal.

    Quellcode

    1. //////////////////////////////////////////////////////////////////////////////////////////////////////////
    2. // Freeplay Alarm TLF - Script v1.0 //
    3. // ************************************************ //
    4. // //
    5. // 1.0| PCmdFPAlarmTLF //
    6. // //
    7. // _____________________ //
    8. // a-rescue und Magicman mŸssen in der Readme genannt werden & der Kommentar muss so bleiben. //
    9. // Sonst freie Nutzung fŸr alle. //
    10. //////////////////////////////////////////////////////////////////////////////////////////////////////////
    11. const char IMG_ICON[] = "lz3"; // Name des Icons
    12. const char IMG_CURSOR[] = "lz3"; // Name des Cursors
    13. const char COMMANDABLE_TRUE[] = "DUMMYSetCommandableTrue";
    14. const char COMMANDABLE_FALSE[] = "DUMMYSetCommandableFalse";
    15. const char FREEFORALERT_TRUE[] = "DUMMYFPSetFreeForAlertTrue";
    16. const char FREEFORALERT_FALSE[] = "DUMMYFPSetFreeForAlertFalse";
    17. const char FREEFORALERT[] = "DUMMYFPIsFreeForAlert";
    18. const char INBASE_TRUE[] = "DUMMYFPSetInBaseTrue";
    19. const char INBASE_FALSE[] = "DUMMYFPSetInBaseFalse";
    20. const char INBASE[] = "DUMMYFPIsInBase";
    21. // 1.0
    22. object rufe_lz3 : CommandScript //Name des Commands
    23. {
    24. rufe_lz3() //Name des Commands
    25. {
    26. SetIcon(IMG_ICON);
    27. SetCursor(IMG_CURSOR);
    28. SetValidTargets(ACTOR_FLOOR | ACTOR_STREET);
    29. }
    30. bool CheckPossible(GameObject *Caller)
    31. {
    32. GameObjectList ol;
    33. GameObject *o;
    34. ol = Game::GetGameObjects("hlf2"); //Name des zu alarmierenden Fahrzeuges
    35. o = *ol.GetObject(0);
    36. Vehicle v(o);
    37. if (!v.HasCommand(FREEFORALERT))
    38. return false;
    39. return true;
    40. }
    41. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    42. {
    43. if (Caller->GetID() == Target->GetID())
    44. return false;
    45. return true;
    46. }
    47. void PushActions(GameObject *Caller, Actor *Target, int childID)
    48. {
    49. GameObjectList ol;
    50. GameObject *o;
    51. ActorList al;
    52. Actor spawnpoint;
    53. Vector spawnpos;
    54. float rot[9];
    55. float childRot[9];
    56. Vector tpos;
    57. PersonList pl;
    58. Person p;
    59. ol = Game::GetGameObjects("hlf2"); //Name des zu alarmierenden Fahrzeuges
    60. o = *ol.GetObject(0);
    61. Vehicle v(o);
    62. if (v.IsDestroyed())
    63. {
    64. Mission::PlayHint("Fahrzeug wurde zerstoert und steht deshalb nicht mehr zur Verfuegung.");
    65. return;
    66. }
    67. if (!v.HasCommand(FREEFORALERT))
    68. {
    69. Mission::PlayHint("Fahrzeug befindet sich bereits im Einsatz.");
    70. return;
    71. }
    72. else
    73. {
    74. Mission::PlayHint("Vollalarm OF Rüstringen"); //Alarmmeldung die angezeigt werden soll
    75. Audio::PlaySample("mod:Audio/FX/Alarm/lz3.wav"); //Pfad zum Alarmsound der abspielt werden soll
    76. Game::ExecuteCommand("alarm_fhz12",Caller,Target); //Hier Alarm Commands der weiteren Fahrzeuge einfŸgen
    77. Game::ExecuteCommand("alarm_fhz13",Caller,Target);
    78. Game::ExecuteCommand("alarm_fhz15",Caller,Target);
    79. //Um weitere Fahrzeuge in einen Lšschzug zu alarmieren, Commands hier einfŸgen..
    80. v.PushActionExecuteCommand(ACTION_NEWLIST, FREEFORALERT_FALSE, &v, 1, true);
    81. al=Game::GetActors("hlf2"); //Name des viruelles Objektes wo die EinsatzkrŠfte erstellt werden soll
    82. if(al.GetNumActors() > 0)
    83. {
    84. spawnpoint = *al.GetActor(0);
    85. spawnpos = spawnpoint.GetPosition();
    86. }
    87. else
    88. {
    89. Mission::PlayHint("Kann Eingang fuer Personal nicht finden!");
    90. return;
    91. }
    92. bool ob_personal = false;
    93. pl = v.GetPassengers();
    94. for(int i=0; i < pl.GetNumPersons(); i++)
    95. {
    96. if (pl.GetPerson(i)->HasCommand("entercar"))
    97. {
    98. ob_personal = true;
    99. }
    100. }
    101. bool vinbase = false;
    102. if(v.HasCommand(INBASE))
    103. {
    104. vinbase = true;
    105. }
    106. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    107. if (!ob_personal && vinbase)
    108. {
    109. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    110. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    111. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    112. Math::MultiplyMatrices(childRot, rot);
    113. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    114. GameObject *px(p);
    115. Game::FindFreePosition(px, spawnpos, 100);
    116. p.SetPosition(spawnpos);
    117. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    118. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    119. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    120. }
    121. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    122. if (!ob_personal && vinbase)
    123. {
    124. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Gruppenfuehrer.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    125. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    126. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    127. Math::MultiplyMatrices(childRot, rot);
    128. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    129. GameObject *px(p);
    130. Game::FindFreePosition(px, spawnpos, 100);
    131. p.SetPosition(spawnpos);
    132. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    133. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    134. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    135. }
    136. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    137. if (!ob_personal && vinbase)
    138. {
    139. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    140. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    141. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    142. Math::MultiplyMatrices(childRot, rot);
    143. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    144. GameObject *px(p);
    145. Game::FindFreePosition(px, spawnpos, 100);
    146. p.SetPosition(spawnpos);
    147. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    148. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    149. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    150. }
    151. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    152. if (!ob_personal && vinbase)
    153. {
    154. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    155. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    156. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    157. Math::MultiplyMatrices(childRot, rot);
    158. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    159. GameObject *px(p);
    160. Game::FindFreePosition(px, spawnpos, 100);
    161. p.SetPosition(spawnpos);
    162. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    163. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    164. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    165. }
    166. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    167. if (!ob_personal && vinbase)
    168. {
    169. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    170. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    171. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    172. Math::MultiplyMatrices(childRot, rot);
    173. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    174. GameObject *px(p);
    175. Game::FindFreePosition(px, spawnpos, 100);
    176. p.SetPosition(spawnpos);
    177. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    178. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    179. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    180. }
    181. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    182. if (!ob_personal && vinbase)
    183. {
    184. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    185. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    186. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    187. Math::MultiplyMatrices(childRot, rot);
    188. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    189. GameObject *px(p);
    190. Game::FindFreePosition(px, spawnpos, 100);
    191. p.SetPosition(spawnpos);
    192. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    193. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    194. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    195. }
    196. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    197. if (!ob_personal && vinbase)
    198. {
    199. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    200. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    201. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    202. Math::MultiplyMatrices(childRot, rot);
    203. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    204. GameObject *px(p);
    205. Game::FindFreePosition(px, spawnpos, 100);
    206. p.SetPosition(spawnpos);
    207. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    208. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    209. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    210. }
    211. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    212. if (!ob_personal && vinbase)
    213. {
    214. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","hlf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    215. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    216. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    217. Math::MultiplyMatrices(childRot, rot);
    218. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    219. GameObject *px(p);
    220. Game::FindFreePosition(px, spawnpos, 100);
    221. p.SetPosition(spawnpos);
    222. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    223. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    224. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    225. }
    226. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    227. //FŸr weitere EinsatzkrŠfte einfach neue Blšcke hier hinzufŸgen
    228. bool ready = false;
    229. if (ob_personal)
    230. {
    231. ready= true;
    232. }
    233. if (vinbase)
    234. {
    235. v.PushActionWait(ACTION_APPEND, 20.0); //Zeit bevor Tor aufgeht
    236. v.PushActionExecuteCommand(ACTION_APPEND, "OpenGate", &v, 1, true);
    237. v.PushActionWait(ACTION_APPEND, 0.0); //Zeit bis Fahrzeug fŠhrt nachdem das Tor offen ist
    238. }
    239. if (!ready && !vinbase))
    240. {
    241. Mission::PlayHint("Ohne Personal, Einsatz nicht moeglich!");
    242. }
    243. v.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &v, 1, true);
    244. if(!v.HasCommand("DUMMYHasSiren"))
    245. {
    246. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    247. }
    248. v.PushActionExecuteCommand(ACTION_APPEND, INBASE_FALSE, &v, 1, true);
    249. if (ready && !vinbase))
    250. {
    251. if(!v.HasCommand("DUMMYHasSiren"))
    252. {
    253. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    254. }
    255. }
    256. //Wenn nicht in Basis aber Einsatzbereit?
    257. tpos = Game::GetCommandPos();
    258. if (!vinbase && ready)
    259. {
    260. v.EnableBlueLights(true);
    261. v.PushActionExecuteCommand(ACTION_NEWLIST, "Status3",Caller,0,false);
    262. v.PushActionMove(ACTION_APPEND, tpos);
    263. v.PushActionExecuteCommand(ACTION_APPEND, "Status4",Caller,0,false);
    264. }
    265. // losfahren zum einsatzort;
    266. tpos = Game::GetCommandPos();
    267. v.PushActionExecuteCommand(ACTION_APPEND, "Status3",Caller,0,false);
    268. v.PushActionMove(ACTION_APPEND, tpos);
    269. v.PushActionExecuteCommand(ACTION_APPEND, "Status4",Caller,0,false);
    270. }
    271. }
    272. };
    273. object alarm_fhz12 : CommandScript //Name des Commands (muss mit oben Ÿbereinstimmen!)
    274. {
    275. alarm_fhz12() //Name des Commands
    276. {
    277. SetIcon(IMG_ICON);
    278. SetCursor(IMG_CURSOR);
    279. SetValidTargets(ACTOR_FLOOR | ACTOR_STREET);
    280. }
    281. bool CheckPossible(GameObject *Caller)
    282. {
    283. GameObjectList ol;
    284. GameObject *o;
    285. ol = Game::GetGameObjects("tsfw1"); //Name des zu alarmierenden Fahrzeuges
    286. o = *ol.GetObject(0);
    287. Vehicle v(o);
    288. if (!v.HasCommand(FREEFORALERT))
    289. return false;
    290. return true;
    291. }
    292. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    293. {
    294. if (Caller->GetID() == Target->GetID())
    295. return false;
    296. return true;
    297. }
    298. void PushActions(GameObject *Caller, Actor *Target, int childID)
    299. {
    300. GameObjectList ol;
    301. GameObject *o;
    302. ActorList al;
    303. Actor spawnpoint;
    304. Vector spawnpos;
    305. float rot[9];
    306. float childRot[9];
    307. Vector tpos;
    308. PersonList pl;
    309. Person p;
    310. ol = Game::GetGameObjects("tsfw1"); //Name des zu alarmierenden Fahrzeuges
    311. o = *ol.GetObject(0);
    312. Vehicle v(o);
    313. if (v.IsDestroyed())
    314. {
    315. Mission::PlayHint("Fahrzeug wurde zerstoert und steht deshalb nicht mehr zur Verfuegung.");
    316. return;
    317. }
    318. if (!v.HasCommand(FREEFORALERT))
    319. {
    320. Mission::PlayHint("Der 20/41-20 ist bereits im Einsatz!");
    321. return;
    322. }
    323. else
    324. {
    325. v.PushActionExecuteCommand(ACTION_NEWLIST, FREEFORALERT_FALSE, &v, 1, true);
    326. al=Game::GetActors("tsfw1"); //Name des viruelles Objektes wo die EinsatzkrŠfte erstellt werden soll
    327. if(al.GetNumActors() > 0)
    328. {
    329. spawnpoint = *al.GetActor(0);
    330. spawnpos = spawnpoint.GetPosition();
    331. }
    332. else
    333. {
    334. Mission::PlayHint("Kann Eingang fuer Personal nicht finden!");
    335. return;
    336. }
    337. bool ob_personal = false;
    338. pl = v.GetPassengers();
    339. for(int i=0; i < pl.GetNumPersons(); i++)
    340. {
    341. if (pl.GetPerson(i)->HasCommand("entercar"))
    342. {
    343. ob_personal = true;
    344. }
    345. }
    346. bool vinbase = false;
    347. if(v.HasCommand(INBASE))
    348. {
    349. vinbase = true;
    350. }
    351. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    352. if (!ob_personal && vinbase)
    353. {
    354. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    355. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    356. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    357. Math::MultiplyMatrices(childRot, rot);
    358. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    359. GameObject *px(p);
    360. Game::FindFreePosition(px, spawnpos, 100);
    361. p.SetPosition(spawnpos);
    362. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    363. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    364. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    365. }
    366. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    367. if (!ob_personal && vinbase)
    368. {
    369. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Gruppenfuehrer.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    370. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    371. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    372. Math::MultiplyMatrices(childRot, rot);
    373. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    374. GameObject *px(p);
    375. Game::FindFreePosition(px, spawnpos, 100);
    376. p.SetPosition(spawnpos);
    377. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    378. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    379. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    380. }
    381. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    382. if (!ob_personal && vinbase)
    383. {
    384. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    385. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    386. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    387. Math::MultiplyMatrices(childRot, rot);
    388. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    389. GameObject *px(p);
    390. Game::FindFreePosition(px, spawnpos, 100);
    391. p.SetPosition(spawnpos);
    392. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    393. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    394. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    395. }
    396. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    397. if (!ob_personal && vinbase)
    398. {
    399. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    400. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    401. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    402. Math::MultiplyMatrices(childRot, rot);
    403. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    404. GameObject *px(p);
    405. Game::FindFreePosition(px, spawnpos, 100);
    406. p.SetPosition(spawnpos);
    407. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    408. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    409. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    410. }
    411. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    412. if (!ob_personal && vinbase)
    413. {
    414. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    415. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    416. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    417. Math::MultiplyMatrices(childRot, rot);
    418. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    419. GameObject *px(p);
    420. Game::FindFreePosition(px, spawnpos, 100);
    421. p.SetPosition(spawnpos);
    422. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    423. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    424. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    425. }
    426. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    427. if (!ob_personal && vinbase)
    428. {
    429. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tsfw1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    430. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    431. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    432. Math::MultiplyMatrices(childRot, rot);
    433. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    434. GameObject *px(p);
    435. Game::FindFreePosition(px, spawnpos, 100);
    436. p.SetPosition(spawnpos);
    437. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    438. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    439. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    440. }
    441. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    442. //FŸr weitere EinsatzkrŠfte einfach neue Blšcke hier hinzufŸgen
    443. bool ready = false;
    444. if (ob_personal)
    445. {
    446. ready= true;
    447. }
    448. if (vinbase)
    449. {
    450. v.PushActionWait(ACTION_APPEND, 40.0); //Zeit bevor Tor aufgeht
    451. v.PushActionExecuteCommand(ACTION_APPEND, "OpenGate", &v, 1, true);
    452. v.PushActionWait(ACTION_APPEND, 0.0); //Zeit bis Fahrzeug fŠhrt nachdem das Tor offen ist
    453. }
    454. if (!ready && !vinbase))
    455. {
    456. Mission::PlayHint("Ohne Personal, Einsatz nicht moeglich!");
    457. }
    458. v.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &v, 1, true);
    459. if(!v.HasCommand("DUMMYHasSiren"))
    460. {
    461. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    462. }
    463. v.PushActionExecuteCommand(ACTION_APPEND, INBASE_FALSE, &v, 1, true);
    464. if (ready && !vinbase))
    465. {
    466. if(!v.HasCommand("DUMMYHasSiren"))
    467. {
    468. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    469. }
    470. }
    471. tpos = Game::GetCommandPos();
    472. v.PushActionMove(ACTION_APPEND, tpos);
    473. }
    474. }
    475. };
    476. object alarm_fhz13 : CommandScript //Name des Commands (muss mit oben Ÿbereinstimmen!)
    477. {
    478. alarm_fhz13() //Name des Commands
    479. {
    480. SetIcon(IMG_ICON);
    481. SetCursor(IMG_CURSOR);
    482. SetValidTargets(ACTOR_FLOOR | ACTOR_STREET);
    483. }
    484. bool CheckPossible(GameObject *Caller)
    485. {
    486. GameObjectList ol;
    487. GameObject *o;
    488. ol = Game::GetGameObjects("lf2"); //Name des zu alarmierenden Fahrzeuges
    489. o = *ol.GetObject(0);
    490. Vehicle v(o);
    491. if (!v.HasCommand(FREEFORALERT))
    492. return false;
    493. return true;
    494. }
    495. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    496. {
    497. if (Caller->GetID() == Target->GetID())
    498. return false;
    499. return true;
    500. }
    501. void PushActions(GameObject *Caller, Actor *Target, int childID)
    502. {
    503. GameObjectList ol;
    504. GameObject *o;
    505. ActorList al;
    506. Actor spawnpoint;
    507. Vector spawnpos;
    508. float rot[9];
    509. float childRot[9];
    510. Vector tpos;
    511. PersonList pl;
    512. Person p;
    513. ol = Game::GetGameObjects("lf2"); //Name des zu alarmierenden Fahrzeuges
    514. o = *ol.GetObject(0);
    515. Vehicle v(o);
    516. if (v.IsDestroyed())
    517. {
    518. Mission::PlayHint("Fahrzeug wurde zerstoert und steht deshalb nicht mehr zur Verfuegung.");
    519. return;
    520. }
    521. if (!v.HasCommand(FREEFORALERT))
    522. {
    523. Mission::PlayHint("Der 20/44-20 ist bereits im Einsatz!");
    524. return;
    525. }
    526. else
    527. {
    528. v.PushActionExecuteCommand(ACTION_NEWLIST, FREEFORALERT_FALSE, &v, 1, true);
    529. al=Game::GetActors("lf2"); //Name des viruelles Objektes wo die EinsatzkrŠfte erstellt werden soll
    530. if(al.GetNumActors() > 0)
    531. {
    532. spawnpoint = *al.GetActor(0);
    533. spawnpos = spawnpoint.GetPosition();
    534. }
    535. else
    536. {
    537. Mission::PlayHint("Kann Eingang fuer Personal nicht finden!");
    538. return;
    539. }
    540. bool ob_personal = false;
    541. pl = v.GetPassengers();
    542. for(int i=0; i < pl.GetNumPersons(); i++)
    543. {
    544. if (pl.GetPerson(i)->HasCommand("entercar"))
    545. {
    546. ob_personal = true;
    547. }
    548. }
    549. bool vinbase = false;
    550. if(v.HasCommand(INBASE))
    551. {
    552. vinbase = true;
    553. }
    554. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    555. if (!ob_personal && vinbase)
    556. {
    557. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    558. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    559. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    560. Math::MultiplyMatrices(childRot, rot);
    561. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    562. GameObject *px(p);
    563. Game::FindFreePosition(px, spawnpos, 100);
    564. p.SetPosition(spawnpos);
    565. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    566. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    567. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    568. }
    569. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    570. if (!ob_personal && vinbase)
    571. {
    572. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    573. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    574. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    575. Math::MultiplyMatrices(childRot, rot);
    576. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    577. GameObject *px(p);
    578. Game::FindFreePosition(px, spawnpos, 100);
    579. p.SetPosition(spawnpos);
    580. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    581. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    582. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    583. }
    584. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    585. if (!ob_personal && vinbase)
    586. {
    587. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Gruppenfuehrer.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    588. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    589. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    590. Math::MultiplyMatrices(childRot, rot);
    591. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    592. GameObject *px(p);
    593. Game::FindFreePosition(px, spawnpos, 100);
    594. p.SetPosition(spawnpos);
    595. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    596. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    597. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    598. }
    599. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    600. if (!ob_personal && vinbase)
    601. {
    602. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    603. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    604. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    605. Math::MultiplyMatrices(childRot, rot);
    606. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    607. GameObject *px(p);
    608. Game::FindFreePosition(px, spawnpos, 100);
    609. p.SetPosition(spawnpos);
    610. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    611. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    612. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    613. }
    614. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    615. if (!ob_personal && vinbase)
    616. {
    617. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    618. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    619. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    620. Math::MultiplyMatrices(childRot, rot);
    621. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    622. GameObject *px(p);
    623. Game::FindFreePosition(px, spawnpos, 100);
    624. p.SetPosition(spawnpos);
    625. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    626. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    627. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    628. }
    629. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    630. if (!ob_personal && vinbase)
    631. {
    632. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    633. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    634. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    635. Math::MultiplyMatrices(childRot, rot);
    636. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    637. GameObject *px(p);
    638. Game::FindFreePosition(px, spawnpos, 100);
    639. p.SetPosition(spawnpos);
    640. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    641. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    642. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    643. }
    644. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    645. if (!ob_personal && vinbase)
    646. {
    647. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    648. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    649. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    650. Math::MultiplyMatrices(childRot, rot);
    651. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    652. GameObject *px(p);
    653. Game::FindFreePosition(px, spawnpos, 100);
    654. p.SetPosition(spawnpos);
    655. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    656. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    657. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    658. }
    659. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    660. if (!ob_personal && vinbase)
    661. {
    662. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    663. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    664. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    665. Math::MultiplyMatrices(childRot, rot);
    666. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    667. GameObject *px(p);
    668. Game::FindFreePosition(px, spawnpos, 100);
    669. p.SetPosition(spawnpos);
    670. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    671. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    672. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    673. }
    674. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    675. if (!ob_personal && vinbase)
    676. {
    677. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","lf2"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    678. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    679. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    680. Math::MultiplyMatrices(childRot, rot);
    681. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    682. GameObject *px(p);
    683. Game::FindFreePosition(px, spawnpos, 100);
    684. p.SetPosition(spawnpos);
    685. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    686. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    687. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    688. }
    689. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    690. //FŸr weitere EinsatzkrŠfte einfach neue Blšcke hier hinzufŸgen
    691. bool ready = false;
    692. if (ob_personal)
    693. {
    694. ready= true;
    695. }
    696. if (vinbase)
    697. {
    698. v.PushActionWait(ACTION_APPEND, 30.0); //Zeit bevor Tor aufgeht
    699. v.PushActionExecuteCommand(ACTION_APPEND, "OpenGate", &v, 1, true);
    700. v.PushActionWait(ACTION_APPEND, 0.0); //Zeit bis Fahrzeug fŠhrt nachdem das Tor offen ist
    701. }
    702. if (!ready && !vinbase))
    703. {
    704. Mission::PlayHint("Ohne Personal, Einsatz nicht moeglich!");
    705. }
    706. v.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &v, 1, true);
    707. if(!v.HasCommand("DUMMYHasSiren"))
    708. {
    709. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    710. }
    711. v.PushActionExecuteCommand(ACTION_APPEND, INBASE_FALSE, &v, 1, true);
    712. if (ready && !vinbase))
    713. {
    714. if(!v.HasCommand("DUMMYHasSiren"))
    715. {
    716. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    717. }
    718. }
    719. tpos = Game::GetCommandPos();
    720. v.PushActionMove(ACTION_APPEND, tpos);
    721. }
    722. }
    723. };
    724. object alarm_fhz15 : CommandScript //Name des Commands (muss mit oben Ÿbereinstimmen!)
    725. {
    726. alarm_fhz15() //Name des Commands
    727. {
    728. SetIcon(IMG_ICON);
    729. SetCursor(IMG_CURSOR);
    730. SetValidTargets(ACTOR_FLOOR | ACTOR_STREET);
    731. }
    732. bool CheckPossible(GameObject *Caller)
    733. {
    734. GameObjectList ol;
    735. GameObject *o;
    736. ol = Game::GetGameObjects("tlf1"); //Name des zu alarmierenden Fahrzeuges
    737. o = *ol.GetObject(0);
    738. Vehicle v(o);
    739. if (!v.HasCommand(FREEFORALERT))
    740. return false;
    741. return true;
    742. }
    743. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
    744. {
    745. if (Caller->GetID() == Target->GetID())
    746. return false;
    747. return true;
    748. }
    749. void PushActions(GameObject *Caller, Actor *Target, int childID)
    750. {
    751. GameObjectList ol;
    752. GameObject *o;
    753. ActorList al;
    754. Actor spawnpoint;
    755. Vector spawnpos;
    756. float rot[9];
    757. float childRot[9];
    758. Vector tpos;
    759. PersonList pl;
    760. Person p;
    761. ol = Game::GetGameObjects("tlf1"); //Name des zu alarmierenden Fahrzeuges
    762. o = *ol.GetObject(0);
    763. Vehicle v(o);
    764. if (v.IsDestroyed())
    765. {
    766. Mission::PlayHint("Fahrzeug wurde zerstoert und steht deshalb nicht mehr zur Verfuegung.");
    767. return;
    768. }
    769. if (!v.HasCommand(FREEFORALERT))
    770. {
    771. Mission::PlayHint("Der 20/20-20 ist bereits im Einsatz!");
    772. return;
    773. }
    774. else
    775. {
    776. v.PushActionExecuteCommand(ACTION_NEWLIST, FREEFORALERT_FALSE, &v, 1, true);
    777. al=Game::GetActors("tlf1"); //Name des viruelles Objektes wo die EinsatzkrŠfte erstellt werden soll
    778. if(al.GetNumActors() > 0)
    779. {
    780. spawnpoint = *al.GetActor(0);
    781. spawnpos = spawnpoint.GetPosition();
    782. }
    783. else
    784. {
    785. Mission::PlayHint("Kann Eingang fuer Personal nicht finden!");
    786. return;
    787. }
    788. bool ob_personal = false;
    789. pl = v.GetPassengers();
    790. for(int i=0; i < pl.GetNumPersons(); i++)
    791. {
    792. if (pl.GetPerson(i)->HasCommand("entercar"))
    793. {
    794. ob_personal = true;
    795. }
    796. }
    797. bool vinbase = false;
    798. if(v.HasCommand(INBASE))
    799. {
    800. vinbase = true;
    801. }
    802. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    803. if (!ob_personal && vinbase)
    804. {
    805. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tlf1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    806. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    807. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    808. Math::MultiplyMatrices(childRot, rot);
    809. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    810. GameObject *px(p);
    811. Game::FindFreePosition(px, spawnpos, 100);
    812. p.SetPosition(spawnpos);
    813. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    814. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    815. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    816. }
    817. //Personal Block/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    818. if (!ob_personal && vinbase)
    819. {
    820. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Normal.e4p","tlf1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    821. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    822. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    823. Math::MultiplyMatrices(childRot, rot);
    824. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    825. GameObject *px(p);
    826. Game::FindFreePosition(px, spawnpos, 100);
    827. p.SetPosition(spawnpos);
    828. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    829. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    830. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    831. }
    832. //Personal Block////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    833. if (!ob_personal && vinbase)
    834. {
    835. p = Game::CreatePerson("mod:Prototypes/Persons/Fire Department/FF_Gruppenfuehrer.e4p","tlf1"); //Pfad zum Prototyp der Einsatzkraft & Name der Einsatzkraft (wie Fahrzeug)
    836. p.GetRotation(rot[0], rot[1], rot[2], rot[3], rot[4], rot[5], rot[6], rot[7], rot[8]);
    837. Math::EulerToMatrix(0.f, 0.f, 0.f, childRot);
    838. Math::MultiplyMatrices(childRot, rot);
    839. p.SetRotation(childRot[0], childRot[1], childRot[2], childRot[3], childRot[4], childRot[5], childRot[6], childRot[7], childRot[8]);
    840. GameObject *px(p);
    841. Game::FindFreePosition(px, spawnpos, 100);
    842. p.SetPosition(spawnpos);
    843. p.PushActionExecuteCommand(ACTION_NEWLIST, COMMANDABLE_FALSE, &p, 1, true);
    844. p.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &p, 1, true);
    845. p.PushActionExecuteCommand(ACTION_APPEND, "entercar", o, 0, false);
    846. }
    847. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    848. //FŸr weitere EinsatzkrŠfte einfach neue Blšcke hier hinzufŸgen
    849. bool ready = false;
    850. if (ob_personal)
    851. {
    852. ready= true;
    853. }
    854. if (vinbase)
    855. {
    856. v.PushActionWait(ACTION_APPEND, 45.0); //Zeit bevor Tor aufgeht
    857. v.PushActionExecuteCommand(ACTION_APPEND, "OpenGate", &v, 1, true);
    858. v.PushActionWait(ACTION_APPEND, 0.0); //Zeit bis Fahrzeug fŠhrt nachdem das Tor offen ist
    859. }
    860. if (!ready && !vinbase))
    861. {
    862. Mission::PlayHint("Ohne Personal, Einsatz nicht moeglich!");
    863. }
    864. v.PushActionExecuteCommand(ACTION_APPEND, COMMANDABLE_TRUE, &v, 1, true);
    865. if(!v.HasCommand("DUMMYHasSiren"))
    866. {
    867. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    868. }
    869. v.PushActionExecuteCommand(ACTION_APPEND, INBASE_FALSE, &v, 1, true);
    870. if (ready && !vinbase))
    871. {
    872. if(!v.HasCommand("DUMMYHasSiren"))
    873. {
    874. v.PushActionExecuteCommand(ACTION_APPEND, "VCmdSiren", o, 0, false);
    875. }
    876. }
    877. tpos = Game::GetCommandPos();
    878. v.PushActionMove(ACTION_APPEND, tpos);
    879. }
    880. }
    881. };
    882. //Hier neuer Command hinzufŸgen um eine weiteres Fahrzeug im Lšschzug zu alarmieren....
    Alles anzeigen
  • So nach einiger Zeit habe ich mal wieder etwas Luft an EM4 zu basteln.
    Ich hoffe, dass der Link so funktioniert.
    Ich habe mal ein Video gemacht.
    Fahrzeuge rücken aus: TSF-W, HLF, TLF, LF16-TS.
    Ausrücken sollen sie aber so: HLF, LF16-TS, TSF-W, TLF

    Das Anpassen der Zeiten im Script hat 0 Auswirkung auf das Spiel.
    Ich bin wirklich mit meinem Latein am Ende.
    Es ist ja nicht nur der Script, bei dem das so chaotisch abläuft.
    Bei einigen Zugscripten läuft das so quer.

    Hier das Video - Wenn es nicht klappt bitte bescheid geben.

    Beste Grüße
    Flosie