Hey,
ich habe einen DM-Script aufgesetzt und soweit läuft alles einwandfrei.
Nun wollte ich am Spawn einige Fahrzeuge platzieren. Dafür nutze ich den Befehl /createvehicle. Das Fahrzeug wird zwar erstellt, jedoch erfolgt kein Eintrag in der Datenbanktabelle "cars".
Sobald ich anschließend versuche, das Fahrzeug mit /parken zu parken, erscheint ingame die Meldung:
„Das Vehicle konnte nicht erfolgreich geparkt werden.“
Anbei findet ihr den kompletten Vehicle-Code. Vielleicht kann mir jemand sagen, woran das liegt bzw. was die Ursache für dieses Problem ist.
Code: Carrespawn
ocmd:rac(playerid,params[]){
if(!IsPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,ROT,noAdmin);
respawnallcars();
new string[128];
format(string,sizeof(string),"* Es wurden alle unbenutzten Fahrzeuge von %s respawnt.",SpielerName(playerid));
if(GetPVarInt(playerid,"undercover") == 0){
SendClientMessageToAll(HELLBLAU,string);
}
new str[128];
format(str,sizeof(str),"[user]%i[/user] benutzt den Befehl '/rac'.",GetPVarInt(playerid, "accountid"));
Log(str, 4);
return 1;
}
Alles anzeigen
Code
stock ResetVehicleInfo(slot){
if(slot < 0 || slot >= MAX_VEHICLE)return 0;
vehicleInfo[slot][vehicle] = INVALID_VEHICLE_ID;
vehicleInfo[slot][vDBID] = 0;
vehicleInfo[slot][vNameID] = -1;
vehicleInfo[slot][vModelID] = 0;
vehicleInfo[slot][vX] = 0.0;
vehicleInfo[slot][vY] = 0.0;
vehicleInfo[slot][vZ] = 0.0;
vehicleInfo[slot][vA] = 0.0;
vehicleInfo[slot][vColor1] = -1;
vehicleInfo[slot][vColor2] = -1;
vehicleInfo[slot][vRespawnDelay] = -1;
vehicleInfo[slot][vInteriorID] = 0;
vehicleInfo[slot][vVirtualWorld] = 0;
vehicleInfo[slot][vNumberPlate][0] = 0;
vehicleInfo[slot][spawnhealth] = 1000.0;
vehicleInfo[slot][vactive] = 0;
return 1;
}
stock GetFreeServerVehicleSlot(){
for(new i=0;i<MAX_VEHICLE;i++){
if(vehicleInfo[i][vactive] == 0)return i;
}
return -1;
}
stock GetServerVehicleSlot(vehicleid){
if(vehicleid <= 0 || vehicleid == INVALID_VEHICLE_ID)return -1;
for(new i=0;i<MAX_VEHICLE;i++){
if(vehicleInfo[i][vactive] == 1 && vehicleInfo[i][vehicle] == vehicleid)return i;
}
return -1;
}
stock GetStoredVehicleNameID(name[]){
if(strfind(name, "vehicle_", true) != 0)return -1;
new suffix[16];
strmid(suffix, name, 8, strlen(name), sizeof(suffix));
return strval(suffix);
}
stock CreateServerVehicleSlot(slot, dbid, nameid, modelid, Float:x, Float:y, Float:z, Float:a, interiorid, virtualworld, color1, color2, respawndelay, numberplate[], Float:spawnhealth_){
if(slot < 0 || slot >= MAX_VEHICLE)return INVALID_VEHICLE_ID;
new created = CreateVehicle(modelid, x, y, z, a, color1, color2, respawndelay);
if(created == INVALID_VEHICLE_ID)return INVALID_VEHICLE_ID;
vehicleInfo[slot][vehicle] = created;
vehicleInfo[slot][vDBID] = dbid;
vehicleInfo[slot][vNameID] = nameid;
vehicleInfo[slot][vModelID] = modelid;
vehicleInfo[slot][vX] = x;
vehicleInfo[slot][vY] = y;
vehicleInfo[slot][vZ] = z;
vehicleInfo[slot][vA] = a;
vehicleInfo[slot][vColor1] = color1;
vehicleInfo[slot][vColor2] = color2;
vehicleInfo[slot][vRespawnDelay] = respawndelay;
vehicleInfo[slot][vInteriorID] = interiorid;
vehicleInfo[slot][vVirtualWorld] = virtualworld;
format(vehicleInfo[slot][vNumberPlate], 64, "%s", numberplate);
vehicleInfo[slot][spawnhealth] = spawnhealth_;
vehicleInfo[slot][vactive] = 1;
SetVehicleNumberPlate(created, vehicleInfo[slot][vNumberPlate]);
LinkVehicleToInterior(created, interiorid);
SetVehicleVirtualWorld(created, virtualworld);
SetVehicleHealth(created, spawnhealth_);
return created;
}
stock RecreateServerVehicleSlot(slot){
if(slot < 0 || slot >= MAX_VEHICLE || vehicleInfo[slot][vactive] != 1)return 0;
new oldvehicle = vehicleInfo[slot][vehicle];
new created = CreateVehicle(vehicleInfo[slot][vModelID], vehicleInfo[slot][vX], vehicleInfo[slot][vY], vehicleInfo[slot][vZ], vehicleInfo[slot][vA], vehicleInfo[slot][vColor1], vehicleInfo[slot][vColor2], vehicleInfo[slot][vRespawnDelay]);
if(created == INVALID_VEHICLE_ID)return 0;
if(oldvehicle > 0 && oldvehicle != INVALID_VEHICLE_ID)DestroyVehicle(oldvehicle);
vehicleInfo[slot][vehicle] = created;
SetVehicleNumberPlate(created, vehicleInfo[slot][vNumberPlate]);
LinkVehicleToInterior(created, vehicleInfo[slot][vInteriorID]);
SetVehicleVirtualWorld(created, vehicleInfo[slot][vVirtualWorld]);
SetVehicleHealth(created, vehicleInfo[slot][spawnhealth]);
return 1;
}
forward OnDeleteVehicle(playerid, slot);
public OnDeleteVehicle(playerid, slot){
if(mysql_errno(mysql) != 0){
if(IsPlayerConnected(playerid))SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erfolgreich gelöscht werden.");
return 1;
}
new oldvehicle = vehicleInfo[slot][vehicle];
if(oldvehicle > 0 && oldvehicle != INVALID_VEHICLE_ID)DestroyVehicle(oldvehicle);
ResetVehicleInfo(slot);
new string[128];
format(string,sizeof(string),"[user]%i[/user] benutzt den Befehl '/deletevehicle'.",GetPVarInt(playerid, "accountid"));
Log(string, 4);
if(IsPlayerConnected(playerid))SendClientMessage(playerid,HELLGRUEN,"* Das Vehicle wurde erfolgreich gelöscht.");
return 1;
}
Alles anzeigen
Code: Fahrzeug löschen
ocmd:deletevehicle(playerid,params[]){
if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,ROT,noAdmin);
if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,ROT,"Du bist in keinem Vehicle.");
new slot = GetServerVehicleSlot(GetPlayerVehicleID(playerid));
if(slot == -1 || vehicleInfo[slot][vDBID] <= 0)return SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erfolgreich gelöscht werden.");
new query[128];
mysql_format(mysql, query, sizeof(query), "DELETE FROM cars WHERE id = %i LIMIT 1", vehicleInfo[slot][vDBID]);
mysql_tquery(mysql, query, "OnDeleteVehicle", "ii", playerid, slot);
return 1;
}
Alles anzeigen
Code: Fahrzeug parken
forward OnParkVehicle(playerid, slot, oldvehicle, seat);
public OnParkVehicle(playerid, slot, oldvehicle, seat){
if(mysql_errno(mysql) != 0){
if(IsPlayerConnected(playerid))SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erfolgreich geparkt werden.");
return 1;
}
new putPlayerBack = 0;
if(IsPlayerConnected(playerid) && IsPlayerInVehicle(playerid, oldvehicle))putPlayerBack = 1;
if(!RecreateServerVehicleSlot(slot)){
if(IsPlayerConnected(playerid))SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erfolgreich geparkt werden.");
return 1;
}
if(putPlayerBack == 1){
PutPlayerInVehicle(playerid, vehicleInfo[slot][vehicle], seat);
vehicleid_[playerid] = vehicleInfo[slot][vehicle];
}
if(IsPlayerConnected(playerid))SendClientMessage(playerid,HELLGRUEN,"* Das Vehicle wurde erfolgreich geparkt.");
return 1;
}
ocmd:parken(playerid,params[]){
if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,ROT,noAdmin);
if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid,ROT,"Du bist in keinem Vehicle.");
if(GetPlayerVehicleSeat(playerid)!=0)return SendClientMessage(playerid,HELLROT,"* Du bist nicht der Fahrer des Vehicles.");
new slot = GetServerVehicleSlot(GetPlayerVehicleID(playerid));
if(slot == -1 || vehicleInfo[slot][vDBID] <= 0)return SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erfolgreich geparkt werden.");
GetVehiclePos(vehicleInfo[slot][vehicle],vehicleInfo[slot][vX],vehicleInfo[slot][vY],vehicleInfo[slot][vZ]);
GetVehicleZAngle(vehicleInfo[slot][vehicle],vehicleInfo[slot][vA]);
vehicleInfo[slot][vInteriorID] = GetPlayerInterior(playerid);
vehicleInfo[slot][vVirtualWorld] = GetPlayerVirtualWorld(playerid);
new query[256];
mysql_format(mysql, query, sizeof(query), "UPDATE cars SET x = %f, y = %f, z = %f, a = %f, interiorid = %i, virtualworld = %i WHERE id = %i LIMIT 1", vehicleInfo[slot][vX], vehicleInfo[slot][vY], vehicleInfo[slot][vZ], vehicleInfo[slot][vA], vehicleInfo[slot][vInteriorID], vehicleInfo[slot][vVirtualWorld], vehicleInfo[slot][vDBID]);
mysql_tquery(mysql, query, "OnParkVehicle", "iiii", playerid, slot, vehicleInfo[slot][vehicle], GetPlayerVehicleSeat(playerid));
return 1;
}
Alles anzeigen
Code: Fahrzeug erstellen
forward OnPlayerCreateVehicle(playerid, i, modelid, color1, color2, respawn, Float:spawnhealth_, kills_, numberplate[]);
public OnPlayerCreateVehicle(playerid, i, modelid, color1, color2, respawn, Float:spawnhealth_, kills_, numberplate[]){
new rows, fields;
cache_get_data(rows, fields, mysql);
new query[128];
if(rows){
i++;
if(i >= MAX_VEHICLE){
SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erstellt werden.");
return 1;
}
mysql_format(mysql, query, sizeof(query), "SELECT id FROM cars WHERE name = 'vehicle_%i' LIMIT 1", i);
mysql_tquery(mysql, query, "OnPlayerCreateVehicle", "iiiiiifis", playerid, i, modelid, color1, color2, respawn, spawnhealth_, kills_, numberplate);
}else{
new slot = GetFreeServerVehicleSlot();
if(slot == -1){
SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erstellt werden.");
return 1;
}
new Float:pos[3], name[16];
format(name, sizeof(name), "vehicle_%i", i);
GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
vehicleInfo[slot][vactive] = 2;
mysql_CreateVehicle(playerid, slot, i, name, modelid, pos[0], pos[1], pos[2], 0.0, GetPlayerInterior(playerid), GetPlayerVirtualWorld(playerid), color1, color2, respawn, numberplate, spawnhealth_, kills_, SpielerName(playerid));
}
return 1;
}
forward OnPlayerCreateVehicleInsert(playerid, slot, nameid, modelid, color1, color2, respawndelay, Float:spawnhealth_, Float:x, Float:y, Float:z, Float:a, interiorid, virtualworld, numberplate[]);
public OnPlayerCreateVehicleInsert(playerid, slot, nameid, modelid, color1, color2, respawndelay, Float:spawnhealth_, Float:x, Float:y, Float:z, Float:a, interiorid, virtualworld, numberplate[]){
new dbid = cache_insert_id(mysql);
if(mysql_errno(mysql) != 0 || dbid <= 0){
ResetVehicleInfo(slot);
if(IsPlayerConnected(playerid))SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erstellt werden.");
return 1;
}
if(CreateServerVehicleSlot(slot, dbid, nameid, modelid, x, y, z, a, interiorid, virtualworld, color1, color2, respawndelay, numberplate, spawnhealth_) == INVALID_VEHICLE_ID){
new query[128];
mysql_format(mysql, query, sizeof(query), "DELETE FROM cars WHERE id = %i LIMIT 1", dbid);
mysql_tquery(mysql, query);
ResetVehicleInfo(slot);
if(IsPlayerConnected(playerid))SendClientMessage(playerid,HELLROT,"* Das Vehicle konnte nicht erstellt werden.");
return 1;
}
if(IsPlayerConnected(playerid))SendClientMessage(playerid,HELLGRUEN,"* Das Vehicle wurde erfolgreich erstellt. Benutze /parken um es zu parken.");
return 1;
}
stock mysql_CreateVehicle(playerid, slot, nameid, name[], modelid, Float:___x, Float:___y, Float:___z, Float:___a, interiorid, virtualworld, color1, color2, respawndelay, numberplate[], Float:spawnhealth_, worldwarkills, creator[])
{
new query[768];
mysql_format(mysql, query, sizeof(query), "INSERT INTO `cars` (`name`, `modelid`, `x`, `y`, `z`, `a`, `interiorid`, `virtualworld`, `color1`, `color2`, `respawndelay`, `numberplate`, `worldwarkills`, `spawnhealth`, `creator`) VALUES ('%e', %i, %f, %f, %f, %f, %i, %i, %i, %i, %i, '%e', %i, %f, '%e')", name, modelid, ___x, ___y, ___z, ___a, interiorid, virtualworld, color1, color2, respawndelay, numberplate, worldwarkills, spawnhealth_, creator);
mysql_tquery(mysql, query, "OnPlayerCreateVehicleInsert", "iiiiiiifffffiis", playerid, slot, nameid, modelid, color1, color2, respawndelay, spawnhealth_, ___x, ___y, ___z, ___a, interiorid, virtualworld, numberplate);
return true;
}
ocmd:createvehicle(playerid,params[]){
if(!IsPlayerAnAdmin(playerid,5))return SendClientMessage(playerid,ROT,noAdmin);
new modelid,color1,color2,numberplate[64],respawn,Float:spawnhealth_;
if(GetPVarInt(playerid,"arena")!=13){
if(sscanf(params,"iiiifs[64]",modelid,color1,color2,respawn,spawnhealth_,numberplate))return SendClientMessage(playerid,GRAU,"Benutze: /createvehicle <Modelid> <Color1> <Color2> <Respawndelay(Sekunden)> <Spawnhealth(1000.0)> <Nummernschild>");
if(modelid<400 || modelid>611)return SendClientMessage(playerid,ROT,"* Du musst eine verfügbare Model-ID angeben.");
new query[128];
mysql_format(mysql, query, sizeof(query), "SELECT id FROM cars WHERE name = 'vehicle_0' LIMIT 1");
mysql_tquery(mysql, query, "OnPlayerCreateVehicle", "iiiiiifis", playerid, 0, modelid, color1, color2, respawn, spawnhealth_, 0, numberplate);
return 1;
}else{
new kills_,rank;
if(sscanf(params,"iiiifis[64]",modelid,color1,color2,respawn,spawnhealth_,rank,numberplate))return SendClientMessage(playerid,GRAU,"Benutze: /createvehicle <Modelid> <Color1> <Color2> <Respawndelay(Sekunden)> <Spawnhealth(1000.0)> <Rang(0-6)> <Nummernschild>");
if(modelid<400 || modelid>611)return SendClientMessage(playerid,ROT,"* Du musst eine verfügbare Model-ID angeben.");
if(rank < 0 || rank > 6)return SendClientMessage(playerid,GRAU,"Benutze: /createvehicle <Modelid> <Color1> <Color2> <Respawndelay(Sekunden)> <Rang(0-6)> <Nummernschild>");
switch(rank){
case 0: kills_=0;
case 1: kills_=100;
case 2: kills_=250;
case 3: kills_=750;
case 4: kills_=1500;
case 5: kills_=5000;
case 6: kills_=10000;
}
new query[128];
mysql_format(mysql, query, sizeof(query), "SELECT id FROM cars WHERE name = 'vehicle_0' LIMIT 1");
mysql_tquery(mysql, query, "OnPlayerCreateVehicle", "iiiiiifis", playerid, 0, modelid, color1, color2, respawn, spawnhealth_, kills_, numberplate);
return 1;
}
}
Alles anzeigen
Code: enum
enum vehicleenum{
vehicle,
vDBID,
vNameID,
vModelID,
Float:vX,
Float:vY,
Float:vZ,
Float:vA,
vColor1,
vColor2,
vRespawnDelay,
vInteriorID,
vVirtualWorld,
vNumberPlate[64],
Float:spawnhealth,
vactive
};
new vehicleInfo[MAX_VEHICLE][vehicleenum];
Alles anzeigen
Danke im Voraus