Geldvergabe nach/bei Login

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
  • if(dialogid == DIALOG_LOGIN)
    {
    if(!response) return Kick(playerid);
    if(response)
    {
    new hashpass[129],
    pName_[MAX_PLAYER_NAME],
    stringDE_[150],
    stringEN_[150];
    GetPlayerName(playerid, pName_, sizeof(pName_));
    WP_Hash(hashpass, sizeof(hashpass), inputtext);
    if(!strcmp(hashpass, pInfo[playerid][Password], false))
    {
    INI_ParseFile(Path(playerid), "loadaccount_%s", .bExtra = true, .extra = playerid);
    SetPlayerScore(playerid, pInfo[playerid][Score]);
    GivePlayerMoneyEx(playerid, pInfo[playerid][Money]);


    format(stringDE_, sizeof(stringDE_), "»PLAYERINFO« Willkommen zurück, "#C_GOLD_EMBED"%s"#C_TURQUOISE_EMBED"! Du hast dich erfolgreich eingeloggt.", pName_);
    format(stringEN_, sizeof(stringEN_), "»PLAYERINFO« Welcome back, "#C_GOLD_EMBED"%s"#C_TURQUOISE_EMBED"! You have successfully logged in.", pName_);
    SendLanguageMessage(playerid, C_TURQUOISE, stringDE_, stringEN_);
    }
    else
    {
    format(stringDE_, sizeof(stringDE_), "Willkommen zurück, "#C_LIGHT_BLUE_EMBED"%s"#C_DIALOG_EMBED"! Dieser Account ist registriert!\nBitte gib das Passwort für diesen Account ein!\n"#C_RED_EMBED"Falsches Passwort!", pName_);
    format(stringEN_, sizeof(stringEN_), "Welcome back, "#C_LIGHT_BLUE_EMBED"%s"#C_DIALOG_EMBED"! This account is registered!\nPlease type in the password for this account!\n"#C_RED_EMBED"Wrong password!", pName_);
    ShowLanguageDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Login", stringDE_, stringEN_, "Einloggen", "Log in", "Abbrechen", "Cancel");
    return 1;
    }
    }
    }


    Wenn der Spieler sich einloggt, bekommt er das Geld, soweit so gut. Zu dem Zeitpunkt ist er noch in der Skin Selection. Sobald er aber spawnt, ist das Geld wieder weg.

  • Ich grab das hier mal wieder aus.


    Das Problem ist, dass OnPlayerSpawn sowohl Spawns als auch RE-Spawns bearbeitet. Daraus resultiert dann bei mir, dass ein Spieler nach jedem Kill erstmal sein Geld verliert und beim anschließenden Respawn das Geld wieder bekommt, da ja OnPlayerSpawn aufgerufen wird.

  • Halte ich für subotoptimal... Ich habs jetzt mal mit nem boolean versucht.


    if(dialogid == DIALOG_LOGIN)
    {
    if(!response) return Kick(playerid);
    if(response)
    {
    new hashpass[129],
    pName_[MAX_PLAYER_NAME],
    stringDE_[150],
    stringEN_[150];
    GetPlayerName(playerid, pName_, sizeof(pName_));
    WP_Hash(hashpass, sizeof(hashpass), inputtext);
    if(!strcmp(hashpass, pInfo[playerid][Password], false))
    {
    INI_ParseFile(Path(playerid), "loadaccount_%s", .bExtra = true, .extra = playerid);
    format(stringDE_, sizeof(stringDE_), "»SPIELERINFO« Willkommen zurück, "#C_GOLD_E"%s"#C_TURQUOISE_E"! Du hast dich erfolgreich eingeloggt.", pName_);
    format(stringEN_, sizeof(stringEN_), "»PLAYERINFO« Welcome back, "#C_GOLD_E"%s"#C_TURQUOISE_E"! You have successfully logged in.", pName_);
    SendLanguageMessage(playerid, C_TURQUOISE, stringDE_, stringEN_);
    LoggedIn[playerid] = true;
    JustLoggedIn[playerid] = true; //Eingefügt
    }
    else
    {
    format(stringDE_, sizeof(stringDE_), "Willkommen zurück, "#C_LIGHT_BLUE_E"%s"#C_DIALOG_E"! Dieser Account ist registriert!\nBitte gib das Passwort für diesen Account ein!\n"#C_RED_E"Falsches Passwort!", pName_);
    format(stringEN_, sizeof(stringEN_), "Welcome back, "#C_LIGHT_BLUE_E"%s"#C_DIALOG_E"! This account is registered!\nPlease type in the password for this account!\n"#C_RED_E"Wrong password!", pName_);
    ShowLanguageDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Login", stringDE_, stringEN_, "Einloggen", "Log in", "Abbrechen", "Cancel");
    return 1;
    }
    }
    }


    public OnPlayerSpawn(playerid)
    {
    new VirtualWorld = GetPlayerVirtualWorld(playerid);
    switch(VirtualWorld)
    {
    case 0:
    {
    UseTeleports[playerid] = true;
    if(JustLoggedIn[playerid] == true)
    {
    SendClientMessage(playerid, -1, "JustLoggedIn[playerid] Abfrage: TRUE.");
    GivePlayerMoneyEx(playerid, pInfo[playerid][Money]);
    SendClientMessage(playerid, -1, "Geld gegeben.");
    SetPlayerScore(playerid, pInfo[playerid][Score]);
    SendClientMessage(playerid, -1, "Score gegeben.");
    JustLoggedIn[playerid] = false;
    SendClientMessage(playerid, -1, "JustLoggedIn[playerid] == false");
    return 1;
    }
    else if(JustLoggedIn[playerid] == false) return GivePlayerMoneyEx(playerid, 5000);
    SetSpawnProtection(playerid);
    }
    case 1..7:
    {
    UseTeleports[playerid] = false;
    if(pInfo[playerid][Money] == 0) GivePlayerMoneyEx(playerid, 5000);
    SetSpawnProtection(playerid);
    }
    }
    return 1;
    }


    Das Ganze will aber nicht so recht funktionieren. Wenn der Spieler spawnt, bekommt er immer 5000$ auf die Hand.

  • stock GivePlayerMoneyEx(playerid, money)
    {
    new moneystring[11];
    if(money > 0) format(moneystring, sizeof(moneystring), "~g~+%d$", money);
    else if(money < 0) format(moneystring, sizeof(moneystring), "~r~%d$", money);
    GameTextForPlayer(playerid, moneystring, 2000, 1);
    GivePlayerMoney(playerid, money);
    return 1;
    }


    EDIT: Der Code stimmt, ich hab eine Kleinigkeit nicht bedacht. In der User File war für pInfo[playerid][Money] auch der Wert 5000 gespeichert. Deswegen könnte ich den Unterschied nicht sehen und dachte, es funktioniert nicht.^^