Advertisement
Guest User

aetest

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