PDA

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



Sarah
21.07.2019, 21:21
Всем привет, захотел узнать, лучше будет загружать данные вот так:

mysql_function_query(mysql_connect_id, "SELECT * FROM `kydato`", "@_LoadFrac");
@_LoadFrac();
@_LoadFrac() {
new fields;
cache_get_data(TOTALFRAC, fields);
for(new i, id; i < TOTALFRAC; i++) {
id = cache_get_field_content_int(i, "ID", mysqlc);
cache_get_field_content(i, "Name", Frac[id][fName], mysqlc, 32);
cache_get_field_content(i, "Leader", Frac[id][fLeader], mysqlc, 32);
cache_get_field_content(i, "Assistant", Frac[id][fAssistant], mysqlc, 32);
}
printf("%d - uploaded fractions", TOTALFRAC);
return true;
}


Или так:


cache = mysql_query(1, "SELECT * FROM `fraction`"), rows = cache_num_rows();
if(rows) {
TOTALFRAC = rows;
new str[213+MAX_PLAYER_NAME+11+7];
for(new i, id; i < TOTALFRAC; i++) {
id = cache_get_field_content_int(i, "f_id", 1);
cache_get_field_content(i, "f_name", FracInfo[id][fName], 1, 32);
cache_get_field_content(i, "f_leader", FracInfo[id][fLeader], 1, 32);
cache_get_field_content(i, "f_assistant", FracInfo[id][fAssistant], 1, 32);
}
printf("-> FRACTION | %d - uploaded.", TOTALFRAC);
}
else print("-> FRACTION | not uploaded.");
cache_delete(cache);

Daniel_Cortez
21.07.2019, 21:42
По-хорошему, предпочтительней первый вариант, т.к. обработка запроса вынесена в отдельный поток и основной поток (в котором выполняется вся логика мода) не зависает на время выполнения запроса.

Sarah
21.07.2019, 21:44
По-хорошему, предпочтительней первый вариант, т.к. обработка запроса вынесена в отдельный поток и основной поток (в котором выполняется вся логика мода) не зависает на время выполнения запроса.

Хорошо, спасибо за ответ)

DeimoS
25.07.2019, 22:45
Второй вариант, в целом, лучше не использовать, если не понимаешь всех последствий. "Бездумно" его можно использовать, разве что, для загрузки данных с БД при запуске сервера, чтоб все данные загружались поэтапно и игроков не пускало на сервер во время этой самой подгрузки (точнее, некоторых игроков всё равно будет пускать, если они будут успевать "пробиваться" между вызовом кода загрузок, но большая часть игроков будет ожидать подключения пока сервер не загрузит все данные). Ну и в редких случаях, когда нужно, чтоб сервер подвис на время обработки запроса, если с базы выгружаются какие-то важные данные.

Sarah
25.07.2019, 23:40
Второй вариант, в целом, лучше не использовать, если не понимаешь всех последствий. "Бездумно" его можно использовать, разве что, для загрузки данных с БД при запуске сервера, чтоб все данные загружались поэтапно и игроков не пускало на сервер во время этой самой подгрузки (точнее, некоторых игроков всё равно будет пускать, если они будут успевать "пробиваться" между вызовом кода загрузок, но большая часть игроков будет ожидать подключения пока сервер не загрузит все данные). Ну и в редких случаях, когда нужно, чтоб сервер подвис на время обработки запроса, если с базы выгружаются какие-то важные данные.

А еще такой вопросик, я вот загружаю транспорт на сервер и чтобы привязать его к игроку, я использую ИД трансопрта в базе данных и привязываю к данным игрока, то есть - Player[playerid][pVehicle]
И чтобы отобразить одну из 3 машин использую привязку выше, то есть - Vehicle[Player[playerid][pVehicle][0]][vModel] (чтобы, например, показать ид модели машины)
И вот вопрос, можно ли сделать проще?
На нем загрузка и команда вывода в чат лога ид модели машины и номер в базе
Сам код - https://pastebin.com/h6yMZ8gC

DeimoS
26.07.2019, 10:44
Покажи запрос и то, как создаёшь массив Vehicle/член перечисления pVehicle.


Вообще логичнее привязать данные к ID авто на сервере (возвращаемое CreateVehicle). И уже в массиве игрока хранить информацию об этом ID.
Особенно если ограничить возможность создания личного транспорта, позволив создавать лишь какой-то один транспорт из всех купленных (ну если у нас уже создан один из автомобилей игрока и тут он решил создать другой, то мы удаляем первый). В такой ситуации можно вообще обойтись только загрузкой информации о конкретном автомобиле, а не выгружать данные сразу всех авто. И выборку уже производить средствами MySQL, а не на сервере.
В общем, путей реализации данной системы есть множество. Всё зависит от того, какие данные и как ты хранишь изначально, и того, какой функционал ты хочешь дать игрокам, в итоге.