Jump to content
  • 0

pomoc Načítanie zbraní


MrShoTys74

Dotaz

Zdravim Chalani vedel by mi niekto pomôct s načítanim zbrani ? .. ukladanie mi funguje ale nechce mi ich načítať ked sa spawnem.

 

Spoiler

enum pInfo
{
    pPass,
    pCash,
    pAdmin,
    pKills,
    pDeaths,
    pWanted,
    pSkin,
    pVodickyB,
    pVodickyC,
    pZbran0,
    pZbran0naboje,
    pZbran1,
    pZbran1naboje,
    pZbran2,
    pZbran2naboje

}

 

 

Spoiler

public LoadUser_data(playerid,name[],value[])
{
    INI_Int("Password",PlayerInfo[playerid][pPass]);
    INI_Int("Cash",PlayerInfo[playerid][pCash]);
    INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
    INI_Int("Kills",PlayerInfo[playerid][pKills]);
    INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
    INI_Int("Wanted",PlayerInfo[playerid][pWanted]);
    INI_Int("Skin",PlayerInfo[playerid][pSkin]);
    INI_Int("VodickyB",PlayerInfo[playerid][pVodickyB]);
    INI_Int("VodickyC",PlayerInfo[playerid][pVodickyC]);
    INI_Int("pZbran1",PlayerInfo[playerid][pZbran1]);
    INI_Int("pZbran1naboje",PlayerInfo[playerid][pZbran1naboje]);
    INI_Int("pZbran0",PlayerInfo[playerid][pZbran0]);
    INI_Int("pZbran0naboje",PlayerInfo[playerid][pZbran0naboje]);
    INI_Int("pZbran2",PlayerInfo[playerid][pZbran2]);
    INI_Int("pZbran2naboje",PlayerInfo[playerid][pZbran2naboje]);

    
    INI_Int("pSekundy",pSekundy[playerid]);
    INI_Int("pMinuty",pMinuty[playerid]);
    INI_Int("pHodiny",pHodiny[playerid]);

    return 1;
}

 

v OnPlayerConnect resetujem dáta ak sa prihlási nový uživatel..

Spoiler

    PlayerInfo[playerid][pDeaths] = 0;
    PlayerInfo[playerid][pAdmin] = 0;
    PlayerInfo[playerid][pCash] = 0;
    PlayerInfo[playerid][pKills] = 0;
    PlayerInfo[playerid][pSkin] = 0;
    PlayerInfo[playerid][pWanted] = 0;
    PlayerInfo[playerid][pVodickyB] = 0;
    PlayerInfo[playerid][pVodickyC] = 0;
    PlayerInfo[playerid][pZbran0] = 0;
    PlayerInfo[playerid][pZbran0naboje] = 0;
    PlayerInfo[playerid][pZbran1] = 0;
    PlayerInfo[playerid][pZbran1naboje] = 0;
    PlayerInfo[playerid][pZbran2] = 0;
    PlayerInfo[playerid][pZbran2naboje] = 0;

    pSekundy[playerid] = 0;
    pMinuty[playerid] = 0;
    pHodiny[playerid] = 0;

v OnPlayerSpawn to mam takto skúsal som to aj inak aj cez podmienku či už existuje ale stale mi to nešlo.. (Deathreset mám ked zomrie aby sa vyresetovali zbrane lebo zozaciatku mi to išlo ale pri umrti mi zbrane stale čítali zo súboru že ich stale mam)

Spoiler

public OnPlayerSpawn(playerid)
{
    if(Deathreset[playerid] == 1)
{
    PlayerInfo[playerid][pZbran0] = 0;
    PlayerInfo[playerid][pZbran0naboje] = 0;
    PlayerInfo[playerid][pZbran1] = 0;
    PlayerInfo[playerid][pZbran1naboje] = 0;
    PlayerInfo[playerid][pZbran2] = 0;
    PlayerInfo[playerid][pZbran2naboje] = 0;
}
    new rand = random(sizeof(RandomSpawn));
    SetPlayerPos(playerid, RandomSpawn[rand][0], RandomSpawn[rand][1], RandomSpawn[rand][2]);
    SetPlayerFacingAngle(playerid, RandomSpawn[rand][3]);
    SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);

    GivePlayerWeapon(playerid, PlayerInfo[playerid][pZbran0],PlayerInfo[playerid][pZbran0]);

    GivePlayerWeapon(playerid, PlayerInfo[playerid][pZbran1],PlayerInfo[playerid][pZbran1]);
    GivePlayerWeapon(playerid, PlayerInfo[playerid][pZbran2],PlayerInfo[playerid][pZbran2]);

    
    PlayerTextDrawShow(playerid, PlayerTS[playerid][0]);
    PlayerTextDrawShow(playerid, PlayerTS[playerid][1]);
    PlayerTextDrawDestroy(playerid, PlayerTD[playerid][0]);
    PlayerTextDrawDestroy(playerid, PlayerTD[playerid][1]);
    return 1;
}

 

OnPlayerDisconnect

 

Spoiler

public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open(UserPath(playerid));
    INI_SetTag(File,"data");
    INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
    INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
    INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
    INI_WriteInt(File,"Wanted",PlayerInfo[playerid][pWanted]);
    INI_WriteInt(File,"Skin",PlayerInfo[playerid][pSkin]);
    INI_WriteInt(File,"VodickyB",PlayerInfo[playerid][pVodickyB]);
    INI_WriteInt(File,"VodickyC",PlayerInfo[playerid][pVodickyC]);
    
    GetPlayerWeaponData(playerid, 0, PlayerInfo[playerid][pZbran0], PlayerInfo[playerid][pZbran0naboje]);
    INI_WriteInt(File,"Zbran0",PlayerInfo[playerid][pZbran0]);
    INI_WriteInt(File,"Zbran0naboje",PlayerInfo[playerid][pZbran0naboje]);
    
    GetPlayerWeaponData(playerid, 1, PlayerInfo[playerid][pZbran1], PlayerInfo[playerid][pZbran1naboje]);
    INI_WriteInt(File,"Zbran1",PlayerInfo[playerid][pZbran1]);
    INI_WriteInt(File,"Zbran1naboje",PlayerInfo[playerid][pZbran1naboje]);
    
    GetPlayerWeaponData(playerid, 2, PlayerInfo[playerid][pZbran2], PlayerInfo[playerid][pZbran2naboje]);
    INI_WriteInt(File,"Zbran2",PlayerInfo[playerid][pZbran2]);
    INI_WriteInt(File,"Zbran2naboje",PlayerInfo[playerid][pZbran2naboje]);

    
    INI_WriteInt(File,"Sekundy",pSekundy[playerid]);
    INI_WriteInt(File,"Minuty",pMinuty[playerid]);
    INI_WriteInt(File,"Hodiny",pHodiny[playerid]);
    INI_Close(File);
    
    KillTimer(NahranyCas[playerid]);
    PlayerTextDrawDestroy(playerid, PlayerTS[playerid][0]);
    PlayerTextDrawDestroy(playerid, PlayerTS[playerid][1]);

    return 1;
}

 

Potom ešte v registracii mam aby sa vytvorilo v zlozle "Zbran1 - (hodnota) , zbran1naboje - (hodnota)

Ale ukladanie do súboru mi funguje lebo ked pridem na server a cez prikaz si vlozim ..  - Boxer,basbalku a desert eagle.. a odhlasim sa ukazuje mi to takto 

Zbran2naboje = 100
Zbran2 = 24
Zbran1naboje = 1
Zbran1 = 5
Zbran0naboje = 1
Zbran0 = 1

Ale ked sa prihlasim už mi ich nenačíta samozrejme potom sa odstrania pri dalsom disconnecte kedze už nemam žiadne zbrane..

