GammixSAMP

peds.inc BETA R5 - By Gammix

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