Advertisement
himurakenshin600

ae_actor

Oct 10th, 2015
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.53 KB | None | 0 0
  1. /*
  2. Actors Everywhere
  3.  
  4. # Version: 0.1
  5. # Author: Roger Costa - Nickname: "NikO"
  6. # E-mail: roger.gomes@outlook.com
  7.  
  8. I playing in [uL] A/D Server SkinHit, Brazucas Server RPG and my L.S. GangWar,
  9. if you see me, send messages :D
  10. -
  11.  
  12. This filterscript add actors in San Andreas, according current
  13. time of you server, or add statics actors, staying setted in
  14. same positions everytime. 1 actor can be created during the day,
  15. afternoon, night and dawn. You define the positions and animations
  16. for each time, and when the server time is passing the actors
  17. are deleted automaticaly and created automaticaly too.
  18.  
  19. ------------------------------------------------------------------
  20. Types to Create Actor in AE_ACTORS_CREATE_TYPE define:
  21.  
  22. 0 - Actors they are created and remain the same position;
  23. 1 - '' '' '' '' and change positions according time
  24. Ex:
  25. Time 09:00 - Actor in Beach
  26. Time 15:00 - Actor in House
  27. ------------------------------------------------------------------
  28.  
  29. */
  30.  
  31. // Includes
  32. #include <a_samp>
  33.  
  34. // Defines
  35. #define AE_MAX_ACTORS 7
  36. #define AE_MAX_OBJECTS 12
  37. #define AE_ACTORS_CREATE_TYPE 1 // Standard is 0
  38.  
  39. #define AE_USE_GIVE_ACTOR_DMG 1 // if 1 call OnGiveDamageActor if actor not invulnerable
  40. #define AE_USE_RESPAWN_ACTOR 1 // if 1, after shoot, actor execute anims and respawn to early position in TIME that you choose below
  41. #define AE_TIME_RESPAWN_ACTOR 5000 // Time to respawn actor after shooted, if actor not invulnerable (in ms)
  42.  
  43. // Dont change, but not specially effect, more for script organization
  44. #define AE_TIME_DAY 1
  45. #define AE_TIME_AFTERNOON 2
  46. #define AE_TIME_NIGHT 3
  47. #define AE_TIME_DAWN 4
  48.  
  49. // You change according your server
  50. #define AE_HOURS_DAY 7 .. 13
  51. #define AE_HOURS_AFTERNOON 14 .. 18
  52. #define AE_HOURS_NIGHT 19 .. 23
  53. #define AE_HOURS_DAWN 0 .. 6
  54.  
  55. #define AE_DEBUG 1 // 1 actived, 0 disabled
  56.  
  57. #define AE_USE_STREAMER 1
  58.  
  59. #if AE_USE_STREAMER == 1
  60. #tryinclude <streamer>
  61. #endif
  62.  
  63.  
  64. enum ACTORS_INFOS_ENUM
  65. {
  66. // Name of Actor, useless in the moment
  67. NAME[24],
  68.  
  69. // Positions
  70. Float:POSITIONS_STANDARD[4],
  71. Float:POSITIONS_DAY[4],
  72. Float:POSITIONS_AFTERNOON[4],
  73. Float:POSITIONS_NIGHT[4],
  74. Float:POSITIONS_DAWN[4],
  75.  
  76. // Skins - If set skin -1 = random skin
  77. SKIN_STANDARD,
  78. SKIN_DAY,
  79. SKIN_AFTERNOON,
  80. SKIN_NIGHT,
  81. SKIN_DAWN,
  82.  
  83. // Animations
  84. ANIM_LIB_STANDARD[32], ANIM_NAME_STANDARD[32], ANIM_LOOP_STANDARD,
  85. ANIM_LIB_DAY[32], ANIM_NAME_DAY[32], ANIM_LOOP_DAY,
  86. ANIM_LIB_AFTERNOON[32], ANIM_NAME_AFTERNOON[32], ANIM_LOOP_AFTERNOON,
  87. ANIM_LIB_NIGHT[32], ANIM_NAME_NIGHT[32], ANIM_LOOP_NIGHT,
  88. ANIM_LIB_DAWN[32], ANIM_NAME_DAWN[32], ANIM_LOOP_DAWN,
  89.  
  90. bool:INVULNERABLE,
  91. }
  92.  
  93. enum AE_OBJECTS_ENUM
  94. {
  95. OBJECT_ID,
  96. Float:OBJECT_POS[3],
  97. Float:OBJECT_ROT[3],
  98. }
  99.  
  100. new ACTORS_INFO[AE_MAX_ACTORS][ACTORS_INFOS_ENUM] =
  101. {
  102. // LOS SANTOS ACTORS
  103.  
  104. // CEMITERY ACTORS (AE_ACTORS_CREATE_TYPE == 1, ARE CREATED ONLY "DAY" OR STANDARD POSITION IF AE_ACTORS_CREATE_TYPE == 0)
  105. // # ACTOR 1
  106. {
  107. "CJ",
  108. {852.2451,-1085.1626,24.2969,285.3400},
  109. {852.2451,-1085.1626,24.2969,285.3400},
  110. {0.0, 0.0, 0.0, 0.0},
  111. {0.0, 0.0, 0.0, 0.0},
  112. {0.0, 0.0, 0.0, 0.0},
  113. 0, 0, 0, 0, 0,
  114. "PED", "endchat_03", 1,
  115. "PED", "endchat_03", 1,
  116. "NONE", "NONE", 0,
  117. "NONE", "NONE", 0,
  118. "NONE", "NONE", 0,
  119. false
  120. },
  121. // # ACTOR 2
  122. {
  123. "Sweet",
  124. {886.0898,-1075.6869,24.2969,181.4619},
  125. {886.0898,-1075.6869,24.2969,181.4619},
  126. {0.0, 0.0, 0.0, 0.0},
  127. {0.0, 0.0, 0.0, 0.0},
  128. {0.0, 0.0, 0.0, 0.0},
  129. 270, 270, 0, 0, 0,
  130. "OTB", "wtchrace_cmon", 1,
  131. "OTB", "wtchrace_cmon", 1,
  132. "NONE", "NONE", 0,
  133. "NONE", "NONE", 0,
  134. "NONE", "NONE", 0,
  135. true
  136. },
  137. // # ACTOR 3
  138. {
  139. "Kendl",
  140. {887.1324,-1075.7382,24.2969,165.9121},
  141. {887.1324,-1075.7382,24.2969,165.9121},
  142. {0.0, 0.0, 0.0, 0.0},
  143. {0.0, 0.0, 0.0, 0.0},
  144. {0.0, 0.0, 0.0, 0.0},
  145. 65, 65, 0, 0, 0,
  146. "PED", "IDLE_tired", 1,
  147. "PED", "IDLE_tired", 1,
  148. "NONE", "NONE", 0,
  149. "NONE", "NONE", 0,
  150. "NONE", "NONE", 0,
  151. true
  152. },
  153. // # ACTOR 4
  154. {
  155. "Ryder",
  156. {884.8588,-1075.8167,24.2969,183.9686},
  157. {884.8588,-1075.8167,24.2969,183.9686},
  158. {0.0, 0.0, 0.0, 0.0},
  159. {0.0, 0.0, 0.0, 0.0},
  160. {0.0, 0.0, 0.0, 0.0},
  161. 271, 271, 0, 0, 0,
  162. "OTB", "wtchrace_lose", 1,
  163. "OTB", "wtchrace_lose", 1,
  164. "NONE", "NONE", 0,
  165. "NONE", "NONE", 0,
  166. "NONE", "NONE", 0,
  167. true
  168. },
  169.  
  170. // HOMELESS (AE_ACTORS_CREATE_TYPE == 1, ARE CREATED ONLY "DAWN" OR STANDARD POSITION IF AE_ACTORS_CREATE_TYPE == 0)
  171. // # ACTOR 5
  172. {
  173. "Mendigo 1",
  174. {1610.3655,-1525.3424,13.6156,59.6464},
  175. {0.0, 0.0, 0.0, 0.0},
  176. {0.0, 0.0, 0.0, 0.0},
  177. {0.0, 0.0, 0.0, 0.0},
  178. {1610.3655,-1525.3424,13.6156,59.6464},
  179. 78, 271, 55, 56, 78,
  180. "NONE", "NONE", 0,
  181. "NONE", "NONE", 0,
  182. "NONE", "NONE", 0,
  183. "NONE", "NONE", 0,
  184. "CRACK", "crckidle1", 1,
  185. true
  186. },
  187. // # ACTOR 6
  188. {
  189. "Mendigo 2",
  190. {1611.0665,-1525.5786,14.0651,51.3551},
  191. {0.0, 0.0, 0.0, 0.0},
  192. {0.0, 0.0, 0.0, 0.0},
  193. {0.0, 0.0, 0.0, 0.0},
  194. {1611.0665,-1525.5786,14.0651,51.3551},
  195. 77, 271, 55, 56, 77,
  196. "NONE", "NONE", 0,
  197. "NONE", "NONE", 0,
  198. "NONE", "NONE", 0,
  199. "NONE", "NONE", 0,
  200. "CRACK", "crckidle2", 1,
  201. true
  202. },
  203. // # ACTOR 7
  204. {
  205. "Mendigo 3",
  206. {1607.0974,-1523.8680,14.0648,240.6115},
  207. {0.0, 0.0, 0.0, 0.0},
  208. {0.0, 0.0, 0.0, 0.0},
  209. {0.0, 0.0, 0.0, 0.0},
  210. {1607.0974,-1523.8680,14.0648,240.6115},
  211. 134, 271, 55, 56, 134,
  212. "NONE", "NONE", 0,
  213. "NONE", "NONE", 0,
  214. "NONE", "NONE", 0,
  215. "NONE", "NONE", 0,
  216. "CRACK", "crckdeth2", 1,
  217. true
  218. }
  219. };
  220.  
  221. new OBJECTS_INFO[AE_MAX_OBJECTS][AE_OBJECTS_ENUM] =
  222. {
  223. // Objects used in example "Cemitery Actors'
  224. { 19339, {885.963928, -1077.381713, 23.673976}, {0.000000, 0.000000, 0.000000} },
  225. { 869, {885.875915, -1077.318115, 23.620748}, {0.400000, -0.400000, -24.300003} },
  226. // Objects used in example 'Homeless Actors'
  227. { 19632, {1609.0063470,-1524.8005370,12.6506800}, {0.0000000,0.0000000,0.0000000} },
  228. { 1728, {1611.4613030,-1525.0843500,12.5722550}, {0.0000000,0.0000000,-116.3000180} },
  229. { 1728, {1606.6767570,-1524.3824460,12.5722550}, {0.0000000,0.0000000,63.4999270} },
  230. { 19632, {1609.0968010,-1524.9692380,12.6506800}, {0.0000000,0.0000000,48.7999800} },
  231. { 19632, {1609.2636710,-1524.7806390,12.6506800}, {0.0000000,0.0000000,113.5999600} },
  232. { 19836, {1610.6063230,-1526.8380120,13.0760900}, {0.0000000,0.0000000,0.0000000} },
  233. { 910, {1608.3912350,-1527.8549800,13.8544120}, {0.0000000,0.0000000,-170.5999750} },
  234. { 2670, {1608.4865720,-1526.6530760,12.7041530}, {0.0000000,0.0000000,0.0000000} },
  235. { 2677, {1610.2906490,-1523.6174310,12.8823190}, {0.0000000,0.0000000,0.0000000} },
  236. { 1349, {1611.9851070,-1523.2956540,13.1444040}, {1.1999990,0.0000000,179.6999510} }
  237. };
  238.  
  239. new AE_ACTOR_CREATE[AE_MAX_ACTORS] = {-1, ...}; // Used to create actors
  240. new bool:AE_ACTOR_SHOOTED[AE_MAX_ACTORS];
  241. new AE_OBJECT_CREATE[AE_MAX_OBJECTS] = {-1, ...}; // Used to create objects
  242. new AE_TIME_STATE; // Used to check hour
  243. new AE_HOUR; // Used to get server time (in gamemode, or other script) with CallRemoteFunction
  244. new AE_LOOP; // Used in create actors loop
  245.  
  246.  
  247. // Callbacks
  248.  
  249. public OnFilterScriptInit()
  250. {
  251.  
  252. // Creating objects, if used..
  253. for(new i = 0; i < sizeof(OBJECTS_INFO); i++)
  254. {
  255. #if AE_USE_STREAMER == 1
  256. AE_OBJECT_CREATE[i] = CreateDynamicObject(OBJECTS_INFO[i][OBJECT_ID],
  257. OBJECTS_INFO[i][OBJECT_POS][0],
  258. OBJECTS_INFO[i][OBJECT_POS][1],
  259. OBJECTS_INFO[i][OBJECT_POS][2],
  260. OBJECTS_INFO[i][OBJECT_ROT][0],
  261. OBJECTS_INFO[i][OBJECT_ROT][1],
  262. OBJECTS_INFO[i][OBJECT_ROT][2],
  263. -1, -1, -1,
  264. STREAMER_OBJECT_SD,
  265. STREAMER_OBJECT_DD);
  266. #elseif AE_USE_STREAMER == 0
  267. AE_OBJECT_CREATE[i] = CreateObject(OBJECTS_INFO[i][OBJECT_ID],
  268. OBJECTS_INFO[i][OBJECT_POS][0],
  269. OBJECTS_INFO[i][OBJECT_POS][1],
  270. OBJECTS_INFO[i][OBJECT_POS][2],
  271. OBJECTS_INFO[i][OBJECT_ROT][0],
  272. OBJECTS_INFO[i][OBJECT_ROT][1],
  273. OBJECTS_INFO[i][OBJECT_ROT][2],
  274. 25);
  275. #endif
  276. }
  277.  
  278. // Creating actors
  279. if(sizeof(ACTORS_INFO) <= (MAX_ACTORS - GetActorPoolSize())) AE_LOOP = sizeof(ACTORS_INFO);
  280. else AE_LOOP = MAX_ACTORS - GetActorPoolSize();
  281.  
  282. for(new i = 0; i < AE_LOOP; i++)
  283. {
  284. #if AE_ACTORS_CREATE_TYPE == 0
  285. if(ACTORS_INFO[i][SKIN_STANDARD] == -1) ACTORS_INFO[i][SKIN_STANDARD] = random(311);
  286. AE_ACTOR_CREATE[i] = CreateActor(ACTORS_INFO[i][SKIN_STANDARD],
  287. ACTORS_INFO[i][POSITIONS_STANDARD][0], // Position X
  288. ACTORS_INFO[i][POSITIONS_STANDARD][1], // Position Y
  289. ACTORS_INFO[i][POSITIONS_STANDARD][2], // Position Z
  290. ACTORS_INFO[i][POSITIONS_STANDARD][3]); // Facing Angle (Rotation)
  291. ApplyActorAnimation(AE_ACTOR_CREATE[i], ACTORS_INFO[i][ANIM_LIB_STANDARD], ACTORS_INFO[i][ANIM_NAME_STANDARD], 4.1, 1, 0, 0, 0, 0);
  292. SetActorInvulnerable(AE_ACTOR_CREATE[i], ACTORS_INFO[i][INVULNERABLE]); // Invulnerabity
  293.  
  294. #elseif AE_ACTORS_CREATE_TYPE == 1
  295. SetTimer("AE_CheckTimeForActors", 1000*5, true);
  296. #else
  297. #error "Define AE_ACTORS_CREATE_TYPE between 0 and 1. Read top of Script."
  298. #endif
  299. }
  300.  
  301. print("\nActors Everywhere Loaded.\nAuthor: Roger Costa ''NikO''");
  302. return 1;
  303. }
  304.  
  305. public OnFilterScriptExit()
  306. {
  307. for(new i = 0; i < AE_LOOP; i++)
  308. {
  309. if(IsValidActor(AE_ACTOR_CREATE[i]) && AE_ACTOR_CREATE[i] != -1)
  310. {
  311. #if AE_DEBUG == 1
  312. printf("<AE_DEBUG> Actors Deleted: AE_ACTOR_CREATE[%d] / ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  313. #endif
  314. DestroyActor(AE_ACTOR_CREATE[i]);
  315. AE_ACTOR_CREATE[i] = -1;
  316. }
  317. }
  318.  
  319. for(new i = 0; i < sizeof(OBJECTS_INFO); i++)
  320. {
  321. #if AE_USE_STREAMER == 1
  322. if(IsValidDynamicObject(AE_OBJECT_CREATE[i]))
  323. DestroyDynamicObject(AE_OBJECT_CREATE[i]);
  324. #elseif AE_USE_STREAMER == 0
  325. if(IsValidObject(AE_OBJECT_CREATE[i]))
  326. DestroyObject(AE_OBJECT_CREATE[i]);
  327. #endif
  328. }
  329.  
  330. print("\nActors Everywhere Unloaded - There all actors\ncreated with FS are deleted.");
  331. return 1;
  332. }
  333.  
  334. forward AE_CheckTimeForActors();
  335. public AE_CheckTimeForActors()
  336. {
  337. AE_HOUR = CallRemoteFunction("PUBLIC_NAME_RETUNING_HOUR", "d", 1); // This "PUBLIC_NAME_RETUNING_HOUR" has to return HOUR
  338. switch(AE_HOUR)
  339. {
  340. case AE_HOURS_DAWN: // Dawn
  341. {
  342. if(AE_TIME_STATE != AE_TIME_DAWN)
  343. {
  344. AE_TIME_STATE = AE_TIME_DAWN;
  345.  
  346. for(new i = 0; i < AE_LOOP; i++)
  347. {
  348. if(IsValidActor(AE_ACTOR_CREATE[i]) && AE_ACTOR_CREATE[i] != -1)
  349. {
  350. #if AE_DEBUG == 1
  351. printf("<AE_DEBUG> Actors Deleted: AE_ACTOR_CREATE[%d] / ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  352. #endif
  353. DestroyActor(AE_ACTOR_CREATE[i]);
  354. AE_ACTOR_CREATE[i] = -1;
  355. }
  356. }
  357.  
  358. if(sizeof(ACTORS_INFO) <= (MAX_ACTORS - GetActorPoolSize())) AE_LOOP = sizeof(ACTORS_INFO);
  359. else AE_LOOP = MAX_ACTORS - GetActorPoolSize();
  360.  
  361. for(new i = 0; i < AE_LOOP; i++)
  362. {
  363. if(ACTORS_INFO[i][POSITIONS_DAWN][0] != 0.0)
  364. {
  365. if(ACTORS_INFO[i][SKIN_DAWN] == -1) ACTORS_INFO[i][SKIN_DAWN] = random(311);
  366. AE_ACTOR_CREATE[i] = CreateActor(ACTORS_INFO[i][SKIN_DAWN],
  367. ACTORS_INFO[i][POSITIONS_DAWN][0], // Position X
  368. ACTORS_INFO[i][POSITIONS_DAWN][1], // Position Y
  369. ACTORS_INFO[i][POSITIONS_DAWN][2], // Position Z
  370. ACTORS_INFO[i][POSITIONS_DAWN][3]); // Facing Angle (Rotation)
  371.  
  372. ApplyActorAnimation(AE_ACTOR_CREATE[i], ACTORS_INFO[i][ANIM_LIB_DAWN], ACTORS_INFO[i][ANIM_NAME_DAWN], 4.1, ACTORS_INFO[i][ANIM_LOOP_DAWN], 0, 0, 0, 0);
  373. SetActorInvulnerable(AE_ACTOR_CREATE[i], ACTORS_INFO[i][INVULNERABLE]);
  374.  
  375. #if AE_DEBUG == 1
  376. printf("<AE_DEBUG> Actor Created: AE_ACTOR_CREATE[%d] / Actor ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  377. #endif
  378. }
  379. }
  380. print("\n- AE: Actors Dawn Created!\n");
  381. }
  382. }
  383. case AE_HOURS_DAY: // Day
  384. {
  385. if(AE_TIME_STATE != AE_TIME_DAY)
  386. {
  387. AE_TIME_STATE = AE_TIME_DAY;
  388. for(new i = 0; i < AE_LOOP; i++)
  389. {
  390. if(IsValidActor(AE_ACTOR_CREATE[i]) && AE_ACTOR_CREATE[i] != -1)
  391. {
  392. #if AE_DEBUG == 1
  393. printf("<AE_DEBUG> Actors Deleted: AE_ACTOR_CREATE[%d] / ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  394. #endif
  395. DestroyActor(AE_ACTOR_CREATE[i]);
  396. AE_ACTOR_CREATE[i] = -1;
  397. }
  398. }
  399.  
  400. if(sizeof(ACTORS_INFO) <= (MAX_ACTORS - GetActorPoolSize())) AE_LOOP = sizeof(ACTORS_INFO);
  401. else AE_LOOP = MAX_ACTORS - GetActorPoolSize();
  402.  
  403. for(new i = 0; i < AE_LOOP; i++)
  404. {
  405. if(ACTORS_INFO[i][POSITIONS_DAY][0] != 0.0)
  406. {
  407. if(ACTORS_INFO[i][SKIN_DAY] == -1) ACTORS_INFO[i][SKIN_DAY] = random(311);
  408. AE_ACTOR_CREATE[i] = CreateActor(ACTORS_INFO[i][SKIN_DAY],
  409. ACTORS_INFO[i][POSITIONS_DAY][0], // Position X
  410. ACTORS_INFO[i][POSITIONS_DAY][1], // Position Y
  411. ACTORS_INFO[i][POSITIONS_DAY][2], // Position Z
  412. ACTORS_INFO[i][POSITIONS_DAY][3]); // Facing Angle (Rotation)
  413.  
  414. ApplyActorAnimation(AE_ACTOR_CREATE[i], ACTORS_INFO[i][ANIM_LIB_DAY], ACTORS_INFO[i][ANIM_NAME_DAY], 4.1, ACTORS_INFO[i][ANIM_LOOP_DAY], 0, 0, 0, 0);
  415. SetActorInvulnerable(AE_ACTOR_CREATE[i], ACTORS_INFO[i][INVULNERABLE]);
  416.  
  417. #if AE_DEBUG == 1
  418. printf("<AE_DEBUG> Actor Created: AE_ACTOR_CREATE[%d] / Actor ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  419. #endif
  420. }
  421. }
  422. print("\n- AE: Actors Day Created!\n");
  423. }
  424. }
  425. case AE_HOURS_AFTERNOON: // Afternoon
  426. {
  427. if(AE_TIME_STATE != AE_TIME_AFTERNOON)
  428. {
  429. AE_TIME_STATE = AE_TIME_AFTERNOON;
  430. for(new i = 0; i < AE_LOOP; i++)
  431. {
  432. if(IsValidActor(AE_ACTOR_CREATE[i]) && AE_ACTOR_CREATE[i] != -1)
  433. {
  434. #if AE_DEBUG == 1
  435. printf("<AE_DEBUG> Actors Deleted: AE_ACTOR_CREATE[%d] / ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  436. #endif
  437. DestroyActor(AE_ACTOR_CREATE[i]);
  438. AE_ACTOR_CREATE[i] = -1;
  439. }
  440. }
  441.  
  442. if(sizeof(ACTORS_INFO) <= (MAX_ACTORS - GetActorPoolSize())) AE_LOOP = sizeof(ACTORS_INFO);
  443. else AE_LOOP = MAX_ACTORS - GetActorPoolSize();
  444.  
  445. for(new i = 0; i < AE_LOOP; i++)
  446. {
  447. if(ACTORS_INFO[i][POSITIONS_AFTERNOON][0] != 0.0)
  448. {
  449. if(ACTORS_INFO[i][SKIN_AFTERNOON] == -1) ACTORS_INFO[i][SKIN_AFTERNOON] = random(311);
  450. AE_ACTOR_CREATE[i] = CreateActor(ACTORS_INFO[i][SKIN_AFTERNOON],
  451. ACTORS_INFO[i][POSITIONS_AFTERNOON][0], // Position X
  452. ACTORS_INFO[i][POSITIONS_AFTERNOON][1], // Position Y
  453. ACTORS_INFO[i][POSITIONS_AFTERNOON][2], // Position Z
  454. ACTORS_INFO[i][POSITIONS_AFTERNOON][3]); // Facing Angle (Rotation)
  455.  
  456. ApplyActorAnimation(AE_ACTOR_CREATE[i], ACTORS_INFO[i][ANIM_LIB_AFTERNOON], ACTORS_INFO[i][ANIM_NAME_AFTERNOON], 4.1, ACTORS_INFO[i][ANIM_LOOP_AFTERNOON], 0, 0, 0, 0);
  457. SetActorInvulnerable(AE_ACTOR_CREATE[i], ACTORS_INFO[i][INVULNERABLE]);
  458.  
  459. #if AE_DEBUG == 1
  460. printf("<AE_DEBUG> Actor Created: AE_ACTOR_CREATE[%d] / Actor ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  461. #endif
  462. }
  463. }
  464. print("\n- AE: Actors Afternoon Created!\n");
  465. }
  466. }
  467. case AE_HOURS_NIGHT: // Night
  468. {
  469. if(AE_TIME_STATE != AE_TIME_NIGHT)
  470. {
  471. AE_TIME_STATE = AE_TIME_NIGHT;
  472. for(new i = 0; i < AE_LOOP; i++)
  473. {
  474. if(IsValidActor(AE_ACTOR_CREATE[i]) && AE_ACTOR_CREATE[i] != -1)
  475. {
  476. #if AE_DEBUG == 1
  477. printf("<AE_DEBUG> Actors Deleted: AE_ACTOR_CREATE[%d] / ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  478. #endif
  479. DestroyActor(AE_ACTOR_CREATE[i]);
  480. AE_ACTOR_CREATE[i] = -1;
  481. }
  482. }
  483.  
  484. if(sizeof(ACTORS_INFO) <= (MAX_ACTORS - GetActorPoolSize())) AE_LOOP = sizeof(ACTORS_INFO);
  485. else AE_LOOP = MAX_ACTORS - GetActorPoolSize();
  486.  
  487. for(new i = 0; i < AE_LOOP; i++)
  488. {
  489. if(ACTORS_INFO[i][POSITIONS_NIGHT][0] != 0.0)
  490. {
  491. if(ACTORS_INFO[i][SKIN_NIGHT] == -1) ACTORS_INFO[i][SKIN_NIGHT] = random(311);
  492. AE_ACTOR_CREATE[i] = CreateActor(ACTORS_INFO[i][SKIN_NIGHT],
  493. ACTORS_INFO[i][POSITIONS_NIGHT][0], // Position X
  494. ACTORS_INFO[i][POSITIONS_NIGHT][1], // Position Y
  495. ACTORS_INFO[i][POSITIONS_NIGHT][2], // Position Z
  496. ACTORS_INFO[i][POSITIONS_NIGHT][3]); // Facing Angle (Rotation)
  497.  
  498. ApplyActorAnimation(AE_ACTOR_CREATE[i], ACTORS_INFO[i][ANIM_LIB_NIGHT], ACTORS_INFO[i][ANIM_NAME_NIGHT], 4.1, ACTORS_INFO[i][ANIM_LOOP_NIGHT], 0, 0, 0, 0);
  499. SetActorInvulnerable(AE_ACTOR_CREATE[i], ACTORS_INFO[i][INVULNERABLE]);
  500.  
  501. #if AE_DEBUG == 1
  502. printf("<AE_DEBUG> Actor Created: AE_ACTOR_CREATE[%d] / Actor ID in-game: %d", i, AE_ACTOR_CREATE[i]);
  503. #endif
  504. }
  505. }
  506. print("\n- AE: Actors Night Created!\n");
  507. }
  508. }
  509. }
  510. }
  511.  
  512.  
  513. public OnActorStreamIn(actorid, forplayerid)
  514. {
  515. for(new i = 0; i < AE_LOOP; i++)
  516. {
  517. if(actorid == AE_ACTOR_CREATE[i])
  518. {
  519. #if AE_ACTORS_CREATE_TYPE == 0
  520. SetActorPos(actorid, ACTORS_INFO[i][POSITIONS_STANDARD][0], ACTORS_INFO[i][POSITIONS_STANDARD][1], ACTORS_INFO[i][POSITIONS_STANDARD][2]);
  521. SetActorFacingAngle(actorid, ACTORS_INFO[i][POSITIONS_STANDARD][3]);
  522. ApplyActorAnimation(actorid, ACTORS_INFO[i][ANIM_LIB_STANDARD], ACTORS_INFO[i][ANIM_NAME_STANDARD], 4.1, ACTORS_INFO[i][ANIM_LOOP_STANDARD], 0, 0, 0, 0);
  523.  
  524. #elseif AE_ACTORS_CREATE_TYPE == 1
  525. switch(AE_HOUR)
  526. {
  527. case AE_HOURS_DAWN: // Dawn
  528. {
  529. SetActorPos(actorid, ACTORS_INFO[i][POSITIONS_DAWN][0], ACTORS_INFO[i][POSITIONS_DAWN][1], ACTORS_INFO[i][POSITIONS_DAWN][2]);
  530. SetActorFacingAngle(actorid, ACTORS_INFO[i][POSITIONS_DAWN][3]);
  531. ApplyActorAnimation(actorid, ACTORS_INFO[i][ANIM_LIB_DAWN], ACTORS_INFO[i][ANIM_NAME_DAWN], 4.1, ACTORS_INFO[i][ANIM_LOOP_DAWN], 0, 0, 0, 0);
  532. }
  533. case AE_HOURS_DAY: // Day
  534. {
  535. SetActorPos(actorid, ACTORS_INFO[i][POSITIONS_DAY][0], ACTORS_INFO[i][POSITIONS_DAY][1], ACTORS_INFO[i][POSITIONS_DAY][2]);
  536. SetActorFacingAngle(actorid, ACTORS_INFO[i][POSITIONS_DAY][3]);
  537. ApplyActorAnimation(actorid, ACTORS_INFO[i][ANIM_LIB_DAY], ACTORS_INFO[i][ANIM_NAME_DAY], 4.1, ACTORS_INFO[i][ANIM_LOOP_DAY], 0, 0, 0, 0);
  538. }
  539. case AE_HOURS_AFTERNOON: // Afternoon
  540. {
  541. SetActorPos(actorid, ACTORS_INFO[i][POSITIONS_AFTERNOON][0], ACTORS_INFO[i][POSITIONS_AFTERNOON][1], ACTORS_INFO[i][POSITIONS_AFTERNOON][2]);
  542. SetActorFacingAngle(actorid, ACTORS_INFO[i][POSITIONS_AFTERNOON][3]);
  543. ApplyActorAnimation(actorid, ACTORS_INFO[i][ANIM_LIB_AFTERNOON], ACTORS_INFO[i][ANIM_NAME_AFTERNOON], 4.1, ACTORS_INFO[i][ANIM_LOOP_AFTERNOON], 0, 0, 0, 0);
  544. }
  545. case AE_HOURS_NIGHT: // Night
  546. {
  547. SetActorPos(actorid, ACTORS_INFO[i][POSITIONS_NIGHT][0], ACTORS_INFO[i][POSITIONS_NIGHT][1], ACTORS_INFO[i][POSITIONS_NIGHT][2]);
  548. SetActorFacingAngle(actorid, ACTORS_INFO[i][POSITIONS_NIGHT][3]);
  549. ApplyActorAnimation(actorid, ACTORS_INFO[i][ANIM_LIB_NIGHT], ACTORS_INFO[i][ANIM_NAME_NIGHT], 4.1, ACTORS_INFO[i][ANIM_LOOP_NIGHT], 0, 0, 0, 0);
  550. }
  551. }
  552. #endif
  553.  
  554. AE_ACTOR_SHOOTED[i] = false;
  555.  
  556. #if AE_DEBUG == 1
  557. new str[80];
  558. format(str, sizeof str, "<AE_DEBUG> Actor %s (id-game:%d) is now streamed in for you.", ACTORS_INFO[i][NAME], actorid);
  559. SendClientMessage(forplayerid, 0xFFFFFFFF, str);
  560. #endif
  561.  
  562. break;
  563. }
  564. }
  565. return 1;
  566. }
  567.  
  568. public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, weaponid, bodypart)
  569. {
  570. if(damaged_actorid != INVALID_ACTOR_ID && IsValidActor(damaged_actorid))
  571. {
  572. #if AE_USE_GIVE_ACTOR_DMG == 1
  573. for(new i = 0; i < AE_LOOP; i++)
  574. {
  575. if(damaged_actorid == AE_ACTOR_CREATE[i] && !AE_ACTOR_SHOOTED[i])
  576. {
  577. static Float:ACTOR_ANGLE, Float:PLAYERID_ANGLE,
  578. RESULT;
  579.  
  580. AE_ACTOR_SHOOTED[i] = true;
  581.  
  582. GetPlayerFacingAngle(playerid, PLAYERID_ANGLE);
  583. GetActorFacingAngle(damaged_actorid, ACTOR_ANGLE);
  584. ClearActorAnimations(damaged_actorid);
  585.  
  586. // Small script for detect shoot in face, chest and torso, from the front
  587. // or from behind. I using playerid & actor angles and compared
  588. // if boths they are looking
  589. RESULT = floatround(ACTOR_ANGLE) - floatround(PLAYERID_ANGLE);
  590. if(RESULT >= 135 && RESULT <= 225 || RESULT >= -135 && RESULT <= -225)
  591. {
  592. if(bodypart == 4) // Shoot in chest
  593. ApplyActorAnimation(damaged_actorid, "PED", "KO_shot_stom", 4.1, 0, 1, 1, 1, 0);
  594. else if(bodypart == 9) // Shoot in Head
  595. ApplyActorAnimation(damaged_actorid, "PED", "KO_shot_face", 4.1, 0, 1, 1, 1, 0);
  596. else if(bodypart == 3) // Shoot in Torso
  597. ApplyActorAnimation(damaged_actorid, "PED", "KO_shot_front", 4.1, 0, 1, 1, 1, 0);
  598. }
  599. else if(RESULT >= -45 && RESULT <= 45)
  600. {
  601. if(bodypart == 9) // Shoot in head (back)
  602. ApplyActorAnimation(damaged_actorid, "FINALE", "FIN_Land_Die", 4.1, 0, 1, 1, 1, 0);
  603. else if(bodypart == 3) // Shoot in torso (back)
  604. ApplyActorAnimation(damaged_actorid, "PED", "KO_skid_back", 4.1, 0, 1, 1, 1, 0);
  605. }
  606. else ApplyActorAnimation(damaged_actorid, "PED", "KO_skid_back", 4.1, 0, 1, 1, 1, 0);
  607. #if AE_USE_RESPAWN_ACTOR == 0
  608. SetTimerEx("AE_RespawnActor", AE_TIME_RESPAWN_ACTOR, false, "dd", AE_ACTOR_CREATE[i], i);
  609. #endif
  610. break;
  611. }
  612. }
  613. #endif
  614. }
  615. return 1;
  616. }
  617.  
  618. forward AE_RespawnActor(actorid, var_id);
  619. public AE_RespawnActor(actorid, var_id)
  620. {
  621. #if AE_ACTORS_CREATE_TYPE == 0
  622. SetActorPos(actorid, ACTORS_INFO[var_id][POSITIONS_STANDARD][0], ACTORS_INFO[var_id][POSITIONS_STANDARD][1], ACTORS_INFO[var_id][POSITIONS_STANDARD][2]);
  623. SetActorFacingAngle(actorid, ACTORS_INFO[var_id][POSITIONS_STANDARD][3]);
  624. ApplyActorAnimation(actorid, ACTORS_INFO[var_id][ANIM_LIB_STANDARD], ACTORS_INFO[var_id][ANIM_NAME_STANDARD], 4.1, 1, 0, 0, 0, 0);
  625.  
  626. #elseif AE_ACTORS_CREATE_TYPE == 1
  627. switch(AE_HOUR)
  628. {
  629. case AE_HOURS_DAWN: // Dawn
  630. {
  631. SetActorPos(actorid, ACTORS_INFO[var_id][POSITIONS_DAWN][0], ACTORS_INFO[var_id][POSITIONS_DAWN][1], ACTORS_INFO[var_id][POSITIONS_DAWN][2]);
  632. SetActorFacingAngle(actorid, ACTORS_INFO[var_id][POSITIONS_DAWN][3]);
  633. ApplyActorAnimation(actorid, ACTORS_INFO[var_id][ANIM_LIB_DAWN], ACTORS_INFO[var_id][ANIM_NAME_DAWN], 4.1, 1, 0, 0, 0, 0);
  634. }
  635. case AE_HOURS_DAY: // Day
  636. {
  637. SetActorPos(actorid, ACTORS_INFO[var_id][POSITIONS_DAY][0], ACTORS_INFO[var_id][POSITIONS_DAY][1], ACTORS_INFO[var_id][POSITIONS_DAY][2]);
  638. SetActorFacingAngle(actorid, ACTORS_INFO[var_id][POSITIONS_DAY][3]);
  639. ApplyActorAnimation(actorid, ACTORS_INFO[var_id][ANIM_LIB_DAY], ACTORS_INFO[var_id][ANIM_NAME_DAY], 4.1, 1, 0, 0, 0, 0);
  640. }
  641. case AE_HOURS_AFTERNOON: // Afternoon
  642. {
  643. SetActorPos(actorid, ACTORS_INFO[var_id][POSITIONS_AFTERNOON][0], ACTORS_INFO[var_id][POSITIONS_AFTERNOON][1], ACTORS_INFO[var_id][POSITIONS_AFTERNOON][2]);
  644. SetActorFacingAngle(actorid, ACTORS_INFO[var_id][POSITIONS_AFTERNOON][3]);
  645. ApplyActorAnimation(actorid, ACTORS_INFO[var_id][ANIM_LIB_AFTERNOON], ACTORS_INFO[var_id][ANIM_NAME_AFTERNOON], 4.1, 1, 0, 0, 0, 0);
  646. }
  647. case AE_HOURS_NIGHT: // Night
  648. {
  649. SetActorPos(actorid, ACTORS_INFO[var_id][POSITIONS_NIGHT][0], ACTORS_INFO[var_id][POSITIONS_NIGHT][1], ACTORS_INFO[var_id][POSITIONS_NIGHT][2]);
  650. SetActorFacingAngle(actorid, ACTORS_INFO[var_id][POSITIONS_NIGHT][3]);
  651. ApplyActorAnimation(actorid, ACTORS_INFO[var_id][ANIM_LIB_NIGHT], ACTORS_INFO[var_id][ANIM_NAME_NIGHT], 4.1, 1, 0, 0, 0, 0);
  652. }
  653. }
  654. AE_ACTOR_SHOOTED[var_id] = false;
  655. #endif
  656. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement