endriu10
Дебютант
Написал систему личного транспорта на mysql. Вроде вся загрузка, спавн проходят плавно, но есть проблемы. Вот моя проблема:
У меня есть проверка на то, машина игрока или нет. Когда покупаешь магину, проверка хорошо проходит, но после перезахода в игру, даже если зайти с другого аккаунта, пишет что уже что это не моя машина, даже если другой игрок купит машину, ему напишет тоже самое. Это исправляеться только рестартом сервера. Я не понимаю в чем проблема, может вы чем-то поможите. Вот мой код:
1. Загрузка машин игроков (в OnGamemodeInit)
2. Спавн нужных машин при авторизации игрока (в авторизации игрока)
3. Когда игрок выходит из игры, кар удаляется (B OnPlayerDisconnect).
4. Покупка машины игроком
5. Команда /carpark где собственно и не проходит эта проверка...
У меня есть проверка на то, машина игрока или нет. Когда покупаешь магину, проверка хорошо проходит, но после перезахода в игру, даже если зайти с другого аккаунта, пишет что уже что это не моя машина, даже если другой игрок купит машину, ему напишет тоже самое. Это исправляеться только рестартом сервера. Я не понимаю в чем проблема, может вы чем-то поможите. Вот мой код:
1. Загрузка машин игроков (в OnGamemodeInit)
PHP:
static fmt_cu[] = "SELECT * FROM `cars`";
new cu[sizeof(fmt_cu)];
format(cu, sizeof(cu), fmt_cu);
mysql_function_query(connect_mysql, cu, true, "LoadCars", "");
fpublic LoadCars()
{
new time = GetTickCount();
new rows,fields;
cache_get_data(rows, fields);
if(rows)
{
for ( new f = 0; f < rows ; f++ )
{
cache_get_field_content(f, "Name", PCar[f][cname], connect_mysql, 24);
PCar[f][cmodel] = cache_get_field_content_int (f, "model");
PCar[f][chp] = cache_get_field_content_float (f, "hp");
PCar[f][ccolor1] = cache_get_field_content_int (f, "1color");
PCar[f][ccolor2] = cache_get_field_content_int (f, "2color");
PCar[f][cx] = cache_get_field_content_float (f, "x");
PCar[f][cy] = cache_get_field_content_float (f, "y");
PCar[f][cz] = cache_get_field_content_float (f, "z");
PCar[f][ca] = cache_get_field_content_float (f, "a");
PCar[f][cprice] = cache_get_field_content_int (f, "price");
TOTALPLAYERCAR++;
}
printf(" [LOAD]: Óñïåøíàÿ çàãðóçêà 'LoadCars' - çàãðóæåíî %d çà %d ì.ñ", TOTALPLAYERCAR,GetTickCount() - time);
}
return true;
}
PHP:
for ( new f; f < TOTALPLAYERCAR ; f++ )
{
if(PCar[f][cname] == Player[playerid][pname])
{
PCar[f][ccar] = CreateVehicle(PCar[f][cmodel],
PCar[f][cx], PCar[f][cy], PCar[f][cz], PCar[f][ca],
PCar[f][ccolor1], PCar[f][ccolor2], -1);
LinkVehicleToInterior(PCar[f][ccar], 0);
SetVehicleVirtualWorld(PCar[f][ccar], 0);
veh__pos[PCar[f][ccar]][0] = PCar[f][cx];
veh__pos[PCar[f][ccar]][1] = PCar[f][cy];
veh__pos[PCar[f][ccar]][2] = PCar[f][cz];
veh__pos[PCar[f][ccar]][3] = PCar[f][ca];
}
}
PHP:
for ( new f = 0; f < TOTALPLAYERCAR ; f++ )
{
if(PCar[f][cname] == Player[playerid][pname])
{
DestroyVehicle(PCar[f][ccar]);
}
}
PHP:
switch(listitem)
{
case 0: SetPVarInt(playerid,"SelectedColor",1);
case 1: SetPVarInt(playerid,"SelectedColor",0);
case 2: SetPVarInt(playerid,"SelectedColor",6);
case 3: SetPVarInt(playerid,"SelectedColor",79);
case 4: SetPVarInt(playerid,"SelectedColor",3);
}
DestroyVehicle(selection[playerid]);
TOTALPLAYERCAR++;
carmodel[playerid][0] = GetPVarInt(playerid,"SelectedCar");
carnumber[playerid][0] = TOTALPLAYERCAR;
Player[playerid][pmoney] -= GetPVarInt(playerid,"SelectedCarPrice");
GivePlayerMoney(playerid, - GetPVarInt(playerid,"SelectedCarPrice"));
Player[playerid][pCars] ++;
static fmt_up[] = "UPDATE `accounts` SET `Cars`='%d',`Car1`='%d',`Money`='%d',`CarID1`='%d' \
WHERE `Name`='%s' LIMIT 1";
new intup[sizeof(fmt_up)+60];
format(intup, sizeof(intup),fmt_up,
Player[playerid][pCars],carmodel[playerid][0],Player[playerid][pmoney],carnumber[playerid][0],Player[playerid][pname]);
mysql_function_query(connect_mysql, intup, false, "", "");
switch(random(2)) // Спавн кара у автосалона
{
case 0: PCar[TOTALPLAYERCAR][ccar] =
CreateVehicle(GetPVarInt(playerid,"SelectedCar"),520.5953,-1287.3384,16.9693,218.7674,GetPVarInt(playerid,"SelectedColor"),GetPVarInt(playerid,"SelectedColor"),-1,0);
case 1: PCar[TOTALPLAYERCAR][ccar] = CreateVehicle(GetPVarInt(playerid,"SelectedCar"),523.1398,-1285.2001,16.9693,217.8537,GetPVarInt(playerid,"SelectedColor"),GetPVarInt(playerid,"SelectedColor"),-1,0);
}
LinkVehicleToInterior(PCar[TOTALPLAYERCAR][ccar], 0);
SetVehicleVirtualWorld(PCar[TOTALPLAYERCAR][ccar], 0);
strmid(PCar[TOTALPLAYERCAR][cname], Player[playerid][pname], 0, strlen(Player[playerid][pname]), MAX_PLAYER_NAME);
PCar[TOTALPLAYERCAR][cmodel] = GetPVarInt(playerid,"SelectedCar");
PCar[TOTALPLAYERCAR][ccolor1] = GetPVarInt(playerid,"SelectedColor");
PCar[TOTALPLAYERCAR][ccolor2] = GetPVarInt(playerid,"SelectedColor");
PCar[TOTALPLAYERCAR][cprice] = GetPVarInt(playerid,"SelectedCarPrice");
switch(random(3)) // Сохранение координат на платной стоянке
{
case 0: PCar[TOTALPLAYERCAR][cx] = 1649.9440, PCar[TOTALPLAYERCAR][cy] = -1107.3602, PCar[TOTALPLAYERCAR][cz] = 23.6333, PCar[TOTALPLAYERCAR][ca] = 90.0;
case 1: PCar[TOTALPLAYERCAR][cx] = 1649.9019, PCar[TOTALPLAYERCAR][cy] = -1097.9336, PCar[TOTALPLAYERCAR][cz] = 23.6333, PCar[TOTALPLAYERCAR][ca] = 90.0;
case 2: PCar[TOTALPLAYERCAR][cx] = 1649.8247, PCar[TOTALPLAYERCAR][cy] = -1093.4956, PCar[TOTALPLAYERCAR][cz] = 23.6333, PCar[TOTALPLAYERCAR][ca] = 90.0;
}
new query[300];
format(query, sizeof(query), "INSERT INTO `cars` \
(`Name`,`model`,`1color`,`2color`,`x`,`y`,`z`,`a`,`price`) VALUES \
('%s','%d','%d','%d', '%f', '%f', '%f', '%f','%d')",
PCar[TOTALPLAYERCAR][cname],PCar[TOTALPLAYERCAR][cmodel],PCar[TOTALPLAYERCAR][ccolor1],PCar[TOTALPLAYERCAR][ccolor2],
PCar[TOTALPLAYERCAR][cx],PCar[TOTALPLAYERCAR][cy],PCar[TOTALPLAYERCAR][cz],PCar[TOTALPLAYERCAR][ca],PCar[TOTALPLAYERCAR][cprice]);
mysql_function_query ( connect_mysql, query, false, "", "" ) ;
SCM(playerid, COLOR_W, "Ваше транспортное средство стоит на парковке автосалона");
DeletePVar(playerid,"SelectedCar");
DeletePVar(playerid,"SelectedCarPrice");
PHP:
:carpark(playerid)
{
if(login_check[playerid] != true) return 1;
if(Player[playerid][pHouse] < 0) return SCM(playerid, COLOR_S, "У Вас нет недвижимости");
if(Player[playerid][pCars] == 0) return SCM(playerid, COLOR_S, "У Вас нет транспортного средства");
new vehicleid = GetPlayerVehicleID(playerid);
new idx = Player[playerid][pHouse];
if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
{
for(new v = 0; v < TOTALPLAYERCAR; v++)
{
if(vehicleid == PCar[v][ccar])
{
if(PCar[v][cname] != Player[playerid][pname]) return SendClientMessage(playerid, COLOR_S, "Это не Ваше транспортное средство");
if(GetPlayerVirtualWorld(playerid) != 0) return SCM(playerid, COLOR_S, "Вы должны находиться в нулевом виртуальном мире");
if(GetPlayerInterior(playerid) != 0) return SCM(playerid, COLOR_S, "Вы должны находиться в нулевом интерьере");
if(!IsPlayerInRangeOfPoint(playerid, 25.0, HInfo[idx][hX],HInfo[idx][hY],HInfo[idx][hZ])) return SCM(playerid, COLOR_S , "Вы далеко от своего дома" );
new number = GetVehicleID(vehicleid);
GetVehiclePos(vehicleid, PCar[number][cx], PCar[number][cy], PCar[number][cz]);
GetVehicleZAngle(vehicleid, PCar[number][ca]);
DestroyVehicle(vehicleid);
PCar[number][ccar] = CreateVehicle(PCar[number][cmodel],
PCar[number][cx], PCar[number][cy], PCar[number][cz], PCar[number][ca],
PCar[number][ccolor1], PCar[number][ccolor2], -1);
SetVehicleToRespawn(PCar[number][ccar]);
PutPlayerInVehicle(playerid, PCar[number][ccar], 0);
new string[128];
f("Машина марки %s была успешно перепаркована", VehicleNames[PCar[number][cmodel] - 400]);
SCM(playerid, COLOR_G, string);
SaveCar(number);
}
}
}
else SCM(playerid, COLOR_S, "Вы должны находиться за рулем Вашего транспортного средства");
return 1;
}
Последнее редактирование:
