Guest User

Untitled

a guest
Sep 30th, 2011
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. /*
  2. Attacking S.W.A.T. NPC/BOT by GangSteR]
  3. */
  4.  
  5.  
  6. #include <a_samp>
  7. #include <foreach>
  8.  
  9. forward OnSurvivorActions(playerid, targetid, name[]);
  10.  
  11. enum sInfo
  12. {
  13. Timer,
  14. Run
  15. };
  16.  
  17. new Spawned[MAX_PLAYERS]; // Nem bool változó kell ,mert az túlterheli a timert (tesztelve)!
  18. new Shot[MAX_PLAYERS];
  19. new Survivor[MAX_PLAYERS][sInfo];
  20. new Float:zx,
  21. Float:zy,
  22. Float:zz,
  23. Float:hp;
  24.  
  25. stock SetPlayerToFacePlayer(playerid, targetid)
  26. {
  27.  
  28. new
  29. Float:pX,
  30. Float:pY,
  31. Float:pZ,
  32. Float:X,
  33. Float:Y,
  34. Float:Z,
  35. Float:ang;
  36.  
  37. if(!IsPlayerConnected(playerid) || !IsPlayerConnected(targetid)) return 0;
  38.  
  39. GetPlayerPos(targetid, X, Y, Z);
  40. GetPlayerPos(playerid, pX, pY, pZ);
  41.  
  42. if( Y > pY ) ang = (-acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
  43. else if( Y < pY && X < pX ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 450.0);
  44. else if( Y < pY ) ang = (acos((X - pX) / floatsqroot((X - pX)*(X - pX) + (Y - pY)*(Y - pY))) - 90.0);
  45.  
  46. if(X > pX) ang = (floatabs(floatabs(ang) + 180.0));
  47. else ang = (floatabs(ang) - 180.0);
  48.  
  49. SetPlayerFacingAngle(playerid, ang);
  50.  
  51. return 0;
  52.  
  53. }
  54.  
  55. stock Float:GetDistanceToPlayer(playerid,playerid2)
  56. {
  57. new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
  58. if (!IsPlayerConnected(playerid) || !IsPlayerConnected(playerid2)) {
  59. return -1.00;
  60. }
  61. GetPlayerPos(playerid,x1,y1,z1);
  62. GetPlayerPos(playerid2,x2,y2,z2);
  63. return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
  64. }
  65.  
  66. stock ClosestPlayer(p1)
  67. {
  68. new Float:dis,Float:dis2,playerid;
  69. playerid = -1;
  70. dis = 99999.99;
  71. foreach (Player,i){
  72. dis2 = GetDistanceToPlayer(p1,i);
  73. if (dis2 < dis && dis2 != -1.00)
  74. {
  75. dis = dis2;
  76. playerid = i;
  77. }
  78. }
  79. return playerid;
  80. }
  81.  
  82. stock Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
  83. {
  84. new Float:a;
  85. GetPlayerPos(playerid, x, y, a);
  86. GetPlayerFacingAngle(playerid, a);
  87. x += (distance * floatsin(-a, degrees));
  88. y += (distance * floatcos(-a, degrees));
  89. return a;
  90. }
  91.  
  92.  
  93. public OnFilterScriptInit()
  94. {
  95. ConnectNPC("Survivor", "test");
  96. return 1;
  97. }
  98.  
  99. public OnFilterScriptExit()
  100. {
  101. return 1;
  102. }
  103.  
  104. public OnPlayerConnect(playerid)
  105. {
  106. if(IsPlayerNPC(playerid))
  107. {
  108. new name[MAX_PLAYER_NAME];
  109. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  110. if(!strcmp(name, "Survivor", true))
  111. {
  112. Survivor[playerid][Timer] = SetTimerEx("OnSurvivorActions", 400, true, "i", playerid);
  113. SpawnPlayer(playerid);
  114. }
  115. }
  116. else{
  117. Spawned[playerid] = 0;
  118. Shot[playerid] = 0;
  119. }
  120. return 1;
  121. }
  122.  
  123. public OnPlayerDisconnect(playerid)
  124. {
  125. if(!IsPlayerNPC(playerid))
  126. {
  127. Spawned[playerid] = 0;
  128. Shot[playerid] = 0;
  129. }
  130. return 1;
  131. }
  132.  
  133. public OnPlayerSpawn(playerid)
  134. {
  135. if(IsPlayerNPC(playerid))
  136. {
  137. new name[MAX_PLAYER_NAME];
  138. GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  139. if(!strcmp(name, "Survivor", true))
  140. {
  141. SetPlayerSkin(playerid, 285);
  142. SetPlayerColor(playerid, 0x1B57C4AA);
  143. Survivor[playerid][Run] = 1;
  144. }
  145. }
  146. else
  147. {
  148. Spawned[playerid] = 1;
  149. Shot[playerid] = 0;
  150. }
  151. return 1;
  152. }
  153.  
  154. public OnPlayerDeath(playerid, killerid, reason)
  155. {
  156. if(!IsPlayerNPC(playerid))
  157. {
  158. Spawned[playerid] = 0;
  159. Shot[playerid] = 0;
  160. }
  161. return 1;
  162. }
  163.  
  164. public OnSurvivorActions(playerid, targetid, name[])
  165. {
  166. targetid = ClosestPlayer(playerid);
  167. if(IsPlayerNPC(playerid) && !IsPlayerNPC(targetid))
  168. {
  169. GetPlayerPos(playerid, zx, zy, zz);
  170. if(Survivor[playerid][Run] == 1 && Spawned[targetid] == 1)
  171. {
  172. SetPlayerToFacePlayer(playerid, targetid);
  173. if(GetDistanceToPlayer(playerid, targetid) < 36)
  174. {
  175. Shot[playerid] ++;
  176. if(Shot[playerid] == 1 || Shot[playerid] == 2)
  177. {
  178. SetPlayerAttachedObject(playerid, 0, 356, 6, -0.088831, -0.041855, 0.081119, 0.000000, 20.000000, 0.000000, 1.000000, 1.000000, 1.000000);
  179. SendClientMessage(targetid, 0xF51D1DAA, "A kommandós lő téged!");
  180. }
  181. GetPlayerHealth(targetid, hp);
  182. SetPlayerHealth(targetid, hp-5.5);
  183. PlayerPlaySound(targetid, 1057,0.0,0.0,0.0);
  184. ApplyAnimation(playerid, "Ped","gun_stand", 1,1,1,0,0,0);
  185. if(hp < 5.6)
  186. {
  187. SendDeathMessage(playerid, targetid, 53);
  188. }
  189. }
  190. if(GetDistanceToPlayer(playerid, targetid) > 45)
  191. {
  192. ApplyAnimation(playerid, "Ped","run_civi", 1,1,1,0,0,0);
  193. GetXYInFrontOfPlayer(playerid, zx, zy, 2.3);
  194. SetPlayerPos(playerid, zx, zy, zz);
  195. Shot[playerid] = 0;
  196. }
  197. }
  198. }
  199. return 1;
  200. }
  201.  
  202.  
Advertisement
Add Comment
Please, Sign In to add comment