wisnuyogan

Weapon on body MySQL R39-6

May 12th, 2020
392
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 12.54 KB | None | 0 0
  1. //Weapons on body system by GoldenLion
  2. //Credits to BlueG & Pain123 & maddinat0r for MySQL
  3.  
  4. #define _LINUX
  5. #define FILTERSCRIPT
  6.  
  7. #include <a_samp>
  8. #include <a_mysql>
  9.  
  10. #undef MAX_PLAYERS
  11. #define MAX_PLAYERS 100
  12.  
  13. #define DIALOG_EDIT_BONE 5000
  14. #define isnull(%1) ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
  15.  
  16. #define MYSQL_HOST "localhost"
  17. #define MYSQL_USER "root"
  18. #define MYSQL_PASSWORD "wiZn244"
  19. #define MYSQL_DATABASE "hidegun"
  20.  
  21. new database;
  22.  
  23. enum weaponSettings
  24. {
  25.     Float:Position[6],
  26.     Bone,
  27.     Hidden
  28. }
  29. new WeaponSettings[MAX_PLAYERS][17][weaponSettings], WeaponTick[MAX_PLAYERS], EditingWeapon[MAX_PLAYERS];
  30.  
  31. GetWeaponObjectSlot(weaponid)
  32. {
  33.     new objectslot;
  34.  
  35.     switch (weaponid)
  36.     {
  37.         case 22..24: objectslot = 0;
  38.         case 25..27: objectslot = 1;
  39.         case 28, 29, 32: objectslot = 2;
  40.         case 30, 31: objectslot = 3;
  41.         case 33, 34: objectslot = 4;
  42.         case 35..38: objectslot = 5;
  43.     }
  44.     return objectslot;
  45. }
  46.  
  47. GetWeaponModel(weaponid) //Will only return the model of wearable weapons (22-38)
  48. {
  49.     new model;
  50.  
  51.     switch(weaponid)
  52.     {
  53.         case 22..29: model = 324 + weaponid;
  54.         case 30: model = 355;
  55.         case 31: model = 356;
  56.         case 32: model = 372;
  57.         case 33..38: model = 324 + weaponid;
  58.     }
  59.     return model;
  60. }
  61.  
  62. PlayerHasWeapon(playerid, weaponid)
  63. {
  64.     new weapon, ammo;
  65.  
  66.     for (new i; i < 13; i++)
  67.     {
  68.         GetPlayerWeaponData(playerid, i, weapon, ammo);
  69.         if (weapon == weaponid && ammo) return 1;
  70.     }
  71.     return 0;
  72. }
  73.  
  74. IsWeaponWearable(weaponid)
  75.     return (weaponid >= 22 && weaponid <= 38);
  76.  
  77. IsWeaponHideable(weaponid)
  78.     return (weaponid >= 22 && weaponid <= 24 || weaponid == 28 || weaponid == 32);
  79.  
  80. forward OnWeaponsLoaded(playerid);
  81. public OnWeaponsLoaded(playerid)
  82. {
  83.     new rows, weaponid, index;
  84.  
  85.     cache_get_row_count(rows);
  86.  
  87.     for (new i; i < rows; i++)
  88.     {
  89.         cache_get_field_content_int(i, "WeaponID", weaponid);
  90.         index = weaponid - 22;
  91.  
  92.         cache_get_field_content_float(i, "GPoX", _:WeaponSettings[playerid][index][Position][0]);
  93.         cache_get_field_content_float(i, "GPoY", _:WeaponSettings[playerid][index][Position][1]);
  94.         cache_get_field_content_float(i, "GPoZ", _:WeaponSettings[playerid][index][Position][2]);
  95.  
  96.         cache_get_field_content_float(i, "GRoX", _:WeaponSettings[playerid][index][Position][3]);
  97.         cache_get_field_content_float(i, "GRoY", _:WeaponSettings[playerid][index][Position][4]);
  98.         cache_get_field_content_float(i, "GRoZ", _:WeaponSettings[playerid][index][Position][5]);
  99.  
  100.         cache_get_field_content_int(i, "Bone", _:WeaponSettings[playerid][index][Bone]);
  101.         cache_get_field_content_int(i, "Hide", _:WeaponSettings[playerid][index][Hidden]);
  102.     }
  103. }
  104.  
  105. public OnFilterScriptInit()
  106. {
  107.     database = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSWORD, .pool_size = 0);
  108.  
  109.     if (mysql_errno()) printf("Failed to connect to %s.", MYSQL_HOST);
  110.     else printf("Successfully connected to %s.", MYSQL_HOST);
  111.     return 1;
  112. }
  113.  
  114. public OnFilterScriptExit()
  115. {
  116.     mysql_close(database);
  117.     return 1;
  118. }
  119.  
  120. public OnPlayerUpdate(playerid)
  121. {
  122.     if (NetStats_GetConnectedTime(playerid) - WeaponTick[playerid] >= 250)
  123.     {
  124.         new weaponid, ammo, objectslot, count, index;
  125.  
  126.         for (new i = 2; i <= 7; i++) //Loop only through the slots that may contain the wearable weapons
  127.         {
  128.             GetPlayerWeaponData(playerid, i, weaponid, ammo);
  129.             index = weaponid - 22;
  130.  
  131.             if (weaponid && ammo && !WeaponSettings[playerid][index][Hidden] && IsWeaponWearable(weaponid) && EditingWeapon[playerid] != weaponid)
  132.             {
  133.                 objectslot = GetWeaponObjectSlot(weaponid);
  134.  
  135.                 if (GetPlayerWeapon(playerid) != weaponid)
  136.                     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);
  137.  
  138.                 else if (IsPlayerAttachedObjectSlotUsed(playerid, objectslot)) RemovePlayerAttachedObject(playerid, objectslot);
  139.             }
  140.         }
  141.         for (new i; i <= 5; i++) if (IsPlayerAttachedObjectSlotUsed(playerid, i))
  142.         {
  143.             count = 0;
  144.  
  145.             for (new j = 22; j <= 38; j++) if (PlayerHasWeapon(playerid, j) && GetWeaponObjectSlot(j) == i)
  146.                 count++;
  147.  
  148.             if (!count) RemovePlayerAttachedObject(playerid, i);
  149.         }
  150.         WeaponTick[playerid] = NetStats_GetConnectedTime(playerid);
  151.     }
  152.     return 1;
  153. }
  154.  
  155. public OnPlayerConnect(playerid)
  156. {
  157.     new string[70], name[MAX_PLAYER_NAME];
  158.  
  159.     GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  160.  
  161.     for (new i; i < 17; i++)
  162.     {
  163.         WeaponSettings[playerid][i][Position][0] = -0.116;
  164.         WeaponSettings[playerid][i][Position][1] = 0.189;
  165.         WeaponSettings[playerid][i][Position][2] = 0.088;
  166.         WeaponSettings[playerid][i][Position][3] = 0.0;
  167.         WeaponSettings[playerid][i][Position][4] = 44.5;
  168.         WeaponSettings[playerid][i][Position][5] = 0.0;
  169.         WeaponSettings[playerid][i][Bone] = 1;
  170.         WeaponSettings[playerid][i][Hidden] = false;
  171.     }
  172.     WeaponTick[playerid] = 0;
  173.     EditingWeapon[playerid] = 0;
  174.  
  175.     format(string, sizeof(string), "SELECT * FROM weaponsettings WHERE Nama = '%s'", name);
  176.     mysql_tquery(database, string, "OnWeaponsLoaded", "d", playerid);
  177.     return 1;
  178. }
  179.  
  180. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  181. {
  182.     if (dialogid == DIALOG_EDIT_BONE)
  183.     {
  184.         if (response)
  185.         {
  186.             new weaponid = EditingWeapon[playerid], weaponname[18], name[MAX_PLAYER_NAME], string[150];
  187.  
  188.             GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  189.             GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  190.  
  191.             WeaponSettings[playerid][weaponid - 22][Bone] = listitem + 1;
  192.  
  193.             format(string, sizeof(string), "You have successfully changed the bone of your %s.", weaponname);
  194.             SendClientMessage(playerid, -1, string);
  195.  
  196.             format(string, sizeof(string), "INSERT INTO weaponsettings (Nama, WeaponID, Bone) VALUES ('%s', %d, %d) ON DUPLICATE KEY UPDATE Bone = VALUES(Bone)", name, weaponid, listitem + 1);
  197.             mysql_tquery(database, string);
  198.         }
  199.         EditingWeapon[playerid] = 0;
  200.         return 1;
  201.     }
  202.     return 0;
  203. }
  204.  
  205. 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)
  206. {
  207.     new weaponid = EditingWeapon[playerid];
  208.  
  209.     if (weaponid)
  210.     {
  211.         if (response)
  212.         {
  213.             new enum_index = weaponid - 22, weaponname[18], name[MAX_PLAYER_NAME], string[340];
  214.  
  215.             GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  216.             GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  217.  
  218.             WeaponSettings[playerid][enum_index][Position][0] = fOffsetX;
  219.             WeaponSettings[playerid][enum_index][Position][1] = fOffsetY;
  220.             WeaponSettings[playerid][enum_index][Position][2] = fOffsetZ;
  221.             WeaponSettings[playerid][enum_index][Position][3] = fRotX;
  222.             WeaponSettings[playerid][enum_index][Position][4] = fRotY;
  223.             WeaponSettings[playerid][enum_index][Position][5] = fRotZ;
  224.  
  225.             RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  226.             SetPlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid), GetWeaponModel(weaponid), WeaponSettings[playerid][enum_index][Bone], fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ, 1.0, 1.0, 1.0);
  227.  
  228.             format(string, sizeof(string), "You have successfully adjusted the position of your %s.", weaponname);
  229.             SendClientMessage(playerid, -1, string);
  230.  
  231.             format(string, sizeof(string), "INSERT INTO weaponsettings (Nama, WeaponID, GPoX, GPoY, GPoZ, GRoX, GRoY, GRoZ) VALUES ('%s', %d, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f) ON DUPLICATE KEY UPDATE GPoX = VALUES(GPoX), GPoY = VALUES(GPoY), GPoZ = VALUES(GPoZ), GRoX = VALUES(GRoX), GRoY = VALUES(GRoY), GRoZ = VALUES(GRoZ)", name, weaponid, fOffsetX, fOffsetY, fOffsetZ, fRotX, fRotY, fRotZ);
  232.             mysql_tquery(database, string);
  233.         }
  234.         EditingWeapon[playerid] = 0;
  235.     }
  236.     return 0;
  237. }
  238.  
  239. public OnPlayerCommandText(playerid, cmdtext[])
  240. {
  241.     new cmd[24], params[64], len = strlen(cmdtext);
  242.  
  243.     for (new i; i < len; i++) if (cmdtext[i] == ' ')
  244.     {
  245.         strmid(cmd, cmdtext, 0, i);
  246.         strcat(params, cmdtext[i + 1]);
  247.         break;
  248.     }
  249.     if (isnull(cmd)) strcat(cmd, cmdtext);
  250.  
  251.     if (!strcmp(cmd, "/weapon", true))
  252.     {
  253.         new weaponid = GetPlayerWeapon(playerid);
  254.  
  255.         if (!weaponid)
  256.             return SendClientMessage(playerid, -1, "You are not holding a weapon.");
  257.  
  258.         if (!IsWeaponWearable(weaponid))
  259.             return SendClientMessage(playerid, -1, "This weapon cannot be edited.");
  260.  
  261.         if (isnull(params))
  262.             return SendClientMessage(playerid, -1, "USAGE: /weapon [adjustpos/bone/hide]");
  263.  
  264.         if (!strcmp(params, "adjustpos", true))
  265.         {
  266.             if (EditingWeapon[playerid])
  267.                 return SendClientMessage(playerid, -1, "You are already editing a weapon.");
  268.  
  269.             if (WeaponSettings[playerid][weaponid - 22][Hidden])
  270.                 return SendClientMessage(playerid, -1, "You cannot adjust a hidden weapon.");
  271.  
  272.             new index = weaponid - 22;
  273.  
  274.             SetPlayerArmedWeapon(playerid, 0);
  275.  
  276.             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);
  277.             EditAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  278.  
  279.             EditingWeapon[playerid] = weaponid;
  280.         }
  281.         else if (!strcmp(params, "bone", true))
  282.         {
  283.             if (EditingWeapon[playerid])
  284.                 return SendClientMessage(playerid, -1, "You are already editing a weapon.");
  285.  
  286.             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");
  287.             EditingWeapon[playerid] = weaponid;
  288.         }
  289.         else if (!strcmp(params, "hide", true))
  290.         {
  291.             if (EditingWeapon[playerid])
  292.                 return SendClientMessage(playerid, -1, "You cannot hide a weapon while you are editing it.");
  293.  
  294.             if (!IsWeaponHideable(weaponid))
  295.                 return SendClientMessage(playerid, -1, "This weapon cannot be hidden.");
  296.  
  297.             new index = weaponid - 22, weaponname[18], name[MAX_PLAYER_NAME], string[150];
  298.  
  299.             GetWeaponName(weaponid, weaponname, sizeof(weaponname));
  300.             GetPlayerName(playerid, name, MAX_PLAYER_NAME);
  301.  
  302.             if (WeaponSettings[playerid][index][Hidden])
  303.             {
  304.                 format(string, sizeof(string), "You have set your %s to show.", weaponname);
  305.                 WeaponSettings[playerid][index][Hidden] = false;
  306.             }
  307.             else
  308.             {
  309.                 if (IsPlayerAttachedObjectSlotUsed(playerid, GetWeaponObjectSlot(weaponid)))
  310.                     RemovePlayerAttachedObject(playerid, GetWeaponObjectSlot(weaponid));
  311.  
  312.                 format(string, sizeof(string), "You have set your %s not to show.", weaponname);
  313.                 WeaponSettings[playerid][index][Hidden] = true;
  314.             }
  315.             SendClientMessage(playerid, -1, string);
  316.  
  317.             format(string, sizeof(string), "INSERT INTO weaponsettings (Nama, WeaponID, Hide) VALUES ('%s', %d, %d) ON DUPLICATE KEY UPDATE Hide = VALUES(Hide)", name, weaponid, WeaponSettings[playerid][index][Hidden]);
  318.             mysql_tquery(database, string);
  319.         }
  320.         else SendClientMessage(playerid, -1, "You have specified an invalid option.");
  321.         return 1;
  322.     }
  323.     return 0;
  324. }
Add Comment
Please, Sign In to add comment