Beiträge von Jeffry

    Ist die Reichensteuer korrekt, wenn du sie in dem Code oben eingibst?
    Wenn ja, wie speicherst du sie beim Beenden des Servers, und wie lädst du sie (Code)?


    => Ist sie nach dem Speichern schon falsch (wenn der Server beendet wird), oder wird sie erst durch das Laden falsch?

    Ok, versuche bitte mal folgenden Code, ob es dann klappt:
    public OnVehicleStreamIn(vehicleid, forplayerid)
    {
    if(Trailerid[vehicleid] != -1)
    {
    AttachTrailer(Trailerid[vehicleid],vehicleid);
    }
    else if(Tractorid[vehicleid] != -1)
    {
    AttachTrailer(vehicleid, Tractorid[vehicleid]);
    }
    return 1;
    }


    Versuche ob es so klappt.
    Wenn es so klappt, dann baue ich dir noch die Positionsprüfung ein.

    Ok, dann liegt es daran, dass es bei AddPlayerClass drin steht. Das ist auch vollkommen normal so.
    Ablauf beim Spawn:


    Tot -> Spawn bei Position von AddPlayerClass/SetSpawnInfo -> OnPlayerSpawn -> Dortiges SetPlayerPos.


    Wenn du verhindern willst, dass der Spieler bei der AddPlayerClass Position spawnt, dann musst du wie bereits gesagt [wiki]SetSpawnInfo[/wiki] nutzen, und zwar dort, wo der Spieler dem DM beitritt musst du es zu der DM-Spawn Koordinate setzen, und dort wo er es verlässt, da musst du es wieder zur AddPlayerClass Koordinate setzen.
    Jetzt eben das Problem, dass du ja mehrere DM Spawns hast.


    Du kannst folgendes mal versuchen:
    1) Beim Betreten der Arena setzt du die Position und setzt direkt danach über eine random-Funktion wie in DmSpawn das SetSpawnInfo (anstatt SetPlayerPos) des Spielers. Das wäre dann der nächste Spawn-Punkt nach dem Tod.
    2) Bei OnPlayerSpawn machst du das ebenfalls so, anstatt DmSpawn rufst du dort die neue Funktion DmSpawnInfo (z.B. so genannt) auf, dann wird direkt nach dem Spawn die nächste Spawn-Koordinate schon gesetzt.


    Wenn der Spieler die Arena verlässt, dann setzt du SetSpawnInfo wieder zur AddPlayerClass Koordinate.


    Versuche es mal so.

    Hm, dann dürfte eigentlich alles passen.
    Füge mal diesen Print bei beiden Create3DTextLabel's ein:
    HausInfo[ho][hLabel]=Create3DTextLabel(str,COLOR_AO,HausInfo[ho][hPosX],HausInfo[ho][hPosY],HausInfo[ho][hPosZ],0,1);
    printf("ho: %d / Erstellte Label ID: %d", ho, _:HausInfo[ho][hLabel]);


    Was wird dir dann im Server Log ausgegeben, wenn du es so laufen lässt?
    Nicht dass er die Labels gar nicht erstellen kann, weil du schon am Limit bist, dann können wir ewig danach suchen.

    Du musst die Position etwas verschieben, damit sich die Türe flüssig rotieren kann.
    Nimm die zweite Koordinate und rechne sie -0.06, dann hast du die gleiche Geschwindigkeit.
    Du kannst es auch einfach so hinschreiben, dann ist es vielleicht besser ersichtlich:
    MoveObject(SFPDINTDOOR[1], -1596.85254, 692.64398 - 0.06, 0.02, 0.00000, 0.00000, 173.29387);


    Analog für die anderen Türen.

    Ah, gut dass du das Video gemacht hast.
    Das liegt daran, dass du die Position nicht änderst, sondern nur die Rotation. In dem Fall muss die Position minimal geändert werden (habe den Y Wert um 0.06 kleiner gemacht) und die Geschwindigkeit extrem klein sein.
    Versuche es so:
    MoveObject(SFPDINTDOOR[0], -1597.89685, 704.30829, 12.79330, 0.02, 0.00000, 0.00000, 324.67960);


    Passe gegebenenfalls die 0.02 etwas an, je größer desto schneller, je kleiner desto langsamer die Türe.

    welche FilterScripts geladen sind?

    Da müsstest du beim Laden jedes Filterscripts (jeweils bei OnFilterScriptInit/-Exit) einen Eintrag in eine Datei/Datenbank machen, damit du es daraus auslesen kannst, ob geladen oder nicht. Direkt abfragen kann man das nicht.



    auflisten welche FilterScripts sich im FilterScripts Ordner befinden?

    Hiermit sollte das gehen: http://forum.sa-mp.com/showthread.php?t=92246

    Unter den Includes:
    new pStep[MAX_PLAYERS];


    Beim Textdraw:
    if(clickedid == SkinTD[1]) // Kleidungs Auswahl: Weiter
    {
    if(PlayerInfo[playerid][p_PolizeiUmkleiden] == true && PlayerInfo[playerid][p_ZivUmkleiden] == false)
    {
    if(pStep[playerid] < sizeof(PolizeiSkins)-1)
    {
    pStep[playerid]++;
    SetPlayerSkin(playerid, PolizeiSkins[pStep[playerid]][SkinID]);
    }
    }
    return 1;
    }
    if(clickedid == SkinTD[2]) // Kleidungs Auswahl: Zurück
    {
    if(PlayerInfo[playerid][p_PolizeiUmkleiden] == true && PlayerInfo[playerid][p_ZivUmkleiden] == false)
    {
    if(pStep[playerid] > 0)
    {
    pStep[playerid]--;
    SetPlayerSkin(playerid, PolizeiSkins[pStep[playerid]][SkinID]);
    }
    }
    return 1;
    }


    Bei der Auswahl:
    if(PolizeiSkins[pStep[playerid]][PolizeiEXP] > PlayerInfo[playerid][EXP]) return SendClientMessage(playerid, 0xFF0000FF, "Error: Nicht genug Experience.");


    Dort wo der SPieler in die Selektion gesetzt wird:
    pStep[playerid] = 0;

    Ok. Setzt du die Position des Spielers zu diesem Hauptspawn bei OnPlayerSpawn, oder wo nutzt du die überall?
    Poste bitte die Codes, die die Koordinaten des Hauptspawns nutzen.

    Also der einzige Fehler liegt hier:

    SQL
    UPDATE pRP_account_main SET Online='0',Tutorial='1',Admin='7',Verwarnungen='0',EventMotor='0',FLeaderRechte='0',Fraktion='0',FraktionsRang='0',FraktionsURang='0',FraktionsSperre='0',FraktionsGehalt='0',Job='0',JobWarns='0',JobSperre='0',ArbeitslosenGeld='0',Geschlecht='1',SpielerAlter='0',Level='0',Geld='10000',GWD='0',ZiviNote='0',FAbteilung='0',Bankguthaben='0',BankPin='0',WantedSterne='0',WantedPunkte='0',Suspects='0',Wanted_Grund1='',Wanted_Grund2='',Wanted_Grund3='',Wanted_Grund4='',Wanted_Grund5='',Crimes='0',STVOcrimes='0',KampfStyle='4',Handy='0',Handycoins='0',HandyStatus='0',HandyAkku='0.000000',HandyNummer='0',Handyflat='0',Handyflatbuyinbiz='0',Letzte_X='1128.671264',Letzte_Y='-1599.754760',Letzte_Z='22.855937',Letzte_Interior='0',Letzte_VirtualWorld='0',pSelectHome='0',HausMieter='0',Spawn='0',Hotel='0',Tod='0',Tot_X='0.000000',Tot_Y='0.000000',Tot_Z='0.000000',Tot_Interior='0',Tot_VirtualWorld='0',TotZeit='0',Friedhof='0',FriedhofZeit='0',ImKnast='0',KnastZeit='0',KnastKaution='0' WHERE Name='Taylor_Swift'

    Allerdings ist die Syntax korrekt.


    Füge diesen Code mal in deiner Datenbank im phpMyAdmin-SQL-Fenster ein, und schaue, was dir für ein Fehler ausgegeben wird. Möglicherweise fehlt eine der angegebenen Spalten in der Datenbank.

    Das ist so minimal kurz, ich würde behaupten, dass das "normal" ist, zumindest wenn bei OnPlayerSpawn die Position gesetzt wird, da der Spieler logischerweise kurzzeitig am Spawn steht.
    Mir ist es erst aufgefallen, als ich es ganz langsam angeschaut habe.



    Kommt dir die Position denn irgendwoher bekannt vor, also hast du dort deine Class Selection, oder nutzt du die Position irgendwo?

    Das ist natürlich schlecht, denn ohne diese Info kann ich dir nicht sagen warum der Server abstürzt.
    Dann musst du es manuell herausfinden, und zwar indem du zwischen die Zeilen prints einfügst, und schaust, bis zu welcher Zeile der Server kommt, bis der Server abstürzt.


    Beispiel:


    public OnPlayerSpawn(playerid)
    {
    SendClientMessage(playerid, -1, "Hallo.");
    GivePlayerWeapon(playerid, 46);
    return 1;
    }
    Wird zu:
    public OnPlayerSpawn(playerid)
    {
    printf("Starte OnPlayerSpawn für %d", playerid);
    SendClientMessage(playerid, -1, "Hallo.");
    printf("1");
    GivePlayerWeapon(playerid, 46);
    printf("2");
    return 1;
    }


    Zu Anfangs musst du es ja nicht zwischen jede Zeile setzen, sondern kannst es in Blöcken machen, du musst dich dann eben an die Zeile, die als letztes ausgeführt wird, hinarbeiten, dann weißt du, dass die nächste Zeile den Crash verursacht.
    Würde als im Beispiel als letztes die "1" im Server Log stehen, dann wüsstest du, dass GivePlayerWeapon den Crash verursacht.
    Schau mal, ob du so etwas herausfinden kannst.