Beiträge von Rafelder

    Mal ne Frage bezäglich Speichern in Dateien:


    Geht es schneller..
    ..für jedes z.B. Haus eine Datei zu erstellen mit ein paar Variablen darin?
    ..oder eine Datei mit allen Variablen (sprich von jedem Haus alle 5 in einer Datei) zu erstellen?


    Also was von den beiden Möglichkeiten ist schneller bzw. resourcenschonender für den Server?


    stock GetHighestVote()
    {
    new maxvote, highestvote;
    for(new i=0; i<ANZAHL_DER_VOTES; i++) // in deinem Fall i < 3
    {
    if(vote[i] > maxvote)
    {
    maxvote = vote[i];
    highestvote = i;
    }
    }
    return maxvote;
    }


    Wenn man ihn mit SetTimer startet kann man +- 100 ms machen... dann am besten Primzahlen verwenden, schon ist dazwischen immer genug Zeit. Das ist halt das problem - hier muss die veränderung mindestens 1000 ms sein, das ist meistens zu viel für sowas...


    Tja aber ich hab noch nicht viele gesehen, die Timer aus diesem Grund mit 1007 ms der 894 ms oder sonst was starten ;D
    Du musst es nicht benutzen, wenns dein Server nicht schafft. :)
    Und wenn ich die Include auf ms umschreiben hab ich leider einen Timer der evtl. unnötig im 1 ms Takt läuft.. viel Spass damit ;D

    Aber genau nacheinander, zwischendurch werden keine anderen Sachen verarbeitet - nennt man Lagg


    So und jetzt erklär mit was passiert wenn ich 3 verschiedene Timer mit SetTimer starte.. genau das gleiche ?
    Die Include ist nicht dazu da um das zu verhindern, sondern um mehrere Timer in einen zu packen.


    Wenn A ausgeführt wird, wird auch B + C ausgeführt... besser ist:


    Und weiter?
    Pawn ist stack, also werden sie nicht gleichzeitig ausgeführt ;D


    Nice, nur ne frage. Woher weiß man welcher MultiTimer welche ID hat`?
    Sonst zu gebrauchen, 9/10


    SetMultiTimer(1, 3, 5, 8);
    Timer1 = 1
    Timer2 = 3
    Timer3 = 5
    Timer4 = 8
    Also immer die Stelle an der er steht. Und ohne die TimerXY defines ist die erste Stelle "0".



    Was ist MultiTimer?
    - MultiTimer ermöglicht es mehrere Timer innerhalb eines Timers laufen zu lassen, sodass der Server entlastet wird


    Welche Probleme könnten auftreten?
    - Zur Zeit kann MultiTimer nur Timer mit einem Sekundenintervall starten (z.b. 1 Sek, 2 Sek..)
    - Alle Intervalle sind in Sekunden angegeben (bitte keine Millisekunden verwenden!)
    - Es können keine Parameter mit eingebunden werden
    - Es müssen alle Timer mit einem Mal gestartet werden, können aber danach gleich wieder gestoppt und später neu gestartet werden


    Wie funktioniert MultiTimer?
    Es läuft ein großer Timer mit dem Interval 1000 ms.
    Sobald man einen Timer mit MultiTimer startet wird ihm der Intervall zugewiesen, der sekündlich vom "großen" Timer erhöht wird.
    Erreicht der Timer seinen Intervall, so wird ein Callback aufgerufen.


    Wie viele Timer unterstützt MultiTimer?
    - Unendlich, zu definieren in der Include unter
    #define MAX_TIMER 10


    Welcher Timer welche ID?
    - Der erste Timer in SetMultiTimer hat ID 0, der zweite ID 1 usw..
    - In der Include sind die ersten 10 Timer mit Timer1 für 0, Timer2 für 1 usw. definiert



    Funktionen von MultiTimer


    SetMultiTimer({Float,_}:...);
    // Beispiel:
    SetMultiTimer(1, 2, 5, 10);
    //Startet beliebig viele Timer (in diesem Fall 4 Timer mit 1, 2, 5 und 10 Sekunden)


    StopMultiTimer();
    //Stoppt den MainTimer und somit alle anderen Timer


    StopSingleTimer(TimerID);
    //Stoppt einen einzelnen Timer


    RestartSingleTimer(TimerID, bool:startbyzero = true);
    //Startet einen einzelnen Timer wieder (startbyzero = true startet den Timer bei 0, = false startet, wo man ihn gestoppt hat)


    SetSingleTimerInterval(TimerID, interval);
    //Setzt den Intervall eines einzelnen Timers (Interval in Sekunden)


    OnMultiTimerTick(TimerID)
    //Das Callback für die Timer (TimerID = welcher Timer tickt)


    Bei weiteren Fragen einfach mal schreiben :)


    Download
    Klick mich
    Pastebin


    Bist du jeck ? 8|


    alle 200 MS wird 500 Mal eine for Schleife aufgerufen, na dann viel Spaß bis der Server explodiert ....


    1. Gute Server schaffen das.. ich mein es gibt Rechner die Programme/Spiele wie Crysis von oben bis unten durchrechnen, da ist das ja wohl ma nix dagegen..
    2. Man könnte anstatt MAX_PLAYERS auch was eigenes hinschreiben ? Hm..

    Also ich habs nur ma eben geschrieben aber ich ich habs nicht getestet ;D
    Schaus dir einfach mal an (Sind keine Errors drin):


    new Float:Velocity[3];
    new Float:Speed[MAX_PLAYERS];
    new Float:Var;
    new UnDrunk[MAX_PLAYERS];
    forward CarCrash();


    // GameModeInit
    SetTimer("CarCrash", 200, true);



    public OnPlayerConnect(playerid)
    {
    UnDrunk[playerid] = 0;
    Speed[playerid] = 0;
    return 1;
    }


    public CarCrash()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(UnDrunk[i] > 0)
    {
    UnDrunk[i]--;
    if(UnDrunk[i] == 1)
    {
    SetPlayerDrunkLevel(i, 0);
    UnDrunk[i] = 0;
    }
    }
    if(IsPlayerInAnyVehicle(i))
    {
    GetVehicleVelocity(GetPlayerVehicleID(i), Velocity[0], Velocity[1], Velocity[2]);
    Var = floatsqroot(Velocity[0]*Velocity[0] + Velocity[1]*Velocity[1] + Velocity[2]*Velocity[2]) * 100;
    if(Speed[i] > 100 && Var < 10)
    {
    SetPlayerDrunkLevel(i, 50000);
    UnDrunk[i] = 26; // 26 Für 5 Sekunden.. ja es hat nen Sinn ;D
    // Timer tickt mit 200 ms also 1 Sek = 5
    // 5 * 5 Sek = 25.. +1 damit auf 0 einfach nichts passiert und auf 1 das DrunkLevel
    }
    Speed[i] = Var;
    }
    }
    }
    return 1;
    }

    Also ich hab ma eben ein bisschen gerechnet und das kommt dabei raus wenn du alle Timer in einen Timer packen willst:


    Einfach deine Timer da rein wos steht (wird zwar bisschen mehr Code aber entlastet den Server ;D


    new TimerCount;
    forward TimerName();


    SetTimer("TimerName", 1000, true);


    public TimerName()
    {
    TimerCount++;
    switch(TimerCount)
    {
    case 60:
    {
    TimerCount = 0;
    // Alle 4 Timer hier rein
    }
    case 5, 25, 35, 55:
    {
    // Timer 5000 hier
    }
    case 3, 9, 21, 27, 33, 39, 51, 57:
    {
    // Timer 3000 hier
    }
    case 2, 4, 8, 14, 16, 22, 26, 28, 32, 34, 38, 44, 46, 52, 56, 58:
    {
    // Timer 2000 hier
    }
    case 15, 45:
    {
    // Timer 5000 und 3000
    }
    case 10, 20, 40, 50:
    {
    // Timer 5000 und 2000
    }
    case 6, 12, 18, 24, 36, 42, 48, 54:
    {
    // Timer 3000 und 2000
    }
    case 30:
    {
    // Timer 5000, 3000 und 2000
    }
    }
    return 1;
    }

    Einfach nur eine simple Mathematikfunktion um die Fakultät einer Zahl auszurechnen:
    Wers auch immer braucht..
    Wer nicht weiß was Fakultät ist:
    Fakultät von 5 z.B. ist: 1*2*3*4*5 = 120
    Fakultät von 7 ist dann: 1*2*3*4*5*6*7 = 5040


    stock faculty(number)
    {
    new returnvar = 1;
    for(new a=1; a<=number; a++)
    {
    returnvar = returnvar*a;
    }
    return returnvar;
    }

    [INC] BikeStuck


    Beschreibung:


    Include um das Fallen von Motorrädern bzw. Zweirädern zu verhindern
    Nützlich für Stuntserver oder ähnliche Server und dynamisch um z.B. nur in bestimmten Areas den BikeStuck zu aktivieren (siehe Funktionen)



    Funktionen:


    b_StartSystem(); // OnGameModeInit oder OnFilterScriptInit
    b_OnPlayerConnect(playerid); // OnPlayerConnect
    b_OnPlayerExitVehicle(playerid); // OnPlayerExitVehicle
    b_OnPlayerStateChange(playerid, oldstate, newstate); // OnPlayerStateChange
    b_DestroyVehicle(vehicleid); // Alle DestroyVehicle durch b_DestroyVehicle ersetzen oder einfach #define DestroyVehicle b_DestroyVehicle einfügen
    b_RemovePlayerFromVehicle(playerid); // Genau wie b_DestroyVehicle..
    b_EnableStuck(playerid, bool:enable); // Enable bzw. Disable Stuck



    Downloads:


    - Pastebin
    - Rar Datei im Datenanhang

    Möglich ist es, aber nur indem du über die Geldanzeige ein Textdraw mit xxx € einblenden und aktualisieren lässt.
    Script kann ich dir gerade nicht geben weil ich nicht viel Zeit hab.


    Ist zwar nicht von mir aber das ist ne dynamischere Variante ;)
    stock SendFormatedMessage(playerid, color, message[], {Float,_}:...)
    {
    new args = numargs();
    #define MAX_NUMARGS 10
    new string[MAX_NUMARGS][256];
    for(new i = 3; i < args+1; i++)
    {
    new gchar = 0;
    for(new a = 0; a < 256; a++)
    {
    string[i][a] = getarg(i, gchar);
    gchar++;
    }
    }
    for(new i = 3; i <= args; i++)
    {
    new bstring[256];
    for(new a = 0; a <= 256; a++)
    {
    bstring[a] = string[i][a];
    }
    format(message, 256, message, bstring);
    }
    SendClientMessage(playerid, color, message);
    }


    // Bsp.:
    SendFormatedMessage(playerid, color, "%d, %s, %f..", 1, "Eins, 1.0);