Просмотр полной версии : [Вопрос] Как сделать загрузку личного автомобиля игрока при старте сервера?
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
}
}
}
Покажи текущую загрузку информации о доме
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;
}
Эмм, а где грузятся автомобили? Вот этот код нужен
Lars Keller
13.11.2014, 11:08
Загрузки автомобиля нету, записывать координаты в аккаунт и потом их выгружать это все понятно, но вот как выгрузить с учётом что у некоторых домов нету владелца
Загрузки автомобиля нету, записывать координаты в аккаунт и потом их выгружать это все понятно, но вот как выгрузить с учётом что у некоторых домов нету владелца
Так не совсем понимаю что ты хочешь... У тебя автомобили уже реализованы? Или ты спрашиваешь как их реализовать?
Lars Keller
13.11.2014, 13:08
Не реализована, все понятно как реализовать кроме того что как при загрузке пропустить итерацию цикла, что машины нету или нету владельца дома (при загрузке)
Не реализована, все понятно как реализовать кроме того что как при загрузке пропустить итерацию цикла, что машины нету или нету владельца дома (при загрузке)
Так ты сохраняй авто вместе с домом. И уже по владельцу дома определяй владельца автомобиля
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;
*/
}
}
}
Но видь не выйдет пропуска, т.к по иду не как не пропустить, вот собственно загоска в реализаций в чем.
Если есть другие варианты более оптимальные без цикла, предлагайте буду рад :)
Не совсем понял... Просто храни автомобили в базе данных домов и при загрузке дома проверяй, есть ли у дома автомобиль или нет. При создании автомобиля, привязывай его к дому, а не к владельцу. И уже владельца определяй по 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);
}
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot