Beiträge von Jeffry

    Dann setze dort wo du dich registrierst und dort wo du einen neuen Charakter erstellen willst den Wert auf -1:
    dini_Set(Spieler,"Skin","-1");


    Und dann:
    new Spieler[64];
    new Sname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Sname,sizeof(Sname));
    format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
    new skin = dini_Int(Spieler,"Skin");
    if(fexist(Spieler) && skin != -1)
    {
    SetPVarInt(playerid,"Skin",skin);
    SetSpawnInfo(playerid,0,skin,1766.2850,-1895.8571,13.5629,273.2245,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    SetCameraBehindPlayer(playerid);
    }

    Ok, dann soll er es so ausprobieren.
    forward CheckFeuer();
    public CheckFeuer() {
    printf("CheckFeuer aufgerufen. Feuer: %d | IsFWDuty: %d", Feuer, IsFWDuty());
    if(Feuer == 1) return 1; // Falls ein Feuer vorhanden ist wird kein neues mehr erstellt
    if(!IsFWDuty()) return 1; // Falls kein Feuerwehrmann OnDuty ist wird es übersprungen
    printf("Erstelle Feuer.");
    CreateFire(random(3));
    return 1;
    }


    stock IsFWDuty() {
    print("IsFWDuty aufgerufen.");
    for(new i = 0;i < MAX_PLAYERS;i++) {
    if(!IsPlayerConnected(i)) continue;
    printf("Spieler %d: fwduty: %d", i, fwduty[i]);
    if(fwduty[i]==1) return 1;
    }
    printf("Niemand.");
    return 0;
    }


    ocmd:fwduty(playerid,params[]){
    #pragma unused params
    if(!IsPlayerInFrakt(playerid,12))return 1;
    if(!IsPlayerInRangeOfPoint(playerid,5,feuerwehrdutypoint))return ErrorMsg(playerid,"Hier nicht.");
    if(fwduty[playerid]==0)
    {
    //hier rein gehen
    fwduty[playerid]=1;
    printf("DUTYCHANGEON: Spieler %d -> %d", playerid, fwduty[playerid]);
    SetPlayerSkin(playerid,277);
    GivePlayerWeapon(playerid,3,1);
    GivePlayerWeapon(playerid,42,10000000);
    SetPlayerColor(playerid,COLOR_BRIGHTRED);
    SetPVarInt(playerid,"feuerwehrduty",1);
    format(string,sizeof(string),"HQ: %s hat den Feuerwehr-Dienst begonnen.",SpielerName(playerid));
    feuerwehrMessage(COLOR_BLUE,string);
    return 1;
    }
    if(fwduty[playerid]==1)
    {
    //hier aus dem dienst gehen
    fwduty[playerid]=0;
    printf("DUTYCHANGEOFF: Spieler %d -> %d", playerid, fwduty[playerid]);
    Feuer = 0;
    SetPlayerColor(playerid,COLOR_WHITE);
    ResetPlayerWeapons(playerid);
    format(string,sizeof(string),"HQ: %s hat den Feuerwehr-Dienst beendet.",SpielerName(playerid));
    feuerwehrMessage(COLOR_BLUE,string);
    SetPlayerSkin(playerid,SpielerInfo[playerid][Skin]);
    }
    return 1;
    }


    Genau nochmal die 5 Schritte machen, die du erklärt hast, und dann den Server Log posten, wenn das Feuer wieder fälschlicherweise ausbricht.

    Bei OnPlayerRequestClass:
    new Spieler[64];
    new Sname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Sname,sizeof(Sname));
    format(Spieler,sizeof(Spieler),"/Accounts/%s.txt",Sname);
    if(fexist(Spieler))
    {
    new skin = dini_Int(Spieler,"Skin");
    SetPVarInt(playerid,"Skin",skin)
    SetSpawnInfo(playerid,0,skin,1766.2850,-1895.8571,13.5629,273.2245,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    SetCameraBehindPlayer(playerid);
    }


    Die ganzen AddPlayerClass's müssen zu OnGameModeInit.

    Die Fehler sind aber nicht alle in diesem Code.
    Versuche es so:
    ocmd:creategutschein(playerid, params[])
    {
    if(PlayerInfo[playerid][pAdmin] <= 7)
    {
    new typx, wertx;
    if(sscanf(params,"ii",typx,wertx))
    {
    SendClientMessage(playerid, 0xFF0000FF, "/createcode [Typ] [Wert]");
    return SendClientMessage(playerid, 0xFF0000FF, "1 = Geld | 2 = Respektpunkte | 3 = Premium | 4 = UBB Fahrzeug");
    }
    if(typx < 1 || typx > 4)return SendClientMessage(playerid,-1,"Bitte wähle einen Typ aus von 1-4");
    if(wertx < 1 || wertx > 1000000) return SendClientMessage(playerid,-1,"Wert bitte nur von 1 - 1Mio.");
    new code[40], str[145];
    format(code, sizeof(code), "%04d-%04d-%04d-%04d", random(10000), random(10000), random(10000), random(10000));
    format(str, sizeof(str), "Gutscheincode : %s",code);
    SendClientMessage(playerid,ROT,str);
    format(code, sizeof(code), "/codes/%s.txt", code);
    dini_Create(code);
    dini_IntSet(code, "typ", typx);
    dini_IntSet(code, "wert", wertx);
    }
    else
    {
    SendClientMessage(playerid, 0xFF0000FF, "Du hast kein Adminlevel 7");
    }
    return 1;
    }


    Das kann aber sein, dass die Warnungen durch einen der Errors auftreten und daher weiterhin da sind. Poste bitte die Codes zu den Errors.

    Auf Anfrage in PN:


    Also ich sehe an dem Code nichts falsches, das sieht gut aus.
    Kannst du bitte erklären, welche Dinge du genau machst?


    Du gehst OnDuty, dann wird nach X Minuten ein Feuer gelegt, du löschst es und gehst dann OffDuty?
    Und dann kommt nach X Minuten wieder ein Feuer?
    Mit dieser Meldung im Chat (bzw. eine der anderen beiden)?
    SendClientMessageToAll(0xFFFFFFFF, "[Feueralarm] Ein {FF0000}Feuer{FFFFFF} brach in der {00FF00}LS Mall{FFFFFF} aus!");

    Besteht das Problem noch, du hast nicht mehr geantwortet.
    Falls ja, dann kann ich dir leider nicht weiterhelfen, ich wüsste keinen Grund mehr, der noch zu einem Absturz führen kann, da alles korrekt ist.
    Was du machen kannst, was leider ein etwas größerer Aufwand ist, ist das Plugin upzudaten, sprich die R39-3 zu verwenden. Dann sollte das Problem nicht mehr auftreten (zuvor ein Backup machen!).

    Beim Speichern fügst du das hinzu:
    format(var, 32, "CarFuel=%d\n",PlayerCar[playerid][x][Fuel]);fwrite(hFile, var);


    Beim Laden das:
    if( strcmp( key , "CarFuel" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerCar[playerid][x][Fuel] = strval( val ); }

    Das kannst du mit dieser Funktion herausfinden:
    stock GetPosHinterVeh(vehicleid, Float:dist, &Float:x, &Float:y, &Float:z) //©Jeffry
    {
    new Float:a;
    GetVehicleZAngle(vehicleid, a);
    GetVehiclePos(vehicleid, x, y, z);
    x += (-dist * floatsin(-a, degrees));
    y += (-dist * floatcos(-a, degrees));
    return true;
    }


    Den Checkpoint erstellst du dann einfach an der Position, die du zurück bekommst, sprich:
    new Float:x, Float:y, Float:z;
    GetPosHinterVeh(GetPlayerVehicleID(playerid), 3.0, x, y, z);
    SetPlayerCheckPoint(playerid, x, y, z, 2.0);

    Ich gehe mal davon aus, dass keine weitere BanID existiert, die die Bedingungen erfüllt.
    Teste es so und poste dann was im Server Log steht:
    new string[1400];
    for(new i=0; i<sizeof(banInfo); i++)
    {
    printf("i: %d | id: %d | name: %d | typ: %d", i, banInfo[i][ban_id], strlen(banInfo[i][ban_name]), banInfo[i][ban_type]);
    if(!banInfo[i][ban_id])continue;
    if(!strlen(banInfo[i][ban_name]))continue;
    if(banInfo[i][ban_type]!=1)continue;
    format(string, sizeof(string),"%s-%s[%d]-\n",string,banInfo[i][ban_name],banInfo[i][ban_id]);
    print(string);
    }
    ShowPlayerDialog(playerid,DIALOG_BanListe_Info,DIALOG_STYLE_LIST,"Normale Ban Liste",string,"Auswählen","Abbrechen");


    PS: Lösche bitte den Doppelthread: Schleife geht nicht

    Das passt alles.


    Jetzt so:
    Server aus machen
    Server Log löschen
    Tabelle in der Datenbank leeren
    Server starten
    Server aus machen
    Server starten
    Log posten

    Ersetze in den Parametern hinter dem Query:
    sInfo[playerid][money]
    mit:
    GetPlayerMoney(playerid)


    Wahrscheinlich nutzt du die Variable gar nicht.

    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i' WHERE id='%i",sInfo[playerid][level],sInfo[playerid][money],sInfo[playerid][alevel],sInfo[playerid][id]);
    zu:
    format(query,sizeof(query),"UPDATE user SET level='%i',money='%i',alevel='%i' WHERE id='%i'",sInfo[playerid][level],sInfo[playerid][money],sInfo[playerid][alevel],sInfo[playerid][id]);


    Am Ende des Queries hat ein ' gefehlt.