Stock funktioniert nicht

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo Breadfish Community,
    Könnt ihr mir bitte sagen, was an diesen stocks falsch sein soll?
    Denn sie funktionieren nicht.



    stock getPlayerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }


    stock loadPlayer(playerid);
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid))
    playerD[playerid][geld] = dini_Int(Spieler,"Geld");
    playerD[playerid][level] = dini_Int(Spieler,"Level");
    setPlayerMoney(playerid,playerD[playerid][geld]);
    SetPlayerScore(playerid,playerD[playerid][level]);
    return 1;
    }


    stock setPlayerMoney(playerid, betrag)
    {
    new betrag;
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,betrag);
    return 1;
    }


    Dankeschön!
    c4k3


  • 1.) Ohne viel zu schauen seh ich hier bereits den ersten Fehler: "betrag" muss bzw. darf auch glaub ich nicht erstellt werden wenn sie in der Funktion bereits übergeben wird.
    2.) Was genau funktioniert denn bei den anderen nicht? Ne genauere Problembeschreibung wäre hilfreich.

  • Das kann ich dir beantworten


    new betrag;


    Du hast einen Stock erstellt mit folgenden Parametern


    playerid, betrag


    betrag ist ein int


    und wenn du dann gleich nochmal einen int mit dem gleichen namen erstellst, wird er mit 0 überschrieben


    Deswegen


    stock setPlayerMoney(playerid, betrag)
    {
    new betrag;
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,betrag);
    return 1;
    }


    zu


    stock setPlayerMoney(playerid, betrag)
    {
    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,betrag);
    return 1;
    }

  • format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid))


    Siehst du den Fehler? Du hast da ein Semikolon vergessen ;)


    Beim 2.
    stock setPlayerMoney(playerid,betrag){
    return ResetPlayerMoney(playerid);GivePlayerMoney(playerid,betrag);
    }


    Du hattest oben "betrag" definiert, und dann eine Variable in diesen stock erstellt die genauso heißt.

  • 2.) Was genau funktioniert denn bei den anderen nicht? Ne genauere Problembeschreibung wäre hilfreich.

    In meinem gamemode verwende ich öfters "getPlayerName" und die anderen Sachen.
    Allerdings zeigt mir der Compiler an, das er die Sachen im gamemode nicht kennt, obwohl sie als stock eingetragen sind.


    Danke für die Hilfe!
    c4k3


    P.S. Ich bin Anfänger

  • stock getPlayerName(playerid){
    new name[MAX_PLAYER_NAME];
    return GetPlayerName(playerid,name,sizeof(name));
    }


    stock loadPlayer(playerid){
    new Spieler[25];
    format(Spieler,sizeof Spieler,"/Spieler/%s.txt",getPlayerName(playerid));
    playerd[playerid][geld] = dini_Int(Spieler,"Geld");
    playerd[playerid][level] = dini_Int(Spieler,"Level");
    setPlayerMoney(playerid,playerd[playerid][geld]);
    SetPlayerScore(playerid,playerd[playerid][level]);
    return 1;
    }


    stock setPlayerMoney(playerid,betrag){
    return ResetPlayerMoney(playerid),GivePlayerMoney(playerid,betrag);
    }
    ( Beavis: Danke für den Hinweis :D Dachte das geht auch so ^^ )
    So.
    1. Du hattest hinter "stock loadPlayer(playerid)" ein Semikolon (;). Das musste da weg ;)
    2. Du hattest ein ; vergessen.


    Probier es mal aus, sollte eigentlich klappen

    Einmal editiert, zuletzt von AirM4X ()

  • Es sind nun deutlich weniger Fehler geworden.
    Allerdings werden die stocks immer noch nicht erkannt.


    stock getPlayerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    return GetPlayerName(playerid,name,sizeof(name));
    }


    stock loadPlayer(playerid)
    {
    new Spieler[25];
    format(Spieler,sizeof Spieler,"/Spieler/%s.txt",getPlayerName(playerid));
    playerD[playerid][geld] = dini_Int(Spieler,"Geld");
    playerD[playerid][level] = dini_Int(Spieler,"Level");
    setPlayerMoney(playerid,playerD[playerid][geld]);
    SetPlayerScore(playerid,playerD[playerid][level]);
    return 1;
    }


    stock setPlayerMoney(playerid,betrag)
    {
    return ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid,betrag);
    }


    Hier mal ein Beispiel, wo es nicht erkannt wird:
    public OnPlayerConnect(playerid)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/scriptfiles/Spieler/%s.txt",getPlayerName(playerid));
    if(dini_Exists(Spieler))
    return 1;
    {
    //Spieler laden (Hier bin ich noch am entwickeln)
    }


    {
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Gib hier dein zukünftiges Passwort ein:","Absenden","Abbrechen");
    return 1;
    }


    oder:


    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_REGISTER)
    {
    if(response == 1)
    {
    new Spieler[128];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    dini_Create(Spieler);
    dini_Set(Spieler,"Passwort",inputtext);
    loadPlayer(playerid);
    return 1;
    }
    if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    return 1;
    }


    Hier die Ausgabe des Compilers:
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(103) : error 017: undefined symbol "getPlayerName"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(288) : error 017: undefined symbol "getPlayerName"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(291) : error 017: undefined symbol "loadPlayer"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(302) : warning 217: loose indentation
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(302) : error 029: invalid expression, assumed zero
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(302) : error 017: undefined symbol "getPlayerName"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(308) : warning 225: unreachable code
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(308) : error 029: invalid expression, assumed zero
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(308) : error 017: undefined symbol "loadPlayer"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(311) : error 017: undefined symbol "getPlayerName"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(314) : error 017: undefined symbol "setPlayerMoney"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(319) : warning 225: unreachable code
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(319) : error 029: invalid expression, assumed zero
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(319) : error 017: undefined symbol "setPlayerMoney"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(322) : warning 225: unreachable code
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(322) : error 017: undefined symbol "betrag"
    C:\Users\*****\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(324) : error 030: compound statement not closed at the end of file (started at line 283)
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    13 Errors.


    mit freundlichen Grüßen
    c4k3

    Einmal editiert, zuletzt von c4k3 ()

  • public OnPlayerConnect(playerid)
    {
    new Spieler[25];
    format(Spieler,sizeof Spieler,"/Spieler/%s.txt",getPlayerName(playerid));
    if(dini_Exists(Spieler)){
    //Spieler laden (Hier bin ich noch am entwickeln)
    }
    else{
    ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registrierung","Gib hier dein zukünftiges Passwort ein:","Absenden","Abbrechen");
    }
    return 1;
    }


    Du hast unter dini_Exists ein return 1; gesetzt, was irgendwie kein Sinn macht.
    Füg das mal so ein, du kannst es ja sehen das ich dort die Klammern etwas gesetzt habe, das return 1; entfernt habe, und ein "else" eingefügt habe.


    public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
    {
    if(dialogid == DIALOG_REGISTER){
    if(!response)return Kick(playerid));
    new Spieler[25];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    dini_Create(Spieler);
    dini_Set(Spieler,"Passwort",inputtext);
    loadPlayer(playerid);
    return 1;
    }
    return 1;
    }
    Hier ist es bisschen sparender, und eine Klammer hattest du vergessen, die habe ich dir auch eingefügt.


  • Deine Funktion wirft eh Fehler aus da es nen Fehler gibt.


    return ResetPlayerMoney(playerid);GivePlayerMoney(playerid,betrag);
    zu
    return ResetPlayerMoney(playerid), GivePlayerMoney(playerid,betrag);

    All in all it's just another brick in the wall

  • Dankeschön!
    Die stocks funktionieren nun!


    Nun sind aber immernoch 3 Fehler drinnen:


    Compiler Output:
    C:\Users\c4k3\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(293) : error 010: invalid function or declaration
    C:\Users\c4k3\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(296) : error 010: invalid function or declaration
    C:\Users\c4k3\Desktop\samp03z_svr_R1_win32\gamemodes\test.pwn(298) : error 010: invalid function or declaration
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Errors.


    Fehler:


    public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
    {
    if(dialogid == DIALOG_REGISTER){
    if(response)return Kick(playerid);
    new Spieler[25];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    dini_Create(Spieler);
    dini_Set(Spieler,"Passwort",inputtext);
    loadPlayer(playerid);
    return 1;
    }
    return 1;
    }
    if(response == 0)
    {
    Kick(playerid);
    return 1;
    }
    return 1;
    }

  • public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
    {
    if(dialogid==DIALOG_REGISTER){
    if(!response)return Kick(playerid);
    new Spieler[25];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    dini_Create(Spieler);
    dini_Set(Spieler,"Passwort",inputtext);
    loadPlayer(playerid);
    return 1;
    }
    return 1;
    }


    Der Fehler ist bei dem return 1; in der Mitte, so sollte es klappen ;)

  • Füg mal meinen Code ein, der sollte klappen.
    Ich habe dir bereits auch gesagt, was an deinem Code falsch ist.

  • Ich hab nun alles so geändert, wie du es gesagt hast.
    Allerdings bleibt von den 3 Errors trotzdem einer übrig, wo ich nicht weiß, wie ich ihn beheben kann.


    public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
    {
    if(dialogid==DIALOG_REGISTER){
    if(response)return Kick(playerid);
    new Spieler[25];
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",getPlayerName(playerid));
    dini_Create(Spieler);
    dini_Set(Spieler,"Passwort",inputtext);
    loadPlayer(playerid);
    return 1;
    }
    return 1;
    }
    if(response == 0)
    {
    Kick(playerid);
    }
    }


    Der Fehler ist in Zeile 16.


    Dankeschön für die Hilfe
    c4k3

  • Ne, du hast eben nicht das gemacht was ich dir geschrieben habe.
    Füge meinen CODE ein, den ich dir geschickt habe.