Fehler behoben!
es war ein rechtschreibefehler im script
Fehler behoben!
es war ein rechtschreibefehler im script
Man ey. Das geht nicht
Bei mir speichert der nur den ersten User (mich) aber meine Kumpels nicht O.o
Super Tutorial
hab nur ein kleines Problem mit login/register:
Bei dem Register Befehl bekomm ich wegen das:
mysql_CreateAccount(playerid, udb_hash(params));
Diesen Error:
Falsche Parameter (zuwenige/zuviele)
Und bei dem Login Befehl wegen:
pass=mysql_GetInt("Accounts", "Passwort", "Name",pInfo[playerid][pname]);
Diesen Error:
Array-Index fehlt (bspw. Array[1], Name: "pass")
Beim 2. haste nur
new pass;
gemacht.
Da müsstest du
new pass[128]; machen
___________________________________________________________________________________________________________________________________________________
Frage von mir:
Ich habe versucht dieses Dynamische Fraktionsfahrzeuge System in mein Selfmade einzubauen.
Habe auch versucht dies auf MySQL umzuschreiben.
Jedoch startet sich jetzt der Server nicht mehr... muss ich eventuell für jedes Fahrzeug einen "Namen" geben? Damit er dies dann rausliest?
Grüße, Deadmau5.
Hab hier mal die publics... vielleicht könnt ihr damit ja was anfangen
forward LoadFractionCars2();
public LoadFractionCars2()
{
new fc;while(fc<MAX_FRACTION_CARS)
{
FractionCars[fc][fVehid] = mysql_GetInt2("frakcars", "ModelID", "IDtoGet", fc);
FractionCars[fc][fPos][0]= mysql_GetFloat2("frakcars", "PosX", "IDtoGet", fc);
FractionCars[fc][fPos][1]= mysql_GetFloat2("frakcars", "PosY", "IDtoGet", fc);
FractionCars[fc][fPos][2]= mysql_GetFloat2("frakcars", "PosZ", "IDtoGet", fc);
FractionCars[fc][fCol][0]= mysql_GetInt2("frakcars", "Farbe1", "IDtoGet", fc);
FractionCars[fc][fCol][1]= mysql_GetInt2("frakcars", "Farbe2", "IDtoGet", fc);
FractionCars[fc][fFraction] = mysql_GetInt2("frakcars", "Fraktion", "IDtoGet", fc);
FractionCars[fc][fCarid] = CreateVehicle(FractionCars[fc][fVehid],FractionCars[fc][fPos][0],FractionCars[fc][fPos][1],FractionCars[fc][fPos][2],FractionCars[fc][fPos][3],FractionCars[fc][fCol][0],FractionCars[fc][fCol][1],-255);
}
fc++;
return printf(" '%d' Fraktionsfahrzeug(e) wurden geladen & erstellt.",fc);
}
forward SaveFractionCars2();
public SaveFractionCars2()
{
new fc;while(fc<MAX_FRACTION_CARS)
{
if(FractionCars[fc][fVehid] >= 400 && FractionCars[fc][fVehid] <= 611)
{
mysql_SetInt("frakcars", "ModelID",FractionCars[fc][fVehid], "IDtoGet", fc);
mysql_SetFloat2("frakcars", "PosX",FractionCars[fc][fPos][0], "IDtoGet", fc);
mysql_SetFloat2("frakcars", "PosY",FractionCars[fc][fPos][1], "IDtoGet", fc);
mysql_SetFloat2("frakcars", "PosZ",FractionCars[fc][fPos][2], "IDtoGet", fc);
mysql_SetInt("frakcars", "Farbe1",FractionCars[fc][fCol][0], "IDtoGet", fc);
mysql_SetInt("frakcars", "Farbe2",FractionCars[fc][fCol][1], "IDtoGet", fc);
mysql_SetInt("frakcars", "Fraktion",FractionCars[fc][fFraction], "IDtoGet", fc);
}
}fc++;
}
Und hier noch die ORIGINALEN Publics, vielleicht wäre ja jemand so nett und könnte mir das umschreiben:
public LoadFractionCars(){
if(!fexist(Fraction_Car_File)){
new File:tfFile=fopen(Fraction_Car_File,io_write);
fclose(tfFile);
}
new File:fFile=fopen(Fraction_Car_File,io_read),Content[512],fc;
while(fread(fFile,Content)){
StripNewLine(Content);
sscanf(Content,"dffffddd",FractionCars[fc][fVehid],FractionCars[fc][fPos][0],FractionCars[fc][fPos][1],FractionCars[fc][fPos][2],FractionCars[fc][fPos][3],FractionCars[fc][fCol][0],FractionCars[fc][fCol][1],FractionCars[fc][fFraction]);
if(FractionCars[fc][fVehid] >= 400 && FractionCars[fc][fVehid] <= 611)
{
FractionCars[fc][fCarid] = CreateVehicle(FractionCars[fc][fVehid],FractionCars[fc][fPos][0],FractionCars[fc][fPos][1],FractionCars[fc][fPos][2],FractionCars[fc][fPos][3],FractionCars[fc][fCol][0],FractionCars[fc][fCol][1],-255);
//FractionCars[fc][fLock] = true;
fc++;
}
}
fclose(fFile);
return printf(" '%d' Fraktionsfahrzeug(e) wurden geladen & erstellt.",fc);
}
public SaveFractionCars(){
if(fexist(Fraction_Car_File)) fremove(Fraction_Car_File);
new File:fFile=fopen(Fraction_Car_File,io_append),Content[512];
new fc;while(fc<MAX_FRACTION_CARS){
if(FractionCars[fc][fVehid] >= 400 && FractionCars[fc][fVehid] <= 611){
format(Content,sizeof(Content),"%d %.3f %.3f %.3f %.3f %03d %03d %02d\r\n",FractionCars[fc][fVehid],FractionCars[fc][fPos][0],FractionCars[fc][fPos][1],FractionCars[fc][fPos][2],FractionCars[fc][fPos][3],FractionCars[fc][fCol][0],FractionCars[fc][fCol][1],FractionCars[fc][fFraction]);
fwrite(fFile,Content);
}fc++;
}return fclose(fFile);
}
Also so viel ich weiß musst du das fc in einen string umwandeln, da die Funktion Is[] nur Strings erkennt und keine Int
Du ich hab schon extra neue stocks erstellt:
stock mysql_GetInt2(Table[], Field[], Where[], Is)
stock Float:mysql_GetFloat2(Table[], Field[], Where[], Is)
stock mysql_SetFloat2(Table[], Field[], Float:To, Where[], Where2)
Aber vielleicht muss ich ja extra "Namen" für die Fahrzeuge anglegen?
Jedoch blick ich nicht, wie das mit den namen funktioniert, einfach ein A für das erste, ein B fürs 2. aber wie soll ich das machen?
Das ist halt so ne Frage
ich habe so in etwa das gleiche problem wie du. bei mir wollen die autos nicht erscheinen.
also ich habe das mit ID gemacht also folgender maßen und außerdem mit einer for schleife nicht mit einer while schleife obwohl das nicht viel unterschied ist:
for(new i = 0; i < MAX_VEHICLES;i++)
{
new string[256];
new carid = CreateVehicle(CarInfo[i][modelid],CarInfo[i][CoordX],CarInfo[i][CoordY],CarInfo[i][CoordZ],CarInfo[i][Rotation],CarInfo[i][farbe1],CarInfo[i][farbe2],-1);
format(string,sizeof(string),"%d",carid);
CarInfo[i][modelid] = mysql_GetInt("autos", "Modelid", "ID",string);
CarInfo[i][besitzer] = mysql_GetInt("autos","Besitzer","ID",string);
CarInfo[i][CoordX] = mysql_GetFloat("autos","KoordinateX","ID",string);
CarInfo[i][CoordY] = mysql_GetFloat("autos","KoordinateY","ID",string);
CarInfo[i][CoordZ] = mysql_GetFloat("autos","KoordinateZ","ID",string);
CarInfo[i][Rotation] = mysql_GetFloat("autos","Rotation","ID",string);
CarInfo[i][farbe1] = mysql_GetInt("autos","Farbe1","ID",string);
CarInfo[i][farbe2] = mysql_GetInt("autos","Farbe2","ID",string);
}
ne ich hab extra noch das IDtoGet gemacht, in der Table, weil ID ist ja wie bei den Spielern, eine ID, welche nicht verändert wird / werden darf was auch immer
//edit mein Fehler hab das mit dem Login/Register falsch gemacht
bekomme jetzt aber ein error bei:
if(!strcmp(udb_hash(params), mysql_ReturnPasswort(name), true))
Error:
Zeile (7188) : Falsche Anzahl an Parametern
und bei:
mysql_CreateAccount(playerid, udb_hash(params));
Diesen:
Falsche Parameter (zuwenige/zuviele)
bei mir funktionirt das nicht:
DeletePVar(playerid,"Eingeloggt");
Wenn ich bei
stock LoadPlayer(playerid)
und
stock SavePlayer(playerid)
eine neue sache hinzufüge macht es das dann automatich in der mysql datenbank oder muss ich das da auch anpassen?
in der DB anpassen soweit ich weis.. also in meinem script habe ich es auch immer in der db angepasst also ich habe es anderst garnicht versucht
Wenn ich GF script in mysql machen will dauert das ja dann lange
Dann würd das sehr lange dauern, außer du bist ideenreich und versuchst die file-Funktionen umzuändern, sodass sie als MySQL-Funktion fungieren (was aber nich grad einfach ist).
hm nee schaff ich glaubich nicht, Kannst du mir da helfen ?
würde auch was zahlen
ich habe in der Datenbank Admin hinzugefügt und es so ins script eingebunden wie es auch bei den anderen sachen ist (z.B. Level) aber wenn ich ein Admin befehl mache kommt "Du bist kein Admin".
Befehl:
dcmd_a(playerid,params[])
{
new message[128];
if(sscanf(params,"s",message))
{
return SendClientMessage(playerid,COLOR_RED,"[Benutzung]: /a [Nachricht]");
}
if(SpielerInfo[playerid][pAdmin] < 1)
{
return SendClientMessage(playerid,COLOR_RED,"Du bist kein Admin!");
}
else
{
new name[MAX_PLAYER_NAME];
new string[128];
GetPlayerName(playerid,name,sizeof(name));
format(string,sizeof(string),"%d Admin %s: %s" ,SpielerInfo[playerid][pAdmin],name,message);
SendAdminMessage(COLOR_YELLOW,string);
}
return 1;
}
Und das Laden von der Datenbank:
stock LoadPlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
{
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]);
SpielerInfo[playerid][pAdmin] = mysql_GetInt("accounts","Admin","Name", SpielerInfo[playerid][pAdmin]);
}
return 1;
}
MFG
NewMelone
/edit
Habe einfach mit
mysql_GetInt eine abfrage dran gesetzt und habe das Problem gelöst.
Wäre einer so nett, und würde ein Video für diesen Tut machen?
Wenn einer es macht, sollte mir dann Link per E-mail senden an:
if(dialogid == DIALOG_REGSCHRITT3)
{
if(response)
{
new alter = strval(inputtext);
if(alter < 99 || 12 > alter)
{
SpielerInfo[playerid][pAlter] = alter;
mysql_SetInt("accounts", "Alter", SpielerInfo[playerid][pAlter], "Name", SpielerInfo[playerid][pName]);
format(string,sizeof(string),"Artz: Hmm, ok Sie sind also %d Jahre jung.",alter);
SendClientMessage(playerid, FARBE_WEIS, string);
}
else
{
ShowPlayerDialog(playerid,DIALOG_REGSCHRITT3,DIALOG_STYLE_INPUT,"{FFFFFF}Alter","{FFFFFF}Error: Sie müssen eine Zahl zwischen 12-99 eingeben.\nWie alt sind Sie 12-99Jahre:","Bestätigen","");
}
}
if(!response)
{
}
}
So mein Problem ist das, das Alter nicht in der Mysql Datenbank gespeichert werden möchte. Der Status bleibt immer 0 Jahre.
Aber wenn er das abschickt steht im string der ClientMessage das Alter richtig, das finde ich i-wie komisch.