Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Система личного транспорта

Статус
В этой теме нельзя размещать новые ответы.

endriu10

Дебютант
Написал систему личного транспорта на mysql. Вроде вся загрузка, спавн проходят плавно, но есть проблемы. Вот моя проблема:
У меня есть проверка на то, машина игрока или нет. Когда покупаешь магину, проверка хорошо проходит, но после перезахода в игру, даже если зайти с другого аккаунта, пишет что уже что это не моя машина, даже если другой игрок купит машину, ему напишет тоже самое. Это исправляеться только рестартом сервера. Я не понимаю в чем проблема, может вы чем-то поможите. Вот мой код:
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;
}
2. Спавн нужных машин при авторизации игрока (в авторизации игрока)
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];
		}
 }
3. Когда игрок выходит из игры, кар удаляется (B OnPlayerDisconnect).
PHP:
for ( new f = 0; f < TOTALPLAYERCAR ; f++ )
    {
        if(PCar[f][cname] == Player[playerid][pname])
        {
			DestroyVehicle(PCar[f][ccar]);
		}
    }
4. Покупка машины игроком
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");
5. Команда /carpark где собственно и не проходит эта проверка...
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;
}
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу