Guest User

Magical Carpet + Editable Object

a guest
Jun 23rd, 2016
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.34 KB | None | 0 0
  1. //https://youtu.be/bly8gLhjAY8
  2. //============================ Includes =======================================//
  3. #include <a_samp>
  4. #include <sscanf2>
  5. #include <zcmd>
  6. #include <foreach>
  7. //============================== Defines ======================================//
  8. #define SCM SendClientMessage
  9. #define SCMToAll SendClientMessageToAll
  10. //============================ Varaibles ======================================//
  11. new MAGIC_CARPET[MAX_PLAYERS];
  12. new MC[MAX_PLAYERS];
  13. new Float:GX, Float:GY, Float:GZ;
  14. new Float:CFP[MAX_PLAYERS][3];
  15. new INVITED_PLAYERID[MAX_PLAYERS];
  16. new PLAYER_MC_ID[MAX_PLAYERS];
  17. new MC_COUNT;
  18. new OBJECT_ID = 19129;
  19.  
  20. public OnFilterScriptInit()
  21. {
  22. MC_COUNT = 0;
  23. print("\n--------------------------------------");
  24. print(" MAGIC_CARPET LOADED ");
  25. print("--------------------------------------\n");
  26. return 1;
  27. }
  28.  
  29. public OnFilterScriptExit()
  30. {
  31. MC_COUNT = 0;
  32. return 1;
  33. }
  34.  
  35. //=============================== CommanDs =====================================//
  36. CMD:mchelp(playerid)
  37. {
  38. SCM(playerid,-1,"============== MAGIC CARPET =============");
  39. SCM(playerid,-1,"/mo to change objectid.");
  40. SCM(playerid,-1,"/mc to enable & disable magic card.");
  41. SCM(playerid,-1,"/mmc to move magic card.");
  42. SCM(playerid,-1,"/mch to set magic card height.");
  43. SCM(playerid,-1,"/mcs to set the speed of magic carpet.");
  44. SCM(playerid,-1,"/imc to invite some to magic carpet.");
  45. SCM(playerid,-1,"/lmc to leave magic carpet carpet.");
  46. SCM(playerid,-1,"============== MAGIC CARPET =============");
  47. return 1;
  48. }
  49.  
  50. CMD:mc(playerid)
  51. {
  52. switch(MAGIC_CARPET[playerid])
  53. {
  54. case 0:
  55. {
  56. GetPlayerPos(playerid, GX, GY, GZ);
  57. MC[playerid] = CreateObject(OBJECT_ID, GX, GY, GZ-0.97, 0, 0, 4);
  58. MC_COUNT++;
  59. PLAYER_MC_ID[playerid] = MC_COUNT;
  60. SetPlayerPos(playerid, GX, GY, GZ+42);
  61. SetObjectPos(MC[playerid], GX, GY, GZ+40);
  62. SCM(playerid,-1, "You've successfully Enabled magic carpet! Use /mc to disable it.");
  63. SCM(playerid,-1, "Press Esc and chose Position on map to set the destination of your Magic Carpet.");
  64. SCM(playerid,-1, "Use /mmc cmd to start the magic carpet.");
  65. TogglePlayerControllable(playerid, 0);
  66. MAGIC_CARPET[playerid] = 1;
  67. }
  68. case 1:
  69. {
  70. TogglePlayerControllable(playerid, 1);
  71. DestroyObject(MC[playerid]);
  72. MC_COUNT--;
  73. PLAYER_MC_ID[playerid] = -1;
  74. SCM(playerid,-1, "You've successfully Disabled magic carpet! Use /mc to enable it.");
  75. MAGIC_CARPET[playerid] = 0;
  76. }
  77. }
  78. PlayerPlaySound(playerid, 1130, 0.0, 0.0, 0.0);
  79. return 1;
  80. }
  81.  
  82. CMD:mo(playerid,params[])
  83. {
  84. new string[128],ID;
  85. if(sscanf(params,"i",ID))return SCM(playerid,-1,"use /mo [Object ID]");
  86. OBJECT_ID = ID;
  87. format(string,sizeof(string),"You successfully Updated object id to %d",OBJECT_ID);
  88. SCM(playerid,-1,string);
  89. SCM(playerid,-1, "Please use /mc command again to update the object Thanks.");
  90. return 1;
  91. }
  92.  
  93. CMD:smc(playerid)
  94. {
  95. if(!MAGIC_CARPET[playerid])return SCM(playerid,-1,"You don't have magic carpet at moment.");
  96. StopObject(MC[playerid]);
  97. SCM(playerid,-1,"You've successfully stop the Magic Carpet.");
  98. return 1;
  99. }
  100.  
  101. CMD:mmc(playerid)
  102. {
  103. if(!MAGIC_CARPET[playerid])return SCM(playerid,-1,"You don't have magic carpet at moment.");
  104. if( CFP[playerid][0] == 0.0 && CFP[playerid][1] == 0.0 && CFP[playerid][2] == 0.0 )return SCM(playerid,-1,"You need to select postion on map.");
  105. MoveObject(MC[playerid], CFP[playerid][0], CFP[playerid][1], CFP[playerid][2], 5.00);
  106. TogglePlayerControllable(playerid, 1);
  107. foreach(Player,i)
  108. {
  109. if(i != playerid && PLAYER_MC_ID[i] == PLAYER_MC_ID[playerid] && INVITED_PLAYERID[i])
  110. {
  111. TogglePlayerControllable(i, 1);
  112. }
  113. }
  114. SCM(playerid,-1,"You've successfully move the Magic Carpet.");
  115. return 1;
  116. }
  117.  
  118. CMD:mch(playerid,params[])
  119. {
  120. new Height;
  121. if(!MAGIC_CARPET[playerid])return SCM(playerid,-1,"You don't have magic carpet at moment.");
  122. if(sscanf(params,"i",Height))return SCM(playerid,-1,"/mch [Height]");
  123. StopObject(MC[playerid]);
  124. GetPlayerPos(playerid, GX, GY, GZ);
  125. TogglePlayerControllable(playerid, 0);
  126. SetPlayerPos(playerid, GX, GY, GZ+Height);
  127. SetObjectPos(MC[playerid], GX, GY, GZ+Height);
  128. foreach(Player,i)
  129. {
  130. if(i != playerid && PLAYER_MC_ID[i] == PLAYER_MC_ID[playerid] && INVITED_PLAYERID[i])
  131. {
  132. GetPlayerPos(i, GX, GY, GZ);
  133. TogglePlayerControllable(i, 0);
  134. SetPlayerPos(i, GX, GY, GZ+Height);
  135. }
  136. }
  137. SCM(playerid,-1, "You've successfully set the magic carpet height! Use /mmc to move it.");
  138. return 1;
  139. }
  140.  
  141. CMD:imc(playerid,params[])
  142. {
  143. new ID;
  144. if(!MAGIC_CARPET[playerid])return SCM(playerid,-1,"You don't have magic carpet at moment.");
  145. if(sscanf(params,"i",ID))return SCM(playerid,-1,"/imc [playerid]");
  146. if(MAGIC_CARPET[ID])return SCM(playerid,-1,"that player already using magic carpet.");
  147. StopObject(MC[playerid]);
  148. GetPlayerPos(playerid, GX, GY, GZ);
  149. TogglePlayerControllable(ID, 0);
  150. SetPlayerPos(ID, GX, GY, GZ+3);
  151. SCM(ID,-1, "You're successfully teleported to the Magic Carpet.");
  152. SCM(playerid,-1, "You're successfully teleported player to the Magic Carpet.");
  153. PLAYER_MC_ID[ID] = PLAYER_MC_ID[playerid];
  154. INVITED_PLAYERID[ID] = 1;
  155. SCM(playerid,-1, "To leave the magic Carpet use /lmc.");
  156. return 1;
  157. }
  158.  
  159. CMD:lmc(playerid,params[])
  160. {
  161. if(!INVITED_PLAYERID[playerid])return SCM(playerid,-1,"You're not invited to any magic carpet.");
  162. if(MAGIC_CARPET[playerid])return SCM(playerid,-1,"You're not allowed to leave magic carpet.");
  163. SpawnPlayer(playerid);
  164. INVITED_PLAYERID[playerid] = 0;
  165. PLAYER_MC_ID[playerid] = -1;
  166. MC_COUNT--;
  167. SCM(playerid,-1, "You're successfully left the Magic Carpet.");
  168. return 1;
  169. }
  170.  
  171. CMD:mcs(playerid,params[])
  172. {
  173. new speed;
  174. if(!MAGIC_CARPET[playerid])return SCM(playerid,-1,"You don't have magic carpet at moment.");
  175. if(sscanf(params,"i",speed))return SCM(playerid,-1,"/mcs [Speed]");
  176. if( 0 < speed > 21)return SCM(playerid,-1,"Speed must be in between 1 to 20");
  177. StopObject(MC[playerid]);
  178. MoveObject(MC[playerid], CFP[playerid][0], CFP[playerid][1], CFP[playerid][2], speed);
  179. SCM(playerid,-1, "You've successfully set the magic carpet speed! Use /mmc to move it.");
  180. return 1;
  181. }
  182.  
  183. //===================================== Callbacks ==============================//
  184. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  185. {
  186. if(MAGIC_CARPET[playerid])
  187. {
  188. CFP[playerid][0] = fX , CFP[playerid][1] = fY , CFP[playerid][2] = fZ;
  189. SetPlayerRaceCheckpoint(playerid,1,CFP[playerid][0],CFP[playerid][1],CFP[playerid][2],0.0,0.0,0.0,10.0);
  190. SCM(playerid,-1, "You've successfully set the destination of magic carpet! Use /mmc to move it.");
  191. }
  192. return 1;
  193. }
  194.  
  195. public OnPlayerEnterRaceCheckpoint(playerid)
  196. {
  197. if(MAGIC_CARPET[playerid])
  198. {
  199. SCM(playerid,-1,"[Magic Carpet]: You're successfully reached at your selected destination.");
  200. DisablePlayerRaceCheckpoint(playerid);
  201. }
  202. return 1;
  203. }
  204.  
  205. public OnPlayerConnect(playerid)
  206. {
  207. INVITED_PLAYERID[playerid] = 0;
  208. MAGIC_CARPET[playerid] = 0;
  209. return 1;
  210. }
  211.  
  212. public OnPlayerDisconnect(playerid, reason)
  213. {
  214. if(MAGIC_CARPET[playerid])
  215. {
  216. foreach(Player,i)
  217. {
  218. if(i != playerid && PLAYER_MC_ID[i] == PLAYER_MC_ID[playerid] && INVITED_PLAYERID[i])
  219. {
  220. INVITED_PLAYERID[i] = 0;
  221. PLAYER_MC_ID[i] = -1;
  222. }
  223. }
  224. DestroyObject(MC[playerid]);
  225. MAGIC_CARPET[playerid] = 0;
  226. MC_COUNT--;
  227. }
  228. return 1;
  229. }
Add Comment
Please, Sign In to add comment