Nach Funktion wird Gekickt

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 Abend,
    ich habe eine "Function" geschrieben, sobald diese aber Ausgeführt wird, wird man Gekickt.
    Ausgeführt wird die Funktion hier:



    case DIALOG_GESCHLECHT:
    {
    if(!response)return ShowPlayerDialog(playerid, DIALOG_GESCHLECHT, DIALOG_STYLE_LIST, ""#SERVERNAME_TAG"", ""#FARBE_WEISS"Männlich\nWeiblich", "Weiter", "");
    if(response)
    {
    switch(listitem)
    {
    case 0:
    {
    //new string[512];
    ClearPlayerChat(playerid);
    SendClientMessage(playerid, -1, "["#FARBE_ORANGE"SYSTEM"#FARBE_WEISS"]: Du hast als Geschlecht `Männlich` ausgewählt!");
    SendClientMessage(playerid, -1, "Dein Aussehen kannst du später in einem Kleidungsgeschäft ändern.");
    sInfo[playerid][sGeschlecht] = 1;
    SetPlayerSkin(playerid, 1);
    OnUserSave(playerid);

    IsPlayerTutorialInsel(playerid, 0);
    return 1;
    }
    case 1:
    {
    //new string[512];
    ClearPlayerChat(playerid);
    SendClientMessage(playerid, -1, "["#FARBE_ORANGE"SYSTEM"#FARBE_WEISS"]: Du hast als Geschlecht `Weiblich` ausgewählt!");
    SendClientMessage(playerid, -1, "Dein Aussehen kannst du später in einem Kleidungsgeschäft ändern.");
    sInfo[playerid][sGeschlecht] = 2;
    SetPlayerSkin(playerid, 12);
    OnUserSave(playerid);

    IsPlayerTutorialInsel(playerid, 0);
    return 1;
    }
    }
    }


    Function:



    stock IsPlayerTutorialInsel(playerid, Tutorial = 0)
    {
    switch(Tutorial)
    {
    case 0:
    {
    TogglePlayerSpectating(playerid, false);
    SetPlayerPos(playerid, 2986.8921,-3222.2527,0.5462);
    SetPlayerSkin(playerid, sInfo[playerid][sSkin]);
    SetPlayerColor(playerid, 0x000000FF);
    SetPlayerVirtualWorld(playerid, playerid);
    SetPlayerHealth(playerid, 15);
    print("Kick: Insel");
    }
    }
    return 1;
    }



    Nach dem Print, kommt der Kick.


    Mit freundlichen Grüßen,

  • Konstruier den Dialog doch so. Außerdem sehe ich nirgends einen Kick(playerid); Befehl. Weder im stock noch in diesem Case.
    Somit kann das Kick(playerid); von wo anders ausgeführt werden. Ich würde auf OnUserSave(playerid); tippen.


    Zeige doch mal bitte OnUserSave(playerid);


    Und versichere uns bitte, dass es denn wirklich nur ein Kick und kein Servercrash ist, also die Konsole schließt.

  • if(!response) ist nur dafür da, wenn man ESC Drückt oder aber auch zB den Rechten Button drückt. :)
    Daran wird es ja nicht liegen wenn ich Enter oder mit der Maus auf Weiter Klicke. :)


    OnUserSave;
    stock OnUserSave(playerid){ new query[256]; mysql_format(Handle, query, sizeof(query), "UPDATE `Spieler` SET `Level` = '%d', `Bargeld` = '%d', `Geschlecht` = '%d', `Skin` = '%d', `Tutorial` = '%d' WHERE `ID` = '%d'", GetPlayerScore(playerid), GetPlayerMoney(playerid), sInfo[playerid][sGeschlecht], GetPlayerSkin(playerid), sInfo[playerid][sTutorial], sInfo[playerid][sID]); mysql_pquery(Handle, query); return 1;}


    MfG.


    //e Es ist ein Kick, denn ein Server Crach ist es nicht, Server bleibt Online.

  • Das direkte Speichern der Änderung in der Datenbank ist nicht wirklich schön - man muss ja nicht bei jedem Mist speichern. Es reicht OnUserSave bei OnPlayerDisconnect aufzurufen.


    Zu deinem Problem:


    [wiki]SetSpawnInfo[/wiki] fehlt.


    Wenn du den Spec-Mode deaktivierst, wird der Player gespawnt. Da du vermutlich die ClassSelection überspringst, hast du keinen Spawnpoint gesetzt -> Kick.