Beiträge von M4rciii

    Hallo, hier ist ein Tutorial für Timer. Viel Spaß xD


    Also, die Grundlage ist es einen Timer zu erstellen, man benutzt SetTimer und SetTimerEx:
    SetTimer(funcname[], interval, repeating);
    SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);


    funcname: Die Funktion, die nach der abgelaufenen Zeit abgerufen werden soll.
    interval: Die Zeit des Timers bis zur Ausführung in MILLISEKUNDEN
    repeat: Soll der Timer wiederholt werden? 1=JA 0=NEIN
    Beide Timerfunktionen geben die TimerID zurück


    Beispiel:
    CheckTimer = SetTimer("CheckPlayers",5000,1); // Timer mit Wiederholung alle 5000ms = 5 Sekunden
    WerbungsTimer = SetTimer("Werbung",5*60*1000,1); // Timer mit Wiederholung alle 5*60*1000ms = 300000ms = 300 Sekunden
    DelayTimer[playerid] = SetTimerEx("Teleport",500,0,"iffff",playerid,X,Y,Z,A); // Timer ohne Wiederholung nach 500ms = 0,5 Sekunden


    Es Fällt auf: Da ist noch was bei SetTimerEx
    Hierbei werden Variablen mit dem Timer mitgeliefert. "iffff" bedeutet, es wird 1 Integer(playerid) gefolgt von 4 Floats(X,Y,Z,A) mitübertragen.
    Hier eine Übersicht, welche Buchstaben man für was einsetzen muss:
    i = Integer
    d = Dezimalzahl
    s = String
    b = Bool
    f = Float



    Die Funktion "Teleport" könnte so aussehen:
    public Teleport(id,Float:X,Float:Y,Float:Z,Float:A)
    {
    SetPlayerPos(id,X,Y,Z);
    SetPlayerFacingAngle(id,A);
    }


    VORSICHT: Sowas würde nicht mit Standardfunktionen wie SetPlayerPos funktionieren.


    Wenn ein Timer gestoppt werden soll, zum Beispiel beim Beenden des Gamemodes benutzt man KillTimer.
    KillTimer(timerid);


    timerid: Die TimerID die bei SetTimer(Ex) zurückgegeben wurde
    SetTimer und SetTimerEx können mit KillTimer beendet werden...



    Ich hoffe ich konnte euch damit weiterhelfen, sodass es reibungslos läuft.
    Ich werde es evtl noch etwas updaten...


    MfG, M4rciii :)

    Das kann eig nicht sein...
    public OnPlayerDeath(playerid, killerid, reason)
    {
    dkills[killerid]++;
    ddeaths[playerid]++;
    return 1;
    }
    Die KillerID bekommt einen Kill dazu und die PlayerID(der gekillte) bekommt einen Tod dazu...Ich seh den Fehler nicht.
    Bist du sicher, dass zu alles andere rausgemacht hast?

    if (strcmp(cmdtext, "/auf", true)==0)
    {
    if(PlayerToPoint(15.0, playerid, -1514.9021, -816.6779, 58.5230))
    {
    SetObjectRot(Tor,0.0000,0.8594,258.7500);
    }
    return 1;
    }


    if (strcmp(cmdtext, "/zu", true)==0)
    {
    if(PlayerToPoint(15.0, playerid, -1514.9021, -816.6779, 58.5230))
    {
    SetObjectRot(Tor,0.0000,270.6186,258.7500);
    }
    return 1;
    }



    if(PlayerToPoint(15.0, playerid, -1514.9021, -816.6779, 58.5230)) würde heissen ob er NICHT im Radius 15 ist.


    Und lösch das #define PlayerToPoint, das hilft bei "undefined symbol" auch nicht weiter und ersetz es hiermit:
    stock PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
    return 1;
    }
    }
    return 0;
    }

    public OnPlayerCommandText(playerid, cmdtext[]) {
    if (strcmp(cmdtext, "/auf", true)==0)
    {
    MoveObject(Tor,2028.244141, 1338.613037, 9.987190,4);
    return 1;
    }


    if (strcmp(cmdtext, "/schrankehoch", true)==0)
    {
    SetObjectRot(Schranke,rotX,rotY,rotZ);
    return 1;
    }


    if (strcmp(cmdtext, "/zu", true)==0)
    {
    MoveObject(Tor, 2028.251099, 1337.621704, 9.987190,4);
    return 1;
    }
    return 0;
    }


    Bei SetObjectRot(Schranke,rotX,rotY,rotZ); musst du die Rotationen eintragen im hochgefahrenen Zustand.

    SetTimerEx("Flash",300,0,"p",playerid);
    SetTimerEx("Disableflash",25000,0,"f", playerid);
    Playerid ist also eine Float oder ein "p"??
    Du kannst I=Integer oder D=Dezimalzahl benutzen:
    SetTimerEx("Flash",300,0,"i",playerid);
    SetTimerEx("Disableflash",25000,0,"i", playerid);
    Wie du es gemacht hast, gehts nur für ID 0.

    Hier ein TuT


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/opengate", true))
    {
    if(gTeam[playerid] == TEAM_COPS)
    {
    MoveObject(lspdgate, 1597.288696, -1637.887085, 14.706839, 4.0);
    SendClientMessage(playerid, 0xAAAAAAAA, "Tor wurde geöffnet");
    SetTimer("lspdgateclose",3000, false);
    }
    else
    {
    SendClientMessage(playerid, 0xAAAAAAAA,"Du musst Polizist sein um das Tor zu öffnen!");
    }
    return 1;
    }
    return 0;
    }

    AddPlayerClass(1,1361.7102,-1647.5931,13.3828,270.1750,0,0,0,0,0,0);
    Skin-ID 1 gibt es nicht...
    SKIN-IDs


    Außerdem fehlt bei RequestClass das return, daran könnte es liegen...
    public OnPlayerRequestClass(playerid, classid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
    }

    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER) // Als Fahrer
    {
    SendClientMessage(playerid,COLOR_YELLOW," Du bist ein Fahrer xD");
    }
    if(newstate == PLAYER_STATE_PASSENGER) // Als Beifahrer
    {
    SendClientMessage(playerid,COLOR_YELLOW," Du bist ein Beifahrer xD");
    }
    return 1;
    }

    if(strcmp(cmd,"/ip",true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] >= 1)
    {
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_YELLOW," /ip [id]");
    giveplayerid = ReturnUser(tmp);
    if(IsPlayerConnected(giveplayerid))
    {
    new ip[15];
    GetPlayerIp(giveplayerid,ip,sizeof(ip));
    GetPlayerName(giveplayerid,giveplayer,sizeof(giveplayer));
    format(string,sizeof(string)," %s's IP: %s",giveplayer,ip);
    SendClientMessage(playerid,COLOR_YELLOW,string);
    }
    }
    else SendClientMessage(playerid,COLOR_YELLOW," Spieler nicht online!");
    return 1;
    }