Zivi Armor Verbot

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
  • //ganz nach oben:
    forward russi();
    //OnGameModeInit:
    SetTimer("russi",1000,1);
    //ganz nach unten:
    public russi() {
    for(new i=0; i<MAX_PLAYERS; i++) {
    if(wenn er zivilist ist) {//kenn die Teams von GF nicht
    new Float:arm;
    if(GetPlayerArmour(i,arm)) {
    if(arm>0) { SetPlayerArmour(i,0); }}}}
    return 1;
    }

  • Über nen wirklich grossen Playertopoint würde es auch gehen.


    IfPlayertoPoint(i,2000,0,0,0);
    if gTeam blabla; (cops)
    return1;
    else (alle die keine rüsi haben dürfen)
    SetArmor(i,0);


    sowas in der richtung halt

  • PlayerToPoint musste aber auch mit nem timer immer kontrollieren, und keks, dieses If(GetPlayerArmor(playerid,amo)) müsste man das nit ohne if machen?? man holt es sich ja und dann fragt man erst ob es größer als is

  • 1. Nie 1 Sekunden Timer, siehe das Tut von NSG]Bright.
    Desweiteren kannst du nur mit einem Timer überprüfen ob derjenge Armor hat, verbinde das am Besten mit einem anderen Timer, der schon vorhanden ist. Ansonsten ist das von Kecks ganz ok.

  • Nope hab was ähnliches drinne, benötigt eigentlich keinen Timer.


    Es wird ja nicht überprüft sonder einfach immer wieder auf 0 gesetzt. Hmm was evtl zu stabilitätsproblemem führen könne bei der grösse?!?! Kp. ^^

  • Ich versteh nur nit warum man ne If-Abfrage nimmt wenn man was rausbekommen will? die abfrage kommt doch dannach, aber naja und warum nie 1 sek timer? Ich glaube keks kennt sich da bissel besser aus als bright

  • Klar, kann man es machen, dennoch ist die Leistung des Server höher dadurch, da zwei gleiche Timer nebenher laufen.
    if abfrage muss, da man sonst nicht abfragen kann, ob er Armor hat..


    new Float:armor;
    GetPlayerArmour(playerid, armor);
    for(new i=0; i<GET_MAX_PLAYERS; i++)
    {
    if(armor > 0 && !IsACop(i))
    {
    SetPlayerArmour(i, 0.0);
    return 1;
    }


  • nun Verliert jeder Armor egal ob Cop Cia usw

    // Edit: hab garnicht gesehen das nochmehr Leute Geantwortet haben o.o

  • Ich wills aber nur für die Leute machen, die aufm Server sind und wen nder Spieler nicht connected ist, returnt GetPlayerArmour eine 0
    Und du holst da die Rüstung von einer festen ID
    Desweiteren gibt es das "GET_MAX_PLAYERS" nciht, es heißt GetMaxPlayers(); und wenn das Script dann jedes mal wieder die Maximalanzahl nachgucken müsste, hätte man keine Zeit gespart, sondern raufgetan
    Und dort ist ein Klammerfehler
    Das mit dem Timer: Man kann sich drüber streiten, natürlich hast du recht, ein Interval von 1 sek ist resourcenfressender, als einer von 2 sek, wenn man den nachher aber zu hoch macht, dann wird die Rüstung halt zu spät resettet
    Aber danke für den Hinweis, ein Interval von 3 sek dürfte gut sein


    //EDIT: @ CopBot: Nein?
    if(wenn er zivilist ist) {//kenn die Teams von GF nicht
    Nur die Zivilisten^^ ist da aber auch doof zu sehen, dachte als ich deins gelesen ahbe auch erst, dass ich vergessen habe, aber die Abfrage hat sich versteckt :)
    //EDIT2:

    Ich glaube keks kennt sich da bissel besser aus als bright


    Das glaube ich nicht, bin nicht so gut, wie die meisten denken

  • Ich würde gar keine neuen Timer starten, sollten eine vorhanden 1 Sekudnen Timer nehmen, da es ressourcenschonender ist. Natürlich lässt sich darüber streiten ob GetMaxPlayers langsamer ist als Max_PLAYERS. ICh benutze GetMaxPlayers für solche Funktionen^^

  • GetMaxPlayers(); IST langsamer. Einfach aus dem grund weil es eine native Funktion ist und somit gar nicht schneller als eine Define sein kann.


    Solltet ihr dazu noch Fragen haben => Code Optimierungen

  • Das in den vorhanden Timer zu tun, ist ihm überlassen^^
    Und GF hatn Timer? Hab nur einmal im GF nach "SetTimer" gesucht und nix gefunden, hab mich dann auch nicht weiter mit GF beschäftigt
    Und das mit GetMaxPlayers() (wenn mans verwenden will) würde ich dann so machen:
    for(new i=0, j=GetMaxPlayers(); i<j; i++) {
    //oder:
    new i, j=GetMaxPlayers();
    for(; i<j; i++) {
    //oder:
    new i, j=GetMaxPlayers();
    while(i<j) {

  • Sollte dein Server einen Monat mit durchschnittlich 25 Usern laufen so würdest du schon merken wie groß der Unterschied sein kann.


    EDIT: Keks, da könnte man auch ein per goto das ganze lösen:
    new i, j = GetMaxPlayers();
    loop:
    if(i < j) {
    i++; // Argh, ";" vergessen, damn Lua xD
    goto loop;
    }
    //Keks: Könnte man, ich weiß... kann man auch noch anders (indem man den public sich selbst aufrufen lässt, wäre zwar die schlechteste Methode, aber würd funzen^^)

  • Das bezweifle ich, denn es kommt darauf an, wie oft das Script dieses Callback aufruft. Sollte das Callback nicht oft genutzt werden, ist egal. Natürlich hast du recht, was de Schnelligkeit angeht, das stell ich ja nicht in Frage.^^ Kannst ruhig mir überlassen, was ich benutze :D^^ :thumbup: