Advertisement
Guest User

LAToFIreStation

a guest
Jul 12th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.13 KB | None | 0 0
  1. //******************************************************************************************
  2. // #Version 1.4#
  3. //
  4. // Includes: To fire station command.
  5. //
  6. // - VcmdToFireStation
  7. //
  8. // Script by Hoppah
  9. //
  10. // Usage of this script in other mods is NOT allowed without permission of Hoppah
  11. //
  12. //******************************************************************************************
  13.  
  14. const char CMD_SIREN[] = "VcmdSiren";
  15. const char CMD_AUTOSIREN_OFF[] = "VcmdAutoSirenOff";
  16. const char CMD_WARNINGLIGHTS[] = "VcmdWarningLightsOn";
  17. const char DUMMY_WARNINGLIGHTS[] = "DummyHasWarningLights";
  18. const char CMD_FLOODLIGHTS_OFF[] = "VcmdFloodLightsOff";
  19. const char CMD_FLOODLIGHTS_ON[] = "VcmdFloodLightsOn";
  20. const char CMD_GETTILLER[] = "VcmdGetTiller";
  21. const char CMD_FLASHINGLIGHTS[] = "VcmdFlashingLights";
  22. const char CMD_GOHOME[] = "GoHome";
  23. const char CMD_TOHOSPITAL[] = "VcmdToHospital";
  24. const char CMD_TOFIRESTATION[] = "VcmdToFireStation";
  25. const char CMD_PATROL[] = "VcmdPatrol";
  26. const char CMD_STANDBY_ON[] = "VcmdStandbyOn";
  27. const char CMD_STANDBY_OFF[] = "VcmdStandbyOff";
  28. const char CMD_GETTILLER[] = "VcmdGetTiller";
  29. const char DUMMY_TILLERGOHOME[] = "DummyTillerGoHome";
  30. const char DUMMY_DISABLE[] = "DummyDisableSiren";
  31. const char DUMMY_HASSIREN[] = "DummyHasSiren";
  32. const char DUMMY_PATROL[] = "DummyPatrol";
  33. const char DUMMY_GATES[] = "DummyGates";
  34. const char DUMMY_FIRESTATION[] = "DummyAtFireStation";
  35. const char DUMMY_CHECKPARKED[] = "DummyCheckParked";
  36. const char DUMMY_ISTRAILED[] = "DummyIsTrailed";
  37. const char DUMMY_VCALLED[] = "DummyVehicleCalled";
  38. const char DUMMY_HOSESON[] = "DummyHosesAreOn";
  39. const char DUMMY_TILLER[] = "DummyTiller";
  40. const char OBJ_BATTALION[] = "mod:Prototypes/Vehicles/Kent FARS/Officer_car.e4p";
  41. const char OBJ_ENGINE01[] = "mod:Prototypes/Vehicles/02 LA Fire Department/fire_engine1.e4p";
  42. const char OBJ_ENGINE02[] = "mod:Prototypes/Vehicles/02 LA Fire Department/fire_engine2.e4p";
  43. const char OBJ_USAR[] = "mod:Prototypes/Vehicles/02 LA Fire Department/usar_squad.e4p";
  44. const char OBJ_LADDER[] = "mod:Prototypes/Vehicles/02 LA Fire Department/aerial_ladder.e4p";
  45. const char OBJ_TILLER[] = "mod:Prototypes/Vehicles/02 LA Fire Department/tiller_cabin.e4p";
  46. const char OBJ_BATTALION[] = "mod:Prototypes/Vehicles/Kent FARS/Officer_car.e4p";
  47. const char OBJ_HAZMATSQUAD[] = "mod:Prototypes/Vehicles/02 LA Fire Department/hazmat_squad.e4p";
  48. const char OBJ_AMBULANCE01[] = "mod:Prototypes/Vehicles/01 LA Ambulance/ambulance01.e4p";
  49. const char OBJ_AMBULANCE02[] = "mod:Prototypes/Vehicles/01 LA Ambulance/ambulance02.e4p";
  50. const char OBJ_AMBULANCE03[] = "mod:Prototypes/Vehicles/01 LA Ambulance/ambulance03.e4p";
  51. const char OBJ_AMBULANCE04[] = "mod:Prototypes/Vehicles/01 LA Ambulance/ambulance04.e4p";
  52. const char VO_SPAWN01[] = "fs_spawn01";
  53. const char VO_SPAWN02[] = "fs_spawn02";
  54. const char VO_SPAWN03[] = "fs_spawn03";
  55. const char VO_FP1[] = "fs_gate01";
  56. const char VO_FP2[] = "fs_gate02";
  57. const char VO_FP3[] = "fs_gate03";
  58. const char VO_FP4[] = "fs_gate04";
  59. const char VO_FP5[] = "fs_gate05";
  60. const char VO_FP6[] = "fs_gate06";
  61. const char VO_FP7[] = "fs_gate07";
  62. const char VO_FP8[] = "fs_gate08";
  63. const char VO_TURNTO1[] = "fs_vogate01a";
  64. const char VO_TURNTO2[] = "fs_vogate02a";
  65. const char VO_TURNTO3[] = "fs_vogate03a";
  66. const char VO_TURNTO4[] = "fs_vogate04a";
  67. const char VO_TURNTO5[] = "fs_vogate05a";
  68. const char VO_TURNTO6[] = "fs_vogate06a";
  69. const char VO_TURNTO7[] = "fs_vogate07a";
  70. const char VO_TURNTO8[] = "fs_vogate08a";
  71. const char VO_AMBULANCE01[] = "fs_ambulance01";
  72. const char VO_AMBULANCE02[] = "fs_ambulance02";
  73. const char VO_AMBULANCE03[] = "fs_ambulance03";
  74. const char VO_AMBULANCE04[] = "fs_ambulance04";
  75. const char VO_ENGINE01[] = "fs_engine01";
  76. const char VO_ENGINE02[] = "fs_engine02";
  77. const char VO_ENGINE03[] = "fs_engine03";
  78. const char VO_ENGINE04[] = "fs_engine04";
  79. const char VO_ENGINE05[] = "fs_engine05";
  80. const char VO_BATTALION[] = "fs_battalion";
  81. const char VO_BATTALION2[] = "fs_battalion2";
  82. const char VO_USAR[] = "fs_usar";
  83. const char VO_LADDER[] = "fs_ladder";
  84. const char VO_HAZMAT[] = "fs_hazmat";
  85. const char VO_SQUAD01[] = "fs_squad01";
  86. const char VO_SQUAD02[] = "fs_squad02";
  87. const char SND_TOSTATION[] = "mod:Audio/FX/radio/1019.wav";
  88. const char HINT_NOTVALID[] = "This vehicle doesn't belong in the fire station!";
  89. const char HINT_NOSPACE[] = "No space at the fire station, vehicle returns to base!";
  90. const char HINT_NOSPACE_AMBULANCE[] = "No space at the fire station, vehicle starts a patrol!";
  91. const char HINT_TRANSPORTS[] = "The ambulance has transports, it will go to the hospital first!";
  92.  
  93. const char NAME_CONTROLPANEL[] = "fire_station_controlpanel";
  94. const char NAME_CONTROLPANEL2[] = "fire_station_controlpanel2";
  95.  
  96. int DummyGroup = 32;
  97.  
  98. object VcmdToFireStation : CommandScript
  99. {
  100. VcmdToFireStation()
  101. {
  102. SetCursor("tofirestation");
  103. SetIcon("tofirestation");
  104. SetGroupID(DummyGroup);
  105. SetGroupLeader(true);
  106. SetRestrictions(RESTRICT_SELFEXECUTE);
  107. }
  108.  
  109. bool CheckPossible(GameObject *Caller)
  110. {
  111. if (!Caller->IsValid())
  112. return false;
  113.  
  114. if (!Game::IsFreeplay())
  115. return false;
  116.  
  117. Vehicle v(Caller);
  118. if (v.IsCollidingWithVirtualObject(VO_SQUAD01) || v.IsCollidingWithVirtualObject(VO_SQUAD02) || v.IsCollidingWithVirtualObject(VO_BATTALION) || (v.HasCommand(DUMMY_ISTRAILED) && !v.HasCommand(CMD_GETTILLER)) || v.HasCommand(DUMMY_HOSESON) || v.IsInstalled())
  119. return false;
  120.  
  121. if (!v.HasCommand("MoveTo"))
  122. return false;
  123.  
  124. if (v.HasCommand(CMD_FLOODLIGHTS_OFF) && (StrCompare(v.GetPrototypeFileName(), OBJ_HAZMATSQUAD) == 0 || StrCompare(v.GetPrototypeFileName(), OBJ_USAR) == 0))
  125. return false;
  126.  
  127. return true;
  128. }
  129.  
  130. bool CheckTarget(GameObject *Caller, Actor *Target, int childID)
  131. {
  132. if (!Caller->IsValid() || !Target->IsValid() || (Caller->GetID() != Target->GetID()))
  133. return false;
  134.  
  135. return true;
  136. }
  137.  
  138. void PushActions(GameObject *Caller, Actor *Target, int ChildID)
  139. {
  140. Vector Pos = Caller->GetPosition();
  141.  
  142. Vehicle v(Caller);
  143. if (v.GetVehicleType() == VT_AMBULANCE_RTW && v.GetNumTransported() > 0)
  144. {
  145. v.PushActionExecuteCommand(ACTION_NEWLIST, CMD_TOHOSPITAL, Caller, 0, false);
  146. Mission::PlayHint(HINT_TRANSPORTS);
  147. return;
  148. }
  149. if (v.IsBlueLightEnabled())
  150. Game::ExecuteCommand(CMD_FLASHINGLIGHTS, &v, &v);
  151. if (v.HasCommand(DUMMY_TILLERGOHOME))
  152. v.RemoveCommand(DUMMY_TILLERGOHOME);
  153. if (v.HasCommand(CMD_STANDBY_OFF))
  154. {
  155. v.RemoveCommand(CMD_STANDBY_OFF);
  156. v.AssignCommand(CMD_STANDBY_ON);
  157. }
  158. if (v.HasCommand(DUMMY_WARNINGLIGHTS))
  159. {
  160. v.EnableBlinker(BLT_NONE);
  161. v.RemoveCommand(DUMMY_WARNINGLIGHTS);
  162. v.AssignCommand(CMD_WARNINGLIGHTS);
  163. }
  164. if (v.HasCommand(CMD_FLOODLIGHTS_OFF))
  165. {
  166. v.EnableSpecialLights(false);
  167. v.RemoveCommand(CMD_FLOODLIGHTS_OFF);
  168. v.AssignCommand(CMD_FLOODLIGHTS_ON);
  169. }
  170. if (v.HasObjectPath(NULL))
  171. Game::ExecuteCommand(DUMMY_PATROL, &v, &v);
  172. if (v.HasCommand(DUMMY_HASSIREN) && v.HasCommand(CMD_AUTOSIREN_OFF))
  173. Game::ExecuteCommand(DUMMY_DISABLE, &v, &v);
  174. if(StrCompare(v.GetPrototypeFileName(), OBJ_BATTALION) == 0)
  175. {
  176. GameObjectList l4;
  177. Game::CollectObstaclesOnVirtualObject(VO_BATTALION, l4, ACTOR_VEHICLE);
  178. if(l4.GetNumObjects() > 0)
  179. {
  180. Mission::PlayHint(HINT_NOSPACE);
  181. v.PushActionReturnToBase(ACTION_NEWLIST);
  182. return;
  183. } else
  184. {
  185. ActorList l1 = Game::GetActors(VO_BATTALION2);
  186. ActorList l2 = Game::GetActors(VO_BATTALION);
  187. }
  188. }
  189. else if(StrCompare(v.GetPrototypeFileName(), OBJ_USAR) == 0)
  190. {
  191. GameObjectList l4;
  192. Game::CollectObstaclesOnVirtualObject(VO_USAR, l4, ACTOR_VEHICLE);
  193. if(l4.GetNumObjects() > 0)
  194. {
  195. Mission::PlayHint(HINT_NOSPACE);
  196. v.PushActionReturnToBase(ACTION_NEWLIST);
  197. return;
  198. } else
  199. {
  200. ActorList l1 = Game::GetActors(VO_FP2);
  201. ActorList l2 = Game::GetActors(VO_TURNTO2);
  202. }
  203. }
  204. else if(StrCompare(v.GetPrototypeFileName(), OBJ_LADDER) == 0 || StrCompare(v.GetPrototypeFileName(), OBJ_TILLER) == 0)
  205. {
  206. GameObjectList l4;
  207. Game::CollectObstaclesOnVirtualObject(VO_LADDER, l4, ACTOR_VEHICLE);
  208. if(l4.GetNumObjects() > 0)
  209. {
  210. Mission::PlayHint(HINT_NOSPACE);
  211. Game::ExecuteCommand(CMD_GOHOME, &v, &v);
  212. return;
  213. } else
  214. {
  215. ActorList l1 = Game::GetActors(VO_FP3);
  216. ActorList l2 = Game::GetActors(VO_TURNTO3);
  217. }
  218. }
  219. else if(StrCompare(v.GetPrototypeFileName(), OBJ_HAZMATSQUAD) == 0)
  220. {
  221. GameObjectList l4;
  222. Game::CollectObstaclesOnVirtualObject(VO_HAZMAT, l4, ACTOR_VEHICLE);
  223. if(l4.GetNumObjects() > 0)
  224. {
  225. Mission::PlayHint(HINT_NOSPACE);
  226. v.PushActionReturnToBase(ACTION_NEWLIST);
  227. return;
  228. } else
  229. {
  230. ActorList l1 = Game::GetActors(VO_FP6);
  231. ActorList l2 = Game::GetActors(VO_TURNTO6);
  232. }
  233. }
  234. else if(StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE02) == 0 || StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE03) == 0 || StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE04) == 0)
  235. {
  236. bool Possible = false;
  237.  
  238. GameObjectList l4;
  239. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE01, l4, ACTOR_VEHICLE);
  240. if(l4.GetNumObjects() == 0 && !Possible)
  241. Possible = true;
  242.  
  243. GameObjectList l5;
  244. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE02, l5, ACTOR_VEHICLE);
  245. if(l5.GetNumObjects() == 0 && !Possible)
  246. Possible = true;
  247.  
  248. GameObjectList l6;
  249. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE03, l6, ACTOR_VEHICLE);
  250. if(l6.GetNumObjects() == 0 && !Possible)
  251. Possible = true;
  252.  
  253. if (Possible)
  254. {
  255. ActorList l1 = Game::GetActors(VO_FP1);
  256. ActorList l2 = Game::GetActors(VO_TURNTO1);
  257. } else
  258. {
  259. Mission::PlayHint(HINT_NOSPACE_AMBULANCE);
  260. v.PushActionExecuteCommand(ACTION_NEWLIST, CMD_PATROL, Caller, 0, false);
  261. return;
  262. }
  263. }
  264. else if(StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE01) == 0)
  265. {
  266. bool Possible = false;
  267.  
  268. GameObjectList l4;
  269. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE04, l4, ACTOR_VEHICLE);
  270. if(l4.GetNumObjects() == 0 && !Possible)
  271. Possible = true;
  272.  
  273. if (Possible)
  274. {
  275. ActorList l1 = Game::GetActors(VO_FP8);
  276. ActorList l2 = Game::GetActors(VO_TURNTO8);
  277. } else
  278. {
  279. Mission::PlayHint(HINT_NOSPACE_AMBULANCE);
  280. v.PushActionExecuteCommand(ACTION_NEWLIST, CMD_PATROL, Caller, 0, false);
  281. return;
  282. }
  283. }
  284. else if(StrCompare(v.GetPrototypeFileName(), OBJ_ENGINE01) == 0)
  285. {
  286. GameObjectList cpl1 = Game::GetGameObjects(NAME_CONTROLPANEL);
  287. if(cpl1.GetNumObjects() > 0)
  288. GameObject cp1 = cpl1.GetObject(0);
  289. GameObjectList cpl2 = Game::GetGameObjects(NAME_CONTROLPANEL2);
  290. if(cpl2.GetNumObjects() > 0)
  291. GameObject cp2 = cpl2.GetObject(0);
  292. bool FS1Closer = false;
  293. bool FS2Closer = false;
  294. if (Math::dist(Pos.x, Pos.y, cp1.GetPosition().x, cp1.GetPosition().y) > Math::dist(Pos.x, Pos.y, cp2.GetPosition().x, cp2.GetPosition().y))
  295. FS2Closer = true;
  296. else
  297. FS1Closer = true;
  298.  
  299. bool FS1Possible = false;
  300. bool FS2Possible = false;
  301.  
  302. GameObjectList l3;
  303. Game::CollectObstaclesOnVirtualObject(VO_ENGINE01, l3, ACTOR_VEHICLE);
  304. if(l3.GetNumObjects() == 0 && !FS1Possible)
  305. FS1Possible = true;
  306.  
  307. GameObjectList l4;
  308. Game::CollectObstaclesOnVirtualObject(VO_ENGINE03, l4, ACTOR_VEHICLE);
  309. if(l4.GetNumObjects() == 0 && !FS1Possible)
  310. FS1Possible = true;
  311.  
  312. GameObjectList l5;
  313. Game::CollectObstaclesOnVirtualObject(VO_ENGINE05, l5, ACTOR_VEHICLE);
  314. if(l5.GetNumObjects() == 0 && !FS2Possible)
  315. FS2Possible = true;
  316.  
  317. if (!FS1Possible && !FS2Possible)
  318. {
  319. Mission::PlayHint(HINT_NOSPACE);
  320. v.PushActionReturnToBase(ACTION_NEWLIST);
  321. return;
  322. }
  323. else if ((FS1Closer && FS1Possible) || (FS2Closer && !FS2Possible))
  324. {
  325. ActorList l1 = Game::GetActors(VO_FP4);
  326. ActorList l2 = Game::GetActors(VO_TURNTO4);
  327. }
  328. else if ((FS2Closer && FS2Possible) || (FS1Closer && !FS1Possible))
  329. {
  330. ActorList l1 = Game::GetActors(VO_FP7);
  331. ActorList l2 = Game::GetActors(VO_TURNTO7);
  332. }
  333. }
  334. else if(StrCompare(v.GetPrototypeFileName(), OBJ_ENGINE02) == 0)
  335. {
  336. bool Possible = false;
  337.  
  338. GameObjectList l3;
  339. Game::CollectObstaclesOnVirtualObject(VO_ENGINE02, l3, ACTOR_VEHICLE);
  340. if(l3.GetNumObjects() == 0 && !Possible)
  341. Possible = true;
  342.  
  343. GameObjectList l4;
  344. Game::CollectObstaclesOnVirtualObject(VO_ENGINE04, l4, ACTOR_VEHICLE);
  345. if(l4.GetNumObjects() == 0 && !Possible)
  346. Possible = true;
  347.  
  348. if (Possible)
  349. {
  350. ActorList l1 = Game::GetActors(VO_FP5);
  351. ActorList l2 = Game::GetActors(VO_TURNTO5);
  352. } else
  353. {
  354. Mission::PlayHint(HINT_NOSPACE);
  355. v.PushActionReturnToBase(ACTION_NEWLIST);
  356. return;
  357. }
  358. } else
  359. {
  360. Mission::PlayHint(HINT_NOTVALID);
  361. return;
  362. }
  363.  
  364. if(l1.GetNumActors() > 0)
  365. Vector FirstPoint = l1.GetActor(0)->GetPosition();
  366.  
  367. if(l2.GetNumActors() > 0)
  368. Vector TurnTo = l2.GetActor(0)->GetPosition();
  369.  
  370. Audio::PlaySample3D(SND_TOSTATION, Caller->GetPosition());
  371. v.PushActionMove(ACTION_NEWLIST, FirstPoint);
  372. v.PushActionTurnTo(ACTION_APPEND, TurnTo);
  373. if (StrCompare(v.GetPrototypeFileName(), OBJ_TILLER) == 0)
  374. v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_TILLER, Caller, 3, false);
  375. v.PushActionWait(ACTION_APPEND, 1.0f);
  376. v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_CHECKPARKED, Caller, 0, false);
  377. }
  378. };
  379.  
  380. object DummyCheckParked : CommandScript
  381. {
  382. DummyCheckParked()
  383. {
  384. SetGroupID(DummyGroup);
  385. }
  386.  
  387. bool CheckTarget(GameObject *Caller, Actor *Target, int ChildID)
  388. {
  389. }
  390.  
  391. void PushActions(GameObject *Caller, Actor *Target, int ChildID)
  392. {
  393. bool ParkinglotFound = false;
  394. Vector Pos = Caller->GetPosition();
  395. GameObjectList cpl1 = Game::GetGameObjects(NAME_CONTROLPANEL);
  396. if(cpl1.GetNumObjects() > 0)
  397. GameObject cp1 = cpl1.GetObject(0);
  398. GameObjectList cpl2 = Game::GetGameObjects(NAME_CONTROLPANEL2);
  399. if(cpl2.GetNumObjects() > 0)
  400. GameObject cp2 = cpl2.GetObject(0);
  401. bool FS1Closer = false;
  402. bool FS2Closer = false;
  403. if (Math::dist(Pos.x, Pos.y, cp1.GetPosition().x, cp1.GetPosition().y) > Math::dist(Pos.x, Pos.y, cp2.GetPosition().x, cp2.GetPosition().y))
  404. FS2Closer = true;
  405. else
  406. FS1Closer = true;
  407.  
  408. Vehicle v(Caller);
  409. if(StrCompare(v.GetPrototypeFileName(), OBJ_BATTALION) == 0)
  410. {
  411. GameObjectList l3;
  412. Game::CollectObstaclesOnVirtualObject(VO_BATTALION, l3, ACTOR_VEHICLE);
  413. if(l3.GetNumObjects() > 0)
  414. {
  415. Mission::PlayHint(HINT_NOSPACE);
  416. v.PushActionReturnToBase(ACTION_NEWLIST);
  417. return;
  418. } else
  419. {
  420. ParkinglotFound = true;
  421. ActorList l1 = Game::GetActors(VO_BATTALION);
  422. ActorList l2 = Game::GetActors(VO_BATTALION2);
  423. }
  424. }
  425. else if(StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE02) == 0 || StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE03) == 0 || StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE04) == 0)
  426. {
  427. ActorList l2 = Game::GetActors(VO_TURNTO1);
  428. if (!Game::IsSquadInVirtualObject(VO_AMBULANCE01) && !Game::IsSquadInVirtualObject(VO_AMBULANCE02) && !Game::IsSquadInVirtualObject(VO_AMBULANCE03))
  429. {
  430. ParkinglotFound = true;
  431. ActorList l1 = Game::GetActors(VO_AMBULANCE01);
  432. }
  433. else if (Game::IsSquadInVirtualObject(VO_AMBULANCE01) && !Game::IsSquadInVirtualObject(VO_AMBULANCE02) && !Game::IsSquadInVirtualObject(VO_AMBULANCE03))
  434. {
  435. ParkinglotFound = true;
  436. ActorList l1 = Game::GetActors(VO_AMBULANCE02);
  437. }
  438. else if (Game::IsSquadInVirtualObject(VO_AMBULANCE01) && Game::IsSquadInVirtualObject(VO_AMBULANCE02) && !Game::IsSquadInVirtualObject(VO_AMBULANCE03))
  439. {
  440. ParkinglotFound = true;
  441. ActorList l1 = Game::GetActors(VO_AMBULANCE03);
  442. }
  443. else if (!Game::IsSquadInVirtualObject(VO_AMBULANCE01) && Game::IsSquadInVirtualObject(VO_AMBULANCE02) && !Game::IsSquadInVirtualObject(VO_AMBULANCE03))
  444. {
  445. ParkinglotFound = true;
  446. ActorList l1 = Game::GetActors(VO_AMBULANCE02);
  447. ActorList l3 = Game::GetActors(VO_AMBULANCE01);
  448. if(l3.GetNumActors() > 0)
  449. Vector Forward = l3.GetActor(0)->GetPosition();
  450. GameObjectList l4;
  451. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE02, l4, ACTOR_VEHICLE);
  452. for (int i = 0; i < l4.GetNumObjects(); i++)
  453. {
  454. Vehicle m = l4.GetObject(i);
  455. m.PushActionMove(ACTION_NEWLIST, Forward);
  456. }
  457. }
  458. else if (!Game::IsSquadInVirtualObject(VO_AMBULANCE01) && !Game::IsSquadInVirtualObject(VO_AMBULANCE02) && Game::IsSquadInVirtualObject(VO_AMBULANCE03))
  459. {
  460. ParkinglotFound = true;
  461. ActorList l1 = Game::GetActors(VO_AMBULANCE02);
  462.  
  463. ActorList l3 = Game::GetActors(VO_AMBULANCE01);
  464. if(l3.GetNumActors() > 0)
  465. Vector Forward = l3.GetActor(0)->GetPosition();
  466.  
  467. GameObjectList l4;
  468. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE03, l4, ACTOR_VEHICLE);
  469. for (int i = 0; i < l4.GetNumObjects(); i++)
  470. {
  471. Vehicle m = l4.GetObject(i);
  472. m.PushActionMove(ACTION_NEWLIST, Forward);
  473. }
  474. }
  475. else if (!Game::IsSquadInVirtualObject(VO_AMBULANCE01) && Game::IsSquadInVirtualObject(VO_AMBULANCE02) && Game::IsSquadInVirtualObject(VO_AMBULANCE03))
  476. {
  477. ParkinglotFound = true;
  478. ActorList l1 = Game::GetActors(VO_AMBULANCE03);
  479.  
  480. ActorList l3 = Game::GetActors(VO_AMBULANCE01);
  481. if(l3.GetNumActors() > 0)
  482. Vector Forward = l3.GetActor(0)->GetPosition();
  483.  
  484. ActorList l4 = Game::GetActors(VO_AMBULANCE02);
  485. if(l4.GetNumActors() > 0)
  486. Vector Forward2 = l4.GetActor(0)->GetPosition();
  487.  
  488. float rot[9];
  489. float childRot[9];
  490.  
  491. GameObjectList l5;
  492. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE02, l5, ACTOR_VEHICLE);
  493. for (int i = 0; i < l5.GetNumObjects(); i++)
  494. {
  495. Vehicle m = l5.GetObject(i);
  496. m.PushActionMove(ACTION_NEWLIST, Forward);
  497. }
  498.  
  499. GameObjectList l6;
  500. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE03, l6, ACTOR_VEHICLE);
  501. for (int i = 0; i < l6.GetNumObjects(); i++)
  502. {
  503. Vehicle c = l6.GetObject(i);
  504. c.PushActionWait(ACTION_NEWLIST, 0.7f);
  505. c.PushActionMove(ACTION_APPEND, Forward2);
  506. }
  507. } else
  508. {
  509. Mission::PlayHint(HINT_NOSPACE_AMBULANCE);
  510. v.PushActionExecuteCommand(ACTION_NEWLIST, CMD_PATROL, Caller, 0, false);
  511. return;
  512. }
  513. }
  514. else if(StrCompare(v.GetPrototypeFileName(), OBJ_AMBULANCE01) == 0)
  515. {
  516. GameObjectList l3;
  517. Game::CollectObstaclesOnVirtualObject(VO_AMBULANCE04, l3, ACTOR_VEHICLE);
  518. if(l3.GetNumObjects() > 0)
  519. {
  520. Mission::PlayHint(HINT_NOSPACE_AMBULANCE);
  521. v.PushActionExecuteCommand(ACTION_NEWLIST, CMD_PATROL, Caller, 0, false);
  522. return;
  523. } else
  524. {
  525. ParkinglotFound = true;
  526. ActorList l1 = Game::GetActors(VO_AMBULANCE04);
  527. ActorList l2 = Game::GetActors(VO_TURNTO8);
  528. }
  529. }
  530. else if(StrCompare(v.GetPrototypeFileName(), OBJ_USAR) == 0)
  531. {
  532. GameObjectList l3;
  533. Game::CollectObstaclesOnVirtualObject(VO_USAR, l3, ACTOR_VEHICLE);
  534. if(l3.GetNumObjects() > 0)
  535. {
  536. Mission::PlayHint(HINT_NOSPACE);
  537. v.PushActionReturnToBase(ACTION_NEWLIST);
  538. return;
  539. } else
  540. {
  541. ParkinglotFound = true;
  542. ActorList l1 = Game::GetActors(VO_USAR);
  543. ActorList l2 = Game::GetActors(VO_TURNTO2);
  544. }
  545. }
  546. else if(StrCompare(v.GetPrototypeFileName(), OBJ_LADDER) == 0 || StrCompare(v.GetPrototypeFileName(), OBJ_TILLER) == 0)
  547. {
  548. GameObjectList l3;
  549. Game::CollectObstaclesOnVirtualObject(VO_LADDER, l3, ACTOR_VEHICLE);
  550. if(l3.GetNumObjects() > 0)
  551. {
  552. Mission::PlayHint(HINT_NOSPACE);
  553. Game::ExecuteCommand(CMD_GOHOME, &v, &v);
  554. return;
  555. } else
  556. {
  557. ParkinglotFound = true;
  558. ActorList l1 = Game::GetActors(VO_LADDER);
  559. ActorList l2 = Game::GetActors(VO_TURNTO3);
  560. }
  561. }
  562. else if(StrCompare(v.GetPrototypeFileName(), OBJ_HAZMATSQUAD) == 0)
  563. {
  564. GameObjectList l3;
  565. Game::CollectObstaclesOnVirtualObject(VO_HAZMAT, l3, ACTOR_VEHICLE);
  566. if(l3.GetNumObjects() > 0)
  567. {
  568. Mission::PlayHint(HINT_NOSPACE);
  569. v.PushActionReturnToBase(ACTION_NEWLIST);
  570. return;
  571. } else
  572. {
  573. ParkinglotFound = true;
  574. ActorList l1 = Game::GetActors(VO_HAZMAT);
  575. ActorList l2 = Game::GetActors(VO_TURNTO6);
  576. }
  577. }
  578. else if(StrCompare(v.GetPrototypeFileName(), OBJ_ENGINE01) == 0)
  579. {
  580. if(FS1Closer)
  581. {
  582. GameObjectList l3;
  583. Game::CollectObstaclesOnVirtualObject(VO_ENGINE01, l3, ACTOR_VEHICLE);
  584. if(l3.GetNumObjects() > 0)
  585. {
  586. GameObjectList l4;
  587. Game::CollectObstaclesOnVirtualObject(VO_ENGINE03, l4, ACTOR_VEHICLE);
  588. if(l4.GetNumObjects() > 0)
  589. {
  590. v.PushActionExecuteCommand(ACTION_NEWLIST, CMD_TOFIRESTATION, Caller, 0, false);
  591. return;
  592. } else
  593. {
  594. ParkinglotFound = true;
  595. ActorList l1 = Game::GetActors(VO_ENGINE03);
  596. ActorList l2 = Game::GetActors(VO_TURNTO4);
  597. }
  598. } else
  599. {
  600. GameObjectList l4;
  601. Game::CollectObstaclesOnVirtualObject(VO_ENGINE03, l4, ACTOR_VEHICLE);
  602. if(l4.GetNumObjects() > 0)
  603. {
  604. ActorList l1 = Game::GetActors(VO_ENGINE03);
  605. ActorList l5 = Game::GetActors(VO_ENGINE01);
  606. Vector Move = l5.GetActor(0)->GetPosition();
  607. l4.GetObject(0)->PushActionMove(ACTION_NEWLIST, Move, true);
  608. } else
  609. ActorList l1 = Game::GetActors(VO_ENGINE01);
  610. ActorList l2 = Game::GetActors(VO_TURNTO4);
  611. ParkinglotFound = true;
  612. }
  613. }
  614. else if(FS2Closer)
  615. {
  616. GameObjectList l3;
  617. Game::CollectObstaclesOnVirtualObject(VO_ENGINE05, l3, ACTOR_VEHICLE);
  618. if(l3.GetNumObjects() > 0)
  619. {
  620. v.PushActionExecuteCommand(ACTION_NEWLIST, CMD_TOFIRESTATION, Caller, 0, false);
  621. return;
  622. } else
  623. {
  624. ParkinglotFound = true;
  625. ActorList l1 = Game::GetActors(VO_ENGINE05);
  626. ActorList l2 = Game::GetActors(VO_TURNTO7);
  627. }
  628. }
  629. }
  630. else if(StrCompare(v.GetPrototypeFileName(), OBJ_ENGINE02) == 0)
  631. {
  632. GameObjectList l3;
  633. Game::CollectObstaclesOnVirtualObject(VO_ENGINE02, l3, ACTOR_VEHICLE);
  634. if(l3.GetNumObjects() > 0)
  635. {
  636. GameObjectList l4;
  637. Game::CollectObstaclesOnVirtualObject(VO_ENGINE04, l4, ACTOR_VEHICLE);
  638. if(l4.GetNumObjects() > 0)
  639. {
  640. v.PushActionExecuteCommand(ACTION_NEWLIST, CMD_TOFIRESTATION, Caller, 0, false);
  641. return;
  642. } else
  643. {
  644. ParkinglotFound = true;
  645. ActorList l1 = Game::GetActors(VO_ENGINE04);
  646. ActorList l2 = Game::GetActors(VO_TURNTO5);
  647. }
  648. } else
  649. {
  650. GameObjectList l4;
  651. Game::CollectObstaclesOnVirtualObject(VO_ENGINE04, l4, ACTOR_VEHICLE);
  652. if(l4.GetNumObjects() > 0)
  653. {
  654. ActorList l1 = Game::GetActors(VO_ENGINE04);
  655. ActorList l5 = Game::GetActors(VO_ENGINE02);
  656. Vector Move = l5.GetActor(0)->GetPosition();
  657. l4.GetObject(0)->PushActionMove(ACTION_NEWLIST, Move, true);
  658. } else
  659. ActorList l1 = Game::GetActors(VO_ENGINE02);
  660. ActorList l2 = Game::GetActors(VO_TURNTO5);
  661. ParkinglotFound = true;
  662. }
  663. }
  664. if(ParkinglotFound)
  665. {
  666. if(l1.GetNumActors() > 0)
  667. {
  668. if (StrCompare(v.GetPrototypeFileName(), OBJ_TILLER) == 0)
  669. {
  670. Vector Park = l1.GetActor(0)->GetPosition();
  671. float dx = 125.f, dy = 0.f, dz = 0.f;
  672. float r[9];
  673. float childr[9];
  674. v.GetRotation(r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8]);
  675. Math::RotateVector(dx, dy, dz, r);
  676. Math::EulerToMatrix(0.0f, 0.f, 0.f, childr);
  677. Math::MultiplyMatrices(childr, r);
  678. Park = Park + Vector(dx, dy, 0);
  679. } else
  680. Vector Park = l1.GetActor(0)->GetPosition();
  681. }
  682. if(l2.GetNumActors() > 0)
  683. Vector TurnTo = l2.GetActor(0)->GetPosition();
  684. if (v.HasCommand(DUMMY_VCALLED))
  685. v.RemoveCommand(DUMMY_VCALLED);
  686. if(StrCompare(v.GetPrototypeFileName(), OBJ_BATTALION) == 0)
  687. {
  688. v.PushActionMove(ACTION_APPEND, Park);
  689. v.PushActionTurnTo(ACTION_APPEND, TurnTo);
  690. } else
  691. {
  692. if(FS1Closer)
  693. v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 7, false);
  694. else
  695. v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 8, false);
  696. v.PushActionWait(ACTION_APPEND, 1.8f);
  697.  
  698. v.PushActionMove(ACTION_APPEND, Park);
  699. v.PushActionTurnTo(ACTION_APPEND, TurnTo);
  700. v.PushActionWait(ACTION_APPEND, 0.5f);
  701. PersonList passengers = v.GetPassengers();
  702. if (passengers.GetNumPersons() > 0 && (FS1Closer && cp1.HasCommand("VcmdAutoStaffOff")) || (FS2Closer && cp2.HasCommand("VcmdAutoStaffOff")))
  703. v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_FIRESTATION, Caller, 0, false);
  704. v.PushActionWait(ACTION_APPEND, 2.2f);
  705. if(FS1Closer)
  706. v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 9, false);
  707. else
  708. v.PushActionExecuteCommand(ACTION_APPEND, DUMMY_GATES, Caller, 10, false);
  709. if (v.HasCommand(DUMMY_WARNINGLIGHTS))
  710. {
  711. v.EnableBlinker(BLT_NONE);
  712. v.RemoveCommand(DUMMY_WARNINGLIGHTS);
  713. v.AssignCommand(CMD_WARNINGLIGHTS);
  714. } else
  715. v.EnableBlinker(BLT_NONE);
  716. }
  717. }
  718. }
  719. };
  720.  
  721. object DummyAtFireStation : CommandScript
  722. {
  723. DummyAtFireStation()
  724. {
  725. SetGroupID(DummyGroup);
  726. }
  727.  
  728. bool CheckTarget(GameObject *Caller, Actor *Target, int ChildID)
  729. {
  730. }
  731.  
  732. void PushActions(GameObject *Caller, Actor *Target, int ChildID)
  733. {
  734. Vehicle v(Caller);
  735. if(StrCompare(v.GetPrototypeFileName(), OBJ_BATTALION) == 0)
  736. ActorList l1 = Game::GetActors(VO_SPAWN02);
  737. else if(v.IsCollidingWithVirtualObject(VO_SQUAD01))
  738. ActorList l1 = Game::GetActors(VO_SPAWN01);
  739. else if(v.IsCollidingWithVirtualObject(VO_SQUAD02))
  740. ActorList l1 = Game::GetActors(VO_SPAWN03);
  741. else
  742. return;
  743.  
  744. if(l1.GetNumActors() > 0)
  745. Vector Delete = l1.GetActor(0)->GetPosition();
  746.  
  747. PersonList passengers = v.GetPassengers();
  748. if (passengers.GetNumPersons() > 0)
  749. {
  750. for(int i=0; i<passengers.GetNumPersons(); i++)
  751. {
  752. Person *p = passengers.GetPerson(i);
  753. p->PushActionLeaveCar(ACTION_NEWLIST, Caller);
  754. p->PushActionMove(ACTION_APPEND, Delete);
  755. p->PushActionDeleteOwner(ACTION_APPEND);
  756. }
  757. }
  758. }
  759. };
  760.  
  761. object DummyEngine : CommandScript
  762. {
  763. DummyEngine()
  764. {
  765. SetGroupID(DummyGroup);
  766. }
  767.  
  768. bool CheckTarget(GameObject *Caller, Actor *Target, int ChildID)
  769. {
  770. }
  771.  
  772. void PushActions(GameObject *Caller, Actor *Target, int ChildID)
  773. {
  774. }
  775. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement