Beiträge von Templer

    forward countmedown(Float:StartX, Float:StartY, Float:StartZ);


    new countdown = 5;
    new countdowntimer;


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/starten", cmdtext, true, 10) == 0)
    {
    new Float:PlayerPos[3]; GetPlayerPos(playerid, PlayerPos[0], PlayerPos[1], PlayerPos[2]);
    countdowntimer = SetTimerEx("countmedown",1000,1,"fff", PlayerPos[0], PlayerPos[1], PlayerPos[2]);
    }
    return 0;
    }


    public countmedown(Float:StartX, Float:StartY, Float:StartZ)
    {
    if(countdown > 0)
    {
    new string[128];
    format(string,sizeof(string),"%d",countdown);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerInRangeOfPoint(i, 20.0, StartX, StartY, StartZ)) continue;
    GameTextForPlayer(i,string,1000,5);
    }
    countdown --;
    }
    else
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerInRangeOfPoint(i, 20.0, StartX, StartY, StartZ)) continue;
    GameTextForPlayer(i,"~g~GO GO GO",1000,5);
    }
    KillTimer(countdowntimer);
    countdown = 5;
    }
    }

    Schöner GF Copy & Paste DeadLock und es ist sogar falsch. Er will was anderes xD

    new PlayerText3D:3DTextForPlayer[MAX_PLAYERS];


    public OnPlayerConnect(playerid)
    {
    3DTextForPlayer[playerid] = -1;
    }


    public OnPlayerDisconnect(playerid)
    {
    if(3DTextForPlayer[playerid] != -1) DeletePlayer3DTextLabel(playerid, 3DTextForPlayer[playerid]);
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new string[128];
    if(!strcmp(cmdtext, "/a", true, strfind(cmdtext, " ", false)))
    {
    if(!IsPlayerConnected(playerid)) return 1;
    new reason[32], Float:PlayerPos[3];
    strmid(reason, cmdtext, strfind(cmdtext, " ", false)+1, strlen(cmdtext));
    if(!strlen(reason)) return SendClientMessage(playerid, 0xFFFFFF00, "Benutze : /a [Text]");
    GetPlayerPos(playerid, PlayerPos[0], PlayerPos[1], PlayerPos[2]);
    if(3DTextForPlayer[playerid] != -1) DeletePlayer3DTextLabel(playerid, 3DTextForPlayer[playerid]);
    3DTextForPlayer = CreatePlayer3DTextLabel(playerid,reason,0x008080FF,PlayerPos[0], PlayerPos[1], PlayerPos[2],40.0);
    return SendClientMessage(playerid, 0xFFFFFF00, "3D-Text (Spielerseitig) erstellt.");
    }
    }


    //Edit: Kleiner Fix..

    if(strcmp(cmd, "/wanted", true) == 0)
    {
    if(!IsPlayerConnected(playerid)) return 1;
    if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Du bist kein Polizist / FBI Agent / Nationalgarde!");
    new textstring[512], i;
    strcat(textstring, "Gesuchte Verbrecher:~n~~w~");
    while(i < MAX_PLAYERS)
    {
    if(!IsPlayerConnected(i) || WantedLevel[i] < 1) continue;
    GetPlayerName(i, giveplayer, sizeof(giveplayer));
    format(string, sizeof(string), "~>~%s: ~r~%d~w~~n~",giveplayer,WantedLevel[i]);
    strcat(textstring, string);
    i++;
    }
    TextDrawSetString(txtwanted, textstring);
    TextDrawShowForPlayer(playerid, txtwanted);
    return 1;
    }

    @ Trooper

    Zitat

    Aus diesem Grund bugghaft, weil diese Funktionen bei falschen Verwendung bzw. bei richtiger Verwendung meisten (betreffend Strings) Ihren Geist aufgeben und nur sinnlos an CPU Lastung bringen oder wie zum Beispiel dem Herrn Kollegen Hagi Probleme bereiten.

    Der Sinn dahinter ist klar, wenn man den Timer von Samp kennt. Viele plagen sich damit, dass Ihre Scripts oft stottern bzw. die Timer nur unnötig an Ressourcen verbrauchen. Nur weil uns die Samp Entwickler Funktionen bauen, heißt es nicht das man daran gebunden wäre. Ich meine von deiner Aussicht wäre ja auch dcmd, sscanf, YSI, SII und vieles mehr auch unnütz, denn es ist ja eigentlich schon vorhanden und nur weil es vorhanden ist, bedeutet es nicht, dass es oftmals auch gut ist. Natürlich kann man sich über die SetTimer Funktion nicht beschweren, kein Zweifel. Jedoch wenn es eine andere Methode gibt, welche genau den gleichen Nutzen bringen würde, wieso dann nicht in die Tat umsetzen? Ich will keinesfalls nun versuchen deinen "Senf" verfaulen zu lassen, sondern Ihn nur in den Kühlschrank zurückstellen... Anbei möchte ich dir aber einen Kritik ablassen. Bitte verwende richtige Wortwahlen und keine protzigen und leicht provozierende Anmerkungen wie "Angeblich es nicht geht" und "Absolut Sinnlos", denn was nach diesen Wörtern kommt wurde auch schon bereits erwähnt.

    forward CheckVehicleLastPos();


    new Float:gVehiclePos[MAX_VEHICLES][3];
    new bool:gVehicleCreated[MAX_VEHICLES];


    public OnGameModeInit()
    {
    SetTimer("CheckVehicleLastPos", 1500, 1);
    }


    public OnVehicleSpawn(vehicleid)
    {
    GetVehiclePos(vehicleid, gVehiclePos[vehicleid][0], gVehiclePos[vehicleid][1], gVehiclePos[vehicleid][2]);
    gVehicleCreated[vehicleid] = true;
    }


    public OnVehicleDeath(vehicleid)
    {
    gVehicleCreated[vehicleid] = false;
    }


    public CheckVehicleLastPos()
    {
    new Float:nVehiclePos[3];
    for(new vehicleid = 0; vehicleid < MAX_VEHICLES; vehicleid++)
    {
    if(!gVehicleCreated[vehicleid]) continue;
    GetVehiclePos(vehicleid, nVehiclePos[0], nVehiclePos[1], nVehiclePos[2]);
    if(nVehiclePos[0] != gVehiclePos[vehicleid][0] || nVehiclePos[1] != gVehiclePos[vehicleid][1] || nVehiclePos[2] != gVehiclePos[vehicleid][2])
    {

    //Code was geschehen soll, wenn er sich bewegt hat.

    GetVehiclePos(vehicleid, gVehiclePos[vehicleid][0], gVehiclePos[vehicleid][1], gVehiclePos[vehicleid][2]);
    }
    }
    }

    new gCarRespawnTimerID = -1;


    dcmd_carrespawn(playerid,params[])
    {
    if(gCarRespawnTimerID != -1) return SendClientMessage(playerid, weiß, "CarRespawn wird gerade durchgeführt...");
    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);
    gCarRespawnTimerID = 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);
    KillFastTimer(gCarRespawnTimerID);
    gCarRespawnTimerID = -1;
    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);
    }
    }

    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);
    }


    Hast du auch oben GM folgendes definiert?
    #define SetTimer SetFastTimer
    #define SetTimerEx SetFastTimerEx
    #define KillTimer KillFastTimer


    //Edit: Ich sehe grad deine Meldung und wie du dein Timer definiert hast! Zitat vom Topic Oben:

    Zitat

    Natürlich bringt sich das Töten von Timern nichts, wenn es sich nicht wiederholt.

    @ Hagi Danke für die Bugmeldung, ich habe nun einige Bugfixes betreffend FastKillTimer behoben. Ich editier oben mal das Thema...


    //Edit wegen neuer Version:
    Hier nun ein kleines Beispiel für dich Hagi, wie es funktioniert:


    forward PlayerTimer(playerid);


    public OnPlayerConnect(playerid)
    {
    SetPVarInt(playerid,"PlayerTimerID",SetFastTimerEx("PlayerTimer", 1000, 1, "d", playerid)); //Erstellt für Spieler Timer und lagert ID in PVar 'PlayerTimerID' ab.
    }
    public OnPlayerDisconnect(playerid)
    {
    KillFastTimer(GetPVarInt(playerid, "PlayerTimerID")); //Killt den SpielerTimer mit der ID von 'PlayerTimerID'
    DeletePVar(playerid, "PlayerTimerID"); //Löscht den PVar 'PlayerTimerID'
    }


    public PlayerTimer(playerid) //Spielerseitiger Timer
    {
    //Blah Blah Blah
    return true;
    }


    @ RFT Naja, mir wäre es lieber wenn du mir keine Beurteilung gibst, wenn du es nichtmal getestet hast ^^ Da ich jederzeit auf Vorschläge warte.

    enum gteamInfo //Datentyp Definition für gTeam Fahrzeuge
    {
    gTeamCarID,
    gTeamID,
    gTeamModelID,
    Float:gTeamSpawnX,
    Float:gTeamSpawnY,
    Float:gTeamSpawnZ,
    Float:gTeamSpawnAngle,
    gTeamColor1,
    gTeamColor2,
    }
    new gTeamCar[][gteamInfo] = { //Fahrzeug Koordinaten für die Fahrzeuge
    {0, 1, 560, 1234.0, 1234.0, 1234.0, 1234.0, 1, 1},
    {0, 1, 561, 1234.0, 1234.0, 1234.0, 1234.0, 1, 1},
    {0, 1, 522, 1234.0, 1234.0, 1234.0, 1234.0, 1, 1},
    {0, 1, 460, 1234.0, 1234.0, 1234.0, 1234.0, 1, 1},
    {0, 2, 611, 1234.0, 1234.0, 1234.0, 1234.0, 1, 1},
    {0, 2, 540, 1234.0, 1234.0, 1234.0, 1234.0, 1, 1},
    {0, 2, 535, 1234.0, 1234.0, 1234.0, 1234.0, 1, 1},
    {0, 2, 524, 1234.0, 1234.0, 1234.0, 1234.0, 1, 1}
    };
    new gTeamAllowed[MAX_VEHICLES]; //Zur Abspeicherung welches Team erlaubt ist.
    new gTeam[MAX_PLAYERS]; //Die TeamID vom Spieler


    stock IsAgTeamCar(vehicleid)
    {
    new car;
    for(; car < sizeof(gTeamCar); car++)
    {
    if(vehicleid != gTeamCar[car][gTeamCarID]) continue;
    return car;
    }
    return -1;
    }


    public OnGameModeInit()
    {
    for(new teamcar = 0; teamcar < sizeof(gTeamCar); teamcar++)
    {
    gTeamCar[teamcar][gTeamCarID] = CreateVehicle(gTeamCar[teamcar][gTeamModelID], gTeamCar[teamcar][gTeamSpawnX], gTeamCar[teamcar][gTeamSpawnY], gTeamCar[teamcar][gTeamSpawnZ], gTeamCar[teamcar][gTeamSpawnAngle], gTeamCar[teamcar][gTeamColor1], gTeamCar[teamcar][gTeamColor2], -1);
    gTeamAllowed[gTeamCar[teamcar][gTeamCarID]] = gTeamCar[teamcar][gTeamID];
    }
    }


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(IsAgTeamCar(vehicleid) && gTeam[playerid] != gTeamAllowed[vehicleid]) return ClearAnimations(playerid);
    }

    Dein OnGameModeInit Prozedur wird von einem anderen Code abgeblockt. Bedeutet er kann bei einer Sache nicht weitermachen und Lädt daher den Rest nicht. Deshalb empfehle ich dir in OnGameModeInit ab LoadPropertys (wegen den Logs) es zu debuggen mit sagen wir:
    print("Debug 1");
    //Dann paar Zeilen später, sagen wir 10 Zeilen halt
    print("Debug 2");
    //Danach wieder paar Zeilen später
    print("Debug 3");
    //...
    //Und am Ende, machst du dann sowas wie
    print("Script geladen...");


    Danach schickste uns den Log neu mit Scriptcode Teil, wo er nichtmehr weiterarbeitet ^^ Außer du es selbst beheben kannst.

    Die Theorie von Hijashy, jedoch mit optimiertem Code:
    new cars[2]; //Fahrzeugdefinition. Die Zahl ersetzen durch Anzahl an Fahrzeuge.


    stock IsADefinedCar(vehicleid)
    {
    for(new v = 0; sizeof(cars); v++) //Geht alle Definierten Fahrzeuge durch.
    {
    if(vehicleid == cars[v]) return true; //Wenn vehicleid mit definiertem Car übereinstimmt, gebe Wert 'Wahr' zurück.
    }
    return false; //Ansonsten halt 'Falsch' ^^.
    }


    public OnGameModeInit()
    {
    //Man fängt bei 0 an zu zählen, welche auch als Zahl angenommen wird.
    cars[0] = CreateVehicle(...); //Fahrzeug 1
    cars[1] = CreateVehicle(...); //Fahrzeug 2
    }


    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    if(IsADefinedCar(vehicleid)) //Überprüft ob eingestreamtes Fahrzeug ein Definiertes Fahrzeug von 'cars' ist.
    {
    SetVehicleParamsForPlayer(vehicleid,forplayerid,0,1); //Sperrt das Fahrzeug für Spieler der es sieht ab.
    }
    }

    stock GetPlayerID(const SpielerName[]) // 14493
    {
    new pName5[MAX_PLAYER_NAME];
    for(new i; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    GetPlayerName(i, pName5, sizeof(pName5)); //14500
    if(strcmp(SpielerName, pName5, true)==0)
    {
    return i;
    }
    }
    }
    return -1; //14507
    }
    Suche dann nachforward split(const strsrc[], strdest[][], delimiter);und lösche diese Zeile.