Edited by MrShoTys74
Link to comment
Share on other sites

4 odpovědí na tuto otázku

Recommended Posts

  • 1

Je na čase skúsiť si ladenie programu (debugging). V Pawn sa to rieši vypisovaním správ do konzole (print, printf) / chatu (SendClientMessageToAll).

V tvojom prípade chceme overiť nasledovné:
1. Načítajú sa dáta po pripojení správne?
2. Neresetujú sa dáta náhodou v OnPlayerSpawn?
3. Volá sa GivePlayerWeapon v OnPlayerSpawn so správnymi dátami?

Poďme overiť bod 1...
do LoadUser_data hneď za riadok INI_Int("pZbran2naboje",PlayerInfo[playerid][pZbran2naboje]); vlož výpis načítaných dát. Napríklad:

print("Výpis načítaných zbraní:")
printf("zbran0: %d", PlayerInfo[playerid][pZbran0]);
printf("zbran0naboje: %d", PlayerInfo[playerid][pZbran0naboje]);
printf("zbran1: %d", PlayerInfo[playerid][pZbran1]);
printf("zbran1naboje: %d", PlayerInfo[playerid][pZbran1naboje]);
printf("zbran2: %d", PlayerInfo[playerid][pZbran2]);
printf("zbran2naboje: %d", PlayerInfo[playerid][pZbran2naboje]);

Potom sa v hre prihlás a v server logu by si mal uvidieť, aké dáta sa načítali. Ak tam uvidíš správne dáta, musíš patrať ďalej...

Bod 2... V OnPlayerSpawn skontroluj, či sa ti náhodou zbrane neresetujú

if(Deathreset[playerid] == 1)
{
    PlayerInfo[playerid][pZbran0] = 0;
    PlayerInfo[playerid][pZbran0naboje] = 0;
    PlayerInfo[playerid][pZbran1] = 0;
    PlayerInfo[playerid][pZbran1naboje] = 0;
    PlayerInfo[playerid][pZbran2] = 0;
    PlayerInfo[playerid][pZbran2naboje] = 0;
    print("Reset hráčových zbraní"); // do server logu
    SendClientMessageToAll(-1, "Reset hráčových zbraní"); // alebo priamo v hre do chatu, aby si to hneď videl
}

Keď sa spawneš a uvidíš v chate "Reset hráčových zbraní" bez toho, že by predtým zomrel, tak vieš, že je chyba v tejto časti kódu.

Bod 3... V OnPlayerSpawn tesne pred tým, ako hráčovi givneš zbrane, znova skontroluj hodnoty pZbran0, pZbran0naboje, ...

print("Výpis zbraní pred givnutím:")
printf("zbran0: %d", PlayerInfo[playerid][pZbran0]);
printf("zbran0naboje: %d", PlayerInfo[playerid][pZbran0naboje]);
printf("zbran1: %d", PlayerInfo[playerid][pZbran1]);
printf("zbran1naboje: %d", PlayerInfo[playerid][pZbran1naboje]);
printf("zbran2: %d", PlayerInfo[playerid][pZbran2]);
printf("zbran2naboje: %d", PlayerInfo[playerid][pZbran2naboje]);

Skontroluj, či to vypíše správne dáta do konzole (server logu).

Edited by DuFF
  • Líbí se mi to! (+1) 2
Link to comment
Share on other sites

  • 0

Aká je funkcia toho Deathresetu? Nebolo by jednoduchšie nastaviť pZbran0, pZbran0naboje, pZbran1, ... na 0 priamo v OnPlayerDeath a v OnPlayerSpawn to potom už neriešiť? Myslím, že vtedy by si Deathreset vôbec nepotreboval. Ukáž ešte prosím všetky miesta, kde pracuješ s Deathreset.

Edited by DuFF
Link to comment
Share on other sites

  • 0

