Advertisement
Guest User

Caravan by Mogly1

a guest
Jan 2nd, 2019
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.83 KB | None | 0 0
  1. #define FILTERSCRIPT
  2.  
  3. #include <a_samp>
  4. #include <ocmd>
  5. #include <sscanf2>
  6.  
  7. #define MAX_CARAVANS 100
  8.  
  9. enum Caravan_Enum
  10. {
  11. id,
  12. obj,
  13. type,
  14. Float:obx,
  15. Float:oby,
  16. Float:obz,
  17. Float:carrot,
  18. build
  19. };
  20. new Caravan[MAX_CARAVANS][Caravan_Enum];
  21.  
  22. ocmd:trailer(playerid,params[])//Hängt die angegeben Id an das Fahrzeug wo man drinne sitzt
  23. {
  24. new trailerid, vehicleid=GetPlayerVehicleID(playerid);
  25. if(sscanf(params, "d",trailerid)) return SendClientMessage(playerid,-1, "Verwendung: /trailer [Id]");
  26. if(IsTrailerAttachedToVehicle(vehicleid))
  27. {
  28. DetachTrailerFromVehicle(vehicleid);
  29. }
  30. else
  31. {
  32. AttachTrailerToVehicle(trailerid, vehicleid);
  33. }
  34. return 1;
  35. }
  36.  
  37. ocmd:delct(playerid,params[])
  38. {
  39. new Float:Pos[3];
  40. for(new i=0;i<MAX_CARAVANS;i++)
  41. {
  42. if(Caravan[i][id]==0)continue;
  43. if(Caravan[i][build]==0)
  44. {
  45. GetVehiclePos(Caravan[i][id],Pos[0],Pos[1],Pos[2]);
  46. if(IsPlayerInRangeOfPoint(playerid,5,Pos[0],Pos[1],Pos[2]))
  47. {
  48. DeleteCaravan(i);
  49. }
  50. }
  51. else
  52. {
  53. if(IsPlayerInRangeOfPoint(playerid,5,Caravan[i][obx],Caravan[i][oby],Caravan[i][obz]))
  54. {
  55. DeleteCaravan(i);
  56. }
  57. }
  58. }
  59. return 1;
  60. }
  61.  
  62. ocmd:ctb(playerid,params[])
  63. {
  64. new Float:VehPos[4];
  65. GetPlayerPos(playerid, VehPos[0],VehPos[1],VehPos[2]);
  66. GetPlayerFacingAngle(playerid, VehPos[3]);
  67. new i = GetFreeCaravan();
  68. if(i == -1)return SendClientMessage(playerid,-1,"Keine Caravans mehr möglich");
  69. CreateBigHoodie(i,VehPos[0],VehPos[1],VehPos[2],VehPos[3]);
  70. return 1;
  71. }
  72. ocmd:cts(playerid,params[])
  73. {
  74. new Float:VehPos[4];
  75. GetPlayerPos(playerid, VehPos[0],VehPos[1],VehPos[2]);
  76. GetPlayerFacingAngle(playerid, VehPos[3]);
  77. new i = GetFreeCaravan();
  78. if(i == -1)return SendClientMessage(playerid,-1,"Keine Caravans mehr möglich");
  79. CreateSmallHodie(i,VehPos[0],VehPos[1],VehPos[2],VehPos[3]);
  80. return 1;
  81. }
  82.  
  83. ocmd:e(playerid,params[])
  84. {
  85. new Float:Pos[3];
  86. if(GetPlayerVirtualWorld(playerid)==0)
  87. {
  88. for(new i=0;i<MAX_CARAVANS;i++)
  89. {
  90. if(Caravan[i][id]==0)continue;
  91. if(Caravan[i][build]==0)
  92. {
  93. GetVehiclePos(Caravan[i][id],Pos[0],Pos[1],Pos[2]);
  94. if(IsPlayerInRangeOfPoint(playerid,5,Pos[0],Pos[1],Pos[2]))
  95. {
  96. GoInCaravan(playerid,i);
  97. }
  98. }
  99. else
  100. {
  101. if(IsPlayerInRangeOfPoint(playerid,5,Caravan[i][obx],Caravan[i][oby],Caravan[i][obz]))
  102. {
  103. GoInCaravan(playerid,i);
  104. }
  105. }
  106. }
  107. }
  108. else
  109. {
  110. if(IsPlayerInRangeOfPoint(playerid,3,271.884979,306.631988,999.148437) && !(GetPVarFloat(playerid,"Pos_X")==0 && GetPVarFloat(playerid,"Pos_Y")==0 && GetPVarFloat(playerid,"Pos_Z")==0))
  111. {
  112. SetPlayerPos(playerid,GetPVarFloat(playerid,"Pos_X"),GetPVarFloat(playerid,"Pos_Y"),GetPVarFloat(playerid,"Pos_Z"));
  113. SetPlayerFacingAngle(playerid,GetPVarFloat(playerid,"Pos_R"));
  114. SetPlayerVirtualWorld(playerid,0);
  115. SetPlayerInterior(playerid,0);
  116. SetPVarFloat(playerid,"Pos_X",0);
  117. SetPVarFloat(playerid,"Pos_Y",0);
  118. SetPVarFloat(playerid,"Pos_Z",0);
  119. SetPVarFloat(playerid,"Pos_R",0);
  120. }
  121. }
  122. return 1;
  123. }
  124.  
  125. ocmd:build(playerid,params[])
  126. {
  127. new Float:Pos[3];
  128. for(new i=0;i<MAX_CARAVANS;i++)
  129. {
  130. if(Caravan[i][id]==0)continue;
  131. if(Caravan[i][build]==0)
  132. {
  133. GetVehiclePos(Caravan[i][id],Pos[0],Pos[1],Pos[2]);
  134. if(IsPlayerInRangeOfPoint(playerid,5,Pos[0],Pos[1],Pos[2]))
  135. {
  136. new Float:rot;
  137. GetVehicleZAngle(Caravan[i][id],rot);
  138. DestroyObject(Caravan[i][obj]);
  139. DestroyVehicle(Caravan[i][id]);
  140. new objectid;
  141. if(Caravan[i][type]==1)
  142. {
  143. objectid=3174;
  144. }
  145. else if(Caravan[i][type]==2)
  146. {
  147. objectid=3175;
  148. }
  149. else
  150. {
  151. return SendClientMessage(playerid,-1,"Error: fehler beim erstellen des Caravans");
  152. }
  153. Caravan[i][obj]=CreateObject(objectid, Pos[0],Pos[1],Pos[2], 0.0, 0.0, 0.0);
  154. EditObject(playerid, Caravan[i][obj]);
  155. Caravan[i][build]=1;
  156. Caravan[i][carrot]=rot;
  157. SetPVarInt(playerid,"Editing",1);
  158. SetPVarInt(playerid,"Obj",i);
  159. SetPVarFloat(playerid,"Obj_x",Pos[0]);
  160. SetPVarFloat(playerid,"Obj_y",Pos[1]);
  161. SetPVarFloat(playerid,"Obj_z",Pos[2]);
  162. break;
  163. }
  164. }
  165. else
  166. {
  167. if(IsPlayerInRangeOfPoint(playerid,5,Caravan[i][obx],Caravan[i][oby],Caravan[i][obz]))
  168. {
  169. DestroyObject(Caravan[i][obj]);
  170. Caravan[i][build]=0;
  171. if(Caravan[i][type]==1)
  172. {
  173. CreateSmallHodie(i,Caravan[i][obx],Caravan[i][oby],Caravan[i][obz],Caravan[i][carrot]);
  174. }
  175. if(Caravan[i][type]==2)
  176. {
  177. CreateBigHoodie(i,Caravan[i][obx],Caravan[i][oby],Caravan[i][obz],Caravan[i][carrot]);
  178. }
  179. break;
  180. }
  181. }
  182. }
  183. return 1;
  184. }
  185.  
  186. stock DeleteCaravan(i)
  187. {
  188. DestroyObject(Caravan[i][obj]);
  189. if(Caravan[i][build]==0)
  190. {
  191. DestroyVehicle(Caravan[i][id]);
  192. }
  193. Caravan[i][id]=0;
  194. Caravan[i][obj]=-1;
  195. Caravan[i][type]=1;
  196. Caravan[i][obx]=0;
  197. Caravan[i][oby]=0;
  198. Caravan[i][obz]=0;
  199. Caravan[i][carrot]=0;
  200. Caravan[i][build]=0;
  201. return 1;
  202. }
  203.  
  204. stock CreateBigHoodie(i,Float:x,Float:y,Float:z,Float:r)
  205. {
  206. Caravan[i][id] = CreateVehicle(611,x,y,z+1,r,0,0,-1);
  207. Caravan[i][obj] = CreateObject(3175, 0,0,0-20, 0.0, 0.0, 0.0);
  208. Caravan[i][type] = 2;
  209. AttachObjectToVehicle(Caravan[i][obj],Caravan[i][id],0.000000,-2.5,-0.8,0.00000,0.000000,0.000000); //Trailer
  210. return 1;
  211. }
  212.  
  213. stock CreateSmallHodie(i,Float:x,Float:y,Float:z,Float:r)
  214. {
  215. Caravan[i][id] = CreateVehicle(611,x,y,z+1,r,0,0,-1);
  216. Caravan[i][obj] = CreateObject(3174, 0,0,0-20, 0.0, 0.0, 0.0);
  217. Caravan[i][type] = 1;
  218. AttachObjectToVehicle(Caravan[i][obj],Caravan[i][id],0.000000,-1.399999,-0.7,0.000000,0.000000,0.000000); //trailersaml
  219. return 1;
  220. }
  221.  
  222. stock GoInCaravan(playerid,i)
  223. {
  224. new Float:x, Float:y, Float:z, Float:r;
  225. GetPlayerPos(playerid,x,y,z);
  226. GetPlayerFacingAngle(playerid,r);
  227. SetPVarFloat(playerid,"Pos_X",x);
  228. SetPVarFloat(playerid,"Pos_Y",y);
  229. SetPVarFloat(playerid,"Pos_Z",z);
  230. SetPVarFloat(playerid,"Pos_R",r);
  231. SetPlayerPos(playerid,271.884979,306.631988,999.148437);
  232. SetPlayerInterior(playerid,2);
  233. SetPlayerVirtualWorld(playerid,i+1);
  234. return 1;
  235. }
  236.  
  237. stock GetFreeCaravan()
  238. {
  239. for(new i=0;i<MAX_CARAVANS;i++)
  240. {
  241. if(Caravan[i][id]==0)
  242. {
  243. return i;
  244. }
  245. }
  246. return -1;
  247. }
  248.  
  249. public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
  250. {
  251. new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ;
  252. GetObjectPos(objectid, oldX, oldY, oldZ);
  253. GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
  254. if(!playerobject) // If this is a global object, sync the position for other players
  255. {
  256. if(!IsValidObject(objectid)) return 1;
  257. SetObjectPos(objectid, fX, fY, fZ);
  258. SetObjectRot(objectid, fRotX, fRotY, fRotZ);
  259. }
  260.  
  261. if(response == EDIT_RESPONSE_FINAL)
  262. {
  263. if(GetPVarInt(playerid,"Editing")==1)
  264. {
  265. new Float:x=GetPVarFloat(playerid,"Obj_x"),
  266. Float:y=GetPVarFloat(playerid,"Obj_y"),
  267. Float:z=GetPVarFloat(playerid,"Obj_z");
  268. if((x+5 > fX && fX > x-5) && (y+5 > fY && fY > y-5) && (z+5 > fZ && fZ > z-5))
  269. {
  270. Caravan[GetPVarInt(playerid,"Obj")][obx]=fX;
  271. Caravan[GetPVarInt(playerid,"Obj")][oby]=fY;
  272. Caravan[GetPVarInt(playerid,"Obj")][obz]=fZ;
  273. }
  274. else
  275. {
  276. new i = GetPVarInt(playerid,"Obj");
  277. DestroyObject(Caravan[i][obj]);
  278. if(Caravan[i][type]==1)
  279. {
  280. CreateSmallHodie(i,x,y,z,Caravan[i][carrot]);
  281. Caravan[i][build]=0;
  282. }
  283. if(Caravan[i][type]==2)
  284. {
  285. CreateBigHoodie(i,x,y,z,Caravan[i][carrot]);
  286. Caravan[i][build]=0;
  287. }
  288. return SendClientMessage(playerid,-1,"Du kannst den wagen nicht so weit vom Ausgangspunkt verschieben!");
  289. }
  290. }
  291. }
  292.  
  293. if(response == EDIT_RESPONSE_CANCEL)
  294. {
  295. //The player cancelled, so put the object back to it's old position
  296. if(!playerobject) //Object is not a playerobject
  297. {
  298. SetObjectPos(objectid, oldX, oldY, oldZ);
  299. SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
  300. }
  301. else
  302. {
  303. SetPlayerObjectPos(playerid, objectid, oldX, oldY, oldZ);
  304. SetPlayerObjectRot(playerid, objectid, oldRotX, oldRotY, oldRotZ);
  305. }
  306. }
  307. return 1;
  308. }
  309.  
  310. public OnFilterScriptInit()
  311. {
  312. print("\n--------------------------------------");
  313. print("Caravan by Mogly1 loaded");
  314. print("--------------------------------------\n");
  315.  
  316. for(new i=0;i<MAX_CARAVANS;i++)
  317. {
  318. Caravan[i][id]=0;
  319. Caravan[i][obj]=-1;
  320. Caravan[i][type]=1;
  321. Caravan[i][obx]=0;
  322. Caravan[i][oby]=0;
  323. Caravan[i][obz]=0;
  324. Caravan[i][carrot]=0;
  325. Caravan[i][build]=0;
  326. }
  327.  
  328. return 1;
  329. }
  330.  
  331. public OnFilterScriptExit()
  332. {
  333. for(new i=0;i<MAX_CARAVANS;i++)
  334. {
  335. if(Caravan[i][id]==0)continue;
  336. DeleteCaravan(i);
  337. }
  338. return 1;
  339. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement