15.11.2015, 01:57
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.
Aca les dejo los codigos pawn:
Aca les dejo los codigos pawn:
Код:
#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; }