Advertisement
Guest User

Untitled

a guest
Dec 21st, 2016
835
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.21 KB | None | 0 0
  1. /*
  2. Weapons on body system by GoldenLion
  3.  
  4. Credits
  5. * Y_Less & Emmet_ for sscanf2
  6. * SickAttack for Command Processor
  7.  
  8. Please don't remove the credits. :)
  9. */
  10.  
  11. #define FILTERSCRIPT
  12.  
  13. #include <a_samp>
  14. #include <sscanf2>
  15. #include <command_processor>
  16.  
  17. #undef MAX_PLAYERS
  18. #define MAX_PLAYERS 100
  19.  
  20. #define DIALOG_EDIT_BONE 5000
  21.  
  22. enum weaponSettings
  23. {
  24. Float:Position[6],
  25. Bone,
  26. Hidden
  27. }
  28. new WeaponSettings[MAX_PLAYERS][17][weaponSettings], WeaponCheckTimer[MAX_PLAYERS], EditingWeapon[MAX_PLAYERS];
  29.  
  30. GetWeaponObjectSlot(weaponid)
  31. {
  32. new objectslot;
  33.  
  34. switch (weaponid)
  35. {
  36. case 22..24: objectslot = 0;
  37. case 25..27: objectslot = 1;
  38. case 28, 29, 32: objectslot = 2;
  39. case 30, 31: objectslot = 3;
  40. case 33, 34: objectslot = 4;
  41. case 35..38: objectslot = 5;
  42. }
  43. return objectslot;
  44. }
  45.  
  46. GetWeaponModel(weaponid)
  47. {
  48. new WeaponModels[] =
  49. {
  50. 0, 331, 333, 334, 335, 336, 337, 338, 339, 341, 321, 322, 323, 324,
  51. 325, 326, 342, 343, 344, 0, 0, 0, 346, 347, 348, 349, 350, 351, 352,
  52. 353, 355, 356, 372, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
  53. 367, 368, 368, 371
  54. };
  55. return WeaponModels[weaponid];
  56. }
  57.  
  58. PlayerHasWeapon(playerid, weaponid)
  59. {
  60. new weapon, ammo;
  61.  
  62. for (new i; i <= 12; i++)
  63. {
  64. GetPlayerWeaponData(playerid, i, weapon, ammo);
  65. if (weapon == weaponid && ammo) return 1;
  66. }
  67. return 0;
  68. }
  69.  
  70. IsWeaponWearable(weaponid)
  71. {
  72. if (weaponid >= 22 && weaponid <= 38) return 1;
  73. return 0;
  74. }
  75.  
  76. IsWeaponHideable(weaponid)
  77. {
  78. switch (weaponid) {
  79. case 22..24, 28, 32: return 1;
  80. }
  81. return 0;
  82. }
  83.  
  84. ResetWeaponSettings(playerid)
  85. {
  86. for (new i = 22; i <= 38; i++)
  87. {
  88. WeaponSettings[playerid][i - 22][Position][0] = -0.115999;
  89. WeaponSettings[playerid][i - 22][Position][1] = 0.189000;
  90. WeaponSettings[playerid][i - 22][Position][2] = 0.087999;
  91. WeaponSettings[playerid][i - 22][Position][3] = 0.000000;
  92. WeaponSettings[playerid][i - 22][Position][4] = 44.500007;
  93. WeaponSettings[playerid][i - 22][Position][5] = 0.000000;
  94. WeaponSettings[playerid][i - 22][Bone] = 1;
  95. WeaponSettings[playerid][i - 22][Hidden] = false;
  96. }
  97. }
  98.  
  99. forward WeaponCheck(playerid);
  100. public WeaponCheck(playerid)
  101. {
  102. new weapon[13], ammo[13], objectslot, weaponcount;
  103.  
  104. for (new i; i <= 12; i++)
  105. {
  106. GetPlayerWeaponData(playerid, i, weapon[i], ammo[i]);
  107.  
  108. if (weapon[i] && ammo[i] && !WeaponSettings[playerid][weapon[i] - 22][Hidden] && IsWeaponWearable(weapon[i]) && EditingWeapon[playerid] != weapon[i])
  109. {
  110. objectslot = GetWeaponObjectSlot(weapon[i]);
  111.  
  112. if (GetPlayerWeapon(playerid) != weapon[i])
  113. SetPlayerAttachedObject(playerid, objectslot, GetWeaponModel(weapon[i]), WeaponSettings[playerid][weapon[i] - 22][Bone], WeaponSettings[playerid][weapon[i] - 22][Position][0], WeaponSettings[playerid][weapon[i] - 22][Position][1], WeaponSettings[playerid][weapon[i] - 22][Position][2], WeaponSettings[playerid][weapon[i] - 22][Position][3], WeaponSettings[playerid][weapon[i] - 22][Position][4], WeaponSettings[playerid][weapon[i] - 22][Position][5], 1.000000, 1.000000, 1.000000);
  114.  
  115. else if (IsPlayerAttachedObjectSlotUsed(playerid, objectslot)) RemovePlayerAttachedObject(playerid, objectslot);
  116. }
  117. }
  118. for (new i; i <= 5; i++) if (IsPlayerAttachedObjectSlotUsed(playerid, i))
  119. {
  120. weaponcount = 0;
  121.  
  122. for (new j = 22; j <= 38; j++) if (PlayerHasWeapon(playerid, j) && GetWeaponObjectSlot(j) == i)
  123. weaponcount++;
  124.  
  125. if (!weaponcount) RemovePlayerAttachedObject(playerid, i);
  126. }
  127. return 1;
  128. }
  129.  
  130. public OnFilterScriptInit()
  131. {
  132. SetTimer(" ", 0, false); //This has to be here as it will fix the timer bug, otherwise players' timers will not work
  133. return 1;
  134. }
  135.  
  136. public OnPlayerConnect(playerid)
  137. {
  138. ResetWeaponSettings(playerid);
  139. WeaponCheckTimer[playerid] = SetTimerEx("WeaponCheck", 150, true, "d", playerid);
  140. return 1;
  141. }
  142.  
  143. public OnPlayerDisconnect(playerid, reason)
  144. {
  145. KillTimer(WeaponCheckTimer[playerid]);
  146. return 1;
  147. }
  148.  
  149. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  150. {
  151. if (dialogid == DIALOG_EDIT_BONE)
  152. {
  153. if (response)
  154. {
  155. new weaponid = EditingWeapon[playerid], weaponname[18], string[68];
  156.  
  157. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  158. WeaponSettings[playerid][weaponid - 22][Bone] = listitem + 1;
  159.  
  160. format(string, sizeof(string), "You have successfully changed the bone of your %s.", weaponname);
  161. SendClientMessage(playerid, -1, string);
  162. }
  163. EditingWeapon[playerid] = 0;
  164. }
  165. }
  166.  
  167. public OnPlayerEditAttachedObject(playerid, response, index, modelid, boneid, Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fScaleX, Float:fScaleY, Float:fScaleZ)
  168. {
  169. new weaponid = EditingWeapon[playerid];
  170.  
  171. if (weaponid)
  172. {
  173. if (response)
  174. {
  175. new weaponname[18], string[80];
  176.  
  177. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  178.  
  179. WeaponSettings[playerid][weaponid - 22][Position][0] = fOffsetX;
  180. WeaponSettings[playerid][weaponid - 22][Position][1] = fOffsetY;
  181. WeaponSettings[playerid][weaponid - 22][Position][2] = fOffsetZ;
  182. WeaponSettings[playerid][weaponid - 22][Position][3] = fRotX;
  183. WeaponSettings[playerid][weaponid - 22][Position][4] = fRotY;
  184. WeaponSettings[playerid][weaponid - 22][Position][5] = fRotZ;
  185.  
  186. RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  187. SetPlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid), GetWeaponModel(weaponid), WeaponSettings[playerid][weaponid - 22][Bone], fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, 1.000000, 1.000000, 1.000000);
  188.  
  189. format(string, sizeof(string), "You have successfully adjusted the position of your %s.", weaponname);
  190. SendClientMessage(playerid, -1, string);
  191. }
  192. EditingWeapon[playerid] = 0;
  193. }
  194. return 1;
  195. }
  196.  
  197. CMD:weapon(playerid, params[])
  198. {
  199. new weaponid = GetPlayerWeapon(playerid);
  200.  
  201. if (!weaponid)
  202. return SendClientMessage(playerid, -1, "You are not holding a weapon.");
  203.  
  204. if (!IsWeaponWearable(weaponid))
  205. return SendClientMessage(playerid, -1, "This weapon cannot be edited.");
  206.  
  207. if (!strcmp(params, "adjustpos", true))
  208. {
  209. if (EditingWeapon[playerid])
  210. return SendClientMessage(playerid, -1, "You are already editing a weapon.");
  211.  
  212. if (WeaponSettings[playerid][weaponid - 22][Hidden])
  213. return SendClientMessage(playerid, -1, "You cannot adjust a hidden weapon.");
  214.  
  215. SetPlayerArmedWeapon(playerid, 0);
  216. SetPlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid), GetWeaponModel(weaponid), WeaponSettings[playerid][weaponid - 22][Bone], WeaponSettings[playerid][weaponid - 22][Position][0], WeaponSettings[playerid][weaponid - 22][Position][1], WeaponSettings[weaponid - 22][weaponid - 22][Position][2], WeaponSettings[playerid][weaponid - 22][Position][3], WeaponSettings[playerid][weaponid - 22][Position][4], WeaponSettings[playerid][weaponid - 22][Position][5], 1.000000, 1.000000, 1.000000);
  217. EditAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  218. EditingWeapon[playerid] = weaponid;
  219. }
  220. else if (!strcmp(params, "bone", true))
  221. {
  222. if (EditingWeapon[playerid])
  223. return SendClientMessage(playerid, -1, "You are already editing a weapon.");
  224.  
  225. ShowPlayerDialog(playerid, DIALOG_EDIT_BONE, DIALOG_STYLE_LIST, "Bone", "Spine\nHead\nLeft upper arm\nRight upper arm\nLeft hand\nRight hand\nLeft thigh\nRight thigh\nLeft foot\nRight foot\nRight calf\nLeft calf\nLeft forearm\nRight forearm\nLeft shoulder\nRight shoulder\nNeck\nJaw", "Choose", "Cancel");
  226. EditingWeapon[playerid] = weaponid;
  227. }
  228. else if (!strcmp(params, "hide", true))
  229. {
  230. if (EditingWeapon[playerid])
  231. return SendClientMessage(playerid, -1, "You cannot hide a weapon while you are editing it.");
  232.  
  233. if (!IsWeaponHideable(weaponid))
  234. return SendClientMessage(playerid, -1, "This weapon cannot be hidden.");
  235.  
  236. new weaponname[18], string[48];
  237.  
  238. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  239.  
  240. if (WeaponSettings[playerid][weaponid - 22][Hidden])
  241. {
  242. format(string, sizeof(string), "You have set your %s to show.", weaponname);
  243. WeaponSettings[playerid][weaponid - 22][Hidden] = false;
  244. }
  245. else
  246. {
  247. if (IsPlayerAttachedObjectSlotUsed(playerid, GetWeaponObjectSlot(weaponid)))
  248. RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  249.  
  250. format(string, sizeof(string), "You have set your %s to not show.", weaponname);
  251. WeaponSettings[playerid][weaponid - 22][Hidden] = true;
  252. }
  253. SendClientMessage(playerid, -1, string);
  254. }
  255. else SendClientMessage(playerid, -1, "USAGE: /weapon [adjustpos/bone/hide]");
  256. return 1;
  257. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement