Hallo Brotfische,
Ich wollte Fragen ob ihr mir helfen könnt wie ich mit MySQL ein Fraktionscarsystem mache.
Wäre echt cool.
lg
Hallo Brotfische,
Ich wollte Fragen ob ihr mir helfen könnt wie ich mit MySQL ein Fraktionscarsystem mache.
Wäre echt cool.
lg
Du erstellst 'ne Tabelle in deiner MySQL Datanbank, z.B. so:
Name der Tabelle: lspd_cars
[table='9']
[*]vID[*]ModelID[*]Color1[*]Color2[*]x[*]y[*]z[*]a[*]health[*]
[/table]
Dann erstellst du z.B. ein "normales" Autohaus, wo aber nur Leader einkaufen können und speicherst die Daten des gekauften Autos in Variablen:
enum frakcarData
{
vID,
ModelID,
//und so weiter..
};
new frakcarInfo[MAX_VEHS][fakcarData];
new vid = CreateVehicle(/*Daten des gekauften Fahrzeugs*/);
frakcarInfo[vid][vID] = vid;
frakcarInfo[vid][ModelID] = GetVehicleModel(vid);
//und so weiter..
Dann überträgst du die Daten noch in die Datenbank.
Bei OnGameModeExit oder wo auch immer du magst, speicherst du die aktuellen Daten dann
stock saveFrakcars()
{
new query[256];
for(new vid = 0; vid<MAX_VEHS;vid++)
{
format(query,sizeof(query), "UPDATE `lspd_cars` SET `vID` = %d /*...*/ WHERE `vID` = %d",i,i);
mysql_query(query);
}
}
Und als letztes das Ganze noch laden bei OnGameModeInit
stock loadFrakcars()
{
format(new vid = 0; vid < MAX_VEHS; vid++)
{
new query[256];
format(query, sizeof(query), "SELECT * FROM `lspd_cars` WHERE `vID`=%d LIMIT 1", i);
mysql_query(query);
mysql_store_result();
mysql_fetch_row(query);
sscanf(query, "ddddfffff>", frakcarInfo[i]);
mysql_free_result();
}
}
Fang mal an etwas zu scripten und wenn du Fragen hast, helf ich dir gerne weiter.
Key:
Ich will aber eine haben. Also so habe schon angefangen
http://gyazo.com/5765b6456861eccfd5972d87aa22754c
http://gyazo.com/f3d43b091c918fb3edbdfba04eb7ee82
lg
Wenn du nur eine Tabelle verwenden möchtest, dann brauchst du noch eine Spalte, wo der Besitzer gespeichert wird. Das ganze kann man ebenfalls mit Zahlen regeln. Sollte in der Besitzerspalte die Zahl 1 stehen, gehört das Auto der Polizei, bei einer 2 die Bundeswehr usw.
Verstehst du wie ich das meine?
Das ist FID
Also fragst du einfach beim Kauf ab, in welcher Fraktion der Spieler ist und speicherst den Wert in "FID".
//e: Schau dir mal das Tutorial an: [ SCRIPTING ] [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-2
Okay Funktioniert super. Aber wie kann ich daraus ein befehl machen mit /addfraktionscar oder so?
COMMAND:addfraktionscar(playerid,params[])
{
new fid,vid,mid,color1,color2, Float:x,Float:y,Float:z,Float:a;
fid = SpielerInfo[playerid][pMember]; //Das musst du ggf. anpassen
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,a);
if(sscanf(params,"ddd",mid,color1,color2)) return SendClientMessage(playerid,-1,"Benutze: /addfraktionscar [Model] [Farbe1] [Farbe2]");
vid = CreateVehicle(mid,x,y,z,a,color1,color2,-1);
new query[256];
format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
vid, mid, x, y, z, a, color1, color2, fid);
mysql_tquery(handle, query);
DestroyVehicle(vid);
LoadFracVehicles();
SendClientMessage(playerid,-1,"Du hast ein Fraktionsauto erstellt!");
return 1;
}
Hab das jetzt nicht getestet, kann gut sein, dass du irgendwelche Fehler drin sind.
Wie mache ich das das man erst fraktion angeben muss dann vehicle id und dann die farben
COMMAND:addfraktionscar(playerid,params[])
{
new fid,vid,mid,color1,color2, Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,a);
if(sscanf(params,"dddd",fid,mid,color1,color2)) return SendClientMessage(playerid,-1,"Benutze: /addfraktionscar [Fraktionsid] [Model] [Farbe1] [Farbe2]");
vid = CreateVehicle(mid,x,y,z,a,color1,color2,-1);
new query[256];
format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
vid, mid, x, y, z, a, color1, color2, fid);
mysql_tquery(handle, query);
DestroyVehicle(vid);
LoadFracVehicles();
SendClientMessage(playerid,-1,"Du hast ein Fraktionsauto erstellt!");
return 1;
}
Vielen Dank du bist super.
Ein Bitte noch. /delfraktionsveh wie?
COMMAND:delfraktionscar(playerid,params[])
{
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Du bist in keinem Fahrzeug!");
new vid = GetPlayerVehicleID(playerid);
if(fracVehicle[vid][e_modelID] == 0) return SendClientMessage(playerid,-1,"Das Fahrzeug ist kein Fraktionsfahrzeug!");
new query[256];
format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = %d", vid);
mysql_tquery(handle, query);
DestroyVehicle(vid);
LoadFracVehicles();
SendClientMessage(playerid,-1,"Fraktionsfahrzeug entfernt!");
return 1;
}
Auch hier, keine Ahnung ob das so funktioniert, dürfte aber.
Vielen Dank. Du bist Super
Ach ja muss ich in dem Vehicle sein. Kann man das mit Der carid auch machen
COMMAND:delfraktionscar(playerid,params[])
{
new vid;
if(!strlen(params))
{
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,-1,"Du bist in keinem Fahrzeug!");
vid = GetPlayerVehicleID(playerid);
}
else
{
vid = strval(params);
if(!GetVehicleModel(vid)) return SendClientMessage(playerid,-1,"Dieses Fahrzeug existiert nicht!");
}
if(fracVehicle[vid][e_modelID] == 0) return SendClientMessage(playerid,-1,"Das Fahrzeug ist kein Fraktionsfahrzeug!");
new query[256];
format(query, sizeof(query), "DELETE FROM FracVehicles WHERE ID = %d", vid);
mysql_tquery(handle, query);
DestroyVehicle(vid);
LoadFracVehicles();
SendClientMessage(playerid,-1,"Fraktionsfahrzeug entfernt!");
return 1;
}
Dann geht es sowohl im Fahrzeug als auch mit Angabe der ID.
Wie kann ich das Car direkt Spawnen lassen?
ocmd:addfraktionscar(playerid,params[])
{
new fid,vid,mid,color1,color2, Float:x,Float:y,Float:z,Float:a;
GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid,a);
if(sscanf(params,"dddd",fid,mid,color1,color2)) return SendClientMessage(playerid,-1,"Benutze: /addfraktionscar [Fraktionsid] [Model] [Farbe1] [Farbe2]");
vid = CreateVehicle(mid,x,y,z,a,color1,color2,-1);
new query[256];
format(query, sizeof(query), "INSERT INTO FracVehicles (ID, ModelID, PosX, PosY, PosZ, PosA, Color1, Color2, FracID) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')",
vid, mid, x, y, z, a, color1, color2, fid);
mysql_tquery(Handle, query);
DestroyVehicle(vid);
LoadFracVehicles();
SendClientMessage(playerid,-1,"Du hast ein Fraktionsauto erstellt!");
return 1;
}
DestroyVehicle(vid);
weg machen.
Ach ja Jeffry bei deinem System habe ich esso gemacht
Ist des so richtig?
enum fracVehEnum {
e_modelID,
Float:e_x,
Float:e_y,
Float:e_z,
Float:e_a,
e_color1,
e_color2,
e_fracID,
e_vID
};
#define FRAC_VEHICLES 1
new fracVehicle[FRAC_VEHICLES][fracVehEnum];
#define FRAC_VEHICLES 1
Da könntest du nur ein Fahrzeug erstellen. Das musst du natürlich erhöhen.
Das Problem ist wenn ich es auf 20 mache. Wird in der Batenbank 20 mal ein auto erstellt mit überall 0 drinne.
Und was ist da falsch
LoadFracVehicles()
{
CreateFVTable();
mysql_tquery(Handle, "SELECT * FROM fracvehicles");
return 1;
}
//edit Problem 2 eingefügt
Hier fehlt das Callback das danach aufgerufen wird:
mysql_tquery(Handle, "SELECT * FROM fracvehicles");
zu:
mysql_tquery(Handle, "SELECT * FROM fracvehicles", "LoadFracVehicles_Data");
Und dort kannst du dann, wenn du es nach dem Tutorial gemacht hast das hier in die Schleife einfügen, damit die leeren Fahrzeuge nicht erstellt werden:
Nach:
//Fahrzeug existiert noch nicht, es wird jetzt in die Datenbank geschrieben.
das:
if(fracVehicle[i][e_modelID] == 0) continue;