Nur noch hier:
CreateVehicle(VehInfo[i][ModellID],VehInfo[i][PosX],VehInfo[i][PosY],VehInfo[i][PosZ],VehInfo[i][PosR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
warning 213: tag mismatch
Nur noch hier:
CreateVehicle(VehInfo[i][ModellID],VehInfo[i][PosX],VehInfo[i][PosY],VehInfo[i][PosZ],VehInfo[i][PosR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
warning 213: tag mismatch
Float: PosR,
Fehlt auch noch bei den VehDaten.
Wenn du das gemacht hast, poste bitte die zwei drei Zeilen des Arrays, da wo die Fahrzeuge jetzt drin sind.
perfekt
hier new FrakAutos[][VehEnum] =
{
//ModelID, Frak, X,Y,Z,Farbe1,Farbe2
{597,-1595.8781,693.9594,-5.4741,180.1654, 198, 1},//zeile 123
{597,-1595.8781,693.9594,-5.4741,179.5844, 198, 1}//zeile 123
};
new FrakAutos[][VehEnum] =
{
//ModellID, Frak, X,Y,Z,Farbe1,Farbe2
{597,-1595.8781,693.9594,-5.4741,180.1654, 198, 1, FRAKTION_HIER},//zeile 123
{597,-1595.8781,693.9594,-5.4741,179.5844, 198, 1, FRAKTION_HIER}//zeile 123
};
stock LoadVehicles()
{
new string[3], query[400], bool:added;//02
for(new i=0; i < sizeof(FrakAutos); i++)
{
format(string, sizeof string, "%d", i);
VehInfo[i][ModellID] = mysql_GetInt("Auto", "ModellID", "ID", string);
if(VehInfo[i][ModellID] < 400 || VehInfo[i][ModellID] > 611)
{
format(query, sizeof(query), "INSERT INTO Auto (ID, ModellID, PosX, PosY, PosZ, PosR, Farbe1, Farbe2, Fraktion) VALUES ('%d', '%d', '%f', '%f', '%f', '%f', '%d', '%d', '%d')", i,
FrakAutos[i][ModellID],FrakAutos[i][PosX],FrakAutos[i][PosY],FrakAutos[i][PosZ],FrakAutos[i][PosR],FrakAutos[i][Farbe1],FrakAutos[i][Farbe2],FrakAutos[i][Fraktionp]);
mysql_query(query);
VehInfo[i][ModellID] = FrakAutos[i][ModellID];
added = true;
}
format(VehInfo[i][Grund], 32, mysql_GetString("Autos", "Grund", "ID", string));
VehInfo[i][Fraktion] = mysql_GetInt("Auto", "Fraktion", "ID", string);
VehInfo[i][PosX] = mysql_GetFloat("Auto", "PosX", "ID", string);
VehInfo[i][PosY] = mysql_GetFloat("Auto", "PosY", "ID", string);
VehInfo[i][PosZ] = mysql_GetFloat("Auto", "PosZ", "ID", string);
VehInfo[i][PosR] = mysql_GetFloat("Auto", "PosR", "ID", string);
VehInfo[i][Abgeschleppt] = mysql_GetInt("Auto", "Abgeschleppt", "ID", string);
VehInfo[i][inADAC] = mysql_GetInt("Auto", "inADAC", "ID", string);
VehInfo[i][Preis] = mysql_GetInt("Auto", "Preis", "ID", string);
VehInfo[i][NewX] = mysql_GetFloat("Auto", "NewX", "ID", string);
VehInfo[i][NewY] = mysql_GetFloat("Auto", "NewY", "ID", string);
VehInfo[i][NewZ] = mysql_GetFloat("Auto", "NewZ", "ID", string);
VehInfo[i][Farbe1] = mysql_GetInt("Auto", "Farbe1", "ID", string);//18
VehInfo[i][Farbe2] = mysql_GetInt("Auto", "Farbe2", "ID", string);//19
CreateVehicle(VehInfo[i][ModellID],VehInfo[i][PosX],VehInfo[i][PosY],VehInfo[i][PosZ],VehInfo[i][PosR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
}
if(added) SaveVehicles();
return 1;
}
Falls du "PosR" noch nicht in der Datenbank hast, füge das noch hinzu, das hat nämlich noch beim Laden gefehlt.
Dann kannst du es mal testen.
Habe jetzt alles so geändert wie du es gesagt hast, leider wird kein Auto erstellt
Schau
Hab alles richtig gemacht
Ok.
Was sagt der MySQL Log wenn du den Server startest?
Ich habe noch eine kleine Ausbesserung gemacht, ändere
for(new i=0; i < MAX_VEHICLES; i++)
Zu
for(new i=0; i < sizeof(FrakAutos); i++)
Hi Jeffry.
Es Funktioniert jetzt alles soweit, danke :)(wo soll ich den dein Code austauschen? Bei welcher schleife)
Nur Manche Fahrzeuge spawnen einfach doppelt aufeinander?
Liegt es vielleicht daran das bei OneGamemodeinit auch noch mal ein Auto erstellt wird? Aber das ist ja ein muss?
Und meine Tore, bzw Objecte sind jetzt einfach nicht mehr da? Hab 71 Autos eingefügt brauch ich vielleicht ein Streamer oder so?
MfG
//Hier der code von dem CreateVehicle in OnGameModeInit
for(new g;g<MAX_VEHICLES;g++)
{
CreateVehicle(FrakAutos[g][ModellID],FrakAutos[g][PosX],FrakAutos[g][PosY],FrakAutos[g][PosZ],FrakAutos[g][PosR],FrakAutos[g][Farbe1],FrakAutos[g][Farbe2],-1);//250
}
Die Schleife musst du bei LoadVehicles ändern.
Zu:
for(new i=0; i < sizeof(FrakAutos); i++)
Dann sollten auch deine Tore etc wieder da sein.
Zitat//Hier der code von dem CreateVehicle in OnGameModeInit
Den kannst du weg machen, du hast die Fahrzeuge ja hoffentlich alle in das neue Array (enum) übernommen. Wenn nicht, mach das noch. Am Ende sollen ja alle Fahrzeuge in der Datenbank stehen, oder? Sprich, es soll kein CreateVehicle unter OnGameModeInit mehr stehen, außer das bei LoadVehicles.
Ja gut, jetzt ist alles wieder beim alten und alle Fahrzeuge stehen da wo sie sollen
Jetzt nur noch um auf die abfrage zurück zu kommen.
Wie kann ich definieren das zb Auto 1 von den Cops gefahren wird?
Ja gut, jetzt ist alles wieder beim alten und alle Fahrzeuge stehen da wo sie sollen
Jetzt nur noch um auf die abfrage zurück zu kommen.
Wie kann ich definieren das zb Auto 1 von den Cops gefahren wird?
Einfach bei OnPlayerStateChange abfragen ob
VehInfo[GetPlayerVehicleID(playerid)][Fraktion] //schon entsprechend angepasst
den Wert der Fraktion des Spielers besitzt
Okey, und was wenn ich nur fragen will, ob es ein cop car ist ?
soll ich dann
new frakid = VehInfo[GetPlayerVehicleID(playerid)][Fraktion]
if(frakid[playerid] != 1) {
return RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!"); }
Oder wie?
if(newstate == PLAYER_STATE_DRIVER)
{
if(!VehInfo[GetPlayerVehicleID(playerid)][Fraktion] && isinADAC[playerid] != 1) {
SendClientMessage(playerid,hinweis1,"Du hast keinen Schlüssel!");
return RemovePlayerFromVehicle(playerid);
}
}
So funktioniert es nicht, es können alle rein und wenn ich das ! weg mache kann garkeiner rein..
Nein, das was IPrototypeI dir das gesagt hat ist nicht gut. Das wird nicht zuverlässig unter allen Bedingungen funktionieren.
new vehid = GetPlayerVehicleID(playerid);
new idx = -1;
for(new i=0; i<sizeof(VehInfo); i++)
{
if(VehInfo[i][veh_ID] == vehid)
{
idx = i;
break;
}
}
if(idx == -1)
{
SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!");
return RemovePlayerFromVehicle(playerid);
}
new frakid = VehInfo[idx][Fraktion]
if(frakid != 1) //Fraktion 1 == Polizei
{
SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!");
return RemovePlayerFromVehicle(playerid);
}
Und ganz wichtig:
VehInfo[i][veh_ID] = CreateVehicle(VehInfo[i][ModellID],VehInfo[i][PosX],VehInfo[i][PosY],VehInfo[i][PosZ],VehInfo[i][PosR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
Oder so: (wahrscheinlich leichter für dich)
Unten im Gamemode (einmalig):
stock IsPlayerInAllowedFrakVeh(playerid, frak)
{
new vehid = GetPlayerVehicleID(playerid);
new idx = -1;
for(new i=0; i<sizeof(VehInfo); i++)
{
if(VehInfo[i][veh_ID] == vehid)
{
idx = i;
break;
}
}
if(idx == -1) return 0;
if(VehInfo[idx][Fraktion] != frak) return 0;
return 1;
}
Bei der Abfrage:
if(IsPlayerInAllowedFrakVeh(playerid, 1) //Fraktion 1 == Polizei
{
SendClientMessage(playerid, hinweis1, "Du bist kein Polizist!");
return RemovePlayerFromVehicle(playerid);
}
In beiden Fällen musst du aber VehInfo[i][veh_ID] vor CreateVehicle schreiben, und auch veh_ID in das enum mit aufnehmen.
Also jetzt kommt ne Warnin
VehInfo[i][veh_ID] = CreateVehicle(VehInfo[i][ModellID],VehInfo[i][PosX],VehInfo[i][PosY],VehInfo[i][PosZ],VehInfo[i][PosR],VehInfo[i][Farbe1],VehInfo[i][Farbe2],-1);//20
warning 213: tag mismatch
Und auch hier
stock IsPlayerInAllowedFrakVeh(playerid, frak)
{
new vehid = GetPlayerVehicleID(playerid);
new idx = -1;
for(new i=0; i<sizeof(VehInfo); i++)
{
if(VehInfo[i][veh_ID] == vehid)//hier tag mismatch
{
idx = i;
break;
}
}
if(idx == -1) return 0;
if(VehInfo[idx][Fraktion] != frak) return 0;
return 1;
}
Sonst kommt nichts
veh_ID im enum VehDaten ganz als letztes eintragen. Das hast du vergessen.
Jo Errors und Warnings weg.
Wie erstelle ich jetzt den befehl für das ADAC und für die, wo ihr Auto freikaufen wollen?
Adac geht in das auto und macht /opark [Grund] [Preis]
Spieler steigt in ein Auto (zb cop ins copcar)
Möchtest du das auto freikaufen?
[grund][prei]
Erstelle mal die Befehle so weit wie du kommst. An der Stelle an der du hängst postest du wieder hier, und erklärst Schritt für Schritt was in dem Befehl, wenn ihn der Spieler eingibt, passieren soll.
Aber die Grundstruktur des Befehls kannst du ja schon machen, und dann eben so weit wie du kommst.
Okey also gut, ich hab jetzt mal da "Grundgerüst" erstellt.
ocmd:opark(playerid, params[])
{
new preis, grund[34];
if(sscanf(params,"is",preis,grund))return SendClientMessage(playerid, Color_Green,"Benutzung: /opark [Preis][Grund]");
if(SpielerInfo[playerid][pTeam] != 5) return SendClientMessage(playerid, hinweis1,"Du bist kein Mitglied des ADAC's!");
if(isinADAC[playerid] != 1) return SendClientMessage(playerid, hinweis1, "Du bist nicht in der ADAC Zone!");
else if(preis < 0 || preis > 1000) return SendClientMessage(playerid, hinweis1,"Du kannst das Bußgeld nicht weniger als 0 und mehr als 1000 kosten lassen!");
{
//Hier soll ja dann einfach nur der Preis und den Grund für das jeweilige Auto gespeichert werden
//abgeschleppt auf 1
}
return 1; }
Und dann halt ich denke mal bei onplayerentervehicle dann eine abfrage ob das auto abgeschleppt ist und dann soll sich ein dialog öffnen, wo der preis und der grund drin ist und wenn man bezahlt soll abgeschleppt auf 0 gestellt werden
Ist der ADAC'ler im Auto, oder neben dem Auto?
Nutzt du das sscanf Plugin oder die stock Funktion?
Poste bitte noch dein aktuelles SaveVehicles.
Der soll in dem Auto sein, da er in seiner Zone ja alle Fahrzeuge fahren darf.
ich nutze den Stock
Hier
stock SaveVehicles()
{
new string[34];
for(new i = 0; i < MAX_VEHICLES; i++)
{
format(string, sizeof string, "%d", i);
mysql_SetInt("Auto", "ModellID", VehInfo[i][ModellID], "ID", string);
mysql_SetInt("Auto", "Fraktion", VehInfo[i][Fraktion], "ID", string);
mysql_SetFloat("Auto", "PosX", VehInfo[i][PosX], "ID", string);
mysql_SetFloat("Auto", "PosY", VehInfo[i][PosY], "ID", string);
mysql_SetFloat("Auto", "PosZ", VehInfo[i][PosZ], "ID", string);
mysql_SetFloat("Auto", "PosR", VehInfo[i][PosR], "ID", string);
mysql_SetInt("Auto", "Abgeschleppt", VehInfo[i][Abgeschleppt], "ID", string);
mysql_SetInt("Auto", "inADAC", VehInfo[i][inADAC], "ID", string);
mysql_SetInt("Auto", "Preis", VehInfo[i][Preis], "ID", string);
mysql_SetString("Auto", "Grund", VehInfo[i][Grund], "ID", string);
mysql_SetFloat("Auto", "NewX", VehInfo[i][NewX], "ID", string);
mysql_SetFloat("Auto", "NewY", VehInfo[i][NewY], "ID", string);
mysql_SetFloat("Auto", "NewZ", VehInfo[i][NewZ], "ID", string);
mysql_SetFloat("Auto", "NewR", VehInfo[i][NewR], "ID", string);
mysql_SetInt("Auto", "Farbe1", VehInfo[i][Farbe1], "ID", string);
mysql_SetInt("Auto", "Farbe2", VehInfo[i][Farbe2], "ID", string);
}
return 1;
}
Dann kannst du es so machen:
ocmd:opark(playerid, params[])
{
new preis, grund[34];
if(sscanf(params,"is",preis,grund))return SendClientMessage(playerid, Color_Green,"Benutzung: /opark [Preis][Grund]");
if(SpielerInfo[playerid][pTeam] != 5) return SendClientMessage(playerid, hinweis1,"Du bist kein Mitglied des ADAC's!");
if(isinADAC[playerid] != 1) return SendClientMessage(playerid, hinweis1, "Du bist nicht in der ADAC Zone!");
else if(preis < 0 || preis > 1000) return SendClientMessage(playerid, hinweis1,"Du kannst das Bußgeld nicht weniger als 0 und mehr als 1000 kosten lassen!");
{
new i = GetFrakVehicleIdx(GetPlayerVehicleID(playerid));
if(i == -1) return SendClientMessage(playerid, hinweis1, "Du bist nicht in einem abschleppbaren Auto!");
format(VehInfo[i][Grund], 32, grund);
VehInfo[i][Preis] = preis;
VehInfo[i][Abgeschleppt] = 1;
SaveVehicle(i);
//Hier soll ja dann einfach nur der Preis und den Grund für das jeweilige Auto gespeichert werden
//abgeschleppt auf 1
}
return 1;
}
stock GetFrakVehicleIdx(vehicleid)
{
for(new i=0; i<sizeof(VehInfo); i++)
{
if(VehInfo[i][veh_ID] == vehicleid)
{
return i;
}
}
return -1;
}
stock SaveVehicle(i)
{
if(i < 0 || i >= sizeof(VehInfo)) return 1;
new string[5];
format(string, sizeof string, "%d", i);
mysql_SetInt("Auto", "ModellID", VehInfo[i][ModellID], "ID", string);
mysql_SetInt("Auto", "Fraktion", VehInfo[i][Fraktion], "ID", string);
mysql_SetFloat("Auto", "PosX", VehInfo[i][PosX], "ID", string);
mysql_SetFloat("Auto", "PosY", VehInfo[i][PosY], "ID", string);
mysql_SetFloat("Auto", "PosZ", VehInfo[i][PosZ], "ID", string);
mysql_SetFloat("Auto", "PosR", VehInfo[i][PosR], "ID", string);
mysql_SetInt("Auto", "Abgeschleppt", VehInfo[i][Abgeschleppt], "ID", string);
mysql_SetInt("Auto", "inADAC", VehInfo[i][inADAC], "ID", string);
mysql_SetInt("Auto", "Preis", VehInfo[i][Preis], "ID", string);
mysql_SetString("Auto", "Grund", VehInfo[i][Grund], "ID", string);
mysql_SetFloat("Auto", "NewX", VehInfo[i][NewX], "ID", string);
mysql_SetFloat("Auto", "NewY", VehInfo[i][NewY], "ID", string);
mysql_SetFloat("Auto", "NewZ", VehInfo[i][NewZ], "ID", string);
mysql_SetFloat("Auto", "NewR", VehInfo[i][NewR], "ID", string);
mysql_SetInt("Auto", "Farbe1", VehInfo[i][Farbe1], "ID", string);
mysql_SetInt("Auto", "Farbe2", VehInfo[i][Farbe2], "ID", string);
return 1;
}