Autohaus-Kaufproblem

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 Zusammen


    Ich beschäftige mich seit ca. 2 Wochen mit meinem Selfmade-Script und wollte nun ein Autohaus erstellen.
    Dafür beschäftige ich mit OnPlayerKeyStateChange. Kenne mich da jedoch noch nicht so gut aus bzw. hab da immer Wiki zur Hilfe ;)


    Zum eigentlichen Problem:
    Ich hab im OnPlayerKeyStateChange eine normale If-Abfrage. Doch aus unbekannten Gründen wird diese nicht richtig ausgeführt.
    Es wird geprüft, ob der Spieler genug Geld dabei hat und ansonsten kann der Spieler das Auto logischerweise nicht kaufen.
    Dann erhält er die Nachricht "Du hast nicht genug Geld".


    Doch manchmal erhält er immer die Nachricht(auch wenn er genug Geld hat) und manchmal kann er das Auto immer kaufen...
    Die Unterschiede haben mit dem return zu tun gehabt (weglassen, 1 oder 0).
    Im Wiki ist das return jedoch als "weiterer Gebrauch" definiert:
    "Returns1 - Allows this callback to be called in other scripts. It is always called first in gamemodes so retuning 0 there blocks filterscripts from seeing it."


    Darum nun zu meiner Frage: Was mache ich falsch?
    Wieso wird die Abfrage nicht korrekt ausgeführt?


    Nebst der Hauptfrage, hab ich noch eine kleinere Frage:
    Im Moment habe ich den KEY_JUMP als Bestätigung.
    Ich wollte jedoch die Enter-Taste. Als welchen Key ist diese definiert? Habs mit KEY_ACTION probiert, passierte dann aber nichts.


    Script:
    else if(newkeys == KEY_JUMP)
    {

    if(Daten[playerid][Geld]>=Autokauf[aID][preis])
    {
    SetCameraBehindPlayer(playerid);
    SetPlayerVirtualWorld(playerid,0);
    TogglePlayerControllable(playerid,1);
    GivePlayerMoney(playerid,-Autokauf[aID][preis]);
    CreateVehicle(Autokauf[aID][amodelid],Autokauf[aID][posx],Autokauf[aID][posy],Autokauf[aID][posz],Autokauf[aID][posa],-1,-1,-1);
    aID = 0;
    return 0;
    }
    else
    {
    aID = 0;
    SetCameraBehindPlayer(playerid);
    SetPlayerVirtualWorld(playerid,0);
    TogglePlayerControllable(playerid,1);
    SendClientMessage(playerid,rot,"Du hast nicht genug Geld!");
    return 0;
    }
    }
    }


    Mfg
    Hund


  • Die Enter-Tase ist: "KEY_SECONDARY_ATTACK" ^^


    EDIT: Versuch anstatt "else", "else if Daten[playerid][Geld]


    Danke für die Enter-Taste =)
    Das mit dem else if funktioniert zum Teil...
    Hab im Moment (als Test) nur 2 Autos eingefügt.
    Beim Auto 1 (aID=0) funktioniert es, bei Auto 2 (aID=1) jedoch nicht...
    Also beim Auto 2 heisst es dauernd ich habe zuwenig Geld 8|


    edit: Jetzt geht es aufeinmal auch beim ersten Auto wieder nicht..
    Auto 1 immer kaufbar...
    Auto 2 nie kaufbar...


  • Haste vllt aID falsch definiert oder sind die Preise nicht korrekt eingetragen?

    Die Preise müssen stimmen, da ich sie als Text anzeige und dort mit den selben Variablen arbeite.
    Was aID angeht. Ich definiere aID unter OnGamemodInit als 0 und beim Autokauf wird aID dann um eins erhöht bzw um eins reduziert.



    Ganzes "Showscript" (Autos anzeigen/wechseln)
    //Autohaus LS
    else if(IsPlayerInRangeOfPoint(playerid,1,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]))
    {
    new string[128];
    if(newkeys == KEY_ANALOG_RIGHT)
    {
    if(aID<1)
    {
    aID++;
    SetPlayerPos(playerid,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]);
    SetPlayerCameraPos(playerid,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]);
    SetPlayerCameraLookAt(playerid,Autokauf[aID][posx],Autokauf[aID][posy],Autokauf[aID][posz]);
    format(string,sizeof(string),"Name: %s Preis: %d",Autokauf[aID][aname],Autokauf[aID][preis]);
    SendClientMessage(playerid,weiss,string);
    SendClientMessage(playerid,weiss,"Zum Kaufen mit Enter bestätigen");
    }
    else
    {
    aID=0;
    SetPlayerPos(playerid,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]);
    SetPlayerCameraPos(playerid,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]);
    SetPlayerCameraLookAt(playerid,Autokauf[aID][posx],Autokauf[aID][posy],Autokauf[aID][posz]);
    format(string,sizeof(string),"Name: %s Preis: %d",Autokauf[aID][aname],Autokauf[aID][preis]);
    SendClientMessage(playerid,weiss,string);
    SendClientMessage(playerid,weiss,"Zum Kaufen mit Enter bestätigen");
    }
    }
    else if (newkeys == KEY_ANALOG_LEFT)
    {
    if(aID>0)
    {
    aID--;
    SetPlayerPos(playerid,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]);
    SetPlayerCameraPos(playerid,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]);
    SetPlayerCameraLookAt(playerid,Autokauf[aID][posx],Autokauf[aID][posy],Autokauf[aID][posz]);
    format(string,sizeof(string),"Name: %s Preis: %d",Autokauf[aID][aname],Autokauf[aID][preis]);
    SendClientMessage(playerid,weiss,string);
    SendClientMessage(playerid,weiss,"Zum Kaufen mit Enter bestätigen");
    }
    else
    {
    aID=1;
    SetPlayerPos(playerid,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]);
    SetPlayerCameraPos(playerid,Autokauf[aID][cposx],Autokauf[aID][cposy],Autokauf[aID][cposz]);
    SetPlayerCameraLookAt(playerid,Autokauf[aID][posx],Autokauf[aID][posy],Autokauf[aID][posz]);
    format(string,sizeof(string),"Name: %s Preis: %d",Autokauf[aID][aname],Autokauf[aID][preis]);
    SendClientMessage(playerid,weiss,string);
    SendClientMessage(playerid,weiss,"Zum Kaufen mit Enter bestätigen");
    }
    }
    else if(newkeys == KEY_SECONDARY_ATTACK)
    {
    Speichern(playerid);
    if(Daten[playerid][Geld]>=Autokauf[aID][preis])
    {
    SetCameraBehindPlayer(playerid);
    SetPlayerVirtualWorld(playerid,0);
    TogglePlayerControllable(playerid,1);
    GivePlayerMoney(playerid,-Autokauf[aID][preis]);
    CreateVehicle(Autokauf[aID][amodelid],Autokauf[aID][posx],Autokauf[aID][posy],Autokauf[aID][posz],Autokauf[aID][posa],-1,-1,-1);
    aID = 0;
    return 1;
    }
    else if(Daten[playerid][Geld]<Autokauf[aID][preis])
    {
    aID = 0;
    SetCameraBehindPlayer(playerid);
    SetPlayerVirtualWorld(playerid,0);
    TogglePlayerControllable(playerid,1);
    SendClientMessage(playerid,rot,"Du hast nicht genug Geld!");
    return 1;

    }
    }
    }


    //edit:
    Hab zur Hilfe schnell nen Befehl mit der selben if Abfrage erstellt.
    Die Abfragen laufen korrekt, bis ich das erste Auto kaufe.
    Geht also alles wunderbar, doch sobald ich ein Auto gekauft habe, hatte man immer genug oder immer zu wenig Geld!

    Einmal editiert, zuletzt von Hund ()