Beiträge von d30af26d

    forward VehHealth();


    public OnFilterScriptInit()
    {
    SetTimer("VehHealth", 1000, 0); //Lässt den Timer starten
    return 1;
    }



    public VehHealth()
    {
    for(new playeird = 0; playerid < MAX_PLAYERS; playerid++)
    {
    if(IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) //checkt ob der spieler in einem Fahrzeug sitzt
    {
    new Float:health;
    GetVehicleHealth(GetPlayerVehicleID(playerid), health);
    if(health >= 350) return 1;
    else
    {
    SendClientMessage(playerid, 0xFF00FF00, "Dein Motor ist beschädigt, rufe bitte den ADAC!");
    RemovePlayerFromVehicle(playerid); //...spieler rauswerfen
    return 0;
    }
    } else continue;
    }
    return 1;
    }

    Wieso Admin sein?
    Am besten suchst du dir ein Server aus.
    Spielst dort lange und setzt dich für den Server ein.
    Wirbst ein paar Leute und machst Werbung, aber nicht auf anderen Servern.
    Wenn du lange genug gespielt hast und ein Admin denkt, dass du ins Team gehörst, werden sie dich aufnehmen.
    Außerdem nehmen einige Server die Spieler nur auf, wenn diese 16+ Jahre alt sind. Was ich nach deinen Verlangen nicht nachempfinden kann.

    Du könnest eine von mir ausgedachte Version machen.


    Du brauchst folgende Funktion:
    stock mktime(hour,minute,second,day,month,year)
    {
    new timestamp2 = second + (minute * 60) + (hour * 3600), days_of_month[12], days_this_year = day;
    if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) days_of_month = {31,29,31,30,31,30,31,31,30,31,30,31};
    else days_of_month = {31,28,31,30,31,30,31,31,30,31,30,31};
    if(month > 1) for(new i=0; i<month-1;i++) days_this_year += days_of_month[i];
    timestamp2 += days_this_year * 86400;
    for(new j=1970;j<year;j++) {
    timestamp2 += 31536000;
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) timestamp2 += 86400;
    }
    return timestamp2;
    }


    und eine Variable bei "OnPlayerConnect":
    new year, month, day, hr, mi, se;
    gettime(hr, mi, se);
    getdate(year, month, day);
    SetPVarInt(playerid, "loginStart", mktime(hr, mi, sc, day, month, year));


    Jetzt nur noch überall, wo das Level abgerufen ist (am besten durch eine Funktion ersetzen) :
    stock getMoney(playerid)
    {
    if(!IsPlayerOnline(playerid)) return 0;
    updateLevel(playerid);
    return PlayerInfo[playerid][pMoney]; // Anpassen!!!
    }


    Letzendlich brauchst du noch die "updateLevel" Funktion:
    stock updateLevel(playerid)
    {
    new play_minutes, day, mon, yea, hr, mi, sc;
    gettime(hr, mi, sc);
    getdate(yea, mon, day);
    play_minutes = mktime(hr, mi, sc, day, mon, yea) - GetPVarInt(playerid, "loginStart");
    // Hier das Level berechnen (play_minutes = die gespielten minuten bis jetzt)
    // Auch die bereits gespielten Minuten addieren ;-)
    // PlayerInfo[playerid][pLevel] = ....;
    return 1;
    }

    Oder du bist faul und machst dir n Timer, der alle Raceteilnehmer durchgeht, die Entfernung bis zum Ziel von jedem berechnet und dann die Platzierung ausspuckt.


    Leichter, aber rechenintensiver :D


    Was ist, wenn das Ziel Checkpoint bereits das Anfang Checkpoint der Map ist?
    Dann ist jemand, der AFK ist, gleich der Erste...

    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    if (newstate == PLAYER_STATE_DRIVER && IsPlayerNPC(playerid))
    {
    new Data[7];
    GetVehicleParamsEx(GetPlayerVehicleID(playerid), Data[0], Data[1], Data[2], Data[3], Data[4], Data[5], Data[6]);
    SetVehicleParamsEx(GetPlayerVehicleID(playerid), VEHICLE_PARAMS_ON, VEHICLE_PARAMS_ON, Data[2], Data[3], Data[4], Data[5], Data[6]);
    }
    return 1;
    }

    public OnPlayerStateChange(playerid,newstate,oldstate)
    {
    if (newstate == PLAYER_STATE_DRIVER && IsPlayerNPC(playerid))
    {
    SetVehicleParamsEx(GetPlayerVehicleID(playerid), VEHICLE_PARAMS_ON, VEHICLE_PARAMS_ON, VEHICLE_PARAMS_OFF, VEHICLE_PARAMS_OFF, VEHICLE_PARAMS_OFF, VEHICLE_PARAMS_OFF, VEHICLE_PARAMS_OFF);
    }
    return 1;
    }