- Работа по разным типам фигур (shape):
- Цилиндер
- Куб
- Полуцилиндер
- Обратный вызов при взаимодействий с пикапом (OnPlayerEnterSmartPickup/OnPlayerLeaveSmartPickup)
И функции get'ры (достать иды 3д текстов и т.д) [смотреть в код, кому то лень описывать все это]
Перейдем к созданию пикапов:
Сигнатура функции:
stock [email protected]( const model_pickup, const Float: x_pos, const Float: y_pos, const Float: z_pos, const Float: size, const e_smart_pick_action_type: action_type, // созданы для определения типа действия (бизнесы/дома и т.д) const Float: min_z = -FLOAT_INFINITY, const Float: max_z = FLOAT_INFINITY, const description_text[] = "", const e_smart_pick_shape_type: shape_type = SMART_PICK_CUBOID_TYPE, const virtual_world = 0, const Float: angle = 245.0, const interior_id = 0, const key_id = -1, const Float: text3d_draw_distance = SMART_PICK_DRAW_DIST_3D_LABEL, const bool: test_los = false, const bool: is_need_debug_area = false )

Как видно из сигнатуры функции прямо тут же можно создавать описание пикапа (3д текст над пикапом) за это отвечает параметр description_text. Сообственно 3 пикапа с разными типами фигур (область действия пикапа):
public OnGameModeInit() { g_smrt_pick_semicylinder_id = [email protected]( 1_582, 0.3996, 1.2518, 3.1172, 2.5, .action_type = SMART_PICK_INFO_ACTION_TYPE, .description_text = "Привет! Я пикап с зоной действия \"полуцилиндер\"", .shape_type = SMART_PICK_SEMICYLINDER_TYPE, .key_id = KEY_JUMP, // зададим пикапу с полуцилиндром работать ТОЛЬКО на LSHIFT. Если указано -1, то кнопка не установлена и пикап будет триггерится на заход в зону! .test_los = false, .is_need_debug_area = true ); g_smrt_pick_cuboid_id = [email protected]( 2_057, 22.4809, 8.5867, 3.1172, 2.5, .action_type = SMART_PICK_INFO_ACTION_TYPE, .description_text = "Привет! Я пикап с зоной действия \"куб\"", .shape_type = SMART_PICK_CUBOID_TYPE, .key_id = -1, .test_los = false, .is_need_debug_area = true ); g_smrt_pick_cylinder_id = [email protected]( 2_057, 33.4954, 13.0710, 3.1172, 2.5, .action_type = SMART_PICK_INFO_ACTION_TYPE, .description_text = "Привет! Я пикап с зоной действия \"цилиндер\"", .shape_type = SMART_PICK_CYLINDER_TYPE, .key_id = -1, .test_los = false, .is_need_debug_area = true ); return 1; } public OnPlayerEnterSmartPickup(const playerid, const smart_pickup_id, const key_id) { static const shape_type_names[][] = { { "полуцилиндер" }, { "куб" }, { "цилиндер" } }; new e_smart_pick_shape_type: shape_type = [email protected](smart_pickup_id), player_name[MAX_PLAYER_NAME + 1], key_id_str[32]; format(key_id_str, sizeof(key_id_str), "%d (id)", key_id); GetPlayerName(playerid, player_name); static const str[] = "Игрок %s [ID: %d] зашел в умный пикап с ID'ом: %d. Кнопка: %s, зона действия: %s"; new fmt_str[sizeof(str) - 2 * 4 + MAX_PLAYER_NAME + 1 + 11 * 2 + 64 + sizeof(key_id_str)]; format( fmt_str, sizeof(fmt_str), str, player_name, playerid, smart_pickup_id, (key_id == -1) ? "пикап без кнопки" : key_id_str, shape_type_names[_:shape_type] ); SendClientMessageToAll(-1, fmt_str); if (g_smrt_pick_cylinder_id == smart_pickup_id) { // действие на пикап с цилиндром } else if (g_smrt_pick_cuboid_id == smart_pickup_id) { // действие на пикап с кубом } else if (g_smrt_pick_semicylinder_id == smart_pickup_id) { // действия на пикап с полуцилиндром } return 1; }

Для работы нужен: foreach, streamer (3dtryg для того чтобы рисовать зону действия, если вы не используйте is_need_debug_area, то Вам он не нужен). Видео с работой библиотеки:
По всему вопросам могу ответить либо я, либо @Saibot (у него имеется опыт использование данной
Код: https://gist.github....cb8c5b080b02859
P.S: Код далек от идеала, но это работает, мне лень фиксить некоторые моменты, может быть когда нибудь исправлю.
Прикрепленные файлы [Показать]
Сообщение отредактировал continue: 14 ноября 2022 - 10:57