PDA

Просмотр полной версии : [Вопрос] Как сделать загрузку личного автомобиля игрока при старте сервера?



Lars Keller
12.11.2014, 23:49
Приветствую всех, и у меня вопрос начал реализовать систему домов на сервере, и случилась такая беда, хочу что бы машины спавнились не в зависимости онлайн игрок (владелец дома) или не онлайн, при запуске мода. Я конечно понимаю что сделать цикл загрузку всех домов, и потом создавать машину по координатам, но другой вопрос как пропустить итерацию у кого нету дома, а тем более машины.
Переменная отвечающия за дом: pInfo[playerid][pHouse] не зря я выделил, playerid видь из OnGameModeInit не как не передать параметр playerid, а переменная отвечающия за машину pInfo[playerid][p_car_house], вот жду помощи товарищи, заранее спасибо.
На счёт загрузки:


mysql_function_query(mysql_connect_ID, "SELECT * FROM `name_table`", true, "cars_load_house", "");



forward cars_load_house();
public cars_load_house()
{
new rows,fields;
cache_get_data(rows, fields);
if(rows)
{
for(new r; r < rows; r++)
{
// some coding
}
}
}

DeimoS
13.11.2014, 02:54
Покажи текущую загрузку информации о доме

Lars Keller
13.11.2014, 08:25
Вот:
OnGameModeInit:


mysql_function_query(mysql_connect_ID,"SELECT * FROM `house`", true, "HouseLoad", "");

Сама загрузка:


forward HouseLoad();
public HouseLoad()
{
new time = GetTickCount();
new r, f;
cache_get_data(r, f);
new string[128];
for(new idx; idx < r; idx++)
{
HouseInfo[idx][hID] = cache_get_field_content_int(idx, "id", mysql_connect_ID);
HouseInfo[idx][h_player_pos_street][0] = cache_get_field_content_float(idx, "player_pos_street_1", mysql_connect_ID);
HouseInfo[idx][h_player_pos_street][1] = cache_get_field_content_float(idx, "player_pos_street_2", mysql_connect_ID);
HouseInfo[idx][h_player_pos_street][2] = cache_get_field_content_float(idx, "player_pos_street_3", mysql_connect_ID);
HouseInfo[idx][h_player_pos_int][0] = cache_get_field_content_float(idx, "player_pos_int_1", mysql_connect_ID);
HouseInfo[idx][h_player_pos_int][1] = cache_get_field_content_float(idx, "player_pos_int_2", mysql_connect_ID);
HouseInfo[idx][h_player_pos_int][2] = cache_get_field_content_float(idx, "player_pos_int_3", mysql_connect_ID);
cache_get_field_content(idx, "owner", HouseInfo[idx][hOwner], mysql_connect_ID, 24);
HouseInfo[idx][hCena] = cache_get_field_content_int(idx, "cena", mysql_connect_ID);
HouseInfo[idx][hInt] = cache_get_field_content_int(idx, "int", mysql_connect_ID);
HouseInfo[idx][hLock] = cache_get_field_content_int(idx, "lock", mysql_connect_ID);
HouseInfo[idx][hOwned] = cache_get_field_content_int(idx, "owned", mysql_connect_ID);
HouseInfo[idx][hClass] = cache_get_field_content_int(idx, "class", mysql_connect_ID);
new klass[13];
if(HouseInfo[idx][hOwned] == 0)
{
HouseInfo[idx][hPickupID] = CreateDynamicPickup(1273, 23, HouseInfo[idx][h_player_pos_street][0], HouseInfo[idx][h_player_pos_street][1], HouseInfo[idx][h_player_pos_street][2],-1);
HouseInfo[idx][hIconID] = CreateDynamicMapIcon(HouseInfo[idx][h_player_pos_street][0], HouseInfo[idx][h_player_pos_street][1], HouseInfo[idx][h_player_pos_street][2],31, 0xFFFFFF);
switch(HouseInfo[idx][hClass])
{
case 0: klass = "Эконом класс";
case 1: klass = "Бизнес класс";
case 2: klass = "Элитный";
}
format(string, sizeof(string),"Номер дома: %i\nЦена: %i долларов\nКласс: %s",idx,HouseInfo[idx][hCena],klass);
HouseInfo[idx][hTextID] = Create3DTextLabel(string,0xFFFFFF,HouseInfo[idx][h_player_pos_street][0], HouseInfo[idx][h_player_pos_street][1], HouseInfo[idx][h_player_pos_street][2],20.0,0,1);
}
else
{
HouseInfo[idx][hPickupID] = CreateDynamicPickup(1272, 23, HouseInfo[idx][h_player_pos_street][0], HouseInfo[idx][h_player_pos_street][1], HouseInfo[idx][h_player_pos_street][2],-1);
HouseInfo[idx][hIconID] = CreateDynamicMapIcon(HouseInfo[idx][h_player_pos_street][0], HouseInfo[idx][h_player_pos_street][1], HouseInfo[idx][h_player_pos_street][2], 32, 0xFFFFFF);
switch(HouseInfo[idx][hClass])
{
case 0: klass = "Эконом класс";
case 1: klass = "Бизнес класс";
case 2: klass = "Элитный";
}
format(string, sizeof(string),"Номер дома: %i\nВладелец: %s\nКласс: %s",idx,HouseInfo[idx][hOwner], klass);
HouseInfo[idx][hTextID] = Create3DTextLabel(string,0xFFFFFF,HouseInfo[idx][h_player_pos_street][0], HouseInfo[idx][h_player_pos_street][1], HouseInfo[idx][h_player_pos_street][2],20.0,0,1);
}
TOTALHOUSES++;
}
printf("Загружено домов [%i] пострачено времени [%i мс]",TOTALHOUSES,GetTickCount()-time);
return true;
}

