Advertisement
Guest User

Untitled

a guest
Nov 12th, 2018
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.52 KB | None | 0 0
  1. //Weapons on body system by GoldenLion
  2. //Traducido por OrlandoRivas
  3.  
  4. #define FILTERSCRIPT
  5.  
  6. #include <a_samp>
  7.  
  8. #undef MAX_PLAYERS
  9. #define MAX_PLAYERS 100
  10.  
  11. #define DIALOG_EDIT_BONE 5000
  12. #define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
  13.  
  14. enum weaponSettings
  15. {
  16. Float:Position[6],
  17. Bone,
  18. Hidden
  19. }
  20. new WeaponSettings[MAX_PLAYERS][17][weaponSettings], WeaponTick[MAX_PLAYERS], EditingWeapon[MAX_PLAYERS];
  21.  
  22. GetWeaponObjectSlot(weaponid)
  23. {
  24. new objectslot;
  25.  
  26. switch (weaponid)
  27. {
  28. case 22..24: objectslot = 0;
  29. case 25..27: objectslot = 1;
  30. case 28, 29, 32: objectslot = 2;
  31. case 30, 31: objectslot = 3;
  32. case 33, 34: objectslot = 4;
  33. case 35..38: objectslot = 5;
  34. }
  35. return objectslot;
  36. }
  37.  
  38. GetWeaponModel(weaponid) //Solo devolverá el modelo de armas portátiles (22-38)
  39. {
  40. new model;
  41.  
  42. switch(weaponid)
  43. {
  44. case 22..29: model = 324 + weaponid;
  45. case 30: model = 355;
  46. case 31: model = 356;
  47. case 32: model = 372;
  48. case 33..38: model = 324 + weaponid;
  49. }
  50. return model;
  51. }
  52.  
  53. PlayerHasWeapon(playerid, weaponid)
  54. {
  55. new weapon, ammo;
  56.  
  57. for (new i; i < 13; i++)
  58. {
  59. GetPlayerWeaponData(playerid, i, weapon, ammo);
  60. if (weapon == weaponid && ammo) return 1;
  61. }
  62. return 0;
  63. }
  64.  
  65. IsWeaponWearable(weaponid)
  66. return (weaponid >= 22 && weaponid <= 38);
  67.  
  68. IsWeaponHideable(weaponid)
  69. return (weaponid >= 22 && weaponid <= 24 || weaponid == 28 || weaponid == 32);
  70.  
  71. public OnPlayerUpdate(playerid)
  72. {
  73. if (NetStats_GetConnectedTime(playerid) - WeaponTick[playerid] >= 250)
  74. {
  75. new weaponid, ammo, objectslot, count, index;
  76.  
  77. for (new i = 2; i <= 7; i++) //Bucle solo a través de las ranuras que pueden contener las armas portátiles
  78. {
  79. GetPlayerWeaponData(playerid, i, weaponid, ammo);
  80. index = weaponid - 22;
  81.  
  82. if (weaponid && ammo && !WeaponSettings[playerid][index][Hidden] && IsWeaponWearable(weaponid) && EditingWeapon[playerid] != weaponid)
  83. {
  84. objectslot = GetWeaponObjectSlot(weaponid);
  85.  
  86. if (GetPlayerWeapon(playerid) != weaponid)
  87. 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);
  88.  
  89. else if (IsPlayerAttachedObjectSlotUsed(playerid, objectslot)) RemovePlayerAttachedObject(playerid, objectslot);
  90. }
  91. }
  92. for (new i; i <= 5; i++) if (IsPlayerAttachedObjectSlotUsed(playerid, i))
  93. {
  94. count = 0;
  95.  
  96. for (new j = 22; j <= 38; j++) if (PlayerHasWeapon(playerid, j) && GetWeaponObjectSlot(j) == i)
  97. count++;
  98.  
  99. if (!count) RemovePlayerAttachedObject(playerid, i);
  100. }
  101. WeaponTick[playerid] = NetStats_GetConnectedTime(playerid);
  102. }
  103. return 1;
  104. }
  105.  
  106. public OnPlayerConnect(playerid)
  107. {
  108. for (new i; i < 17; i++)
  109. {
  110. WeaponSettings[playerid][i][Position][0] = -0.116;
  111. WeaponSettings[playerid][i][Position][1] = 0.189;
  112. WeaponSettings[playerid][i][Position][2] = 0.088;
  113. WeaponSettings[playerid][i][Position][3] = 0.0;
  114. WeaponSettings[playerid][i][Position][4] = 44.50;
  115. WeaponSettings[playerid][i][Position][5] = 0.0;
  116. WeaponSettings[playerid][i][Bone] = 1;
  117. WeaponSettings[playerid][i][Hidden] = false;
  118. }
  119. WeaponTick[playerid] = 0;
  120. EditingWeapon[playerid] = 0;
  121. return 1;
  122. }
  123.  
  124. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  125. {
  126. if (dialogid == DIALOG_EDIT_BONE)
  127. {
  128. if (response)
  129. {
  130. new weaponid = EditingWeapon[playerid], weaponname[18], string[68];
  131.  
  132. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  133. WeaponSettings[playerid][weaponid - 22][Bone] = listitem + 1;
  134.  
  135. format(string, sizeof(string), "Has cambiado con éxito el hueso de tu %s.", weaponname);
  136. SendClientMessage(playerid, -1, string);
  137. }
  138. EditingWeapon[playerid] = 0;
  139. return 1;
  140. }
  141. return 0;
  142. }
  143.  
  144. 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)
  145. {
  146. new weaponid = EditingWeapon[playerid];
  147.  
  148. if (weaponid)
  149. {
  150. if (response)
  151. {
  152. new enum_index = weaponid - 22, weaponname[18], string[80];
  153.  
  154. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  155.  
  156. WeaponSettings[playerid][enum_index][Position][0] = fOffsetX;
  157. WeaponSettings[playerid][enum_index][Position][1] = fOffsetY;
  158. WeaponSettings[playerid][enum_index][Position][2] = fOffsetZ;
  159. WeaponSettings[playerid][enum_index][Position][3] = fRotX;
  160. WeaponSettings[playerid][enum_index][Position][4] = fRotY;
  161. WeaponSettings[playerid][enum_index][Position][5] = fRotZ;
  162.  
  163. RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  164. SetPlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid), GetWeaponModel(weaponid), WeaponSettings[playerid][enum_index][Bone], fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, 1.0, 1.0, 1.0);
  165.  
  166. format(string, sizeof(string), "Has cambiado con éxito el hueso de tu %s.", weaponname);
  167. SendClientMessage(playerid, -1, string);
  168. }
  169. EditingWeapon[playerid] = 0;
  170. }
  171. return 1;
  172. }
  173.  
  174. public OnPlayerCommandText(playerid, cmdtext[])
  175. {
  176. new cmd[24], params[64], len = strlen(cmdtext);
  177.  
  178. for (new i; i < len; i++) if (cmdtext[i] == ' ')
  179. {
  180. strmid(cmd, cmdtext, 0, i);
  181. strcat(params, cmdtext[i + 1]);
  182. break;
  183. }
  184. if (isnull(cmd)) strcat(cmd, cmdtext);
  185.  
  186. if (!strcmp(cmd, "/editararma", true))
  187. {
  188. new weaponid = GetPlayerWeapon(playerid);
  189.  
  190. if (!weaponid)
  191. return SendClientMessage(playerid, -1, "No estás sosteniendo un arma.");
  192.  
  193. if (!IsWeaponWearable(weaponid))
  194. return SendClientMessage(playerid, -1, "Esta arma no puede ser editada.");
  195.  
  196. if (isnull(params))
  197. return SendClientMessage(playerid, -1, "USE: /editararma [ajustarposicion/bone/hide]");
  198.  
  199. if (!strcmp(params, "ajustarposicion", true))
  200. {
  201. if (EditingWeapon[playerid])
  202. return SendClientMessage(playerid, -1, "Ya estás editando un arma.");
  203.  
  204. if (WeaponSettings[playerid][weaponid - 22][Hidden])
  205. return SendClientMessage(playerid, -1, "No puedes ajustar un arma oculta.");
  206.  
  207. new index = weaponid - 22;
  208.  
  209. SetPlayerArmedWeapon(playerid, 0);
  210.  
  211. 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);
  212. EditAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  213.  
  214. EditingWeapon[playerid] = weaponid;
  215. }
  216. else if (!strcmp(params, "bone", true))
  217. {
  218. if (EditingWeapon[playerid])
  219. return SendClientMessage(playerid, -1, "Ya estás editando un arma.");
  220.  
  221. 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");
  222. EditingWeapon[playerid] = weaponid;
  223. }
  224. else if (!strcmp(params, "hide", true))
  225. {
  226. if (EditingWeapon[playerid])
  227. return SendClientMessage(playerid, -1, "No puedes ocultar un arma mientras la estás editando.");
  228.  
  229. if (!IsWeaponHideable(weaponid))
  230. return SendClientMessage(playerid, -1, "Esta arma no puede ser escondida.");
  231.  
  232. new index = weaponid - 22, weaponname[18], string[48];
  233.  
  234. GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  235.  
  236. if (WeaponSettings[playerid][index][Hidden])
  237. {
  238. format(string, sizeof(string), "Usted ha establecido su %s mostrar.", weaponname);
  239. WeaponSettings[playerid][index][Hidden] = false;
  240. }
  241. else
  242. {
  243. if (IsPlayerAttachedObjectSlotUsed(playerid, GetWeaponObjectSlot(weaponid)))
  244. RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  245.  
  246. format(string, sizeof(string), "Ha configurado su %s para que no se muestre.", weaponname);
  247. WeaponSettings[playerid][index][Hidden] = true;
  248. }
  249. SendClientMessage(playerid, -1, string);
  250. }
  251. else SendClientMessage(playerid, -1, "Has especificado una opción inválida.");
  252. return 1;
  253. }
  254. return 0;
  255. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement