Advertisement
Guest User

Untitled

a guest
Nov 19th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.78 KB | None | 0 0
  1. // Dog sys by Leo
  2. /*
  3. ### # # ##### # # # ###### ####### #####
  4. # ## # # # # # # # # # # #
  5. # # # # # # # # # # # #
  6. # # # # # # # # # # ##### #####
  7. # # # # # # # # # # # #
  8. # # ## # # # # # # # # # #
  9. ### # # ##### ####### ##### ###### ####### #####
  10. */
  11.  
  12. #include <a_samp>
  13. #include <streamer>
  14. #include <zcmd>
  15. #include <sscanf2>
  16.  
  17. /*
  18. ######## ######## ######## #### ## ## ######## ######
  19. ## ## ## ## ## ### ## ## ## ##
  20. ## ## ## ## ## #### ## ## ##
  21. ## ## ###### ###### ## ## ## ## ###### ######
  22. ## ## ## ## ## ## #### ## ##
  23. ## ## ## ## ## ## ### ## ## ##
  24. ######## ######## ## #### ## ## ######## ######
  25. */
  26.  
  27.  
  28. #define BALLOBJECTID (1974) // Objekat lopte na /dog throwball
  29. #define DOG_SPEED (4.00) // Koliko se brzo krece Pas
  30. #define DOG_OBJECT (-2012) // Objekat Psa ( sada je jelen )
  31. #define BALL_DISTANCE (15.0) // Koliko daleko ce lopta odletiti kada je netko baci.
  32. #define BALL_SPEED (4.5) // Koliko brzo ce se kretati loptica kada ju netko baci.
  33. #define DOG_DIS_NEAR_PLAYER (1.3) // Koliko blizu ce pas biti pored igraca
  34.  
  35. #define COLOR_LIGHTBLUE -1
  36. #define COLOR_RED -1
  37. #define COLOR_YELLOW -1
  38.  
  39. /*
  40. ## ## ### ######## ######
  41. ## ## ## ## ## ## ## ##
  42. ## ## ## ## ## ## ##
  43. ## ## ## ## ######## ######
  44. ## ## ######### ## ## ##
  45. ## ## ## ## ## ## ## ##
  46. ### ## ## ## ## ######
  47. */
  48.  
  49. // Dog Follow
  50. new DogFollowTimer[MAX_PLAYERS],
  51. DogFollowPlayer[MAX_PLAYERS];
  52.  
  53. // Throwing Ball
  54. new BallObject[MAX_PLAYERS],
  55. ThrowBall[MAX_PLAYERS],
  56. bool: BallThrown[MAX_PLAYERS] = {false, ...};
  57.  
  58. // Player Enum
  59. enum pInfo
  60. {
  61. OwnedDog,
  62. DogSpawned
  63. };
  64. new PlayerInfo[MAX_PLAYERS][pInfo];
  65.  
  66.  
  67. enum dog
  68. {
  69. dogobject,
  70. Float:dPozX,
  71. Float:dPozY,
  72. Float:dPozZ,
  73. Float:dPozA,
  74. };
  75. new PlayerDog[MAX_PLAYERS][dog];
  76.  
  77. /*
  78. ###### ######## ####### ###### ## ## ######
  79. ## ## ## ## ## ## ## ## ## ## ##
  80. ## ## ## ## ## ## ## ##
  81. ###### ## ## ## ## ##### ######
  82. ## ## ## ## ## ## ## ##
  83. ## ## ## ## ## ## ## ## ## ## ##
  84. ###### ## ####### ###### ## ## ######
  85. */
  86.  
  87. stock GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
  88. {
  89. new Float:a;
  90. GetPlayerPos(playerid, x, y, a);
  91. GetPlayerFacingAngle(playerid, a);
  92. if (GetPlayerVehicleID(playerid))
  93. {
  94. GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
  95. }
  96. x += (distance * floatsin(-a, degrees));
  97. y += (distance * floatcos(-a, degrees));
  98. }
  99.  
  100. /*
  101. ## ## ####### ####### ## ## ######
  102. ## ## ## ## ## ## ## ## ## ##
  103. ## ## ## ## ## ## ## ## ##
  104. ######### ## ## ## ## ##### ######
  105. ## ## ## ## ## ## ## ## ##
  106. ## ## ## ## ## ## ## ## ## ##
  107. ## ## ####### ####### ## ## ######
  108. */
  109.  
  110.  
  111. public OnPlayerDisconnect(playerid, reason)
  112. {
  113. // Dog Destroy Object
  114. new i = PlayerInfo[playerid][OwnedDog];
  115. DestroyDynamicObject(PlayerDog[i][dogobject]);
  116. PlayerInfo[playerid][DogSpawned] = 0;
  117.  
  118. return 1;
  119. }
  120.  
  121.  
  122. public OnPlayerObjectMoved(playerid, objectid)
  123. {
  124. new i = PlayerInfo[playerid][OwnedDog];
  125. new Float:playerPos[3];
  126. if(PlayerDog[i][dogobject] == objectid)
  127. {
  128. if(BallThrown[playerid] == true)
  129. {
  130. // Player
  131. ThrowBall[playerid] = 1;
  132. BallThrown[playerid] = false;
  133.  
  134. // Object
  135. if(BallObject[ playerid ] != INVALID_OBJECT_ID) {
  136. DestroyObject(BallObject[ playerid ]);
  137. BallObject[ playerid ] = INVALID_OBJECT_ID; }
  138.  
  139. // Move Dog To Owner
  140. GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]);
  141. MoveDynamicObject(PlayerDog[i][dogobject],playerPos[0], playerPos[1]+DOG_DIS_NEAR_PLAYER ,playerPos[2], DOG_SPEED);
  142. }
  143. }
  144. return 1;
  145. }
  146. //============ [ TIMERS ] ============
  147. forward DogStartFollowing(playerid);
  148. public DogStartFollowing(playerid)
  149. {
  150. new i = PlayerInfo[playerid][OwnedDog];
  151. StopDynamicObject(PlayerDog[i][dogobject]);
  152.  
  153. new Float:playerPos[3];
  154. GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]);
  155. MoveDynamicObject(PlayerDog[i][dogobject],playerPos[0], playerPos[1]+DOG_DIS_NEAR_PLAYER ,playerPos[2]-0.5, DOG_SPEED);
  156. return 1;
  157. }
  158.  
  159. /*
  160. ###### ## ## ########
  161. ## ## ### ### ## ##
  162. ## #### #### ## ##
  163. ## ## ### ## ## ##
  164. ## ## ## ## ##
  165. ## ## ## ## ## ##
  166. ###### ## ## ########
  167. */
  168.  
  169. CMD:dog(playerid, params[])
  170. {
  171. new option[15];
  172. if(sscanf(params, "s[15] ", option))
  173. {
  174. SendClientMessage(playerid, COLOR_LIGHTBLUE, "* ______________________ DOG OPTIONS ______________________ *");
  175. SendClientMessage(playerid, -1, " [INFO]: /dog [action].");
  176. SendClientMessage(playerid, -1, " [Actions]: spawn, follow, stopfollow, throwball");
  177. SendClientMessage(playerid, COLOR_LIGHTBLUE, "* __________________________________________________________ *");
  178. return 1;
  179. }
  180.  
  181. if(strcmp(option,"spawn",true) == 0)
  182. {
  183. new i = PlayerInfo[playerid][OwnedDog];
  184. if(PlayerInfo[playerid][OwnedDog] == -1) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Vi ne posjedujete kucnog ljubimca.");
  185. if(PlayerInfo[playerid][DogSpawned] != 0) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Već ste spawnovali vašeg kučnog ljubimca.");
  186.  
  187. // Dog Positions ( Spawning / Getting/Save Pos )
  188. new Float:playerPos[3];
  189. GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]);
  190.  
  191. PlayerDog[i][dPozX] = playerPos[0] + DOG_DIS_NEAR_PLAYER;
  192. PlayerDog[i][dPozY] = playerPos[1];
  193. PlayerDog[i][dPozZ] = playerPos[2] - 0.5;
  194.  
  195. PlayerDog[i][dogobject] = CreateDynamicObject(DOG_OBJECT, PlayerDog[i][dPozX], PlayerDog[i][dPozY], PlayerDog[i][dPozZ], 0,0,0);
  196.  
  197. // Player
  198. PlayerInfo[playerid][DogSpawned] = 1;
  199. Streamer_Update(playerid);
  200. SendClientMessage(playerid, COLOR_YELLOW, "[INFO]: Uspiješno ste spawnovali vašeg kućnog ljubimca, za više opcija (/dog).");
  201.  
  202. }
  203. else if(strcmp(option,"follow",true) == 0)
  204. {
  205. new i = PlayerInfo[playerid][OwnedDog];
  206. if(PlayerInfo[playerid][OwnedDog] == -1) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Vi ne posjedujete kucnog ljubimca.");
  207. if(PlayerInfo[playerid][DogSpawned] < 1) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Vaš kučni ljubimac nije spawnan, ili nije u vašoj blizini.");
  208. if(DogFollowPlayer[playerid] == 1) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Već vas prati vaš pas, da mu naredite da vas prestane pratiti kucajte (/dog stopfollow).");
  209.  
  210. // Dog Positions ( Getting/Spawning )
  211. new Float:playerPos[3];
  212. GetPlayerPos(playerid, playerPos[0], playerPos[1], playerPos[2]);
  213. MoveDynamicObject(PlayerDog[i][dogobject],playerPos[0], playerPos[1]+DOG_DIS_NEAR_PLAYER ,playerPos[2] - 0.5, DOG_SPEED);
  214.  
  215. // Dog Follow Timer( Start = every 1000secs )
  216. DogFollowTimer[playerid] = SetTimer("DogStartFollowing", 1000, true);
  217. DogFollowPlayer[playerid] = 1;
  218. }
  219. else if(strcmp(option,"stopfollow",true) == 0)
  220. {
  221. new i = PlayerInfo[playerid][OwnedDog];
  222. if(PlayerInfo[playerid][OwnedDog] == -1) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Vi ne posjedujete kucnog ljubimca.");
  223. if(PlayerInfo[playerid][DogSpawned] < 1) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Vaš kučni ljubimac nije spawnan, ili nije u vašoj blizini.");
  224. if(DogFollowPlayer[playerid] == 0) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Vaš pas vas ne prati, da vas prati kucajte (/dog follow).");
  225.  
  226. // Dog Follow Timer( Stopping )
  227. KillTimer(DogFollowTimer[playerid]);
  228. StopDynamicObject(PlayerDog[i][dogobject]);
  229. DogFollowPlayer[playerid] = 0;
  230. }
  231. else if(strcmp(option,"throwball",true) == 0)
  232. {
  233. new i = PlayerInfo[playerid][OwnedDog];
  234. if(PlayerInfo[playerid][OwnedDog] == -1) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Vi ne posjedujete kucnog ljubimca.");
  235. if(PlayerInfo[playerid][DogSpawned] < 1) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Vaš kučni ljubimac nije spawnan, ili nije u vašoj blizini.");
  236. if(ThrowBall[playerid] == 0) return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Nemate lopticu za psa kod sebe.");
  237.  
  238. // Dog Follow Timer( Stopping )
  239. KillTimer(DogFollowTimer[playerid]);
  240. StopDynamicObject(PlayerDog[i][dogobject]);
  241. DogFollowPlayer[playerid] = 0;
  242.  
  243. // Throwing Ball
  244. new Float:x, Float:y, Float:z,
  245. Float:x2, Float:y2;
  246.  
  247. GetPlayerPos(playerid, x, y, z);
  248. GetXYInFrontOfPlayer(playerid, x2, y2, BALL_DISTANCE);
  249. GetObjectPos(BallObject[playerid], x, y, z);
  250.  
  251. BallObject[playerid] = CreateObject(BALLOBJECTID, x, y, z, 0,0,0);
  252. MoveObject(BallObject[playerid], x2, y2, z,BALL_SPEED);
  253.  
  254. // Player
  255. ThrowBall[playerid] = 0;
  256. ApplyAnimation(playerid,"GRENADE","WEAPON_throw",4.1,0,1,1,0,1000,1);
  257.  
  258. // Dog Follow Ball
  259. MoveDynamicObject(PlayerDog[i][dogobject],x2, y2, z, 2.00);
  260. BallThrown[playerid] = true;
  261. }
  262. else
  263. {
  264. return SendClientMessage(playerid, COLOR_RED,"[GREŠKA]: Pogrešno ste unijeli ime akcije koju zelite koristiti.");
  265. }
  266. return 1;
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement