Geld Begrenzung

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
  • Momentan habe ich zwei Menüs in meinem Script. Einmal einen um Autos zu kaufen und einen um Waffen zu kaufen.
    Das Problem ist das man sich ins unendliche verschulden kann.


    Beispiel: Max connectet auf den Server und tippt /buygun ein. Er wählt die M4 aus obwohl er nur 0$ hat. Die M4 kostet 5000$.
    Nun ist er für 5000$ im minus, was aber für ihn total egal ist da er sich unendlich weit verschulden kann.


    Gibt es da schon etwas vorgefertigtes? Ich habe nichts gefunden.

  • <: Unter
    >: Über
    <= Untergleich
    >=: Übergleich
    ==: Gleich
    !=: Entspricht nicht

  • So ungefähr?


    case 0:
    {
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    if(GetPlayerMoney(playerid) >0);
    }



    Da bringt er mir einen Error in genau die Zeile wo das "if[GetPlayerMoney(playerid) >0);" steht:


    Code
    : error 036: empty statement
  • Etwa so?


    case 0:
    {
    if(GetPlayerMoney(playerid) >0);
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }


    Entschuldige aber ich bin ein totaler Scriptnoob .. ;):whistling:

  • nein , ein Statement muss nicht beendet werden mit Similikons, entweder es ist eine einzelaktion wie hier


    if(GetPlayerMoney(playerid) >0)SendClientMessage(playerid,farbe,"Text");


    oder es sind mehrere Aktionen wie hier


    if(GetPlayerMoney(playerid) >0)
    {
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }


    Du musst deinen Code mit Brackets einbinden , Offen { und zu },
    immer beim Prinzip bleiben { Öffnen und schließen }
    wie bei den Funktionen Öffnen ( und schließen )


    Ich würde dir empfehlen Pawn zu lernen , nicht nur von Seiten wie Sa-mp her sondern auch die Basis

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Es klappt nun, jedenfalls mehr oder weniger:


    Spieler X hat 500$.
    Spieler X will sich eine Waffe für 1000$ kaufen.
    Spieler X erhält die Waffe und hat -500$.
    Spieler X möchte nun nochmals eine Waffe kaufen.
    Spieler X kann sich die Waffe nicht kaufen, das Menü schließt sich und der Spieler ist gefreezt.

  • Mh ..
    So siehts momentan aus:



    new Menu:current; //Pistolen/Sonstiges menu
    current = GetPlayerMenu(playerid);
    if(current == pistolmenu)
    {
    switch(row)
    {
    case 0:
    if(GetPlayerMoney(playerid) >499)
    {
    TogglePlayerControllable (playerid, 1);
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }


    Wie kann ich nun einbauen das wenn der Spieler unter 500$ hat, er eine Nachricht bekommt das er zuwenig Geld hätte aber das Menü geöffnet bleibt?
    Mit "else if" ?


    Also:


    Spieler X kauft sich eine USP.
    Spieler X möchte sich noch mehr Munition für die USP kaufen und wiederholt den Vorgang.
    Spieler X hat nun aber zuwenig Geld und bekommt eine Nachricht.


    Momentan geht das Menü zu und der Spieler ist gefreezt sobald er zuwenig Geld für die Waffe hat.



    Etwa irgendwie so? (Bitte haut mich nicht wenns totaler Schrott ist^^) :



    new Menu:current; //Pistolen/Sonstiges menu
    current = GetPlayerMenu(playerid);
    if(current == pistolmenu)
    {
    switch(row)
    {
    case 0:
    if(GetPlayerMoney(playerid) >499)
    {
    TogglePlayerControllable (playerid, 1);
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    {
    else if(GetPlayerMoney(playerid) <501)
    SendClientMessage(playerid, COLOR_RED, "Du hast nicht genuegend Geld!");
    }}}

  • mach es so



    new Menu:current; //Pistolen/Sonstiges menu
    current = GetPlayerMenu(playerid);
    if(current == pistolmenu)
    {
    switch(row)
    {
    case 0:
    if(4999 <= GetPlayerMoney(playerid))
    {
    TogglePlayerControllable (playerid, 1);
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast nicht genug Geld");
    }
    }}

    RFT

  • 4 Errors:


    Code
    : error 014: invalid statement; not in switch
    : error 001: expected token: ";", but found ":"
    : error 029: invalid expression, assumed zero
    : fatal error 107: too many error messages on one line


    Alle Errors kommen aus der selben Zeile, in welcher "case 1" beginnt:


    new Menu:current; //Pistolen/Sonstiges menu
    current = GetPlayerMenu(playerid);
    if(current == pistolmenu)
    {
    switch(row)
    {
    case 0:
    if(4999 <= GetPlayerMoney(playerid))
    {
    TogglePlayerControllable (playerid, 1);
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast nicht genug Geld");
    }
    }}
    case 1: // <---------------------------------------------------------------------- Die Errorzeile ;)
    if(GetPlayerMoney(playerid) >649)
    {
    GivePlayerWeapon(playerid, 24, 50); //Desert Eagle
    GivePlayerMoney(playerid, -650);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }

  • xD die letzten klammern müssen hiter dem Case



    new Menu:current; //Pistolen/Sonstiges menu
    current = GetPlayerMenu(playerid);
    if(current == pistolmenu)
    {
    switch(row)
    {
    case 0:
    if(499 <= GetPlayerMoney(playerid))
    {
    TogglePlayerControllable (playerid, 1);
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast nicht genug Geld");
    }
    case 1: // <---------------------------------------------------------------------- Die Errorzeile ;)
    if(649 <= GetPlayerMoney(playerid))
    {
    GivePlayerWeapon(playerid, 24, 50); //Desert Eagle
    GivePlayerMoney(playerid, -650);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast nicht genug Geld");
    }
    }}

    RFT

  • Ah xD
    Danke .. :D
    Nu geht bei zuwenig Geld das Menü zu, da steht das er zuwenig Geld hat aber er ist gefreezt :/


    Ist es richtig wenn ich hier sowas einbaue?


    new Menu:current; //Pistolen/Sonstiges menu
    current = GetPlayerMenu(playerid);
    if(current == pistolmenu)
    {
    switch(row)
    {
    case 0:
    if(499 <= GetPlayerMoney(playerid))
    {
    TogglePlayerControllable (playerid, 1);
    GivePlayerWeapon(playerid, 22, 50); //USP
    GivePlayerMoney(playerid, -500);
    HideMenuForPlayer(pistolmenu, playerid);
    TogglePlayerControllable(playerid, 1);
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast nicht genug Geld");
    TogglePlayerControllable(playerid, 1); // <-------------------------------------------------------------- Das da .. ;)
    }



    //EDIT:


    Klappt! DANNKKEEE!! =)
    Kommst auch in die Credits .. :)