Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2014
426
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.71 KB | None | 0 0
  1. //Player Attachments system by Excel
  2. //==============================================================================
  3. #include <a_samp>
  4. #include <mSelection>
  5. #include <sscanf2>
  6. #include <dini>
  7. #include <zcmd>
  8. //==============================================================================
  9. #define DIALOG_ATTACH_INDEX 13500
  10. #define DIALOG_ATTACH_INDEX_SELECTION DIALOG_ATTACH_INDEX+1
  11. #define DIALOG_ATTACH_EDITREPLACE DIALOG_ATTACH_INDEX+2
  12. #define DIALOG_ATTACH_MODEL_SELECTION DIALOG_ATTACH_INDEX+3
  13. #define DIALOG_ATTACH_BONE_SELECTION DIALOG_ATTACH_INDEX+4
  14. #define DIALOG_ATTACH_OBJECT_SELECTION DIALOG_ATTACH_INDEX+5
  15. #define DIALOG_ATTACH_OBJECT2_SELECTION DIALOG_ATTACH_INDEX+6
  16. //==============================================================================
  17. #define MAX_OSLOTS MAX_PLAYER_ATTACHED_OBJECTS
  18. //==============================================================================
  19. #define COL_WHITE "{FFFFFF}"
  20. #define COL_BLACK "{0E0101}"
  21. #define COL_GREY "{C3C3C3}"
  22. #define COL_GREEN "{6EF83C}"
  23. #define COL_RED "{F81414}"
  24. #define COL_YELLOW "{F3FF02}"
  25. #define COL_ORANGE "{FFAF00}"
  26. #define COL_LIME "{B7FF00}"
  27. #define COL_CYAN "{00FFEE}"
  28. #define COL_BLUE "{0049FF}"
  29. #define COL_MAGENTA "{F300FF}"
  30. #define COL_VIOLET "{B700FF}"
  31. #define COL_PINK "{FF00EA}"
  32. #define COL_MARONE "{A90202}"
  33. //==============================================================================
  34. new AttachmentObjectsList[] = {
  35. 18632,
  36. 18633,
  37. 18634,
  38. 18635,
  39. 18636,
  40. 18637,
  41. 18638,
  42. 18639,
  43. 18640,
  44. 18975,
  45. 19136,
  46. 19274,
  47. 18641,
  48. 18642,
  49. 18643,
  50. 18644,
  51. 18645,
  52. 18865,
  53. 18866,
  54. 18867,
  55. 18868,
  56. 18869,
  57. 18870,
  58. 18871,
  59. 18872,
  60. 18873,
  61. 18874,
  62. 18875,
  63. 18890,
  64. 18891,
  65. 18892,
  66. 18893,
  67. 18894,
  68. 18895,
  69. 18896,
  70. 18897,
  71. 18898,
  72. 18899,
  73. 18900,
  74. 18901,
  75. 18902,
  76. 18903,
  77. 18904,
  78. 18905,
  79. 18906,
  80. 18907,
  81. 18908,
  82. 18909,
  83. 18910,
  84. 18911,
  85. 18912,
  86. 18913,
  87. 18914,
  88. 18915,
  89. 18916,
  90. 18917,
  91. 18918,
  92. 18919,
  93. 18920,
  94. 18921,
  95. 18922,
  96. 18923,
  97. 18924,
  98. 18925,
  99. 18926,
  100. 18927,
  101. 18928,
  102. 18929,
  103. 18930,
  104. 18931,
  105. 18932,
  106. 18933,
  107. 18934,
  108. 18935,
  109. 18936,
  110. 18937,
  111. 18938,
  112. 18939,
  113. 18940,
  114. 18941,
  115. 18942,
  116. 18943,
  117. 18944,
  118. 18945,
  119. 18946,
  120. 18947,
  121. 18948,
  122. 18949,
  123. 18950,
  124. 18951,
  125. 18952,
  126. 18953,
  127. 18954,
  128. 18955,
  129. 18956,
  130. 18957,
  131. 18958,
  132. 18959,
  133. 18960,
  134. 18961,
  135. 18962,
  136. 18963,
  137. 18964,
  138. 18965,
  139. 18966,
  140. 18967,
  141. 18968,
  142. 18969,
  143. 18970,
  144. 18971,
  145. 18972,
  146. 18973,
  147. 18974,
  148. 18976,
  149. 18977,
  150. 18978,
  151. 18979,
  152. 19006,
  153. 19007,
  154. 19008,
  155. 19009,
  156. 19010,
  157. 19011,
  158. 19012,
  159. 19013,
  160. 19014,
  161. 19015,
  162. 19016,
  163. 19017,
  164. 19018,
  165. 19019,
  166. 19020,
  167. 19021,
  168. 19022,
  169. 19023,
  170. 19024,
  171. 19025,
  172. 19026,
  173. 19027,
  174. 19028,
  175. 19029,
  176. 19030,
  177. 19031,
  178. 19032,
  179. 19033,
  180. 19034,
  181. 19035,
  182. 19036,
  183. 19037,
  184. 19038,
  185. 19039,
  186. 19040,
  187. 19041,
  188. 19042,
  189. 19043,
  190. 19044,
  191. 19045,
  192. 19046,
  193. 19047,
  194. 19048,
  195. 19049,
  196. 19050,
  197. 19051,
  198. 19052,
  199. 19053,
  200. 19085,
  201. 19086,
  202. 19090,
  203. 19091,
  204. 19092,
  205. 19093,
  206. 19094,
  207. 19095,
  208. 19096,
  209. 19097,
  210. 19098,
  211. 19099,
  212. 19100,
  213. 19101,
  214. 19102,
  215. 19103,
  216. 19104,
  217. 19105,
  218. 19106,
  219. 19107,
  220. 19108,
  221. 19109,
  222. 19110,
  223. 19111,
  224. 19112,
  225. 19113,
  226. 19114,
  227. 19115,
  228. 19116,
  229. 19117,
  230. 19118,
  231. 19119,
  232. 19120,
  233. 19137,
  234. 19138,
  235. 19139,
  236. 19140,
  237. 19141,
  238. 19142,
  239. 19160,
  240. 19161,
  241. 19162,
  242. 19163,
  243. 19317,
  244. 19318,
  245. 19319,
  246. 19330,
  247. 19331,
  248. 19346,
  249. 19347,
  250. 19348,
  251. 19349,
  252. 19350,
  253. 19351,
  254. 19352,
  255. 19487,
  256. 19488,
  257. 19513,
  258. 19515,
  259. 331,
  260. 333,
  261. 334,
  262. 335,
  263. 336,
  264. 337,
  265. 338,
  266. 339,
  267. 341,
  268. 321,
  269. 322,
  270. 323,
  271. 324,
  272. 325,
  273. 326,
  274. 343,
  275. 346,
  276. 347,
  277. 348,
  278. 349,
  279. 350,
  280. 351,
  281. 352,
  282. 353,
  283. 355,
  284. 356,
  285. 372,
  286. 357,
  287. 358,
  288. 361,
  289. 363,
  290. 364,
  291. 365,
  292. 366,
  293. 367,
  294. 368,
  295. 369,
  296. 371
  297. };
  298. //==============================================================================
  299. new AttachmentBones[][24] = {
  300. {"Spine"},
  301. {"Head"},
  302. {"Left upper arm"},
  303. {"Right upper arm"},
  304. {"Left hand"},
  305. {"Right hand"},
  306. {"Left thigh"},
  307. {"Right thigh"},
  308. {"Left foot"},
  309. {"Right foot"},
  310. {"Right calf"},
  311. {"Left calf"},
  312. {"Left forearm"},
  313. {"Right forearm"},
  314. {"Left clavicle"},
  315. {"Right clavicle"},
  316. {"Neck"},
  317. {"Jaw"}
  318. };
  319. //==============================================================================
  320. CMD:clothes(playerid,params[])
  321. {
  322. new string[128];
  323. new dialog[500];
  324. for(new x;x<MAX_OSLOTS;x++)
  325. {
  326. if(IsPlayerAttachedObjectSlotUsed(playerid, x))
  327. { format(string, sizeof(string), ""COL_WHITE"Slot:%d :: "COL_GREEN"Used Slot\n", x); }
  328. else format(string, sizeof(string), ""COL_WHITE"Slot:%d\n", x);
  329. strcat(dialog,string);
  330. }
  331. ShowPlayerDialog(playerid, DIALOG_ATTACH_INDEX_SELECTION, DIALOG_STYLE_LIST,"Player Clothes: (Select Slot)", dialog, "Select", "Close(X)");
  332. return 1;
  333. }
  334. //==============================================================================
  335. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  336. {
  337. switch(dialogid)
  338. {
  339. case DIALOG_ATTACH_INDEX_SELECTION:
  340. {
  341. if(response)
  342. {
  343. if(IsPlayerAttachedObjectSlotUsed(playerid, listitem))
  344. {
  345. ShowPlayerDialog(playerid, DIALOG_ATTACH_EDITREPLACE, DIALOG_STYLE_MSGBOX, \
  346. "Player Clothes: (Delete/Edit)", ""COL_WHITE"Do you wish to edit the attachment in that slot, or delete it?", "Edit(!)", "Delete(X)");
  347. }
  348. else
  349. {
  350. ShowPlayerDialog(playerid,DIALOG_ATTACH_OBJECT_SELECTION,DIALOG_STYLE_LIST,"Player Clothes: (Select Object Path)","Path:1 :: "COL_GREY"Server Objects Menu","Next(>>)","Back(<<)");
  351. }
  352. SetPVarInt(playerid, "AttachmentIndexSel", listitem);
  353. }
  354. return 1;
  355. }
  356. case DIALOG_ATTACH_OBJECT_SELECTION:
  357. {
  358. if(!response)
  359. {
  360. cmd_clothes(playerid,"");
  361. }
  362. if(response)
  363. {
  364. if(listitem==0) ShowModelSelectionMenuEx(playerid, AttachmentObjectsList, 228+38, "Player Objects", DIALOG_ATTACH_MODEL_SELECTION, 0.0, 0.0, 0.0, 1.0, 0x00000099, 0x000000EE, 0xACCBF1FF);
  365. }
  366. }
  367. case DIALOG_ATTACH_EDITREPLACE:
  368. {
  369. if(response) EditAttachedObject(playerid, GetPVarInt(playerid, "AttachmentIndexSel"));
  370. else
  371. {
  372. RemovePlayerAttachedObject(playerid, GetPVarInt(playerid, "AttachmentIndexSel"));
  373. DeletePVar(playerid, "AttachmentIndexSel");
  374. new file[256];
  375. new name[24];
  376. new x=GetPVarInt(playerid, "AttachmentIndexSel");
  377. new f1[15],f2[15],f3[15],f4[15],f5[15],f6[15],f7[15],f8[15],f9[15],f10[15],f11[15];
  378. GetPlayerName(playerid,name,24);
  379. format(file,sizeof(file),"Player Objects/%s.ini",name);
  380. if(!dini_Exists(file)) return 1;
  381. format(f1,15,"O_Model_%d",x);
  382. format(f2,15,"O_Bone_%d",x);
  383. format(f3,15,"O_OffX_%d",x);
  384. format(f4,15,"O_OffY_%d",x);
  385. format(f5,15,"O_OffZ_%d",x);
  386. format(f6,15,"O_RotX_%d",x);
  387. format(f7,15,"O_RotY_%d",x);
  388. format(f8,15,"O_RotZ_%d",x);
  389. format(f9,15,"O_ScaleX_%d",x);
  390. format(f10,15,"O_ScaleY_%d",x);
  391. format(f11,15,"O_ScaleZ_%d",x);
  392. dini_Unset(file,f1);
  393. dini_Unset(file,f2);
  394. dini_Unset(file,f3);
  395. dini_Unset(file,f4);
  396. dini_Unset(file,f5);
  397. dini_Unset(file,f6);
  398. dini_Unset(file,f7);
  399. dini_Unset(file,f8);
  400. dini_Unset(file,f9);
  401. dini_Unset(file,f10);
  402. dini_Unset(file,f11);
  403. }
  404. return 1;
  405. }
  406. case DIALOG_ATTACH_BONE_SELECTION:
  407. {
  408. if(response)
  409. {
  410. SetPlayerAttachedObject(playerid, GetPVarInt(playerid, "AttachmentIndexSel"), GetPVarInt(playerid, "AttachmentModelSel"), listitem+1);
  411. EditAttachedObject(playerid, GetPVarInt(playerid, "AttachmentIndexSel"));
  412. SendClientMessage(playerid, 0xFFFFFFFF, "PLAYER: You can also hold SPAWN and use MOUSE to view from either sides.");
  413. }
  414. DeletePVar(playerid, "AttachmentIndexSel");
  415. DeletePVar(playerid, "AttachmentModelSel");
  416. return 1;
  417. }
  418. }
  419. return 0;
  420. }
  421. //==============================================================================
  422. public OnPlayerEditAttachedObject( playerid, response, index, modelid, boneid,
  423. Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ,
  424. Float:fRotX, Float:fRotY, Float:fRotZ,
  425. Float:fScaleX, Float:fScaleY, Float:fScaleZ )
  426. {
  427. /*new debug_string[256+1];
  428. format(debug_string,256,"SetPlayerAttachedObject(playerid,%d,%d,%d,%f,%f,%f,%f,%f,%f,%f,%f,%f)",
  429. index,modelid,boneid,fOffsetX,fOffsetY,fOffsetZ,fRotX,fRotY,fRotZ,fScaleX,fScaleY,fScaleZ);*/
  430.  
  431. SetPlayerAttachedObject(playerid,index,modelid,boneid,fOffsetX,fOffsetY,fOffsetZ,fRotX,fRotY,fRotZ,fScaleX,fScaleY,fScaleZ);
  432. SendClientMessage(playerid, 0xFFFFFFFF, "PLAYER: You have finished editing attachments, it has been saved to your database.");
  433.  
  434. new file[256];
  435. new name[24];
  436. new f1[15],f2[15],f3[15],f4[15],f5[15],f6[15],f7[15],f8[15],f9[15],f10[15],f11[15];
  437. GetPlayerName(playerid,name,24);
  438. format(file,sizeof(file),"Player Objects/%s.ini",name);
  439. if(!dini_Exists(file)) return 1;
  440. format(f1,15,"O_Model_%d",index);
  441. format(f2,15,"O_Bone_%d",index);
  442. format(f3,15,"O_OffX_%d",index);
  443. format(f4,15,"O_OffY_%d",index);
  444. format(f5,15,"O_OffZ_%d",index);
  445. format(f6,15,"O_RotX_%d",index);
  446. format(f7,15,"O_RotY_%d",index);
  447. format(f8,15,"O_RotZ_%d",index);
  448. format(f9,15,"O_ScaleX_%d",index);
  449. format(f10,15,"O_ScaleY_%d",index);
  450. format(f11,15,"O_ScaleZ_%d",index);
  451. dini_IntSet(file,f1,modelid);
  452. dini_IntSet(file,f2,boneid);
  453. dini_FloatSet(file,f3,fOffsetX);
  454. dini_FloatSet(file,f4,fOffsetY);
  455. dini_FloatSet(file,f5,fOffsetZ);
  456. dini_FloatSet(file,f6,fRotX);
  457. dini_FloatSet(file,f7,fRotY);
  458. dini_FloatSet(file,f8,fRotZ);
  459. dini_FloatSet(file,f9,fScaleX);
  460. dini_FloatSet(file,f10,fScaleY);
  461. dini_FloatSet(file,f11,fScaleZ);
  462. return 1;
  463. }
  464. //==============================================================================
  465. public OnPlayerConnect(playerid)
  466. {
  467. new file[256];
  468. new name[24];
  469. new f1[15],f2[15],f3[15],f4[15],f5[15],f6[15],f7[15],f8[15],f9[15],f10[15],f11[15];
  470. GetPlayerName(playerid,name,24);
  471. format(file,sizeof(file),"Player Objects/%s.ini",name);
  472. if(!dini_Exists(file))
  473. {
  474. dini_Create(file);
  475. for(new x;x<MAX_OSLOTS;x++)
  476. {
  477. if(IsPlayerAttachedObjectSlotUsed(playerid, x))
  478. {
  479. format(f1,15,"O_Model_%d",x);
  480. format(f2,15,"O_Bone_%d",x);
  481. format(f3,15,"O_OffX_%d",x);
  482. format(f4,15,"O_OffY_%d",x);
  483. format(f5,15,"O_OffZ_%d",x);
  484. format(f6,15,"O_RotX_%d",x);
  485. format(f7,15,"O_RotY_%d",x);
  486. format(f8,15,"O_RotZ_%d",x);
  487. format(f9,15,"O_ScaleX_%d",x);
  488. format(f10,15,"O_ScaleY_%d",x);
  489. format(f11,15,"O_ScaleZ_%d",x);
  490. dini_IntSet(file,f1,0);
  491. dini_IntSet(file,f2,0);
  492. dini_FloatSet(file,f3,0.0);
  493. dini_FloatSet(file,f4,0.0);
  494. dini_FloatSet(file,f5,0.0);
  495. dini_FloatSet(file,f6,0.0);
  496. dini_FloatSet(file,f7,0.0);
  497. dini_FloatSet(file,f8,0.0);
  498. dini_FloatSet(file,f9,0.0);
  499. dini_FloatSet(file,f10,0.0);
  500. dini_FloatSet(file,f11,0.0);
  501. }
  502. }
  503. }
  504. }
  505. //==============================================================================
  506. public OnPlayerSpawn(playerid)
  507. {
  508. new file[256];
  509. new name[24];
  510. new f1[15],f2[15],f3[15],f4[15],f5[15],f6[15],f7[15],f8[15],f9[15],f10[15],f11[15];
  511. GetPlayerName(playerid,name,24);
  512. format(file,sizeof(file),"Player Objects/%s.ini",name);
  513. if(!dini_Exists(file)) return 1;
  514. for(new x;x<MAX_OSLOTS;x++)
  515. {
  516. format(f1,15,"O_Model_%d",x);
  517. format(f2,15,"O_Bone_%d",x);
  518. format(f3,15,"O_OffX_%d",x);
  519. format(f4,15,"O_OffY_%d",x);
  520. format(f5,15,"O_OffZ_%d",x);
  521. format(f6,15,"O_RotX_%d",x);
  522. format(f7,15,"O_RotY_%d",x);
  523. format(f8,15,"O_RotZ_%d",x);
  524. format(f9,15,"O_ScaleX_%d",x);
  525. format(f10,15,"O_ScaleY_%d",x);
  526. format(f11,15,"O_ScaleZ_%d",x);
  527. if(dini_Int(file,f1)!=0)
  528. {
  529. SetPlayerAttachedObject(playerid,x,dini_Int(file,f1),dini_Int(file,f2),dini_Float(file,f3),dini_Float(file,f4),dini_Float(file,f5),dini_Float(file,f6),dini_Float(file,f7),dini_Float(file,f8),dini_Float(file,f9),dini_Float(file,f10),dini_Float(file,f11));
  530. }
  531. }
  532. return 1;
  533. }
  534. //==============================================================================
  535. public OnPlayerModelSelectionEx(playerid, response, extraid, modelid)
  536. {
  537. if(extraid==DIALOG_ATTACH_MODEL_SELECTION)
  538. {
  539. if(!response)
  540. { ShowPlayerDialog(playerid,DIALOG_ATTACH_OBJECT_SELECTION,DIALOG_STYLE_LIST,"Player Clothes: (Select Object Path)","Path:1 :: "COL_GREY"Server Objects Menu\n"COL_WHITE"Path:2 :: "COL_GREY"Custom Object","Next(>>)","Back(<<)"); }
  541. if(response)
  542. {
  543. if(GetPVarInt(playerid, "AttachmentUsed") == 1) EditAttachedObject(playerid, modelid);
  544. else
  545. {
  546. SetPVarInt(playerid, "AttachmentModelSel", modelid);
  547. new string[256+1];
  548. new dialog[500];
  549. for(new x;x<sizeof(AttachmentBones);x++)
  550. {
  551. format(string, sizeof(string), "Bone:%s\n", AttachmentBones[x]);
  552. strcat(dialog,string);
  553. }
  554. ShowPlayerDialog(playerid, DIALOG_ATTACH_BONE_SELECTION, DIALOG_STYLE_LIST, \
  555. "{FF0000}Attachment Modification - Bone Selection", dialog, "Select", "Cancel");
  556. }//else DeletePVar(playerid, "AttachmentIndexSel");
  557. }
  558. }
  559. return 1;
  560. }
  561. //==============================================================================
  562. stock IsNumeric(string[])
  563. {
  564. for (new i = 0, j = strlen(string); i < j; i++)
  565. {
  566. if (string[i] > '9' || string[i] < '0') return 0;
  567. }
  568. return 1;
  569. }
  570. //==============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement