Advertisement
Guest User

peds.inc BETA R4 - By Gammix

a guest
Apr 27th, 2015
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.33 KB | None | 0 0
  1. /*
  2. PEDs Include (peds.inc)
  3. * Since samp 0.3.7 have actors system(which is coolest upgrade ever!), i have planned on peds(tpe of npcs) creator using pawn (not C++)
  4. * This include let you make AI and cool effects and peds without writing thier AI.
  5. * SAMP have provided collisions for actors, which is Awesome and for you as well, cause now ped will collide!
  6.  
  7. Author: (creator)
  8. * Gammix
  9.  
  10. Contributors:
  11. * Pottus - ideas and improvement
  12. * a_angles - took help for making the ped face points
  13. * seif - took help from bodyparts code
  14.  
  15. (c) Copyright 2015
  16. * This file is provided as is (no warranties).
  17. */
  18. /*
  19. FUNCTIONS:
  20. native PED_Connect(skin, Float:x, Float:y, Float:z, Float:rotation = 0.0);
  21. native PED_IsConnected(pedid);
  22. native PED_Disconnect(pedid);
  23. native PED_SetPos(pedid, Float:x, Float:y, Float:z);
  24. native PED_GetPos(pedid, &Float:x, &Float:y, &Float:z);
  25. native PED_SetFacingAngle(pedid, Float:angle);
  26. native PED_GetFacingAngle(pedid, &Float:angle);
  27. native PED_SetVirtualWorld(pedid, world);
  28. native PED_GetVirtualWorld(pedid);
  29. native PED_IsInRangeOfPoint(pedid, Float:range, Float:x, Float:y, Float:z);
  30. native PED_SetFacingPoint(pedid, Float:x, Float:y);
  31. native PED_IsFacingPoint(pedid, Float:x, Float:y, Float:range = 10.0);
  32. native PED_SetFacingPlayer(pedid, playerid);
  33. native PED_IsFacingPlayer(pedid, playerid);
  34. native PED_IsBehindPlayer(pedid, playerid, Float:range);
  35. native PED_SetHealth(pedid, Float:health);
  36. native PED_GetHealth(pedid, &Float:health);
  37. native PED_GotoPoint(pedid, Float:x, Float:y, Float:z, bool:walk = false);
  38. native PED_ApplyAnimation(pedid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time);
  39. native PED_Stop(pedid);
  40. native PED_Spawn(pedid);
  41. native PED_SetSpawnInfo(pedid, Float:x, Float:y, Float:z, Float:rotation);
  42. native PED_IsMoving(pedid);
  43. native PED_SetWalkingStyle(pedid, walkingstyle);
  44. native PED_GetWalkingStyle(pedid);
  45. native PED_SetRunningStyle(pedid, runningstyle);
  46. native PED_GetRunningStyle(pedid);
  47. native PED_GetState(pedid);
  48. native PED_IsStreamedIn(pedid, forplayerid);
  49. native _
  50. native IsPlayerLookingAtPED(playerid, pedid);
  51. native GetPlayerTargetPED(playerid);
  52.  
  53. CALLBACKS:
  54. public PED_OnConnect(pedid);
  55. public PED_OnDisconnect(pedid);
  56. public PED_OnSpawn(pedid);
  57. public PED_OnReachDestination(pedid, Float:x, Float:y, Float:z);
  58. public PED_OnStateChange(pedid, newstate, oldstate);
  59. public PED_OnStreamIn(pedid, forplayerid);
  60. public PED_OnStreamOut(pedid, forplayerid);
  61. */
  62.  
  63. //just kiding !:D!
  64. #define INVALID_PED_ID INVALID_ACTOR_ID
  65.  
  66. //walking styles
  67. #define PED_WALKING_DEFAULT 0
  68. #define PED_WALKING_NORMAL 1
  69. #define PED_WALKING_GANGSTA 2
  70. #define PED_WALKING_GANGSTA2 3
  71. #define PED_WALKING_OLD 4
  72. #define PED_WALKING_FAT_OLD 5
  73. #define PED_WALKING_FAT 6
  74. #define PED_WALKING_LADY 7
  75. #define PED_WALKING_LADY2 8
  76. #define PED_WALKING_WHORE 9
  77. #define PED_WALKING_WHORE2 10
  78. #define PED_WALKING_DRUNK 11
  79. #define PED_WALKING_BLIND 12
  80. #define PED_WALKING_ARMED 13
  81.  
  82. //ped states
  83. #define PED_STATE_ONFOOT 0
  84. #define PED_STATE_WALKING 1
  85. #define PED_STATE_RUNNING 2
  86.  
  87. //running styles
  88. #define PED_RUNNING_DEFAULT 0
  89. #define PED_RUNNING_NORMAL 1
  90. #define PED_RUNNING_GANGSTA 2
  91. #define PED_RUNNING_GANGSTA2 3
  92. #define PED_RUNNING_OLD 4
  93. #define PED_RUNNING_FAT_OLD 5
  94. #define PED_RUNNING_FAT 6
  95. #define PED_RUNNING_LADY 7
  96. #define PED_RUNNING_LADY2 8
  97. #define PED_RUNNING_WHORE 9
  98. #define PED_RUNNING_WHORE2 10
  99. #define PED_RUNNING_DRUNK 11
  100. #define PED_RUNNING_BLIND 12
  101. #define PED_RUNNING_ARMED 13
  102.  
  103. enum PedEnum
  104. {
  105. bool:P_EXIST,
  106. Float:P_X,
  107. Float:P_Y,
  108. Float:P_Z,
  109. Float:P_ROT,
  110. P_TIMER,
  111. Float:P_HEALTH,
  112. Float:P_GOTOX,
  113. Float:P_GOTOY,
  114. Float:P_GOTOZ,
  115. P_STATE,
  116. P_WALKSTYLE,
  117. P_RUNSTYLE
  118. }
  119. static gPED[MAX_ACTORS][PedEnum];
  120.  
  121. //looking at ped function
  122. static gPlayerLooking[MAX_ACTORS];
  123.  
  124. public OnPlayerConnect(playerid)
  125. {
  126. gPlayerLooking[playerid] = INVALID_PED_ID;
  127.  
  128. #if defined HoOK_OnPlayerConnect
  129. HoOK_OnPlayerConnect(playerid);
  130. #endif
  131. return 1;
  132. }
  133. #if defined _ALS_OnPlayerConnect
  134. #undef OnPlayerConnect
  135. #else
  136. #define _ALS_OnPlayerConnect
  137. #endif
  138. #define OnPlayerConnect HoOK_OnPlayerConnect
  139. #if defined HoOK_OnPlayerConnect
  140. forward HoOK_OnPlayerConnect(playerid);
  141. #endif
  142.  
  143. //internal functions
  144. stock Float:PED_GetDistance(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
  145. {
  146. return floatsqroot( (( x1 - x2 ) * ( x1 - x2 )) + (( y1 - y2 ) * ( y1 - y2 )) + (( z1 - z2 ) * ( z1 - z2 )) );
  147. }
  148.  
  149. stock PED_AngleInRangeOfAngle(Float:a1, Float:a2, Float:range = 10.0)
  150. {
  151. a1 -= a2;
  152. if((a1 < range) && (a1 > -range)) return true;
  153. return false;
  154. }
  155.  
  156. //include funcions
  157. stock PED_Connect(skin, Float:x, Float:y, Float:z, Float:rotation = 0.0)
  158. {
  159. if(skin < 0 || skin > 311) return INVALID_PED_ID;
  160.  
  161. new _actor = CreateActor(skin, x, y, z, rotation);
  162.  
  163. if(_actor == INVALID_PED_ID) return INVALID_PED_ID;
  164.  
  165. gPED[_actor][P_EXIST] = true;
  166. gPED[_actor][P_X] = x;
  167. gPED[_actor][P_Y] = y;
  168. gPED[_actor][P_Z] = z;
  169. gPED[_actor][P_ROT] = rotation;
  170. gPED[_actor][P_HEALTH] = 100.0;
  171. gPED[_actor][P_GOTOX] = -1000.0;
  172. gPED[_actor][P_GOTOY] = -1000.0;
  173. gPED[_actor][P_GOTOZ] = -1000.0;
  174. gPED[_actor][P_WALKSTYLE] = 0;
  175. gPED[_actor][P_RUNSTYLE] = 0;
  176. gPED[_actor][P_STATE] = PED_STATE_ONFOOT;
  177.  
  178. gPED[_actor][P_TIMER] = SetTimerEx("PED_OnTimeUpdate", 100, true, "i", _actor);
  179.  
  180. CallLocalFunction("PED_OnConnect", "i", _actor);
  181. CallLocalFunction("PED_OnSpawn", "i", _actor);
  182. return _actor;
  183. }
  184.  
  185. stock PED_IsConnected(pedid) return gPED[pedid][P_EXIST];
  186.  
  187. stock PED_Disconnect(pedid)
  188. {
  189. if(! PED_IsConnected(pedid)) return false;
  190.  
  191. gPED[pedid][P_EXIST] = false;
  192.  
  193. DestroyActor(pedid);
  194. KillTimer(gPED[pedid][P_TIMER]);
  195.  
  196. CallLocalFunction("PED_OnDisconnect", "i", i);
  197. return true;
  198. }
  199.  
  200. stock PED_SetPos(pedid, Float:x, Float:y, Float:z)
  201. {
  202. if(! PED_IsConnected(pedid)) return false;
  203.  
  204. return SetActorPos(pedid, x, y, z);
  205. }
  206.  
  207. stock PED_GetPos(pedid, &Float:x, &Float:y, &Float:z)
  208. {
  209. if(! PED_IsConnected(pedid)) return false;
  210.  
  211. return GetActorPos(pedid, x, y, z);
  212. }
  213.  
  214. stock PED_SetFacingAngle(pedid, Float:angle)
  215. {
  216. if(! PED_IsConnected(pedid)) return false;
  217.  
  218. return SetActorFacingAngle(pedid, angle);
  219. }
  220.  
  221. stock PED_GetFacingAngle(pedid, &Float:angle)
  222. {
  223. if(! PED_IsConnected(pedid)) return false;
  224.  
  225. return GetActorFacingAngle(pedid, angle);
  226. }
  227.  
  228. stock PED_SetVirtualWorld(pedid, world)
  229. {
  230. if(! PED_IsConnected(pedid)) return false;
  231.  
  232. return SetActorVirtualWorld(pedid, world);
  233. }
  234.  
  235. stock PED_GetVirtualWorld(pedid)
  236. {
  237. if(! PED_IsConnected(pedid)) return false;
  238.  
  239. return GetActorVirtualWorld(pedid);
  240. }
  241.  
  242. stock PED_IsInRangeOfPoint(pedid, Float:range, Float:x, Float:y, Float:z)
  243. {
  244. if(! PED_IsConnected(pedid)) return false;
  245.  
  246. new Float:pos[3];
  247. PED_GetPos(pedid, pos[0], pos[1], pos[2]);
  248.  
  249. if(PED_GetDistance(pos[0], pos[1], pos[2], x, y, z) <= range) return true;
  250. return false;
  251. }
  252.  
  253. stock PED_SetFacingPoint(pedid, Float:x, Float:y)
  254. {
  255. if(! PED_IsConnected(pedid)) return false;
  256.  
  257. new Float:pX, Float:pY, Float:pZ;
  258. PED_GetPos(pedid, pX, pY, pZ);
  259.  
  260. new Float:angle;
  261.  
  262. if( y > pY ) angle = (-acos((x - pX) / floatsqroot((x - pX)*(x - pX) + (y - pY)*(y - pY))) - 90.0);
  263. else if( y < pY && x < pX ) angle = (acos((x - pX) / floatsqroot((x - pX)*(x - pX) + (y - pY)*(y - pY))) - 450.0);
  264. else if( y < pY ) angle = (acos((x - pX) / floatsqroot((x - pX)*(x - pX) + (y - pY)*(y - pY))) - 90.0);
  265.  
  266. if(x > pX) angle = (floatabs(floatabs(angle) + 180.0));
  267. else angle = (floatabs(angle) - 180.0);
  268.  
  269. PED_SetFacingAngle(pedid, angle);
  270. return true;
  271. }
  272.  
  273. stock PED_IsFacingPoint(pedid, Float:x, Float:y, Float:range = 10.0)
  274. {
  275. if(! PED_IsConnected(pedid)) return false;
  276.  
  277. new Float:X, Float:Y, Float:Z, Float:A;
  278. PED_GetPos(pedid, X, Y, Z);
  279. PED_GetFacingAngle(pedid, A);
  280.  
  281. new Float:angle;
  282.  
  283. if( Y > y ) angle = (-acos((X - x) / floatsqroot((X - x)*(X - x) + (Y - y)*(Y - y))) - 90.0);
  284. else if( Y < y && X < x ) angle = (acos((X - x) / floatsqroot((X - x)*(X - x) + (Y - y)*(Y - y))) - 450.0);
  285. else if( Y < y ) angle = (acos((X - x) / floatsqroot((X - x)*(X - x) + (Y - y)*(Y - y))) - 90.0);
  286.  
  287. if(AngleInRangeOfAngle(-angle, A, dOffset)) return true;
  288. return false;
  289. }
  290.  
  291. stock PED_SetFacingPlayer(pedid, playerid)
  292. {
  293. if(! PED_IsConnected(pedid)) return false;
  294. if(! IsPlayerConnected(playerid)) return false;
  295.  
  296. new Float:pX, Float:pY, Float:pZ;
  297. GetPlayerPos(playerid, pX, pY, pZ);
  298.  
  299. return PED_SetFacingPoint(pedid, pX, pY);
  300. }
  301.  
  302. stock PED_IsFacingPlayer(pedid, playerid)
  303. {
  304. if(! PED_IsConnected(pedid)) return false;
  305. if(! IsPlayerConnected(playerid)) return false;
  306.  
  307. new Float:pX, Float:pY, Float:pZ;
  308. GetPlayerPos(playerid, pX, pY, pZ);
  309.  
  310. return PED_IsFacingPoint(pedid, pX, pY);
  311. }
  312.  
  313. stock PED_IsBehindPlayer(pedid, playerid, Float:range)
  314. {
  315. if(! PED_IsConnected(pedid)) return false;
  316. if(! IsPlayerConnected(playerid) return false;
  317.  
  318. new Float:za, Float:pa;
  319. PED_GetFacingAngle(pedid, za);
  320. GetPlayerFacingAngle(targetid, pa);
  321.  
  322. if(PED_AngleInRangeOfAngle(za, pa, range) && PED_IsFacingPlayer(playerid, targetid, range)) return true;
  323. return false;
  324. }
  325.  
  326. stock PED_SetHealth(pedid, Float:health)
  327. {
  328. if(! PED_IsConnected(pedid)) return false;
  329.  
  330. gPED[pedid][P_HEALTH] = health;
  331. return true;
  332. }
  333.  
  334. stock PED_GetHealth(pedid, &Float:health)
  335. {
  336. if(! PED_IsConnected(pedid)) return false;
  337.  
  338. health = gPED[pedid][P_HEALTH];
  339. return true;
  340. }
  341.  
  342. stock PED_ApplyAnimation(pedid, animlib[], animname[], Float:fDelta, loop, lockx, locky, freeze, time)
  343. {
  344. if(! PED_IsConnected(pedid)) return false;
  345.  
  346. return ApplyActorAnimation(pedid, animlib, animname, fDelta, loop, lockx, locky, freeze, time);
  347. }
  348.  
  349. stock PED_GotoPoint(pedid, Float:x, Float:y, Float:z, bool:walk = false)
  350. {
  351. if(! PED_IsConnected(pedid)) return false;
  352.  
  353. #pragma unused z
  354.  
  355. PED_Stop(pedid);
  356. PED_SetFacingPoint(pedid, x, y);
  357.  
  358. if(walk)
  359. {
  360. switch(gPED[pedid][P_WALKSTYLE])
  361. {
  362. case PED_WALKING_NORMAL: PED_ApplyAnimation(pedid, "PED", "WALK_civi", 4.1, 1, 1, 1, 1, 0);
  363. case PED_WALKING_GANGSTA: PED_ApplyAnimation(pedid, "PED", "WALK_gang1", 4.1, 1, 1, 1, 1, 0);
  364. case PED_WALKING_GANGSTA2: PED_ApplyAnimation(pedid, "PED", "WALK_gang2", 4.1, 1, 1, 1, 1, 0);
  365. case PED_WALKING_OLD: PED_ApplyAnimation(pedid, "PED", "WALK_old", 4.1, 1, 1, 1, 1, 0);
  366. case PED_WALKING_FAT_OLD: PED_ApplyAnimation(pedid, "PED", "WALK_fatold", 4.1, 1, 1, 1, 1, 0);
  367. case PED_WALKING_FAT: PED_ApplyAnimation(pedid, "PED", "WALK_fat", 4.1, 1, 1, 1, 0, 1);
  368. case PED_WALKING_LADY: PED_ApplyAnimation(pedid, "PED", "WOMAN_walknorm", 4.1, 1, 1, 1, 1, 0);
  369. case PED_WALKING_LADY2: PED_ApplyAnimation(pedid, "PED", "WOMAN_walkbusy", 4.1, 1, 1, 1, 1, 0);
  370. case PED_WALKING_WHORE: PED_ApplyAnimation(pedid, "PED", "WOMAN_walkpro", 4.1, 1, 1, 1, 1, 0);
  371. case PED_WALKING_WHORE2: PED_ApplyAnimation(pedid, "PED", "WOMAN_walksexy", 4.1, 1, 1, 1, 1, 0);
  372. case PED_WALKING_DRUNK: PED_ApplyAnimation(pedid, "PED", "WALK_drunk", 4.1, 1, 1, 1, 1, 0);
  373. case PED_WALKING_BLIND: PED_ApplyAnimation(pedid, "PED", "Walk_Wuzi", 4.1, 1, 1, 1, 1, 0);
  374. case PED_WALKING_ARMED: PED_ApplyAnimation(pedid, "PED", "WALK_armed", 4.1, 1, 1, 1, 1, 0);
  375. default: PED_ApplyAnimation(pedid, "PED", "WALK_player", 4.1, 1, 1, 1, 1, 0);
  376. }
  377. CallLocalFunction("PED_OnStateChange", "iii", pedid, PED_STATE_WALKING, gPED[pedid][P_STATE]);
  378. gPED[pedid][P_STATE] = PED_STATE_WALKING;
  379. }
  380. else
  381. {
  382. switch(gPED[pedid][P_RUNSTYLE])
  383. {
  384. case PED_RUNNING_NORMAL: PED_ApplyAnimation(pedid, "PED", "run_civi", 4.1, 1, 1, 1, 1, 0);
  385. case PED_RUNNING_GANGSTA: PED_ApplyAnimation(pedid, "PED", "run_gang1", 4.1, 1, 1, 1, 1, 0);
  386. case PED_RUNNING_GANGSTA2: PED_ApplyAnimation(pedid, "PED", "run_gang1", 4.1, 1, 1, 1, 1, 0);
  387. case PED_RUNNING_OLD: PED_ApplyAnimation(pedid, "PED", "run_old", 4.1, 1, 1, 1, 1, 0);
  388. case PED_RUNNING_FAT_OLD: PED_ApplyAnimation(pedid, "PED", "run_fatold", 4.1, 1, 1, 1, 1, 0);
  389. case PED_RUNNING_FAT: PED_ApplyAnimation(pedid, "PED", "run_fat", 4.1, 1, 1, 1, 0, 1);
  390. case PED_RUNNING_LADY: PED_ApplyAnimation(pedid, "PED", "woman_run", 4.1, 1, 1, 1, 1, 0);
  391. case PED_RUNNING_LADY2: PED_ApplyAnimation(pedid, "PED", "WOMAN_runbusy", 4.1, 1, 1, 1, 1, 0);
  392. case PED_RUNNING_WHORE: PED_ApplyAnimation(pedid, "PED", "woman_runpanic", 4.1, 1, 1, 1, 1, 0);
  393. case PED_RUNNING_WHORE2: PED_ApplyAnimation(pedid, "PED", "WOMAN_runsexy", 4.1, 1, 1, 1, 1, 0);
  394. case PED_RUNNING_DRUNK: PED_ApplyAnimation(pedid, "PED", "WALK_drunk", 4.1, 1, 1, 1, 1, 0);
  395. case PED_RUNNING_BLIND: PED_ApplyAnimation(pedid, "PED", "Run_Wuzi", 4.1, 1, 1, 1, 1, 0);
  396. case PED_RUNNING_ARMED: PED_ApplyAnimation(pedid, "PED", "run_armed", 4.1, 1, 1, 1, 1, 0);
  397. default: PED_ApplyAnimation(pedid, "PED", "run_player", 4.1, 1, 1, 1, 1, 0);
  398. }
  399. CallLocalFunction("PED_OnStateChange", "iii", pedid, PED_STATE_RUNNING, gPED[pedid][P_STATE]);
  400. gPED[pedid][P_STATE] = PED_STATE_RUNNING;
  401. }
  402.  
  403. gPED[pedid][P_GOTOX] = x;
  404. gPED[pedid][P_GOTOY] = y;
  405. gPED[pedid][P_GOTOZ] = z;
  406. return true;
  407. }
  408.  
  409. stock PED_SetWalkingStyle(pedid, walkingstyle)
  410. {
  411. if(! PED_IsConnected(pedid)) return false;
  412. if(walkingstyle < 0 || walkingstyle > 13) return false;
  413.  
  414. gPED[pedid][P_WALKSTYLE] = walkingstyle;
  415. return true;
  416. }
  417.  
  418. stock PED_GetWalkingStyle(pedid)
  419. {
  420. if(! PED_IsConnected(pedid)) return false;
  421.  
  422. return gPED[pedid][P_WALKSTYLE];
  423. }
  424.  
  425. stock PED_SetRunningStyle(pedid, runningstyle)
  426. {
  427. if(! PED_IsConnected(pedid)) return false;
  428.  
  429. gPED[pedid][P_RUNSTYLE] = runningstyle;
  430. return true;
  431. }
  432.  
  433. stock PED_GetRunningStyle(pedid)
  434. {
  435. if(! PED_IsConnected(pedid)) return false;
  436.  
  437. return gPED[pedid][P_RUNSTYLE];
  438. }
  439.  
  440. stock PED_GetState(pedid)
  441. {
  442. if(! PED_IsConnected(pedid)) return false;
  443.  
  444. return gPED[pedid][P_STATE];
  445. }
  446.  
  447. stock PED_Stop(pedid)
  448. {
  449. if(! PED_IsConnected(pedid)) return false;
  450.  
  451. CallLocalFunction("PED_OnStateChange", "iii", pedid, PED_STATE_ONFOOT, gPED[pedid][P_STATE]);//calling !:D!
  452.  
  453. gPED[pedid][P_STATE] = PED_STATE_ONFOOT;
  454. return ClearActorAnimations(pedid);
  455. }
  456.  
  457. stock PED_Spawn(pedid)
  458. {
  459. if(! PED_IsConnected(pedid)) return false;
  460.  
  461. PED_SetHealth(pedid, 100.0);
  462. PED_SetVirtualWorld(pedid, 0);
  463. PED_SetPos(pedid, gPED[pedid][P_X], gPED[pedid][P_Y], gPED[pedid][P_Z]);
  464. PED_SetFacingAngle(pedid, gPED[pedid][P_ROT]);
  465. gPED[pedid][P_STATE] = PED_STATE_ONFOOT;
  466.  
  467. CallLocalFunction("PED_OnSpawn", "i", pedid);
  468. return true;
  469. }
  470.  
  471. stock PED_SetSpawnInfo(pedid, Float:x, Float:y, Float:z, Float:rotation)
  472. {
  473. if(! PED_IsConnected(pedid)) return false;
  474.  
  475. gPED[pedid][P_X] = x;
  476. gPED[pedid][P_Y] = y;
  477. gPED[pedid][P_Z] = z;
  478. gPED[pedid][P_ROT] = rotation;
  479. return true;
  480. }
  481.  
  482. //player functions
  483. stock IsPlayerLookingAtPED(playerid, pedid)
  484. {
  485. if(! PED_IsConnected(pedid)) return false;
  486. if(! IsPlayerConnected(playerid)) return false;
  487.  
  488. // Get the camera's positions
  489. new Float:vx, Float:vy, Float:vz;
  490. GetPlayerCameraFrontVector(playerid, vx, vy, vz);
  491.  
  492. new Float:cx, Float:cy, Float:cz;
  493. GetPlayerCameraPos(playerid, cx, cy, cz);
  494.  
  495. new Float:a;
  496. GetPlayerFacingAngle(playerid, a);
  497.  
  498. //checking distance, setting offset and x,y,z coords!
  499. new Float:x, Float:y, Float:z;
  500. new Float:offset;
  501. for(new Float:d; d < 100.0; d += 0.5)
  502. {
  503. switch(GetPlayerWeapon(playerid))
  504. {
  505. case 24, 29, 22, 23, 25, 26, 27, 28, 32: offset = 0.11;
  506. case 30, 31: offset = 0.07;
  507. case 33, 34: offset = 0.0;
  508. }
  509. switch(GetPlayerWeapon(playerid))
  510. {
  511. case 22, 26, 28, 32:
  512. {
  513. x = vx * d+cx;
  514. y = vy * d+cy;
  515. }
  516. default:
  517. {
  518. x = cx + (d * floatsin(-a, degrees));
  519. y = cy + (d * floatcos(-a, degrees));
  520. }
  521. }
  522.  
  523. z = (vz + offset) * d + cz;
  524.  
  525. //setting the radius
  526. #define BODY_PART_HEAD 0
  527. #define BODY_PART_TORSO 1
  528. #define BODY_PART_LEGS 2
  529.  
  530. #define radius 1.5
  531.  
  532. //this one is for crouched ped
  533. //if(PED_IsInRangeOfPoint(pedid, radius + 0.2, x, y, z + 0.1)) return true;
  534.  
  535. if(PED_IsInRangeOfPoint(pedid, radius, x, y, z - 0.8)) return true;
  536. }
  537. return false;
  538. }
  539.  
  540. stock GetPlayerTargetPED(playerid)
  541. {
  542. for(new i; i < MAX_ACTORS; i++)
  543. {
  544. if(IsPlayerLookingAtPED(playerid, i)) return i;
  545. }
  546. return INVALID_PED_ID;
  547. }
  548.  
  549. stock PED_IsStreamedIn(pedid, forplayerid)
  550. {
  551. if(! PED_IsConnected(pedid)) return false;
  552. if(! IsPlayerConnected(forplayerid)) return false;
  553.  
  554. return IsActorStreamedIn(pedid, forplayerid);
  555. }
  556.  
  557. //internal callback
  558. forward PED_OnTimeUpdate(pedid);
  559. public PED_OnTimeUpdate(pedid)
  560. {
  561. if( PED_GetState(pedid) == PED_STATE_RUNNING ||
  562. PED_GetState(pedid) == PED_STATE_WALKING)
  563. {
  564. if( PED_IsInRangeOfPoint(pedid, 5.0, gPED[pedid][P_GOTOX], gPED[pedid][P_GOTOY], gPED[pedid][P_GOTOZ]))//will be adding a better version when actors include gets an update from Kalcor*!
  565. {
  566. PED_Stop(pedid);
  567. CallLocalFunction("PED_OnReachDestination", "ifff", pedid, gPED[pedid][P_GOTOX], gPED[pedid][P_GOTOY], gPED[pedid][P_GOTOZ]);
  568. return 1;
  569. }
  570. }
  571. return 1;
  572. }
  573.  
  574. forward PED_OnConnect(pedid);
  575. forward PED_OnDisconnect(pedid);
  576. forward PED_OnSpawn(pedid);
  577. forward PED_OnReachDestination(pedid, Float:x, Float:y, Float:z);
  578. forward PED_OnStateChange(pedid, newstate, oldstate);
  579. forward PED_OnStreamIn(pedid, playerid);
  580. forward PED_OnStreamOut(pedid, playerid);
  581.  
  582. public OnActorStreamIn(actorid, forplayerid)
  583. {
  584. if(gPED[actorid][P_EXIST]) CallLocalFunction("PED_OnStreamIn", "ii", actorid, forplayerid);
  585.  
  586. #if defined HoOK_OnActorStreamIn
  587. HoOK_OnActorStreamIn(actorid, forplayerid);
  588. #endif
  589. return 1;
  590. }
  591. #if defined _ALS_OnActorStreamIn
  592. #undef OnActorStreamIn
  593. #else
  594. #define _ALS_OnActorStreamIn
  595. #endif
  596. #define OnActorStreamIn HoOK_OnActorStreamIn
  597. #if defined HoOK_OnActorStreamIn
  598. forward HoOK_OnActorStreamIn(actorid, forplayerid);
  599. #endif
  600.  
  601. public OnActorStreamOut(actorid, forplayerid)
  602. {
  603. if(gPED[actorid][P_EXIST]) CallLocalFunction("PED_OnStreamOut", "ii", actorid, forplayerid);
  604.  
  605. #if defined HoOK_OnActorStreamOut
  606. HoOK_OnActorStreamOut(actorid, forplayerid);
  607. #endif
  608. return 1;
  609. }
  610. #if defined _ALS_OnActorStreamOut
  611. #undef OnActorStreamOut
  612. #else
  613. #define _ALS_OnActorStreamOut
  614. #endif
  615. #define OnActorStreamOut HoOK_OnActorStreamOut
  616. #if defined HoOK_OnActorStreamOut
  617. forward HoOK_OnActorStreamOut(actorid, forplayerid);
  618. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement