Beiträge von Jeffry

    Deshalb kannst du zusätzlich die Code-Änderung aus Post #8 machen, dann tritt der Fehler nicht mehr im Log auf, sondern du spawnst dann am Standard Spawn, falls eine falsche Fraktion eingetragen wurde.
    Eventuell hast du die 12 ja noch von einem vorherigen Stand des Codes, als es die 12 noch gab.



    Sprich:
    12 in deinem Profil ändern.
    Code aus Post #8 wie gezeigt anpassen.


    Dann tritt der Fehler nicht mehr auf.

    Kein Problem.


    Schau mal im Konto des Spielers bei dem das Problem aufgetreten ist, ob bei seiner Fraktions ID ein Wert drin steht. Wenn ja, 12? Wenn ja, ändere das auf 11 ab (oder etwas anderes zwischen 1 und 11).
    Falls du da nichts findest, kannst du zu dem Array mit den Koordinaten einen weiteren Eintrag hinzufügen.


    Wenn du das nicht machen willst, dann kannst du es auch so machen:
    In case 2:
    if(pInfo[playerid][fraktion]==0) SetSpawnInfo(playerid,0,pInfo[playerid][skin], 1760.9659,-1895.8420,13.5616,270.3469, 0,0, 0,0, 0,0);
    zu:
    if(pInfo[playerid][fraktion]<=0 || pInfo[playerid][fraktion] >= sizeof(FrakSpawns)) SetSpawnInfo(playerid,0,pInfo[playerid][skin], 1760.9659,-1895.8420,13.5616,270.3469, 0,0, 0,0, 0,0);


    Das hätte dann die Wirkung, dass der Spieler am Standard-Spawn spawnt, wenn es keinen entsprechenden Eintrag für ihn gibt.

    Der Spieler (du?) bist dann laut pInfo[playerid][fraktion] in Fraktion 12.
    Durch diese Zeile new fid=pInfo[playerid][fraktion]-1; wird fid auf 11 gesetzt.


    Da das Array mit den Spawns genau 11 Positionen hat, sind die Indizes 0 bis 10 gefüllt (das entspricht 11 Einträgen).
    Mit fid = 11 darauf zuzugreifen (markierte Zeile) geht somit nicht.


    Du musst entweder noch einen weiteren Eintrag hinzufügen, oder die FraktionsID des Spielers ändern.

    Schreibe es mal in einer Zeile:
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER) return
    SendClientMessage(playerid,ROT,"Du bist nicht der Fahrer dieses Autos!");
    zu:
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER) return SendClientMessage(playerid,ROT,"Du bist nicht der Fahrer dieses Autos!");


    Falls das nicht klappt, versuche es so:
    printf("State von %d ist: %d (sollte sein: %d)", playerid, GetPlayerState(playerid), PLAYER_STATE_DRIVER);
    if(GetPlayerState(playerid)!=PLAYER_STATE_DRIVER) return SendClientMessage(playerid,ROT,"Du bist nicht der Fahrer dieses Autos!");
    Was steht dann im Server Log, wenn du den Befehl eingibst?

    Zwecks dem Error:
    FraktionRangName(sI[playerid][pFraktion]), FraktionRangName(sI[playerid][pFraktion], sI[playerid][pFraktionRang]);
    zu:
    FraktionRangName(sI[playerid][pFraktion]), FraktionRangName(sI[playerid][pFraktion]), sI[playerid][pFraktionRang]);


    Zwecks dem Unknown Command:
    Wie sieht deine FraktionName Funktion aus, und die Variable in der die Namen stehen (mit enum).

    format(string, sizeof(string), ""#FARBE_GELB"Du hast dir ein %s als Supporter Fahrzeug Gespawnt!", VehicleName[GetVehicleModel(vID)-400]);zuformat(string, sizeof(string), ""#FARBE_GELB"Du hast dir ein %s als Supporter Fahrzeug Gespawnt!", VehicleName[GetVehicleModel(SuppCarVeh[playerid])-400]);
    Oder alternativ, da du ja immer die 560 erstellst: format(string, sizeof(string), ""#FARBE_GELB"Du hast dir ein %s als Supporter Fahrzeug Gespawnt!", VehicleName[160]);

    Schein irgendwas nicht bei zu klappen. Bekomme nichtmal mehr den Timer angezeigt.

    Du hast zuerst den Timer gestartet und dann den Timer eine Zeile drunter wieder beendet, also die beiden Zeilen, die ich dir gegeben habe, vertauscht.


    Ich habe dir auch noch das format angepasst, damit du da keine Variablen brauchst, ist etwas geschickter dann:
    if(PlayerInfo[playerid][pJailTime])
    {
    new string[128];
    if(jailTimer[playerid] != -1) KillTimer(jailTimer[playerid]);
    jailTimer[playerid] = SetTimerEx("SetPlayerUnjail", 1000, 1, "d", playerid);
    SendClientMessage(playerid,COLOR_BUSBLUE,"Rein mit dir!");
    SendClientMessage(playerid,COLOR_BUSBLUE,"Verbrecher gehören in den Knast!");
    format(string,sizeof(string),"Du bist noch für %d Minuten und %d Sekunden im Knast!",PlayerInfo[playerid][pJailTime]/60,PlayerInfo[playerid][pJailTime]%60);
    SendClientMessage(playerid,COLOR_BUSBLUE,string);
    SetPlayerPos(playerid,265.9037,77.2875,1001.0391);
    SetPlayerInterior(playerid,6);
    }


    /60 gibt die Minuten an
    und %60 ist Modulo 60, da gibt den Rest an, der bei einer Teilung durch 60 übrig bleibt, was in dem Fall den Sekunden entspricht.
    Kleiner Trick am Rande :)

    Das klappt so nicht wirklich, nur für ID 0.
    Mache es so:
    Unter den Includes:
    new jailTimer[MAX_PLAYERS] = {-1,...}; //Das ... setzt alle Indizes auf -1


    Dann den Timer so starten:
    SetTimer("SetPlayerUnjail", 1000, 1);
    ändern zu:
    if(jailTimer[playerid] != -1) KillTimer(jailTimer[playerid]);
    jailTimer[playerid] = SetTimerEx("SetPlayerUnjail", 1000, 1, "d", playerid);


    Und das Public so:
    forward SetPlayerUnjail(playerid);
    public SetPlayerUnjail(playerid)
    {
    PlayerInfo[playerid][pJailTime]--;
    if(PlayerInfo[playerid][pJailTime]>0)
    {
    new string[128];
    new Time = PlayerInfo[playerid][pJailTime], Min = Time/60, Sek = Time - Min*60;
    format(string,sizeof(string),"%d Minuten %d Sekunden",Min,Sek);
    GameTextForPlayer(playerid,string,2000,3);
    }
    else
    {
    SetTimerEx("SpawnTimer",2000,false,"i",playerid);
    GameTextForPlayer(playerid,"Versuche ein besserer Mensch zusein",10000,3);
    if(jailTimer[playerid] != -1) KillTimer(jailTimer[playerid]);
    jailTimer[playerid] = -1;
    }
    return 1;
    }


    Bei OnPlayerDisconnect:
    if(jailTimer[playerid] != -1) KillTimer(jailTimer[playerid]);
    jailTimer[playerid] = -1;

    Ja. Das Geld wird nämlich erst bei OnPlayerSpawn entfernt, aber nur nachdem man gestorben ist, daher die Abfrage per Variable.

    Füge das unter den Includes ein:
    new bool:justDied[MAX_PLAYERS];


    In OnPlayerConnect:
    justDied[playerid] = false;


    In OnPlayerDeath:
    justDied[playerid] = true;


    In OnPlayerSpawn:
    if(justDied[playerid] == true)
    {
    GivePlayerMoney(playerid, 100);
    justDied[playerid] = false;
    }