Beiträge von Allrounder18

    Problem wurde gelöst.


    Wie mache ich hier, dass sich nicht je weitrman weg ist die Nachricht farblich verändert sondern der Name?
    @Kaliber

    SpactateModus scheint es wohl nicht zu sein.
    Er fält ja bei registrierungsvorgang


    Code
    #include "../include/core/defines.inc"
    #include "../include/core/enums.inc"
    #include "../include/core/news.inc"
    #include "../include/core/basis.inc"
    #include "../include/core/stocks.inc"
    #include "../include/core/daten.inc" hier snd due publcs udn forwards
    #include "../include/core/dialoge.inc"
    #include "../include/core/befehle.inc"
    //Systeme
    #include "../include/systeme/anmeldesystem.inc" hier  ist onplaerquestclass udn onplayer spawn drin

    Edit:
    Mein Log

    @Kaliber

    Während dem Registrierungsvorgang falle ich und landeam 0 Punkt, wenn die Registrierung abgeschlossen ist lande ich ebenso am 0 Punkt.


    SaveUserStats sieht so aus

    Code
    UPDATE `accounts` SET `Level` = '1', `Euro` = '0', `Cent` = '0', `Skin` = '78',`Admin` = '0', `SpawnX` = '132.000000',`SpawnY` = '-67.288498',`SpawnZ` = '1.578125',`SpawnR` = '-0.000000', `SpawnInt` = '0', `SpawnWorld` = '0', `LastLogin` = '14.02.2019', `LastLoginZeit` = '18:10:56'   WHERE `ID` = '16'

    Über kurze Hilfe am TS wäre ich sehr dankbar

    Schau ob alles aufgerufen wird, wie sehen die Werte nach dem Register aus
    Veränderst du die?


    Wird alles richtig geladen?

    Wie meinst das?

    Ich hab folgendes Problem, wenn ich spawne lande ich am 0 Punkt und die Koordinaten werden nicht in die DB eingetragen, obwohl alles richtig zu sein scheint.



    Code
    public OnPlayerSpawn(playerid)
    {
    	SetPlayerPos(playerid, SpielerDaten[playerid][player_Spawn][0], SpielerDaten[playerid][player_Spawn][1], SpielerDaten[playerid][player_Spawn][2]);
    	SetPlayerFacingAngle(playerid, SpielerDaten[playerid][player_Spawn][3]);
    	SetPlayerInterior(playerid, SpielerDaten[playerid][player_Interior]);
    	SetPlayerVirtualWorld(playerid, SpielerDaten[playerid][player_World]);
    	SetCameraBehindPlayer(playerid);
    	SetPlayerSkin(playerid, SpielerDaten[playerid][player_Skin]);
    	return 1;
    }

    Danke, es funktioniert einwandfrei


    Edit:


    Ich ba jetzt gemacht das sich die Farbe ändert je weiter die anderen Spieler weg sind, jedoch wird die Nachricht nicht angezeigt. Was ist da falsch?
    @LeonMrBonnie


    Edit: Code umgebessert
    Muss es if(!SpielerDaten[i][player_Eingeloggt](i)) continue; sein oder ohne (i)?

    Hi!


    Wie kann ich machen,dass von dem Namen die Unterstriche im Chat entfernt werden z.B(Max_Mustermann -> Max Mustermann)?


    MfG


    Edit:
    Momentan versuche ich es so

    C
    stock strreplace(string[], find, replace)
    {
        for(new i=0; string[i]; i++)
        {
            if(string[i] == find)
            {
                string[i] = replace;
            }
        }
    }



    C
    public OnPlayerText(playerid, text[])
    {
        new message[128],rpname[255];
        rpname = SpielerDaten[playerid][player_RPName];
        strreplace(rpname, '_', ' ');
        format(message, sizeof(message), "{969696}%s sagt: {FFFFFF}%s", rpname, text);
        return SendClientMessageToAll(WEISS, message);
    }


    Das funktioniert jedoch nicht.



    Was muss ich da machen damit das _ im RP Namen mit nem Leerzeichen ersetzt wird?

    Problem gelöst.


    Ich musste meinalter = RegisterInfo[playerid][register_Alter]; in den Dialog einbauen und musste RegisterInfo[playerid][register_Alter] durch meinalter beim INSERT ersetzen.


    Danke @Kaliber für den Tipp.

    Moin!


    Hier nochmal meine Frage, diesmal etwas besser zusamegefasst.


    Ich hab einen Dialog in dem manbei der Registrierug das Geburtsdatum des Ingame Charakters eingeben muss wie zb 20.10.1995. Wenn man dann auf weiter geht steht im nächsten Dialog "Du bist also %d Jahre alt". Da komt 23 raus, so wie es sein soll. Dieses Alter speichere ich in MySQL ab, jedoch steht in MySQL nicht 23 sondern 101 oder manchmal auch 97. Ich benutze die MySQL Version 41-4. Beim Abspeichern in MySQL benutze ich auch %d.

    Code
    if(dialogid == DIALOG_REGISTER2) { if(!response) return ShowPlayerDialog(playerid, DIALOG_REGISTER1, DIALOG_STYLE_PASSWORD, "{FFFFFF}Registration [1/4]", "{FFFFFF}Um fortzufahren wähle bitte ein Passwort", "{FFFFFF}Weiter", "{FFFFFF}Abbrechen"); if(strlen(inputtext) != 10)return ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_INPUT, "{FFFFFF}Registration [2/4]", "{FFFFFF}Um fortzufahren gebe bitte dein Geburtsdatum ein (Charakter)\n(dd.mm.yyyy)", "{FFFFFF}Weiter", "{FFFFFF}Zurück"); if(strfind(inputtext, ".",false)!=-1) { new Date[3][265]; split(inputtext, Date, '.'); if(!IsValidDate(strval(Date[0]),strval(Date[1]),strval(Date[2]))) { ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_INPUT, "{FFFFFF}Registration [2/4]", "{FFFFFF}Um fortzufahren gebe bitte dein Geburtsdatum ein (Charakter)\n(dd.mm.yyyy)", "{FFFFFF}Weiter", "{FFFFFF}Zurück"); SendErrorMessage(playerid,"Dieses Datum ist ungültig"); return 1; } RegisterInfo[playerid][register_Alter] = GetAlter(strval(Date[0]),strval(Date[1]),strval(Date[2])); format(RegisterInfo[playerid][register_Geburtsdatum], 225, "%s", inputtext); new string[256]; format(string, sizeof(string), "{FFFFFF}Du bist also %d Jahre alt", RegisterInfo[playerid][register_Alter]); ShowPlayerDialog(playerid, DIALOG_REGISTER3, DIALOG_STYLE_MSGBOX, "{FFFFFF}Registration [2/4]", string, "{FFFFFF}Weiter", "{FFFFFF}Zurück"); } else { return ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_INPUT, "{FFFFFF}Registration [2/4]", "{FFFFFF}Um fortzufahren gebe bitte dein Geburtsdatum ein (Charakter)\n(dd.mm.yyyy)", "{FFFFFF}Weiter", "{FFFFFF}Zurück"); } return 1;






    Hier wird bei Abschlusss der Registration das das Alter in MySQL gespeichert


    Code
    if(dialogid == DIALOG_REGISTER5) { if(!response)return ShowPlayerDialog(playerid, DIALOG_REGISTER5, DIALOG_STYLE_INPUT, "{FFFFFF}Registration [4/4]", "{FFFFFF}Um fortzufahren wähle bitte einen gültigen Roleplay Namen\n(z.B: Mark_Mayr)", "{FFFFFF}Weiter", "{FFFFFF}Zurück"); if(strfind(inputtext, "_",false)!=-1) { printf("%d",RegisterInfo[playerid][register_Alter]); format(RegisterInfo[playerid][register_Name],64,"%s",inputtext); new query[300]; mysql_format(handle, query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`,`RPName`,`Geburtsdatum`,`Geschlecht`,`Alter`) VALUES ('%e', MD5('%e'),'%e','%e','%d','%d')", SpielerDaten[playerid][player_Name], RegisterInfo[playerid][register_Passwort], RegisterInfo[playerid][register_Name],RegisterInfo[playerid][register_Geburtsdatum],RegisterInfo[playerid][register_Geschlecht],RegisterInfo[playerid][register_Alter]); mysql_pquery(handle, query, "OnUserRegister", "d", playerid); print(query); } }


    Das sind die Stock die it der Alter Berechnung zu tun haben.

    Code
    stock split(const strsrc[], strdest[][], delimiter){ new i,li,aNum,len; while(i <= strlen(strsrc)){ if(strsrc[i]==delimiter || i==strlen(strsrc)){ len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; li = i+1; aNum++; } i++; } return 1;}stock IsValidDate(day, month, year){ new maxDays,maxYear,Date[3]; getdate(Date[2], Date[1], Date[0]); if(Date[2] == 2019) { maxYear = 2005; } else if(Date[2] == 2020) { maxYear = 2006; }else if(Date[2] == 2021) { maxYear = 2007; }else if(Date[2] == 2022) { maxYear = 2008; } if(year < 1930 || year > maxYear) return 0; switch (month){ case 1,3,5,7,8,10,12: maxDays = 31; case 4,6,9,11: maxDays = 30; case 2:{ if(IsLeapYear(year)){ maxDays = 29; } else{ maxDays = 28; } } default: return 0; } if(day < 1 || day > maxDays) return 0; return 1;}stock IsLeapYear(year){ return ( year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) );}stock GetAlter(aDay,aMonth,aYear){ new nyear,nmonth,nday; getdate(nyear,nmonth,nday); new alter = nyear - aYear; if(aMonth > nmonth) { alter -= 1; } if(aMonth == nmonth && (nday >= aDay)) { alter -= 1; } return alter;}


    Die Enums

    Code
    enum RegisterDatenEnum { register_Passwort[225], register_Geburtsdatum[225], register_Geschlecht, register_Name, register_Alter}


    Es gibt noch ein Enum wo zb steht player_Alter, player,_Geburtsdatum, usw. Kann es sein, dass sich da etwas überschneidet. Soweit ich seh, wird hier aus dem player Enum nichts genutzt .


    Hier noch meine MySQL 'accounts' Tabelle
    alter.PNG




    Ich würde mich freuen, wenn jemand mein Problem lösen könnte.
    Danke im Voraus


    MfG


    Allrounder18

    GetAlter(strval(Date[0]),strval(Date[1]),strval(Date[2])


    Was muss ich hier ändern?


    Habe ich in dem Stock die Möglichkeit zu sagen, das er nicht alter das geburtsdatu nicht vor 1930 und nach 2015 setzen kann?
    Kann ich es so machen, das egal ob man sich 2019 oder 2020 registriert der Charakter immer nur manimal 14 Jahre alt sein kann?


    Edit: Ich hab den Codeschnipsel getestet, jetzt steht bei Alteri der DB 101 wenn ich 23 Jahre bin.

    Wie meinst du das wegen Variable


    Umwandeln:

    stock GetAlter(aDay,aMonth,aYear)
    {
    new nyear,nmonth,nday;
    getdate(nyear,nmonth,nday);
    new alter = nyear - aYear;
    if(aMonth > nmonth)
    {
    alter -= 1;
    }
    if(aMonth == nmonth && (nday >= aDay))
    {
    alter -= 1;
    }
    return alter;
    }