Beiträge von Jeffry

    Das ist, sagen wir mal, "normal". Warum? Die Objekte werden ja gestreamt, was bedeutet, dass ein Timer alle X Millisekunden prüft wo du bist und dir dann die Objekte erstellt. Werden die Autos, die vom Server erstellt werden, früher für dich gestreamt als die Objekte, fallen sie runter.
    Das gleiche beim Spieler, du fällst durch die Map, weil du vor den Objekten an der Position bist, das kannst du verhindern indem du den Spieler kurz einfrierst (TogglePlayerControllable) und mit einem Timer wieder "auftaust".


    Die Autos musst du ein paar Meter höher spawnen und eventuell die Stream Distanz der Autos kleiner machen, bzw die der Objekte größer.

    ocmd:a(playerid,params[])
    {
    if(!GetPVarInt(playerid,"Adminlevel")) return SendClientMessage(playerid,-1,"");
    if(!params[0]) return SendClientMessage(playerid,-1,"Verwendung: /a [Text]");
    new text[144],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    format(text,144,"*[Admin-Chat] (%s) %s: %s:",a_rang[GetPVarInt(playerid,"Adminlevel")],name,params);
    for(new i=0; i<MAX_PLAYERS; i++) if(IsPlayerConnected(i) && isPlayerAnAdmin(i, 1)) SendClientMessage(i, -1, text);
    return 1;
    }

    public WMTor(id)
    {
    switch(id)
    {
    case 1: MoveDynamicObject(WMTor1, 2313.5, -1218, 23.700001,2.5);
    case 2: MoveDynamicObject(WMTor2, 2361, -1272.1, 23.700001,2.5);
    }
    return 1;
    }


    Und den Timer so aufrufen:
    SetTimerEx("WMTor",5000,false, "d",1);
    beim anderen Tor:
    SetTimerEx("WMTor",5000,false, "d",2);



    PS: Nächstes mal sag auch, dass du den Streamer verwendest. ;)

    Kommt immernoch /acp [playerid]....


    sscanf in die Tonne treten, das ist das Beste was du machen kannst.


    So:
    ocmd:acp(playerid,params[])
    {
    if(!strlen(params))return SendClientMessage(playerid,-1,"/acp [playerid]");
    if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
    new pID;
    if(!IsNumeric(params)) pID = ReturnPlayerID(params);
    else pID = strval(params);
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
    new string[256];
    format(string, sizeof(string), "Name: %s\n",SpielerName(pID));
    format(string, sizeof(string), "%sTimebans: %d\n",string,GetPVarInt(pID,"Banned1"));
    format(string, sizeof(string), "%sKicks: %d\n",string,GetPVarInt(pID,"Banned2"));
    return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",string,"Ok","");
    }


    Ganz unten im Code einfügen:
    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    GetPlayerName(i, l_name, MAX_PLAYER_NAME);
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    GetPlayerName(i, l_name, MAX_PLAYER_NAME);
    if(strfind(l_name,l_PlayerName,true)!=-1) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }


    stock IsNumeric(string[])
    {
    for (new i = 0, j = strlen(string); i < j; i++)
    {
    if ((string[i] > '9' || string[i] < '0')) return 0;
    }
    return 1;
    }

    Man braucht hier weder strcat noch sonstiges Zeugs. Außerdem war die string-Formatierung völlig daneben bei sämtlichen Posts oben.
    ocmd:acp(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,5)) return SendClientMessage(playerid,ROT,"Zugriff Verweigert");
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1,"/acp [playerid]");
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,ROT,"Spieler ist nicht Online");
    new string[256];
    format(string, sizeof(string), "Name: %s\n",SpielerName(pID));
    format(string, sizeof(string), "%sTimebans: %d\n",string,GetPVarInt(playerid,"Banned1"));
    format(string, sizeof(string), "%sKicks: %d\n",string,GetPVarInt(playerid,"Banned2"));
    return ShowPlayerDialog(playerid,DIALOG_ACP,DIALOG_STYLE_MSGBOX,"Admin Control Panel",string,"Ok","");
    }
    Sollte es dennoch nicht funktionieren, und dir weiter gesagt werden, dass der Spieler nicht online ist, dann hast du wahrscheinlich noch die sscanf Funktion im Code definiert, zu dem Plugin dazu. Diese musst du aus dem Code entfernen wenn du das Plugin nutzt. Und wenn es dann immer noch nicht geht, sag nochmal Bescheid, dann zeige ich dir wie man das mit strtok macht.


    Außerdem:
    SetPVarInt(playerid,"Banned?",++);//<- Da das ++ ist doch hochzählen oder?
    zu:
    SetPVarInt(playerid,"Banned?",GetPVarInt(playerid,"Banned?")+1);


    Irgendwo muss da ein oder mehrere returns fehlen.


    Die Warnung 225 hat rein gar nichts mit fehlenden return's zu tun, im Gegenteil! Unreachable Code heißt "Unereichbarer Code", somit wurden zu viele returns verbaut. Ein fehlendes return siehst du an der Warnung "does not return a value".
    Warnung 225 bekommst du hingegen bei sowas:
    stock Test()
    {
    print("Hallo");
    return 1;
    print("Welt"); //unreachable Code
    return 1; //unreachable Code
    }

    Lass dir doch einfach die Werte ausgeben:
    Spieler[i][pFahrlehrerWait] --;


    zu:
    Spieler[i][pFahrlehrerWait] --;
    printf("pFahrlehrerWait(%d) = %d". i, Spieler[i][pFahrlehrerWait]);


    Und vor die jeweiligen Nachrichten:
    print("Nachricht (30 sek);
    Und so weiter (24, 18, ...)




    Was wird geprintet?

    Dann liegt es hieran:
    strmid(Spieler[playerid][pTsIdent],inputtext,0,strlen(inputtext),strlen(inputtext));


    zu:


    format(Spieler[playerid][pTsIdent], 64 ,inputtext);
    (Oder eben die 64 zu dem was du bei pTsIdent stehen hast.



    Oder: (Wobei ich kein Freund von strmid bin)
    strmid(Spieler[playerid][pTsIdent],inputtext,0,strlen(inputtext)+1,strlen(inputtext));

    Das wird nur funktionieren wenn du in beiden Fraktionen gleichzeitig bist.


    Beispiel:
    Ich bin in Fraktion 1: Nicht 1? Nein --> Nicht 14? Ja. ---> Ende
    Ich bin in Fraktion 14: Nicht 1? Ja --> Ende



    So musst du es machen:
    if(!isPlayerInFrakt(playerid, 1) && !isPlayerInFrakt(playerid, 14)) return SendClientMessage(playerid, rot, "Du bist nicht berechtigt ein Ticket auszustellen.");
    Hier:
    Wenn nicht in 1 UND nicht in 14.


    Beispiel:
    Ich bin in Fraktion 1: Nicht 1? Nein --> Nicht 14? Ja. ---> 0 && 1 -> 0 -> Alles ok, wird nicht angezeigt
    Ich bin in Fraktion 14: Nicht 1? Ja --> Nicht 14? Nein. ---> 1 && 0 -> 0 -> Alles ok, wird nicht angezeigt

    Füge mal nach
    strmid(Spieler[playerid][pTsIdent],inputtext,0,strlen(inputtext),strlen(inputtext));


    das ein:
    printf("1: %s /// 2: %s",Spieler[playerid][pTsIdent],inputtext);


    Was wird geprintet wenn du die Rechte vergibst?

    ich hab den Fehler: das fread hat aus irgendeinen Grund immer nur eine Zeile gelesen darum musste ich nun jede Zeile extra lesen lassen...


    Das ist nicht aus irgendeinem Grund, das ist so ... und auch gut so. Du hättest natürlich sagen müssen, wenn du mehrere Zeilen in einer Datei hast, dass du auch alle Zeilen auslesen willst. Ich, zum Beispiel, speichere in meine Stats-Dateien jeweils nur eine Zeile und versteckte Informationen darunter, daher ist es gut, dass pro "fread" Aufruf eine Zeile weiter gelesen wird.
    Für das nächste mal wenn du ein Problem hast gib also bitte die gesamten Informationen von dir, dann sparst du dir eine halbe Woche und 60 Posts hier. :thumbup:

    Direkt bei OnPlayerConnect wird das nicht funktionieren.
    Setze das zu OnPlayerRequestClass (möglicherweise musst du den Spieler vorher auch erst spawnen (SetSpawnInfo + SpawnPlayer).