Beiträge von Hagi

    if(strcmp(cmdtext,"/speichern",true) == 0)
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    SetPVarFloat(playerid,"XPOS",x);
    SetPVarFloat(playerid,"YPOS",y);
    SetPVarFloat(playerid,"ZPOS",z);
    return 1;
    }


    if(strcmp(cmdtext,"/laden",true) == 0)
    {
    SetPlayerPos(playerid,GetPVarFloat(playerid,"XPOS"),GetPVarFloat(playerid,"YPOS"),GetPVarFloat(playerid,"ZPOS"));
    }

    das speichert die Koordinaten XYZ in die Spielerbezogenen Variablen.

    Hello friends.


    Ich hab mal ne Problem aber ich seh den Fehler darin nicht, vllt ist er so einfach, dass ich ihn übersehe.
    Vllt seht ihr den Fehler ja.


    Hier erstmal der Codeauszug aus OnPlayerDeath


    if(playerid == einnahmeleiter)
    {
    KillTimer(einnahmetimer);
    print("KillTimer");
    einnahmetimer = -1;
    print("Einnahmetimer -1");

    SendClientMessageToAll(tuerkis,"Die Einnahme des Ladens ist fehlgeschlagen. Der Einnahmeleiter wurde getötet");
    print("Nachricht fehlgeschlagen");
    GangZoneHideForAll(zone[wirdeingenommen]);
    print("GangZoneHide");


    if(gTeam[einnahmeleiter] == 0)
    {
    GangZoneShowForAll(zone[wirdeingenommen],zonenfarbepolice);
    print("Show wenn Mafia");
    }
    else
    {
    GangZoneShowForAll(zone[wirdeingenommen],zonenfarbemafia);
    print("Show wenn Police");
    }

    TextDrawHideForAll(einnahmetext);
    print("Einnahmedraw hide for all");


    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    print("loop start");
    print("Einnahmetimer -1");
    if(IsPlayerInRangeOfPoint(i,50.0,zonen[wirdeingenommen][pickx],zonen[wirdeingenommen][picky],zonen[wirdeingenommen][pickz]))
    {
    print("Ist in 50 Meter nähe");
    if(gTeam[i] != gTeam[einnahmeleiter])
    {
    print("gTeam != ggteam einnahmeleiter");
    SendClientMessage(i,weiß,"Du erhälst 2 Punkte für das Verteidigen des Ladens");
    print("Zwei Punkte bekommen");
    SetPVarInt(i,PUNKTE_KEY,GetPVarInt(i,PUNKTE_KEY)+2);
    print("Punkte ändern");
    }
    }
    }

    if(gTeam[killerid] != gTeam[einnahmeleiter])
    {
    print("Gtaem killer != gTeam einnahmeleiter");
    SendClientMessage(killerid,weiß,"Du erhälst 3 Punkte für das Töten des Einnahmeleiters");
    print("Erhälst 3 Punkte");
    SetPVarInt(killerid,PUNKTE_KEY,GetPVarInt(killerid,PUNKTE_KEY)+3);
    print("Punkte ändern 2");
    }
    else
    {
    print("gteam killer == gteam leiter");
    SendClientMessage(playerid,rot,"Fehler: Du erhälst keine 3 Punkte für das Töten des Einnahmeleiters da er in deinem Team war");
    }

    einnahmeleiter = -1;
    print("Einnahmeleiter -1");
    wirdeingenommen = -1;
    print("wirdeingenommen -1");

    }


    Ich hab hier die Logeinträge.



    So, das heißt also, dass es genau bis zur Schleife läuft.


    Allerdings wird die letzte Schleife nicht mehr ausgeführt und auch die Wertänderungen der zwei Variablen am unteren Ende nicht.
    Wisst ihr warum ?

    Du sagts dem Server. Gib mir die Position des Autos und schreibst ihm Koordinaten hin ?.


    Das muss eher so aussehen.


    new Float:x,Float:y,Float:z;
    GetVehiclePos(vID,x,y,z);


    edit: Wofür brauchst du da eigentlich die Koordinaten. Du verwendest sie ja gar nicht.

    Also der Host hat noch andere Server, grad auch komplexere Reallife. Die laggen nicht.


    Es muss bei meinem Code an den Timern liegen, denn wenn ich deren Intervalle ändern d.h. vergrößere (zum Beispiel auf 5 Minuten) dann laggsts nicht.
    Den Code der Timer hab ich ja ein paar Post vorher schon gepostet. Aber ich wüsste nicht wie ich das optimieren könnte.

    So jetzt funktioniert nur noch eines nicht. Meine Rbs


    if(strcmp("/rb", cmdtext, true, 10) == 0)
    {
    if(gKlasse[playerid] == KLASSE_ASSAULT)
    {
    if(!IsPlayerInAnyVehicle(playerid))
    {
    if(GetPVarInt(playerid,RB_KEY) == 0)
    {
    if(GetPVarInt(playerid,HATRBGEBAUT_KEY) == 0)
    {
    new Float:x,Float:y,Float:z,rand;
    rand = random(sizeof(roadblocks));
    GetPlayerPos(playerid,x,y,z);
    SetPVarInt(playerid,RB_KEY,CreateObject(roadblocks[rand][rbid],x,y,z-5,0.0,0.0,0.0));
    MoveObject(GetPVarInt(playerid,RB_KEY),x,y,z,1.0);
    SendClientMessage(playerid,weiß,"Du hast einen Roadblock gebaut. Er verschwindet in 4 Minuten oder wenn du /rb machst");
    SetPVarInt(playerid,RBTIMER_KEY,SetTimerEx("rbweg",240000,0,"u",playerid));
    SetPVarInt(playerid,HATRBGEBAUT_KEY,240);
    }
    else
    {
    new string[64];
    format(string,sizeof(string),"Fehler: Du kannst erst in %d Sekunden wieder eine RB bauen",GetPVarInt(playerid,HATRBGEBAUT_KEY));
    SendClientMessage(playerid,rot,string);
    }
    }
    else
    {
    SendClientMessage(playerid,weiß,"Du hast deine Rb erfolgreich entfernt");
    DestroyObject(GetPVarInt(playerid,RB_KEY));
    KillTimer(GetPVarInt(playerid,RBTIMER_KEY));
    DeletePVar(playerid,RB_KEY);
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Fehler: Du darfst dich nicht in einem Fahrzeug befinden");
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Fehler: Du bist kein Assault");
    }
    }


    public rbweg(playerid)
    {
    DestroyObject(GetPVarInt(playerid,RB_KEY));
    SendClientMessage(playerid,weiß,"Dein RB wurde nach 4 Minuten zerstört");
    DeletePVar(playerid,RB_KEY);
    KillTimer(GetPVarInt(playerid,RBTIMER_KEY));
    return 1;
    }


    Wenn ich das zweite mal RB mache, geht die Rb wie geplant weg, aber alle Timer hängen sich auf.
    Das hier Spuckt die Log aus.


    Zitat

    [17:15:35] [FastTimer]: Argumenten Mismatch Fehl-Unterstützung!
    [17:15:43] TimerID Verschiebung von 1 zu 0
    [17:15:43] TimerID Verschiebung von 2 zu 1
    [17:15:43] LastTimerID: 2

    dcmd_carrespawn(playerid,params[])
    {
    new sekunden;


    if(sscanf(params, "d",sekunden))
    {
    return SendClientMessage(playerid,weiß,"Benutzung: /carrespawn [sekunden]");
    }


    if(GetPVarInt(playerid,ADMIN_KEY) >= 4)
    {
    if(sekunden >= 1 && sekunden <= 60)
    {
    carrespawncounter = sekunden;


    new string[32];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);

    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);

    SetTimer("carrespawn",1000,0);

    new admin[MAX_PLAYER_NAME];
    new string2[64];
    GetPlayerName(playerid,admin,sizeof(admin));
    format(string2,sizeof(string2),"Admin %s lässt alle unbenuzten Fahrzeuge respawnen",admin);


    SendClientMessageToAll(grün,string2);


    //admincmdlog(string2);
    }
    else
    {
    SendClientMessage(playerid,rot,"Fehler: Mögliche Sekunden 1-60");
    }
    }
    else
    {
    SendClientMessage(playerid,rot,"Du besitzt nicht die nötige Einstufung zur Ausführung dieses Befehls");
    }
    return 1;
    }


    public carrespawn()
    {
    if(carrespawncounter == 0)
    {
    TextDrawHideForAll(carrespawntext);

    for(new i=0;i<MAX_VEHICLES;i++)
    {
    if(IsVehicleOccupied(i) == 0)
    {
    SetVehicleToRespawn(i);
    }
    }
    }
    else
    {
    carrespawncounter --;


    new string[128];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);


    TextDrawHideForAll(carrespawntext);
    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);


    SetTimer("carrespawn",1000,0);
    }
    }

    Ja die Funktion "carrespawn" wird einmal per Command aufgerufen und an der stelle wird die Variable carrespawncounter = integer gesetzt.


    Dann wird die Funktion aufgerufen. Wenn dort carrespawncounter != 0 ist, wird carrespawncounter -1 gerechnet. Der Timer wird dann erneut einmal gestartet und das ganze wiederholt sich. Sollte carrespawncounter jetzt == 0 sein, werden alle Cars respawnt und das Textdraw verschwindet. Der Timer wird nicht erneut aufgerufen.


    Das Problem war jetzt, dass wenn carrespawncounter == 0 war, keine Autos respawnt wurden und der Textdraw nicht verschwandt. Ich denke es lag daran, dass der Timer im Falle carrespawncounter != 0 nicht wieder aufgerufen wurde, und da liegt das Problem weil ich nicht weiß warum.

    Ich bekomms zwar jetzt compiled, aber wenn ich InGame zum Beispiel mein Carrespawn starte starte, dann zählt er mal die Zeit gar nicht runter, bzw zählt bis 0 und bricht dann einfach ab.


    Oder manche Events zählen auch nicht mehr runter.


    public carrespawn()
    {
    if(carrespawncounter == 0)
    {
    TextDrawHideForAll(carrespawntext);


    for(new i=0;i<MAX_VEHICLES;i++)
    {
    if(IsVehicleOccupied(i) == 0)
    {
    SetVehicleToRespawn(i);
    }
    }
    }
    else
    {
    carrespawncounter --;


    new string[128];
    format(string,sizeof(string),"Carrespawn:~n~%d Sekunden",carrespawncounter);


    TextDrawHideForAll(carrespawntext);
    TextDrawShowForAll(carrespawntext);
    TextDrawSetString(carrespawntext,string);


    SetTimer("carrespawn",1000,0);
    }
    }



    Weisste vllt woran das liegt ?


    edit: Das hier steht diverse mal in den Logs

    Zitat


    [13:03:28] [FastTimer]: Der zu löschende Timer mit der ID 20 wurde nicht gefunden!

    So ich versteh das mit dem KillTimer nicht so ganz.


    Ich hab nen Timer der für jeden Spieler bezogen ist.
    Die Timerid wird in PVarInt gespeichert direkt beim erstellen


    SetPVarInt(playerid,RBWEG_KEY,SetTimer(...));


    Wie soll ich das jetzt mit den Funktionsnamen machen ? Ich kann die ja schlecht in SetPVarString reinschreiben, da ja bei SetTimer nicht der funktionsname returnt wird.


    Kannste mir damit mal helfen?

    a) Völlig unpassender Treadtitel


    b) hier


    c) Ist zwar englisch, aber mit dem Wissen aus dem Schulunterricht sollte es für jedermann verständlich sein.

    Oka Danke schon mal für die Antworten und Erläuterungen zu Timern, echt super Arbeit.


    Ich habe einen PN Ratschlag von Templer mal befolgt und nach dieser Methode die Bearbeitungszeiten der Timer ermittelt. Jeweils über 30 Sekunden gemessen.


    0 Spieler:



    Mit einem Spieler:


    Dies ist exakt das Selbe.


    Heißt also, dass nicht die Zeit in der der Timer läuft gebraucht wird um den Inhalt auszuführen.


    Ich werde das Script jetzt laufen lassen und die Timerwerte bei verschiedenen Spieler begutachten.


    Werdet ihr aber vllt jetzt schon schlau aus den Werten ?


    edit: Hier mal die Werte bei 8 Spielern