Advertisement
Guest User

iVO (iPLEOMAX) (V1)

a guest
Jul 29th, 2011
6,057
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.74 KB | None | 0 0
  1.  
  2. /**********************************************************/
  3. /* iVO: Vehicle Object Creator Tool - by © iPLEOMAX, 2011 */
  4. /* > You have no right to redistribute or claim yours */
  5. /* without my permission. */
  6. /* > Contact: sa-mp user: 'iPLEOMAX' for any requests */
  7. /* related to this FilterScript. */
  8. /* > Do not remove any credits in this script! */
  9. /**********************************************************/
  10.  
  11. #include <a_samp>
  12. #include <zcmd>
  13. #include <sscanf2>
  14.  
  15. #define DIALOG_VODIAL 718
  16.  
  17. #define DRAWDISTANCE_DEFAULT 80
  18. #define SPEEDMULTIPLIER_HIGH 0.20
  19. #define SPEEDMULTIPLIER_LOW 0.01
  20.  
  21. #define MODE_NONE 0
  22. #define MODE_PX 1
  23. #define MODE_PY 2
  24. #define MODE_PZ 3
  25. #define MODE_RX 4
  26. #define MODE_RY 5
  27. #define MODE_RZ 6
  28.  
  29. enum ATTACH_DATA
  30. {
  31. Temp,
  32. bool:Saved,
  33. Timer,
  34. bool:Enabled,
  35. Mode,
  36. ModelID,
  37. ObjectID,
  38. VehicleID,
  39. Float:P[3],
  40. Float:R[3]
  41. };
  42. new VODATA[MAX_PLAYERS][ATTACH_DATA];
  43.  
  44. public OnFilterScriptInit()
  45. {
  46. print("\n iVO (Vehicle Object Attaching FS - Loaded)");
  47. print(" by iPLEOMAX, 2011\n");
  48. return 1;
  49. }
  50.  
  51. public OnFilterScriptExit()
  52. {
  53. for(new i=0; i<MAX_PLAYERS; i++) { KillTimer(VODATA[i][Timer]); }
  54. print("\n iVO (Vehicle Object Attaching FS - EXITED)\n");
  55. return 1;
  56. }
  57.  
  58. public OnPlayerConnect(playerid)
  59. {
  60. VODATA[playerid][Saved] = true;
  61. return true;
  62. }
  63.  
  64. public OnPlayerDisconnect(playerid, reason)
  65. {
  66. KillTimer(VODATA[playerid][Timer]);
  67. VODATA[playerid][Mode] = MODE_NONE;
  68. VODATA[playerid][Temp] = 0;
  69. VODATA[playerid][ModelID] = 0;
  70. VODATA[playerid][ObjectID] = 0;
  71. VODATA[playerid][VehicleID] = 0;
  72. VODATA[playerid][Enabled] = false;
  73. for(new i=0; i<3; i++) { VODATA[playerid][P][i] = 0.0; VODATA[playerid][R][i] = 0.0;}
  74. return true;
  75. }
  76.  
  77. CMD:vattach(playerid, params[])
  78. {
  79. new modelid;
  80. if( sscanf(params, "i", modelid) ) return SendClientMessage(playerid, 0xFF0000FF, "[iVO] Use /VAttach [ MODEL ID ]");
  81.  
  82. if( !VODATA[playerid][Saved] ) {
  83. ShowPlayerDialog(playerid, DIALOG_VODIAL, DIALOG_STYLE_MSGBOX, "iVO - iPLEOMAX", "You did not save your current work.\nAre you sure you want to attach another object?", "New", "Save");
  84. VODATA[playerid][Temp] = modelid;
  85. return true;
  86. }
  87. if( !IsPlayerInAnyVehicle(playerid) ) return SendClientMessage(playerid, 0xFF0000FF, "[iVO] You are not in any vehicle.");
  88. iVO_Create(playerid, modelid);
  89. return true;
  90. }
  91.  
  92. forward iVO_Create(playerid, modelid);
  93. public iVO_Create(playerid, modelid)
  94. {
  95. VODATA[playerid][Timer] = SetTimerEx("OnPlayerUpdateEx", 50, true, "d", playerid);
  96.  
  97. VODATA[playerid][Mode] = MODE_NONE;
  98. VODATA[playerid][Temp] = 0;
  99. VODATA[playerid][VehicleID] = 0;
  100. for(new i=0; i<3; i++) { VODATA[playerid][P][i] = 0.0; VODATA[playerid][R][i] = 0.0;}
  101.  
  102. VODATA[playerid][Enabled] = true;
  103. VODATA[playerid][ModelID] = modelid;
  104. VODATA[playerid][ObjectID] = CreateObject(VODATA[playerid][ModelID], 0, 0, -1000, 0, 0, 0, DRAWDISTANCE_DEFAULT);
  105. VODATA[playerid][VehicleID] = GetPlayerVehicleID(playerid);
  106. AttachObjectToVehicle(VODATA[playerid][ObjectID], VODATA[playerid][VehicleID], 0, 0, 0, 0, 0, 0);
  107.  
  108. new message[64];
  109. format(message, sizeof(message), "[iVO] Object with Model ID [%i] is attached to your vehicle.", modelid);
  110. SendClientMessage(playerid, 0x00FF00FF, message);
  111. VODATA[playerid][Saved] = false;
  112. cmd_vohelp(playerid, "_");
  113. return true;
  114. }
  115.  
  116. CMD:vohelp(playerid, params[])
  117. {
  118. SendClientMessage(playerid, 0x00FF00FF, "[iVO] Use /PX for changing X position offset, /OX for X rotation.");
  119. SendClientMessage(playerid, 0x00FF00FF, "[iVO] Use /PY for changing Y position offset, /OY for Y rotation.");
  120. SendClientMessage(playerid, 0x00FF00FF, "[iVO] Use /PZ for changing Z position offset, /OZ for Z rotation.");
  121. SendClientMessage(playerid, 0x00FF00FF, "[iVO] And LEFT, RIGHT keys to change the value of offset.");
  122. SendClientMessage(playerid, 0x00FF00FF, "[iVO] When you complete editing, use /VSave to create a pawn code in filterscripts directory.");
  123. return true;
  124. }
  125.  
  126. CMD:px(playerid, params[])
  127. {
  128. if(!VODATA[playerid][Enabled]) { SendClientMessage(playerid, 0xFF0000FF, "[iVO] Please Use /VAttach First."); }
  129. else { VODATA[playerid][Mode] = MODE_PX; SendClientMessage(playerid, -1, "[iVO] You are changing the X Offset now."); }
  130. return true;
  131. }
  132. CMD:py(playerid, params[])
  133. {
  134. if(!VODATA[playerid][Enabled]) { SendClientMessage(playerid, 0xFF0000FF, "[iVO] Please Use /VAttach First."); }
  135. else { VODATA[playerid][Mode] = MODE_PY; SendClientMessage(playerid, -1, "[iVO] You are changing the Y Offset now."); }
  136. return true;
  137. }
  138. CMD:pz(playerid, params[])
  139. {
  140. if(!VODATA[playerid][Enabled]) { SendClientMessage(playerid, 0xFF0000FF, "[iVO] Please Use /VAttach First."); }
  141. else { VODATA[playerid][Mode] = MODE_PZ; SendClientMessage(playerid, -1, "[iVO] You are changing the Z Offset now."); }
  142. return true;
  143. }
  144. CMD:rx(playerid, params[])
  145. {
  146. if(!VODATA[playerid][Enabled]) { SendClientMessage(playerid, 0xFF0000FF, "[iVO] Please Use /VAttach First."); }
  147. else { VODATA[playerid][Mode] = MODE_RX; SendClientMessage(playerid, -1, "[iVO] You are changing the X Rotation now."); }
  148. return true;
  149. }
  150. CMD:ry(playerid, params[])
  151. {
  152. if(!VODATA[playerid][Enabled]) { SendClientMessage(playerid, 0xFF0000FF, "[iVO] Please Use /VAttach First."); }
  153. else { VODATA[playerid][Mode] = MODE_RY; SendClientMessage(playerid, -1, "[iVO] You are changing the Y Rotation now."); }
  154. return true;
  155. }
  156. CMD:rz(playerid, params[])
  157. {
  158. if(!VODATA[playerid][Enabled]) { SendClientMessage(playerid, 0xFF0000FF, "[iVO] Please Use /VAttach First."); }
  159. else { VODATA[playerid][Mode] = MODE_RZ; SendClientMessage(playerid, -1, "[iVO] You are changing the Z Rotation now."); }
  160. return true;
  161. }
  162. CMD:vend(playerid, params[])
  163. {
  164. if(!VODATA[playerid][Enabled]) { SendClientMessage(playerid, 0xFF0000FF, "[iVO] There is no on-going edit of Vehicle Object."); }
  165. else { VODATA[playerid][Mode] = MODE_NONE; SendClientMessage(playerid, 0xFF00FFFF, "[iVO] Editing Stopped, You may use /VSave now."); KillTimer(VODATA[playerid][Timer]); }
  166. return true;
  167. }
  168.  
  169. forward OnPlayerUpdateEx(playerid);
  170. public OnPlayerUpdateEx(playerid)
  171. {
  172. if(VODATA[playerid][Mode] == MODE_NONE) return true;
  173.  
  174. new KEYS, UD, LR; GetPlayerKeys( playerid, KEYS, UD, LR );
  175.  
  176. new Float:SPDM = 0.1;
  177.  
  178. if(KEYS == 128) { SPDM = SPEEDMULTIPLIER_HIGH; }
  179. else if (KEYS == 4) { SPDM = SPEEDMULTIPLIER_LOW; }
  180.  
  181. if(LR > 0) { UpdateVObject(playerid, SPDM); }
  182. else if(LR < 0) { UpdateVObject(playerid, -SPDM); }
  183. return 1;
  184. }
  185.  
  186. forward UpdateVObject(playerid, Float:value);
  187. public UpdateVObject(playerid, Float:value)
  188. {
  189. DestroyObject(VODATA[playerid][ObjectID]);
  190. VODATA[playerid][ObjectID] = CreateObject(VODATA[playerid][ModelID], 0, 0, 6, 0, 0, 0, DRAWDISTANCE_DEFAULT);
  191.  
  192. switch(VODATA[playerid][Mode])
  193. {
  194. case MODE_PX: {
  195. VODATA[playerid][P][0] += value;
  196. new string[64];
  197. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~Offset X: ~g~%f",VODATA[playerid][P][0]);
  198. GameTextForPlayer(playerid, string, 10000, 3);
  199. }
  200. case MODE_PY: {
  201. VODATA[playerid][P][1] += value;
  202. new string[64];
  203. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~Offset Y: ~g~%f",VODATA[playerid][P][1]);
  204. GameTextForPlayer(playerid, string, 10000, 3);
  205. }
  206. case MODE_PZ: {
  207. VODATA[playerid][P][2] += value;
  208. new string[64];
  209. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~Offset Z: ~g~%f",VODATA[playerid][P][1]);
  210. GameTextForPlayer(playerid, string, 10000, 3);
  211. }
  212. case MODE_RX: {
  213. if(VODATA[playerid][R][0] + value*10 <= 360.0 && VODATA[playerid][R][0] + value*10 >= 0.0) { VODATA[playerid][R][0] += value*10; }
  214. new string[64];
  215. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~Rotation X: ~g~%f",VODATA[playerid][P][0]);
  216. GameTextForPlayer(playerid, string, 10000, 3);
  217. }
  218. case MODE_RY: {
  219. if(VODATA[playerid][R][1] + value*10 <= 360.0 && VODATA[playerid][R][1] + value*10 >= 0.0) { VODATA[playerid][R][1] += value*10; }
  220. new string[64];
  221. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~Rotation Y: ~g~%f",VODATA[playerid][R][1]);
  222. GameTextForPlayer(playerid, string, 10000, 3);
  223. }
  224. case MODE_RZ: {
  225. if(VODATA[playerid][R][2] + value*10 <= 360.0 && VODATA[playerid][R][2] + value*10 >= 0.0) { VODATA[playerid][R][2] += value*10; }
  226. new string[64];
  227. format(string, sizeof(string), "~n~~n~~n~~n~~n~~n~~n~~n~~n~Rotation Z: ~g~%f",VODATA[playerid][R][2]);
  228. GameTextForPlayer(playerid, string, 10000, 3);
  229. }
  230. }
  231. AttachObjectToVehicle(VODATA[playerid][ObjectID], VODATA[playerid][VehicleID], VODATA[playerid][P][0], VODATA[playerid][P][1], VODATA[playerid][P][2], VODATA[playerid][R][0], VODATA[playerid][R][1], VODATA[playerid][R][2]);
  232. return true;
  233. }
  234.  
  235. CMD:vsave(playerid, params[])
  236. {
  237. if(!VODATA[playerid][Enabled]) return SendClientMessage(playerid, 0xFF0000FF, "[iVO] There is no on-going edit of Vehicle Object.");
  238.  
  239. new filename[] = "/AttachObjectToVehicle_iVO.pwn";
  240. if(!fexist(filename)) {
  241. new File:ivo = fopen(filename, io_write);
  242. fwrite(ivo, "//Your created codes:");
  243. fclose(ivo);
  244. }
  245. new comment[64], codeline[256];
  246. if(sscanf(params, "s[64]", comment)) { comment = "iVO"; SendClientMessage(playerid, 0x00FF00FF, "[iVO] You can also use /save [comment]."); }
  247.  
  248. new File:ivo = fopen(filename, io_append);
  249. format(codeline, sizeof(codeline), "\r\n\r\nnew object = CreateObject( %i,0,0,0,0,0,0,80 ); // <%s>",VODATA[playerid][ModelID], comment);
  250. fwrite(ivo, codeline);
  251. format(codeline, sizeof(codeline), "\r\nAttachObjectToVehicle( object, GetPlayerVehicleID(playerid), %f, %f, %f, %f, %f, %f ); // <%s>",
  252. VODATA[playerid][P][0],
  253. VODATA[playerid][P][1],
  254. VODATA[playerid][P][2],
  255. VODATA[playerid][R][0],
  256. VODATA[playerid][R][1],
  257. VODATA[playerid][R][2],
  258. comment);
  259. fwrite(ivo, codeline);
  260. fclose(ivo);
  261. SendClientMessage(playerid, 0x00FF00FF, "Success! Your vehicle object is saved. (AttachObjectToVehicle_iVO.pwn)");
  262. VODATA[playerid][Saved] = true;
  263. KillTimer(VODATA[playerid][Timer]);
  264. return true;
  265. }
  266.  
  267. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  268. {
  269. if(dialogid == DIALOG_VODIAL)
  270. {
  271. if(!response) return cmd_vsave(playerid, "iVO");
  272. iVO_Create(playerid, VODATA[playerid][Temp]);
  273. }
  274. return true;
  275. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement