Buenas tengo un pequeсo problema con un sistema de inventario que estoy editando el tema es que todo anda bien al momento de guardar/sacar un item,pero el problema se genera que guarda tu archivo en una carpera llamada inventario pero tu pones /inventario y luego /guardararma 1 guardas tu arma,y los otros usuarios pueden ver tu arma e retirarla,pero luego tu tratas de retirar esa arma y se bugea y tampoco puedes volver a meter un arma en ese slot.
Код:
#include a_samp
#include zcmd
#include sscanf2
#include dof2
enum pInfo
{
pArma01,
pArma02,
pArma03,
pArma04,
pBalas01,
pBalas02,
pBalas03,
pBalas04
}
new status[MAX_PLAYERS][pInfo];
public OnFilterScriptExit(){DOF2_Exit();}
public OnPlayerConnect(playerid){CarregarBconta(playerid);return 1;}
public OnPlayerDisconnect(playerid){SalvarContas(playerid);return 1;}
CMD:inventario(playerid)
{
new Arma1[128];
new Arma2[128];
new Arma3[128];
new Arma4[128];
new armaBala[4];
switch(status[pInfo][pArma01])
{
case 3: Arma1 = "Porra";case 2: Arma1 = "Palo De Golf";case 4: Arma1 = "Cuchillo";case 5: Arma1 = "Bate De Beisbol";
case 6: Arma1 = "Pala";case 9: Arma1 = "Motosierra";case 7: Arma1 = "Palo De Billar";case 8: Arma1 = "Katana";
case 14: Arma1 = "Flores";case 10: Arma1 = "Consolador Morado";case 16: Arma1 = "Granadas";case 17: Arma1 = "Granadas De Humo";
case 18: Arma1 = "Molotovs";case 11: Arma1 = "Consolador Pequeсo";case 22: Arma1 = "9MM";case 23: Arma1 = "9MM Silenciada";
case 24: Arma1 = "Deser-Eagle";case 12: Arma1 = "Consolador Mediano";case 25: Arma1 = "Escopeta";case 29: Arma1 = "MP5";
case 30: Arma1 = "AK47";case 13: Arma1 = "Consolador Pequeсo Negro";case 31: Arma1 = "M4";case 33: Arma1 = "Rifle";
case 34: Arma1 = "Sniper";case 15: Arma1 = "Fierro";case 37: Arma1 = "Lanza Llamas";case 41: Arma1 = "Spray";
case 42: Arma1 = "Extintor";case 26: Arma1 = "Escopeta Recortada";case 43: Arma1 = "Camara";case 46: Arma1 = "Paracaidas";
case 27: Arma1 = "Escopeta De Combate";case 28: Arma1 = "Uzi";case 32: Arma1 = "Tec-9";case 35: Arma1 = "RPG-7";case 36: Arma1 = "Heat Seaker";
case 38: Arma1 = "Mini-Gun";case 39: Arma1 = "Explosivos";case 40: Arma1 = "Detonador";
}
switch(status[pInfo][pArma02])
{
case 3: Arma2 = "Porra";case 2: Arma2 = "Palo De Golf";case 4: Arma2 = "Cuchillo";case 5: Arma2 = "Bate De Beisbol";
case 6: Arma2 = "Pala";case 9: Arma2 = "Motosierra";case 7: Arma2 = "Palo De Billar";case 8: Arma2 = "Katana";
case 14: Arma2 = "Flores";case 10: Arma2 = "Consolador Morado";case 16: Arma2 = "Granadas";case 17: Arma2 = "Granadas De Humo";
case 18: Arma2 = "Molotovs";case 11: Arma2 = "Consolador Pequeсo";case 22: Arma2 = "9MM";case 23: Arma2 = "9MM Silenciada";
case 24: Arma2 = "Deser-Eagle";case 12: Arma2 = "Consolador Mediano";case 25: Arma2 = "Escopeta";case 29: Arma2 = "MP5";
case 30: Arma2 = "AK47";case 13: Arma2 = "Consolador Pequeсo Negro";case 31: Arma2 = "M4";case 33: Arma2 = "Rifle";
case 34: Arma2 = "Sniper";case 15: Arma2 = "Fierro";case 37: Arma2 = "Lanza Llamas";case 41: Arma2 = "Spray";
case 42: Arma2 = "Extintor";case 26: Arma2 = "Escopeta Recortada";case 43: Arma2 = "Camara";case 46: Arma2 = "Paracaidas";
case 27: Arma2 = "Escopeta De Combate";case 28: Arma2 = "Uzi";case 32: Arma2 = "Tec-9";case 35: Arma2 = "RPG-7";case 36: Arma2 = "Heat Seaker";
case 38: Arma2 = "Mini-Gun";case 39: Arma2 = "Explosivos";case 40: Arma2 = "Detonador";
}
switch(status[pInfo][pArma03])
{
case 3: Arma3 = "Porra";case 2: Arma3 = "Palo De Golf";case 4: Arma3 = "Cuchillo";case 5: Arma3 = "Bate De Beisbol";
case 6: Arma3 = "Pala";case 9: Arma3 = "Motosierra";case 7: Arma3 = "Palo De Billar";case 8: Arma3 = "Katana";
case 14: Arma3 = "Flores";case 10: Arma3 = "Consolador Morado";case 16: Arma3 = "Granadas";case 17: Arma3 = "Granadas De Humo";
case 18: Arma3 = "Molotovs";case 11: Arma3 = "Consolador Pequeсo";case 22: Arma3 = "9MM";case 23: Arma3 = "9MM Silenciada";
case 24: Arma3 = "Deser-Eagle";case 12: Arma3 = "Consolador Mediano";case 25: Arma3 = "Escopeta";case 29: Arma3 = "MP5";
case 30: Arma3 = "AK47";case 13: Arma3 = "Consolador Pequeсo Negro";case 31: Arma3 = "M4";case 33: Arma3 = "Rifle";
case 34: Arma3 = "Sniper";case 15: Arma3 = "Fierro";case 37: Arma3 = "Lanza Llamas";case 41: Arma3 = "Spray";
case 42: Arma3 = "Extintor";case 26: Arma3 = "Escopeta Recortada";case 43: Arma3 = "Camara";case 46: Arma3 = "Paracaidas";
case 27: Arma3 = "Escopeta De Combate";case 28: Arma3 = "Uzi";case 32: Arma3 = "Tec-9";case 35: Arma3 = "RPG-7";case 36: Arma3 = "Heat Seaker";
case 38: Arma3 = "Mini-Gun";case 39: Arma3 = "Explosivos";case 40: Arma3 = "Detonador";
}
switch(status[pInfo][pArma04])
{
case 3: Arma4 = "Porra";case 2: Arma4 = "Palo De Golf";case 4: Arma4 = "Cuchillo";case 5: Arma4 = "Bate De Beisbol";
case 6: Arma4 = "Pala";case 9: Arma4 = "Motosierra";case 7: Arma4 = "Palo De Billar";case 8: Arma4 = "Katana";
case 14: Arma4 = "Flores";case 10: Arma4 = "Consolador Morado";case 16: Arma4 = "Granadas";case 17: Arma4 = "Granadas De Humo";
case 18: Arma4 = "Molotovs";case 11: Arma4 = "Consolador Pequeсo";case 22: Arma4 = "9MM";case 23: Arma4 = "9MM Silenciada";
case 24: Arma4 = "Deser-Eagle";case 12: Arma4 = "Consolador Mediano";case 25: Arma4 = "Escopeta";case 29: Arma4 = "MP5";
case 30: Arma4 = "AK47";case 13: Arma4 = "Consolador Pequeсo Negro";case 31: Arma4 = "M4";case 33: Arma4 = "Rifle";
case 34: Arma4 = "Sniper";case 15: Arma4 = "Fierro";case 37: Arma4 = "Lanza LLamas";case 41: Arma4 = "spray";
case 42: Arma4 = "Extintor";case 26: Arma4 = "Escopeta Recortada";case 43: Arma4 = "Camara";case 46: Arma4 = "Paracaidas";
case 27: Arma4 = "Escopeta De Combate";case 28: Arma4 = "Uzi";case 32: Arma4 = "Tec-9";case 35: Arma4 = "RPG-7";case 36: Arma4 = "Heat Seaker";
case 38: Arma4 = "Mini-Gun";case 39: Arma4 = "Explosivos";case 40: Arma4 = "Detonador";
}
armaBala[0] = status[pInfo][pBalas01];
armaBala[1] = status[pInfo][pBalas02];
armaBala[2] = status[pInfo][pBalas03];
armaBala[3] = status[pInfo][pBalas04];
new _string[128];
format(_string, 128, "[INV]{00FF00} SLOT 1 - Arma: {FF0000}%s {FFFFFF}|{00FF00} Municiуn: {FF0000}%d",Arma1, armaBala[0]);
SendClientMessage(playerid, -1, _string);
format(_string, 128, "[INV]{00FF00} SLOT 2 - Arma: {FF0000}%s {FFFFFF}|{00FF00} Municiуn: {FF0000}%d",Arma2, armaBala[1]);
SendClientMessage(playerid, -1, _string);
format(_string, 128, "[INV]{00FF00} SLOT 3 - Arma: {FF0000}%s {FFFFFF}|{00FF00} Municiуn: {FF0000}%d",Arma3, armaBala[2]);
SendClientMessage(playerid, -1, _string);
format(_string, 128, "[INV]{00FF00} SLOT 4 - Arma: {FF0000}%s {FFFFFF}|{00FF00} Municiуn: {FF0000}%d",Arma4, armaBala[3]);
SendClientMessage(playerid, -1, _string);
return true;
}
CMD:guardararma(playerid, params[])
{
new _string[128];
new SLOT;
if(sscanf(params,"i",SLOT)) return SendClientMessage(playerid, -1, "{FF0000}[INV-Modo] {00FF00}/guardararma {FF0000}[SLOT]");
{
new
pMinhaArma,
pMinhasBalas;
if(!GetPlayerWeapon(playerid)) return SendClientMessage(playerid, -1, "{FF0000}No tienes un arma !");
pMinhaArma = GetPlayerWeapon(playerid);
pMinhasBalas = GetPlayerAmmo(playerid);
switch(SLOT)
{
case 1:
{
if(status[pInfo][pArma01] > 0) return SendClientMessage(playerid, -1, "{FF0000}Ese slot esta ocupado.");
status[pInfo][pArma01] = pMinhaArma;
status[pInfo][pBalas01] = pMinhasBalas;
format(_string, 128, "{00FF00}Has colocado un arma en el slot 1.");
SendClientMessage(playerid, -1, _string);
RemovePlayerWeapon(playerid, GetPlayerWeapon(playerid));
return 1;
}
case 2:
{
if(status[pInfo][pArma02] > 0) return SendClientMessage(playerid, -1, "{FF0000}Ese slot esta ocupado.");
status[pInfo][pArma02] = pMinhaArma;
status[pInfo][pBalas02] = pMinhasBalas;
format(_string, 128, "{00FF00}Has colocado un arma en el slot 2.");
SendClientMessage(playerid, -1, _string);
RemovePlayerWeapon(playerid, GetPlayerWeapon(playerid));
return 1;
}
case 3:
{
if(status[pInfo][pArma03] > 0) return SendClientMessage(playerid, -1, "{FF0000}Ese slot esta ocupado.");
status[pInfo][pArma03] = pMinhaArma;
status[pInfo][pBalas03] = pMinhasBalas;
format(_string, 128, "{00FF00}Has colocado un arma en el slot 3.");
SendClientMessage(playerid, -1, _string);
RemovePlayerWeapon(playerid, GetPlayerWeapon(playerid));
return 1;
}
case 4:
{
if(status[pInfo][pArma04] > 0) return SendClientMessage(playerid, -1, "{FF0000}Ese slot esta ocupado.");
status[pInfo][pArma04] = pMinhaArma;
status[pInfo][pBalas04] = pMinhasBalas;
format(_string, 128, "{00FF00}Has colocado un arma en el slot 4.");
SendClientMessage(playerid, -1, _string);
RemovePlayerWeapon(playerid, GetPlayerWeapon(playerid));
return 1;
}
default: SendClientMessage(playerid, -1, "Slots [1-4].");
}
}
return 1;
}
CMD:retirararma(playerid, params[])
{
new _string[128];
new SLOT;
if(sscanf(params,"i",SLOT)) return SendClientMessage(playerid, -1, "{FF0000}[INV-Modo] {00FF00}/retirararma {FF0000}[SLOT]");
{
switch(SLOT)
{
case 1:
{
if(status[pInfo][pArma01] == 0) return SendClientMessage(playerid, -1, "{FF0000}El slot esta vacio.");
GivePlayerWeapon(playerid, status[pInfo][pArma01], status[pInfo][pBalas01]);
status[pInfo][pArma01] = 0;
status[pInfo][pBalas01] = 0;
format(_string, 128, "{00FF00}Has retirado un arma del slot 1!");
SendClientMessage(playerid, -1, _string);
return 1;
}
case 2:
{
if(status[pInfo][pArma01] == 0) return SendClientMessage(playerid, -1, "{FF0000}El slot esta vacio.");
GivePlayerWeapon(playerid, status[pInfo][pArma02], status[pInfo][pBalas02]);
status[pInfo][pArma02] = 0;
status[pInfo][pBalas02] = 0;
format(_string, 128, "{00FF00}Has retirado un arma del slot 2!");
SendClientMessage(playerid, -1, _string);
return 1;
}
case 3:
{
if(status[pInfo][pArma03] == 0) return SendClientMessage(playerid, -1, "{FF0000}El slot esta vacio.");
GivePlayerWeapon(playerid, status[pInfo][pArma03], status[pInfo][pBalas03]);
status[pInfo][pArma03] = 0;
status[pInfo][pBalas03] = 0;
format(_string, 128, "{00FF00}Has retirado un arma del slot 3!");
SendClientMessage(playerid, -1, _string);
return 1;
}
case 4:
{
if(status[pInfo][pArma04] == 0) return SendClientMessage(playerid, -1, "{FF0000}El slot esta vacio.");
GivePlayerWeapon(playerid, status[pInfo][pArma04], status[pInfo][pBalas04]);
status[pInfo][pArma04] = 0;
status[pInfo][pBalas04] = 0;
format(_string, 128, "{00FF00}Has retirado un arma del slot 4!");
SendClientMessage(playerid, -1, _string);
return 1;
}
default: SendClientMessage(playerid, -1, "Slots [1-4].");
}
}
return 1;
}
forward RemovePlayerWeapon(playerid, weaponid);
public RemovePlayerWeapon(playerid, weaponid)
{
if(!IsPlayerConnected(playerid) || weaponid < 0 || weaponid > 50) return;
new saveweapon[13], saveammo[13];
for(new slot = 0; slot < 13; slot++)
GetPlayerWeaponData(playerid, slot, saveweapon[slot], saveammo[slot]);
ResetPlayerWeapons(playerid);
for(new slot; slot < 13; slot++)
{
if(saveweapon[slot] == weaponid || saveammo[slot] == 0)
continue;
GivePlayerWeapon(playerid, saveweapon[slot], saveammo[slot]);
}
GivePlayerWeapon(playerid, 0, 1);
}
stock CarregarBconta(playerid)
{
status[pInfo][pArma01] = DOF2_GetInt(PlayersB(playerid), "pArma01");
status[pInfo][pArma02] = DOF2_GetInt(PlayersB(playerid), "pArma02");
status[pInfo][pArma03] = DOF2_GetInt(PlayersB(playerid), "pArma03");
status[pInfo][pArma04] = DOF2_GetInt(PlayersB(playerid), "pArma04");
status[pInfo][pBalas01] = DOF2_GetInt(PlayersB(playerid), "pBalas01");
status[pInfo][pBalas02] = DOF2_GetInt(PlayersB(playerid), "pBalas02");
status[pInfo][pBalas03] = DOF2_GetInt(PlayersB(playerid), "pBalas03");
status[pInfo][pBalas04] = DOF2_GetInt(PlayersB(playerid), "pBalas04");
return 1;
}
stock PlayersB(playerid)
{
new arquivo[40], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, 32);
format(arquivo, 40, "Inventario/%s.ini", name);
return arquivo;
}
stock SalvarContas(playerid)
{
if(!DOF2_FileExists(PlayersB(playerid))) DOF2_CreateFile(PlayersB(playerid));
else
{
DOF2_SetInt(PlayersB(playerid), "pArma01", status[pInfo][pArma01]);
DOF2_SetInt(PlayersB(playerid), "pArma02", status[pInfo][pArma02]);
DOF2_SetInt(PlayersB(playerid), "pArma03", status[pInfo][pArma03]);
DOF2_SetInt(PlayersB(playerid), "pArma04", status[pInfo][pArma04]);
DOF2_SetInt(PlayersB(playerid), "pBalas01", status[pInfo][pBalas01]);
DOF2_SetInt(PlayersB(playerid), "pBalas02", status[pInfo][pBalas02]);
DOF2_SetInt(PlayersB(playerid), "pBalas03", status[pInfo][pBalas03]);
DOF2_SetInt(PlayersB(playerid), "pBalas04", status[pInfo][pBalas04]);
DOF2_SaveFile();
}
return 1;
}