Problem bei Rollermieten

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
  • Hei leute hier ist der Code:


    ocmd:rollermieten(playerid, params[])
    {
    {
    if(sInfo[playerid][level]>3)return SendClientMessage(playerid,COLOR_RED,"Nur Anänger bis level 3 können sich einen Roller ausleihen");
    for(new i = 0; i < sizeof(Roller); i++)
    {
    if(GetPlayerVehicleID(playerid) == Roller[i])
    {

    }
    }
    }
    return 1;
    }


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    for(new i = 0; i < sizeof(Roller); i++)
    {
    if(GetPlayerVehicleID(playerid) == Roller[i])
    {
    if(sInfo[playerid][level]>3)return SendClientMessage(playerid,COLOR_RED,"Nur Anänger bis level 3 können sich einen Roller ausleihen");
    {
    RemovePlayerFromVehicle(playerid);
    }
    else
    {
    SendClientMessage(playerid,COLOR_YELLOW,"Um einen Roller zu mieten gebe bitte /mieten ein");
    }
    }
    }
    }


    Also wenn man unter lvl 3 ist soll man direkt aus dem roller geworfen werden.
    Aber wenn man auf dem roller sitzt und dann /roller mieten eingibt dann soll man für eine halbe stunde lang mit dem roller fahren können, dann soll er respawnt werden.
    Aber wie mache ich das das der roller für 30min zugewiesen wird und dann nach der zeit, oder nach dem disconnecten respawnt wird?
    Ausserdem hab ich nen /motor befehl und der soll nur funktionieren wenn man diesen roller auch gemietet hat

  • Unter die Includes:
    new RollerID[MAX_ROLLER] = {-1,...}; //Genau so lassen, macht alle Indize auf -1.
    new RollerTime[MAX_ROLLER];


    Der Befehl:
    ocmd:rollermieten(playerid, params[])
    {
    if(sInfo[playerid][level]>3)return SendClientMessage(playerid,COLOR_RED,"Nur Anänger bis level 3 können sich einen Roller ausleihen");
    for(new i = 0; i < sizeof(Roller); i++)
    {
    if(GetPlayerVehicleID(playerid) == Roller[i])
    {
    RollerID[i] = playerid;
    RollerTime[i] = gettime() + 30 * 60; // 30 Minuten
    SendClientMessage(playerid, 0xFFFFFFFF, "Roller für 30 Minuten gemietet.");
    return 1;
    }
    }
    return 1;
    }


    Das OnPlayerStateChange:
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    for(new i = 0; i < sizeof(Roller); i++)
    {
    if(GetPlayerVehicleID(playerid) == Roller[i])
    {
    if(sInfo[playerid][level]>3)
    {
    RemovePlayerFromVehicle(playerid);
    return SendClientMessage(playerid,COLOR_RED,"Nur Anänger bis level 3 können sich einen Roller ausleihen");
    }
    else if(RollerID[i] != -1 && RollerID[i] != playerid)
    {
    RemovePlayerFromVehicle(playerid);
    return SendClientMessage(playerid,COLOR_RED,"Dieser Roller gehört dir nicht.");
    }
    else
    {
    return SendClientMessage(playerid,COLOR_YELLOW,"Um einen Roller zu mieten gebe bitte /rollermieten ein");
    }
    }
    }
    }
    return 1;
    }


    Bei OnGameModeInit:
    SetTimer("CheckRoller", 1000, true);


    Ganz unten im Gamemode:
    forward CheckRoller();
    public CheckRoller()
    {
    new time = gettime();
    for(new i = 0; i < sizeof(Roller); i++)
    {
    if(RollerID[i] != -1 && RollerTime[i] < time)
    {
    RemovePlayerFromVehicle(RollerID[i]);
    SendClientMessage(RollerID[i], 0xFF0000FF, "Ende.");
    RollerID[i] = -1;
    }
    }
    return 1;
    }


    Bei /motor:
    for(new i = 0; i < sizeof(Roller); i++)
    {
    if(GetPlayerVehicleID(playerid) == Roller[i])
    {
    if(RollerID[i] != playerid)
    {
    return SendClientMessage(playerid,COLOR_RED,"Dieser Roller gehört dir nicht.");
    }
    }
    }


    Bei OnPlayerDisconnect:
    for(new i = 0; i < sizeof(Roller); i++)
    {
    if(RollerID[i] == playerid)
    {
    RollerID[i] = -1;
    RollerTime[i] = 0;
    }
    }

  • Ok Aber habe folgendes problem,
    fehlerzeilen:


    new RollerID[MAX_ROLLER] = {-1,...}; //Genau so lassen, macht alle Indize auf -1.
    new RollerTime[MAX_ROLLER];


    Errors:
    C:\Users\Spiele\Desktop\Auftrag\gamemodes\Auftrag.pwn(20) : error 017: undefined symbol "MAX_ROLLER"
    C:\Users\Spiele\Desktop\Auftrag\gamemodes\Auftrag.pwn(21) : error 017: undefined symbol "MAX_ROLLER"
    C:\Users\Spiele\Desktop\Auftrag\gamemodes\Auftrag.pwn(21) : error 009: invalid array size (negative, zero or out of bounds)