Was ist an diesem Cod falsch??

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
  • Beitrag von Nathan1995 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Also erstmal: Du erstellst einen Timer innerhalb einer schleife. Das heisst bei dem Befehl /coutndown und den anderen publics werden 500 Timer (!) erstellt. Das solltest du auf keinen fall tun. Zudem solltest du eine IsPlayerConnected abfrage mit in die schleife bringen. Und eine Globale variable anzulegen halte ich auch für überflüssig.
    Versuch es mal so:
    forward Countdown(playerid);
    forward Countdown2(playerid);
    forward Countdown3(playerid);
    forward Countdown4(playerid);


    if(strcmp("/Countdown",cmdtext,true)==0||strcmp("/CD",cmdtext,true)==0)
    {
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
    {
    SendClientMessage(i,Gelb,"Countdown wurde auf 3 Sekunden gestellt!");
    TogglePlayerControllable(i,0);
    }
    }
    SetTimer("Countdown",1000,false);
    return 1;
    }
    public Countdown(playerid)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
    {
    SendClientMessage(CountDown,Gelb,"3!");
    }
    }
    SetTimer("Countdown2",1000,false);
    }
    public Countdown2(playerid)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
    {
    SendClientMessage(CountDown,Gelb,"2!");
    }
    }
    SetTimer("Countdown3",1000,false);
    }
    public Countdown3(playerid)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
    {
    SendClientMessage(CountDown,Gelb,"1!");
    }
    }
    SetTimer("Countdown4",1000,false);
    }
    public Countdown4(playerid)
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,30,X,Y,Z) && IsPlayerInAnyVehicle(i))
    {
    SendClientMessage(i,Gelb,"GO GO GO GO GO GO GO GO GO");
    TogglePlayerControllable(i,1);
    }
    }
    }

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Aber auch hier ein kleiner Hinweis:


    Du kannst den ganzen Spaß auch angenehmer gestalten, in dem du nur einen Timer nutzt!


    Wie kann das Problem gelöst werden mit nur einem Timer?
    1. Variable counter = 3
    2. Der Timer wird jede Sekunde aufgerufen, repeat true
    3. Im Timer wird counter als "3" ausgegeben und dann um einen verringert: counter--
    4. Wenn counter == 0 : GoGoGo & Timer killen


    Probiere ein wenig schonender und sauberer zu scripten :)

  • Beitrag von Nathan1995 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • 1. Dein Index (playerid) ist unnötig, es ändert sich nicht viel.


    Du startest deinen Timer, der jede Sekunde aufgerufen wird ganz normal, nur dass du jetzt sagst, das er ihn immer wiedeholen soll.
    Und am Ende killst du den Timer: siehe wiki : KillTimer

  • Beitrag von Nathan1995 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Nöööö :P Schick mal den Teil, den du schon geändert hast zu einem Timer, mit KillTimer und co :)


    Ist eigentlich nicht mehr weit entfernt


    Grober Aufbau


    SetTimer("MeinTimer", 1000, true);


    public MeinTimer()
    {
    switch (counter)
    {
    case 3:
    {
    }
    [...]
    case 0:
    {
    --> Hier Timer killen :P
    }
    }
    counter--;
    }

  • Beitrag von Nathan1995 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Weil durch den Timer immer die Funktion Counter aufgerufen wird, und somit immer wieder counter auf 3 gesetzt wird. Mach new counter=3; mal global dann sollte es gehen. Und vergiss nicht es bei case 0 wieder auf 3 zu setzen.

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • Beitrag von Nathan1995 ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • do.de - Domain-Offensive - Domains für alle und zu super Preisen