Jump to content
  • 0

pomoc Pomoc - Ukládání pozice a času, už nevím co si počít :/


w.endelin

Dotaz

Mám takový problém, jde o ukládání, používám y_ini, s tím, že mi vždycky fungovalo, jen nevím co jsem teď jako udělal špatně, procházel jsem to všechno asi 100x a furt nevím, kde mám chybu :/ Tak jestli by jsi měl chvilku a kouknul se na to ? :/
 

enum pInfo
{
pPass,
    Float:pPos_x,
    Float:pPos_y,
    Float:pPos_z,
    pSekundy,
    pMinuty,
    pHodiny,
    pDny
}
new PlayerInfo[MAX_PLAYERS][pInfo];

#define Path "/Hraci/%s.ini"
OnPlayerConnect:    
if(fexist(UserPath(playerid)))
    {
        INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
     ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Prihlášení","\n\nProsím, prihlas se, aby si mohl hrát.\n\n\tZadej zde prosím své heslo:","OK","Odejít");
        format(string, sizeof(string), "< Connect > Hrác %s se pripojil na server. (Registrovaný hráč)", GetName(playerid));
        SCMTA(B_BILA, string);
    }
    else
    {
     ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrace San Francisco and near Villages Life","\n\nProsím, zde zadej své heslo, kterým se budeš přihlašovat vždy, když přijdeš na server:","Registrovat","Odejít");
        format(string, sizeof(string), "< Connect > Hrác %s se pripojil na server. (Nový hráč)", GetName(playerid));
        SCMTA(B_BILA, string);
    }


OnPlayerDisconnect:


    new INI:File = INI_Open(UserPath(playerid));
        INI_SetTag(File,"data");
        new

         Float:x,
     Float:y,
        Float:z
        ;
        GetPlayerPos(playerid,x,y,z);
        PlayerInfo[playerid][pPos_x] = x;
        PlayerInfo[playerid][pPos_y] = y;
        PlayerInfo[playerid][pPos_z] = z;
     INI_WriteFloat(File,"Pos_x",PlayerInfo[playerid][pPos_x]);
     INI_WriteFloat(File,"Pos_y",PlayerInfo[playerid][pPos_y]);
     INI_WriteFloat(File,"Pos_z",PlayerInfo[playerid][pPos_z]);
     INI_WriteInt(File,"Sekundy",PlayerInfo[playerid][pSekundy]);
     INI_WriteInt(File,"Minuty",PlayerInfo[playerid][pMinuty]);
     INI_WriteInt(File,"Hodiny",PlayerInfo[playerid][pHodiny]);
     INI_WriteInt(File,"Dny",PlayerInfo[playerid][pDny]);
     INI_Close(File);

Spawn:


    if(OnlineInfo[playerid][Zemrel] == 0)
    {
        if(PlayerInfo[playerid][pPos_x] == 0 && PlayerInfo[playerid][pPos_y] == 0 && PlayerInfo[playerid][pPos_z] == 0)
        {
            SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
            SetPlayerPos(playerid, -2310.2659, 139.6259, 40.6978);
            SetPlayerInterior(playerid, 0);
        }
        else
        {
            SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
            SetPlayerPos(playerid, PlayerInfo[playerid][pPos_x], PlayerInfo[playerid][pPos_y], PlayerInfo[playerid][pPos_z]);
            SetPlayerInterior(playerid, PlayerInfo[playerid][pInterier]);
        }
    }
    else if(OnlineInfo[playerid][Zemrel] == 1)
    {
        SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
        SetPlayerPos(playerid, -2655.0818, 639.1853, 14.4531);
        SetTimerEx("ResetDeath", 200, false, "i", playerid);
        SetPlayerInterior(playerid, PlayerInfo[playerid][pInterier]);
        GivePlayerMoney(playerid, -150);
    }

Response u register:

                            new INI:File = INI_Open(UserPath(playerid));
                            INI_SetTag(File,"data");
                            INI_WriteInt(File,"Password",udb_hash(inputtext));
                          INI_WriteFloat(File,"Pos_x",0);
                          INI_WriteFloat(File,"Pos_y",0);
                          INI_WriteFloat(File,"Pos_z",0);
                            INI_WriteInt(File,"Sekundy",0);
                            INI_WriteInt(File,"Minuty",0);
                            INI_WriteInt(File,"Hodiny",0);
                            INI_WriteInt(File,"Dny",0);
                            INI_Close(File);


Public:

funkce LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Float("Pos_x",PlayerInfo[playerid][pPos_x]);
INI_Float("Pos_y",PlayerInfo[playerid][pPos_y]);
INI_Float("Pos_z",PlayerInfo[playerid][pPos_z]);
    INI_Int("Sekundy",PlayerInfo[playerid][pSekundy]);
INI_Int("Minuty",PlayerInfo[playerid][pMinuty]);
INI_Int("Hodiny",PlayerInfo[playerid][pHodiny]);
INI_Int("Dny",PlayerInfo[playerid][pDny]);

return 1;
}

Jestli se ti do toho nechce, tak to procházet nemusíš  :)

Každopádně jde o to, že připojí-li se Hráč 1, objeví se na pozici, kde by se měl objevit každý hráč, s tím, že když se pohne někam a pak ukončí hru, tak se Hráč 2 objeví na pozici Hráč 1, s tím, že má nahráno tolik minut, jako Hráč 1 a Hrač 2 když se odpojí, Hráč 3 se objeví na pozici Hráč 1 s nahráným časem jako má Hráč 2 :/

Vůbec nevím kde mám chybu ale :/

Edited by iWendelinnek
Link to comment
Share on other sites

3 odpovědí na tuto otázku

Recommended Posts

  • 0

Připiš prosím stock UserPath()

 

stock UserPath(playerid)
{
    new string[128],playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,sizeof(playername));
    format(string,sizeof(string),Path,playername);
    return string;
}
Link to comment
Share on other sites

  • 0

1. Nahráváš údaje pouze pod tagem data... takže, k čemu ho tam přidáváš, když je tam jako jediný?

2. Doporučuji na to nahrávání cest sprintf. Nemusíš se pak obtěžovat s fcí, preprocesorem... stačí jenom ta fce a už to rovnou formátuje cestu souboru hráče.

3. Trochu se děsím, jak to máš přesně(OnPlayerConnect máš uprostřed enumu, tak si nejsem jistý, jestli to není chyba) to nahrávání, ale pro jistotu:

 

forward LoadData(playerid, name[], value[]);
public LoadData(playerid, name[], value[]) {
PS: Můžeš si místo LoadData napsat co chceš. Je to jméno callbacku.

4. Doporučuji ti u toho nahrávání ti vracet false/0.

5. Spíše ne už tolik podstatné, ale když už používáš knihovnu, mohl bys na ty dialogy využít y_dialogs a na to formátování y_va, nebo na ten timer y_timers.

 

6. Každopádně, tady nevidím nějaké extrémní chyby. YSI dělá kraviny jen, když zdrojový kód obsahuje kraviny(nebo i nedorozumění, hlavně { a }), takže chyba může být jinde.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...