Es sollte doch so sein, wenn ich was schreibe, dass die Farbe je weiter der andere Spieler von mir entfernt ist sich bei ihm die Farbe des Namens ändert. Dies ist aber bei uns nicht so.
Beiträge von Allrounder18
-
-
Problem wurde gelöst.
Code
Alles anzeigenstock SendRangeColorMessage(playerid,string[]) { new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); for(new i=GetPlayerPoolSize(),chat_color,Float:distance; i!=-1; i--) { if(!SpielerDaten[i][player_Eingeloggt] || !IsPlayerInRangeOfPoint(i, CHAT_RADIUS, x, y, z)) continue; distance = GetPlayerDistanceFromPoint(i, x, y, z); if(distance < CHAT_RADIUS / CHAT_FADES) { chat_color = COLOR_CHAT; } else if(distance < CHAT_RADIUS / CHAT_FADES * 2) { chat_color = COLOR_FADE1; } else if(distance < CHAT_RADIUS / CHAT_FADES * 3) { chat_color = COLOR_FADE2; } else if(distance < CHAT_RADIUS / CHAT_FADES * 4) { chat_color = COLOR_FADE3; } else if(distance <= CHAT_RADIUS / CHAT_FADES * 5) { chat_color = COLOR_FADE4; } SendClientToChat(chat_color,string,i); } return 1; }
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 registrierungsvorgangCode#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
Code
Alles anzeigenpublic OnPlayerRequestClass(playerid) { if(!SpielerDaten[playerid][player_Eingeloggt]) { new query[128]; mysql_format(handle, query, sizeof(query), "SELECT `ID` FROM `accounts` WHERE `Name` = '%e'", SpielerDaten[playerid][player_Name]); mysql_pquery(handle, query, "OnUserCheck", "d", playerid); SetSpawnInfo(playerid,-1, 187, -2765.4102,375.5445,6.3359,277.2229, 0, 0, 0, 0, 0, 0); SetPlayerSkin(playerid,SpielerDaten[playerid][player_Skin]); SpawnPlayer(playerid); } return 1; }
Edit:
Mein LogCode
Alles anzeigen[19:21:35] OnPlayerSpawn [19:21:35] 1ops: 0.000000 [19:21:35] 2ops: 0.000000 [19:21:35] 3ops: 0.000000 [19:21:35] 3ops: 0.000000 [19:22:00] OnUserRegister [19:22:00] 1our: 0.000000 [19:22:00] 2our: 0.000000 [19:22:00] 3our: 0.000000 [19:22:00] 3our: 0.000000 [19:22:00] UPDATE `accounts` SET `Level` = '1', `Euro` = '0', `Cent` = '0', `Skin` = '78',`Admin` = '0', `SpawnX` = '132.000000',`SpawnY` = '-67.283760',`SpawnZ` = '1.578125',`SpawnR` = '-0.000000', `SpawnInt` = '0', `SpawnWorld` = '0', `LastLogin` = '14.02.2019', `LastLoginZeit` = '19:22:00' WHERE `ID` = '19' [19:22:00] OnPlayerSpawn [19:22:00] 1ops: 132.000000 [19:22:00] 2ops: -67.283760 [19:22:00] 3ops: 1.578125 [19:22:00] 3ops: 0.000000
-
OnPlayerSpawn wird nicht aufgerufen
[19:01:11] 1: 132.000000
[19:01:11] 2: -67.290840
[19:01:11] 3: 1.578125
[19:01:11] 3: 0.000000Dassind die Werte von OnUserRegister
-
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
CodeUPDATE `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?
-
Die Query bei SaveUserStats war zu kurz.
Jetzt werden die Datn in die DB eingetragen, jedoch spawne ich jetzt imer noch am 0 Punkt. -
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
Alles anzeigenpublic OnUserRegister(playerid) { SpielerDaten[playerid][player_ID] = cache_insert_id(); SpielerDaten[playerid][player_Eingeloggt] = true; SpielerDaten[playerid][player_Level] = 1; SpielerDaten[playerid][player_Spawn][0] = -2765.4102; SpielerDaten[playerid][player_Spawn][1] = 375.5445; SpielerDaten[playerid][player_Spawn][2] = 6.3359; SpielerDaten[playerid][player_Spawn][3] = 277.2229; printf("%f",SpielerDaten[playerid][player_Spawn][0]); SaveUserStats(playerid); new string[128]; format(string,sizeof(string),"{FFFFFF}Herzlich Willkommen auf Austrian Roleplay %s [%d]",SpielerDaten[playerid][player_Name],playerid); SendInfoMessage(playerid,string); SpawnPlayer(playerid); return 1; }
Codepublic 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 @Kaliber, hat geklappt!
Edit:
format(SpielerDaten[playerid][player_LastLoginZeit], 50, "%d:%d:%d",Time[0],Time[1],Time[2]);
Was muss ich machen das hier steht zb 13:09:50? Momentan steht 13:9:50
Geht das auch mit Datum? -
Danke, es funktioniert einwandfrei
Edit:
Code
Alles anzeigenpublic OnPlayerText(playerid, text[]) { new Float:x, Float:y, Float:z; GetPlayerPos(playerid, x, y, z); new message[128],rpname[255],string[128]; rpname = RemoveUnderscore(SpielerDaten[playerid][player_RPName]); format(message, sizeof(message), "%s sagt: {FFFFFF}%s", rpname, text); new chat_color; for(new i=0; i<MAX_PLAYERS; i++) { if(!SpielerDaten[i][player_Eingeloggt]) continue; if(!IsPlayerInRangeOfPoint(i, CHAT_RADIUS, x, y, z))continue; new Float:distance = GetPlayerDistanceFromPoint(i, x, y, z); if(distance < CHAT_RADIUS / CHAT_FADES) { chat_color = COLOR_CHAT; } else if(distance < CHAT_RADIUS / CHAT_FADES * 2) { chat_color = COLOR_FADE1; } else if(distance < CHAT_RADIUS / CHAT_FADES * 3) { chat_color = COLOR_FADE2; } else if(distance < CHAT_RADIUS / CHAT_FADES * 4) { chat_color = COLOR_FADE3; } else if(distance <= CHAT_RADIUS / CHAT_FADES * 5) { chat_color = COLOR_FADE4; } SendClientMessage(i, chat_color, string); } return 0; }
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?
@LeonMrBonnieEdit: 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 soCstock strreplace(string[], find, replace) { for(new i=0; string[i]; i++) { if(string[i] == find) { string[i] = replace; } } }
Cpublic 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.
Codeif(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
Codeif(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.
Codestock 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
Codeenum 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.PNGIch würde mich freuen, wenn jemand mein Problem lösen könnte.
Danke im VorausMfG
Allrounder18
-
Kann es sein, dass in meiner Tablle etwas falsch ist und deswegen Alter 101 steht?
alter.PNG
Edit: Muss ich beim Abspeichern des Alters mit GetAlter arbeiten bzw. es beim Abspeichern anders berechnen?
@Kaliber hast du bitte vlt ne Lösung?Edit: Problem gelöst. Danke an alle die einen Lösungsansatz gebracht haben!
-
Soweit ich weiß nicht.
Kannst du mir bitte kurz per Teamspeak helfen?
MfG
-
Ich habe 2 Enums mit Alter
im ersten steht player_Alter und im 2. register_Alter.
Kan s sein, das sich diese beiden überschneiden?
-
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.
-
Wohin soll das?
-
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;
} -
Wen ich das mache steht in der DB bei Alter 0