#include static WeaponModel[MAX_PLAYERS][13]; static WeaponAmmo[MAX_PLAYERS][13]; hook OnPlayerConnect(playerid) { for(new i; i < 13; i++) { WeaponModel[playerid][i] = 0; WeaponAmmo[playerid][i] = 0; } } hook OnCharacterSaved(playerid) { new query[128]; for(new i = 0; i < 13; i++) { if(WeaponModel[playerid][i] != 0) { mysql_format(MySQL_GetHandle(), query, sizeof(query), "UPDATE character_weapons SET ammo = %d WHERE owner_id = %d AND weaponid = %d", WeaponAmmo[playerid][i], Character_GetSQLID(playerid), WeaponModel[playerid][i]); mysql_tquery(MySQL_GetHandle(), query); } } } hook OnPlayerFirstSpawn(playerid) { inline const OnWeaponsLoaded() { new rows = cache_num_rows(); new slot; new weaponid; new ammo; for(new i; i < rows; i++) { cache_get_value_name_int(i, "weaponid", weaponid); cache_get_value_name_int(i, "ammo", ammo); slot = GetWeaponSlot(weaponid); WeaponModel[playerid][slot] = weaponid; WeaponAmmo[playerid][slot] = ammo; GivePlayerWeapon(playerid, WeaponModel[playerid][slot], WeaponAmmo[playerid][slot]); } SetPlayerArmedWeapon(playerid, 0); } MySQL_TQueryInline(MySQL_GetHandle(), using inline OnWeaponsLoaded, "SELECT weaponid, ammo FROM character_weapons WHERE owner_id = %d LIMIT 13", Character_GetSQLID(playerid)); } hook OnPlayerSpawnToHospital(playerid) { ResetPlayerWeapons(playerid); for(new i = 0; i < 13; i ++) { WeaponModel[playerid][i] = 0; WeaponAmmo[playerid][i] = 0; } new query[98]; mysql_format(MySQL_GetHandle(), query, sizeof(query), "DELETE FROM character_weapons WHERE owner_id = %d", Character_GetSQLID(playerid)); mysql_tquery(MySQL_GetHandle(), query); } hook OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) { new slot = GetWeaponSlot(weaponid); if(WeaponModel[playerid][slot] > 0 && WeaponAmmo[playerid][slot] > 0) { WeaponAmmo[playerid][slot] --; } if(WeaponAmmo[playerid][slot] == 0) { Player_RemoveWeapon(playerid, weaponid); } return 1; } Player_GiveWeapon(playerid, weaponid, ammo) { new slot = GetWeaponSlot(weaponid); if(WeaponModel[playerid][slot] == 0) { new query[144]; mysql_format(MySQL_GetHandle(), query, sizeof(query), "INSERT INTO character_weapons (owner_id, weaponid, ammo) VALUES (%d, %d, %d)", Character_GetSQLID(playerid), weaponid, ammo); mysql_tquery(MySQL_GetHandle(), query); } WeaponModel[playerid][slot] = weaponid; WeaponAmmo[playerid][slot] += ammo; GivePlayerWeapon(playerid, weaponid, ammo); } Player_RemoveWeapon(playerid, weaponid) { ResetPlayerWeapons(playerid); for(new i = 0; i < 13; i ++) { if(WeaponModel[playerid][i] != weaponid) GivePlayerWeapon(playerid, WeaponModel[playerid][i], WeaponAmmo[playerid][i]); else { WeaponModel[playerid][i] = 0; WeaponAmmo[playerid][i] = 0; break; } } SetPlayerArmedWeapon(playerid, 0); new query[128]; mysql_format(MySQL_GetHandle(), query, sizeof(query), "DELETE FROM character_weapons WHERE owner_id = %d AND weaponid = %d", Character_GetSQLID(playerid), weaponid); mysql_tquery(MySQL_GetHandle(), query); } CMD:giveweapon(playerid, params[]) { new targetid; if(sscanf(params, "u", targetid)) return SendSyntaxMessage(playerid, "/giveweapon (playerid)"); if(!IsPlayerConnected(targetid)) return SendErrorMessage(playerid, "You specified an invalid player."); if(!IsPlayerNearPlayer(playerid, targetid, 2.0)) return SendErrorMessage(playerid, "You're too far from that player."); new weaponid = GetPlayerWeapon(playerid); new slot = GetWeaponSlot(weaponid); if(weaponid == 0) return SendErrorMessage(playerid, "You're not holding any weapons."); if(WeaponModel[playerid][slot] == 0 || WeaponAmmo[playerid][slot] == 0) return Kick(playerid); Player_GiveWeapon(targetid, WeaponModel[playerid][slot], WeaponAmmo[playerid][slot]); Player_RemoveWeapon(playerid, weaponid); new weaponName[24]; GetWeaponName(weaponid, weaponName, sizeof(weaponName)); SendInfoMessageF(playerid, "You gave %s a %s with %d bullets.", ReturnPlayerRPName(targetid), weaponName, WeaponAmmo[playerid][slot]); SendInfoMessageF(targetid, "%s gave you a %s with %d bullets.", ReturnPlayerRPName(playerid), weaponName, WeaponAmmo[playerid][slot]); return 1; } CMD:dropweapon(playerid, params[]) { new weaponid = GetPlayerWeapon(playerid); new slot = GetWeaponSlot(weaponid); if(weaponid == 0) return SendErrorMessage(playerid, "You're not holding any weapons."); new weaponName[24]; GetWeaponName(weaponid, weaponName, sizeof(weaponName)); Player_RemoveWeapon(playerid, weaponid); SendInfoMessageF(playerid, "You dropped a %s with %d bullets.", weaponName, WeaponAmmo[playerid][slot]); return 1; } stock bool:IsPlayerOwningWeapon(playerid, weaponid) { new slot = GetWeaponSlot(weaponid); if(WeaponModel[playerid][slot] != 0) { return true; } return false; } stock bool:IsPlayerWeaponSlotUsed(playerid, slot) { if(WeaponModel[playerid][slot] != 0) { return true; } return false; } stock GetPlayerWeaponFromSlot(playerid, slot) { return WeaponModel[playerid][slot]; } stock GetPlayerWeaponAmmo(playerid, weaponid) { return WeaponAmmo[playerid][GetWeaponSlot(weaponid)]; }