PDA

Просмотр полной версии : [Вопрос] Как правильно подсчитать размер трёх разных строк и "склеить" их в одну?



whale
26.12.2016, 21:22
Доброго времени суток, уважаемые пользователи/модераторы.
Мне немного сложно описать суть вопроса, но я постараюсь.
Читал урок от Daniel_Cortez по поводу подсчёта размера строки, и, вроде бы всё и гладко, но возникли вопросы/проблемы.

Команда:


CMD:getpos(playerid, params[])
{
if(!IsPlayerAuthorized(playerid)) return SendClientMessage(playerid, -1, "Вы не авторизованны!");

static const
coords_msg[] = "[Ваши координаты] X: %f, Y: %f, Z: %f\n",
facing_angle_msg[] = "[Угол поворота]: %f\n",
interior_msg[] = "[Интерьер]: %d\n",
virtual_world_msg[] = "[Виртуальный мир]: %d";

new all_msg[sizeof(coords_msg) + sizeof(facing_angle_msg) + sizeof(interior_msg) + sizeof(virtual_world_msg)];
new Float:pos_x, Float:pos_y, Float:pos_z, Float:anglerot;

GetPlayerPos(playerid, pos_x, pos_y, pos_z);
GetPlayerFacingAngle(playerid, anglerot);

new
interior = GetPlayerInterior(playerid),
virtual_world = GetPlayerVirtualWorld(playerid);

//format(all_msg, sizeof(all_msg), "%s%s%s%s", coords_msg, facing_angle_msg, interior_msg, virtual_world_msg);
//SendClientMessage(playerid, -1, all_msg);
// Вот и суть вопроса: как сделать правильное форматирование + склеивание подобных строк?
return 1;
}

Как видите, у меня есть 4 разных строки с разными параметрами. Массив all_msg с подсчётом так же имеется (хоть я и уверен, что подсчёт провёл не очень правильно).
Как вывести все эти строки вместе? (Учитывая то, что там ещё и параметры, которые должны заполняться значениями)

Или же можно было подсчитать размер максимальной строки (к примеру 1-ой) и выводить их отдельно?

P.S Очень прошу не бомбить. Лучше объясните доходчиво. Заранее благодарю вас за помощь :)

whale
27.12.2016, 15:29
Данная проблема решена. Closed.

Решение:


CMD:getpos(playerid, params[])
{
if(!IsPlayerAuthorized(playerid)) return SendClientMessage(playerid, -1, "Вы не авторизованны!");

static const
fmt_str[] = "[Ваши координаты] X: %f, Y: %f, Z: %f\n\
[Угол поворота]: %f\n\
[Интерьер]: %d\n\
[Виртуальный мир]: %d";

new string[sizeof(fmt_str) - 12 + 7 * 3 + 3*2];

new Float:pos_x, Float:pos_y, Float:pos_z, Float:anglerot;

GetPlayerPos(playerid, pos_x, pos_y, pos_z);
GetPlayerFacingAngle(playerid, anglerot);

new
interior = GetPlayerInterior(playerid),
virtual_world = GetPlayerVirtualWorld(playerid);

format(string, sizeof(string), fmt_str, coords_msg, facing_angle_msg, interior_msg, virtual_world_msg);

return SendClientMessage(playerid, -1, string);
}