Spieler darf nur 1 Roller mieten

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
  • Guten Tag,


    Ich habe das folgende Problem: Man kann beim Roller Verleih soviel Rollers wie man möchte leihen... Ich will das aber auf 1 begrenzen, weiß aber nicht wie das gehen soll (Außerdem werden nicht die 40$ abgezogen).


    Hier der /Roller Command:


    if(strcmp(cmd, "/roller", true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,1235.1978,-1729.1222,13.1712))
    {
    if(UnrentRoller[playerid] == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_RROLLER,DIALOG_STYLE_MSGBOX, "{00FFA0}Roller Mieten","{FEFEFE}Möchtest du einen Roller für {00FF00}40${FEFEFE} mieten ?","Mieten","Nein");
    }
    }
    return 1;
    }


    Der Dialog womit man bestätigt das man es ausleihen möchte:


    if(dialogid == DIALOG_RROLLER)
    {
    if(!response)return 1;
    {
    CreateVehicle(462, 1243.5552, -1707.7450, 12.9824, 82.2873, 3, 3, 300);
    }
    }


    Ich hoffe das mir jemand dabei weiterhelfen kann.


    MfG

  • Dann solltest du erstmal einbauen, dass das Geld abgezogen wird. Zudem kannst du eine Variable setzen, die du beim Mieten auf "1" setzt und dann beim löschen wieder auf "0". Musst dann halt nur eine Abfrage einbauen, ob Variable XYZ auf "0" steht oder nicht. Somit kannst du das mehrfache Mieten verhindern :)


    Hoffe konnte etwas helfen
    #handy


    Lg

  • new MieteRoller[MAX_PLAYERS];



    if (!MieteRoller[playerid])


    {


    MieteRoller[playerid] = 1;


    SendClientMessage(playerid, COLOR_GRAD2, "Du hast schon ein Roller.");


    }


    else if (PhoneOnline[playerid])


    {


    MieteRoller[playerid] = 0;


    SendClientMessage(playerid, COLOR_GRAD2, "Du hast ein Roller gemietet!");


    }


    Mehr transparents zu der Community!
    Aber bitte künftig: Transparenz und nicht Transparents

  • Geht das auch so:


    if(dialogid == DIALOG_RROLLER)
    {
    if(response==0)
    {
    SendClientMessage(playerid, 0xFFFF00FF, "Du hast den Vorgang abgebrochen");
    }
    if(response==1)
    {
    if(RentRoller[playerid] == 0)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new vehiclefid = CreateVehicle(462,1235.1978,-1729.1222,13.1712,356.6787,3,3,-1);
    SetVehicleNumberPlate(vehiclefid, name);
    GivePlayerMoney(playerid,-40);
    SendClientMessage(playerid, 0xFFFFFFFF, "Du hast dir einen Roller für 40$ gemietet.");
    SendClientMessage(playerid, 0xFFFFFFFF, "Dein Roller wurde auf der Straße Gespawnt");
    SendClientMessage(playerid, 0xFFFFFFFF, "Viel Spaß mit dem Roller");
    RentRoller[playerid] = 1;
    }
    else { SendClientMessage(playerid, RED, "Du hast schon einen Roller gemietet."); }


    }
    }

  • Ganz oben zu den news:
    new bool:RollerGemietet[MAX_PLAYERS];
    new playerRoller[MAX_PLAYERS];


    Der Befehl:

    if(strcmp(cmd, "/roller", true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,5.0,1235.1978,-1729.1222,13.1712))
    {
    if(RollerGemietet[playerid] == false)
    {
    ShowPlayerDialog(playerid,DIALOG_RROLLER,DIALOG_STYLE_MSGBOX, "{00FFA0}Roller Mieten","{FEFEFE}Möchtest du einen Roller für {00FF00}40${FEFEFE} mieten ?","Mieten","Nein");
    } else {
    SendClientMessage(playerid, 0xFF0000FF, "Du hast bereits einen Roller gemietet, lösche diesen zuerst!");
    }
    }
    return 1;
    }


    DIalog:

    if(dialogid == DIALOG_RROLLER)
    {
    if(response) {
    if(GetPlayerMoney(playerid) >= 40) {
    playerRoller[playerid] = CreateVehicle(462, 1243.5552, -1707.7450, 12.9824, 82.2873, 3, 3, 300);
    RollerGemietet[playerid] = true;
    GivePlayerMoney(playerid, -40);
    PutPlayerInVehicle(playerid, playerRoller[playerid], 0);
    } else {
    SendClientMessage(playerid, 0xFF0000FF, "Du hast nicht genug Geld!");
    }
    }
    return 1;
    }


    OnPlayerDisconnect:
    if(RollerGemietet[playerid] == true) {
    DestroyVehicle(playerRoller[playerid]);
    playerRoller[playerid] = -255;
    RollerGemietet[playerid] = false;
    }


    OnVehicleDeath:

    for new i = 0; i < GetMaxPlayers(); i++)
    if(vehicleid == playerRoller[i]) {
    DestroyVehicle(playerRoller[i];
    playerRoller[i] = -255;
    RollerGemietet[i] = false;
    SendClientMessage(i, 0xFFFF00FF, "Dein Roller wurde zerstört, du kannst dir wieder einen neuen Mieten!");
    }
    }

    05eb03de-9fda-461c-9dfc-834ae5b64e65.png << Server | Home >> 13462590508.png

  • new bool:RollerGemietet[MAX_PLAYERS]; new playerRoller[MAX_PLAYERS];


    Warum denn zwei Variablen? Resourcenverschwendung :S


    Oben bei Variablen
    new playerRoller[MAX_PLAYERS] = {INVALID_VEHICLE_ID,...};


    if(dialogid == DIALOG_RROLLER){
    if(!response)return 1;
    if(playerRoller[playerid] != INVALID_VEHICLE_ID)return SendClientMessage(playerid, FARBE, "Du besitzt bereits einen Roller");
    if(GetPlayerMoney(playerid) < 40)return SendClientMessage(playerid, FARBE, "Du hast nicht genug Geld!")
    playerRoller[playerid] = CreateVehicle(462, 1243.5552, -1707.7450, 12.9824, 82.2873, 3, 3, 300);
    PutPlayerInVehicle(playerid, playerRoller[playerid], 0);
    return 1;
    }


    OnPlayerDisconnect
    if(playerRoller[playerid] != INVALID_VEHICLE_ID)DestroyVehicle(playerRoller[playerid]); playerRoller[playerid] = INVALID_VEHICLE_ID;

  • Deine Script Struktur finde ich nicht sehr ansehlich, schreib das mal eher so in meine Richtung.


    //OnPlayerConnect
    SetPVarInt(playerid, "roller.mieten", -1);


    //OnPlayerDisconnect
    if(GetPVarInt(playerid, "roller.mieten") != -1) DestroyVehicle(GetPVarInt(playerid, "roller.mieten")), SetPVarInt(playerid, "roller.mieten", -1);


    if(!strcmp(cmdtext,"/roller",true)){
    if(GetPlayerDistanceFromPoint(playerid, 1235.1978,-1729.1222,13.1712) >= 5.1)return 1;
    if(GetPVarInt(playerid,"roller.mieten") >= 0)return SendClientMessage(playerid, RED, "Du hast schon einen Roller gemietet.");
    ShowPlayerDialog(playerid,DIALOG_RROLLER,DIALOG_STYLE_MSGBOX, "{00FFA0}Roller Mieten","{FEFEFE}Möchtest du einen Roller für {00FF00}40${FEFEFE} mieten ?","Mieten","Nein");
    return 1;
    }


    if(dialogid == DIALOG_RROLLER){
    if(!response)return SendClientMessage(playerid, 0xFFFF00FF, "Du hast den Vorgang abgebrochen");
    if(GetPVarInt(playerid,"roller.mieten") >= 0)return SendClientMessage(playerid, RED, "Du hast schon einen Roller gemietet.");
    new getmyname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, getmyname, sizeof getmyname);
    new putVehID = CreateVehicle(462,1235.1978,-1729.1222,13.1712,356.6787,3,3,-1);
    SetVehicleNumberPlate(vehiclefid, getmyname),
    GivePlayerMoney(playerid,-40),
    SendClientMessage(playerid, 0xFFFFFFFF, "Du hast dir einen Roller für 40$ gemietet."),
    SendClientMessage(playerid, 0xFFFFFFFF, "Dein Roller wurde auf der Straße Gespawnt"),
    SendClientMessage(playerid, 0xFFFFFFFF, "Viel Spaß mit dem Roller");
    SetPVarInt(playerid, "roller.mieten", putVehID);
    }


    Das ganze sollte dann am Ende Funktionieren, kannst es ja mal ausprobieren!


    mfg :thumbup: