Автор: uhanichВерсия игры: 1.153создавалось и тестировалось на 1.153, но гипотетически должно работать и на более ранних версиях.
Была задача, везде, где возможно, заменить стандартные окна change_screen_*** на более функциональные собственные.
Принцип был понятен, но копипастить из презентации в презентацию здоровенные куски кода напрягало. Вот и решил создать для себя максимально удобный, функциональный и простой инструмент для этого
Ниже комплект скриптов для создания в любой презентации аналога прокручиваемой панели с инвентарём из игровых окон натива (торговля, экипировка компаньонов, лутинг и пр.) всего в несколько строк.
Данный кит позволяет создать до десяти полностью интерактивных панели в одной презентации, функционально ничем не отличающихся от нативных (перемещение и замена предметов внутри одной панели и между разными панелями, всплывающие подсказки с информацией о предмете), а также настроить по своему желанию их масштаб, рабочую область и положение
столько раз, сколько панелей инвентаря вы хотите создать, указав при этом желаемые параметры создаваемой панели
("test",0,mesh_inventory_window,[
(ti_on_presentation_load,
[(set_fixed_point_multiplier, 1000),
(assign, "$g_moving_overlay", -1),
(assign, "$g_number_overlays", 0),
(call_script, "script_prsnt_troop_inventory", "trp_player", 900, 980, 100, 600),
(call_script, "script_prsnt_troop_inventory", "trp_town_19_armorer", 900, 310, 100, 600),
(create_game_button_overlay, "$test_obj", "@Continue...", tf_center_justify),
(position_set_x, pos1, 500),
(position_set_y, pos1, 50),
(overlay_set_position, "$test_obj", pos1),
(presentation_set_duration, 999999),
]),
(ti_on_presentation_run,
[
(try_begin),
(gt, "$g_moving_overlay", 0),
(mouse_get_position, pos1),
(overlay_set_position, "$g_moving_overlay", pos1),
(try_end),
]),
(ti_on_presentation_event_state_change,
[
(store_trigger_param_1, ":object"),
(try_begin),
(lt, "$g_moving_overlay", 0),
(eq, ":object", "$test_obj"),
(presentation_set_duration, 0),
(try_end),
]),
(ti_on_presentation_mouse_enter_leave,
[
(store_trigger_param_1, ":object"),
(store_trigger_param_2, ":enters_leaves"),
(call_script, "script_prsnt_init_variables_and_show_item_details", ":object", ":enters_leaves"),
]),
(ti_on_presentation_mouse_press,
[
(store_trigger_param_1, ":object"),
(store_trigger_param_2, ":mouse_button"),
(call_script, "script_prsnt_relocate_item", ":object", ":mouse_button"),
]),
]),
Мы получаем практически полный аналог окна лутинга, за исключением возможности поменять собственную экипировку, но при необходимости это делается просто.