PDA

Просмотр полной версии : [Include] mselect - выбор моделей на Text Draw



ziggi
09.10.2016, 22:20
mselect
GitHub (https://github.com/Open-GTO/mselect)

Описание
Библиотека, которая даёт возможность создавать диалоги выбора моделей на Text Draw. Сами Text Draw базируются на скрипте vspawner от Kye. Библиотека позиционируется как гибкая замена для скрипта mSelection, в которой отсутствуют проблемы, связанные с работой вложенных диалогов на Text Draw. Также в библиотеке предусмотрена возможность индивидуальной настройки каждого меню и изменение настроек по умолчанию.

Скриншоты
Меню выбора скина:
http://ihost.pro-pawn.ru/image.php?di=7JDH

Функции
Показать созданное меню
MSelect_Show(playerid, function[]);

Открыть меню выбора моделей
MSelect_Open(playerid, function[], items_array[], items_count, bool:list_loop = MSELECT_DEF_LIST_LOOP,
header[] = "", button[] = MSELECT_DEF_BUTTON_TEXT,
button_next[] = MSELECT_DEF_BUTTON_NEXT, button_prev[] = MSELECT_DEF_BUTTON_PREV,
Float:pos_x = MSELECT_DEF_POS_X, Float:pos_y = MSELECT_DEF_POS_Y,
Float:button_width = MSELECT_DEF_BUTTON_WIDTH, Float:button_height = MSELECT_DEF_BUTTON_HEIGHT,
Float:page_button_width = MSELECT_DEF_PBUTTON_WIDTH, Float:page_button_height = MSELECT_DEF_PBUTTON_HEIGHT,
Float:item_width = MSELECT_DEF_ITEM_WIDTH, Float:item_height = MSELECT_DEF_ITEM_HEIGHT,
Float:rot_x = MSELECT_DEF_ROT_X, Float:rot_y = MSELECT_DEF_ROT_Y, Float:rot_z = MSELECT_DEF_ROT_Z,
Float:zoom = MSELECT_DEF_ZOOM, Float:background_padding = MSELECT_DEF_BG_PADDING,
Float:item_padding = MSELECT_DEF_ITEM_PADDING, Float:button_padding = MSELECT_DEF_BUTTON_PADDING,
Float:header_padding = MSELECT_DEF_HEADER_PADDING, Float:page_padding = MSELECT_DEF_PAGE_PADDING,
select_color = MSELECT_DEF_SELECT_COLOR,
items_bg_colors[MSELECT_MAX_ITEMS] = {MSELECT_DEF_ITEMS_BG_COLOR, ...},
dialog_bg_color = MSELECT_DEF_DIALOG_BG_COLOR,
header_fg_color = MSELECT_DEF_HEADER_FG_COLOR,
page_fg_color = MSELECT_DEF_PAGE_FG_COLOR,
button_fg_color = MSELECT_DEF_BUTTON_FG_COLOR,
button_bg_color = MSELECT_DEF_BUTTON_BG_COLOR);

Закрыть меню
MSelect_Close(playerid);

Статус меню
MSelect_IsOpen(playerid);

Автовызываемые функции
Для каждого меню оформляется собственная функция-обработчик, выглядит она следующим образом:

MSelectResponse:example_ms(playerid, MSelectType:response, itemid, itemvalue[])
{
return 1;
}

Эта функция вызывается при любом взаимодействии пользователя с меню.

MSelectType может принимать следующие значения:

MSelect_None
MSelect_Item
MSelect_Button
MSelect_ButtonNext
MSelect_ButtonPrev
MSelect_Cancel


Константы
Доступно несколько констант, некоторые из них можно переназначить.


Константа
Значение по умолчанию
Можно переназначить?


MSELECT_MAX_ITEMS
100
да


MSELECT_MAX_ITEMS_PER_LINE
7
да


MSELECT_MAX_ITEMS_LINES
3
да


MSELECT_DEF_LIST_LOOP
false
да


MSELECT_DEF_BUTTON_TEXT
"Cancel"
да


MSELECT_DEF_BUTTON_NEXT
">>"
да


MSELECT_DEF_BUTTON_PREV
"<<"
да


MSELECT_DEF_POS_X
85.0
да


MSELECT_DEF_POS_Y
130.0
да


MSELECT_DEF_BUTTON_WIDTH
60.0
да


MSELECT_DEF_BUTTON_HEIGHT
13.0
да


MSELECT_DEF_PBUTTON_WIDTH
30.0
да


MSELECT_DEF_PBUTTON_HEIGHT
13.0
да


MSELECT_DEF_ITEM_WIDTH
60.0
да


MSELECT_DEF_ITEM_HEIGHT
70.0
да


MSELECT_DEF_ROT_X
0.0
да


MSELECT_DEF_ROT_Y
0.0
да


MSELECT_DEF_ROT_Z
0.0
да


MSELECT_DEF_ZOOM
1.0
да


MSELECT_DEF_BG_PADDING
20.0
да


MSELECT_DEF_ITEM_PADDING
2.0
да


MSELECT_DEF_BUTTON_PADDING
5.0
да


MSELECT_DEF_SELECT_COLOR
0xAAAAAAFF
да


MSELECT_DEF_ITEMS_BG_COLOR
0x55555599
да


MSELECT_DEF_DIALOG_BG_COLOR
0x00000099
да


MSELECT_DEF_HEADER_FG_COLOR
0xDDDDDDDD
да


MSELECT_DEF_PAGE_FG_COLOR
0xDDDDDDDD
да


MSELECT_DEF_BUTTON_FG_COLOR
0x888888FF
да


MSELECT_DEF_BUTTON_BG_COLOR
0x000000CC
да


MSELECT_DEF_HEADER_PADDING
3.0
да


MSELECT_DEF_PAGE_PADDING
3.0
да


MSELECT_MAX_ITEMS_ON_LIST
(MSELECT_MAX_ITEMS_PER_LINE * MSELECT_MAX_ITEMS_LINES)
нет


MSELECT_MAX_FUNCTION_NAME
31
нет


MSELECT_INVALID_MODEL_ID
-1
нет



Использование
Для более удобного использования, в системе предусмотрена возможность создавать функцию для открытия меню, это полезно при множественном вызове одного меню (в основном используется при создании вложенных меню):

MSelectCreate:example_ms(playerid)
{
static
items_array[311] = {MSELECT_INVALID_MODEL_ID, ...},
items_count = 0;

if (items_count == 0) {
for(new i = 0; i <= sizeof(items_array); i++) {
if (i == 74) {
continue;
}

items_array[items_count] = i;
items_count++;
}
}

MSelect_Open(playerid, MSelect:example_ms, items_array, items_count, .header = "Header");
}

MSelectResponse:example_ms(playerid, MSelectType:response, itemid, modelid)
{
new string[144];
format(string, sizeof(string), "ID: %d | Type: %d | Item: %d | Model: %d",
playerid, _:response, itemid, modelid);
SendClientMessage(playerid, -1, string);
if (response == MSelect_Cancel) {
MSelect_Close(playerid);
}
return 1;
}

И где-то вы можете открыть созданное меню:

MSelect_Show(playerid, MSelect:example_ms);

Естественно вас никто не заставляет пользоваться этой системой, вы можете обойтись без MSelectCreate.

Скачать

Последнюю версию вы всегда можете найти на странице релизов GitHub (https://github.com/Open-GTO/mselect/releases).

Sambook
06.06.2018, 19:14
.header = "Header"
что означает точка, стоящая перед параметром, и в каких случаях её нужно использовать?

DeimoS
06.06.2018, 19:51
.header = "Header"
что означает точка, стоящая перед параметром и в каких случаях её нужно использовать?

Это позволяет вызывать параметры функции в порядке, отличном от заданного при объявлении
Например, есть функция:

main()
{
SomeFunc(1, 2.2, "Test");// Вызвали по-порядку
SomeFunc(1, .param3 = "Test", .param2 = 2.2);// Изменили порядок
}
stock SomeFunc(param1, Float:param2, param3[])
{
printf("\n%d\n%f\n%s\n", param1, param2, param3);
return 1;
}

Так же это позволяет пропустить значения по-умолчанию. Например, в стримере есть функция создания объекта с рядом параметров, у которых есть значение по-умолчанию:
native STREAMER_TAG_OBJECT CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_OBJECT_SD, Float:drawdistance = STREAMER_OBJECT_DD, STREAMER_TAG_AREA areaid = STREAMER_TAG_AREA -1, priority = 0);

Нам нужно указать своё значение для streamdistance и, дабы не указывать значения для всех предыдущих параметров, можно сделать так:
CreateDynamicObject(32313, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, .streamdistance = 500.0);
или, например, так
new Float:streamdistance = 500.0;
CreateDynamicObject(32313, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, .streamdistance = streamdistance);
new Float:test = 500.0;// Имя может быть любым
CreateDynamicObject(32313, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, .streamdistance = test);

То есть, после точки ты пишешь имя параметра, для которого нужно передать значение, после ставишь знак "=" и после уже указываешь значение