Spawn Funktioniert nicht mehr [Selfmade]

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
  • Wenn ich auf "Spawnen" bei meinen Textdraw klicke, dann werde ich in die Luft geportet. Ich finde den Fehler einfach nicht..
    Hier mal der Code: Das hier unter OnPlayerClickPlayerTextdraw else if(playertextid == SpawnButton[playerid][1])
    {
    new pPosition[4][125],Query[126];
    switch(SpawnAuswahl[playerid])
    {
    case 1:
    {
    SendClientMessage(playerid,C_Info,"INFO: Du wurdest in Las Venturas gespawnt!");
    SetPlayerPosEx(playerid,1690.5719,1452.8687,11.7662,271.0359,0,playerid+1);
    PlayerTextDrawHide(playerid,SpawnButton[playerid][0]); PlayerTextDrawHide(playerid,SpawnButton[playerid][1]);
    CancelSelectTextDraw(playerid);
    format(Query,sizeof(Query),"UPDATE _spieler SET sPosX='%.2f',sPosY='%.2f',sPosZ='%.2f',sPosA='%.2f' WHERE sName='%s'",pPosition[0],pPosition[1],pPosition[2],pPosition[3],SpielerInfo[playerid][sName]);
    mysql_query(Query);
    SpawnPlayer(playerid);
    print("LV");
    }
    case 2:
    {
    SendClientMessage(playerid,C_Info,"INFO: Du wurdest in Los Santos gespawnt!");
    SetPlayerPosEx(playerid,438.2268,-1750.1665,9.9549,221.8188,0,playerid+1);
    PlayerTextDrawHide(playerid,SpawnButton[playerid][0]); PlayerTextDrawHide(playerid,SpawnButton[playerid][1]);
    CancelSelectTextDraw(playerid);
    format(Query,sizeof(Query),"UPDATE _spieler SET sPosX='%.2f',sPosY='%.2f',sPosZ='%.2f',sPosA='%.2f' WHERE sName='%s'",pPosition[0],pPosition[1],pPosition[2],pPosition[3],SpielerInfo[playerid][sName]);
    mysql_query(Query);
    SpawnPlayer(playerid);
    print("LS");
    }
    }
    }


    und das hier dann unter OnPlayerSpawn: public OnPlayerSpawn(playerid)
    {
    if(SpielerInfo[playerid][sEingeloggt] == true)
    {
    if(IsPlayerNPC(playerid))
    {
    SpielerInfo[playerid][sEingeloggt] = true;
    SpawnPlayer(playerid);
    }
    else
    {
    SetPlayerDetails(playerid);
    print("Details");
    if(GetPlayerAdminLevel(playerid) >= 1)
    {
    TextDrawShowForPlayer(playerid, ReportTextdraw);
    UpdateReportTextdraw();
    }/*
    if(SpielerInfo[playerid][sTod] >= 1)
    {
    new str[56];
    format(str,sizeof(str),"** %s liegt schwer verletzt auf dem Boden.");
    SendRangeMessage(playerid,C_Interaktion,str,10);
    TogglePlayerControllable(playerid,false);
    ApplyAnimation(playerid, "CRACK", "crckdeth2", 4.0, 1, 0, 0, 0, 1);
    SetPlayerColor(playerid, C_Grau);
    }*/
    if(SpielerInfo[playerid][sPosX] == 0.0)
    {
    SpawnChange(playerid);
    }
    else
    {
    print("SetPos");
    SetPlayerPosEx(playerid,SpielerInfo[playerid][sPosX],SpielerInfo[playerid][sPosY],SpielerInfo[playerid][sPosZ],SpielerInfo[playerid][sPosA],SpielerInfo[playerid][sInterior],SpielerInfo[playerid][sVirtualWorld]);
    }
    return 1;
    }
    }
    return SetTimerEx("FixKick",1000,0,"i",playerid);
    }


    Hier meine SetPlayerPosEx Funktion: stock SetPlayerPosEx(playerid,Float:pX,Float:pY,Float:pZ,Float:pA,pInterior,pVirtualWorld)
    {
    SetPlayerInterior(playerid,pInterior);
    SetPlayerPos(playerid,pX,pY,pZ);
    SetPlayerFacingAngle(playerid,pA);
    SetPlayerVirtualWorld(playerid,pVirtualWorld);
    SetCameraBehindPlayer(playerid);
    SpielerInfo[playerid][sPosX] = pX; SpielerInfo[playerid][sPosY] = pY; SpielerInfo[playerid][sPosZ] = pZ; SpielerInfo[playerid][sPosA] = pA;
    SpielerInfo[playerid][sInterior] = pInterior; SpielerInfo[playerid][sVirtualWorld] = pVirtualWorld;
    }


    Danke schonmal :)


    Kaliber:love:

    Einmal editiert, zuletzt von eLiTe. ()

  • Setze mal:
    SetSpawnInfo(playerid, playerid, GetPlayerSkin(playerid), 1690.5719,1452.8687,11.7662,271.0359, 0, 0, 0, 0, 0, 0);
    vor SpawnPlayer.


    Das Selbe nur mit den anderen Koordinaten bei LS.



    Für den Fall das immer noch nicht funktioniert, kannst du uns dann sagen, in welcher Reihenfolge deine prints geprintet werden?

  • Erstmal danke für deine Antwort Jeffry
    So nun aber wieder zum Problem:
    Wenn ein Account vorhanden ist (Und ich nach dem Relogg dann in der DB die Postion gesetzt habe) wird das hier gepprintet:
    Details
    SetPos
    Details
    SetPos


    Wenn ich jedoch keinen habe wird das geprintet:
    Details
    SetPos


    Und dann fliege ich in die Luft. Hier mal ein Screen davon:


    mfg

  • Das sieht ganz danach aus, dass du ein Spawn System hast, das nicht die "normalen" Spawn Buttons verwendet. Du hast dann wohl TogglePlayerSpectating benutzt, damit die Buttons weg sind.
    Das musst du, bevor du die Position setzt, wieder beenden: http://wiki.sa-mp.com/wiki/TogglePlayerSpectating (also auf 0 setzen).


    Das das beim einen zwei mal kommt liegt wohl daran, dass du das ganze zwei mal aufrufst, so wie hier:
    if(IsPlayerNPC(playerid))
    {
    SpielerInfo[playerid][sEingeloggt] = true;
    SpawnPlayer(playerid);
    }
    Es ist nicht sehr vorteilhaft bei OnPlayerSpawn SpawnPlayer aufzurufen, da SpawnPlayer wieder OnPlayerSpawn aufruft.


  • Vielen Dank, es funktioniert endlich! :)


    Jetzt habe ich aber noch eine Frage: Warum bekomme ich einen Fehler von Crashdetect (Dem Plugin) wenn ich sterbe!?

    Code
    [15:28:59] [debug] Run time error 4: "Array index out of bounds"
    [15:28:59] [debug]  Accessing element at index 65535 past array upper bound 29
    [15:28:59] [debug] AMX backtrace:
    [15:28:59] [debug] #0 0001c8d8 in public OnPlayerDeath () from LifeofGerman-Remake.amx
    [15:28:59] [death] eLiTe... died 255


    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(SpielerInfo[playerid][sEingeloggt] == true && SpielerInfo[killerid][sEingeloggt] == true && killerid != playerid)
    {
    SpielerInfo[playerid][sTode]++;
    //SpielerInfo[playerid][sTod] = 120;
    SpielerInfo[killerid][sMorde]++;
    SendClientMessage(killerid, C_Rot,"Du hast ein Verbrechen begangen (Vorsätzlicher Mord). Zeuge: Niemand");
    }
    return 1;
    }

  • Wenn du ohne killer stirbst, gibt OnPlayerDeath killerid = INVALID_PLAYER_ID zurück, was dein Array "sprengt".


    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(killerid != INVALID_PLAYER_ID)
    {
    if(SpielerInfo[playerid][sEingeloggt] == true && SpielerInfo[killerid][sEingeloggt] == true)
    {
    SpielerInfo[playerid][sTode]++;
    //SpielerInfo[playerid][sTod] = 120;
    SpielerInfo[killerid][sMorde]++;
    SendClientMessage(killerid, C_Rot,"Du hast ein Verbrechen begangen (Vorsätzlicher Mord). Zeuge: Niemand");
    }
    }
    return 1;
    }


  • ahhh klar, man bin ich dooof ._.
    Vielen Dank! :)) :love: