Armas somem em meu servidor... -
Ley - 25.08.2012
Olб.
Eu possuo um sistema de salvamento de armas, que elas sгo salvas em um arquivo .cfg. Mas do mesmo jeito elas somem quando o player reloga no servidor por exemplo.
Um amigo disse a mim que alguйm o ajudou fazendo uma stock, alguйm poderia me ajudar?
Grato.
Re: Armas somem em meu servidor... -
s4kuL - 25.08.2012
tenta salvar em documento de texto, .ini, etc, acho que isso resolverб.
Re: Armas somem em meu servidor... -
Ley - 25.08.2012
O cуdigo й:
pawn Код:
case 1: // M4A1
      {
        if(GetPlayerMoneyEx(playerid) < 21000)
        {
          SendClientMessage(playerid, COR_VERMELHO, "(ERRO) Vocк precisa ter R$21000 para comprar uma M4A1!");
          TogglePlayerControllable(playerid, 1);
          return 1;
        }
        if(GetPlayerWeapon(playerid) == 31)
        {
          SendClientMessage(playerid, COR_VERMELHO, "(ERRO) Vocк jб possui uma AK47!");
          TogglePlayerControllable(playerid, 1);
          return 1;
        }
        SendClientMessage(playerid, -1, str);
        SendClientMessage(playerid, 0xF7D395AA, "(INFO) Vocк comprou uma M4A1 [R$21000]");
        GivePlayerWeapon(playerid, 31, 1500);
        GivePlayerMoneyEx(playerid, -21000);
        TogglePlayerControllable(playerid, 1);
      }
A define;
pawn Код:
#define WEAPON_FILE Â "armas.cfg"
E as stock:
pawn Код:
stock LoadWeapons(playerid)
{
  new File:arquivo, tmp[256], fname[30], pname[30], arma[13], municao[13];
  arquivo = fopen(WEAPON_FILE, io_read);
  GetPlayerName(playerid, pname, sizeof pname);
  while(fread(arquivo, tmp, sizeof tmp, false))
  {
    new off[256], index;
    off = strtok(tmp, index);
    strmid(fname, off, 0, strlen(off));
    if(strcmp(pname, fname, false) != 0)continue;
    for(new a; a < 12; a++)arma[a] = strval(strtok(tmp, index));
    for(new m; m < 12; m++)municao[m] = strval(strtok(tmp, index));
    for(new i; i < 12; i++)
    {
      if(arma[i] > 0 && arma[i] < 47 && municao[i] > 0)GivePlayerWeapon(playerid, arma[i], municao[i]);
    }
  }
  fclose(arquivo);
  return 1;
}
stock SaveWeapons(playerid)
{
  new File:arquivo, File:ftmp, tmp[256], fname[30], pname[30], arma[13], municao[13];
  arquivo = fopen(WEAPON_FILE, io_readwrite);
  ftmp = fopen(WEAPON_FILE#.tmp, io_write);
  GetPlayerName(playerid, pname, sizeof pname);
  while(fread(arquivo, tmp, sizeof tmp, false))
  {
    new off[256], index;
    off = strtok(tmp, index);
    strmid(fname, off, 0, strlen(off));
    if(!strcmp(pname, fname, false))continue;
    format(tmp, sizeof tmp, "%s", tmp);
    fwrite(ftmp, tmp);
  }
  fclose(arquivo);
  fclose(ftmp);
  fremove(WEAPON_FILE);
  arquivo = fopen(WEAPON_FILE, io_write);
  ftmp = fopen(WEAPON_FILE#.tmp, io_read);
  while(fread(ftmp, tmp))
  {
    format(tmp, sizeof tmp, "%s", tmp);
    fwrite(arquivo, tmp);
  }
  fclose(ftmp);
  fremove(WEAPON_FILE#.tmp);
  for(new i; i < 12; i++)GetPlayerWeaponData(playerid, i+1, arma[i+1], municao[i+1]);
  format(tmp, sizeof tmp, "%s ", pname);
  for(new a; a < 24; a++)
  {
    new s[10];
    if(a < 12)
    {
      format(s, sizeof s, "%d ", arma[a]);
      strcat(tmp, s);
    } else {
      format(s, sizeof s, "%d ", municao[a-12]);
      strcat(tmp, s);
    }
  }
  strcat(tmp, "\r\n");
  fwrite(arquivo, tmp);
  fclose(arquivo);
  return 1;
}
Help?
Re: Armas somem em meu servidor... -
Ley - 25.08.2012
UP...
Re: Armas somem em meu servidor... -
Adonay - 25.08.2012
coloca no OnPlayerLogin:
Код:
LoadWeapons(playerid); //Vai carregar as armas quando ele logar.
e no OnPlayerUpdateEx (Ou a que vocк use para salvamento da conta) vocк coloca:
Код:
SaveWeapons(playerid);
Re: Armas somem em meu servidor... -
Ley - 26.08.2012
Mas se eu por
em OnPlayerUpdate irб ficar salvando as armas de todos os players em mile-segundos acredito eu... Isso causarб um lag enorme em meu servidor.
Re: Armas somem em meu servidor... -
Adonay - 27.08.2012
Sim, mas й no Salvamento quando o player se desconecta... nesse caso й o OnPlayerUpdateEx (No GF) e so й executado quando o player se desconecta e algumas outras exceзхes... verifica qual й essa public e coloca:
Код:
SaveWeapons(playerid);
Nгo causara lag, justamente porque й executado somente quando й necessбrio.