| 
 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.
 
 
 
 |