Pack einfach alle in ein Enum, sonst werden die IDs überschrieben.
Danke, hat geklappt.
Könnte ich es trotzdem irgenwie machen, dass ich auch die Dialog Enums modular machen kann?
Pack einfach alle in ein Enum, sonst werden die IDs überschrieben.
Danke, hat geklappt.
Könnte ich es trotzdem irgenwie machen, dass ich auch die Dialog Enums modular machen kann?
das hört sich für mich so an, als ob zwei Dialog-Ids die selbe ID haben, hast du beim Deklarieren der Dialoge darauf geachtet das jene sich nicht überschreiben? (Auch includes müssen beachtet werden)
enum
{
DIALOG_DATENSCHUTZ = 0,
DIALOG_MAIL,
DIALOG_REGPW,
DIALOG_LOGIN,
DIALOG_CHARACTER,
DIALOG_CREATE_CHARACTER_NAME,
DIALOG_CREATE_CHARACTER_MALE,
DIALOG_PW_CHECK,
DIALOG_INFO
};
enum
{
DIALOG_EDIT_SERVER_MENU = 0,
DIALOG_EDIT_SERVER_NAME,
DIALOG_EDIT_SERVER_SLOGAN,
DIALOG_EDIT_SERVER_TAG,
DIALOG_EDIT_SERVER_VERSION,
DIALOG_EDIT_SERVER_WEBSITE,
DIALOG_EDIT_SERVER_UCP,
DIALOG_EDIT_SERVER_TS3,
DIALOG_EDIT_SERVER_WETTER,
DIALOG_EDIT_SERVER_MAP,
DIALOG_EDIT_SERVER_LANG,
DIALOG_EDIT_SERVER_PW,
DIALOG_EDIT_SERVER_RCONPW,
DIALOG_EDIT_SERVER_ADMINPW,
DIALOG_EDIT_SERVER_MAXCHARS
};
Alles anzeigen
Guten Abend,
ich veruche gerae ein Registrierungs System, es wird alles richtig in der DB gespeichert, aber wenn ich auf Bestätigen geh nach der PW eingabe kommt mein Dialog zum Editieren der Serversettings. außerdem überschreiben E-Mail und PW meine Serversettings.
case DIALOG_MAIL:
{
new string[128];
{
strmid(AccountInfo[playerid][account_Mail],inputtext,0,strlen(inputtext),55);
format(AccountInfo[playerid][account_Mail],255,"%s",inputtext);
format(string, sizeof(string),"Gebe bitte nun deine E-Mail Adresse an.");
ShowPlayerDialog(playerid,DIALOG_MAIL,DIALOG_STYLE_INPUT,"{FFFFFF}Registrieren [1/2]",string,"{FFFFFF}Bestätigen","{FFFFFF}Abbrechen");
}
format(string, sizeof(string),"{FFFFFF}Deine E-Mail Adresse lautet %s.\nBitte gebe ein Passwort für deinen Account an!",AccountInfo[playerid][account_Mail]);
ShowPlayerDialog(playerid,DIALOG_REGPW,DIALOG_STYLE_PASSWORD,"{FFFFFF}Registration [2/2]",string,"{FFFFFF}Bestätigen","{FFFFFF}Abbrechen");
}
case DIALOG_REGPW:
{
if(6 <= strlen(inputtext) <= 24)
{
bcrypt_hash(inputtext, BCRYPT_COST, "OnPasswordHashed", "d", playerid);
format(AccountInfo[playerid][account_Passwort],255,"%s",inputtext);
}
else ShowPlayerDialog(playerid,DIALOG_REGPW,DIALOG_STYLE_PASSWORD,"{FFFFFF}Registration [2/2]","{FFFFFF}Bitte gebe ein Passwort für deinen Account an!","{FFFFFF}Bestätigen","{FFFFFF}Abbrechen");
return 1;
}
}
return 1;
}
Alles anzeigen
Die beiden werden überschrieben:
case DIALOG_EDIT_SERVER_NAME:
{
if(!response)return ShowServerDialog(playerid,DIALOG_EDIT_SERVER_MENU);
//format(ServerInfo[0][server_Name],ServerInfo[0][server_Slogan],50,"%s - %s",inputtext);
if(!ServerInfo[0][server_Maintenance])
{
format(string,sizeof(string),"hostname %s - %s",ServerInfo[0][server_Name],ServerInfo[0][server_Slogan]);
}
else
{
format(string,sizeof(string),"hostname Wartungsarbeiten : %s",ServerInfo[0][server_Name]);
}
SendRconCommand(string);
ShowServerDialog(playerid,DIALOG_EDIT_SERVER_MENU);
mysql_format(handle,string,sizeof(string),"UPDATE `server` SET `name` = '%s' WHERE `id` = '0'",ServerInfo[0][server_Name]);
mysql_tquery(handle,string);
return 1;
}
case DIALOG_EDIT_SERVER_SLOGAN:
{
if(!response)return ShowServerDialog(playerid,DIALOG_EDIT_SERVER_MENU);
format(ServerInfo[0][server_Slogan],50,"%s",inputtext);
format(string,sizeof(string),"gamemodetext %s v.%s",ServerInfo[0][server_Name],ServerInfo[0][server_Version]);
SendRconCommand(string);
ShowServerDialog(playerid,DIALOG_EDIT_SERVER_MENU);
mysql_format(handle,string,sizeof(string),"UPDATE `server` SET `slogan` = '%s' WHERE `id` = '0'",ServerInfo[0][server_Slogan]);
mysql_tquery(handle,string);
return 1;
}
Alles anzeigen
Was mache ich falsch?
Danke im Voraus.
MfG
Allrounder18
SendRconCommand(rcon_password NEUES_PASSWORT);
//warum in die db speichern?
Danke.
In die Datenbank speichern wollte ich es, da ich dort meine gesamten Serverdaten abspeichere.
Wozu solltest du das in einer Datenbank speichern wollen, wenn es eh in der server.cfg steht?
Damit ich es ingame ändern kann.
Danke, hat geklappt.
Ich habe auch eingebaut das man das RCON PW ändern kann, kann ich dies genau so wie Account PWs mit Bcrypt hashen in der DB?
Guten Abend,
ich versuche via Dialog die Wetterid zu ändern, jedoch steht wenn ich ID 7 eingebe ID 55.
server_Wetter
new ServerInfo[1][ServerInfoEnum];
Bei LoadServerData:
cache_get_value_name_int(0, "wetter", ServerInfo[0][server_Wetter]);
printf("Wetter: %d",ServerInfo[0][server_Wetter]);
stock ShowServerDialog(playerid,dialogid)
{
new string[512];
switch(dialogid)
{
case DIALOG_EDIT_SERVER_MENU:
{
if(ServerInfo[0][server_Maintenance])format(string,sizeof(string),"{FFFFFF}Option\t{FFFFFF}Wert\nName\t%s\nMode\t%s\nTag\t%s\nVersion\t%s\nWebsite\t%s\nUCP\t%s\nTS3\t%s\nWetter ID\t%d\nMapname\t%s\nSprache\t%s\nServer Passwort\t%s\nRCON Passwort\t%s\nWartungsarbeiten\t{00FF00}Aktiviert",ServerInfo[0][server_Name],ServerInfo[0][server_Mode],ServerInfo[0][server_Tag],ServerInfo[0][server_Version],ServerInfo[0][server_Website],ServerInfo[0][server_UCP],ServerInfo[0][server_TS3],
ServerInfo[0][server_Wetter],ServerInfo[0][server_Mapname],ServerInfo[0][server_Sprache],ServerInfo[0][server_PW],ServerInfo[0][server_RCONPW]);
else format(string,sizeof(string),"{FFFFFF}Option\t{FFFFFF}Wert\nName\t%s\nMode\t%s\nTag\t%s\nVersion\t%s\nWebsite\t%s\nUCP\t%s\nTS3\t%s\nWetter ID\t%d\nMapname\t%s\nSprache\t%s\nServer Passwort\t%s\nRCON Passwort\t%s\nWartungsarbeiten\t{FF0000}Deaktiviert",ServerInfo[0][server_Name],ServerInfo[0][server_Mode],ServerInfo[0][server_Tag],ServerInfo[0][server_Version],ServerInfo[0][server_Website],ServerInfo[0][server_UCP],ServerInfo[0][server_TS3],ServerInfo[0][server_Wetter],
ServerInfo[0][server_Mapname],ServerInfo[0][server_Sprache],ServerInfo[0][server_PW],ServerInfo[0][server_RCONPW]);
SPD(playerid,DIALOG_EDIT_SERVER_MENU,DIALOG_STYLE_TABLIST_HEADERS,"{FFFFFF}Bearbeiten - Server - Übersicht",string,"{FFFFFF}Weiter","{FFFFFF}Zurück");
}
}
return 1;
}
case DIALOG_EDIT_SERVER_WETTER:
{
if(!response)return ShowServerDialog(playerid,DIALOG_EDIT_SERVER_MENU);
ServerInfo[0][server_Wetter] = strval(inputtext);
format(ServerInfo[0][server_Wetter],11,"%s",inputtext);
ShowServerDialog(playerid,DIALOG_EDIT_SERVER_MENU);
mysql_format(handle,string,sizeof(string),"UPDATE `server` SET `wetter` = '%d' WHERE `id` = '0'",ServerInfo[0][server_Wetter]);
mysql_tquery(handle,string);
SetWeather(ServerInfo[0][server_Wetter]);
return 1;
}
Alles anzeigen
Was genau mache ich falsch?
Danke im Voraus.
MfG
Allrounder18
Ja hier sind alle skins einfach unter pawno/settings/Skins einfügen.
DialogStyles leider nicht.
Danke, die fehlenden Skins werden jedoch trotz einfügen nicht angezeigt.
oPAWN ist ja mal richtig geil. Gibts den auch mit allen Skins und Dialogarten?
Guten Abend,
immer wenn ich mich auf meinem Script registrieren will spawne ich nicht jeedoch kommt folgender Fehler im MySQL Log.
[05/05/20 20:55:20] [ERROR] error #1364 while executing query "INSERT INTO `accounts` (`Name`, `Passwort`,`RPName`,`Geburtsdatum`,`Geschlecht`,`Age`,`RegDatum`,`RegZeit`) VALUES ('Ali', MD5('*****'),'Mark_Bauer','20.10.1995','1','24','05.05.2020','20:55:20')": Field 'Euro' doesn't have a default value (C:\SAMP\ARP2.0\pawno\include\../include/core/dialoge.inc:80 -> arp.pwn:172)
Zeile 80 ist die rot geschriebene Zeile:
case 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)
{
new meinalter;
meinalter = RegisterInfo[playerid][register_Alter];
format(RegisterInfo[playerid][register_RPName],64,"%s",inputtext);
new query[3000],Date1[3],Time[3];
getdate(Date1[2], Date1[1], Date1[0]);
gettime(Time[0], Time[1], Time[2]);
format(SpielerDaten[playerid][player_RegDatum], 50, "%02d.%02d.%02d",Date1[0],Date1[1],Date1[2]);
format(SpielerDaten[playerid][player_RegZeit], 50, "%02d:%02d:%02d",Time[0],Time[1],Time[2]);
mysql_format(handle, query, sizeof(query), "INSERT INTO `accounts` (`Name`, `Passwort`,`RPName`,`Geburtsdatum`,`Geschlecht`,`Age`,`RegDatum`,`RegZeit`) VALUES ('%e', MD5('%e'),'%e','%e','%d','%d','%e','%e')", SpielerDaten[playerid][player_Name], RegisterInfo[playerid][register_Passwort],
RegisterInfo[playerid][register_RPName],RegisterInfo[playerid][register_Geburtsdatum],RegisterInfo[playerid][register_Geschlecht],meinalter,SpielerDaten[playerid][player_RegDatum],SpielerDaten[playerid][player_RegZeit]);
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
printf("%s",query);
}
}
Alles anzeigen
Zeile 172 ist die rot geschriebene Zeile:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
dialoge(playerid, dialogid, response, listitem, inputtext);
}
OnUserRegister:
public OnUserRegister(playerid)
{
SpielerDaten[playerid][player_ID] = cache_insert_id();
SpielerDaten[playerid][player_Eingeloggt] = true;
format(SpielerDaten[playerid][player_RPName], 255, "%s", RegisterInfo[playerid][register_RPName]);
SpielerDaten[playerid][player_Level] = 1;
SpielerDaten[playerid][player_Spawn][0] = 1.6944;
SpielerDaten[playerid][player_Spawn][1] = 22.6015;
SpielerDaten[playerid][player_Spawn][2] = 1199.5938;
SpielerDaten[playerid][player_Spawn][3] = 356.5849;
SpielerDaten[playerid][player_Interior] = 1;
format(SpielerDaten[playerid][player_UUID],100,"0");
SpawnPlayer(playerid);
startTutorial(playerid);
//Spawn(playerid);
HideLoginScreen(playerid);
new query1[500];
mysql_format(handle, query1, sizeof(query1), "SELECT * FROM `verwalter` WHERE `SpielerID` = '%d'", SpielerDaten[playerid][player_ID]);
mysql_pquery(handle, query1, "OnVerwalterCheck", "d", playerid);
mysql_format(handle, query1, sizeof(query1), "SELECT * FROM `scheine` WHERE `Besitzer` = '%d'", SpielerDaten[playerid][player_ID]);
mysql_pquery(handle, query1, "OnScheineCheck", "d", playerid);
mysql_format(handle, query1, sizeof(query1), "SELECT * FROM `payday` WHERE `Besitzer` = '%d'", SpielerDaten[playerid][player_ID]);
mysql_pquery(handle, query1, "OnPayDayCheck", "d", playerid);
mysql_format(handle, query1, sizeof(query1), "SELECT * FROM `inventar` WHERE `Besitzer` = '%d'", SpielerDaten[playerid][player_ID]);
mysql_pquery(handle, query1, "OnInventarCheck", "d", playerid);
new string[128];
format(string,sizeof(string),"{FFFFFF}Herzlich Willkommen auf Austrian Roleplay, {ab258a}%s[%d]",SpielerDaten[playerid][player_Name],playerid);
SendClientMessage(playerid,WEISS,string);
return 1;
}
Alles anzeigen
Muss ich in der Datenbank oder bei OnPlayerRegister Default Werte eintragen oder wo liegt der Fehler?
Danke im Voraus
MfG
PS: Ich weiß, dass MD5 nicht sicher ist, die Hashmethode wird noch geändert.
Allrounder18
Könntest du den FraktionDaten Array zeigen, damit man den Fehler finden kann.
Hat sich bereits erledigt, danke trotzdem.
Ich kam bei meinem Problem siehe 2 Posts über mir etwas weiter.
Jedoch kommt da nen Error.
Ich habe:
veh_car_counter[MAX_FRAKTION][MAX_FRAKTAGS],
#define MAX_FRAKTAGS = 7
c = veh_car_counter[FraktionDaten[FrakFahrzeugInfo[id][frakfahrzeug_Fraktion]]][fraktion_Tag];
Error:
error 033: array must be indexed(variable "FraktionDaten")
Was muss ich hier machen?
Hallo,
gibt es den Kanal nicht mehr?
MfG
Guten Abend,
ich hab folgendes Problem.
[debug] Run time error 4: "Array index out of bounds"
[debug] Attempted to read/write array element at index 83 in array of size 7
[debug] AMX backtrace:
[debug] #0 000a2374 in public LadeFraktionFahrzeugDaten () at C:\SAMP\ARP2.0\pawno\include\../include/systeme/frakautos.inc:63
https://hastebin.com/ozosoruzaz.m
Hier ist der Code dazu zu finden.
Ich weiß einfach nicht wo der Fehler liegt.
Danke im Voraus.
MfG
Allrounder18
Edit: MAX_FRAKTIONEN = 7
Dann müsste doch am Fahrzeug jetzt "blabla-01" und "blabla-02" stehen...?!
Es sei denn, du hast das im falschen Callback...
Da steht blabla-1426063360
Falsches Callback, was meisnt du genau?
Das sind 2 verschiedene Fahrzeuge.
format(string, sizeof(string), "{000000}%s",FrakFahrzeugInfo[id][frakfahrzeug_Kennzeichen]);
FrakFahrzeugInfo[id][frakfahrzeug_VehicleID] = CreateVehicle(frakcarmodelid, FrakFahrzeugInfo[id][frakfahrzeug_Spawn][0], FrakFahrzeugInfo[id][frakfahrzeug_Spawn][1], FrakFahrzeugInfo[id][frakfahrzeug_Spawn][2], FrakFahrzeugInfo[id][frakfahrzeug_Spawn][3], FrakFahrzeugInfo[id][frakfahrzeug_Farbe][0], FrakFahrzeugInfo[id][frakfahrzeug_Farbe][1], -1, 1);
SetVehicleNumberPlate(FrakFahrzeugInfo[id][frakfahrzeug_VehicleID], string);
Am Kennzeichen String kanns net liegen oder?
Edit: So wird das Kennzeichen formatiert:
Dann printe dir mal die Fraktionsid...
Ist die denn richtig gesetzt bzw gespeichert?
Fraktionsid wird richtig geprintet.
wie meinst du gesetzt oder gespeichert?
Edit: Ich habhe wie du sagtest new veh_car_counter[MAX_FRAKTION]; eingbaut ganz oben im Script, #define MAX_FRAKTION 7 habe ich im Script.
Okay, jetzt habe ich wieder ne Zahl aber die hat mehr als zwei stellen und ist auch net die ID die hochgezählt werden soll.
format(FrakFahrzeugInfo[id][frakfahrzeug_Kennzeichen],50,"%s-%02d",FraktionDaten[frakcarfraktion][fraktion_Tag],++veh_car_counter[FrakFahrzeugInfo[id][frakfahrzeug_Fraktion]]);
Alles anzeigenSo ist das schon richtig...was passiert denn da?
Vorausgesetzt du hast die richtige Fraktionsid da angegeben.
da kommt nen tag missmatch
...Nein, das macht doch gar keinen sinn. veh_car_counter speichert doch die Anzahl an Fahrzeugen in einer Fraktion.
ok, das war doof gedacht von mir, war aber irgendwie klar das es net gehn kann.
Ergo muss der Index die Fraktionsid sein. Wieso sollte der Wert auch die Fraktionsid sein...
Ich sprach vom Index.
Wie führe ich es auf die FrakID zurück?
Alles anzeigenAh, sry, schlechtes beispiel von mir.
Meinte natürlich sowas wie:
Musst das natürlich iwi auf die FraktionsID zurückführen.
format(FrakFahrzeugInfo[id][frakfahrzeug_Kennzeichen],50,"%s-%02d",FraktionDaten[frakcarfraktion][fraktion_Tag],++veh_car_counter[fraktion_ID]);
Meinst du so? Wie genau zurückführen?
So vielleicht?