Advertisement
Guest User

Untitled

a guest
Aug 18th, 2017
3,476
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.56 KB | None | 0 0
  1. //Weapons on body system by GoldenLion
  2.  
  3. #define FILTERSCRIPT
  4.  
  5. #include <a_samp>
  6.  
  7. #undef MAX_PLAYERS
  8. #define MAX_PLAYERS 100
  9.  
  10. #define DIALOG_EDIT_BONE 5000
  11. #define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
  12.  
  13. enum weaponSettings
  14. {
  15. Float:Position[6],
  16. Bone,
  17. Hidden
  18. }
  19. new WeaponSettings[MAX_PLAYERS][17][weaponSettings], WeaponTick[MAX_PLAYERS], EditingWeapon[MAX_PLAYERS];
  20.  
  21. GetWeaponObjectSlot(weaponid)
  22. {
  23. new objectslot;
  24.  
  25. switch (weaponid)
  26. {
  27. case 22..24: objectslot = 0;
  28. case 25..27: objectslot = 1;
  29. case 28, 29, 32: objectslot = 2;
  30. case 30, 31: objectslot = 3;
  31. case 33, 34: objectslot = 4;
  32. case 35..38: objectslot = 5;
  33. }
  34. return objectslot;
  35. }
  36.  
  37. GetWeaponModel(weaponid) //Will only return the model of wearable weapons (22-38)
  38. {
  39. new model;
  40.  
  41. switch(weaponid)
  42. {
  43. case 22..29: model = 324 + weaponid;
  44. case 30: model = 355;
  45. case 31: model = 356;
  46. case 32: model = 372;
  47. case 33..38: model = 324 + weaponid;
  48. }
  49. return model;
  50. }
  51.  
  52. PlayerHasWeapon(playerid, weaponid)
  53. {
  54. new weapon, ammo;
  55.  
  56. for (new i; i < 13; i++)
  57. {
  58. GetPlayerWeaponData(playerid, i, weapon, ammo);
  59. if (weapon == weaponid && ammo) return 1;
  60. }
  61. return 0;
  62. }
  63.  
  64. IsWeaponWearable(weaponid)
  65. return (weaponid >= 22 && weaponid <= 38);
  66.  
  67. IsWeaponHideable(weaponid)
  68. return (weaponid >= 22 && weaponid <= 24 || weaponid == 28 || weaponid == 32);
  69.  
  70. public OnPlayerUpdate(playerid)
  71. {
  72. if (NetStats_GetConnectedTime(playerid) - WeaponTick[playerid] >= 250)
  73. {
  74. new weaponid, ammo, objectslot, count, index;
  75.  
  76. for (new i = 2; i <= 7; i++) //Loop only through the slots that may contain the wearable weapons
  77. {
  78. GetPlayerWeaponData(playerid, i, weaponid, ammo);
  79. index = weaponid - 22;
  80.  
  81. if (weaponid && ammo && !WeaponSettings[playerid][index][Hidden] && IsWeaponWearable(weaponid) && EditingWeapon[playerid] != weaponid)
  82. {
  83. objectslot = GetWeaponObjectSlot(weaponid);
  84.  
  85. if (GetPlayerWeapon(playerid) != weaponid)
  86. SetPlayerAttachedObject(playerid, objectslot, GetWeaponModel(weaponid), WeaponSettings[playerid][index][Bone], WeaponSettings[playerid][index][Position][0], WeaponSettings[playerid][index][Position][1], WeaponSettings[playerid][index][Position][2], WeaponSettings[playerid][index][Position][3], WeaponSettings[playerid][index][Position][4], WeaponSettings[playerid][index][Position][5], 1.0, 1.0, 1.0);
  87.  
  88. else if (IsPlayerAttachedObjectSlotUsed(playerid, objectslot)) RemovePlayerAttachedObject(playerid, objectslot);
  89. }
  90. }
  91. for (new i; i <= 5; i++) if (IsPlayerAttachedObjectSlotUsed(playerid, i))
  92. {
  93. count = 0;
  94.  
  95. for (new j = 22; j <= 38; j++) if (PlayerHasWeapon(playerid, j) && GetWeaponObjectSlot(j) == i)
  96. count++;
  97.  
  98. if (!count) RemovePlayerAttachedObject(playerid, i);
  99. }
  100. WeaponTick[playerid] = NetStats_GetConnectedTime(playerid);
  101. }
  102. return 1;
  103. }
  104.  
  105. public OnPlayerConnect(playerid)
  106. {
  107. for (new i; i < 17; i++)
  108. {
  109. WeaponSettings[playerid][i][Position][0] = -0.116;
  110. WeaponSettings[playerid][i][Position][1] = 0.189;
  111. WeaponSettings[playerid][i][Position][2] = 0.088;
  112. WeaponSettings[playerid][i][Position][3] = 0.0;
  113. WeaponSettings[playerid][i][Position][4] = 44.50;
  114. WeaponSettings[playerid][i][Position][5] = 0.0;
  115. WeaponSettings[playerid][i][Bone] = 1;
  116. WeaponSettings[playerid][i][Hidden] = false;
  117. }
  118. WeaponTick[playerid] = 0;
  119. EditingWeapon[playerid] = 0;
  120. return 1;
  121. }
  122.  
  123. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  124. {
  125. if (dialogid == DIALOG_EDIT_BONE)
  126. {
  127. if (response)
  128. {
  129. new weaponid = EditingWeapon[playerid], weaponname[18], string[68];
  130.  
  131. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  132. WeaponSettings[playerid][weaponid - 22][Bone] = listitem + 1;
  133.  
  134. format(string, sizeof(string), "You have successfully changed the bone of your %s.", weaponname);
  135. SendClientMessage(playerid, -1, string);
  136. }
  137. EditingWeapon[playerid] = 0;
  138. return 1;
  139. }
  140. return 0;
  141. }
  142.  
  143. 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)
  144. {
  145. new weaponid = EditingWeapon[playerid];
  146.  
  147. if (weaponid)
  148. {
  149. if (response)
  150. {
  151. new enum_index = weaponid - 22, weaponname[18], string[80];
  152.  
  153. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  154.  
  155. WeaponSettings[playerid][enum_index][Position][0] = fOffsetX;
  156. WeaponSettings[playerid][enum_index][Position][1] = fOffsetY;
  157. WeaponSettings[playerid][enum_index][Position][2] = fOffsetZ;
  158. WeaponSettings[playerid][enum_index][Position][3] = fRotX;
  159. WeaponSettings[playerid][enum_index][Position][4] = fRotY;
  160. WeaponSettings[playerid][enum_index][Position][5] = fRotZ;
  161.  
  162. RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  163. SetPlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid), GetWeaponModel(weaponid), WeaponSettings[playerid][enum_index][Bone], fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, 1.0, 1.0, 1.0);
  164.  
  165. format(string, sizeof(string), "You have successfully adjusted the position of your %s.", weaponname);
  166. SendClientMessage(playerid, -1, string);
  167. }
  168. EditingWeapon[playerid] = 0;
  169. }
  170. return 1;
  171. }
  172.  
  173. public OnPlayerCommandText(playerid, cmdtext[])
  174. {
  175. new cmd[24], params[64], len = strlen(cmdtext);
  176.  
  177. for (new i; i < len; i++) if (cmdtext[i] == ' ')
  178. {
  179. strmid(cmd, cmdtext, 0, i);
  180. strcat(params, cmdtext[i + 1]);
  181. break;
  182. }
  183. if (isnull(cmd)) strcat(cmd, cmdtext);
  184.  
  185. if (!strcmp(cmd, "/weapon", true))
  186. {
  187. new weaponid = GetPlayerWeapon(playerid);
  188.  
  189. if (!weaponid)
  190. return SendClientMessage(playerid, -1, "You are not holding a weapon.");
  191.  
  192. if (!IsWeaponWearable(weaponid))
  193. return SendClientMessage(playerid, -1, "This weapon cannot be edited.");
  194.  
  195. if (isnull(params))
  196. return SendClientMessage(playerid, -1, "USAGE: /weapon [adjustpos/bone/hide]");
  197.  
  198. if (!strcmp(params, "adjustpos", true))
  199. {
  200. if (EditingWeapon[playerid])
  201. return SendClientMessage(playerid, -1, "You are already editing a weapon.");
  202.  
  203. if (WeaponSettings[playerid][weaponid - 22][Hidden])
  204. return SendClientMessage(playerid, -1, "You cannot adjust a hidden weapon.");
  205.  
  206. new index = weaponid - 22;
  207.  
  208. SetPlayerArmedWeapon(playerid, 0);
  209.  
  210. SetPlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid), GetWeaponModel(weaponid), WeaponSettings[playerid][index][Bone], WeaponSettings[playerid][index][Position][0], WeaponSettings[playerid][index][Position][1], WeaponSettings[playerid][index][Position][2], WeaponSettings[playerid][index][Position][3], WeaponSettings[playerid][index][Position][4], WeaponSettings[playerid][index][Position][5], 1.0, 1.0, 1.0);
  211. EditAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  212.  
  213. EditingWeapon[playerid] = weaponid;
  214. }
  215. else if (!strcmp(params, "bone", true))
  216. {
  217. if (EditingWeapon[playerid])
  218. return SendClientMessage(playerid, -1, "You are already editing a weapon.");
  219.  
  220. 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");
  221. EditingWeapon[playerid] = weaponid;
  222. }
  223. else if (!strcmp(params, "hide", true))
  224. {
  225. if (EditingWeapon[playerid])
  226. return SendClientMessage(playerid, -1, "You cannot hide a weapon while you are editing it.");
  227.  
  228. if (!IsWeaponHideable(weaponid))
  229. return SendClientMessage(playerid, -1, "This weapon cannot be hidden.");
  230.  
  231. new index = weaponid - 22, weaponname[18], string[48];
  232.  
  233. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  234.  
  235. if (WeaponSettings[playerid][index][Hidden])
  236. {
  237. format(string, sizeof(string), "You have set your %s to show.", weaponname);
  238. WeaponSettings[playerid][index][Hidden] = false;
  239. }
  240. else
  241. {
  242. if (IsPlayerAttachedObjectSlotUsed(playerid, GetWeaponObjectSlot(weaponid)))
  243. RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  244.  
  245. format(string, sizeof(string), "You have set your %s not to show.", weaponname);
  246. WeaponSettings[playerid][index][Hidden] = true;
  247. }
  248. SendClientMessage(playerid, -1, string);
  249. }
  250. else SendClientMessage(playerid, -1, "You have specified an invalid option.");
  251. return 1;
  252. }
  253. return 0;
  254. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement