(Duda) їPor quй se guarda asн?
#1

Hola a todos.
Recientemente tuve el siguiente problema de que al desconectarme del GM en cual trabajo no se guarda nada de lo que hice, al conectarme en dicha cuenta aparezco SIEMPRE en una posiciуn igual. No obstante en la cuenta de admin uso no sucede esto, pero cuando cualquier otra persona (o me creo otra cuenta) reloguea, lo mismo.

Estuve viendo y en OnPlayerLoginEx estб lo siguiente:
PHP код:
function OnPlayerLoginEx(playerid)
{
    
TotalLogin++;
    
PLuces[playerid] = 0;
    
CancelSelectTextDraw(playerid);
    
ResetPlayerMoney(playerid);
    
CurrentMoney[playerid] = GetPVarInt(playerid"Cash");
    
HideMenuLogin(playerid);
    if(
Info[playerid][pBanned] >= 2)
    {
        
SetPlayerName(playerid"BannedPlayer");
        
SendClientMessageEx(playeridCOLOR_GRAD1,"Error - [#002]");
        
SendClientMessageEx(playeridCOLOR_WHITE"[INFO]: Usted esta baneado del servidor.");
        
SendClientMessageEx(playeridCOLOR_WHITE"[INFO]: Puedes apelar a desbaneo en la web.");
        
SendClientMessageEx(playeridCOLOR_WHITE"[INFO]: Link de la web: Proximamente.");
        
Expulsar(playerid);
        return 
1;
    }
    
GetPlayerIp(playeridInfo[playerid][pIP], 32);
    
SetPlayerScore(playeridInfo[playerid][pLevel]);
    if(
Info[playerid][pReg] == 0)
    {
        
Info[playerid][pLevel] = 0;
        
Info[playerid][pHealth] = 100.0;
        
Info[playerid][pPos_x] = 924.8110;
        
Info[playerid][pPos_y] = -1646.9933;
        
Info[playerid][pPos_z] = 13.5469;
        
Info[playerid][pInt] = 0;
        
Info[playerid][pChar] = 101;
        
Info[playerid][pPnumber] = 0;
        
Info[playerid][pPhousekey] = INVALID_HOUSE_ID;
        
Info[playerid][pMoneyBank] = 0;
        
SetPlayerSpawn(playerid);
    }
    if(
Info[playerid][pPos_x] == 0.0 && Info[playerid][pPos_y]== 0.0&& Info[playerid][pPos_z]== 0.0){
        
Info[playerid][pPos_x] = 924.8110;
        
Info[playerid][pPos_y] = -1646.9933;
        
Info[playerid][pPos_z] = 13.5469;
    }
    if(
Info[playerid][pAdmin] == 0) { Info[playerid][pGangModerator] = 0Info[playerid][pShopTech] = 0Info[playerid][pBanAppealer] = 0;Info[playerid][pStaffManager] = 0Info[playerid][pFactionModerator] = 0; }
    if(
Info[playerid][pHospital] == 1){ Info[playerid][pHospital] = 0SetPVarInt(playerid"Hospital"1); }
    if(
Info[playerid][pLevel] < || Info[playerid][pAdmin] > || Info[playerid][pHelper] > 0gNewbie[playerid] = 0;
    
SetSpawnInfo(playerid0Info[playerid][pChar], Info[playerid][pPos_x], Info[playerid][pPos_y], Info[playerid][pPos_z], 1.0, -1, -1, -1, -1, -1, -1);
    
gPlayerLogged{playerid} = 1;
    
SpawnPlayer(playerid);
    
ClearChatbox(playerid);
    
SetPlayerColor(playerid,TEAM_HIT_COLOR);
    
SendClientMessageEx(playerid, -1,"Has ingresado correctamente.");
    
SendClientMessageEx(playerid, -1,"Te damos la bienvenida nuevamente.");
    
ShowProgressBarForPlayer(playeridHungryBar[playerid]);
    
SetPlayerFightingStyle(playeridInfo[playerid][pFStyle]);
    
SetPlayerToTeamColor(playerid);
    
LoadPlayerVehicles(playerid);
    return 
1;

Es exactamente todo, y en las posiciones que estбn tipeadas, es exactamente donde aparecen las cuentas luego de reloguear. Pero no entiendo por quй estб eso, y por quй con una cuenta no pasa y con las demas sн :/

En OnPlayerDisconnect me pareciу que lo importante a agregar era eso:
PHP код:
public OnPlayerDisconnect(playeridreason)
{
    
saveHouse(Info[playerid][pPhousekey]);
    
GuardarArmas(playerid);
    
DestroyProgressBar(HungryBar[playerid]);
    new 
plname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridplnamesizeof(plname));
    if(!
strcmp(plname"BannedPlayer"true)) return 1;
    if(!
strcmp(plname"InvalidNick"true)) return 1;
    for(new 
MAX_PLAYERVEHICLESd++)
    {
        new 
Float:xFloat:yFloat:zFloat:anglevw;
        
vw GetPlayerVirtualWorld(playerid);
        
GetVehiclePos(PlayerVehicleInfo[playerid][d][pvId], xyz);
        
GetVehicleZAngle(PlayerVehicleInfo[playerid][d][pvId], angle);
        
PlayerVehicleInfo[playerid][d][pvPosX] = x;
        
PlayerVehicleInfo[playerid][d][pvPosY] = y;
        
PlayerVehicleInfo[playerid][d][pvPosZ] = z;
        
PlayerVehicleInfo[playerid][d][pvPosAngle] = angle;
        
PlayerVehicleInfo[playerid][d][pvVW] = vw;
    }
    if(
playerid == MAX_PLAYERS) return 1
Y por ъltimo en un timer que hay estб lo siguiente:
PHP код:
timer saveAccounts[60000]()
{
    foreach(
Playeri)
    {
        if(
IsPlayerConnectedEx(i))
        {
            if(
Info[i][pSpectating] != -1) break;
            
Info[i][pInt] = GetPlayerInterior(i);
            
Info[i][pVW] = GetPlayerVirtualWorld(i);
            
GetPlayerPos(iInfo[i][pPos_x], Info[i][pPos_y], Info[i][pPos_z]);
            
GetPlayerFacingAngle(iInfo[i][pPos_r]);
            new 
playerip[32];
            
GetPlayerIp(iplayeripsizeof(playerip));
            
format(Info[i][pIP], 32"%s"playerip);
            
GuardarArmasSV();
            
SaveVarPlayer(1,i"Money"GetPVarInt(i"Cash") );
        }
    }

Lo que me extraсa de esto, es que primero no se guardaba, luego un tiempo funcionу bien, y ahora devuelta no.

Me deja patidifuso

Un saludo y gracias de antemano.
Reply
#2

que sistema de guardado usas?
Reply
#3

Quote:
Originally Posted by Eloy
Посмотреть сообщение
que sistema de guardado usas?
Es base ZC.
Reply
#4

up..
Reply
#5

No estoy muy seguro, pero me parece que se estan guardando mal las coordenadas... Mira esta parte:
Код:
    if(Info[playerid][pPos_x] == 0.0 && Info[playerid][pPos_y]== 0.0&& Info[playerid][pPos_z]== 0.0){ 
        Info[playerid][pPos_x] = 924.8110; 
        Info[playerid][pPos_y] = -1646.9933; 
        Info[playerid][pPos_z] = 13.5469; 
    }
Basicamente dice que si la posicion guardada es X = 0.0, Y=0.0, y, Z=0.0 lo envie a las coordenadas de abajo. Por lo tanto, me parece que estas guardando mal la posicion... Probaste poner esta linea:
Код:
GetPlayerPos(playerid, Info[playerid][pPos_x], Info[playerid][pPos_y], Info[playerid][pPos_z]);
En OnPlayerDisconnect?
Reply
#6

Quote:
Originally Posted by Whillyrez
Посмотреть сообщение
No estoy muy seguro, pero me parece que se estan guardando mal las coordenadas... Mira esta parte:
Код:
    if(Info[playerid][pPos_x] == 0.0 && Info[playerid][pPos_y]== 0.0&& Info[playerid][pPos_z]== 0.0){ 
        Info[playerid][pPos_x] = 924.8110; 
        Info[playerid][pPos_y] = -1646.9933; 
        Info[playerid][pPos_z] = 13.5469; 
    }
Basicamente dice que si la posicion guardada es X = 0.0, Y=0.0, y, Z=0.0 lo envie a las coordenadas de abajo. Por lo tanto, me parece que estas guardando mal la posicion... Probaste poner esta linea:
Код:
GetPlayerPos(playerid, Info[playerid][pPos_x], Info[playerid][pPos_y], Info[playerid][pPos_z]);
En OnPlayerDisconnect?
De forma individual no me funcionу. No obstante lo que hice (que de un comienzo mi idea era no hacerlo) fue copiar un cmd de guardado de cuentas que hay y lo coloquй en "OnPlayerDisconnect" y por ahora parece que se solucionу; Y entre las lineas que agreguй estaba esa que me recomendaste.
Reply
#7

La informaciуn suministrada no permite visualizar el momento en el que obtienes los valores del archivo y tampoco el momento en el que se lo asignas.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)