Sistema de carregar armas - Mackor - 05/11/2024
Estou quebrando a cabeça de verdade com esse sistema, é sistema de salvar armas do jogador, vou publicar todo o sistema se alguém conseguir desbugar ótimo. O problema é que salva as armas normalmente nos arquivos, mais na hora de sentar as armas existe um simples detalhe que não encontrei, não senta as armas para o jogador, fiz o sistema e agora estou tendo que refaze-lo para encontrar o bug.
Link: https://pastebin.com/BbvrmTdF
Parte do salvamento:
Código PHP: DOF2_SetInt(file, "Weapon00", PlayerInfo[playerid][pWeapon][0]); DOF2_SetInt(file, "Weapon01", PlayerInfo[playerid][pWeapon][1]); DOF2_SetInt(file, "Weapon02", PlayerInfo[playerid][pWeapon][2]); DOF2_SetInt(file, "Weapon03", PlayerInfo[playerid][pWeapon][3]); DOF2_SetInt(file, "Weapon04", PlayerInfo[playerid][pWeapon][4]); DOF2_SetInt(file, "Weapon05", PlayerInfo[playerid][pWeapon][5]); DOF2_SetInt(file, "Weapon06", PlayerInfo[playerid][pWeapon][6]); DOF2_SetInt(file, "Weapon07", PlayerInfo[playerid][pWeapon][7]); DOF2_SetInt(file, "Weapon08", PlayerInfo[playerid][pWeapon][8]); DOF2_SetInt(file, "Weapon09", PlayerInfo[playerid][pWeapon][9]); DOF2_SetInt(file, "Weapon10", PlayerInfo[playerid][pWeapon][10]); DOF2_SetInt(file, "Weapon11", PlayerInfo[playerid][pWeapon][11]); DOF2_SetInt(file, "Weapon12", PlayerInfo[playerid][pWeapon][12]); DOF2_SetInt(file, "Ammo00", PlayerInfo[playerid][pAmmo][0]); DOF2_SetInt(file, "Ammo01", PlayerInfo[playerid][pAmmo][1]); DOF2_SetInt(file, "Ammo02", PlayerInfo[playerid][pAmmo][2]); DOF2_SetInt(file, "Ammo03", PlayerInfo[playerid][pAmmo][3]); DOF2_SetInt(file, "Ammo04", PlayerInfo[playerid][pAmmo][4]); DOF2_SetInt(file, "Ammo05", PlayerInfo[playerid][pAmmo][5]); DOF2_SetInt(file, "Ammo06", PlayerInfo[playerid][pAmmo][6]); DOF2_SetInt(file, "Ammo07", PlayerInfo[playerid][pAmmo][7]); DOF2_SetInt(file, "Ammo08", PlayerInfo[playerid][pAmmo][8]); DOF2_SetInt(file, "Ammo09", PlayerInfo[playerid][pAmmo][9]); DOF2_SetInt(file, "Ammo10", PlayerInfo[playerid][pAmmo][10]); DOF2_SetInt(file, "Ammo11", PlayerInfo[playerid][pAmmo][11]); DOF2_SetInt(file, "Ammo12", PlayerInfo[playerid][pAmmo][12]); DOF2_SetInt(file, "weaponcode-21", PlayerInfo[playerid][pWeaponcode][21]); DOF2_SetInt(file, "weaponcode-24", PlayerInfo[playerid][pWeaponcode][24]); DOF2_SetInt(file, "weaponcode-25", PlayerInfo[playerid][pWeaponcode][25]); DOF2_SetInt(file, "weaponcode-27", PlayerInfo[playerid][pWeaponcode][27]); DOF2_SetInt(file, "weaponcode-29", PlayerInfo[playerid][pWeaponcode][29]); DOF2_SetInt(file, "weaponcode-30", PlayerInfo[playerid][pWeaponcode][30]); DOF2_SetInt(file, "weaponcode-31", PlayerInfo[playerid][pWeaponcode][31]); DOF2_SetInt(file, "weaponcode-33", PlayerInfo[playerid][pWeaponcode][33]); DOF2_SetInt(file, "weaponcode-34", PlayerInfo[playerid][pWeaponcode][34]);
Parte do carregamento:
Código PHP: PlayerInfo[playerid][pWeapon][0] = DOF2_GetInt(file, "Weapon00"); PlayerInfo[playerid][pWeapon][1] = DOF2_GetInt(file, "Weapon01"); PlayerInfo[playerid][pWeapon][2] = DOF2_GetInt(file, "Weapon02"); PlayerInfo[playerid][pWeapon][3] = DOF2_GetInt(file, "Weapon03"); PlayerInfo[playerid][pWeapon][4] = DOF2_GetInt(file, "Weapon04"); PlayerInfo[playerid][pWeapon][5] = DOF2_GetInt(file, "Weapon05"); PlayerInfo[playerid][pWeapon][6] = DOF2_GetInt(file, "Weapon06"); PlayerInfo[playerid][pWeapon][7] = DOF2_GetInt(file, "Weapon07"); PlayerInfo[playerid][pWeapon][8] = DOF2_GetInt(file, "Weapon08"); PlayerInfo[playerid][pWeapon][9] = DOF2_GetInt(file, "Weapon09"); PlayerInfo[playerid][pWeapon][10] = DOF2_GetInt(file, "Weapon10"); PlayerInfo[playerid][pWeapon][11] = DOF2_GetInt(file, "Weapon11"); PlayerInfo[playerid][pWeapon][12] = DOF2_GetInt(file, "Weapon12"); PlayerInfo[playerid][pAmmo][0] = DOF2_GetInt(file, "Ammo00"); PlayerInfo[playerid][pAmmo][1] = DOF2_GetInt(file, "Ammo01"); PlayerInfo[playerid][pAmmo][2] = DOF2_GetInt(file, "Ammo02"); PlayerInfo[playerid][pAmmo][3] = DOF2_GetInt(file, "Ammo03"); PlayerInfo[playerid][pAmmo][4] = DOF2_GetInt(file, "Ammo04"); PlayerInfo[playerid][pAmmo][5] = DOF2_GetInt(file, "Ammo05"); PlayerInfo[playerid][pAmmo][6] = DOF2_GetInt(file, "Ammo06"); PlayerInfo[playerid][pAmmo][7] = DOF2_GetInt(file, "Ammo07"); PlayerInfo[playerid][pAmmo][8] = DOF2_GetInt(file, "Ammo08"); PlayerInfo[playerid][pAmmo][9] = DOF2_GetInt(file, "Ammo09"); PlayerInfo[playerid][pAmmo][10] = DOF2_GetInt(file, "Ammo10"); PlayerInfo[playerid][pAmmo][11] = DOF2_GetInt(file, "Ammo11"); PlayerInfo[playerid][pAmmo][12] = DOF2_GetInt(file, "Ammo12"); PlayerInfo[playerid][pWeaponcode][21] = DOF2_GetInt(file, "weaponcode-21"); PlayerInfo[playerid][pWeaponcode][24] = DOF2_GetInt(file, "weaponcode-24"); PlayerInfo[playerid][pWeaponcode][25] = DOF2_GetInt(file, "weaponcode-25"); PlayerInfo[playerid][pWeaponcode][27] = DOF2_GetInt(file, "weaponcode-27"); PlayerInfo[playerid][pWeaponcode][29] = DOF2_GetInt(file, "weaponcode-29"); PlayerInfo[playerid][pWeaponcode][30] = DOF2_GetInt(file, "weaponcode-30"); PlayerInfo[playerid][pWeaponcode][31] = DOF2_GetInt(file, "weaponcode-31"); PlayerInfo[playerid][pWeaponcode][33] = DOF2_GetInt(file, "weaponcode-33"); PlayerInfo[playerid][pWeaponcode][34] = DOF2_GetInt(file, "weaponcode-34");
Quando salva a conta salva as armas, esta salvando certinho, antes de salvar esses dados e executado:
Código PHP: forward OnPlayerUpdateWeapons(playerid); public OnPlayerUpdateWeapons(playerid) { if(PlayerPaintballing[playerid] != 0) return 0;
for(new slot = 0; slot < SLOTS_WEAPON; slot++) { new weapons[13][2]; GetPlayerWeaponData(playerid, WEAPON_SLOT:slot, weapons[slot][0], weapons[slot][1]);
if(weapons[slot][1] > 0) PlayerInfo[playerid][pWeapon][slot] = weapons[slot][0];
PlayerInfo[playerid][pAmmo][slot] = weapons[slot][1]; } return 1; }
Ou seja, no OnPlayerUpdateWeapons pega o ID da arma e a quantidade de munições. Até ae estamos indo bem...
Agora precisamos sentar as armas do jogador, código abaixo:
Código PHP: forward SetPlayerWeapons(playerid); public SetPlayerWeapons(playerid) { if(IsPlayerConnected(playerid)) { ResetPlayerWeapons(playerid);
if(IsPlayerLogged(playerid)) { if(PlayerInfo[playerid][pJailed] > 0) return 1;
for(new i = 0; i < SLOTS_WEAPON; i++) GivePlayerWeaponEx(playerid, PlayerInfo[playerid][pWeapon][i], PlayerInfo[playerid][pAmmo][i], PlayerInfo[playerid][pWeaponcode][PlayerInfo[playerid][pWeapon][i]]); if(Gangs(playerid)) GivePlayerWeaponEx(playerid, 5, 1, gTeam[playerid]);
if(gTeam[playerid] == 9) GivePlayerWeaponEx(playerid, 43, 100, gTeam[playerid]); } } return 1; }
SetPlayerWeapons é chamado na hora que o jogador dá o spawn, depois de logar...
Agora vamos para GivePlayerWeaponEx:
Código PHP: stock GivePlayerWeaponEx(playerid, weaponid, ammo, code) { if(IsPlayerLogged(playerid)) { new weapon[4], A;
if(PlayerInfo[playerid][pLevel] == 1 && gTeam[playerid] == 0) return 0; if((weaponid == 35 || weaponid == 36) && ammo > 1) ammo = 1; else if(ammo > 500) ammo = 500;
if(weaponid == 23 || weaponid == 22 || weaponid == 24 || weaponid == 29 || weaponid == 28) { GetPlayerWeaponData(playerid, 2, weapon[0], A); GetPlayerWeaponData(playerid, 4, weapon[1], A); if(weapon[0] > 0) RemovePlayerWeaponEx(playerid, weapon[0]); if(weapon[1] > 0) RemovePlayerWeaponEx(playerid, weapon[1]); } else if(weaponid == 25 || weaponid == 27 || weaponid == 30 || weaponid == 31 || weaponid == 33 || weaponid == 34 || weaponid == 35 || weaponid == 36 || weaponid == 37) { GetPlayerWeaponData(playerid, 3, weapon[0], A); GetPlayerWeaponData(playerid, 5, weapon[1], A); GetPlayerWeaponData(playerid, 6, weapon[2], A); GetPlayerWeaponData(playerid, 7, weapon[3], A); if(weapon[0] > 0) RemovePlayerWeaponEx(playerid, weapon[0]); if(weapon[1] > 0) RemovePlayerWeaponEx(playerid, weapon[1]); if(weapon[2] > 0) RemovePlayerWeaponEx(playerid, weapon[2]); if(weapon[3] > 0) RemovePlayerWeaponEx(playerid, weapon[3]); } else if(weaponid == 39) { GetPlayerWeaponData(playerid, 8, weapon[0], A); if(weapon[0] > 0) RemovePlayerWeaponEx(playerid, weapon[0]); }
GivePlayerWeapon(playerid, weaponid, ammo);
new slot = WeaponsSlot[weaponid]; PlayerInfo[playerid][pWeapon][slot] = weaponid; PlayerInfo[playerid][pAmmo][slot] = ammo; PlayerInfo[playerid][pWeaponcode][weaponid] = code; } return 1; }
Mais outras funções extras... Essas não é tão importante mais vou publicar o sistema por inteiro que criei.
Código PHP: forward ResetPlayerWeaponsEx(playerid); public ResetPlayerWeaponsEx(playerid) { ResetPlayerWeapons(playerid);
for(new slot = 0; slot < SLOTS_WEAPON; slot++) { PlayerInfo[playerid][pWeapon][slot] = 0; PlayerInfo[playerid][pAmmo][slot] = 0; }
for(new weapon = 0; weapon < 47; ++weapon) PlayerInfo[playerid][pWeaponcode][weapon] = 0;
return 1; }
forward SetPlayerAmmoEx(playerid, weaponslot, ammo, code); public SetPlayerAmmoEx(playerid, weaponslot, ammo, code) { PlayerInfo[playerid][pWeapon][WeaponsSlot[weaponslot]] = weaponslot; PlayerInfo[playerid][pAmmo][WeaponsSlot[weaponslot]] = ammo; PlayerInfo[playerid][pWeaponcode][weaponslot] = code;
SetPlayerWeapons(playerid); return 1; }
forward RemovePlayerWeaponEx(playerid, weaponid); public RemovePlayerWeaponEx(playerid, weaponid) { PlayerInfo[playerid][pWeapon][WeaponsSlot[weaponid]] = 0; PlayerInfo[playerid][pAmmo][WeaponsSlot[weaponid]] = 0; PlayerInfo[playerid][pWeaponcode][weaponid] = 0;
SetPlayerWeapons(playerid); return 1; }
forward CheckWeaponsCheat(playerid); public CheckWeaponsCheat(playerid) { if(PlayerPaintballing[playerid] != 0) return 0; for(new slot = 0; slot < SLOTS_WEAPON; slot++) { new weapon, ammo; GetPlayerWeaponData(playerid, WEAPON_SLOT:slot, weapon, ammo);
if(ammo > 0) { if(weapon == 1 || weapon == 46) continue;
if(weapon != PlayerInfo[playerid][pWeapon][slot]) { RemovePlayerWeaponEx(playerid, weapon); return 1; } } } return 0; }
O problema desse código é que não senta a arma do jogador, já otimizei para openmp o código adicionando WEAPON_SLOT: e nada.
RE: Sistema de carregar armas - BitSain - 05/11/2024
Faça uma depuração (debug) em seu código nas partes necessitadas (ponto principal, que é o carregamento).
Leia um pouco sobre um Tutorial/Guia que eu fiz anteriormente sobre isso
*
As armas estão sendo carregadas do mesmo arquivo?
A ordem de chamada das funções está correta?
As armas não são carregadas do arquivo, ou pelo o que entendi não estão sendo setadas pelo GivePlayerWeaponEx?
RE: Sistema de carregar armas - Mackor - 06/11/2024
(05/11/2024 20:25)BitSain Escreveu: Faça uma depuração (debug) em seu código nas partes necessitadas (ponto principal, que é o carregamento).
Leia um pouco sobre um Tutorial/Guia que eu fiz anteriormente sobre isso
*
As armas estão sendo carregadas do mesmo arquivo?
A ordem de chamada das funções está correta?
As armas não são carregadas do arquivo, ou pelo o que entendi não estão sendo setadas pelo GivePlayerWeaponEx?
Fiz um debug e acontece que nesse debug está 0 a munição. Crio uma M4 com 150 de munição, no scriptfiles está os 150 de munição, até eu entrar no servidor novamente, tudo ocorre bem, ao entrar na hora de criar a arma, o arquivo tah definido como 0.
As armas estão sendo carregadas do mesmo arquivo? Sim.
|