Beiträge von Jeffry

    Der normale Chat (T) wird automatisch umgebrochen.
    Wenn es ein eigens programmierter Chat ist (zum Beispiel via Befehl), dann kannst du abfragen, ob die Länge der Eingabe größer als X ist, und wenn ja, dann splittest du den String entsprechend (strmid/strcat/strdel, je nach dem was dir gefällt) und sendest zwei Nachrichten.

    Wollte mal fragen ob einer vlt eine Idee hat was das ist und wie man das beheben kann und ob einer auch das Problem hatte und
    wie er ist gefixxt hat. Ich bin über jede Hilfe dankbar.

    Als Idee:
    Du könntest abfragen, ob der Spieler der schlägt die Taste zum Schlagen gedrückt hat (OnPlayerKeyStateChange). Dann kannst du abfragen, ob der Spieler in der Nähe eines anderen Spielers ist und auf ihn schaut.
    Wenn ja, dann lässt du den getroffenen Spieler eine Animation abspielen, die aussieht, als hätte er den Schlag abbekommen und du ziehst ihm ein paar Health Punkte ab.

    Du setzt den gGameStatus auf 1 und fragst es direkt drunter ab, ob es 1 ist, es ist also immer 1, wenn er zuvor 0 war.
    Versuche es so:
    public CheckDM(playerid)
    {
    if(pInfo[playerid][pLoggedIn] == true)
    {
    if(gInfo[gGameStatus] == 0)
    {
    gInfo[gGameStatus] = 1;
    GameCountDown(3);
    new string[128];
    format(string, sizeof(string), "Map: (DM) ~w~%s (Author: %s)", gInfo[gName], gInfo[gAuthor]);
    TextDrawSetString(gInfo[gTextDraw][2], string);
    }
    else if(gInfo[gGameStatus] == 1)
    {
    PlayerTextDrawShow(playerid, pInfo[playerid][pSpectateTD]);
    TogglePlayerSpectating(playerid, true);
    SpectateNext(playerid);
    }
    else if(gInfo[gGameStatus] == 2)
    {
    PlayerTextDrawShow(playerid, pInfo[playerid][pSpectateTD]);
    TogglePlayerSpectating(playerid, true);
    SpectateNext(playerid);
    }
    }
    return 1;
    }

    Es reicht, wenn du das "else" ganz unten vor dem return entfernst.
    COMMAND:fmsreset(playerid,params[])
    {
    #pragma unused params
    if(ImTutorial[playerid] != 0)return SendClientMessage(playerid,GRAU,"Du kannst keine Befehle nutzen,da du im Tutorial bist.");
    if(GetPVarInt(playerid,"Eingeloggt") == 0)return SendClientMessage(playerid,GRAU,"Du bist nicht eingeloggt!");
    if(Spieler[playerid][pAWAYFROMKEYBOARD] == 1)return SendClientMessage(playerid,WRONGCMD,"Du bist im AFK-Modus und kannst somit keine Befehle nutzen."),SendClientMessage(playerid,WRONGCMD,"BENUTZE: /back");
    if(Spieler[playerid][pLeader] == 4)
    {
    for(new i; i<sizeof(Feuerwehrlabel);i++)
    {
    new FText[128],Fname[64];
    if(MedicVehs[0] == MedicVehs[i]) format(Fname,sizeof(Fname),"RHC-1");
    if(MedicVehs[1] == MedicVehs[i]) format(Fname,sizeof(Fname),"ELW-1");
    if(MedicVehs[2] == MedicVehs[i]) format(Fname,sizeof(Fname),"DLK-1");
    if(MedicVehs[3] == MedicVehs[i]) format(Fname,sizeof(Fname),"HLF-1");
    if(MedicVehs[4] == MedicVehs[i]) format(Fname,sizeof(Fname),"HLF-2");
    if(MedicVehs[5] == MedicVehs[i]) format(Fname,sizeof(Fname),"NEW-2");
    if(MedicVehs[6] == MedicVehs[i]) format(Fname,sizeof(Fname),"HLF-4");
    if(MedicVehs[7] == MedicVehs[i]) format(Fname,sizeof(Fname),"HLF-3");
    if(MedicVehs[8] == MedicVehs[i]) format(Fname,sizeof(Fname),"RTW-2");
    if(MedicVehs[9] == MedicVehs[i]) format(Fname,sizeof(Fname),"RTW-1");
    if(MedicVehs[10] == MedicVehs[i]) format(Fname,sizeof(Fname),"NEF-1");
    if(MedicVehs[11] == MedicVehs[i]) format(Fname,sizeof(Fname),"DLK-2");
    if(MedicVehs[12] == MedicVehs[i]) format(Fname,sizeof(Fname),"ELW-2");
    if(MedicVehs[13] == MedicVehs[i]) format(Fname,sizeof(Fname),"KDOW-1");
    if(MedicVehs[14] == MedicVehs[i]) format(Fname,sizeof(Fname),"ELW-3");
    format(FText,sizeof(FText),"{008500}%s \n Status 2 \n Frei auf Wache",Fname);
    Update3DTextLabelText(Feuerwehrlabel[i],0x008500FF,FText);
    FeuerwehrFMS[i] = 2;
    return 1;
    }
    }
    else if(Spieler[playerid][pLeader] == 14)
    {
    for(new i; i<sizeof(THWGFZ);i++)
    {
    new FText[128],Fname[64];
    if(THWGFZ[0] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Helicopter-1");
    if(THWGFZ[1] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Personenkraftwagen(gl)-2");
    if(THWGFZ[2] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Einsatzfahrzeug-2");
    if(THWGFZ[3] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Jeep Personenkraftwagen-1");
    if(THWGFZ[4] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Jeep Personenkraftwagen-2");
    if(THWGFZ[5] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Leiter Lastkraftwagen-1");
    if(THWGFZ[6] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Leiter Lastkraftwagen-2");
    if(THWGFZ[7] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Leiter Lastkraftwagen-3");
    if(THWGFZ[8] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Leiter Lastkraftwagen-4");
    if(THWGFZ[9] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Gerätekraftwagen(GKW)-1");
    if(THWGFZ[10] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Gerätekraftwagen(GKW)-2");
    if(THWGFZ[11] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Gerätekraftwagen(GKW)-3");
    if(THWGFZ[12] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Gerätekraftwagen(GKW)-4");
    if(THWGFZ[13] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Gerätekraftwagen(GKW)-5");
    if(THWGFZ[14] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Gerätekraftwagen(GKW)-6");
    //if(THWGFZ[15] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Gerätekraftwagen(GKW)-7");
    //if(THWGFZ[16] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Gerätekraftwagen(GKW)-8");
    //if(THWGFZ[17] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Jeep Personenkraftwagen-3");
    //if(THWGFZ[18] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Jeep Personenkraftwagen-4");
    //if(THWGFZ[19] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Jeep Personenkraftwagen-5");
    //if(THWGFZ[20] == THWGFZ[i]) format(Fname,sizeof(Fname),"THW Helicopter-2");
    format(FText,sizeof(FText),"{008500}%s \n Status 2 \n Frei auf Wache",Fname);
    Update3DTextLabelText(THWlabel[i],0xFFFFFFAA,FText);
    THWFMS[i] = 2;
    return 1;
    }
    }
    return SendClientMessage(playerid,0x0069FFFF,"Du bist nicht berechtigt!");
    }

    Außerdem habe ich die Größe deiner Variablen etwas verkleinert, die müssen nicht so groß sein, das verschwendet nur Speicher.

    @Jeffry bitte mal drüber schauen

    Könntest du den Code bitte nochmals korrekt formatiert posten? So wie es momentan ist kann ich leider nichts erkennen.



    Was man vielleicht noch sagen sollte ist, dass die Verschlüsselung hier von md5 nichts bringt, da kein Salt verwendet wird.

    Das kann man machen, hat aber mit dem Tutorial nichts zu tun, da sich das MySQL Plugin nicht um Verschlüsselungen handelt. ;)



    Wenn du Daten von Usern speichern möchtest die eventuell schon Disconnected sind. Würde ich "mysql_query" verwenden weil ich neuer Thread eigentlich unnötig dafür ist.


    Über GetPlayerMoney würde ich auch das Geld nicht abfragen, User können sich das Geld mit s0beit Cheaten und dann abspeichern lassen. ;)


    Und du erstellt nur den Query aber rufst ihn nirgends ab. :) (mysql_query(Handle, Query);)

    Zu 1:
    Das würde ich nicht empfehlen, da der Server so lange steht (=Lag) bis das Query ausgeführt wurde. Daher ein neuer Thread, dann hast du das Problem nicht.


    Zu 2:
    Das stimmt, das muss aber jeder für sich selbst entscheiden und es soll auch nur als Beispiel dienen. Mit einem wirksamen Anti-Cheat kann man es auch so nutzen (habe ich selbst so verwendet, auf meinem Server, ohne Probleme).


    Zu 3:
    Bezüglich welchem Code Teil? Könntest du diesen genauer nennen oder posten?

    Habs momentan nicht global und das Label wird kurz angezeigt, verschwindet dann aber.

    Nicht global, genau.
    Was heißt kurz? Wie kurz wird es angezeigt? Rufst du den Code über einen Timer auf? Ist es vielleicht genau die Dauer des Timers?

    if(dialogid == DIALOG_REGSTEP_3)
    {
    if(response == 1)
    {
    format(PlayerInfo[playerid][pMail], 32, inputtext);
    new str[145];
    format(str, sizeof(str), "[Info] Du hast ''%s'' als deine E-Mail-Adresse angegeben.", PlayerInfo[playerid][pMail]);
    SendClientMessage(playerid, 0xFF0000FF, str);
    }
    return 1;
    }


    Und dann bei deinem SpielerSpeichern:
    format(var, 32, "Email=%s\n", PlayerInfo[playerid][pMail]);fwrite(hfile, var);


    Und beim LoginPlayer muss es auch geladen werden. Poste das gegebenenfalls, wenn du nicht weißt, wie du das laden kannst (du musst auch format oder strcat nutzen, wie beim Dialog).

    Dann weiß ich leider keinen wirklichen Grund mehr, warum SetPlayerName den Server crashen sollte, es passt eigentlich alles.
    Du kannst mal noch folgende Dinge probieren:


    1) Versuche ein SetPlayerName auf einem leeren Server, geht das?
    2) Falls das geht, aktualisiere gegebenenfalls mal deine Server-Dateien, vielleicht geht es dann.
    3) Teste ansonsten mal, ob du irgendwoanders in deinem Server SetPlayerName nutzt, vielleicht in einem /setname Befehl und schaue ob das geht.


    Ansonsten - wenn gar nichts hilft - dann schaue ich es mir nach meinem Urlaub nochmal an.

    Du könntest es mal mit einem Timer versuchen. Ich hatte schon Fälle, da hat eine Umgehung per Timer solch unerklärliches Problem gelöst:


    print("Maske1");
    if(maskehat[playerid] == true) return SendClientMessage(playerid,GRAU,"Du hast deine Maske noch an!");
    print("Maske2");
    SetPlayerAttachedObject(playerid,0,19037,2,0.108000,0.046000,-0.001000,79.900032,80.200012,8.999998);
    print("Maske3");
    SendClientMessage(playerid,GRAU,""#HTML_RED"Tarnung: "#HTML_WHITE"Angezogen!");
    print("Maske4");
    maskehat[playerid] = true;
    print("Maske5");
    SetPlayerSkinEx(playerid,294);
    print("Maske6");
    SetTimerEx("ChangeMaskeName", 200, false, "d", playerid);
    print("Maske8");
    CreateErfolg(playerid,44,"Ich war Luft...","Setze eine Maske auf","",0,10);
    print("Maske9");
    return true;



    Unten im Gamemode:
    forward ChangeMaskeName(playerid);
    public ChangeMaskeName(playerid)
    {
    printf("ChangeMaskeName aufgerufen.");
    new pname[MAX_PLAYER_NAME];
    format(pname,sizeof(pname),"Unbekannt_%i",random(50) + 122);
    printf("Maske7-> %s", pname);
    SetPlayerName(playerid,pname); //<-- Crasht Server
    printf("ChangeMaskeName durchgeführt.");
    return 1;
    }

    Dann hat die Tabelle möglicherweise keinen UNIQUE Schlüssel.
    Das musst du in der Struktur anpassen. So wie die ID in der anderen Tabelle, entweder eine ID hinzufügen und als UNIQUE definieren, oder den Name auf UNIQUE setzen.