DeimoS
13.11.2014, 10:18
Эмм, а где грузятся автомобили? Вот этот код нужен

Lars Keller
13.11.2014, 11:08
Загрузки автомобиля нету, записывать координаты в аккаунт и потом их выгружать это все понятно, но вот как выгрузить с учётом что у некоторых домов нету владелца

DeimoS
13.11.2014, 11:54
Загрузки автомобиля нету, записывать координаты в аккаунт и потом их выгружать это все понятно, но вот как выгрузить с учётом что у некоторых домов нету владелца

Так не совсем понимаю что ты хочешь... У тебя автомобили уже реализованы? Или ты спрашиваешь как их реализовать?

Lars Keller
13.11.2014, 13:08
Не реализована, все понятно как реализовать кроме того что как при загрузке пропустить итерацию цикла, что машины нету или нету владельца дома (при загрузке)

DeimoS
13.11.2014, 14:36
Не реализована, все понятно как реализовать кроме того что как при загрузке пропустить итерацию цикла, что машины нету или нету владельца дома (при загрузке)

Так ты сохраняй авто вместе с домом. И уже по владельцу дома определяй владельца автомобиля

Lars Keller
13.11.2014, 14:43
Так ты сохраняй авто вместе с домом. И уже по владельцу дома определяй владельца автомобиля
Так проблема в том что я хочу через цикл, переменная отвечающая за владение дома находиться в таблице аккаунтов игроков, тоесть как мне пропустить интерацию то?
Хотел как то так:
OnGameModeInit


mysql_function_query(mysql_connect_ID, "SELECT * FROM `cars_for_house`", true, "cars_load_house", "");



forward cars_load_house();
public cars_load_house()
{
new rows,fields;
cache_get_data(rows, fields);
if(rows)
{
for(new r; r < rows; r++)
{
/*Тут что то типо:
if(pInfo[playerid][pHouse] == 0 || pInfo[playerid][p_car_house] == 0) continue;
*/
}
}
}

Но видь не выйдет пропуска, т.к по иду не как не пропустить, вот собственно загоска в реализаций в чем.
Если есть другие варианты более оптимальные без цикла, предлагайте буду рад :)

DeimoS
13.11.2014, 15:25
Не совсем понял... Просто храни автомобили в базе данных домов и при загрузке дома проверяй, есть ли у дома автомобиль или нет. При создании автомобиля, привязывай его к дому, а не к владельцу. И уже владельца определяй по ID дома

Lars Keller
13.11.2014, 15:30
Не совсем понял... Просто храни автомобили в базе данных домов и при загрузке дома проверяй, есть ли у дома автомобиль или нет. При создании автомобиля, привязывай его к дому, а не к владельцу. И уже владельца определяй по ID дома

Дак у дома может не быть владельца, не?

Daniel_Cortez
13.11.2014, 15:38
Дак у дома может не быть владельца, не?
И что Вы этим хотите сказать? Если у дома нет владельца, следовательно и машина к нему тоже не должна быть приписана.

Lars Keller
13.11.2014, 17:23
Все реализовал, спасибо всем кто принимал участие.
В HOUSELOAD написал следующие:


if(HouseInfo[idx][h_car_house_ID] >= 400 && HouseInfo[idx][h_car_house_ID] <= 611)
{
CreateVehicle(HouseInfo[idx][h_car_house_ID], HouseInfo[idx][h_car_pos][0], HouseInfo[idx][h_car_pos][1], HouseInfo[idx][h_car_pos][2], 0.0, 1, 1, 60000);
}