Spawnchange - Map durchfall

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Tag Com,


    Und zwar habe ich folgendes Problem, wenn ich Spawnchange mache und auf Haus. Und dann mich spawne fall ich durch die Map.


    Code:


    Spoiler anzeigen
    else if(Spieler[playerid][pSpawnchange] == 1) // Haus
    {
    if(Spieler[playerid][pHouseKey] == 1)
    {
    for(new i=1;i<MAX_HOUSES;i++)
    {
    SetPlayerPos(playerid, Haus[i][ExitX], Haus[i][ExitY], Haus[i][ExitZ]);
    SetPlayerInterior(playerid, Haus[i][hInterior]);
    SetPlayerVirtualWorld(playerid, i);
    }
    }
    else if(Spieler[playerid][pHouseKey] == 0)
    {
    Spieler[playerid][pSpawnchange] = 0;
    SendClientMessage(playerid, COLOR_WHITE, "Da du kein Haus besitzt, wurde dein Spawn auf Noobspawn gesetzt.");
    SetPlayerPos(playerid, 1763.2972,-1895.9244,13.5622);
    return 1;
    }
    }


    Ich hoffe es kann mir jemand helfen das zu beheben.

    • Offizieller Beitrag

    Setz den Spieler beim Rausgehen einfach +2 höher


    „Nicht das, was du nicht weißt, bringt dich in Schwierigkeiten, sondern dass, was du sicher zu wissen glaubst, obwohl es gar nicht wahr ist.“
    Mark Twain

    ---
    ICH BIN NUR HIER UM LEUTE ANZUSCHREIEN

  • Also:


    Du fragst ab ob er ein Hauskey hat, wenn ja, also wenn 1 dann gehst du eine Schleife aller Häuser durch.


    Hier ist auch der Fehler.
    1. fängst du bei deiner Schleife mit 1 an und nicht mit 0. ein Array beginnt immer mit 0. Kann natürlich sein das der Index 0 deines Arrays für irgentetwas rreserviert ist, wovon ich nun erstmal nicht ausgehe.


    2. du lässt ihn zu jedem Haus spawnen! Du gehst die schleife durch und setzt dann bei jedem Haus die position des Spielers, du musst vorher aber Abfragen ob es denn auch sein Haus ist.


    3. Du setzt die Virtuelle Welt von dem Spieler in die Welt id von dem aktuellen Wert der Schleife also von dem Aktuellen Wert i. Angenommen du die schleife ist bei haus 5, wird er in virtuelle Welt 5 gesetzt. Das kann natürlich richtig sein, da ich das System dahinter nicht kenne, sieht aber erstmal nicht richtig aus


    Also:


    Überprüf deine Schleife, ob es richtig ist das sie bei 1 anfängt und nicht bei 0.
    Füge eine Abfrage ein ob das Aktuelle Haus der Schleife auch das ist wo er spawnen soll, Ich denke er soll an seinem Haus spawnen, also ob es sein haus ist.
    Überprüfe ob die virtuelle Welt richtig gesetzt wird, sieht falsch aus, da du die Position und das Interior auch aus dem Array liest.



  • if(Spieler[playerid][pHouseKey] == 0)
    {
    Spieler[playerid][pSpawnchange] = 0;
    SendClientMessage(playerid, COLOR_WHITE, "Da du kein Haus besitzt, wurde dein Spawn auf Noobspawn gesetzt.");
    SetPlayerPos(playerid, 1763.2972,-1895.9244,13.5622);
    }
    else if(Spieler[playerid][pHouseKey] == 1)
    {
    SetPlayerPos(playerid, Haus[e_Haus][ExitX], Haus[e_Haus][ExitY], Haus[e_Haus][ExitZ]);
    SetPlayerInterior(playerid, Haus[e_Haus][hInterior]);
    SetPlayerVirtualWorld(playerid, e_Haus);
    }


    Ich habe dies jetzt so aber es geht nicht.

  • wie hast du denn e_Haus definiert und zeig mal deine Variabel Haus



    enum e_Haus
    {
    hCreated,
    Float:EnterX,
    Float:EnterY,
    Float:EnterZ,
    Float:ExitX,
    Float:ExitY,
    Float:ExitZ,
    hBesitzer[MAX_PLAYER_NAME],
    hOwned,
    hName[32],
    hPreis,
    hMieten,
    Text3D:hText,
    hPickup,
    hLock,
    hMietPreis,
    hInterior,
    hKasse,
    hdbID,
    hHealthUpgrade,
    hArmorUpgrade
    }
    new Haus[MAX_HOUSES][e_Haus];