new Deathreset[MAX_PLAYERS];

    Deathreset[playerid] = 1;  // toto mam len v onplayerdeath

Ale skúsal som odstraniť ten Deathreset a vyskúšat to bez neho ale zbrane mi to stale nedá 

Link to comment
Share on other sites

  • 0
před 3hodinami, DuFF said:

Je na čase skúsiť si ladenie programu (debugging). V Pawn sa to rieši vypisovaním správ do konzole (print, printf) / chatu (SendClientMessageToAll).

V tvojom prípade chceme overiť nasledovné:
1. Načítajú sa dáta po pripojení správne?
2. Neresetujú sa dáta náhodou v OnPlayerSpawn?
3. Volá sa GivePlayerWeapon v OnPlayerSpawn so správnymi dátami?

Poďme overiť bod 1...
do LoadUser_data hneď za riadok INI_Int("pZbran2naboje",PlayerInfo[playerid][pZbran2naboje]); vlož výpis načítaných dát. Napríklad:

print("Výpis načítaných zbraní:")
printf("zbran0: %d", PlayerInfo[playerid][pZbran0]);
printf("zbran0naboje: %d", PlayerInfo[playerid][pZbran0naboje]);
printf("zbran1: %d", PlayerInfo[playerid][pZbran1]);
printf("zbran1naboje: %d", PlayerInfo[playerid][pZbran1naboje]);
printf("zbran2: %d", PlayerInfo[playerid][pZbran2]);
printf("zbran2naboje: %d", PlayerInfo[playerid][pZbran2naboje]);

Potom sa v hre prihlás a v server logu by si mal uvidieť, aké dáta sa načítali. Ak tam uvidíš správne dáta, musíš patrať ďalej...

Bod 2... V OnPlayerSpawn skontroluj, či sa ti náhodou zbrane neresetujú

if(Deathreset[playerid] == 1)
{
    PlayerInfo[playerid][pZbran0] = 0;
    PlayerInfo[playerid][pZbran0naboje] = 0;
    PlayerInfo[playerid][pZbran1] = 0;
    PlayerInfo[playerid][pZbran1naboje] = 0;
    PlayerInfo[playerid][pZbran2] = 0;
    PlayerInfo[playerid][pZbran2naboje] = 0;
    print("Reset hráčových zbraní"); // do server logu
    SendClientMessageToAll(-1, "Reset hráčových zbraní"); // alebo priamo v hre do chatu, aby si to hneď videl
}

Keď sa spawneš a uvidíš v chate "Reset hráčových zbraní" bez toho, že by predtým zomrel, tak vieš, že je chyba v tejto časti kódu.

Bod 3... V OnPlayerSpawn tesne pred tým, ako hráčovi givneš zbrane, znova skontroluj hodnoty pZbran0, pZbran0naboje, ...

print("Výpis zbraní pred givnutím:")
printf("zbran0: %d", PlayerInfo[playerid][pZbran0]);
printf("zbran0naboje: %d", PlayerInfo[playerid][pZbran0naboje]);
printf("zbran1: %d", PlayerInfo[playerid][pZbran1]);
printf("zbran1naboje: %d", PlayerInfo[playerid][pZbran1naboje]);
printf("zbran2: %d", PlayerInfo[playerid][pZbran2]);
printf("zbran2naboje: %d", PlayerInfo[playerid][pZbran2naboje]);

Skontroluj, či to vypíše správne dáta do konzole (server logu).

 

 

Ďakujem vyskúšal som a chybu som našiel nenačítalo mi dáta preto lebo som mal v načítavani dát -     INI_Int(" pZbran2naboje ",PlayerInfo[playerid][pZbran2naboje]);

ale do dát som ukladal len Zbrane2 atd..

                INI_WriteInt(File, "Zbran2", 0);
                INI_WriteInt(File, "Zbran2naboje", 0);

...  do budúcna určite dobrá vec na zistenie problému, dakujem :)

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...