From 1c3abadd2f5e6157ee47b040f16defd8f7fde75e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Paix=C3=A3o?= Date: Fri, 21 Jun 2024 18:10:07 -0300 Subject: [PATCH 1/9] feat: new layout (#749) New layout based on client 13+. --------- Co-authored-by: kokekanon <114332266+kokekanon@users.noreply.github.com> Co-authored-by: Luan Luciano Co-authored-by: Levi999x Co-authored-by: SkullzOTS <86809689+SkullzOTS@users.noreply.github.com> Co-authored-by: Renato Machado --- .../verdana-11px-monochrome-underline.otfont | 7 + ...rdana-11px-monochrome_underline_cp1252.png | Bin 0 -> 6254 bytes data/images/automap/automap_buttons.png | Bin 0 -> 4697 bytes .../automap/automap_indicator_maplayers.png | Bin 0 -> 3667 bytes .../automap/automap_indicator_slider_left.png | Bin 0 -> 140 bytes data/images/automap/automap_phantom.png | Bin 0 -> 1900 bytes data/images/automap/automap_rose.png | Bin 0 -> 6631 bytes data/images/automap/timedisplay_scroll.png | Bin 0 -> 3719 bytes data/images/background.png | Bin 46261 -> 895567 bytes ...horizontal_experience_progressbar_tiny.png | Bin 0 -> 1689 bytes ...rizontal_health_progressbar_grey_large.png | Bin 0 -> 106 bytes ...horizontal_health_progressbar_large_10.png | Bin 0 -> 117 bytes ...orizontal_health_progressbar_large_100.png | Bin 0 -> 117 bytes ...horizontal_health_progressbar_large_30.png | Bin 0 -> 121 bytes .../horizontal_health_progressbar_large_4.png | Bin 0 -> 115 bytes ...horizontal_health_progressbar_large_60.png | Bin 0 -> 123 bytes ...horizontal_health_progressbar_large_95.png | Bin 0 -> 120 bytes ...horizontal_health_progressbar_small_10.png | Bin 0 -> 105 bytes ...orizontal_health_progressbar_small_100.png | Bin 0 -> 105 bytes ...horizontal_health_progressbar_small_30.png | Bin 0 -> 108 bytes .../horizontal_health_progressbar_small_4.png | Bin 0 -> 105 bytes ...horizontal_health_progressbar_small_60.png | Bin 0 -> 107 bytes ...horizontal_health_progressbar_small_95.png | Bin 0 -> 107 bytes .../horizontal_mana_progressbar_large.png | Bin 0 -> 113 bytes .../horizontal_mana_progressbar_small.png | Bin 0 -> 106 bytes .../horizontal_skill_progressbar_tiny.png | Bin 0 -> 2114 bytes data/images/bars/marker_left.png | Bin 0 -> 132 bytes data/images/bars/marker_right.png | Bin 0 -> 141 bytes data/images/bars/marker_top.png | Bin 0 -> 132 bytes .../entergame/dailyreward_deactivated.png | Bin 0 -> 273 bytes data/images/game/states/bleeding.png | Bin 905 -> 291 bytes data/images/game/states/burning.png | Bin 933 -> 436 bytes data/images/game/states/cursed.png | Bin 445 -> 274 bytes data/images/game/states/dazzled.png | Bin 1468 -> 197 bytes data/images/game/states/drowning.png | Bin 1434 -> 630 bytes data/images/game/states/drunk.png | Bin 894 -> 429 bytes data/images/game/states/electrified.png | Bin 912 -> 477 bytes data/images/game/states/freezing.png | Bin 957 -> 413 bytes data/images/game/states/haste.png | Bin 1473 -> 457 bytes data/images/game/states/hungry.png | Bin 905 -> 356 bytes data/images/game/states/logout_block.png | Bin 570 -> 466 bytes data/images/game/states/magic_shield.png | Bin 898 -> 435 bytes data/images/game/states/poisoned.png | Bin 909 -> 420 bytes data/images/game/states/protection_zone.png | Bin 1499 -> 618 bytes .../game/states/protection_zone_block.png | Bin 1485 -> 560 bytes data/images/game/states/slowed.png | Bin 628 -> 438 bytes data/images/game/states/strengthened.png | Bin 1464 -> 533 bytes .../healthmana/hitpoints_bar_filled.png | Bin 0 -> 2275 bytes .../hitpoints_manapoints_bar_border.png | Bin 0 -> 1846 bytes data/images/healthmana/hitpoints_symbol.png | Bin 0 -> 376 bytes data/images/healthmana/mana_bar_filled.png | Bin 0 -> 622 bytes data/images/healthmana/mana_symbol.png | Bin 0 -> 375 bytes data/images/icons/icon_axe.png | Bin 0 -> 2069 bytes data/images/icons/icon_club.png | Bin 0 -> 2056 bytes data/images/icons/icon_controls.png | Bin 0 -> 172 bytes data/images/icons/icon_discord.png | Bin 0 -> 2623 bytes data/images/icons/icon_distance.png | Bin 0 -> 2112 bytes data/images/icons/icon_experience.png | Bin 0 -> 2039 bytes data/images/icons/icon_fishing.png | Bin 0 -> 2029 bytes data/images/icons/icon_fist.png | Bin 0 -> 2046 bytes data/images/icons/icon_graphics.png | Bin 0 -> 142 bytes data/images/icons/icon_health.png | Bin 0 -> 376 bytes data/images/icons/icon_help.png | Bin 0 -> 285 bytes data/images/icons/icon_interface.png | Bin 0 -> 152 bytes data/images/icons/icon_magic.png | Bin 0 -> 2031 bytes data/images/icons/icon_misc.png | Bin 0 -> 209 bytes data/images/icons/icon_options.png | Bin 0 -> 246 bytes data/images/icons/icon_players.png | Bin 0 -> 158 bytes data/images/icons/icon_seasonalevent.png | Bin 0 -> 153 bytes data/images/icons/icon_shielding.png | Bin 0 -> 2013 bytes data/images/icons/icon_sound.png | Bin 0 -> 233 bytes data/images/icons/icon_streamers.png | Bin 0 -> 132 bytes data/images/icons/icon_sword.png | Bin 0 -> 2103 bytes data/images/icons/icon_viewers.png | Bin 0 -> 134 bytes data/images/icons/icon_youtube.png | Bin 0 -> 934 bytes data/images/icons/icons-skills.png | Bin 0 -> 1293 bytes data/images/icons/show_gui_help_grey.png | Bin 0 -> 164 bytes .../button-expert-small-disabled.png | Bin 0 -> 341 bytes .../inventory/button_blessings_gold.png | Bin 0 -> 2392 bytes .../inventory/button_blessings_green.png | Bin 0 -> 2392 bytes .../inventory/button_blessings_grey.png | Bin 0 -> 2402 bytes data/images/inventory/buttons_general.png | Bin 0 -> 13427 bytes data/images/inventory/containerslot.png | Bin 0 -> 2250 bytes .../inventory/containerslot_goldenborder.png | Bin 0 -> 378 bytes data/images/inventory/inventory_back.png | Bin 0 -> 1514 bytes data/images/inventory/inventory_feet.png | Bin 0 -> 1170 bytes data/images/inventory/inventory_finger.png | Bin 0 -> 326 bytes data/images/inventory/inventory_head.png | Bin 0 -> 944 bytes data/images/inventory/inventory_hip.png | Bin 0 -> 673 bytes data/images/inventory/inventory_left_hand.png | Bin 0 -> 637 bytes data/images/inventory/inventory_legs.png | Bin 0 -> 1045 bytes data/images/inventory/inventory_neck.png | Bin 0 -> 586 bytes .../images/inventory/inventory_right_hand.png | Bin 0 -> 1504 bytes data/images/inventory/inventory_torso.png | Bin 0 -> 1424 bytes data/images/inventory/max_button_small.png | Bin 0 -> 2453 bytes data/images/inventory/min_button_small.png | Bin 0 -> 2411 bytes data/images/options/analyzers.png | Bin 0 -> 2397 bytes data/images/options/blue_large.png | Bin 0 -> 7734 bytes data/images/options/bot.png | Bin 0 -> 3075 bytes data/images/options/button_battlelist.png | Bin 0 -> 3438 bytes data/images/options/button_empty.png | Bin 0 -> 2638 bytes data/images/options/button_enlarge.png | Bin 0 -> 4562 bytes data/images/options/button_frags.png | Bin 0 -> 3476 bytes data/images/options/button_logout.png | Bin 0 -> 3527 bytes data/images/options/button_options.png | Bin 0 -> 3190 bytes data/images/options/button_prey.png | Bin 0 -> 3513 bytes data/images/options/button_preydialog.png | Bin 0 -> 3654 bytes data/images/options/button_questlog.png | Bin 0 -> 3564 bytes data/images/options/button_shrink.png | Bin 0 -> 4529 bytes data/images/options/button_skills.png | Bin 0 -> 3309 bytes data/images/options/button_spells.png | Bin 0 -> 3675 bytes data/images/options/button_vip.png | Bin 0 -> 3288 bytes data/images/options/cooldowns.png | Bin 0 -> 2921 bytes data/images/options/green_large.png | Bin 0 -> 7530 bytes data/images/options/hotkeys.png | Bin 0 -> 2674 bytes data/images/options/idk1.png | Bin 0 -> 8123 bytes data/images/options/idk2.png | Bin 0 -> 7730 bytes data/images/options/store_large.png | Bin 0 -> 3944 bytes data/images/options/terminal.png | Bin 0 -> 3330 bytes data/images/options/yellow_large.png | Bin 0 -> 8159 bytes .../images/topbuttons/button_mute_pressed.png | Bin 0 -> 182 bytes data/images/topbuttons/button_mute_up.png | Bin 0 -> 170 bytes data/images/topbuttons/button_options.png | Bin 0 -> 1938 bytes data/images/ui/1pixel_down_frame.png | Bin 0 -> 974 bytes .../images/ui/2pixel_up_frame_borderimage.png | Bin 0 -> 15255 bytes .../ui/2pixel_up_frame_borderimage_dark.png | Bin 0 -> 6984 bytes ...xel_up_frame_borderimage_dark_reversed.png | Bin 0 -> 8698 bytes data/images/ui/3pixel_frame_borderimage.png | Bin 0 -> 15013 bytes data/images/ui/actionbar_locked.png | Bin 0 -> 3367 bytes data/images/ui/actionbar_unlocked.png | Bin 0 -> 3314 bytes data/images/ui/background.png | Bin 0 -> 14179 bytes data/images/ui/background_dark.png | Bin 0 -> 4999 bytes data/images/ui/blank.png | Bin 0 -> 2780 bytes data/images/ui/button_topgame.png | Bin 2085 -> 5097 bytes data/images/ui/checkbox.png | Bin 771 -> 2215 bytes data/images/ui/combobox_new.png | Bin 0 -> 9541 bytes data/images/ui/console_button.png | Bin 0 -> 7595 bytes data/images/ui/console_buttons.png | Bin 0 -> 4407 bytes data/images/ui/console_direction_button.png | Bin 0 -> 4230 bytes data/images/ui/console_flash_left.png | Bin 0 -> 2958 bytes data/images/ui/console_flash_right.png | Bin 0 -> 2900 bytes data/images/ui/console_say.png | Bin 0 -> 3276 bytes data/images/ui/console_whisper.png | Bin 0 -> 3257 bytes data/images/ui/console_yell.png | Bin 0 -> 3252 bytes data/images/ui/containerslot.png | Bin 0 -> 3905 bytes data/images/ui/divider_horizontal.png | Bin 0 -> 751 bytes data/images/ui/hide_eye.png | Bin 0 -> 3402 bytes data/images/ui/high_ping.png | Bin 0 -> 2196 bytes data/images/ui/horizontal_line_bright.png | Bin 0 -> 238 bytes data/images/ui/horizontal_line_dark.png | Bin 0 -> 217 bytes data/images/ui/lenshelp.png | Bin 0 -> 4985 bytes data/images/ui/low_ping.png | Bin 0 -> 2172 bytes data/images/ui/medium_ping.png | Bin 0 -> 2174 bytes data/images/ui/miniwindow_buttons.png | Bin 1427 -> 19774 bytes data/images/ui/newcheckbox.png | Bin 0 -> 2190 bytes data/images/ui/outfits/checkbox_round.png | Bin 0 -> 12156 bytes data/images/ui/outfits/floor.png | Bin 0 -> 1512 bytes data/images/ui/outfits/minipanel.png | Bin 0 -> 19137 bytes data/images/ui/outfits/rotate_button.png | Bin 0 -> 1981 bytes data/images/ui/regular_direction_button.png | Bin 0 -> 3482 bytes data/images/ui/scrollbar.png | Bin 1228 -> 6494 bytes data/images/ui/scrollbar_new_horizontal.png | Bin 0 -> 4588 bytes data/images/ui/scrollbar_new_vertical.png | Bin 0 -> 4675 bytes data/images/ui/tabbutton_new_shadowed.png | Bin 0 -> 6861 bytes data/images/ui/textedit.png | Bin 206 -> 2199 bytes data/images/ui/top_bar_login.png | Bin 0 -> 8317 bytes data/images/ui/topstats_button_panel.png | Bin 0 -> 3762 bytes data/images/ui/vertical_line_bright.png | Bin 0 -> 258 bytes data/images/ui/vertical_line_dark.png | Bin 0 -> 251 bytes data/images/ui/widget_border.png | Bin 0 -> 4839 bytes data/images/ui/window_new.png | Bin 0 -> 44684 bytes data/setup.otml | 2 +- data/styles/10-buttons.otui | 106 +- data/styles/10-checkboxes.otui | 20 +- data/styles/10-comboboxes.otui | 66 + data/styles/10-items.otui | 169 ++ data/styles/10-panels.otui | 168 ++ data/styles/10-scrollbars.otui | 80 + data/styles/10-textedits.otui | 88 +- data/styles/20-popupmenus.otui | 41 +- data/styles/20-tabbars.otui | 116 ++ data/styles/20-topmenu.otui | 36 +- data/styles/30-calendar.otui | 261 +++ data/styles/30-messageboxes.otui | 75 +- data/styles/30-minimap.otui | 2 + data/styles/30-miniwindow.otui | 121 +- data/styles/30-statsbar.otui | 543 +++++ data/styles/40-outfitwindow.otui | 800 ++++++++ init.lua | 18 +- mods/client_mods/mods.otmod | 1 + mods/game_bot/bot.lua | 12 +- .../vBot_4.8/cavebot/minimap.lua | 2 +- .../vBot_4.8/vBot/analyzer.lua | 2 +- .../vBot_4.8/vBot/quiver_label.lua | 2 +- mods/game_bot/functions/server.lua | 13 +- modules/client/client.otmod | 2 +- modules/client_background/background.otui | 15 +- modules/client_bottommenu/bottommenu.lua | 501 +++++ modules/client_bottommenu/bottommenu.otmod | 9 + modules/client_bottommenu/bottommenu.otui | 193 ++ modules/client_bottommenu/calendar.otui | 135 ++ .../images/boost_monster1.png | Bin 0 -> 4329 bytes .../images/boost_monster2.png | Bin 0 -> 4664 bytes .../client_bottommenu/images/randomhint.png | Bin 0 -> 2140 bytes modules/client_entergame/characterlist.lua | 23 + modules/client_entergame/entergame.lua | 1170 ++++++----- modules/client_entergame/entergame.otui | 128 +- modules/client_options/audio.otui | 48 +- modules/client_options/console.otui | 173 +- modules/client_options/control.otui | 124 +- modules/client_options/data_options.lua | 174 +- modules/client_options/general.otui | 236 +-- modules/client_options/graphics.otui | 337 ++-- modules/client_options/options.lua | 58 +- modules/client_options/options.otui | 105 +- modules/client_serverlist/serverlist.lua | 14 +- modules/client_terminal/terminal.lua | 2 +- modules/client_topmenu/pingFps.otui | 46 + modules/client_topmenu/topmenu.lua | 346 +++- modules/client_topmenu/topmenu.otui | 154 +- modules/corelib/http.lua | 4 +- modules/corelib/string.lua | 16 + modules/corelib/ui/tooltip.lua | 183 +- modules/corelib/ui/uicalendar.lua | 114 ++ modules/corelib/ui/uilabel.lua | 14 + modules/corelib/ui/uimessagebox.lua | 87 +- modules/corelib/ui/uiminiwindow.lua | 75 +- modules/corelib/ui/uiminiwindowcontainer.lua | 349 ++-- modules/corelib/ui/uimovabletabbar.lua | 37 +- modules/corelib/ui/uipopupmenu.lua | 2 +- modules/corelib/ui/uiscrollbar.lua | 16 + modules/corelib/ui/uistatsbar.lua | 158 ++ modules/corelib/util.lua | 4 + modules/game_actionbar/game_actionbar.lua | 108 +- modules/game_actionbar/game_actionbar.otui | 91 +- .../game_attachedeffects/attachedeffects.lua | 30 + modules/game_battle/battle.lua | 39 +- modules/game_battle/battle.otui | 1 + .../game_combatcontrols/combatcontrols.lua | 324 --- .../game_combatcontrols/combatcontrols.otmod | 9 - .../game_combatcontrols/combatcontrols.otui | 94 - modules/game_console/console.lua | 95 +- modules/game_console/console.otui | 247 ++- modules/game_containers/container.otui | 3 +- modules/game_containers/containers.lua | 2 +- modules/game_cooldown/cooldown.lua | 56 +- modules/game_cooldown/cooldown.otui | 44 +- modules/game_features/features.lua | 2 + .../game_healthcircle/game_healthcircle.lua | 41 +- .../option_healthcircle.otui | 218 +- modules/game_healthinfo/healthinfo.lua | 303 --- modules/game_healthinfo/healthinfo.otmod | 9 - modules/game_healthinfo/healthinfo.otui | 93 - modules/game_hotkeys/hotkeys_manager.lua | 14 +- modules/game_interface/gameinterface.lua | 248 ++- modules/game_interface/gameinterface.otui | 130 +- modules/game_interface/interface.otmod | 10 +- modules/game_interface/widgets/statsbar.lua | 557 +++++ modules/game_interface/widgets/uigamemap.lua | 8 +- modules/game_interface/widgets/uiitem.lua | 3 + modules/game_inventory/inventory.lua | 154 -- modules/game_inventory/inventory.otmod | 9 - modules/game_inventory/inventory.otui | 148 -- .../game_mainpanel/mainhealthmanapanel.otui | 104 + .../game_mainpanel/maininventorypanel.otui | 497 +++++ modules/game_mainpanel/mainmappanel.otui | 252 +++ modules/game_mainpanel/mainoptionspanel.otui | 119 ++ modules/game_mainpanel/mainpanel.lua | 819 ++++++++ modules/game_mainpanel/mainpanel.otmod | 9 + modules/game_minimap/flagwindow.otui | 188 -- modules/game_minimap/minimap.lua | 153 -- modules/game_minimap/minimap.otmod | 9 - modules/game_minimap/minimap.otui | 29 - modules/game_outfit/outfit.lua | 1789 ++++++++++++++--- modules/game_outfit/outfit.otmod | 8 +- modules/game_outfit/outfitwindow.otui | 194 +- .../serverSIDE/if c++ (protocol)/not yet.txt | 8 + .../serverSIDE/if lua (opcode)/not yet.txt | 0 modules/game_prey/prey.lua | 16 +- modules/game_questlog/questlog.lua | 6 +- modules/game_shaders/shaders.lua | 1 + modules/game_shop/serverSIDE/shopSERVER.lua | 1 + modules/game_shop/shop.lua | 677 +++++++ modules/game_shop/shop.otmod | 10 + modules/game_shop/shop.otui | 246 +++ modules/game_shop/transfer.otui | 80 + modules/game_skills/skills.lua | 20 +- modules/game_skills/skills.otui | 51 +- modules/game_spelllist/spelllist.lua | 4 +- modules/game_tasks/images/taskIcon.png | Bin 11199 -> 2940 bytes modules/game_tasks/tasks.otui | 4 +- modules/game_textmessage/textmessage.lua | 7 +- .../unjustifiedpoints.lua | 12 +- modules/game_viplist/viplist.lua | 12 +- modules/gamelib/const.lua | 5 +- modules/gamelib/controller.lua | 69 +- modules/gamelib/game.lua | 2 +- modules/gamelib/player.lua | 19 + modules/startup/startup.lua | 4 +- src/client/const.h | 7 +- src/client/creature.cpp | 22 +- src/client/creature.h | 2 +- src/client/game.cpp | 8 +- src/client/game.h | 6 +- src/client/luafunctions.cpp | 4 + src/client/luavaluecasts_client.cpp | 11 + src/client/outfit.cpp | 5 + src/client/outfit.h | 18 +- src/client/protocolgameparse.cpp | 278 +-- src/client/protocolgamesend.cpp | 6 + src/client/uicreature.cpp | 6 +- src/client/uicreature.h | 23 + src/framework/core/config.h | 1 - src/framework/luaengine/luainterface.cpp | 11 + src/framework/luaengine/luainterface.h | 2 + src/framework/luafunctions.cpp | 1 + src/framework/ui/uiwidget.cpp | 12 +- src/framework/ui/uiwidget.h | 2 + tools/api/status.php | 154 ++ 319 files changed, 12942 insertions(+), 3954 deletions(-) create mode 100644 data/fonts/verdana-11px-monochrome-underline.otfont create mode 100644 data/fonts/verdana-11px-monochrome_underline_cp1252.png create mode 100644 data/images/automap/automap_buttons.png create mode 100644 data/images/automap/automap_indicator_maplayers.png create mode 100644 data/images/automap/automap_indicator_slider_left.png create mode 100644 data/images/automap/automap_phantom.png create mode 100644 data/images/automap/automap_rose.png create mode 100644 data/images/automap/timedisplay_scroll.png create mode 100644 data/images/bars/horizontal_experience_progressbar_tiny.png create mode 100644 data/images/bars/horizontal_health_progressbar_grey_large.png create mode 100644 data/images/bars/horizontal_health_progressbar_large_10.png create mode 100644 data/images/bars/horizontal_health_progressbar_large_100.png create mode 100644 data/images/bars/horizontal_health_progressbar_large_30.png create mode 100644 data/images/bars/horizontal_health_progressbar_large_4.png create mode 100644 data/images/bars/horizontal_health_progressbar_large_60.png create mode 100644 data/images/bars/horizontal_health_progressbar_large_95.png create mode 100644 data/images/bars/horizontal_health_progressbar_small_10.png create mode 100644 data/images/bars/horizontal_health_progressbar_small_100.png create mode 100644 data/images/bars/horizontal_health_progressbar_small_30.png create mode 100644 data/images/bars/horizontal_health_progressbar_small_4.png create mode 100644 data/images/bars/horizontal_health_progressbar_small_60.png create mode 100644 data/images/bars/horizontal_health_progressbar_small_95.png create mode 100644 data/images/bars/horizontal_mana_progressbar_large.png create mode 100644 data/images/bars/horizontal_mana_progressbar_small.png create mode 100644 data/images/bars/horizontal_skill_progressbar_tiny.png create mode 100644 data/images/bars/marker_left.png create mode 100644 data/images/bars/marker_right.png create mode 100644 data/images/bars/marker_top.png create mode 100644 data/images/game/entergame/dailyreward_deactivated.png create mode 100644 data/images/healthmana/hitpoints_bar_filled.png create mode 100644 data/images/healthmana/hitpoints_manapoints_bar_border.png create mode 100644 data/images/healthmana/hitpoints_symbol.png create mode 100644 data/images/healthmana/mana_bar_filled.png create mode 100644 data/images/healthmana/mana_symbol.png create mode 100644 data/images/icons/icon_axe.png create mode 100644 data/images/icons/icon_club.png create mode 100644 data/images/icons/icon_controls.png create mode 100644 data/images/icons/icon_discord.png create mode 100644 data/images/icons/icon_distance.png create mode 100644 data/images/icons/icon_experience.png create mode 100644 data/images/icons/icon_fishing.png create mode 100644 data/images/icons/icon_fist.png create mode 100644 data/images/icons/icon_graphics.png create mode 100644 data/images/icons/icon_health.png create mode 100644 data/images/icons/icon_help.png create mode 100644 data/images/icons/icon_interface.png create mode 100644 data/images/icons/icon_magic.png create mode 100644 data/images/icons/icon_misc.png create mode 100644 data/images/icons/icon_options.png create mode 100644 data/images/icons/icon_players.png create mode 100644 data/images/icons/icon_seasonalevent.png create mode 100644 data/images/icons/icon_shielding.png create mode 100644 data/images/icons/icon_sound.png create mode 100644 data/images/icons/icon_streamers.png create mode 100644 data/images/icons/icon_sword.png create mode 100644 data/images/icons/icon_viewers.png create mode 100644 data/images/icons/icon_youtube.png create mode 100644 data/images/icons/icons-skills.png create mode 100644 data/images/icons/show_gui_help_grey.png create mode 100644 data/images/inventory/button-expert-small-disabled.png create mode 100644 data/images/inventory/button_blessings_gold.png create mode 100644 data/images/inventory/button_blessings_green.png create mode 100644 data/images/inventory/button_blessings_grey.png create mode 100644 data/images/inventory/buttons_general.png create mode 100644 data/images/inventory/containerslot.png create mode 100644 data/images/inventory/containerslot_goldenborder.png create mode 100644 data/images/inventory/inventory_back.png create mode 100644 data/images/inventory/inventory_feet.png create mode 100644 data/images/inventory/inventory_finger.png create mode 100644 data/images/inventory/inventory_head.png create mode 100644 data/images/inventory/inventory_hip.png create mode 100644 data/images/inventory/inventory_left_hand.png create mode 100644 data/images/inventory/inventory_legs.png create mode 100644 data/images/inventory/inventory_neck.png create mode 100644 data/images/inventory/inventory_right_hand.png create mode 100644 data/images/inventory/inventory_torso.png create mode 100644 data/images/inventory/max_button_small.png create mode 100644 data/images/inventory/min_button_small.png create mode 100644 data/images/options/analyzers.png create mode 100644 data/images/options/blue_large.png create mode 100644 data/images/options/bot.png create mode 100644 data/images/options/button_battlelist.png create mode 100644 data/images/options/button_empty.png create mode 100644 data/images/options/button_enlarge.png create mode 100644 data/images/options/button_frags.png create mode 100644 data/images/options/button_logout.png create mode 100644 data/images/options/button_options.png create mode 100644 data/images/options/button_prey.png create mode 100644 data/images/options/button_preydialog.png create mode 100644 data/images/options/button_questlog.png create mode 100644 data/images/options/button_shrink.png create mode 100644 data/images/options/button_skills.png create mode 100644 data/images/options/button_spells.png create mode 100644 data/images/options/button_vip.png create mode 100644 data/images/options/cooldowns.png create mode 100644 data/images/options/green_large.png create mode 100644 data/images/options/hotkeys.png create mode 100644 data/images/options/idk1.png create mode 100644 data/images/options/idk2.png create mode 100644 data/images/options/store_large.png create mode 100644 data/images/options/terminal.png create mode 100644 data/images/options/yellow_large.png create mode 100644 data/images/topbuttons/button_mute_pressed.png create mode 100644 data/images/topbuttons/button_mute_up.png create mode 100644 data/images/topbuttons/button_options.png create mode 100644 data/images/ui/1pixel_down_frame.png create mode 100644 data/images/ui/2pixel_up_frame_borderimage.png create mode 100644 data/images/ui/2pixel_up_frame_borderimage_dark.png create mode 100644 data/images/ui/2pixel_up_frame_borderimage_dark_reversed.png create mode 100644 data/images/ui/3pixel_frame_borderimage.png create mode 100644 data/images/ui/actionbar_locked.png create mode 100644 data/images/ui/actionbar_unlocked.png create mode 100644 data/images/ui/background.png create mode 100644 data/images/ui/background_dark.png create mode 100644 data/images/ui/blank.png create mode 100644 data/images/ui/combobox_new.png create mode 100644 data/images/ui/console_button.png create mode 100644 data/images/ui/console_buttons.png create mode 100644 data/images/ui/console_direction_button.png create mode 100644 data/images/ui/console_flash_left.png create mode 100644 data/images/ui/console_flash_right.png create mode 100644 data/images/ui/console_say.png create mode 100644 data/images/ui/console_whisper.png create mode 100644 data/images/ui/console_yell.png create mode 100644 data/images/ui/containerslot.png create mode 100644 data/images/ui/divider_horizontal.png create mode 100644 data/images/ui/hide_eye.png create mode 100644 data/images/ui/high_ping.png create mode 100644 data/images/ui/horizontal_line_bright.png create mode 100644 data/images/ui/horizontal_line_dark.png create mode 100644 data/images/ui/lenshelp.png create mode 100644 data/images/ui/low_ping.png create mode 100644 data/images/ui/medium_ping.png create mode 100644 data/images/ui/newcheckbox.png create mode 100644 data/images/ui/outfits/checkbox_round.png create mode 100644 data/images/ui/outfits/floor.png create mode 100644 data/images/ui/outfits/minipanel.png create mode 100644 data/images/ui/outfits/rotate_button.png create mode 100644 data/images/ui/regular_direction_button.png create mode 100644 data/images/ui/scrollbar_new_horizontal.png create mode 100644 data/images/ui/scrollbar_new_vertical.png create mode 100644 data/images/ui/tabbutton_new_shadowed.png create mode 100644 data/images/ui/top_bar_login.png create mode 100644 data/images/ui/topstats_button_panel.png create mode 100644 data/images/ui/vertical_line_bright.png create mode 100644 data/images/ui/vertical_line_dark.png create mode 100644 data/images/ui/widget_border.png create mode 100644 data/images/ui/window_new.png create mode 100644 data/styles/30-calendar.otui create mode 100644 data/styles/30-statsbar.otui create mode 100644 data/styles/40-outfitwindow.otui create mode 100644 modules/client_bottommenu/bottommenu.lua create mode 100644 modules/client_bottommenu/bottommenu.otmod create mode 100644 modules/client_bottommenu/bottommenu.otui create mode 100644 modules/client_bottommenu/calendar.otui create mode 100644 modules/client_bottommenu/images/boost_monster1.png create mode 100644 modules/client_bottommenu/images/boost_monster2.png create mode 100644 modules/client_bottommenu/images/randomhint.png create mode 100644 modules/client_topmenu/pingFps.otui create mode 100644 modules/corelib/ui/uicalendar.lua create mode 100644 modules/corelib/ui/uistatsbar.lua delete mode 100644 modules/game_combatcontrols/combatcontrols.lua delete mode 100644 modules/game_combatcontrols/combatcontrols.otmod delete mode 100644 modules/game_combatcontrols/combatcontrols.otui delete mode 100644 modules/game_healthinfo/healthinfo.lua delete mode 100644 modules/game_healthinfo/healthinfo.otmod delete mode 100644 modules/game_healthinfo/healthinfo.otui create mode 100644 modules/game_interface/widgets/statsbar.lua delete mode 100644 modules/game_inventory/inventory.lua delete mode 100644 modules/game_inventory/inventory.otmod delete mode 100644 modules/game_inventory/inventory.otui create mode 100644 modules/game_mainpanel/mainhealthmanapanel.otui create mode 100644 modules/game_mainpanel/maininventorypanel.otui create mode 100644 modules/game_mainpanel/mainmappanel.otui create mode 100644 modules/game_mainpanel/mainoptionspanel.otui create mode 100644 modules/game_mainpanel/mainpanel.lua create mode 100644 modules/game_mainpanel/mainpanel.otmod delete mode 100644 modules/game_minimap/flagwindow.otui delete mode 100644 modules/game_minimap/minimap.lua delete mode 100644 modules/game_minimap/minimap.otmod delete mode 100644 modules/game_minimap/minimap.otui create mode 100644 modules/game_outfit/serverSIDE/if c++ (protocol)/not yet.txt create mode 100644 modules/game_outfit/serverSIDE/if lua (opcode)/not yet.txt create mode 100644 modules/game_shop/serverSIDE/shopSERVER.lua create mode 100644 modules/game_shop/shop.lua create mode 100644 modules/game_shop/shop.otmod create mode 100644 modules/game_shop/shop.otui create mode 100644 modules/game_shop/transfer.otui create mode 100644 tools/api/status.php diff --git a/data/fonts/verdana-11px-monochrome-underline.otfont b/data/fonts/verdana-11px-monochrome-underline.otfont new file mode 100644 index 0000000000..56ba417242 --- /dev/null +++ b/data/fonts/verdana-11px-monochrome-underline.otfont @@ -0,0 +1,7 @@ +Font + name: verdana-11px-monochrome-underline + texture: verdana-11px-monochrome_underline_cp1252 + height: 14 + glyph-size: 16 16 + space-width: 3 + spacing: -1 0 \ No newline at end of file diff --git a/data/fonts/verdana-11px-monochrome_underline_cp1252.png b/data/fonts/verdana-11px-monochrome_underline_cp1252.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4cb0858cd6b15211bc34da185b87098bcf1073 GIT binary patch literal 6254 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 AiU0rr literal 0 HcmV?d00001 diff --git a/data/images/automap/automap_buttons.png b/data/images/automap/automap_buttons.png new file mode 100644 index 0000000000000000000000000000000000000000..0bdd0f2955a75aee9b2d29333e93c46881dfa208 GIT binary patch literal 4697 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 E0V>4t=>Px# literal 0 HcmV?d00001 diff --git a/data/images/automap/automap_indicator_maplayers.png b/data/images/automap/automap_indicator_maplayers.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbac4f15a044a34f39387152df63e41020dbb2d GIT binary patch literal 3667 zcmY*cc|25mA3kHOBV>u}H_39d^jd1{t_Z~-WY?5RmMkNTebPHugWM$h7}Fv`gREm| zCMnCrRMaShv5b8Q*{Ao^=eE3moOAv;=lp)pdA`qbaP|mG0hkmF0004NEA!Lfbp$+) z^Kye{Y!TmG01%Y2Hvh{B{c*k^>Z+54coGHZ$(589hIS|zTvN2#^MsH0-i>61>uEHZ z7g)W6a^@itR{`PuTyEy}uSae;*gwPGP*Et^&v`*x+U<|Mt>Q-lTc;Y*S9csL@=CK^ zh6FfoFZAsuCAPcNd#`Q2YpI`YnNivE1>F^CjIrL;#4$P5?$XtbF|Q6Sy7i!(|2{Pp zmcqBDmk^E8wP|ho`Z?u=$$wSM^{9wQp6Q!-nHnRB*?F7~ zMJ4;tz%>P3p3A>ULY8}J_?mKC$ zn^LW~@&2r8Pk5Nz*;X{_rBtQuqI4XvHV_UWdNIlXD~}c#Op9Lt(BWNYKRfbl{meGd zST9;T)_->$I1>F*8Ys6BO<#H8(ddsKI2-yt8knh@-~YOBLd``|PnCMxr`?QM$|yOY zK)iZ&)>ZjJP|u~ah&-i<=;isH`I;zgNQ3|DF(7sJu+04CqdRl*@oyTAvUcAL$4`{i z0%~@7ZJiq#m-J{BA}&fCrLrYT5JyfYY)PINL6w70VnTBxX`!w}50?}Xp22+trXre= zt9$8?#%}dChZF`HR?)lzev(X_Bj=Q=d8cFmwSmCc24 zdXa){b2gY2Qs6jgxhq=~MDIifBmP#J*jjEs#?t;|`<7Io!dQ_Pf-KDqM?)%C+D~f< zvhBt+(%37@ViD6WKsh>2$`^&tsvgW8=`uI1g}zfnx~n4YWC+{uyLZMwzg63Us;!Fv zr$kJH#9DKokxbQoj|pm5MJ&w7A)`Wr4j8XJlOVK~O@+Gmpsv9!Fa$FjzBACeh4@+_ zA|hW9ka;EAbu(?>xv+#U+`!R_9nV=}b3>h11@K3}nhS)SpcFR_okIHw0S^VF0qXHy z7Dpv}zzOh{US;%ZfeZJfWN@gdZyG6*+}EnjIq#&ALYE7*< zjaNmSFm=9BYCW2(fV@aCp<$I7joa^jf-FppqK0Aib(66h;{)3U*X=dlmzaZQjEi&# z=#h!$0oLg`Jk*z&_rAo2O+C(>VXH~VflPK*-M-Z@qg$H7t0L>A?LJpM|EizLR?pW_ zW%z}sQwp}`p(nhrP7bht_ywN zNxXxv;tu@uC`srKeWky~NnB)w$SZQnU$j4KLsVR|OT+h)Jn@bOllryyaogJ~VX*+t zh$MXWvtexUhR77Q9E37_N3m3sv7JJJ&i%hAKA|u<^lPW`41PyD0f!xR^feX za)eDYrDd}>vNj;SE4(p^*dN*KVyH-n96zS@MfPn#do*i%pp*X-1Ua-FR=MIwwkK-| z+s~Wo^5vXKwwk!`Q;Q!r%cVS55Jok9+WURWAwy{t{89-ED3fA|Gc&3)jIh3}YJXHR zV1!lC^AYG@y&YtXaaT9bF?@0yKj~C$9gt275*@8sYI1hxalRQaR8{8M`MyH1V+bCR zB}BYJHwIqC&1nGKHu0jE@_nZOS9o+tCV_4>`T#gp5JyFN>XL<2WY^GWL%<^cD5}!b z=W!qUD~u~6Pr1@#CM#V@2>1t=Bt($QrY$t62)jyR@l1t^dz|bM9*B_ zk_ciRr_EvPMDs!7pXTo#EZGRZ?(s#3+G%jB9M%O}S@q-Wjml5uGjLjFC zDKnkDoDlP(^)ZMoQ-~3Xf!Fx<5&4+VE!~tIrp?WiNBJYcbSrV8bWKA3C6;#TFWO+> z1IoX{dl7;g%JYBZd!)w|+9*qx%AL_Or4@LC@ItK*8h#@V74idKzxo+?a)mOAu|`Sp ztQ~V>F6wQ!4ZBQCr>RFqllg;0<>%H{_@St3ZoX$y9;|kfQs`$M}na2G6ujwnQ&{Y-BGFhM&tLthkfTlOaat^YE!C zVbz48T#L|$-Ujb&;ob&H6vfm1HXhP-O}a72n>rIHb-#Vc4|MAzj!{KL99mq01jA zDw0lwv)t^bFFPevrRR88X74bclXi>U*H2xBgW-ox~)=zpO#+;JvAYdkN2S%64bRs9Cd z^P)((ufWtK=#fd{5?jFenHvYUV1mhmwNW)4UMuS<_jis44m=J=k~^6C`n9jNnp-i0 z8w1-Lz*cw=7qvw*j+Z*e6U2dh^HH5iORCRy!foE+P*Yt4)2>4N5E$h;JNnDl6D19v z`sN>wymEJ(RCrOspP}Yb+rTcc@PeQ3(gt>N3SaiD)6AZ`^n1m zv)_=B{6n=kO3j>XVRSLb!7JYSH4XNsjIM{ilzKgnW)=s4r0LP3_(EIn+kyW7mSypS zGSPh9B}h#OiXqGMmESaDiUL%2cY5{KOH2#h1(VRUDeGQ@&4Bybp4Ja78H!>>bRE&uTxlEb|6+WxSxHUHmB zUBSv~^r1&y)%Xds(XBcOp58QqJ`8i8EGc$j+|P3*#b+gYkS(Thv)#1AW{W z$Pkb7IMr@@!dep^|U4V0hO4+FP;74?fbyLGsz6oYY^js#=t zszLlF?J8)IJ*a)p$XNL2H++OvgWfTxA02Gtgv5=(wb=Bs1>+r2K;pf=$2cj;TqD1F zHU<=&8%d$zsI3&otrj0U)1axfY}~r6XdXX=?xDmPV;Nl4J=$DwWGo{X;fFtsX^$;B z5UP6*A7?r}^>l$LNx|Q{K8J!?`rX8Hh#-q*_r-i~h%F***}8PQSYFKTbnbW~VIVc2 zw{MuR+LH~$rspP{Xm|U!T=sTd(4#q@_^p?eu$j_c#2@CrGt;F;mj@X55fQ|LXEM$z;AVw~_h2NH1fj&Krof{UL5zkJW}d9wIaZ21-Mafj{Au>jE_qJPmu$uS zp40Er(v~i8re1Ni1QoUk*2o12rAmJw34c#MEWb*u17|B`V)(`ZMIQhM39WrxznbO&8wwD;Zi{+wIEUiK?i2~0Zi&c?e_ nVc9#wCs}W=PWl>J#{Zc?L`3O5i=B)Y(0B$$VJURMT z#R0kY`5#{@YG^&{{cZIw>$&k)e6Oxu^~T&E$LE;GFInD?%pTv}wR^F5V(7}D$zLvB ztBM{i8tXXv!O+AYQqi#U%j&s>lCjy~^t|KzjZu5uhwaw-{^=U<#NN_xXD*KyQ}=!I z-ia409vB<%_`zAxxoP~Z8#SR)Z3$`r`ueVl9b?yYu5LebX05ivvZeNgfwAp}%fIhi z2w(gN^j)5R(!2iP{l^YmqNnQi>}#*Q`dwGmg#~LrRhMwrPHp}4uy9neH zttFc_a#ela^hw+3v(-<%`D^4W_0jSLek3eTyVcW{HK$unZGY|eN1Dn$%L%4X%5Tq zvT$v_CNMMuF$Op+YiMsUg!&W>piY|$7bu4Zbu%`~)~M)5Zypm1~mb+48e%?`NY(?VkmlC zxlJ8~&xLAK)~5m9P_(e3B=Sau@+_zwR*g1plVnjz=^M-_xedV28-T;?q@Bho3b!+1 zJI&G#)&cFKS(3~`gRl=o-r$!7dsx!>AFv`y(cu-LqQFKKEy+Wbq$D2$geu1}(SkuX zAnOJ%3n1XGwvwkaM^L17aVvr;t+9$_CO}5$H`EeEd#Lf`1U7xObj{L#$6pC|Xbv zp~|$`znMN_+aw*DHJtk+dce-yDj}hn)?s~0PdOk077s) zcNV5AQ6t4`z#D@quGmh*?UL8|p%qfUD^u@~`mN1(FRABb72>=c18`Ilm{|;A4wbAa z#Q*)ue7j`;<>7FunajdBg%5>+3}i^H!EyU%`pQi>svi#cz2TB$!p)_nW~+HrTGt^6 WS!}gTy)!SG!#vQ^;h)^x|MI^M@o!WB literal 0 HcmV?d00001 diff --git a/data/images/automap/automap_rose.png b/data/images/automap/automap_rose.png new file mode 100644 index 0000000000000000000000000000000000000000..6c9d50e2cae2b2a7b665f80ab56fd45ce0623e7c GIT binary patch literal 6631 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 UNYK0j?|%eq3tMxRsYlHJ0N^_$t^fc4 literal 0 HcmV?d00001 diff --git a/data/images/automap/timedisplay_scroll.png b/data/images/automap/timedisplay_scroll.png new file mode 100644 index 0000000000000000000000000000000000000000..57e948a2c72d27ee7c886eb488a0f420c3ce4e0b GIT binary patch literal 3719 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 literal 0 HcmV?d00001 diff --git a/data/images/background.png b/data/images/background.png index 9fbac5b1830bed83bb4d2878862b3b0a81cf4d3a..0fead08ca16fa12a58030ea8d76cd610985df785 100644 GIT binary patch literal 895567 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

+cx%h? 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≷m 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

Lv3 zC*zR1FzrDDxbmvPQ7qx_0yVL`z1V;Ka#s-idT}ii?Y8l3KzL$e4gq@#VSiEBrk%4s ze{lmS7oZ2S7zi#czSw#p0JgDIjzX8r4jB|eEz~9DRSm&Z!6&}>HHQug;G}O5ZHI0H z8G|E~yuDU_R&z7ve9@vN9Y@_j)qcM|$;ROI&}LE#fHkGTuSx56@Q&GYPzN_cjvV{i z3>Fk$Uw+nYq>BqoL;vyL%lGGQ2y55%f?tGM!Rn9YV;COMl?{I+n)izSQ1tw&MFjIF z%B>_0=o^BIT$T&GvCw%D=qA&aR7hWreBSrQN>+|rG8)Vs`XfZ}*N=e+_Uq7B|Niyr zKMU#S*74PHGt19%iD+1Zjc7UW&RF#3wC5(WJWa%=4Uabp%YaO^iq-YlKs3T9`n%iP z+wH-psjW(NZH>7})%Xma<8e<;pM}AZlp=VUmFTGl52x4;?d((pFD>=N<@<;i>Nj6% z)p+Wp(KyL+K`B&+9qA)KI2WJ=%4_MX{Wb@`DGdz&=GLU?Xj?WjWQPpyMiF3y2p`%&Oa`9OXalarGn z4qI8dcFz;*uZz;Ppmtp&=!2rWqi;B`f`N(x;;GR1cEDhRaP31)uv@Pigm2d6FLYZN zD-3?Lye-mrz0Suqh^daCM^V9v**5cs?&2_(=wD)3WH2N!`@v72c1(C)xhXQZAZPt5 zfmfOVgYmw)CG^C-dC|lawVuZbqrvf9b?1=!x2ci8%}^7#=*FUpz9yDWTFng-!Jd!k z>fxu$PuIJcjV^cybYK^_;Ps66<+?lMBjGQmpZm2JjB0d0RB%`OYS3`Q^5@(Nju?tuzUnhuV$)XY0vEOg@%BwLd;QRvF3sF2a_DTr6|59GUUhgmFGtnMMZX);_j-=0_AWcOI{AMYG z3+6xJAiTz#G(%KXnI}bb(f(jZdvkmVw0$FVge^2FX;Z`5)zCDSwt}@ktn$}w1s4Jp zoN-lOAdhwDsKy*cW9|}@^OK0ucfc8O=%JP!)WdMk8gfHgS^|tk7>bT)xKZ4U#7C67 zwCM25&`|<;;is`U+Q7OYoQZKDOV16svW;SSCY6cKMKkmrgY%f}Ov{g9wbXPGNyQBf zd1&nHphv8ko5hd{b}TN*&DQSuxhPf)SJf})H+9HE-6gY!b)U_~0u-3J8 zDwxp?jq653lO-~lVeJOzdM1X;s}8}cg4fqA9@xsxwv4o{GMF4zpJ?ZgWg%UIBvAz8T2%1m+1c6Y>Cwf}(Z$)<_wV1Iecp#jIir#G;aAS6;6*cs zww`b}EXft3EiXxrK;a63-*70JA{bCEau(WjaA`HjNy6wu8Y9tJ{NZu6CoAtjFt+~U z@${?XL>qsE5?~ZkK)sm8Q{L{ihe0pZa3^}yc?7G0ymKto4NzNe4!B?KETubsS zI0+vB!B~>3rlKN)hX#7(&tUuZ_DlD-ebvQE1qjaPDh7 z%6Dngk9{x-n+#6ygQ-p&lYnq%r((Eu^s07;w6(wA9Bvbt8+4fyn|JW*Qy6~LobO(8 zD@zER*bF+tLg8)BM?>urwW5aKp+Szshk9M}h+59Y=$; zqvN0B%U)Sju$Of;=oMqHyONuolj>^lU{OB1;9-xbqt9b^w_0tMsBnw^ES7_DGpIn@ zk-} z8-rb7;cx0nNdntFv!~Sk;H`#hj6()r`}D=FT!7%yqoZF=Pfst7L=3#~k4>ZN;&Ct7A$Um${Ns<9iJp2035=ew@MrQt$0#Pa-u?M!{bUW# zU%c2B=*?ltNje)X{ADj#fD7Zd;Jl_7@95X3c@YwdBPY17<2d>T&qrSJrU443c|=#(GF1Bc7?SL{5DUfdhuY6D@j&3= zjnl(7$RA$E`_1}IfZ_GGLSfO!z>~07wJ#W)(|bbT*}mDq*}!4v=~p;2hYOk=;06M*?sIxkzHE7ZO~kKUMM22X+P$TM5MP(S z=YZeg!JL*OhbKv4%qGc;jlEW*m*T9MvY>?VlT{lHVz}98x8_kGgc@m9G2>gTmWvd@ zS+lly1x)a&3f4k2lQ~ocyE^npz#c0&=WSAI&Pv+?2l})|^0Qf8SU6@`9R%yR=3qHB z%$oElDa<4>Z5)qz3}XuNcTmE2T|h@tQJi$ftceLb8_*vk#4p}kNTyO@n;u&*P?W9! zb7g%{MO)R-L+}Qj(oIN13@z>L%K?@)G}R{EGzRZ?I<3QYt8;veP-)hog}{qt>fl_+ zVCTvTCM&a?2x~&lHM!)9GFW79b7k)sA3d+9u`0>0U3w|u2rc30oj4Vt9b4f7w zGuQ^h5W|Gd^l3C%Unw?`rLN&Jk9Z19N+!@^>!EU)(3t z$bSwrqcTX-)DJNXH(^i+@-&Nd(*niW-B!N#?7fWVYhQ1)&xfoAjEWUXD-*af2ZsqZv%s^@CCQMm>xM@Se z6vA^*i_B zD2QWnjVXw^_o3zjA<;rU*x2B@2i=ok;@H0Dg(1PO{HM^m07sqg+{tKB`u6SrQ*8d$ zT+&wo(KZ$Q)IF+<3&z&Vklixj!yL+F9(=utF*>(F^fQ3*XP=atMPAdU)yfupt2uUe#)}VYktofA$rS4W1S+IgYg_TkkqzS4Q&tMGdUeFQ?xDuetq`(?dx}ceSh)-ygc2k$gTG0K?d`kbM2RUa6Jj_dHu~a7S7;+ileM>&rnZnZ_?X z>O-j@fERIC5&Z1IcfuPjLd$_5_=nMC5{2vSFJE?$9QYWL5DSJ0UvpxGo~-XK{{XSe z+r`Ul0?Q$^@MX}Kera+UJ>rYrpA}u06k4M*kNYQ?GX49MNGJ6#)8iE5(uJ#@%vYm; zRw7#hm2kMGHsdE7Xd>(0B`Z?e}ry+B{y0Bi23Rf-n za9~Djv~jIND~shl@px`Hr~traA+Wz3I{fzEZ@5Dta2yOCO#~3OWfE99Y_MJFnRja? zDu#jCZhrK}?`MWfy+f-*J2fm2KGq!R1=uOfb9< z6aMl6%3Xr|9RPtDvNeM`bjcZ_0p4LyH#LrpaS+5Qn4w24ssoXg!$j}|E74dR+mJsg zG=yi>oRw7^V^(nq2-apW30%L`s4v&+%YU4|w+0FPYE9U?regTj+IlrB&%P<}RsgJ$ zYS=KG%W+U?)2hRZp%7+fE^E+4aTePJ$>E|BSUy^9fWr5H;dWCk)S_+!`ka{&jnzW% zys#NubVh0QVqxnpQl>_XzLt+g?-Thu;>J5f;OO6=Dn8W?UL?=whh&p_IyC~kGyD`apD5U%wqwQ|%KO)GT3 z-A!`y2v&%oyv)dqY->F`QW{H)XP1_^rSxucLKwWfp1wAkO6ngAR=eO-GdL5{G2DSe3l%1rvS$FI@`d? zV-%zTWV!L}>zA(!)SMh1%2=>-q%i$kG3+I=b7grWF#;t8#nix8FA%-4OsIr2(aN-i zLLTU>tm6296lOp(`^Jp<(6CExLmXmS2S&AYsRM72$(gVyUHi5GK8X0W?1NXsk)-}& zbS86KUfiQ%q)99jvl9rjOG67k3Q2t6)bKy?IF1ew+_8<4^l5~{r~dBLzqPedtK|kS zvGW^`i}<~^(a9ZqfXRmU2L!rB2__acGP>REiwJ=&L!yO&q zY6=+;ra!uBt>9k2M=M*vu3!-X#c$0I?;|j4zXJvzx7&i`HdZ-61;>3T2i;h3M8oeL zyE?EiFksza?t!{Q1}92`rIPCg`-H3nSGA({TuSLRRZ5LvA}Nuu_~+qL3Vy7tRiXi4 znkz6Efyy%*!_!%t1V(Ia1D{YwEgGKa`uchY@>gEKU&>&>_|@)uBda>9Qk$&QaurHp zf$${53WsyUD4;qSut@QX>0ng_#c~#dl0_?u!=BQWk9Lb}5JL*DqaGc$g$n|D?&%W| ztl^YZ%}!=LdXvc}*`@rLn@Nf~vc^$~o*Gve zr=~(NjF}}}N1gJ!m&UO6LBAG8t)zOjG=_-ub>E%UXL*M|);e@LHKH@jj>40a!i2Bf zCJn`m<<>#$Ma*C?QjV>zuB-yXZO~U&2{CF~PW&*>bhyW6FoD5laM{UVYzt1|{0S#f z@;|X$tv2^e1w#j`3`P%U1j^mkabnk0YA{D%dR1irpPpEx8_PTQe#- zCG1+k>;{v)JJDFIt-g(gZb;bp>mw=+z_@83*6!JBjmLWX=FR7mlNT>OJU{vP@%e|B zpFaO>*8!L+xYfC*Dp*H>TdhzAxB3F2+o1}s8iaj12OQ>V|A!%~%JtQXX6=`3Iy!KS1po5OPq(J0HGz^L96EyJ zE|FGn+LSRn!6-o|T{4#4{g19|e`+Glq6Ac2pe7FjBr%3ZucHL$YLbBtAr8!vYydNm zLMe(+BVnvjhjH9?Yi5mGT3h?;{?+@PbMM#PLG6URfMMj3lXLF5=cvJ7S~p>@T28J= zY*nG{BvAmY%L}!OSLUer%cW8evPwToKAd&V&ibC=FMwcxEL_mzygfUvNUTHQaW!U{ zt5JL$mxnb&D{NL;`ZgR6FGX|W*oDSO33MfvsP0Zl^PpwN#9+*Hg%*b{tFVEIIJ~DQ zd_gX(^I9v%C9s^AwUY6qp!{EXeg4R1?kQXBHn+^NT?! zL<5OQYU#~t4w2z{M2CZ55fD5vOWjuzBkZhVWHag$Gi~fKLntIy)XJ zS?X%N5=$L;6H83+W928}u^cpHCH|5~j7{;BFemU}da~$^t`dV4fN!f7oiYea?YT-R zx|++$U|6QXpuk$xKmd+IFfQbk_=a{NVGi8Fv5RBVoaYSz-h2$%`Sg2%U+`aZ`;@nK z+dUWFE6E++sz~C4iqS-23Y!YR>WZd4)PbyQXfe!TkfJ?FuZL#^tp&tnuhHrfgjt)X z<}CA>7zEd(Pnb=*jX_gJ!FCADZ62?fc4Ja>IvGpDPzEZBv@26vccY!0lQA$y!8sA4 z=RztBj1{2GNw1P@EHOe$+ojmNr0k$%SCno%^ByF)*Pb_jZsNvT z*to%h-~U1BnM+BZgc1Kq{`+^0(2`MbfuWQuk1XuUSeR@V_?vuW4OuH$ON6Z%ix;54 z8Sy$;UAiP@ehAU#{HT!3<-VC#2sRj8NNzuV+;XN-vzjlt0n5eA=cfa%AU!iQ*Z}d9 zCqHm2X>xL8e7dw!3Xm_o>|VWlS8MDU1b*#rxBGq8iS&EDLegP&OtaQ$wMJBewg5bI zLpFxxkz24%jRLAMFa{yE>q?O$dTFT9A?g#h!5uP89TSW~&k@X6vx2-!34z^&&WwkM za73}~Mw5ZzJ;C9pT78Idxa4GvQjca}3BH1q8qUi8^b+LhrJL~^7hj8szR=y{=$&JH z3tt<2@kk8c8jU3Butp;CXYB!qu`_%Ktc_9O56Xi-C<^Z%TND4pbh$FY$RpITB2nw32*6e80@qKeOqk-Vj%KH`~U~u-EFnzH#dRBt7`;c zp}=p*fq8ZM=H&a`R?or67mR=~T;X#%sW5g#$%J#MTzbp8qCE+6=0cKJZg4#kG#Eye zGUsKW!2;4u)oK|Awz|5@#3ERu$#47!1F% z-4b@?b~4#+XC-_iXFbtYVg?f~sVA$Hv3hi_WN}!>!c4q0IEl0lz5+6@fta3^)T9m} z8;r~fVkud!E-hhT%-V=(79354aZ%K3glLH%y@O=XiV$0KK`z{^TO1}31D{SL$)bD4 z=_Sybrf3-mZ$-yWfFGY>!JOw!&CtV0nPk>;9zyiT9 z-`Y?t>1Q~yiZskvNAV+O$ckH{>4z2`tRr7hqMQ8o!~b6f?$*L&Xq!$cztEltKAzLt zz)MYe@w<)O@PcC?_|LT{p%U@XSV6Lm==V`5$EE!UjDibX3buY|_7e&%2G(M0-L4`* zsg@bBM401NAoJji#+)a!()dLzPnHye@0s7^=>UlwkkauSvM|3n-^)k`O+HhSk#H#k z2*xz{l_A2fo;`iYXpYIrTeEZb%pZUw03IA4JIAkIy?(V*DD?WBnrEJ$+kJC7H(2Z+ zUp2P3$%3gglK|@--nunzujDbBrFr+3j)h}e!(WK$2%*^evZjO*E97D)m`b!PEb(E5 zVquSQ9z2xGK{~uAq!^vVkfE2Ns)>rsWJjBuPED#wAH3|;nrsW8C?P+LpI59hn zz)_WyMd2U61iqhf;&|iJ#RbzlNakV8A{5gm9cRFyIBmfgf8zC>2h~Mlr@*klah|1q zRp2gZFfR?G^+|=B!iDWh5_Rbv9R)7}No#$+r(%IvxiC??Ik2f(HEA*I^gRQ?cf}4p z_>3m^Yv-{TF4(%d{c|6DJAW4iNq1Rp%xDg{u@dGOdpI^W^*7MqF>`M*v3?t-EVAH5 z#o$FnU@#9AqA~uhQjN}~Qj$*zKNd&BmXcbT5ZSO!t+lZwLa!q2v5i6NgQ>wEWhKz685BuzH|Wzm1T%CvI@$8 zVH&mV+6J{~NB5QJfo_AR;6*{V)oDw-rRNQ5q`@_nq7jN|*MchuaPqb&<%V`Fa?Nz; ziLxugZdPE}O)s}M6nV*mb91E#f-_=_R#TSH27H`q&Nj?LdYCxMmCwX~Bu5`tmL9E8 zCk&U8ToPl~-Z#&N(91LFs8P`kN5Vv5P~xIU)8dl$wXL~Q_f-(BH!B3ccG!BC0FS_U>+PGn`6>IFpg)FBO`?5ky{gU_p-@la_F*Se!sItR0UiVvPr{C zoa%#~`9>iAsMA~g_I0yd9#MehV$!%Jz*L`QBPlX#2}7RcgJ8#2k{;10%cUFjg)v)} zynkvbhF3&F2*gvC@Ftk`9CuBtMy+5sv^XSc^d7I!Nqj*Jo{IH85q}K|OCvJA7^Ugi zQIVymMn5OR7JDzESPq!6ZjOS(*A@03^W#^k@GvAljK7FL$sxNPFy-DePz;;&)z!f- z`}+jk5BoX_R`|6PnPm9RZA3%oXC_3I&QI8aKm=k0Dn|P{8kS|@=D_-+Rfn!(GMldk zYLE^&as`q!bm@w9b=5S?Lk!X9eSaG5N`&Cv4g8I@4J!;c&yUWJWc_JE5I7nJhofMW zPZ$U`7`(WCd)-2CmB#3(rvX=(^Hx)`m6U=Eoyt^MnpB<3O@oDTF&G(@uISJP?Ha^h zdjbnSZ}Gf)ZeVU>1LkJ~d81=i<&##sZ1|X#A_+aH_||4C z#%P1Ucd)9QO1WM`Xsi#F*<0q=7aNkx#9F1n<;I3V;gCJRwAE{fG~UHqtA+JgUp-hg z%F+F%ZE5f-bYc;L0}H_t&LI=la2BiikU~Ta5SLrdT+G;<$*KB`0;P;#u&yWBqGd5m z6O?mUPs*|Gk-=L+V~N9a(Ry(}dbBtc z#&%JpNblioU|<%8U313EBc@A3xMj3NT|UZODiijJ!l1x{#1+40%}1SD#DcG{YmIKF z2?^Rj@W*RkxSmHoUgQrP5bQ@fv{2kb?j(^3OEH6lMjsr;EYYYcWNokjudXL41O5=7 z42N>`4Ho>7rmQy~Po+HhH$d>OFR@rzM2U7%-&&zji+yH@R^4r@5ga=G5V~ zW6~vIwtu|8x2Qrm7R~91?#KkLP7dcFhvh$wvH+fn4Seq7q1)py1M`9#D=e{ps|5Y^ z_v#V~o13*KVbZ8b*J>D4f+#+LL(3@M&jSqpAQ0v&=C9gNcwr2k;Bo5VG-!(O;>u0tp<883;c@Ir`Gw$O3&?SH+U$ zVmYXR4SqTJi>V~@x(o-K+er_hSxkwRbx4W6Yz|exxH-~-^btnyw}1Xw`oM<2=H~uG zgW%ho06vr=^c$yvSLnwAg74+wb~Z;M$!sc93j+-n!eFpBc@^92;_J%Q_3Sz(fqfi` zs#!TM0n3=xF#I)F3Syn91fP8r$8QtEYR+Oox?>?+g$gdM%lH#8yv`PC5D!D5)s98# zN|0nc?iM&q6?YyM)eh}tEQojSb08 z+~DrvHu`Uv4VHUhKB>1U+Y8wj<_q)5j0SF(9fKJT1;(KcZ4k^I5$DZ{L9nlWtV*$7 zuNVNw=PRY%^R`fx`c{*nxiPrG8@wUOS(d-7L^oVc^yA@>=*GE==5PRR52|1kqD2VH zu3!|R&;ABi@%yvaXa72TdG=0XISz%sD=i%g4*S4*Iq!Ex_Y)Yu+|{P;YF5|PhE$?4 z9$Z(`e_j27)&7a3)q)HK(|72LANrmz;goY($;NuoXNV?&|9tO6Fze6{1i>%Z3x4rE zTEViRP(9G0^Geov(WbS$oa`S-LOP|Cpw$))N3>1`vsc2;HkA}30}46m8NYQTg=F*g z5+(?jrqV_Nr_*=RKbeEBmk1I;u%`s>c3(|IN4U3eB6s;(1_b7oC8cn__Q&aI_q5$Q z==hIDww@O8Q0F@3QuJBZ;Cn=cuezb5eIhs|@;IfnX|#d0E-kAaQg|nWEK>?U@gVJm zQ%hmBHs@NWZrC;z&LqVoy|NF*u>rif()RF@LDr&`W>_+8baW(UW3%|KEuNbwhjZLe z%nLii!x-MY5MRlEFqBL!AJ}4P+zL+s03ZNKL_t)>$X7M+{{u1pN7-43@GRRGuAS7d znd63?CQ?yxPmajl}{s#*c?1JX%_gwpca@ZgpnTXguqd!s}zB zW0F+Ki0D{^;FVhR;w8AUu3WmpPB219`bF@J02qEO1Kzc1jwN~05}qW5*$c)3htQ9O zX0UK~=ZF**1C~KAwJ@Zxc|Jlo1`5$c@EbK@J%3*rCi5I z4!76VZ8S$oj9*oQU`j@MvM4NF&(&6z5GG~7_w9lL9H7{4mMWM|+uYb~3sx1wyBdyVcQnXMlFH!6RwzGK5Ia+rYX%Ql zv-&tZAcA?d0RH&#AAh}l``e#1Hobj|p78G&3)Vt(*adDq9AGe)Q4CB556Iv;N586a zt%utfayg@5Crend25soEAR0C^n^dnCBL>9lLgLTBGW=&acqXcG$YqU&@18VEX ziJXNnw5YhHqkIIA#fyvmQ_TGr)XQ_j__dK-n1IUVLI(HMo+JMQ$Pt-c+Or|jdm)Nz zTs3S!Tmywq)MVNC{52AzFY5RE5t7>!{AVN&?;$cW&T=g)N@m{u(DWj$CqB!VB9duNNqbs$()2tZk1zgIN`#(DFqBuNW|QIKYQR`Z|(AdO)Z4Q}&V zFSiYWccu9$GWeY3=Ys?Dtp@wb=goO(1^c3c*Uy{v()7GJVcvkf*+^Mc!3`UV)vyD> zSXqeTbmPPpq0t9!*hRsQwG^#+90SV=B_{g(q6iiUe{>Z7`0?Fu0y3-%K70B4^d@Hv6t*V3(=tp7Dv{vz%Ny>g|8LC;>Nm3(ApRdn~%ky=;d&Euv)T~7$eQ!xL}D3 zgDHar#Tk*mYOGFD1#<&f(kP4~&dRraY#YbBr_7%#dclD39g-O9<$}E}CGe|fThWOe zbE2bTvq@;+!rWYeN|-UY8(+SBIeqre|Mb?6PftI6>UQ@xkB`?DpSr7WG2;0{-?=6VP6ILiB9jtYwxFUB`U6{NX6U9J$5WR6tW0FKD& zU+c~4>$P4Q2&2A;VqK}^rf&sc#IX4gRwrSrlrVTgmJ_Q@8m-|dO4AhKTqNOyI%y3+ z=N5Bc84TY0Q5ZZil+4kG-pBZdy>!$UI2X24t|8$ zBpDE<5o^KOp%+2|LtUaFjCQM}bf6GDYa}psC9T=Rf1Dxgq@54`?hw7^7AW49s|7J3 zj9N6h!9eeGiQ@Q$4dGuv_jY2T^#Q<>ulGxWEX$%YRRCjh1!w1_2B0UWuVoVn6&rFS4Ew8dt z>#DYHQ$m=GHAVWe1q;{}whNN_oKOMmp?FMgW@I8MNg{h1lO+~u(Zm_s95!rC0>N{6 z`mEzzLIVN^jKYlT-2mcQj*Lm)%@fZxH`c`MM6i_3>BvgpeFn9GusEOso_An2ADc&% zWyNlG!1HFMR0&Aqo^qH!Bie`1Cg$94xo-Cdlf&#F7!V`nx!v3?mv{Aqs)@q0;V#CS z$_&VAw(HX+)S)qs4HI7TyxA<>+6Qs_6tJ4DWG?uR-G)vhA+E#fUwHxl7Rep@8dB`;j!@Eru2a~ z_l*n|6+Coz%m7KOEk81$V4UacNBU`7qCB0ys0=7Go2w4%v z35Ir%xQW}|&{9y%TfrcgDxn;WF{Qh9a>-hyRnfx!1i6Tnz-pGZe&~cw0S7c8%gEsX zZ-%h{Xe;2wP22qt$2YDO?4dJPJpjPiiD>Xvzyxz4IE28;otgGRWa8}J*rQ3oT}L>NpAyYoqQ%9*nM9S#jk_y(>5#twD~-isNO;k&L3p1$lo zPzyV91&=DXoftM0vlV>V!FI$;Z-tT|xZLrDYBgK+8S^qQ%?t!566T}|I6(prgy_eD z9V8<5iMnCoPl7jXrLuJDOF#lW5KVLOgr3JXjO1gEYUI>3<)f* z=qIg*N@8}1S1E&y5T4pqCze21JkctHpB_vZ1g{lQhn$|5h^D40VSTSESLZbNKb;Jx zlhHKOyM)3;qiSbSo3opY4ThCe_L9C_U=(2wR;#`C@7G_DuY>R=8cSqVl_sKH7la3 zm?Sj{I5k|P430YytxNMU@u-|R)|5<+QW3*4om9b{iHjPJ`vNL`QI$?fJHzRSmH7CG z;Y7rsCHJR24nq2lX9Sk|V(OZXh zgR=bH;9datsNkv3N538&z5e*-=bu0P_WLg%59A;Owll&0kzl(giD8`E-!y{j_K%?r z7cE39g1MKoyyAvadTy+$XyCGS_)A$9b!dd*s2l4ARB+F(Le3@qN&o}FuY3?T-+hKP zNe02g?nc5%cQDwOiZ$*oY>>#xxLx68vpFWQENPNe=W(x(Oay0C2gi<2-~Q44U-yr< z@17&v(mbR{H&#q3Offtb+usL*H*Xa%8!Uck)S-*{wxRAs`$ssUQz<7^%%@6kyI0wf zi;MqU7#QPl^=`8;^264-xq9m_uEf19Ymsg-)h3y50a-l#ks{+boZz?Ib16#3<#sMiaIr#!a2rQ(iK(k z3v~Fi% zT7#B5{){1|b*lOKlaqNuSTL*<$($7KVZa!AAUYC}}21 z7&9e0#+Gn0Ed@=G#Bo>)>yiOTj7_PF_<-t|PaR{JTiH=7Ez!5?iYXliosj(fA;@WED@ndFU z(S(vwEgY2|aFiV83D&HPJz0OWJPb%h@7ZYJVv*~ZA!AvM77E9qhwaS_KQ-Yg#Y=4) z%Sh*tWs2OZSc*qn;zk@v>L|H&>9l^(aG-=)l{OcSwg5_^h^w|sT%9I_QG>2wbV-`S zICN?&Rw^@adWR{~>-w3hDRWI0!8?Z-OPUMI(n!Hf9Tu&oC2+%(_;we%#pw5kHx#15-))z`uZ~{7K6>`-&C3tJ|Mua{$1{zP z)=u!Q6~Q|_cB~yMgWq4PMDv4)o6XUz={5#h-lkcEktrl8Oqc7n6P%Y`u#CQ!s|?4o zt>B5-JcfcF<$>TS8A*C^9l=be{H!wAg80+Xr&m&kj&t&8a?-6rk4rR%Rl(z0s}{oQ zP_V0nse=)k1%sA5&?G%!8xA*f`tHBoZugJ#ckfP*9TGeh9RYx2T8pL>9^BvD+~3Et zLdf7kkiirKaYNj89##jjeh>dOkAn8hdG~y*Vi0_B+U4PVZ*Sm-k!-^t_^v;RBgkB6 zZfg*`v+^~V@bH@O+|r_kgQ|ipj}x?V!8OhJNir@c14o6Nx5got(3vD_$Wl-X0z=v{ z-MR_EHy(1|FW2`Cg?(}xHR-qJNDy<>Vr71v`F9NxxM4xuz_9_F zbnG4|j05Nk3zRvI7&(j~ThYTZvSjcUi;e0KlSkndw-IbDS_@VV!_+j!gn1YZniqx&iy+E!U)|61Ppx>M)wXRD%g-@{=k(1y0MlEeFZ~dnN12Y z{d(CbUhHZ>BN*w>0$@?WQG8WPv`z*yp7MS&0%BlfDJq3%J+29VS&ud%_@Q=&TTi4C z-Fjk9i>opijIpG%GcHCl3WDTCNVNIFl?{t)YZI7ImG|yC8N4p<+jZ;aVOzK)yLiG$ zR|lJq2=qY}UH%G$C+aw&MlFJPt&Zj}-nck3+=ehVQn(HV%Ncu;F3Z3#yTj(Cl)2pi z%!%HAa@RjUf7@J00+kH)RT z>2O&RN6FwO=X5P{sc4nJ7z;jU`*)qqU`^@}ZLF3oiKyIYxZxZe6aL1KFK$FjJ^!kDff7{qYg%(dN&P8Vy}_&nu9@ z6*Bm$d%84;x9Q{Ox7?ZEyY6lz3B|(D5oeFQ;b0rz!M-nd3ZrElye(5obWtJvjH=tu!!w%8pK=PLI-md z&R?`WRSO5azVNa6rTY8&?EKPmmZdjNPM&i^m=(hf>ftXwHO&9{7yA2*e}+OVKNr-lURCVX9yU@zAlE>SbHK(nbciWzR4v zysf@0BZe%@V9^k$%u&#hnEe4`?D-W zXGH@O!j!@20f#Aq!-l}XF#vr3ezC+REPIi{1NCE}08KNN4kfL&9!eYd2|)}o3?8E$ z{8Xi{dHeeVYmL(X*B~>uaOy~GNU045;)|v(d)N3s(<)}zm)>f&D zc!i==#g%1kg3%nr;9X9F*WMcv{Nb^W{?X}lezXk_&Sku3;|jq~9T6UGt!G(Nct5-S@!d8XgZoSPqdrc> zVzVz^&cEDf(2#|ctYIJ0owaMU6&fexHABn5@8DJkj#DkD*nVe4bEbJ&)IIiKvX zJ!$98aONNs?+6HUhj{0gk=0>Ji)0Ik{pN{Q|b z3GyPo153cPC65jdXx5rJkej@X!OZkn^jR?Qx9UJxd|dDYB3Zg_YY)rNqbqhv_{b7s zY%!hholgyqAn@57a0moj{1x~$95`ZtH}Z%O4S)v^jyUv{ zE2%Jpu$YzwAsTzZUZ!YXiA!Ewg=pUr&GV56&=!Wtgd598%7a0KkLLIH-`HfzgZ$cl zJ}(iK*bK&W7~veb!ph2ucE<#SXue)yiBev`utr1>UQLU4+s;Fi+*%ffz*$)l!!lA~ zy;Nw?s$hwj>NGAK3ZEN%ubh_w!xh#xR8$XK0Ybq6-6aNVBhpx0Oj2Wv$%@I=PmJ*$ zOB=ZfRxZ%6EU8vWw~ypG{Pl>yp3aHYC9QBwU=|jfqW4W^?}TCVG@v;JQcV7hT}mDt zjmhE?KkLY(hKk1h1P{p861=5)bhjYn7pgOac9E#ntCf~#0nr|z7)Gt`YGGBx>1tp& z?1bmKgdRVam8C;z$wk$}o&-f36h0IknweS3f}71cC&4g9*9C&Ftpe?4!LBcfG0~gE zUfY?pB^a#lBBNj*!JQ@RHURr9I3Pve*nlho@WsLD>7_y7_xaBk2f_0}uPM5BCwQ+H zgAE8b9SFM_aNXLWMMZdy9~`?1H}WqV6`cfE#2c-4=oOs;g9Wc>TQIZPi!>^wGILAs z&+?MY;p@qY&Hk; z+x%V!+xk_Ss2Uaw3jFTl$4CP4 z-h@w=&3{s|>$a2J)Hrc#vzT-jQ{m}o){4>0h!*>kMp8xFo4ftRoo^=0=hsz}Z?>jy$GnGc&b8fG~@L5f=SG zglLX~(^v{72iDqPX$&42N#>3-2uqCPRXw+ovFRKQ8&J6+NzsD8h6#%ly(}b{1L67o zi-R|6$=YAb&*y~zlLxPHEomu(nd2g=104WMdZeuDvcDXG&Sj)iu8JNlL>K@}cktvS zxTq#*BA)|HSj|{!%c^K-2iP#{mW~Yq8vqu5LiBGm8f0ZU3bq+jP<>-AZ7OCPlf(|K zRZ2?@Z{jJw6pVT&CUr=g6a`v^=H#TaPuaw1XUSrzFwhu!e@r&81%iv2j3vRTTmg?^ z)&fL&aY12^r3`WTk@zIrldUOnagz{_d0rqdOCGSoVO1z_S}AdX!0b`8Hl&yZ45CQ` zh?#~}RSd2Q4nL>2h>y#XE3KyBL+a6o0>SczA;mY>H)sv6yWDT;(AS?7K*?uqQ(<67 zc#AZ6%PP^}zgneqsQZSShns;Zuq-A8Y*~AOe5~tVY4DAf79N}$68z!pG=FjM`NEuW zdjl3sCXB|y{oOlbIs9NsXNi_|VCzh)*rQBY5!Tr+er_v``B%+gK(r=fDGwF~Y*0#hs)#XOCW_W@n`z>GxS%jKs7o>1T*p1a@k5 z%)xFBGU*i)SD4r?2o=CE9HV1=f$P&`rYW?-#XNG-Z(u`yVG_7mlkZttw!6#@tj-PO980 z{zGus9vg^u%#x>DARI`{nx^5K)-08#p-l7i|HC>W%7ZNvCe~v;snel5OUbao;!q+H z+JQ~WP~zvXCmIkgTNpO42G^e)9mZt%t)au!!GQ(t{@f!MUH}S@%Cwj$Jibs$-=e_w zP7!udL$b_mRsL~d94r``wfQeSQ66=I@%fQDq_66GyXVdB!0-rL7clFM+9A6+7{eU^ zHwz1v^+N-KqmkNRq&8EN9bl-@gF=939tZ$GAQdj9N3eOzt)$W<^Rdi1o|&5~Q26B3 zReO2S8Ek2=6g6x}Q1p?#yjteXGRDEefZ>GR&(F{M!(iDL-fuLD5TYfMplrEsv#udQ zwnu>|Y+l2#sf2D?MI4g9q}25CkG_B)14FJL))8^th0x17L#Z`Hqk}001BWNkleh3z!xoIcc1@S`P=;KwQR)+0%X zb_h!n>_)+ojCB^61+SU!?!}9L_yY8-e~zX2Hd``dypQ=@I5y^TEQ!Kh@o(us*txrA zH7E;&`hmgS>u+t=55D`@1_<*N)7r2Efkz)s8KwmUMosW~YkS+!;PCk9ST0qF83fKe zUOrnB44yMIIF-WuuGRtqfB*iywch$-AQ&&e3w?eXWjJ9+z0zK&7^=Bg3E!OMml`H~ z>Z^LSyj!qv$m@-a!MvCG-H+aG5D72&c_W z+75)xm0sHtXs`z~C~z-W;;~i)gJlp=@H#LE-n6jmKM*y#%>u)>b}v|-w9xASc+;*X z9rmmy?fs9ftA9#*Poo9J^_m+2ib|FV7ZqRF5({)O5WSi&q$4U<8@JjSC&z6Xbob8M zjKAb;yEFH%-sha>`Fy@#*$@E%Un=8#&w0*sj`HAhWOe+Ysp0MQ`JPZ+LEzVG?+<4_ zqc!RCmoIt&9s0A|4Bm5%47*`E>`Cyiz+QU~RplNsOz`jm6_H zfN(CS;WBFeKc*pieX3kQM?+3W!6#Z69ArRKi2gfBu+yQvCz{z<8TC3_Rg!wH0K3ng zn4&ys;2XE#j<`|XxGQaNVbQ{cr!|^Vv3JttO5<7iv$Kn@-_8Vr#|4AWPXDbC>@uQ< zQ|62A#p^rl(91%zwwAY+@7zfb43s(rWWRMXnZp@*<(OUil{7e$$rbTM2*CfnX|*o* zFIsX(@8#v4VB3hcDpQgp#8<`GU?It|U}d$Q@CJ71w2|J3g=X19X;rZWt|KTZng~H~ zy6Jlx{3?>8zRFdDqXEPpKkfuWWCnkj*$QA?b4oC1 z^NRYof&(CNHM8eB} zW5dJnWtF;6xa<_^vPWUwU*d0Lsbl1L(R;T-*W4CfMKo6BISYWtUPM)N2L1}z%JE5G z7P7MduG}HFvKRq3xE`EsG(dv$j~Weu;27Aipf692e2g4;q-0c>%|uDqqf1;!8XW3i zDWJ%7h@df8SA##O{n;_LdfVVvDX^Q+qFG^E6>6cv$sx+WkZtT=3$wgW-Pa&O~CMXNOQ?zCy`cEIP3 zbQFk9p|%mRZK5SK)pA6cF=haAvP8?8hhf;XC{U9WvvuGKvC`XIM!F`_wJRHj!EMwQ zGOGjsqWBltCJX-RwC64wycvvxH(8Oiaq4tva^cOk17OF69Rc3F1;V=l5jHn;oAP&1 z(}1eNgS`_Wl_w`BpFax=RwFc6u>2OYQ23fj(Qj{=vCeHd$>(v{n?f)u8!0@8R_)v{ zm@+h2Fs8rN)!;DDrJ<`KS})5vz_HaNjUJbC8S2o;#(J+T_ry0ciQOk%129FD3Ke!|0=JKl8pNSXZPjaItv$L;f1%qGaGKHzpSI0?t zwH*Tn3j|;8xAvp+LV|B@G@ufL-873AOi`xz9C0FYM7tS0*S#0%+6GSF9tNlHMO=`F zac9?fC|?%+ML@>1)&+-+%zd}Yk+QDqFzY**0y?av4-SNzp&>9xb)+j~n(IlBqIcAn zwIcA^x=ob{qWKog)5Kw1ywfM+B+qY}gqn4g6O5N`0D$v8VY=q{aCTxGhAcZ1h1H|= z;5JE*>h7>NMrQ*MCJZ-QH9=va!i~GwrA3G`ro(b44kmb%u(D`vo`m5L87CX?O@nO!uV(mM(Y%tn6AoNfVc>@tTb4! zSAoXISKE6Zt`<_gjM{jiwkt5;iHW`jff#QX07tX>L6%e)F*hb}l8Y|68c;G^{;CqvhH1|Tz~l8Z?P zYg$$K`e3$RUz#;IK0uM-Ypf+%XD|U6vTzkISQIH&Exg&-Fh3?o7KRL*bgC52y(SCZqY@po z5{5}I2H@L5frEXdT??kH_-HJaG{BU#syGZM$_kwL)Oj=-i@%BRLnDWkygYIn_lsStg8}pt+k^QVS7eYAsEQnqVZVYS3VMW zwLO8<*+gj=rSVD4TkxF^b7JMf50w657(Bt;4z)_FINiNC>~v_wU%4Y1Ql{n0*LVbw zzT0TVvN6tv<&UvL6kZ`+U(~_m#&%mpX)Ft}9e9q3gE?u3Z%Vpph^iPA?Ou1dp%;1|%LiMvsfUsBO91-9{|tn!Xh>hxfLD_W zh|(2Wvjmjp%4JKuQ0*7^`*`s2V~@hgks`UJM<(6m~RxSE?6-kNu!Ur$b zqh#R5>SvmToxmcU5baoSfurEuVCv6F!+|9s__-#G zXuvgpQlhVRKjC%Q4U4-^MH>v$`^=@_Bz{z)aLFZ78y*vpHDOw4hLLFpx+561Cr4an z7R2a|GGqf{%?({}F0BPEXs9hPtP&S1b5?@8GPfuIhkWRY5>cwsyJ&F`7zFjJu6{5Q z?3LuuMA+>I`z7HwS{F?A+dkKZ;NZF5jJ4^nLnwR>B^q(jWWsN{r@>!-``h=wt|*xPS1TdmR4f} zhk1rQOG^vT(V%WD0i@j-lHikDI`o=4qJMK6Ns7MjO^AMd`0RpNCYis}P#e4w1 zP@q#Ob4B+FNfrp+-yffdj01xQh6gThu8M`YKydt-Krj&a)#y|P8%nS0>mATwlHje@ zWvgeP=aLZor?7^cwzO#Pp|YNaVA`wqnq+;?&x8XrbUGc3f&-F#&&$>P`ij8mNTh3> z_paYUa!tcDCg0Aew8xshSJ;+(L$FEO^yZqj8{)7_uoq#zvJ zX)vq>hL)hIS6M~jn#1B4X)vT`0UA_EngT61#$nFtGH6AW_C^(hqe_Dv6~+ViV=-OW z+Nm}2O`5ahd$i;y-r-NR!*{CESaEDSHVh_g_6|L5Y*gf+KOd8mkm;Cw$DUv|{0q7QG&gI^nso-qiixu`$ixXgK601TQz5 z!h4%MPecWW1%|UiiK7&v4R7rRK{%i97#u4TE(M}=LWjW&iB9BlRl#73s4TlQNX@6L zJO33DDe1!s6zTfW5>hIGx@)LrKrH2wkYYkG{8%%b3cn@Hdb2I07)aL zZ1}~bmu8|>I{(Rgsel<2AT#9%6Ad%;6~Gik^oDphJ$ceL*5+GyBy2-Cua=gZeCYrqJ= zw(6y5Lth8N1rnsfk6;*lShtoCA)V0s+L^Mbe zmXIdEu-fi)>M-iCu-nxcerTO>I^$ox_ndq0_r0Jm@DgGw6w%K+_nvz$@;oe>!!gWP zGO5zXlCFB9Py6q!8>|R^Zx9~H@$t=t0QiR@;QN|&=pHAN-uAQ=?Awysy|^Vy7Ze(T zpX}*eRtUzjv7~6;U1L~jKEy)iYE2{AYFEN3xs}tRIV!qqq{3Z=Yi@`Jf!Fqm+>>;| zaI6<`75qQput#GVflUS9zhzXtdso@(5m{&k53Ojhs`O0Ewsps1IHD+yh}OXHP26uqqpMN2KpCbkOPv76XA*ehrXBbYIQ4u^Xx5U9g_W*~;;BPiJ|Ms` zwNQ$_Unmv|MabYaB>of%hiB*pYb#h749WbV^Wj=FaHOFdkhx>@PPuAzCCmw>bf`9u zsUjZg1CzJuP?^@gun#R6meaPHm;^Qek8)-hDp&`UMuuw7!#3!kdRs1ooy1}7(!v!- zbx^DdO0;epEuT=1d%CD6haucKwkMnZR2;*^WkMZPSI4F3$!f79Od-tX@He(P(IK4B zQgp(GgcD(kctj!02dF(SAXGWsf{^dlyZP%0+!ELGbwp^&J9T-f=AHlMbme&v58<$oB`p@1{u65UyD3i;7tka+~ujBuQzZ5hLy$*Sfq6` zAkVWpmZUk5SQNHmD}!^nAsOu385l^Z+X_ViKe_KBSi8ZtrLb3cgl4d>O)5|YKg1$4 zjs@4^hd|g93bvfaEY@LiiRI}^Ni9R7FLk^945VZ#qZnqsCI_9Ng(C_Bz*d2_I<$6M zEtF$R#C2AHo=nEJ-V?;8gIygfk~GR{rL>&Npc$b6wn-$4V9SS&)+YIGB-_o93d@o> zUX@fkv>I`&8C+VfMf}x*bdIA+IqM4q`i2iyme{^eogwLRjt**bL%T_9wmch-l$ELZ z$#3PB48e-xWH#0*PMQcdB6B`0ri2-0$&&PX*s%0?wF#&3>FG|j--HN8E4aVAyF(bC z@~TSBSp8V}c_+I6!W)yaP>t@RE6c|3v*3vKtZ1`C$5rs2m!jXt^08vG!LJ8{?Vo=8 z?c&AB38#RefG^)t4(mH=(3iLk16W6b+ozt#5f(J;X(L$2kd(kR^+VU9Z4Ddp<1By1 zyudUB>s2Qk!Ig>vxB?pUCxg)(YimbvV-dma;)@f?;FDM{n0_qLzypZj7gmP$I`npt z2==jHi>9<(%DK5A5ggjWcS3M<=nKal&Zs(`^sP(vpa1>)k9TK|nalCZf#A1wAR71> zxsre2_)yMd?q%2yo@O`rHeR&3cz~G7#nEf&n?Ud%f1J@vxOC_5g5YAYC^Go|gQ6gK zzi@aP!dDP{AQ0YU8T!L{Oa*h*0`=^ehCq)ECqQfZhIy+(pIFm3z8Vgbj!WP%ImJ5GH)jn;R9y+O_rml-OJp$Qup$?ZEEw3YDSwT@Ha?Ga&f3sNh5chG@v( zO|W(oDDKJ~9^hV{Y_TESSVSGVVYO$$F5bysITXYKVR@S>=krr}P#AlOvZ++LJW-yW zz_76Jwgd(NJY6#Z zIz-`W&Br6nmPJKeQjtt5SF%=-jQ6t6*+KH^9{_9D-X4 zvAlMDYL;EyFupUxs%}(`HZ8ouIW0UR-;mkNy=k>Q*#cmNa9C5QiIwxQx7mPW^GlcK zXBELqHiyCuId+-AkL~0bwwg4sTj3u|B}QRD6zXAV&L)h7!;|z+&w4o;li(_cC+tg4 za`o_%`pxBgJC)2*2Fv@D7oxM8s6~r(QX#y8&H|umlp2$8$NOZ?*>Cw#NOe_ z;M2>C!S=-)VerF;aABeJOcGlz2mR2O`&7aE?cUoMfK3Irox$;Ftm@D}66J5R){Ix9 zx40I`mUeCV)gTdEF$fdHJTo8~hG?{cF_ZMP9aQj%Z%W#>Wrc(P416N##3_s=4MgzW zCz)j?*&?rJCEa97!_Xi zW_?CsQKN85kC+^et`q9fwnNHccSM85*RDYle=|xcY@Zs2X!k`21V;xPSl7AQ@oV6i ziPf!cy(MC}K{b3mPw+nO)H`_kxZcsF4pnSltNO?iomqX~5l%H+-FUoO&!e&pn^y~c zSbRc|_*?G~^P-Q79;3$>{;jSg1u8dat*sd*!(Yg@-*|9b7EhSkhV! zD~zt{V2!FOmCUJ9(_SzKH@MY&bv=l)$rWB4tR&s%l(LawJIbl-ddW7xx$t%TLi)bc zF-*iaZB?=pnas2xd_JSILu{|=Y_N*p5c3ED48@sSUYWIE4z39fQ%IJ_k>X|sh3DurPs&MB4Lk(FD@4Yh@V;7O!>EKPdM$BM>f@$2$~ z>nnMsQYM4tHFKz93uLtlotmOKD^#S7$+%lzr$%O9I1CME9mRAQ+X7?cu~33W)#oo-v7Y(vq-ScxU>itIr@h`~e`hE9)n_~I#p1Y9%oM#F!a00r zaG>yeII`Xje!bWpeEjEcZ+;yNED-Bbd%)TV27h~$zzC`Q*IRc(n;klu3f>Lxp8JAH z_o|Mz3xF*oi>=@$5NvhmTFel=YJTX7U3uY>i`J~=92oqU66?@{;Jr2%6`pV?Nej*Y z*orSh%inBt98usWkB1BYD%$0hThXKc7hRCQhS zZzaoo=uZ&B&mn?em2a0Z!e2fUbiO;k&8gt&d-o`Wr#Gpqo&&*YPAgI4-ke7-cy8{8 z9|XcZWD69)Uo1jB0)mePz|YT-R(X7WaBwY-#Izcj0oO6zpOg;MNY=_7O-DxP(fCY~ z%_Di|I981ggGxSnZ0Oci!=pSr8#-(aj=I5LAn<~dII>aee>9#Li5Tvr{lc*r3w~}z zBf<+hjfTuL0VCQwK6$2n`BFi^={EUU7)NX zc;PdH7S2N8aaFV#CcSLGd{>!3GIcpW#r|#s z#;X>nE6f!JqX&$w7mHna)CHTNgIm8b`f3xZ2V zU$V9qq1gMgDiYL@wN=wX^y-Rj_DRlY`F0uqPOY$uDcDE_{%YcNc3nHpYBM$rA6ffX zl?P;5`?Qvvhr2nWNgFo8>kv*_F`5U9&;qvQwdCydJzJMRgL6>16r8kTX;@`M+~{#C zb;h!BCK#e!>DIi0uDaJi94TZiN$ZLVFGU-I>3ar!@rxEVJ&EMYB}>b)XcJzp7=|Y% z$|=r2Px7lyX)l-(IIA^jec+o7se!F1t>nd4E8@7KH(_uU9b1H6s3WVo11EHKx4Byt z1nm9E{^M%ph$Kc1>)k^eU*j%WlEZp9^ z2L9!&8B>PsUyMrFl4pcumAPy|LMB^r>5>KN(sfGrG^9= z#0j(^!(b3X1lwSX1OgI3@}+sW5$JZ;?Ko1}>C&*yx-g4IGi}UGKJ!Vk%+wT`93;hQV3hV2I z$w{sTf4;c$^y$vCFfFf&sr1+1|M<9zt%`0qR=P!j;OInna8&3=Cnr%9 z4c!_U%(9B9>_}|U8u2~gT!35^lXJtl#2i@7Te;jocVR41=hP>iOA6S4U}jAZhkQz! zHGNTX1TATW>&V&!+VKIGBK#3*?%+bdNg)IPrP4 zBPS3$Q4@DSfboTVDNI;MF>qKOS_8$8s6O|3X%l#B^|pNAY1Z5*4Gd;QFS0rqU^yW) zxKz}VgQ6ET*ff}$bEolSyQAnECcp;5%XYoo1>x=LEO^^8D#3!`jNaOIaX3ca0Sq=b zw5{!0a+Yo-*qiFQf2g;Z*B(kEyi~$OO<$0scK_kgW#ggf}ul)={*Y1k-Q}|x5VD1@)XO5NpiCj zw{IH`!||P6*K&unMMdj|63;^NAzUjT_Jtpr8eMi{R_xKL3Iw;hE!wRvS)J6gwCLj_ z`PF0i?gR(_cf${zxbEr7Q3&WzU$n+#9hvQ_*9%Z>8g$~c*c@5MWWc%@eBhp}q#XVB zS|IrO^Zl)@{a=3i2d!7cUP3W>@UypFA;R5Drej_I{Lg0tO~JV0I9RRFomht68z@QI z^F}Zv0dX3v|_HVO=w zws4O9f2}eCH&ZoSQ18@7?|3 z$H#aNSwROmg1ULUfesx-eQ41qPot;N(8w3Jyp16&6|n+I8St?Bvf`dXPpC9``9sDV zE7}9|;bG61_Oy?jPn%(ora4Q)vaGR?TJ-!!Q=vmHB{0~<j2oxOKtg?HJmc=jRv=%k{Y~G_}vqgFX5%e7JL3kdF-#(So-**mlyQLh!r|gy#vs z!^2L3ev{*%-|i$j3h+sx${`(*G)c`69!!u8ZB)bP<}twt0UWUICP+0|;hYY5XC zV8i-W;FG6A6sQueYeeFdo)$o89}^%}Svrh}!GlY!)8f^c&|$AR^s%th;5Tn3kWPJj zbaVk6cwr%`VOp(7ya*%)2Jh_fr%(qKuB$p7f$Yke4WYOO{B8HiglkTVbw&(l))k%7 zd0i8>4C#EPToJ(iW)m*VK!Yo16rxYnk|k6ZAIgPKx4SG0KHYB75e*F9+LG7KGSunE z-L3sCI;7c~wDoMc;i$WJ1Aq;L%@VEa!7NwByH(Yt;j}^UQjsl%#fo+PmJwu`pHNqs z`i}&KNro$XF~c;!HCb@Wi`l!|-;_M*;|`-Q@2H)stf`bG!(eXn6pPvEnN_PQWFrFd zDDPYWvsD%MvO*L)&9QPYYzDK2%Bqht)uI#Nicf*vg%!B57w0$vSM+Z`0K#SNCuPz> zwm37Ud{+RNSWLwk|4tz|+SoAJJ0X~h!>oCj&{U2rE?K=3M#H+rl*vCT!y|1doPXqO zcpXKujKU=HEGAi>Dx;AgA#{^wtx`8Kd| zU_oHp3HFADO~qeqB$*X!&yjc|E}Nn;A&i29A-Y;E5rHil%SOUWXB46vMYyrPE-rNd z!8!>3tMwplAq847821%;6{i1&c*^~iM=wt&a)Pao18V)C&6wlM?9Muq(-NP2fk{ft#_=Y#MZ8E}ROB zN-2V{wiKljv@=e%8UWw``3nONa1&HpGqYYe7am~5wnr?FBoasGk=H*21)2o-b2dv3 zFNWu$L0Qe4!nwgOWaw0CESGbWbd1fPBBUeY4wO!FQz>L>&5vS{Snw{wIRvd*05Q6y z1&D1neCc%9QfTqI*BbLZP3#jO9!BZW7^8Uv9=M=+Ka&tC>f-CREPAAY9RBwj}seDp&PGC?(pJCNR{d`v_MPSwUe! z?j|f+{-#$2J85jUy4uVxXV|Un#!@N6&?=kTg0}+q(;1?$7yB;3jm5QKP3K6m;Hym5 z7J}XSoFVQ`1u=Tg9?B{V<-WzFg&P~pVF(;dS;05$Dbj%nSA_-ZhHzSS=raZ2Gh9ln zc>wqt2&c<|=h6tht}r}7HyZP_(&WO_r3u3MY@C6Ax3TN(D0 z=z&RaT-TuHXnFa*eSf|G{Q2+u`*MPK{mV7smL4pCFacQI(AY@2>;i)Sy`r{g^+M|` z_|h7Zjyr=^EOsPmLY9Sc9B%3y*hz3=DR?aeV^N1T8eGzhO8GG&nB$vj(YAtH9P$nd z(XeCfb30fd_qCDW*PIx?e!ah?5Uima_d`jN#Y;~4DEPjr&V=N&O@Y&i1z~?o0ODEs z_N?|C>hHAsV(*Mc<+}@%6;AM+_Nq?$d({^ntW0>lfUTq%p}{*lLnCAGSfP||rtq%+ zE;=d9OlQk?r|y3Lmz8JT-vGcwU;XL)9q`*H{ys%Y){t%YdI0o@lH3ukV$fY+O3<1V zeTxMSA?qqke{;Fmp5-AQxm+$37V_@!h$mVi>?7yXW9P-z@^DKvX>aPC|7bswMs_S} zL{@6tqAg8&PFkbK3BuH>KS@l7J>&V@;5_Aj)}L6w0xxESv~MXH2p@*K4#fzyMDBF$ z+=jMIT}>Jy6CUPl_(oyz;8}&YD5dCzW;o@TO4R{~gC;$nlII^sTqeoleR>;P$fLr7oAPYrtN>$m*xm$-qo`&m+yo%+&?_A|0Mp-%Wh)xh<#^L4 z9qzYll&I;KrXD?!=R}xg4xqzAD2o+BaO13KA(e7x6G}9kSDhz9hFb!{EffR`4xi$t zd#c132z-iNq?HvFrngsqvyf=8;4U_U2UxK74Bqf%VfYK~3P%fbQv`y`k8ChoG_{q3 zRItVptfT}kK!IQj)~r|o#T$}g+d{IvW4R{~jPSq4la{=-c6I2~dLq=nY({7GS!tey z>Cg=3Xp}JGVooND8XSGWgr{gih8xQwqLmoWCH3kI5m^rOA}Q;w1j{z@SLtstR-z4t z8P;H9!We`rgkWK@HVO_j*lsxxwscK)F$xl21yw&w|C*IDa|%w~I-{o$xXlxdeIg9d zB^xIFUfBNPKPkTt|0m~Wdb4Z>_)?Tp<) zMl+G6FvCwfSEp=2mN1vy&6;o4}`&*5{<(1-DfZFMZTS%Ns0PRA+!T9{$Vgb zGZ)W97nYu`g1x&POX@zC%Tebiir?qf1^%nU3ln9-OuFRDPe3<3Sz7q zAr_AX!Pm^`7=gAGevOz24qVcqdi2PbFYF@YD`4cv-rgyFO=SiU>}_u|&yu;)+&u2a z9Pmqiuvv8wMkf2(nozDWHn9R#JU)K+?p+&P`uks#N%>*p#=|rrTnJ*Kt5=1S3@ltT z)6)~vqJ!aaW;RL-Ux~g8g-=D$wz|Oup9Z^?K^UMm0GG?Bl=INTEjEVxqJYaZWnngW zMQhRM3Cr;{V={QZRIo$2Jc9*=?KV?5+OOoWBp7Zoi~~jJoD;*jS89!Rh3MRlUs%{7 zijQ*p*|ZnFh0>QUZfv)TkRcSKHw!r21HySELMwm`!C67D)oI}m!fpYaQgHaj&%;iG z!r<@K8tE=7xKxq@9N}Gh{`@%;fWPB1ZrmsnP5g12XLdv#){s5{Mc4CIsaBz z3CBXd=a}_Zy37hK=8QnW2d3c|4jzy}0z$$S380nuwXk7Pa; z3($J1Rp7uH>d;wcW2MvevsFW|5txqXUBRzLMO!Y%kIoh?e_B&Rv{$i@m^%6JkuD3y zgGXl5@*LJub0R=(A~Y-<0`Q-M_OXz70eRMGHa=pRlj>TLVeaVHJpR*MA5**{gj1=R zR3(*4Jwb!yJ@Sv6fp^zVu2EONwl z5UXX20(z87hC}1KUqEm}txRKX-ICg!S%=mgh`No44dO{#Wa!$!2H?hT=7zm2bvajG z)x%eQ`@C`9cr&hP|pkV{T_wGFyUA{NGGO022?+(jg4jqko1dk0-*tGBXEhvX6 zJvI)Xcb8exfEYW)djeu$c>4{P9kR8=tKY>UXZ`_)x4~h0phR*`fWgR_p8wX&S)3G> z^F+A5Z+W5udsP?6<%n0=c2?mTIiUe)~YDY0@ZKHMOfJ*yVSABNQ-rw97@7E2ORKqNH^nl$S7vA zwpU0UEk#l|&(bJ--Zln1WsTv2e0Ra$H6R#A3=U&rNnD`>`f?8x_QR!>KtSxAwtN#Y zR&q1hY+O_@moxZDCIxPvPHG}J=>@NIK;I98nol4CH0S|`iqYXc4d%;nB(_E&VXWi9 zne0$2m`?VSbog@OFq~0;G;&})^j72qk-TX;Zd^#1UKt08LGG0BZ99F_gdR9HL?zU9dbnX{0Fa$y$W`7!lr|J zhi*HA4J92qCzi!Tzwi{UhX71xwB}X5INLwJ6#5|diH`rc4v$g-brG5}*zX~K)(UbW zg<2_I5m6oTcWz|U+I$1f@|Fgc-Ox~cAQ%gS6LHK8%WE@-^)Rt$c0W7!cpgs~fLV)9 z#ACEtCE`Bt(Me)`qw6U_GZqotCxX-IkP)jCx>IuFNX4|POKV56>mgh*mtqLheDlfn067J3Qumi>3+3??48<|u>fl!HuWY&S7ve|?BGp$CEHy}s28HWE9oa?;lz zZ2GrnyOMkr`p~Q6o;8GVkNEXUSlCPNhM!H!{`2y<1`S+0uN_}@&g4yydt_ReZ%ui0 z##pS+|9S_=9ba%00>*D^UIcqXmi20KAZ1TEMp94W?;gKrYXjwtlQHKRMF^V&QNF5bm$9SJqSO z>vMB6kMGW;guxXdDi}PNnGr_+ry@^wSE37l!CbI_SIyAp9cHC;npcDFK=8|EaQB;t zrf)6VvQx8EF~F3sFMVz}2cMck`vF1sV~o*A{q$0lHPo|qUPPl+u4qpj4O zndgAqTs$TymdE2Th)qmX6qyqUPF;v5R5`}vB;$6q8#(`MYTPr<$OLJP3TfUT;oY%I5`*3KF`pM z#Y*&?R;pF>>c&585lr?Cw$AvZj_J5Qqc^NWhsJ?}Qgor@P0?w4w=)c$E$AtOHpB6y z7A)r(8a=~l>7W#y4!&36@0zA|#G-6UM@jFfk06P2ccmLf;@7IgzV9I%^Dl;c@8HW~ zJ2)>QxZV`-w&`2C!FmR8sfw}Svo^M%T%R%GHN@VK1`cMF4g;UF56W_^h0yiSyy&@F zvi4GEQUBGaf4{$YjWq~w zFI<=PLebk}G)J#q4+TVT`mx|mok4O!nD@8;N7%Lhq_t+zD^jQJHOf)uRE>`+F;mb| zqVZCdg7K{v@D(LOOr56bB-YF&K5lE`{L-Z9zdd`cy}$1qbb1FYLamCSo^{sRYp=EB z8@jX=%!KH3++*Bmj@}>s>+MoIvmpToZv?Bp+?d z6$Xp>$u=!oT*RLod;{wW3|cL@La83c-K(orxk+c1F~U*|uCHJ^f640Rb9kZ^v{BQ* zNpLbYj}4O@N^p%6xg?xOcG#a29m`5C+QXD*da#nt-DR9t$H7TPRWh-X+0?EX zBEh|3!f@}@U)ZA+WdGp-x7X{^UC}a<2iBun#~9c?++B;4V4A&Zu_C0O%F+G<-Y6Zz z-W^k^LH3|ZYmf)cNA~R#iAQR5>@RRW0WVXHEI0fw}lc=+#DD+1kf zXc$$*Ln(X|e&~wAzw%jaWo9oVVR#SLs}?510N@r!#<~h-2;A~0e5KF4Vp$#7O{%n4 zl@CuZPJ;&%h8dD27`%abupZa9HiQQAdU~o0lBb6&bqLXiEBYROES(E05F;H+-i~z| zTqX@ZF0U+XDeB}L=57Ify)BD-Nbo_csfDd>gi75Fid5(VWN5-AtA?7UM9T%y#kR7l zW^bJg_YsW&!^I^oUFotffj4gfl=uVs%MU@b9iZV;%N2wPj|8@o#GND!^q}W?94uIy z1A_rA5abGQI|vM()s3v^j5O|IA-<606EyWr*=)fkg5H{yv9%RmiNyIu3oOaIqz}0^ zGk%KySd-RCI^0?O!C?DNGntbe4}k@aS!Acqv(t7eks5HuXrQp3z${XRmP?@|B-lgn z{rx_ZSJrhHyaRjm-Cd0Hy8CyH2PD`kfW7*>?eN$O(Yg(6<6<`qZkS(smyYNd3udIw z_Jt$Dch!S~<%7*X1%Atyo7dO%`r!ouSD@G67c7`lV0mzTSwAeJ1VP|U_~*@Mp~JKL z5Ava%8S8CHI||tnY())bD15u5IdAkhbol-)il(RyNvtchm$#{ItS#Y~BQLWY1*;QF zN5SC1a<*mTgKt8_P+@gEfAR69rs4)^sjj_wV5PTmYo0)kt@Y5~Gmt<_aL z8Wf&8`69dU+idxmBv{V%bu~%ePS5v#H~jta?FS*)066rbu=7n}NSq|yO~#WpbXPdk zfUHD^7t5D8gppdE@Rlo$o@Q?YAUB~&S%SgIMB_OKcZ zqg64V?IgiDyD7jnnnNFwpp`1odRZ)LZUp3Y4ut3B2!H^OzSQ(w3G!YHc6H&&tiwWl z<>*3$22hQsF+JsMcu0;MZ-&W(jS6@AogL3rA69@Z;Gpe4)TYB&j!Z*CfgE9r@r~dJ zhFu_~16*4NHa9dt*^PryB%HSGEv;@STHvLb z$~k`L50$pzux>EX01cRcc(ADB;6h1&w<8MHsUW-i7V*({+qgFF42JI- z(MGTbXUB56eYESEku;0a9MPsidxg5u@VOnkwzK~LgWZZSPKtAaz++pNn{l%$iU0s0 z07*naRI~41zrMUwvU~4Ha9vGU7l#)J8R41c@%7Ek=MR{!GK?9$yqlH`-7pYtL|aL& zqmaMy+znoLE5W*x#7%b(!ODtJ7fb@oIdIkn4S1EbCusyLNzH1VESMzN?fo*DgH%}H z7OYsC3TcQ&LUeg{V(itJwlNTXHSvll?A2*Hv@EXU5!|-NE_m&T+G|HPmV22>=FTegOAe>Aj!YKVC8HSF5hZUDv&S8K}25d5pr$COo3D%*T3_qhP9aE-J%FBHvtwLUl!!VMx zc6cPf5yusy84hcZmYTG5OiUC61b4Flaq@}a@RMgKND@-~CMXq{z-t#vIgxL>gzpQz zxx#hpmdgR9Cf#!KbITzyKw44QX4-puhQL&!iNI}+hAW7yM0B+L<_JEV!<}@#RpOFq zVe6DMxW2;P)Klk)uFuX25YO5)*h$f|LVpE=-|@aWqL0f4#2X%Qa>jiZ;)X0k;J53{ z8B!gZaxo9}*$(*S-Uf2~*srU@VD#A*(WS@xqg-2^1_)D-mbcXWkeqHTEM!3BfI60c z)lb!#Ye-s7-rvvhsnBAf!Y=JH%qRkL~M?O+hoGc>?0u7ng^VS zFvW66rDiRU$U7&u5ABFX#Ja#V8c>Or7X~nlCsf=32`&kA&DIIQ)qIR5{6{42@yGP5g^$yla{v8l&Jw{WUW;&Rk5ivfvwK z!Zr#v4(vz4@0Q2LUTP;{nnoS+A8`j1vICX2w}g{mh@`80=I; zfSop7d-OR`Nl|YUU)kFs3fot#`2-F3^}41ypTl$~4S#9(mYXK_mxGqGzGHyvK9IARGHURs)~ z^z>BFSAOqEvB}cAkfoO_#>0|40Da1Y9+KxEsZLWlR@Q5+7cN)K zfojBx4S`$!11$w%-mM(z8N=Sy-s+xe;)1`V!R?BCA1cvc!i!kfIj_Pf+-&0fyh$fk z9W;1fC&4&atsJT?%K%u8zO(9v<}8?CtWIdPM9aO`gy7=3LQPKf=$vWLcFf`-OQ&k< z2EjPU3ua~un#qw<2+mQ6wg{EE0rWt5et!HorOg%<0I`CUb93<-kuIbQ#$`om^9D?$4 z(2YT`qrRoi$3=_g(DK*}2@u)vWQ&Yxt z2#hlwQ>C$}#AgpLb=p-rVltePLuwwGDEivS^Mejus*(fG*7re!OHeVYB*ExyxKI`x zb3;2Uj)hJ-3hZtO#%}-D&DZd6~M9E?>P7b_FX%ggUB zza#wl-r;W@c@sk&Cv>8z};j7>7kG{`Zd++BQ&?!uNT3%(K>#VicUhDkp->_EyB4c1?T?Hwr zPDlxVm7d=qNY)h!X8w>U9VGXYGSG}uzF0W$H4g#5PRhE1$*M~!c|TCxU#LX~FlWUd zo{C*x4u@rITuFp>fZ*QTQ>thz76obApcPU3eor^ffb>O&8U3KxqvdbYmHsVynkG@M zB+yq>>Jwkkpo_y>QoBT!*|#QSsbzX&<;VS-n@G1#0MY`%p7l=spf;y1N*Xq0?KhM( zjdc8uCBb0j#4%-_NxOdt+KM{HEBhUHCQ(C;d2QN#j#{TVLM_a<>s!;|Na?V}Y4MIs zh&d$AaYCG{)z+CAyxnXy$%WDCq|;qc;pcz(@$j${gRKBC61s8B+u=}_gyGV{O~*U4 zg#PljsoFG1V~t@)?OwYV;cuXg0>kl+>?0`$9;g`YP}f~8!5ls4E_o-GPK32ISQeAG zBK+c@+fy3sd2qav6v+@+WV?v_NZS@+PpAxS7s<=61Y>bUD-CW<)@>r(F%VvtLWn z?2uV7;~<&b6*d|P2yQ2C?LRL?H*^t6*Mc>agy$k_RT0p!Nu=_nhy!B*;l{Y36W~d; z`c=VrtidLh01lsYKHu(*LsR4hg;kU$?afJsrF+WNxv==8;hu*JjG120p-1g~;O_xe z)KX?MO$$BQrwpDlH!Q7EwKZ zC67dk$Gfo-?Pzf0^@c;>(Z&2@hrr9rzkNE`mkOk7uwiAy*L>yWzn4cxr=LGw{o%;x z`%6q>e>-~r{_4u1@W+n_rbF**9!I43D|^BEd+f#NcoZzHU04WiIxvPEi&GRoaj1&- z9d@j>HHF~lV(C=3fJ>_o$A{XsX)$Jd5tpHTRpawwAlUnqQe<5R6@O1kWoQE-*w^ zEd{v(JR0}So&^*ZHQFICAb7RvPXEU}25$Ab8WY_;1_ZZ(!6$zU1gjP;^I%ZYySk^O z_$ynxfx&Ug<7z1(R!dYR_j<7o1Q1SnGnR_Wl%4}-T?P_I$+2>v@s|K#h|)X^h{ZyM zQ<|iulsWciRsNX^D}eTIyrZem8Kb{bEQCmBtU)QQd&JVAXfc^eU6YRGWIJ%ILU;74 zV<=2^xh36(nGEz~h}cMz?57=~;QOhu<3YdC)U6d|W5LFLE3w=hv)MGalVt2|&-|zfmvE1w`3~KQx%8Ie1k*Xzl0RO+e(^_5g!fUf1FVyM_O452U^|_dx)eK9`!^XH64)V3Nx{ZRB1&b8z zK$yPvXAG;l;7;%;DL}{h(20&hBf+fdHuc#XuXgu*PvKrHKSwqQHZN9W?r1M^1BIhG zaA5aGxv??-bm_yFPcNhbnDVo--y{jX`1Iw=(Vu5;uN?aY>cJg-banaS?6bq+_eWSr z8mS?x&2?Z4$1*##dZGn_`9C=k$)S_r?QM=5bVW|44=uGEj_YgeNeb)HV3|&=&!-|q zpPec7Jv;L>_)MCTXq?7Y@QY0c!HxtMHJd~F3K!#&21%zBUJQ>GsP5cPIk5X4V8DV0 ztBMNa>>LnSy%au7@*dg35>0t|-koSQfhE+F>@*!u|8sE;O&7{f5_u-KiDK9~U& zCL?}=Mj9;rzI^%Qez_`vm+t0#XCMH))2p_K$vfLa+Y3$^yarYf99S)I5F|i2h@-4h zxqVd9mM|t zDt3^{WGX+=q|v*aeW(x zWjZXf^p?W#woQrM2d~>xbJHfIO)MDuL9d*m#NnPm;&;Q7ckb$)LNe|TwMDWc-f88` zqMXZi62SNCFag34zp-U<9_>U#;c=tU+dn?W)77yQmU|p_04%^ePzf4hv`&O^j~L7X z!$XdQ;m2y%>xRAh8uv7?o`C^>=g%a?fGZoYM2E6>Q)eVc-S8Kmiv}e3o-1O*l1AHB zbG^wWrB)N;VG?0*VfXKYgxjKxs3p;pQYn-z{_IjN$_c+C!Q~=sB8P{|OWj^In=O>N zqeKu!k_Rl&zBS2)!o@;74KBMU90z83&0nwx=vL!LRa$ZjiNl=zwruN{LNs1_J(Z8C zL*q20>YEzIR=0y6jA)x6!{gBNUz-jK1c$v|+lPP%AGVstFs8?HD#4{;;xK4%mP9yg zH3p(X988<--rLN8A$x1VcQ@U}&ASY?R&uihKC7*ffR zLrAwf_W|qUH3URIuC^nNg3r!80Lv`+5=WONLX!b&T@qOE=BA_jKFN8}M{|fHE4h?p zk+;Yl_2< za?E4HA0x`R+(QqM&5mwi2g9qYS`7E(!HO=pw~y${ zlH}-;67!T^N-6bw$v)Fv-4`}Vy7CW;NTe~v z1q`-pN_1sPF&HRJ2CU)EcTdd?(_8J8f|&%ojf^ zrg3X{BB>o>(!wbN3L82~g9YA)U*-NfGNaDXjTE_G{)YOow583nU}({@5U9RPN_ zwxFb|!2-XBIG_+M$eTpqhBYNMu)c+ghKPAWV8LMn=39D>2)uGl7$*uhs=|!%ZpMMv zMT>Scn36Px>JETm{BDBog@VB=TEW0lBnQGpyu>V65ZIfv%7tHxv-92ML&QpVX{s(f z)UmL;kOf;tR{jPO^O0O(=D~v*_iTgRs?Y;1krFi%w{&R{*F$kYTZdg}Xk7&a6FzB8 z#VYr$-J`KGV++g*TjPnW6>HHFDY1~=uq}xoo|g;mdbb)S`xe~NaMN&6$toX;e8O!t zF#X*hbk)fO#JwIwYRHN%-2HD75B=>%Gego29hV*{-X^wytqo~+WQTlxrGwze)Mq)S z3LWj~N5~akqiV#1!PCdDH|94t55F8r&ZOb5UJtlf_2Ga2`3?vs13m=^U%nSC=H=|N zOG8$?lBCUqQLI8I)`Bq#Zr_f@YT!@a{mgrt^CD0XhC_C7a4&eR9 zvXZaGL@fY#c44*(NAy}fKT~ilSoiTT_GLZ?gy>bF!#U7lW}g;Fi-ioASMNWRvCe~4 zG|oIJo4o^U;*e+dL^Q}N(e+|h()0w|9HDNzXGCE`+|TuFdb z6DZxA91E`1K!j7t3ud|4G17Yiw=y1S(kMO85TnP9E za3SAj zwK8ECT>W`uM@rc;<1mir@NLOId8AlwfNIN9!af<-h?Ur*xo{3){x3yt9B&%ZxwF`` z$5iUqQW@H*aB2+ncT8`fY$-zp+E$e2k|_M#-PMBkN1W9P#6bXmo~e%WugVR@IKflo zrmtgVZOw4lLbta+eo7$mHbD58;`Ar= zaK$GoR~uJ0z1IEUs+ppXo50|2i2ssnjE0*?Y3|;hbOm|$I+vF;L<<6c=ndsbOF1xy z!R$?1Fg=>I*X&q8V%+p_4q?M+YUq#zbCBDpCs=Th=6I$d9M~8G;&W@n;2Ov;{}Pe6 zLKubwtpH5I2rat3>T2|A(}%(UVL)(IeiV&XO_M&n3m5^=Dn{o^B_9bVkyvNL$c!$P zTg$txJvleo-K*FbxkztkY>_r=R#CeObr(27o3J1-T9y_Scx1#^Ju=g70z6~X|dPbu0Shgf=GvP>+D&w+4ty3x#?0_1H0%O8|oBb3x z`=R+6XD!7d7Q3d3p-dPit)gJ~aM*41cI71P6sBnTwYf)xGS8*J7GX~O{=d0c$+h4( zisP^!j9IET@B8pqHP z?OX`(D@T6+@b8C*hsVdqcNf550YCXuNT;S#3CR6xaP!tx=x&FBlq=npWIP9!+SOdR zqSZ){p*agC_!5aBe#!rIyS4nL)m9pe^CAvj+H4Gl4$WW=%f%WD;-Vx)V14Jy+e9!2 z+LGQ11TU)>3nH`OrNXZ((eoBe>G@crLbSl|>}|Ux<8qu&5FH03`iMhPI zB^Q?SWck8TRLTn?UkU{4qOM(nKRO%mm}|lThr?Jn9rk<`iq*wTWJK}r*4AoN-2w*d zh!+sbOf34Y{*)%9dKFVP?W1BNyVmtU)0U2fRnktRc3APS-eE5H6NhwiY4=EB_^%^X zhu%;e8Xuk%KQQ;wz&K}p#8kVX{bn*h!`=-=W>u_l99L&V;7O);5iZr6mBNve44+wW zb@l3O}~aYHoD7}7kZC!%y_OpRW)p=7TLzN$lKm{JA17RJE2Ckd8Lj5Ex!L`tOT z(3lZ#jZ-%tBMuXWHynqDj>Gqg!+6N|M>~x1F6^!Qb1HliQQqPUn_Y zF~bkTK1_R;8RtiKQp02`0#J%o8-Th4$(8=#1tvJN3B%Xxx(r6KcJIaXZ9@P*>!Hjm;4Axg=!5i)7#_Ed~t56p%>!!0t2Er`# zBLL@1`4J+VaApN&K=HtXP%g zBCthnJTXPLRftv^3)i=?#~aP`tRf3M?)ZEOKmud6rln&dZZ*ci3-So^AA*4d^txpKvf7(;n z58)g>3f8HwUBWt&t^yvO6EzrI55Ao0MsP>hfxFhu zAg2NB2HtTptmEK#{u}>%n`$`3PkCm!RjC*P<0pmlF8H3f72Kd3%UQ7IblvD8@XbwF zMGAgs{p{O?H#6&Hi=ZU%YDlH}r*tJrb197tzaH5|0{+etaVxtmeb^-d*wVJBVNWBO zqh6|7|HXV(*#O1Q40JuQBb`mIEg{UxywYLwH%p3~j&})bq&uOw={if6z&H_V7$tk zNzsVr;2^kXlVBLI7J6?s-5=d^CEA7P1>&tCXcB-sY)@6j-vP1c*t1o;q3l*5xPkNR zI%#yv$#C7q!}MvPbf)4M-1G${m7+1^-dL6Y#LJ4pZ(gqQTnesPrLH0Hucf?Mqhl$$ z#6TcGaI0L##&DTS8I~9Vmo)92Tv?hjI$YqcuvQdu3j-v03SGe!hdNy&ikk`Bx{9PF zN)->}z;myiYCUkmS5CQSZoYe(hs-d>9_bdaFwsdfjKnyT~sTIC8R z!SzOA0_o7Nu#G1uj7=o$BgxGdOsf>+l}}(#cr)=9-LOsbWQ*ms&p=q)iIfyR5qVUP+$XI9}25iE0yvMrMX1& zl72++dOTAV3d~Hd6g2%Rbo~rR*TRwojDf;cvSHBSg9DA0hE*%pr4N9;9aFbDjbxvn z*60Kp9H{Wx+DBjGI{p}NIEd26iFr8)aMC5sUZst#st14&hPMI1Xk{b_gH_OWB3BN; zas{#OL(f<+7;kUEkXT(=n^u=}x^UWCI6v2nEWRx0Hp)cIGXMY}07*naR1zt0!!VfN zYO@i0MR(xi(c;3kVFBG(Is!HVZ138pF#OS^ZHB>(Fb`gB5`UX`r@i423?7`|{8>MccJd6x>b}J8ZUWg$Oe`05BstDrM&l^%#4@d^plwBf@V~v!!Txc3cE0 zZd(nNR~9F*8W)@$_;47=U(~1*Ao0?RrKMLptA)-c@QCG)!h!{LhbIC_tkvz31b^TE zX-naLXhqWfqy3l)s{yO;O0;EE9{S$zVN8P$Z4!K-@2OEsb!d&0HX6Jq0Q~#w*R$)J z=RL+fzr*rl6$sW~j?Lc&PJ#ym55c+_CBXyx0JE&$ zy@MfoRzoR+HnN2q~`UVsgQ5WiANT;%prkw8tlytK3=4;Og@3KxOH@{-R- zMBqYkx)h-u`xje2GTxgGT-bM&9FWu5Kzh>z+ib!gO^G@kNHFj*Cp7rmx2Q@CCV$oZ z=}D);0>Y%vjNO{lsk2GVutXE&vpyPTk{0f)_Xdh*jUuNlDHDqKT>Af2DqQjP{Ya{% zOV25HW92}LQzHq}xx|KWyfKsk>Q)tbtD`9F=B#mz*~&10+E}oqf~1TIbK-oYTysth z$-32aMrgl6XHWohJCt+^-)Pzl(HZY6%#lyex&92!O63_aJ25W&S4C-HtgR>ka5E$Q zO3&H5gk0+J|MGRcKTWM^5L&>P5NoliqyhBOkhQgRyAWxul{P5CAq5G<%tX;zEt1L$Rb7vz`$Ue1)m%-lViYK4p8Bffmx!#h8u{^ zIyv!(%I#0<>y4q(D1pHC`mg~^mY)jIMBrY;CP|^yh`kdh+YmnUT3rSwLcxv;!k7qe zY>)|)1=peoU6cl$f#5pK5b5cvlvWwI)1$T(LG;M5fw7HH&LflZ0_}Xd&A-J z;OJ-+us9Ik;~olx!!L96Lvt%w=Bxeahu#;!?#DV{UqbRC1{(?MG5e#~+mHZdlTpS9 zttl`+Bn07oC&NyJ!`t9-WjV0m$ICAoCqm#6$uI`PA9?=z?c49){s9tveevPV=g%KV zdM|zj6QwR4Sn#7^Mu+x-!hpfFWF-7+CIqPXF65IAIiA zVMoJ-c7iXmJq@-3EF1;_=I8k7>o@C-truwj72Ha1CViDH%Lc$!RLI3)NYKmB2LQlW zL8}yMg(?uZ7H*LKO3yY!S5%Ay!NA}u6=*oFibUWd11jmk!qj&R>?Qjx8tolZk-k6P zgqjjidtnI>9)7U`1go^WL|J;gf8n+o$v-ptSheP3Pwb!aJ6Ry-KZohxRU189NMbc&z0} z6XMJUF_r0|YJEfp^*`7US;j22KXej6Ws-E%@^}?Z(yx9qdAh5HCu{|KoV1r6G9r4C z2H&WOv76v65&nkrd%>`nFs!4-f^|OfNpQpBIR*k?;;;+R+way-)(1V4q5;F+%>ZO+ zw~Qf#KU0@Rjjgt?MZ{>y62eKa$@N*oQZNLXV8fk3#) z42G)ZdZkpj8g0-H&l6BEkGvb4oms3Y|IGO*{uJ zY}|a}CvIb}UClHzx0o5)Zfaq85iuQ$_mG!`m~WJ79Sw2G>LlK}G#&cOPw21BhDT0# zvmFh}ijHwu=7^5Pg`~MdgJA<;yaSY}-{A9FcN$srB@p>|5Wx4**4E3HFSbr3@QjQF zTMO{<(RYr5KLgp`gcBebI&{FcK!=IIzdrMNq@I?MdfcV!3=szA9SvC_y5-@}>_^JF zv9!m{q|d5*)p0x&4l7B5tG(mKMaqIzN%&!VauUpBXri+|yB#3-@e}J~FrNF=99XfG zq2w9Se8@7C0W2L=YJmVZ1Mt==l{zRe2fzyPpttL3Hp>;aDoC{Mh2OyD0@BeJ5yQb8 zEL<#s5kMGw!MM7liSXhWmz!E$;;tLSYeciHghRWB$WAQ@hF3}mrvn)d*QZ#S zkWPYgKIye99L19J=B!*nsg-G+QqF^*$(&=-Ms9w7t$lWO(_Z^!UhPNbVP@+pv+~eFwsJ6g(ThDDleGSCtaJvh-E%dc z##PSKE*)8L%$DRA=MQf&-}4yD(Z7ZBhb}~?B@9rsWyq4l3s1C@HxTDXt_%Z*`-gAO zQMD`C^^~eGzCOoU@NC|hFw_M%HUnuHm!(m#ROmS{=?D=ik_Q>iNi8lb}2_AiZ=_IWpKS}1h`NW1~(^Juuy|bhpH91XQ(kr@E$`ixmCrc z3V7VAbv$c@;9I$c!L|j=xf)IsqQ}UgWX`0Uy9M>z{kh``u_dfKY#!C zAMilG`S9lY0<&L^gD;4{z~H^%&~}i-ggqIH+H?|ol3vGXtd{QtZ&)@K_YSKy{y1y$ zV!122#)*mrM7M^=4Yxx(4Zh9@(ecB@bvh~z5d3IaHAtp9%MdLYnkuwBS%hXH@QW7$ zU<`l*2;*GCWr2AfRH2{PE-=2N;3zBzHX*t=UMg}2_&%GG7|H>6K7PRNO0**us94*`ie zGd3RFx9#9l8p)gozkSsuWOvAdFB4axM<0Ixe1C8pd}JgTNk{{GYalEu+-@i$ixl|8 z4Ov9r?RQY3_mqo;bt1j0j$YMWY>mEi0B<>1!5x%=KXMU|UJr z2;jRR8f-c=i;=jHMB-bZ7+p{)K{Q4~ZT4B$UIozvC`d(obRf*?Ezm_%&sD7!DKne3 zxW?&l1Ykcc$mZE(;csiwi(E~uP&Scu`S}(L?(No_f?znq0(J)ue0IAINjUsCb!pY& zu?nZb_%49Jls>6Tw`rJeR~>ytf}2K!t8OA=#XLst*u+LZI}BNi@S6t=9`3>2%#w9L ze17(5&{z);{OS8A$88!xeuREUOXRR(i|$by}pT1FO)RZo`dySp3#n+6RYY{#P_z>=Y#DrmZ7wuu5g zS%n%6(czc@`ICgtMGSful*ysRU}aP;5PdoKy-y^@G?H6)}0xzFq9Q5Eea+W1{%CMKD&H>*za;!=vdNVvh$%wflTv0 z^I@H87JLd=57*y@^Er?hO%HvGh3W^OhHLpSE&)ql)=|t|Gep~Bu)*u9?+4FnQ+QS@ zzwsfn4#B{0J(1;l-~w}DixWAV6Cw7FCWB$FEP;D&5K0r)9&(2`7Cpc%EpOIqW5f#T z=&2G-YY(07RhRxLoD!WP3KNE}t^%sUzQx;&tW;2CK;Tmf(r@*x++3Ly{UbTRU$~E> zFYmvkH2A&A&?j0;Vp~IaZ(tq8Y8s3J2NE1EP9#Hbqw!=g*fkxx?j*R^;h{wu+&3`_ zj>F(gGPJYcdWHp?yvlJVSTLn%ooy?r-3JTqwN%V7CUn9KT`c_1$z*5=(RhDWAq!q! zu5eEnVV1CCsVh)&F#3B}R+=$F5(KANf*1P1UmtoL?gN8hgEV`2b*m+;MgZ2Z*q;0FlEBt9PPlMY6R!Og2D5)Ilu?G!_MQGlo@rs61f~{E6RxE)E zXknP(_F zlarKwONWM$d*%^KkLoS2JhFkLYtZZ>=D`ZU*)3uT(^8n8ncq4?==$BFZKb! zgYdfoPd(hxmWFlxZ6R6_m6D8KsHD)OWs8os*5Fa>QsNS@E&ulRNQApIL=%sDy26ap zGDRE14ma4^zPLCXt`9H%_@YJ!&4XEbL{)nKDgf|ruMtUk^!)h~n6U)HgkK`?o1DGToQG7Cu=7Tk6f+R~v>RH()8x@B_c%m(#DV2pzI2W!!b1qv*wIfY@Gu!O;! z7~^Uu!I}a;a6{JI0}qCdSKLO5@P0Y3gi9+VTLcWx zSD-9?H~FVi%!{5>UUMPFQu^oeg~?1}wC@so+H>BMItr7;iIrA>U}CT_T)Q>U)0>k- ze9eJn8njP^tHN1DNmu2?E_hfLsWlmQcBk0H^1MnFt&gc{VIRdzkVlHbIm_aR-Yd`Q zC@#m{q-8AyX(w39a!&D;F%_Bx2Ppxjf_%`YyDMkdXuS{<*=WspZ)CzCnElh24#q2D z*Ti08GtL#($b`q0odAco+SE7S8ZV!wAmci^m~P?Wi;z+4n4uGC9G$yC?6xRVX462!+UO-78&l@MA%@M zW8p0={i_lV#w>ZLBx-{WXK+~6Q{e)yrcH|t4yOu>4v*jXy!EBVf0@Q}N~s!2LrUmLD(4?0TYpu@YZ!wE%E`XBtu&f)}| z1W<@ocOINbgI;x{S@2P3!&9B=V!^FsLo9g1m@uS2wHwS(L>@bR6N?4Hs|$-ipdy9{ zJTvDY&6436vS1ztz<<^7LJ9HMbYY1etxA~)ET$P(c$2s|l%x?E91yJn8h`# ztacs-1g<;u`V%0cuZ@98o@K1ImU6-O6IvxLUC=~9WnN@xvd9#q+cFZ!Mo zX)4t?H37o>LQFRT|0RT5wsZh+D9~8%Lyp$`{C5J}d?6FjQO#$fIh-WtEt+FeOjc`5 zu06|+HK|!|!Ki1U`qR$J?`OxyC#{|3z=IW)B@voDIBzB^-lG*UX!NVxE8weVbQKJ# zMYanPwpD>>!C85$Dppi=HHy??%tU2*uZwX!JkgIKmKpPvQlsrWH=fg>GU16_y1ewK zILZ`%`-<2IAdJnUbSv1r*L`b!aAi7sXn^8|rzF9`URt?BLp8F z4g)9N-rn9#zNrnV74=TngTK<#N=Kv$z&y7Z3O)eEF-BQ6)64hvk z&`dW;>XMM*q>7{9?5UCdHRH43xmx)yGIAHn@PB>gC0|i?fZW+}3NB z0y#6M(Qr7;2pH>n=!y3W#u2cZ>e7jD%(3Lx!VXn25}c?8>hnju;IgCvt_mFZq;^|SWDU5Y*cE_ z-+S~($BDiD8%9M38XQi8^Ka|W@em3l7w^A7g*F$~&6ltL`TBW;@`b_c*Uz7P_~n-mZ;#eF27VJE zm|XbHt5-iB{ix?0_kkG<-8L;+*LR~G+6>X{@s5U#1W9;ot&G(Sww+Y-qo8^%y0P9x z09I%4_#P5Tu+4&r&g<{i{`C(Ffu6I7N{oIDkWHMn&oFBP@m3EW0CXW=qqVT?d%)JL z^kB~Ffy?*ZvdE64fQ<9=+!dd%RM=36IU}hdP5hZ znfI))D?%nLTY-iacP;}2AD>FY-&eu@nJyAPxGo|MCDF_>?2(0~Rr% z^B!j_l9RdfyKH)N_z}V}1qe)3g_h}&aPT2R|jbZ7+_X7ZxAU3(+hXnV!3mLxVw zg^A$-fJui(dQE^;>oGTl5#>P?M%blIfpG{R5ROFn=f}pz0m36!qL0r9SHMt|TnI1%V(%R! zADseSym`qQE7s%EHAmebIc?2_S5oS#J*74eK$S zn=$E@i&QNGu|~twqa#8S2Guc`#QY4Gqib;{T#LETPJ)x&P9he}9;e#s)(H-2l32f> z;}ss9kPX*&QJye_MiEf>;@6Ae;MlEf9+%x}D2-A&zVO!v!S+{6Y1I6&3V<;WPPTCS zdw~ScfB*f=BOdsi_23skjM~ll))|TlN7(^zHXi!=#fx#?JH~+NbtVuy24^;wa7E8H zk$Rc|cU^;q3f+}|I^B5kVx^nk0t64&FFySN!x-w00tf!@_4VhkU%y_{6p0D&hk(HE z*8crA0B(R^yu*$4N`Q=c_h!_eVc1|h@RsccyC>S`!Rbzt7;sx8n7`VtLAOk_P;?oO zf#k+=7Mv>4)S*AxNcf}h`JFWCx6-HA)*hC#$a~*=1s#!vsm5yO9+Vdzu9hu#qs$m+ zQDB<_$5mk7rko+bftEH)m4LMKrBY=nT&k4Np%p-KsZv4td8GuSfD>UssRE-xaFNt; zsljjdG*1NnDZJYLv~-Kam{%+XRy7HFlO%u9}D|FF5M z#l`(Wd5N(WhZO)qHXI&DF_K{b>GBv8F8UslL2)s5DlytB=LFVPg9$fTcl4?8VDm=f z4tymk=Ox9ukDNtbc~o>itqTrZSSb`hblm65{=rjIr8O4rGo$etL3jt07C33!NCN$$ z$;f7zURJEM4UVZt-?9^zg)!6xC{N`Ix2t%&b4Tj5wIb^7fwqANPfg=r&+j&tTKS?$YKcMrwiEwi6{FCxBr+xjndYlha`>3_q4CMwga`UJ#~X z%3^OrxOYPICT_L4u^~E~VlaA%jZFsztVeLnrQmZ9i9XKOCLOE4kV9ZZ1%nK8GifL{ z)|27j@X4^#*@_rU2qx!k$NCtK6MMT`k#E_{RDHZ`&lYXK^CAEP>BNB>vE=z8{d{^%75`eYY;{RZqze|=-I`&#UBX4jH;Y-{FRql)8KHc@DN}ZnemFDcv!#) z5MY{W9I(_>jvl8ZZ8b{6F&v2fFeIx)C##)K3jstn3$7<8V8L-N?x9xr`It`78FV^G zGTYwX-yYz9q9D0;8XpiT> zjW%ySUHy8vzCQfz)B8_oRSX<>Z|~>FzyIF-{5AZ-@4dLbLHEJiqql48*hP9}^IyMw z^yWtnf(?H8r>$gY3#*Jp4QW~M|Jl0!pS1EUT0q1a0`<#K$F;6P%t&irP}2pS*J4md zA*d{d8rzy~f8Cg-X?Hi6_|qh=bn4ck!4iwG!jp= zj#z3I4s8Qr-l%ascnxl>_#n8UKe!MbT9IzTHn2^Jaj%-OAT@9L_R-?zW>^L0VA#yj zv{|Xb^Wrb6G`kP9PYOap!Q5(PjNUH95M`;F&8WB%h7QUb{W!1A29d)|_wS64%1v~gd6uiZ3V zTD}4GYtC8uL*z@f5!C8(#8fG3PlAgJcB*>APb^YETua}vP_C@ zH2QI41s(0mbe^p2MNwm*J}jhUDF(}*e8&5S&EUHb5Pg-Rx(>lts?+o+M|aa)I81}x ziKVY;McaOlMA#E8yJ5fB=(Rr7?-~TZ9Npf2`~Lm&x%^;s59Rc8e7OIk-RXA6`#BThuc6DscL4?C)CT4H_)ai$lR!Z!duT5{2p1npd$}^=Q^7 zA*^FpQ!9-CD+H?wt&pqUYW+&NLul~2V|0MvY^t5Xkhc&LID!ky)`Npy?LA3ZM^1!j zcudxm(6CPPAJ@a-^}D@};BO|UL|CW4SVy8;ii27kBWFF0LqPQrjx0JH5>Hj7V0J90 zwwy?Nx+TK5tn5MEUrKt_wFSI3OZ5~T)4H`(^xENS5+zy8WPB)`abI+XM+7tO|m{Sl8si3c{QSPrxv`>V^kFjXu}tELA|21`pp1bxC-5 za6<6KU=wS>3cxMhcW$UN`Y5In-K6?jZwA84Yt8Ztbm_(kaA2Ixs2N<*4#5cLpbovG zNs?vwnG@cd#$!d{I!sQwH9VItEu7c0ewC)@!u&WQ5J%V!Rwk_R9IJ~_WP3_(CAKU{ zf!(F2OBAGudGbXmur%XU+8Ui;v285Hwc5#XOh?%wXVA)mg^T(u7*f1Xn{krz>f|KG z^;jYJcrZ9VI3^(;jYhYhM?-lfaa+3nC93<9Qc_|OS)`UV8FJ^Equ^#E9-PP-fkqv{ zhO@G=(v0P$6a#|etNVK`K{&+}cajNT-JM7@`uy$NsNZ^cc=+1sjQ3Bw-P7)!V(=T`K-Uld zeDLG<@fSV*uA513V=D+w%vVU};5aytUZj}JThPd*1d5(sS1}7}o#OJKde$(Z^4!U$cyV6`KSd?TT40SP{H7ZJ2RVi8^ z7#N&e&viPv?IMeTvnE07N9e<*MspUdFbxdWC`&U+S8S%6HSN0KgWf6TZXtDxt4mXi zqb9;eT`o_Xak^LyerS~jJ(P089a(MWVY2=g z82p%N90u@8j};Lsn*0pZ&sBpp>&%&O&P#_cxR-R+HVVwA2O@V=OJ~*4Vf%90P}pF% zqOC~PfWbxE{*`;N6U-4ZtgtJUh6Rr>y(III!8VTEVMl6PXN(mePE(O091PQLnA;pnws z$EHN(-C*GG`89*0LtjH6!q-DurH2>=>+iZ9e10x( z^`p^CWyYhe;}i8`nH=465**vCY+@9QU^Z9kt2|L4m zuwad96A0egdUN~R-=2>jemp1ye>y!B96lYN{s8XE@Bfv{55wTEg2Btef%~4uVPVh! zV7cApdSG{=GuUhn=EmBwi~g84k*I2Yl&pgWDPCSE>qHXePAk0s& zQSi%;Td&v3n<+O|ng^Q++O1f&BD{>k1{(r14En_?+LiQERxOW`Pa*i5K&|p#`Qy`) zUWN0{%*-h2<`?pS;n~vc0<6)c0KiMCH^cJ$glKH)^b)EJcT-eYSTDW~F0E~K;*|cx zf>U*ci4<+=SFTTcsjvlMO~KGiV-^)*uvZL@X_wBb6b%f97R>`hc#55bS?bcJN*9<> zNlO-54W}L<#nL5YLtR^4qM^%p?Ud=z%#<#ePR&9?_Az<&uzq*&aLK2z+MsAj&DFC| z(i_&1f*@V>X>hVQ3^3NzMvW}mIGY6Fke227&>+>2p4sz|V^4$LOOcz)!MSP@-Eo$( zj9pTXe(y53uPVJ~inM&$r2viYDz!VtaC4~^Bz=0#+9(#2u3%(aF<)!CS|S@Z7A!ot zP*HPM9zh*MVqP-V%|sGx_l3Ez2Yfio?l90YSIyw5)w0$m8%CyOpJe#%-hfyuP6vIj zy^n2qxP<^cO&#!J)4sY-pgH%A3oGs2zd+5CWu@;1VZg3Q(U=DlhUI-;Nbr{YMjDKsq=sd4m}bX{-~@t0TaazJx&t~1pD;q~ zTft`Rbr42Yv~>on4&B~4ikDLp;IMzOIXMqD4s5LrT6d%f9H|ovca$xUgTvrC)1sA_ zMkp>^oa6jgpCz)>1AM1*l&SUc#RwZs26@eTJrS-a#@(svLF2`-rc<)1H&Vi0t37`Q zPxR!DGzEg?NJ;Q3G)pN8D+mi6Rv;eWa;*wA3Gw|<@+5!56#a3Y3MEZD>`i)Aokl^y>rYzw7A*)Ogn+Le3aO4j%&2t~YdWBpR^uZGIRe2r#F|OHU(KW;+%GioQ@`AQ`~LP? zd;iYC-otYg)XX@pv-VyOkKQmFCj-Ocr1E8KkTt%GEE(!8)n#KO?TBbrn*h!Co2VHJ zPUNG$q^RT27ah7+Z_9)*8bfb;Fpkv?$|~3@1x*i4(-WdQ@_AEfsn$#H=U^DaR?eUw zDb2ba0E_R=`0@cc-(Y)DV>|SKG%HYZa{Le`oL)30|mq{Xh{#-OfuB`Wzm|z>L}P7 zG7wiVn3)8OB9LmAmaLq&L5ByYW98V`v5A1IYlRZ3h(>Q=pHa~xl}KCTIkZ_L&ZGMj zW{nV2DImOmFPR7;if;G(#B@oFz_JmRtOYAvjD=n9gvR#yD#YgMmBvoisI0lsKVDsmW&N+m(Zii1C3 z^g)G#VIje*aP!u85lyXHW2m?z=T9uhxgM)m@QUfq_1=mJqKja;#9)Kqrq3zigN&gY ziol;b?T(@FHNf{;=F*|UupH+@IG%{YXzYmxgdm|3G2F!9X5)M~Ja3=8N4)-fu_i6I z90_i64&49^ejbmxmi<+aHTDqPqf@SDh^uShZa11jcjrJD2+XoViIwa2)E!J`(yK`{ zzlE^m*0}pD5d1|1S^J8@zisWxD0(^*k>=U#rgz!vO=h#1;xI_C$KdHiI~ZchtCogi zU3vZ+k^r|5mS(k?OX)@gYv$pS=_5hnw-KID;S zDV`}|yT6-6%R_CR+u=mbGPLFo_gX=dZ3~^god;tN!PqjJ5}R3=>dTg?)zQoldY#p0zE@SNeGu5?&!4B(m9j)E1o3L9})`MDfrt2B)i>QX4^r zl?l^mnuue$mf1uMhqH-!m|x(GebHerS{dc!K>SOKio;j%4c|Q9NX3JI@qHgKEI^F< zKRT8$;|<$k{1_VydmI*^1`J~^eRg>|j%MA_VXmYH?0-pviNz1kVn}iy!326FpB@ff zEuq5lhJ>@m0@t6<5#BnvKDgA`hm{l5;TX7Sy7js#=m zAcN?3=aWO^j&vFc42RbW#GQ6X!IneL`ypvuBY_&mO9P>m&F(K3ow5S#7XAXh~v%BeF)|;K)9PCV{4wQfDW%kqE zPiIqs;2D@NlPTR^&3{KDv2iwk4B;5k1qH^QuF@PQmSZ^Ezpgla5QQqvWDKF@;x zHlWq4%D-bwm=BHwZ*9QZ8^hprvk7AwT~r9x>rSOY&~^7vXKgyrb>J)i;C}lh48wtM zgui9n>+1J#t#s%*b`*TFQ_C7 z7<@K45hk2xN=HUj(WY9a{TCZ%=2#-e(jeG^ELlw$#N0+|`URvXE#)$q34%y6ozx7i z6!*_bfU$CEhDzfiNSyE}sr3w0E^|Meh-|zOLe?&t4ufl6S{)NL*VL1g4QiUVRnz7{ zd|4G}C0N&l0>WBsAa3HU_?NtcI$B^@CDLaQVUr2F7oH(Lc^fVE7ZDTAswgZU2p`U7 zvntg}Scr5Do?&fh5HS`=@Zv&Yk!=nbQ>QJ-5}JZ^BBxK%vBJZwb}rdBJ|ZVx+{V{a z`><3GFL*jk;WLA@918d4+6Q!UG#xT`ioPXeU_>h_G%U&5Dr~8xcqnZ6^m4!w!^gpC zmvs2WS`?qPD~Z!*>n#K%kBG!0n?^s#vvc@_?J|-fH2lH)=aPG^7z_}W} zFa2;A3Dml%Zuq7q%%Sxhhl01x@VY+~Y&m%UUc#aa%gy0)c+!?|EJkAu-7k=pAN|UM zf5ZmSw(IrCtKb`nvbwMK#gIYc17Wu-d*QAoMfYNYtVk5y>ryp6`u<%qD!(WI|FQr1 zUt1G_;LFp&*~Q)6pgTM5PIh)St4CGx-YFk`%6(}%QO#9o#5cT}3x($YV{N|*zKW6H zkK6}~7^|t((Yulq&Huh%>x?eLsgD#D0)llB{8y9_t!v*n_!?FI_U+5(t;)v64iFgV zTin@+O`z2m{DB3)P-N{m7EA=j@!^9IUx&h2{9^T6!mQbVw~!+cm)8yt4+VhNN+tK9 zG6&8Mf^%=*Iv6g$UDBcS8gY1yT(~Ow>4KoJ1LKkxYpoJ>A=09CI2uSpAf3piqh0VD z!0($kF>jK|qBE8jtt2;N5z(ZqbQPtT{LCRVng@xTfxbU41hGzA{RT!Jt#LFJ)Am zCGeY1Kq-w8b1Xa~5=ZN_I;vVw?ef{jGhe7@KAQZA6XqN8}fg97=G~~(STeXJ&Qxh-5ef+1!Edb947ki zi#Qq@>4)=?d%VAwzkK`GHYw*qxYd4=zgbW0V+>nuzci~iOpO(-fCYgW24#j}bni4|6n(rFcf+zJ zb`*J6lCah{>0Mem&`Mt*qI>hMG5SWk{#7*LQrajN222(iZW*0eMCp(`F>p^meX3&< zye`-did|=al%|#-j>`toqQz?0_aJ?9VEjpFup`3Y!VZK%i3NtQ<>sD*9ZA&a_rn8D zqfy(?j5(BBmLJ0*%7TrL&aHue+{DJvUj7`z zKMsRs9qbTzwExHF-?k2B|NS|= zoDD86295>~W|wF090ngv*N&z~(=skZ;_38oI%_Gws`V(|4QwA)_&vR9#azMOm898N z)H*aZDVodRikj?X73`Y|=SXmbxF*z^>u~t;=N1YE{SugIk~1EO|zKbw=V~e>Q znL#ZH%SPp*$o6AeNrMI38FD+3TO{cJX zRSqiZwPU#)3oQm2<~~>l&=ahPm(2*gSQQKwNpw|SrvU6h*f#@bA_VpzoQX8k;wnmM z0!GrJp;Zl~Z42}OCBcK4(DC%OIdL?&>23~$^AthThm?$}8FZfM3KXf3u2&ikNB54Bv` zN`+jE7)KG%Nh>OhGA?Vk3&yXh^g@s{O~_PCd#7@u7Q^iMDL3kq9=Q^ho$w<&mMp%S zjQG-FF>^N*4VQqyQsuzlOeqe|Yh)K8I2{-ZmcVF5VTqE4V!FU8rL>xx((vWmj) z5`YdTZ8V*Rx=Uo%GKm(Ew1Z&z;V_aGd$k~OQzp*RO5=S(&p=}yNa}6ls-i5_Vrf&` zv-PA(Wem2(t*eg%Jst;_b1;mf|7_+Y9Yl{F{>Rq!|1_PZL1_yp+oQDh%JR{&tqmKB zF58u`t;&kQB0^{-HOT4hX1)8dxfp`EgiHL1zx>{rd7k(ERJV4^hkn7rR;Dx0JTpMy z=|uQz8ua_gIFews3s1Bl{Nl)0kX(y)QZeNF1TAm$J(ePxleQGS92an${#vS&qK=8X zk5yJk(q;hcqu^!)-E4*hQwh!l!yO6HT`I{ySGcYmfU7<;o=uh(HdnWi&rwsM691UP zI-F~@Dkirb<~mznGGu@cEFkPzwL_(AN8RYF%6z>EznpiEwzj21+p{1I4upEk=j4*T z$+jUwGg6Bz_=qShYxFL)XrshbrUMl|Iy(Du);S8Vgr3}G+wQqeSs^_FaM#^f;T5CU z^4@*K{@&ktGU%`LQPdCs{SX)&UN!+VWBkUqZmdLujq#r3j96(fe0-cVY3j_!t~U>C zBN#JbIj+7!-y9J>8Q@*#^wVb$VKZet3J~1A2@rgJ{pRh zxx8#&1xkERl=vzRg7*^O8UsEZ4&0A5u&spItzZ+PWyb1C&FQEO%qqcb6bu$jH9G7` z{Q4!S+myK*rMR*b?uFni#%Ik$cRa|~8Ri2$(s>`_;E^M8DhdvqS|r#iA^f(Yc8$wi zR4OaNxvcz;$gy)UoZbxNx)4XmMfND^*q5j>MS7tY@NaN57nyKl&V&X`d%;!9mfUqm zTfp>PVJrA=jfO(BY*&fn;CWf3i+OhzV>xU%Tuj}=@XHdx`Z%~aqbAKXOSLRv zF)6CjMud$3b3aK9hWOi&+%ZY+XuBi`zlSC3eDc$a!=B|_VU8qH%uG2L#6wm^vC^vTQaPE5jU)7@U!kR%C0gnm@Wy zuN&m*fn7ss5BmU42i&UBKDu6I4pyBsn9_E&wyn7~E&#e)Jvk(r!?mMx*fiUb= zGtqGdTW{?$W0UL2-HJqKSh6@9=ajq>vr2%#Tbi4r-I0(B?B$*?ca$VYYik&Ucs$+< z4-L0iA#vX<+Oa*NC#SU3=1z!Pz!;3xq_cjpW ztAk(K^d;@AuU}#%t+vy?YF~*8Utd##9$HP|&^{X`F?tXO!B0K;&E3!(3_Vs+p;&Ow z)Ev!KTC`(f6x?bB2p${B{oPscj0MZDN=N^F_56ott>&hw&-s9?TsRi7Im_%O96Wqj zSDn|oFqQOoH9zzv`vt=OY~^38tM_#O@Bt)v4Zs>OSY$XbUvS|7z#0n^j3H9rZEJ44 zBotnS-3l(<)7`zd9aH(K5!|q~^8gt1sWhPnbqF_OpW`1^cS+O1k1y#!wElOMR z-X`mPAYwDPqr`MA>ta-#M@bcj^hyhUK~Tey>CO*4#d7o@ZVV;CnTH#X#e)qtx&6cO zuZ+kx86H`-mUfLb1Lj?Fr9A)uAOJ~3K~$_+mMpV=acgO0uIoY$`19QkG+h7FGO5+o z1UTl7Qjy)hhz$w<7Dwf9P4q_FmUV;6N^`gfhxQ~vabx3QvAEo3h?XdDTb?Z8@D_s9gq|a=2}cb$M8!=Rx+f+h_%Oaz!E(+7=|o8 z0W9OHGy{egOSOh#!T)(aIgFldv<~zb>Lp7lSnzO|w~tyql1tEggy5F#Da8VTP735u z!LY`bjJSNFc`$-G#Db~8RaA{iGTby=(Hxv2>n#LG@K&_0vFC9YKl5EjU^t|AWs!ymeY6)yFk?Q$k4;(H_Sb77(1#^! z+hl0I-#NtVM%7l~hip>x&V51fk!<+kP2S0uTujC{G&tI?l6-tTD@Qv6mJEHILu-?t z!FySpbaF8W*AFgclR0L~mn;nK%coDDu&zG&>Ctbyt;?(Ho2!>E1NPFAxc~Ox;Fr7D zi+#Ac*;LL&fMa0r&E?gNM^O&l{Orwy5rPTAITD=gSUn4fX00XNZm<$|)u0vr|Ftv< zMl@CzO@$F*-_5Y#M1g0-=s%yodh`qsyvZRj1?WnO=%`1B7RYb2Ea8*R zz02uu(x2C6B6+!VGbH`c9N z-xY4zvXO5Z7wk?2qvfud7r6DL(X|QKUgV%^rvQnK@`FOYTPZ@Pr@SWh6moecvfzDn z7IG9^w;oh7-)4Z}CO$d@cY({S7Ydg|S_^3;&6N&a&$+i|>kb*?At}06t*_UBm{r-V zJ4lFDvqBtbvoUI~V+L@>X2%@th}GCjrrUZuBg?K zzy`uSxVG?SW^aoN!eYXJVrtYx;iK`FJS69%XuMXOG*IAd_%wTV73WRq84ZgWfn@Gbr z1{MhWFc|PV7jbwl4(4utUt z(ggEkaVIJKx>}dT`a3&A- z-6dr~8-0!^B4hy>S=vn|A1=90ZA0Tm$=(Vua;x-RI0=EjE2tpRn+@gNGSikqJPPU< zmMc1{*#Kd53pYTADNDOSD+Xpn9E@z3Mx!FAt>LH%&4Rr~dCn4|amy&5fXV1-;&qv> ztQjYmC3}?1b2AcnvPb7VTKm2!yg?=mjd$Y>3v~nH@1tA+n43K0xu3MwknSKa%L}U- z%HUX-2k^oaJuehqUQpGc7KSFOne8oF9jf;Uz+1f7d(1- zd4Ac1@1k+-(f*LX`UZj7U>lg}Sw1CZg)1kzXKGdQz>W(`&hnA)7;p?sJ)5fYP;^-B z7B8O;PhFL^vGa5~u{~i@;Hitzu0bbCjO`>qF!TLW1P4cI^kjvnHSBqu&|XAg2Vw2- zbbRXB?Zz!0sCY`m>h+@@4HgUr%zP|Bu=T)fvT`keZW9Ph2oBJjb)5$TGP!Y-;gS$s z7sSTtZ~Z!E3|?8e-|sUU=9HGK@M?Q{ z5nd_;#Mj4pTl9t3B)!fl#mDBIP5^rR?JPK{(P?&!Z6pkdX^uWlQ2zQ`E*$Q3F#r>u z1}c1h{?o6|0Kw3hZvq0p`9EFf_LNq-MDYk3lrS)fW*a#}yik;YNElLFOjIa?F<2Na zsl;=fN=@cG`jE2Bi>b;}{_@jnb@#V7lQ~=eHTn;Y7o{gPxIBBCu5iA7WU@Q2* zlcE1n1b>Qyu|9b#xVtWYUQNeRzg0Ei&5D^^-6<96jK+B=Ub%A4`20y?_IJ(tzROyB zeu3)qGOSlZUPG@|t^Xx&FimH*QZ4r|7?Z+lpf3E;LS+%bPoHLeV(F=FG|U3P+9O`h z>kP1Zw1VbUht?*3W9B`eQcKVe9>jA=nc3Y*YK00DOY_dwRH8)f<3$R(R4jyDrKZT> z>(8H2g1+tb?pp%k-tA^CH6I*U!P;!C-4wGWQG$M8T6jJ&5tEfR37iL+^XivYUlw;7 zGP7gJEYM0~xe(C8USaD}q?ytX!%IsVJ1rlV$zWo5A#Euk=}KFEA+`qtnu{mLieYG6 zUEazvvnFrQ3OxxEN&49i_J$#d5mk-|mguh*e@Q8iiQ;v_r+cLQr#Ifk%*B#LeCp{|)hoE9{y{AR;-JXBM}t4qpy zSrIIs8LPpQi)(EYGykF%?_A&_Vs@WV1%Le93H(F{pLFAs{_uwP$mQue2gi-Ww_m>g z_v_ma!;UFo4hUmLSmUxtV;fJR2)?+elfJ*P6O2*c$L`TK2!p?S%{^@eHz&uFA>CLL zt@k%sivCT$g4=F_)Q<}Wb=-Xac9S5XieMWH*6XM5-uQE8W@4?Z>=40v>^v83yOyjvD}3pF zrr3?8uUoNDyxv(|ezwZE%KRo(@FEM+*+nf(TNfDLW;L2LhByYCeW}Byt!1t z2Ftfo!J=)3t;nX5D26rETBEf5Z$Txj!%A~8g?-6koGP8PP6>lUjuyv^kpxD%*@6bE zI;;0ezs~8(B-;X!%ee*)Nm~42hcFfn=3-aY^lUnvo+T+P-}3E=(7~1SH{-wlm~KT8 zMvu}+sZyz#_NK4=b%n!=W`nlLrC;nOxTV40JVdajWU-*kDJ2TzJnYfI8*OE1c_3{A z>x{6$Sni2$XO{qEEM3Y%KFcF#m*l0p#2I7cxaBRVt0JFlnmv;C#@2g<&ZChSf1-2QjCEgE`tt(cTmuUN$aw zL{>sIfOT=@u(U6ST*HuInDy)k|geSY?o1U zE|zQ|dC3NpN~}hczo8vmWJXcZT+ua0@Z%LXUWLJ68~wFOVGZe6DZr5>TC~8>EVW}b z1)0qddd0sB)Gsw~90l!(Sf=?~CWb|Ych)y_cN6eS6)f6##kV%WNfy_k_P>r9>yoLWlfIvx!PDE&&7(5Dcdb2w5Ppk6Tx!qA72bl z7-*&rbeF+QiqkXR=_|-z zz*XM+R*n8Y2LdgxPUQ@AESJ%Jxv56yySt+wQ_;UicR+BVSeCQ2VyCg&=yrz?%bmK& z%bjW=_CWXJQD7@Ua||gC#`=39THXF5P1-KoUWSmq0#kd@1EM!-wbt=4)R;f24E{6e zz)Fq>D}oQ-?!JD#u~D*J!7N4>63Ys$8N9=pU`241{)hsDu~r4Qfxc@mF!-w`t<@K1 zy#j}M!88(Ov1sDw%lT)b2Lid-3ih`w(mF&1t49k2&N4kKOOF;%yrzqlHa$cO7-lvl z-Wg~4EYHknO;gAkf(^r3i%!KUSs}A>UbpiG4;BqgnfVaHoKXXEyfZk;MDsKKVDRjy za@)IyAq$SI-u*pjT-l7Gu#ZrugEKa^YdROtu75hMNDF}DKW576*6bChbeZBKk-$P; z1+dUq=($afK1jKSw{#9&Hk?wE785}DlsW*VJ0ob$ifED+phjRS3|hIFig1`AO0(rU z7gD7)>?88ky}Bp?AUEQwP!6^%L2ESUYl-7DOLcAu#8axIasR;m*c^J*5i!qFuUn17f&DzIo_a2T5!sB-s5 zOv`#R+P4{CUH4#R=?S~RR~MQoouDwRS*S@f%aYQ$KWYzrC|R@)Wi{bz7`~)m8V%vg z*cBZ_aAP<;k>A)jJK)}PCU^xi79MDsHL&ML zw~i5w#myQJ!PXA`^(7hH(q8Zlb~f-#4GbQ?8(UiRH&eo=aWVScj8Zl9URkgB-AvPW zY`(1V>~dl5H)I)l!qCd(4<&)=;bN)mbHQ;EM_hf5QJ z?gW4Ql$ZqeKI#>(l8RC{=*oKmbV8bw*!77A7VF9or_)$tD zEIHJqlTH?nX={ls@j6QBB1MakrY9_dJuBJ@8CnrjJbZbukr-FgXq(-TwRL&8+ zrE3|CwK<&xrWKmyYE#2=Irm)6h5oNziMAq*(@M>SQvh!XLkSNOLYPCtT(gvhwR$ef zVPo;xnGXKyL@p}5zGE2U!kNr3nOXEE8pUSK%2Pe(p@j2kEk$c)7M#$Y&Y`2hk;2zL zIg!;PEeOXw@GuLutQd!=V-%zLL=R^V$a#3QR1PB@tF6NG4bri!@a(fj7p8@8jJ?ia zl(5yGWgJ$mEIPF}7#QRG7>D{U+SmHQ-~U4ZgS|JdggvQ4z8dadL#&Sa7*_Ujp3YZ( zrXN}!yiIj{uK}ChHl}fy36_7`Nzkh`Lp#m&uL$X|FqrM&R+H>S=eGm~vl>kv7vrPk zU$D~cfmr~MKySY!FWbEFTEoYM0N?PgE8Pmrv&U?Z#dhdS5(kOGa22|<2*#?{J$|ID zxmX^}A?E?OV^hbJYxUvqpu1jwU56>_$#dTsK?j&Fan)t6de*Ss6$Asq-Gc+UTX)#l z1&6=9#Z>l*g11hS^nPdm+S0NnWp0{K0-Fl<0)rZ|dNtL+e1iynZ&Se-{0azusR+iI z-tmp~KWul9t#D$fSKI6W)8U4hq*};7GZ9Qfbh&(T@skRUuX|8sK=3*Z(On=|hmt%f zdc`M#t2!WD-6^OLW-pi&uI``(`~smHYmDAlHKiK>th#pBpn@dj!S7Skk!{E%ij>8<@6ae*aps1mfk@+3}~KWtpl$F!ebI~ zafKYvc*uv*b5vo$moz5`9vCz=)_^U92Qs>7WL)KK37j8JGo+<}_NdAjWSP(8T1F1+ zMZUt|OX#uo0Kz{5B@Uc;e9eZTekC62AssXu1uPu6k2BW70|d`Fk@hxY1zrZQ&I5e! zV+0)$SbW&0(Ka@hb%_Or+WuPGu~J5mbix|eK=q%+_>f* zhNTHZV+oyXi(8cbnTDmJB~lW~tsarAxL{%}!nBRO@z(|XG6>H1B~)jcnfg#T;1)j< z%wrQBUc>$#bD*stxS$R}K^)CUV8p||AWuv=J?iDbIddfCuA$nT(fZ_NpQo1HWy3* zM#f#PrS%ht$Ff&Yu5Gk7H#e56)n(|u9xA)4M#NNo#H8vJ@wd&ssa7`u!vNyVx1huy zH-W<+{(u#ycifQ_`h1ss_#ELJ;W4yWRD3;r%9ZoP^GPyZtSxJ-j%?xxDzX9(-tBg^ z3f|Q!xB>gMY)Q|zo4c+&&`bp(S&V}|FnjQ|*@7K@5AKesGeDgxrw>16A}bw<4TKLl zdbo@TK`uXK6rqF=|-|kITI-Qf3(@TK{U-V8^ z0~7A89(TxtXXEslBWKe;n?~AeLU$a1&1AQ(glMxQ@psodf@|LSMKxAk5IkFJ1PDGA z+@3lD_sgME1papVpX%wickkXoJQhA*E?G#lv0iIkkh^MfX~m)0htt>=2WSldjLq*O zVz0}eUr~kiNW>VHBz>D~_{q%7vzZlSW0fA20tOR=A+cf>*4iTxUwV-!l-7(IKs;h7 zJVt4jQnch7<}^Ay^B|lbkBnI$$2~SS7!P)K8R0huRYrJAOb8X*8B#@-C~=1S4k|pu zS+XCegNwzr{r$^JuwZ0G2M`WS_~+&RT4rTz!sW!AM3z2{*D?@bl?B3l$p*i9yj~~k zXgACc4v_qE8ZB8Cp*LT|PWXkwK&YwK?wA*Tps>;Rpod;7j7yOq5^zz(g~4>rbkacL zBu5|)(3qD7%Y{}&ZIHFZ9Zhl;Pbub0fwgUa)mE7E-Xw8pu7b_3L~qi3kw^|qPeI$q z)P=Ot&uVN8zK+wa%kudo03 zv9l%O8_Dp+1?g~lYIWVI)J+vv$I89T0P(u!(rpZ-0|xg38NNCB%g)EyoM?eCAb7pG zu4IFwBVPo!X-sOb%aJ4+Ob|YIWftSKzEf^{?sSrx-R-*ac9o^LZnM93oJ1Q!)EtC) zA_j{RmyQ3H(}ggMNm5)8{}Y3YJf z`Iy3~;dd;75+5$t;7Tqpw>GP9D$5%iwTGgou0_L-pj?xpCcuBCHVX^}{*nuW3hU0t z7Rvd0A3g*ae%a|LG5Q?ndmb=&p&mEE2EhU7F*|QItOt?>O52Rb+O9W`I<4a)4k*+{ z#Z0p2&*3JC7|iiX2ft{{iatnL@L5KTb&vsGS7-H;v~_&lUF}~+W2VWo9(u>nc+-xn9ho2%i3mHNi= za%J{>>y8W9_rE(H(P80~X)p)PNY)qJZbU7EVpiRmRAWGNvnfkbfZ(^MLg0X~z~DbK zr1+bMMeA`DApPzggE^*Mj%Dc_D{N<&(J-1otm0q=b*L10dYUU=pes{3A_abAD_^XM zEs)XyIxt{FN+X`~DQvsUnJfu`fuloX=B1P}ivlem@CeEA*kb@N*Tq2J$G~AmX%U*K zn;v<9Q{clxgkdMaYwid3Ij_5eU3;9j+QLDrX^2skE{RTt`%Z&d0_?J^#7T0oIJbWp zQ1}X2(LYIq7l^?o#fq#siAj}Q$%+RL0E6!vWe-q{j|Zldmgt$!1AReyU6qAZFi`lu z=F$0hG!@W;u9mipuDmwO0$b*QBv#5em}L4O5)Putg!4I=mU2R5P-UAhgD8^(C*Z+F zE_cnb#G2ruxq|1xqjUbK=m*XF1JBdSv0MRkx|r5AAxQIcCNK+YV5+meN{v-uLt%tYV9{7-8Sa~bVlJ^4k>0_nG+fW`;WFA`lwMoe(OoI4E);3$WcXO} z=&o!^v6Qe!ixc^@qg~7A~%gO;Jy(R2z zsLie25cZ5ZmlCPu0&J=^H_ixz8?Le@^$-ni;F_aou1u$CM*(nMdYQhkD@#^FWHzIpRT=&Olz;K1R|M{(n~FI%e+YW;0f>2L`M zyu3^;7LfPpQ;ni0h`^NWGJ4De(O|*bTm^Sq{9kF)`Nbc5b9{XKUclh(=i3bl0e8d4 zweNul|8;YHeITh-Oy{`Ecn|Jy;4}L=b2^+AO{c2pbjb@AEL#$iD2c=eV!@n9XV~)@ zcrs?y*S~-N^JNVHe0lqWdT3_CUG2|QPA*zYD=X!2d(jFXYTmwF4L`7e!GWRfnhwhW zcWcKrSvyXDjR%wXHfjwUM4MI4E5Mrm-yeSbs^W|_NwtODjv$yE_+NAAen;?WHIU!{ z!K+pFByrtKu>OfLGp=Q)JmR@2jA+7+DrkjKS03ZNKL_t)gIfvjO2Vrqvn?#Sv7(8aQn30wvQ!bPCWa-Bb^n~H? zC=)8Fe=*SQJDE>OBCPyyGzuFD7LT;nq!fW89nKF&f}HPz;Uw_jK!jgo7reN5d1=$= z=Hgt@yMi6PO{y$e*PwQ_MA-XAhHY`3x1F$YV1P8NNaDc|Wf6IcKwtoI(H6t_CqijG zm?SazgQg~vhMCpLQZ_BI={8$+-KPcdn*DZXV@k{K!IVywKc zfCb4WjV@|wtZ$em>$6xf`V|s2Ab4(dG06<0_jK7K1cNVfzU`KyT#gBu_%NVg=Fbkf zoJ$X(%*bGF908Q0wiF)88i>Vg!EHTv(tSj*E2V>Ia|7o_jSELTmiEGSSfP|F0f9|y z9X|w=`cU}pJX(>`RDOqd7~pV#VJ7`^wE)L+j*l)oeHm4y1cMT$+xb961wvm!^3s8wrlPV1!kcIZGxBrqOpI z)9+A`9k^2W;zAQ1~ z^*W0a(NP?$2|1Rp6M})kJXNca3lokvtDSJw*$jO6B+%hruXo()K$t}ch5&2);kc1t zgWx7t*ANL&jI~W14iMb(Rj?`{F{C&O5d8Wc(tSmPmB-fMEEYzT;eqwZfT<4vVPN7@9pwHiACLrhU-Cgh0zr|NQ=MpuuZ%S93t%+b>t) za{E4z;V0$RaRq&S(;K~BC;W2E1`w7at317&a^M{;g6%;{g4+hbZC{F*6pJ_dAl9@G zTupRs*eW;^5dE>!BJiGS5S_)~)6+YHXh87kpMc=m*=aK$WmoGeGdO0Kw$IuLBN0RUt5-c!;iF(>NO! z)^gaz(Nkt!8Z&to1X>tSKOTX3SZZmGqdAl&4ojVyNQadXWjO}-pR{T9sH{O{aG0FQ zXU>D3*^zSN#I;yHjm{U>*7kK8ztk`q5gl_b!Ocjhy>Nl6Vbv)_9t@=QnKZ3R14e-d zIEJPo`UROV2GV(xWW8`6tUo1hOJH|8<=N|?5NW}_l{V$A;30aajH8PX3w23>fyu>D zrfLP|34#n2wFqcVWlL6v6z(K)1LsT=tzmT0mC~Zb5_RP`isn!n*jLOYJj&8L{zuo< z{iL0y(SrCvRg{rZOUDm1W<)!V+BhI}S7K$T8-zxq?pQZzZ|A~ny2&Ocd$kw6X)=HF zzUQ3hdEXzl3ydfqiX-K4&U2n~!uLLZRNp`{Od71gvwNLq%rdsNW`ztB35HFUo-r5( z**u(|C~`*_ZfSrq0lAoUX^9VG5IjLHJnk`Bwu)3uhUls#RWgfuyr`a~fWSF&;J~~e zvEST8DFecbk8pUNEr;hr6h<-bs*Rnc)1yA8txRgBGEJv6VR(>iSrVoL26qw&UlCQ^ zy(JjdaF?hYK=|V7Kk%{`48H;bcLu+!jW7T$_lt$WFkOK~$wI~Jn~IFOH9h+D_M;wU z>*J}d2P@JZtjtmrodWMhFExM{01OP?Z_bIPZdT-tCLN{}9j#b)g<1O1K|}N0L1}@UtL|@-)m`U&?A1AISO7}Tx14FnLSN1n?vUZz#ksE zA*+X{gJQiR0ts9 z*{}_Rne_4QOrvOUWQx@{Mw!3<`St6UcPD#$!%uIAjOG{)KMg-z)|a=pdP|^>bG5DR z7T&FGt{(K>g!e$J;R&)OsBIe%w+((zy(ie&ut3+sp;@5`r-QYRG?ECiwchZeLiwR< z4MMPy;JfR)%udqv=!TNaSZ0V`ks(?}=v2ypLg0kHsW)lU2E$OLky9C&@Gmw3HYe6| zjf9N@I|E+cCJBD6?8p-OkDf1-FcMxA6<&DiDOlEI7&n!8J{37J6zOMd8^*R0n+{(v z(gVj?0kPxo)Rcj5ArZ@zl*MW5q@2bDwG}2qR@E`L5bK3wb3*S zqh-rl^D|4tvW&{Ls8AEMEyRQK-#kkO(K2YsmodTPJe!pj4OtuK=eV^D*)wF~=eF>K z5%IYNV0b#SY0ygJ022-%HxI{jQGW#P4$t~@cq%1o6`ANU#vsemxOFCx1y`%HF^;^5lOuChzl={FkzG&4u{9X4=h1?3vcuhAuh0$R@>Tx-B(XyrET)6hSm<;M%v||@|Ky0NBjh!?P4_VAP38C!>a_a&cs(gMr9cXMlyaAfW-^~ z>`W4Wm!be|kW4VP#AxCsA-LjxtZ0j_WFsm^c9KktrV_2iC8TSW%^PjOA88S(#<0zX zi_QwPOenlN0>WL;v04SwVKU%~zbhzbKzN;LPOBLhezTGe#Nl6i!sJ(1zugB6{`bG` zFK*%5)+E@4Xdv*88_#ze4Zv?%V)Rb48z8uk!VM?ENBx_d=KKcySQFe#+U!VB0Y6`}4@^t^S8R6HxSX&3{u0!uAm?J!!U5AG1956U3&<4Sou7+z0(SOBG(kg{$ z#$#=|4?0mJww@$%*J^T>NO2-f6x*}<9X!7mMeD>`3Xe*GE*xJ2Vr z_yp%XsgdD@pg8)ZNrRy~r&0%90yp$inzx)6KhuPmj2KY-j37K~z*|U;Xs5z46Vl?S zyr(dZf(uD^uBOnALS(XjwUJ{_lMHCES04ic2N>Saev(RXCc;mc*FnLWAWV!b$dIK?q(VXX%S|Z* zTqaI?jiNYu)vkkOT9i0XGMvLG8O6g~U*d3j#)7iA8!YB4lAH59%NcWHd18k=SDXfO z$7#*3v!JcqNSpE6NR#2^`K9A<_<7ENXL7Q20f5h0qlCLyfzeo&5E~3{@DN^xO4eVf zw?(rtx5I^L(P89bVPT1%NQo|rJBJftT2|_!*A&wT#@@qdz$#7Pp*Ta&fd-dy-*ac_ z)A@qR>0wb*`UKKX$FYj6No{6f2J^P{Y1vJ?PS%pMk=E|E;_3cIZW0N%G)NE+vIe0lsBP(apnM`k|c!AMO)^ zTg}5C=YM3bJ}|i7w{RHq8W1-#l5^^8xcNW)S6AGGvxkgaZE2HdsZTgFAl5LLtHI#G zu1}wxMFt!z9|8!szW(_oKybj|51%hTUxt4Z;jQU^ho9>U+ncLf8kUA9%W7u}Bh+m< z2*Oij<+j~U6@{ilk7&@u;QdpLRhpWuFqdOLmSCkaY(Q`me(1=8F$(Vf>VSK9mvm^G z3|}W2eEpBRl{@Lse_=2OL(nz!71nNU0x`Fp{Mr@Ui6?_1hc~3upckIMz!dn!bN5~S z!l4R580zy&vS0LKZ}Ye)ye%ytKN6)2b=woJm+Ir;v>;cO*|ZkYbohm-(@u=1;=YpH zTeN5y0%ImTB~g0TSa2aCadb!9WqIEcu6li;HyFkp;X-QgRlQN_Lzs;DSsbMn1hJS1 z@74DL84h&#gfroPVjP?xIJ3;;;xr!xSueJds4GwBpO_vEMmt>q0+S$X1Bo~J$-mSm zc1Hv6X)$4@a=>~uX=z&$oT~~V$-5(I(gH5|IP=y`>{H>`l4wwju`?n(_=5oTIV%Px zYc-V3Io7Tvdsfb4D%G77uaH|Bq?Y(NX3$&BY$ioAe2JytOOApqRtt|&ElXOM;@!v0 zB8E2xqXw-B=8FU<3l~S-`NkaIxrCtsHljCSrSV0NX&FXNA}~ z25fncq3sXr$NFwC!#>~=9E&74$FtISz4VP1&5(g-Uul6bpWTb9&f3M70eZSpkFbmwJhxg4;QKNhw_kQI4m4b4YGrsr9ITl8xg9H#+O3QN9XT)%xaq+hr~2^N z29L}#>uA7IaDxHS&0e?jYjR`VT}LC<_uN?^!GK`xBxN|TB~@;2FNfb_b1u2Dd?U&F zpu!ihMVJ>$8%I0=g_rGlU8$J*ToL?MoCPl~)WhoypcmZtH8Y>JMD%pLB?ZM`tl!w0SF(TjLpQIq-?-+)TUJf5nvX0Cb1baU6`=gjD&S0 zKJ017+UfW)pVvrOR%xiz+*-o-!p#e+RH7M+Zxbx8OEJ~ef=z`Bg?y65t6uM*%_&BG zuxN=J##Lr{=m(RiPe-onTfu8y6dZMDtq6-IE3YGGH{trQt~4rrvT+{Uh!Y5BoY5c9 zoOG_jMM%J0OcnxrpeoZprVOYHsVK->@PhC^pgjaAyiW+cz1v_KC_s3Z@@v<|Dq zz266&PR|tNO|e>~P16mtR7-L+glH=kUW(|uS#jL+lEdhcuEgD8(d8fD;lgcMv;;fW zPQx^2!7yKky&y40a=E(QFceNSIN))&bFjlI#JQdFPFd6Evh6|5sV9Pud~4m>80|gA z>WD1;Ken##DXnvhhNIR*xuB7f1pMtV5ojoqO8`SBjKUC|Ttn-qGbRt_H4mNM_Q{z( z<)JT`xqtKh)>?ai=a3c*BAkd(!(#2degqtTz0-|^csjYdg3jomB>)Bueu`i$b6k6& zZQ#DJ1*3nt#iGKA>W+JZ-;g-^ju7121O^xIA{0TDV@lX9ox_d6j-lt@h@iijPu~!L ziM}4E<%jdH#_qzi$b@kTvoG+K>tKW2aHUUT919;fweFww@Beo{zQ6x(fZ$8g;NMTf z|AyaBHUd^vicOuWrC+WZ9Ossbq{YR`?yK;B<@nh3SdjqtV=&gSmj&asV6S7*Sh(nU z33ff!adaC!&Oo$Nsj#DAGK;I=EDOH&Q#yr)CFyls1^X_TUvN>T-$Oz$@wVhE;kgP! z%CWY7Zf2cHPn-sq{B|4v5{1JVi{To|gOBoa8m@F29Xpq3<4qi6S1EG_^+jNZ zjnDHkV)6^NDoGhx_VbQ;^#QKdn zwYIuqvFK%Cap1uijzc^aJx94XYBtH0lC*M(a5nGOq@2IocUhJvdmsR0p;kNb88kpR z*-!H-V`}AxH~X|pmE{Z0Osu7f<|3I7S&}W`cJDt-p1yX2mkWAW~Nf)25{zT9DuK__*59W7oKmoDh9EK&TzlcWHFh;GOCPY zue&=*BWhkZ&2uEfV!pcK8Qx9@Ga~X5y0_Sk(n(lnEf&NsO$K`ce~SW zcURcXPXyt%=&%8C18jK5f%vCiUvzJ~jYgefEZYUIs|wOOsOnadw7EH;B&!E;-c;Y> z!C({8x!LC%@ZkY5nCoE3qVZ}d{4(9Cs^KifU9E-x&Vv6Y(7IQK$Gry9uHrhUw9AId z(Uf!}XcgJT#y3u%&)&t5X&*iq6v4t;?6GhTVJCJ8-M zQe%nre$?do+9CMkoE{5uJ3uhz(3LH(2o?|A23 z7ujET^51REq4^HwN-sBP7lQ>4eJPHX3i^2xm&9BY z6S{R46L!UzH8DkaC=d&=b*ua zUOmNe+cvg-Lp<$Ek7dfP@Q)hP0XsyAqba-8|G>`Tw&fK;63s=h6*mw=MT3i3{na7y zcq`K1bwg<5$_9v!c~7h2$FMS~5?L@;!j*aiW=o_tEjA07>@Jt@G)6x(EDg)@xYk?j zZ&FVp9<t|4fBNe6a|=7bB*Z z*!@Xw&pxH4h3By&IN&Rtv08>?2->NX9~Ke;?6`ASfS9sUb145-|_gAm!1mUi}6^@<%n6}rowAbjis*O zmb!u~?croLx&A3bf<=RQ?K-;})+$&K{OWb3Sgkfw=~Y|?m%`0V;wY8Um}rD`l$tKl z0t8p1H<+4d3a{o6Sh+K<$7=G3r$S)#3-0Z06!w(nOdMVbcWLy&u4N}{xpwE2UX zhZPM=&yJqORtFN}@7=Xz)?s%6$BUTKVM!e(#Y((H*!V5{!eyH`Ln~cg&WNJRJidcS#Q)F($mGHq&!w9bj&l%eh zxNcsaUYk7Uttpsu=9K$J2o_DvyKUGAalpuv+MxE`LSDk?{Qi7irFA#}kaJ$WP|hBK z^MXZI>*33R?^?Jub=sT-|3^}3EQZmTw6p*x5c(bXzF=DEbcavxF;rQaGCzu8(aTK9 z0_G~eL+M&TYuuuAEVm*7W|x)}*MSO%oEi}U&r6n^RVaLCbht(U#vkNo)oO!*^uqk} zM$)Cuc$hXBQcQEef( zbb5<|T*iFZRQt{=6D=#DUeSD6aUJ%Qvt=k|YU#st3%nJF*<1!kj$Det&BE< zFPr4s_&OenW9bIoK!A2^0S+Gr}x!f>itnsh-UtJG!zh7WfqoI_hR1K<}5 zX-8mQa_*c~G?+uF-7zs%JvJmAs7?}UEGsIk)Z0{Jz4Adcm%kYfymOsN>A1dr{rcyh zKVJU;65RX|lICi)ij6Hbha5T=x5G`PbVDpVlG%fcO@rVq7}|lu+fNLDOaA*^i7!D* z9?4;{tnKX$jiC!rV&NPJ?-Jx$dxfQx25+qFpkT@ z!<1;nzF^6szwrkzMom_d$dm*=OyyCA{4Q%jY>QtXRwstQ$v0T+ZH5HkveDrH!h3u9 zyv0+^rAyo9(Nxx~O~Qm39QHXEt)7=<>MZ$!pUV$y{$TN78j@CdCx_4+TayHbH}yo6 zt%L&ebsB=L)=;_8@%4bXv6o3WSC@-vu^h7<6>`b7xyI7SrA+qAnfe-%inz{}-_kJv?=Ga3w-Udl1kgS`xR ztX%XW<**M1?y85$i10!|{SCZ<$(HO-A_luqdTr3_#KBnyv*_c_X$KlDp>W?Ym?-?> z0%yYTAK`rUViXs{kVnHe%quS(hr_Wi0K)-t0|-wi0EKYEwGpIU0f&Eqt%-Gt1kRzy z>h|#Lbc-q*q(}+5n1ol!IJRS$=@7_+kx3RkQ z4q=yfcf&gZvCCA6!7Md&k}Dn@bz30HYIx8g_8e7;xg3VR+|-t6O42H=Wi+&9_*Aa_w7F@qvM_Twj936v^t!nnUkJW*>^>>t%8Ba z{j}h)ABWK<)%xq}dA0fG6tNudzd#WE$t^z^-PuI2eG_`I~db3=*S%7sRJzU!ms320LwiFUs)C{`- z03ZNKL_t)El%NDqFdGs!`@x6v;?s$~$RF^5U>!@l|WYrlKt;?b6nInwTBEgN)vA7r3&X}TTrHQyu zoKcq`)fjj;b4irhMA|~7EuK=MXnjbV8Wz`_3u`@GD7`^(EHD_l>q0F<;dAQ}_R`^W z3@Mq`VBCE0C}ZR1Oe%yIjxM_D`4BrAz0!)*a{fwb95SOaR6LsZadh+Xh1KzP+{ zN`PghWB3k>ZpWSX?{^G^&u)}}wHcuG3OIaaQ|Yf?8T)@opAtsW7j`;i5QmMgb1-~- zLN!;w;lOAK!{Gz}aqNd_XM(S|&)B7*1kq6w&1SuAJ-vRQF@tvlsGW!ER^qon`U}Jj z57DC7SnzfWlh@nuVs{IXm%_K$Rjll-fc#ts3;&ea!F&T^??Og{8w-ZPfN89YH|iM* z$5;;CR@V!d?TEo`&GxjV6ih)Y!O;|1q`-6s1F+?JB7^1bxO>>etLjYMyvTJcXR^km z={l5H&$6C1%n7L@}BOQ z1yc3_yM1TG__O1VBo#CCv=GMo!yYo*TJGQGbRk^tc7e&@zIfB)>68J2UtRy5LGJb6 z*=I|cK>GUbasg{z(bb@}nV7p0+l(IjbyYS9gjF@ziI>D@S4Vq_rEiBL9UhIoVa=k)pNwS5 zSf2T4QPD*k>{^4N#bcQax@_Lrh`Huiie-keyRaB_gYxEAKM~Ocq?!+}es7tT1WBCf8p5z$S*GwK7$s-M6aL4wVZ> zyOcEv``d#k8&jkvekyvjHsX9-nf~Jul|51R+*CA{C}-2h(gwrPf@E;4v!bVUcd0bB zw+##~NnlM?SM#S9V{l&g?>2KR7<=Gz_XrnAhDDT}QP<2dB|4mqiA&bbApen(VY1@Y zsS@SVW4X{Qi-JzQ^MQ&i;I9u zu;5ZosRg%%Skf88@^Cfe&9?acWHyG9AFf;ZL660~;fM0|sNUHz3&>yNW z#g@2UPdGf>4p_5n0w`c`K;c^?P%{OS0U);kVW3_>R;sczX2y%rg5^pl(LRhxb%Q)P z#zN<}We&l0_bW+_McgG46NW7l8XIEzptud>BAAb2@)kodMTV0A!7a|ACCT2B6AFr~ zx;Dh&#rxTQH)1e{()-}U_;LGGI*C(hA@On`!VMv?k~wB4XP+)o6+I&|%xDe{qUYsH z+G}HaAvM-cgy8-jm-1+)0uM$`{3-+Oa|Ow$uqd1!IW>_o#_zSrv4P`JY|5g84qIO+9o& zbLbC@yaN2*-N^|oK71F$vaYW$fw}h90N}d3ybu7{neguJE41wTPQ6-qM*0>qFIs%!L#8tXT|w1IW7j#;{agr;!JeqtQ;ABk}0A^dmVGVI@n{ga(zTLaOTN2#2QIQmv98+Tye1b zl;Qx}&BLDc*r7f;3#p6%ED@CHj|IU@*BB{AITd3$lvz39JqBas>Co3n~Rb`%P!0-sSnnRX{_~&=_Ey?_QgCuj&d$0izt<=SgU1tTgY_< zX9{QsWgz&Vdh4QAAy+ja3A`UW+tJYf_cEXqFrbd@J_vGS`wr=7ONOL|HV( z(ZpglAx@eutMrI_VxLYkEE*&j$}YmS0Wn@IJuot0?-Ao82RpBiP=X|f(xEc3o?oa$ zH89=7P3?vw9X>mDI!q*vbolD|70PC=t~MQqd3j=e@wz+?2z+R%muCdx;ZOK$RDJku z&}Yz5c(EJwIsem#KG^S$hJgeG#&c{BTl<%n2%>DMinXH%yl^=GW}TAM-GC$zSp@XS?UaT!3Ka0!`OCWjwD=XClck*&Qu$5BHb1n zIXO%g11{DxE0j!7Gs576o8WFh;V!vwq{BHrOc=(O`cGmti%Gi`NbqtC-l>`T^wZg= z`NM)L%@aJmrK5$J$AQ>gfMA${VMzk(LmkkL%c4Pp=XZt&H=jS>C_3ZqsgICl?afxc z57MF^b|uBE=tzj;eKDvq>kp1Fe3~P>975Z*{>_hj1L1d{?tgqgf|~BlN7OUCf3sHW zU<^&Ri}5WW7eYHh@V}%i4xcp+!ka)_{pR<;gQ3GPGognEU6p4>d33H8t7o|!=xAs! zM+6oNJ~>{pE$|&L^~usTv{!dajICT)-|$25+E`xNUngIG5szJ9FbQ#Z_EKMQ%e}Fl ziL-1N4WC?GsW=pyx2+w28!`F8p16*mQ(e1Y&74h#Re>ET+&0c+j!BP+4iFsf0_Ki& zj0<-vole2H@pyL3nLKOMGdi*rF#@#4ZRG3->>4bWNf&eD>0*8!T@(nXv7W(nTD+qi zYk9L2tp^oK4$9IyNzg=X)Qxglz$1-N%ph%gmTYxR zahCXNv6+pgtvbny8;lqiqMx`aNR%}=kWjRmuD&S|e=T|1K=|A}N=;>DrfF18GjjSo z8%2u+>nrJ#ro*pEv9m7{|oRN_=T16U6Y6;Pn zpT)mg!1YR|g7)?%il$YLI9Vy7RwR5826uoRV=>GOk5!f?tpb{HJ3}wSBg4hyRBwk? zB<)w(1B?PeTs@P`mr|kJH-%?_w=ns07;%s_r z-Tg_8#754E!8q`i8ZeX%a!s7*)V7y8>uNG#R^!?6tLa6Jq4hOXPfXT5Gm~%;yuS~; z1qyc^f%grC0}OY$2LKGW+ijmSPHz!}8{ok8>6rk*vtYwhjH#S?8Ll8ZdU}gzW^?Sd zj;Y4#X%4+dQ}7K^M^y;a(=2)lqi95Q0D@yp((hKmZvV|h(7zt{HxC!YHzv%=Wkjcxoq6o6yEYrfq_(IvFq`vk1YUzK>Tbi0G(51+9(m3JGzRjzz05`EN(B zU;%<1hR1DdJZE%Rqv=saSw6vsj+Vhs=CWvxER;jjXu)wY6GoE>iu{(nKFMa%SG;0n{e>04hXO}sZ#fZNXo^wSYhM9_TXiKA<&_mFe zG%_NOFqXuEYvx)8I*isNhz3kFNA zP*KFYS#-YJG_uRtbK0y~Z;}n5v+NETiN%~tkMONqxn*I6A88RW z(Y(2q(cnV#DDiqB9pf~bELacIcDj%|no7Sy4rL|Q99ArAl8m;Z*2DREMq1h!dW_%s z=>G`2x}LVKEQ&7>+AS2D?%YYp)b-nJ|dwtB#%EMHRHA#|XS+7HxzNZ|9%fwy`qalxG zE=L)Rxcp$+ZVAqd9rDlAZkNk~XAQ2sb+|q_a9<OA^1&V3U)>GilLi%@+)n=dOSii?|Mu;#^S8%1ky?56>K_;^t{JhE zDHsMH5UCX>)j#ce~T_io3~_vzDj;n+NCdJ7_HRMa`4k&t)r;i-1 z@9b2>@lx)jkifd-I*=Mr84z;giRD7V7EntJK)j(vOG zk1RM9NheeomweS5=gxUNhsm;vvA`ka!dVvOS&~J^wj_otXQgx>oaKqqj=X7yLp7#m z-P;AhoXn&K;7mEx^=X`*d$Ja2j|mM#{_V@sZM zRkfTf5n?n5XBOO%6@49Cjdf1eH(YgEZ^P_TDcYEfHnVxSs9%^lmTWAHSZlx=$#FCg zZzV=yL%apU;5u@vSaP&r2^$_n8Gso5O(-=s04^*o>j8tEP=Rc!YposRjq_uVZ!}DQ*FVg+K0rFK&ug!wvbe9o}CSsTJ81q z4l(qEkokwBFk$$b5NofyWWtvx&W6Q{pK(Zi1?#Yar^CP6VQl^A%xz7^h5^H4ID*G& zW8(Br7z{FUXme>?HUOq;N%!L5aM*j-R5Oy}AX^=nnAOz;8b7w#N*FHV`I}9Ol|0t6 z;`vk3G;>Z{1LNBM5pt}&uAJ)CybSbey}wqfRCt*>Dbyu`RlLGO}^lLWy8 z;qLe>Krk?+zgJ)CBb@T8J3!*-(Bei1+uR3Z8@yPbm>4TbdA9bzxC6dDzdiqd$9EY0 z#{aE6EIQI%(qQ)l$JMXK*0-NNO(f;|_!SWR@$EM7X6-Q)HjkfD`22{hmk!$sD|eMG z4$$M`waZh!i*PC^8T5;LmL$)o3@mu`zDvtrw||ffqWiIpkpk&o-#s->+jxhi@rUP~nyNQ<8hG3`xhBT1`(t`MdIZN3-W~-UhGd%f z%OsERtK8WHuU0yvUd!A7?o|&T;8zMKBX}$lipz6R=R9Zp7Ia{L-*9*Zo8BK_4TfT? zY^vy7nuU)KeK{QW!#_kE=2%*vVH@lj(Z$3LT%1a#(K-I+OJXlkBJ<6R?`rz2tcs+w zA+z?~d-f!KUd;`|wo<**ZkR)HF=fY?3NxNV+UNPqNwAkVz_i5WFLuV3h4p0KRatpa z($u`gOFP9cu{qf4iK(hmyhf&OMk$`FUTADCq>_bWl@hM&F(0PTGSOC6%G0DXbvhXe zS6S|05z?>^TX|Ap%k!b#9c+aT8E4OsWO02}-+o09*7c(I7a7tSonP73lP#1O+m2U- zO9J5n!?m1a%Vca<+)4r1bki~$dC3Boz>9gbGz*jPGK00{@nA3$crgAFNR(!jWoZ`4 z(jvn9Ik*E<)jJ%$No2L*!CcSmMT4b|Gv|D z&yeN-azKs0T8qztO)D-`rW6b6xQ`Xud8BmPId#J}WUF_=q$2~a#6fh$bXXNlp=)^{ z7PVPYY$bGKFKS_MbP$c@+OJjjB)j&jS#$Xn6j`H9L}USp0}v-$VH_xAOPWk=(1)b}v9U`Tg3pA8T^o*)`af!>G1F02PQ&jk+-5ImTC z;@;Q2L=M3hu5G@Z+}?-U$$deVxH1B=FoC|EM3XR}{SFIe1V?1Ou~O+x9!>daGHluR zzJ2@l_533+xK`QOSX-G}k=d0jSmI~=sa3a&(m#AVfLDOvLmR(Hko6)@hc=I&bpwY# ziea!q%}rz8VkB!H!5k_o)GpZP(BlBXhPDB9H|@eEE{B(+fVeMzZ8QS;#W#QX<>iOp zcApX{$;pUGErY8?t%&Ku;u(OC&?U+; zxVGO7ZsK^yV|G?i3t{S|i(WNs=+22WW2~Yr2}{__DDRdnc?-Emm}Hm6-R-_G_;Ve) ztSv#d%dUQ=v>7Fe)$9pFEY(s-SbYc_UXU=GxU95HTq|?omI=kA)G`3B7OD?ZRkS5V zF5W3If?67DHTL=(Z_hj|IR;zp@T?5P4-4MtKs*JKYQ{|l%hn~f3S$dgct9zb@nFMY zG2$895I-;mTmT5G-^4OJ0thq2nY?CP-PHxxR?cv#_ijX*r z=Gz}qXnkRn){WENo6GCnn|NHa=8!hyYh%XOmgE5#W?BK#v}7(8A%;q8G9C+fDT-Do z!UcssmKS_MO3Wu-O{G!E$f&3qOK9*k0s{sySY1T?5JM~+s%uTr3D{=?4tK4X%R+jD-uw!3$EJHX{Oq`yNr2#UZp<@Q3Hj>v;L$!?WMQ>+bH$&4$%7tTG_FVd3DYIwp4y6!^#Q z4kS=+fDng=5FuDes(5_csamII&R{%7O*~k`pJLS@cx9~&2sU|@-uWRX(wuUk;Y*Ti zngtGzeImVoABdwu>p^ZE{$U?)+zmVIPUROIa$^l(Gzb?H7*3|rrTCV4igdAgxk|h05Lz@nH2H95{G2XeJDD)eR@FR8L}BT&R6Ja= zzGD8c%xVsSvegK>3k2sh$3q#Crk9?6RVN1b`=7&8#Psx*g-i>i0|qaU0rOVz|nu7xj_Xpd9Z4HZN_J(I8;`2>}N`SBmmcFEXSY{^XSKeIa*9CZAg6H1Qxx_D= zoIs*wX4rX3yZg)ynt-d7f)ntO>XvV$#gl{C#VL15)!?3o&??E`T$1>0EKLJ(>> z2*+`Bt%H^Hh618Z@fG8t=?Dh3?Qj#^a~ezl=5a&-Zju87f5ZFtS68iyiLEw-yjTUV zt&8%02J+Gk%pr7rSzit?{Zsg_9!|?x6<-j2N z;=goVT~Axv6~qUdPh$gi55aJ;g9W)ZiFHgxY(8=m<${b|inx&g2_T5SPgY9I0J+x!@BxDgwbJOo$68R3aDd zc7rHgm=LKK7M@t89T}cl++E~UG;AOFpvt_LrK1GP2#fPcV8rIlk`zmC%gQHlyMy)y zKSA3h><`D>*8-+gfsSU#!W?CmN3K@x9HE?R@ubdECu1Bt|60G&)fR%y!JC~ zPh14hg4}s)g=zR?zPu@zszNW zh1E{;`RhG8#@WaCcfcP6kNj<1e zj0i<<kLF(10+l9XcN;J_6R1#5E zLP142HV{=zg*dDW#AO{Ila-X8SgG}5J4xD=*b)xhn&80x(v}wDYSot$+oX9F=L?Pi zyMN-bY#<5v+BleR{6rXGhydb~v&$25-PIM@2wq*SzTi%973)c$#$_>Jb(9Ei%1jto zoXOC)bGXS-Fm&jB7Ek^aEmghK{eJ)b`(M8fzq-rOS5=^g@lNmgPzJ-H2T9k0jR#LC z($D?Saz|kGd^m~*z8AxY1S=T#Z55f%i|oVM37Pp1LE!uDeRqAs{hXK~1#z~j>qk|V zOEXp(HYAJ{_O?2QK;fQ1aG&E~zm8cXTs2-ahg)9l-3M24T1@u zxo*T~E9+ph@M~2hv7@j+gIicusO7zJev4d z$?Q-9EGVpZqUa9q*vhA2lPMy>VUQfpfYWEzEWu*IEK19wNl#gGu+m_~T;afp1XC_b zWnn_N=IEL-vtXqdqEj_%=Pkuc0GVHqUo$_^$`F4)X=;OPOQ@Vx<=UpfiMBvQ5A*LO zi7h7UY&b;#M^f~&VBJd!n@bX*!Kg|Z2P4U+>DZi@l&w^WC@vIxk?8wMI+g4b3cpPW z#6^Wy;l0VW%F&9z8kLy~6gZXmtDF=d1q|Mq(M}~rVoi;d;9Up9GdVdInF9jPVkq3r zsSqth7>QXgXG%FG!s5xY=dUyuPEV@>P53Ppa;5N6@N%@+qjf^e$#7|T^Zj8a5X{bo z3rNwKV?OU^3iy2}Awda84D176F+m#j3|>5b5D+#xtUfJ1`tADi+x4djB>r?A;qaU5 z*UX&e^6-IV`eg&fVMXEbxAB;q*d2=>c^!`*&vh*L$X!sV)uW36ea{5CpM`reh_co) z{}m!T+JL48aJWqj<`DRpL>LdaW6~Xf7*x3BBXe=oYzcc-92LA3;WQ)}(GF2l2%b==jb+zlC%C~;Feq>x04!p(!mw>Ax$i+F#VaMfYBZ^E4|$dREjru;1m9jb%9~}k9;rEMW`k8Z%nX0YF{4U@ke+0eh&~{ zzwdS{TO9xL3PYB}a0m(JPmz#Z-dpMSGl#()wF35!PQ%N-M04yTDs|sDuUCJ4>tFuz%WFWelo|^QE=x_JEqA!6sH3^i z%|%)=(KyH33*E44#NZB9m@8t?Drl%j_n8(QDDgtUgYeYut^?s1g`ZGg55l2TIPzuL zx{{RJCyC0@+*Jx=-av{&L`Qsg5?|AJ890KrbT+lW0*P4QSK5FzCpyusTd2-3Ml&5t z8VhwY%n9<8txwT##mQ}IQgIU6_b3t1YWj%n8X2M{zAD(*?JOIG6ZyPm+ER~})HVp@ zY7D08)u~e9RMSCN?LbW$R%u&WLY-00+p(iUGC^525PrjUNjaUZHmvz;wNjqYITwYmo+1cb757oTiPrr zI(5v0HDjyY77`perK4~zA;H)`LJy%T(18Yv7JU!~!R_YY@~Q~}+-b3;a1|!3)wRlt zwJqw+)m6h?55e9eon2gH0AK3R7zJNsnD1nKl1TGK|F(Z5wA4(?=bi-*M@EDNXDxDL z91VI6cjGbf6HR)2?tjkbL+faW5-CR)X3(PwJsh1&n-boUon3(jKavFFrQ7|3gN(He ztsXG=t+HZBiwiOTL{t{&?`fxV)E^#2<6zUFNrits)ef&r`ZSqNx!=pAeNxbu5z&&8 zg{P$U6gFzvX?xH(IIh2a3xHJ?jB)U1_iW^!V8Op(Pq=<_jLylMo7ZpN9czb(^d6NZ zda~>TD5=JP593Rq)6juvJR9EPTCfx&VN3x!F7Em^pWPVKG|l)>Yhf=~Tv-(~F+79J z`AJFHoKKgW`l@a63`%L9$TS;l0YMD1QmWG8_+Js~$4~gP1p_W>- zCPOD;$s*t6zt+;WyvVJNXMn4YeU;u?bhIRLrm1CmiNrj)#5`;99<#pA!A>X)v-7rH zrNPo>u~rhCR}@Z&o!jVEN{Xolb1;W8mz(Gv-VPXihwTZ5H-id;?GnyYKMCe)Qc?M{ z#C>cR6-bNHs!%jNIwv1sl?}NlNt*NEBB`)OQL77G3p-6^z3eckG zK!%rQ0sjSQbtuS0m}^d;yx_g_g3viS{ZS<>Y0-t?$SUP3hQRKYP~?JlYl$fRg1v{1 z2p{4Y0{mrQl|!@57pprvIFYTCHV-8^Scvk4uXMO{EZ3@o3B$Us^lufV;nI=^quKD~ zb%emMcd^#+gKiI>iCLNjh66zT!^7Vdh9AB?jO~J%qGw0_QJ;Nv1F1t|_7${f9`#^( zrV6ZP=_Uy-SuoVLCMg3DxY1BuPPwr|;bTEEtTWZfI22`@8o420ESpRSJ1|Mr!HDv$KDdCD8J;34}OhM`q> zC@sQ{27hogc>Me05PZ18F`30R4&ij6kkS z8CBLw!CH-}AGr#Xpw!}&8xMD1@Xo4X@Tv>4ayKWJY&EP#;W&=AIwc!TuQ?SS$P$Y} zfx%M$-e2ySRXDd&B}Qgdu?1e#FnI|#E5$gP*;+NzMpr7uPS`ncY5ohh3G1@Cw7Is9 z!v;`zHWACYzqz>vcy81-aY$x+j_-?=CT#@`*AZwrJ0=YO%O=vd_{O<4J`^B)fcWVH zC&F*v9w5^4JkF%)9j2LxO~!bV+qaPpgAh9s2Qo}rG@M?}CMpOv9!$E*R-{&3=C+w@ z000IF?%;6aZX|hwTY_QZ%-!~t@nHz1+xv67TZ7h)LhqY04}G%)zOw}`=F$7bDB9YI zS;^FT)`E4!(u?E?Rw@^sUEV1$;Q+ypF^HZ71eP~A0pXD?gt-Ww?5~^Es2hZwJ^qVZ{qP9?-dcM#Mai16Xo7WB~Li`noPtKeSje>{Or>A8vIrZ4~DdtXnW z+lf zMWX2MrEd-}+mO(TQI<@#ghH!k`0Fsdm|(FzGoNqa&6_s>;a^FG7m8`Lr*ya}IEH80 zf;cNL6cD|T#zzCHj2LGwjrK)wk`SE~8|Fo|p_LzIwq}hx;iB?@g@E$a8V$~3I!ER! zVQht;D8y16nBr&@9fiNSH6CTLAK1E^*h@HvkCIY_M`x;QARc>LlADl(zgawMkR)r_ zyP-78rU=@}^Rjgs#yCp@^|GwUjKu`{5MNe-Cc~N z<#U1_%SX$k)m~Gq?&1>E&<4YD{W`qH+)5&`1ktNjeq`a3dTj24X-=bmw`wIr-3ZDe z!bg-PQ8yvNbqx(DH5{Ii96Zo4+Q!wEzi}QVR<}lnDU~kv z!XJ_5fvD-%l4yCcl3g8OFwJ_01JGfnS}OZe9S`h+KYx8|_zn=h{et(1!a6)(4g&_i zXWwDRVxU#n;2~GkWVOu&+)l2$ZA+>Y2)B3yGPRbm$X%r;#KtD)iM8)^a1nPnW8udz_Vm0d=`yK?AV$P zd%twwefjeBI-H_?w#x$$;eO+x`j8024^=ZH3#`s}4vRoG_r@ibB#N<)lt&pZs>=){ zc)(q7971;nwi1>sOAxFVS7$s6r%EjI1Cbk5bVWpWXVtyLKw-yJQ6cf7ukmL*_txLi$60|?`{0Uo8@UDYTN z(7E1~P_;+7(GXeogHtX z`5VGy%z4Kr$4iwJqAc^HtBXrjG!m1^FXD7y+4~)U!u-8hDH#^m7OBiyG{RdgHNtfx zj-q2uhw#_9@Y34aI%m5sP` zZxczh)e&+@q=y)w4@J=A z1nxvEHaOO;F1f3qR(1|mBXRuP5mRnE7*m`A01hu9+pl)17j+>t(*0!|LN2~R?0!-7 zknmwM1;+%-eYb(cNpzql2qTImh@R!k%;-m)K#!h{*#A3{9hlo-45QP1u%~oPPEW^& z6jwDVu)4pgYlC3N=4K40T>li_4%fHBM`v<6X1mnzBw+AyfZ*Za_=tMw;g~6AVOO&B7F9Hy zbgyr}e!V{Vq|4_|7)AH*0fRRLzwpZ{xq@h;=#^%@H}zBw8%WETWT70Q!BSuKG>S&% z4y0H|CdMNB9q_7Sh0Jjd9bRy~UZ=hHP?zS_V$D$z#vS`|T`zt>%tV6vH0euUIxM{->1^-?Zx%s1k1-!}FuraUGmx zJ}A$W`D_R*qO38rcOiL3h8c`<uuN#cLp3277+eb&%mP`cIRiTTF#4i^Uc=&ROr+D@u=P3+ zht02q&@5MF;XPpQxp;8=(B*GMbft<71IAuo3wk3E-`x5@`fN5Fz7KEVn)B$Z&XvVN z??(_0$32>mHF6W%B@H%ujJrB*y%|PhQrF^fiM+DYb=oY)(<9Xh3qNu2i*3OUzYNNn zC&BynZEHu@ws((IxYKGTmjZ&R#li?W0PwSbw*i4imW%bw2{5P8xF2(9+N(~_Pxse} zzRgd7*v-xD?SQVEjg5x9BN78>#Emn34otIt&b^!PLx>u^v55gN25o22qP-nqn5381;gg|{mCZNirFkE zuoMJOb*mnppuYDA+Zj`1iTENzycJH_klU*BOR5m-Sd4EMgXo$RRLY|)5iR@GYTv;a zq<5uiiId+qV$z0XZq#5&Y8dxr#c)F-=~{z(vwp#V?I>1SSy}k-Az<*IgyD$7g$3!G z4#S0HEUkLs)VGwd;leYlC9%n(%U(cO&hG?46BqL&+QU;G?Yo*sn;uK21r%9X_ks(u zEcA+hL$xvB{RvrV=9A%ak{?2?nAxIa<&7e%1YIL&mc6Rb{sG>Lr28_HKIdg0oo5ti zl}Yc*%LPs^$8(Ih4KBDa#{%Ud*3uTktXwc8wj2#@h8LGu@iO`4-Mh)v7&)#SNh7&( zX>m2rzI$@l?F%*x^kgg-09d{x?R&|!^O9E`Rh1?!5Y~9wGqPe*2Y^|DSD?byf;&c^|K(d|yP=Ml1idgBS=lfq@jFD@=% zSUPt*Qh~xL7X~;VSX>q(vktHnJ^&0KynYP^{0#`dwq8SJS6*IT1BW9Fe=*~5V8Oi1 zfWv?Zz-=#}aL;)#jxe~d)4d8`;Byyl5ssSMp4QQkWJ~Flq{J=%UfWcroLvXZJN@M} zu+UMvC5aZJB=`2BEZTv8KVidB30+TYNvte(Np!oVRDCXln zhCT4?rWEii)p&c+;$Iv834{OY!&^3*pt(A|j)9 zq=x{=rcug*z#W}Ha}TUHydL_5Tv!UaIvhk}6wRC6t{*@*ESf`4+a|_xP}pf~??|;^ z#r?cw4n6Q^sdiq*&=oLT|Fu@DLls!{3^;KmkA|&w&_=fmgIl^KmKl&|!D0+x zC@OX=VivG?I8BD$64`k5dC?tQNP^Rd8PFWv9)$ehSugO*0?P`Oyo!2838@n z2V3ry44aw!T=H36s%h3~a#RWrfZ@0qj+rAZn_YD=M{FRr@J*V8GZ|e!D;#Hh?}Jal zlz)QGqlFf$BrDQ7CE3$1y+{BrU3Zqk*#qo|Nr~qm#ipYACNWxp3u{`I zv^Y$qTj}GCfbmp_@T-rHPZA$JnNMcdv#XgqiqGeZFqNJ!=I%H?)1@7m@JQ6r9)pqB z(E#wGH0iF>ks8B0NyoGuuSI56tiHi-jd`csQ>p0MxPFQT$Mf37MLlmpmU${*91g=2 zmA756Zx0Sc*p|V%E3W81xFEqCEl**ZdC!OQt1)%>+W(6Ed*F* z(TIhHVd(zSQ((G~u6&@gS7Ti!Bcc~H1TTKZf@9rDvxSf5U^2&5ToNrP+Y7_#SaGmS zqQA_bPq;ase)~4f=S7>>cHh#S;+o^Z4ugN$QKHu(=WF>`(AOW#4s5z;WRcSm{13R1 zxDD=%y4sY;VzhwYIOrXiE^Ngwze>+L|xX4 zpG0P*?tc)3zj`XH^Jvd2Q=BtLUW^rM5RUtmBxssZk20Q4#R;)RXeq)*nRtP)wJAkr z4yK|j;UTutrIL_VLU~Hv!7n32;EbXk@IEk!fq|9*_5Wgncej)jcR zw( z5SS}t!|OQip5OW|1>u&^VM4D$acMoaD%Q-7rI<|GCer^@udw@FhU8^5>Mk#*pB$$h z1dpH%e)xEE{nni}zI){FuAnY#6s*A?k zMtQR%_Fr(OqR6ov3WGdpkvr0p3exhv$=%|H7R~mlnr zWFz4|;SM)&F!88kymy$$d6XoDL9~5P$uqi(B-cBDJpx;4FvZZ~xWa3Mj{CDLS%M&XvkDfx`5XW& zbl8icWmc_mmAq0 zwRm?wu$$WIF_j3v4qB|&Ct(h)36&(pU93J1G#$FDNZhcIboW3C1_8m_%{m*B2IHFO zp}~J|O^@{}tia9fdaF_&)M{sE2&w%2s8*NcjY>07jU>4Hw?sO$EQp(Y1~u7q-PCLs z2%X)3QZld(HM{MUwI1r4*RtSNtExM4G&BeeP9Lja`FM3LE0qf30jBuMmcbU!K@i4} z8uRKG)^(^^S+Woo_+86+mr~rMl=}Yt$Ni759)&5*5+p~)Y1{*_wW0|>2wP89e@7(#xdbB zL3scD(t4;r(h?-HVtS7v$^K9YH22K72V-v#U0!$#Ft@=ab0%d?!R3QGBr=OmUlBt-~FcdhP?@Pt=Dgt_u&d=E1`QW>JS({;%CylB&~-sjm~jF z%t5qX7bQ0<7LMgWxXf8}xx69g&0W;HHwx%T!d9pFq{t&SXmCL^J!MCF%jPzhiFz8y|j#?c<{mQS4ggQ!Nrldj)qro7P$rvqbv@r zvvzTqw*ctvM$ERPwqJqUgM>88$3y!s@mbT`x(XJDiEJ;m1hFaZsl!8w5h2qZ7#0I| z>i}N_jL_?hA>;Vwd|b#Eh_3EI+VYbtix>-ZSa-mhhvgd!IpSz{$72y=$r#!J@Tep0 zB9s9L0*`u=`NGD|_m>I%vW8iGFcv)1NRC+ur<^^?hraqhrG*O}YG3+jEX821fv>p> zzKWM<>8&rX7yp^{M5ccF@f>Z-)vCR&+1YvSfB_ES9Z?-wF|MLCX)n(z#sVUbbP24M zBnDEt)9`fIIe{a%%T+MhZ@1z5k_3wz7$D_2CdnVbSyp2^@KDrPP(P~}nnd{1pjkhA z^9K2pZ_a*u^V_ReM+3Y*l)m8lcC+cjpu=UNv=F=QrXsKivnsM_*{Ze>5RK(;gU{T? zsn%R#5iC!|CU?Ls?t;t3_Y0AA=!-}X`F4O7XVW^5W~Wm6Nzv=Da?61R`(-fXSmlk4O}Riy zu=}W-L;toogUdPA%erIshDvKUH^LUt`t3x>BUkPyj%WwK@D04l4{V<}>V!{}|p4@5pC-d}z~R=@3y4 zo^?s(ke%-!7KWvEDM{?`J}TIfF3u;7EuBL<7M#zcB*`Ifxmad2hir(I3GdB|1ujYU0Eu6&w z*@*E~teXQ5+q?3n;NDO17aVx;-^Fa$aGZCiHU8MBZf@nd;Y2<()~3Z{T?n@rm$gGF zdVZ_Z3vQ$jo(}tTj@KumhJJk_xQjTf)3dRJa=435%#36tn77>1q}#?52Z^VhaSgRd zH3UN+)*Snla~MP4Iu?A}9Go51YBi*D)IK=~W;PZqM%$9qP+fKEROOn3H{M~Mfe{HK<3wkvA_!|&=Dzh--HNqv>Lx#p>oOge z7e&rcEE`(mC=0UyU;*Jux!>o~B(*mk2EWD{v9%vnj5@0xx0b`>O2FW4t~asLK_D0a z90}4QN2?mWFcS(Ka@)cliQ~+UnaDIf)iP|Q2yqftnEEEAG&clRF*?nx^e_#;oJG8t z3%xcB7A1OSA?zj1u#iF4n7OZwJre~FO#h^b1&O&vIS^l<_EKYjeNeBXx5rh z%@cyuBCCA@G~VT&6MKbAnf;&Z1UjK{D@iPP%R8pi%(pr6FU0L(D&ry{b33V6JQ|-p zI}9E>_;rN%6e#=z{pe_pQZ%j6i;ITCw09LO3Ny2wC9W*(NLICO4QI4y5rcQ|hZUtF zSi2jH3TNieQe##@Snx+rdp#7>to4!a=+k87@)ES@q1MxXn8o=gK)B)%_3biB8UXS0 z7!C^=mYnHwxuQAJ0>6b&o1_3-@aY`TpjQQarLS%kqu?bmW4WWo0~Cpc?}Ee%zN-O% z^+S!7MgzamCFp}N%rq@gr3Fce!#W)HqBH}ey8vRORw6R1>yTIqg>B{d*?sl%xBG7f z!V1I8lBO{2J~Wwp8OnbIiV}kq`+Fzj z%X&VL!|TmR+Gtjr)ku>z16JLZf>n{ON|?3Ce~P*)9Y51bHRCY-jT@4p1nAs2`0=kT(%d$>x|Td@dFr8AuO$bNczxJecNkLb-eNJDHaFQra@e%-cM#z!i*VdMKEJ*DB z`5lDiV4(1U41f=My>a(+Br8b=R!|u9=Z;K*VLjd-m`ShKJ9I3V)~l1&2`KO#=fHO- zTL54@SZ|)Z|4E=0@sy`~=xC@S2AWKoIP88FtsCi$w@2p>G#^7(;ar6^6o`w%DWmL2 z=`2`s)3p`*O?X8%1cEF5eiSM>KW`vhA@`k)){(j%UZoy*)cL z8tdj10WwKLy(4jVh6=b*VN!9+t2E2C&mCb!Vp8H9S*%wj4u=yJ%57_yF`b%aZCRJ< z&YBy11`qBMf*lB-!k+~y{8okM0_z``25rSjDm-Um&C1GjU-1)Vo7nb_Fc}tI+L6wp zCPM>@3-LiodQr{P7zmpZ?Wr#!D;v>Rcy3PCoM3z?7Ex$~UkPBr5TfCQz;n$m)f&so zC_i#^7#Y)!2RlyeNU?afsTd?8VdkyD!_$_yk3qLr>MO5Ya_;T~|ax9i74D$fP zrbT}f5Pr5QC3k#QS^Dwn@vHcyF&O?dk?o|XCjjpVCM>#(T2C#aaEn_Q(q;hLl_+tx zpEL!+FAl^UfD&&W5=@(+sW1$Do2)Iadp_K$NB%5Rp$&uq!C=AO5&f>s+jetHF;@7x z`mnqZ?Q0o?%8Oooh?U^+{yOc@&|txW(T{}jf|#*t3cadEI|BSW5Evx`80n8LClFOf zlcBpA4tvWEf`^llE(KrEjYY`)<3^Nd7W-aVq2zUBi2nLlt%Lz_zj6Y6Grboa&4RD5 zZoCcaCM*OG1Ma_r@+VDN|ITyt_6?I_qwA4Bt~-wi5@KD!h*v4j{6QYCbiSsZOK*}CcwM9 zm;@^ezEc$%=-O;rrQ`B<@(O8`_QoqjO)CBtFcfybk7N)mN;EDA!$L@O-{!w-9*l9X zz@EZ>-*aJfIIL|~)?Nlw>fQ2;;jdhO`5ybS90)Hg{E%-^@}bcd86BgpXULxZ#&cv% z%wmZ!7lf%wXCW4=l%+ApO^o`bSrT((`JkpPrwT!GPOy-h21jNrf#Af-8CV@5Va};f z%Pf%>vzMV{)r7$%R>}oR3U^K^D${Qj1Zd(fVOW4znibIxQOZL8hPQZee>i1&m$Ld& zl9`EG0oeXnW^>s>ai&R_!tlXl=X&R7XJ^3R`_Iqr02LmOFTaciZ;Oi>G+mH=CiOz^ zSO6tDlVHU{WkcDPf^}@n%#KCL(7-5oQ5ub~0bG=0u22k#T4h^RvOC3{xt-}UCB6E+ zB`Vk;($J#a@d2NQ5imfwAV^%O%+4J(8b|Khm=jf6x(`bN!WluBlVCP95Q^0f?P>7b z(((#uaD!_qSW3cD@Y33v42p@tt1R0g2G=a$Fo(gURVGI}a<$)bTzLHHTygl;CuB{b z@WXFE>TLLYJm%63P*`x-;qvWm+*JH9jl+%(f6n9ZufN_(<&y*5Q4grmyPz;_8Z

8YBaqMbvmW+nS<4>&>$@ExVXR^mCII#N`0)f|R8>{=C z1;c(N0Q_Na@ZkU`ygzU(xTh?5a50$-YK_6gl-_4!=&Wk2|~Qh}x*0KVZ|Y>Mn3a zZ)_+Eul4`iue>tAkw}z*=29Nh5UnB64tH^d9~w-UB$%^csR}-I7>t!9ra~+34t!K) z2P7Cv!Qv$7^m=u~VInT$WOVW`GT^(wh6P#MTMl_Q(cdr9*yS^J66A9G`5dlF``1x3;LG(Wwm43 z@VBqNXquy6(>3jj4rhh&E=@b3qcY+CwmPDJ(Zk>I-sqe;+Q(If_^g>QA5JY)I#Qtx ztK(dc#E*k5veFB_si(sn{p!p(^^$E88MKnAA#o|OznXR*du4h-IXER<0xcZPv_hx4 zq^r*@rl^EIt3)$AC=+{6md8F7r%McLUHF*m2^luk_j=AXzVU@3zT7L3Ow z5L2_M(^M_jK2ti;%_#xtQuLZo&|ZA|^x$w4yLJgp~&C9m&4Zp=$l* zV7MKwRYBpyLm)5adqRq}1E~{l8CShFjgFhTO^2ICghPFypydV;xNQjB)?7*iVr>G2 zTU%N$XTcm#(4r3m2#Y;>3@_F?XTb>IkWsLF=ayc*T7ny^x}q|M$R0;W4uA&-cIk~j zO$1pc3c~ zqARB87c#UBgK-&+E?Zbc+Sq*xAGs9DSWu3&v>h*7d^{P;5~1%jWS z&z|?X-7bd0jtFb#5^I5@7Gej$8KXHe5u%|(moo^{NkL*UcMAAgrch=a^8!_i$kR{| zmX4!52rK>;WSzJehQA*}kzs=i#0Alor7?JxW-bT9GH`~|N;dOmc@FAec8+Cok{R## zaCtuan}lc0I}jFQR>7iP4SsDbT;MbqYre}XHD$K{qw8vW(ps~q9zm2g9Hj&)Z`u-X z1d&1SSg3MSlY%IvgiGRR$t2Uvmznf7lV(25v`K&bJZtT}pYvcl6f7W8qm*^l-s>fg zWiYcjJPif`Rv?y@Fs=#?+ZP!WS3NRUrHKcf!&BV~3ktW}vy+n_*f96R3u`bO18k6l z3_?5?J`8Esckfps5)+1Jvv5C5DE|J*aCjj20aI|I$)Yv5v1~1u+E2*J!bWHm{>g6G z|5ZLeKoEXSn6NH?!(a~I)X(@idv4-viHtarv;9Kb=oM>s`jVh;ZZhcwsw;zyp z^2m#HlMJ%|pC{=yN#W?LC&_$ClVluyp#aR=)6uxq0pJ!!cg;lTR(2q)*_3-P{{5oD zbt?Lj;$DB{L~|0R(H8_?-%@xX99V6^B*TNNQMar1U**5Orp=>!O^3ieJ+uSz9Vuar z&zFGS1ETMxuwd}szh2fH1i#uR0=oc$Kz+a8J0X}ydPg;ZT?S7QhNY?jFT@(#8DK7F zRqzT5Lz#sGy*iCoGJ;kiVM~-*NjGMtF1}zHMCV9@*(t~^|3oDntzvWFNiqWI0g@OUCAKL!Y_RVt(!4H^&6F@sl{+!5 zI?}bYG!YtU#`Ib>*tWP$6%#pCMoSoQGv(V7<>#Y=Xy2d6U2tT(+ps9nG}9S2Kv1>D zv3leqGwEuQJWOU;N9LLe9LqsW_4eVoy*L381_b~2;q&!p+-QFo0fT8eieBm@`l%wZ zOpqf#OfH)Cxmbj-%BN$kQ|!!M;bJkZ6j+DR1WdtO554+vgW%3bYzDaNV=Ld&!L(JB zC=eDm6n)Uv22htw7)1@DyUL~+%E|o5-VQq*wm6CA2cy92zA)H>u$Bl{F^Tp#TFvo) zQJR+F5QX!4DT$)C4b~fu2y67A!myMO&SkKCazY;xQTX~12LG#lWw9JrV+S?k z@nGt3cnTaAHoOQySk=;tPY#9Wio?WWcb>~!dd{)*vcbd-ok%YoB?bU531SYBmnIE8 zklLgJN!=*_uoONLIaaM^$O~>FfBS0TFq5)e?x<^+QW~8`>j#-gvo5cWc&y`?srzKY zFip|!OAu}$hf;2HO3-Qzye5nH;(R_IjT$I>*cA^BcERq*slHc2=M7kJy;O)*4($M# z2>hn^mEjU(!R#q?KcVS#&~q%fU)^EO9A^1s!HDa)hno4;{79O~;T=g6PlA8k1y5Ey zNJM8v-usoIw11HHFOUjz9o(N7{szP7BpMnROc3s~fx3ekKs>vmG+aE=h?prHOGM1<&kRU85Ok1$*f-yG`doZT;mxqw>LDXf#7qR-0-pzRYX}y*iJM4V0y-5cybS!+*B(pDNsi zAJ+@Jq7iH`3addATg%eQ`4H}aE4B-+>^;k65y|0Bh{MA48K&y20r0jaW+AYH0hP$C zbXT6Uxe$SsB*}p9Q#s={o>BON7h|1jUqhBGmHclHO%bC86AY22S^nRv{__ z)x^xA1#mIbO7b!#YBJI)U{PdCgtP61sje36jkM1qGFg_8V}y8-B!lr5DY(*rXl{N} zD%N6zmZ-5ZQgA4#m+XAhjINC2Tw4xiMyytX?S}BDuSbpn|LwCoyVKtv9v&PBb3gpC zx3gisq^CYKdYw^QRz3LCS_yq|Qc)+>3aUjyq-=)O_q)lg=Cr}BOr?|4hQhCWN(awG z;`b%FvLTybhF@*b@w+9p4V-=>>zl@o!Bf~+|J_5*Y!{{ zOBCL;l&mzOS_OsS_^s}!xrjwc=`1}-xn}_x&aYhZ;Yp}(Cn3ZgF%0u5)ivzi{u+qy zXwMMGF{1?fgdSkR@3k6+7dEBFaC&hya)2|{NK95K%}|0Eu;IJA&vy*LT);g%n}50w ztxNYdmzK;YkYTJfQDzBt?67#yLShz&(_W#{XvxO7xx$8J7mT&u0U0fsE!TAVJ|_Ke z%7v4+wpiaI*w{Xn4TtzfOi4Gv?SH{>UnO09TdmAGNCS@ngRHFcJ}7%?5q3ZK)5-bj~Mv`2=4Z$ z{XAO790qr%12qfx5l9x$V9l_ydL(NP{Gp*R8CV;}`jxM$vck_!lm*`y_y);X3c!6K z!WS!=tP3T=)6xF^rGq~lh@9WGH1;I!?8d-GXruS)mCD;&F#u0*y$q{wO-V|G`$1Xo z(95B%C+SR+vB-j@pHLCF@kL2+NAjU13$59x9Rm~H(UyCOVG8}bv0$!sIfp(zs9kdA zamiJ1yS*=)U=}VY_9_s^HkzjLnOAtfJIL7cM7UB1`;XnP{zz%CE`#A?!>Sq^;$Rni zY%F*$M;aWo5^iOmI}YqFHfuI0^_f_n5EF&%Z3j<~Rcn*cVve{^t(-v~|IL9s5z-~SW6ll0=tr-v=5sOJCrhkK`E6=TuR|6I)LC%kR0?V z6{EnZgmtbTnLp7U3E$t8{Hqqk;k%48kRGaL6sg07~KWl$}~Jm z4ppA0U^_B0n+n>3nbf7NNNZ{#7P{^|Nh-aH#F?BDnN}*92x!_?l+m4a@kMX6AP572 zae8>*M0)XI+}l~V#-*2PP9j7`ouP{I0PGcJTZ5>sz70s3sgUXJUFk=$*ln5j`;1ZJtHyj?pA6)6VuTJoHbqalZ;Tf?;W4Y6rmNbYh zSP*zfL9~}*H52G%bgRRBuwc%L3Bitj*Rb7>fx8O8VoLhmLonA4jPQ_Ea5)wwf-Zr* zGWtmKD5Wn+w10X=)THzqx>r;abLhGTlDii(V$wl_8A=%pqE(DlkX0~TY-FLPfH7oozM8x72Tt}|xxU^OLaosvNDsUmik&y_a#Rkd_hqd(Rt!qPExvI#aG{LT-f zbsGKT$!ZQ&FmJXU@tUW=E3Jk;L`#r(rBg|~L8+CH=u`m2QRpFFP0cDkS|O`4D-|V- z+~~JWzl9Qu@mMfdT8J|lrN@yCz*D9LlaNVS7^^o|%9iZt!Q-t=oV_ziC-*ALlDx~H zScx^ln*Xc`9+5>#XCy8&V*_)gy^(CF)zNJ8XLAnAaC)PAg*o&G!QlV=@rMK9Ys{m6 z8#jO5klNvw)?kQa4u`*|(p4Be4VJjnR3QkY$Q^Of2X-h}ZYvb)fSE&S!`}4zMiSQ{ z%-F;8%Z;#87+*-}$lJ zr>j*GVQ^tQReI+I=GSQn2r+qd+KZ&qjOehkoZTFXXjW5vW(Cm*fC(UBw-#6%Pq z1P^<|`)N1t_%LSEXJ_nca2N~-4q~ya8+fu3qcK^XH;3_AHwgv4d8~$>gv()5MBABe z8Sm}?U`x8axG)HgiNS?JV>YOR_Q$(me8k{pp|V%0>?RgqKZQ0k@CC2+Et*n6 zm@HVw(CkRU9ldVX?|&P~E?6#@d@~;Ue|%m4Pg;2vRd|R{hcC+TO@-HzX~Y7NHUbI~ znw6p~A!?$|ni#v2G&|`u-Q9H3bdvdH{`39ZbMO6pK2K-%fq=9_r)oLxoO|v$dxZao z!`<+*-s{~M{z>Q?S{?fGQgrBDf?#39z58~neL|~8IG1xIcuxi!>dUgp(A*Q8MVGK4 z!*E}7yY+TK%C6~$F*IkE4KifW%XS+P}R;*Gq2zA$GMF0F4gl%<$g7C{{F7qPh3(_mzNO;9< zBLypw2ulQHthh*N4$eYcGc;)lYc7fwT}(dpX+@{Pv83O&6zN>jhDCd#pdxsTHR(XN zqU;}n3`y};B_(zzMybu-BXl+TIHlM(f)iyNv;nR;lel-vb5H?hJd@^gi5sQ^j z;0^I)t=e1KPV%4={fHdPLF-DQNef0Q4ucGX({ftJ3(p>%@+4`XFu`-&?kR~7jaO7$ zFA5OTgH>)wN+jZho~w!HV8Z6(2ig+GQyIgfb3kFD!t}BB+yM5v?R1cRq=b#EBzd~5 zxzC#{D=Fq?xIx(bdn}0nt=4F{$twnX>%lY!Zi+IEQuq$vbMI1p}t1}_YY?V0&6?9a`J zO>5UCS#l~du@mZrtx--f+SiA@UeBD6v`%{FjhI6>Fy{sKG78`AkM>80ccaPp*D){{ z&o`!%C3~@8KB9n1g5dIItz^DsrCOO>SuzUdNx>07#E@Wvz~B1)qyA_y!I3=|m@wFL)SP)vO|Y3VF83?6ddmDg;j;% zoBQ$jp%+%gfF+l#oe5_h2;&CQIP zV8(pj!Dk?>IVY8vD@fZ8MfH){zkiVx1BtF=CcN>(46f)g(crKDri0{YLxfwiMlP}O zVznsY9Bh!rzA%uMcapS;!8RCDBqn*KHxL=U!7EA(nmQdWs^@tvZnbFCIC#5BFl)u} z+HubyO^#?t&`frLzT|F}KY&UM9*I!>m*m&3;4bmGDAXX-9|_fAllV7RrM=n;Wyz%Y_8Fa_lv>%g}Io|aD&Lpk*dAiu3E+0IMLf?wQ6ly*{p(a)ji|8 zvzk@c)zIlE@u(G~IS+H-UD^!2Ik|thzi$DC>D?HkU|B#C7&h2=H=4D7eRrY=tR$G- zzj^imqoRR28ny_F4GS(vH$z7tn5MwTqC*=9UNE$nvycAZcF^xEfWd|bV{B}o=iD|G zIvv^`w!K#aqR-~P`R-?Gm%OzId;3I*p8HEqXJ=~0vPDVfKK2eCCv#Xe+K}K`eON8j z8jTJWMKzZ*lHO?)OzXi-^ySioTnEWsBg4Rb3>*u7P2teToXde^4#Hgyil#fZKleMd zi_}y&{*U<~2}$))IBfP0>InP340prozU(B)LJ}kJ<#0&*zK}rZ=b+afk9#2jDZB_4 zfwR6FOYm11Z~<2y4QIsxXvi*a1v3VBP+kaWChL`jykh*7UFljWlP;A@TL4X-;#MF- z^J;K~X|NO)5&{bgrsd#DMHYhzgS*`gLSfxZVtbZ$6T(p4m9?ktlYq((A0DkJ{Y$%q z|E@iTo+7P{hAS&kTeP=~a+0+us}(zf@8pw7mREM}&jN^@TyvHVWH49f4+6 zh+~1j6UCcIx{hq!)`64{%6@Qw$uB5yQYOJk&a9LK58|XTt}_%j6o$uv1!2C8ssvi> z=uRwL`5_krGcen(B;m#uT`db%3e4?FMTY4>hQUQiIUyc=G&T79aP`U1;Gcd02LD1J zJRY~Ejh*M+4JNlthgp)=XiC7aoem2TenA1197YXZN)J-r&{n3n99wB|SbWtH9=sY? zuNKdcGlIdXlu&AU*>!ef8TuQ~#0gX5Yl$^NQvCLuVcfZ$9M~`c@frriBsJ%9JNcaX zG*^CuS6yFEen%*b>2X@Ng?T`{wgU+{Lm8Osl@uGX2z}+29{3m>p~7XWM~gh|Vx+T> zp|ec}Uk`;FWC%H|*Qb*c3Z|@s2QMen!+mql-GyzR5tAnUm1~Hvm#yivb^ZU3FI)-1 zF#Hh-A?nro-SJ_rIizSyV#IX0eLnyWQ`qG~m1@}lA~ZB_T}-8j3_GGL3rAJE4h&^l zs)8K?^RiO2st^nqrVG7gR)>VTH}^Lb&~J|RgW<#VA*yWlc^BBgFI-p$qy2-sX?uLa z&|E!SPP6%}bR4q(sDo&%5)t7N`J&6UEH;Mm4N($IRPGx?@PgKXNr*mO49q8k{=tIQ zkS-RBQ^S$X)sWziszc9x8tmDj&k@uyw<7d!XHU8C+1&Ov{Mj^EBx^4hE7}We)o7az zJrF0>FUtx2$Y)VE}C!6n}yr_{kP-E!sag+w1b4L=S=yObkxv5Ys zS?b1;LGa&Bd7ruu(CtU&!8C9QLrjAAP`=gZ9}E#DdUpM5d{?=?w9vq)JI1{E$ikV<}75N{s%*^UxY`&uM~g* z!I@I2B-vJJxUpc!TDM5dLbR7pnMgr*1^`zoTWNBQ8VojXnc%_%xM?X^>UJ#|mXu2# z46pq02SE70ALv3jEKsbJ*rG5?(pHpy`RwJhmyzMH!(j_M&YF*-*;bN3Ts{zYKQ)?Zfz-~;$W?5(AIWj*dYql&B|J7;~=T~DrI2kwq z4sfMqUb%smS$)4M*kn} z@ztjXgTX&31``My9y~qRSxXdwsFVR6b9vD(Y#ub}&M!8E$ZoJU4MCa>T1BZ(N~L6G zYZ)=NmpDN>&h>?>wmpf(>A1a96b54R)K^^4g1$5(Hqe_Pb(^SdoPc-@bXS&}aO5Z? zlF*n(!I?FN;Y|5W4%&2raCkkPNpSIJ8XNOe9b6{BET`FUk-}oq7PlFeGFwlVlQyG| zbX!=$q}e4+XiP*nOMQpcrVPh`!&SOAn*d=troHL3H<`4qTCK@+Hrk&}T5US6#}ODN z9R9*M{LX`0sab-L%h$2Bs`zSoMNk}J!ylz*iOLQMbqS2kBSVgf22v|=mMz{eIT$Q z!N=b)(8MTs%A;U{;Dg)6=@BPVPA}dc937ZXk4|ahdM;k*b3tH7fQ19gC^)*4bQ@*8 zkHR?SZo$by@!TrWbEUzHCjdN%65xNb8LNIcG=KNaTC+iNLq2;kH8i+ZFh7F^gefql z(d-nqw~tQsVu(vq%g4;kR#=F#r zRBfW8q2LC;ymIGPd=+dq);0v`QYm9-a7m1utKBrWB=I_uA;I6%Lk3P;5S-?mjtcvs zD~RsEN)rbSB~o1u=)g8omt#GmIn)fn0AW4;0*KY1#VGvtEpFbv)d}&6xBu%jXtyKm zEiI`#$)RzulJpjp0*jSJ<)BZkSL;t}m7GJmSoCaNG1+>GB{g+2!mPP?SjN!FqOBg$R(0WiAR1~n1rb2;>Hi9qMcxO;*LvE}Y#hPiR zZ8DkUwrM(mh^-EB4x-ROHP}%p&M&!-Ix`6k?q^$IcNP#UjvBB0YnIju)^7 z-`#!vC=mSd<9`efzCLds`K_u0)ruuX8K0KE^o!zJB$49GHw50F2@#sGvc1 zpX3Y+&IuAzl|>5@bkavh*bX0cc@6wE{~!}QRH$eev#O!zec@QLsyujAm%?K>EMsV$ zMJo(1yPM0t5kR-V=5W+f6gG!O(GItYRk&;zKT#PN5Qb&=`nq92=ll#I9s%Nk2*ZG20l#4e7x<0b zAKdo_J?w$&^3q@cUJPq<_28Gfj-gY%l(}g}I#!<6V1ve*nT1wDfndp7BmlQ+?co3< zc;7%Ue+PZg;(o8)JM4iW8wfr&FJE4IJ@l(rV}fYA3chrV_Ip@RI0?g}FrwpCunCrl z^f(Dtgg*@4Ci1Ze#UQ~LLz|y`rCr1LIe%biFn;>f!0|HpDXmGHo15!L_!8L&s~K4F zSC+wts>M3?@s#34;zAf7lLb@$-14cEHPT|ld#6xiDFU|-(ED35kP9*l-upT@Z{wbm z-CYC0mIU9L|N6hPvB3s&(1gAlPNO+-7CX7Pj`BLK&Z`xj4)=1|?uZ423BcRMVkk{; z^^MG@geA$)U~~A$CJf-9D>(Zn%%JCWB%RIJv<(2Tfn6)U;vm{$aE9aPWY2XgWtI2t z@$n+a%6b<3`xpWTKuj$D%?+o=LOcHI?G2K zpupjQQ|Zy%mkU~290<8%OY0>( z+dSgWy+-rJrzS!8!$%9kh6gt>i+=uiT7}rt(GL2MBF*ZM#OOqTIB`8mnxe(UG3U#a zW)Uw*T?L3Cw%VE5Q8iW~?GA+?EDLwddI-i7RODF6Jk7ttgGqr6=amFZAS%c&BB>4b zk`~YEIGQ&(jP|El&Ev>zwNOfjfg;{*&CWbOnw@_nR5$?-&aG@Ma|*2y?BY#gpW(X7 zqumpE*1ez|FMDg%{FH_i;G zVl>?l!W*J6ZA&a4hKR{L^c0I_z*du#`18eux{jUkSjW=uIGH9H4*4+YFaQ{mt)XbO z(E5P3VMJ;b?*)e2>|HJ50|2VTX30j_j-pFGMVi%xoJZO)X}$Y`~+45wGQRZY!PFWrOT3p^$hg{iK zBHL3cOhOn&jD(ykN*Wlol5 zM^33_m02-0R|~EpQEH5BU9npQ>+V_QRgwig7rtsJ_|%cey<*T*=(yl2i(~mVeOHpQ zVRbN>cez31`sUNMU@(W#Uq1kYFPdiqVzAIxS@A|-xdw=%f}k)0DkUbXAe~8u1~1Z^ zB&~)roK9#Pnx=DDOM+*7Fvkv=GR4$0>JFY6uT&!3Vq%R7;Az$|a0xsurr(*R%MLq=0w_nu*k87$h)qiXxk4jqiAs@)m*Wgfn9SDpp6xaV@wHC+*d!S7(Uz? zRL<48WDxiaOX9O;z=S%-%EQiCrP489+A%<^Mkj#qcs0`)AHEu@Vd>X^4vSt| zhSP=%_uk$2+SU7mgL|N`d273r%WddN+tpf8>ON9u0YCsqx`lh^qFc6~(Zs70$jSUcLrvVA(Ee;ovPKh}*Qz}7)xEg46 zyUKz4R*Gd%#Qa;VzU_D0hofIdLvw9N@Vj2$JX6}EQGfsa@m~~QL+YzcSUtSZV!g6p z`+bc5{up>C09cbgydat((T)WFP!0Xk#zSKhY#?|$#ZPN4+y=Mu_gA%YULr}v8fG^3&^%KG^A!&k-N+SbVm_8Aq6x}7GLoiMD6tA@8CM%D zMQ#T-#Ql>kMJ1UHp~0%h zTGHymWo<27Ul|)p+Z)SXmSvl1!GjIy0|*OSfRw2U^fG(|%i^Nywo(!bObV-zOAjii zmIzlmhILjNh6&@+giKluOTb`}OE=FdZ1bxSvXlv%M_x$yWmwOoNDLSr4u_-BgZ(gd zS`=p)6lQeCJzYyQ4z~@XQ63CkX}f38xJLHN!)?h|1s6+_p~V!f(paxB(YGi^P~fFB zA*LlLbkOL2EA!||hbQyu;+&Q(^W?>M4H$l>Abf!NxFE2&rs-ZKBg+a=3_ z>nFSkxP4ZCU6Ms`$x5*ZyW8dM-4o8KPYeq_ZM;1_**$q zO;f9brYuWgnj2pq%;8R41=rGX7QAU$@aEc5mNa-ZE1G8jriOB4@uGc$lW3`6u+!(P zHy<&cLx5NraH1%z@2~*gvuV+yx~54n{@7K^Al zDokWl$1b7L#b($lMP1#-b|P=^S0H#nDjGyY9ZR&O#$H*0wxzcAv$j(>4jO@NX@m{d zid9z@$^KWg)Z!YB^sdG3n?^&r8ty*b-2sC?7$^n?zZq0pz~Du@$eotNXfAt|97~_! zG&_?LPLVaK5-P5On^23FH<{L;4oiih$&ySgpOiJ@6SET6fs`a#_lu{bjiyedZb6z5 zIff1xZ+Nv745o4Q1R$JylFNZFlQJ(MI?IsY;T2dQj^u{pY#l+RmC+b>`~}TR*U82- zX|RZ~L>aAaqm_UQudJ_(Bk_vQ(4tp~_zGuI5y!)pdV>uFLr~Nv2(!}_7tBd(XizKG z2b5?ry#pZ>tu(EJ6E_L2oHKvM*>d5p=JfB+HwK352SS9K+@cbMFFxOyvj<`e!k^Lf z02CfxjjkTrmWHIkLwb|cI&8S`0EG|#G&oD#B=XThJ19qJU7t z?)V-<&_u0fOzV7fP1nh6o0-HfCeDY=&X3;vx?i5>0qJslL8^6%&biKY-`C5kzOpWw z(3oJ*+mA4D4lGDYge6f+s)R+mCALgCsTLyyL$j~xgqYAzM21V}d~9w?Iwy{9_w-Kf zR`j#uYGir_t8}u*Gp9Hl#VUzr?wgY}Fd;Cy3v;>%MjVF&;AV|ju&A*Jf_GNeca8~y zL5R5{7-DIH;G=^>?+89T2vk@{K`_UW$*P>@`C`xpJnRE&X7FJhzIW;H(1I!({bFdx zfDdj^Xn51ux^W~phcW!}0=B`puDfk70DxJprtuumL^qo8(t_@N54WVMa7zn=4_!qA zqwxBVz+efdlzFt=lPIjZ?Sk($Agi{dA!)V>u45Gp5?rP$FQ&W+V1ZvH#A&9++^xj6B#F+F zLG*tFa}{`>9{H8g_;Cmv6CYM2?kC2fX!`H2;V>CyXa&;eu+l;6d+yjXNF z>>=37Akypt=1$^^wGgxCKGvEiIxFyzrw%#WMv?VffQ^}vRk z^P>P@45a-g7&qWA6Jaz71B6xNoXrKr4YNUXwByDG#EQT*vj<1Dti>2CNnS^mAAoi> zi&i;&4ksv=S@L~fD*yl>07*naR4&bj4=4EM!yw_p0 z!1UgkxQpopNW2%&VcfWIiE#K6!k{F?!wsf2P79XdeWX<*qHDh`#Y0BX^!qT#y%>z*3TI1o*Iz4uuy9W^SMIiK8>+3UdJl_xotVkS`6}nBZu;3pBbmciSK{Qsu zkV8uV>%Fflq1iN% zR-3QOz~axFmTV5VgXaW;mHHYN*0*V~FlpVPu7yV)L-2Jh_{qKbKLhHgUo_Xl=FTqsdZt=o^I{4}Q*ozYFm&|6G+d?3U7nuKAu^8zDd9fOPD6XM`Dz z^8+1D2J{wdB}-w6c$RdmH*YlfS@c;cA**A7$CvZ3Jl=XsQfOInD`Hp8WM6Dpo7DZU zjSb|x0PvG9uR1H2#DfKdKm7c!e}4TS7<>v0W)NOWyU@(MzsufV%%>M+4xP>?G&gH; zF_BhnmSV7Mjaio^reQ`U63FHjqE*6U7Oerx269Dg`c$qNxlCZdYb|*00*@Y?^R1X=9-uvm*SPa4V zQ7uGb(GCCvsaQmbYcmtbaX>=x|l-F=~O&PI*F-x?P7;Fycf=*z_lQ8+(*Sgr77jL_SV#GRXR;T-vt=d!7wt4RZ(<;z_$ zgycbbVY5rd5dN(H9DpzHf=84FC)Mn%5m;tWcGTAi%96g6Sn7|G7F{{!V>nW(7!#k9 z=0!Vqll36d%hXlp6tn0L#)H3pB_8}Uc<|*Fos90Me)xVgz~H>+#OeHm45S%_CtyTM z=hdmi_9a^m=lyJ1FkH5|X_-hf{4OR!x6-I!a6;X4VlL+WZ^BH(W=_IGVq2OV7)DP9 zD`AJiFJ<^__N7VgLSl^;crB6R`s#7_?DH89Vu|K8Ckg&1Gi<^~O!TxW9SMbj$CKP4 ztldf4jFj^d=srbOAkY#XTw@+wU?v<{T2_=b+i;eNaE$|um|{!g4?|U}y0KX*AX;&D zV`YWK&Rs%an2@?>jKkKpmalve5@3*>S^ zZNyxQSP&PfNX(!Uzr5^S?shIao!#DU*HHMZvtMPWwX_u0{5cgAnAKPqLo*Ws2NpNd zZ#$X{-DC)E)+)LRW>*ri-rF7G!;PyQAaMPdA^6DkBVqGv!IX!(4tA9ax(QYV7K}+3 z&!G3YJnP682Omi~rP~1?coN*`6J*H@`arPw29szwl2C<|WB8>bTWd#^#;2W!|K8G- zBXM9N!r2(=`&w=WO$IYtAk{jGZUl;G-UU1K-C1|EmyJktSi6O6R_Zm)=crdulT?E% zI4YVLt5&JEtMVgmMTO-eBC(1m^kZiJD{tv%yjL5Qt1>^BdBC}>K!brz*t6kF@J*rrv|3Qc`I6AFh>rC z{G~~!W>#ykfORTwCgD^c4jVf*4yz+$z63~lnkv%n5#9syF8D8u#UoOXD3m*xI&1B5 z-aCS|#W3#(aXz#wnF`E#h_y5#WrJzGB1svLPt5PHFb{SZOgvb+leRl>WHjgh`j5m! ze&`KyX2w*_$&xS+q;kl57m->CALSuaW(n(<5Sg^Dft?0Rh0#oPGd6?<2_BOmXhq;e zTBEUeBMfQQw}#M$y|cj|D+~j(#UYGh!ucu5q?~VJDcn2WJ#GVpoAm!geQI=4GNKuT z@iH#`!B`DVTXmAba8^Sp{Yp3p&vKo@nv@kq!ghHl90XWqZChO7$FUm5YBT2jW&|Lr zFaqZ`dAQ8Livv{nl;5gv*i_Pn!HmP7_kh;hXL}&Sa(FsC2*OZxeLg$uDiGu7b-N70 z$eZqAR835H7f%;~Z>6I8Xm_ixDhjh>X{jJF9u-OK&`Kpe2iiSJ@G97ip&5P;-4kF@dN3JFVEBe5(e#VFu@nJ&5ygQcn_X>RG}^Zhjm8hztg>Lbz=IxZW`+=W zeaj&CaLZP}<`5P$Fyrt#Hzm>YwyJYzWx=a;8AQ8khI)~X7RLB1ayVjnzvMV|mgJVK`@gt6hjEx7Y z4X;=?RMZA6h9nLzQKUwqJU+o_`Xz%RqDU!7{eqOK)PLQx*53P^a}8;(!8RTPVL)DY z?Y$lWo5gf&6~)nJI2W>@hji#ve`_2*VOQE!1^d*TM7iKGd>kMMxBA;a;6;>TwlGn<}dq zE<%R!4;H~!9A_!bNhHF6VbemFV)Tt}Z2+w+VVz1#DZ^v~;n9<_FrI-v8Uzm*oH`0T z7?dpV#<5<9z@p}300uw%jKH{?*dsxW+y2*-fju*yPR3Rk)$!Th)q(xm+zVzVGL zvW^piaLv)VRwIEn7;|XJ>o~$J`sf&7%zZI{m|WIi_zz>moJ(&B1J2N44y8wMSS4Fj z9v>cx5(_)xBXcg%&Ge2Koc0{^zTm-7Ab4={0qj&4ls?#t5!ja%O87>9KL%k1f6k$W1a}hdy;;iGg8sSt;r8VAwtv`dQJpXAVEhHP z90a%4(L%VtuOn#FL<=TwtVUw24dcKPjn&i5u%%Oi3Jd-ssRIGgvx$o2-8&v#lfQ>{ zyOS)m+xlNHfQCv-tiT9^mN_(55P;w|rG3ba-kifwy4kc~teWp?FiOl{yAP74CrLKG z{2x)Xzl?J7z=5_dreY}&Kbs2l)}4t@yedjhAp!U)W1=5DLXY9pD{V@WppA)Fs^^p| zN%@Jkzh+Si`mCaPg~gim!(9Zx(VEvkJj#3TKIxG9F7sF<*ShB;wz2e!7v8iKErqRR z=?Bk=eZQfXW!)}vM883&*I@R zZ#WVVo|x3GLb`?LGr3qrnKu{5Och;!qNZXJVeFlY7M~^0V<+MGeHz>t-3~VelW`P3~)Bi>lldg>~z=L~mC@JvX zxCe&AVd{6pjF8qHv7}fwZS1TVyqF|vk?t@iY;8#_D)C`^=E3gn#o@a%5@CWcG}0?8 zyKqc748HEtSncIC74dk=P9E7%2qhESk)v}riXad}J0jd81VfKCTwNXZPx?|3eD2=Y zF^AsYAIWe&pbKeFNU)zn?|aqst%YOV9*p!B5|B@_Zlr^7d$1QpPG?FQ;%uzG7=d+C zjbKVihwgCf%Aecej{758ygvMoqx6Rz?860ruPZE0YN5b!gGZl0tWqqUN^=H{DKuiV zH#RJuGFD?TADT+So>e9FWHroOO00sLJh#Fsc#W*s{c5oaZnjmY#a}f6*c}VWa(h$6 zSnbV!I0&9=i!PwK(A2ZHs3b`OuuO_2R||9})qHU<|Lj`JEmg@UwX8X*c25tjO%2ba z$w*p$C#o`t<{tPdS@2V?g0*k(l{X_983z1XSHq7}SuK{Qz_@;-kAhMoBFM2|O~>+M zXF}|qN9C__@6HRfWI2qd%k`&+eZ>#xrFA>_uI?kQ{cs?s`IazJIK~FxZHT3f)BmVPf#u#J7ggd}|ma`}MG`gdG}>XA;9T$8jFS;eH>A=_68M!te)?v2`TsBt0Jvh7P%K8Ky&`FxfC(2Qjf;)Z|JP%a8;w zCK43J?x?j*=4Hd$tVYq$utXPE$`-{#2($gM^4D{!v%!NIKWH#qCJp8sT4-X1EaXH9{TosdaO)gL!8TD z$R6cU_9GIk!O(1I=mUX8hE*f^Z#fct-Mv0MIdL4A%Cs5mga5*ejtUmRt<{Z7fnSwm z2?!&g!}6iu@@->d)o+6Zg5N3zcQqUf9Jt4O-5%%Ai9m2u=Fo#B-6}LY%S{ZI$%6kr zD-cW)++J=jdlJl5@LbzM))p9nN>`F~2b=s#b2t*IM3j5M7ECo(3(5+aKF^MfprfKf z?8bE-U7b=^%KQxXkv1eL3r0jVH@~d^jQ}|0V?81W{}?qU6=P|%A5VKKOav~11^+jr z#=3ie{(g$}SkVyLhSa!xy}SElm#k3B&!t7C_4?1RL$GuRstoez3>s4#{eT&X_nv%5 z1%1ym>@zb1CB~N*9Www~9xCKCPf}vD;;N>6!B;IIRXnEK`%f|j!_#o%8Z2A_V0BJ1jE zYx~{BV7U6rn|bW4>ptNlOr*zbFij8!)J|K6(ljzE#Y>DgLhQu+1m#zgf14Z|H%LXd z!?^mAh~dR3qSAeXM+GScj&rj#(Na}iLXd&M4+*13X|RCt3<4}?BvGrRNgZ@4F_+R> za);?UHo+l!-2raN;VLn>(n}XXb{kcsuoH-@+!^!I;B>jd+>UH!hna=|8nKmt;UmJZOrhb1%XpA;54;Z37JDLb}(^f`z_8N9A>4m3O-MJi|L2kll^`31AEu5 zAn%?AXaI9SjK3&r4Rh#wrlbgfZx6Eb=YwoVQV6>Y*_3422EKhwguV>*3=TyP-z_CR z-id*f5> zD!COV9=l(7O$51p4r-&W{ySk1sKmL(ydvO4j~N(Co)B0i=4NT$dl z3QxpdB%4Ni8P-%V2>WoXqAi8Ne=~$wo>33!SUO`ifW1GP4#fB_0&AtkUm0{6!|+`k za`{iMmsS{lJ<{(G)X_n%6*VvwzSA6B$n1+BdZs2=M?qHIY8PyO8=SuZaFy!jq9@b?)E6SNuxhwW+U*5f7N}Lv z=h(3%|7M554ua3N9Ofb_>(?*34hA4^?;;WRmp3oO$PFOQ*R=$~n6SoA@)jtpn_sab ziH%osvqBfc_$2qjMr4Z?Tsa>Fbx62Yz5c|VOTmg9*@d(BinbvJ7cM=t2#)A)W7791 zq5Id*rUMRRFg=qZfC0&sgY}Y}*18*aTFPV&KwL$CYxeB1_>0l6q<#2$PmNT?a^OXi@?S9~~W8 zilts}+g&DeSlKYK_cwuJ?uG@0cZ3NWZc8tdUk{(gDE#qCR9Y91OC!g_mps5!?0}da zmVR_x3{yX(mbtVpfVCq@hS8i~o+D~)^vr_g)eWE`f@#)3EcnWErJwiI4oUSbSg z(=cp+j=ST2=IiTjnFu2_1Qj_Q!R>QL`&vJ3_)+wJrZE_xJ7iIzs-h*$b9H0Yi?LRv zr*Kg_8ve)Fwf;1QCjww^PQRG_xq zZqa^aQCaKG1OH*S(W*9fEhoz$mxo&&pV4y5;J+k$ow8U`CE&(RRQ>1V>5Q9MUFCM#M{ z;>)SaTM^M?zYqNN@-jUsR{7Z2T_aLh^ER(hJ22FWRX05(SX|l3sTCnVq^4Y0;v)L@fvtU(= zwSqC~6^x1reY=Fqh)#S-lXF8y^0%uKo{ctyz0ZrmUI1bIopH~jAqHt@49Yr#7XAAv zc(AbG^S!fu&|t-2%m_00im6J+N5)Ty8Itu-n+y||GU?pUVee>$AZ#4AaObXTF}#y1 zO2T6#@I%ij3r-^BRa#8+o#tzsI2Wg*jLHf0jgGRxG01SePCD$#aDApYJ-s97f%=A( zos}XBgY7q1m>!G0F41zPEKe;PeRcjYnS(G4vxfffgJ)W}Faswic9mv)trDPE*N{3O zw+oekzg3s4RZrt^wORr5UaT)Htv_BO(`MQF zDmkXo-ayvmNFeq3{@OlSFfrI*7+r+wtrkcekY6hq9u4=g9i=)nhQSsyW?_{?9Qg*r zA6&OwEJCpM&iBj^4Ix_ac7MPYAnXMXP?OXn01xHu{aAwO<`rhNPx*P>zmr zIRgBCInmok-^=PqC1j<7J`PjXtZg3@9d#5^i9Q4g#?0HX;3~~n@-2zYzKrS=7JRW# zTdvh=s}%^*ugwk}$S{sA*Nhd$+pB>4JE)0Gdi~-+m$22A)3S8??=I_){~@$ z1XosVlVSX%EW30{3yNM;8JeJ)6I|8YTJ$rJ26G;q)8b!0|E1tOAFm@>(!4;jZUZNq zJ}z3XbHj9XXPKv~F4Fqv`Qk6Cs4xo!u zCdS`vHv40v)xG2=YILB&sxW&R?7N&MV>8o4d`dID62)S}axCH!tkCA53^Ed;GtGjE z(J16K2xdTK;^)3ept?ys1deu}lYq`i6eI1UutKt>wJNF)8geqe%nS<*g}Ro9aF-H; zkB^VfPX&UpnsmOmcYdrG{OBJ|?Rc^;MLxWcWC*S4bz!$@RNzVy*sr6?3Yt0HT0+C` zU9en=*4Cc%FlNAtxJfQIOA?&8S#Tsjdp_)AJII9ZepiF8M_P2fJmV+CWy8d>`K*e? zmBFC9gHomG^2$su7xJ-yv6Y@MJfXL3&?bx{yEK3*($(qo{-#e_jbXB2zu_h2KPaoVF#*-`9aa$csYj132=T{HHxHwR@Vuw9M zS^hWpq&2_8U>K)83fiw+{H60u+bUDK>)}1tlTH}o!32-b0f+nj!RSf>7;I{^?S{iw zf@o^JN@K9x(?#FH{ytCpYw{Hd2Jb2rUc-p^`QvrM@CGK%0|Ncv3Lf?$2f@JL9{)|S z`pe}cd4hEb(f-@HaT;42*kpU@Aj*MlSPnwm(c z)KPGtz`>C9e++_;f)afY%g~<=4ucMDAiV863c-L6KIu!4V9f&~2BRsdav_(>0s&Yq zf#|`Mg~4ZSwY~M)c<`aqpxG1*)C~(s17u^NR@sr@p6_^sh(O-U_23SX7$<-m9q^3C z;#M#hy-V#XQz{Lf8@9ECy99#Q9Rlwnj|C8nY;jE*Clj`KtZ0_ea=`0Ya8*+~tQVLp zI7D-3SM?GdSk;mlrK^DfL!K8Byg2QSJG5JEYELj#==-jv!3ogQOs3q76=@=HZZm8r zc_lh+g$D4>(Uz6yX)4x?$6sTH`wbELt7b)~T+<$Z3BH27H-^18OrIY6!#+*$OB07F zO6T*RHrme%(|vJ_wMIl#IX=BwFn>GXqP`**qVB22JB!M4>)&kHUS9V$;E3) z47$vP1tvEmrY&pwHVuw#SoIavqLl>;4=y7pYh`AE(b05f&2$IY2S%OJj0>m~dJ8Ff ze!5<)L#ISgl03^0gE#ne!{7J`ki|vSr3uC6lCBsEm+^Uh+py1!W*kR7B}3O;q~&V3 zWo){(xLB)WKn!sjHfh?rNyQU4G>0L$H{NThd*1I);k*sD-*sN4TQX+^PsC)9gNd* zd%*(1!y!0upBTI*Tv)|uo|Op0DlNwlQnWxkA8q^HNIpVf@~S)B=qUu77mGpBm;}pr zOa3v?(kE}*+1a`1?HGyc=`5Hag6-yhpJv~|mHa3SI127FeWZhQO5655ymSoJwt;;( z$DuY0`cbfF!7d)_OPrVW<>UuCv`^)5CM+&HeM+?z{<5vrgoI)BLkkJ+my`gL)KP~9 z0<#!6R1hqyFY5yCqsqeaMvoBu+R6$or4sV<0wAGgEtuw z9r57lX*UOcpb!jO)*Pj1LEdB{G1|p*%<(F(Bva!Q@Lv8Xlk#hPvX`X8HT*sbqPtf7CQ+mo58D@+eXR_aFYRHC&%5M_nBHVHOD#IXlVI?0INBE?ED(HlrcoV#{C;|Vym$QSY$SZ(<=>l4;BO{BWueym zy1}E(jO9bLG>}7Ct)*k>B$stb%2qYYLn*Dw*B*ltb}bp(l}FWIpH#?B;vNUTxD*(% z*|KKt6l3YxVQ*PrcBWjmX|PJsSPBLRgObvoML8OP%x$H=qBBYU*W@1L=3Q&>;>u11 zgW!I@V`&;44TBO=ra>F>^i$zP23rf%4a(S5EEYqa9 zPJGH`V}7X7;B&`%Nrzc__#g91D-P2`4L$mhIDECO>=nb|4cFDEAPfK;TK@Dt#b^WJ zFcZd?#Y0ed*dGvsN5aBK{Q<+QhF#7e<+v!x)xs7q^Q@W`i-u|l&ApdfF9{x9$Af7v z>VgETzS`Y-_YOKVAGf>H?Vp?+9fnD8+*Iff6{Qc4Qh56%OoS(n?`qLUE+*PIZb+#- z_;i#OqiqW89MRiKf}IErMRlQaQLUH=4eJ#M-m*=E7glS_f7$8PHrfDN!tl1Ez(8V} zpp6SNAIo}@A|1Nt4bdGA0qDkp8ycvLQLwEAm%xIDOekGiUn&U%lLWhFEi+BaU9D=% z4AF37{qx0(-F4kWYPfoahLfUGcC2bxOL9=G=e7oOkOdQjmt1zayvGx}uS6X>`VD1y zSs|Fo8`JX|KZ)+Nd6S{raZO!HHWvDll9n ziD$|7HkiGFMJwzQV@0Xx)#!Q}h8_Nr`f?;Jw}`!EP+_bFLw#OU7c^980&i|^&RHGh zPqEVLA!EAJUMN>qDmx0qSfk-4Oh*IyItI8!+ZV=|x$H@>V0f8&a$OUqbzEGDHiJW= zme-=?Ql%Kpfa=;pr^1^kel>qJn}4u5y!807fs}#O8}{6T342;B2ux6YI}v61Cs7zk z`*H8t-rh4pE&*9SK$!5J^&MJ0F(LR`Nb&Xg^~dY~5q7mbO>S8f8juz`)Hd~@l-IFg zwBRiTLmpn92$2ftbc|y{ymr3S4<^PK;*DQQVs0`CU;Ni|*4lfYbDjcoOR=SIKqXyW zYp=c5&-aMU0uT10G-$FgWu$2t6DAJ^bV{;iTcV|#5^T9SaJV~kC@dJf=U~`=8(CAL zNg8i5&a=I2nC)lo5gi5Z_eSpVc3J;STqg#@6OERJ1}39*s{5TbhtWMIK#vF?$BMq~ z^gDcZnNEjsv;Dri98n`J2kqVcuNsXdIP4pOLtF40AD0y{HqxN4-}uY^N{E&M2-`ur z_%t374L6oHHH5w-odoYyycc?lerV1yR#!driW*G_Ual=HENrK{3#~5j7c|$(3K2#hFf-4?;o3uo) zK!-+0gV?cHQ3(iUW_X1{v@RQg-bVRYvAIv13VCkDR+5&K1=pcM3k_B?R^3Na;+a`6 zGuEnm$E$FY!#UT@WscCz{%H(H549 z$;7zh>W+c07Bbuj?tZopP+14ccGv&rMCltr+&^;In>%|OhUw6v8XEGVZFM;2!AaDW zklZ&TPR1=LL>>?n?yQV8MXxJ!~&y3AEElBAwM&rvQ#e11)78fbS(rMmn37+ z6P*;3cppi4bjjyGJ7zV*WB#suj(L%vIRk#!5L=e+0@IhJC5EU)oW>b!1>?Qw zqETS*;put2s#G0jSD7+>V9AmlDfiu!6bgEBF&!o$W|XuP4L@u=R|Y)4AXQ5hIuJg4LEalOv@W&j@Q1{1$-?mEw@ctJU>HY-!|&cY7=9;>hcOHjhx?ca zk9q^laOrZ=zUf z1;6pGtXwR|bx5ha_M5`jx6>-e_L45hse=aX6FSU*b?D7lpF9Nb_i2aTiu(4x<4;Fu z-D-@%Ai>Lx1xNOFm$%y)Ao$d4(fSWnXi#D4Xh1fHj)KX847F@5#J}hD}SuoMn60*dNrA-Zsx|p<6io!VLJ$q?~K4`83 z+npDSl9T0V$ZQha&o%-sDI%krCMgL7gWlcVIl z$vMlGs?dcpLAM|gl;sH}#8VcIRnVm*FGPo42_NTdHmcZxmGeA@wI%O~_A+)Z@X;rVbd8hix%6%2m%{v$FL(u0l14ucDz!BZkg>l0F#@D6Eu zpIK|DF08VoSC%w}V^SBDI3g}_dr7V>O@=;)$#C91;NRrOFU9Lh!gy`Y9Lv%rYkHVw zk>Qvtx?z53RwZ!`{QNmvlW@K<|Bz@r|G*(-X?FU-#slmGmmCKM49ol4#Zn3B93AEe zJMOUTUUaIS3M(CM1M%p|)z=}>pDj$fK>&Urmn?+F;rvFD5#UBN0j^2#7690Nl4u+H z*26s+p;ZM6Z<0R>2(JT$+46UCV*Y5tFao15FQslc*EOste0C;Gm=-LKg4Gl)=zAtY z^w}kNFmU+W&nvRw_ivFQ{Xstjhdm4fhaGPAdLtrmi?Lc{!W{1QvSHu-DfS^n_jv>l zRziPdY?#38uE-c&?Y>7Jz`j3%*Q=+vPGn~j2D%Gtt5wz&RzZSyM*v`lz_qv0#P{Sz?PXV~Z z-(B-V1BiQmE7;d0rHa0yKugGpjE6a8U6Dy}Crx{s%tULhKW*1#6kKWgB177<{_P;x zf;qr~9Rwd8t&1U=6d3816`cz|4W6t(f5nmIgE}mRTz+S-Iyco0$PBT%UkVOg!9Za2 z1n+>}N);g)?jk3_#Yc#oNH`yshT}h4%7mJ=7 zg9TgvZ~kCVOWw;917N-C#@`T3Sh?~|o(>Bq{-tDij0^vYRB2$kE-W!o`X6)APVj^g z*D+QbN`Uk7^!;MAp|4GZZ=0W|{FZWjU4+*DT5#a9*sbOaZp+*PCP6kow20B=LXPAn z`9W^XeysJOYL*u5C0PvEI#nK3g#x9gM4vr7fY%m-Qv(aG4sW4{3 z@1H&U*iCy~&|voqxC8qYL5Nj#hbRqk+x;R?j`N(jtUJTyQZiW%JeIW8Gug*77bXXm z!r{WCL~JG83YJ-Lyfr)H!eQ}dLVYI;jp{aX+nyw>rJ<6-nRw85kEx}D2!Puu!<-QPYWsz1cnL3Co&ZV zACB3ug?2!AhAZpLGNgb1;XbZ#lu*k{Nw{ zX;udf1Z%x!`$AhsG#U|t4h>(h4XCkn6 zMl>A|g9TUXj4WI3h``*HohgUJqeD>PuFf-&6Aho%Zi>*36dOq?jn;!!+D$)Pgq`5m zo&~?o#YF4oP$Wa=j^U#JlZh3~)&X(HWM~@&A9@YiXH%Yc>)zD6C6=q21V!r{*vBuz zjOEyIt-iFqy}f)WEVyUJXl2BD3Bgxq!aeWC@>RhpcafwkIAtz}f-tP<)>K$=D4n%* zE4VHYyk3zOrHZZ&bN}}#N5KrJToX6ex{QKlFPJ_okGLLvl>t}04lTEENR94}rpnBI z7Ay!{uWYSui4?6)tR;EglmxS;0l^%zQWh-XSis>T%~&!K7HAcqp3NO_QwOV)4q3&G zg-6%{=iQOK%3^RtV>*l-5OG9@_^NP-kyyJIJmP)7cmP z)((3L(@KUL2*YIYFo(g`Dy)br7>tu>iAjK%1Q_Rit5UsI)qSSA@nMdL0Xed#v_?nM z<{pXgi38z1-5ov&lC)4^PJ7SJt|CnuMZ>?na7e6R3;FqXOSQbb!jVCimjc3a_$iPK zy!|G%N+iDh{ySM&y0Wz;*tB3ZMxzoKtYgOTZ1wlKYW%U^e>FURHB?)cl3@GLX)p!r z{s%yCkC9xX-r-1;QqU{3VvQnkIky^spzdP^3KSf`pw*)ss{9qyhU+EOr< zt9Os}JlB!p<>0muWAuEj7zB6H-K;4jc%_ciN~q4ZkVJsp+TN~j$tYN|D%aN5P?L02 zF-tV}k>JU)Rt7!$)Cb zELJQ_QUreVNaSfwe0S80RZ>G1glNgZV!l982F0YliTI$4K;x3wq>C0JolID{AU+x9 zd@V-La@3v*w1jz#ye6n&fEh8*a7 zlBCC3@Qm*FB2IZ~>W<0pM4s;&29E`L2=F?xs5z8nQK8*eb7e+Emt`TCS8^{{W2};3 z!V2!InVD$4S542}t(7k_3=Zi;_J3z)LdP(vZ<6bGNJJ?YlXKz8%VS`0cQhEeH~oUa zF95;6eH?-j{ExBgdrC9Qf(~Mo#1%pOU_jA|Wg;@`52h4RqK-d;CYEKn?znMZ;=>eq zm`ah_msrWm{^xtU&pG$r51rZhK>P$kQC76=K7G17%izI?7=gXaV{evm9XwU~J3cfU zPMfvRpk(DqlR1IV(GZ+v-NDePLsjt)DIuCq#PcMMI>mr<8dj-W!b2lrO~wNFDg{<= zR)vNv42UH-8b50@V8ZZCz;_`+^ccO-j>%RSEV*$ZL6#R?{(kN_7;cF2sW7}o>n&vI zCB`Bv8>T(0qCJN*QInGO3(FX|GF6ssS$0Ini8K`ZqAlJ^wyB*I%_ zX+^l5N4HOBujsOYj$XC6AR=D?CNxwTf;zIxhM?Fc$hg_jLdQe zEK?T}D=mZLYuRS{*zKNtwbATJ7r~bfg>Ns=8`&cl?%nme;PMW87gqP&;jLyp@?b}` zVYG&->|O~9_XZKzO5+_6AgdA~jfH_EQ%Z+K3$tU#fgSqtwuPW9_cnkj9e0MhFeT04 z>+P0~X@5Hl;Z-bXI19Eci|0srp&#OWtcSlML>mO-)$Y^OH-tn-0DNy9N#~dZmpBWq zmADg(h>l_h#X(I1OjC{0*wcazU9K%HtrvH9gaaS9C`BLJP#B!|SZ&d&L$`D#N#p`Q z3f72d`)G(I8VTr4(U|j9Y+c`}8w)8_L|L_C!J_QmqvPZG`Ni7ep2bBw2!*sk^|^ zlr#Y)dUjTkSk$sj6QRfC%Lz$_{y~B`ygp6%jk2PtJxgMT+?gaJ{rCQ{*A z8NpXwF3v@suV^*No-;~w^fXoI3J9<;-)X_#XF3KJlQfVRTzHDxNwhytVf#Q95Wt6L zG>ttsHdR5!eOEZJ1LCzgge@_(n8(Iagu^TyzQo&*`i>V;3lAL1&7K(I3EybrGjU>N^ho@1q0YEwBlJ>)4On!$@7=)PF z(Gpu3ELw!&6b2g*bAMQb>F*AP8KiZEwqdB$mvXqX+uIA-R)S-iJQxGvi{8gm2f;#w z?|Rgs9sKUCDi7{aY45sMgbWQJhZqe;3(mU4F~9)b5Ba<_LPB6zBk6{5i*QW}Ox!-9 zrTV0MaY1SfSn13S+6KYy^I#`-EB_X7_x$W#$`q|j!A5i=<@q7_v;Itu_W6`Sf0nuM zndNf;dUxYgEXvS~<=6t9D>frPbg4LK(RrZqpOp4mvcn-wwBenGoGXY9(gBc`gleBD}KF zT(9M;d)4Niv_-2By?~q!-Ack9(tKW>&hz5R^1Hzvi0N-G>5OAl^8#S_G&E?R% z4hCb@)HJR_G+8ie8Z;Qo@z_}%{Tlxj5ax&co>20;86`u*j>Q@8W=<9yCp4cU*|c~p z$9|K|g!(f^!UW-wZ?Y2PF5y$(fViJR;>Sl{KKe?fKiNO%r(|t`a8l(@o-IFN!B$_E zxTAl0Pcb_1;9=WU5*HY$%Q>q#7mtW?*2cz?GMSCYbvl{y@enu@ttZ(j(RPw{ED7FF z=ar0r0d*Oj0Z)n!jQ}lO6^c@xV?%dZfA(^8HeMZ$c7lU&o$_cU7GxdbE3+fPr%en# zIyyLLw+8L618fT4eSk5`f$)co&hp^k=;-BZ?pQHv^Tmry76vVKWo2mYV$@fXj3@u+ zz|>gB!UmzEz)LyY`J{qy%z`tfKHI#P{Mmq4?O0>>(3n1BY$~lrQ+k#~q>3T&bVW!o zPaqLHD(vtUzAV76c_>&|hyco&=VK16*93l70l9@a;%&o$a_gzq&t9=WM{MD@kDp ze6C^9(U(J3tTYLZEYS~VPb0B!Vfv$E$8RRx8&5V8tUJNdGeB9SwM(1RN`%0rV)1A9 zw`9d3&PIOjoE1r}-3Wt~6}xi^)2-u{pt7>ycI?K&DA?n#P+%d!jWze*aD_$COsAv{ z?T*E2vstdynt|QAYjvgBEFlFATfv+JR~H@rF8t~sc&}=PXo=%6p1Wdc(P1me(y^jl zrG|Di*q}Er&D2uNfIA%m*JM&I-yw<7b`U%@MG*|hn!|KT)`9855+MF@!tR1|6HvYR zJY89+j_8~~u>3}O?n?_1#W9iNm6t@4D;*1Fl`qzT+yz&65QYEU4?x`aV5_1vk8l2r zU-gHMPx0l^tXb9TA+qz)R}TdYyDU_h|Xxpfl)jN6DcuGqZlb{?J}tb}aaac_NvN;IGKh zSxE>Z1ZRBRlk_k}kehoNisSMlip@rY@gETRWXsv0>ey>RxUg``YhGZ zFdgj)R|I}N0yDW1ek}))V}M}(Oo<~}5BYh7sj4j+bh{yZw>Vdv#>VNz>6P^7IUHU! z{aHX5DKI#g?`TWu< z0n5FsL%N_3MTI5?yEp3YU)X-5We%5rS3Md=thf8LMUxHx>+QaxFo(nPxUpd$VJW!m zK=|zt6P7To@9NdMWT+)#EioVd-7H#At8Y=k)ct64b_c@PP5Nk_tUa9wZ`nL}74N@m zBo>&u!*wS@up_~1YXhWG6xO77xiDzJR)vZr@L(gsEyeHF$ps-8O-b(6+5=rtLPdl7 zd}{!#3C_2}u^i{t((o?M-gtOO8KD)IA5sAP@Ki7d_nTq~`d(u>-gzDRe8`NobGpSz za6R-S6^r%G`N6>GX!n8vD7xmKxDA06awH1HeZQFh0DL9h{w+({b7o}3Uyk1`tA({wHt8*2c z7Xi^4Rk^Uex9}^xSuzS<@kZ!*zZo2bLPs@8=G9tRVHkADSTKCyCFs&N3WhviZ${r5 zCW@6bo{~#R7WxbXot>3Er03GtFe{VbS=^nA-J1c34T1r>eyzzW3pb@IIFW_m33oD) z!^J`HtM~6w9*E-wZhi?cOenq)jr!>$*0AyAjl1XOCQ`L;?6I5hB06#Ir=;#ctbL2a zD>G%Kp!I1FRtj0uPfe2W1dV&nr1qVn!o*Y%mO7!cq1tdnC~;Pd(383jtoa+V3M}Ww zfK8m1-P+V1b86TdElx#K;A|4xr6b>#-)zbx!4yr>n;CLhBNa1&yIH->;I|HBUmh(V zEiZQl0O32)qa6?KwSmB+uQMZJ-{L&@1+zK0Av_{!Tl#J?g6_#*IS8Jc*fQD-V_|E4 z_#5FnlZvhk8%i%_Dm=u5a~^!noHhC^jDjnntO2O|Gl5s4J$(Lm$aD)JlGD&a@#(u3>P`I=PUsiXE$b0QDbzi{u@XB2X!bqT6 zV33xq3;)x$m9QPWFH_+EK#-WYGGGtG?)8Ep`s_Rn$UEnLA?e-+b2t)Qh`i9?clBan*FiAGsWRe}3MDwP1}B|j zxl<^z9f^y;$0tgAk9Wg3_?XmJSg>O5E~Bs7J|UXT4DL_O0ik$+gh~mEE)aqlMg>3g z$(@9PV=H)leZ96M3rWb!qTi~zxVO4Ek5O=y8%iwb*j}6$wk*p?FklG|+o+fRto%yI z!}7V&D|AFxmvk#wc8zK!Na1T$?2P}9uQTguE6buVeKGL>vN3i$V203G!NDXJ&>}YA zB9JgS&;*6HlDJ+-URtV>5K_H>IzPV8T6^zv&NZYxCu;2xl^$u%5t^+7K2EoR~MX z)S+wcE(>^NlXMlm_Q=>P9^a03gd@2ey)mgpu+0Q~XZTXaQXepNX0Fe2Z8nv`FYoR; zjfR6T8T|R%aN+&!}+{UW~uWAEyFU_ zQ?_C0w3GBoJed{2d4d#H9jrC!;uEiuxHyr|YacjYn9D1H zixP;mgW_b{UHovev>MBFepqXBCuXAu(p|apF>nn1tMk&bxdFw%;x~ycY!?!>Ga%W$XmKEWF zHfA|LI#LxKyKV_{~x=fv`j`}ykPXluuv-ktS7e2nIy4Zgk# zEzj9faN3;mEY50pi2A{2zhJSfC5@J!J%@KgLpTaaaw2%Giuo(0FS8oToqoUP5L^lg z1ZoA-+3jvEbvvCtlNtKm3qKI8VtC8OqXFMfYz9YB!BHz%Vi~+Cr7Q`z9g1f-bwzVZ zSYr{v(h7z~+fEW#t@%ePgRLN43UR?<7#gEn zYz3FX#u0kKj=v$Bk&!&RF!<&bS88eI{;rZcVc=r07 z-*Bzp`Fmiqk(&fQ=g~pL;LOt&9Gq@Sr4S~Wcwsn7A@*@hW6=YvJ=^|o5*bG8M060# z83|_431}I|f+C*uKkJ0Fd1mSCG=l?cqj8FnyGGOm4x7DM4ReUbud>-FJBhVtz?Sw~ zN!G@)Sj%>NlSdXxp|@j`?m%H>1x?|XFW=p{qyGEh4a?ErI`7A)#;0(!kWp7G{I!#U za2|-rYo=uxXcg-6r&H04+bY+fBZN((4nkLhhac?8!cleg@4naLI~k~VtAitmZ0g* zaS}KTPM@%898G8mfPK<%q=EtBfZ>5mX+aPFadpWlEm{RixXR}y) zUIse|w_0e{iX{h%%-R^nHr*N-+;*CbN*Mnm8qy3#6d^0uc=zrR#<8J-yH{7NV&kh| z4~_9GoFIgczVvs$e?0qT9l9UIC7nH_V4H3TKa3i7j5>Gto^vE|p@ctv@0%I4H{=K* zNeE~-ZIo04TlD-)wY=5uU+gW{!#t9>u`S(gb^D!}i_TVGRPe=>uS3J9a?7`X9g9D? z^9QrxAc8S+)p=(sSX#hzrM$zPRi>Q?uCmTtVpcG=g0Z7pU$1Y!{q1dx4mS<;BJ2x@8rzBWwZ}lUZH?FQyiROBN;!!dFYxpmdk;JE%G3x>7gP zptXkoe17RU=N}8Qm9#0kR;2G-j)PeR>jMV{TeceV3$2NjQ@txw&vQ8`ttoTiN(o0S zisBjwobxJJa$@b442C-fZqDT#5%r0OB3U*6_sP>C&vL<69}>yoo3Hgd!D$r6SAA_f zszi^f;9BGfEsfqNVmQWj#sVJ#iT!-Dx1o-9kfL7jSSA(bV8&N60BvRFDFv;KUQJN| zPd5E9marxh2N9-#I(lT0^2mzUlLWb8GCEP0?3!dS)pR{rQ=zOLpXf-l9-g4KJci?h z@%PtI!j8fQ;e(sI_bWQUouNkc3rQ?u;}L#=3<}(MTw|7Ut)>o^_)jNEin$SxqfT)i zOG}Bn_)2_8Q>u;9H&(*q6TTU20m3$y(%Gu!QdY(M}x_ioRU60 zZT0A7dHj~^N^f4XBm9N|!kQXP<*T8EC&u9c;~VyU(4lv-yyfn&F!-llZ_`z24rvWw zrzLf1OlVzx{;8eg&%iLQ$EU*J78jfyh4(m?g)+4J*{Rhbe6`5m4bD5?vmJcj=ty+% zUAwcxS~L!e8l48l*YA(m4;INRTT%Gb4MZ?(v4(&zc9a-Md~xBh-2DOudIEp!e@VMz zsTQ`7q%eLp;!)0;J6M=)q6)vP!^** z=)*%0ODlMhRv4ibyj-7O#y!UpSt>DGwy7q$E{q_04 zOfD4q)|KPd6XuJrxP%M@n7QMA}{P7_ffGaUs+OY# znaWO*^H9Vr9tfjX!OGS1!w9|S^2w)8&8Xo#X>2}JEI;|F!__A%(Y42UNK7C!#X9B( zt;W=VBSN#iBN#(Rd%qbobF|T`Kx)cg1{r(L$tg)lnlvCceQ#K`antsNNv3cJ;hj06 zh@|Yu5AlYt_k*_BMMqq*&Js(kjE->CY9X8vZ_H#hF3D#Y<4&${f<`?WCr4t;qx5dR z-E08C!cb0dYt~Z6MA=IFQELNkAh0qG--7GJ~NDw;!&p0kq3>OO(=?DAN;Cw|eT-jk0m{sU@ z8o=>AUR~2nL-++bRsg#j4TocZSX!Ozb~*+-**jOLR4QHw!$(>>!&02C5YrXQa4=6T zzsqFEU788bm2xd3qHoRplh#;ny$}Zf`QxiX7)@a+VLD2qvWv#Bxo7R~v*!a*e+9`q z+&0^5;<&fn8n&48z}7s>wi+;(6bfUgSyGdL;GK@nr@Ob)c7v)}#<>~aQBaHC`0Q|mMsfY z1HaQ)LO+ZpG!_Q4`h2Gu!SV5)NNAFuzS7O4SAG^tLmH&uY&+3#=4hkv9Xn!KIFc5o zk=0OnUP0wa9IrM-2UGbL48R3-iDoO96qcQ%T!60-ozK;ap8LF;|j^ zXQzTwRp>D=I3Th)!ox#B@1gS3p!@$%_KnR|&-Y1>;mOt2k!Sc{os2&GXe9cnz2IoS zNYSZESn8+oJo8xS>c(#i9$1E42}(47tb`@#u}l&Q(M@duH^;;%OEfU%q!ii`!eF4zdQ_0aOVfX61)PZPi|W!X0Dyoq(Dt^99N@LvY5$8wW$Q|S@ue5 zC+Tk?VtBHqB-&sWC$41%x;Xp1 zC=Fr0#t7ny8F{ENM<_!31~45f%j%S6c}ivEAS^f5S}$H4zutEY{`1GlYYs%SDeQ3U zRPaWNzY}WKn9st((i?voym{^5JMfvq+#7bd-H*nktr9IOOL9*L3yBAVC#0|hE&;;s z@>!63`9HqS_9v}1i{kVYFCbJri1>z;DX9o5MG^%nw%!&*8`3r=j;5ck^Rn%;5uN1n$LXZycO>z^eEsU0Gt=W* zG3*1!<#<+#zh3o6>!VIpH1NmityrSF)(Xv`VB8VFT8dWg%4RA4PzE4y529CNDd~jf zXmE2@E|;6Kp`qArcSpb4g5Yx50C=-r-;~yFaeHR&%VmIiuedMC(Gtv|2(E2vHf6E6 zt;$yzyUlvEvu6dKXuaK*Wk@y|8@U?{sBF6JgqQ$!{1tz68D=bwApB!dtyqh!M`xu6 zyeiRHSXQ{G30eA>HD+-}>-u07xKe7ylEQ2*7i?(A>Jw}VYZ*ElsNlJFaLCBKC28KX zabB+`sB8YzM&2&UsN(=L&N&CxgNL2;sD^LRVN$PDSC0CkZ>r+XGs&c=__>^Pp#haOX=y7Zl257yG_aVAh4i zkvOqgsb;AYbWuHXe?I2aNxI3SzH zj={m!294=pLZvKI;z~hkUcVu=e9#SAmh&|b70 zP2+C|9poj1Z>?A*tk$fhb+Jt^E$Y&xwZQt!kV+dctrSj-2A5)4sD!1$_%2}n=P^3? z%M))*gL6o`AtaRC`$;Kb}kw&wFylk)`vqlamuRis6fv*6;-}{9l0h zMzSn#Zi2`TAQ&%X?#Ipbp^ggA$zi>{Ace1Q4zIuC?wUJ}ubEzreTmoC*IJeS#aZWH zB8ZI&hW70Ua%JVO5yI5B9cc%nX*n2x!wAdjfxztcK6XR{f3za_aU=z8j3jlYx6>|X zlMH31)4sGprN^64!GQw4bOd&p907ilR;;Hag@cKu`EKy#l}2)WyLZcise=7T@RcqK zF1jU2I+8TNsR=~zmWW`aRT>!_mj)m2`=ipRH@L!XLi07F|Itqachw6m)oAkfvn6oP zwSv1rA=(ZDODS5nH6Sfj8o}E}1hW;)k)$o$7z8VU1(cAf`}WhUS6>mZ@{v2*%^ZN^Z`M z1tvBGk~~mqHiW8j6DZ}pGP+@T>X@pm^?$lNrR=rP^>5HmS1Oz9pS#Zr(SMiDk@3t- z`-*cqO8Y&8X}|X&2%z-RH?fY;MMDQG3?p|b_?r|UEJL>q^=K7rFh|OgnaLc9N#)?k z9%SwDn-IpCuqhnbl5?bD8O7j?c(FtvvjB5IjKBB{@hT{Gxme2H26NNX6%oP-3YSVr5ljvjH7jcnS4-7+z1owhrDKCTBx-3-xYcaNB_nb1&3nVw zqjlI9Xx=~-dTC=N$n;n*xpl+kk{813y4bMfFKEfNi_P|C6AU)$_RuicK=|%(Jhp+A zV=$PtXd-TiM(g*(a|2;>_T>1q)~X$!92}gTfy4*w1#{ohCkd9m<6@;xHnPKw3hNpO zjoflJ={XAj$6@$T6!9VC@A>%r`+;zq=YZjJ`o}>pn|+xhRuz1*12=T7wr6)0N+{O09S<(b zt|az?6U&1oni7U+@KzNt5sSRE%{EKl`&(fz*yeJSIg&&fyuc+$kibW*9;*tr09Ir4 zYBn2qvKG~GC0E%%C_4#{q#&KOePAg?=X5GqGPewkD@S6-3Mee_ZRAy{>Tf|JR{2^~ zHrxr$Gub!$*AnD;duU$uCurM9{E<#2=l$QoA>SiDm42>*vvYGv>5MHm2R`S7mpPpZ zhLXZ_Zc%V55Xs4bBz-c{SdJ8DfWg;>EJBJxQw5nOf6UOSIenyW)o2#Xe$ zI<-OKa=eVy3|z~H)$l_)qlfiQv(rL;k2#6(=e3oMjg1u-OSz6uTBi`+pi^2lHY}+S z#)wimj*E70l8u}$`PpFRWC6jOWN@=JJ~==9bobj_?modAZ8Iyi&pOomdh6ik;QRz* zRg;!^XX|+9jHPMVwGPfsj4;M6w6SvdK@&R|(II}U3m2Yc-O{>(_(9hXKRmcwtYH$? zYEUK$(`Zy15MR^Wbpeqqm!Feg#BZHVNvs!~83xSS8Uqa#Oks@q)tUZ=UIvA|D_VQN zedz}e(F*P|56dXu9!uKY?r7Q{@dLV={Y*c!uR?>vmx(&`rK77O?Nd_gS{3}PA{~q{ zfx#hw?_cN%Cmu{Et!5&Xqg*QWAe5)ar-Ejqff1E${<#=dw6`a+%U`3*g29vH0Fi@Xqc*eSy@+G_O9N)An&jxz8vFoeRR{b_?MLTiL zTNS*!oA>Q#n-iU6@S7JP9Q1;1Jcn)Krb8k>n?MTtzTOP&-P7stbvC3?1h4EU6dl~) zZA97Y>v`E?;^fvhK}S-kroT^RmTBXLy)G1Bi|7*CQ^=mpmm*31syAYR~%a4;skzN~u-m(lyB8fNA9 z4^4_@>Dl5}ic6SES}e8WU`y~z3OJC$alEOhHULH}ezj^2+D!4FKbl+hn)NzX%f|-6 z=6?r6Yqp`*&|GcoYc)n&@zqjVQa%;gP3yo%=|h8hEbM&(4Z{0 z=J3H{_#puCg?q&v4(^o40%K`9LkXh*O$wuFO+kF2=B=OD7dhyHa$b z2%QkZ{_&IR6T4SC!W0>UtkQrl=^xk1el>%Xp=Zl+ zZ%`WcM==Q8?TP}vSL%+iuR%M(hQNluhQU89fkpZThq9Uh!k6N=sRZuP0ip4f&31Rx zQ8!k34Y?f6rWmoHf@gcksrn!YHUt$zv_bIc&Z(qys0gOZc~9?{485lGJHTOHbZFKJ_ce$kT6L+QTO7&%&HV4p}$ zypM^eenKqYLSwl|nj;~?I!))F({{1qQeKiS`G&(ME6At}-CBmhSsq7Na40;ui1j34 z!oHx`<1kv3+#}Xj*Rm3&O>0n6w^pU%fEZpZM}RjZ;-+YeerRb}c~IPHrFVwFiF^p= z)sj30D-CX0q@)95T&6{O;HWSlp_39vw;hnOR{%aMVz9())Iq5uSL?Gqzr`}32u7Nm7KOlylZ;Yl$Z|I7Q%MmNHBViYG?D|Vk7{3 zJ-JpP`js{|=!r~%-~VdvXN|+kSg?AbIsEMl1xD_S`5~m02m#S2LkZ?+?)*XsPOE~z z&l~_hTkP%p@-N=b8U`^$x7{aGITV69`qlMdp}11ipwO&aNW!hPSr|>hAp|3tBb8yW zN8X)aF_`tij~_b(mXZbv(0nOC*v7gr;q`Tki(VHD{&C&+76uU=8(})uA=i%%wHw&x z!YW2HlS7}7h-@ra@vv78nP~{QLUemeuB~!jm+p0YJ=33;rpiX5yO~towWlED_Jkjo zv!CFO8_O%vKP>afT>f(*V7GaPR*<(5+N^vTQ^B}yF1garkCg;VX2nA#z#0|pu(!bK z20X-ZU(L#TsE>>zlaU2Z*KO~2y%hMZmh!Ix=T@%H!Fn0uEE}Vt5z#g>2EGXZ7o>E7 z3N(?p9BJ5{m5mx)hWxHa1oo`SN2jW09hLpTnI+;iBr%q{6G-jYU6}fG`*`7;mNWbH$spBtsgh zl&mX6D2J3K6}eqs1o9dnyIYf1OCWX0fJMHU7$2@Lkzpv&Ox@Z}TAPZ+ePXaXIF769 zyEPW8;p;iw#Yh)GT-i!G{e-JaTl8!(FU!4SVB?a7bEQ6{i!XlwUB`Zbzo6L7TD4hg z>g|2O;B#?CAGrrvsgqy&L50I>2ez{r;P`dNy*Ehe&A}1;S+n-;zyJ8-*wNoB41iD1 zbBE7@!slj{R>k?-w?Ds~?;p3NfbLkxG!0ya!gjdHfLJ_S2Ol{GMx57&i|G^{4~+J> z5*QX79@F=R)|&;0@2#V)qamS}t=A5Hzqq42y>(|IRuhG%!hz4e&gUnx&4e2XzA`Q* zLc@jh>a9U=z=A*JiLg8UJ3!f`sc-0rmc#d)Wjf%*m;YCTzP5s3wPan-FQy%v1lO^8 zl+=^ao9hWi!ADhrWqE^^LWW)->UjYO9;1km0hN;zZA?1z8670UqhEo)?_Xs)^f(&@ zk9;DQ+OaGo+I=&K5*kkl9r~=}{^>2;HPYRkev{>c*8?d`z|U1h&8f;kj| z$%3D0or4{TyU(&UBr|6H6f_kw{IafP42r^1AIy5fz>2l!YZ~_8#@c$ILbT?@A4*Xg z5f=!2$h>F`suZhqAVre}Q;bFz@S!-a*om~xwgyp~6@Out#x|0YU}(|mi0%enEbmyh z$*!ljnNr;C*%!%xxEDgUKkxZza<80oWOak@)eUFP0p#D$f`fYCyE=3!4w!Fj8^MJv ziX&sig*Y&0#kr1#%p~nS)Lzb(+9aS%*@tlm%>{}D_Ny{6*&?H*D5-H*g}z^L4(ajz zyqOz6N-n8DOGpOUsILj`^?LGtLB!#**Q4#C#brezMY~^*F#P0Y>-p1%`aUDpsI92v z7o_4~Q%X~;BSBP=z+;i>fxa+iAv8q3nw!KD_)*FyfVr>zA#a@)0A70nHJVKLNtn^$ z$?yuVTbxZFkp;-S%vDEX%|6L*IkLpKs2YWT~)9)7HWM?8VWGT{h9RW$g)(A7IR< zR{;|R^l@9H2H5PUmQ1RgSUQa-0c z3A3c&d?r)i6QRKxt%bWr+-<`3uj1Gm{W?(y{*lF52})hB_w#UXeCMO zjlzo}+hQN@bU%jUa{XS#Csn?-p6f7LLzp#>EX&L-wIGcJAajS1i#myn1-pM^FESP^^Ii^sO>g!w96lcUC%u`QNZJk*cK_{HtgGda5KOTAQ7q4Z%?C_}KIE>jM`0nrQV=X94aRm4 zbqVP(C<^8>@Os9AH#U4mwArb89u8HNCc=93E$1HDQ>D3AR;zR-Oe?Q77L1F(g%;^< zPJPb4p`La9UQ|%iP`K-e{$V*JI#ZUT%=qjxHnPx-OpK1RItG8y&^qvESu{s%!(gvD z>*lX)BMAzV2uIr301RfXV|;hg3+M^AtU~y0dv;%w9kP{gQO ztkC9;VhwN<%!bRlBV5)iG8pdt{_<(-pARD=tx+ip+zQr`8*#u}OH$qtar( zd%qyD*6#06kdUode)>2I16#Kg54H!B{sMp3R)ED>Yr~TjVY-6GTv93)*D9+5yQ)*G z91V|Fac#9CaU5&9l4Qlf4uaXPU8EdM`b%$gk(j*2j^9mSZYu=aBncGh`^;Iwh6RJy z0G%y|o;B_V4+p8>bFD9j8j}>8eVDTn$apEVX~$@*AjQC8E)M5x(}_sZ)od(H1g>*T zjH7|F^5Evt@r)SkK=|{)akI{8G{|sg&}?>g`@2n~dF*x|NWVTB@He zYp`XV4r`Y5sl`>^s3wiUF5{$$%gprHKR#~5YU5sT5d>nXnCOr|K~o0AV$u>H^|@ai zHU%2Rh7N|2H~sN1$+NsbLscr4EWjsN8ii+`PQRQvBFwE}hH2f7CED^Uwu0G|$fhN3 zI1NWEUvh`ZR|2tv^U3Ak-i&1+{OQf7j0IDpzP!tUm)z0hx`f=n12n!Q41bqP0SUf- z^FNGOlMssM9rrd)5g0WLJBtwknBbf!0@oK3n4LI+JOK}$r{fcLBwh34L=&Oa3rzqX z5r8=g9*r_LRyvlb4y2#-wHs++@GDdp#U*J~EYWE?IvKh*NDFtJ>%fmXeW9&Qbz?n4 zMFVP$8KwmYZnpSq5 z@INFiS{>0!K6}PYdww-2l$5?*OmLCLZ?q8rQWR5|N&er33k=f9CPHuy}AIH)sJB{!BX-^j?Q=3PfQTUMlwtjM~P zs7{M78Ux{{&o@^eDzHb9&-@_3M_Nf-(wNGIPKMo^YX zGTT;($yqB7c%O(di#5Y5tK3yu&HJN^nL}FX@QTOcBE4D<96F;;H-?IJr9+_D-n8Oj6!I4dmS9hr5tYhn?ZHznyRzY|knC zM4aH_*;C)G24=j&N%1x_q_=a;!ik8{HAQ24Ye4L#CY|ybNr+R$;DggYX^cMJt=8+r zXc%a)wCRrg7_>1X?!#$aukV5bqvT=kjv6gJc!6~3nYy%y#O8~>`Aqp)X2Vxk!jx}h zjd*|7ZXdZ<*tX!XEFB*(?vlyVr+%?X99`;_7BAKZxUoKb_&T3|1sz5SA~uORExtH{ zu3&TCTlW8s9opUwmHj&IOEJ0wS$a6VwRny>_}~e5g@-IO#AFzEO!$b==#60Gr?;1( z0s4)hFicvPYKQjZH@lEGWo7f=??#8S8v(rkP5JPM?xKcBIPENTXEhOJ4Fae|pYZYwvT;=TO`D#s`H!Szddu z%LkxvbR!*_Cph5m>FKu-fv2gY!ROEiGfANRk z(%c=hpkZLR*+EfKK;8{7SFqr%z<>$CC{uC>-Y{%6bJC6x-;Ef8I)j;>(TTl60H9vB4g?J*6&yVB_UwT>j?!IVd%Dp*70hbuOVj*Sg_96Z9x&+lR?UJWS@{ zxQiY}hj3{X{8wd3QI3`8Lzg$a#avQl9zz+c3H`AUECb=hsEHoBi0>{Nmzpl+l|BS^hF5#X-N+7TNAjl7)qn-EaqCX>%tV%6?R%_ppn~! zmujHH^?Qp>g>!jUY%q){jPvTf41gE8AEsAWE+vLX6Lh0O3kvDg`%9p}UwuUuT$M+d zW9Vud@Vm2_=dUBCstfY6#j3x1|L?y zB~Q zl(`Wwb)PQb0J~>c1uH;n*Qe2#G{3?wIDl<92h#fsXVD+?^vVFu`hboP-Z5)Ukrjqtj~V#x<^JxwcijJ8>dNS_wB050pWQ^bG!Hy53H#$4(Kwkpz2K$Af#+qmq?1N}q25;=_ zG_$p^sjxQ6@f?h8ydRUTVnLoJxK*B33va|(uPq5vM0Q}JA(4};&h>Q_ZM`kUG#-%t&&X&35 zSdC$lG{@!g&?nDP`c(>xPD1H8%uX3wM8(=&5WF&H4K4|?R1BO!ZWfMJS`X*w8}Hc; zwaAyj2Ems9RCpFg;=;@MdU#pcmENdiI;`#&>DHzG;FYuk)^jTvYZm7$YHmZSrI2WK zMb%XV($%;V zuA)_mtq$P2S%YC;9ZKveWXa*G;;@)Yxe5#h39hc{(r?X8n;nH|6IMi|6JZO{h|6KX zraF-Nt1U^fT4V6weh)KdETMYso;<<8)Id)$%o_(l4K!Ht<|g!7Ai_XxHXGt2T7pp~ zS32GsDON(4jiaX+Ok*MZ3>f_DzkmJp`)89Tw#dS0Z0~RhFuXMwPrjS*6SbN~q{G*O zq-%tXoCAjybO{iCxk;fH)Y9JIfNAo7q|mYmkDJJoPi_JXZ*JOHdTVmD$>5JzhtdGkz-^z9tNx<4gJGnOHJm`8J%cwciDjlGs9hes- z%!dk`m(%D#e@TP)cLBbyJ|2EN!yFpq6g1dc8E%aQ`%3uY>dHOA*&zC^p|tVd&wmJY zBMpwwJWqnl!{Muv?O} z5H>NE>7h@*{ZS|^9hMap&Rh_!EK2&ZCCVZS&t6+w5~3i}Dj0e!26c33Ng9MlgPj@B z^J%B&g$}G%Fg2Fu&}k68qjq4ap*J=x2wD_4dXbt|W4L2#ENHD<^4t*sClYLKq;)e0 zKYsc&u;6yUTeuJQ9@J@xXe)5Cu0SkKqS@EL+6F;qU0P}HO(H03hRwZ}BC_gf5WSb> zRB8vD)L8YXh+dfU=$73^Bd4YL7S|p$hLuJZk(CEu`2kLK8|4Vg6hWDdt%t)=9+TB* zEac;5hv1bjDuaudj+F&HXE2-Fi&FAc7Js#n-a~i=AXO?w7BiiKF4d)5iRl{@T*Xl6 zhH4u|Ai@nJ%e6}Cn3x+p6QEYgi{SY|b+@dP78Xk4Rn#gDZr)TV_mNCNmTnzjxMJcf zW5Fpr8ZS5+%gax~g(B(-qq5#u^D%T@HIBFAHaL6jphdKoIwVb&fHm&3yQO>)kLR#n z=Wd}F72&74k_Tti2*QE!au|I-fbS3C0#{H z2%j*MDt1t%9=^NL+*}aq#`4#{01(1xi)M2}?7DDpr zM?993=zcFiaIbB~V8XDOJBY%H!fM()xkJ4)va$N?RO*qOa|?`j^_5TQWlC#e!c%>8 zll*$?#pbiXR$1EsVKhQMq}dvbHIIfaYrHjSqJ|ipydw@xd+``btpI%(OPg~yoFI8V zqR#4>Qn9cfKEWRN=ZM6N(xU$AL|qTSVQI8XrKSBa`7|quNr!*8^l3FPeQyTgK!yLs z|2)Uy=il)^`xCl|but*<2eIAW{pC0u{~i$hi^N!g^u9mFH6WM(3?7UsVO;Mc#u7zJ zXNOt^-}0h9UnjwrSC?5T$Hf=md*Souk`C)r0N_ub|8OYAbJS$nF8Jy$LsHD9%sKFf z%d5|SZf9M4;fMViGiV-py-OF;KW31P@y6Ca2i_O#`B>2$+)UKh7;%(n!4}-ty~khkwAmh z5ezWiV@8%(FbC1X;ic$AdT4`b-Ct5`(o$W)0$Ku_9!ts4q`uY;Y@r+pfysjBeMY0W zvDF&4tdq)Y!8S)8WzWS>=|-uBp^?`vl<;>r9OigG%4gnR&Y_D;3|*8EnAEW3B}!Ic zK~WwZy^uYfM$v9uD%f!kR;amhrnI)q%LSJj$6)B?Wu;RtE3iXTXku|~*+_6vD|6m# z@w<|WlWJK>gX8py>IgNmC19n`Q^`JOA-ix)CCO&Z_>PFSj=T#+y2Y3MWO?*tk>AEh zMTT#ljPxp_h!9%Dn&OJbQzkzZf-<|zi)J__zoSZYPG!#KBK1nly%JgB_qrs3G@2av zN$MWf5dat*m~Y01@6o=*Jj+GpV#%rG$yp%6V7kby1V*pM_9ReXs95 zIdC{}GaSGZQ2VHLM?!SV)X!SPX4zSpin>J(3ky(mI+Fcv(J@fSC*OqB&^5`yOguj)$Kd zcJ2J>vzwDXXAxO0eXXmQ}cg2%Jh;g#Wm zkX-y%b-@`EK8yjCs4YBYIwcTzSJvt*n1in1nbcQ-7mp7j_G&?lkPgnFk%qZD)(nLZ z+}Z6kH$0t^v*BK6z-2HMS_7)FpwD7yQnm}WvsS$hyH0x@eK!;zO>YzC(4@hTJFj zR>gV{mBLstNtR);?pUQTUBV+(GIEJr!0h$nAX+!=G?WgA7mgY;7kNBg>rBH<)4WUg$X=l4Z7&cO5zdpQ z`~Ad)3E_j))UdG^7AkjET9C#2&@K~Q}Oz`EX+5nj6?d{_ifeOD93gbqM^k_2K z+(ZE}yN6FsY%VRw5(zQO51*^y0U#X^`Tu-f-%nHP7Q}W#f5Nt!)|we8+51L^ z$%g}spV78-#u`M)^0)vq7CJ1|#$57x3K%{7bUb!Y`a){nv6B@zc|=Cs%b?M%CTyV#w+Y%L5dz8uOSNy=sw@a)S$;ofw>kv=6G1<83MtapEw@ePuJT07mc={ zt+3$bw3W7XJ8OyISPbS^Sy2|eB7!7p_kD@uiq(AUB!z4WwO)h@msVdEfb>;K_a^&$=s- z!#ER-H9><5w@1O5I;1f2%_W&fqwo%!7Mt3g({M|f^yX3Iw^}6z2dGYb8&H8Nv%{Ne zfZ({tAvy*)Wg)id^R6Rrkx|Ox9m~^A+qfzuGJ93OP@vZs7E3#@EnFp-11sA%08UJa z_JLp3d^PVlf8L#Nz|`E4q9+)OX)Y!D$SlmeKg{-aw~ZB7VZq{Vk~qRO5u_dZzJ)H#V!`9> zeV}lUIUJ%Y9~d1zvt-KeCQECK2X>{O$Evi-($C*;ID95-_{@O#;!Lx*K2q66VkQ%{ z-s~J7zea?|>B;Di5j1JMrjyZV1TXQ0L*~=duNoB%HQIqL0N4T2rGc>Ja$EwWk za1eZstAVi4;PWAP@K8kP&!6vv;Ooq>gIh3P_kM$S_okn59VJHJSm_m!dyVE70m_$P8J*K9F=On7`!Lw%Cz&xr2eonZiA_?0jQ<|O#r;kR#Fw@1Nb z!G{0^#-bI67-RYe=#s=Ue06iDJW8%)ZqC03ZNKL_t({`0(YO9Ia=onmRGRo`m50 z061F4ia$MnJuU6&0au8(K0r65l}Vj%}eSksL~O09Sa&_`6Pmc`i|rkSry^5AxO3YJQdD z?<$mNdF=$`ii6?2s`Am8HUx9nj+Iz|9r&`yDW_t2lYe;Ct_zkFQqkCtLeo>@i7h*h z$7c(1!C^HDkR}hF5pgwbWO zXk*zcr9ru?As!+|Gi-s3c#XSRz~B>7;nNT3J?!;X+_gvFk%QqA;O~LNSt5@^3lG(` zbZ`dM8C-Ys`HonYJ_b1Jv+nAo8>#F08R ztAGx9durjxRV1g(0m;I;PY%NSR9V-ljQ@;+a;glOjhP9zVglf8+tSeaC z2peR<4JF3532k;@)FnzfrTouBL$}D#@B~l$;stLFR{AURUw2qGMjKID0dFmA@If5S zqEcZ075-~pHj9xj*fyZTy-?ra!=ANeA+G(c1a&&X+|C3Bd-A*fMKIXie8GpnfTL)S ziZ>wN@+AGEDJhwR+$5ty2evyERUl1edW2*AcJ%N4`+qwKu7*7<%lEMAU|D_kWY>GtAiz~V_~88&{N##BkQ|0aCzQZe+jg6g1zo` zPHIbAL7Hwss;>7XP7-o-Us5>Sv$psIzgbLizDfm^)(Fdt0)}E?OqV4-RBMtrTnP&1k(YiBB%q#ul{e;uoW#4qH7Q9 zHNY>p@7_;%fdzm4Vsw}WV-$RdZLGsB)1h~_OnTn6V2-Xf7j}2U9JoK`gZN(QvY%^L zx3PHA=Dyv!FB%?z+cFAH1%j7!6x@4yyzlS=DKTU= zR->_D5m<{<2$TdrTaMVTkEz6Gv;=}%FXzjKzYaUg(wU^a3-AJ$OKfSd#-w6IfaShc z8_G)bOUa6sNw8mpHUxfD%(7t4f<2e*_~EXFU9D#d1vAOcVJWK<8iXsA%u-fHfcCQU z7kmE_JsORkJC^4`5}YNcNg?}lI$&_FkV%Nn5M3`z+g?^Y`JEgT2lkw+u95~jT#Bv6 zLXyQ*D|XRS^T;UU5NAwkn{iVL3Jc0{ zxr%1N(EN+gU=V42zcZIA@-Z%C1v=!Xb>q1@F+UPqrx$gXv3x=4_*2 z<-RS(U*TYm+tI*c!D0DjM`V$owWd)}U9M<3Twh)$h`VzFL}sk45s7PBSr{D0)-8|!ky0Q%r{&=vtqZnKxzven?n_Y?X3m&oQJq`|IckMEp-@TL`7No(29Tk2JyAt}4 zQN7e-`O^OW_Rh}Ea}D8;wk2b(x~BCv=rBcTeAwi4Sc8*R9GGuEm9HlR;~9vdOG8}gSN5FfN0bx0~HX8h2Ric00Tn9H2S@1uWB&jzk1XT`pamF`xJa>$RDg2Wo znZv>9uRZkcwFHL8W1bhV!7{&qdugTD-EFi*cqRh3mm74KIp}@9y!xV2P{H^JUHFdGHcJSJRBiQs6Ax zAXx3dS#wc{!P3QOfVQ*;H?1zXsFvWO?<(Xd*auX0!c^DCQFc5z?!-wNm5zdRmm9*{!JSDJ`W^B2-2@K~BjE6a zG>LFtq-YJ(N&<)*4MrBEW^xz=cfxv>%Fszpf|B`SCwdr~VJ0lCeK8Qv+NUIiB*?#! z7C=3k;b54)TJCd5Cy65|qgo_g#;OR9?{rovHA8UbBp4*PqM2U~px;Lq&Wm#fyjngO zErZcZtXjQvJov>eZEEnnP1flkk(Ei3(dWG}de;6DSTSr2yxK%~7L{m+zof%Fba&n> z787psT3}eBBt7jb4c(#0&<~UYJ1$IUF3+1CNkLe~!*nOnSoF{Wv2520p!&o@Iwne$ zc>On8Y9gGlA-$DY7oA`y{wLJ8N@i2M}Gk$hv z`d9bt?)RN@grEUJfP_ok*sI-dFHcmivCM)ira3#tgF9_PEp=%^ZpUm{ZC;4YCJht@ z4EK53WeJvAKiW^9g->a9 zhae`y=2LvhbwG0XC(x;zIu|!A0fj#|5fw)KB#>ba8o`yt$nddH7#J)zyuY#k=G_~b zq1mPNvun}{E*T$o{}zxMX6gNb>Cyw}(i&_EpHCcqr7z}m7_WfA7dJOwZf;m3O&tD& z2=TS^V8HWb_>jRcuD*dV(+_?A2SLg1!ectK0Kw+P5>T2Lt#GhU{GOeCyZttUxrzL` z3VloP%{*D(^3)O{N%!vq+evsF88L+D^Ygvt$`hoH4zz}Ru+rSS;;s189)|Z~Z5HB5 zPb`Aux8L}7GD%B{{-|Qgw;2K-?3o$s(1w%x0_2JBGKbfP;c>tr-sf;(R|V0d5v1t} zuffov`|5jx@Ekrk2@q@?80T9n<`_5!RxY@aJkh2|uf;}att(kYw4j=);KnwuzUw=R z{w4?(0`K?@I7WkU3MLC~FDVcFgBq?7PGUI+#pvC@ik~SYj975&=dgZCYq{E8;7*}F zo6q==Oj({yN;33f@Du?2(O z64t9_Qx97%L(e<-Rvt2A&CgGDZB%A}b!z-~8fdLOYxb55Mj3EvjsTl2I+WcMO-oii zorGgONBz!tFh1>pX3aYe=sW8T#dJ=%Y&t*@h3$$1uy!h}JhN1aCg`-ypbz^{5*=qe z`T}VG#%nNfxTmbM@Rzq?qrsDx0e}O*NslgUyuq~cN-~udAhw0iHd$o2toqDKG-F%6 zNu`{vP}w$97R;&?{-ESL!SReqOU7t0;SVXc#5d%Xt}?Pj>ibAExN20`Ah?PRB`zmX zcCP9Uyu9q!;HqAQmn9Kl*rRjHm1OAV^JWL5N;8$wm?i}Lg0m6`S1dsU;H4Bz)a}rf z{M5rsdC@GSx<0R|$l1X>+yxbO%74(LtHAf0Sr z&;~5Hg@9=Tr(ljGuD85p3kWO|8elpAvJFF^-IDDLl%!E(`5FCL$H)69)p{)^3u{%qMJBk8y77KO&9$PC1N;#~TBl)m~`6;-6z%&xkH~hbU$hTC^5&j{~1Ob8f zMn4_MzK3KmPr(73CoJa(7`)wDU-z!cN$SQT1WSh|5UY~Iv3PsicyaV(HC&tC)==S^ zoq{Pln-1M-ZMRw$Q*s&F6lvv#zlRVVe)FN6gCI=I73>O0v0n&3^rB2zt1d`YO4zwt9J>Der==)gClt z{hIy#eb$eaZwC88ItkH#jl$E2J1b!)h%IM~Hx*V^?lW?gN@$GgsjiZrM?!4aoo@&C z%K1^)Kv^hUqW8$dR12Bqi0mwmLgv8)pFHg(OTrGFh5>^ata@b0$nbp0jpon@{pS zE#PqYz42&q5#5zf`0|)gEBvKJ3l1tKlxWhzJ1$2jA}kDk-g(|^=JIpX?bFKfO2Y;Q zyGPo^VxVlhV^?6|al7q*W01*+@XByAkk4V;n<@pWLhlvzOm>CC-4?&|&^HOuhiRYY zxnbI121omYE>IR_OD(`|qtzj=W}t(CCM*A76;sPRVfgCWgy?diSeM~r6h)qXI{xMO z^fWNxV|{NTXrRM^4WGO^IeiyU_{R%}VMd3kD7#IIbofHW(r=hKI`S_9G~Q=&=>*T5 ze|Uq+FGpZBY293W`Ev7xtoQmix}=>5!<>bq@b%?&dP128xbPT0=`l+y$KyZ7V;>8S zv%i8lSrw9sb49Yh3IB zvD}CXD7iu%IsodSoPJbU`Jf7Bti*eP#1yve`N|g?#(N)m1%69Q^v6hoL3ptR`PNdw zvSabpA>jGYPQ}9mDbd~jq>D&WfZzsbFy;#f{nz}Dv*FS+Qo)u-0+nSd`1D9&;P4J; zFmJ(8i?&SCwhaWYc|qm2hlAIw_G72fTHk5y>_}`*I`n#G!}^|2Z3F2xV!`1z+iq2* zJc3RQ2k$N^qiFkSi%Zg>>56_PS5~?TFESBKC0cvq_D-?1C<%IZVag4i6XJ!1(hNk_ zys;{iqCFd&TC&pY5eqDP=GE%OZmg|Zb`E~P9KDr_qH|BQuO;1wqx16*8nV(HVQjLh z%vh~57xW!_){LFYb!Vrs*^V$E*-IE>_Q)W&ApX{(Aq$wKV8 zO!r~G4nMXR9f?1XATypcSDhMnkW+dAr{L;iE9)?yw5mC(=^o6&N^kApu9A$%W`$NZ zIJ^jjpBug|`>w*WwPSVsP}@xBT4%z6_AZ+}t0O4ZC3qQjX~Hou9jTxd=7IUO@VOnr zbh{bw85Pgq7u1UBhEZ960Ad`Fr@kwekhpBK*8WMK zh_F)AF%8DkSA%81VECSXVZAh8Hgy~hFp9|0=_x`>P?hO#_QNo*x;Hn`rlq2+0K@Oz zz1axpePnc4S7Mxq(QJA0=7@`T8v%z^Xn6q=d~*?i`0K^RR~WRefBWt0mw>;46<_i` z3@paeEuV?PpJApJA08PBQzE{+wdC%lg@-Opf&LE!;j{CzTzbx5*_%`P^S7J{3xQ?H zn%N4zN&tLir&}+o4Cp`7ufYrM5y*Ab+@lUX-aGXFBG)@jByO6`)P@x~a7-vgUd*jR zSg~k`{yitbaztA(M_=dQ;o)IG;K>0bXn?R?hN(mM?G!wmupVpJ*xVexmV>VWBJ2qID{E2wrdPsEETjFsQEff!DKj20sM{ z1jf_SQ&mK3ZqTB=BC{6v6}@HXC~48FhQodg<~^8}Xe;PgShQ%8bm-N10Cp3XV!?q0 z|7v&K_c;Rhwz3?sC~Ys>Q;KyQwbTh+%U2xog@&~K>tOu;F6q9bLc2rSA$a~Tb4mOo zzMLwo5{sPz*3$F{VdXwg)-(||(pZi~QZ7UrZj@1fRgcU!`^#L>q?F~U#|{gk!p?=K z8aHMw(dA^klIuA^c1kkW3o=^=T`Q(6o5*e)Gdl!>7x%<+dwjr9XG7(qdJj>go;}xk z@@3U~0iJ(=77Yx3Ie|mEUY{>A-tLr`VP!o$5d@PD8<={e%j9y6PSKEM_jw=IFR9$=h`&l<=5`NntQ;yLer)O0lmg<^$wn0gf;-S)UW_p z&SoZbSC->sA$c{$=#H%)b^{Enm`I%11j%M##QOu;wUQzYvo@G-Waj*)&+v1tw>#EB z?62*SLn{F>=y0onBCjFJF#DUwxCO(QML0&UwAr%+!utcz*o_U~@aa1_s|3X;mgZn^ zlBG$6e`Ev4Nxu1$y0fsNW5QI@Ijd;>EQTE@XYm6caM8~}Adiog6( zD}^pY|2~Dlxf^RJP8@yG#(-6p)#pZ%PQkCaq=Z4G?jX?O1|^yaN${kx-fCN{7l!CH zLh$~P_i=Q)Mup{wjun;Er5jOyPNCp!G)FhqUaYAMy0x9_&^tun@8e8TTnm;Tdc95E z-X88gWuTW_m`>=i*cu6VKMKebQ5$W#OTc`N>gWA zPwFP%twpa=jZKWAjoYGBGTJ*g-^#9*V@<4AT6>^laHjXKZ zTTZRfv8dx7LE655*-Tj8%VELcibazO)^lhyI6n@TeM-qlaFL76LgD=FB0v8YIly_~ zCzqx5SU^7$scflMR_A8fkHF<@r_gpQ;@P!lW5&IbuEFqP)zy&IBMGkc?9l^cY8=Gp za1EZk1O^|x{Ggn0B*8JitDkLN`6ISKQ&?7oG|IEAJ~Q%NJ+hgi=YG!C97binNbMeS zXMN{o9{iRI4#M*VdpPF)$Jh1!q?K;bBSld`sK5n^4hO~G}qRtD?E zrS8);NN2lY4sC8>!D3C#(mYC?CbtbvyMn=B!3@uk%;yGpuI${vVjV_1Bs>^IDC}Nv z+XA%k#rT9TUf>1vBmg8Dn#-X>bJ&cK7_(`NtVbHaHQL^O0~Efz;5hp75-2QG7*{4r zGTYgm&MwYQPtSp%$sB zjwG}hHvJ?Uj->0D0bh@OQ__bIV@R>yL5ua@{SWWL99ls3SXl6Yex&0mA3Pp7GK>#t zVC6A?@Eih95BHIcHN|9PiVa2M5JG8SFF@Fx9O_wRl9+JV}g|wq3Ad zuWGb*)m}bml)VtA>W9+_<`GMG<)lTrGH#Dv>dGWky@l)2(k(oGT~3n4ug-&@-U7=rK;L z>#*d9*M5IVAP$vCc&HZEz|k(aXg$i809(~FM&?fm<1KsHv(zD# z?E!J)mJ+X+wt|Vw1l*1TZwUlvHO&jwp`V40& zI|9lQb_GXK+dvrXdb?6xbkfR@yN1H6KK#mmIUw{Z1zYrHj#gI(MBfqIzLJBG_R@6q zVB>Okz$SNTR>W=E#AL83AwgUPx4?o?S=j8gjR52G0vGP-W>{`k*}H^X>IQAhZyX`M zK(7+(4s|1q6U15v2M1d6;Lc~K7tlI82>$br?|(WF#x$C2SaJB{&5d}G2*mD>Y(TrS z3*+#q+LS2KI&~N$v-=N467>jabj_cn@fD2)iMvIBdN4yIX+;2-LR=d4A_k0%zl%d4SZFXC9#w~ z7mMK>>P%YS`Q2gm(82C-M*$b`JCvEUilq5)cg>Mr35ixU7W5VxhLeg2(#FyB1urdo z0*s~bo=m3q7!Ykdm>?_#g`~Y;(0kff$dpQCbA)KX`GbXoqU{o*y~0TyPG;N^<8X&C+|m7Tlo+xkyWu&?q@NkY+KyOQunwY^ z=VJ)2OMa#9h3mer(3H`2Ny=hqhx^|;FFLDc4=CK!VnR9f>{1sm6DxzIAIS#JB)D}@ z;x6HryInB^<5HJVwAhr)E9_ICo8D;D)0hsl3j>4Q?>>&05o0Af7ze`*#~v}BTpes~ zVpiP?yXZRpXtV3+?+ZdOR@3@*Q+cAMKBEHgu-BCBF>x3>N5BEJTku0+`@HRNm_5T6 z2eJu_%$9b97qs~F^_lb? zzLv;Ktz%-K<&9kKZhm}&Ldya0ooJ&0!$)Mpw+h2Qh`{dZE{^_U<(n%Uyi#%Wt%u=Y z3J#lKL*ILkzA*;di28rAB8wkp2SkLp6Q7M`(O47hDg-^=mNhV!^o@3Vuzj+AyWq+AIz&`5mIE>@M}skk{;>aq1+zC8EO=zlE6$|D zk!quH7Zf5uR*MsUuPoXQMa-WH001BWNkl)DpXc5Kz2o!4HTXXh^o!8PVj zcA`#2JCI<1p?oLga7A6zWj|gf;PT~`N)`r4vMND;3Br=3Rkx|LZh-5y z_w~qImo2aif06zuSCK;BfqKE>UpL?epk)+W;u zbV(|Vu3|Wc-<+HvP5Sb{p)Zm{c2y>gT&*ui)w%#9Mx5oZ8^6M~L>zvrDU^U=X?W1F z^bNa~Xe)lp`*@dEb|7l3G?_4cN;h{OJq(i)%Z1+I+fSN`1sJ|p7} zfAQ8BuwEX*CfHA&J;jZ|SFrjaFN~Jjq(`veXcO#7@R5Hr_Rgg1G57mvTjF8b?Z)8i zAnpEyfao{dyU1u{eW3(cIS3ZG#c*9ZlDs%;qK(1AfrSRY+ZPg?lVaH_*fCs1-oxp! zf-nSGBXtQ=iQsPc0l|_`J(#+GbV9KF6gG4fEG2@RL(3}o!n=a|)I*CcX{WEg;B_5H zuPf*El}jO-!?ECdA=kZY3c$Jtjyei0pJSM|Q=LB7sl|HPGAK4AUTzr*OM|dF zl=OBv+64bg&B5Bppml{ys)qIuECQ^s3zoPJm1Aj01|lRhk+FK!8(Vo6oWa6X~MZ|jsn&uIYdo-6GIZ^X#Fz>j-s}bBo=%L zph#GBSr)(*M}mRD%6>aF#$!n~RpsgHo|RO&_(U(QFQ=m`V0}b=#yV?GO2`j!6gA6A z*34Lnq*uNt7%#TUqXV5VL;WmwYng3>OQOe;RkoO9 zpp!m00SNa8n@WS<2nGX$9TmRZKzs-L8KAE^ea)B-Ej#>fnbKSjqoP5wrTI|@xDuH~ z$<}KWJp5a;I;3z|>JD!>o4(P>w4A@uCj9A^ZH3ogJRN?tv+p$`0ag}#^_OSA54kYt zLK5_Sguw+hRuP0BWgARek`i8t!y1nZL6sWQp?$a-?LBqJI*s;P^TT9vbil^@ogrqc z>2$=@EF$goB*NZtNaet@gef$|Snww8=UA|V*>^UFCL&`FO?U9Ig7gT3X!?W+!u#W+ zLn83h-EQv=Ryl~_ai7Qo(>0kwQ%nWq{Tk1q**Vy!!r7+J>$dKdcQ|<7X++CnNw9<( zi~5=0U>qHiTI;aXIU)DcImPNIFFMoe{y z#EYRBX=R2{iCshS-`S1<%GM2KP%EyXsY7Aqzb4!c=%vh9_^*Jg+^DJ93$mCIU9D9! z35%9hac%3_dCj1BOA<06+SbM1S0fZVU8Bqu=FI!P}+xh$U+z-7`@NuLveuYL3+wu`PK z81|OvtE(AS=s)qIuQwunUl|6g`HBS!&qG_10Wb@Le^mI8NpKbOcNn7`&>n6bbQ}l+ zPJp-ZQPDt;1pAz5@k1jU>wD3iC5=NQ=b%dk3>G@9lvp%oVZ+O#6^q)~ zT;+Pw=BC$~O@y|dq>-NluLMrK$)#ZK1;5WtgLAo&ukTB@%B>VJ%yQdf@=TfeuVv@E zA92qpcxhHNN8vULzO@2;d-*8tL%Mr-X$A}@u}YofK0i(TKzIoz=%pmJa4e0jOjL;W z7ZA&_5qdQb$~k@KI;(JBcL__%lKEH^^zVkp(O>Y zTpo!O4gFaZ^%8GcdC3M6j+e@L`d@^VZo7y+l<_j_>8Is&EP;!Q|jS0h|z|( zx)Y2uN_-PPC)UcR$U+_1uq0K^l^xIuA&&%U56CNXjTKu4o>y6#)eQ@P;Gz~WEGpLp z`xOW#2n!otK%Jpxb)Z@p$cq|>H60C;=fZ!rp!t?6McZ9d_2!zgT0$?#t3WZn6tTIf z{I_Y<4K=k&V-{Rn<2ht!QI*c3pe*f2)P-YrdV?-0vXs_fJdldr@!qqeXHVaZE0um# zJ`wcS;qRt{VhZCKzX0)9khcvsj3-KqH{8*z-HsN9>pB#!N~J`LR|6o!lHDO(r_(1S z1B6j{2qrup560sIsaV?DI{y9lV{1wh96gd=2bl~5h(CSu%vh=)7>#vy#6Adc<0IR2 z@)(?_!eD6BxG}768tK+k2IW^AKJUGphiy_&tdi~%z~%=X;*5JCR3~{ z_oohm>ywG>PB{>6)wA8K)~@W#gL!)>HWD+jxTSyi6xjlmsU zUlJ1hr0x*-31_`exPkNlsnH&W{V14i4jD$l4Bt@GbJ2@aa*@pevFTLBFcMY}_Ic5p zklUvhEkzGvJ$Lm^I@WAuIky;myQna3Vw&lVwj2)vN^16KBY8>O5u8{+bUAN`HczvL zAIG#eR;C+vpb=ZJQoN;vUm|eAS+p(GriEUwck+0D^6K%)yf@3frs zr1H22AzGGyc?0!Lkej8rO%?jl{38?>f&kBxG3$aZt`Dr9kev;wDA82xExaqW?<&>x zU={Mc3EKOlOH!kx2_k9inJ$$)r(fbKSef7Uqp}il?~|4lVm_XWZh+tgb{L8hUDQ-c zqN^y<>uc+a>yIA;gawNAxUDH^cqMGnju*?aa6nqY(FH#X#wHS6(ICM!W4dcP3+6yr zM^b(jxTY#J&Y1{pjuFky%4ng^RG0==#y}V|Tr*g+Y>Bkg{goVy58pY`DRg*z{7kBQ zw+4egn;F1>L4uh}?TNUDV93yXrw20S#eio9SdyR79&IvsOUQ6X$|Phg*y`$u#Uj%O?ucXBu@0KNcQ5# z5QaGwK06Z@{0Cjq(4-|L>l~u=^K*~GH&@?olnm1_tt9w5S41de_&VpiigtsqVjR8> zBD4cxeATZ&;Qv5|)<$5-xq5E7lo1Oi4c_O9t6}g^Lyk6r6eM#pT5LK#oYQ z4iLQLRoA~t$12<>L?^S4=d4xf?46`^#+I-JZ$v%k?R#?acsiZFI?;$qC6_)tItA#;pjB{IsBXE0=#3J( zCg$nKB0Dap<(@gFd5SN9UaT;kXoqlWrG=_P(-SS_!Ko48B)(RmJiTzSk`6X zY^|w{Nz|qVnWH+xjH+|iv`Qr#9J{Zf3>X}?*4)K8*&9Nd^C2*}J9I3hH8?)|_3hEq zy{$pj{T2Fd#nIqpbw!f}Hz}KIAa&au)R;UIo$Z}`WLxFvI(C%Qn#F>{DzZWx1$Q@r z8}7`vSD|V{h)JLq9cPAfS3~XRm6j@M26GHWYH9S`t`tp>cV7|y^@P~Xn^w8{B)S-v_MBGUP!uxb*!G4EPu(+|R;J}k<_oCmw zsJ7j2sK90R-R^F?TX`T_xw~B0sj#GBu(j2ZTxhJ$bq?eax01{g-SVa^O{S~_cC2D` z2f{RUXtiJ&_&)KFn>~mfSvCuH-<-5FAW@?@icD9<(f38F&^5aN&b&0OgqUa=$(%Y{~F${+lC37lqZ+vFCJ_-`(xq{4+tw~uh=KzRD)%jCqCl5G4cyb|{8GUzX@SafDFCaa`f zNpjaqv@tl<4W;=JsOJ0#AHm1^PDpPf7i!%ge@_bya@(-N457JTtG~QFNf`J^%XCtT z^@KF%BTGaV7ZzMX=R}%l)00r)2I#Pabf_4;tR&dqHCD=TLgmUFDm_#Dv;b1HvJRS^?GF%_LJQ6$cac4u_ zSn@86!(a`|xQ?7PNq*ZTzvdTfDgfi9t+AE_0&w9vIvylD3+?Fw!kxbRi`xYm?sf+6 z-Z&=gFxXufh(4|`EJaJd?Fk*;Q`7TPv0S};_Vz9rCJqbtMfI?v@ULLSl(Pkf3B-EC zWSHJ)6{SCZ&Ec?n;bu}WXL&jtZ3AD^=p1byUBx>{xy__mek`m&{bUsQg|;n3$sDmE z8f19mK|3_xx}S4Zu6Q17T#8NW0dN^5ebq|$;-cH0Xbe_dk3=erwI?9(3&(;@icQDNUQv8HO3p3<1LPxCYl(HI58j5UM~-M@I(mz0p9W5F_^ZXMLyTnSbd zTxlJ=+2SNv_;2UnmjgxL)xk=B$PdfGI#njZlf_z;-Mt zpFIBZ<;%3}N5LAE1&fu2awK6gT%v0XN_4pln{&?=jd3pFR#MD@#TkueCHWK^1na_( z?@Ka`*}4~~;_Fb@lA=wdHoPUTP5(>Twf3}iWl?i6IN(?Oz}GRwkXXf-@`#aANJuIs zC}PqNRY8J8XpqKVqpGqLsR~lQ@Fl-{&R%QpbI!env~wLBzk(bjvhLb@J*@q)91W-; zkA_OC0FKOu96uzA!CD#-;xem#IlN>`;W-YX<@ckbqKO5LqZgkp&KuDM5jFr8CQO3- z_;I`!27!%iNSIBt?9k@Z;Ka3sE>D~}Yi<#B6^mP4ogvpuCGGRGx*nW$2n{-{9fyXq zsR!eh&9YN(E;iomKv;5|5m0ruE#~1yv)>%JhdaCLj-j|?<%u0FuB;i!WlT4X)!NMN zFuj-|aUYpoZDYff3pKn0Y|S?lh|Pj9f%L%)LrWl542KH3ZMEeQw@HqQTZEW$CV zMLLo2tCKg58KadU2g5i}K8zVOV3^s{4t28?!ulO#5!>+8Mivuk%UP?z4|L2q#UVjHgDw!*N$?h6Q_u@zo(CudhTSI6MMs>`Zp z0Jv`QEaAeAEwe)y5M19965LnWvqfUf)&!d%nz`+*y(NAL> zPGdss&Rj`?Bag6+nmdm&?Z7&M4iGG?xYL;lsEo^u{*|v#isr{59m}2>!XB*C=V3HZ z&h#K{Zk8XIKF9dH8SjGQO>o2~t9e26{lHm#NCrIvz~7ZcXa6dKB_h|cB21xD^0^!Z zi{^M>d|tih-!NNas2XUIMJFZz(~-EI0zhk}dsBY4Wd6s)FaMnm%_E$kCrMj?Ln_u# z{8MF5I)@e0J8M&ez7b7H;uxNvs~7<5B6xm&eu$XL#OG9c#}E}+1%DcngoH7B8bQ{U z-a)L7YnGF+C02Yc7t0B$aG~H^hl~0RO2FXQQH@pynL<}>ARX_7=Y#`yRJZ7U!gGH6a{AdN>#dyTL;J>z1u|;DNq|n+t%y~05tu>CLiNrOgapbllf1ntyI}F=z7_}`4Mx)MHmWy7DT5*OirlIu+Iyx_ z%kI+obC^B{b5w9iiH6!B*rKz`r7vmmoi!AOt+8V8U8c7|Ui|dOg+u!zbp*e{D)^Owu3rVe!ebz5 zbG6@(9j=6%mm_cLNqzXaUx0 zL1`=0&3D4ju0|q_rc8=fr(wHbO|tfWE~CJ>S1u5|lgJ)SfffeRJ~<1e5c2cyLhH5o?B*A^@IS0yp-D`#l5-&(~rQ#zweH7$yiW1{&c+X#S5!`Am zM^@k(k|_mhYud-4*h~P$lSt0cE<^Pu)tDt6MM(RZbj#`;qQ?fyEexXvXW{{psH)Kb zd4hZOJ?V>41YTKoH^g8M=?=uX?3It&huJB@T)xuv2&_J)?oY&EOr+byUtZKcEW^?s z^ZR?-$c%pXf;<=ij0lgj<8$}F_OT>)NFCCNK=9A&>tZ0574Zxk1`LZ#>my+pc^xv7 zW{ULA$pv9JaA6f^;ow^MkFWaY>!;sDq{Rpiu`JypLCbUE+piH54sMF;qI)`rT4F-GtChSL( z-~_h7O1}s`J)JP0gK{i`U;)~fOv7R{mXr~)9#~CDFLe>Dc&wXX26Hf(V=89>Kj2)? z-S0_M>ZnoY9J)$5Z&t?-`renC5AQ>y^Hdq2W91Fgm1Xq3XWHkr8o%^lMrAUxg z@Du2w`f1656O%I0*HfsxoqjodJG2qBC&AP~Tb`vmU9j_nA$uE`5DgZbBvzHA0hLC5 z9sUx9@yxS|52*~LPaV@q`$SKJN=~Co9)+3NRpcjBO3okL&>UTsX^A;?5y&ehC5W>$ zM$5i!30Ym8V)PjdkyRbNq3AQAQ?*)v~v-8cA^ zn|*iDriT&onYSBID@(4v1L1bNO9JfRcg0(SZ6R#N3_o(VGXh&wtNkfu;FfHQ5h$$^ zX@OxtakGt~bhAP4QUgzDQa?fX%z3l;P2_?+`82!L>q@zto)4l8K zy{SZ%jwCqTUF(f$T?|SbMax3h;qJCTu%%OKKGxNhsIn|2I;gQUn1iA$$fpH^*S0ns zl#hf2uLc=bKfb%FVyqMpERQ9@L?L+0X5cY5z++-Aawx}|6RkDE%U0mf$}?g*>!GEP z&IVIr87HpBt6y1ujUNTUmMEgl(HpkF9&YnV8Cij|=eWb~Ie$05^VDX(8EKgJBo$^S z!=>59YL%AT;{SaV{&oyqx;L#d%BQr=tS*ElAFBjmH1eXgm>^E&NTLPy-yHl*9V=oq zXOvbM*pinZR;;Xkr z;kW2bs?0qTZcJ}*66zK^N{SPfBr&r(I+syLSJ50+GHMUQ=!)@Ro*C$XJ>eMy{Ya2X zizKVe2h^ztSvr!sIzGHwI~=M$xl$Ogkzf+xz=g-ztSkfKu33d2FNRTcei*&LNi>(h zL54+w{}gMU001BWNkl1wYm^v(H2Y-FwnKu)n}kfmc=ll__w~Zu8aU}`xN(&oAS@cKkn_Ehw3OI;P`I!L2 z7b2X>3Ux{I$3Z} zq|UwLcV|X|nU8huzMLcJ3oLofX3#c?-U8~fNmx3w@Y0s-RNDBt`1p-Lfps06qNTwD zw77z0lDzCUz?MX*`I4w>&=K{RgxD7;J;_3G>N`#ZhP6&9bBvdKX7o6-A%0Zq6#R}h zro$PaePCs~`A@99!`$^g^;LdE&6kFS5RO%f=Fp14)!9LG=^rSu?th0#r2Tj3Jh%`} z@>V5kla+~;L>gTx_`1T5$KX;iM|P_rmE(cH$_Vij6+jof7fH9gMYA16BC&)!*2=s= zaK(1P&|wYzMi}Pb3j9bII}h1aNJX@*h-IQqE!JGL2KIAkn2A+_)d?63TT)UYSNG{0 zeukjuCGwNzyq)!ipuiR0TJ==HR>3xkF6;O@Df`#T+UbDrnxL{c`XoN6!`dVq0E?1a z^EE5+IC^PrEPaLx*_E(+^q3N9)n);RJqun8>6A5ZNCE-2-Ea*qB-jiWT1?@f2bf?+ zI$6{GZ%ftBHR7{bj8uZvYN>13gwi29tCq$}tki&1zTLhh{>W{=nF=!&yOR9Z=y0?3 zWW}ApFUuHu`3b3bE#U9IinPGN_sQIq!2gf3>;Gvg&!UgV!_qId(6XYGoZL}I=detNnGm-HiR&A}hU*BKa3Fl9o~#Z)*xkCFZnwn>WS>0K zC!Nbno)15Jc1ohOW5b`G&?gd{XGCe94699x*Om6tZ6gSKz-B%j7r$1Zz^3W3ER> z zhMz`xKHFR1Y>pOF-`m9LN97skG{P2G z27v5cMFkxR$55*cVejUP8Pdf$(cuq-j@=}-z%R+d3e!R&1vQxtCt9}4hUT&?`$(5k z&&nf^Oeu+#z&?)P5Ia^ZxXiH~Fkda%DiWfi>En=R#a0)nMHHN>Nmnv)pw%<&RirG0 z*B1GdUONsFpB$&5w1b@%r!pSZK{-rJ{& zhJ6|Zvtb)84YUYM!5poY)f2YJ-Q3xt+J;(Shu+eD1__6@wP5r+I0Sx7O~Ez@wrJ?K zI>;G)o6=XvxmZ#bd`QVyE9`xi3Wnk;6#|neR4T2?8$2)OQ5DXhLSV|rqH{_%V``W? zQc#&MU3nvzDRAnmlTuCSaQ`atKuvHjC?h0ib9DQ{P)}d5mmlRO#gG1S?%SIm{63m7 zPKyp5DGVh+M#p?lLu!`jXkpXQ4{R#M^Bc%BRqpf zkc}Z~G}C0C(2+@8baRm}%g{J)&mxPo7pysE!-4R6t&W}~DA5hETicEldX!2MBfW_P zEx}&&9pmDFegLUbk|+;qSZbqJsVza$jJRgjlFng{mhSY2M1@a>;J}Uo_dD+1q7=rV zL*TO)r_@4x=3c$L+CJg6VGfo4^y~@g(g>HHiSG~)_S?f45To1h!-p{)?i-Qa@yD+Y zhR2~ddgizuGw!}2K1?}U?#6uh=A%t||C8gvIXPNx7$1MTVIlhbLX>FAiJnY+Z=pN> z4FEoZGJV8IJYxJs-QJF4!S&~a-OpcU7<4vSZN*TyT|bv>4&FNEC8x=`BxH#bOY*Vk z{%$a0WI+z3B6B)XQcHoli1Opj~!EQ1Q))6pFT3iE6e3l-HC5qcPTs8g-Dy)AK z59HdFWb0MJ?eq{eN{Ymc!wkVuB>jTwfHq>=%fm2ZXS9F~|48V@qbLWx_IrTw&Qfo< zv80e7kBNmvZAlB1=qPV|o~$PKe!^r!BUfCy~i9AEk@|Xf<0qnzE+v!{n>LQY@bm3IluZ%ngSv9*YLU*&6br%@tij@EyJ65Vor3=qhglV-c9CamJiD6CE0& zbY|eo-{WC7#MKRImvaF2z1hWt|+bStGcI=pNw|`1O9ov-7K`L~&)onTMwB8!NctO2~r#NUL zynS_rQ0Xg<(&B~(8WI2GVEDIx&f&0tF=S~eH~bl+;Jxu%f^XSdVvE)-Abd?D;J4(J zzW(^;{d+QMy`d}*YCLowbIZRs|B}!wgW($=rKJrG^f8g52J0=vDELA<3y(BWC;!74YN_%i_wi_jOU^2EIVmWwK z7%)*_24T^t@r2ihd7jG|(M5q{l9l;92euk8=jkx5E%A42bzyPU99ye}Rfb>^^vbg5 z>$?_ui;*^-nF{y*9|P8cS+L}6EjVYkrJ*oy$h!NzjLOBNH@dAhsUU;k!uKe2Fw{)+ zAO1v3afu7ltpG~uezm)E7Y%pAUWPR6M$(t8D_n zB#kj}8AIX7_&QdBfWJMlB*&5wUB*T+P?#z3lE5&KxQBh*)KHjBXYMhPD6crUhEY8_ zfm;ig1}Q@?Q{mLexLBjL`B%%5c)Mm6={ueTHw=SUOoMjsHNc2TipJm55*xE<;_L2J zj*%vs>$$KHWfUb5jyC|pEct>9XQ~*BUD`(mG=pv>DAfo0@&Oy9VUvb&y4fHvv;c6C z6FMZPOA5>lg*iyNvAG#!ct~ZF1X^==2gPX7a8ihHotqp8j(0cO8yRX1;f^+|)&?qw z9SV0TC(A*r!&y%6XP-^IMQI&<55i}3!r71^c>D6?l2(@pgg^a6_b2FV_~W;ELj0$O zON(9l=MS)CjR}Uwdt<+@lm}lL`F_1&)tP`8!(jLMy%sziUA(3;2l8nBH|Qg@wk6Y| zzj+vjQR@Q0>yUUtP<)~At8fe%n$gpJuG?I5W2fex4dAz$v_XK0*})y{zC6~Nhl!*@ zLy3kTnq64WWeWW69fwm6fa0fd{Qv%?% zr)$%l?zFbfeuCz@Yy~?W%-LAOvlGpSh9`Q9dm1#GLtR)F7cB$f$A-gOoz4kCFj@*V zj3ev__8{E67nr0unWH57Gc;xbVh~`N;tCWKJr)E8A0}bBBrwc0*r;t$09#R*#={!% zuI791^r=um0?k$Q%30eKdKdWttQ2bg00iSciqrPT25k*xbhzx$s&|4A7Ld) zGeTlJhcGs=8lo5lM6sBmiTy?-Pg9+7)Dx|mA-0F~$%nXv=; zcypKoEt&KR_hlWuV#8s)U0IUy1}4DEnhZ@_N6Uh{js-uc3N{Nn_8UsvR!BtGalfkg zpc?|ftXXZsn#GE96H{ZBpb5vS09v@7)ree0JRS(M>?8A#tB+(njZ-J}r z(xW8=ZQ!EhahS>~fnZq$_wAwez>gG!)%L4=_`YPiT`PIPv_9QKaAIh@PF8nW|Dh##6Njvnq-J@QqW~D zZWR(UCb>W5lLA>VC+T?A3DkYukVj?%+{pY`z8JzAk*t7l#tIrZ+-1bFN~6=z&Y)yC z0nMdw$?`aSQf0!g0{-Sb=&h3s`%Q47NggW95=|Dw(bg`kDV1LJkFw_Gaf9< z--g&hK4?C%3T(xiqJ;OG`ceF2=Usi@Zhzz3R{QgaAz(IqLE%%nT_JIK!M?9YE`5! z2_xvX$~Vl_pgCGK$>*qu9IGPfl@*3qibbgt;y42!pPwrqCT=PVJ{u5amg^`0tS>JgY5>+ig;?&(cq4n{Fj~5VQjYW+m5WEMQ(&ejH zmw){6X76BYV`IEk-EdFgzsLnfRN`PqLnjm@X(C= zlA;lGlQEt$pzm@>;3w5oLu>Zclpt`?M$Z``vvA@Pzf_XlFr7t&UjbkdW)-P+)?e5f z97(m>>Pl#HEZtTZE=oo;X_jfC8B(;(yOmHA2e)+2t>m>B?Dn6-a#|FNB`s|0&sZa631UfZe5<;)$*;<%z9-YjK zSC>q={0}Q?m@fDFxFO5dnK+)Kz_ujc(2#P(pL+9GYV8cFzAB`KziB!Di1S54e{dS! zC8YMoVm<&fV84)2W2Ny%Sn;>v4N9`ub|koAp;@!D4scn>AiQ{OdTnjm-CIYkgUq7m zW_1!RTVE}3P#|^y4E%JToJG}&e1nY7ih(ev&XpR~S+WlngHlU$(5y8S5pqim#1+c0 zS}n`vAP!rZgO7_QQ4VbmVnpIhT5!0j;_A{81F>47wyqI}D;YfY>tp%zq^Q^n6?M@o zv})Fy)Us|RHaqwmi;E5bg+O}0f+e-1uIzWwG+H=y#kK?{+}T2A2g)2etE>C_M%F6a$8l=JDz8jPQ7f4FiWYN^AGohh3z1 zI2^`@Lt%M56Mk&0_||6A-w4Az#HjT797On>6%XGOsC`w#?dhpEC*84TNi|t={ACY8 z;jAE9yBoxlWMzd|1$QZKzH$((h=c5lJ=lc@R~q)AZsRM>;DQZF=FqkTK6W2UgKvxh zi$VBUNbmqgUu17U5`AdaB0v)xW9eb z*;^Q+-f0Xy7P#+`T9Q;0-9h8Rs#P?=m87C9CB}3ki583NVQ8{0R%H&o6W0`~Ho9pf zSdG*=kT#vPrf>9Fl+-tvCor98vs-zDOarGpS(n)Fc3ILD^X&h<#-YJ)?Rozq)?h$id;q_uHNt6F*C0 zNIc{Da1!`1dm=P8(|0l?9-8J8@8FT~Gx3&#Xr@+XQXw6>_Iuivq^sE!WrjUElzOU^ z>Zuf~ygu!_8hTVirw!lL&=6sosmIf-p*p4YTC=*eQc4wAhPVCnK^*S+HYKXN=V`9u zI}4U6xu1QVD{u9R6=Hc-?okdzS;y4sQko_9N|VFv8m=7#!=oh&W1ksq8)2`+QtQ$a zjf+;hV4MF_%08Grr3?&9ES6wkMW?%#5GhVvKsjNuW_(xf(<`KtYUQMU5*?ZwY!?08 z_Z~XR3QmhoV<5f$%>()_PH^I;Me-rjk|Jr9pzzymi7OaNEQ0T17o=BuhG|&p?zDEO zlxCbIpqC@*Iz(Ietb;2pNcvHIq25{DMz4Fdv;X?-wiG)IVIe-+cl7tI);zrBO?TTp zR<;r3adGkW=wfB%>k%07E)p%jTu+2}1QfpZp_b4`1A09IfBZNay?#B)?ufNi_`B_h z4T}Yb-63OTf^;ws-$p*+yC46$lcDrqp8nn%7ApduswmpZlicZWnE_8gU>)RM(bFO&epjh3xs@Cz8A=@giuXv_z{)}{92*yIOwl0K01Qt}6)DaVES{bd{9Tvk z;l8_GTbsq8T4&I68ph!jT62~oU8x!LavNL;SzRXeNuE2z|Q=<0~@kTD*> zVBoHjVeEwwatT4#icseZIUFngx{3KCf9x*Sk3te2l8Xo3IQ%9#9_bc(9ZKn<6^S=5Ww^b4(OIfG6od)mY=h!|_0CkdL!Cgc_IQe|~I!k_KdlcVb2Y0{i8!lpf*Sm}J25j9PmQd*!H8 zX8%)tUKXau~w9gFg|CSwVDC4P~D0NpjD7nsc}jzRN1a9Ad=CQ&05Ph zG$Q!NLgP{qhKa%v2Oy0p z5&!@o07*naRF0<5-=LHZ^JsT8nGX#Jb}!!r!aW=YH+2&%2t05Qd<+i!^+JJIS+E3U zePKnz9{s=^K?@4+DeGk%2M^4mw;50AF!;ZFfya`KB~%!K=#BN$jiAOtKJ+6SLUK8 zCP`t+u#FnPN<*`J@I|gC5?UE-AskGLW<;gVrEA<43rfofdUMl^Otln&R5I!<`EaUA zS_}>g;gtF{igIAU@@7eYE_G2sQZCZS{4 z1k#e9B_KRMCy*;@toa2zGB?k$v=57}mQ9cKz{FaS?5e7>=*+HGQNSXfFN;su7da4v z>)ftl8=Pqb6|GB2{aSYahhtrj4+gYk3Er%3ns0nEd_mH{x^9C}T5%OaFv z<7o8!`NoqabR3RG8)v8M>!+js*=dBqqnE_t^)slnHUxb)-am3MyhdJp^zq~GJFqSB z_-m36{~-eDU!)ds=fkgsj^S$=Nedg6jqx>tE5)T`0xjR%aC7(V&Rt|AEx8(R-n_fH zy21SV4pCZhYR7*8yx*vdp6~{Tgbp0HTxa&&>oVAGb@$cG^yQ?9F>4DXc+l&1fW8<+ zUjT`kNqN>be7>v;KJbz(f!^C=Dz~r;-rqZUA-3Rs zY=b$5{%vnO-rC<951IpDFv2Mtg2Lho-tLE0Fnz!_hc+e*+mYInyc2k7Z7Cwcjs!0~ zZRs4k>&pte1Y8cGqs)$;Rtk4T4m||^G8Ee6&%ju~Fxm&9!Fss7DqOa@tYIBPT?c!I zuQ6ZEom_}+iM?S-OfJ1@LupyzBpO4NPNY}mg)ML);#p?TNxTZ4kZ9!*;wFpt`;(G; z0Q#}nouWqH$}IcP>}H{V8H-h5z@^H>(z!D8r(5P?QsO$8JUES=N>+hbDHa@~Mb{#~ zin*1F$KeM;YZdAj{5(C;>9Y#7t*_9Mu~MrKjtA05hsK67Tap|B<}$c$7|gkIMlqJDvLMW=nrA69=33V(2Q3or zs8)&{34+O>zEDj=qLtB@>p>P0>Ut+Qgah)D6xV;wtaXst@{XK$Jbq4(pql{TCMU{Z zs<`ivveV9NB`gr^&B2}nho<2UtCYZdJDO(MBm6euAePm!tb}_=u~eNF!aSDrSOXIR zC+0eM{j9%*k_Rk=g#(Ykg29GChEch6w0<-?Iy!o<$LEh9e^LK%5r;h;{_v~Jq+uRr zzv0faSEsTRzP{eM`fznE@@a>|uqScndlxq-IX-;;>D*CZ2a<;`916dAcXjoF0UuU! z=ovA|@A;Q=_>mxp4)Gk}*i&DPu;8U$_fWn~K=`o7MW=gwAa>#73&(!X-TR+l!RL+; z+eX-rp&bc6Mm@t@_kQB|ZkR-q10Pe2C8pqQhring1MG%G#1)GgiT3 zLlQZb(B-ZD-Is#TyIbRNL#T9P+!(jUBE}Lv?EZ{CAbN@O<_%oDMJWBR{ z{~LnlEq-Ig7_&YS0xDH5E#AZ`;)N1({yv_GkU8(TOn44e-vwU`?GUb*g3pbV;Y@2-|C_L)-Q8e7&K09N2<(Y8cm+RodXNa{N zDGE!9hlAh|*Tath!=Kkb{{D=E=~*x=+hKv;9Y=|uudk0zUp?D#Kz!xi9105tlMP?p z=$QHL<}NT|zx@3q#^J-m*RNl^dFNnQK=^NlX=&52)Hz5*2STzWo#PzndybDUwZ6gK zUhbP1tL0t>%%Q)Ye{t6*s?ur-1h;xUA;Ct2WfuMQ0@G+@S)QDzCwNah!63oMI*8u) zELad2gJ{u13lH9w>ZF4~&}1Ep9-6k`{qb+YdEd$^SlW{g#s~Y`<6Q^MvKvO=w4k_S z!D0w*GyuX&=x9JuAu20_E7(@SD!x*865ASZ`UOvtC3gUVpCX;I*A9bc<-AYHhSf8z zMN&-i%%p=sS_+X*>F`mCN-%C-_9N-4d#oDf)4W9*mc?UH7d?FF1zB237#72U|9YSX zH^xvJ`=}%W$Rzn5T~$sVJiXzag5P}7*)-!Blc~vc8mY08u>7q|NByO^*f<=4KdO!w*7@Qbrlps!gLwhr_+q zdX;RL@~k>DJJgZ{V%%nSR)?~yI)>DldW$-K3T^F$4Az1U%lyM}j3qrpZG~WzF!%{{ zEQIFA%?6>jiPbP}n;cM6Z3XGrs&*GDm+rp1$0YPZ0H zZ{H#pnv-Zj;9CRXV~(NGT}VB&kl=x3b|9VOn7iQHeS~v33cP)bU=E4pH~I#SO@Z&N8v{mVMlYgIdL4hqKFy#1Dfeixha-nt$2(>#e~Czkb@hV0B9> zjyB*$GW3eFWPR!oaFs63isVTDKPo@ANp)i1l1_cOrg}_+cCq#_?pPwGOz(nAVUk-a z_QF`wJXg*&ZS zG~<=h=G2>yD)(%J3vreHnB!J>0UKg+;W_u4|3`4R3;?cckztwHSQtjLO{uJ*m6$bG z)gN3yVI{+`DXCsVQ5b~@jD)5>OV_$}vSHYWvW`#55*plrMJZGNaPT8ppOWdbSTUG! z7YwCXHZ_0dyjfa}8uH%4ZL6hw-KIz39!>+YpXFZLpth;J*V~1=Vp-~Gd=_z70y`*< z?zG5=TkINE$1rLf+;zkKWQV$qM@!*Y+t?5)jGkegM7ujL`~7WjCaoRbl3=aTscNPj zoI2=zBnYfBtw#=%k0erylWE$MD9Dl;L^(b@lU^n{920g#*nQ^e*{fGquN(^Fa(%5G z4mSvl7BFUo5>m7TgkOAm^9e9~_!`S$!R)&mmNr zElhu2{Ex9K>uDq1f^7rwl7^0LFw2C-1m!kc9Be6J6Bz{242-Ta%1F7Eu7XB+n3p_x zbYINlJmqiSuj-uheV-RX+R)yJfLT&qb?Q{z^rZ#}^7LMo=huq4ioZ8R-*2G7QW31- z&_v;%4T3oe?yC+hli>cbbPaX^!d+5e^+XRxrxFwGKzL`zf$gyda}c3bt{xrXg(E`n z&TtPhG;^_rlFWgCXaaC1d%-+9N`u)HjCUA+C9_`&(Hk0>rF%*=V=W&nhZ!)t7)*4I zj9K}rkJm;vWlKlEJ>BW8dz!oMP0%$i1Fz$}0$j$6?o5Akw4D@Np{q6^jvfa2xmxu= zEJ@Rd=BOq!q1G=1NA$HwW~WdlV}GKU9bK9HP*~;Ign5hw&qBpY?22BjRDR4#mCVA? zN}$?f!{7-TJPE~qCR~n`XR{ksV!^!aC%u(O6Aw&YJkdc5FGrUSvFhwMgnef8SZJ3H zfwi_l7Le$G))ge+Z&@7BzQI9UStjfjS_RzmI9H^a$f1K|@Xjmh&^@TtFVb}T>gtM1 z#c4a_Q?}=o565amEcbH=>>%uFPPi!t!{Y#qpQ2Zp)T4`sK-hA$_@L06PKckD{nk|o z=BP{oa2g=kG2zm*LY?XrLk;bQ2q|$te@Q%AR_cI)2V_ZeW%${XCF@OEz?4`q*pOKF z1w9$A`;qX18KjqVS4nD=kS47~!jhdOsnTnJW69>wY6b7gQn0qrO2$sNe4?a>V9s*u zJ|rtJ;HDxmP`KIXHnIj1o&l7yY9#Lo&VmKg?<^l?i_R^p(h@A2qC*P~gYyD?0l}5Nj_11akeCy5DTft#5OFIa@xV&^Y`~hKF0OU)YJs(DrmVoeA z&w+Jk_@0dp{~n-q`0PDo>4AQ&(qN0N{4GLYGeygSunagEu?@NT=G)&~W4d|%`lo1H z__-}3{bg<}%!DaSqoVN3bul!S7Xy1_1K|8Zy?A*Z_RYwj@?4!Iw2cQ_`{Y z748Udiy;~`m;ikI-}n9D@CeMffu@FT<{rpek_;8jC7m+c^gOsDAiS{=5!ob!F8INYcyc380Y13FkTQV^h!^L z#E~AY6J9F-u14~*GT=y$_Q)F^`&}gfaHX0|=RQXRSs4@0+&L4zL z=`Cl4dGhCEf(?gBs>O3?WMy1MG@qz5t86!cVG7Zy2-20*m+s0e7~ZV3>?5Li>RB_e z&Vls-=fNsVYg?hL=@t%$h@`0xWu_szqQJ}?YUA~;zw<2E?kpSiEq?O?hzt7O6gp!w4fmT zj6ojE(L%6Rw5_zD17Q=RK|2waRkI{JCgunM7CyWr8O@sOu|)BiC@i3=4Gkf#GGt*X z`IQ1DHERhl%gXVp6&6B0uCALej5SFU0(2n64LRIjdtHuYl>6Uni_BE zpjfc_&DO7wqv@0e3GPUY$7aXF@MoB&JLl&(!N!FG2npCC4#SppAuxP+_~{Q|uOq|m z$>rq-LE&)__BVMxphe38@rgs>vy+p7;_w&>55`c~Hj{472s8(%I&ctt`kS)gn=i8I zn!8^WoxFV;0pkoWmc!v&F-3DDNiES95$%|;gJ9~=BL!ee(vsAXk^J%`#SIb@J)#WF zo`$^`8P|k|-Nq1REOlg|qoE@zbmn6@3|zCgLb$Va zcef=Q!E|D6m>w;1^ufV$)DP_CXHDX;6D?XA61^%ATvIm|vN^1sfx}>TNlHXssjt{h zl3_4UwecLRFakE@jTo>G?eHMncDE2GU9Gfj7F;~gxG+7hO&(bOErJWWm<7efWc}gy zCePx=QY5O3vCwG|mkfAuT8f^bLCVn41h-k1gv#Jx#scaZ$H$Y@T@NS*U(NN{{Lqep zw>+sv_q;!Pa!I)GNIaJ9p)1Qlqn6*Y9pzJ2rfpd%IqlW9!{EsYu^=yH>6ByPk~pVJ zTpo5X3?Z6MEM{oIr?tRU;qC2(y3pWyeL;w?M04EX+sJkSOATv3oIdc=?l~ad+wagy&2EQ}#NP9LMofR?a~_+UyMhM}iMN2b zcNdNxzx%{-@&BMpzjBC+11j{V4}SoE4}rv&g2DHK!CxnESfQCc!vnSspPZeYp=rrT zb94;oj@HTs>d`0*Ud@TX+44ajlVC@J?{BVU@f9=TZk9LE1$<2yzU4gl3lR85k~+wL zzrc_+q86}Xrxwd-Tisj$#hLg^08F8?qo>i zI0)dIPvlS<4CfYB2?&0T%V5SrOEgC{Ky1~|e2w)=VM9HL)O9W{g>WpBmu*W4+_vie zR;X61@#a#Xz<9rEf416Arl2;0%EEenlkbA^^vlV^cy238h4J3v>Axl-F{fJ^9$ZUW zl#<;=?h?nBCE@_M|o@j z9OrMtHVy50?&a|3mtfIXsm3!K=(dABx*TZmtW9ArqZ9SzoZQ<0@>X=!23k}MaHBt2KE_3C_$JQ(ey4uxCw zrBK!Y<|~e536yR5`fnK>3kP0pNtMGY_k+1M+|puUE-|e!Gg^xS)sM9%ZHQQ2dMyAf zKrFk(ODaZ-8>_W0QMTMHYDK=Rhza}5$_8rK_Z^@~5;;@b$_cuBg zpXGp;u4&q&Hwnw=!`ocmb*HVj7w_J^x;Q+%0}dZLHvGwKTX0HWDi8yMFJ(9!6Jf&c zAV|^z&2l3f9t=(dhR<$q2RG9&EFDVlO5-*p&^7^K%Xxk)!P5VH`)3HNZ%D0Fek)v< zJ4v<~e0?VHdp-I>`~?dhIToyDtdWpk5uu?&pB`&4mh=Y?xtBDQVX%0jN5@AFfp?qo3RF!;}lPA2y0%)iZl zQBgRhxv+8zhGuNG&4X99sZdC;>;v~;hz@95UFofl?;~j*2a+V$MWJ4)D*Q%7w`%pj zxKLLkbQQL%fX~XE@ily_EkN8>7953Kl|48<(#DWXyk3kaLCZ8Zez*KcePQAEpKMoo zKACVpPmF0R%6?-O{Nu12o2`{VTMSoae#$mA!-n5Tb53KZ3=82X{&0G*bNBL#Wu0HNB-;Ag=MVD=j5y+AioGX zn1D1*0^=k1%O}1kDf}~Jjj&8)9Tr~wd^&t7RJf!f$-gJw@Zda*9uo3>_69WQ1F zdwAqlI$RkuN2fgpz>Wq#xqA8X>dBmK5|_Lx4cM*9ea-9A?HYTAYm(K0KuZ{<*G4aCQi#)rou}W-m$7rHL#LU zyr$ulEo)QK(C9V4&xD9*;pFS=BNQ^;Vo^iWrn+lQ!(j7AH@X`bwQdLsHwA`m890x- z8hk(p9nuj&UK8r8Ht0Mo9XEYy2Ypx`gb`fX^tei27^P=jSK>{?=&Y%(B^K1`!(I9G zGh`IL1A{vsAyB_L|EK`G%flh?M_9Bz9bOQCFL;vRtXDwdUw)D4Fpm$H{-8Q+9VrGg2RIw*%xj?h9(QnvV)-m;QMck^=Rm> z5_IT1|J|4_K^X9R^VhfAzxm{h1lgZB4Tca+0KPs`0lMG!Wl4^@c3F}n)E2=TG7RoB zq_RIc;v{&-YLbpm0ntOq)P35s+>_@+v2}I3io%(Wf;*l6Q+9n%X{A~4deH#NdIPBZ zFd`=9BAPIPls|$?Ore=cwq}jlDr3#V)~pYC$rJmqRi-M>I}iI$?{~V-`R;cClk61{ z0f|Wpn(ou5n`SKKyl82_47eHOV`(Mf$KU_``zaTdwtO(yOO9LQJlWsm4OvAZZy}u% z=L0)d6gaCoe!0k?mC4ZGp}&8gD=kMs!^8Au@zf(k>f?&i<=1=DBF)T%N$Z~$gR-Rj z_b6~Q7c74?8!JCYPL87c`VXh_ujZ2BcyYP|LP2;QR!8Y9+1{r3s4V7bWhCena|Lhx zYOuBxf+em1nO0_2adU=nT)XWMg(DRDb#fh_C(SzmgY(9Jg-|XU3yy6Ym?!zR#8682 zgX3NIoSp3M?$ViMjwf93d0D}>u%Pca#NIgI>V9s0-&XO|;g^I{5H2|Ye(*qyV(wRx zUn&Q=xfF`hMSrf-VGqY5NteVU%_@flbeZ)TZ7DG9ombT~sWLqZ4L=m-rfyZI!hm9w zH~>dinF-A@U#3xFRSAN$`lHP_twJ{J)L1gE>(UZ3rmNKg+*oW?Yv_;~?0ePg(RDha zr}H{0Wf`(MiqlPy>I@y3NLvfyp_Ku%w_&rML1=d$Ker8HvDP>S=KQ%59Bc4t2?9Hi zl|NK&SN$2e(l}YL2d_>zJzZP#>>0!1ZnKQgrDhu=VF~j9C*Jzt(6FIjVR1_jFD`@*J9<1thd(2|W7sm& zRYE`X7nUo%+w>5ethFlVgMrfE^IJP)eHc14J<<9>A^QCNduDMAhZ;-?Bi5NlV_^*3 zeF;SwRfb)Tga=$m!U^e=Cxf(3SZ2j{Cj*k;huW4TXkPA3+l;i zR0Jl;|CgUC1WEsxaw(cANSuz$`XM5m zpF&_CJvkSI^Y@YI+2M5@>d*?jVV9C01kaZGWf-wmCn+%|-Nh=f&Vbc@9C`BCAt#RG z$9+xD>g;rMGZzxKR7Yu3p*W&Nk6!dK);>Ipt4i#YifPF@b5GP=FyUM-Qy08JHarhb zGrDx=K0@4?y8q+M9g#~NPj4oba`ZQo2D@_-bk-+rC<6`wI12KBi2wi~07*naR5WW9 z8M;{%JD1FqQMR4bpmPRnc{o zB@S2@W`vefUh-!M(qzg&?^SQgvSbb|Pz&waTG(KIXwil1Oy&w?X;Gz{PaF<6F&$1S zp60d;V?7_P1Y>2BrD4NL%AT$!GU;_>RiZztz~F=?Fau!$S=8;63ARLCOVXl$y5eEE z!W;_&VFP<;(om&gv2E|~%S8BaUnjwPt=55zgZJ9o+oM;no<2(t!QZE&(MW+ ze0}}&QpvEM1cXJCCII7f!&1ZP<2UXNOOWNsJ2d;geXGc8Y*;Q1fHL~`X-PEJCxlC% z(`Y1rr{3D;nQZln!OGEFQ=>mgKGq)`2IJG6D^nIfmLs#n!QEgu5cC!v%qcHr=6yUYL;9+j zl{IJQs2`wgMwiY|;Mv39cVPyqEwVB-WdVZ6g27`VFu3r8T$)qqQ8gt852`)`jB8j= zVnDRKfo?upQBAiTx}VFYvlof84!WKD<1G7;8u zaACT%a4E6DunN>rq?!7kK$hNb!jZMNw^wVm_GBRZp?&)L`sZh(BPG7lrF2as9*tC$ zeg!&w4II8SAsRebF!+k2VW969D;9QF=n9jrF@BQH-!4*UH8nL?1BpCavmFFW5cm=UQMv>%V~-V#~tsH?x(bUEbkO@K6*1dB7W=x zIKs`NJX!EKC(yeq5X=)|p}8;|O3xW}x+oLjB8whSdH7gXn?QsYmU2575ARTurVp#C zZY-RNjbbWEud85Pq#iA6N~_ChWJi^m9b~y260a)AVoP{cZ>VD-sYWvvN5|r|T1|^u z8dSeEC$qtf5T9gSwT&nl4Of`PA)0i#-0OL18fRq(!D6tf)N1JpuwP25RkE2|2EmB( z!rCuC%WH(3(0-U9!fKqB z$IyGei{zH9w{5X78pjC!{zHYg0RbhJ_02i#ni|o?7Km+GQAZV(oJP zM6N_!8=_`xs2K%0iI^@&)*+Cp%(zMLH^!GZQW-q<(3@q!_iqMKA?9kZI-~PH&{Wmm@!?OgMwWb6neDbchn-tPmZ~qWHJVo#Ft31#lN5P2@1S*SFMbMy032 zC6Bl(V}p`u3*xwD@owT zaARrb;Eue1p6re%BKj@>n>R|cWrbNy8o$PPuHh=4_j7$+XPz1c$2t>^vqH3Zv>!MS zh7SGUZvqjxL%d8m&V#NJAL* z=~)88OS-S*>y#)<;~_QHk_*6fCBUj;s}zkeE!hi$SNbIq;1pxNu=yc7gg2oB=Ho;bn*iR^$a!p$; zf`|~)qj4hr6%a0Wdx@;Cc6;E-WxWw2;!2r|!e#YqRcspUmzPxg#?jS?roAm0u8JPr zK0FkC`c&$M-y9tsy&k;=-f|Lbd{`1Xo)U$x9Uqop>AyP^esd+IN|$g+Ux5uP1->C2 zhB|$9bEP;eg!uC6*MABC|CQxQU%vkL>(?)i7N7jmmbV3}L(3?b<%YNNxyb@PdGB&i z8%P}?P*qTPkbLaodIyfod+mL{nn zoouzYx7)r)SP;17I||d4U~3Gn**QSCWp*rtQ_3V*d{)cr+D`~*UDoI;fV4at*A09d z{6b1xNEet=XigI>Q}R1=^c9>p6o5AhQ3@Zi#yiBCc4(Yb_gpduXNr0~S5mbvkNJuJ zqwIQ~(n_-^KF}vLAUu8}64bI3jWk%5At=>aMw{4`q{(coaW%b|O%`2N&4#YZsyDsJ z{L%B>bMO7W?>!(%KZNM>7p6O&cg{Wc94V{ijTr&yA5vQE>YbE!fxy|Xf;jw!Yuv~h zkCkB~Rv}zk?ESuZu#KDc<0+StJHqeyVksX`r64yJVO>a;HLL>NV7cUY6;%#&{A&}V zNeJfe@3CNO#!6W-oc|#&)xn`OFQ^plzzeh9V}-n9p`hZqvQ8};tp@p&URB|Li%=?v z5YT~;Xx{-I=w(fSj4FPBC5tYf$r$|%Pu3`~{5K!Oka)Sk!9LAkg$g}#Kg$XzKgc_r z*R5X_qHkGiE>KBvo2%!Rd5G3SE2_({MawL``lLE&=Lw2E@qoNZQe=wQo9&{h;*ZHf{!7|)TT zu%c?W%5V-ToG&#fo4QmgX*ft#_2{x(2JFzCTtn?azw93j)Kz|fmOUt!lhGZjO0%u{ zWT$#^QZ;uvrd0L7J&3axRJBB_!vCPYhM&NQ&wpYdK7YxzN({s3R{H17{mek` z{fC>IIgN+sK;lnx8VdgbGOToXJ~yX%n~4^c-u^=OhsQ7f`|{r}zkmKPGvD@Vugd#1 zxN7K*X*~Q09G)=ZV7%S!avu`m?Nni3sAiTtHG49Wgd5^FNrR; z+A}JCcAZFsz?cP#Ct7F3G6`;TCME7yy|z>rw&BL|!IzY0&jj7@oYEYlZOvE=vkbs3 ziR7TPE8wqnM*?(PH38yU&EhaSq_g^lJ^QVr4iK(eHXLqaBIz&TFpEO!p|sm@`XaBo zI8o8XCI+BlOD^G*R^())K95`VguUT=@BlO9d1l}h7-_E6+G%X)#N&c2-UEFTl#zx8+#MxG zymOEW^P$D(P>j(ojgk@SR&y|pM{LNlTed-*M;_TdSN*OAfN@YqRdB%N zgxC!>ucv7o{7fst&+N$xbQw5Y=Vi80S)q#W%!Ieuipf6dmTW6I zi&T;0E!Co>l@1W0!E^b6y;ntPWN0$}QiMkXbT%5C&Ss|r!r>NNST*op`ntg0%}Orj z%c@9hi2hzGQu`~4+<}3EK@_t|H;Q_#AQHM;ZHgib!+HwW4;4+-B=#&nSWDF5!Ax9I)4tO@)k$V)`Nikeo^br^-1BIhAVZ%y@%~|XY8w5V9G#a}n zXM2ZO7`7NpZNyicV%+P!pz$yhVN#~?%1Z&_a{*$A(jN@?-pudKeLlbWz&LD>7~uPd zuwrvFXAC2rTMzZ8PhY-#rZe-|Rj=3EJJA3NYI5wpqoN1cwcd7h6kOh^?v{SzC}<|a zwi4;W?h60usnNWWWIptQUluY79^RSb(6C_mp~qM{LOvyV?)uM%2;)Gx@DNYi-sW|+Gan$s|u^=$_ zy~gD*lMH?i6SLqoMyzlR0Eg@T)Kh;7TdPh>#a6IyMgH_QLcF6)qN*jyWi&YO8fdkvrVAqmTb-NUd zC=L>UgZ%yxV=#E|Eq~Y0Q;?I7F+=pqDnn0uPKwV5dgj)>t1dlA1i>5Wtu#-78G_C2 z=sog7z=IF+2L}hY=?(Qi$DLUoLC#9wu*6MMrbl*zPM+V2|IT&a?VE-Su>V%W8pG@zh=u)XI0r-MIbQYX+%-m zP4a~i4D+T^DJlVJHYNH9)`Sec!%L^SAxU5DSWQV^tpPsEE1nH6P`011BVS81`U48WEg~aKIfM?ikCjm z?}pRi9&yDJ7F=0mHBelo;^I%JJe;0sOOiQAhvxMo0pCl4;mb>#)$!XyOo=9inpp7S zl2mANL@!{*Iy40KZfe*tRRxbx#XuWMeHh>S2&5z#dbj}EzJU;Z0Uy>gAo<$hI5#QD zIx&gSJPodrCE5ma?1`%iElD4_r9tIs@jSCh+J0EuYf#d^7u$|xQ!2Y&M^Zz}3lY?z z6%CZjfvzGkVPPK_ft9dl2oedbu)7;^=kD-Q<(H4 zhwClcD=s#|j6eS^gkNh#if< zB{jOfLUyh%3(BLsZ_Y|0@v#re`*Ja{RQVvPw^TNzg#@b^nr6X}qi+$XnLao^KtIFn z{zhK+g5yBUqIOnrI16(Y-8MMFgP5@S6_67s-p7D=lao8>-#@3~<+kCDu4$QrreX9pY)j-z`gq|Gu?1f&^D^SBJ5ClxTRbfLmtY?J49mUU1R4VC?l=-s+ z6egJM0CNGsNPn0N%$bfsU~^Vccu>}-iA#nuJGiQ4Crn40ZdoNPGry*PY*08y`xW|z z?}Y}>S&*Jl|1j+jQ(i}!IuDOO6Iua-C&d@_4~ua;T_#BhC>pc8G#K6?)PaL3>A9JiIzlyFUQwongUySttVYgfF`;>U`*luk*p&{2FEmRDGFWwzd{iIQ7|?|AWTyrf=@PxcFE93u?BCKs>W zPST9ZOhJdi;on2@nB6*Du>};yRp_-H!d5>IVls4H(YFvLfOzHe3BEt6(sdQu=x95C z_sv-TJ}{RRc#G1t&E4nBe@%Pt6yV%FybBR-ZD<=s0mSQLf#7p{4P!bCqjVlbctkjy&E|o_ zoZGR_!IrE7lO+>d!d8{u&bBNFt0hZ{9Ey#K<-bMQ_-$B?njebjaj0-F6OWNGsVzc? zcGKQX=B+txbOJS(N+;S}Zt=ug6Qzqt$zld7VH(Y5x!mNhFP7>Y+sHO)2u(*x)##`x zPe8t2OMWKi#dJ~9B>bF=r$dZ+J58`)>`4_%%~A*6s}5j#GGP2Qe@@Di4!y7(O-Ni8 zg3QlU?mNPZdAS(L9t6jR8t>A+boXTE(|rM-d#!!LG&$MhCv zz5q=?vcHFi^j%)x4G$@PrQd$;AF>Y3kyt~S`qC`;j<%7Q1ix8e6bu%Ouq@gwrfD!i zFqG(O|JCU!BxQ_v+mNAq7zHQxkW`7bZNYY9m`E@~u$rylwPH>jTTD_ty0IG{1!LG- zgA=R8fg8+zvm!uYM(i|bD?x)A*W!uN%8xDattBj5H6MDzkvg)dDTz9Q3LY5R1s@L{ zJuD7mZ)FM|2*=P_JjUK>``NL`sLarhGj15Xq%^M$e6|*6udHYl?*E^$ zv-@cyOQN_x+B8OPe`53HfWbn<%&yfoN}2}mvhp~?5IGt$QiPHxc$k+w@yPxK`)}{9 zQ&sogwwp{EFt)+QK?=V^Xe$67&e zwe%A=j2oQjaY&~p@E+3wh{5?gBZ6-oeP;&1A8v6NkPHUE@cv+Mbo3sBOP0a^P$^9I zX_&Nr(*`k9n6&Ws`|rz#2T6>!7`~si$MNiT788Qs{z5wV;9z^aSUkQg9+!{sOHCI> zNWR%t)(~C}lHd7|?Mfni@8sg{$p%MjJD4@_(-nKNt}r2db#-^O7$t<=q0zewql6dn zH^MNI(1w6-jDe(>H1G6RtwS3TeDh)i^~*G-31JkV6Qi05!KhL^KVxNZV@L=dxLz;k zatvf9NfE17EOleig6Mt8r=&|!!7P78@*a9=l{?lTy(23e7{Qbb4M(&L`-8sG^PMAiGVr?UT~)eS80U%XFwc|~WJLS=>n`M!p;-m% zIZb3wT=Kf>rNFnM6@J(UcDa-+K_S9*HBs&X)E4Y^29d*I$&UW27A}LcQsbSR*_{ni zsXpUk^@Nr?WTw(k2C(@Yw44#k8A^dBRdOyC)vCD-%mcL8n=n5m9c*N$(ZWq^Ps;1{ zPCT_f$s0VH_~{*#y+xhh@)^zaPIBU;Ps&ACispK;3?-H4n#v)pWeRhM7p8{ir}~v* zt+u+&p(v{ydJ11#nxHG(KOV%9AwPz=x)P-HCC(9Y>T4L%bPDW$yKd0kXvw5+*QLob~ z=3PQ?i$93EX=)kVVl)el&6mJndQU_ykL|%tVuo>>w>^?Sn?pPH0bwQZ2M`!a_?9}w z!0qeT7Sp-VhzU$@BMb$zA$od)QQ;Q@ak7HF+?=L2NXJT_!C)Fp z!sRnXa}4oY!|G=y>SsQak!%icR*7v`3}q0w;Y6}g!G}_H<`WU;zmnp#Q^1VsHm_(v zBbZ9fqJSB&>crw2^cMTH1io63HeZOm9xrL=u5Ze6dU(?nr+sO>W}EI6I9e(YxZ*t$ z(5{r4qrk&#D38gMpz+v%rCy}bP z7zSCehS~n_nj<>rHLpX{dZFD&aP}Yn)1o);miB@JKPao9M3!D~!BwMWGPvf}HPmb} zM=j&T%1-pukb^O?bUSuU*f}S2Sm$+tP4p$SfqQzIQSwUccAEohUoJ;;Rhp)Q`?P1p zsNkFQl$7u>u`^q9UVU-v+IN!4&@wL(E@rN5uMRWuxyD&ppQQ?rB3P0hBa0Nd9DTY0 z-kK}q)q-DIAS_@m)>hqEE>*hbS*InrqbhCTDuK7ClZc{>w<;2zNAQJDT76kuwB3}6 zVotDP&yxdi-OdB+opu?b^;Yrv;SLn%rpLW4o1e*&x1v;ZQ%hCO^{R5G7|yLa7l>Oj znaeh+@W}A~5Dj4? zfX&Cd4`Pyr5JsUIKp7B<>EinO==z8bx_l2N{|hl5>X!bEomzitSJ)hey#IUn$a2`+ zSY9srSPQ+QBR69*XOSSi|GJ#r&t{j8w65L`-58Z=1o1Nlp8m^e)L8IfKujF|>&{E& z;A*r{%75KK{1Shk&^V^LG|eVW7a;ABh&xTjwArXZ)rf`B!!b$YVe*Z#p)r62Ep0$d zS<`=z2&SAZa~gfoytwF#6ejqNkxz+U@HwgA;XYMyNlyR(AOJ~3K~x7p)4Tb_u?m*L zw2UUbQDau)jeIA{(VW%swy|x_O%B{HqyxI8Nzvqih7%fS#(4^TU{7I1hJSTA146KD zW+e(ka=%AaZ}zDB8d$sjHU7rU44>ELgUJys$PML!*+9sQ7_r)B73A{Gh^@$h;yQ?= zpdH{A-@p?FL7-svlak#}4Szfk^mn)IGllEP89!n4%5}P_FyKxw z|F$CQ8;k7jU|WdJYYN--3qdA~(jR`3XlT~L`cdF1F(R-we61!f)U5l;%?<0F%3wrF zO{Beg;(>1BmKBwqX{)3givw1|eD2Y6=^QM8L+kEi=J!g%C}`oD>?kB1oID$@84%B@ zEqq*tzNG{0{tn z5_8sEseXz(%cr0CM)_n-3VTRqGgi?KF5!C#x#li9Ew6Ham@U&dA>Rao5gfm1U7CAp zj+SX&tw&dUS2V0yJRBt4WTSOecO)9xAvUXnmX|+-RN2x>bj6yq=xVhi#p)_CxKr_F zhUuEvr^qPP=BXjWvu1ObwQBw1qTca9ivVis1KX|1@}uhTrEOIz$ITQA;9CSqLr{ZE zNLfNFRrxh>qMXCssw^a94bi=NgHq|9RT z{H-=JIk62w`o&1Y9G+7{_?F+e5{lVEt(itKi;8R{K6k>-@2lZj;pEp{Tc!fSp*w)wrJt+^C-c@QcNofIjB+! z(X?(U5&nY5H|8Yi;^Km`Eh*iD%+M(}gBy+Q(fPN*kW?_yQq42zbXiqjgQg0Z7a#9oQ8tRxJ7tw&gs`UHlibC1_dCum>krchevE1(nOZVayU*oUpXT3wI90s;< zt*Sck&0c{gtzW@y=mk`U`Joz_=gf0Kzn1mvlx(!3dsjlTGN8^p@<+qRtb7&1VdgS? zHP71KU3fkAG6Q4TP$=JD3N)V*iZdwr3mRmjF7IbB|tI_L9zu?T?x~{j^(@7xP7N(_1DaBOM-XyFMK0dYr_RP&jm2(T!8IKizks8Wn zVyu{~a~j5TYW}*lN&He=J{J42HWbGC$=##rS?CJSPng0*681$`cCLEW=^9cydQJz+ zs8Z1@O1lFKSm2VbBC{4YX$v#SlI(Q6wy-xdthQv`LAgHf?snYk*3$sRx{PR%E3LV4d|aVj zRpya>hA-;KY^zFfZJdC?sEa1!7X7K;*x0295Nzp38YcIFVWw}No5JSFQmIvo1RmoS zq1b#vDl%amrSevrOCYy|AH|GS;Sly7CH`Ji%f^2W2Z|CRd1KyE@ zokwpz?|-&#tZY1%c7FG{K&@sibz@2TmD`YXAeJm7bI4RMAbhx^0nu!^+Nx@{D-!7<{Q>953fx$n&wrRJG(zNGnt(xtQptR%hj5j{bfYZ?#G-^>!AMz;{<7n|* zj`EB$4@2e6ZpBZe2c&e1*7~jJXD;HfU92W9qOj(6*vxRy0_GS@*Eh~*5~fuL_w#n& zgSe{E9aZ*9*N!YQ10ZW@Z@8=;=vLShcG(&p#7CBT$#vjrpl8cncgtG1*0m#Cp6#M92Of@(Cek=*4Tdr_MRcRv)Cf^o>j`lVnqqe zHE3q2d7FVxwN=fB1Op~9F@mUDVYU4V-%BrsUuLgK;U(XPP+qF`#f7x6RH*Sv*YqZ% z#NyjReY!1C)RW8CjN!Xe$<2Z{>qhPxgc;1IHw0WJ@u{?nU%wfTPqjV`2Fs=;tx5m* zkCvl93x_{}z@HY2>2k2Y|4N1MWOxUcG{UO}`}j@li?BN({;n3Q?}Xra2Nd1@Nf^E* z3`=9#LNTA6RSRQFAOHOLU%CQx*Gyu;FY42PFk7&u^b5Xvk5Fh-kd?rIDxsG?zg?~9 zhJb#1`*gp&M=}SyqqpzhV*~Mg`t92k3xw%?!z-2`rVlm;oA!`ZF!m0%ZPNGa@f)^8 zhoeZxTA1d0yh)>NM43>S@5<`un273%-i6u#x{(Jf-D?KOZH8Z`En!7;@I{tp z<%_+MzHBykDqOb^MJXJIU<~ZcFLssFaU4+)OIZrM-hKg77R|c`q<%JZ9QxFnS$kWc zgnw}lQz}2phiT_5o|1PaF^07)99E$lfex0-NK>Pe`*qJoVeSR7Xl9x+Zuod;%hJ+R zZ;dfkR~G*tE2P@p1z$v%ofTzL)&_&Q9L-r-Tr);k^gW5;&3wr-N*9t^S!_r{ST{MO z%v!Tun~`|pC`LON3m`C_Br-nPR*oH*fk^&+pcGxPRa(qn2XO$ zUNBf~(h_8ed#5)aZcgd0Aoym?rY*X9H-7i->*?vgBwG640f)6Ht*zlNtb<8}&i6I5 z^YHMbb2)?=x`W-%lGi<1c2J@w94@|)JYFqG14G1$rd_O`(O=daF1q#@{s;&Iwren0 zilX?c#x}+$cT^gr9ga`2K#w8;2o) zahb>mAiO!43~z3Rtb*IBbKhW3((%`?Ds^QCgK@YmYZ;ipeq#gIq2HcZ42PATHI3th z6FFQJTD!&jXa)Nd+eE&VBx9BJFATAiyZo0W(xorl4S|PKe ze$M2na@gx%N8;dN_@I=kJ`1qyc<}TEGD;-zys zhg4DpY;w2}$p!;UjFv4*7CLF_ca+G+3h>5t>DYCQXPU}fu*oP1GnENpECtr{CLaLi z)1v#LgA1Yu8NhwDN7E^QAdb$pFD_(PZA&L*uR8yT+Gd_B4x_@NWF=z17287N_Sk#5+s-nyY9 z(Y!n#>_oAT#X51jg1a^qjK8EKb7RRO;QGu9;pEhB5INa%gGs%>3LWa<)E0+o;EnF} zl0(8Eb(D)j+9seIr7O*)rfUm3h1*QEfW!M<{|4f+nN*<7^dN7h_H565*^>40XjAmF zNDluqMG04Q;$h-MAeq^bIh1m22k1?-gG**Dk9KWbigrYF?wC%}Bo5uEQPMXV3{D1e zp#K^n4O(Py!=!Jd%aXFO%A=X@1{WnSy67G!zw~cb|CV{9oN92lG0DZ27J^hS3<1x$ z2`oz*R4wX8hFKh=0erE%UI#&AW{uw20*ec>w6#m94oaC{!07x|VjJkoWDDYLY%J@@;ykjio(Uvp*X zzPrnGW)6eGHSuZH+~5-95+t-}tX9i+hqY^agv7}Nh|O%xqL%rojp43Vn61=YcE;$k zfR^sII9;=h#Stw%sGsEH8l0GhnA}IH+8Nz4E-HNgoN*IOc!JZ1({f?V0 z+T)I{_H%ic0F*G_BL=G+9sgsaj-;ql#=ApAS3!}Nw~^c@$WWoQWih6pA(3J953(LYaxrmF z=a$e0Hj~!vdP~?Q0@LZtYC1AfsG zBpJM66^udy2Sn3Hr`_4K3BluUH)AGnkj%l8N!$x=9|sGQv<=L;SZ-2@r-BdO>Le1| zt=RUgdiT)D-$Ql**6O9Yj-$fguabX{^Q1I-%-L?^n#%~T#Ve{nNWo$dwT z=BFe|)#wEqB%`2vn}uj7fTL2P23<1riq)Br=>7cE6da< zkgY$N2YxBrG7&r-1^U;$WR&6V4*zrp{kul1n@;zK#pqwn=-j z5Y7cKmW6}`#&4h9SUFp=TWAFFQo3Gf7H%|X=x9Z?^ZFCC;ap8?Hsu*};f?QnQp7>!oZCc3Z^_ zaZ5GwGi-Nq+m5v&Ju2p1JcmQ@tQhMQQfy0u<3}z;^8+?uIkU8A;UW`wgsbyW+&C|e z;*qqV8(MgmOzFf7am|pNPc9!0dc&}5X(hTU9Ii5k)zw+o8KI-PY%~NLttTu6X(>ue z>Xxn`u6Kjn%dTqPuC;XQb^jt7#bHxAn{M#RbVMpQreGv$Q!TTq&h8am`?9zJ0 zVwi3_^Xc7!F#LVmnXgcN1`+9ffqV|Qoq=KE@WX?NVY&J1`7a$?Vi7FU!P^z*ZD0k% z)%1#YCJi@3%=S)jN<2a06{IkPGJQEtl&`L^=6DSdD~GS}o1=5*rBtFjn*n{$JKoR= zreDdh{aW`0A6r878|e(cK6bY}wPYr(z@vLGm~h#L^uW6>PhL zt0*LK&sT1%5{<=wPB>amFxQo&wXJJ}t|rHjdVXmV3e%aUa1ia`RB)5)%gxB+bO(eL zvf3%O`QgZwpqnMHnZr_cXqxsuVH-?x-sxR(H44C+1oEzy@XrG%cg+<0d@M0^IrN4+ zPQ`HS@Nq?1^O)aK*t996&A~74|bQpj0S?laf2gC%x z8EerBz*+9`IL{{S_Jl~VAUpN)E%L=FZ7|VG*Q86v;S-?1BuJk#7e)}i`l1f44`|I2 zdo)9@Ui6A^_{-!{RMt%Me zXT;gX0=-!4N5oyExq~I*DPHx_4H|hAWR6%a{zqj+wl6I;lG0M$;lH2R8EBkBMU|b{4Fd4 z+a6(VDfFyZ@4>QQ4yMG(uMB^Q5BrJ+sV?+3>7OK+gLabU!e^V@72Mp@cuJ3`P1;Mc z@JaZKJT@(~GZc4(yM+bfy>8b$sB3_jN5Ot6$)&Z@xgs^ok4{Ip{s!j(SRpm71+`k~ zp5c{tMfk5tpmP<2bfs``d%*LnaU2HPoknyPqBANDE}cYt z)?cq{QT$oJtX}!P2D~Ife0e8WOvq8h8%iup^NT=eLjxu$T4;}sX<>?V<$$y0y25#{ z#EsE{MU<8ofZ2OR!IoGxfj6npjMHKnNz+q)oA^kq#$Dr%!#eKb_)c8X69#FKsz;2z ze1-!6-%+wcPzEwQ^6ST!g)qLjlK@qBXM73 zY5&nHyFfVndi%%i?Ghk&ynQ_cfc6@E4HztEIQ(~1=RBCRzg39g!x<^H-$>9ux27viCLI_smd)50jYBw1G%nyQ~8 zoM~`M{U!XVEzG+Y%9dUV+l&GW)^%YuZV3X56z$VFd}Xj`&UQ)3n6ZqNNfNO%hhttE zoCf>T_7Kg;uVqEP8_U0PS_3B7?a4e?YJ{}6H|aSh!gB<+Yh=K{gE!atYRD2f@BW0C z>Plecd`lQK$4*O7^e+3Neax3)@JJ)B5T%s{Pm~1n))7!!-9HkJ%pg1(!R1&X7;V@I zev4U>#?dg2ibrus(Moz%QmnyQ2AFvWtj?@G1>-$0RPT8?n!~S}9GKPQfQ}XiMYi;S zaW_O@QF#beF-x#llbZZM6 zk}*{ha1b3;Y^%yCY=dl7ZPcJ?6ufG*8|tE>&E6cH%sE@Ca+RlZ&t{7-nvph*z|PCV zR~V*s&_+T040o0q?MWk>WLf!{8R^iI$%Oc~42j{)99Yz75~FiJ7Dg64qs)vk z6;y1S*2~*AymXX@0e>Htw*b5APrPyT{X0#E*UQJ-;L>7Jj4;eXGPWHps1$g^tw>y0 zcp>x`k2cfUa{bFB$7pCG!C3Kt7v#|xB0ZDYJic?dn3O#qk`O%|KRxMtF}TDw554mWPpyuiA8oOiKim)bt*!;orEE{r<+M8uQG}X1%Pwo zhPJy&L&JfORzz%Z*Epvbl)P6vG9`8}-B+rk?1Pv11u19*yJy(xn9K zcyx^7GvM$F-k;I&F&>O)E=+d-6;4Q<#@}dhc%K6-tsjfkXarzq?(w7Hp5eeMP}BcD zm<#VQdF?P)ZBk~242I!?_wB-?NqpXCLAk@;X3mimB<8)}7R5Su7+jn55V~ry>5AQ0 zY`*d?EdCx77RNL&W;Q&;)gw}wCBlkRBqcO5n>5abxES16u^6m$HKS!-p5bO0gKHx!k($Sxf|9S+-Udrwfj)CB<C+q}r-dm(jTtui;#w z>A_M|Rnc7;674^!$jFPYz-`$H4!&r9ziTC?{lXHn9Q5?(sJfyQDHZ0p${KIxGXA=q zYEc7)LvwAC%!jMtj*02voxiYqO99bQB|#+eQIr9KeJTf$;E1izyfNFu`E3-LjI3TF zWSua0NEnap7goqXH*3inOQp!^Grm>aI}|Cz_rC)K#~V z?ih4eEI*H8o*c)kcx5bEbPrE{5raI4kQ zL2paek9N&1EqOR0_HY>P84B&>F|PmsAOJ~3K~yxOMY^F;R*WSg3loZFllHI?BL>6a zBx4;Kc^^LDAeW4*0|w(smQMXxQsX2VlD2FSgVmc#Rt*$GnQDNR1%#2{=S zI2;QA8yvp>_;3&B2Sj0%q_1vhC;Ea^`~!I@8UNu=krux_^u5dnrv$+>ozU{C(wZGp zNQysgFx`1cX6f4!A4VKre!}!C1YrhX_GzIrgJ2nBIi9b91TT;V{|a|4e%WAC()EQH z%<)4IZEj1ZD8MmXo=_RM1PmS!1b-V~h$mt&91g^w_5O(6S<;pCUSRmhFDCu`26H+3 z9R2)vv0?Qo5t@Lw@2yyUMd1EhzmwFQ&zriDB!aYrV+rO;fv|w@oZFBBl7{7?YUEY7 z$b(IqWi?T&%R)4vuJa_=$jYwh#tJc&g088*&y}3gY0c2zT44{?6bGlZYICluMo7A9 zf#K`1&;N%GZF?SShVuJuWd#st!PZr6UZq9{1!|KA9aylYMW@9w$QKriUmcN0o(M-# zp(cXYl%fy<9cq&_nNsfLC@sXhohl5^4UZg(wYaSN0)AKHGffglKwvX^?`aekLyJqC zh|*3}=p+zPk%$3-(UwJ)EM6E=^OWfX*1aUh-%1{7pK2-7U{s`I&ACnz&u?P|#a&Ld z^r;-Nkl&RyIAFn2tb0kQLz4_WA}cfiF-?Gvbu^3s3=~+L(!_${>AMkr}j^a$332AOy? zow1#pCcW}{uDtZ;pJ%PT_w(_BZBcoV4~t~R#oBv)?Cu5MQQd;8>L!e~6Yy2;C6ea4 zkyu&$9>ll}+xG@!<$T#7cRvANWx*biL46zb;-HX+HuwmGV^HA+x3Z1Kkl-OsA#v<_ zV!K$t7AzW`Gd)Q}^g;o6p};F-cqsQvM#|w)_@NUq55K#T!SnzUt%ho@Dft=_%=HHh z+bck`{v>RH-$89e6eb)KS|&z=$CG3z-5HPRRC+t6_llrQ222D##hp(@1$-eutR(m% zB60cj;qDGN>`#9KivI!#L+&l|DC)HN&R}w74rk58{#U2d?syuErTBV%GoL?QKg}sx z_Tc*f4YXQ^Z)eDL_BcF$u)*{{<{$pYsJW!^~3ema>+Oj*nvF> zendJndkd+>Vl>vopH1-XGabf*?{rZA`}=_JJU(6!fxm(UD+K=*UBR;bJq-N}!IT6N z{JY?m z6gm_)*lt*{)gq!pPUT25Id;;}N@vMfqnrgN!5q_RGp$HS6w#u_`a#ig&(&Op#GFHG zK~h!CNKW>^uGb6$=$;+HgZs$GT0Sq)01inO6wD()pcFN%H1TS~v0PqoubSIC4%zxp zC=D(u%%|)LMkl!(a&{Rm@jbw$XSu6bSV$XiA){y2WvxUW9k?+*I2BhJTu=KE0lab^ zyh*_?Ow5f~yc;B1xocR~#G=fy#+NB7K!l!0*lpdRC?D3>O|<#hQdY<5MJ1^#Pf zSbC4N0k|)yD;RAY7|1I-;JyK~-mULH8ifboqTYw_s-Zx5#v0(T;^jCQAb6$-+YWYK z^CO*|bqs_RquUX#BLJ(Ri5O42k?w~*gt2D{TzDua&!+u9IK(RWJ=gy#v&QTh+u#|- z(KF;BD-2(;@sI@s{=8%L!_-IvdO?QqEpS*UFd7d$0ErD}3=BTyR61gB?pCr37Xwx$ z0)}B2hD@4Wg*P{+s5HA45{zN=)r)^EukTsN;KA3UF!WgH3+AiESdM40Bnb%nCq_Z_m4{%a zmJCqT@R3BAT^9cA>sP)mzoiI#nnZGh6*051-iXHe{9IL7)Lb2h?!sfe#w5}qm}8oR zW1VOzp_K*iTPnv%L{liHyVhx#wGr-iGrv)p33t;#%gkDw;W!7;B|ViZ?S{iuPVQ@q zU)<M=YKchP{ZhYTsn99Roi&j|mC+h}wY4V+(45GnU04Q}#?jLh zi#NI&MoAQvIFWzgsnVCH8h)9o3*6UV#Ok+75p-4CggAfhi8*N6V=QJd^?wnU&l32) zgvd!&!KD$T?RQ;@h9v}$ls8R zEWL|Pp+y%h!mP_Cxp0%v+~mywcRmlG?w&z#GfnI;B-SZ(C5pB7tnDzf4)-j*YPERVY0j!B!iCH0xZ+G9dV5UwV?J)4koPji3p``u26tI+6r@BdDHaUW0p%LTF#iHi)fQgrFH#k zQCsd+{LFGXel3JDpA5Tvi0!gSj{ulSwq`5#Ke&wbZXu&?^DRNpVi^mzd34QQ%%r}- zZB!s{9|+_Cmqbm~s!6Y*#Z-wNYe&(xrpjlASym<3(pn0uws_?LcPGxFV?TqLgQuea zz$2SOS9i7uqI(hr!XR zzlwDdfYE6PnZ$3>D;FOl(W8PA!cex@&xY>m`^9)$+`14=7a9?L8Fs;@#lk|ER^L@r zWQ|rbXeR!SnzRXXI9>2Msh0o}vzfTkY-Y4ysBvX4(qDOH_9}w3I-d5&5OGc z0_f@y7aZ5~V_1A4$-+$fz+XfNWuNgI4OovFmIf`cleOPYX4 ziOn&*2ny-WBv_Qj7T?jCM9CET9l(Kc4*2z-7o@^tVDRZ+Py*fyfnI;`H}h6d;XnQh z|L`ZG@LyJQ2sRAub8-V=s_!k?+K#tDg7*K4?ZUuKVwoJ-$7 z1Qh;e$Q&i&ZX>q_aBKO?@caYt7|Wf!Dgt+|U&uyV+Z9slPL zEyAF{$vSwYy-1<+_cay_J#iKz!YmDqwk8LEw%gN)={<$vq+p4o z>U1W}+85Lb5{>H`zj4&3u!<;rM77ku@ZN*C3Kq0I(&@CE;=&gz-G=A51#+i~qH#dP zE%*t(3-s+1n!$5%f$Ucx8NOfK6W*huh*2C$g@>ZJ>JWlSLIpQH*itw}nyfl3;xf5# zJ6jo>Qo0?#0al+8wHFX?Eo4keK0EXH_lS8s$#8O}$JwAQwKTmPz8*vzKNM7#mZ*L!G9(ZqO%SV!94TlyfmhFO{8FPYkN`#w?-`x>| z{ptJ1x8g_w3x+5Q5PYE#93h4y+LY9c6j#B5u)tmlqA7|#KM!(fkw>dfi6r>wWMAc2 z7QkV{X1!h^^`sljN+-Kv3Y~#%rn-tg;Mj$f6fJdIc*K8pV@_p6=`Q40u~nX2Sb1A5 z;6}?Oq}Y`a5}7saJDa8?ssi<~&>k2eya-S&BA3G!aW+uC+AnHq>(ng(5VLZ@P_ zE!D+&opCucI)p<9Jywjzl9y9o##XKNnjCBA7kZOy_p9z;Eh`c+w1BJAz6JwfsZfwU zqgwC{H$!X|n~y@+RFp*bOJ%%~3hz|62(fZ^a4pXtaYB8oRZZk@%*wP?aHtj%N<5YG zKEopY-(CNH`UQV3IfovttQ1&#n^v!2u#TJAvruGP<7sSZu%WZnCHWs>axDCNf38M_ zsKT`copW)m)M@8MkyDx>2tLr2l8XRVb9*0NWn0$wz}6e z%~pccrkn-=jxip(+VTiop|+WW=(=rmIg>u}G}VJ5+3JC9f5QM7(0f$R)X((_SS{kN zfUL61J*f8uZ9Na}OU6}SPX0=k3x2D*Do&4wv1@@^ zEUt>lf>nyuZZDE0aKfAYV?{eX6z05Gkj2V;nZ(u~);Re8u!c)cJ>CyfQGDt@u=b_7_$`D= z0>_z98m$j^610U9h(8F$Up{^MVsq*F%@Yxr@H@xlr!|0gtpLpJZ#cYQ{H))s*K?!L zFLPXfeSLc?K>UBkuJ0$UHH!iVIpQ3wjfJKiYXw74o0xlO3_>5yggTjfZ+c_4d7;M;gv-d?C@}||_dYbeL zPAm=D!u3{Sv^+~JSC!{Ph9f$=nQ^n_!7UHF$mNY#4ijUygh=M~ach&m=3A1Qf6|9k zYe(!lLY~@-UE+0DU;0+&-7HqDli(AkEz*ln){U9#b0!`ox?JRds`vaR5Y9&bg9PYoTFikrA-P2))czlILS_Z=5q4EaFn^G+o2EE|H`tHbEa`^}n{PE`T z<_6`-0fo;n2M$Nkp;K;j8U<@d;fI)6`QZ(=g5T;2a9j{p0*vJ(7t3)IRsk3S9~@9=ZZxM~jCEuifCcQLI#NSxRGJq+=NGgta7NpL z&A(@zwap~y zQfj)g;y}3EbQqUtX=ru~8ke(eLrNIhJN)DWdL@lw55THQbjt0Wlzv$SJ_ zQN&l_!Jo-w{Zi7QBfb7`s8Jj8JrfOD_;V(Nm}wimL*_h-Hmz_hz#1Ogqf)&G>_q@H zN5IU2ma}y)0~_xtwHAvM@Y7a}1aGM+18a4k7iYLt!n8=9r#*~usXH$NLhv_$u&B|{qJNkUt%fWY7yar(Et})b8_?QQ^F4$1 zp6WnY?a*4G^j24rgayAdb;$hC41zBA_ia9Gj^=mCfTa$r{Vl~w!;Ro)FH1MD*xjG* z8V*}&lV}#dHIZ}~%WYW2WK_}pLtrMkV!RwiP6wx7c zrgaSKsnK82pLuywXwPzIG|@Vxz=~&Nz`B_F-8Mxua>d|+lbKwj==rLGuTrx7EtHc&$SI5O7H&c4v{@E> zQ0oKUXHBpb1;1lU(mQih#a>~@XKk&hhQ?_P$*m%}uu4aoqg!j(GNn{u)BII9XJ%GD zuwtYAneQ&Uiid!&Ew`w%FrE_Ad( zuBMhynHdJll5pwyy2f*i^bZ+x`Pb>sv(m>{Qiz_(`n0ASzK_M_rEgR5F_=T!Hw@L>gz`)-- zh}($IWOSA3)UZr1uTQRHzNFcy0mE14b~rn~x)cP)T=g)fx~zj-Cg$N_Z) zd_jjF0L0(mw*m^&@+`yOJ1iq9D2oegB~csCfZ)3oONN2Kpu*uV(FX&oIUbfi#6Keu zHd*@5)#@wW*eCTu3-~T^@nrd0(xIQ0m%lx782k|kti#|RX9mEU67AwSoCcjPTwHwm zWEqq?@Z~PjDY>s=FV~ZFFX^rBB!L8%e&Yy2bSaBUY5jMYsPDV|dRAp^(I}3By&gSu zuB~(fr@ubm1INUI4R;gQh4k!_E4u?{ywZY0ch+^w!3yghXYv$PX_#-7OFz|;yE}|l z-JPhsW$iZdHH*;noyXd&*dWe%H#RQrPQujHti*e}gP4<*GP4zdZ6`Y4wGaFYhnCN$ z(!5A?7->oeM!($%!HUumlmB6BN}WzB3*1-{E{a;8L+MCxtJ}1wH3tRu2!UGQ)=0BA za808+IvNcL49*pYM(+0mCZB`}Pni{&rC}~d!sRwAbZ+UC>Y>V@2xlb6F2`f+i78?W&SpmXSo>vr}=X}k#s7bn033>%ZdUZFq8{|@W;Ogt@ zf0AoiW5Vi}{$mwBcswmAL!T_kgaa2oc^xjie!6_T5j*t9z=FRB50(QLl75&YIttFV zm-MPeh-r(KiUu%X#$XY0*~)NAG^Q!*pPUOLGs}`WN{no3`5XNABD=yhv~{tPk-82y zGd66=C}m!m$~@SwgYf>a@xugyfwG!+1xxh6VQ4J)QB-b_U}Jd$DoHm{My!Dffkj^EsR z**vX=t8TPuVO5xOV@vVaJg9iB+exFs4S~x9z#UgAY-X&@^)a_nopM+57*7c%oQn^O zmvcQaFB;sK36}XNp>Rp8MKeN$G>mLruK7wbFDy$u$2K4)3D%U&a%S{729A^f=uTm2 zC3rk@DJPu*_R`Xk7Nzq`t6E$Utfm+s*>?C&-vzZ~V>d_q^_Stu_(MEyE zecK50=-c-2#43-C5f??=?1F>K1y_~_$i`qL!$Cj7X}Nd2*JF$C;nCq|L1AIN&BFnw zzm6fd$%Ms^HO5>Rdr0_E9PJ+VFz6N7RdW`nzH6XxELRoSIe(fHGGC zOF35##ENRhSaZhC)xU`V00TiuL_t)^F)XipeuWRLr`eFhG%VSOcvYyJ#AB~L{`I6< zAUt#Eg$qmk(86O3lVz`(QCi5<8q-dE?-{JNB~itY$6o`3$I?n69No=#is4sxA&7Sy z?qikngTt(%7*_|RdZ1aMfW27pTXHd)R}Q-p-od+q;ZjUXCCi8Zs2HXk779y?@V?pu z!SZh;hD8`-8*BS}>i~=k&!KM#VIy#IxiJdIGWh!X#~?HT`%j+BkML{Y!zc3#t`4CFQujs*mBA(|-0N71b9p5K=aI+1Q7##QF~T4Z+iqO@}3xQa<+yPp7E}77g4~4qLA}Z;&3Tk?-Ecx00000NkvXXu0mjfweEz` literal 46261 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 SiS&yA0000h#2~ z)%(=?C%=BCtSNNb|I@PV5B`$99!_+f6?~3IDc$M_m0KBsnIVFOn-mj zYEArbStfG$&C#h5th#C2nc9VHMP{C#xz=*-#)PBct}V^ z*oC)2|D|gW`ybqY=aGFEou?Xh?(ST3<%{l`^V#wNrXk^}Keg$-cRsv6@jJJAei5k0 zLlx`SaW(z^^a=aK`Zc5hWy7>~&_9_^%U`N{V8x4iK4J*`y}*xb3U-xhn@ zkc8MWt)t&Sg08WK4Lka3Eru=mQHk}Lef&mNf=Rnz>1$6XHH5~n*0!`JNW;LyMKGwS z9Fd)wC2&RNh|MmZ=CuGAQaZ+U&^sQ9N#nzkPbS(P#aq)XB1i&Lz|+ZuYOraJ$nmmh zZvCbRJO?p{IU=9XK0b;Epbl`C-AzhNix>C!?2NmGcDmQ$4w~^%w3lL>B+an2n{|2c z!b2cyx*TVFf{zt!p%q6AnWn~4R4SFSr<``E4^pUD5Ql?uI7oybjWN{}(xhrM78!!T zkaR^e6{zACqaeZ&lOvF)`4Ey?iB>fVG9kgJw4hOpowh>C0cEL#(?;|}&bTa5AOVs< zH4TJiN?4>4&zImgrA;PFXv1tDMIIGmyD8d;jcI`D0R|k=CD1;KEH)M$(}ti4jUo6C zag?@8(P(Ty2Z9Op7=(#pqM}6>+<~ITn>Q<}3{%Eh%Szz@2nr_P2nX$Ok_OdAu;lF{Qti;D|36&)_4)vsfR8o?{AfPmLFlUYD*|2Juf+~S< zkRy<*c14j{SBo$172^)l=@#6iPiUb@5x8m6EenF^b;d;?i^cOnD2-SdES{JD=lL#O zK{rT9+&)h!Lu>#hpw2@XsqD1sH&;h&hhm^)jTLT0FW6R?B@{eYI;94FN>@FX_(13>Y_4f)4zHNX1*06NQ|otb3S`gZg`jxxK&K*&-Y@0&808 zKxk3wVL(NVOGh2*q028%qwcmU9Q4O3j!53Qxw$i$J+`Vhuupo9hCZ-5U${LIoZc|- F?4L&aGoke$B>F!sYf?*GB|KBADD1) z&E0zLgSRApoO{;&SU~WMPnmgcak-`O_9e-)8SFy8GPKAmzWlb)q70~+!PC{xWt~$( F69CO`A*KKT literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_large_10.png b/data/images/bars/horizontal_health_progressbar_large_10.png new file mode 100644 index 0000000000000000000000000000000000000000..b53ee9c365df2062984d5fa79e649d303ec98aed GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!2~4hKV8-UQZ}A0jv*DdrXD`X+n^x8aPaK6 zbBEa~e{5zhN>HhC$u5|b$lMoXll^t>Wz)8svm_sO87S9OeP_y_Fu(iHhC$u5}G$a^YqO?v6R%NyHtXHQIAV_@{ge>(S0!Mb}t8B{W49Mx7; RWCP7%@O1TaS?83{1OW0pC!zoV literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_large_30.png b/data/images/bars/horizontal_health_progressbar_large_30.png new file mode 100644 index 0000000000000000000000000000000000000000..7850856a389b5ad7dc5ebfe96c7677c2e8d386dc GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!2~4hKV8-UQVyOjjv*DdrXIe?dq9E1!SRz@ z;q7-1QvMpepAD(q_soQ(}2ZQ5O VrIYTL7J!Uo@O1TaS?83{1OQq8E)f6# literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_large_4.png b/data/images/bars/horizontal_health_progressbar_large_4.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb00a566f5ee210101dde58de754c664e3e7bfb GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!2~4hKV8-UQdXWWjv*DdrXD`Xc|bvc;b3aD zcV^g>I2}cQK~Y-)#q}Z+8Xq#fn^IF$<}Q(Jk!>1PTw7h<%>Lv#lm7dD>7A`!7gqpH OVeoYIb6Mw<&;$U;U?YG4 literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_large_60.png b/data/images/bars/horizontal_health_progressbar_large_60.png new file mode 100644 index 0000000000000000000000000000000000000000..0fcd65be6c9d5b18602c4fe50e25311acd8bac78 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!2~4hKV8-UQcj*Ojv*DdrXJqN+hD-M;P{&R z*jc%f9JkrClysSt70k@e9Pm^RmRxdH`FhmJ9iH|TIm*7A_c??2Xs6d3io5(<>s@Dg WU&;K_bz@GTX$+pOelF{r5}E)8Mk{UuSG!XfUBI-u?$a!|4o# V?VQWIGJr-gc)I$ztaD0e0s#73FU|k} literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_small_10.png b/data/images/bars/horizontal_health_progressbar_small_10.png new file mode 100644 index 0000000000000000000000000000000000000000..cf1b038bff8a9acbae89c37a908c856f71393494 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t1_MtQ$B>F!$uCk85_X8mp8fLt ztn@N_c{_u@HJ@5u{=U52=f0%Gj5Pn3FH7pFf;4-&`njxgN@xNA DxFsK- literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_small_100.png b/data/images/bars/horizontal_health_progressbar_small_100.png new file mode 100644 index 0000000000000000000000000000000000000000..fc66d30bc037c73aefcebf9915675be67525eea3 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t1_MtQ$B>F!$q6q~5<2#Yo&ECc zy!0~udOHK#pFdk(zWl!2hv&ZJ42e2J149FahtWI?uf7YYKM*$)2Wj?n^>bP0l+XkK D-#8%! literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_small_30.png b/data/images/bars/horizontal_health_progressbar_small_30.png new file mode 100644 index 0000000000000000000000000000000000000000..71fb32a81e00ad4738ac32ea25abb61b60d31c8f GIT binary patch literal 108 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t24hbb$B>F!$uB~Jl0NlzB>ejP zkoofb^Ydrc?W;NYgTe~ HDWM4fW{4`9 literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_small_4.png b/data/images/bars/horizontal_health_progressbar_small_4.png new file mode 100644 index 0000000000000000000000000000000000000000..90be92547ecf5ab8964b11f0054f58fcf88af457 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t1_MtQ$B>F!$pxti30$3hX}|tF z_F!$ulM#KUPp4uXK67 zeEy7oe}0|#^80o0GWq%Q4Qqe@od5EAKARdF8_T|rFXS0w)5K(RS=;hK+C5$UT-G@y GGywpj@g$`H literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_health_progressbar_small_95.png b/data/images/bars/horizontal_health_progressbar_small_95.png new file mode 100644 index 0000000000000000000000000000000000000000..24352d5302a4f024613e2ce59cbfb4c8067b37b6 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^j6lr8!2~3AUOE6t1|v@w$B>F!$shES(jrPU`d*&y zH}|<;Uz_mj!&}YE?fU*R>;9)C{Q5k*v9pn}G2Z?MKZE`*k-5fs6RJSkJzf1=);T3K F0RU4GBj5l4 literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_mana_progressbar_large.png b/data/images/bars/horizontal_mana_progressbar_large.png new file mode 100644 index 0000000000000000000000000000000000000000..33a17d366b1054524a8e295f7136e44d10dd66b1 GIT binary patch literal 113 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{O!2~4hKV8-UQWl;rjv*Ddk`pd;rX?Bpq$mCO zH>>mEeR;Ju`~5Q{{{2lz`tez~>Hoi!q#wVTwf?ntHa0ez{CR50@J2~&2kXYX13)tv NJYD@<);T3K0RZmFDnF!$q5&F(vkvrlahY? z?d^Q{o?oqP{`?sdb+su;KYn+2KD;ll#>U3R^6!@nLqP%G?0)8g9FT5LS3j3^P6=+?i literal 0 HcmV?d00001 diff --git a/data/images/bars/horizontal_skill_progressbar_tiny.png b/data/images/bars/horizontal_skill_progressbar_tiny.png new file mode 100644 index 0000000000000000000000000000000000000000..bc7bfe6948ec13506e73f530b3a2f499a6005d8a GIT binary patch literal 2114 zcmcgteQXnD9KH_0F&GXpGM&rL!w4i?@3YstlR8E_w=Q&)QDH+3yN~zUbM4)6cU!v! zvIZ5L5(t<@FcKt2lZo(;Q9>585dl#QQIsqg6O1wXhY5>LVj}V5y|$}p#z*+WCf9r4 zyXSp=&+qqp?tO>i?Jd<+4^|-vQXOrLbilh0Ub8DJ;QzcI7M_LkpdJp#n^aQ5C_KMW1>J?K~3RcQhIvmhUx= z4gOxU+o*r~n{5?KTTV9pJa_A?(<9G?pPxVb<;%YwyevF)-uI?Fad5}F9aEi0`o7$I z?8kGL7Hj(}^6mTI>O0bl)GXa{s`m0^Wqu+ydWAi6ZIEtwyKUBz?$J8%@QYQSk6jp< zL*4b+8;72)xhFr;{&k>c?W&Piuhqq??7xtQn`_uu{S>foQD zg%eZ2IMhaY(gQRYRu*uOe4As>TwlNSRV^$cX^wt3ztRHAkC<8r;pkj@WqbqYFB**|)LUWn4 z;fT2qR^S!k*n3Q1XaVB(gs@^mJ7aM)Y}x<~_&HpmSRM@ueu`sBhFgKsBqb0ePf!d_ zQX$3t=hOwM2r*X0!e*<2UUj0nGwAXo9A3h`^nG!c-nptPL7p1fSL?jo4Fq)(p zoT6}=Pf!7o42nz;CmE3>i_jSKfhxJuj9^}*$$x=ORoD7&2~`zQGwqB7tE6Y7Bp@s! zS%?;kiBZFGB|`zxNC<;c{kpD-0fkd3S>kY(mK9v1Ss9lD9EURkkU#)%Gzp4o;rfWF z^m-li))&pJnhNA7*G*&sGGGEh77y~2fb&6?!Fi3Hq)$ literal 0 HcmV?d00001 diff --git a/data/images/bars/marker_left.png b/data/images/bars/marker_left.png new file mode 100644 index 0000000000000000000000000000000000000000..a57f183c13797a1db06148b2ee91a044cdd3c071 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^+(69E!3HGn$Z9$ccW7~@TM_E)T!3HEZPnf;}NO^m@IEGZ*I(lv+Z-aq=bD(r; z>juY~-z|T|6`W_h3Yfs8yWiSY-2L_mk6UJ+?|r!V{>BnhtwYso16t%~Ffe>>@ZFX8 hPKNpEi@#qNa&PPruHay}`V(j@gQu&X%Q~loCIH-gF(Ci| literal 0 HcmV?d00001 diff --git a/data/images/game/entergame/dailyreward_deactivated.png b/data/images/game/entergame/dailyreward_deactivated.png new file mode 100644 index 0000000000000000000000000000000000000000..66ac9535cb7b2d5b098b4459cff488884193174b GIT binary patch literal 273 zcmV+s0q*{ZP)rwU7^0x}{?MDBq;9B&^kWFxZez>*7~jQzlG1lH-L&wnz8nT44pGeZv| zYJ{0lfA{qkiU$;$-2qBDl`hY}a%-mjB*L4Wl#6)B{XPoER%*(RiIF4qR`iZqxIOni!8=P~fwSt*j zozqiSDFpx!W5mAih%o{HN+}SL+wjzuQZf-~RXtUvlo~hu`MtF_NAGq2h6#VbzqrRY Xm=TI_Fa=8;00000NkvXXu0mjfc@l79 literal 0 HcmV?d00001 diff --git a/data/images/game/states/bleeding.png b/data/images/game/states/bleeding.png index 024ee7e14ee9dbb4fa4bfa3c05b05d226b0895d7..f37b693742c38249f23aaeb98258df85a78ba0f4 100644 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>3?#4ne^UZdEdf3uuI>ds6)K7~h6YgzvOnD& zIyF_EsVn?P1m121L8V{&3=WW-L$h-K($ z&(l`RH8#*zRCHHXIw>c%$xx?3S?-&;UWB6DY9rk$RfYcs%Ku|RJyn#~80-D_bM-OM zJ)^But01kTqEut39jC4$Qla|_=pM$BAirP+hi5m^fE-^>7sn8e>&XcWOmS=)0^$O# z22(;)o~kZhC2KYz*_hFyG>7;NA^1n8DN4&t;ucLK6U63RcVj literal 905 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5G^ZiJ zC&U$~poxLOlZpAcfq@AF$0i1belw+LVX^;_kv+x=QVa|yL`5B#82#DVN;KrSSeR24 z#6H{DIPtOdd6|XtaxZ3JxTB$=#LTdrkI#yM!I6>6TY!C{tx2|`)c?{_3qDRSE)F&( zrYK4N|Jm8Wf_#@{WES~Yx^S?4u(bT+>YA%0pDZaU!NsA?&SJ;GAjr;U!@*Fgtq?5A zlPD`<$i?Q)!8h62@U@A_6feW;3JOlbys_dEdxVAmdwX}7=mZIHcnJu&vhx)yD%vt} zMT!Va@iG(OU^pcvR&1>B|NnoW?*=*e_hOy~(1{HtL4LtN2U7F;>;|9^Yc?RD?{cc0(;w(R`R z(hVPX+S@S>g%y_cIU`hL)ZGYP?c23@@R)6Wig=e+Aq3eu% z4~2^?I`}s0F=KGL_asGIJ+WEybXYxJAAEI+`Impi$3xYbk2z-D+Vk{BOy0#k9QG5% z+S+DX86KGNhlhXKp)J!yCYMSHEqa;0%U&;jqi2rED0|306@_@@6EzQGBF_}S}3?AkU=CU zvC&Gfw6aSj_ziXn`2#;iu(r1qv=xhxfRbg*I&Ze;^oM&5-*0K9A}lE>Sq`U@gjaiw z;}uEM6sDYPY?4mtT+axhPL&XE|J2Et9axCzlEljzMPR)W3Dgw{q# zr&2*Q77Hp?hE<2;U14uKINdF@1J!bh8w7|!E@M+*M SqN}+80000QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5G^ZiJ zC&U$~;JU1|zqs_`93y2}>4`A;y5Ck$ zS}|EdMp9TzQAqS-r_`njoA>HsUt_sB7#QZ|nbZWDJ~EXwP}FdiQ{FVeRYOK8Pgp!g zOsZKx*ica9OOuk0lIE)nAyWp`!#~GLhd~R^{t?yQMWwt$v2z zs(GTM6xNp8d@vFYP*BShmGYL96J%txR?tY2l+%z?sTLCZ7Q+8NnO~ZTeM*egGeha; z84{nS2^z?$SSc!gY~^2)Wu?Wy;UuqiS6uS*49!M=<48GWFGbB@X@$?zq`vHP(G(K> zpUuCj(r!+^S+=C&=K!(C=Hl3?#4ne^UZdMFBn`uI>dsOiWC5b#?sw{A_G& zA|fIR3JRQ@oLpR7EG#UVnwl9I89F*T+}zwNSFV(llvGqyOi4*Odi1E9o11}w!R_0( zt*xyiA|eC@1t(0HaOu*e?c292DJiwJwOLqL?A*C?$&w{1Dk^n#wLnl_Ue3qI_pY~K z0?>BGk|4ie28U-i(tsR4PZ!4!j_a~L?tBLn1ekdl%RJxjo&LYxut9&Di4?QmnQP)5 z=Tg5-?#rF-oa$J*J+4+VeZdmL+=Ww{)vo$@?TLHf;S=C^?&HaV=8ueb?WY+syM3Hp RUI;Xq!PC{xWt~$(69AHMT0Q^( literal 445 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lt>8h z32_C|-rnBw^78HN?E(SPyzrTNVb@l)M|AE@^gOhJ^9s*S;lmz(&1Jz>y1|$)8_g0V}7JIrlhG+z*PPiy` z$biE+)BWg)usOf}-_Kg`YfH?+@yYb$E`ZipV5cToT<7LlmBtz ciT}d;73?#4ne^UZdW&u7SuI>dsFG^)T&D4L>CHQ)( z>X+?FFZ*Slm&#g8vuqBO{P*?rr}^UlKJNPe_3Yo1#@~-s{=Jd$c9P6~(KP}<6BtW^ z{DK)Ap4~_Ta%??a978y+oA%rka&Qn}ZdSEj_w;}LH3?P!*qthz0i9p1xGg!hxs)03 tbjWRc>?d_P`d-DUdw+bRKGz4=^M~DJyb>}~b|cUr22WQ%mvv4FO#p|HOjG~> literal 1468 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8sRIovd!BLg*!b;I~liXBgnb!82)~PTYTp4s|D!a50L$CqMpARD2>$v`Za`}8j z{zwvIyfWjj*S@t5?Du9e*(fnM7%<-3#ToC;IyaK@_L<%rmCSpV1{f+bZVq7l`!(;) zB@Hh#rW6;(4?85gO&A|f6x5Jn*g8LGPdR@>6o-)}^Oh+te?MwnXy&xkWb(J-J279t zS)cvGDp6l8#=oyj{x1}HeuJ|}m+{3Jr861K0d_1k;SAeiS#%URoh;ecx-gczvz!fP zyfBIVaUFB5A>)oYjxO3Pzpp5oX>j-$F}^;^WTL^beUAJ8O%j@#4Bs!P$xAQ>TQaSm z6O(AnvUged{~y)+S_O=y7;~*yoHZFULYXHSFus{CbYr66zps)TCYWDt=lFh4vp13b z-#4u@D}=8WGkMvtnaZ)LD>4}yGenp(dD=7XTHvvBq4TDB;m0zW>`a7 zP!wSJ_d#Y$CEx!;@@HE3O7t0{oES>IIjW4NswPKFfIlZFbt^e|NmS6_?83=3nfn%#}JL+)C-a3hXVxIKX4R!=x)7}{W_vc zIx9jj!}m{Y7E3pMK6q^M z<+BXQ?0-9g{H~vKy8eVc;mzI2jepxB{S>!WzUGlgp0<6H#kS{@d-Gmro!z4G&E;$7 z)}29G*I$MSODeV>cwPMA+XRIrZtwN@{N`-(F)E z{_VxCcP}azUXXekBH3qrQb+9fzBIk-<@zCh?q@uf`%cc9W!CHXRkKy{vyD%tOgTe~DWM4f65>I7 diff --git a/data/images/game/states/drowning.png b/data/images/game/states/drowning.png index 88c4dadc066b4dbd41c08294e85372a496d49e9d..4d383d1b1d8b7f42e2b3e5c750fdca276355f8c7 100644 GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>3?#4ne^UZd3dtTpz6=aiY77hwEes65fIa`ABPM$s3ti#3lRg zKY!@%GZnA!IdkR+%PDL=a70L6LCC-;Wxp1_4v;OkH}&meFBV=e?4CdWU!Zb`ns~eV3y*yl4UmG{s|Of%rEi_VLZR6d=`)s<>}%W z!f`!0fq~J@&EV*PBPY%r;!4`EvACe9@Uwxzhfg25Ik-5x4LZ6yy*<13zBBCO1-?(+t8W{FlIh3y&{bvW-qFUk_ zQIe8al4_M)lnSI6j0}uSbPbGkjm$y}O|48Vtc)zR4GgRd3>cptHh$g t0-|Bs$D_PJ4H|G8N-}d(i%Sx73$W;cT9Q8bJt*`TJYD@<);T3K0RYQ>&WQj3 literal 1434 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8sRKTCq#c2{Kx#~Edg4W!#4@{bu@dcF@uRp;is2GyfkiO<*%#1B&LGfJ9DW*wn zoGSJ**Y3K^ST9k&sN~iY;l_n_<%{*yKe_aBnba!D@l%v-!CZT?Q-tSQ;o z?kPui3usv`J^w(+w~)s;ipS7t%blkxK9veIKl6pE?U1<+}Ndf$?lwM&zE0*AmkA9|Nnnr zT#N!bhk&$?qb@K{F_Z-P1p}jCpaH``I$-woIozPI@N{tu(Fjh?NONFzXp|{_xn+xq zy}haF)*lt?QsNeHY1aPr5j8dr4-bzONMPjTe9_*{eIg>#vU@dGN?KFvnKOsh*1kRx zI&;saHDA6SbgEkQ=a*rm)yr*bHVFz=2`JWbetg4l^g`0awwTb42^G_P%O*{n5ti3k zv~7ol%ZZx}$36C43clKU)$0zAipW&S*Y`6t(@v!vouWJ85tmTVitW?4^sLb^Fn*jJ z6dKCPIn{D$RtCo^<7}gwlDpHd?_g|gvJ}!;w7B(Vjm!_9Lx&DIIXJn7{%mzx+IRI% zTan}1xkvZ Lu6{1-oD!MBC<3ehP=E5>L&aEl)iEnX#@BV00000 LNkvXXu0mjf+zOA~ literal 894 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5G^ZiJ zC&U$~psy;;o}2N(?%)-(da?sd6*(A>?Ao}!NjpVS=*X@Ol59+iCpW*m(6gvQC)tSe z-Sd+MoQyu|EUlF}uF5R0PNi>Hxmb{e>CW{dQ>v5q&dClE;mkGXdVFn@1_$%yBa64K zp8xIrS$1Zo^%GOGq=YTG8MpO2N%1l7-?6OPmRnbx_xbs@} zBf&5)`y+pL_!`$}b&t}3_y4naI_Ev8{&A*!!{&S2w@+&{@jdTzd%y0PN4}b@W_8)G zq<1~!iCe7kYKnMIabD*=fA!MX{#~jEYW%`kE_-I1c~1(o`D2on`SWYttXQ??yv2nx zc3(YsFJWft+2?$}?$VNxu+v$%o6$`|Ms=T z1^-=_S{6jzz1qBugX!lA?WP;$M-p~OdMF;7Vf-vQsAr?NlSf}i-@2M}5)yoeKXgPb g%C5ZkU;H0~6|<6^@x_n8yurZW>FVdQ&MBb@051xFl>h($ diff --git a/data/images/game/states/electrified.png b/data/images/game/states/electrified.png index 38e67a8ea3c0dad6b4905d6a71e509cc7b74828f..b700543e12a3912f6719524fc8ab6e83728c31b7 100644 GIT binary patch delta 413 zcmV;O0b>4;2i*f9iBL{Q4GJ0x0000DNk~Le00009000092nGNE0N{}Z5RoBEe*g(^ zNLh0L01m_e01m_fl`9S#0003-NklFY}}F|kQFJch38 zh~M8MMUbRYTPhXd;$jNFzlB1JdJ2=ZJn}G`Jt=p9G~xnZF_^m16#d| zt3x`W&>*_kYt9>nhiJ5$lhaw;bh@7MeT_J?nPZXCqz00000NkvXX Hu0mjfjZL*( literal 912 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5G^ZiJ zC&ZPRorAe`qmY{)`;{k5I#$e8i&*AgVN^3@lvU&S_g^`?ilu*#OiB)ur8nD=oAPTn zu#1QbS~`lX+`#_ujkJF#>#CDN3zjh%JM(Gia>*$PFI_Dan#A$_7oUMSE5D$yv%l27 z1DrDQynPdu3v0MkwB@sk6*ldVj7^d93E~i!k`0bxn|n#QsDV#QUv$kD*2%}@lJmr! z-C4MK*zE6^?9JY5_^G=gpWbNvq)h`6nP zcj|IjG@FGxd&opz*{~1+)1;cj|NrePrG?M6n^{`=&I=O1Rranm>cc)>*{9)uzaKek z|985>=Y>K3zLy;gdV|h?Uc$xdBBCez>fGe`l}-ugEHbysT&_^{eYxY#oM}Zz-_Ce7 zwNpYiGJES*>3i&G$vU zh9|CUSKlQO^R7%dVbX;B?Jn29zRoeT_#nALIjVhvJjY%6)cvy3UnZH?fRd1>tDnm{ Hr-UW|o~B*3 diff --git a/data/images/game/states/freezing.png b/data/images/game/states/freezing.png index 04acfb04c038b1ab7905b14c7d1e66320f227260..680199832f134805d487dae00c28e0cc60579ccd 100644 GIT binary patch literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4?3?zm2ODh8@g=CK)Uj~LMH3o);76yi2K%s^g z3=E|P3=FRl7#OT(FffQ0%-I!a1C)>p@CkAK|Np;?j10qx8x8;e*Z=>&@6Vr<|NrLz zMgRX_`~Uv}e;+2GO2(2PzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=7)YN0@S$5_^o70jIHy5LX7!Eej$wK7nRQfax^_%978y+CnqEbBmjX(hzQH1w!Sup zAPb2TXX_nA$7c33~HK~@kMwFx^mZVxG7o`Fz1|tI_6I}yi zT_dv)LsKhL3o9cFZ36=<1B2&lYB!>2$jwj5OsmALVcN%|yg&^aa2rZ8b5n~;5_1c1 V>pA%3$t9p322WQ%mvv4FO#mfee$@Z~ literal 957 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5G^ZiJ zC&ZP5gTtw1iK<`P>a!Omj2y#D>WbHH;8)bT_vV96d2P{@#eM7dUwHgR(ake=+G5|# zoY+aTc%+o(?my}j6~FGmV@VsY+~y8Z4Q=z>ZukC;hMvK`rOn05*S`PuL&M6we%h>v zwyA2d*-dM#x+#_iPk>nwv3<-Ee5efVM&6q>nw zwQc3hoXOMLHt+DQX!TCclyM2HT)O7YtM`&NE)_jf4&8pD84$Yc)Gcvc1DA|qDI;sW zsPx*kn}aipr?1&O`S3C2*d$#~--6~In}C?)sWTcEZ4uHoap_#G?Gp6$=WnCjVpE@} zqUrNpQuCGV{ez0D)l##}$|_@eXB5v}DyeChHEZ#VZAT3vqN}%V<>BRd_WgU~_I+ZO zwu)As*Pp!!%d3zxby0WnT6N||*Vf&Nj$S#FW=c9a70jL!QC(HMcB`_FzgKo~c2AFD zV6&{!N3+-`2zYPmEb}ec5?8XTc}tVBN5{oWaW387H|8|^TZCS9VAnYkv|4p_O6s}9 zcZ-%C7t3H5T6O76=%wIC-hoEj3XFW&R!-8nru#kMa_}aDZ3bfA;q2UzYS!Eq$WykQDk{hIPVlju3Oev aG3;DsUix29{2(yu7(8A5T-G@yGywoGSQaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8sR4_N$D8q$u@8AzIxw#wFHJ&1!rzp2>(b&gJrP~yR?CarQe4I7O$gb(w5Gp4 zPEb&=t-AQq>9t{I(hKLLXi0M&?+h(W6t=N8o^%Y*avb^VxF4?iJYyI5P${4{w zW64B6IUjxT!`mihrbfPcdH2?p{Z>|1^ClG+cry0pnF{bSY+qAZQk*xbDIwNMwy(;e zDMKMUh~voi{?&7u73KMB;;kkZ`O9_?@G@0mcDRe?UuDo%Q8%j473(ch*?+R zx^LH%-J6zgsqx&ls!TzgO;J&igM*_qjx*Dn$yHl)*S6lHhvwVcnj0zb_SRWUNwzxD z9-NvO5*y)Hm8EcQ@6zJz>~J&b<+HL&QpF?eh0?sVkM5nidrfUg2*>~b|A7%P3g{mK zuTIWn0_G`(k|4ieU@QzUU>H#Q4bNNj0mDMw)5S4FBiQxAYh$KBiQ^yLAMJ37*s8JV zZ%7~#{#@r@%|JDkZC96F0@-O^#H(SxGDV1igQXl}|#@2|1hy#3mVmnCkCpOwsKIJEG}eXivEq^V4QPww+J xKYPx3_v4(^Z_fwUha3O@b&BJ_|CY0wuj?PIb^PR$XIueFw4SbhF6*2UngFclP+0%~ diff --git a/data/images/game/states/hungry.png b/data/images/game/states/hungry.png index 829e19110bc391ffc74da28a9a971977409c9cc7..a1311db6c7b02e20f972a0ef4edf298a22d24378 100644 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VjKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cxg@$ctjR6Fz_7)VaDV6D^h@h>?NMQuIvxF#l$TYJzfGzpru&KEZv^MNO;pn}e8aM3(uRrh;>E(3j$CxQ z;1#5O@_5K4rm!EOmz=~*&b{|*e7|9Ru}gc&+v}p$j0~%rL+zFcMR|tJbPr~neV}}X qn%<+!9sAC;8Vde=+G$eA*r31Eu<`X_{QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5G^ZiJ zC&U$~AjMe5US1#}CQ5;u$-&OHG}yhZsZm~5rqxrGla;wA$g-@cAT%gYg_kAM(Rgxi zx3RHtxT<)QhhbiJmH;Q4o-jvUVo0Eju$PB>Q%blYE3>?`amMS&YOAaE#adT{dOA5dwt1^-@UsQ03yJe_&PlS5 z)si*iWV0|c4OJ6MNleIgGFv!nW=v#+lA_}Di4&rNf=nfNA~huWczFWl1yc;=TattP zeSI2gstesM#6$$$U7TynN?Nkw{{R0E^y8ofOx7HSfR1Y@3GxdDI+a?0fgFP*xaaEu z-SXbk#W6%9*!04~pe6?q)&z+Os@%fDnwyt#Q`J~#i} z9n0di_TEcx_nOVtSX34Ep=Q#+~Gdsfz5ARFAGmjp5WrSX4jVJV9kr+kJ^9e^2B;gku7Mcz8X1sYMRCC73<<1 zoDw+f`M8eVh{-a3+c@XuHr-D#y|dm`y}tM@F4a2fd(8D*`?Nr*mjRy-F>|D7c-!bQ Qi-FRJr>mdKI;Vst0At)v<^TWy diff --git a/data/images/game/states/logout_block.png b/data/images/game/states/logout_block.png index 4244dfe32b0931f6d30eec13dc3a950192924ff5..535669552961dfcacecd56dd12e02fbf057d7499 100644 GIT binary patch delta 401 zcmV;C0dD@f1kwW`iBL{Q4GJ0x0000DNk~Le00009000092nGNE0N{}Z5RoBFe+h6% zS#tmY4#WTe4#WYKD-Ig~00BEmL_t(2QytAsC_@1N!14d~eAH_x+F03Q)^djoElM6Xmb8vRysGPOZlw?ZC)t!1)mXAivwpYB~*xH9p%14j4|M^#c!}|J$mP$Qv zcyxfR(@v#Q!E82@l{3uGEl?^|e=*8(7N2jNN&gft$}@r>)In%5OkZC=vYbYENQaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lsFLJ z6XN>+TGZaXd$(@gdUTH0oH=u*OqtTt)6>$@Qe9nrE?c0uxHvmIJ2^QyDk`caNb#r> zM~jzYv6o`D6A(!zTS-P)Njhl?7%B=VDk@4!N(z7g2N*DL0IgtP`2YVun5GrM^gcoX zXtqO1kY6y+F1!Hb7<_%Dd} zwLS3s_Wa4cC+iGeH%fkSk-Ve8x>hayY~N-7m&FAo%iGqy-~Df+rr^beek=P5Lv=dV zB?TT?dctW+s7_FI-ln9Zr@93hPOW*Dwc5je*{SKfE;%UP5xBpMCtO3(!_Tx&GrFN7 z(rw8#_X%->ju9Q*BZAN%2)n3S9dq@LKp!df zi=37b+U-shL_I3{9eT4wI+MaVfA~yCKOD?QT(^(7-4!VmZ>hH`n9G2#v4gb^X&E(; zZ{oHy#B`g@IgVqVqBD>A+padbi~(@*%Xm4bw#HWBUZ zl)df8!4#(@nOY;8Fc<6HHo$jhh@t<)$8b)mD${7?xGjX&}Ngyi98f$US z@MT6WFK}L$NoQg3Ji>Dx;^7uT_qrQd8wQaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5G^ZiJ zC&U$~fX#b8r+!raq*?rG#%X<13jV*Yok#CHkqL#LUI}0l-hh2$7WEQ)+g^aFSN^8H! z{6`$VeVXpUd@>e1mHWllyvdt1t9J2nfu3s|k&8Htk`$f1gp8fbX3q_(Y~+$RQL(TO z$jIm6=Qs0BNK~6pX!i6wS(JFXXM*$6K_W zJ#7B}|Nns@Fo58tiQH$P^$jIKe!)P;P#-W5Z{$D2a$ve)c;V^d7@`rJ%#rHA?7&!O zC$fM&L{LH@<@m{!+Un}**?D<++MGf{L1N#&ZA%NDw&B}1v9ga$oG&@Dv$LZ=t^6Fx zlo{_lVZzQPvwr0X%h#?wv2?8htI((5>tcq*B_$!jBI#GswlQ(;T*2KjV`Fw#Q6)p` zl|s&+nkNo~a&Blk`{{WZZ(CMK(N*@_E3$<&lDW)IA2Plm_eRgMGMjg1!h!&f$!(_k zH@-G$m0gpX=eQ`!M`{yak$|G3Sac+>TId2PcE=eL7IgJ)<)7TYwYQ5g;zS2C%bq23 pmh3s8!^V~&;AJgs?cL05EW+U5q`4xxs@n?`{hqFVF6*2UngA@2SEK*{ diff --git a/data/images/game/states/poisoned.png b/data/images/game/states/poisoned.png index 3aae9ccd94b3cb275d22c59b2c9167a3a834ba55..f0629695443bc6ca3bd3324b565e54172e5c95eb 100644 GIT binary patch delta 356 zcmV-q0h|7f2c!cbiBL{Q4GJ0x0000DNk~Le00009000092nGNE0N{}Z5RoBEe*g(^ zNLh0L01m_e01m_fl`9S#0003ENklKdf67T@;~LJ&_k*gV~4a6BT0SFXiwV4WToYI(3lVUxRa3XQA{}LQR=cu6G){b zmC;0pF}<@P?ruo`d_;G;ju94PYoz|w1baQglb9l`NKL-vR(Ey+jMm7isxU)AzFIMR z`(XC^zT{TBTS4UWON~i2&O)M}OVo=+35P$FlYEQaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5G^ZiJ zC&U$~K)yqo$4)Htcp!(GfYmB9;V?CeK8vh7X-p!FvdP9ARvd!|=iH+H8zER}qP)>6}-<_V)F?q?Is#UTye5)Df%38EBiR-C6pNjhC7AqI`-u7|@;ggO25ZS>n)&SU zkV`Y;^N_TfVikTe*mb*O-h(X56{Z{#yv<+hP3IZ@|NkH8*}(=*-Clkj=%$8}AirRs z3#kYgNH%LJ|CVl`TRwZbIEH8h`(CK`Z#EEUNL=y4hV2deB~A{eVvZ~}zU4WmuPH^B zxc&Vne|)j&#qaB%oqT#}&Zo5rr&9w(radjsZ+U%J@3ayB?l)CVUuD`Qw(Y%pt7m%Z zPX&!9KPBuGPF23JX!_OSDx9IXHJ|OAPr#wiB6?8<&wKs|EuF|2|JHbqnGMg;D~#=r z6f9afgW@Ly&Meq!$9J%2*%IaZ(PtfPcgn9#me?E=v`%?$z1_cyNv$R|(s%zVFK)X1 z!!{#y#S^{MgR@0+!xHP=*e9L1;>UQ~ygfxtbK#nmC9(MuzEAd7N&Bvj->~bN*}B(V g-J1LIOMiZ9v2SWp@!Q8`%LGaup00i_>zopr0Q%2ZY5)KL diff --git a/data/images/game/states/protection_zone.png b/data/images/game/states/protection_zone.png index 741f4df26c5e7d1b60575bd49e59c9582744d68d..6ff9c0a5e06f148a1a11afa2c6fe9492748ddc5b 100644 GIT binary patch literal 618 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>3?#4ne^UZd3dtTpz6=aiY77hwEes65fI%UOeceb40 zTv@-lQ}+JfcIp4SPe1nTKP=-rw{*$JH7CE7E&T-4^7;Fp_?ne6zO%g&+f-Fm@4o!^ z`r~iEln$xqD8Ed zk*{LJ1{D<*HBr$yzq>VoUSKQ<@(X5gcy=QV#7XjYcVXyYmGuB}I14-?i-GhBFi!sU zd@Yc{UgGKN%Km~`N`P6xX_1~hP>3wGe$?nL_xMdN5eu#PERvUwoFHb2@|JIP7eqOVKSN;8X|e+im3^! z>Xt2~5+z^1@bdKb`1(kmDLJcqMR)C*T!uG)Iebo?z8MR&NVUW@q9i4;B-JXpC>2OC z7#SFu=o%R78kvO{npqhbTNxW^8yHv_80_YjltR&vo1c=IR*74~sj!91fEqO5Hk4%M crWThZ<`&@AGuOGH5~zp4)78&qol`;+09bn3S^xk5 literal 1499 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1lA?%)#Y4Yr9f>{n?whh0Q&eZP^-t2Qyd~!rE9e-lo!NEr`c3(;LW7JJ z7D1`WYu0kB8EQ4HId<}t$AVotfhktiQ}k2nZKmvyG;s{ta@ujqMiwsKq?)$dckd~B zWp_`QRMprbD5JP^?*UP5Q}vR$QU+EW%7**SU6P9`PtD44ZCdd3-TU;48c9h-oz&)Q zH*QLJrHO=;i8+R|3Q9RI+?QNhcK!Ap{|zV2y0>a(PkH*{g+cXVc0K{g?4FDF?(2kR z8#OIouzi=Jv88~am(S9DtRnJnK7L~7Ealo5uE&D(&Wj)*DjnmdzFDX@u6PZkE(S7telE`eHrtfyork47?8(iIrmb4 z;rkaE+GWWTCkfpb<6jU^yQ0UVB)dX&w$sibC))$+8qs5s{AbxIy5Y-8{02cK2-@ikL*b>7Us)zR9 z-DY#8)zMF7UU;NdVDHTplkG!q*{VgzWlW2#*<-XhDk-TrYhUMX7hk>;6{~BUZA~4Y zG3lQ#SRoKRr^GF8%>o5^`S}~ydgul$?y1X-33gl5JWXu=O6NQ`H&*8DeO(a?f{MZ> zrUVAg-s~K}c0tfe>(;H*tzMClk$Q*h{CGSa_+PHr(9u1eRZ2o4A}Z}fXH!d2QPG_{ ych)!_SiEkXpTi7BiIzKe4jnoWz{0Lzz`^*_-8<>k%(oSwWb5hb=d#Wzp$PzD&s#14 diff --git a/data/images/game/states/protection_zone_block.png b/data/images/game/states/protection_zone_block.png index 47bcade8ade2bff2af7a053b592ac55678506c67..75b898883bab699cc7376214b7eeea8481a03c42 100644 GIT binary patch literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>3?#4ne^UZd3dtTpz6=aiY77hwEes65fI8> zWni#oV>`ygq$Me-E+S&i!J#H3q#-D{dZDwCqKu=6P_v}C5g%Wis7NIjr>?k&rK0SK z4e{I7B)iDU>d4DGXlh!@i?@eq&hOCh_A=L#lQUA4p4YB!A}!YFuerWF+*nq+w_06G zN@_x#maeD>&>1c7gVcepVk`;r3ubV5b|VeMN%D4gVd!9$^#F1>3p^r=f%FM5PX6^A z=tc(i5>H=O_7}`j{FbsBk`Y!wA;$b7zYxari^^vKIRTz7jv*Y^Wsik2H7JO%Ui|&$ z9TW5J@B8fz{+!8tX~88r1o7tKr zmRCj|ZToAn{&!{nU*=3NmeaOMGRuKxtCqM%l%ynQaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1lA?!^yU(ueZ-h(p!o9_SGvDVZK|pZawPCRjkE0ckWy{9)>?xB2NTqZgXS_Q|7o3 zCY>9qesYdyO>vQ&sEDeZ)Xh^Th52|Jbs09t7_A9XGnL@Fn8m-$ncvmIczUV%+sBV) zmgF2=JYR^NafTW5ofAhNhU#n$RH)5Jn&}~{B_)|co?7GyDP@Qn4``x*MYw(A-+I|eUdfbh6;04 znInEOPa-TnzkcPVB%mxIVI;xJ&&k$e!g2M&c||_<-i)YPU552`EE)oAd;KI2uU@g( znq`fTRFy8r%_!aan4nwXhR?2F*&VL^;>nYFZsLIo?5`g_5D?%QulVlciP+kWlQg^ zuQ~hf+&OkBiR6}L8FuseFG?}2`gHQd!FgfTTjhjgKlY38-&m?GyYFey>gAUzOm0=H zD;!vL?pUVHh{%yPU+K=X{Bq;g^-P^_^y9yud>L&# zpK+7p8lKASu_g7pOKm>P`V!fuIB|C3?L*D(#`8BZt^3vfNwQDmw%VD?49xno8}eV* z)$jALIQNG`hdWyI!0x`!)oCU#O=dQPYDBzP{^VR6_j=Felerw03%v*rm$|u=sr)A2 zny9sA0gqxie{YsxS}Yjhd_AFCM=UaiWr0g}T#2fX*zPr9vss?TPf_t)6*7;-al!Lh iia+KHEWFlGawwj$$I(jQ_J#GJwCd^V=d#Wzp$Pyi1XDNw diff --git a/data/images/game/states/slowed.png b/data/images/game/states/slowed.png index b1ab2405779b6b72a6891513482858dc5b443b3a..3aa69036b38c73abb86783adece7d4b7f6ff29a5 100644 GIT binary patch delta 373 zcmV-*0gC?g1hxYqiBL{Q4GJ0x0000DNk~Le00009000092nGNE0N{}Z5RoBFe+h6% zS#tmY4#WTe4#WYKD-Ig~00AFKL_t(2Qyq`ZO2bePg->qMCM6`XrPUJAg`1`#NI}t! zqA%bZ_zJFk1RubaxEBOn`v9<#6fUqlnTrmGmZU{;nsT%P|`m9qA4D`UA&nl#^VsK=R#Bqf0kvzVI9aA`$>Y0;Sfm_!7y}4Ifb^_@2itA#OY*$ z^)!VBKnj6p$H4{RZz_sy4$np-gdEsqxky7P__G<#;~1{4LjRLG|OaRRzr5CByMItCZ?@LR?8(=wK*xP(>WcMBa{3F@vxRdp?-F4#=VED+3?#4ne^UZd3dtTpz6=aiY77hwEes65fIZq;~Rj`ozJX7Igr`+WXan%K4Dwawo6GgRjv@|RYh7ML)4pv|k34wv?BUbo=j@wU zSXwPwTwRVjEP5m~i644UBb-%t8!JtxV0Wj7_u+46FQaFeV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fHRz`)E9 z;1l8sRM4a#&XCOD&d7hceNIGQyV_+QW>cSQr^jvM{V;i4Ye& zG&5s;a&U`-euax_kt~A+ClkXIra8$b>nk1Ng_v4>)O@ui6tx*IZY|k6F=Bqa-vVcj zbxonAdTi3ljG;n|i5k+?w)!?wybQSvvqBuEIUB5u@HFCP{P$Yz#N4P9MOJquff7gM zrG*X*UJO}!V#@4{P8eAus z7^Nx6u#bhInc0MgeRZ~#2M=p+fa8+1h#9eFDtxT-to6liGen87B#SYfT9RBV!`7fL z%}~$0r9FOTvia`b5G!6LhCqg+Q=-x>tpqEhzq&}Zm*T(Y zifgOf6D0(X%_(pa<@*0sFH?&(NLBjK%pe_JW+iUcZbySmaV7>Q28Njo2d1YP2(Sf7 zv$#nyS38;I|bOL&ai6hCXkNg$X{3!W?I~8$>IxL}@Cz32@DJ zF_62<5F^UCB+cwtf55e^#UZ-V^`2_~|NjR@)+nHE2%Pfy_yCxv7)pZtf`K7ChyVlK z-C}9w)C~*^IZqeI5RKsE7s(FH4vgD*%*^8*9dnDTk8Rmv@-J)wm+-sEz}MRr zF#Mk(VYVQ^Ho7imT}Tk% z|I8>#>fZd>(W%Hy=wV=)&)YqEK4DDD5*B_jICn23Sx?-~Zo0=&7sU+${OMWiH*U-h z^hi`R?^pNGm|}c>L-*2C5o<0)ui6r9zCY#EX>C@A*vQ9BG38o6#*zoYoaO7Z+n(OT7 TyxRC3C>?sb`njxgN@xNA22mn8 diff --git a/data/images/healthmana/hitpoints_bar_filled.png b/data/images/healthmana/hitpoints_bar_filled.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf693c96e4b444a77b86ec9ac8c5acac85e9eb6 GIT binary patch literal 2275 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 literal 0 HcmV?d00001 diff --git a/data/images/healthmana/hitpoints_symbol.png b/data/images/healthmana/hitpoints_symbol.png new file mode 100644 index 0000000000000000000000000000000000000000..70dda7e452f03516b45a3e356c6aa91584e1314b GIT binary patch literal 376 zcmV-;0f+vHP)jnB)Mukel zNVaIEf7)#^X;69Kz~$a^?t!C;2mo8QEeo+2qpcP<-Ww;ESK3a(mZhPs%ihV$9w*!OY`;3?-)5F694bMv9 zG@EF>mbRCZvNszeX_~>8Z*+iKz0Tp&BgINJXbGTHt!YP%I(JGzINax*QXD)!P^?rn z;3uJn?bTJu&(E_MjdJ_)!twn*rE*#83q<4(v+1;)=5n&RvLe54{~APu{dipd+kXL# W@v`#bdJxY500009fPnqPC~+;i`_zxj%p93i8NSMK{$LnUG_07$0h z52J{H_jrH!oK^*&?m8LCp@V+ko83m4VxgQ<8juP@qqO!ubLsM3Z_k~b z;O$bI{k;k!BbA)afMtggnymmE1R>+KF{;&KPUSzSTviS`AF=I&ZAQ))DHP7+RQ`jS z%>a=W*1I}!yv_LdBw%wg15}c4St52wssz2}qUG^&cV zmMDr45u9@vV~(aXk#s#9jVf`HV2mM(Vv24MNu0wN1;8Z^ zHJV0M#e0W{;++E#;y9*QD1v}<4r?u87$PEg=Mn8iV@-P3@x1>YeebH;t9eLVl6n&( z;6N1OI6+m@VO@rbN{J3A)9~%A1t;FXI9QFV}a9BLDyZ07*qo IM6N<$f+bfY!2kdN literal 0 HcmV?d00001 diff --git a/data/images/healthmana/mana_symbol.png b/data/images/healthmana/mana_symbol.png new file mode 100644 index 0000000000000000000000000000000000000000..03a39347cd0c70b0e615ab4e49c2f0309fe4d932 GIT binary patch literal 375 zcmV--0f_#IP)s z7K|kMD&BdH)ksM0x;Llmx;vt(G?Gk=su4e`4ys_SfC^R>BL=q-&2>yS{$LytA4Xz;d{Nq{+X(4&MvKKc0dT$gKA0m~o5u+SyFLZatMc%;O}>y7 zNPkY4QYkNfUklMloLDqKG}=TcROP+C&Sowv-`{j9l{1ZmyNI_B5(t9h+;e+ZV0mTo z2Mpi_17SKlMraOsT;CjUahYRvZT43fzzv6cczS;0r3ryv{!D-0n5ruO?FX#X Vj%(_MjQs!r002ovPDHLkV1oH*p&kGL literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_axe.png b/data/images/icons/icon_axe.png new file mode 100644 index 0000000000000000000000000000000000000000..cc010aab5fa3d5a81c42afc71174e6a11b43c0bf GIT binary patch literal 2069 zcmcIleQeZZ81DvyF}}u!ZaC*kN8Cu(>&JEXQFe@RcWyVi?HK3SK*M_Ndt2RITiR~B zP0SW#d`WI60}))npiFTT3Qo zd9#%M{P!=%XBD0(xG`bXm{XmvIM+-{cy-`b$AJCGb8+tl`a9MxUVF3RK>asuT|b?@ zloH$#-%_$;PyK;9Bspv4=cxmOi7ox!?(59yJI!>)-r_NtRo!V|_WGo+d-^)ZQDeV+ zXV;6#Q(HPqF6SnfF6eyyPMR-C{R=5Rb9+_tik3^7BV&{O_#|~j+@kasYFn1IPx-cT z(0_J6sO-D`bitf0j!6GyFA0!U{wqNM3$K;rLphqXAGY zN)BwWy9Yx>!GSH!^^#u232MZmCKW7cD)IA8wY*)x^5>&@5f&1JfzF|ka7fbFhyxqq zW#QU*Okn5`M6Y#V!v(GI`cS8=0yNiT!Fh_Yp;o(zvM{9Cl7rGDWhY1*L78!qVo3{| zYel062BWD$kS%jP6O9G$99WI6D=a}YG&GnR%qCf_CSbEb4w|5893pV7QPQ~xE@_z~ z3@)JYs;KCqETIM?7m(|82L_c6rw~?Rw2~IJ2^vO3IEA20q><7H(Cd9PG#rkhHQikg zqeS&SkXZ9KDu5^hnp~&yz+Dd{J#!?Oz{mC~b!uoRQ-LQy2!tU_gTkm-D5XZ$Wvxbj zNFK4*v1}C9sRB-yRlh8UMhfK{VL@q_HJZItlmxj!n`fJMN~WWbEmW`@H#I>_J* zBaob64^sAA8bbx14a#bmgMA`~xoSWtQZfJGmR4{&dEI)`Z+Y5*jCMDd4VnjF*{I29CBL#O|< zxrm2}*SPveOCMd~|3~RjTlpGJss?ay5}1(;VT_pJq7eVC*U-EB#?c5I&NyQk8?Nvs zHlBe5sZ}_98)wD4;ov^xaTWMex7TfG_SNOtJ3pP`HlGVX%#;v*T1&9 zwQ6p~OOI*D1hH>yN?*d%t>>hiIkVT#|D8N_)y&U{t2%h$M&#YA%Ehb4tjG!9`}@Z` z%g?rc{3(-pPq~y+b2;U^WeGiNvUh49qTY0O8^5+=?>4IY@U^FG$VO~mm*eif65BwY zcRBrL<9lQ0~o1DhZJ%uM$dj+I>hvu-)_4Rq$ofJqI?GZn|H7yyp9+mOEWH zGlTn*8%p*atvOze7-p=woYmW(+R)=|>!Ytes;6>}6{k#J-IfieHKu*r-rYQseCgVu zgYO!~H#C>rvKSW6YyRL-wl7V2f)s!KaIIlg!%fwhv)$1#R#}y_Xv*7F4J&r1|4`BI z@A?!}boafMpSyF^hdZvD&*g01Qk-$)yVA_g{*={ZPS`f(+_JMLzI<5!*g2u+J`fKU zrp}w~%&f?d9X8f4&3bdsZ-KAmm(%;%IzQiLlUtL6V&0!?1w8?CpjZ!AkL740WX~spNj$eJLDsLsd+q-xEHL8XH!MC1gmsK#xAh7mDVCP<@6PiY9~^}ZMyi6qdfR!{?@ z#PvRtSoPP+fG7j1RIPBJpazKA^r2upm)I*;E8&4md5!>K5P>ii3L_JtrH0HWEzBeVIT0U#tsiG@j|e6I8d*b@rbI%iX8B`ofs5l6a=0j?GDaH27)*Z zSSX371Gt0c&3FJ%z((0EtR-j}&;|FqC9YbxPv1Y-w!Fkaj)X&u6<91b%3{M=o(kd| zMRRz7ci3; zuqM6=3+O=8F)XL|x)bB{A_E?aKNgb&Uk9geq{;a(lcamur=S_02x_t3^#*ck9r?+M{PMy|z>dcv<38x<< ze~j*WXG|n=(P~{dxqHi~Q)jZ<4o$n=5z31F9@^!8vYmXrtGM?39&$lb?s;%>Y3bdz zyX!7BCe`+8eJj8DeEhXz8RDI^PPye+Bqgu^{cY#0Z*=`KG4{pJ$OgkFE#du_nTYwQ y=fvY(>9MIj>l<<(C+}|T&Yj$G_I#mhVba{3hRwG$gss>AXgmca?w0wh-}@Uj8@!DG literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_controls.png b/data/images/icons/icon_controls.png new file mode 100644 index 0000000000000000000000000000000000000000..5739514224cf0f9b2f635a74df7634657762accc GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp@K+MU(1|(lrEz1H@#hxyXAr-fhQx5R`Q{E_fQB`td z=8T)c$3FZy>dgiOZEf>fC0<2ri2Mu`XlwV6GkU<}!;`|`R${+G>!d+PH^(8-JvE=_ zJ^Z#;U873k;@=I=FIcwSFz}!A2dGoPe&O#%0r|uJ?tZbyP9J}zzCt3-j$!!>`)tF# S3af$EGkCiCxvXW<>!NL@o_US|YTmZJ`wA1~{)U z=hU&Q;_v|ocYq?g>jP2Ip*WNs+^+KUv0V>L27+F23JTnm*YqCuIJf7d`6v1Q-}n6< z`JH4eU$$hT<6j&B0GJpUKm_yW>HGoN+wuPa>8z1IIp_ky4FE9yb<1G|?8$x;0Boz- z&@f||Vku5>8V{1@q8X1wjgChHfRAsYj-+B4BN)x7S*;A}DzAV*mX<-Q#R`E!=g-8j z0ZDo$BxzYFl@v=!X~=g0=#z-^1RBOjf{B_qtpQJzK|{PazqZ^)AaDp`jFmx)EP`N| zVmau~=^0S!A%rP`KnO~t9;6qINyO-UP$UqchyX=IC@k>8#hy4S0Y`oiFQ=zfcrdYe zM2x?ZK`}<74o47^$>d=|JvhA@5lW>}L?A*$BA7?O2D8>kCc;{S>nH=k7$`lfGqRi( zv@nvdR~}!hYq<=DDXh7!ANQ;CXkRpe9Rs!OXHqWnxPm^6)YBrJYkgt zBViI1)3A^cVM0c}5MvZ2kb07%Y(aXKf6>Ue=UFYTXr9r_OQ;eEPywtGP&CX$54rM^z$7MCp%O1I zl~fgN>E@vZ!2?(WUpn*1`w_ydA6dn*;80KCBxUJ!8AMr%%+S!tZT2Pk_*2Rw`%N(n zPx?E>A67STDx-*Z+3HHa`M~^q?Dsd3R3rCaizhzWH%Q?``1<%$bOg zntk?#0~vP8vVo=F9^F~zu`Le^GPWzfJ9GvM>S(VxJWUo%K0Q@(G%M@A9eK`8SyfXx zZr3kO?@c;n=kl%gNo5@UMu5z&GvJ z)?WFb?4J1opyPVBS!K?2{&`?so-?Xa&mI)NCXEba`3MRIfW8#aZYD=Jyit)^RB?bAXJxCM1wlF!=w$Xr=@@@CEa z_HjXkdreW_jgxyP&(n74#ExmkGS-g9ktQ{QC97ZBwU)ORFPJ6kMuM_Lt-zznaHh@$dW; zcK4pye-F!EOKjhGL3#d`;o-jv_n=X+1KzHcvh^-oLYxkk-U?XxO4#nlQH^`cO%*Q5 zB}Y3ek4cK=DrRS1oY3F!iKpoJq}2@YpjMXs@Tq!(dtqC%Vs@b*Hwm)YnA-lYkh`xt zI8+DLJ=yh|mEDe*ZN~zMaqW%^?`fQJJHN`Qm)oKXr^uGQa-?DH468LaBl5Pe>w}K$ zI;rsPv#;?v=dOg-t(kMb9B9f-Ls7JXZmk6lwW-IatWN*(?epaeFJ62<344%qwydbg z#X6m7UHP_Qr_kCdi12NSJ8|bUGWf$c-(1ls3nI7FZm3e z%JX~pHckTONS<}eoj$6~YFtumZmiEwQRG-Zd38$M)j4y+aJA(VFHpXWDDhLK{TGls B_0#|W literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_distance.png b/data/images/icons/icon_distance.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac8bd641a6f8aae20e04b6b112fc38f9116edc2 GIT binary patch literal 2112 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 literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_graphics.png b/data/images/icons/icon_graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..6cd93ae9a73e72c848d9da9de3337d48adafa4db GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp@K+Mg-1|*kkVowB8p`I>|Ar-fhQxtgrq$dD@l56u$ z3;j&98Qq`%wcj-HFnRL)x$xSD_RP$O|4*18Fh@$_qG^hgUUa#~g8)yN8r>mdKI;Vst02_!gOaK4? literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_health.png b/data/images/icons/icon_health.png new file mode 100644 index 0000000000000000000000000000000000000000..70dda7e452f03516b45a3e356c6aa91584e1314b GIT binary patch literal 376 zcmV-;0f+vHP)jnB)Mukel zNVaIEf7)#^X;69Kz~$a^?t!C;2mo8QEeo+2qpcP<-Ww;ESK3a(mZhPs%ihV$9w*!OY`;3?-)5F694bMv9 zG@EF>mbRCZvNszeX_~>8Z*+iKz0Tp&BgINJXbGTHt!YP%I(JGzINax*QXD)!P^?rn z;3uJn?bTJu&(E_MjdJ_)!twn*rE*#83q<4(v+1;)=5n&RvLe54{~APu{dipd+kXL# W@v`#bdJxY50000qB6axq@8=S6^Wyp!$t`=;`#8P;HdcLRsa9Xzzn5%Ku(Lc~8@g5EoVBeovs_X9{J3PGV-N5Y&B%RWcJNV0LYG6i&^i&v cpj*rgwn0TskDZFQ1O3b3>FVdQ&MBb@04*wT)c^nh literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_interface.png b/data/images/icons/icon_interface.png new file mode 100644 index 0000000000000000000000000000000000000000..58fafef7b702fc191a1ff7322a0fdf086649cbfa GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp@K+MI#1|;*}T{!}z;yqm)Ln>~~op_PA!GObs|FPQ! zZsSedYc7PoYG1jnYvaq`d+t1Kb+A}Dqn*RSbo0yBRY`}LtQn>R2?*{_P21dL8N{w<+W2cDX&;R9O5;OXk;vd$@?2>>x; BIG_Lk literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_magic.png b/data/images/icons/icon_magic.png new file mode 100644 index 0000000000000000000000000000000000000000..b74f53d676da651ab1bdc515a14a4d8696c9a7e6 GIT binary patch literal 2031 zcmcIleQeZZ81F=2j1N!w*!ar2f-nrde%xm($2jih?iTKLY$t3euwMJ#t?sTZZMVBE zm@UY+z%tAf4Frh-86QjdLkUbBpdb-k1SHFd1_FQhhY3@W7)8OiyW2?&;QsNFwr|_t z^Lu~K?|J&%mQb*4eBQJ?1VP68ecnoV9b+81qu}{Q`zRBFH-%h-vPcFAA;?50sCXRogus6m8D?rss0!DC+5p z@9%xh^h|4K@S4q3v8eN%d(%UC>I0swdsobYYU zK={HTP;>eA9QW+D(eLi)wVWv2w55FF)k{nB&ku~Kr3&MYnJ1QgbmY^!E%#l|_T2%} z-m=_9^IiEh?$kbW%gY5XzV&0|OJ(YW0j@bLbUT#eIb)BPe!ODCFH;swXhBY$tN80q zRmpk7PsLZGA;{Q?#*u@(x4QsAMxGbL)p~Vc3Cqg~GiUf~P9+qGMvw(1DTU+ffsRH% zOq5*MKz9#@ih>JUZVQkB#RKX@U$Y9TnuB4!xt?bPtYjg&AjLw01kgD&m556kn{r`; zyewQBj|mJNgy{7yEM3s*KnV57DnM;!JI+&9C+c9#l-){N?DJ8Yq!@y95|jleDVDUe zHV2ydVQ@E9h_aR5moj_7I~P``>k3N{$z;-;w3uZzM!;r)95g}GI7HxDlcaMgT+(I@ zF?fN-tD>TdvV3z@u5P6hFDMGBbl}2hlD6O!h11S3 zwb^mf!jfbf8i0Kua5^_Uuq=qtrr|&X0oE^RIw$eK?{#5Nlvxx7mUId{<%|e8 z1vm#DVXOk~jMDIAp-9HYFg$Is4eEmNUYTz&>@(uiZ7aw;GBUao&Ss6THciM4| z1Z0#Wd6JHB7%K2=R8|ul>=QA;#Q>p5F%11jjYp2lYCsmC=N6-zAv?^%Cu*>CO_}eb z3arVj;vzcObS%dkz3#$zqsTzOGLOYaxHmkVY1(8RfTT|-ej299Q9a42z#W55|7UX% zj}xzPjZc<7yu$yF(lfU5b(|CfaBvcskqlvsm~>Hyf7fg9-9zJO2o7hQvCIxvc#|E^ zK!VgN9KQWUCt`4LZ}ofK;ew8awqxVZkfzd-&Cf6SdYrzG;>N7MIORy~vY(0%@W}D0 z*!BxL(XqXKcm3^P^U2>TT9Mz2Zf^4R=hWQt6+LL3M9&lcG#xv4Y2D;q2RAgWIC*2$ zo|CTLX%)$pZ56Y{s=nT9d8-!H&lv4*UcK;>&u(=ceEY*gFSw7cslIjpOy8CL`H6eq Y=LIKsEuKT>`;7k+e`(O$wYYZO-`roW?f?J) literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_misc.png b/data/images/icons/icon_misc.png new file mode 100644 index 0000000000000000000000000000000000000000..a7b6060eed87c6343fcbe09bfe2507273e8fc4bd GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?mJY5_^DsCmGII#YgMN$F?A`*o3&5ApHAg3Fo8t)1C`pl#jE*8$8-YK^>a zY)a&u<)$h9tG+S&!Id9>u0~H$NLNw3d+;g~L-zr*$HLz;_X6F>;OXk;vd$@?2>>Nb BODX^W literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_options.png b/data/images/icons/icon_options.png new file mode 100644 index 0000000000000000000000000000000000000000..68a72521ddda76ef1ee7a07d37c32d358f479a0c GIT binary patch literal 246 zcmV306X@Eu2nd-Gy4!%wXrvR-dl8NhB=zeLU{*R z_X9J`tos3gRx+}fIr+NCJ@d3|0OHIvRY_gs-mVDO>%6b~!L)2>C26WMv1&t&_D&+S(6x$Gk6-@Y7Z>ANHYS)L9RL6T07*qoM6N<$f_7(TSO5S3 literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_players.png b/data/images/icons/icon_players.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac634418853dae19a7b53051a662e68b5cb567c GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^+(697!3HFMCO(@Aq*6Uy978H@ZJiLv*I>ZmeEQMB zk5A6?2MW&YlsAiHYb|-p!ckCG@#R$ovkGVIhLHO|1dm4LZLO*Nc6QRI2?{g6+~ZyS ziBnm~?4g{Zd*l}hx#OE1!nS=1UG?VzdrefF+CnRB`&%~{`25#bcB=Px04-$jboFyt I=akR{0F#nCga7~l literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_seasonalevent.png b/data/images/icons/icon_seasonalevent.png new file mode 100644 index 0000000000000000000000000000000000000000..b2eca769e06090b512a242a72943b095f83e3043 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1|(OmDOUqh37#&FAr-f#20HQ`P~c#Gy!waz z->~vXbCugho;|uunpZt%F&*$d*TJ!$!&5nPrsu<|tbZFn^y>2;`YR?EJHLea!J_MD zo?S0GwKDVD+U(%@HosIvLp-}n_uswo@n(752ZkSJmz4{h7taUU#o+1c=d#Wzp$P!s C4m$_{ literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_shielding.png b/data/images/icons/icon_shielding.png new file mode 100644 index 0000000000000000000000000000000000000000..eaec8fedc7b5e2da4be4447c3ac8b9a62d087880 GIT binary patch literal 2013 zcmcIleQXnD7{4;XF+S`>VG7I6o8iN7y{}%cJt#2RxpkpiH!5r>f$QDd^;~;*+}+l0 zqAQ4e2w`rz2qHmZgiLTsj1n?+5F9RIP*Efp&4`KehY5=UCQ20FTf0gO;QsNFyS{h# zdw0C)>fRyGtTVRPBj@*SuHAg4{!q(ToxPV% zUzicyH7;Gf>y4H}&4_)@x{r&7hV#?sgMF8sr>?itB?qeVO4s(y1P^U3_@e)8&jjkO z&tBX2r2U?BPxZH~y=Fu9e3~Ed4@SwvSnMgMlEErdg*AdF9n21Q|alhwIJy;4)rR6Ar=h*O5wS5RD)U7pF8qYyu`4 z0gbZa#fJO(F;tek*h)4?1~ngu$(3z7Sl(707TcOckAy8=gf2|+kRSm}0Zk?1iovJ6 z*a$BV*VbbKLq{NHlNZYrv_2R@eX0&n*5SfM%IQWqkAreKNyarFrAf*|kZyuvaFXIl z7teBN_P}5?U5fH`{ztR1;GGwXnWn}QL^7FlBpHXQHxjT}AO}s*G!7BC(W;n23RjHM zQ3gLSL|xWQSyfPrQHZF`rWb=sGbtpr9IawxZGwgoDM2GB2Wh1=3JeDC3{50*Xu~XT zfl;!0Z%J%~TQxw`0Yh!pMNr-X6ti?Rm?Y-*YR!6lBvVNwKpZ3>%z(nETqrH3nyL{~ zZ<9yvbuJr?_vt_|RXwb#@zFwsMp;lAW{u8WDJzniH0D`~vKxS3Fo74NNt(ea3a8y+ zisNa9rzxCdc#_OOgRl=I!4$>@RwX&wIu>X!$Oja|6ciBz{9X)-a>%m8J3X8eIGqyC z(F~LXoDA+}0gJobOoXG|G!= z*2&>+Mr3i8VOf$9IcJp0vDN4@{Bnf&&8(Ix2{LlP6ZO!X3#UCIgNwk);%+As!K0ju z6{!dvWkolJN+KUs^@ITXL{12efY6ji4E;xqPmQa3P?ezPjMdGM9cED}8?bb(+3#aH zSeISJWpt$JctNy!-HVApUp+w zPP`$s+*$hA3jaS!&)O=+1f>zc!AW3NGK4i^GDRW&U9XXMH;toFIGl0TGB;e|O>R5` z1ybv9_+D#$hl7JV74VmZi@FE4A1T}zvipaUvAmPl$9L9lVC&PXcXf5TckZ58T-h@3 zU}53?hi#>Kwj&GPJ@L`^!LC8i_TpntJ@U-{MMq!yu`s=LLvKmzPz^Hco42>x(!C|W zf1pen+VR`fj?TV=Kh-4)2J(_M#tYN;?C$+M5Iw-&7&jYrU)po2IBETR1j?)Zy-U|_ F{2K>kq96bO literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_sound.png b/data/images/icons/icon_sound.png new file mode 100644 index 0000000000000000000000000000000000000000..96943c9e194c7efbc6418120e735b36431038357 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?OJY5_^DsJ^o+{oK(AmIAnU9M9r zlIfx`hp>vM_XXj!1q+-?u6P8l@;FnFnN++_qV;vo{_6DlV3!Z;J=`W(GmE_y`Sx4u z{_Hhpn-~gqmi}Jy`Y$6x#xq_91D$LJ(>Z(QwV7I6d-`4__TPc#`?h_hn(dAnGu#zZ zt3KA*Hs9mdKI;Vst0Ji8|t^fc4 literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_streamers.png b/data/images/icons/icon_streamers.png new file mode 100644 index 0000000000000000000000000000000000000000..d42cea003e77e29e8dbe964dbd1c19b8320200f0 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^+(69E!3HGnpIVf^4FQ0R# z{L`+ASsBea3IkYWF5-32iy)TMd8SFJ!j6y1vHrckRQMQ#ebX h+KMjztUUb$%fDF)OegP!xdV-5@O1TaS?83{1OOlQE-C;3 literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_sword.png b/data/images/icons/icon_sword.png new file mode 100644 index 0000000000000000000000000000000000000000..3e80cee09e5a0795c811bae56c065c2b3bf2fbea GIT binary patch literal 2103 zcmcIleM}Q)7(YZ2Pyuxrs3V-G8EClPUB7!$v9=7#Y(=ODOe5F37g}lWO7EbBXkapR zPU2@6evUb(hB^IbamL|-#t)2NVNAy~+aP8OCd*`wu_b=Yy+=!D7IplyCU^JV-S7Q9 zzvuTn_jGfCJ$Fj{%yW zKMz4NcC>8k%s*f7%BId)ITsHW$KLJtr7tV++&b56ed|56q@=&zT;?t&P6e-ei7f@`NpYzaQu`ymlk%khAx|#$_9aN{-cjz2n5d)!WGx zyT>)!cOR}jR)Zv^S6@i!8;ou2wRPNAUwYJ_OgoYvJ*T{57MT5Re0OJ0dki)H+J|jx zk`f!+?RPXuOBc1bKAKe!?|+KqUm0GTw7T)OXiRH1oSp1n9knENRaIlz&V-w#gO018 zfYP4(ubbv>o49A|4b|ziO`G$l-}-7<^5wzkaw^TEOFdnD^3yMe8~!p*?HvMqTW;*4 zOk;AXDR@xPusmhKuAiM8qK+axT`edjm`?Bn( zFRxTYkV(_!BMRBOKLtT1Ty{H3q!QZ_niaeXM)p?`^!gwgL9()gK8CFV66yq%Zr+Fu zc64H>n=@i7G&a)aGXs}9uig)e>g^7;zKS()SoT6RD@a2EFOV2C==Ja-9W-Jiyfj?P zj|mJNfk;(GEL6}ETLEeo`~cM`v^Yzt^{CFEptNdIrOiZ@BxN8-Jwd5(lA=j1tNpcJH>(kReodpXqWji5y-rxr#D z>wPY<=&17nq7aBejh_WMwSbrAj0WS_$X;KK-!qaa#}dE;ybvZrVN@iP&m~BL=n`I# zN91)R8y{`<14a`34ngpY7OG&B1y#bV(To*to)ZG%JXukA1F$d>Fk(tlslq7=SLz*< zj#jE@4TX~`nj}L|8|(v)k(jZ81ZY5PZZ-c07?T`eJD%Fw$$&2Uk>AWmQ_~8K}J%ouFz<;DqN)`^|%vi!3}`X z;yOL0(~+!B!)o*x%CU5X;P*1HPuyOn5)eMV5<~w{V-`Gu-zIR-bCul9kR8U&bBnNa zb>Z)$2vmnx9ydDDbTq@ty>7%I z!kfr=20Wzp!{OWdbZ8eG+&xx{$&u2sZaeknxN78L!$7LObo-Cro|d+Decyk?6#I5r zUK6{o&2*=1d}q_XrYmvl8quk<7wk{Gn;66M3D+-)NmzINuNxGV1dHMWR zyB;RGPNkI|UufzvHKE-ub@8EUqPJ#S^m*pvHN(Xp3|Obx58sd(s!z1_m=* zW7y^i{WqUvZCJUt^?KY2UEsol^%*lCBgh}$*t3CZ#+ufnSzT#o?CEo@&L{8ZMX9$W wpV^}s9wKh+AB-+K+Bbiwd*3guZQ1o*2|ut*^G8*-BKd#Gnq#+|SX{pTZ@OyHBme*a literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_viewers.png b/data/images/icons/icon_viewers.png new file mode 100644 index 0000000000000000000000000000000000000000..94f30b6f4f12a670b91076d465631ee44d9a7a9c GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^+(69E!3HGnOpXCsHVr@Ueck>EH jYtzd6ai2EZFv}(0uy`@?!r~u5gBd(s{an^LB{Ts5*ZeRR literal 0 HcmV?d00001 diff --git a/data/images/icons/icon_youtube.png b/data/images/icons/icon_youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..91a6cacbb7a258d4b0d85bec4b61ca72a196f0e0 GIT binary patch literal 934 zcmV;X16lluP)`jS+W>NC}1Ye=XB5o=?Sswuiq5TTo*8&?XVJ4GnCh=Ph1Hx=okix!HD zxN#$Bg+`hbL{M98rL?+H)HHs8B~{ZjO{i(|{x1AqJY3#0_l7*%fx~>j!v(mYC0m$Na_c= zfU`NhHefptz(_$1lhNw4SZ zevx#uq*@|-&?AGIq(@Dk_dABoA2k1o`Pb5%BWWz5_gHt6q^U$+m-KkWRcR@hkBHsC zZNNJPBj?)WC@cUUn|;C&dlYB~Ub6f-;55+VJlHBY4ZLUiN#h})1`Gqc991t=N}l)M zBH}6Mj^j(Hcjovb#!n|lYOBNe60jc_$>pS0z>C1!rf-zg1>A4`5b%NNyDI#DkR{(u z3BTU-UlAeTy!o42HHnB=bZ*O_2COx`2wX7TQEG7{t(Pk|D z1~ysaczugEYA#olGI#@cH+?WuAn&wG8UkK+1t>d#434>q9gm3mfAnNms=J zoXG-y96gbO^Y!iQbnG$ePAeEx&l?cI_=+5Dz4> z?UKH;-9<_Jy}L+yUedf9$Y&%Sw*7UI9x?s3bvGn_My)>~X{V$+Opi)>Q_>|#XC)2V zwoB6cZcG;?eI}_tu9jaGlG+;CxZPiHsb99Ag0}HbVU0S#-|US-kTy#BjQ{`u07*qo IM6N<$f~#?|CjbBd literal 0 HcmV?d00001 diff --git a/data/images/icons/icons-skills.png b/data/images/icons/icons-skills.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f01ca58d440013ea85da02fdb14418e8cf45dc GIT binary patch literal 1293 zcmV+o1@iidP)aeA000EkNklD=SNUzRS|mazwJS zvLrUHJi1TyC-UgL_3xC5^4PVP0az>+u~;n9)YJrk&1N&S!#~zivT?Zplx$os4K=BH z?0l!0l8wt{d^|{DVLmLLI-Y<{VzE~cWom=2p? z%G2uv;Kt(%ru~P$B#{*s7K+<_fXT_<7xihHCWjBV0g#iEjl)rGh=)QCbq6Rf&X?%% zJDRWHJ~N8@%qTmWudt@_tln3!d5fOwYU|=?kB@@QTO>NZ%wn-fe}BILT4Q6Qp)L8K z*8uITcOHQAoo1Z-XE@(!W@IEl(fT~>sV`9Qre^0%%A)~hSd+=HCR0&ej6HKF(I688 zY{uvF5e(jo3t0gQg&s0C7D%`mCqBt%`uR&VO*4R;o}L0==>DI~1h46F1?}FQTPDxJ zeat=ngQGn@Jr0lrFf=q|fOh)yX?>E)%1VaE{xT_m&iykB5BuPTehugqxXp7Fd+H1P z^C>LFDyoa256aW)Bp$@V!a`|kI)K;fB@ziUIXSr~Cu2o2zy5F;*v{BkfJh`9cdeY9 zY(_%haOAxbbhIgG1)I0X(H@^3Z`$S1<4FKMpU*I`v9S@e*^Jd{UD85h4_-1gJ7*g0 zY7hYbdw6-(>LVTfF;z6(b`7E?xTWe*xYI1mk`R6hMzZ%=GghnVDL`4T)#2wk{q` z+{bfpA0K{N!}agIxZ1i5_ersX%x1F=RG9*(j&(y#DgdfI>z(JM!#K~>?3`(B+A8VG z&H2Ci{;Y&;=A?`Jk@&J8657%xZDG+8P@ zfJYPex&FPEdv|V`)RF#WZ~#D$>(a*Qbc)mIl&xF0N^ftkE^ne`Oti%L?PjJ#OPyo& zRl2lMp0RqR+%7GZ6M1=ZyR=l=t%EY&{Y=WzYDLMKvb0)hw+{XnE6S6Z?l0uHvq}b< zw@X=3-Xck%a^m&9PENGU`R2j{`S$1M^4?cB4e};d(!`TFCXt1ol*M9^*j<>Im`J!| zp<8c@s!o98yFU^oW1_96`xJfIIaEIkF*Q49Qa_OL^g6L;?gYRexv2k{AD`PJHRl#S zBbE8<=nqaVsx&205>?<*b7EzZ`^+dEpBM2ul?w0=4Ah%wTf9_P00000NkvXXu0mjf DixhPH literal 0 HcmV?d00001 diff --git a/data/images/icons/show_gui_help_grey.png b/data/images/icons/show_gui_help_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6dd99dbf532a27d9fea49e11578e4cca097111 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a)4Y)==*kcwM-CmrNHpuodCd6n_U z4`Du&R-TD^w_4Xxq|@L3k>ivE?PIEu{@J>s3>EeE$B#v2S1Bk>VN;d#oEkLGIcW2& zCE*LxLtYk6nss9Xe|6anHG3Y054S&ebr>-0+rQNMrE7s^;r+i-;@Ql;n{`%qMFOp5 N@O1TaS?83{1OWL`J4*ln literal 0 HcmV?d00001 diff --git a/data/images/inventory/button-expert-small-disabled.png b/data/images/inventory/button-expert-small-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..913f628bb4823cdd8db0b5aa64b58bc08aca8f65 GIT binary patch literal 341 zcmV-b0jmCqP)m z%}&EW5QAqtlijr98mS2SlJK4&c!#D3kRX86Bs)JGf&iZ^`IBt(-Tgh7i6}DLx)PD9 zW~QiyyNHbAr~*7ZKB%a>mr}pJJ^{Fgs$`OgjN?fof{7#ZbUM*L4Z{FnUS@Mw03s3* zTXr}cGKrbibGn-jtZV&_e{f>dI6bRf+L^Lz4wNmQ_oyT!AH#fJL5sZ1B zRaN`GH?u7}9*hsgn`FsYz n%p%gv1bBUU*-AgAiHN=dX{oNX?R%Bj00000NkvXXu0mjflZBb2 literal 0 HcmV?d00001 diff --git a/data/images/inventory/button_blessings_gold.png b/data/images/inventory/button_blessings_gold.png new file mode 100644 index 0000000000000000000000000000000000000000..acff31976da0a18fdf7152ff1ae5b624d9bed6fe GIT binary patch literal 2392 zcmcIldsGv579Q}yqclb3EYwGtj<%v@l9|anB?2ZXgwybdK>^*uWabx0lgz|qfW*ax zW2>Tw7Q|PN7PX~YU$`slvPxaBwmyo5s;e&Su4uPgPPeNpQuiUP?k@zgJ$qW$e>Nxc z{(j&6?sxCp*^rx^@nrPOXaqr?G-m3}@R$I%n8aMtdG2Ss&l4iY>0`^J)_}sk>r4#bGbc`LUy>s8RIW z!XZodK~Q-4&hzQ>wnXgO+#@}axPC*{jH{RO;?ECFDj^e{$~h;N9zT5QUiAa*wCf{) zYtD#FOV-90ru+7ZtMe0H-1?REocn3f5WUL6b|~HLVNbLhepR&g?vGML)kxRboNq^# zq@IUPM!7Q!y$JHejKCI#ytx~iJmtLIQXmwVUe++YOH2p+75iLnh(?f96&&= zpw!N3v7wGm47IabY?<6dnA|#0X3t#Z0ZUe8TbNZ2M$KZWi_jFG1`@b{K%+jFlk;kP zT5OD01J47uB^Wve5gb}9SkMAfE~?`_0F{dsI77-*s8TH^6*5AqNJc4wR7(hzgp}e0 zsUZ{^xe^`!VKAD9wQ0=ym&RkkD=k(g2yTr;QdwCku9S*-PpJep3*?|A6oo?s?)7s5 z?ZY|m+zAFf@G>5|Td?yS8epWYe7T^-pweIpE_aBQ^N!mD4U_n2w}ccEfs`hICex## zE>{Tc6$}+H%DCR|CH7kUZXhuOFJJCqfT03#!rX~qEE8JmF84UcGG!SFZ~_;Ed7&^e z6v|!33%s|C|A9P0k3-qGH98NV1>R%fdFMo-awk|&3TBNaEwghhU+G;CP&B>(=xG6H zF^Zt1I7#AC!a~S2B>XFILaHH%Ak+l=fTacc@xVN5xA`9jYBFhzoL8VZ1{n2P42lxl z?W~4TkqRqIC~y_aC~*SFY&b1fQ#ip=N~v0|A}Pi?rVFmu^GtcbzQFom+p;_ZIYJI; ztTwd`$fOib0TL2PWh|~zSOLxgN=hpUxtdS}vxICp9y@$@lM`j;#ugq zG|_@;0H8_JH(K==A?=F3Asx_tF)Qmi~B!|369}x0NZQxl#ZJrvwWmBMFR{U{NIh zU9Yic-x)^}a5&=vr=j5rFGAxPaFE&qhi~yI(RKK(95L$CElCZlFQ4LOq{l}5?P1TI z+j~xLkE$>CWa!qexRtr|<+G9@EoT%-4)%N%Hwz;=AwzW;078S-gC)7lIcIOfLl;|h>#0HiGxC{>Zk#&| zJ|0Qg%oKm}?zi#lk4k!*!&J|>K2uFaUr(wF@2cLlgii2J-s_ijrW7~te&t_rh*UYV zKDoQzd39^0ze5&DemZbtyW!Tu4svQ*!n$k6 zyoZ~x{ijPly_ C0AYau literal 0 HcmV?d00001 diff --git a/data/images/inventory/button_blessings_green.png b/data/images/inventory/button_blessings_green.png new file mode 100644 index 0000000000000000000000000000000000000000..41287972ee68712bc57b01aab3c8c3943402b805 GIT binary patch literal 2392 zcmcIleNYp38eX(miikP1f`=a4g;uz_Np|zS8XzVqhBJJGs07=Q&F&^yNOog(A;6R& z*DBVJ(c&jot^LwDrE;E?Qp*T96m*1Y#d8?1XR*C{-qky)JuG48f|GCWU z=C`}g?|Gm1dEb3^Ls3EAjQF3&Ll88>veaY)|0&=|h?@e=W45ml2#V3LMq`nI=A8^| z%Uc3xVmh5R3xYD6c5dy;?3fpWbX)wGl3DF>X6*G46CG zajgyilx*SVKmW)2DGTyW8*V@G;?&;5FB{h;#BLh?$Npj6yz?<{JBRi+7B`NTwp3qg zYQ52aCE3+HB~;LSu)3uRk}O#BQOfX0TxiJJaZB0vT?3wWD1T~tc}FVq)GP6ybPXP! zhCMd$#(@gS%+TS2Kd2;yxrcXums%7bcmU;}yYr%Cb?AzqPur~PP6(`ySvLQL%23(1 z#NRtc?EOa=$Kb7J3>jM=-?Qbs;$+(T4f(S!Uo1{OJ2JH#OY>^xpIp)Q?x{Ns|JMI( zXq4d&h3GN zKU$J=7C8BYf2l)&py{*1M-24ZK45a}S=L@EmRgq)6z`LgVSlAHK0iQ1(BhmLKS@0CI=T>;rS-^4l~r!_8yOF~v@XDu)D_sNx=Kn%BRSdd;u-=F_!yCdYkXc# zAZql;I4=R#;oC9<9*2mPdSs%YrPd7Wyuzr!{IXKKnI{7M5j{v0;Dfs+RT26@A1PqhakbW5^m4{QB1X`^R zhx&X`v>=+RL6nHzA0-y-wSGosV+6h`Kr!ZOh7;2#gV9uUufHnb9nX}eWQ>>b0hj=U zVbM^24=?h9hyRH@qK~85_z7cxAw@o5=XvjBp^7G1U>sx(XRc&9nhy$DVMUP*jENK( zJ%Y<|1&U#)LT;BU2~0)ELHQJfTs{G{fXGJ{U)BO3fmXnKhd@{PXUgo zLxftRz+6g~3&j;m6{-lINSsunE}B%5P6k(LUDzaBVSoj14(a_qYgiQx7!|mNR%x_O z(D9fS)!{&u4rgc-Csk^vN=a&IN{PTUMY#BYj|6?f`bak;^K)(l{;wJ%@8ttlo(7&P z!rctmK^99{0hF#b@_v*sYa%Nz3y(J)K~mvf*CSN8$PA4{ZnHn)-lOT9pbdH$K>Cp4 zPrwA;B?id=V{ikf|7UZ_eoDMRRzF<&qZR)DC_Q2;b|P<`2tBhc>xB;zr2Afa=W9puuM(Sfrgv_= z>ey&rkc_SRcp!VxqQO?J?pu>-Np9t=Mnmxq+qNBpWveP?RPOG-PUEEOXqzPC>Fc$L zxmmpfrY|2qJ^J!gb4F+VgNhSPwxkWc2-j9-GMN}hU1vi_=kk2@0oAjVFMZ3OGB^HG zk&^Hi_SE^t`eFB{WS)vKXnyYv@I@_p^A+|b{S@BOlG&*BSl5-zp-4n3p%F0*1ebk9(JwCZ;D zoW`dtmRm_s@|l&goSbj(+>QzDogTVKB=l75%G-lIhbcnsGq3jFzW#Yf&y|+D7w@fa z*({HR4=VdU*l-s^Y_@#Jol|(@{>Sq!y}d^GY#7p}9{8}wv1?u1Yn#R}s`>cBO>doD zzMdVse{&{(el^rQrYW8sBUv)LHt|~5z!5lZ{uKF()NRqs(W4BACv|8Ov9e!b&CYuhx*W533{=(7i3`OVPH xwoiR=pJzS2R^FG=(>cO8T6dh7Gw`qE+;3LCdg{`;-Qf?n#av)&T~hwie*n6ZT^#@b literal 0 HcmV?d00001 diff --git a/data/images/inventory/button_blessings_grey.png b/data/images/inventory/button_blessings_grey.png new file mode 100644 index 0000000000000000000000000000000000000000..3579120d7101f11ee30ffc18b5d98aa46dcd1d0b GIT binary patch literal 2402 zcmcIle^3)=8s2ENpy<()Q9N~ASE`|9v%C4dfoL&75~jfbv7$hAv%7&UNjB~-;YaI{ zwpOg=@DQy(Mr-SpUe!Xct)ADj)OIM~2!%Vba%yWVI#r~awp3~L^zI9UT<50s{O2;W z*>AsnzUO=1=Y9A6UbJUtPMP$ZNe~20v0BWz;GPJsxR`O^e>nFl0zonzXENE-8Q#gl zxtU8~IYE;8WC)ViZ`*td+iOq6^k48T%(1&a`?%IxunEpTXxh?bHEnbL z+S^=xE56PGvnL#KW|zeH{qq=_j`im>~7f~oPB#XIYp&` zRa>T>S{ZV59$;6VyuKhkY4d|S>$+9%&#ieeYuaaj&zW&NG=2>+*R7lL{u77aYPnH; z*Z5H15bNEW8S_|*amLE@iq{m?%M()@2Av(gnNvelm4i8|^Bs{*K9ce0RWE!uJ#A_= z^ilh=J41Pkj{_%TeU_CX1Wle6zGTp@-N57t$2mv7ly7_7K=U3274}zA;qd`91f?ym z@KJOrE5S~-nDZKu(9vTE%rQn}g~o>4d?vPpvs4LeURAb(t}3NT23foaPOC5g0uL)u zaD~V16%7?eWQ5lM#^GrUfkz-xsSz1XXui!3n|OhRH3}_C6KXxIBNc>JjjOaNuo5Ro z4A*0X3dIQnt~F?MaO8)8-2}#E$TcsG>;;~TNQor*3>a2kUalxtDR`k61H}S3l$cV9 z0t6~ndL^m?^@{Vy7|g6l3!G2lcrP4gq?~-2WJG|{(GWboD6LnF*aQs2DkvXDDDZGd zV?dkj-cXMxiWa2|KiDOr_h*SkN2QO&a#@it6KFQW&w8c#W1BH_bgi#UaF0aF&=~7x zJpd*GVMKH*UkNYqVhR5XaYSE7qwyI`0!vA};NW@pSfcD>EU*$p4a-+>UWP9hlf#N4 z3s^HHu|`CRD^(~#peo#fs||$GpwXhZ%7EjeP#dTNhLWiJ1M>{$s=Obl&1SHAMTzp# ztkrBpfG7pWF$SHIWk^C#pbV)YQHD|LP!cEgC_`vmxQ14%v@ZRKF0kIr(`8}%!s|!N zmf>l@5p~F*rC1!-F)T{yRSc>l)k>7qIT@66ISGPw=}C&D$Jmw$9Qbl5_fJ{Fsu;jX zIrT1=POnAPlnzJLdbJ95l9U#u2$hS$HEJiLQX()z8(h5Lp+KE*9;%qdeBNRN{*M|H z@8$&?&j8O=;c5o#APNg7g49(;zK=Y1ZDi!;;E|#;P;|J~jR+l1GRq*5Y3^s-yFZ)3k#|37M`Li%K$<4{@>r&KR?9LxN@ovhdeFqM7 zL(iQLo`(*33YIU=N$BY4kj2J?$W2J&sg90J9GZUS(5{KSYK;szBuiVgXxv{u{P6lC zP=C_5=W9NwZR9rf_V%W9cK7tWm(uy}*H^B{*V|{tO)MxVxbxd;Jn^43zgs%LtqZDZ zdGeLZtzUlA-;eYR*<>c>@(t;o+`2qm9DF-K$MwSV^0Jz2@f*Onx?e Ogj+MR&CN^JJoj%Gj(3Cr literal 0 HcmV?d00001 diff --git a/data/images/inventory/buttons_general.png b/data/images/inventory/buttons_general.png new file mode 100644 index 0000000000000000000000000000000000000000..657deacecb6468f808c91985f6f5341f2f0973e2 GIT binary patch literal 13427 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ξl-tG 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 Y0sRvIz)mAG0{{R307*qoM6N<$f_Q&mpa1{> literal 0 HcmV?d00001 diff --git a/data/images/inventory/containerslot_goldenborder.png b/data/images/inventory/containerslot_goldenborder.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6c00217469c9729e2e07b15c5093b1a88754b0 GIT binary patch literal 378 zcmV-=0fqjFP)+tltSB~Sn@+s^csCmA&#%{V^GCW$W5=1#Z2%cNZc`(`_`rR+HYRZ3%$G)h zz3{DQH&I+BJ%#f$Jagbex~m0HWH-&y$Vvr YC)d>cgu9f$ApigX07*qoM6N<$fDx%7nGv!@A@i2RgM^He|Nj$`vQ463JCLftgA*Y@GwPncoXgI`X$?3C z0!~s?rC(I4>N#hvz1CiPw-OOP<)it;&nE|9KlH`r@u?`K05HaYf+U~98pC(r{9gSM z0O~_LaD4xP?BCjFcW0LvBOwHoRygMfA>al_UDrg3Xl)RQD5W@i_^tYn0o;G^JK0|> zs3sHUvl%{k%A%xhYP|Do+7@dJUDpASWm&3>QoOjh;NiD_P`?+(wF-Cj{SZk^4E4sEL%X6B#=IoC*%kj=G$g_;HEI}!z z(_OrCc<&kdo~Eu5Kq-hZqO?M3Mc?-rt$FqGB~9Io?83gBwr^oJ;JDHVlJfZ*PzFdd=Vlq6jerv{DpB!M&5OYZ(TIHHOuCP17{o zTP~SQCJg<6bADu(SbqNbXS8ig-}h*x(Mq9BI^Jd(J3BipPfq27034q_kokPZ^Ye4c zvP2{@^aGcxOCCRYl72W|zPC5y;NXDuYR%>4C3&8cWf@v)LP+h{_dQirQ55CBufX#7 zRF3W(Q4|GT*YVTee_}eFroKKqqp54M%wnzO)~y4IvgGO0r#!!Sj@Fty&$rqeW029P zb<=SB@bE1u-b%te&za3;c<-6bXRIzSnM@|k=5z9*Aj>k8Qp6Z}etu3}*C?gPY(|!6 zc;}HA5d>>2-g`ob_|PT8{)-`hR)OWosT>_0u~;lI zd-^w?Jb6Oh)Z}@(IM4IMUIb$d)+V6ddz6AlfBH^6efErl&kp$V__Y^)Rsn@#Hc#v` zYpJS=y}doI>YA4?UhwMj6@AyIu&K(i)X8unLYCzSO)}>VEoiO97>m410%Ht|#e$2A z3nr5Z#u&Q3!&=M!{ywYq3a#{30%I*&DK_n9G+lUOR%nL4M^I>E5<#`?@tY-Z-l3FY zv)KSpH#J7ZZXOgL58hH2u(1gU7zW(nh%utIMvcQs5WM%P!Y+Z1 z?~P=N!hE1h6P@6jX0CqJ4e8Fbo61 z2SNyh7zlm9I6pEEc<%`QO_qWWVY?F`V6+)E7qnIk{eZ;CZKCNO9eArIGw!30ycZaI1h%wT(Er0#X_v*%t zXnA}pcaH9`UabKriX87#xQIw{_}JIp2eeLIvY5|l+hkO0Eh2)5P*oMH)oS}cz~dhu zsrRmA_rLnBOm}zLv}p-3+Th%f{H)mieVrA7$z+Gkrop*Xdd7$b=!b#FKm7UQcEaV! zsbn@oDF`uwfYu7e2#z6MhX+P$jJ3GIB_|1EuP5`p@ACI9rN3StUrV~}ZKYLeKOyab zN)v(~B}zt8zz>hk)PMEE|HBP_8RL1S-$M4VncV9;T*B__<1OuL`mYT5N QG5`Po07*qoM6N<$f(*LrUjP6A literal 0 HcmV?d00001 diff --git a/data/images/inventory/inventory_feet.png b/data/images/inventory/inventory_feet.png new file mode 100644 index 0000000000000000000000000000000000000000..348e9b0a01298b38302c3f27f45aa82b23bd4238 GIT binary patch literal 1170 zcmV;D1a13?P)2E(EOd|FHfa2dz6UqAw%0BEHVgopQkR_EnzY~2y102CsT zhY#+lchy(tsbFL4j%cIFvJ9g&N-0Eyx~|_?cys%%46`AysAsLid&ln1eRb&(Y}~#h zT5G1$DMo8TjEiJrD2frAx9`g9V2eD*Ifr+i5CTbJ80I;**02L?WZnh!_LCwODIu+m3$TlMM#k{CZt33}Ah0Te2*p?OL37C=?
  • 31_%N#XYdw-djrCfV(`%=_)^z!PCQ_@xa z)OV*lvyOFj+m0OH@Z0x+#g`Tyo;i1&GWvJJd~?ueUuCuTC8$R6UVBcjJj4zAeNqD~l^fXM>Ka{RNZD zBJ1JWc7=vV0kt4#Z3V^#u#Ce_(k(mI@ z%*d`9KEmU^@B6+NkluyOTZO@FPJ#3Tg z?y4fW)`|##QasN?@;uM$zG2VI{*e3!Z3EaUlE-n_zOE}X0Z597nTZI)1ObqY2oU%E zNCCjcbSu?gOIqItJ2Q9ZHdNJG>wRAkM;+b0OKfLmRXxuGz#f1zlbNdKs3A~AVjKyf`rKg!XpVuB;X6gpcVrt zMnE3giji6b1O+OnfVM$iTBM=@Fa>Q$GXoG{9j-9QY)lBF_g{4FiB2eJ7HzlW!urZHmtH2maWcC792Ok+&|hWg zv?y?O{5MvKUt$~%4}~>~7SDge*%rX9wG&mN=2p8^1*JS&=r}(Ss8_F@dcMy28WPDl zBF{hx0L)!5bEAOVd<+2SUE&99ly3C#WR-uh&2E>I>(DRP!uf1g~8!` zffN2oZ5L@say-*cN7UboFR0NNG>(Ybi%l{m+E1_BTROF6jsm}r57 z5$}Y5i_1XTGu>o7?yZS5$_f82p&Nbta4teIjI*_(ks#2<9%o0l0%&;31XoxBiTNTaUns!MAacTlTcu8Tgy}mMVniQd1(Nq+LIOsP z=ZMIl6=lYy4~9NIe{C8Q^U+!&b&Eq*dC&I`fh7S6BACpECBm&@2zHBu1yYL-i*cck zb46Rl(QiHFLS#4^jzP>M2r=;EQlbcsNnxI7IOK#gui3zG*bNOTU>jzk4vI@j9Hj?3k|9dy*ZO zXHVkT*w~UdAcsS;i6h zX2bw<@$b9&e-P!r=g&J>Sp9wk#D<@!amddc%mQ=AI~IMfW%3RoH%)( zu>6n{&CJVnbwI@K;iKJxZg-Q$I{G0jt4dr!+LXEc$GEN#<2#$?oNM8P1c!Zgv`hF9rOWjwyk4}0 z!cr-f$g2qj&J-!V^069iT|xfrbPj2j5$}~&oW|eT&42sikR)GzZ-o8 z11XNM9UL5{<6k{3V-p%)?K9g&NX4h(Pb&#)bkJu3h@yv1t}w>*QVdnfgkx(zUvT~P zrL=kOL~~b9^OR-E6~q*D{&UA00_|n%yc^u~h7YW9yiyCkQED%OgwXsO9L%yDSx>z!zF-A=h3^2!5!` z9MB6-yCG`FvVo4?YJHlK5 z%J?yCH@KoDS+cY-HgKWdeI3FbjEjD!`vPw{n$^6%_?Dm=wfp8?&|QDt9zPa6?>a>- zKUiU`V5_!b_F^FBoaNrEH1L!%cB!dO!m+u;6UYj?cef}HA3nURt}Zz_4P<*RjqNT( zh1!@b_qrKbrBtfxcdYEsx0nt1Wx>b#V_Q-65y4rozcHY19;)a|NC$5Qp#W8Y0a5<# z`eF`d^C@6eQ3w6EM^ASedlNrnw(_i*`#Za;=)f|sn}X_=idFibxfwNnCO?Q~vgpUj za&#BwIvt=i1NV!|E`JxW!p&cF9duufCX^@x5{~t|jjm)BbqtPAZeX8fuSoADq$)tm zP}V>lnKwUh%%_UUsPFcy;oZn-8p`p2sqvbXF?m>esyyg|=MLC0dFAO)yA z_?gnTNFtR=b={(Zjoti>l{anLR>bOFyjq0?D%Sbt!g4?6w=ox9DkB9_N!)ev|P#Nr%~JimY0g#N(UlJ zP>Ln5N8(=$w5!$bSP2ov?2S{NIc2D~XKHF{xj`1oTux!~bE#@p8S3)XSY8vCNp#U) z5o_4LM@vw3*ytjHW{&wMVlRa}dHB#(Im=wxpOAY>j(E@z`n2hbpvft5}En>4lc5cscHd#6eIviIyK!-YlgBMaj|TaeDOICwo4bWqW_!f>E^KjB)H#h~s{Iwu6{nR| zPCF~@0u7a+S3rK`^Z4zs-LFr71mAlWyk{g>CDszqB}z`ceGaa z?MH8W+U~I{_I4hWrE*NYcX{Xdi@|lWZe&UlaDQOn8hIp0a$YH@9$F+zqesRd8NVtj z-{_d|Y&NhyuMh<(<|O|lyb#sa?vJb-6T8Ovna0`KG|d-H8gCdXXdP8!g{`C0TC8kS?d6WjppxO?CDo>P2Bjl+FZbp_A;v&N zxhLwN@y)Ry;&Ncc8uKIDrY6$Z+nTUz*ZS^kZfa_3Z?E@P_l~ZeelwU%r^T6gW&S!c zGAqd#E^I$r!;$IawVg`4OiyL|xsQ*JcXocKD5n@USKQHRwcWKhFgnl`%7B#7Be;FE zS425;d#I?WD2s}nKlHMu5Nl@E9p8ZMX;xLn!KhV%3k!T3-LzO#X!v#qugsDX5^HeB zN(85RLzv>Ea{Kn}G=}5_vD9+S;*3VC5Q>K^W6MH7S{v*<(Km1yeWi3haNki-IdWm3 zwLSPrwk{AJ9=_|mab&^uf?%;)6;UuBFa-J!In%&by)P)jf2FIR0{fR7~9<>b2w)RL|6hF8#>x8w3j0Zti z%T9Fr=xvOutXyD5;Kk%7YL7nZcm1MHWi<#*WTwLK7F8bR}AEmU_R z&bYB$xgz!Z&)gM8Rf#$J<|zk(`+0>0_j21#sa|Zs&Z-yG4ig$18}-fC(Cs{cr)}+O zUg3j0sJ3UUEtXc$Q!6VA(S|ATvlZpMbDC({95u^JzKW^>m4(VqCLLBho@?1N0wgx-TZi<(!&_@;$Z;}@dS&$5@6(HcX_#)r!4 zCSn~|K41LiST7)1|K5dKL5vO;IZW6P3$({zBKC{kpx?0jV@K~g5;#OR^ zFqj7wb?a)e9nuGRy;9`$tVrRn#b%FTdky;YofF^OJ=)vV)%CpphDV_hyxY35J^p-U z!sY(>@sTB3Y!p%q);}lSihTJ*BQa(^3>;~Vr5;7zcBZ3VYBY<18ja*P;nChiV5^E# Vos=JVXy%_CFE?M;Qf6rK{{a?~KgR$7 literal 0 HcmV?d00001 diff --git a/data/images/ui/low_ping.png b/data/images/ui/low_ping.png new file mode 100644 index 0000000000000000000000000000000000000000..0909cb040735aa0b60526dbf0f754238c4d1e43c GIT binary patch literal 2172 zcmcIme{9rL9Pfz0F(7P!bAzB=$-*J@`s=QD?KolFZQPI>bGu|?;g7v*U+>E9+S+!z z8%Tmql!*`$L5v|vCQ-u_h(J`P$d4%hU=TwT6ci(Yn1I9x1R;p8+uex>NJwnb_Py87 z`+Ps&AMd^PHa5%~TRf>4!?3aSk#G}wmpZp=1bSAd=UqduQAT8ug<+#7ICl~D`lfOW z8}X_dYqeXW3q(mzdw{IRp(mR*5E{c~&CVJ?>VP&LhY3{+5*G(PBXCs?5-q+c9W_EQ zsYaHXuz6`iOj_C@2{JMJ34B&oLq>TctX6539B1UC_K`|cM@hK0CM(+(xrweGyuI)lra(eGbY{j|_NHsxA?=&S? z+XXdyYTlSE73Lb9W@^w=S)yPHrV-3S!kB_7BdOcEmDKOzN8xk98$%445ZJmI)Adw7 zQ;m5Rob`Hm+})yTvYxS~JBo4>U>MjiNT95FNtz>BCdT+gjuklpbw!#Uf<{px$iN2w z0<#Foi$3NbU|m*~?)!m8qhh^g*+7$EeK<%UQ65#5MW6s$l7T?_m^e%NWG_boCcu(B zC$Nmba0)HO2X&$OVO{EU!spB%s#{r?5Jw?GBEu+9QQ{H_0rHXYdU;ad{Q}8)84&QY za=@=hdA5b7ik1#Y-OB2yk`ZGd&iEx30#f2QK=O*0Aq7N0GH5K|mpPgaplHdGsOV-I zpgK|0AOR^uOAz?qYC?KSH>0|YV$M0$jM$ME5!FJe>&~r@X83fjl~VD+q7#AS)OwJR zoFqe;$PKG^h~E9_9HPx6AtJp;@`qrSuGkr1!kPq%^nVr?bvN-A=(@M`cz}b@3nY>j z0vsv%oe&FqWX{=Z1ig;h!dEdkNaNf8h3%>7mIUGi}Ix_Xd2+}Rn* z*)NAGjJmz}2EX01x1vN24xtU(X%>zO)F~V`P(yJt(NV&lbq~j|qL=H#HL<{&_t$?q zKU7n)@`$EATDk7nOUa)nzq@ers<{)x6E}EE_aE@IE~#w$?(x3bOQViWYYbNw$0wX0 zADQt7Q_YoqJaFR6H5)W*^@$r-HtpnEdR>3+A+W~zRmGR<$eJUH*}I1Lx@S!F;;q_> z*Y*?bO3BXtu?N<#3RGRLi(Z-i;lAI%vI(nCe_vislyD8xwoi$KH!mMvcKXTP>mnUn znx|uPe(J8=G5I)9R%HfmK3uwK!Qvu}fAegQi|Fr*opQ|_Gi>c4>UxEHwCvP)bie$Wfh-aX}iGh`Qj4y!SW{kn0zi>(bloCl$$n}4_{rv zKlR4m5dTVZ?^;;8j`^x>;9%K40w;EfQ_B11sD09CYPDyVTl0jT?|P?a8`EBT^6<%# zQzp-u>B7Ew?A*!2$2ZPccxsp{k#Nf;XSe_OcI%BpH_wc01F8Ox4Ew0_e^6iB5Z*So H{kgvYT|3a= literal 0 HcmV?d00001 diff --git a/data/images/ui/medium_ping.png b/data/images/ui/medium_ping.png new file mode 100644 index 0000000000000000000000000000000000000000..fed82c8b8db82b4227b3450f961fdd8d08099363 GIT binary patch literal 2174 zcmcIme{9rL9Pa?<+(MWc1Tu*>g+=+%>+kli<2JV4U|YN~;S7TWSbw~`E8Jac+wE?P zz!)GyGZ+IQVG_XzisBgY2jCzi!-$9^jEEu;gTMY@s3bE10x|e{cRL9J5)zxVeed=2 zKHtyx$9u2q>uP6@&MnME5M*?9m2WP5Kk3{#+3;B$oqZF&o-nEwSO}6=;M`fr_BSRV zNcL7OP;b}!pBEK9>XKAl2ChWZfM^7nQJOF$Wf`zh8HBW$7rWYb3_~^5i_Pc!q~E9j zVXdmg1oK*I14_#>#iL@SCFqQV2nnLVme52r60^jF7fbSru?z|tE{ z1ynYHm_2FOn5tyv8jWTo>8Yv^AOfNgWO0$4YQy$>*CSp=4&xkk6Tk5Md=B^C)vP@!K|@3$>1~i3J)G0T=>3aIvZF(}HVX{yN339`S0G0wLLx=WG^q+4&XGKes}#%N5=XJPOaYlx zd07F9I?Oi5)Zo&QB6qSns#M5G@j-?qB^sw?S;hsL_27~OLncv-A`3wA2m*_tsv-t; zGb+J4(V|ia5JoJ7q5r6<&?CC(*HsvE#;In=4!x+-ESS3H^!k_wUP`wj8k#IRQBs^* z_hO2ZWB~Q1hP8V{@8NW&=EuVTl0G2$DVU`P?YLxuvJi~)e-;;UKk=5-^kC^UP~57( zs5p!$k9&Al#XTGs#1)QXfItRiw=502{=Z01hgAtnu@HbeCxJb>GY?nA_sPTE>*`VR zaBpV_XTMBU7;$&;CBNOVx57jwhv0_oG&4s9>|_ob5QA|t;Zf56L4N~+WNoPSl?B`# zyEhltPAtoR<=E2=r$I{*joN_zJmLF>F_*sHX8d%f|7^=+<$W`n zq~Loi+j^R{H3cWdY8+d$Fkj;@@pmi%tC zb!dEDYt1v2h387o-x}!8&hOqi7_WJ2Xc6_-iP`O^M!kBl_d2s`@}|adZ0pS}ITOA> zBjx4y3<&Ug6L+`!$@<3bR%*g%_(>|y3@Ve8*3nuRRcu~%zZQpU< zOxvCNQQOd%u`7Q(MgMxRs7DyLH@Iuw;Dyf))l7|?E4Z-oz@HUkn-*?9{z>>e{9w^C$OqtQbOu1`;FpET6bB TFT581L?B3YWv#ELyrJ!Hsj=bY literal 0 HcmV?d00001 diff --git a/data/images/ui/miniwindow_buttons.png b/data/images/ui/miniwindow_buttons.png index 3c423697d40ab188d19b456798411802f52b648a..3fbb8706a0e4d875da1c5c871e19b030a075c286 100644 GIT binary patch literal 19774 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 PNw7C8BD87O!NPw4LS@0z diff --git a/data/images/ui/newcheckbox.png b/data/images/ui/newcheckbox.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9af5349f76ef399b73b1e70aef0a788a6a20f1 GIT binary patch literal 2190 zcmbVN2~ZPf6kY@r5D~=#?{%?7tVuQ@kYpulNDx8|M2re3%4V~`YO)(P8xkCpctPpzz4!g^y)Duv z#CG%R?*~CpH+7sU3A_WqGu)>$_&ASZhKCDfGHDpVtXjLG zD!y9VtFUT7%&C&eK6h@JLnmmBS57QdPhAWrmnoh5)XKH`o^*Ns%fRLIplR3VbPA0< zp?K_@=Xt7hfpVe0_mZ1`Zn-HNc-~{XzJ5!=go3BZWjU8ul{eO2?VGWolOtin&YUtU z6d0O)GWce*kE32w`A~eiC0{gTSG;FPdgTCe=ofw$sxFmw7JB_qylrM+cSmW$wTQsP zv8C%<259}**HC=Tv%J6=j;j{=kfpNY{_G5o@q^N4IZ~YgKczJ5YWI*SmmYqq7`CFz z#^vY3j|?d+iVwPSaYEm-&7SGPAx6odBa;vBJ^C#FmAps&Qoazwyl;xaUc%3x z6g+Bmlm3jkUqCZHTW6@0m@7QGR>XXhy68!tsDOOv`02#IpH3We7AWa!j!UsXP}d;W z;{k2@G8lrqdsDh(E?F}kBN!7Ocj?Qwo6G&{ltGS6 ziO`@Lvy#lB;%2kt#MuctV)iUTW3u$cmoEPz8K5Q%sI!L#Jj9B${)mXHnx6=@+@ z%FIy=4Z9d|J!9qM2=KHm1e4iKOIzAy0)h$bxLF|Nqppxzfd;~jGh10>t8oJ%AdRGn zq&W+~3f)+97Q-=?Ean5$?(Me>0BJQEw~hDuVluf+Sh$!R5JtNo??qd5xn@$3L|Pat zOOP=+z|9a>G-gc6k~qh(I)*WJT$HxMWmp8FhKEm~Xai%jguQWqRN)*cM?|P7oF^3W zL}DE(#v)KmB;ldq7>c$*HH?AE$bBy~9E%XY1qCT%z&ZRs!3F}$U|16l0;WuOCMht} znF#Eb5mPcoh6RR!cj0fYt3hL7nGDJZHr{P8t=?)hn3}e5I8Bghl^g-u@F~iG5&8(B z*Z@*WCefojsZ31pa4CqI5X(@BKEt2~laBK$hOoLapyRyZf1XcdDNup9@uPWMb?HhS zERM2(OU-SsoQY(1`^ZSat=WR%gsTeV2;sVZ(txxtQy;BB8?7yi1f>6x7Hu#Klfl_= zmQ-W{wL0$OgJ~xK&I?@i+7^f4-4I*%-l**kIA|EIp}SLoiM!X4G-z-v=wut|#{Z`jr^uS# z$0`zDMefFi24rted;Uj2VPjtNyu!pCRLwS(ckr@trF-_A%w8Jkmo!2(!OOA6IZUnX zwP@Wg;oxP-`|G2<1EViI;2uuTi)!rmeU)c1bSQP->E8Ks^48qC$L8L)edRTyXidED zZ{PhIJl?s(tFG~B*C5i@Z)a{p)3en17aKDP?d5Bq*eh@JU$Amr@ssE)((?toq1ERW zR!D+|9$b<$HDvLzl}U2Ur-VDgQb(1Ic$IdpTQ%%6|Gu;9P}JY^Og8GjedV-8 z<5|t+nJ4B})fpqJ5AOY|l+_E%&-ujgg)*QU)6xEi{m+Ipk% z!@6L<0{XVRrCW`2-L36+Wz*KbPGQsPeXAcG z)|5A44UdD<>Nhh_29B5*@}fas9=)}(N5O5|xiafk#UmA4>}Y~_uZr?lM%8_G3-j3; vH+@l4@$XX;BXa}l6)AInzFSvP750KTGzr;wf8LJAuFsu1CP7smoj(5`S`#5n literal 0 HcmV?d00001 diff --git a/data/images/ui/outfits/checkbox_round.png b/data/images/ui/outfits/checkbox_round.png new file mode 100644 index 0000000000000000000000000000000000000000..71672a786684b4b3db17ad3d9249371a7a9e0171 GIT binary patch literal 12156 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/outfits/floor.png b/data/images/ui/outfits/floor.png new file mode 100644 index 0000000000000000000000000000000000000000..eb5a373b8706f2b74cc8109d428ca35adaf7d3de GIT binary patch literal 1512 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/scrollbar.png b/data/images/ui/scrollbar.png index 22be44ff64860258d1e3ec9e90f8f6632a33d992..f67e6bc678f25bdd76b5538f705ccac6732e8f0c 100644 GIT binary patch literal 6494 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 PVur!f)z4*}Q$iB}e-T$% diff --git a/data/images/ui/scrollbar_new_horizontal.png b/data/images/ui/scrollbar_new_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..0c070fb94eef4105aced6ac34c634080992de765 GIT binary patch literal 4588 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/scrollbar_new_vertical.png b/data/images/ui/scrollbar_new_vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..860c18267c599e4ce9cba53fb1dac07ad3077246 GIT binary patch literal 4675 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 KB9~hSCH)Ur@a3TZ literal 0 HcmV?d00001 diff --git a/data/images/ui/tabbutton_new_shadowed.png b/data/images/ui/tabbutton_new_shadowed.png new file mode 100644 index 0000000000000000000000000000000000000000..59eb488962888d58340644fdb955c6aa0e219300 GIT binary patch literal 6861 zcmcI}cT^K;+x}2izyb+2R$2(L#05eKH3mf!kRm8SkRoabi9$#*p$bY?DM1i~MX3T7 zhz5f$njlpL7hDJ+(xi(B5s+pqAc)_%?)rY`cfR*M??1meXOd@T?&o^$a^2TVCJ6^z z_O4mEX(a#vYaHweMDUvp?%S2+!Oxd|nRfv|&LRMhKd{@M=|_PP_wIphLt9x{A^~7q z>ZO#2j&%pt#Xr=v{o|^K@~fAut*!@xIv*!F_?(A%7UR=|4){xc>Wq@;&yZw>_Tm21 z@>};l-aV%hrSQkCbNHCmKP3*mzcOT{)gpJ@ulq`zYn;rpIJ7;rMB3D|k(w#bb;&FY zEe-)7TTedG7@AS$b~{&2o7OKzo9GrfD(D}p)THR~Rz7?9{MHJzqNE@{5TeGt<7_zV^QU4vGGF`o=3tY6;`Mxb%Wg!9 zQdV*crd&5Z!EtS8o9o7>GYZGhxDR#eS#^eV>Y#t61*=SMRhg~WJNDfMoN6@isDA$!ncJ?XU?x>q_FfzSShe=s zE(c`iY5>4bvjGP^gFT)1VaZIo5$Rigjl$_H&>8@6yTVx{GK~@p^P?OOU|7RvDj&jO z0shwTLuSs#&MZ9TM1cJ%HpT6f%R%xf8rjMpzH2887mfu1=#*d*ESw(1;9$e8;eX*` z!ST1#C^+mdlVF-P{Chz?oe#k9Og05(W@K(iMw?o~EUb*s=BCCNa|4)(G1>}cY>7f+ z42{uPV{@#T1?=w)4z9-br(%f&yT8{0kF4P*f`eID6e=t%%qR?F#AF{wfn)(OOi(5! zhM6Ezg0118r{6=MvwpxbIDe-JOc*Mh z#6qEsjK78SkD;^ke>SDle^_&ZZ9~CT{`U9(1m+x!U{O#+3WpiOCR1!fDU4wKe-`s6 z|Cq}PVF&#csXrM-38K(JGY;q&`o~hN6U<;H=LGZL#PQ?uk7!s}JexuaX0i`5nL+;) z>cBrJFcUCp*tSCf41Z=A2l>sTzb8-#q+p6Q+{D-fV~9o@nphk}n_--K#mWrD#No0<6kgSMX?0Co;3=zpVr^U5DYv_PAgk&XQ= z4AGzmhNdQ_6hjgkOp~Rb6_sK_w)FF}GJ(VV$yh3rO(%go380gXQ&23%aX9Q>-r$)* zOtv%AAIv!z!@tfufO5%ZQUij(3*Wo!U$Xg)^`IAEwDtiUu*4C6_mLarNt1r%5m{97=nZ&LKVD5(FpUVmNtU$XU&IjDu- zhCf6YJoq8w6b1;*21WX-96kg9*4j7_b{{

    r|xEZ~6}Gyod02a_a;|{K~LAtt;Es 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/textedit.png b/data/images/ui/textedit.png index 86e964f5fd9a1f52f02df12b0a89a75fbab746f0..a90319414262f0981c74dcb32bbc9cfecb105dab 100644 GIT binary patch literal 2199 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/vertical_line_bright.png b/data/images/ui/vertical_line_bright.png new file mode 100644 index 0000000000000000000000000000000000000000..b2c1833b4400ba96adeb33620240cc34d6639aee GIT binary patch literal 258 zcmV+d0sa1oP)&$1W_f{!rj@n zjm#w0A~I=T4k literal 0 HcmV?d00001 diff --git a/data/images/ui/vertical_line_dark.png b/data/images/ui/vertical_line_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd89ff31d0d9ca7ff86e1fe87439c0d3d445d5d GIT binary patch literal 251 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 N002ovPDHLkV1g%YP+|Z8 literal 0 HcmV?d00001 diff --git a/data/images/ui/window_new.png b/data/images/ui/window_new.png new file mode 100644 index 0000000000000000000000000000000000000000..e1c04ad8fa2885e00c993308f2ac04777bb57f78 GIT binary patch literal 44684 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 0 then + local previousYearIndex = eventSchedulerCalendarYearIndex + local previousMonth = eventSchedulerCalendarMonth + if previousMonth == 1 then + previousYearIndex = previousYearIndex - 1 + previousMonth = 12 + else + previousMonth = previousMonth - 1 + end + if previousYearIndex >= 0 then + local previousDays = eventSchedulerYears[previousYearIndex][previousMonth] + local amountsLeft = weekOffset + local i = #previousDays + while (amountsLeft > 0) do + local widget = getCalendarEventWidgetByDay(i, previousMonth, tonumber(os.date("%Y", os.time())) + + (previousYearIndex - 1), weekOffset, 0) + if widget then + widget:clearEvents() + widget.dayOfTheWeek = i + widget:recursiveGetChildById('dayAndSeason'):setOn(true) + widget:recursiveGetChildById('day'):setText(i) + widget:recursiveGetChildById('day'):setWidth(string.len( + widget:recursiveGetChildById('day'):getText()) * 10) + widget:recursiveGetChildById('fill'):setOn(false) + for _, event in ipairs(previousDays[i]) do + widget:addScheduleEvent(event, false, nil) + end + end + amountsLeft = amountsLeft - 1 + i = i - 1 + end + end + end + + -- Days after the last day of this month + local days = eventSchedulerYears[eventSchedulerCalendarYearIndex][eventSchedulerCalendarMonth] + local lastDayOffset = getDayOfWeek(#days) + if lastDayOffset == 0 then + lastDayOffset = 7 + end + local nextWeekOffset = 7 - lastDayOffset + local nextYearIndex = eventSchedulerCalendarYearIndex + local nextMonth = eventSchedulerCalendarMonth + if nextMonth == 12 then + nextYearIndex = nextYearIndex + 1 + nextMonth = 1 + else + nextMonth = nextMonth + 1 + end + if nextYearIndex <= 2 then + local nextDays = eventSchedulerYears[nextYearIndex][nextMonth] + local amountsLeft = nextWeekOffset + local i = 1 + local forceLine = 4 + if firstDayOffset >= 5 then + forceLine = 5 + end + if firstDayOffset <= 5 then + amountsLeft = amountsLeft + 7 + end + while (amountsLeft > 0) do + if forceLine == 4 and amountsLeft == 7 then + forceLine = 5 + end + local widget = getCalendarEventWidgetByDay(i, nextMonth, + tonumber(os.date("%Y", os.time())) + (nextYearIndex - 1), nextWeekOffset, forceLine) + if widget then + widget:clearEvents() + widget.dayOfTheWeek = i + widget:recursiveGetChildById('dayAndSeason'):setOn(true) + widget:recursiveGetChildById('day'):setText(i) + widget:recursiveGetChildById('day'):setWidth( + string.len(widget:recursiveGetChildById('day'):getText()) * 10) + widget:recursiveGetChildById('fill'):setOn(false) + for _, event in ipairs(nextDays[i]) do + widget:addScheduleEvent(event, false, nil) + end + end + amountsLeft = amountsLeft - 1 + i = i + 1 + end + end + + for day, events in ipairs(days) do + local widget = getCalendarEventWidgetByDay(day, nil, nil, weekOffset, nil) + if widget then + widget:clearEvents() + widget.dayOfTheWeek = day + widget:recursiveGetChildById('dayAndSeason'):setOn(true) + widget:recursiveGetChildById('day'):setText(tr(day)) + widget:recursiveGetChildById('day'):setWidth(string.len(widget:recursiveGetChildById('day'):getText()) * 10) + widget:recursiveGetChildById('fill'):setOn(true) + for _, event in ipairs(events) do + widget:addScheduleEvent(event, true, nil) + end + end + end + + calendarCurrentMonth:setText(os.date("%B", os.time { + year = 2023, + month = eventSchedulerCalendarMonth, + day = 1 + }) .. " " .. (tonumber(os.date("%Y", os.time())) + (eventSchedulerCalendarYearIndex - 1))) +end + +function reloadEventsSchedulerCalender() + eventSchedulerYears = {} + table.insert(eventSchedulerYears, createCalendar(tonumber(os.date("%Y", os.time())))) + table.insert(eventSchedulerYears, createCalendar(tonumber(os.date("%Y", os.time())) + 1)) + + if eventSchedulerCalendar == nil or #eventSchedulerCalendar == 0 then + return + end + + for _, info in ipairs(eventSchedulerCalendar) do + local days = getCalendarDays(info.startdate, info.enddate) + for index, day in ipairs(days) do + table.insert(day, { + active = (info.colorlight .. "ff"), + inactive = (info.colordark .. "ff"), + description = info.description, + priority = info.displaypriority, + season = info.isseasonal, + name = info.name, + special = info.specialevent, + firstDay = index == 1, + lastDay = index == #days + }) + end + end + + activeScheduleEvent:clearEvents() + local currentDay = getCalendarDays(os.time(), os.time()) + if #currentDay > 0 then + for _, event in ipairs(currentDay[1]) do + activeScheduleEvent:addScheduleEvent(event, true, onClickOnCalendar) + end + end + + upcomingScheduleEvent:clearEvents() + local nextDay = getCalendarDays(os.time() + 86400, os.time() + 86400) + if #nextDay > 0 then + for _, event in ipairs(nextDay[1]) do + upcomingScheduleEvent:addScheduleEvent(event, false, onClickOnCalendar) + end + end +end + +function setEventsSchedulerCalender(calender) + eventSchedulerCalendar = calender + reloadEventsSchedulerCalender() +end + +function createCalendar(year) + local calendar = {} + + for month = 1, 12 do + calendar[month] = {} + local daysInMonth = 31 + if month == 2 then + if (year % 4 == 0 and year % 100 ~= 0) or (year % 400 == 0) then + daysInMonth = 29 + else + daysInMonth = 28 + end + elseif month == 4 or month == 6 or month == 9 or month == 11 then + daysInMonth = 30 + end + + for day = 1, daysInMonth do + calendar[month][day] = {} + end + end + + return calendar +end + +function getCalendarDays(startTimestamp, endTimestamp) + local currentYear = tonumber(os.date("%Y", os.time())) + local startYear = tonumber(os.date("%Y", startTimestamp)) + local endYear = tonumber(os.date("%Y", endTimestamp)) + local daysInRange = {} + + if startYear ~= currentYear and startYear ~= (currentYear + 1) then + return daysInRange + end + + if endYear ~= currentYear and endYear ~= (currentYear + 1) then + return daysInRange + end + + local startMonth = tonumber(os.date("%m", startTimestamp)) + local startDay = tonumber(os.date("%d", startTimestamp)) + local endMonth = tonumber(os.date("%m", endTimestamp)) + local endDay = tonumber(os.date("%d", endTimestamp)) + + if startYear == currentYear then + for month = startMonth, endMonth do + local startLoop = 1 + local endLoop = 31 + + if month == startMonth then + startLoop = startDay + end + + if month == endMonth then + endLoop = endDay + end + + if eventSchedulerYears[1][month] then + for day = startLoop, endLoop do + if eventSchedulerYears[1][month][day] then + table.insert(daysInRange, eventSchedulerYears[1][month][day]) + end + end + end + end + else + for month = startMonth, 12 do + local startLoop = 1 + local endLoop = 31 + + if month == startMonth then + startLoop = startDay + end + + if month == endMonth then + endLoop = endDay + end + + if eventSchedulerYears[1][month] then + for day = startLoop, endLoop do + if eventSchedulerYears[1][month][day] then + table.insert(daysInRange, eventSchedulerYears[1][month][day]) + end + end + end + end + for month = 1, endMonth do + local startLoop = 1 + local endLoop = 31 + + if month == startMonth then + startLoop = startDay + end + + if month == endMonth then + endLoop = endDay + end + + if eventSchedulerYears[2][month] then + for day = startLoop, endLoop do + if eventSchedulerYears[2][month][day] then + table.insert(daysInRange, eventSchedulerYears[2][month][day]) + end + end + end + end + end + + return daysInRange +end + +function getDayOfWeek(day, month, year) + if not year then + year = tonumber(os.date("%Y", os.time())) + (eventSchedulerCalendarYearIndex - 1) + end + if not month then + month = eventSchedulerCalendarMonth + end + local timestamp = os.time { + year = year, + month = month, + day = day + } + local weekday = tonumber(os.date("%w", timestamp)) + -- 0: Sunday + -- 6: Saturday + return weekday +end + +function onClickOnPreviousCalendar() + if eventSchedulerCalendarMonth == 1 then + if eventSchedulerCalendarYearIndex == 1 then + return + end + eventSchedulerCalendarMonth = 12 + eventSchedulerCalendarYearIndex = eventSchedulerCalendarYearIndex - 1 + else + eventSchedulerCalendarMonth = eventSchedulerCalendarMonth - 1 + end + + calendarNextButton:setEnabled(true) + if eventSchedulerCalendarYearIndex == 1 and eventSchedulerCalendarMonth == (tonumber(os.date("%m", os.time())) - 1) then + calendarPrevButton:setEnabled(false) + else + calendarPrevButton:setEnabled(true) + end + + reloadEventsSchedulerCurrentPage() +end + +function onClickOnNextCalendar() + if eventSchedulerCalendarMonth == 12 then + if eventSchedulerCalendarYearIndex == 2 then + return + end + eventSchedulerCalendarMonth = 1 + eventSchedulerCalendarYearIndex = eventSchedulerCalendarYearIndex + 1 + else + eventSchedulerCalendarMonth = eventSchedulerCalendarMonth + 1 + end + + calendarPrevButton:setEnabled(true) + if eventSchedulerCalendarYearIndex == 2 and eventSchedulerCalendarMonth == (tonumber(os.date("%m", os.time())) - 1) then + calendarNextButton:setEnabled(false) + else + calendarNextButton:setEnabled(true) + end + + reloadEventsSchedulerCurrentPage() +end + +function Booster_creature(data) + if modules.game_things.isLoaded() then + -- note: is better image * + creature_boosted:setOutfit(data.creature) + boss_boosted:setOutfit(data.boss) + end +end diff --git a/modules/client_bottommenu/bottommenu.otmod b/modules/client_bottommenu/bottommenu.otmod new file mode 100644 index 0000000000..f92b2ccf00 --- /dev/null +++ b/modules/client_bottommenu/bottommenu.otmod @@ -0,0 +1,9 @@ +Module + name: client_bottommenu + description: Create the bottom menu + author: marcosvf132 + website: https://github.com/edubart/otclient + scripts: [ bottommenu ] + sandboxed: true + @onLoad: init() + @onUnload: terminate() diff --git a/modules/client_bottommenu/bottommenu.otui b/modules/client_bottommenu/bottommenu.otui new file mode 100644 index 0000000000..109693c612 --- /dev/null +++ b/modules/client_bottommenu/bottommenu.otui @@ -0,0 +1,193 @@ +ShowOffWidget < UIWidget + anchors.fill: parent + + Label + id: image + size: 64 64 + anchors.left: parent.left + anchors.top: parent.top + margin-top: 28 + margin-left: 10 + image-auto-resize: true + + Label + id: description + anchors.left: image.right + anchors.right: parent.right + anchors.bottom: parent.bottom + anchors.top: image.top + margin-top: 10 + margin-left: 10 + margin-right: 40 + color: #c0c0c0ff + text-wrap: true + +Panel + id: bottomMenu + size: 1020 116 + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + image-source: /images/ui/panel_top + + UIWidget + phantom: true + anchors.bottom: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + text-align: center + text-auto-resize: true + color: #e98d02 + margin-bottom: 110 + text: OTClient Redemption + font: verdana-11px-rounded + font-scale: 4 + shader: Map - Party + + MiniQtScrollableWindow + id: showOffWindow + anchors.bottom: parent.bottom + anchors.top: parent.top + anchors.left: parent.left + size: 605 116 + draggable: false + + Label + id: showOffWindowText + !text: tr('Random Hit') + font: verdana-11px-antialised + text-offset: 0 2 + text-align: top + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + opacity: 0.5 + + MiniQtWindow + id: eventsWindow + anchors.bottom: parent.bottom + anchors.top: parent.top + anchors.left: prev.right + margin-left: 1 + size: 246 116 + draggable: false + + Label + !text: tr('Event Schedule') + font: verdana-11px-antialised + text-offset: 0 2 + text-align: top + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + opacity: 0.5 + + UIWidget + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + margin-left: 10 + margin-right: 10 + margin-top: 22 + margin-bottom: 8 + image-source: /images/ui/widget_border + padding: 2 + @onClick: onClickOnCalendar() + + CalendarTopMark + !text: tr('Active') + &disableLeftBright: true + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.horizontalCenter + + CalendarDay + id: activeScheduleEvent + anchors.top: prev.bottom + anchors.left: prev.left + anchors.right: prev.right + anchors.bottom: parent.bottom + + CalendarTopMark + !text: tr('Upcoming') + anchors.top: parent.top + anchors.right: parent.right + anchors.left: parent.horizontalCenter + margin-left: 1 + + CalendarDay + id: upcomingScheduleEvent + anchors.top: prev.bottom + anchors.right: prev.right + anchors.left: prev.left + anchors.bottom: parent.bottom + @onClick: onClickOnCalendar() + + MiniQtWindow + id: boostedWindow + anchors.bottom: parent.bottom + anchors.top: parent.top + anchors.left: prev.right + margin-left: 1 + size: 169 116 + draggable: false + + Label + !text: tr('Boosted') + font: verdana-11px-antialised + text-offset: 0 2 + text-align: top + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + opacity: 0.5 + + Panel + anchors.top: parent.top + anchors.left: parent.left + margin-left: 12 + margin-top: 30 + size: 64 64 + image-source: /images/ui/panel_flat + + Creature + id: creature + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + UIWidget + id: creature2 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + visible: false + + Label + !text: tr('Creature') + anchors.horizontalCenter: prev.horizontalCenter + anchors.top: prev.bottom + margin-top: 3 + + Panel + anchors.top: parent.top + anchors.right: parent.right + margin-right: 12 + margin-top: 30 + size: 64 64 + image-source: /images/ui/panel_flat + + Creature + id: boss + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + UIWidget + id: boss2 + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + visible: false + + Label + !text: tr('Boss') + anchors.horizontalCenter: prev.horizontalCenter + anchors.top: prev.bottom + margin-top: 3 diff --git a/modules/client_bottommenu/calendar.otui b/modules/client_bottommenu/calendar.otui new file mode 100644 index 0000000000..ffc7b13687 --- /dev/null +++ b/modules/client_bottommenu/calendar.otui @@ -0,0 +1,135 @@ +CalendarGrid < MiniQtWindow + size: 780 575 + + Label + !text: tr('Event Schedule') + font: verdana-11px-antialised + text-offset: 0 2 + text-align: top + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + opacity: 0.5 + + BordedMiniWidget + id: calendarWidget + size: 754 433 + margin-top: 59 + anchors.top: parent.top + anchors.horizontalCenter: parent.horizontalCenter + + CalendarWeekDays + id: row1 + &weekName: tr('Monday') + &disableLeftBright: true + anchors.top: parent.top + anchors.left: parent.left + margin-left: 2 + margin-top: 2 + width: 107 + + CalendarWeekDays + id: row2 + &weekName: tr('Tuesday') + anchors.top: prev.top + anchors.left: prev.right + margin-left: 1 + width: 107 + + CalendarWeekDays + id: row3 + &weekName: tr('Wednesday') + anchors.top: prev.top + anchors.left: prev.right + margin-left: 1 + width: 107 + + CalendarWeekDays + id: row4 + &weekName: tr('Thursday') + anchors.top: prev.top + anchors.left: prev.right + margin-left: 1 + width: 107 + + CalendarWeekDays + id: row5 + &weekName: tr('Friday') + anchors.top: prev.top + anchors.left: prev.right + margin-left: 1 + width: 107 + + CalendarWeekDays + id: row6 + &weekName: tr('Saturday') + anchors.top: prev.top + anchors.left: prev.right + margin-left: 1 + width: 107 + + CalendarWeekDays + id: row0 + &weekName: tr('Sunday') + anchors.top: prev.top + anchors.left: prev.right + margin-left: 1 + width: 107 + + Label + id: calendarCurrentMonth + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + !text: tr('September 2023') + margin-top: 28 + height: 16 + text-align: center + + PreviousQtButton + id: calendarPrevButton + anchors.verticalCenter: calendarCurrentMonth.verticalCenter + anchors.right: calendarCurrentMonth.left + margin-right: 10 + @onClick: modules.client_bottommenu.onClickOnPreviousCalendar() + + NextQtButton + id: calendarNextButton + anchors.verticalCenter: calendarCurrentMonth.verticalCenter + anchors.left: calendarCurrentMonth.right + margin-left: 10 + @onClick: modules.client_bottommenu.onClickOnNextCalendar() + + Label + id: calendarCurrentDate + anchors.right: parent.right + anchors.verticalCenter: calendarCurrentMonth.verticalCenter + !text: '2023-11-23, 11:23 CET' + margin-right: 16 + height: 16 + text-align: right + + Label + anchors.left: calendarWidget.left + anchors.top: calendarWidget.bottom + !text: tr('* Event starts/ends at server save of this day.') + margin-top: 10 + height: 16 + text-align: left + opacity: 0.75 + + UIWidget + anchors.left: calendarWidget.left + anchors.right: calendarWidget.right + anchors.top: prev.bottom + margin-top: 10 + height: 1 + image-source: /images/ui/horizontal_line_bright + + QtButton + !text: tr('Close') + anchors.right: calendarWidget.right + anchors.top: prev.bottom + margin-top: 10 + width: 43 + @onClick: modules.client_bottommenu.onClickCloseCalendar() diff --git a/modules/client_bottommenu/images/boost_monster1.png b/modules/client_bottommenu/images/boost_monster1.png new file mode 100644 index 0000000000000000000000000000000000000000..3f86fe48967787ffc9d3afb0741dd9a0df196ecb GIT binary patch literal 4329 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 yCmwt9iDi_0M&+JZ8=C<(Oc6%29 literal 0 HcmV?d00001 diff --git a/modules/client_entergame/characterlist.lua b/modules/client_entergame/characterlist.lua index 18ff46c359..b3833f8e64 100644 --- a/modules/client_entergame/characterlist.lua +++ b/modules/client_entergame/characterlist.lua @@ -468,3 +468,26 @@ function CharacterList.cancelWait() CharacterList.destroyLoadBox() CharacterList.showAgain() end + +function CharacterList.updateCharactersAppearances(showOutfits) + if showOutfitsCheckbox and showOutfits ~= showOutfitsCheckbox:isChecked() then + showOutfitsCheckbox:setChecked(showOutfits) + end + + if not(characterList) or #(characterList:getChildren()) == 0 then + return + end + + for _, widget in ipairs(characterList:getChildren()) do + if not widget.characterInfo then + break + end + + if not(widget.creature) or not(widget.creatureBorder) then + widget.creature = widget:recursiveGetChildById('creature') + widget.creatureBorder = widget.creature:getParent() + end + + CharacterList.updateCharactersAppearance(widget, widget.characterInfo, showOutfits) + end +end \ No newline at end of file diff --git a/modules/client_entergame/entergame.lua b/modules/client_entergame/entergame.lua index 7affb151f6..45691a2240 100644 --- a/modules/client_entergame/entergame.lua +++ b/modules/client_entergame/entergame.lua @@ -4,7 +4,6 @@ EnterGame = {} local loadBox local enterGame local motdWindow -local motdButton local enterGameButton local clientBox local protocolLogin @@ -12,258 +11,455 @@ local motdEnabled = true -- private functions local function onError(protocol, message, errorCode) - if loadBox then - loadBox:destroy() - loadBox = nil - end + if loadBox then + loadBox:destroy() + loadBox = nil + end - if not errorCode then - EnterGame.clearAccountFields() - end + if not errorCode then + EnterGame.clearAccountFields() + end - local errorBox = displayErrorBox(tr('Login Error'), message) - connect(errorBox, { - onOk = EnterGame.show - }) + local errorBox = displayErrorBox(tr('Login Error'), message) + connect(errorBox, { + onOk = EnterGame.show + }) end local function onMotd(protocol, motd) - G.motdNumber = tonumber(motd:sub(0, motd:find('\n'))) - G.motdMessage = motd:sub(motd:find('\n') + 1, #motd) - if motdEnabled then - motdButton:show() - end + G.motdNumber = tonumber(motd:sub(0, motd:find('\n'))) + G.motdMessage = motd:sub(motd:find('\n') + 1, #motd) end local function onSessionKey(protocol, sessionKey) - G.sessionKey = sessionKey + G.sessionKey = sessionKey end local function onCharacterList(protocol, characters, account, otui) - local httpLogin = enterGame:getChildById('httpLoginBox'):isChecked() + local httpLogin = enterGame:getChildById('httpLoginBox'):isChecked() - -- Try add server to the server list - ServerList.add(G.host, G.port, g_game.getClientVersion(), httpLogin) + -- Try add server to the server list + ServerList.add(G.host, G.port, g_game.getClientVersion(), httpLogin) - -- Save 'Stay logged in' setting - g_settings.set('staylogged', enterGame:getChildById('stayLoggedBox'):isChecked()) - g_settings.set('httpLogin', httpLogin) + -- Save 'Stay logged in' setting + g_settings.set('staylogged', enterGame:getChildById('stayLoggedBox'):isChecked()) + g_settings.set('httpLogin', httpLogin) - if enterGame:getChildById('rememberPasswordBox'):isChecked() then - local account = g_crypt.encrypt(G.account) - local password = g_crypt.encrypt(G.password) + if enterGame:getChildById('rememberEmailBox'):isChecked() then + local account = g_crypt.encrypt(G.account) + local password = g_crypt.encrypt(G.password) - g_settings.set('account', account) - g_settings.set('password', password) + g_settings.set('account', account) + g_settings.set('password', password) - ServerList.setServerAccount(G.host, account) - ServerList.setServerPassword(G.host, password) + ServerList.setServerAccount(G.host, account) + ServerList.setServerPassword(G.host, password) - g_settings.set('autologin', enterGame:getChildById('autoLoginBox'):isChecked()) - else - -- reset server list account/password - ServerList.setServerAccount(G.host, '') - ServerList.setServerPassword(G.host, '') + g_settings.set('autologin', enterGame:getChildById('autoLoginBox'):isChecked()) + else + -- reset server list account/password + ServerList.setServerAccount(G.host, '') + ServerList.setServerPassword(G.host, '') - EnterGame.clearAccountFields() - end + EnterGame.clearAccountFields() + end - loadBox:destroy() - loadBox = nil + if loadBox then + loadBox:destroy() + loadBox = nil + end - for _, characterInfo in pairs(characters) do - if characterInfo.previewState and characterInfo.previewState ~= PreviewState.Default then - characterInfo.worldName = characterInfo.worldName .. ', Preview' + for _, characterInfo in pairs(characters) do + if characterInfo.previewState and characterInfo.previewState ~= PreviewState.Default then + characterInfo.worldName = characterInfo.worldName .. ', Preview' + end end - end - CharacterList.create(characters, account, otui) - CharacterList.show() + CharacterList.create(characters, account, otui) + CharacterList.show() - if motdEnabled then - local lastMotdNumber = g_settings.getNumber('motd') - if G.motdNumber and G.motdNumber ~= lastMotdNumber then - g_settings.set('motd', G.motdNumber) - motdWindow = displayInfoBox(tr('Message of the day'), G.motdMessage) - connect(motdWindow, { - onOk = function() - CharacterList.show() - motdWindow = nil + if motdEnabled then + local lastMotdNumber = g_settings.getNumber('motd') + if G.motdNumber and G.motdNumber ~= lastMotdNumber then + g_settings.set('motd', G.motdNumber) + motdWindow = displayInfoBox(tr('Message of the day'), G.motdMessage) + connect(motdWindow, { + onOk = function() + CharacterList.show() + motdWindow = nil + end + }) + CharacterList.hide() end - }) - CharacterList.hide() end - end end local function onUpdateNeeded(protocol, signature) - loadBox:destroy() - loadBox = nil - - if EnterGame.updateFunc then - local continueFunc = EnterGame.show - local cancelFunc = EnterGame.show - EnterGame.updateFunc(signature, continueFunc, cancelFunc) - else - local errorBox = displayErrorBox(tr('Update needed'), tr('Your client needs updating, try redownloading it.')) - connect(errorBox, { - onOk = EnterGame.show - }) - end + if loadBox then + loadBox:destroy() + loadBox = nil + end + + if EnterGame.updateFunc then + local continueFunc = EnterGame.show + local cancelFunc = EnterGame.show + EnterGame.updateFunc(signature, continueFunc, cancelFunc) + else + local errorBox = displayErrorBox(tr('Update needed'), tr('Your client needs updating, try redownloading it.')) + connect(errorBox, { + onOk = EnterGame.show + }) + end +end + +local function updateLabelText() + if enterGame:getChildById('clientComboBox') and tonumber(enterGame:getChildById('clientComboBox'):getText()) > 1080 then + enterGame:setText("Journey Onwards") + enterGame:getChildById('emailLabel'):setText("Email:") + enterGame:getChildById('rememberEmailBox'):setText("Remember Email:") + else + enterGame:setText("Enter Game") + enterGame:getChildById('emailLabel'):setText("Acc Name:") + enterGame:getChildById('rememberEmailBox'):setText("Remember password:") + end end -- public functions function EnterGame.init() - enterGame = g_ui.displayUI('entergame') - enterGameButton = modules.client_topmenu.addLeftButton('enterGameButton', tr('Login') .. ' (Ctrl + G)', - '/images/topbuttons/login', EnterGame.openWindow) - motdButton = modules.client_topmenu.addLeftButton('motdButton', tr('Message of the day'), '/images/topbuttons/motd', - EnterGame.displayMotd) - motdButton:hide() - g_keyboard.bindKeyDown('Ctrl+G', EnterGame.openWindow) - - if motdEnabled and G.motdNumber then - motdButton:show() - end - - local account = g_settings.get('account') - local password = g_settings.get('password') - local host = g_settings.get('host') - local port = g_settings.get('port') - local stayLogged = g_settings.getBoolean('staylogged') - local autologin = g_settings.getBoolean('autologin') - local httpLogin = g_settings.getBoolean('httpLogin') - local clientVersion = g_settings.getInteger('client-version') - if clientVersion == 0 then - clientVersion = 1074 - end - - if port == nil or port == 0 then - port = 7171 - end - - EnterGame.setAccountName(account) - EnterGame.setPassword(password) - - enterGame:getChildById('serverHostTextEdit'):setText(host) - enterGame:getChildById('serverPortTextEdit'):setText(port) - enterGame:getChildById('autoLoginBox'):setChecked(autologin) - enterGame:getChildById('stayLoggedBox'):setChecked(stayLogged) - enterGame:getChildById('httpLoginBox'):setChecked(httpLogin) - - local installedClients = {} - local installed_qty = 0 - for _, dirItem in ipairs(g_resources.listDirectoryFiles('/data/things/')) do - if tonumber(dirItem) ~= nil then - installedClients[dirItem] = true - installed_qty = installed_qty + 1 - end - end - clientBox = enterGame:getChildById('clientComboBox') - for _, proto in pairs(g_game.getSupportedClients()) do - local proto_str = tostring(proto) - if installedClients[proto_str] or installed_qty == 0 then - installedClients[proto_str] = nil - clientBox:addOption(proto) - end - end - for proto_str, status in pairs(installedClients) do - if status == true then - print(string.format('Warning: %s recognized as an installed client, but not supported.', proto_str)) - end - end - clientBox:setCurrentOption(clientVersion) - - EnterGame.toggleAuthenticatorToken(clientVersion, true) - EnterGame.toggleStayLoggedBox(clientVersion, true) - connect(clientBox, { - onOptionChange = EnterGame.onClientVersionChange - }) - - enterGame:hide() - - if g_app.isRunning() and not g_game.isOnline() then - enterGame:show() - end + enterGame = g_ui.displayUI('entergame') + g_keyboard.bindKeyDown('Ctrl+G', EnterGame.openWindow) + + local account = g_settings.get('account') + local password = g_settings.get('password') + local host = g_settings.get('host') + local port = g_settings.get('port') + local stayLogged = g_settings.getBoolean('staylogged') + local autologin = g_settings.getBoolean('autologin') + local httpLogin = g_settings.getBoolean('httpLogin') + local clientVersion = g_settings.getInteger('client-version') + + if not clientVersion or clientVersion == 0 then + clientVersion = 860 + end + + if not port or port == 0 then + port = 7171 + end + + EnterGame.setAccountName(account) + EnterGame.setPassword(password) + + enterGame:getChildById('serverHostTextEdit'):setText(host) + enterGame:getChildById('serverPortTextEdit'):setText(port) + enterGame:getChildById('autoLoginBox'):setChecked(autologin) + enterGame:getChildById('stayLoggedBox'):setChecked(stayLogged) + enterGame:getChildById('httpLoginBox'):setChecked(httpLogin) + + local installedClients = {} + local amountInstalledClients = 0 + for _, dirItem in ipairs(g_resources.listDirectoryFiles('/data/things/')) do + if tonumber(dirItem) then + installedClients[dirItem] = true + amountInstalledClients = amountInstalledClients + 1 + end + end + + clientBox = enterGame:getChildById('clientComboBox') + + for _, proto in pairs(g_game.getSupportedClients()) do + local protoStr = tostring(proto) + if installedClients[protoStr] or amountInstalledClients == 0 then + installedClients[protoStr] = nil + clientBox:addOption(proto) + end + end + + for protoStr, status in pairs(installedClients) do + if status then + print(string.format('Warning: %s recognized as an installed client, but not supported.', protoStr)) + end + end + + clientBox:setCurrentOption(clientVersion) + + connect(clientBox, { + onOptionChange = EnterGame.onClientVersionChange + }) + + if Servers_init then + if table.size(Servers_init) == 1 then + local hostInit, valuesInit = next(Servers_init) + EnterGame.setUniqueServer(hostInit, valuesInit.port, valuesInit.protocol) + EnterGame.setHttpLogin(valuesInit.httpLogin) + elseif not host or host == "" then + local hostInit, valuesInit = next(Servers_init) + EnterGame.setDefaultServer(hostInit, valuesInit.port, valuesInit.protocol) + EnterGame.setHttpLogin(valuesInit.httpLogin) + end + else + EnterGame.toggleAuthenticatorToken(clientVersion, true) + EnterGame.toggleStayLoggedBox(clientVersion, true) + end + + updateLabelText() + + enterGame:hide() + + connect(g_game, { + onGameStart = EnterGame.hidePanels + }) + + connect(g_game, { + onGameEnd = EnterGame.showPanels + }) + + if g_app.isRunning() and not g_game.isOnline() then + enterGame:show() + end +end + +function EnterGame.hidePanels() + modules.client_bottommenu.hide() + modules.client_topmenu.toggle() +end + +function EnterGame.showPanels() + modules.client_bottommenu.show() + modules.client_topmenu.toggle() end function EnterGame.firstShow() - EnterGame.show() - - local account = g_crypt.decrypt(g_settings.get('account')) - local password = g_crypt.decrypt(g_settings.get('password')) - local host = g_settings.get('host') - local autologin = g_settings.getBoolean('autologin') - if #host > 0 and #password > 0 and #account > 0 and autologin then - addEvent(function() - if not g_settings.getBoolean('autologin') then - return - end - EnterGame.doLogin() - end) - end + EnterGame.show() + + local account = g_crypt.decrypt(g_settings.get('account')) + local password = g_crypt.decrypt(g_settings.get('password')) + local host = g_settings.get('host') + local autologin = g_settings.getBoolean('autologin') + if #host > 0 and #password > 0 and #account > 0 and autologin then + addEvent(function() + if not g_settings.getBoolean('autologin') then + return + end + EnterGame.doLogin() + end) + end + + if Services and Services.status then + EnterGame.postCacheInfo() + EnterGame.postEventScheduler() + EnterGame.postShowOff() + EnterGame.postShowCreatureBoost() + end end function EnterGame.terminate() - g_keyboard.unbindKeyDown('Ctrl+G') - disconnect(clientBox, { - onOptionChange = EnterGame.onClientVersionChange - }) - enterGame:destroy() - enterGame = nil - enterGameButton:destroy() - enterGameButton = nil - clientBox = nil - if motdWindow then - motdWindow:destroy() - motdWindow = nil - end - if motdButton then - motdButton:destroy() - motdButton = nil - end - if loadBox then - loadBox:destroy() - loadBox = nil - end - if protocolLogin then - protocolLogin:cancelLogin() - protocolLogin = nil - end - EnterGame = nil + g_keyboard.unbindKeyDown('Ctrl+G') + + disconnect(clientBox, { + onOptionChange = EnterGame.onClientVersionChange + }) + disconnect(g_game, { + onGameStart = EnterGame.hidePanels + }) + disconnect(g_game, { + onGameEnd = EnterGame.showPanels + }) + + if enterGame then + enterGame:destroy() + enterGame = nil + end + + if clientBox then + clientBox = nil + end + + if motdWindow then + motdWindow:destroy() + motdWindow = nil + end + + if loadBox then + loadBox:destroy() + loadBox = nil + end + + if protocolLogin then + protocolLogin:cancelLogin() + protocolLogin = nil + end + + EnterGame = nil +end + +function EnterGame.postCacheInfo() + local onRecvInfo = function(message, err) + + if err then + -- onError(nil, 'Bad Request. Game_entergame postCacheInfo1 ', 400) + g_logger.warning("[Webscraping] " .. "Bad Request. Game_entergame postCacheInfo1") + return + end + + local _, bodyStart = message:find('{') + local _, bodyEnd = message:find('.*}') + if not bodyStart or not bodyEnd then + g_logger.warning("[Webscraping] " .. "Bad Request.Game_entergame postCacheInfo2") + -- onError(nil, 'Bad Request.Game_entergame postCacheInfo2', 400) + return + end + + local response = json.decode(message:sub(bodyStart, bodyEnd)) + if response.errorMessage then + g_logger.warning("[Webscraping] " .. response.errorMessage, response.errorCode) + -- onError(nil, response.errorMessage, response.errorCode) + return + end + + modules.client_topmenu.setPlayersOnline(response.playersonline) + modules.client_topmenu.setDiscordStreams(response.discord_online) + modules.client_topmenu.setYoutubeStreams(response.gamingyoutubestreams) + modules.client_topmenu.setYoutubeViewers(response.gamingyoutubeviewer) + modules.client_topmenu.setLinkYoutube(response.youtube_link) + modules.client_topmenu.setLinkDiscord(response.discord_link) + + end + + HTTP.post(Services.status, json.encode({ + type = 'cacheinfo' + }), onRecvInfo, false) +end + +function EnterGame.postEventScheduler() + local onRecvInfo = function(message, err) + if err then + -- onError(nil, 'Bad Request. Game_entergame postEventScheduler1', 400) + g_logger.warning("[Webscraping] " .. "Bad Request.Game_entergame postEventScheduler1") + return + end + + local _, bodyStart = message:find('{') + local _, bodyEnd = message:find('.*}') + if not bodyStart or not bodyEnd then + -- onError(nil, 'Bad Request. Game_entergame postEventScheduler2', 400) + g_logger.warning("[Webscraping] " .. "Bad Request.Game_entergame postEventScheduler2") + return + end + + local response = json.decode(message:sub(bodyStart, bodyEnd)) + if response.errorMessage then + -- onError(nil, response.errorMessage, response.errorCode) + g_logger.warning("[Webscraping] " .. "response.errorMessage,response.errorCode") + return + end + + modules.client_bottommenu.setEventsSchedulerTimestamp(response.lastupdatetimestamp) + modules.client_bottommenu.setEventsSchedulerCalender(response.eventlist) + end + + HTTP.post(Services.status, json.encode({ + type = 'eventschedule' + }), onRecvInfo, false) +end + +function EnterGame.postShowOff() + local onRecvInfo = function(message, err) + if err then + -- onError(nil, 'Bad Request. 1 Game_entergame postShowOff', 400) + g_logger.warning("[Webscraping] " .. "Bad Request.Game_entergame postShowOff") + return + end + + local _, bodyStart = message:find('{') + local _, bodyEnd = message:find('.*}') + if not bodyStart or not bodyEnd then + -- onError(nil, 'Bad Request. 2 Game_entergame postShowOff', 400) + g_logger.warning("[Webscraping] " .. "Bad Request.Game_entergame postShowOff") + return + end + + local response = json.decode(message:sub(bodyStart, bodyEnd)) + if response.errorMessage then + -- onError(nil, response.errorMessage, response.errorCode) + g_logger.warning("[Webscraping] " .. response.errorMessage, response.errorCode) + return + end + + modules.client_bottommenu.setShowOffData(response) + end + + HTTP.post(Services.status, json.encode({ + type = 'showoff' + }), onRecvInfo, false) +end + +function EnterGame.postShowCreatureBoost() + local onRecvInfo = function(message, err) + if err then + -- onError(nil, 'Bad Request. 1 Game_entergame postShowCreatureBoost', 400) + g_logger.warning("[Webscraping] " .. "Bad Request.Game_entergame postShowCreatureBoost1") + return + end + + local _, bodyStart = message:find('{') + local _, bodyEnd = message:find('.*}') + if not bodyStart or not bodyEnd then + g_logger.warning("[Webscraping] " .. "Bad Request.Game_entergame postShowCreatureBoost2") + -- onError(nil, 'Bad Request. 2 Game_entergame postShowCreatureBoost', 400) + return + end + + local response = json.decode(message:sub(bodyStart, bodyEnd)) + if response.errorMessage then + g_logger.warning("[Webscraping] " .. response.errorMessage, response.errorCode) + -- onError(nil, response.errorMessage, response.errorCode) + return + end + + modules.client_bottommenu.Booster_creature(response) + end + + HTTP.post(Services.status, json.encode({ + type = 'Creatureboost' + }), onRecvInfo, false) end function EnterGame.show() - if loadBox then - return - end - enterGame:show() - enterGame:raise() - enterGame:focus() + if g_game.isOnline() or CharacterList.isVisible() then -- fix login quickly error (http post) + return + end + + if loadBox then + return + end + + enterGame:show() + enterGame:raise() + enterGame:focus() end function EnterGame.hide() - enterGame:hide() + enterGame:hide() end function EnterGame.openWindow() - if g_game.isOnline() then - CharacterList.show() - elseif not g_game.isLogging() and not CharacterList.isVisible() then - EnterGame.show() - end + if g_game.isOnline() then + CharacterList.show() + elseif not g_game.isLogging() and not CharacterList.isVisible() then + EnterGame.show() + end end function EnterGame.setAccountName(account) - local account = g_crypt.decrypt(account) - enterGame:getChildById('accountNameTextEdit'):setText(account) - enterGame:getChildById('accountNameTextEdit'):setCursorPos(-1) - enterGame:getChildById('rememberPasswordBox'):setChecked(#account > 0) + local account = g_crypt.decrypt(account) + enterGame:getChildById('accountNameTextEdit'):setText(account) + enterGame:getChildById('accountNameTextEdit'):setCursorPos(-1) + enterGame:getChildById('rememberEmailBox'):setChecked(#account > 0) end function EnterGame.setPassword(password) - local password = g_crypt.decrypt(password) - enterGame:getChildById('accountPasswordTextEdit'):setText(password) + local password = g_crypt.decrypt(password) + enterGame:getChildById('accountPasswordTextEdit'):setText(password) end function EnterGame.setHttpLogin(httpLogin) @@ -275,348 +471,362 @@ function EnterGame.setHttpLogin(httpLogin) end function EnterGame.clearAccountFields() - enterGame:getChildById('accountNameTextEdit'):clearText() - enterGame:getChildById('accountPasswordTextEdit'):clearText() - enterGame:getChildById('authenticatorTokenTextEdit'):clearText() - enterGame:getChildById('accountNameTextEdit'):focus() - g_settings.remove('account') - g_settings.remove('password') + enterGame:getChildById('accountNameTextEdit'):clearText() + enterGame:getChildById('accountPasswordTextEdit'):clearText() + enterGame:getChildById('authenticatorTokenTextEdit'):clearText() + enterGame:getChildById('accountNameTextEdit'):focus() + g_settings.remove('account') + g_settings.remove('password') end function EnterGame.toggleAuthenticatorToken(clientVersion, init) - local enabled = (clientVersion >= 1072) - if enabled == enterGame.authenticatorEnabled then - return - end - - enterGame:getChildById('authenticatorTokenLabel'):setOn(enabled) - enterGame:getChildById('authenticatorTokenTextEdit'):setOn(enabled) - - local newHeight = enterGame:getHeight() - local newY = enterGame:getY() - if enabled then - newY = newY - enterGame.authenticatorHeight - newHeight = newHeight + enterGame.authenticatorHeight - else - newY = newY + enterGame.authenticatorHeight - newHeight = newHeight - enterGame.authenticatorHeight - end - - if not init then - enterGame:breakAnchors() - enterGame:setY(newY) - enterGame:bindRectToParent() - end - enterGame:setHeight(newHeight) - - enterGame.authenticatorEnabled = enabled + if not enterGame.disableToken then + return + end + + local enabled = (clientVersion >= 1072) + if enabled == enterGame.authenticatorEnabled then + return + end + + enterGame:getChildById('authenticatorTokenLabel'):setOn(enabled) + enterGame:getChildById('authenticatorTokenTextEdit'):setOn(enabled) + + local newHeight = enterGame:getHeight() + local newY = enterGame:getY() + if enabled then + newY = newY - enterGame.authenticatorHeight + newHeight = newHeight + enterGame.authenticatorHeight + else + newY = newY + enterGame.authenticatorHeight + newHeight = newHeight - enterGame.authenticatorHeight + end + + if not init then + enterGame:breakAnchors() + enterGame:setY(newY) + enterGame:bindRectToParent() + end + + enterGame:setHeight(newHeight) + enterGame.authenticatorEnabled = enabled end function EnterGame.toggleStayLoggedBox(clientVersion, init) - local enabled = (clientVersion >= 1074) - if enabled == enterGame.stayLoggedBoxEnabled then - return - end + if not enterGame.disableToken then + return + end + local enabled = (clientVersion >= 1074) + if enabled == enterGame.stayLoggedBoxEnabled then + return + end - enterGame:getChildById('stayLoggedBox'):setOn(enabled) + enterGame:getChildById('stayLoggedBox'):setOn(enabled) - local newHeight = enterGame:getHeight() - local newY = enterGame:getY() - if enabled then - newY = newY - enterGame.stayLoggedBoxHeight - newHeight = newHeight + enterGame.stayLoggedBoxHeight - else - newY = newY + enterGame.stayLoggedBoxHeight - newHeight = newHeight - enterGame.stayLoggedBoxHeight - end + local newHeight = enterGame:getHeight() + local newY = enterGame:getY() + if enabled then + newY = newY - enterGame.stayLoggedBoxHeight + newHeight = newHeight + enterGame.stayLoggedBoxHeight + else + newY = newY + enterGame.stayLoggedBoxHeight + newHeight = newHeight - enterGame.stayLoggedBoxHeight + end - if not init then - enterGame:breakAnchors() - enterGame:setY(newY) - enterGame:bindRectToParent() - end - enterGame:setHeight(newHeight) + if not init then + enterGame:breakAnchors() + enterGame:setY(newY) + enterGame:bindRectToParent() + end - enterGame.stayLoggedBoxEnabled = enabled + enterGame:setHeight(newHeight) + enterGame.stayLoggedBoxEnabled = enabled end function EnterGame.onClientVersionChange(comboBox, text, data) - local clientVersion = tonumber(text) - EnterGame.toggleAuthenticatorToken(clientVersion) - EnterGame.toggleStayLoggedBox(clientVersion) + local clientVersion = tonumber(text) + EnterGame.toggleAuthenticatorToken(clientVersion) + EnterGame.toggleStayLoggedBox(clientVersion) + updateLabelText() end function EnterGame.tryHttpLogin(clientVersion, httpLogin) - g_game.setClientVersion(clientVersion) - g_game.setProtocolVersion(g_game.getClientProtocolVersion(clientVersion)) - g_game.chooseRsa(G.host) - if modules.game_things.isLoaded() then - else - if loadBox then - loadBox:destroy() - loadBox = nil + g_game.setClientVersion(clientVersion) + g_game.setProtocolVersion(g_game.getClientProtocolVersion(clientVersion)) + g_game.chooseRsa(G.host) + + if not modules.game_things.isLoaded() then + if loadBox then + loadBox:destroy() + loadBox = nil + end + return EnterGame.show() end - EnterGame.show() - end - local host, path = G.host:match("([^/]+)/([^/].*)") - local url = G.host + local host, path = G.host:match("([^/]+)/([^/].*)") + local url = G.host - if G.port == nil then - isHttps, _ = string.find(host, "https") - if isHttps ~= nil then - G.port = 443 - else -- http - G.port = 80 + if not G.port then + local isHttps, _ = string.find(host, "https") + if not isHttps then + G.port = 443 + else -- http + G.port = 80 + end end - end - if path == nil then - path = "" - else - path = '/' .. path - end + if not path then + path = "" + else + path = '/' .. path + end - if not host then - loadBox = displayCancelBox(tr('Please wait'), tr('ERROR , try adding \n- ip/login.php \n- Enable HTTP login')) - else - loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...\nServer: [%s]', - host .. ":" .. tostring(G.port) .. path)) - end - - connect(loadBox, { - onCancel = function(msgbox) - loadBox = nil - G.requestId = 0 - EnterGame.show() + if not host then + loadBox = displayCancelBox(tr('Please wait'), tr('ERROR , try adding \n- ip/login.php \n- Enable HTTP login')) + else + loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...\nServer: [%s]', + host .. ":" .. tostring(G.port) .. path)) end - }) - math.randomseed(os.time()) - G.requestId = math.random(1) + connect(loadBox, { + onCancel = function(msgbox) + loadBox = nil + G.requestId = 0 + EnterGame.show() + end + }) + + math.randomseed(os.time()) + G.requestId = math.random(1) - local http = LoginHttp.create() - http:httpLogin(host, path, G.port, G.account, G.password, G.requestId, httpLogin) + local http = LoginHttp.create() + http:httpLogin(host, path, G.port, G.account, G.password, G.requestId, httpLogin) end function printTable(t) - for k, v in pairs(t) do - if type(v) == "table" then - print(string.format("%q: {", k)) - printTable(v) - print("}") - else - print(string.format("%q:", k) .. tostring(v) .. ",") + for k, v in pairs(t) do + if type(v) == "table" then + print(string.format("%q: {", k)) + printTable(v) + print("}") + else + print(string.format("%q:", k) .. tostring(v) .. ",") + end end - end end function EnterGame.loginSuccess(requestId, jsonSession, jsonWorlds, jsonCharacters) - if (G.requestId ~= requestId) then - return - end - - local worlds = {} - for _, world in ipairs(json.decode(jsonWorlds)) do - worlds[world.id] = { - name = world.name, - ip = world.externaladdress, - port = world.externalport, - previewState = world.previewstate == 1 - } - end - - local characters = {} - for index, character in ipairs(json.decode(jsonCharacters)) do - local world = worlds[character.worldid] - characters[index] = { - name = character.name, - level = character.level, - main = character.ismaincharacter, - dailyreward = character.dailyrewardstate, - hidden = character.ishidden, - vocation = character.vocation, - outfitid = character.outfitid, - headcolor = character.headcolor, - torsocolor = character.torsocolor, - legscolor = character.legscolor, - detailcolor = character.detailcolor, - addonsflags = character.addonsflags, - worldName = world.name, - worldIp = world.ip, - worldPort = world.port, - previewState = world.previewstate - } - end + if G.requestId ~= requestId then + return + end - local session = json.decode(jsonSession) + local worlds = {} + for _, world in ipairs(json.decode(jsonWorlds)) do + worlds[world.id] = { + name = world.name, + ip = world.externaladdress, + port = world.externalport, + previewState = world.previewstate == 1 + } + end + + local characters = {} + for index, character in ipairs(json.decode(jsonCharacters)) do + local world = worlds[character.worldid] + characters[index] = { + name = character.name, + level = character.level, + main = character.ismaincharacter, + dailyreward = character.dailyrewardstate, + hidden = character.ishidden, + vocation = character.vocation, + outfitid = character.outfitid, + headcolor = character.headcolor, + torsocolor = character.torsocolor, + legscolor = character.legscolor, + detailcolor = character.detailcolor, + addonsflags = character.addonsflags, + worldName = world.name, + worldIp = world.ip, + worldPort = world.port, + previewState = world.previewstate + } + end - local premiumUntil = tonumber(session.premiumuntil) + local session = json.decode(jsonSession) - local account = { - status = '', - premDays = math.floor((premiumUntil - os.time()) / 86400), - subStatus = premiumUntil > os.time() and SubscriptionStatus.Premium or SubscriptionStatus.Free - } + local premiumUntil = tonumber(session.premiumuntil) - -- set session key - G.sessionKey = session.sessionkey + local account = { + status = '', + premDays = math.floor((premiumUntil - os.time()) / 86400), + subStatus = premiumUntil > os.time() and SubscriptionStatus.Premium or SubscriptionStatus.Free + } - onCharacterList(nil, characters, account) + -- set session key + G.sessionKey = session.sessionkey + + onCharacterList(nil, characters, account) end function EnterGame.loginFailed(requestId, msg, result) - if (G.requestId ~= requestId) then - return - end - onError(nil, msg, result) + if G.requestId ~= requestId then + return + end + onError(nil, msg, result) end function EnterGame.doLogin() - G.account = enterGame:getChildById('accountNameTextEdit'):getText() - G.password = enterGame:getChildById('accountPasswordTextEdit'):getText() - G.authenticatorToken = enterGame:getChildById('authenticatorTokenTextEdit'):getText() - G.stayLogged = enterGame:getChildById('stayLoggedBox'):isChecked() - G.host = enterGame:getChildById('serverHostTextEdit'):getText() - G.port = tonumber(enterGame:getChildById('serverPortTextEdit'):getText()) - local clientVersion = tonumber(clientBox:getText()) - local httpLogin = enterGame:getChildById('httpLoginBox'):isChecked() - EnterGame.hide() - - if g_game.isOnline() then - local errorBox = displayErrorBox(tr('Login Error'), tr('Cannot login while already in game.')) - connect(errorBox, { - onOk = EnterGame.show - }) - return - end - - g_settings.set('host', G.host) - g_settings.set('port', G.port) - g_settings.set('client-version', clientVersion) - - if clientVersion >= 1281 and G.port ~= 7171 then - EnterGame.tryHttpLogin(clientVersion, httpLogin) - else - protocolLogin = ProtocolLogin.create() - protocolLogin.onLoginError = onError - protocolLogin.onMotd = onMotd - protocolLogin.onSessionKey = onSessionKey - protocolLogin.onCharacterList = onCharacterList - protocolLogin.onUpdateNeeded = onUpdateNeeded - - loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...')) - - connect(loadBox, { - onCancel = function(msgbox) - loadBox = nil - protocolLogin:cancelLogin() - EnterGame.show() - end - }) + G.account = enterGame:getChildById('accountNameTextEdit'):getText() + G.password = enterGame:getChildById('accountPasswordTextEdit'):getText() + G.authenticatorToken = enterGame:getChildById('authenticatorTokenTextEdit'):getText() + G.stayLogged = enterGame:getChildById('stayLoggedBox'):isChecked() + G.host = enterGame:getChildById('serverHostTextEdit'):getText() + G.port = tonumber(enterGame:getChildById('serverPortTextEdit'):getText()) + local clientVersion = tonumber(clientBox:getText()) + local httpLogin = enterGame:getChildById('httpLoginBox'):isChecked() + EnterGame.hide() + + if g_game.isOnline() then + local errorBox = displayErrorBox(tr('Login Error'), tr('Cannot login while already in game.')) + connect(errorBox, { + onOk = EnterGame.show + }) + return + end - g_game.setClientVersion(clientVersion) - g_game.setProtocolVersion(g_game.getClientProtocolVersion(clientVersion)) - g_game.chooseRsa(G.host) + g_settings.set('host', G.host) + g_settings.set('port', G.port) + g_settings.set('client-version', clientVersion) - if modules.game_things.isLoaded() then - protocolLogin:login(G.host, G.port, G.account, G.password, G.authenticatorToken, G.stayLogged) + if clientVersion >= 1281 and G.port ~= 7171 then + EnterGame.tryHttpLogin(clientVersion, httpLogin) else - loadBox:destroy() - loadBox = nil - EnterGame.show() + protocolLogin = ProtocolLogin.create() + protocolLogin.onLoginError = onError + protocolLogin.onMotd = onMotd + protocolLogin.onSessionKey = onSessionKey + protocolLogin.onCharacterList = onCharacterList + protocolLogin.onUpdateNeeded = onUpdateNeeded + + loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...')) + connect(loadBox, { + onCancel = function(msgbox) + loadBox = nil + protocolLogin:cancelLogin() + EnterGame.show() + end + }) + + g_game.setClientVersion(clientVersion) + g_game.setProtocolVersion(g_game.getClientProtocolVersion(clientVersion)) + g_game.chooseRsa(G.host) + + if modules.game_things.isLoaded() then + protocolLogin:login(G.host, G.port, G.account, G.password, G.authenticatorToken, G.stayLogged) + else + if loadBox then + loadBox:destroy() + loadBox = nil + end + return EnterGame.show() + end end - end end function EnterGame.displayMotd() - if not motdWindow then - motdWindow = displayInfoBox(tr('Message of the day'), G.motdMessage) - motdWindow.onOk = function() - motdWindow = nil + if not motdWindow then + motdWindow = displayInfoBox(tr('Message of the day'), G.motdMessage) + motdWindow.onOk = function() + motdWindow = nil + end end - end end function EnterGame.setDefaultServer(host, port, protocol) - local hostTextEdit = enterGame:getChildById('serverHostTextEdit') - local portTextEdit = enterGame:getChildById('serverPortTextEdit') - local clientLabel = enterGame:getChildById('clientLabel') - local accountTextEdit = enterGame:getChildById('accountNameTextEdit') - local passwordTextEdit = enterGame:getChildById('accountPasswordTextEdit') - local authenticatorTokenTextEdit = enterGame:getChildById('authenticatorTokenTextEdit') - - if hostTextEdit:getText() ~= host then + local hostTextEdit = enterGame:getChildById('serverHostTextEdit') + local portTextEdit = enterGame:getChildById('serverPortTextEdit') + local clientLabel = enterGame:getChildById('clientLabel') + local accountTextEdit = enterGame:getChildById('accountNameTextEdit') + local passwordTextEdit = enterGame:getChildById('accountPasswordTextEdit') + local authenticatorTokenTextEdit = enterGame:getChildById('authenticatorTokenTextEdit') + + if hostTextEdit:getText() ~= host then + hostTextEdit:setText(host) + portTextEdit:setText(port) + clientBox:setCurrentOption(protocol) + accountTextEdit:setText('') + passwordTextEdit:setText('') + authenticatorTokenTextEdit:setText('') + end +end + +function EnterGame.setUniqueServer(host, port, protocol, windowWidth, windowHeight) + local hostTextEdit = enterGame:getChildById('serverHostTextEdit') hostTextEdit:setText(host) + hostTextEdit:setVisible(false) + hostTextEdit:setHeight(0) + + local portTextEdit = enterGame:getChildById('serverPortTextEdit') portTextEdit:setText(port) - clientBox:setCurrentOption(protocol) - accountTextEdit:setText('') - passwordTextEdit:setText('') + portTextEdit:setVisible(false) + portTextEdit:setHeight(0) + + local authenticatorTokenTextEdit = enterGame:getChildById('authenticatorTokenTextEdit') authenticatorTokenTextEdit:setText('') - end -end + authenticatorTokenTextEdit:setOn(false) + local authenticatorTokenLabel = enterGame:getChildById('authenticatorTokenLabel') + authenticatorTokenLabel:setOn(false) -function EnterGame.setUniqueServer(host, port, protocol, windowWidth, windowHeight) - local hostTextEdit = enterGame:getChildById('serverHostTextEdit') - hostTextEdit:setText(host) - hostTextEdit:setVisible(false) - hostTextEdit:setHeight(0) - local portTextEdit = enterGame:getChildById('serverPortTextEdit') - portTextEdit:setText(port) - portTextEdit:setVisible(false) - portTextEdit:setHeight(0) - - local authenticatorTokenTextEdit = enterGame:getChildById('authenticatorTokenTextEdit') - authenticatorTokenTextEdit:setText('') - authenticatorTokenTextEdit:setOn(false) - local authenticatorTokenLabel = enterGame:getChildById('authenticatorTokenLabel') - authenticatorTokenLabel:setOn(false) - - local stayLoggedBox = enterGame:getChildById('stayLoggedBox') - stayLoggedBox:setChecked(false) - stayLoggedBox:setOn(false) - - clientBox:setCurrentOption(protocol) - clientBox:setVisible(false) - clientBox:setHeight(0) - - local serverLabel = enterGame:getChildById('serverLabel') - serverLabel:setVisible(false) - serverLabel:setHeight(0) - local portLabel = enterGame:getChildById('portLabel') - portLabel:setVisible(false) - portLabel:setHeight(0) - local clientLabel = enterGame:getChildById('clientLabel') - clientLabel:setVisible(false) - clientLabel:setHeight(0) - local httpLoginBox = enterGame:getChildById('httpLoginBox') - httpLoginBox:setVisible(false) - httpLoginBox:setHeight(0) - - local serverListButton = enterGame:getChildById('serverListButton') - serverListButton:setVisible(false) - serverListButton:setHeight(0) - serverListButton:setWidth(0) - - local rememberPasswordBox = enterGame:getChildById('rememberPasswordBox') - rememberPasswordBox:setMarginTop(-8) - - if not windowWidth then - windowWidth = 236 - end - enterGame:setWidth(windowWidth) - if not windowHeight then - windowHeight = 210 - end - enterGame:setHeight(windowHeight) + local stayLoggedBox = enterGame:getChildById('stayLoggedBox') + stayLoggedBox:setChecked(false) + stayLoggedBox:setOn(false) + + clientBox:setCurrentOption(tonumber(protocol)) + clientBox:setVisible(false) + clientBox:setHeight(0) + + local serverLabel = enterGame:getChildById('serverLabel') + serverLabel:setVisible(false) + serverLabel:setHeight(0) + + local portLabel = enterGame:getChildById('portLabel') + portLabel:setVisible(false) + portLabel:setHeight(0) + + local clientLabel = enterGame:getChildById('clientLabel') + clientLabel:setVisible(false) + clientLabel:setHeight(0) + + local httpLoginBox = enterGame:getChildById('httpLoginBox') + httpLoginBox:setVisible(false) + httpLoginBox:setHeight(0) + + local serverListButton = enterGame:getChildById('serverListButton') + serverListButton:setVisible(false) + serverListButton:setHeight(0) + serverListButton:setWidth(0) + + local rememberEmailBox = enterGame:getChildById('rememberEmailBox') + rememberEmailBox:setMarginTop(5) + + if not windowWidth then + windowWidth = 380 + end + enterGame:setWidth(windowWidth) + if not windowHeight then + windowHeight = 210 + end + + enterGame:setHeight(windowHeight) + enterGame.disableToken = true end function EnterGame.setServerInfo(message) - local label = enterGame:getChildById('serverInfoLabel') - label:setText(message) + local label = enterGame:getChildById('serverInfoLabel') + label:setText(message) end function EnterGame.disableMotd() - motdEnabled = false - motdButton:hide() + motdEnabled = false end diff --git a/modules/client_entergame/entergame.otui b/modules/client_entergame/entergame.otui index 02453ddf43..9d52ef912c 100644 --- a/modules/client_entergame/entergame.otui +++ b/modules/client_entergame/entergame.otui @@ -2,6 +2,7 @@ EnterGameWindow < MainWindow !text: tr('Enter Game') size: 236 316 + EnterGameButton < Button width: 64 @@ -25,34 +26,86 @@ EnterGameWindow &authenticatorHeight: 44 &stayLoggedBoxEnabled: false &stayLoggedBoxHeight: 24 + &disableToken : false + size: 280 302 @onEnter: EnterGame.doLogin() - MenuLabel - !text: tr('Account name') + + + Label + id: emailLabel + !text: tr('Acc Name:') anchors.left: parent.left anchors.top: parent.top - text-auto-resize: true - PasswordTextEdit + opacity: 0.8 + + + Label + id: passwordLabel + !text: tr('Password:') + anchors.left: emailLabel.left + anchors.top: emailLabel.bottom + margin-top: 10 + opacity: 0.8 + + HiddenTextQtToggleEdit id: accountNameTextEdit - anchors.left: parent.left + anchors.right: accountPasswordTextEdit.right + anchors.verticalCenter: emailLabel.verticalCenter + anchors.left: accountPasswordTextEdit.left + + HiddenTextQtEdit + id: accountPasswordTextEdit anchors.right: parent.right - anchors.top: prev.bottom - margin-top: 2 + anchors.left: passwordLabel.right + anchors.verticalCenter: passwordLabel.verticalCenter + margin-left: 5 - MenuLabel - !text: tr('Password') - anchors.left: prev.left - anchors.top: prev.bottom - margin-top: 8 - text-auto-resize: true + QtCheckBox + id: rememberEmailBox + !text: tr('Remember password') + !tooltip: tr('Remember account and password when starts client') + anchors.left: passwordLabel.left + anchors.right: parent.right + anchors.top: accountPasswordTextEdit.bottom + margin-top: 10 + opacity: 0.8 + @onCheckChange: | + self:getParent():getChildById('autoLoginBox'):setEnabled(self:isChecked()) + self:getParent():getChildById('rememberEmailTip'):setOn(self:isChecked()) - PasswordTextEdit - id: accountPasswordTextEdit - anchors.left: parent.left + UIWidget + id: rememberEmailTip + image-source: /images/icons/show_gui_help_grey + !specialtooltip: 'Be aware that your email address will be stored on your configuration file "config.otml" if you activate this option.' + anchors.right: accountNameTextEdit.right + anchors.verticalCenter: rememberEmailBox.verticalCenter + visible: false + + $on: + visible: true + + $!on: + visible: false + + Label + !text: tr('Forgot password and/or email') + id: Forgot_password_email + font: verdana-11px-monochrome-underline + anchors.left: rememberEmailBox.left anchors.right: parent.right - anchors.top: prev.bottom - margin-top: 2 + anchors.top: rememberEmailBox.bottom + opacity: 0.8 + margin-top: 5 + @onClick: g_platform.openUrl(Services.websites) + @onSetup: | + if Services and Services.websites then + self:setVisible(true) + else + self:setVisible(false) + self:hide() + end MenuLabel id: authenticatorTokenLabel @@ -80,7 +133,7 @@ EnterGameWindow visible: true margin-top: 2 - CheckBox + QtCheckBox id: stayLoggedBox !text: tr('Stay logged during session') anchors.left: parent.left @@ -162,17 +215,7 @@ EnterGameWindow anchors.top: clientComboBox.top margin-left: 3 - CheckBox - id: rememberPasswordBox - !text: tr('Remember password') - !tooltip: tr('Remember account and password when starts client') - anchors.left: parent.left - anchors.right: parent.right - anchors.top: prev.bottom - margin-top: 10 - @onCheckChange: self:getParent():getChildById('autoLoginBox'):setEnabled(self:isChecked()) - - CheckBox + QtCheckBox id: autoLoginBox enabled: false !text: tr('Auto login') @@ -182,7 +225,7 @@ EnterGameWindow anchors.top: prev.bottom margin-top: 2 - CheckBox + QtCheckBox id: httpLoginBox enabled: true !text: tr('Enable HTTP login') @@ -198,13 +241,29 @@ EnterGameWindow anchors.top: prev.bottom margin-top: 6 - EnterGameButton - !text: tr('Ok') + QtButton + !text: tr('Login') anchors.right: parent.right anchors.top: prev.bottom - margin-top: 4 + margin-top: 9 + size: 86 20 @onClick: EnterGame.doLogin() + QtButton + !text: tr('Create New Account') + anchors.left: parent.left + anchors.top: prev.bottom + margin-top: -17 + size: 109 20 + @onClick: g_platform.openUrl(Services.websites) + + @onSetup: | + if Services and Services.websites then + self:setVisible(true) + else + self:setVisible(false) + end + Label id: serverInfoLabel font: verdana-11px-rounded @@ -213,3 +272,4 @@ EnterGameWindow margin-top: 5 color: green text-auto-resize: true + diff --git a/modules/client_options/audio.otui b/modules/client_options/audio.otui index 704f715d2b..9bef2bea53 100644 --- a/modules/client_options/audio.otui +++ b/modules/client_options/audio.otui @@ -1,28 +1,34 @@ Panel - OptionCheckBox - id: enableAudio - !text: tr('Enable audio') - - OptionCheckBox - id: enableMusicSound - !text: tr('Enable music sound') - - Label - id: musicSoundVolumeLabel - !text: tr('Music volume: %d', 100) + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right - anchors.top: prev.bottom - margin-top: 6 - @onSetup: | - local value = modules.client_options.getOption('musicSoundVolume') - self:setText(tr('Music volume: %d', value)) + anchors.top: parent.top + height: 22 - OptionScrollbar - id: musicSoundVolume + OptionCheckBox + id: enableAudio + !text: tr('Enable audio') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 0 - maximum: 100 + margin-top: 7 + height: 44 + + OptionCheckBox + id: enableMusicSound + !text: tr('Enable music sound') + + OptionScaleScroll + id: musicSoundVolume + margin-top: 5 + anchors.top: prev.bottom + anchors.left: parent.left + anchors.right: parent.right + &minimumScrollValue: 1 + &maximumScrollValue: 100 + &scrollSize: 21 + @onSetup: | + local value = modules.client_options.getOption('musicSoundVolume') + self:setText(tr('Music volume: %d', value)) diff --git a/modules/client_options/console.otui b/modules/client_options/console.otui index d20426fd7b..4f57be88c4 100644 --- a/modules/client_options/console.otui +++ b/modules/client_options/console.otui @@ -1,32 +1,157 @@ Panel - OptionCheckBox - id: showInfoMessagesInConsole - !text: tr('Show info messages in console') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + height: 22 - OptionCheckBox - id: showEventMessagesInConsole - !text: tr('Show event messages in console') + OptionCheckBox + id: showInfoMessagesInConsole + !text: tr('Show info messages') - OptionCheckBox - id: showStatusMessagesInConsole - !text: tr('Show status messages in console') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showEventMessagesInConsole + !text: tr('Show event messages') - OptionCheckBox - id: showOthersStatusMessagesInConsole - !text: tr('Show others\' status messages in console') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showStatusMessagesInConsole + !text: tr('Show status messages') - OptionCheckBox - id: showTimestampsInConsole - !text: tr('Show timestamps in console') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showOthersStatusMessagesInConsole + !text: tr('Show others status messages in console') - OptionCheckBox - id: showLevelsInConsole - !text: tr('Show levels in console') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showTimestampsInConsole + !text: tr('Show timestamps') - OptionCheckBox - id: showPrivateMessagesInConsole - !text: tr('Show private messages in console') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showLevelsInConsole + !text: tr('Show levels') - OptionCheckBox - id: showPrivateMessagesOnScreen - !text: tr('Show private messages on screen') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showPrivateMessagesInConsole + !text: tr('Show private messages') + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showPrivateMessagesOnScreen + !text: tr('Show private messages on screen') + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionScaleScroll + id: creatureInformationScale + anchors.fill: parent + &minimumScrollValue: 1 + &maximumScrollValue: 9 + &scrollSize: 21 + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionScaleScroll + id: staticTextScale + anchors.fill: parent + &minimumScrollValue: 1 + &maximumScrollValue: 9 + &scrollSize: 21 + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionScaleScroll + id: animatedTextScale + anchors.fill: parent + &minimumScrollValue: 1 + &maximumScrollValue: 9 + &scrollSize: 21 + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionScaleScroll + id: setEffectAlphaScroll + anchors.fill: parent + &minimumScrollValue: 10 + &maximumScrollValue: 100 + &scrollSize: 21 + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionScaleScroll + id: setMissileAlphaScroll + anchors.fill: parent + &minimumScrollValue: 10 + &maximumScrollValue: 100 + &scrollSize: 21 diff --git a/modules/client_options/control.otui b/modules/client_options/control.otui index 7a5f300213..c789a1f51f 100644 --- a/modules/client_options/control.otui +++ b/modules/client_options/control.otui @@ -1,72 +1,104 @@ Panel - OptionCheckBox - id: classicControl - !text: tr('Classic control') - - OptionCheckBox - id: autoChaseOverride - !text: tr('Allow auto chase override') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + height: 22 - OptionCheckBox - id: moveStack - !text: tr('Move stacks directly') + OptionCheckBox + id: classicControl + !text: tr('Classic control') - OptionCheckBox - id: smartWalk - !text: tr('Enable smart walking') - !tooltip: tr('Will detect when to use diagonal step based on the\nkeys you are pressing') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: autoChaseOverride + !text: tr('Allow auto chase override') - OptionCheckBox - id: preciseControl - !text: tr('Enable precise control') - !tooltip: tr('You will have more precision over the character walking,\nbut it can feel more abrupt or unnatural') - @onCheckChange: g_game.setScheduleLastWalk(not self:isChecked()) + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: moveStack + !text: tr('Move stacks directly') - Label - id: turnDelayLabel - !text: tr('Turn delay: %sms', 30) + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - @onSetup: | - local value = modules.client_options.getOption('turnDelay') - self:setText(tr('Turn delay: %dms', value)) + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: smartWalk + !text: tr('Enable smart walking') + !tooltip: tr('Will detect when to use diagonal step based on the\nkeys you are pressing') - OptionScrollbar - id: turnDelay + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 30 - maximum: 250 + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: preciseControl + !text: tr('Enable precise control') + !tooltip: tr('You will have more precision over the character walking,\nbut it can feel more abrupt or unnatural') + @onCheckChange: g_game.setScheduleLastWalk(not self:isChecked()) - Label - id: hotkeyDelayLabel - !text: tr('Hotkey delay: %dms', 30) + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - @onSetup: | - local value = modules.client_options.getOption('hotkeyDelay') - self:setText(tr('Hotkey delay: %dms', value)) + margin-top: 7 + height: 22 - OptionScrollbar - id: hotkeyDelay + OptionScaleScroll + id: turnDelay + !text: tr('Turn delay: 30ms') + anchors.fill: parent + &minimumScrollValue: 30 + &maximumScrollValue: 250 + &scrollSize: 21 + @onSetup: | + local value = modules.client_options.getOption('turnDelay') + self:setText(tr('Turn delay: %dms', value)) + + SmallReversedQtPanel + id: hotkeyDelay_label anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 30 - maximum: 250 + margin-top: 7 + height: 22 + + OptionScaleScroll + id: hotkeyDelay + !text: tr('Hotkey delay: 30ms') + anchors.fill: parent + &minimumScrollValue: 30 + &maximumScrollValue: 250 + &scrollSize: 21 + @onSetup: | + local value = modules.client_options.getOption('hotkeyDelay') + self:setText(tr('Hotkey delay: %dms', value)) - Button + QtButton id: hotkeysButton - !text: tr('Set hotkeys') + !text: tr('Hotkeys Manager') @onClick: modules.game_hotkeys.show() anchors.top: prev.bottom anchors.left: parent.left margin-top: 12 - width: 120 \ No newline at end of file + + size: 120 20 diff --git a/modules/client_options/data_options.lua b/modules/client_options/data_options.lua index bdfabfb2f8..60de2c9df5 100644 --- a/modules/client_options/data_options.lua +++ b/modules/client_options/data_options.lua @@ -1,48 +1,54 @@ return { - vsync = { + vsync = { value = true, action = function(value, options, controller, panels, extraWidgets, extraWidgets) g_window.setVerticalSync(value) end }, - showFps = { + showFps = { value = false, action = function(value, options, controller, panels, extraWidgets) modules.client_topmenu.setFpsVisible(value) end }, - showPing = { + showPing = { value = false, action = function(value, options, controller, panels, extraWidgets) modules.client_topmenu.setPingVisible(value) end }, - fullscreen = { + fullscreen = { value = false, action = function(value, options, controller, panels, extraWidgets) g_window.setFullscreen(value) end }, - classicControl = false, - smartWalk = false, - preciseControl = { + classicControl = false, + smartWalk = false, + preciseControl = { value = false, action = function(value, options, controller, panels, extraWidgets) g_game.setScheduleLastWalk(not value) end }, - autoChaseOverride = true, - moveStack = false, - showStatusMessagesInConsole = true, - showEventMessagesInConsole = true, - showInfoMessagesInConsole = true, - showTimestampsInConsole = true, - showLevelsInConsole = true, - showPrivateMessagesInConsole = true, + autoChaseOverride = true, + moveStack = false, + showStatusMessagesInConsole = true, + showEventMessagesInConsole = true, + showInfoMessagesInConsole = true, + showTimestampsInConsole = true, + showLevelsInConsole = true, + showPrivateMessagesInConsole = true, showOthersStatusMessagesInConsole = false, - showPrivateMessagesOnScreen = true, - openMaximized = false, - backgroundFrameRate = { + showPrivateMessagesOnScreen = true, + showOutfitsOnList = { + value = true, + action = function(value, options, controller, panels, extraWidgets) + CharacterList.updateCharactersAppearances(value) + end + }, + openMaximized = false, + backgroundFrameRate = { value = 201, action = function(value, options, controller, panels, extraWidgets) local text, v = value, value @@ -51,11 +57,11 @@ return { v = 0 end - panels.graphicsPanel:getChildById('backgroundFrameRateLabel'):setText(tr('Game framerate limit: %s', text)) + panels.graphicsPanel:recursiveGetChildById('backgroundFrameRate'):setText(tr('Game framerate limit: %s', text)) g_app.setMaxFps(v) end }, - enableAudio = { + enableAudio = { value = true, action = function(value, options, controller, panels, extraWidgets) if g_sounds then @@ -63,13 +69,13 @@ return { end if value then - extraWidgets.audioButton:setIcon('/images/topbuttons/audio') + extraWidgets.audioButton:setIcon('/images/topbuttons/button_mute_up') else - extraWidgets.audioButton:setIcon('/images/topbuttons/audio_mute') + extraWidgets.audioButton:setIcon('/images/topbuttons/button_mute_pressed') end end }, - enableMusicSound = { + enableMusicSound = { value = true, action = function(value, options, controller, panels, extraWidgets) if g_sounds then @@ -77,44 +83,43 @@ return { end end }, - musicSoundVolume = { + musicSoundVolume = { value = 100, action = function(value, options, controller, panels, extraWidgets) if g_sounds then g_sounds.getChannel(SoundChannels.Music):setGain(value / 100) end - panels.soundPanel:getChildById('musicSoundVolumeLabel'):setText(tr('Music volume: %d', value)) + panels.soundPanel:recursiveGetChildById('musicSoundVolume'):setText(tr('Music volume: %d', value)) end }, - enableLights = { + enableLights = { value = true, action = function(value, options, controller, panels, extraWidgets) panels.gameMapPanel:setDrawLights(value and options.ambientLight.value < 100) - panels.graphicsPanel:getChildById('ambientLight'):setEnabled(value) - panels.graphicsPanel:getChildById('ambientLightLabel'):setEnabled(value) + panels.graphicsPanel:recursiveGetChildById('ambientLight'):setEnabled(value) end }, - limitVisibleDimension = { + limitVisibleDimension = { value = false, action = function(value, options, controller, panels, extraWidgets) panels.gameMapPanel:setLimitVisibleDimension(value) end }, - floatingEffect = { + floatingEffect = { value = false, action = function(value, options, controller, panels, extraWidgets) g_map.setFloatingEffect(value) end }, - ambientLight = { + ambientLight = { value = 0, action = function(value, options, controller, panels, extraWidgets) - panels.graphicsPanel:getChildById('ambientLightLabel'):setText(tr('Ambient light: %s%%', value)) + panels.graphicsPanel:recursiveGetChildById('ambientLight'):setText(string.format('Ambient light: %s%%', value)) panels.gameMapPanel:setMinimumAmbientLight(value / 100) panels.gameMapPanel:setDrawLights(options.enableLights.value) end }, - displayNames = { + displayNames = { value = true, action = function(value, options, controller, panels, extraWidgets) panels.gameMapPanel:setDrawNames(value) @@ -124,7 +129,7 @@ return { end end }, - displayHealth = { + displayHealth = { value = true, action = function(value, options, controller, panels, extraWidgets) panels.gameMapPanel:setDrawHealthBars(value) @@ -134,7 +139,7 @@ return { end end }, - displayMana = { + displayMana = { value = true, action = function(value, options, controller, panels, extraWidgets) panels.gameMapPanel:setDrawManaBar(value) @@ -144,25 +149,25 @@ return { end end }, - displayText = { + displayText = { value = true, action = function(value, options, controller, panels, extraWidgets) g_app.setDrawTexts(value) end }, - turnDelay = { + turnDelay = { value = 50, action = function(value, options, controller, panels, extraWidgets) - panels.controlPanel:getChildById('turnDelayLabel'):setText(tr('Turn delay: %sms', value)) + panels.controlPanel:recursiveGetChildById('turnDelay'):setText(string.format('Turn delay: %sms', value)) end }, - hotkeyDelay = { + hotkeyDelay = { value = 70, action = function(value, options, controller, panels, extraWidgets) - panels.controlPanel:getChildById('hotkeyDelayLabel'):setText(tr('Hotkey delay: %sms', value)) + panels.controlPanel:recursiveGetChildById('hotkeyDelay'):setText(string.format('Hotkey delay: %sms', value)) end }, - crosshair = { + crosshair = { value = 'default', action = function(value, options, controller, panels, extraWidgets) local crossPath = '/images/game/crosshair/' @@ -172,73 +177,72 @@ return { end panels.gameMapPanel:setCrosshairTexture(newValue and crossPath .. newValue or nil) - panels.generalPanel.crosshair:setCurrentOptionByData(newValue, true) + panels.generalPanel:recursiveGetChildById('crosshair'):setCurrentOptionByData(newValue, true) end }, - enableHighlightMouseTarget = { + enableHighlightMouseTarget = { value = true, action = function(value, options, controller, panels, extraWidgets) panels.gameMapPanel:setDrawHighlightTarget(value) end }, - antialiasingMode = { + antialiasingMode = { value = 1, action = function(value, options, controller, panels, extraWidgets) panels.gameMapPanel:setAntiAliasingMode(value) - panels.generalPanel.crosshair:setCurrentOptionByData(value, true) + panels.graphicsPanel:recursiveGetChildById('antialiasingMode'):setCurrentOptionByData(value, true) end }, - shadowFloorIntensity = { + shadowFloorIntensity = { value = 30, action = function(value, options, controller, panels, extraWidgets) - panels.graphicsPanel:getChildById('shadowFloorIntensityLevel'):setText(tr('Shadow floor Intensity: %s%%', - value)) + panels.graphicsPanel:recursiveGetChildById('shadowFloorIntensity'):setText(string.format( + 'Shadow floor Intensity: %s%%', value)) panels.gameMapPanel:setShadowFloorIntensity(1 - (value / 100)) end }, - optimizeFps = { + optimizeFps = { value = true, action = function(value, options, controller, panels, extraWidgets) g_app.optimize(value) end }, - forceEffectOptimization = { + forceEffectOptimization = { value = true, action = function(value, options, controller, panels, extraWidgets) g_app.forceEffectOptimization(value) end }, - drawEffectOnTop = { + drawEffectOnTop = { value = false, action = function(value, options, controller, panels, extraWidgets) g_app.setDrawEffectOnTop(value) end }, - floorViewMode = { + floorViewMode = { value = 1, action = function(value, options, controller, panels, extraWidgets) panels.gameMapPanel:setFloorViewMode(value) - panels.graphicsPanel.floorViewMode:setCurrentOptionByData(value, true) + panels.graphicsPanel:recursiveGetChildById('floorViewMode'):setCurrentOptionByData(value, true) local fadeMode = value == 1 - panels.graphicsPanel:getChildById('floorFading'):setEnabled(fadeMode) - panels.graphicsPanel:getChildById('floorFadingLabel'):setEnabled(fadeMode) + panels.graphicsPanel:recursiveGetChildById('floorFading'):setEnabled(fadeMode) end }, - floorFading = { + floorFading = { value = 500, action = function(value, options, controller, panels, extraWidgets) - panels.graphicsPanel:getChildById('floorFadingLabel'):setText(tr('Floor Fading: %s ms', value)) + panels.graphicsPanel:recursiveGetChildById('floorFading'):setText(string.format('Floor Fading: %s ms', value)) panels.gameMapPanel:setFloorFading(tonumber(value)) end }, - asyncTxtLoading = { + asyncTxtLoading = { value = false, action = function(value, options, controller, panels, extraWidgets) if g_game.isUsingProtobuf() then value = true elseif g_app.isEncrypted() then - local asyncWidget = panels.graphicsPanel:getChildById('asyncTxtLoading') + local asyncWidget = panels.generalPanel:recursiveGetChildById('asyncTxtLoading') asyncWidget:setEnabled(false) asyncWidget:setChecked(false) return @@ -247,7 +251,7 @@ return { g_app.setLoadingAsyncTexture(value) end }, - creatureInformationScale = { + creatureInformationScale = { value = 0, action = function(value, options, controller, panels, extraWidgets) if value == 0 then @@ -256,11 +260,11 @@ return { value = value / 2 end g_app.setCreatureInformationScale(math.max(value + 0.5, 1)) - panels.generalPanel:getChildById('creatureInformationScaleLabel'):setText( - tr('Creature Information Scale: %sx', math.max(value + 0.5, 1))) + panels.consolePanel:recursiveGetChildById('creatureInformationScale'):setText(string.format( + 'Creature Information Scale: %sx', math.max(value + 0.5, 1))) end }, - staticTextScale = { + staticTextScale = { value = 0, action = function(value, options, controller, panels, extraWidgets) if value == 0 then @@ -269,11 +273,11 @@ return { value = value / 2 end g_app.setStaticTextScale(math.max(value + 0.5, 1)) - panels.generalPanel:getChildById('staticTextScaleLabel'):setText(tr('Message Scale: %sx', + panels.consolePanel:recursiveGetChildById('staticTextScale'):setText(string.format('Message Scale: %sx', math.max(value + 0.5, 1))) end }, - animatedTextScale = { + animatedTextScale = { value = 0, action = function(value, options, controller, panels, extraWidgets) if value == 0 then @@ -282,23 +286,29 @@ return { value = value / 2 end g_app.setAnimatedTextScale(math.max(value + 0.5, 1)) - panels.generalPanel:getChildById('animatedTextScaleLabel'):setText( + panels.consolePanel:recursiveGetChildById('animatedTextScale'):setText( tr('Animated Message Scale: %sx', math.max(value + 0.5, 1))) end }, - showLeftPanel = { - value = true, + showLeftExtraPanel = { + value = false, + action = function(value, options, controller, panels, extraWidgets) + modules.game_interface.getLeftExtraPanel():setOn(value) + end + }, + showLeftPanel = { + value = false, action = function(value, options, controller, panels, extraWidgets) modules.game_interface.getLeftPanel():setOn(value) end }, - showRightExtraPanel = { + showRightExtraPanel = { value = false, action = function(value, options, controller, panels, extraWidgets) modules.game_interface.getRightExtraPanel():setOn(value) end }, - dontStretchShrink = { + dontStretchShrink = { value = false, action = function(value, options, controller, panels, extraWidgets) addEvent(function() @@ -306,18 +316,34 @@ return { end) end }, - setEffectAlphaScroll = { + setEffectAlphaScroll = { value = 100, action = function(value, options, controller, panels, extraWidgets) g_client.setEffectAlpha(value / 100) - panels.generalPanel:getChildById('setEffectAlphaLabel'):setText(tr('Opacity Effect: %s%%', value)) + panels.consolePanel:recursiveGetChildById('setEffectAlphaScroll'):setText(tr('Opacity Effect: %s%%', value)) end }, - setMissileAlphaScroll = { + setMissileAlphaScroll = { value = 100, action = function(value, options, controller, panels, extraWidgets) g_client.setMissileAlpha(value / 100) - panels.generalPanel:getChildById('setMissileAlphaLabel'):setText(tr('Opacity Missile: %s%%', value)) + panels.consolePanel:recursiveGetChildById('setMissileAlphaScroll'):setText(tr('Opacity Missile: %s%%', value)) + end + }, + distFromCenScrollbar = { + value = 0, + action = function(value, options, controller, panels, extraWidgets) + local bar = modules.game_healthcircle.optionPanel:recursiveGetChildById('distFromCenScrollbar') + bar:setText(tr('Distance: %s', bar:recursiveGetChildById('valueBar'):getValue())) + modules.game_healthcircle.setDistanceFromCenter(bar:recursiveGetChildById('valueBar'):getValue()) end }, + opacityScrollbar = { + value = 0, + action = function(value, options, controller, panels, extraWidgets) + local bar = modules.game_healthcircle.optionPanel:recursiveGetChildById('opacityScrollbar') + bar:setText(tr('Opacity: %s', bar:recursiveGetChildById('valueBar'):getValue() / 100)) + modules.game_healthcircle.setCircleOpacity(bar:recursiveGetChildById('valueBar'):getValue() / 100) + end + } } diff --git a/modules/client_options/general.otui b/modules/client_options/general.otui index 54a791dfc4..c365213837 100644 --- a/modules/client_options/general.otui +++ b/modules/client_options/general.otui @@ -1,146 +1,156 @@ Panel - OptionCheckBox - id: showPing - !text: tr('Show connection ping') - !tooltip: tr('Display connection speed to the server (milliseconds)') - - OptionCheckBox - id: showLeftPanel - !text: tr('Show left panel') - - OptionCheckBox - id: showRightExtraPanel - !text: tr('Show an extra right panel') - - OptionCheckBox - id: openMaximized - !text: tr('Open containers maximized') - - OptionCheckBox - id: displayNames - !text: tr('Display creature names') - - OptionCheckBox - id: displayHealth - !text: tr('Display creature health bars') - - OptionCheckBox - id: displayMana - !text: tr('Display player mana bar') - - OptionCheckBox - id: displayText - !text: tr('Display text messages') - - OptionCheckBox - id: enableHighlightMouseTarget - !text: tr('Highlight mouse target') - - Label - id: creatureInformationScaleLabel + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right - anchors.top: prev.bottom - margin-top: 12 - !enabled: g_gameConfig.isDrawingInformationByWidget() == false - - - OptionScrollbar - id: creatureInformationScale + anchors.top: parent.top + height: 22 + + OptionCheckBoxMarked + id: showPing + !text: tr('Show connection ping') + !tooltip: tr('Display connection speed to the server (milliseconds)') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 1 - maximum: 9 - !enabled: g_gameConfig.isDrawingInformationByWidget() == false - - Label - id: staticTextScaleLabel + margin-top: 7 + height: 22 + + OptionCheckBox + id: showFps + !text: tr('Show frame rate') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - - OptionScrollbar - id: staticTextScale + margin-top: 7 + height: 22 + + OptionCheckBox + id: showLeftPanel + !text: tr('Show left panel') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 1 - maximum: 9 - - Label - id: animatedTextScaleLabel + margin-top: 7 + height: 22 + + OptionCheckBox + id: showRightExtraPanel + !text: tr('Show an extra right panel') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - - OptionScrollbar - id: animatedTextScale + margin-top: 7 + height: 22 + + OptionCheckBox + id: openMaximized + !text: tr('Open containers maximized') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 1 - maximum: 9 - - Label - id: setEffectAlphaLabel + margin-top: 7 + height: 22 + + OptionCheckBox + id: displayNames + !text: tr('Display creature names') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - - OptionScrollbar - id: setEffectAlphaScroll + margin-top: 7 + height: 22 + + OptionCheckBox + id: displayHealth + !text: tr('Display creature health bars') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 10 - maximum: 100 - - Label - id: setMissileAlphaLabel + margin-top: 7 + height: 22 + + OptionCheckBox + id: displayMana + !text: tr('Display player mana bar') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - - OptionScrollbar - id: setMissileAlphaScroll + margin-top: 7 + height: 22 + + OptionCheckBox + id: displayText + !text: tr('Display text messages') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 10 - maximum: 100 - - Label - id: chooseCrosshairLabel - !text: tr('Crosshair:') - phantom: false - anchors.left: prev.left + margin-top: 7 + height: 22 + + OptionCheckBox + id: enableHighlightMouseTarget + !text: tr('Highlight mouse target') + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right anchors.top: prev.bottom - margin-top: 13 - - ComboBox - id: crosshair - width: 120 - anchors.left: prev.right - anchors.top: prev.top - margin-top: -4 - margin-left: 5 - mouse-scroll: false - - Button - id: changeLocale - !text: tr('Change language') - @onClick: modules.client_locales.createWindow() + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: asyncTxtLoading + !text: tr('Async texture loading') + !tooltip: tr('This option makes textures load asynchronously and uses less RAM.') + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: drawEffectOnTop + !text: tr('Draw Effect On Top') + !tooltip: tr('Draw effect after drawing the entire floor.') + + SmallReversedQtPanel anchors.left: parent.left - margin-top: 12 - width: 120 \ No newline at end of file + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 32 + + Label + !text: 'Crosshair:' + anchors.left: parent.left + margin-left: 18 + color: #c0c0c0ff + anchors.verticalCenter: parent.verticalCenter + + QtComboBox + id: crosshair + width: 120 + margin-left: 10 + anchors.verticalCenter: prev.verticalCenter + anchors.left: prev.right + mouse-scroll: false diff --git a/modules/client_options/graphics.otui b/modules/client_options/graphics.otui index b993ff0947..747a83a669 100644 --- a/modules/client_options/graphics.otui +++ b/modules/client_options/graphics.otui @@ -1,167 +1,222 @@ Panel - OptionCheckBox - id: vsync - !text: tr('Enable vertical synchronization') - !tooltip: tr('Limits your fps based on monitor refresh rate') - - OptionCheckBox - id: showFps - !text: tr('Show frame rate') - - OptionCheckBox - id: optimizeFps - !text: tr('Optimize FPS') - !tooltip: tr('Try to optimize when the frame rate is below 60. VISUAL PROBLEMS MAY OCCUR') - - OptionCheckBox - id: forceEffectOptimization - !text: tr('Force Effect Optimization') - !tooltip: tr('Will avoid drawing effects on certain occasions.') - - OptionCheckBox - id: enableLights - !text: tr('Enable lights') - - OptionCheckBox - id: drawEffectOnTop - !text: tr('Draw Effect On Top') - !tooltip: tr('Draw effect after drawing the entire floor.') - - OptionCheckBox - id: limitVisibleDimension - !text: tr('Limit Visible Dimension') - !tooltip: tr('The limit is based on your maximum range.') - - OptionCheckBox - id: floatingEffect - !text: tr('Draw Floating Effects') - - OptionCheckBox - id: fullscreen - !text: tr('Fullscreen') - tooltip: Ctrl+Shift+F - - OptionCheckBox - id: dontStretchShrink - !text: tr('Don\'t stretch/shrink Game Window') - - OptionCheckBox - id: asyncTxtLoading - !text: tr('Async texture loading') - !tooltip: tr('This option makes textures load asynchronously and uses less RAM.') - - Label - id: floorViewModeLabel - !text: tr('Floor View Mode')..':' - phantom: false - anchors.left: prev.left + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + height: 22 + + OptionCheckBoxMarked + id: vsync + !text: tr('Enable vertical synchronization') + !tooltip: tr('Limits your fps based on monitor refresh rate') + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right anchors.top: prev.bottom - margin-top: 13 - - ComboBox - id: floorViewMode - width: 180 - anchors.left: prev.right - anchors.top: prev.top - margin-top: -4 - margin-left: 5 - mouse-scroll: false - - Label - id: antialiasingModeLabel - !text: tr('Antialiasing Mode')..':' - phantom: false - anchors.left: floorViewModeLabel.left + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: optimizeFps + !text: tr('Optimize FPS') + !tooltip: tr('Try to optimize when the frame rate is below 60. VISUAL PROBLEMS MAY OCCUR') + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right anchors.top: prev.bottom - margin-top: 13 - - ComboBox - id: antialiasingMode - width: 120 - anchors.left: prev.right - anchors.top: prev.top - margin-top: -4 - margin-left: 5 - mouse-scroll: false - - Label - id: ambientLightLabel + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: forceEffectOptimization + !text: tr('Force Effect Optimization') + !tooltip: tr('Will avoid drawing effects on certain occasions.') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right - anchors.top: antialiasingModeLabel.top - margin-top: 25 - @onSetup: | - local value = modules.client_options.getOption('ambientLight') - self:setText(tr('Ambient light: %s%%', value)) - - OptionScrollbar - id: ambientLight + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: enableLights + !text: tr('Enable lights') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 0 - maximum: 100 - - Label - id: shadowFloorIntensityLevel + margin-top: 7 + height: 22 + + OptionCheckBox + id: drawEffectOnTop + !text: tr('Draw Effect On Top') + !tooltip: tr('Draw effect after drawing the entire floor.') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - @onSetup: | - local value = modules.client_options.getOption('shadowFloorIntensity') - self:setText(tr('Floor Shadowing Intensity: %s%%', value)) - - OptionScrollbar - id: shadowFloorIntensity + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: limitVisibleDimension + !text: tr('Limit Visible Dimension') + !tooltip: tr('The limit is based on your maximum range.') + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 0 - maximum: 100 - - Label - id: floorFadingLabel + margin-top: 7 + height: 22 + + OptionCheckBox + id: floatingEffect + !text: 'Draw Floating Effects' + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - @onSetup: | - local value = modules.client_options.getOption('floorFading') - self:setText(tr('Floor Fading: %s ms', value)) - - OptionScrollbar - id: floorFading + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: fullscreen + !text: 'Fullscreen' + !tooltip: 'Ctrl+Shift+F' + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 0 - maximum: 1000 - - Label - id: backgroundFrameRateLabel - !text: tr('Game framerate limit: %s', 'max') + margin-top: 7 + height: 22 + + OptionCheckBox + id: dontStretchShrink + !text: 'Don\'t stretch/shrink Game Window' + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 32 + + Label + !text: 'Floor View Mode:' + anchors.left: parent.left + margin-left: 18 + color: #c0c0c0ff + anchors.verticalCenter: parent.verticalCenter + + QtComboBox + id: floorViewMode + width: 180 + margin-left: 10 + anchors.verticalCenter: prev.verticalCenter + anchors.left: prev.right + mouse-scroll: false + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 32 + + Label + !text: 'Antialiasing Mode:' + anchors.left: parent.left + margin-left: 18 + color: #c0c0c0ff + anchors.verticalCenter: parent.verticalCenter + + QtComboBox + id: antialiasingMode + width: 180 + margin-left: 10 + anchors.verticalCenter: prev.verticalCenter + anchors.left: prev.right + mouse-scroll: false + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionScaleScroll + id: ambientLight + anchors.fill: parent + &minimumScrollValue: 0 + &maximumScrollValue: 100 + &scrollSize: 21 + @onSetup: | + local value = modules.client_options.getOption('ambientLight') + self:setText(string.format('Ambient light: %s%%', value)) + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionScaleScroll + id: shadowFloorIntensity + anchors.fill: parent + &minimumScrollValue: 0 + &maximumScrollValue: 100 + &scrollSize: 21 + @onSetup: | + local value = modules.client_options.getOption('shadowFloorIntensity') + self:setText(string.format('Floor Shadowing Intensity: %s%%', value)) + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 12 - @onSetup: | - local value = modules.client_options.getOption('backgroundFrameRate') - local text = value - if value <= 0 or value >= 201 then - text = 'max' - end - - self:setText(tr('Game framerate limit: %s', text)) - - OptionScrollbar - id: backgroundFrameRate + margin-top: 7 + height: 22 + + OptionScaleScroll + id: floorFading + anchors.fill: parent + &minimumScrollValue: 0 + &maximumScrollValue: 1000 + &scrollSize: 21 + @onSetup: | + local value = modules.client_options.getOption('floorFading') + self:setText(tr('Floor Fading: %s ms', value)) + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 10 - maximum: 201 \ No newline at end of file + margin-top: 7 + height: 22 + + OptionScaleScroll + id: backgroundFrameRate + !text: tr('Game framerate limit: %s', 'max') + anchors.fill: parent + &minimumScrollValue: 10 + &maximumScrollValue: 201 + &scrollSize: 21 + @onSetup: | + local value = modules.client_options.getOption('backgroundFrameRate') + local text = value + if value <= 0 or value >= 201 then + text = 'max' + end + + self:setText(tr('Game framerate limit: %s', text)) diff --git a/modules/client_options/options.lua b/modules/client_options/options.lua index 38057767b5..ac3859dab5 100644 --- a/modules/client_options/options.lua +++ b/modules/client_options/options.lua @@ -11,7 +11,8 @@ local panels = { local extraWidgets = { audioButton = nil, - optionsButton = nil + optionsButton = nil, + optionsButtons = nil } local function toggleDisplays() @@ -35,27 +36,33 @@ local function toggleOption(key) end local function setupComboBox() + local crosshairCombo = panels.generalPanel:recursiveGetChildById('crosshair') + local antialiasingModeCombobox = panels.graphicsPanel:recursiveGetChildById('antialiasingMode') + local floorViewModeCombobox = panels.graphicsPanel:recursiveGetChildById('floorViewMode') + for k, v in pairs({ { 'Disabled', 'disabled' }, { 'Default', 'default' }, { 'Full', 'full' } }) do - panels.generalPanel.crosshair:addOption(v[1], v[2]) + crosshairCombo:addOption(v[1], v[2]) end - panels.generalPanel.crosshair.onOptionChange = function(comboBox, option) + crosshairCombo.onOptionChange = function(comboBox, option) setOption('crosshair', comboBox:getCurrentOption().data) end + for k, t in pairs({ 'None', 'Antialiasing', 'Smooth Retro' }) do - panels.graphicsPanel.antialiasingMode:addOption(t, k - 1) + antialiasingModeCombobox:addOption(t, k - 1) end - panels.graphicsPanel.antialiasingMode.onOptionChange = function(comboBox, option) + antialiasingModeCombobox.onOptionChange = function(comboBox, option) setOption('antialiasingMode', comboBox:getCurrentOption().data) end + for k, t in pairs({ 'Normal', 'Fade', 'Locked', 'Always', 'Always with transparency' }) do - panels.graphicsPanel.floorViewMode:addOption(t, k - 1) + floorViewModeCombobox:addOption(t, k - 1) end - panels.graphicsPanel.floorViewMode.onOptionChange = function(comboBox, option) + floorViewModeCombobox.onOptionChange = function(comboBox, option) setOption('floorViewMode', comboBox:getCurrentOption().data) end end @@ -94,14 +101,10 @@ function controller:onInit() g_settings.setDefault(k, obj.value) end - extraWidgets.optionsButton = modules.client_topmenu.addLeftButton('optionsButton', tr('Options'), - '/images/topbuttons/options', - toggle) - - extraWidgets.audioButton = modules.client_topmenu.addLeftButton('audioButton', tr('Audio'), - '/images/topbuttons/audio', function() - toggleOption('enableAudio') - end) + extraWidgets.optionsButton = modules.client_topmenu.addTopRightToggleButton('optionsButton', tr('Options'), + '/images/topbuttons/button_options', toggle) + extraWidgets.audioButton = modules.client_topmenu.addTopRightToggleButton('audioButton', tr('Audio'), + '/images/topbuttons/button_mute_up', function() toggleOption('enableAudio') end) panels.generalPanel = g_ui.loadUI('general') panels.controlPanel = g_ui.loadUI('control') @@ -111,11 +114,11 @@ function controller:onInit() self.ui:hide() self.ui.optionsTabBar:setContentWidget(self.ui.optionsTabContent) - self.ui.optionsTabBar:addTab(tr('General'), panels.generalPanel, '/images/optionstab/game') - self.ui.optionsTabBar:addTab(tr('Control'), panels.controlPanel, '/images/optionstab/controls') - self.ui.optionsTabBar:addTab(tr('Console'), panels.consolePanel, '/images/optionstab/console') - self.ui.optionsTabBar:addTab(tr('Graphics'), panels.graphicsPanel, '/images/optionstab/graphics') - self.ui.optionsTabBar:addTab(tr('Audio'), panels.soundPanel, '/images/optionstab/audio') + self.ui.optionsTabBar:addTab(tr('Options'), panels.generalPanel, '/images/icons/icon_options') + self.ui.optionsTabBar:addTab(tr('Controls'), panels.controlPanel, '/images/icons/icon_controls') + self.ui.optionsTabBar:addTab(tr('Interface'), panels.consolePanel, '/images/icons/icon_interface') + self.ui.optionsTabBar:addTab(tr('Graphics'), panels.graphicsPanel, '/images/icons/icon_graphics') + self.ui.optionsTabBar:addTab(tr('Sound'), panels.soundPanel, '/images/icons/icon_sound') addEvent(setup) end @@ -128,6 +131,10 @@ function controller:onTerminate() end function setOption(key, value, force) + if not modules.game_interface then + return + end + local option = options[key] if option == nil or not force and option.value == value then return @@ -146,6 +153,8 @@ function setOption(key, value, force) widget:setChecked(value) elseif widget:getStyle().__class == 'UIScrollBar' then widget:setValue(value) + elseif widget:recursiveGetChildById('valueBar') then + widget:recursiveGetChildById('valueBar'):setValue(value) end break end @@ -155,6 +164,15 @@ function setOption(key, value, force) g_settings.set(key, value) end +function setupOptionsMainButton() + if extraWidgets.optionsButtons then + return + end + + extraWidgets.optionsButtons = modules.game_mainpanel.addSpecialToggleButton('optionsMainButton', tr('Options'), + '/images/options/button_options', toggle, true) +end + function getOption(key) return options[key].value end diff --git a/modules/client_options/options.otui b/modules/client_options/options.otui index 6707195a53..3cc7e01b8a 100644 --- a/modules/client_options/options.otui +++ b/modules/client_options/options.otui @@ -1,47 +1,112 @@ -OptionCheckBox < CheckBox +OptionCheckBox < QtCheckBox + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + color: #c0c0c0ff @onCheckChange: modules.client_options.setOption(self:getId(), self:isChecked()) - height: 16 - $first: - anchors.left: parent.left +OptionCheckBoxMarked < OptionCheckBox + UIWidget + id: toolTipWidget + image-source: /images/icons/show_gui_help_grey + size: 12 12 anchors.right: parent.right - anchors.top: parent.top + anchors.verticalCenter: parent.verticalCenter + margin-right: 3 - $!first: - anchors.left: parent.left +OptionScaleScroll < Label + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + text-align: left + text-offset: 18 0 + color: #c0c0c0ff + + HorizontalQtScrollBar + id: valueBar + step: 1 + anchors.right: parent.right + margin-right: 3 + width: 174 + @onValueChange: | + modules.client_options.setOption(self:getParent():getId(), self:getValue()) + +OptionScaleScrollMarked < Label + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + text-align: left + text-offset: 18 0 + color: #c0c0c0ff + + UIWidget + id: toolTipWidget + image-source: /images/icons/show_gui_help_grey + size: 12 12 anchors.right: parent.right - anchors.top: prev.bottom - margin-top: 2 + anchors.verticalCenter: parent.verticalCenter + margin-right: 3 -OptionScrollbar < HorizontalScrollBar - step: 1 - @onValueChange: modules.client_options.setOption(self:getId(), self:getValue()) + HorizontalQtScrollBar + id: valueBar + step: 1 + anchors.right: toolTipWidget.left + margin-right: 10 + width: 174 + @onValueChange: | + modules.client_options.setOption(self:getParent():getId(), self:getValue()) -MainWindow +MiniQtWindow id: optionsWindow - !text: tr('Options') - size: 480 500 + size: 685 530 + anchors.centerIn: parent + visible: false + draggable: false @onEnter: modules.client_options.hide() @onEscape: modules.client_options.hide() - TabBarVertical + Label + !text: tr('Options') + font: verdana-11px-antialised + text-offset: 0 2 + text-align: top + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.right: parent.right + opacity: 0.5 + + TabBarQtVertical id: optionsTabBar anchors.top: parent.top anchors.left: parent.left - anchors.bottom: parent.bottom + margin-left: 16 + margin-top: 29 + size: 128 453 - Panel + QtPanel id: optionsTabContent anchors.top: optionsTabBar.top anchors.left: optionsTabBar.right anchors.right: parent.right anchors.bottom: optionsTabBar.bottom margin-left: 10 + margin-right: 10 + + HorizontalSeparator + anchors.left: optionsTabBar.left + anchors.right: optionsTabContent.right + anchors.top: optionsTabContent.bottom + image-source: /images/ui/horizontal_line_bright + height: 1 + margin-top: 15 - Button + QtButton !text: tr('Ok') - width: 64 + size: 64 20 anchors.right: parent.right anchors.bottom: parent.bottom + margin-bottom: 10 + margin-right: 10 @onClick: modules.client_options.hide() diff --git a/modules/client_serverlist/serverlist.lua b/modules/client_serverlist/serverlist.lua index f949be1f24..d94ea3d5df 100644 --- a/modules/client_serverlist/serverlist.lua +++ b/modules/client_serverlist/serverlist.lua @@ -10,8 +10,18 @@ local servers = {} function ServerList.init() serverListWindow = g_ui.displayUI('serverlist') serverTextList = serverListWindow:getChildById('serverList') - + local processedServers = {} servers = g_settings.getNode('ServerList') or {} + if Servers_init then + for key, value in pairs(Servers_init) do + if not servers[key] then + servers[key] = value + if not processedServers[key] then + processedServers[key] = true + end + end + end + end if servers then ServerList.load() end @@ -55,7 +65,7 @@ function ServerList.add(host, port, protocol, httpLogin, load) elseif host == '' or port == '' then return false, 'Required fields are missing' elseif httpLogin == nil then - httpLogin = false + httpLogin = false end local widget = g_ui.createWidget('ServerWidget', serverTextList) widget:setId(host) diff --git a/modules/client_terminal/terminal.lua b/modules/client_terminal/terminal.lua index 74d1ad3807..97cb13ecc4 100644 --- a/modules/client_terminal/terminal.lua +++ b/modules/client_terminal/terminal.lua @@ -148,7 +148,7 @@ function init() terminalWindow.onDoubleClick = popWindow - terminalButton = modules.client_topmenu.addLeftButton('terminalButton', tr('Terminal') .. ' (Ctrl + T)', + terminalButton = modules.client_topmenu.addTopRightToggleButton('terminalButton', tr('Terminal') .. ' (Ctrl + T)', '/images/topbuttons/terminal', toggle) g_keyboard.bindKeyDown('Ctrl+T', toggle) diff --git a/modules/client_topmenu/pingFps.otui b/modules/client_topmenu/pingFps.otui new file mode 100644 index 0000000000..d72525af7d --- /dev/null +++ b/modules/client_topmenu/pingFps.otui @@ -0,0 +1,46 @@ +testPingPanel < UIWidget + size: 50 50 + padding: 3 + focusable: false + pingImg + pingFpsLabel + + +pingImg < UIWidget + size: 17 17 + anchors.centerIn: parent + phantom: true + focusable: false + +pingFpsLabel < UIWidget + size: 120 14 + anchors.top: parent.bottom + anchors.centerIn: parent + margin-left: 65 + phantom: true + font: verdana-11px-rounded + focusable: false + + +Panel + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + height: 60 + margin-top: 35 + Panel + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + height: 20 + layout: + type: horizontalBox + + Panel + anchors.top: prev.bottom + anchors.left: parent.left + anchors.right: parent.right + margin-top: 5 + height: 20 + layout: + type: horizontalBox diff --git a/modules/client_topmenu/topmenu.lua b/modules/client_topmenu/topmenu.lua index 9f37327f13..f21fb6a6fe 100644 --- a/modules/client_topmenu/topmenu.lua +++ b/modules/client_topmenu/topmenu.lua @@ -1,22 +1,40 @@ -- private variables local topMenu -local leftButtonsPanel local rightButtonsPanel -local leftGameButtonsPanel +local leftButtonsPanel local rightGameButtonsPanel - +local topLeftTogglesPanel +local topLeftButtonsPanel +local topLeftOnlinePlayersLabel + +local topLeftDiscordStreamersLabel +local topLeftYoutubeViewersLabel +local topLeftYoutubeStreamersLabel +local fpsLabel +local pingLabel +local topLeftYoutubeLink +local topLeftDiscordLink +local url_discord = "" +local url_youtube = "" local lastSyncValue = -1 local fpsEvent = nil local fpsMin = -1; local fpsMax = -1; - +local pingPanel +local MainPingPanel +local mainFpsPanel +local fpsPanel2 +local PingWidget +local pingImg + +local managerAccountsButton -- private functions local function addButton(id, description, icon, callback, panel, toggle, front) local class if toggle then class = 'TopToggleButton' else - class = 'TopButton' + class = 'Button' end local button = panel:getChildById(id) @@ -30,7 +48,11 @@ local function addButton(id, description, icon, callback, panel, toggle, front) end button:setId(id) button:setTooltip(description) - button:setIcon(resolvepath(icon, 3)) + if toggle then + button:setIcon(resolvepath(icon, 3)) + else + button:setText(description) + end button.onMouseRelease = function(widget, mousePos, mouseButton) if widget:containsPoint(mousePos) and mouseButton ~= MouseMidButton then callback() @@ -53,15 +75,28 @@ function init() topMenu = g_ui.displayUI('topmenu') - leftButtonsPanel = topMenu:getChildById('leftButtonsPanel') + topLeftButtonsPanel = topMenu:getChildById('topLeftButtonsPanel') + topLeftTogglesPanel = topMenu:getChildById('topLeftTogglesPanel') rightButtonsPanel = topMenu:getChildById('rightButtonsPanel') - leftGameButtonsPanel = topMenu:getChildById('leftGameButtonsPanel') + leftButtonsPanel = topMenu:getChildById('leftButtonsPanel') rightGameButtonsPanel = topMenu:getChildById('rightGameButtonsPanel') pingLabel = topMenu:getChildById('pingLabel') fpsLabel = topMenu:getChildById('fpsLabel') - g_keyboard.bindKeyDown('Ctrl+Shift+T', toggle) + topLeftOnlinePlayersLabel = topMenu:recursiveGetChildById('topLeftOnlinePlayersLabel') + + topLeftDiscordStreamersLabel = topMenu:recursiveGetChildById('topLeftDiscordStreamersLabel') + topLeftYoutubeViewersLabel = topMenu:recursiveGetChildById('topLeftYoutubeViewersLabel') + topLeftYoutubeStreamersLabel = topMenu:recursiveGetChildById('topLeftYoutubeStreamersLabel') + + topLeftYoutubeLink = topMenu:recursiveGetChildById('youtubeIcon') + topLeftDiscordLink = topMenu:recursiveGetChildById('discordIcon') + g_keyboard.bindKeyDown('Ctrl+Shift+T', toggle) + if Services.websites then + managerAccountsButton = modules.client_topmenu.addTopRightRegularButton('hotkeysButton', tr('Manage Account'), + nil, openManagerAccounts) + end if g_game.isOnline() then online() end @@ -78,6 +113,25 @@ function terminate() }) topMenu:destroy() + if PingWidget then + PingWidget:destroy() + PingWidget = nil + end + if managerAccountsButton then + managerAccountsButton:destroy() + managerAccountsButton = nil + end + +end + +function hide() + topMenu:hide() +end + +function show() + topMenu:show() + topMenu:raise() + topMenu:focus() end function online() @@ -87,87 +141,191 @@ function online() if modules.client_options.getOption('showPing') and (g_game.getFeature(GameClientPing) or g_game.getFeature(GameExtendedClientPing)) then pingLabel:show() + if pingPanel then + pingPanel:show() + pingImg:show() + end else pingLabel:hide() + if pingPanel then + pingPanel:hide() + pingImg:hide() + end end end) + if PingWidget then + return + end + + PingWidget = g_ui.loadUI("pingFps", modules.game_interface.getMapPanel()) + + MainPingPanel = g_ui.createWidget("testPingPanel", PingWidget:getChildByIndex(1)) + MainPingPanel.setId(MainPingPanel, "ping") + pingImg = MainPingPanel.getChildByIndex(MainPingPanel, 1) + pingPanel = MainPingPanel.getChildByIndex(MainPingPanel, 2) + if modules.client_options.getOption('showPing') then + pingImg:setVisible(true) + pingPanel:setVisible(true) + else + pingImg:setVisible(false) + pingPanel:setVisible(true) + end + mainFpsPanel = g_ui.createWidget("testPingPanel", PingWidget:getChildByIndex(2)) + mainFpsPanel.setId(mainFpsPanel, "fps") + fpsPanel2 = mainFpsPanel.getChildByIndex(mainFpsPanel, 2) + if modules.client_options.getOption('showFps') then + fpsPanel2:setVisible(true) + else + fpsPanel2:setVisible(false) + end end function offline() hideGameButtons() pingLabel:hide() + if pingPanel then + pingPanel:hide() + pingImg:hide() + end fpsMin = -1 end function updateFps(fps) - if not fpsLabel:isVisible() then - return - end - - text = 'FPS: ' .. fps - - if g_game.isOnline() then - local vsync = modules.client_options.getOption('vsync') - if fpsEvent == nil and lastSyncValue ~= vsync then - fpsEvent = scheduleEvent(function() - fpsMin = -1 - lastSyncValue = vsync - fpsEvent = nil - end, 2000) - end - - if fpsMin == -1 then - fpsMin = fps - fpsMax = fps - end - - if fps > fpsMax then - fpsMax = fps + if fpsLabel:isVisible() then -- for the time being retained for the extended view + local text = 'FPS ' .. fps + if g_game.isOnline() then + local vsync = modules.client_options.getOption('vsync') + if fpsEvent == nil and lastSyncValue ~= vsync then + fpsEvent = scheduleEvent(function() + fpsMin = -1 + lastSyncValue = vsync + fpsEvent = nil + end, 2000) + end + + if fpsMin == -1 then + fpsMin = fps + fpsMax = fps + end + + if fps > fpsMax then + fpsMax = fps + end + + if fps < fpsMin then + fpsMin = fps + end + + local midFps = math.floor((fpsMin + fpsMax) / 2) + fpsLabel:setTooltip('Min: ' .. fpsMin .. '\nMid: ' .. midFps .. '\nMax: ' .. fpsMax) + else + fpsLabel:removeTooltip() end + fpsLabel:setText(text) + end - if fps < fpsMin then - fpsMin = fps + local text = fps .. ' fps' + if fpsPanel2 and fpsPanel2:isVisible() then + if g_game.isOnline() then + fpsPanel2:setText(text) end - - local midFps = math.floor((fpsMin + fpsMax) / 2) - fpsLabel:setTooltip('Min: ' .. fpsMin .. '\nMid: ' .. midFps .. '\nMax: ' .. fpsMax) - else - fpsLabel:removeTooltip() end - fpsLabel:setText(text) end function updatePing(ping) - if not pingLabel:isVisible() then - return - end + if pingLabel:isVisible() then -- for the time being retained for the extended view - local text = 'Ping: ' - local color - if ping < 0 then - text = text .. '??' - color = 'yellow' - else - text = text .. ping .. ' ms' - if ping >= 500 then - color = 'red' - elseif ping >= 250 then + local text = 'Ping: ' + local color + if ping < 0 then + text = text .. '??' color = 'yellow' else - color = 'green' + text = text .. ping .. ' ms' + if ping >= 500 then + color = 'red' + elseif ping >= 250 then + color = 'yellow' + else + color = 'green' + end end + pingLabel:setColor(color) + pingLabel:setText(text) + end + if pingPanel and pingPanel:isVisible() then + + local text + local imagen + if ping < 0 then + text = 'High lag (??)' + imagen = nil + elseif ping >= 500 then + text = 'High lag (' .. ping .. ' ms)' + imagen = '/images/ui/high_ping' + elseif ping >= 250 then + text = 'Medium lag (' .. ping .. ' ms)' + imagen = '/images/ui/medium_ping' + else + text = 'Low lag (' .. ping .. ' ms)' + imagen = '/images/ui/low_ping' + end + + pingImg:setImageSource(imagen) + pingPanel:setText(text) end - pingLabel:setColor(color) - pingLabel:setText(text) end function setPingVisible(enable) pingLabel:setVisible(enable) + if pingPanel then + pingPanel:setVisible(enable) + pingImg:setVisible(enable) + end end function setFpsVisible(enable) fpsLabel:setVisible(enable) + if fpsPanel2 then + fpsPanel2:setVisible(enable) + end +end + +function setPlayersOnline(value) + topLeftOnlinePlayersLabel:setText(value .. " " .. tr('players online')) +end +function setDiscordStreams(value) + topLeftDiscordStreamersLabel:setText(value) +end + +function setYoutubeStreams(value) + topLeftYoutubeStreamersLabel:setText(value) +end +function setYoutubeViewers(value) + topLeftYoutubeViewersLabel:setText(value) +end + +function setLinkYoutube(value) + + url_youtube = value + topLeftYoutubeLink.onClick = function() + if url_youtube then + g_platform.openUrl(url_youtube) + end + end + +end + +function setLinkDiscord(value) + + url_discord = value + topLeftDiscordLink.onClick = function() + if url_discord then + g_platform.openUrl(url_discord) + end + end + end function addLeftButton(id, description, icon, callback, front) @@ -179,36 +337,77 @@ function addLeftToggleButton(id, description, icon, callback, front) end function addRightButton(id, description, icon, callback, front) - return addButton(id, description, icon, callback, rightButtonsPanel, false, front) + return addButton(id, description, icon, callback, topLeftTogglesPanel, false, front) end function addRightToggleButton(id, description, icon, callback, front) return addButton(id, description, icon, callback, rightButtonsPanel, true, front) end -function addLeftGameButton(id, description, icon, callback, front) - return addButton(id, description, icon, callback, leftGameButtonsPanel, false, front) +function addLeftGameButton(id, description, icon, callback, front, index) + if not g_modules.getModule("game_mainpanel"):isLoaded() then + -- Temp fix. game_mainpanel is not loaded if called from a client_XXX. + scheduleEvent(function() + return modules.game_mainpanel.addSpecialToggleButton(id, description, icon, callback, front, index) + end, 100) + else + return modules.game_mainpanel.addSpecialToggleButton(id, description, icon, callback, front, index) + + end end -function addLeftGameToggleButton(id, description, icon, callback, front) - return addButton(id, description, icon, callback, leftGameButtonsPanel, true, front) +function addLeftGameToggleButton(id, description, icon, callback, front, index) + if not g_modules.getModule("game_mainpanel"):isLoaded() then + -- Temp fix. game_mainpanel is not loaded if called from a client_XXX. + scheduleEvent(function() + return modules.game_mainpanel.addSpecialToggleButton(id, description, icon, callback, front, index) + end, 100) + else + return modules.game_mainpanel.addSpecialToggleButton(id, description, icon, callback, front, index) + + end end -function addRightGameButton(id, description, icon, callback, front) - return addButton(id, description, icon, callback, rightGameButtonsPanel, false, front) +function addRightGameButton(id, description, icon, callback, front, index) + if not g_modules.getModule("game_mainpanel"):isLoaded() then + -- Temp fix. game_mainpanel is not loaded if called from a client_XXX. + scheduleEvent(function() + return modules.game_mainpanel.addToggleButton(id, description, icon, callback, front, index) + end, 100) + else + return modules.game_mainpanel.addToggleButton(id, description, icon, callback, front, index) + + end end -function addRightGameToggleButton(id, description, icon, callback, front) - return addButton(id, description, icon, callback, rightGameButtonsPanel, true, front) +function addRightGameToggleButton(id, description, icon, callback, front, index) + if not g_modules.getModule("game_mainpanel"):isLoaded() then + -- Temp fix. game_mainpanel is not loaded if called from a client_XXX. + scheduleEvent(function() + return modules.game_mainpanel.addToggleButton(id, description, icon, callback, front, index) + end, 100) + else + return modules.game_mainpanel.addToggleButton(id, description, icon, callback, front, index) + + end + +end + +function addTopRightRegularButton(id, description, icon, callback, front) + return addButton(id, description, icon, callback, topLeftButtonsPanel, false, front) +end + +function addTopRightToggleButton(id, description, icon, callback, front) + return addButton(id, description, icon, callback, topLeftTogglesPanel, true, front) end function showGameButtons() - leftGameButtonsPanel:show() + rightGameButtonsPanel:show() end function hideGameButtons() - leftGameButtonsPanel:hide() + rightGameButtonsPanel:hide() end @@ -228,13 +427,16 @@ function toggle() if menu:isVisible() then menu:hide() - modules.client_background.getBackground():addAnchor(AnchorTop, 'parent', AnchorTop) modules.game_interface.getRootPanel():addAnchor(AnchorTop, 'parent', AnchorTop) - modules.game_interface.getShowTopMenuButton():show() else menu:show() - modules.client_background.getBackground():addAnchor(AnchorTop, 'topMenu', AnchorBottom) - modules.game_interface.getRootPanel():addAnchor(AnchorTop, 'topMenu', AnchorBottom) - modules.game_interface.getShowTopMenuButton():hide() + modules.game_interface.getRootPanel():addAnchor(AnchorTop, 'topMenu', AnchorTop) end end + +function openManagerAccounts() + if Services.websites then + g_platform.openUrl(Services.websites) + end + +end diff --git a/modules/client_topmenu/topmenu.otui b/modules/client_topmenu/topmenu.otui index 8852ebfe3a..ed63618f6d 100644 --- a/modules/client_topmenu/topmenu.otui +++ b/modules/client_topmenu/topmenu.otui @@ -1,28 +1,168 @@ -TopMenuPanel +PingWidget < UIWidget + UIWidget + id: panelPingFps + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + height: 110 + focusable: false + UIWidget + id:imgPing + image-source: /images/ui/up + anchors.left: parent.left + anchors.top: prev.bottom + focusable: false + Label + id: lblping + height: 12 + width: 33 + margin-left: 2 + anchors.left: Img_ping.right + text-horizontal-auto-resize: true + text-auto-resize: true + focusable: false + font: verdana-11px-rounded + Label + id: lblfps + height: 12 + anchors.left: lblping.left + anchors.top: prev.bottom + text-horizontal-auto-resize: true + text-auto-resize: true + text-align: center + focusable: false + font: verdana-11px-rounded + +TopMenuPanel id: topMenu anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right + anchors.horizontalCenter: parent.horizontalCenter + width: 1020 + height: 32 + image-source: /images/ui/top_bar_login TopMenuButtonsPanel - id: leftButtonsPanel + id: topLeftTogglesPanel anchors.top: parent.top anchors.bottom: parent.bottom + anchors.right: parent.right + + TopMenuButtonsPanel + id: topLeftButtonsPanel + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.right: topLeftTogglesPanel.left + margin-left: 5 + + UIWidget + id: topLeftOnlinePlayers + anchors.verticalCenter: parent.verticalCenter + anchors.horizontalCenter: parent.horizontalCenter + size: 100 32 + + Panel + image-source: /images/icons/icon_players + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + size: 11 14 + + Label + id: topLeftOnlinePlayersLabel + !text: '- ' .. tr('players online') + anchors.left: prev.right + margin-left: 5 + anchors.verticalCenter: prev.verticalCenter + width: 150 + + UIWidget + id: topLeftDiscord + anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left + margin-left: 10 + size: 110 32 + + UIWidget + id: discordIcon + image-source: /images/icons/icon_discord + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + size: 30 34 + + Panel + image-source: /images/icons/icon_streamers + anchors.top: parent.top + anchors.left: prev.right + margin-left: 5 + margin-top: 11 + size: 11 7 + + Label + id: topLeftDiscordStreamersLabel + !text: '-' + anchors.left: prev.right + margin-left: 5 + anchors.verticalCenter: prev.verticalCenter + width: 50 + + UIWidget + id: topLeftYoutube + anchors.verticalCenter: parent.verticalCenter + anchors.left: topLeftDiscord.right + margin-left: 10 + size: 100 32 + + UIWidget + id: youtubeIcon + image-source: /images/icons/icon_youtube + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + size: 71 16 + + Panel + image-source: /images/icons/icon_streamers + anchors.top: parent.top + anchors.left: prev.right + margin-left: 5 + margin-top: 5 + size: 11 7 + + Label + id: topLeftYoutubeStreamersLabel + !text: '-' + anchors.left: prev.right + margin-left: 5 + anchors.verticalCenter: prev.verticalCenter + width: 50 + + Panel + image-source: /images/icons/icon_viewers + anchors.bottom: parent.bottom + anchors.left: youtubeIcon.right + margin-left: 5 + margin-bottom: 7 + size: 11 7 + + Label + id: topLeftYoutubeViewersLabel + !text: '-' + anchors.left: prev.right + margin-left: 5 + anchors.verticalCenter: prev.verticalCenter + width: 50 TopMenuButtonsPanel - id: leftGameButtonsPanel + id: leftButtonsPanel anchors.top: parent.top anchors.bottom: parent.bottom anchors.left: prev.right - visible: false + TopMenuFrameCounterLabel id: fpsLabel phantom: false text-auto-resize: true anchors.top: parent.top - anchors.left: leftGameButtonsPanel.right + anchors.left: leftButtonsPanel.right TopMenuPingLabel color: white diff --git a/modules/corelib/http.lua b/modules/corelib/http.lua index 877c3c44ec..77fb5ad386 100644 --- a/modules/corelib/http.lua +++ b/modules/corelib/http.lua @@ -181,8 +181,7 @@ function HTTP.onPost(operationId, url, err, data) err = err .. " (" .. data:sub(1, 100) .. ")" end end - -- data = result - + data = result end if operation.callback then operation.callback(data, err) @@ -309,4 +308,3 @@ connect(g_http, g_http.setUserAgent(HTTP.agent) g_http.setEnableTimeOutOnReadWrite(HTTP.enableTimeOut) - diff --git a/modules/corelib/string.lua b/modules/corelib/string.lua index 9d6e391990..633994fd32 100644 --- a/modules/corelib/string.lua +++ b/modules/corelib/string.lua @@ -58,3 +58,19 @@ function string:contains(str, checkCase, start, plain) end return string.find(self, str, start and start or 1, plain == nil and true or false) end + +function string:wrap(width) + local wrapped = "" + local lineWidth = 0 + for word in self:gmatch("%S+") do + local wordWidth = #word * 10 -- Assuming each character is 10 pixels wide + if lineWidth + wordWidth > width then + wrapped = wrapped .. "\n" .. word .. " " + lineWidth = wordWidth + 1 + else + wrapped = wrapped .. word .. " " + lineWidth = lineWidth + wordWidth + 1 + end + end + return wrapped +end \ No newline at end of file diff --git a/modules/corelib/ui/tooltip.lua b/modules/corelib/ui/tooltip.lua index f8f70923cb..1f33f45242 100644 --- a/modules/corelib/ui/tooltip.lua +++ b/modules/corelib/ui/tooltip.lua @@ -3,6 +3,7 @@ g_tooltip = {} -- private variables local toolTipLabel +local SpecialoolTipLabel local currentHoveredWidget -- private functions @@ -32,16 +33,62 @@ local function moveToolTip(first) toolTipLabel:setPosition(pos) end +local function moveSpecialToolTip(first) + if not first and (not SpecialoolTipLabel:isVisible() or SpecialoolTipLabel:getOpacity() < 0.1) then + return + end + + local pos = g_window.getMousePosition() + local windowSize = g_window.getSize() + local labelSize = SpecialoolTipLabel:getSize() + + pos.x = pos.x + 1 + pos.y = pos.y + 1 + + if windowSize.width - (pos.x + labelSize.width) < 10 then + pos.x = pos.x - labelSize.width - 3 + else + pos.x = pos.x + 10 + end + + if windowSize.height - (pos.y + labelSize.height) < 10 then + pos.y = pos.y - labelSize.height - 3 + else + pos.y = pos.y + 10 + end + + SpecialoolTipLabel:setPosition(pos) +end + +local function onWidgetDestroy(widget) + if widget == currentHoveredWidget then + if widget.tooltip then + g_tooltip.hide() + end + if widget.specialtooltip then + g_tooltip.hideSpecial() + end + currentHoveredWidget = nil + end +end local function onWidgetHoverChange(widget, hovered) if hovered then if widget.tooltip and not g_mouse.isPressed() then g_tooltip.display(widget.tooltip) currentHoveredWidget = widget + elseif widget.specialtooltip and not g_mouse.isPressed() then + g_tooltip.displaySpecial(widget.specialtooltip) + currentHoveredWidget = widget end else if widget == currentHoveredWidget then - g_tooltip.hide() + if widget.tooltip then + g_tooltip.hide() + end + if widget.specialtooltip then + g_tooltip.hideSpecial() + end currentHoveredWidget = nil end end @@ -51,28 +98,68 @@ local function onWidgetStyleApply(widget, styleName, styleNode) if styleNode.tooltip then widget.tooltip = styleNode.tooltip end + if styleNode.specialtooltip then + widget.specialtooltip = {{header = '', info = styleNode.specialtooltip}} + end + + local tooltipWidget = widget:getChildById('toolTipWidget') + if widget:getId() == 'toolTipWidget' then + tooltipWidget = widget + widget = widget:getParent() + end + if tooltipWidget then + if widget.tooltip then + tooltipWidget.tooltip = widget.tooltip + widget.tooltip = nil + end + if widget.specialtooltip then + tooltipWidget.specialtooltip = widget.specialtooltip + widget.specialtooltip = nil + end + if tooltipWidget.tooltip or tooltipWidget.specialtooltip then + tooltipWidget:setOpacity(1) + else + tooltipWidget:setOpacity(0.4) + end + end end -- public functions function g_tooltip.init() connect(UIWidget, { onStyleApply = onWidgetStyleApply, - onHoverChange = onWidgetHoverChange + onHoverChange = onWidgetHoverChange, + onDestroy = onWidgetDestroy }) addEvent(function() toolTipLabel = g_ui.createWidget('UILabel', rootWidget) toolTipLabel:setId('toolTip') - toolTipLabel:setBackgroundColor('#111111cc') - toolTipLabel:setTextAlign(AlignCenter) + toolTipLabel:setBackgroundColor('#c0c0c0ff') + toolTipLabel:setTextAlign(AlignLeft) + toolTipLabel:setColor('#3f3f3fff') + toolTipLabel:setBorderColor("#4c4c4cff") + toolTipLabel:setBorderWidth(1) + toolTipLabel:setTextOffset(topoint('5 3')) toolTipLabel:hide() end) + + addEvent(function() + SpecialoolTipLabel = g_ui.createWidget('UIWidget', rootWidget) + SpecialoolTipLabel:setBackgroundColor('#c0c0c0ff') + SpecialoolTipLabel:setBorderColor("#4c4c4cff") + SpecialoolTipLabel:setBorderWidth(1) + SpecialoolTipLabel:setWidth(455) + SpecialoolTipLabel:setPaddingTop(2) + SpecialoolTipLabel:hide() + end) end function g_tooltip.terminate() disconnect(UIWidget, { onStyleApply = onWidgetStyleApply, - onHoverChange = onWidgetHoverChange + onHoverChange = onWidgetHoverChange, + onDestroy = onWidgetDestroy }) currentHoveredWidget = nil @@ -104,6 +191,65 @@ function g_tooltip.display(text) }) end +function g_tooltip.displaySpecial(special) + if not SpecialoolTipLabel then + return + end + + local width = 4 + local height = 4 + SpecialoolTipLabel:destroyChildren() + for index, data in ipairs(special) do + local headerW = 0 + local headerH = 0 + if string.len(data.header) > 0 then + local header = g_ui.createWidget('UILabel', SpecialoolTipLabel) + if index == 1 then + header:addAnchor(AnchorTop, 'parent', AnchorTop) + else + header:addAnchor(AnchorTop, 'prev', AnchorBottom) + end + header:addAnchor(AnchorLeft, 'parent', AnchorLeft) + header:setText(data.header) + header:setTextAlign(AlignLeft) + header:setColor("#4c4c4cff") + header:setFont('verdana-11px-monochrome-underline') + header:setTextOffset(topoint('5 0')) + header:resizeToText() + header:resize(header:getWidth(), header:getHeight()) + headerW = header:getWidth() + headerH = header:getHeight() + end + + local info = g_ui.createWidget('UILabel', SpecialoolTipLabel) + if string.len(data.header) > 0 then + info:addAnchor(AnchorTop, 'prev', AnchorBottom) + else + info:addAnchor(AnchorTop, 'parent', AnchorTop) + end + info:addAnchor(AnchorLeft, 'parent', AnchorLeft) + info:setText(data.info:wrap(445)) + info:setTextAlign(AlignLeft) + info:setColor("#4c4c4cff") + info:setTextOffset(topoint('5 0')) + info:resizeToText() + info:resize(info:getWidth(), info:getHeight()) + width = width + math.max(headerW, info:getWidth()) + height = height + headerH + info:getHeight() + end + + SpecialoolTipLabel:resize(width, height) + SpecialoolTipLabel:show() + SpecialoolTipLabel:raise() + SpecialoolTipLabel:enable() + g_effects.fadeIn(SpecialoolTipLabel, 100) + moveSpecialToolTip(true) + + connect(rootWidget, { + onMouseMove = moveSpecialToolTip + }) +end + function g_tooltip.hide() g_effects.fadeOut(toolTipLabel, 100) @@ -112,21 +258,46 @@ function g_tooltip.hide() }) end +function g_tooltip.hideSpecial() + g_effects.fadeOut(SpecialoolTipLabel, 100) + + disconnect(rootWidget, { + onMouseMove = moveSpecialToolTip + }) +end + -- @docclass UIWidget @{ -- UIWidget extensions function UIWidget:setTooltip(text) - self.tooltip = text + local tooltipWidget = self:getChildById('toolTipWidget') + if tooltipWidget then + tooltipWidget.tooltip = text + else + self.tooltip = text + end +end + +function UIWidget:setSpecialToolTip(special) + if type(special) == "string" then + special = {{header = '', info = special}} + end + self.specialtooltip = special end function UIWidget:removeTooltip() self.tooltip = nil + self.specialtooltip = nil end function UIWidget:getTooltip() return self.tooltip end +function UIWidget:getSpecialTooltip() + return self.specialtooltip +end + -- @} g_tooltip.init() diff --git a/modules/corelib/ui/uicalendar.lua b/modules/corelib/ui/uicalendar.lua new file mode 100644 index 0000000000..0031b66073 --- /dev/null +++ b/modules/corelib/ui/uicalendar.lua @@ -0,0 +1,114 @@ +-- @docclass +UICalendar = extends(UIWidget, 'UICalendar') + +function UICalendar.create(title, okCallback, cancelCallback) + local calendar = UICalendar.internalCreate() + return calendar +end + +function UICalendar:onSetup() + self:setOn(self:isEnabled()) + for _, children in ipairs(self:getChildren()) do + if self.disableLeftBright ~= nil then + children.disableLeftBright = self.disableLeftBright + end + if self.weekName ~= nil then + children.weekName = self.weekName + end + if self.dayOfTheWeek ~= nil then + children.dayOfTheWeek = self.dayOfTheWeek + end + if self:getParent() and self:getParent().dayOfTheWeek ~= nil then + self.dayOfTheWeek = self:getParent().dayOfTheWeek + end + if self:getParent() and self:getParent().disableLeftBright ~= nil then + self.disableLeftBright = self:getParent().disableLeftBright + end + if self:getParent() and self:getParent().weekName ~= nil then + self.weekName = self:getParent().weekName + end + if children:getId() == "week" and children.weekName ~= nil then + children:setText(children.weekName) + elseif children:getId() == "brightColumn" then + children:setOn(not(self.disableLeftBright)) + elseif children:getId() == "dayAndSeason" then + for _, innerChildren in ipairs(children:getChildren()) do + if innerChildren:getId() == "day" then + if self.dayOfTheWeek ~= nil then + innerChildren:setOn(true) + innerChildren:setWidth(string.len(innerChildren:getText()) * 10) + else + innerChildren:setOn(false) + end + end + end + else + children:setOn(self:isEnabled()) + end + end +end + +function UICalendar:addScheduleEvent(event, active, onClick) + local content = self:getChildById('content') + if not content then + return + end + + if #(content:getChildren()) == 4 then + return + end + + local widget = g_ui.createWidget('CalendarEvent', content) + if onClick then + connect(widget, { + onClick = function() + onClick() + end + }) + end + if event.season then + widget:getParent():getParent():recursiveGetChildById('dayAndSeason'):setOn(true) + widget:getParent():getParent():recursiveGetChildById('season'):setOn(true) + end + if active then + widget:setBackgroundColor(event.active) + else + widget:setBackgroundColor(event.inactive) + end + if #(content:getChildren()) == 1 then + widget:addAnchor(AnchorTop, 'parent', AnchorTop) + else + widget:addAnchor(AnchorTop, 'prev', AnchorBottom) + end + local special = {} + table.insert(special, {header = (event.name .. ":"), info = event.description}) + widget:setSpecialToolTip(special) + + widget.text = widget:getChildById('text') + local eventText = event.name + if event.firstDay or event.lastDay then + eventText = "* " .. eventText + if string.len(eventText) >= 11 then + eventText = string.sub(eventText, 1, 14) .. "..." + end + elseif string.len(eventText) >= 10 then + eventText = string.sub(eventText, 1, 13) .. "..." + end + widget.text:setText(eventText) + if active then + widget.text:setOpacity(1.0) + else + widget.text:setOpacity(0.75) + end +end + +function UICalendar:clearEvents() + local content = self:getChildById('content') + if not content then + return + end + + content:destroyChildren() + self:recursiveGetChildById('season'):setOn(false) + self:recursiveGetChildById('dayAndSeason'):setOn(false) +end \ No newline at end of file diff --git a/modules/corelib/ui/uilabel.lua b/modules/corelib/ui/uilabel.lua index d9f285bd82..c572ac47e0 100644 --- a/modules/corelib/ui/uilabel.lua +++ b/modules/corelib/ui/uilabel.lua @@ -8,3 +8,17 @@ function UILabel.create() label:setTextAlign(AlignLeft) return label end + +function UILabel:setValue(value) + local scrollBar = self:recursiveGetChildById('valueBar') + if scrollBar then + scrollBar:setValue(value) + end +end + +function UILabel:setValue(value) + local scrollBar = self:recursiveGetChildById('valueBar') + if scrollBar then + scrollBar:setValue(value) + end +end \ No newline at end of file diff --git a/modules/corelib/ui/uimessagebox.lua b/modules/corelib/ui/uimessagebox.lua index c07020eb6f..bde4d99be3 100644 --- a/modules/corelib/ui/uimessagebox.lua +++ b/modules/corelib/ui/uimessagebox.lua @@ -1,50 +1,61 @@ -if not UIWindow then - dofile 'uiwindow' +if not UIMiniWindow then + dofile 'uiminiwindow' end -- @docclass -UIMessageBox = extends(UIWindow, 'UIMessageBox') +UIMessageBox = extends(UIMiniWindow, 'UIMessageBox') -- messagebox cannot be created from otui files -UIMessageBox.create = nil - -function UIMessageBox.display(title, message, buttons, onEnterCallback, onEscapeCallback) - local messageBox = UIMessageBox.internalCreate() - rootWidget:addChild(messageBox) - - messageBox:setStyle('MainWindow') - messageBox:setText(title) - - local messageLabel = g_ui.createWidget('MessageBoxLabel', messageBox) - messageLabel:setText(message) - - local buttonsWidth = 0 - local buttonsHeight = 0 - - local anchor = AnchorRight - if buttons.anchor then - anchor = buttons.anchor - end +function UIMessageBox.create(title, okCallback, cancelCallback) + local calendar = UIMessageBox.internalCreate() + return calendar +end - local buttonHolder = g_ui.createWidget('MessageBoxButtonHolder', messageBox) - buttonHolder:addAnchor(anchor, 'parent', anchor) +function UIMessageBox.display(title, message, buttons, onEnterCallback, onEscapeCallback) + local staticSizes = { + width = { + max = 616, + min = 116 + }, + height = { + min = 56, + max = 616 + } + } + local currentSizes = { + width = 0, + height = 0 + } + + local messageBox = g_ui.createWidget('MessageBoxWindow', rootWidget) + messageBox.title = messageBox:getChildById('title') + messageBox.title:setText(title) + + messageBox.content = messageBox:getChildById('content') + messageBox.content:setText(message) + messageBox.content:resizeToText() + messageBox.content:resize(messageBox.content:getWidth(), messageBox.content:getHeight()) + currentSizes.width = currentSizes.width + messageBox.content:getWidth() + 32 + currentSizes.height = currentSizes.height + messageBox.content:getHeight() + 20 + + messageBox.holder = messageBox:getChildById('holder') + + currentSizes.height = currentSizes.height + 22 for i = 1, #buttons do local button = messageBox:addButton(buttons[i].text, buttons[i].callback) + button:addAnchor(AnchorTop, 'parent', AnchorTop) if i == 1 then - button:setMarginLeft(0) - button:addAnchor(AnchorBottom, 'parent', AnchorBottom) - button:addAnchor(AnchorLeft, 'parent', AnchorLeft) - buttonsHeight = button:getHeight() + button:addAnchor(AnchorRight, 'parent', AnchorRight) + currentSizes.height = currentSizes.height + button:getHeight() + 22 else - button:addAnchor(AnchorBottom, 'prev', AnchorBottom) - button:addAnchor(AnchorLeft, 'prev', AnchorRight) + button:addAnchor(AnchorRight, 'prev', AnchorLeft) + button:setMarginRight(10) end - buttonsWidth = buttonsWidth + button:getWidth() + button:getMarginLeft() end - buttonHolder:setWidth(buttonsWidth) - buttonHolder:setHeight(buttonsHeight) + messageBox:setWidth(math.min(staticSizes.width.max, math.max(staticSizes.width.min, currentSizes.width))) + messageBox:setHeight(math.min(staticSizes.height.max, math.max(staticSizes.height.min, currentSizes.height))) if onEnterCallback then connect(messageBox, { @@ -57,10 +68,6 @@ function UIMessageBox.display(title, message, buttons, onEnterCallback, onEscape }) end - messageBox:setWidth(math.max(messageLabel:getWidth(), messageBox:getTextSize().width, buttonHolder:getWidth()) + - messageBox:getPaddingLeft() + messageBox:getPaddingRight()) - messageBox:setHeight(messageLabel:getHeight() + messageBox:getPaddingTop() + messageBox:getPaddingBottom() + - buttonHolder:getHeight() + buttonHolder:getMarginTop()) return messageBox end @@ -105,8 +112,10 @@ function displayGeneralBox(title, message, buttons, onEnterCallback, onEscapeCal end function UIMessageBox:addButton(text, callback) - local buttonHolder = self:getChildById('buttonHolder') - local button = g_ui.createWidget('MessageBoxButton', buttonHolder) + local holder = self:getChildById('holder') + local button = g_ui.createWidget('QtButton', holder) + button:setWidth(math.max(48, 10 + (string.len(text) * 8))) + button:setHeight(20) button:setText(text) connect(button, { onClick = callback diff --git a/modules/corelib/ui/uiminiwindow.lua b/modules/corelib/ui/uiminiwindow.lua index 0e2cb2e627..ad5def2074 100644 --- a/modules/corelib/ui/uiminiwindow.lua +++ b/modules/corelib/ui/uiminiwindow.lua @@ -69,14 +69,14 @@ function UIMiniWindow:maximize(dontSave) parent:fitAll(self) end - signalcall(self.onMaximize, self) + signalcall(self.onMaximize, self) end function UIMiniWindow:setup() - self:getChildById('closeButton').onClick = function() - self:close() + self:getChildById('closeButton').onClick = function() + self:close() end - + self:getChildById('minimizeButton').onClick = function() if self:isOn() then @@ -85,13 +85,23 @@ function UIMiniWindow:setup() self:minimize() end end + + self:getChildById('lockButton').onClick = function() + + if self:isDraggable() then + self:lock() + else + self:unlock() + end + end + self:getChildById('miniwindowTopBar').onDoubleClick = function() if self:isOn() then self:maximize() else self:minimize() end - end + end end function UIMiniWindow:setupOnStart() @@ -117,7 +127,7 @@ function UIMiniWindow:setupOnStart() g_settings.setNode('CharMiniWindows', settings) break end - + end local selfSettings = settings[char][self:getId()] @@ -133,7 +143,7 @@ function UIMiniWindow:setupOnStart() self:setParent(parent, true) self:setPosition(topoint(selfSettings.position)) newParentSet = true - + end end end @@ -156,7 +166,6 @@ function UIMiniWindow:setupOnStart() self:open(true) end end - local newParent = self:getParent() @@ -194,6 +203,8 @@ function UIMiniWindow:onDragEnter(mousePos) end if parent:getClassName() == 'UIMiniWindowContainer' then + self.oldParentDrag = parent + self.oldParentDragIndex = parent:getChildIndex(self) local containerParent = parent:getParent() parent:removeChild(self) containerParent:addChild(self) @@ -220,6 +231,17 @@ function UIMiniWindow:onDragLeave(droppedWidget, mousePos) end self:saveParent(self:getParent()) + + -- Note: It seems to prevent the minimap, inventory, and health widgets from moving off the interface panel. + if self.moveOnlyToMain or droppedWidget and droppedWidget.onlyPhantomDrop then + if not (droppedWidget) or (self.moveOnlyToMain and not (droppedWidget.onlyPhantomDrop)) or + (not (self.moveOnlyToMain) and droppedWidget.onlyPhantomDrop) then + local virtualParent = self:getParent() + virtualParent:removeChild(self) + self.oldParentDrag:insertChild(self.oldParentDragIndex, self) + self.movedWidget = nil + end + end end function UIMiniWindow:onDragMove(mousePos, mouseMoved) @@ -260,7 +282,6 @@ function UIMiniWindow:onDragMove(mousePos, mouseMoved) break end end - if not overAnyWidget and self.movedWidget then self.setMovedChildMargin(self.movedOldMargin or 0) @@ -316,7 +337,7 @@ function UIMiniWindow:getSettings(name) return selfSettings[name] end end - + return nil end @@ -387,7 +408,7 @@ function UIMiniWindow:saveParent(parent) self:saveParentPosition(parent:getId(), self:getPosition()) end end - + end function UIMiniWindow:saveParentPosition(parentId, position) @@ -482,5 +503,37 @@ end function UIMiniWindow:isResizeable() local resizeBorder = self:getChildById('bottomResizeBorder') + if not resizeBorder then + return false + end return resizeBorder:isExplicitlyVisible() and resizeBorder:isEnabled() end + +function UIMiniWindow:lock(dontSave) + local lockButton = self:getChildById('lockButton') + if lockButton then + lockButton:setOn(true) + end + self:setDraggable(false) + if not dontsave then + self:setSettings({ + locked = true + }) + end + + signalcall(self.onLockChange, self) +end + +function UIMiniWindow:unlock(dontSave) + local lockButton = self:getChildById('lockButton') + if lockButton then + lockButton:setOn(false) + end + self:setDraggable(true) + if not dontsave then + self:setSettings({ + locked = false + }) + end + signalcall(self.onLockChange, self) +end diff --git a/modules/corelib/ui/uiminiwindowcontainer.lua b/modules/corelib/ui/uiminiwindowcontainer.lua index 8aa7fd855a..b70daee4a3 100644 --- a/modules/corelib/ui/uiminiwindowcontainer.lua +++ b/modules/corelib/ui/uiminiwindowcontainer.lua @@ -1,256 +1,219 @@ -- @docclass -UIMiniWindowContainer = extends(UIWidget, "UIMiniWindowContainer") +UIMiniWindowContainer = extends(UIWidget, 'UIMiniWindowContainer') function UIMiniWindowContainer.create() - local container = UIMiniWindowContainer.internalCreate() - container.scheduledWidgets = {} - container:setFocusable(false) - container:setPhantom(true) - return container + local container = UIMiniWindowContainer.internalCreate() + container.scheduledWidgets = {} + container:setFocusable(false) + container:setPhantom(true) + return container end -- TODO: connect to window onResize event -- TODO: try to resize another widget? -- TODO: try to find another panel? function UIMiniWindowContainer:fitAll(noRemoveChild) - if not self:isVisible() then - return - end - - if not noRemoveChild then - local children = self:getChildren() - if #children > 0 then - noRemoveChild = children[#children] - else - return + if not self:isVisible() then + return end - end - local sumHeight = 0 - local children = self:getChildren() - for i = 1, #children do - if children[i]:isVisible() then - sumHeight = sumHeight + children[i]:getHeight() + if self.ignoreFillAll then + return end - end - - local selfHeight = self:getHeight() - (self:getPaddingTop() + self:getPaddingBottom()) - if sumHeight <= selfHeight then - return - end - - local removeChildren = {} - - -- try to resize noRemoveChild - local maximumHeight = selfHeight - (sumHeight - noRemoveChild:getHeight()) - if noRemoveChild:isResizeable() and noRemoveChild:getMinimumHeight() <= maximumHeight then - sumHeight = sumHeight - noRemoveChild:getHeight() + maximumHeight - addEvent(function() noRemoveChild:setHeight(maximumHeight) end) - end - - -- try to remove no-save widget - for i = #children, 1, -1 do - if sumHeight <= selfHeight then - break + if not noRemoveChild then + local children = self:getChildren() + if #children > 0 then + noRemoveChild = children[#children] + else + return + end end - local child = children[i] - if child ~= noRemoveChild and child:isVisible() and not child.save then - local childHeight = child:getHeight() - sumHeight = sumHeight - childHeight - table.insert(removeChildren, child) + local sumHeight = 0 + local children = self:getChildren() + for i = 1, #children do + if children[i]:isVisible() then + sumHeight = sumHeight + children[i]:getHeight() + end end - end - -- try to remove save widget, not forceOpen - for i = #children, 1, -1 do + local selfHeight = self:getHeight() - (self:getPaddingTop() + self:getPaddingBottom()) if sumHeight <= selfHeight then - break + return end - local child = children[i] - if child ~= noRemoveChild and child:isVisible() and not child.forceOpen then - local childHeight = child:getHeight() - sumHeight = sumHeight - childHeight - table.insert(removeChildren, child) + local removeChildren = {} + + -- try to resize noRemoveChild + local maximumHeight = selfHeight - (sumHeight - noRemoveChild:getHeight()) + if noRemoveChild:isResizeable() and noRemoveChild:getMinimumHeight() <= maximumHeight then + sumHeight = sumHeight - noRemoveChild:getHeight() + maximumHeight + addEvent(function() + noRemoveChild:setHeight(maximumHeight) + end) end - end - -- try to remove save widget - for i = #children, 1, -1 do - if sumHeight <= selfHeight then - break + -- try to remove no-save widget + for i = #children, 1, -1 do + if sumHeight <= selfHeight then + break + end + + local child = children[i] + if child ~= noRemoveChild and not child.save then + local childHeight = child:getHeight() + sumHeight = sumHeight - childHeight + table.insert(removeChildren, child) + end end - local child = children[i] - if child ~= noRemoveChild and child:isVisible() then - local childHeight = child:getHeight() - 50 - sumHeight = sumHeight - childHeight - table.insert(removeChildren, child) + -- try to remove save widget + for i = #children, 1, -1 do + if sumHeight <= selfHeight then + break + end + + local child = children[i] + if child ~= noRemoveChild and child:isVisible() then + local childHeight = child:getHeight() + sumHeight = sumHeight - childHeight + table.insert(removeChildren, child) + end end - end - -- close widgets - for i = 1, #removeChildren do - if removeChildren[i].forceOpen then - removeChildren[i]:minimize(true) - else - removeChildren[i]:close() + -- close widgets + for i = 1, #removeChildren do + removeChildren[i]:close() end - end end function UIMiniWindowContainer:fits(child, minContentHeight, maxContentHeight) - local containerPanel = child:getChildById('contentsPanel') - local indispensableHeight = containerPanel:getMarginTop() + - containerPanel:getMarginBottom() + - containerPanel:getPaddingTop() + - containerPanel:getPaddingBottom() + if self.ignoreFillAll then + return 0 + end + + local containerPanel = child:getChildById('contentsPanel') + local indispensableHeight = containerPanel:getMarginTop() + containerPanel:getMarginBottom() + + containerPanel:getPaddingTop() + containerPanel:getPaddingBottom() - local totalHeight = 0 - local children = self:getChildren() - for i = 1, #children do - if children[i]:isVisible() then - totalHeight = totalHeight + children[i]:getHeight() + local totalHeight = 0 + local children = self:getChildren() + for i = 1, #children do + if children[i]:isVisible() then + totalHeight = totalHeight + children[i]:getHeight() + end end - end - local available = self:getHeight() - (self:getPaddingTop() + self:getPaddingBottom()) - totalHeight + local available = self:getHeight() - (self:getPaddingTop() + self:getPaddingBottom()) - totalHeight - if maxContentHeight > 0 and available >= (maxContentHeight + indispensableHeight) then - return maxContentHeight + indispensableHeight - elseif available >= (minContentHeight + indispensableHeight) - then - return available - else - return -1 - end + if maxContentHeight > 0 and available >= (maxContentHeight + indispensableHeight) then + return maxContentHeight + indispensableHeight + elseif available >= (minContentHeight + indispensableHeight) then + return available + else + return -1 + end end function UIMiniWindowContainer:onDrop(widget, mousePos) - if widget.UIMiniWindowContainer then - local oldParent = widget:getParent() - if oldParent == self then - return true + if (self.onlyPhantomDrop and not(widget.moveOnlyToMain)) or (widget.moveOnlyToMain and not(self.onlyPhantomDrop)) then + return true end - if oldParent then - oldParent:removeChild(widget) - end + if widget.UIMiniWindowContainer then + local oldParent = widget:getParent() + if oldParent == self then + return true + end - if widget.movedWidget then - local index = self:getChildIndex(widget.movedWidget) - self:insertChild(index + widget.movedIndex, widget) - else - self:addChild(widget) - end + if oldParent then + oldParent:removeChild(widget) + end - self:fitAll(widget) - return true - end -end + if widget.movedWidget then + local index = self:getChildIndex(widget.movedWidget) + self:insertChild(index + widget.movedIndex, widget) + else + self:addChild(widget) + end -function UIMiniWindowContainer:moveTo(newPanel) - if not newPanel or newPanel == self then - return - end - local children = self:getChildByIndex(1) - while children do - newPanel:addChild(children) - children = self:getChildByIndex(1) - end - newPanel:fitAll() + self:fitAll(widget) + return true + end end function UIMiniWindowContainer:swapInsert(widget, index) - local oldParent = widget:getParent() - local oldIndex = self:getChildIndex(widget) + local oldParent = widget:getParent() + local oldIndex = self:getChildIndex(widget) - if oldParent == self and oldIndex ~= index then - local oldWidget = self:getChildByIndex(index) - if oldWidget then - self:removeChild(oldWidget) - self:insertChild(oldIndex, oldWidget) + if oldParent == self and oldIndex ~= index then + local oldWidget = self:getChildByIndex(index) + if oldWidget then + self:removeChild(oldWidget) + self:insertChild(oldIndex, oldWidget) + end + self:removeChild(widget) + self:insertChild(index, widget) end - self:removeChild(widget) - self:insertChild(index, widget) - end end function UIMiniWindowContainer:scheduleInsert(widget, index) - if index - 1 > self:getChildCount() then - if self.scheduledWidgets[index] then - pdebug('replacing scheduled widget id ' .. widget:getId()) - end - self.scheduledWidgets[index] = widget - else - local oldParent = widget:getParent() - if oldParent ~= self then - if oldParent then - oldParent:removeChild(widget) - end - self:insertChild(index, widget) - - while true do - local placed = false - for nIndex, nWidget in pairs(self.scheduledWidgets) do - if nIndex - 1 <= self:getChildCount() then - local oldParent = nWidget:getParent() - if oldParent ~= self then - if oldParent then - oldParent:removeChild(nWidget) - end - self:insertChild(nIndex, nWidget) - else - self:moveChildToIndex(nWidget, nIndex) + if index - 1 > self:getChildCount() then + if self.scheduledWidgets[index] then + pdebug('replacing scheduled widget id ' .. widget:getId()) + end + self.scheduledWidgets[index] = widget + else + local oldParent = widget:getParent() + if oldParent ~= self then + if oldParent then + oldParent:removeChild(widget) end - self.scheduledWidgets[nIndex] = nil - placed = true - break - end + self:insertChild(index, widget) + + while true do + local placed = false + for nIndex, nWidget in pairs(self.scheduledWidgets) do + if nIndex - 1 <= self:getChildCount() then + self:insertChild(nIndex, nWidget) + self.scheduledWidgets[nIndex] = nil + placed = true + break + end + end + if not placed then + break + end + end + end - if not placed then break end - end end - end end function UIMiniWindowContainer:order() - local children = self:getChildren() - for i = 1, #children do - if not children[i].miniLoaded then return end - end - - table.sort(children, function(a, b) - local indexA = a.miniIndex or a.autoOpen or 999 - local indexB = b.miniIndex or b.autoOpen or 999 - return indexA < indexB - end) + local children = self:getChildren() + for i = 1, #children do + if not children[i].miniLoaded then + return + end + end - self:reorderChildren(children) - local ignoreIndex = 0 - for i = 1, #children do - if children[i].save then - children[i].miniIndex = i - ignoreIndex - else - ignoreIndex = ignoreIndex + 1 + for i = 1, #children do + if children[i].miniIndex then + self:swapInsert(children[i], children[i].miniIndex) + end end - end end function UIMiniWindowContainer:saveChildren() - local children = self:getChildren() - local ignoreIndex = 0 - for i = 1, #children do - if children[i].save then - children[i]:saveParentIndex(self:getId(), i - ignoreIndex) - else - ignoreIndex = ignoreIndex + 1 + local children = self:getChildren() + local ignoreIndex = 0 + for i = 1, #children do + if children[i].save then + children[i]:saveParentIndex(self:getId(), i - ignoreIndex) + else + ignoreIndex = ignoreIndex + 1 + end end - end -end - -function UIMiniWindowContainer:onGeometryChange() - self:fitAll() end diff --git a/modules/corelib/ui/uimovabletabbar.lua b/modules/corelib/ui/uimovabletabbar.lua index 34449c4f23..d275febfb2 100644 --- a/modules/corelib/ui/uimovabletabbar.lua +++ b/modules/corelib/ui/uimovabletabbar.lua @@ -20,18 +20,37 @@ end local function updateNavigation(tabBar) if tabBar.prevNavigation then - if #tabBar.preTabs > 0 or table.find(tabBar.tabs, tabBar.currentTab) ~= 1 then - tabBar.prevNavigation:enable() + if tabBar.prevNavigation.dynamicNavigation ~= nil and tabBar.prevNavigation.dynamicNavigation > 0 then + local fitsOnBar = math.floor(tabBar:getWidth() / tabBar.prevNavigation.dynamicNavigation) + if #tabBar.tabs >= fitsOnBar and (#tabBar.preTabs > 0 or table.find(tabBar.tabs, tabBar.currentTab) ~= 1) then + tabBar.prevNavigation:enable() + else + tabBar.prevNavigation:disable() + end else - tabBar.prevNavigation:disable() + if #tabBar.preTabs > 0 or table.find(tabBar.tabs, tabBar.currentTab) ~= 1 then + tabBar.prevNavigation:enable() + else + tabBar.prevNavigation:disable() + end end end if tabBar.nextNavigation then - if #tabBar.postTabs > 0 or table.find(tabBar.tabs, tabBar.currentTab) ~= #tabBar.tabs then - tabBar.nextNavigation:enable() + if tabBar.nextNavigation.dynamicNavigation ~= nil and tabBar.nextNavigation.dynamicNavigation > 0 then + local fitsOnBar = math.floor(tabBar:getWidth() / tabBar.nextNavigation.dynamicNavigation) + if #tabBar.tabs >= fitsOnBar and + (#tabBar.postTabs > 0 or table.find(tabBar.tabs, tabBar.currentTab) ~= #tabBar.tabs) then + tabBar.nextNavigation:enable() + else + tabBar.nextNavigation:disable() + end else - tabBar.nextNavigation:disable() + if #tabBar.postTabs > 0 or table.find(tabBar.tabs, tabBar.currentTab) ~= #tabBar.tabs then + tabBar.nextNavigation:enable() + else + tabBar.nextNavigation:disable() + end end end end @@ -264,7 +283,9 @@ function UIMoveableTabBar:addTab(text, panel, menuCallback) tab:setId('tab') tab:setDraggable(self.tabsMoveable) tab:setText(text) - tab:setWidth(tab:getTextSize().width + tab:getPaddingLeft() + tab:getPaddingRight()) + if not tab.ignoreTextResize then + tab:setWidth(tab:getTextSize().width + tab:getPaddingLeft() + tab:getPaddingRight()) + end tab.menuCallback = menuCallback or nil tab.onClick = onTabClick tab.onMousePress = onTabMousePress @@ -338,7 +359,7 @@ function UIMoveableTabBar:clearTabs() end function UIMoveableTabBar:removeTab(tab) - local tabTables = { self.tabs, self.preTabs, self.postTabs } + local tabTables = {self.tabs, self.preTabs, self.postTabs} local index = nil local tabTable = nil for i = 1, #tabTables do diff --git a/modules/corelib/ui/uipopupmenu.lua b/modules/corelib/ui/uipopupmenu.lua index 98bafe4bfc..dd6e44f896 100644 --- a/modules/corelib/ui/uipopupmenu.lua +++ b/modules/corelib/ui/uipopupmenu.lua @@ -78,7 +78,7 @@ function UIPopupMenu:addOption(optionName, optionCallback, shortcut) shortcutLabel:getMarginRight() end - self:setWidth(math.max(self:getWidth(), width)) + self:setWidth(math.max(190, math.max(self:getWidth(), width))) end function UIPopupMenu:addSeparator() diff --git a/modules/corelib/ui/uiscrollbar.lua b/modules/corelib/ui/uiscrollbar.lua index 04be6e8d83..db78a7f30e 100644 --- a/modules/corelib/ui/uiscrollbar.lua +++ b/modules/corelib/ui/uiscrollbar.lua @@ -33,6 +33,10 @@ local function calcValues(self) local px = math.max(proportion * pxrange, 6) px = px - px % 2 + 1 + if self.scrollSize and self:getParent() and self:getParent().scrollSize then + px = math.max(self:getParent().scrollSize, 14) + end + local offset = 0 if range == 0 or self.value == self.minimum then if self.orientation == 'vertical' then @@ -125,6 +129,7 @@ function UIScrollBar.create() scrollbar.showValue = false scrollbar.symbol = nil scrollbar.mouseScroll = true + scrollbar.scrollSize = nil return scrollbar end @@ -145,6 +150,15 @@ function UIScrollBar:onSetup() end) updateSlider(self) + + if self:getParent() then + if self:getParent().minimumScrollValue then + self:setMinimum(self:getParent().minimumScrollValue) + end + if self:getParent().maximumScrollValue then + self:setMaximum(self:getParent().maximumScrollValue) + end + end end function UIScrollBar:onStyleApply(styleName, styleNode) @@ -167,6 +181,8 @@ function UIScrollBar:onStyleApply(styleName, styleNode) self.symbol = value elseif name == 'mouse-scroll' then self.mouseScroll = value + elseif name == 'parent-scroll' then + self.scrollSize = value end end end diff --git a/modules/corelib/ui/uistatsbar.lua b/modules/corelib/ui/uistatsbar.lua new file mode 100644 index 0000000000..522be3272b --- /dev/null +++ b/modules/corelib/ui/uistatsbar.lua @@ -0,0 +1,158 @@ +-- @docclass +UIStatsBar = extends(UIWidget, 'UIStatsBar') + +function UIStatsBar.create() + local stats = UIStatsBar.internalCreate() + stats.bar = stats:getChildById('bar') + stats.text = stats:getChildById('text') + stats.onGeometryChange = function() + stats:setValue(stats.currentValue, stats.currentTotal) + stats:reloadBorder() + end + return stats +end + +function UIStatsBar:reloadBorder() + if not self.grade then + if self.statsOrientation == 'horizontal' then + self.grade = self:getChildById('horizontalGrade') + elseif self.statsOrientation == 'vertical' then + self.grade = self:getChildById('verticalGrade') + end + end + + for _, child in ipairs(self.grade:getChildren()) do + if string.len(tostring(child:getId())) >= 6 and string.sub(tostring(child:getId()), 1, 6) == "grade_" then + child:hide() + end + end + + if not self.statsGradeColor then + self.grade:hide() + return + end + + self.grade:show() + + -- Borders + for _, child in ipairs(self.grade:getChildren()) do + if string.len(child:getId()) >= 13 and string.sub(child:getId(), 1, 13) == 'grade_border_' then + child:show() + child:setBackgroundColor(self.statsGradeColor) + end + end + + -- Markers + local markerOffset = 3 + for _, child in ipairs(self.grade:getChildren()) do + if self.statsGrade == 3 then + if child:getId() == 'grade_left_1' then + child:show() + if self.statsOrientation == 'horizontal' then + child:setMarginLeft(((self:getWidth() - 2) * 0.33) - markerOffset) + else + child:setMarginTop(((self:getHeight() - 2) * 0.33) - markerOffset) + end + elseif child:getId() == 'grade_right_1' then + child:show() + if self.statsOrientation == 'horizontal' then + child:setMarginRight(((self:getWidth() - 2) * 0.33) - markerOffset) + else + child:setMarginBottom(((self:getHeight() - 2) * 0.33) - markerOffset) + end + end + elseif self.statsGrade == 4 then + if child:getId() == 'grade_left_1' then + child:show() + if self.statsOrientation == 'horizontal' then + child:setMarginLeft(((self:getWidth() - 2) * 0.25) - markerOffset) + else + child:setMarginTop(((self:getHeight() - 2) * 0.25) - markerOffset) + end + elseif child:getId() == 'grade_left_2' then + child:show() + if self.statsOrientation == 'horizontal' then + child:setMarginLeft(((self:getWidth() - 2) * 0.5) - markerOffset) + else + child:setMarginTop(((self:getHeight() - 2) * 0.5) - markerOffset) + end + elseif child:getId() == 'grade_right_1' then + child:show() + if self.statsOrientation == 'horizontal' then + child:setMarginRight(((self:getWidth() - 2) * 0.25) - markerOffset) + else + child:setMarginBottom(((self:getHeight() - 2) * 0.25) - markerOffset) + end + end + end + end +end + +function UIStatsBar:onStyleApply(styleName, styleNode) + for name, value in pairs(styleNode) do + if name == 'statsbar-type' then + self.statsType = value + elseif name == 'statsbar-size' then + self.statsSize = value + elseif name == 'statsbar-text' then + self.showText = value + elseif name == 'statsbar-orientation' then + self.statsOrientation = value + elseif name == 'statsbar-grade' then + self.statsGrade = value + elseif name == 'statsbar-gradecolor' then + self.statsGradeColor = value + end + end +end + +function UIStatsBar:setValue(value, total) + if not(value) or not(total) or total == 0 or not(self.statsType) or not(self.statsSize) or not (self.statsOrientation) then + return + end + + value = math.min(total, math.max(0, value)) + self.currentValue = value + self.currentTotal = total + + -- Bar dimension + if self.statsOrientation == 'horizontal' then + self.bar:setWidth(((self:getWidth() - 2) * value) / total) + elseif self.statsOrientation == 'vertical' then + self.bar:setHeight(((self:getHeight() - 2) * value) / total) + else + return + end + + -- Bar color + local percent = (value * 100) / total + if self.statsType == 'health' then + if percent >= 100 then + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_health_progressbar_' .. self.statsSize .. '_100') + elseif percent >= 95 then + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_health_progressbar_' .. self.statsSize .. '_95') + elseif percent >= 60 then + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_health_progressbar_' .. self.statsSize .. '_60') + elseif percent >= 30 then + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_health_progressbar_' .. self.statsSize .. '_30') + elseif percent >= 10 then + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_health_progressbar_' .. self.statsSize .. '_10') + else + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_health_progressbar_' .. self.statsSize .. '_4') + end + elseif self.statsType == 'mana' then + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_mana_progressbar_' .. self.statsSize) + elseif self.statsType == 'experience' then + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_experience_progressbar_' .. self.statsSize) + elseif self.statsType == 'skill' then + self.bar:setImageSource('/images/bars/' .. self.statsOrientation .. '_skill_progressbar_' .. self.statsSize) + end + + -- Text + if self.showText then + self.text:show() + self.text:setText(value .. '/' .. total) + else + self.text:hide() + end +end \ No newline at end of file diff --git a/modules/corelib/util.lua b/modules/corelib/util.lua index 159f095066..849d3869fd 100644 --- a/modules/corelib/util.lua +++ b/modules/corelib/util.lua @@ -41,6 +41,10 @@ function quit() end function connect(object, arg1, arg2, arg3) + if not object then + return + end + local signalsAndSlots local pushFront if type(arg1) == 'string' then diff --git a/modules/game_actionbar/game_actionbar.lua b/modules/game_actionbar/game_actionbar.lua index 264990941b..cf3c8c5569 100644 --- a/modules/game_actionbar/game_actionbar.lua +++ b/modules/game_actionbar/game_actionbar.lua @@ -4,6 +4,7 @@ HOTKEY_USEONTARGET = 2 HOTKEY_USEWITH = 3 local maxSlots = 60 +local isLocked = false actionBar = nil actionBarPanel = nil bottomPanel = nil @@ -36,12 +37,8 @@ function init() mouseGrabberWidget:setFocusable(false) mouseGrabberWidget.onMouseRelease = onChooseItemMouseRelease - local console = modules.game_console.consolePanel - if console then - console:addAnchor(AnchorTop, actionBar:getId(), AnchorBottom) - end - if g_game.isOnline() then + addEvent(function() setupActionBar() loadActionBar() @@ -89,14 +86,21 @@ function terminate() }) end - local console = modules.game_console.consolePanel - if console then - console:removeAnchor(AnchorTop) - console:fill('parent') - end end function online() + + if g_game.getFeature(GameSpellList) then + local console = modules.game_cooldown.cooldownWindow + if console then + console:addAnchor(AnchorTop, actionBar:getId(), AnchorBottom) + end + else + local console = modules.game_console.consolePanel + if console then + console:addAnchor(AnchorTop, actionBar:getId(), AnchorBottom) + end + end actionBarPanel:destroyChildren() addEvent(function() setupActionBar() @@ -148,6 +152,10 @@ function copySlot(fromSlotId, toSlotId, visible) end function onDropFunc(slotId) + if isLocked then + return + end + if slotReassign then local fromSlotId = slotToEdit local toSlotId = slotId @@ -194,12 +202,14 @@ function setupActionBar() g_mouse.bindPress(slot, function() createMenu('slot' .. i) end, MouseRightButton) - g_mouse.bindOnDrop(slot, function() - if slotToEdit == 'slot' .. i then - slotReassign = 'slot' .. i - end - onDropFunc('slot' .. i) - end) + if not isLocked then + g_mouse.bindOnDrop(slot, function() + if slotToEdit == 'slot' .. i then + slotReassign = 'slot' .. i + end + onDropFunc('slot' .. i) + end) + end if i == 1 then slot:addAnchor(AnchorLeft, 'parent', AnchorLeft) end @@ -553,6 +563,10 @@ function onChooseItemMouseRelease(self, mousePosition, mouseButton) end function onChooseItemByDrag(self, mousePosition, item) + if isLocked then + return + end + if item and item:getPosition().x == 65535 and slotToEdit then openObjectAssignWindow() objectAssignWindow:getChildById('previewItem'):setItemId(item:getId()) @@ -624,6 +638,22 @@ function unbindHotkeys() end function setupHotkeys() + local horizontalScroll = actionBar:getChildById('horizontalScroll') + if horizontalScroll:getValue() == horizontalScroll:getMaximum() then + actionBar:getChildById('nextButton'):setEnabled(false) + actionBar:getChildById('nextSkipButton'):setEnabled(false) + else + actionBar:getChildById('nextButton'):setEnabled(true) + actionBar:getChildById('nextSkipButton'):setEnabled(true) + end + if horizontalScroll:getValue() == horizontalScroll:getMinimum() then + actionBar:getChildById('prevButton'):setEnabled(false) + actionBar:getChildById('prevSkipButton'):setEnabled(false) + else + actionBar:getChildById('prevButton'):setEnabled(true) + actionBar:getChildById('prevSkipButton'):setEnabled(true) + end + unbindHotkeys() for v, slot in pairs(actionBarPanel:getChildren()) do slot.onMouseRelease = function() @@ -1045,3 +1075,49 @@ function showSpell(spellListLabel) spellListLabel:show() end end + +function onDecrementHorizontalScroll(value) + if value == 999 then + value = math.floor(actionBarPanel:getWidth() / 36) * 36 + end + + actionBar:getChildById('nextButton'):setEnabled(true) + actionBar:getChildById('nextSkipButton'):setEnabled(true) + local horizontalScroll = actionBar:getChildById('horizontalScroll') + if (horizontalScroll:getValue() - value) <= horizontalScroll:getMinimum() then + actionBar:getChildById('prevButton'):setEnabled(false) + actionBar:getChildById('prevSkipButton'):setEnabled(false) + else + actionBar:getChildById('prevButton'):setEnabled(true) + actionBar:getChildById('prevSkipButton'):setEnabled(true) + end + + horizontalScroll:decrement(value) +end + +function onIncrementHorizontalScroll(value) + if value == 999 then + value = math.floor(actionBarPanel:getWidth() / 36) * 36 + end + + actionBar:getChildById('prevButton'):setEnabled(true) + actionBar:getChildById('prevSkipButton'):setEnabled(true) + local horizontalScroll = actionBar:getChildById('horizontalScroll') + if (horizontalScroll:getValue() + value) >= horizontalScroll:getMaximum() then + actionBar:getChildById('nextButton'):setEnabled(false) + actionBar:getChildById('nextSkipButton'):setEnabled(false) + else + actionBar:getChildById('nextButton'):setEnabled(true) + actionBar:getChildById('nextSkipButton'):setEnabled(true) + end + + horizontalScroll:increment(value) +end + +function setLocked(v) + isLocked = v +end + +function getPanelActionbar() + return actionBar +end diff --git a/modules/game_actionbar/game_actionbar.otui b/modules/game_actionbar/game_actionbar.otui index da3474bfa8..3b41e37c34 100644 --- a/modules/game_actionbar/game_actionbar.otui +++ b/modules/game_actionbar/game_actionbar.otui @@ -42,36 +42,49 @@ UIWindow anchors.top: parent.top anchors.left: parent.left anchors.right: parent.right - image-source: /images/ui/panel_side - image-border: 4 - padding: 3 + padding-top: 3 text-align: center //background-color: gray auto-focus: first draggable: false phantom: false focusable: false + Button id: prevButton - image-source: /images/game/actionbar/1pixel-up-frame-background - icon: /images/game/actionbar/icon-arrow + image-source: /images/ui/lenshelp + image-clip: 0 17 17 17 anchors.left: parent.left anchors.top: parent.top - size: 17 17 margin-left: 2 + size: 17 17 @onClick: | - modules.game_actionbar.actionBar:getChildById('horizontalScroll'):decrement(36) + modules.game_actionbar.onDecrementHorizontalScroll(36) + + $pressed: + image-clip: 17 17 17 17 + + $disabled: + image-clip: 34 17 17 17 + Button id: prevSkipButton - image-source: /images/game/actionbar/1pixel-up-frame-background - icon: /images/game/actionbar/icon-arrowskip + image-source: /images/ui/lenshelp + image-clip: 0 34 17 17 anchors.left: parent.left anchors.top: prevButton.bottom - size: 17 17 margin-left: 2 + size: 17 17 margin-top: 2 @onClick: | - modules.game_actionbar.actionBar:getChildById('horizontalScroll'):decrement(999) + modules.game_actionbar.onDecrementHorizontalScroll(999) + + $pressed: + image-clip: 17 34 17 17 + + $disabled: + image-clip: 34 34 17 17 + ScrollablePanel id: actionBarPanel anchors.top: parent.top @@ -94,24 +107,60 @@ UIWindow step: 38 pixels-scroll: true visible: false + Button - id: nextButton - image-source: /images/game/actionbar/1pixel-up-frame-background - icon: /images/game/actionbar/icon-arrow-right + id: lockButton + image-source: /images/ui/actionbar_unlocked + image-clip: 0 0 12 34 anchors.right: parent.right anchors.top: parent.top - size: 17 17 margin-right: 2 + &isLocked: false + size: 12 34 @onClick: | - modules.game_actionbar.actionBar:getChildById('horizontalScroll'):increment(36) + if self.isLocked then + self.isLocked = false + self:setImageSource('/images/ui/actionbar_unlocked') + else + self.isLocked = true + self:setImageSource('/images/ui/actionbar_locked') + end + modules.game_actionbar.setLocked(self.isLocked) + + $pressed: + image-clip: 12 0 12 34 + + Button + id: nextButton + image-source: /images/ui/lenshelp + image-clip: 0 0 17 17 + anchors.right: lockButton.left + anchors.top: parent.top + margin-right: 2 + size: 17 17 + @onClick: | + modules.game_actionbar.onIncrementHorizontalScroll(36) + + $pressed: + image-clip: 17 0 17 17 + + $disabled: + image-clip: 34 0 17 17 + Button id: nextSkipButton - image-source: /images/game/actionbar/1pixel-up-frame-background - icon: /images/game/actionbar/icon-arrowskip-right - anchors.right: parent.right + image-source: /images/ui/lenshelp + image-clip: 0 51 17 17 + anchors.right: lockButton.left anchors.top: nextButton.bottom - size: 17 17 margin-right: 2 + size: 17 17 margin-top: 2 @onClick: | - modules.game_actionbar.actionBar:getChildById('horizontalScroll'):increment(999) \ No newline at end of file + modules.game_actionbar.onIncrementHorizontalScroll(999) + + $pressed: + image-clip: 17 51 17 17 + + $disabled: + image-clip: 34 51 17 17 diff --git a/modules/game_attachedeffects/attachedeffects.lua b/modules/game_attachedeffects/attachedeffects.lua index a341910d34..a8547e16cd 100644 --- a/modules/game_attachedeffects/attachedeffects.lua +++ b/modules/game_attachedeffects/attachedeffects.lua @@ -11,6 +11,7 @@ end function controller:onGameEnd() g_game.getLocalPlayer():clearAttachedEffects() end]] + function controller:onTerminate() g_attachedEffects.clear() end @@ -53,3 +54,32 @@ controller:attachExternalEvent(EventController:new(AttachedEffect, { onAttach = onAttach, onDetach = onDetach })) + +-- @ note: sorry, I couldn't find any other way to do it +function getCategory(id) + return AttachedEffectManager.get(id).thingCategory +end + +function getTexture(id) + if AttachedEffectManager.get(id).thingCategory == 5 then + return AttachedEffectManager.get(id).thingId + end +end + +function getName(id) + if type(id) == "number" then + return AttachedEffectManager.get(id).name + else + return "None" + end + +end + +function thingId(id) + if type(id) == "number" then + return AttachedEffectManager.get(id).thingId + else + return "None" + end +end +-- @ diff --git a/modules/game_battle/battle.lua b/modules/game_battle/battle.lua index 500e42f341..dda3268f5a 100644 --- a/modules/game_battle/battle.lua +++ b/modules/game_battle/battle.lua @@ -1,5 +1,5 @@ -- Global Tables -local binaryTree = {} -- BST +local binaryTree = {} -- BST local battleButtons = {} -- map of creature id -- Global variables that will inherit from init @@ -63,8 +63,8 @@ end function init() -- Initiating the module (load) g_ui.importStyle('battlebutton') - battleButton = modules.client_topmenu.addRightGameToggleButton('battleButton', tr('Battle') .. ' (Ctrl+B)', - '/images/topbuttons/battle', toggle) + battleButton = modules.game_mainpanel.addToggleButton('battleButton', tr('Battle') .. ' (Ctrl+B)', + '/images/options/button_battlelist', toggle, false, 2) battleButton:setOn(true) battleWindow = g_ui.loadUI('battle') @@ -88,14 +88,14 @@ function init() -- Initiating the module (load) end -- Adding Filter options - local options = { 'hidePlayers', 'hideNPCs', 'hideMonsters', 'hideSkulls', 'hideParty' } + local options = {'hidePlayers', 'hideNPCs', 'hideMonsters', 'hideSkulls', 'hideParty'} for i, v in ipairs(options) do hideButtons[v] = battleWindow:recursiveGetChildById(v) end -- Adding SortType and SortOrder options - local sortTypeOptions = { 'Name', 'Distance', 'Age', 'Health' } - local sortOrderOptions = { 'Asc.', 'Desc.' } + local sortTypeOptions = {'Name', 'Distance', 'Age', 'Health'} + local sortOrderOptions = {'Asc.', 'Desc.'} local sortTypeBox = battleWindow:recursiveGetChildById('sortTypeBox') for i, v in ipairs(sortTypeOptions) do @@ -467,12 +467,15 @@ end local function canBeSeen(creature) return creature and creature:canBeSeen() and creature:getPosition() and - modules.game_interface.getMapPanel():isInRange(creature:getPosition()) + modules.game_interface.getMapPanel():isInRange(creature:getPosition()) end local function getDistanceBetween(p1, p2) -- Calculate distance if p2 == nil then - p2 = { x = 0, y = 0 } + p2 = { + x = 0, + y = 0 + } end local xd = math.abs(p1.x - p2.x); @@ -630,7 +633,7 @@ function removeCreature(creature, all) -- Remove a single creature or all end assert(index ~= nil, 'Not able to remove creature: id ' .. creatureId .. ' not found in binary search using ' .. sortType .. - ' to find value ' .. msg .. '.') + ' to find value ' .. msg .. '.') end end return false @@ -903,8 +906,8 @@ function onCreaturePositionChange(creature, newPos, oldPos) -- Update battleButt else assert(index ~= nil, 'Not able to update Position Change. Creature: ' .. creature:getName() .. ' id ' .. - creatureId .. ' not found in binary search using ' .. sortType .. - ' to find value ' .. oldDistance .. '.\n') + creatureId .. ' not found in binary search using ' .. sortType .. ' to find value ' .. + oldDistance .. '.\n') end end end @@ -959,8 +962,7 @@ function onCreatureHealthPercentChange(creature, healthPercent, oldHealthPercent else assert(index ~= nil, 'Not able to update HealthPercent Change. Creature: id ' .. creatureId .. - ' not found in binary search using ' .. sortType .. ' to find value ' .. oldHealthPercent .. - '.') + ' not found in binary search using ' .. sortType .. ' to find value ' .. oldHealthPercent .. '.') end end battleButton:setLifeBarPercent(healthPercent) @@ -991,7 +993,7 @@ function onBattleButtonMouseRelease(self, mousePosition, mouseButton) -- Interac end if ((g_mouse.isPressed(MouseLeftButton) and mouseButton == MouseRightButton) or - (g_mouse.isPressed(MouseRightButton) and mouseButton == MouseLeftButton)) then + (g_mouse.isPressed(MouseRightButton) and mouseButton == MouseLeftButton)) then mouseWidget.cancelNextRelease = true g_game.look(self.creature, true) return true @@ -1054,6 +1056,15 @@ function toggle() -- Close/Open the battle window or Pressing Ctrl + B if battleButton:isOn() then battleWindow:close() else + if not battleWindow:getParent() then + local panel = modules.game_interface + .findContentPanelAvailable(battleWindow, battleWindow:getMinimumHeight()) + if not panel then + return + end + + panel:addChild(battleWindow) + end battleWindow:open() end end diff --git a/modules/game_battle/battle.otui b/modules/game_battle/battle.otui index fa631354f6..2838f8e6c5 100644 --- a/modules/game_battle/battle.otui +++ b/modules/game_battle/battle.otui @@ -39,6 +39,7 @@ BattleParty < BattleIcon MiniWindow id: battleWindow !text: tr('Battle') + color: #ffffff height: 166 icon: /images/topbuttons/battle @onOpen: onOpen() diff --git a/modules/game_combatcontrols/combatcontrols.lua b/modules/game_combatcontrols/combatcontrols.lua deleted file mode 100644 index 5d72adb0fc..0000000000 --- a/modules/game_combatcontrols/combatcontrols.lua +++ /dev/null @@ -1,324 +0,0 @@ -combatControlsButton = nil -combatControlsWindow = nil -fightOffensiveBox = nil -fightBalancedBox = nil -fightDefensiveBox = nil -chaseModeButton = nil -safeFightButton = nil -whiteDoveBox = nil -whiteHandBox = nil -yellowHandBox = nil -redFistBox = nil -mountButton = nil -pvpModesPanel = nil -fightModeRadioGroup = nil -pvpModeRadioGroup = nil - -function init() - combatControlsButton = modules.client_topmenu.addRightGameToggleButton('combatControlsButton', - tr('Combat Controls'), - '/images/topbuttons/combatcontrols', toggle) - combatControlsButton:setOn(true) - combatControlsWindow = g_ui.loadUI('combatcontrols') - combatControlsWindow:disableResize() - - fightOffensiveBox = combatControlsWindow:recursiveGetChildById('fightOffensiveBox') - fightBalancedBox = combatControlsWindow:recursiveGetChildById('fightBalancedBox') - fightDefensiveBox = combatControlsWindow:recursiveGetChildById('fightDefensiveBox') - - chaseModeButton = combatControlsWindow:recursiveGetChildById('chaseModeBox') - safeFightButton = combatControlsWindow:recursiveGetChildById('safeFightBox') - - mountButton = combatControlsWindow:recursiveGetChildById('mountButton') - mountButton.onClick = onMountButtonClick - - pvpModesPanel = combatControlsWindow:recursiveGetChildById('pvpModesPanel') - - whiteDoveBox = combatControlsWindow:recursiveGetChildById('whiteDoveBox') - whiteHandBox = combatControlsWindow:recursiveGetChildById('whiteHandBox') - yellowHandBox = combatControlsWindow:recursiveGetChildById('yellowHandBox') - redFistBox = combatControlsWindow:recursiveGetChildById('redFistBox') - - fightModeRadioGroup = UIRadioGroup.create() - fightModeRadioGroup:addWidget(fightOffensiveBox) - fightModeRadioGroup:addWidget(fightBalancedBox) - fightModeRadioGroup:addWidget(fightDefensiveBox) - - pvpModeRadioGroup = UIRadioGroup.create() - pvpModeRadioGroup:addWidget(whiteDoveBox) - pvpModeRadioGroup:addWidget(whiteHandBox) - pvpModeRadioGroup:addWidget(yellowHandBox) - pvpModeRadioGroup:addWidget(redFistBox) - - connect(fightModeRadioGroup, { - onSelectionChange = onSetFightMode - }) - connect(pvpModeRadioGroup, { - onSelectionChange = onSetPVPMode - }) - connect(chaseModeButton, { - onCheckChange = onSetChaseMode - }) - connect(safeFightButton, { - onCheckChange = onSetSafeFight - }) - connect(g_game, { - onGameStart = online, - onGameEnd = offline, - onFightModeChange = update, - onChaseModeChange = update, - onSafeFightChange = update, - onPVPModeChange = update, - onWalk = check, - onAutoWalk = check - }) - - connect(LocalPlayer, { - onOutfitChange = onOutfitChange - }) - - if g_game.isOnline() then - online() - end - - combatControlsWindow:setup() -end - -function terminate() - if g_game.isOnline() then - offline() - end - - fightModeRadioGroup:destroy() - pvpModeRadioGroup:destroy() - combatControlsWindow:destroy() - combatControlsButton:destroy() - - disconnect(g_game, { - onGameStart = online, - onGameEnd = offline, - onFightModeChange = update, - onChaseModeChange = update, - onSafeFightChange = update, - onPVPModeChange = update, - onWalk = check, - onAutoWalk = check - }) - - disconnect(LocalPlayer, { - onOutfitChange = onOutfitChange - }) - - combatControlsButton = nil - combatControlsWindow = nil - fightOffensiveBox = nil - fightBalancedBox = nil - fightDefensiveBox = nil - chaseModeButton = nil - safeFightButton = nil - whiteDoveBox = nil - whiteHandBox = nil - yellowHandBox = nil - redFistBox = nil - mountButton = nil - pvpModesPanel = nil - fightModeRadioGroup = nil - pvpModeRadioGroup = nil -end - -function update() - local fightMode = g_game.getFightMode() - if fightMode == FightOffensive then - fightModeRadioGroup:selectWidget(fightOffensiveBox) - elseif fightMode == FightBalanced then - fightModeRadioGroup:selectWidget(fightBalancedBox) - else - fightModeRadioGroup:selectWidget(fightDefensiveBox) - end - - local chaseMode = g_game.getChaseMode() - chaseModeButton:setChecked(chaseMode == ChaseOpponent) - - local safeFight = g_game.isSafeFight() - safeFightButton:setChecked(not safeFight) - - if g_game.getFeature(GamePVPMode) then - local pvpMode = g_game.getPVPMode() - local pvpWidget = getPVPBoxByMode(pvpMode) - if pvpWidget then - pvpModeRadioGroup:selectWidget(pvpWidget) - end - end -end - -function check() - if modules.client_options.getOption('autoChaseOverride') then - if g_game.isAttacking() and g_game.getChaseMode() == ChaseOpponent then - g_game.setChaseMode(DontChase) - end - end -end - -function online() - combatControlsWindow:setupOnStart() -- load character window configuration - local player = g_game.getLocalPlayer() - if player then - local char = g_game.getCharacterName() - - local lastCombatControls = g_settings.getNode('LastCombatControls') - - if not table.empty(lastCombatControls) then - if lastCombatControls[char] then - g_game.setFightMode(lastCombatControls[char].fightMode) - g_game.setChaseMode(lastCombatControls[char].chaseMode) - g_game.setSafeFight(lastCombatControls[char].safeFight) - if lastCombatControls[char].pvpMode then - g_game.setPVPMode(lastCombatControls[char].pvpMode) - end - end - end - - if g_game.getFeature(GamePlayerMounts) then - mountButton:setVisible(true) - mountButton:setChecked(player:isMounted()) - else - mountButton:setVisible(false) - end - - if g_game.getFeature(GamePVPMode) then - pvpModesPanel:setVisible(true) - combatControlsWindow:setHeight(combatControlsWindow.extendedControlsHeight) - else - pvpModesPanel:setVisible(false) - combatControlsWindow:setHeight(combatControlsWindow.simpleControlsHeight) - end - end - - update() -end - -function offline() - combatControlsWindow:setParent(nil, true) - local lastCombatControls = g_settings.getNode('LastCombatControls') - if not lastCombatControls then - lastCombatControls = {} - end - - local player = g_game.getLocalPlayer() - if player then - local char = g_game.getCharacterName() - lastCombatControls[char] = { - fightMode = g_game.getFightMode(), - chaseMode = g_game.getChaseMode(), - safeFight = g_game.isSafeFight() - } - - if g_game.getFeature(GamePVPMode) then - lastCombatControls[char].pvpMode = g_game.getPVPMode() - end - - -- save last combat control settings - g_settings.setNode('LastCombatControls', lastCombatControls) - end -end - -function toggle() - if combatControlsButton:isOn() then - combatControlsWindow:close() - combatControlsButton:setOn(false) - else - combatControlsWindow:open() - combatControlsButton:setOn(true) - end -end - -function onSetFightMode(self, selectedFightButton) - if selectedFightButton == nil then - return - end - local buttonId = selectedFightButton:getId() - local fightMode - if buttonId == 'fightOffensiveBox' then - fightMode = FightOffensive - elseif buttonId == 'fightBalancedBox' then - fightMode = FightBalanced - else - fightMode = FightDefensive - end - g_game.setFightMode(fightMode) -end - -function toggleChaseMode() - chaseModeButton:setChecked(not chaseModeButton:isChecked()) -end - -function onSetChaseMode(self, checked) - local chaseMode - if checked then - chaseMode = ChaseOpponent - else - chaseMode = DontChase - end - g_game.setChaseMode(chaseMode) -end - -function onSetSafeFight(self, checked) - g_game.setSafeFight(not checked) -end - -function onSetPVPMode(self, selectedPVPButton) - if selectedPVPButton == nil then - return - end - - local buttonId = selectedPVPButton:getId() - local pvpMode = PVPWhiteDove - if buttonId == 'whiteDoveBox' then - pvpMode = PVPWhiteDove - elseif buttonId == 'whiteHandBox' then - pvpMode = PVPWhiteHand - elseif buttonId == 'yellowHandBox' then - pvpMode = PVPYellowHand - elseif buttonId == 'redFistBox' then - pvpMode = PVPRedFist - end - - g_game.setPVPMode(pvpMode) -end - -function onMiniWindowOpen() - combatControlsButton:setOn(true) -end - -function onMiniWindowClose() - combatControlsButton:setOn(false) -end - -function onMountButtonClick(self, mousePos) - local player = g_game.getLocalPlayer() - if player then - player:toggleMount() - end -end - -function onOutfitChange(localPlayer, outfit, oldOutfit) - if outfit.mount == oldOutfit.mount then - return - end - - mountButton:setChecked(outfit.mount ~= nil and outfit.mount > 0) -end - -function getPVPBoxByMode(mode) - local widget = nil - if mode == PVPWhiteDove then - widget = whiteDoveBox - elseif mode == PVPWhiteHand then - widget = whiteHandBox - elseif mode == PVPYellowHand then - widget = yellowHandBox - elseif mode == PVPRedFist then - widget = redFistBox - end - return widget -end diff --git a/modules/game_combatcontrols/combatcontrols.otmod b/modules/game_combatcontrols/combatcontrols.otmod deleted file mode 100644 index d6b7132d01..0000000000 --- a/modules/game_combatcontrols/combatcontrols.otmod +++ /dev/null @@ -1,9 +0,0 @@ -Module - name: game_combatcontrols - description: Combat controls window - author: edubart, BeniS - website: https://github.com/edubart/otclient - sandboxed: true - scripts: [ combatcontrols ] - @onLoad: init() - @onUnload: terminate() diff --git a/modules/game_combatcontrols/combatcontrols.otui b/modules/game_combatcontrols/combatcontrols.otui deleted file mode 100644 index 4653902e6a..0000000000 --- a/modules/game_combatcontrols/combatcontrols.otui +++ /dev/null @@ -1,94 +0,0 @@ -CombatBox < UICheckBox - size: 20 20 - image-clip: 0 0 20 20 - margin: 2 4 - - $checked: - image-clip: 0 20 20 20 - -FightOffensiveBox < CombatBox - image-source: /images/game/combatmodes/fightoffensive -FightBalancedBox < CombatBox - image-source: /images/game/combatmodes/fightbalanced -FightDefensiveBox < CombatBox - image-source: /images/game/combatmodes/fightdefensive -ChaseModeBox < CombatBox - image-source: /images/game/combatmodes/chasemode -SafeFightBox < CombatBox - image-source: /images/game/combatmodes/safefight - -MountButton < CombatBox - image-source: /images/game/combatmodes/mount - -WhiteDoveBox < CombatBox - image-source: /images/game/combatmodes/whitedovemode -WhiteHandBox < CombatBox - image-source: /images/game/combatmodes/whitehandmode -YellowHandBox < CombatBox - image-source: /images/game/combatmodes/yellowhandmode -RedFistBox < CombatBox - image-source: /images/game/combatmodes/redfistmode - -MiniWindow - id: combatControlsWindow - !text: tr('Combat Controls') - icon: /images/topbuttons/combatcontrols - height: 49 - &save: true - &simpleControlsHeight: 49 - &extendedControlsHeight: 72 - @onOpen: modules.game_combatcontrols.onMiniWindowOpen() - @onClose: modules.game_combatcontrols.onMiniWindowClose() - - MiniWindowContents - FightOffensiveBox - id: fightOffensiveBox - anchors.top: parent.top - anchors.left: parent.left - margin: 2 1 - FightBalancedBox - id: fightBalancedBox - anchors.top: parent.top - anchors.left: prev.right - FightDefensiveBox - id: fightDefensiveBox - anchors.top: parent.top - anchors.left: prev.right - MountButton - id: mountButton - anchors.top: parent.top - anchors.right: next.left - ChaseModeBox - id: chaseModeBox - anchors.top: parent.top - anchors.right: next.left - SafeFightBox - id: safeFightBox - anchors.top: parent.top - anchors.right: parent.right - margin: 2 1 - - Panel - id: pvpModesPanel - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: parent.bottom - height: 20 - - WhiteDoveBox - id: whiteDoveBox - anchors.left: parent.left - anchors.bottom: parent.bottom - margin: 2 1 - WhiteHandBox - id: whiteHandBox - anchors.left: prev.right - anchors.bottom: parent.bottom - YellowHandBox - id: yellowHandBox - anchors.left: prev.right - anchors.bottom: parent.bottom - RedFistBox - id: redFistBox - anchors.left: prev.right - anchors.bottom: parent.bottom \ No newline at end of file diff --git a/modules/game_console/console.lua b/modules/game_console/console.lua index 19f237ff89..6c2d47a33e 100644 --- a/modules/game_console/console.lua +++ b/modules/game_console/console.lua @@ -114,15 +114,15 @@ SpeakTypes = { SayModes = { [1] = { speakTypeDesc = 'whisper', - icon = '/images/game/console/whisper' + image = '/images/ui/console_whisper' }, [2] = { speakTypeDesc = 'say', - icon = '/images/game/console/say' + image = '/images/ui/console_say' }, [3] = { speakTypeDesc = 'yell', - icon = '/images/game/console/yell' + image = '/images/ui/console_yell' } } @@ -279,12 +279,19 @@ function selectAll(consoleBuffer) end function toggleChat() - consoleToggleChat:setChecked(not consoleToggleChat:isChecked()) + consoleToggleChat.isChecked = not consoleToggleChat.isChecked + if consoleToggleChat.isChecked then + consoleToggleChat:setText(tr('Chat Off')) + consoleToggleChat.isChecked = true + else + consoleToggleChat:setText(tr('Chat On')) + consoleToggleChat.isChecked = false + end end -- id of object first and then action function updateChatMode() - switchChat(not consoleToggleChat:isChecked()) + switchChat(not consoleToggleChat.isChecked) end local function unbindMovingKeys() @@ -325,7 +332,7 @@ end function switchChat(enabled) -- enabled should be true if we enabling the chat and false if disabling it - -- consoleToggleChat:setChecked(not consoleToggleChat:isChecked()) + -- consoleToggleChat:setChecked(not consoleToggleChat.isChecked) if not (enabled and consoleTextEdit:isVisible()) then consoleTextEdit:setVisible(enabled) consoleTextEdit:setText('') @@ -345,7 +352,7 @@ function switchChatOnCall() return end - if isChatEnabled() and consoleToggleChat:isChecked() then + if isChatEnabled() and consoleToggleChat.isChecked then toggleChat() else local message = consoleTextEdit:getText() @@ -353,6 +360,8 @@ function switchChatOnCall() toggleChat() end end + + updateChatMode() end function disableChatOnCall() @@ -360,7 +369,7 @@ function disableChatOnCall() return end - if isChatEnabled() and not consoleToggleChat:isChecked() then + if isChatEnabled() and not consoleToggleChat.isChecked then toggleChat() end end @@ -424,7 +433,7 @@ end function save() local settings = {} settings.messageHistory = messageHistory - settings.wasdMode = consoleToggleChat:isChecked() + settings.wasdMode = consoleToggleChat.isChecked g_settings.setNode('game_console', settings) end @@ -432,13 +441,18 @@ function load() local settings = g_settings.getNode('game_console') if settings then messageHistory = settings.messageHistory or {} - consoleToggleChat:setChecked(settings.wasdMode or false) + consoleToggleChat.isChecked = settings.wasdMode or false + if consoleToggleChat.isChecked then + consoleToggleChat:setText(tr('Chat Off')) + else + consoleToggleChat:setText(tr('Chat On')) + end end loadCommunicationSettings() end function isEnabledWASD() - return consoleToggleChat:isChecked() + return consoleToggleChat.isChecked --note: testing required end function onTabChange(tabBar, tab) @@ -453,6 +467,17 @@ function onTabChange(tabBar, tab) consolePanel:getChildById('closeChannelButton'):enable() player:setTyping(false) end + + if tab.isOnRedMessage then + tab:setColor('#dfdfdfff') + tab.isOnRedMessage = false + end + + if tab.newMessageEvent ~= nil then + tab:setColor('#dfdfdfff') + removeEvent(tab.newMessageEvent) + tab.newMessageEvent = nil + end end function clear() @@ -562,6 +587,18 @@ function addTab(name, focus) if focus then consoleTabBar:selectTab(tab) end + + tab.onHoverChange = function() + if consoleTabBar:getId() ~= tab then + if tab.isOnRedMessage then + tab:setColor('#f75f5fff') + end + if tab.newMessageEvent ~= nil then + tab:setColor('#dfdfdfff') + end + end + end + return tab end @@ -901,7 +938,7 @@ function getHighlightedText(text) local tmpData = {} repeat - local tmp = { string.find(text, '{([^}]+)}', tmpData[#tmpData - 1]) } + local tmp = {string.find(text, '{([^}]+)}', tmpData[#tmpData - 1])} for _, v in pairs(tmp) do table.insert(tmpData, v) end @@ -910,6 +947,19 @@ function getHighlightedText(text) return tmpData end +local function changeNewNessageColor(tab) + if tab.newMessageEvent ~= nil or tab.isOnRedMessage then + return + end + + tab:setColor('#dfdfdfff') + tab.newMessageEvent = scheduleEvent(function() + tab:setColor('#f75f5fff') + tab.isOnRedMessage = true + tab.newMessageEvent = nil + end, 1000) +end + function addTabText(text, speaktype, tab, creatureName) if not tab or tab.locked or not text or #text == 0 then return @@ -925,7 +975,10 @@ function addTabText(text, speaktype, tab, creatureName) label:setId('consoleLabel' .. consoleBuffer:getChildCount()) label:setText(text) label:setColor(speaktype.color) - consoleTabBar:blinkTab(tab) + -- consoleTabBar:blinkTab(tab) + if consoleTabBar:getCurrentTab() ~= tab then + changeNewNessageColor(tab) + end label.highlightInfo = {} @@ -1354,7 +1407,7 @@ function sendMessage(message, tab) if (channel or tab == defaultTab) and not chatCommandPrivateReady then if tab == defaultTab then speaktypedesc = chatCommandSayMode or - SayModes[consolePanel:getChildById('sayModeButton').sayMode].speakTypeDesc + SayModes[consolePanel:getChildById('sayModeButton').sayMode].speakTypeDesc if speaktypedesc ~= 'say' then sayModeChange(2) end -- head back to say mode @@ -1411,7 +1464,7 @@ function sayModeChange(sayMode) sayMode = 1 end - buttom:setIcon(SayModes[sayMode].icon) + buttom:setImageSource(SayModes[sayMode].image) buttom.sayMode = sayMode end @@ -1493,9 +1546,9 @@ function onTalk(name, level, mode, message, channelId, creaturePos) end if (mode == MessageModes.Say or mode == MessageModes.Whisper or mode == MessageModes.Yell or mode == - MessageModes.Spell or mode == MessageModes.MonsterSay or mode == MessageModes.MonsterYell or mode == - MessageModes.NpcFrom or mode == MessageModes.BarkLow or mode == MessageModes.BarkLoud or mode == - MessageModes.NpcFromStartBlock) and creaturePos then + MessageModes.Spell or mode == MessageModes.MonsterSay or mode == MessageModes.MonsterYell or mode == + MessageModes.NpcFrom or mode == MessageModes.BarkLow or mode == MessageModes.BarkLoud or mode == + MessageModes.NpcFromStartBlock) and creaturePos then local staticText = StaticText.create() -- Remove curly braces from screen message local staticMessage = message @@ -1542,7 +1595,7 @@ function onTalk(name, level, mode, message, channelId, creaturePos) modules.game_textmessage.displayPrivateMessage(name .. ':\n' .. message) end else - local channel = tr('Default') + local channel = tr('Local Chat') if not defaultMessage then channel = channels[channelId] end @@ -1552,7 +1605,7 @@ function onTalk(name, level, mode, message, channelId, creaturePos) else -- server sent a message on a channel that is not open pwarning('message in channel id ' .. channelId .. - ' which is unknown, this is a server bug, relogin if you want to see messages in this channel') + ' which is unknown, this is a server bug, relogin if you want to see messages in this channel') end end end @@ -1931,7 +1984,7 @@ function onClickIgnoreButton() end function online() - defaultTab = addTab(tr('Default'), true) + defaultTab = addTab(tr('Local Chat'), true) serverTab = addTab(tr('Server Log'), false) if g_game.getClientVersion() >= 820 then diff --git a/modules/game_console/console.otui b/modules/game_console/console.otui index 56d52f1d4f..c15add9e92 100644 --- a/modules/game_console/console.otui +++ b/modules/game_console/console.otui @@ -5,8 +5,8 @@ ConsoleLabel < UITextEdit margin-left: 2 text-wrap: true text-auto-resize: true - selection-color: #111416 - selection-background-color: #999999 + selection-color: #f4f4f4ff + selection-background-color: #808080ff change-cursor-image: false cursor-visible: false editable: false @@ -32,145 +32,226 @@ ConsoleTabBarPanel < MoveableTabBarPanel ScrollablePanel id: consoleBuffer anchors.fill: parent - margin-right: 12 + image-source: /images/ui/3pixel_frame_borderimage + image-border: 4 + padding: 1 + padding-right: 12 + padding-left: 4 + padding-top: 4 vertical-scrollbar: consoleScrollBar layout: type: verticalBox align-bottom: true - border-width: 1 - border-color: #202327 - background: #00000066 inverted-scroll: true - padding: 1 - VerticalScrollBar + VerticalQtScrollBar id: consoleScrollBar anchors.top: parent.top anchors.bottom: parent.bottom anchors.right: parent.right step: 14 pixels-scroll: true + margin-top: 4 + margin-right: 4 + margin-bottom: 4 -ConsoleTabBarButton < MoveableTabBarButton - height: 28 - padding: 15 +ConsoleTabBarButton < UIButton + size: 96 18 + image-source: /images/ui/console_button + image-clip: 0 18 96 18 + color: #7f7f7fff + font: verdana-11px-rounded + &ignoreTextResize: true + anchors.top: parent.top + anchors.left: parent.left + padding: 5 + tab-spacing: 0 + + $checked: + image-clip: 0 0 96 18 + color: #dfdfdfff + + $on !checked: + image-clip: 0 18 96 18 + color: #7f7f7fff Panel id: consolePanel anchors.fill: parent - CheckBox - id: toggleChat - !tooltip: tr('Disable chat mode, allow to walk using WASD') - anchors.left: parent.left - anchors.top: parent.top - margin-left: 13 - margin-top: 8 - @onCheckChange: updateChatMode() - - TabButton - id: prevChannelButton - icon: /images/game/console/leftarrow - anchors.left: toggleChat.right + UIWidget + image-source: /images/ui/2pixel_up_frame_borderimage + image-border: 3 + anchors.fill: parent + margin-top: 16 + focusable: false + Panel + id: consoleContentPanel anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom margin-left: 3 - margin-top: 6 + margin-right: 3 + margin-bottom: 22 + margin-top: 20 + padding: 1 + focusable: false ConsoleTabBar id: consoleTabBar - anchors.left: prev.right - anchors.top: parent.top - anchors.right: next.left - margin-left: 5 - margin-top: 3 - margin-right: 5 + anchors.left: parent.left + anchors.bottom: consoleContentPanel.top + anchors.right: closeChannelButton.left + margin-right: 20 + margin-left: 18 + margin-bottom: -7 tab-spacing: 2 movable: true + TabButton + id: prevChannelButton + image-source: /images/ui/console_flash_left + image-clip: 36 0 18 18 + anchors.left: parent.left + anchors.top: consoleTabBar.top + size: 18 18 + enabled: false + &dynamicNavigation: 96 + + $disabled: + image-clip: 36 0 18 18 + + $!disabled: + image-clip: 0 0 18 18 + + $pressed !disabled: + image-clip: 18 0 18 18 + TabButton id: nextChannelButton - icon: /images/game/console/rightarrow - anchors.right: next.left - anchors.top: parent.top - margin-right: 5 - margin-top: 6 + image-source: /images/ui/console_flash_right + image-clip: 36 0 18 18 + anchors.left: consoleTabBar.right + anchors.top: consoleTabBar.top + margin-right: 1 + size: 0 18 + enabled: false + &dynamicNavigation: 96 + + $disabled: + image-clip: 36 0 18 18 + width: 0 + + $!disabled: + image-clip: 0 0 18 18 + width: 18 + + $pressed !disabled: + image-clip: 18 0 18 18 TabButton id: closeChannelButton !tooltip: tr('Close this channel') .. ' (Ctrl+E)' - icon: /images/game/console/closechannel - anchors.right: next.left - anchors.top: parent.top - enabled: false - margin-right: 5 - margin-top: 6 + image-source: /images/ui/console_buttons + image-clip: 0 48 16 16 + anchors.right: channelsButton.left + anchors.bottom: consoleContentPanel.top + margin-bottom: 5 + margin-right: 1 + size: 16 16 @onClick: removeCurrentTab() - TabButton - id: clearChannelButton - !tooltip: tr('Clear current message window') - icon: /images/game/console/clearchannel - anchors.right: next.left - anchors.top: parent.top - margin-right: 5 - margin-top: 6 - @onClick: | - local consoleTabBar = self:getParent():getChildById('consoleTabBar') - clearChannel(consoleTabBar) + $hover !disabled: + image-clip: 0 48 16 16 + + $pressed: + image-clip: 16 48 16 16 TabButton id: channelsButton !tooltip: tr('Open new channel') .. ' (Ctrl+O)' - icon: /images/game/console/channels - anchors.right: next.left - anchors.top: parent.top - margin-right: 5 - margin-top: 6 + image-source: /images/ui/console_buttons + image-clip: 0 0 16 16 + anchors.right: ignoreButton.left + anchors.bottom: consoleContentPanel.top + margin-bottom: 5 + margin-right: 1 + size: 16 16 @onClick: g_game.requestChannels() + $hover !disabled: + image-clip: 0 0 16 16 + + $pressed: + image-clip: 16 0 16 16 + TabButton id: ignoreButton !tooltip: tr('Ignore players') - icon: /images/game/console/ignore + image-source: /images/ui/console_buttons + image-clip: 0 32 16 16 anchors.right: parent.right - anchors.top: parent.top + anchors.bottom: consoleContentPanel.top + margin-bottom: 5 margin-right: 5 - margin-top: 6 + size: 16 16 @onClick: onClickIgnoreButton() - Panel - id: consoleContentPanel - anchors.top: prev.bottom - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: consoleTextEdit.top - margin-left: 6 - margin-right: 6 - margin-bottom: 4 - margin-top: 4 - padding: 1 - focusable: false + $hover !disabled: + image-clip: 0 32 16 16 + + $pressed: + image-clip: 16 32 16 16 TabButton id: sayModeButton - icon: /images/game/console/say - !tooltip: tr('Adjust volume') + image-source: /images/ui/console_say + image-clip: 0 0 18 18 + !tooltip: tr('Set talk type') &sayMode: 2 - size: 20 20 - anchors.left: parent.left + size: 18 18 + anchors.left: consoleContentPanel.left anchors.bottom: parent.bottom - margin-left: 6 - margin-bottom: 6 + margin-bottom: 3 @onClick: sayModeChange() + $pressed: + image-clip: 18 0 18 18 + + $hover !disabled: + image-clip: 0 0 18 18 + TextEdit id: consoleTextEdit anchors.left: sayModeButton.right - anchors.right: parent.right + anchors.right: toggleChat.left anchors.bottom: parent.bottom - margin-right: 6 - margin-left: 6 - margin-bottom: 6 + margin-right: 5 + margin-left: 5 + margin-bottom: 3 shift-navigation: true max-length: 255 + height: 18 @onTextChange: onTextChange(self:getText()) + + TopToggleButton + id: toggleChat + !tooltip: tr('Disable chat mode, allow to walk using WASD') + color: #c0c0c0ff + font: cipsoftFont + !text: tr('Chat Off') + anchors.right: consoleContentPanel.right + anchors.bottom: parent.bottom + margin-bottom: 3 + size: 64 18 + &isChecked: false + @onClick: | + if self.isChecked then + self.isChecked = false + self:setText(tr('Chat On')) + else + self.isChecked = true + self:setText(tr('Chat Off')) + end + @onCheckChange: updateChatMode() diff --git a/modules/game_containers/container.otui b/modules/game_containers/container.otui index ccf7920c09..8f10500d4a 100644 --- a/modules/game_containers/container.otui +++ b/modules/game_containers/container.otui @@ -60,8 +60,9 @@ ContainerWindow < MiniWindow anchors.right: parent.right MiniWindowContents - padding-right: 0 + padding-left: 5 layout: type: grid cell-size: 34 34 + cell-spacing: 3 flow: true diff --git a/modules/game_containers/containers.lua b/modules/game_containers/containers.lua index 06f58d7bcf..5cb598b14b 100644 --- a/modules/game_containers/containers.lua +++ b/modules/game_containers/containers.lua @@ -154,7 +154,7 @@ function onContainerOpen(container, previousContainer) local layout = containerPanel:getLayout() local cellSize = layout:getCellSize() containerWindow:setContentMinimumHeight(cellSize.height) - containerWindow:setContentMaximumHeight(cellSize.height * layout:getNumLines()) + containerWindow:setContentMaximumHeight(cellSize.height * layout:getNumLines() + 15) if not previousContainer then local panel = modules.game_interface.findContentPanelAvailable(containerWindow, cellSize.height) diff --git a/modules/game_cooldown/cooldown.lua b/modules/game_cooldown/cooldown.lua index 29928337b5..a1a8ecb7f1 100644 --- a/modules/game_cooldown/cooldown.lua +++ b/modules/game_cooldown/cooldown.lua @@ -20,16 +20,21 @@ function init() onSpellCooldown = onSpellCooldown }) - cooldownButton = modules.client_topmenu.addRightGameToggleButton('cooldownButton', tr('Cooldowns'), - '/images/topbuttons/cooldowns', toggle) + cooldownButton = modules.game_mainpanel.addToggleButton('cooldownButton', tr('Cooldowns'), + '/images/options/cooldowns', toggle, false, 5) + cooldownButton:setOn(true) + cooldownButton:hide() - cooldownWindow = g_ui.loadUI('cooldown') - cooldownWindow:disableResize() - cooldownWindow:setup() + cooldownWindow = g_ui.loadUI('cooldown', modules.game_interface.getBottomPanel()) - contentsPanel = cooldownWindow:getChildById('contentsPanel') + local console = modules.game_console.consolePanel + if console then + console:addAnchor(AnchorTop, cooldownWindow:getId(), AnchorBottom) + end + + contentsPanel = cooldownWindow:getChildById('contentsPanel2') cooldownPanel = contentsPanel:getChildById('cooldownPanel') -- preload cooldown images @@ -52,6 +57,11 @@ function terminate() cooldownWindow:destroy() cooldownButton:destroy() + local console = modules.game_console.consolePanel + if console then + console:removeAnchor(AnchorTop) + console:fill('parent') + end end function loadIcon(iconId) @@ -97,22 +107,36 @@ function onMiniWindowClose() end function toggle() + local console = modules.game_console.consolePanel if cooldownButton:isOn() then - cooldownWindow:close() + cooldownWindow:hide() cooldownButton:setOn(false) + + if console then + console:addAnchor(AnchorTop, modules.game_actionbar.getPanelActionbar():getId(), AnchorBottom) + end else - cooldownWindow:open() + cooldownWindow:show() cooldownButton:setOn(true) + + if console then + console:addAnchor(AnchorTop, cooldownWindow:getId(), AnchorBottom) + end + end end function online() + if g_game.getFeature(GameSpellList) then - cooldownWindow:setupOnStart() -- load character window configuration + cooldownButton:show() + cooldownButton:setOn(true) else + cooldownButton:hide() - cooldownWindow:close() + cooldownButton:setOn(false) + cooldownWindow:hide() end if not lastPlayer or lastPlayer ~= g_game.getCharacterName() then @@ -123,12 +147,14 @@ end function offline() if g_game.getFeature(GameSpellList) then - cooldownWindow:setParent(nil, true) + --cooldownWindow:setParent(nil, true) end end function refresh() - cooldownPanel:destroyChildren() + if cooldownPanel then + cooldownPanel:destroyChildren() + end end function removeCooldown(progressRect) @@ -188,6 +214,9 @@ function isCooldownIconActive(iconId) end function onSpellCooldown(iconId, duration) + if not cooldownWindow:isVisible() then + return + end local icon = loadIcon(iconId) if not icon then print('[WARNING] Can not load cooldown icon on spell with id: ' .. iconId) @@ -218,6 +247,9 @@ function onSpellCooldown(iconId, duration) end function onSpellGroupCooldown(groupId, duration) + if not cooldownWindow:isVisible() then + return + end if not SpellGroups[groupId] then return end diff --git a/modules/game_cooldown/cooldown.otui b/modules/game_cooldown/cooldown.otui index a85393ec46..8153669ec8 100644 --- a/modules/game_cooldown/cooldown.otui +++ b/modules/game_cooldown/cooldown.otui @@ -5,12 +5,6 @@ SpellGroupIcon < UIWidget focusable: false margin-top: 3 -SecondarySpellGroupIcon < UIWidget - size: 22 22 - image-size: 22 22 - image-source: /images/game/spells/cooldowns - focusable: false - margin-top: 28 SpellIcon < UIWidget size: 24 24 @@ -28,16 +22,16 @@ SpellProgressRect < UIProgressRect GroupCooldownParticles < UIParticles effect: groupcooldown-effect -MiniWindow +Panel id: cooldownWindow - !text: tr('Spell Cooldowns') - height: 110 - icon: /images/topbuttons/cooldowns - @onOpen: modules.game_cooldown.onMiniWindowOpen() - @onClose: modules.game_cooldown.onMiniWindowClose() - &save: true - - MiniWindowContents + !text: tr('') + size: 220 28 + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + Panel + id:contentsPanel2 + anchors.fill: parent SpellGroupIcon id: groupIconAttack image-clip: 0 0 20 20 @@ -80,12 +74,12 @@ MiniWindow anchors.fill: groupIconSupport !tooltip: tr('Support') - SecondarySpellGroupIcon + SpellGroupIcon id: groupIconSpecial image-clip: 60 0 20 20 anchors.top: parent.top - anchors.left: parent.left - margin-left: 2 + anchors.left: groupIconSupport.right + margin-left: 3 $on: image-clip: 60 20 20 20 @@ -94,7 +88,7 @@ MiniWindow anchors.fill: groupIconSpecial !tooltip: tr('Special') - SecondarySpellGroupIcon + SpellGroupIcon id: groupIconCrippling image-clip: 80 0 20 20 anchors.top: parent.top @@ -108,7 +102,7 @@ MiniWindow anchors.fill: groupIconCrippling !tooltip: tr('Crippling') - SecondarySpellGroupIcon + SpellGroupIcon id: groupIconFocus image-clip: 100 0 20 20 anchors.top: parent.top @@ -122,7 +116,7 @@ MiniWindow anchors.fill: groupIconFocus !tooltip: tr('Focus') - SecondarySpellGroupIcon + SpellGroupIcon id: groupIconUltimateStrike image-clip: 120 0 20 20 anchors.top: parent.top @@ -136,7 +130,7 @@ MiniWindow anchors.fill: groupIconUltimateStrike !tooltip: tr('Ultimate Strike') - SecondarySpellGroupIcon + SpellGroupIcon id: groupIconGreatBeams image-clip: 140 0 20 20 anchors.top: parent.top @@ -150,7 +144,7 @@ MiniWindow anchors.fill: groupIconGreatBeams !tooltip: tr('Great Beams') - SecondarySpellGroupIcon + SpellGroupIcon id: groupIconBurstOfNature image-clip: 160 0 20 20 anchors.top: parent.top @@ -168,10 +162,10 @@ MiniWindow id: cooldownPanel layout: type: horizontalBox - height: 30 + margin-top: 3 padding: 3 anchors.top: groupIconSpecial.bottom anchors.left: parent.left anchors.right: parent.right - background-color: #00000022 + diff --git a/modules/game_features/features.lua b/modules/game_features/features.lua index f93c28a1e7..6cd1f3f9b5 100644 --- a/modules/game_features/features.lua +++ b/modules/game_features/features.lua @@ -4,6 +4,8 @@ controller:registerEvents(g_game, { -- g_game.enableFeature(GameKeepUnawareTiles) -- g_game.enableFeature(GameSmoothWalkElevation) -- g_game.enableFeature(GameNegativeOffset) + -- g_game.enableFeature(GameWingsAurasEffectsShader) + g_game.enableFeature(GameFormatCreatureName) if version >= 750 then diff --git a/modules/game_healthcircle/game_healthcircle.lua b/modules/game_healthcircle/game_healthcircle.lua index 843031d3ce..e560550b74 100644 --- a/modules/game_healthcircle/game_healthcircle.lua +++ b/modules/game_healthcircle/game_healthcircle.lua @@ -505,15 +505,14 @@ manaCheckBox = nil experienceCheckBox = nil skillCheckBox = nil chooseSkillComboBox = nil -distFromCenLabel = nil +chooseTopBarDimension = nil distFromCenScrollbar = nil -opacityLabel = nil opacityScrollbar = nil function addToOptionsModule() -- Add to options module optionPanel = g_ui.loadUI('option_healthcircle') - modules.client_options.addTab(tr('HP/MP Circle'), optionPanel, '/images/optionstab/health_circle') + modules.client_options.addTab('HP/MP Circle', optionPanel, '/images/icons/icon_health') -- UI values healthCheckBox = optionPanel:recursiveGetChildById('healthCheckBox') @@ -521,20 +520,25 @@ function addToOptionsModule() experienceCheckBox = optionPanel:recursiveGetChildById('experienceCheckBox') skillCheckBox = optionPanel:recursiveGetChildById('skillCheckBox') chooseSkillComboBox = optionPanel:recursiveGetChildById('chooseSkillComboBox') - distFromCenLabel = optionPanel:recursiveGetChildById('distFromCenLabel') + chooseTopBarDimension = optionPanel:recursiveGetChildById('chooseTopBarDimension') distFromCenScrollbar = optionPanel:recursiveGetChildById('distFromCenScrollbar') - opacityLabel = optionPanel:recursiveGetChildById('opacityLabel') opacityScrollbar = optionPanel:recursiveGetChildById('opacityScrollbar') -- ComboBox start values - chooseSkillComboBox:addOption(tr('Magic Level'), 'magic') - chooseSkillComboBox:addOption(tr('Fist Fighting'), 'fist') - chooseSkillComboBox:addOption(tr('Club Fighting'), 'club') - chooseSkillComboBox:addOption(tr('Sword Fighting'), 'sword') - chooseSkillComboBox:addOption(tr('Axe Fighting'), 'axe') - chooseSkillComboBox:addOption(tr('Distance Fighting'), 'distance') - chooseSkillComboBox:addOption(tr('Shielding'), 'shielding') - chooseSkillComboBox:addOption(tr('Fishing'), 'fishing') + chooseSkillComboBox:addOption('Magic Level', 'magic') + chooseSkillComboBox:addOption('Fist Fighting', 'fist') + chooseSkillComboBox:addOption('Club Fighting', 'club') + chooseSkillComboBox:addOption('Sword Fighting', 'sword') + chooseSkillComboBox:addOption('Axe Fighting', 'axe') + chooseSkillComboBox:addOption('Distance Fighting', 'distance') + chooseSkillComboBox:addOption('Shielding', 'shielding') + chooseSkillComboBox:addOption('Fishing', 'fishing') + + chooseTopBarDimension:addOption(tr('Compact'), 'compact') + chooseTopBarDimension:addOption(tr('Default'), 'default') + chooseTopBarDimension:addOption(tr('Hide'), 'hide') + chooseTopBarDimension:addOption(tr('Large'), 'large') + chooseTopBarDimension:addOption(tr('Parallel'), 'parallel') -- Set values healthCheckBox:setChecked(isHealthCircle) @@ -545,9 +549,9 @@ function addToOptionsModule() -- Prevent skill overwritten before initialize skillsLoaded = true - distFromCenLabel:setText('Distance: ' .. distanceFromCenter) + distFromCenScrollbar:setText(tr('Distance') .. ': ' .. distanceFromCenter) distFromCenScrollbar:setValue(distanceFromCenter) - opacityLabel:setText('Opacity: ' .. opacityCircle) + opacityScrollbar:setText(tr('Opacity') .. ': ' .. opacityCircle) opacityScrollbar:setValue(opacityCircle * 100) end @@ -559,16 +563,19 @@ function setPlayerValues() chooseSkillComboBox:setCurrentOptionByData(skillType, true) end +function setTopBarOption(data, placement) + chooseTopBarDimension:setCurrentOptionByData(data, true) +end + function destroyOptionsModule() healthCheckBox = nil manaCheckBox = nil experienceCheckBox = nil skillCheckBox = nil chooseSkillComboBox = nil - distFromCenLabel = nil distFromCenScrollbar = nil - opacityLabel = nil opacityScrollbar = nil + chooseTopBarDimension = nil modules.client_options.removeTab('HP/MP Circle') optionPanel = nil diff --git a/modules/game_healthcircle/option_healthcircle.otui b/modules/game_healthcircle/option_healthcircle.otui index f6ddb41531..bf6c0ace61 100644 --- a/modules/game_healthcircle/option_healthcircle.otui +++ b/modules/game_healthcircle/option_healthcircle.otui @@ -1,105 +1,155 @@ Panel - OptionCheckBox - id: healthCheckBox - !text: tr('Health circle') - !tooltip: tr('On health circle') - @onCheckChange: | - if self:isChecked() then - modules.game_healthcircle.setHealthCircle(true) - else - modules.game_healthcircle.setHealthCircle(false) - end - - OptionCheckBox - id: manaCheckBox - !text: tr('Mana circle') - !tooltip: tr('On mana circle') - @onCheckChange: | - if self:isChecked() then - modules.game_healthcircle.setManaCircle(true) - else - modules.game_healthcircle.setManaCircle(false) - end + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + height: 22 - OptionCheckBox - id: experienceCheckBox - !text: tr('Experience circle') - !tooltip: tr('On experience circle') - @onCheckChange: | - if self:isChecked() then - modules.game_healthcircle.setExpCircle(true) - else - modules.game_healthcircle.setExpCircle(false) - end + OptionCheckBoxMarked + id: healthCheckBox + !text: tr('Health circle') + !tooltip: tr('Show health red circle.') + @onCheckChange: | + if self:isChecked() then + modules.game_healthcircle.setHealthCircle(true) + else + modules.game_healthcircle.setHealthCircle(false) + end - OptionCheckBox - id: skillCheckBox - !text: tr('Skill circle') - !tooltip: tr('On skill circle') - @onCheckChange: | - if self:isChecked() then - modules.game_healthcircle.setSkillCircle(true) - else - modules.game_healthcircle.setSkillCircle(false) - end + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: manaCheckBox + !text: tr('Mana circle') + !tooltip: tr('Show mana blue circle.') + @onCheckChange: | + if self:isChecked() then + modules.game_healthcircle.setManaCircle(true) + else + modules.game_healthcircle.setManaCircle(false) + end - Label - id: chooseSkillLabel - !text: tr('Skill:') - !tooltip: tr('Choose skill to show in skill circle.') - phantom: false - anchors.left: prev.left + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right anchors.top: prev.bottom - margin-top: 13 + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: experienceCheckBox + !text: tr('Experience circle') + !tooltip: tr('Show experience yellow circle.') + @onCheckChange: | + if self:isChecked() then + modules.game_healthcircle.setExpCircle(true) + else + modules.game_healthcircle.setExpCircle(false) + end - ComboBox - id: chooseSkillComboBox - width: 120 - anchors.left: prev.right - anchors.top: prev.top - margin-top: -4 - margin-left: 5 - mouse-scroll: false - @onTextChange: modules.game_healthcircle.setSkillType(self:getCurrentOption().data) + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBoxMarked + id: skillCheckBox + !text: tr('Skill circle') + !tooltip: tr('Show skill purple circle.') + @onCheckChange: | + if self:isChecked() then + modules.game_healthcircle.setSkillCircle(true) + else + modules.game_healthcircle.setSkillCircle(false) + end - Label - id: distFromCenLabel - phantom: false - !tooltip: tr('Set distance from center.') + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 8 + margin-top: 7 + height: 32 + + Label + !text: tr('Skill:') + anchors.left: parent.left + margin-left: 18 + color: #c0c0c0ff + anchors.verticalCenter: parent.verticalCenter + + QtComboBox + id: chooseSkillComboBox + width: 120 + margin-left: 10 + anchors.verticalCenter: prev.verticalCenter + anchors.left: prev.right + mouse-scroll: false + @onTextChange: modules.game_healthcircle.setSkillType(self:getCurrentOption().data) + + UIWidget + !tooltip: tr('Choose skill to show in skill circle.') + image-source: /images/icons/show_gui_help_grey + size: 12 12 + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + margin-right: 3 - OptionScrollbar - id: distFromCenScrollbar + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 3 - minimum: 0 - maximum: 100 - @onValueChange: | - modules.game_healthcircle.optionPanel:recursiveGetChildById('distFromCenLabel'):setText(tr('Distance: %s', self:getValue())) - modules.game_healthcircle.setDistanceFromCenter(self:getValue()) + margin-top: 7 + height: 22 - Label - id: opacityLabel - phantom: false - !tooltip: tr('Set circle opacity.') + OptionScaleScrollMarked + id: distFromCenScrollbar + !text: tr('Distance from center' .. ':') + !tooltip: tr('Set distance from center.') + anchors.fill: parent + &minimumScrollValue: 0 + &maximumScrollValue: 100 + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right - anchors.top: distFromCenScrollbar.bottom - margin-top: 8 + anchors.top: prev.bottom + margin-top: 7 + height: 22 - OptionScrollbar - id: opacityScrollbar + OptionScaleScrollMarked + id: opacityScrollbar + !text: tr('Opacity' .. ':') + !tooltip: tr('Set circle opacity.') + anchors.fill: parent + &minimumScrollValue: 0 + &maximumScrollValue: 100 + + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right anchors.top: prev.bottom - margin-top: 5 - minimum: 0 - maximum: 100 - @onValueChange: | - modules.game_healthcircle.optionPanel:recursiveGetChildById('opacityLabel'):setText(tr('Opacity: %s', self:getValue() / 100)) - modules.game_healthcircle.setCircleOpacity(self:getValue() / 100) \ No newline at end of file + margin-top: 7 + height: 32 + + Label + !text: tr('Top Bar Style:') + anchors.left: parent.left + margin-left: 18 + color: #c0c0c0ff + anchors.verticalCenter: parent.verticalCenter + + QtComboBox + id: chooseTopBarDimension + width: 120 + margin-left: 10 + anchors.verticalCenter: prev.verticalCenter + anchors.left: prev.right + mouse-scroll: false + @onTextChange: modules.game_interface.setStatsBarOption(self:getCurrentOption().data, 'top') diff --git a/modules/game_healthinfo/healthinfo.lua b/modules/game_healthinfo/healthinfo.lua deleted file mode 100644 index 8770a36dfe..0000000000 --- a/modules/game_healthinfo/healthinfo.lua +++ /dev/null @@ -1,303 +0,0 @@ -Icons = {} -Icons[PlayerStates.Poison] = { - tooltip = tr('You are poisoned'), - path = '/images/game/states/poisoned', - id = 'condition_poisoned' -} -Icons[PlayerStates.Burn] = { - tooltip = tr('You are burning'), - path = '/images/game/states/burning', - id = 'condition_burning' -} -Icons[PlayerStates.Energy] = { - tooltip = tr('You are electrified'), - path = '/images/game/states/electrified', - id = 'condition_electrified' -} -Icons[PlayerStates.Drunk] = { - tooltip = tr('You are drunk'), - path = '/images/game/states/drunk', - id = 'condition_drunk' -} -Icons[PlayerStates.ManaShield] = { - tooltip = tr('You are protected by a magic shield'), - path = '/images/game/states/magic_shield', - id = 'condition_magic_shield' -} -Icons[PlayerStates.Paralyze] = { - tooltip = tr('You are paralysed'), - path = '/images/game/states/slowed', - id = 'condition_slowed' -} -Icons[PlayerStates.Haste] = { - tooltip = tr('You are hasted'), - path = '/images/game/states/haste', - id = 'condition_haste' -} -Icons[PlayerStates.Swords] = { - tooltip = tr('You may not logout during a fight'), - path = '/images/game/states/logout_block', - id = 'condition_logout_block' -} -Icons[PlayerStates.Drowning] = { - tooltip = tr('You are drowning'), - path = '/images/game/states/drowning', - id = 'condition_drowning' -} -Icons[PlayerStates.Freezing] = { - tooltip = tr('You are freezing'), - path = '/images/game/states/freezing', - id = 'condition_freezing' -} -Icons[PlayerStates.Dazzled] = { - tooltip = tr('You are dazzled'), - path = '/images/game/states/dazzled', - id = 'condition_dazzled' -} -Icons[PlayerStates.Cursed] = { - tooltip = tr('You are cursed'), - path = '/images/game/states/cursed', - id = 'condition_cursed' -} -Icons[PlayerStates.PartyBuff] = { - tooltip = tr('You are strengthened'), - path = '/images/game/states/strengthened', - id = 'condition_strengthened' -} -Icons[PlayerStates.PzBlock] = { - tooltip = tr('You may not logout or enter a protection zone'), - path = '/images/game/states/protection_zone_block', - id = 'condition_protection_zone_block' -} -Icons[PlayerStates.Pz] = { - tooltip = tr('You are within a protection zone'), - path = '/images/game/states/protection_zone', - id = 'condition_protection_zone' -} -Icons[PlayerStates.Bleeding] = { - tooltip = tr('You are bleeding'), - path = '/images/game/states/bleeding', - id = 'condition_bleeding' -} -Icons[PlayerStates.Hungry] = { - tooltip = tr('You are hungry'), - path = '/images/game/states/hungry', - id = 'condition_hungry' -} - -healthInfoWindow = nil -healthBar = nil -manaBar = nil -experienceBar = nil -soulLabel = nil -capLabel = nil -healthTooltip = 'Your character health is %d out of %d.' -manaTooltip = 'Your character mana is %d out of %d.' -experienceTooltip = 'You have %d%% to advance to level %d.' - -function init() - connect(LocalPlayer, { - onHealthChange = onHealthChange, - onManaChange = onManaChange, - onLevelChange = onLevelChange, - onStatesChange = onStatesChange, - onSoulChange = onSoulChange, - onFreeCapacityChange = onFreeCapacityChange - }) - - connect(g_game, { - onGameStart = online, - onGameEnd = offline - }) - - healthInfoButton = modules.client_topmenu.addRightGameToggleButton('healthInfoButton', tr('Health Information'), - '/images/topbuttons/healthinfo', toggle) - healthInfoButton:setOn(true) - - healthInfoWindow = g_ui.loadUI('healthinfo') - healthInfoWindow:disableResize() - healthBar = healthInfoWindow:recursiveGetChildById('healthBar') - manaBar = healthInfoWindow:recursiveGetChildById('manaBar') - experienceBar = healthInfoWindow:recursiveGetChildById('experienceBar') - soulLabel = healthInfoWindow:recursiveGetChildById('soulLabel') - capLabel = healthInfoWindow:recursiveGetChildById('capLabel') - - -- load condition icons - for k, v in pairs(Icons) do - g_textures.preload(v.path) - end - - if g_game.isOnline() then - local localPlayer = g_game.getLocalPlayer() - onHealthChange(localPlayer, localPlayer:getHealth(), localPlayer:getMaxHealth()) - onManaChange(localPlayer, localPlayer:getMana(), localPlayer:getMaxMana()) - onLevelChange(localPlayer, localPlayer:getLevel(), localPlayer:getLevelPercent()) - onStatesChange(localPlayer, localPlayer:getStates(), 0) - onSoulChange(localPlayer, localPlayer:getSoul()) - onFreeCapacityChange(localPlayer, localPlayer:getFreeCapacity()) - end - - healthInfoWindow:setup() - if g_game.isOnline() then - healthInfoWindow:setupOnStart() - end -end - -function terminate() - disconnect(LocalPlayer, { - onHealthChange = onHealthChange, - onManaChange = onManaChange, - onLevelChange = onLevelChange, - onStatesChange = onStatesChange, - onSoulChange = onSoulChange, - onFreeCapacityChange = onFreeCapacityChange - }) - - disconnect(g_game, { - onGameStart = online, - onGameEnd = offline - }) - - healthInfoWindow:destroy() - healthInfoButton:destroy() - - healthInfoWindow = nil - healthBar = nil - manaBar = nil - experienceBar = nil - soulLabel = nil - capLabel = nil -end - -function toggle() - if healthInfoButton:isOn() then - healthInfoWindow:close() - healthInfoButton:setOn(false) - else - healthInfoWindow:open() - healthInfoButton:setOn(true) - end -end - -function toggleIcon(bitChanged) - local content = healthInfoWindow:recursiveGetChildById('conditionPanel') - - local icon = content:getChildById(Icons[bitChanged].id) - if icon then - icon:destroy() - else - icon = loadIcon(bitChanged) - icon:setParent(content) - end -end - -function loadIcon(bitChanged) - local icon = g_ui.createWidget('ConditionWidget', content) - icon:setId(Icons[bitChanged].id) - icon:setImageSource(Icons[bitChanged].path) - icon:setTooltip(Icons[bitChanged].tooltip) - return icon -end - -function online() - healthInfoWindow:setupOnStart() -- load character window configuration -end - -function offline() - healthInfoWindow:setParent(nil, true) - healthInfoWindow:recursiveGetChildById('conditionPanel'):destroyChildren() -end - --- hooked events -function onMiniWindowOpen() - healthInfoButton:setOn(true) -end - -function onMiniWindowClose() - healthInfoButton:setOn(false) -end - -function onHealthChange(localPlayer, health, maxHealth) - healthBar:setText(health .. ' / ' .. maxHealth) - healthBar:setTooltip(tr(healthTooltip, health, maxHealth)) - healthBar:setValue(health, 0, maxHealth) -end - -function onManaChange(localPlayer, mana, maxMana) - manaBar:setText(mana .. ' / ' .. maxMana) - manaBar:setTooltip(tr(manaTooltip, mana, maxMana)) - manaBar:setValue(mana, 0, maxMana) -end - -function onLevelChange(localPlayer, value, percent) - experienceBar:setText(percent .. '%') - experienceBar:setTooltip(tr(experienceTooltip, percent, value + 1)) - experienceBar:setPercent(percent) -end - -function onSoulChange(localPlayer, soul) - soulLabel:setText(tr('Soul') .. ': ' .. soul) -end - -function onFreeCapacityChange(player, freeCapacity) - capLabel:setText(tr('Cap') .. ': ' .. freeCapacity) -end - -function onStatesChange(localPlayer, now, old) - if now == old then - return - end - - local bitsChanged = bit.bxor(now, old) - for i = 1, 32 do - local pow = math.pow(2, i - 1) - if pow > bitsChanged then - break - end - local bitChanged = bit.band(bitsChanged, pow) - if bitChanged ~= 0 then - toggleIcon(bitChanged) - end - end -end - --- personalization functions -function hideLabels() - local removeHeight = math.max(capLabel:getMarginRect().height, soulLabel:getMarginRect().height) - capLabel:setOn(false) - soulLabel:setOn(false) - healthInfoWindow:setHeight(math.max(healthInfoWindow.minimizedHeight, healthInfoWindow:getHeight() - removeHeight)) -end - -function hideExperience() - local removeHeight = experienceBar:getMarginRect().height - experienceBar:setOn(false) - healthInfoWindow:setHeight(math.max(healthInfoWindow.minimizedHeight, healthInfoWindow:getHeight() - removeHeight)) -end - -function setHealthTooltip(tooltip) - healthTooltip = tooltip - - local localPlayer = g_game.getLocalPlayer() - if localPlayer then - healthBar:setTooltip(tr(healthTooltip, localPlayer:getHealth(), localPlayer:getMaxHealth())) - end -end - -function setManaTooltip(tooltip) - manaTooltip = tooltip - - local localPlayer = g_game.getLocalPlayer() - if localPlayer then - manaBar:setTooltip(tr(manaTooltip, localPlayer:getMana(), localPlayer:getMaxMana())) - end -end - -function setExperienceTooltip(tooltip) - experienceTooltip = tooltip - - local localPlayer = g_game.getLocalPlayer() - if localPlayer then - experienceBar:setTooltip(tr(experienceTooltip, localPlayer:getLevelPercent(), localPlayer:getLevel() + 1)) - end -end diff --git a/modules/game_healthinfo/healthinfo.otmod b/modules/game_healthinfo/healthinfo.otmod deleted file mode 100644 index 4c52ef042c..0000000000 --- a/modules/game_healthinfo/healthinfo.otmod +++ /dev/null @@ -1,9 +0,0 @@ -Module - name: game_healthinfo - description: Displays health, mana points, soul points, and conditions - author: edubart, BeniS - website: https://github.com/edubart/otclient - sandboxed: true - scripts: [ healthinfo ] - @onLoad: init() - @onUnload: terminate() diff --git a/modules/game_healthinfo/healthinfo.otui b/modules/game_healthinfo/healthinfo.otui deleted file mode 100644 index cc197e1d25..0000000000 --- a/modules/game_healthinfo/healthinfo.otui +++ /dev/null @@ -1,93 +0,0 @@ -HealthBar < ProgressBar - id: healthBar - background-color: #ff4444 - anchors.top: parent.top - anchors.left: parent.left - anchors.right: parent.right - margin: 1 - -ManaBar < ProgressBar - id: manaBar - background-color: #4444ff - anchors.top: prev.bottom - anchors.left: parent.left - anchors.right: parent.right - margin: 1 - margin-top: 3 - -ExperienceBar < ProgressBar - id: experienceBar - background-color: #B6E866 - anchors.top: prev.bottom - anchors.left: parent.left - anchors.right: parent.right - margin: 1 - margin-top: 3 - -SoulLabel < GameLabel - id: soulLabel - text-align: right - color: white - font: verdana-11px-rounded - anchors.bottom: parent.bottom - anchors.right: parent.right - anchors.left: parent.horizontalCenter - margin-top: 5 - margin-right: 3 - on: true - - $!on: - visible: false - margin-top: 0 - height: 0 - -CapLabel < GameLabel - id: capLabel - color: white - font: verdana-11px-rounded - anchors.bottom: parent.bottom - anchors.left: parent.left - anchors.right: parent.horizontalCenter - margin-top: 5 - margin-left: 3 - on: true - - $!on: - visible: false - margin-top: 0 - height: 0 - -ConditionWidget < UIWidget - size: 18 18 - - $!first: - margin-left: 2 - -MiniWindow - icon: /images/topbuttons/healthinfo - id: healthInfoWindow - !text: tr('Health Info') - height: 123 - @onOpen: modules.game_healthinfo.onMiniWindowOpen() - @onClose: modules.game_healthinfo.onMiniWindowClose() - &save: true - - MiniWindowContents - HealthBar - ManaBar - ExperienceBar - Panel - id: conditionPanel - layout: - type: horizontalBox - height: 22 - margin-top: 4 - padding: 2 - anchors.top: prev.bottom - anchors.left: parent.left - anchors.right: parent.right - border-width: 1 - border-color: #00000077 - background-color: #ffffff11 - SoulLabel - CapLabel diff --git a/modules/game_hotkeys/hotkeys_manager.lua b/modules/game_hotkeys/hotkeys_manager.lua index 8356b39fa4..28c24ad728 100644 --- a/modules/game_hotkeys/hotkeys_manager.lua +++ b/modules/game_hotkeys/hotkeys_manager.lua @@ -34,7 +34,7 @@ HotkeyColors = { hotkeysManagerLoaded = false hotkeysWindow = nil -hotkeysButton = nil + currentHotkeyLabel = nil currentItemPreview = nil itemWidget = nil @@ -59,14 +59,15 @@ boundCombosCallback = {} hotkeysList = {} disableHotkeysCount = 0 lastHotkeyTime = g_clock.millis() +local hotkeysWindowButton = nil -- public functions function init() - hotkeysButton = modules.client_topmenu.addLeftGameButton('hotkeysButton', tr('Hotkeys') .. ' (Ctrl+K)', - '/images/topbuttons/hotkeys', toggle) + g_keyboard.bindKeyDown('Ctrl+K', toggle) hotkeysWindow = g_ui.displayUI('hotkeys_manager') hotkeysWindow:setVisible(false) + hotkeysWindowButton = modules.client_topmenu.addRightGameToggleButton('hotkeysWindowButton', tr('Hotkeys'), '/images/options/hotkeys', toggle) currentHotkeys = hotkeysWindow:getChildById('currentHotkeys') currentItemPreview = hotkeysWindow:getChildById('itemPreview') @@ -132,10 +133,10 @@ function terminate() unload() hotkeysWindow:destroy() - hotkeysButton:destroy() + mouseGrabberWidget:destroy() hotkeysWindow = nil - hotkeysButton = nil + hotkeyActionCombo = nil hotKeyTextLabel = nil hotkeyText = nil @@ -150,6 +151,7 @@ function terminate() useOnTarget = nil useWith = nil currentHotkeys = nil + hotkeysWindowButton = nil end function configure(savePerServer, savePerCharacter) @@ -488,7 +490,7 @@ function doKeyCombo(keyCombo) elseif hotKey.action == HOTKEY_ACTION_ATTACK_PREV then modules.game_battle.attackNext(true) elseif hotKey.action == HOTKEY_ACTION_TOGGLE_CHASE then - modules.game_combatcontrols.toggleChaseMode() + g_game.setChaseMode(ChaseOpponent) end elseif hotKey.itemId == nil then diff --git a/modules/game_interface/gameinterface.lua b/modules/game_interface/gameinterface.lua index b11c1bb9fd..ce0e61ce09 100644 --- a/modules/game_interface/gameinterface.lua +++ b/modules/game_interface/gameinterface.lua @@ -2,15 +2,19 @@ WALK_STEPS_RETRY = 10 gameRootPanel = nil gameMapPanel = nil +gameMainRightPanel = nil gameRightPanel = nil gameRightExtraPanel = nil gameLeftPanel = nil +gameLeftExtraPanel = nil gameSelectedPanel = nil panelsList = {} panelsRadioGroup = nil +gameTopPanel = nil gameBottomPanel = nil showTopMenuButton = nil logoutButton = nil +logOutMainButton = nil mouseGrabberWidget = nil countWindow = nil logoutWindow = nil @@ -21,6 +25,10 @@ currentViewMode = 0 smartWalkDirs = {} smartWalkDir = nil firstStep = false +leftIncreaseSidePanels = nil +leftDecreaseSidePanels = nil +rightIncreaseSidePanels = nil +rightDecreaseSidePanels = nil hookedMenuOptions = {} lastDirTime = g_clock.millis() lastManualWalk = 0 @@ -63,10 +71,23 @@ function init() bottomSplitter = gameRootPanel:getChildById('bottomSplitter') gameMapPanel = gameRootPanel:getChildById('gameMapPanel') + gameMainRightPanel = gameRootPanel:getChildById('gameMainRightPanel') gameRightPanel = gameRootPanel:getChildById('gameRightPanel') gameRightExtraPanel = gameRootPanel:getChildById('gameRightExtraPanel') + gameLeftExtraPanel = gameRootPanel:getChildById('gameLeftExtraPanel') gameLeftPanel = gameRootPanel:getChildById('gameLeftPanel') gameBottomPanel = gameRootPanel:getChildById('gameBottomPanel') + gameTopPanel = gameRootPanel:getChildById('gameTopPanel') + + leftIncreaseSidePanels = gameRootPanel:getChildById('leftIncreaseSidePanels') + leftDecreaseSidePanels = gameRootPanel:getChildById('leftDecreaseSidePanels') + rightIncreaseSidePanels = gameRootPanel:getChildById('rightIncreaseSidePanels') + rightDecreaseSidePanels = gameRootPanel:getChildById('rightDecreaseSidePanels') + + leftIncreaseSidePanels:setEnabled(not modules.client_options.getOption('showLeftExtraPanel')) + leftDecreaseSidePanels:setEnabled(modules.client_options.getOption('showLeftPanel')) + rightIncreaseSidePanels:setEnabled(not modules.client_options.getOption('showRightExtraPanel')) + rightDecreaseSidePanels:setEnabled(modules.client_options.getOption('showRightExtraPanel')) panelsList = { { panel = gameRightPanel, @@ -77,6 +98,9 @@ function init() }, { panel = gameLeftPanel, checkbox = gameRootPanel:getChildById('gameSelectLeftColumn') + },{ + panel = gameLeftExtraPanel, + checkbox = gameRootPanel:getChildById('gameSelectLeftExtraColumn') } } panelsRadioGroup = UIRadioGroup.create() @@ -88,14 +112,7 @@ function init() end panelsRadioGroup:selectWidget(panelsList[1].checkbox) - connect(gameLeftPanel, { - onVisibilityChange = onExtraPanelVisibilityChange - }) - connect(gameRightExtraPanel, { - onVisibilityChange = onExtraPanelVisibilityChange - }) - - logoutButton = modules.client_topmenu.addLeftButton('logoutButton', tr('Exit'), '/images/topbuttons/logout', + logoutButton = modules.client_topmenu.addTopRightToggleButton('logoutButton', tr('Exit'), '/images/topbuttons/logout', tryLogout, true) showTopMenuButton = gameMapPanel:getChildById('showTopMenuButton') @@ -108,17 +125,8 @@ function init() if g_game.isOnline() then show() end -end -function onSelectPanel(self, checked) - if checked then - for k, v in pairs(panelsList) do - if v.checkbox == self then - gameSelectedPanel = v.panel - break - end - end - end + StatsBar.init() end function bindKeys() @@ -207,6 +215,8 @@ function unbindTurnKey(key) end function terminate() + StatsBar.terminate() + hide() if g_app.hasUpdater() then disconnect(g_app, { @@ -231,19 +241,12 @@ function terminate() onLoginAdvice = onLoginAdvice }) - disconnect(gameLeftPanel, { - onVisibilityChange = onExtraPanelVisibilityChange - }) - disconnect(gameRightExtraPanel, { - onVisibilityChange = onExtraPanelVisibilityChange - }) - for k, v in pairs(panelsList) do disconnect(v.checkbox, { onCheckChange = onSelectPanel }) end - + logoutButton:destroy() gameRootPanel:destroy() end @@ -257,6 +260,11 @@ function onGameStart() else g_game.disableFeature(GameForceFirstAutoWalkStep) end + + leftIncreaseSidePanels:setEnabled(not modules.client_options.getOption('showLeftExtraPanel')) + leftDecreaseSidePanels:setEnabled(modules.client_options.getOption('showLeftPanel')) + rightIncreaseSidePanels:setEnabled(not modules.client_options.getOption('showRightExtraPanel')) + rightDecreaseSidePanels:setEnabled(modules.client_options.getOption('showRightExtraPanel')) end function onGameEnd() @@ -281,7 +289,6 @@ function show() setupViewMode(2) end - gameMapPanel:clearTiles(); addEvent(function() if not limitedZoom or g_game.isGM() then gameMapPanel:setMaxZoomOut(513) @@ -365,16 +372,16 @@ function tryExit() 'If you shut down the program, your character might stay in the game.\nClick on \'Logout\' to ensure that you character leaves the game properly.\nClick on \'Exit\' if you want to exit the program without logging out your character.'), { { - text = tr('Force Exit'), - callback = exitFunc + text = tr('Cancel'), + callback = cancelFunc }, { text = tr('Logout'), callback = logoutFunc }, { - text = tr('Cancel'), - callback = cancelFunc + text = tr('Force Exit'), + callback = exitFunc }, anchor = AnchorHorizontalCenter }, logoutFunc, cancelFunc) @@ -426,14 +433,14 @@ function tryLogout(prompt) if prompt then logoutWindow = displayGeneralBox(tr('Logout'), tr(msg), { - { - text = tr('Yes'), - callback = yesCallback - }, { text = tr('No'), callback = noCallback }, + { + text = tr('Yes'), + callback = yesCallback + }, anchor = AnchorHorizontalCenter }, yesCallback, noCallback) else @@ -496,7 +503,6 @@ function smartWalk(dir) local dire = smartWalkDir or dir g_game.walk(dire, firstStep) firstStep = false - lastManualWalk = g_clock.millis() return true end @@ -729,10 +735,10 @@ function createThingMenu(menuPosition, lookThing, useThing, creatureThing) menu:addSeparator() if creatureThing:isLocalPlayer() then - menu:addOption(tr('Set Outfit'), function() + menu:addOption(tr(g_game.getClientVersion() >= 1000 and "Customise Character" or "Set Outfit"), function() g_game.requestOutfit() end) - + if g_game.getFeature(GamePrey) then menu:addOption(tr('Prey Dialog'), function() modules.game_prey.show() @@ -1006,6 +1012,10 @@ function processMouseAction(menuPosition, mouseButton, autoWalkPos, lookThing, u if autoWalkPos and keyboardModifiers == KeyboardNoModifier and mouseButton == MouseLeftButton then player:autoWalk(autoWalkPos) + if g_game.isAttacking() and g_game.getChaseMode() == ChaseOpponent then + g_game.setChaseMode(DontChase) + return true + end return true end @@ -1108,7 +1118,16 @@ function moveStackableItem(item, toPos) modules.game_hotkeys.enableHotkeys(false) end - +function onSelectPanel(self, checked) + if checked then + for k, v in pairs(panelsList) do + if v.checkbox == self then + gameSelectedPanel = v.panel + break + end + end + end +end function getRootPanel() return gameRootPanel end @@ -1121,6 +1140,10 @@ function getRightPanel() return gameRightPanel end +function getMainRightPanel() + return gameMainRightPanel +end + function getLeftPanel() return gameLeftPanel end @@ -1129,6 +1152,10 @@ function getRightExtraPanel() return gameRightExtraPanel end +function getLeftExtraPanel() + return gameLeftExtraPanel +end + function getSelectedPanel() return gameSelectedPanel end @@ -1140,9 +1167,16 @@ end function getShowTopMenuButton() return showTopMenuButton end +function getGameTopStatsBar() + return gameTopPanel +end + +function getGameMapPanel() + return gameMapPanel +end function findContentPanelAvailable(child, minContentHeight) - if gameSelectedPanel:isVisible() and gameSelectedPanel:fits(child, minContentHeight, 0) >= 0 then + if gameSelectedPanel and gameSelectedPanel:isVisible() and gameSelectedPanel:fits(child, minContentHeight, 0) >= 0 then return gameSelectedPanel end @@ -1155,44 +1189,6 @@ function findContentPanelAvailable(child, minContentHeight) return gameSelectedPanel end -function onExtraPanelVisibilityChange(extraPanel, visible) - if not visible then - -- move children to right panel - if g_game.isOnline() then - local children = extraPanel:getChildren() - for i = 1, #children do - children[i]:setParent(gameRightPanel) - end - end - - -- unselect hiding panel - if extraPanel == getSelectedPanel() then - panelsRadioGroup:selectWidget(panelsList[1].checkbox) - end - - -- hide checkbox of hidden panel - for k, v in pairs(panelsList) do - if v.panel == extraPanel then - v.checkbox:setVisible(false) - end - end - - -- if there is only the right panel visible, hide its checkbox too - if not gameRightExtraPanel:isVisible() and not gameLeftPanel:isVisible() then - panelsList[1].checkbox:setVisible(false) - end - else - -- this means that, besided the right panel, there is another panel visible - -- so we'll enable the checkboxes from the one at right, and the one being shown - for k, v in pairs(panelsList) do - if v.panel == extraPanel then - v.checkbox:setVisible(true) - end - end - panelsList[1].checkbox:setVisible(true) - end -end - function nextViewMode() setupViewMode((currentViewMode + 1) % 3) end @@ -1202,6 +1198,11 @@ function setupViewMode(mode) return end + leftIncreaseSidePanels:setEnabled(not modules.client_options.getOption('showLeftExtraPanel')) + leftDecreaseSidePanels:setEnabled(modules.client_options.getOption('showLeftPanel')) + rightIncreaseSidePanels:setEnabled(not modules.client_options.getOption('showRightExtraPanel')) + rightDecreaseSidePanels:setEnabled(modules.client_options.getOption('showRightExtraPanel')) + if currentViewMode == 2 then gameMapPanel:addAnchor(AnchorLeft, 'gameLeftPanel', AnchorRight) gameMapPanel:addAnchor(AnchorRight, 'gameRightPanel', AnchorLeft) @@ -1210,12 +1211,15 @@ function setupViewMode(mode) gameRootPanel:addAnchor(AnchorTop, 'topMenu', AnchorBottom) gameLeftPanel:setOn(modules.client_options.getOption('showLeftPanel')) gameRightExtraPanel:setOn(modules.client_options.getOption('showRightExtraPanel')) + gameLeftExtraPanel:setOn(modules.client_options.getOption('showLeftExtraPanel')) gameLeftPanel:setImageColor('white') gameRightPanel:setImageColor('white') gameRightExtraPanel:setImageColor('white') + gameLeftExtraPanel:setImageColor('white') gameLeftPanel:setMarginTop(0) gameRightPanel:setMarginTop(0) gameRightExtraPanel:setMarginTop(0) + gameLeftExtraPanel:setMarginTop(0) gameBottomPanel:setImageColor('white') modules.client_topmenu.getTopMenu():setImageColor('white') end @@ -1249,15 +1253,20 @@ function setupViewMode(mode) gameLeftPanel:setImageColor('alpha') gameRightPanel:setImageColor('alpha') gameRightExtraPanel:setImageColor('alpha') + gameLeftExtraPanel:setImageColor('alpha') gameLeftPanel:setMarginTop(modules.client_topmenu.getTopMenu():getHeight() - gameLeftPanel:getPaddingTop()) gameRightPanel:setMarginTop(modules.client_topmenu.getTopMenu():getHeight() - gameRightPanel:getPaddingTop()) gameRightExtraPanel:setMarginTop(modules.client_topmenu.getTopMenu():getHeight() - gameRightExtraPanel:getPaddingTop()) + gameLeftExtraPanel:setMarginTop(modules.client_topmenu.getTopMenu():getHeight() - + gameLeftExtraPanel:getPaddingTop()) gameLeftPanel:setOn(true) gameLeftPanel:setVisible(true) gameRightPanel:setOn(true) gameRightExtraPanel:setOn(true) gameRightExtraPanel:setVisible(true) + gameLeftExtraPanel:setOn(true) + gameLeftExtraPanel:setVisible(true) gameMapPanel:setOn(true) gameBottomPanel:setImageColor('#ffffff88') modules.client_topmenu.getTopMenu():setImageColor('#ffffff66') @@ -1269,3 +1278,86 @@ end function limitZoom() limitedZoom = true end + + +function setStatsBarOption(dimension, placement) + StatsBar.setStatsBarOption(dimension, placement) +end + +function onIncreaseLeftPanels() + leftDecreaseSidePanels:setEnabled(true) + if not modules.client_options.getOption('showLeftPanel') then + modules.client_options.setOption('showLeftPanel', true) + return + end + + if not modules.client_options.getOption('showLeftExtraPanel') then + modules.client_options.setOption('showLeftExtraPanel', true) + leftIncreaseSidePanels:setEnabled(false) + return + end +end + +local function movePanel(mainpanel) + for _, widget in pairs(mainpanel:getChildren()) do + if widget then + local panel = modules.game_interface.findContentPanelAvailable(widget, widget:getMinimumHeight()) + if panel then + if not panel:hasChild(widget) then + widget:close() + panel:addChild(widget) + else + print("Error: Attempt to add a widget that already exists in the target panel") + end + else + print("Warning: No suitable panel found for widget, unable to move") + end + end + end +end + +function onDecreaseLeftPanels() + leftIncreaseSidePanels:setEnabled(true) + if modules.client_options.getOption('showLeftExtraPanel') then + modules.client_options.setOption('showLeftExtraPanel', false) + movePanel(gameLeftExtraPanel) + return + end + + if modules.client_options.getOption('showLeftPanel') then + modules.client_options.setOption('showLeftPanel', false) + movePanel(gameLeftPanel) + leftDecreaseSidePanels:setEnabled(false) + return + end +end + +function onIncreaseRightPanels() + rightIncreaseSidePanels:setEnabled(false) + rightDecreaseSidePanels:setEnabled(true) + modules.client_options.setOption('showRightExtraPanel', true) +end + +function onDecreaseRightPanels() + rightIncreaseSidePanels:setEnabled(true) + rightDecreaseSidePanels:setEnabled(false) + movePanel(gameRightExtraPanel) + modules.client_options.setOption('showRightExtraPanel', false) +end + +function setupOptionsMainButton() + if logOutMainButton then + return + end + + logOutMainButton = modules.game_mainpanel.addSpecialToggleButton('logoutButton', tr('Exit'), '/images/options/button_logout', + tryLogout) +end + +function checkAndOpenLeftPanel() + leftDecreaseSidePanels:setEnabled(true) + if not modules.client_options.getOption('showLeftPanel') then + modules.client_options.setOption('showLeftPanel', true) + return + end +end \ No newline at end of file diff --git a/modules/game_interface/gameinterface.otui b/modules/game_interface/gameinterface.otui index 7d8688910c..1261776733 100644 --- a/modules/game_interface/gameinterface.otui +++ b/modules/game_interface/gameinterface.otui @@ -1,8 +1,7 @@ GameSidePanel < UIMiniWindowContainer - image-source: /images/ui/panel_side + image-source: /images/ui/2pixel_up_frame_borderimage image-border: 4 - padding: 4 - width: 198 + width: 176 layout: type: verticalBox //spacing: 1 @@ -14,8 +13,18 @@ SelectColumnButton < CheckBox opacity: 1 GameBottomPanel < Panel - image-source: /images/ui/panel_bottom - image-border: 4 + image-source: /images/ui/background_dark + image-repeated: true + padding-top: 6 + + UIWidget + image-source: /images/ui/divider_horizontal + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + margin-top: -6 + height: 5 + focusable: false GameMapPanel < UIGameMap padding: 4 @@ -32,9 +41,9 @@ UIWidget GameMapPanel id: gameMapPanel - anchors.left: gameLeftPanel.right + anchors.left: gameLeftExtraPanel.right anchors.right: gameRightExtraPanel.left - anchors.top: parent.top + anchors.top: gameTopPanel.bottom anchors.bottom: gameBottomPanel.top focusable: false @@ -48,7 +57,7 @@ UIWidget GameBottomPanel id: gameBottomPanel - anchors.left: gameLeftPanel.right + anchors.left: gameLeftExtraPanel.right anchors.right: gameRightExtraPanel.left anchors.top: bottomSplitter.top anchors.bottom: parent.bottom @@ -66,9 +75,33 @@ UIWidget visible: false GameSidePanel - id: gameRightPanel + id: gameLeftExtraPanel + anchors.left: prev.right + anchors.top: parent.top + anchors.bottom: parent.bottom + margin-left: 1 + focusable: false + visible: true + on: true + $!on: + width: 0 + visible: false + + GameSidePanel + id: gameMainRightPanel anchors.right: parent.right anchors.top: parent.top + &ignoreFillAll: true + &onlyPhantomDrop: true + height: 200 + focusable: false + height: 1 + on: true + + GameSidePanel + id: gameRightPanel + anchors.right: parent.right + anchors.top: gameMainRightPanel.bottom anchors.bottom: parent.bottom focusable: false on: true @@ -100,18 +133,91 @@ UIWidget id: gameSelectRightExtraColumn anchors.right: gameRightExtraPanel.right anchors.bottom: gameRightExtraPanel.bottom + + SelectColumnButton + id: gameSelectLeftExtraColumn + anchors.right: gameLeftExtraPanel.right + anchors.bottom: gameLeftExtraPanel.bottom Splitter id: bottomSplitter - anchors.left: gameLeftPanel.right + anchors.left: gameLeftExtraPanel.right anchors.right: gameRightExtraPanel.left anchors.bottom: parent.bottom relative-margin: bottom margin-bottom: 172 - @canUpdateMargin: function(self, newMargin) if modules.client_options.getOption('dontStretchShrink') then return self:getMarginBottom() end return math.max(math.min(newMargin, self:getParent():getHeight() - 300), 162) end - @onGeometryChange: function(self) self:setMarginBottom(math.min(math.max(self:getParent():getHeight() - 300, 162), self:getMarginBottom())) end + image-source: /images/ui/divider_horizontal + height: 5 + @canUpdateMargin: function(self, newMargin) if modules.client_options.getOption('dontStretchShrink') then return self:getMarginBottom() end return math.max(math.min(newMargin, self:getParent():getHeight() - 300), 160) end + @onGeometryChange: function(self) self:setMarginBottom(math.min(math.max(self:getParent():getHeight() - 300, 160), self:getMarginBottom())) end UIWidget id: mouseGrabber focusable: false visible: false + + TopStatsBar + id: gameTopPanel + anchors.left: gameLeftExtraPanel.right + anchors.right: gameRightExtraPanel.left + anchors.top: parent.top + focusable: false + Button + id: leftIncreaseSidePanels + anchors.left: gameLeftExtraPanel.right + anchors.top: parent.top + image-source: /images/ui/topstats_button_panel + image-clip: 27 0 9 27 + size: 9 27 + @onClick: onIncreaseLeftPanels() + + $pressed !disabled: + image-clip: 36 0 9 27 + + $disabled: + image-clip: 45 0 9 27 + + Button + id: leftDecreaseSidePanels + anchors.left: leftIncreaseSidePanels.left + anchors.top: leftIncreaseSidePanels.bottom + image-source: /images/ui/topstats_button_panel + image-clip: 0 0 9 27 + size: 9 27 + @onClick: onDecreaseLeftPanels() + + $pressed !disabled: + image-clip: 9 0 9 27 + + $disabled: + image-clip: 18 0 9 27 + + Button + id: rightIncreaseSidePanels + anchors.right: gameRightExtraPanel.left + anchors.top: parent.top + image-source: /images/ui/topstats_button_panel + image-clip: 27 27 9 27 + size: 9 27 + @onClick: onIncreaseRightPanels() + + $pressed !disabled: + image-clip: 36 27 9 27 + + $disabled: + image-clip: 45 27 9 27 + + Button + id: rightDecreaseSidePanels + anchors.right: rightIncreaseSidePanels.right + anchors.top: rightIncreaseSidePanels.bottom + image-source: /images/ui/topstats_button_panel + image-clip: 0 27 9 27 + size: 9 27 + @onClick: onDecreaseRightPanels() + + $pressed !disabled: + image-clip: 9 27 9 27 + + $disabled: + image-clip: 18 27 9 27 diff --git a/modules/game_interface/interface.otmod b/modules/game_interface/interface.otmod index 5e3ee7b963..1ee64fdb33 100644 --- a/modules/game_interface/interface.otmod +++ b/modules/game_interface/interface.otmod @@ -4,8 +4,9 @@ Module author: OTClient team website: https://github.com/edubart/otclient sandboxed: true - scripts: [ widgets/uigamemap, widgets/uiitem, gameinterface ] + scripts: [ widgets/uigamemap, widgets/uiitem, widgets/statsbar, gameinterface ] load-later: + - game_mainpanel - game_prey - game_imbuing - game_hotkeys @@ -14,14 +15,10 @@ Module - game_console - game_actionbar - game_outfit - - game_healthinfo - game_skills - - game_inventory - - game_combatcontrols - game_containers - game_viplist - game_battle - - game_minimap - game_npctrade - game_textwindow - game_playertrade @@ -37,6 +34,7 @@ Module - game_shaders - game_attachedeffects - game_stash - - game_creatureinformation + - game_healthcircle + - game_shop @onLoad: init() @onUnload: terminate() diff --git a/modules/game_interface/widgets/statsbar.lua b/modules/game_interface/widgets/statsbar.lua new file mode 100644 index 0000000000..264584e2e8 --- /dev/null +++ b/modules/game_interface/widgets/statsbar.lua @@ -0,0 +1,557 @@ +local statsBar +local firstCall = true + +local currentStats = { + dimension = 'hide', + placement = 'hide' +} + +local skillsLineHeight = 20 +local skillsTuples = { + {skill = nil, key = 'experience', icon = '/images/icons/icon_experience', placement = 'center', order = 0, name = "Level"}, + {skill = nil, key = 'magic', icon = '/images/icons/icon_magic', placement = 'left', order = 1, name = "Magic Level"}, + {skill = Skill.Axe, key = 'axe', icon = '/images/icons/icon_axe', placement = 'right', order = 1, name = "Axe Fighting Skill"}, + {skill = Skill.Club, key = 'club', icon = '/images/icons/icon_club', placement = 'left', order = 2, name = "Club Fighting Skill"}, + {skill = Skill.Distance, key = 'distance', icon = '/images/icons/icon_distance', placement = 'right', order = 2, name = "Distance Fighting Skill"}, + {skill = Skill.Fist, key = 'fist', icon = '/images/icons/icon_fist', placement = 'left', order = 3, name = "Fist Fighting Skill"}, + {skill = Skill.Shielding, key = 'shielding', icon = '/images/icons/icon_shielding', placement = 'right', order = 3, name = "Shielding Fighting Skill"}, + {skill = Skill.Sword, key = 'sword', icon = '/images/icons/icon_sword', placement = 'left', order = 4, name = "Sword Fighting Skill"}, + {skill = Skill.Fishing, key = 'fishing', icon = '/images/icons/icon_fishing', placement = 'right', order = 4, name = "Fishing Fighting Skill"}, +} + +StatsBar = {} +local function createBlankIcon() + local statsBarConfigs = {statsBar.largeOnTop, statsBar.parallelOnTop, statsBar.defaultOnTop, statsBar.compactOnTop} + for _, statsBarConfig in ipairs(statsBarConfigs) do + local icon = g_ui.createWidget('ConditionWidget', statsBarConfig.icons) + icon:setImageSource('/images/ui/blank') + icon:setImageSize({ + width = 1, + height = 1 + }) + icon:setMarginRight(-10) + end +end + +local function reloadSkillsTab(skills, parent) + local player = g_game.getLocalPlayer() + if not player then + return + end + + local tuples = {} + for i = 1, #skillsTuples do + local skillTuple = skillsTuples[i] + if skillTuple and g_settings.getBoolean('top_statsbar_' .. skillTuple.key) then + table.insert(tuples, skillTuple) + end + end + + statsBar:setHeight(statsBar:getHeight() - skills:getHeight()) + parent:setHeight(parent:getHeight() - (40 + skills:getHeight())) + skills:setHeight(0) + skills:destroyChildren() + local lines = 0 + local lastPlacement = 'left' + for i = 1, #tuples do + local skillTuple = tuples[i] + local widget = g_ui.createWidget('TopStatsSkillElement', skills) + widget:setId('statsbar_skill_' .. skillTuple.key) + widget:addAnchor(AnchorTop, 'parent', AnchorTop) + if lastPlacement == 'left' then + widget:setMarginTop(lines * skillsLineHeight) + else + widget:setMarginTop((lines - 1) * skillsLineHeight) + end + widget.level = widget:getChildById('level') + widget.icon = widget:getChildById('icon') + widget.bar = widget:getChildById('bar') + + widget.icon:setImageSource(skillTuple.icon) + widget.icon:setTooltip(skillTuple.name) + + widget.bar.statsGrade = 4 + widget.bar.statsGradeColor = '#070707ff' + widget.bar:reloadBorder() + + widget.bar.showText = false + if skillTuple.key == 'experience' then + widget.bar.statsType = 'experience' + else + widget.bar.statsType = 'skill' + end + + if skillTuple.placement == 'center' or (i == #tuples and lastPlacement == 'left') then + widget:addAnchor(AnchorLeft, 'parent', AnchorLeft) + widget:addAnchor(AnchorRight, 'parent', AnchorRight) + lines = lines + 1 + elseif lastPlacement == 'left' then + widget:addAnchor(AnchorLeft, 'parent', AnchorLeft) + widget:addAnchor(AnchorRight, 'parent', AnchorHorizontalCenter) + lines = lines + 1 + lastPlacement = 'right' + elseif lastPlacement == 'right' then + widget:addAnchor(AnchorRight, 'parent', AnchorRight) + widget:addAnchor(AnchorLeft, 'parent', AnchorHorizontalCenter) + lastPlacement = 'left' + end + + if skillTuple.key == 'experience' then + widget.level:setText(player:getLevel()) + widget.bar:setValue(player:getLevelPercent(), 100) + elseif skillTuple.key == 'magic' then + widget.level:setText(player:getMagicLevel()) + widget.bar:setValue(player:getMagicLevelPercent(), 100) + else + widget.level:setText(player:getSkillLevel(skillTuple.skill)) + widget.bar:setValue(player:getSkillLevelPercent(skillTuple.skill), 100) + end + + end + + skills:setHeight(lines * skillsLineHeight) + if parent:getId() == 'largeOnTop' then + skills:setHeight(skills:getHeight() + 5) + elseif lines == 0 then + skills:setHeight(skills:getHeight() + 5) + end + parent:setHeight(40 + skills:getHeight()) + statsBar:setHeight(statsBar:getHeight() + skills:getHeight()) +end + +function StatsBar.getCurrentStatsBar() + if currentStats.dimension == 'hide' and currentStats.placement == 'hide' then + return nil + end + + if currentStats.placement == 'top' then + if currentStats.dimension == 'large' then + return statsBar.largeOnTop + elseif currentStats.dimension == 'parallel' then + return statsBar.parallelOnTop + elseif currentStats.dimension == 'default' then + return statsBar.defaultOnTop + elseif currentStats.dimension == 'compact' then + return statsBar.compactOnTop + end + end + + return nil +end + +function StatsBar.reloadCurrentStatsBarQuickInfo() + local player = g_game.getLocalPlayer() + if not player then + return + end + + local bar = StatsBar.getCurrentStatsBar() + if not bar then + return + end + + bar.health:setValue(player:getHealth(), player:getMaxHealth()) + bar.mana:setValue(player:getMana(), player:getMaxMana()) + +end + +local function loadIcon(bitChanged, content, topmenu) + local icon = g_ui.createWidget('ConditionWidget', content) + icon:setId(Icons[bitChanged].id) + icon:setImageSource(Icons[bitChanged].path) + icon:setTooltip(Icons[bitChanged].tooltip) + icon:setImageSize({ + width = 9, + height = 9 + }) + if topmenu then + icon:setMarginTop(5) + end + return icon +end + +local function toggleIcon(bitChanged) + local contents = { + {content = statsBar.largeOnTop.icons,loadIconTransparent = true}, + {content = statsBar.parallelOnTop.icons,loadIconTransparent = true}, + {content = statsBar.defaultOnTop.icons,loadIconTransparent = true}, + {content = statsBar.compactOnTop.icons, loadIconTransparent = true}, + {content = modules.game_mainpanel.getIconsPanelOff()}, + {content = modules.game_mainpanel.getIconsPanelOn()} + } + + for _, contentData in ipairs(contents) do + local icon = contentData.content:getChildById(Icons[bitChanged].id) + if icon then + icon:destroy() + else + icon = loadIcon(bitChanged, contentData.content, contentData.loadIconTransparent) + icon:setParent(contentData.content) + end + end +end + +function StatsBar.reloadCurrentStatsBarQuickInfo_state(localPlayer, now, old) + local player = g_game.getLocalPlayer() + if not player then + return + end + + if now == old then + return + end + + local bitsChanged = bit.bxor(now, old) + for i = 1, 32 do + local pow = math.pow(2, i - 1) + if pow > bitsChanged then + break + end + local bitChanged = bit.band(bitsChanged, pow) + if bitChanged ~= 0 then + toggleIcon(bitChanged) + end + end +end + +function StatsBar.reloadCurrentStatsBarDeepInfo() + local player = g_game.getLocalPlayer() + if not player then + return + end + + local bar = StatsBar.getCurrentStatsBar() + if not bar then + return + end + + for _, skillTuple in ipairs(skillsTuples) do + local widget = bar:recursiveGetChildById('statsbar_skill_' .. skillTuple.key) + if widget then + if skillTuple.key == 'experience' then + widget.level:setText(player:getLevel()) + widget.bar:setValue(player:getLevelPercent(), 100) + elseif skillTuple.key == 'magic' then + widget.level:setText(player:getMagicLevel()) + widget.bar:setValue(player:getMagicLevelPercent(), 100) + else + widget.level:setText(player:getSkillLevel(skillTuple.skill)) + widget.bar:setValue(player:getSkillLevelPercent(skillTuple.skill), 100) + end + end + end +end + +function StatsBar.hideAll() + + statsBar.largeOnTop.skills:destroyChildren() + statsBar.largeOnTop.skills:setHeight(0) + statsBar.largeOnTop:setHeight(0) + statsBar.largeOnTop:hide() + + statsBar.parallelOnTop.skills:destroyChildren() + statsBar.parallelOnTop.skills:setHeight(0) + statsBar.parallelOnTop:setHeight(0) + statsBar.parallelOnTop:hide() + + statsBar.defaultOnTop.skills:destroyChildren() + statsBar.defaultOnTop.skills:setHeight(0) + statsBar.defaultOnTop:setHeight(0) + statsBar.defaultOnTop:hide() + + statsBar.compactOnTop.skills:destroyChildren() + statsBar.compactOnTop.skills:setHeight(0) + statsBar.compactOnTop:setHeight(0) + statsBar.compactOnTop:hide() + + statsBar:setHeight(0) + currentStats = { + dimension = 'hide', + placement = 'hide' + } + + -- modules.game_healthcircle.setTopBarOption(currentStats.dimension, currentStats.placement) +end + +local function constructLargeOnTop() + statsBar:setHeight(35) + statsBar.largeOnTop:setHeight(35) + statsBar.largeOnTop:show() + + currentStats = { + dimension = 'large', + placement = 'top' + } + + statsBar.largeOnTop:show() + statsBar.largeOnTop:setPhantom(false) + statsBar.largeOnTop.health = statsBar.largeOnTop:getChildById('health') + statsBar.largeOnTop.mana = statsBar.largeOnTop:getChildById('mana') + statsBar.largeOnTop.skills = statsBar.largeOnTop:getChildById('skills') + + reloadSkillsTab(statsBar.largeOnTop.skills, statsBar.largeOnTop) + StatsBar.reloadCurrentStatsBarQuickInfo() + + modules.game_healthcircle.setTopBarOption(currentStats.dimension, currentStats.placement) + return true +end + +local function constructParallelOnTop() + statsBar:setHeight(55) + statsBar.parallelOnTop:setHeight(55) + statsBar.parallelOnTop:show() + + currentStats = { + dimension = 'parallel', + placement = 'top' + } + + statsBar.parallelOnTop:show() + statsBar.parallelOnTop:setPhantom(false) + statsBar.parallelOnTop.health = statsBar.parallelOnTop:getChildById('health') + statsBar.parallelOnTop.mana = statsBar.parallelOnTop:getChildById('mana') + statsBar.parallelOnTop.skills = statsBar.parallelOnTop:getChildById('skills') + + reloadSkillsTab(statsBar.parallelOnTop.skills, statsBar.parallelOnTop) + StatsBar.reloadCurrentStatsBarQuickInfo() + + modules.game_healthcircle.setTopBarOption(currentStats.dimension, currentStats.placement) + return true +end + +local function constructDefaultOnTop() + statsBar:setHeight(35) + statsBar.defaultOnTop:setHeight(35) + statsBar.defaultOnTop:show() + + currentStats = { + dimension = 'default', + placement = 'top' + } + + statsBar.defaultOnTop:show() + statsBar.defaultOnTop:setPhantom(false) + statsBar.defaultOnTop.health = statsBar.defaultOnTop:getChildById('health') + statsBar.defaultOnTop.mana = statsBar.defaultOnTop:getChildById('mana') + statsBar.defaultOnTop.skills = statsBar.defaultOnTop:getChildById('skills') + + reloadSkillsTab(statsBar.defaultOnTop.skills, statsBar.defaultOnTop) + StatsBar.reloadCurrentStatsBarQuickInfo() + + modules.game_healthcircle.setTopBarOption(currentStats.dimension, currentStats.placement) + return true +end + +local function constructCompactOnTop() + statsBar:setHeight(35) + statsBar.compactOnTop:setHeight(35) + statsBar.compactOnTop:show() + + currentStats = { + dimension = 'compact', + placement = 'top' + } + + statsBar.compactOnTop:show() + statsBar.compactOnTop:setPhantom(false) + statsBar.compactOnTop.health = statsBar.compactOnTop:getChildById('health') + statsBar.compactOnTop.mana = statsBar.compactOnTop:getChildById('mana') + statsBar.compactOnTop.skills = statsBar.compactOnTop:getChildById('skills') + + reloadSkillsTab(statsBar.compactOnTop.skills, statsBar.compactOnTop) + StatsBar.reloadCurrentStatsBarQuickInfo() + + modules.game_healthcircle.setTopBarOption(currentStats.dimension, currentStats.placement) + return true +end + +local function openDropMenu(mousePos) + local menu = g_ui.createWidget('PopupMenu') + menu:setGameMenu(true) + + local current = StatsBar.getCurrentStatsBar() + if not (current) or current:getId() ~= 'compactOnTop' then + menu:addOption(tr('Switch to Compact Style'), function() + StatsBar.hideAll() + constructCompactOnTop() + end) + end + + if not (current) or current:getId() ~= 'defaultOnTop' then + menu:addOption(tr('Switch to Default Style'), function() + StatsBar.hideAll() + constructDefaultOnTop() + end) + end + + if not (current) or current:getId() ~= 'largeOnTop' then + menu:addOption(tr('Switch to Large Style'), function() + StatsBar.hideAll() + constructLargeOnTop() + end) + end + + if not (current) or current:getId() ~= 'parallelOnTop' then + menu:addOption(tr('Switch to Parallel Style'), function() + StatsBar.hideAll() + constructParallelOnTop() + end) + end + + menu:addSeparator() + + local current = StatsBar.getCurrentStatsBar() + if current and current.skills then + for _, skillTuple in ipairs(skillsTuples) do + if not g_settings.getBoolean('top_statsbar_' .. skillTuple.key) then + menu:addOption(tr('Show') .. ' ' .. tr(skillTuple.name), function() + g_settings.set('top_statsbar_' .. skillTuple.key, true) + reloadSkillsTab(current.skills, current) + end) + else + menu:addOption(tr('Hide') .. ' ' .. tr(skillTuple.name), function() + g_settings.set('top_statsbar_' .. skillTuple.key, false) + reloadSkillsTab(current.skills, current) + end) + end + end + end + + menu:addSeparator() + menu:addOption(tr('Hide Customisable Status Bars'), function() + StatsBar.hideAll() + modules.game_healthcircle.setTopBarOption(currentStats.dimension, currentStats.placement) + end) + + menu:display(mousePos) +end + +local function onStatsMousePress(tab, mousePos, mouseButton) + if mouseButton == MouseRightButton then + openDropMenu(mousePos) + return true + end +end + +function StatsBar.reloadCurrentTab() + if currentStats.placement == 'top' then + if currentStats.dimension == 'large' then + return constructLargeOnTop() + elseif currentStats.dimension == 'parallel' then + return constructParallelOnTop() + elseif currentStats.dimension == 'default' then + return constructDefaultOnTop() + elseif currentStats.dimension == 'compact' then + return constructCompactOnTop() + end + end +end + +function StatsBar.setStatsBarOption(dimension, placement) + StatsBar.hideAll() + if firstCall then + if g_settings.getString('top_statsbar_dimension') and g_settings.getString('top_statsbar_dimension') ~= "" then + dimension = g_settings.getString('top_statsbar_dimension') + else + dimension = "compact" + end + + firstCall = false + end + + currentStats = { + dimension = dimension, + placement = placement + } + g_settings.set('top_statsbar_dimension', currentStats.dimension) + g_settings.set('top_statsbar_placement', currentStats.placement) + + if dimension ~= "hide" then + StatsBar.reloadCurrentTab() + end + +end + +function StatsBar.OnGameEnd() + g_settings.set('top_statsbar_dimension', currentStats.dimension) + g_settings.set('top_statsbar_placement', currentStats.placement) + + StatsBar.hideAll() + + modules.game_mainpanel.getIconsPanelOn():destroyChildren() + modules.game_mainpanel.getIconsPanelOff():destroyChildren() + + statsBar.largeOnTop.icons:destroyChildren() + statsBar.parallelOnTop.icons:destroyChildren() + statsBar.defaultOnTop.icons:destroyChildren() + statsBar.compactOnTop.icons:destroyChildren() +end + +function StatsBar.OnGameStart() + currentStats = { + dimension = g_settings.getString('top_statsbar_dimension'), + placement = g_settings.getString('top_statsbar_placement') + } + + if not (currentStats.dimension) or not (currentStats.placement) or currentStats.dimension == '' or + currentStats.placement == '' then + currentStats = { + dimension = 'default', + placement = 'top' + } + end + + createBlankIcon() + StatsBar.reloadCurrentTab() + modules.game_healthcircle.setTopBarOption(currentStats.dimension, currentStats.placement) + +end + +function StatsBar.init() + statsBar = modules.game_interface.getGameTopStatsBar() + if not statsBar then + return + end + statsBar.largeOnTop = statsBar:getChildById('largeOnTop') + statsBar.parallelOnTop = statsBar:getChildById('parallelOnTop') + statsBar.defaultOnTop = statsBar:getChildById('defaultOnTop') + statsBar.compactOnTop = statsBar:getChildById('compactOnTop') + statsBar.onMousePress = onStatsMousePress + + StatsBar.hideAll() + connect(LocalPlayer, { + onExperienceChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onLevelChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onHealthChange = StatsBar.reloadCurrentStatsBarQuickInfo, + onManaChange = StatsBar.reloadCurrentStatsBarQuickInfo, + onMagicLevelChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onBaseMagicLevelChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onSkillChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onBaseSkillChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onStatesChange = StatsBar.reloadCurrentStatsBarQuickInfo_state + + }) + connect(g_game, { + onGameStart = StatsBar.OnGameStart, + onGameEnd = StatsBar.OnGameEnd + }) +end + +function StatsBar.terminate() + disconnect(LocalPlayer, { + onExperienceChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onLevelChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onHealthChange = StatsBar.reloadCurrentStatsBarQuickInfo, + onManaChange = StatsBar.reloadCurrentStatsBarQuickInfo, + onMagicLevelChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onBaseMagicLevelChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onSkillChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onBaseSkillChange = StatsBar.reloadCurrentStatsBarDeepInfo, + onStatesChange = StatsBar.reloadCurrentStatsBarQuickInfo_state + }) + disconnect(g_game, { + onGameStart = StatsBar.OnGameStart, + OnGameEnd = StatsBar.OnGameEnd + }) + statsBar:destroy() +end diff --git a/modules/game_interface/widgets/uigamemap.lua b/modules/game_interface/widgets/uigamemap.lua index 3bf8106346..c7d76cd247 100644 --- a/modules/game_interface/widgets/uigamemap.lua +++ b/modules/game_interface/widgets/uigamemap.lua @@ -77,13 +77,7 @@ function UIGameMap:onMousePress() end end -function UIGameMap:onMouseMove(mousePos, mouseMoved) - self.mousePos = mousePos - return false -end - -function UIGameMap:onDragMove(mousePos, mouseMoved) - self.mousePos = mousePos +function UIGameMap:onMouseMove() return false end diff --git a/modules/game_interface/widgets/uiitem.lua b/modules/game_interface/widgets/uiitem.lua index d3d4b4bb53..274cd733cb 100644 --- a/modules/game_interface/widgets/uiitem.lua +++ b/modules/game_interface/widgets/uiitem.lua @@ -40,6 +40,9 @@ function UIItem:onDrop(widget, mousePos) local itemPos = item:getPosition() local itemTile = item:getTile() local toPos = self.position + if not(toPos) and self:getParent() and self:getParent().slotPosition then + toPos = self:getParent().slotPosition + end if not itemPos or not toPos then local pressedWidget = g_ui.getPressedWidget() local rootWidget = g_ui.getRootWidget() diff --git a/modules/game_inventory/inventory.lua b/modules/game_inventory/inventory.lua deleted file mode 100644 index e7c9281a40..0000000000 --- a/modules/game_inventory/inventory.lua +++ /dev/null @@ -1,154 +0,0 @@ -InventorySlotStyles = { - [InventorySlotHead] = 'HeadSlot', - [InventorySlotNeck] = 'NeckSlot', - [InventorySlotBack] = 'BackSlot', - [InventorySlotBody] = 'BodySlot', - [InventorySlotRight] = 'RightSlot', - [InventorySlotLeft] = 'LeftSlot', - [InventorySlotLeg] = 'LegSlot', - [InventorySlotFeet] = 'FeetSlot', - [InventorySlotFinger] = 'FingerSlot', - [InventorySlotAmmo] = 'AmmoSlot' -} - -inventoryWindow = nil -inventoryPanel = nil -inventoryButton = nil -purseButton = nil - -function init() - connect(LocalPlayer, { - onInventoryChange = onInventoryChange, - onBlessingsChange = onBlessingsChange - }) - connect(g_game, { - onGameStart = online, - onGameEnd = offline - }) - - g_keyboard.bindKeyDown('Ctrl+I', toggle) - - inventoryButton = modules.client_topmenu.addRightGameToggleButton('inventoryButton', tr('Inventory') .. ' (Ctrl+I)', - '/images/topbuttons/inventory', toggle) - inventoryButton:setOn(true) - - inventoryWindow = g_ui.loadUI('inventory') - inventoryWindow:disableResize() - inventoryPanel = inventoryWindow:getChildById('contentsPanel') - - purseButton = inventoryPanel:getChildById('purseButton') - local function purseFunction() - local purse = g_game.getLocalPlayer():getInventoryItem(InventorySlotPurse) - if purse then - g_game.use(purse) - end - end - purseButton.onClick = purseFunction - - refresh() - inventoryWindow:setup() - if g_game.isOnline() then - inventoryWindow:setupOnStart() - end -end - -function terminate() - disconnect(LocalPlayer, { - onInventoryChange = onInventoryChange, - onBlessingsChange = onBlessingsChange - }) - disconnect(g_game, { - onGameStart = online, - onGameEnd = offline - }) - - g_keyboard.unbindKeyDown('Ctrl+I') - - inventoryWindow:destroy() - inventoryButton:destroy() - - inventoryWindow = nil - inventoryPanel = nil - inventoryButton = nil - purseButton = nil -end - -function toggleAdventurerStyle(hasBlessing) - for slot = InventorySlotFirst, InventorySlotLast do - local itemWidget = inventoryPanel:getChildById('slot' .. slot) - if itemWidget then - itemWidget:setOn(hasBlessing) - end - end -end - -function online() - inventoryWindow:setupOnStart() -- load character window configuration - refresh() -end - -function offline() - inventoryWindow:setParent(nil, true) -end - -function refresh() - local player = g_game.getLocalPlayer() - for i = InventorySlotFirst, InventorySlotPurse do - if g_game.isOnline() then - onInventoryChange(player, i, player:getInventoryItem(i)) - else - onInventoryChange(player, i, nil) - end - toggleAdventurerStyle(player and Bit.hasBit(player:getBlessings(), Blessings.Adventurer) or false) - end - - purseButton:setVisible(g_game.getFeature(GamePurseSlot)) -end - -function toggle() - if inventoryButton:isOn() then - inventoryWindow:close() - inventoryButton:setOn(false) - else - inventoryWindow:open() - inventoryButton:setOn(true) - end -end - -function onMiniWindowOpen() - inventoryButton:setOn(true) -end - -function onMiniWindowClose() - inventoryButton:setOn(false) -end - --- hooked events -function onInventoryChange(player, slot, item, oldItem) - if slot > InventorySlotPurse then - return - end - - if slot == InventorySlotPurse then - if g_game.getFeature(GamePurseSlot) then - purseButton:setEnabled(item and true or false) - end - return - end - - local itemWidget = inventoryPanel:getChildById('slot' .. slot) - if item then - itemWidget:setStyle('InventoryItem') - itemWidget:setItem(item) - else - itemWidget:setStyle(InventorySlotStyles[slot]) - itemWidget:setItem(nil) - end -end - -function onBlessingsChange(player, blessings, oldBlessings) - local hasAdventurerBlessing = Bit.hasBit(blessings, Blessings.Adventurer) - if hasAdventurerBlessing ~= Bit.hasBit(oldBlessings, Blessings.Adventurer) then - toggleAdventurerStyle(hasAdventurerBlessing) - end -end diff --git a/modules/game_inventory/inventory.otmod b/modules/game_inventory/inventory.otmod deleted file mode 100644 index a52550ccea..0000000000 --- a/modules/game_inventory/inventory.otmod +++ /dev/null @@ -1,9 +0,0 @@ -Module - name: game_inventory - description: View local player equipments window - author: baxnie, edubart, BeniS - website: https://github.com/edubart/otclient - sandboxed: true - scripts: [ inventory ] - @onLoad: init() - @onUnload: terminate() diff --git a/modules/game_inventory/inventory.otui b/modules/game_inventory/inventory.otui deleted file mode 100644 index d52a196738..0000000000 --- a/modules/game_inventory/inventory.otui +++ /dev/null @@ -1,148 +0,0 @@ -InventoryItem < Item - $on: - image-source: /images/ui/item-blessed - -HeadSlot < InventoryItem - id: slot1 - image-source: /images/game/slots/head - &position: {x=65535, y=1, z=0} - $on: - image-source: /images/game/slots/head-blessed - -BodySlot < InventoryItem - id: slot4 - image-source: /images/game/slots/body - &position: {x=65535, y=4, z=0} - $on: - image-source: /images/game/slots/body-blessed - -LegSlot < InventoryItem - id: slot7 - image-source: /images/game/slots/legs - &position: {x=65535, y=7, z=0} - $on: - image-source: /images/game/slots/legs-blessed - -FeetSlot < InventoryItem - id: slot8 - image-source: /images/game/slots/feet - &position: {x=65535, y=8, z=0} - $on: - image-source: /images/game/slots/feet-blessed - -NeckSlot < InventoryItem - id: slot2 - image-source: /images/game/slots/neck - &position: {x=65535, y=2, z=0} - $on: - image-source: /images/game/slots/neck-blessed - -LeftSlot < InventoryItem - id: slot6 - image-source: /images/game/slots/left-hand - &position: {x=65535, y=6, z=0} - $on: - image-source: /images/game/slots/left-hand-blessed - -FingerSlot < InventoryItem - id: slot9 - image-source: /images/game/slots/finger - &position: {x=65535, y=9, z=0} - $on: - image-source: /images/game/slots/finger-blessed - -BackSlot < InventoryItem - id: slot3 - image-source: /images/game/slots/back - &position: {x=65535, y=3, z=0} - $on: - image-source: /images/game/slots/back-blessed - -RightSlot < InventoryItem - id: slot5 - image-source: /images/game/slots/right-hand - &position: {x=65535, y=5, z=0} - $on: - image-source: /images/game/slots/right-hand-blessed - -AmmoSlot < InventoryItem - id: slot10 - image-source: /images/game/slots/ammo - &position: {x=65535, y=10, z=0} - $on: - image-source: /images/game/slots/ammo-blessed - -PurseButton < Button - id: purseButton - size: 26 26 - !tooltip: tr('Open purse') - icon-source: /images/game/slots/purse - icon-size: 24 24 - icon-offset: 1 1 - -MiniWindow - id: inventoryWindow - !text: tr('Inventory') - icon: /images/topbuttons/inventory - height: 175 - @onOpen: modules.game_inventory.onMiniWindowOpen() - @onClose: modules.game_inventory.onMiniWindowClose() - &save: true - - MiniWindowContents - HeadSlot - anchors.top: parent.top - anchors.horizontalCenter: parent.horizontalCenter - margin-top: 3 - - BodySlot - anchors.top: prev.bottom - anchors.horizontalCenter: prev.horizontalCenter - margin-top: 3 - - LegSlot - anchors.top: prev.bottom - anchors.horizontalCenter: prev.horizontalCenter - margin-top: 3 - - FeetSlot - anchors.top: prev.bottom - anchors.horizontalCenter: prev.horizontalCenter - margin-top: 3 - - NeckSlot - anchors.top: slot1.top - anchors.right: slot1.left - margin-top: 10 - margin-right: 5 - - LeftSlot - anchors.top: prev.bottom - anchors.horizontalCenter: prev.horizontalCenter - margin-top: 3 - - FingerSlot - anchors.top: prev.bottom - anchors.horizontalCenter: prev.horizontalCenter - margin-top: 3 - - BackSlot - anchors.top: slot1.top - anchors.left: slot1.right - margin-top: 10 - margin-left: 5 - - RightSlot - anchors.top: prev.bottom - anchors.horizontalCenter: prev.horizontalCenter - margin-top: 3 - - AmmoSlot - anchors.top: prev.bottom - anchors.horizontalCenter: prev.horizontalCenter - margin-top: 3 - - PurseButton - margin-top: 3 - anchors.top: prev.bottom - anchors.horizontalCenter: prev.horizontalCenter \ No newline at end of file diff --git a/modules/game_mainpanel/mainhealthmanapanel.otui b/modules/game_mainpanel/mainhealthmanapanel.otui new file mode 100644 index 0000000000..ceb61c7217 --- /dev/null +++ b/modules/game_mainpanel/mainhealthmanapanel.otui @@ -0,0 +1,104 @@ +PhantomMiniWindow + id: mainhealthmanapanel + draggable: true + phantom: false + &panelHeight: 32 + height: 32 + + UIWidget + id: health + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + anchors.bottom: parent.verticalCenter + margin-left: 8 + margin-right: 8 + margin-top: 8 + phantom: true + + UIWidget + id: icon + image-source: /images/healthmana/hitpoints_symbol + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + size: 12 11 + + Label + id: text + !text: '155' + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + width: 44 + text-align: left + color: #c0c0c0ff + + UIWidget + id: total + anchors.left: icon.right + anchors.right: text.left + anchors.verticalCenter: parent.verticalCenter + image-source: /images/healthmana/hitpoints_manapoints_bar_border + image-border-left: 6 + image-border-right: 6 + margin-left: 4 + margin-right: 10 + height: 11 + + UIWidget + id: current + anchors.left: total.left + image-source: /images/healthmana/hitpoints_bar_filled + image-border-left: 5 + image-border-right: 7 + anchors.verticalCenter: total.verticalCenter + height: 11 + width: 47 + + UIWidget + id: mana + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.verticalCenter + anchors.bottom: parent.bottom + margin-left: 8 + margin-right: 8 + margin-top: 4 + phantom: true + + UIWidget + id: icon + image-source: /images/healthmana/mana_symbol + anchors.left: parent.left + anchors.verticalCenter: parent.verticalCenter + size: 12 11 + + Label + id: text + !text: '60' + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + width: 44 + text-align: left + color: #c0c0c0ff + + UIWidget + id: total + anchors.left: icon.right + anchors.right: text.left + anchors.verticalCenter: parent.verticalCenter + image-source: /images/healthmana/hitpoints_manapoints_bar_border + image-border-left: 6 + image-border-right: 6 + margin-left: 4 + margin-right: 10 + height: 11 + + UIWidget + id: current + anchors.left: total.left + image-source: /images/healthmana/mana_bar_filled + image-border-left: 5 + image-border-right: 7 + anchors.verticalCenter: total.verticalCenter + height: 11 + width: 47 diff --git a/modules/game_mainpanel/maininventorypanel.otui b/modules/game_mainpanel/maininventorypanel.otui new file mode 100644 index 0000000000..f2f038635f --- /dev/null +++ b/modules/game_mainpanel/maininventorypanel.otui @@ -0,0 +1,497 @@ + +StandModeBox < UICheckBox + size: 20 20 + image-source: /images/inventory/buttons_general + image-clip: 0 0 20 20 + $checked: + image-clip: 20 0 20 20 + +ChaseModeBox < UICheckBox + size: 20 20 + image-source: /images/inventory/buttons_general + image-clip: 0 20 20 20 + $checked: + image-clip: 20 20 20 20 + +ConditionWidget < UIWidget + size: 10 10 + + $!first: + margin-left: 2 + +PhantomMiniWindow + id: maininventorypanel + draggable: true + phantom: false + height: 162 + &panelHeight: 162 + on: true + + $!on: + &panelHeight: 62 + height: 62 + + UIWidget + id: onPanel + anchors.fill: parent + phantom: true + + Button + id: changeSize + image-source: /images/inventory/min_button_small + image-clip: 0 0 12 12 + anchors.top: parent.top + anchors.left: parent.left + margin-left: 8 + margin-top: 5 + size: 12 12 + @onClick: changeInventorySize() + + $pressed !disabled: + image-clip: 12 0 12 12 + + Button + id: blessings + image-source: /images/inventory/button_blessings_grey + image-clip: 0 0 12 12 + anchors.top: changeSize.top + anchors.left: changeSize.right + margin-left: 3 + size: 12 12 + + $pressed !disabled: + image-clip: 12 0 12 12 + + StandModeBox + id: standPosture + anchors.right: parent.right + anchors.top: changeSize.top + margin-right: 7 + size: 20 20 + + ChaseModeBox + id: followPosture + image-source: /images/inventory/buttons_general + anchors.right: standPosture.right + anchors.top: standPosture.bottom + margin-top: 4 + + UIWidget + id: expert + image-source: /images/inventory/buttons_general + image-clip: 0 140 20 20 + anchors.right: standPosture.right + anchors.top: followPosture.bottom + phantom: false + margin-top: 4 + size: 20 20 + + UIWidget + id: pvp + image-source: /images/inventory/buttons_general + image-clip: 0 100 44 20 + anchors.right: standPosture.right + anchors.top: expert.bottom + &imageClipCheckedX: 0 + &imageClipUncheckedX: 0 + &imageClipCheckedY: 120 + &imageClipUncheckedY: 100 + &imageClipWidth: 44 + margin-top: 4 + phantom: false + size: 44 20 + @onClick: | + selectPvp(self:getImageClip().y == 100) + + TopToggleButton + id: attack + image-source: /images/inventory/buttons_general + image-clip: 0 40 20 20 + anchors.right: standPosture.left + anchors.top: standPosture.top + margin-right: 4 + size: 20 20 + @onClick: | + selectCombat('attack') + + $pressed !disabled: + image-clip: 20 40 20 20 + + $disabled: + image-clip: 20 40 20 20 + + TopToggleButton + id: balanced + image-source: /images/inventory/buttons_general + image-clip: 0 80 20 20 + anchors.right: attack.right + anchors.top: attack.bottom + margin-top: 4 + size: 20 20 + @onClick: | + selectCombat('balanced') + + $pressed !disabled: + image-clip: 20 80 20 20 + + $disabled: + image-clip: 20 80 20 20 + + TopToggleButton + id: defense + image-source: /images/inventory/buttons_general + image-clip: 0 60 20 20 + anchors.right: attack.right + anchors.top: balanced.bottom + margin-top: 4 + size: 20 20 + @onClick: | + selectCombat('defense') + + $pressed !disabled: + image-clip: 20 60 20 20 + + $disabled: + image-clip: 20 60 20 20 + + TopToggleButton + id: stop + !text: tr('Stop') + anchors.left: defense.left + anchors.right: standPosture.right + anchors.bottom: parent.bottom + font: cipsoftFont + color: #c0c0c0ff + size: 44 13 + @onClick: | + g_game.stop() + g_game.getLocalPlayer():stopAutoWalk() + + Panel + id: icons + size: 108 18 + padding: 2 + + image-source: /images/ui/containerslot + image-border: 3 + anchors.left: changeSize.left + anchors.right: backpack.right + anchors.bottom: parent.bottom + anchors.top: stop.top + layout: + type: horizontalBox + + MainInventoryItem + id: amulet + anchors.top: changeSize.bottom + anchors.left: changeSize.left + margin-top: 3 + &slotPosition: {x = 65535, y = 2, z = 0} + + MainInventoryItem + id: helmet + anchors.top: changeSize.top + anchors.left: amulet.right + margin-left: 3 + &slotPosition: {x = 65535, y = 1, z = 0} + + MainInventoryItem + id: backpack + anchors.top: amulet.top + anchors.left: helmet.right + margin-left: 3 + &slotPosition: {x = 65535, y = 3, z = 0} + + MainInventoryItem + id: sword + anchors.top: amulet.bottom + anchors.left: amulet.left + margin-top: 3 + &slotPosition: {x = 65535, y = 6, z = 0} + + MainInventoryItem + id: ring + anchors.top: sword.bottom + anchors.left: amulet.left + margin-top: 3 + &slotPosition: {x = 65535, y = 9, z = 0} + + MainInventoryItem + id: armor + anchors.top: helmet.bottom + anchors.left: helmet.left + margin-top: 3 + &slotPosition: {x = 65535, y = 4, z = 0} + + MainInventoryItem + id: legs + anchors.top: armor.bottom + anchors.left: helmet.left + margin-top: 3 + &slotPosition: {x = 65535, y = 7, z = 0} + + MainInventoryItem + id: boots + anchors.top: legs.bottom + anchors.left: helmet.left + margin-top: 3 + &slotPosition: {x = 65535, y = 8, z = 0} + + MainInventoryItem + id: shield + anchors.top: backpack.bottom + anchors.left: backpack.left + margin-top: 3 + &slotPosition: {x = 65535, y = 5, z = 0} + + MainInventoryItem + id: tools + anchors.top: shield.bottom + anchors.left: backpack.left + margin-top: 3 + &slotPosition: {x = 65535, y = 10, z = 0} + + MainInventoryItem + id: soulPanel + anchors.left: amulet.left + anchors.right: amulet.right + anchors.bottom: boots.bottom + anchors.top: ring.bottom + margin-top: 3 + + Label + !text: tr('Soul') + text.align: center + font: cipsoftFont + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + color: #c0c0c0ff + margin-top: 1 + + Label + id: soul + !text: '100000' + font: cipsoftFont + text-align: center + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + color: #c0c0c0ff + + MainInventoryItem + id: capacityPanel + anchors.left: backpack.left + anchors.right: backpack.right + anchors.bottom: boots.bottom + anchors.top: tools.bottom + margin-top: 3 + + Label + !text: tr('Cap') + text.align: center + font: cipsoftFont + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + color: #c0c0c0ff + margin-top: 1 + + Label + id: capacity + !text: '10000' + font: cipsoftFont + text-align: center + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + color: #c0c0c0ff + + UIWidget + id: offPanel + anchors.fill: parent + phantom: true + + Button + id: changeSize + image-source: /images/inventory/max_button_small + image-clip: 0 0 12 12 + anchors.top: parent.top + anchors.left: parent.left + margin-left: 8 + margin-top: 5 + size: 12 12 + @onClick: changeInventorySize() + + $pressed !disabled: + image-clip: 12 0 12 12 + + MainInventoryItem + id: soulAndCapacity + anchors.left: changeSize.right + anchors.top: changeSize.top + margin-left: 4 + size: 30 44 + + Label + !text: tr('Cap') + text.align: center + font: cipsoftFont + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + color: #c0c0c0ff + margin-top: 1 + height: 10 + + Label + id: capacity + !text: '10000' + font: cipsoftFont + text-align: center + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + margin-top: 8 + color: #c0c0c0ff + + Label + !text: tr('Soul') + text.align: center + font: cipsoftFont + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + color: #c0c0c0ff + margin-bottom: 8 + height: 10 + + Label + id: soul + !text: '100000' + font: cipsoftFont + text-align: center + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + margin-bottom: -2 + color: #c0c0c0ff + + TopToggleButton + id: attack + image-source: /images/inventory/buttons_general + image-clip: 0 40 20 20 + anchors.left: soulAndCapacity.right + anchors.top: changeSize.top + margin-left: 3 + size: 20 20 + @onClick: | + selectCombat('attack') + + $pressed !disabled: + image-clip: 20 40 20 20 + + $disabled: + image-clip: 20 40 20 20 + + TopToggleButton + id: defense + image-source: /images/inventory/buttons_general + image-clip: 0 60 20 20 + anchors.left: attack.right + anchors.top: changeSize.top + margin-left: 1 + size: 20 20 + @onClick: | + selectCombat('defense') + + $pressed !disabled: + image-clip: 20 60 20 20 + + $disabled: + image-clip: 20 60 20 20 + + TopToggleButton + id: balanced + image-source: /images/inventory/buttons_general + image-clip: 0 80 20 20 + anchors.left: defense.right + anchors.top: changeSize.top + margin-left: 1 + size: 20 20 + @onClick: | + selectCombat('balanced') + + $pressed !disabled: + image-clip: 20 80 20 20 + + $disabled: + image-clip: 20 80 20 20 + + StandModeBox + id: standPosture + anchors.left: attack.left + anchors.top: attack.bottom + margin-top: 4 + + + ChaseModeBox + id: followPosture + anchors.left: standPosture.right + anchors.top: standPosture.top + margin-left: 1 + + UIWidget + id: pvp + image-source: /images/inventory/buttons_general + image-clip: 0 160 20 20 + anchors.left: followPosture.right + anchors.top: standPosture.top + &imageClipCheckedX: 20 + &imageClipUncheckedX: 0 + &imageClipCheckedY: 160 + &imageClipUncheckedY: 160 + &imageClipWidth: 20 + margin-left: 1 + phantom: false + size: 20 20 + @onClick: | + selectPvp(self:getImageClip().x == 0) + + UIWidget + id: expert + image-source: /images/inventory/buttons_general + image-clip: 20 140 12 12 + anchors.left: changeSize.left + anchors.bottom: soulAndCapacity.bottom + phantom: false + size: 12 12 + + Button + id: blessings + image-source: /images/inventory/button_blessings_grey + image-clip: 0 0 12 12 + anchors.top: expert.bottom + anchors.left: changeSize.left + margin-top: 3 + size: 12 12 + + $pressed !disabled: + image-clip: 12 0 12 12 + + Panel + id: icons + anchors.left: soulAndCapacity.left + anchors.right: pvp.right + anchors.bottom: parent.bottom + anchors.top: blessings.top + phantom: false + image-source: /images/ui/containerslot + image-border: 3 + layout: + type: horizontalBox + + TopToggleButton + id: stop + !text: tr('Stop') + anchors.right: parent.right + margin-right: 7 + anchors.bottom: icons.bottom + font: cipsoftFont + color: #c0c0c0ff + size: 44 13 + @onClick: | + g_game.stop() + g_game.getLocalPlayer():stopAutoWalk() diff --git a/modules/game_mainpanel/mainmappanel.otui b/modules/game_mainpanel/mainmappanel.otui new file mode 100644 index 0000000000..385db2c821 --- /dev/null +++ b/modules/game_mainpanel/mainmappanel.otui @@ -0,0 +1,252 @@ +PhantomMiniWindow + id: mainmappanel + draggable: true + phantom: false + &panelHeight: 116 + height: 116 + + UIWidget + id: minimapBorder + anchors.top: parent.top + anchors.left: parent.left + margin-top: 5 + margin-left: 8 + size: 108 111 + image-source: /images/ui/1pixel_down_frame + + Minimap + id: minimap + anchors.fill: parent + margin: 1 + + UIWidget + id: layersPanel + size: 20 68 + anchors.bottom: parent.bottom + anchors.right: parent.right + margin-right: 7 + + UIWidget + id: automapLayers + image-source: /images/automap/automap_indicator_maplayers + anchors.left: parent.left + anchors.bottom: parent.bottom + image-clip: 98 0 14 67 + size: 14 67 + + UIWidget + image-source: /images/ui/vertical_line_dark + margin-left: 2 + margin-top: 4 + margin-bottom: 4 + anchors.left: automapLayers.right + anchors.top: parent.top + anchors.bottom: parent.bottom + width: 1 + + UIWidget + id: layersMark + anchors.left: prev.right + anchors.top: automapLayers.top + image-source: /images/automap/automap_indicator_slider_left + margin-top: 28 + + Button + image-source: /images/automap/automap_phantom + anchors.left: automapLayers.left + anchors.right: automapLayers.right + anchors.top: automapLayers.top + anchors.bottom: automapLayers.verticalCenter + @onClick: upLayer() + + Button + image-source: /images/automap/automap_phantom + anchors.left: automapLayers.left + anchors.right: automapLayers.right + anchors.top: automapLayers.verticalCenter + anchors.bottom: automapLayers.bottom + @onClick: downLayer() + + Button + id: fullMap + image-source: /images/automap/automap_buttons + image-clip: 0 0 20 20 + anchors.right: layersPanel.left + anchors.bottom: minimapBorder.bottom + margin-right: 4 + size: 20 20 + @onClick: fullscreen() + + $pressed !disabled: + image-clip: 20 0 20 20 + + Button + id: zoomIn + image-source: /images/automap/automap_buttons + image-clip: 0 40 20 20 + anchors.right: fullMap.right + anchors.bottom: fullMap.top + margin-bottom: 2 + size: 20 20 + @onClick: zoomIn() + + $pressed !disabled: + image-clip: 20 40 20 20 + + Button + id: zoomOut + image-source: /images/automap/automap_buttons + image-clip: 0 20 20 20 + anchors.right: fullMap.right + anchors.bottom: zoomIn.top + margin-bottom: 2 + size: 20 20 + @onClick: zoomOut() + + $pressed !disabled: + image-clip: 20 20 20 20 + + UIWidget + id: rosePanel + anchors.top: minimapBorder.top + anchors.right: layersPanel.right + size: 43 43 + + UIWidget + id: ambients + anchors.centerIn: parent + size: 31 31 + + UIWidget + id: main + image-source: /images/automap/timedisplay_scroll + anchors.left: parent.left + anchors.top: parent.top + image-clip: 100 0 24 31 + size: 24 31 + + UIWidget + id: secondary + image-source: /images/automap/timedisplay_scroll + anchors.left: main.right + anchors.top: parent.top + image-clip: 0 0 7 31 + size: 7 31 + + Button + image-source: /images/automap/automap_phantom + anchors.fill: parent + @onClick: resetMap() + + UIWidget + id: rose + anchors.fill: parent + image-source: /images/automap/automap_rose + image-clip: 0 0 43 43 + phantom: true + + Button + image-source: /images/automap/automap_rose + image-clip: 14 0 15 8 + anchors.left: parent.left + anchors.top: parent.top + margin-left: 14 + size: 15 8 + @onClick: | + onClickRoseButton('north') + + $pressed !disabled: + image-clip: 57 0 15 8 + + Button + image-source: /images/automap/automap_rose + image-clip: 28 0 15 15 + anchors.left: parent.left + anchors.top: parent.top + margin-left: 28 + size: 15 15 + @onClick: | + onClickRoseButton('north-east') + + $pressed !disabled: + image-clip: 114 0 15 15 + + Button + image-source: /images/automap/automap_rose + image-clip: 35 14 8 15 + anchors.left: parent.left + anchors.top: parent.top + margin-left: 35 + margin-top: 14 + size: 8 15 + @onClick: | + onClickRoseButton('east') + + $pressed !disabled: + image-clip: 164 14 8 15 + + Button + image-source: /images/automap/automap_rose + image-clip: 28 28 15 15 + anchors.left: parent.left + anchors.top: parent.top + margin-left: 28 + margin-top: 28 + size: 15 15 + @onClick: | + onClickRoseButton('south-east') + + $pressed !disabled: + image-clip: 200 28 15 15 + + Button + image-source: /images/automap/automap_rose + image-clip: 14 35 15 8 + anchors.left: parent.left + anchors.top: parent.top + margin-left: 14 + margin-top: 35 + size: 15 8 + @onClick: | + onClickRoseButton('south') + + $pressed !disabled: + image-clip: 229 35 15 8 + + Button + image-source: /images/automap/automap_rose + image-clip: 0 28 15 15 + anchors.left: parent.left + anchors.top: parent.top + margin-top: 28 + size: 15 15 + @onClick: | + onClickRoseButton('south-west') + + $pressed !disabled: + image-clip: 258 28 15 15 + + Button + image-source: /images/automap/automap_rose + image-clip: 0 14 8 15 + anchors.left: parent.left + anchors.top: parent.top + margin-top: 14 + size: 8 15 + @onClick: | + onClickRoseButton('west') + + $pressed !disabled: + image-clip: 301 14 8 15 + + Button + image-source: /images/automap/automap_rose + image-clip: 0 0 15 15 + anchors.left: parent.left + anchors.top: parent.top + size: 15 15 + @onClick: | + onClickRoseButton('north-west') + + $pressed !disabled: + image-clip: 344 0 15 15 diff --git a/modules/game_mainpanel/mainoptionspanel.otui b/modules/game_mainpanel/mainoptionspanel.otui new file mode 100644 index 0000000000..5a44811404 --- /dev/null +++ b/modules/game_mainpanel/mainoptionspanel.otui @@ -0,0 +1,119 @@ +PhantomMiniWindow + id: mainoptionspanel + height: 28 + &panelHeight: 28 + on: true + + UIWidget + id: offPanel + anchors.fill: parent + margin-top: 8 + phantom: true + + UIWidget + id: store + + image-clip: 0 0 108 20 + anchors.top: parent.top + anchors.left: parent.left + + size: 108 20 + layout: + type: verticalBox + cell-size: 108 20 + cell-spacing: 2 + flow: true + $pressed !disabled: + image-clip: 0 20 108 20 + + Button + size: 44 20 + image-source: /images/options/button_enlarge + image-clip: 0 0 44 20 + anchors.top: parent.top + anchors.right: parent.right + margin-right: 8 + @onClick: changeOptionsSize() + + $pressed !disabled: + image-clip: 0 20 44 20 + + UIWidget + id: onPanel + anchors.fill: parent + margin-top: 8 + phantom: true + + UIWidget + id: store + + image-clip: 0 0 108 20 + anchors.top: parent.top + anchors.left: parent.left + margin-left: 8 + size: 108 20 + phantom: true + layout: + type: verticalBox + cell-size: 108 20 + cell-spacing: 2 + flow: true + + $pressed !disabled: + image-clip: 0 20 108 20 + + Button + id: resizer + size: 44 20 + image-source: /images/options/button_shrink + image-clip: 0 0 44 20 + anchors.top: parent.top + anchors.right: parent.right + margin-right: 8 + @onClick: changeOptionsSize() + + $pressed !disabled: + image-clip: 0 20 44 20 + + UIWidget + id: options + anchors.left: store.left + anchors.right: store.right + anchors.top: store.bottom + anchors.bottom: parent.bottom + margin-top: 6 + margin-left: 0 + margin-right: 0 + margin-bottom: 0 + phantom: true + layout: + type: grid + cell-size: 20 20 + cell-spacing: 2 + flow: true + + UIWidget + image-source: /images/ui/vertical_line_bright + anchors.top: options.top + anchors.bottom: options.bottom + anchors.left: store.right + margin-left: 5 + phantom: true + width: 1 + + UIWidget + id: specials + anchors.left: resizer.left + anchors.right: resizer.right + anchors.top: options.top + anchors.bottom: parent.bottom + margin-top: 0 + margin-left: 0 + margin-right: 0 + margin-bottom: 0 + phantom: true + layout: + type: grid + cell-size: 20 20 + cell-spacing: 2 + flow: true diff --git a/modules/game_mainpanel/mainpanel.lua b/modules/game_mainpanel/mainpanel.lua new file mode 100644 index 0000000000..ae1aaea344 --- /dev/null +++ b/modules/game_mainpanel/mainpanel.lua @@ -0,0 +1,819 @@ +function init() + mapController:init() + healthManaController:init() + inventoryController:init() + optionsController:init() +end + +function terminate() + mapController:terminate() + healthManaController:terminate() + inventoryController:terminate() + optionsController:terminate() +end + +local standModeBox +local chaseModeBox +local optionsAmount = 0 +local specialsAmount = 0 +local storeAmount = 0 + +local chaseModeRadioGroup + +function reloadMainPanelSizes() + local main = modules.game_interface.getMainRightPanel() + local rightPanel = modules.game_interface.getRightPanel() + + if not main or not rightPanel then + return + end + + local height = 4 + for _, panel in ipairs(main:getChildren()) do + if panel.panelHeight ~= nil then + if panel:isVisible() then + panel:setHeight(panel.panelHeight) + height = height + panel.panelHeight + + if panel:getId() == 'mainoptionspanel' and panel:isOn() then + local currentOptionsAmount = math.ceil(optionsAmount / 5) + local optionsHeight = (currentOptionsAmount * 28) + 3 + local currentSpecialsAmount = math.ceil(specialsAmount / 2) + local specialsHeight = (currentSpecialsAmount * 28) + 3 + local maxPanelHeight = math.max(optionsHeight, specialsHeight) + + if storeAmount > 1 then + local currentStoreAmount = math.ceil(storeAmount / 1) + local storeHeight = (currentStoreAmount * 20) + 3 + panel.onPanel.store:setHeight(storeHeight) + maxPanelHeight = math.max(maxPanelHeight, storeHeight) + end + + panel:setHeight(panel:getHeight() + maxPanelHeight) + height = height + maxPanelHeight + if storeAmount >= 2 then + height = height + 15 + end + end + else + panel:setHeight(0) + end + end + end + + main:setHeight(height) + rightPanel:fitAll() +end + +-- @ Options +local optionsShrink = false +local function refreshOptionsSizes() + if optionsShrink then + optionsController.ui:setOn(false) + optionsController.ui.onPanel:hide() + optionsController.ui.offPanel:show() + else + optionsController.ui:setOn(true) + optionsController.ui.onPanel:show() + optionsController.ui.offPanel:hide() + end + reloadMainPanelSizes() +end + +local function createButton_large(id, description, image, callback, special, front) + -- fast version + local panel = optionsController.ui.onPanel.store + + storeAmount = storeAmount + 1 + + local button = panel:getChildById(id) + if not button then + button = g_ui.createWidget('largeToggleButton') + if front then + panel:insertChild(1, button) + else + panel:addChild(button) + end + end + button:setId(id) + button:setTooltip(description) + button:setImageSource(image) + button:setImageClip('0 0 108 20') + button.onMouseRelease = function(widget, mousePos, mouseButton) + if widget:containsPoint(mousePos) and mouseButton ~= MouseMidButton then + callback() + return true + end + end + + return button +end + +local function createButton(id, description, image, callback, special, front, index) + local panel + if special then + panel = optionsController.ui.onPanel.specials + specialsAmount = specialsAmount + 1 + else + panel = optionsController.ui.onPanel.options + optionsAmount = optionsAmount + 1 + end + + local button = panel:getChildById(id) + if not button then + button = g_ui.createWidget('MainToggleButton') + if front then + panel:insertChild(1, button) + else + panel:addChild(button) + end + end + + button:setId(id) + button:setTooltip(description) + button:setSize('20 20') + button:setImageSource(image) + button:setImageClip('0 0 20 20') + button.onMouseRelease = function(widget, mousePos, mouseButton) + if widget:containsPoint(mousePos) and mouseButton ~= MouseMidButton then + callback() + return true + end + end + if not button.index and type(index) == 'number' then + button.index = index or 1000 + end + + refreshOptionsSizes() + return button +end + +optionsController = Controller:new() +optionsController:setUI('mainoptionspanel', modules.game_interface.getMainRightPanel()) + +function optionsController:onInit() +end + +function optionsController:onTerminate() +end + +function optionsController:onGameStart() + optionsShrink = g_settings.getBoolean('mainpanel_shrink_options') + refreshOptionsSizes() + modules.game_interface.setupOptionsMainButton() + modules.client_options.setupOptionsMainButton() + local getOptionsPanel = optionsController.ui.onPanel.options + local children = getOptionsPanel:getChildren() + table.sort(children, function(a, b) + return (a.index or 1000) < (b.index or 1000) + end) + getOptionsPanel:reorderChildren(children) +end + +function optionsController:onGameEnd() +end + +function changeOptionsSize() + optionsShrink = not optionsShrink + g_settings.set('mainpanel_shrink_options', optionsShrink) + refreshOptionsSizes() +end + +function addToggleButton(id, description, image, callback, front, index) + return createButton(id, description, image, callback, false, front, index) +end + +function addSpecialToggleButton(id, description, image, callback, front, index) + return createButton(id, description, image, callback, true, front, index) +end + +function addStoreButton(id, description, image, callback, front) + return createButton_large(id, description, image, callback, true, front) +end +-- @ End of Options + +-- @ Health/Mana +local function healthManaEvent() + local player = g_game.getLocalPlayer() + if not player then + return + end + + healthManaController.ui.health.text:setText(player:getHealth()) + healthManaController.ui.health.current:setWidth(math.max(12, math.ceil( + (healthManaController.ui.health.total:getWidth() * player:getHealth()) / player:getMaxHealth()))) + + healthManaController.ui.mana.text:setText(player:getMana()) + healthManaController.ui.mana.current:setWidth(math.max(12, math.ceil( + (healthManaController.ui.mana.total:getWidth() * player:getMana()) / player:getMaxMana()))) +end + +healthManaController = Controller:new() +healthManaController:setUI('mainhealthmanapanel', modules.game_interface.getMainRightPanel()) + +local healthManaControllerEvents = healthManaController:addEvent(LocalPlayer, { + onHealthChange = healthManaEvent, + onManaChange = healthManaEvent +}) + +function healthManaController:onInit() +end + +function healthManaController:onTerminate() +end + +function healthManaController:onGameStart() + healthManaControllerEvents:connect() + healthManaControllerEvents:execute('onHealthChange') + healthManaControllerEvents:execute('onManaChange') +end + +function healthManaController:onGameEnd() + healthManaControllerEvents:disconnect() +end +-- @ End of Health/Mana + +-- @ Inventory +local inventoryShrink = false +local function getInventoryUi() + if inventoryShrink then + return inventoryController.ui.offPanel + end + + return inventoryController.ui.onPanel +end + +local function walkEvent() + if modules.client_options.getOption('autoChaseOverride') then + if g_game.isAttacking() and g_game.getChaseMode() == ChaseOpponent then + selectPosture('stand', true) + end + end +end + +local function combatEvent() + local chaseMode = g_game.getChaseMode() + if chaseMode == 1 then + chaseModeRadioGroup:selectWidget(chaseModeBox, true) + else + chaseModeRadioGroup:selectWidget(standModeBox, true) + end + + if g_game.getFightMode() == FightOffensive then + selectCombat('attack', true) + elseif g_game.getFightMode() == FightBalanced then + selectCombat('balanced', true) + elseif g_game.getFightMode() == FightDefensive then + selectCombat('defense', true) + end + + selectPvp(g_game.getPVPMode() == PVPRedFist, true) +end + +local function inventoryEvent(player, slot, item, oldItem) + if inventoryShrink then + return + end + + local ui = getInventoryUi() + local slotPanel + local toggler + if slot == InventorySlotHead then + slotPanel = ui.helmet + toggler = slotPanel.helmet + elseif slot == InventorySlotNeck then + slotPanel = ui.amulet + toggler = slotPanel.amulet + elseif slot == InventorySlotBack then + slotPanel = ui.backpack + toggler = slotPanel.backpack + elseif slot == InventorySlotBody then + slotPanel = ui.armor + toggler = slotPanel.armor + elseif slot == InventorySlotRight then + slotPanel = ui.shield + toggler = slotPanel.shield + elseif slot == InventorySlotLeft then + slotPanel = ui.sword + toggler = slotPanel.sword + elseif slot == InventorySlotLeg then + slotPanel = ui.legs + toggler = slotPanel.legs + elseif slot == InventorySlotFeet then + slotPanel = ui.boots + toggler = slotPanel.boots + elseif slot == InventorySlotFinger then + slotPanel = ui.ring + toggler = slotPanel.ring + elseif slot == InventorySlotAmmo then + slotPanel = ui.tools + toggler = slotPanel.tools + end + + if not slotPanel then + return + end + + slotPanel.item:setItem(item) + toggler:setEnabled(not item) + slotPanel.item:setWidth(34) + slotPanel.item:setHeight(34) +end + +local function onSoulChange(localPlayer, soul) + local ui = getInventoryUi() + if not localPlayer then + return + end + if not soul then + return + end + + if ui.soulPanel and ui.soulPanel.soul then + ui.soulPanel.soul:setText(soul) + end + + if ui.soulAndCapacity and ui.soulAndCapacity.soul then + ui.soulAndCapacity.soul:setText(soul) + end + +end + +local function onFreeCapacityChange(player, freeCapacity) + if not player then + return + end + + if not freeCapacity then + return + end + if freeCapacity > 99999 then + freeCapacity = math.min(9999, math.floor(freeCapacity / 1000)) .. "k" + elseif freeCapacity > 999 then + freeCapacity = math.floor(freeCapacity) + elseif freeCapacity > 99 then + freeCapacity = math.floor(freeCapacity * 10) / 10 + end + local ui = getInventoryUi() + if ui.capacityPanel and ui.capacityPanel.capacity then + ui.capacityPanel.capacity:setText(freeCapacity) + end + if ui.soulAndCapacity and ui.soulAndCapacity.capacity then + ui.soulAndCapacity.capacity:setText(freeCapacity) + end +end + +function getIconsPanelOn() + return inventoryController.ui.onPanel.icons +end + +function getIconsPanelOff() + return inventoryController.ui.offPanel.icons +end + +local function refreshInventory_panel() + local player = g_game.getLocalPlayer() + if player then + onSoulChange(player, player:getSoul()) + onFreeCapacityChange(player, player:getFreeCapacity()) + end + if inventoryShrink then + return + end + + for i = InventorySlotFirst, InventorySlotPurse do + if g_game.isOnline() then + inventoryEvent(player, i, player:getInventoryItem(i)) + else + inventoryEvent(player, i, nil) + end + end + +end + +local function refreshInventorySizes() + if inventoryShrink then + inventoryController.ui:setOn(false) + inventoryController.ui.onPanel:hide() + inventoryController.ui.offPanel:show() + else + inventoryController.ui:setOn(true) + inventoryController.ui.onPanel:show() + inventoryController.ui.offPanel:hide() + refreshInventory_panel() + end + combatEvent() + walkEvent() + reloadMainPanelSizes() +end + +function onSetChaseMode(self, selectedChaseModeButton) + if selectedChaseModeButton == nil then + return + end + local buttonId = selectedChaseModeButton:getId() + local chaseMode + + if buttonId == 'followPosture' then + chaseMode = ChaseOpponent + else -- standModeBox + chaseMode = DontChase + end + + g_game.setChaseMode(chaseMode) +end + +inventoryController = Controller:new() +inventoryController:setUI('maininventorypanel', modules.game_interface.getMainRightPanel()) + +local inventoryControllerEvents = inventoryController:addEvent(LocalPlayer, { + onInventoryChange = inventoryEvent, + onSoulChange = onSoulChange, + onFreeCapacityChange = onFreeCapacityChange +}) + +local inventoryControllerEvents_game = inventoryController:addEvent(g_game, { + onWalk = walkEvent, + onAutoWalk = walkEvent, + onFightModeChange = combatEvent, + onChaseModeChange = combatEvent, + onSafeFightChange = combatEvent, + onPVPModeChange = combatEvent +}) + +function inventoryController:onInit() + refreshInventory_panel() + local ui = getInventoryUi() + standModeBox = ui.standPosture + chaseModeBox = ui.followPosture + chaseModeRadioGroup = UIRadioGroup.create() + chaseModeRadioGroup:addWidget(standModeBox) + chaseModeRadioGroup:addWidget(chaseModeBox) + connect(chaseModeRadioGroup, { + onSelectionChange = onSetChaseMode + }) +end + +function inventoryController:onTerminate() + inventoryControllerEvents:disconnect() + inventoryControllerEvents_game:disconnect() +end + +function inventoryController:onGameStart() + inventoryControllerEvents:connect() + inventoryControllerEvents:execute('onInventoryChange') + inventoryControllerEvents:execute('onSoulChange') + inventoryControllerEvents:execute('onFreeCapacityChange') + + inventoryControllerEvents_game:connect() + inventoryControllerEvents_game:execute('onWalk') + inventoryControllerEvents_game:execute('onAutoWalk') + inventoryControllerEvents_game:execute('onFightModeChange') + inventoryControllerEvents_game:execute('onChaseModeChange') + inventoryControllerEvents_game:execute('onSafeFightChange') + inventoryControllerEvents_game:execute('onPVPModeChange') + + inventoryShrink = g_settings.getBoolean('mainpanel_shrink_inventory') + refreshInventorySizes() + refreshInventory_panel() + + if g_game.getClientVersion() < 1000 then + inventoryController.ui.offPanel.blessings:hide() + inventoryController.ui.offPanel.expert:hide() + inventoryController.ui.onPanel.blessings:hide() + inventoryController.ui.onPanel.expert:hide() + end +end + +function inventoryController:onGameEnd() + inventoryControllerEvents:disconnect() + inventoryControllerEvents_game:disconnect() +end + +function selectPosture(key, ignoreUpdate) + local ui = getInventoryUi() + if key == 'stand' then + ui.standPosture:setEnabled(false) + ui.followPosture:setEnabled(true) + if not ignoreUpdate then + g_game.setChaseMode(DontChase) + end + elseif key == 'follow' then + ui.standPosture:setEnabled(true) + ui.followPosture:setEnabled(false) + if not ignoreUpdate then + g_game.setChaseMode(ChaseOpponent) + end + end +end + +function selectCombat(combat, ignoreUpdate) + local ui = getInventoryUi() + if combat == 'attack' then + ui.attack:setEnabled(false) + ui.balanced:setEnabled(true) + ui.defense:setEnabled(true) + if not ignoreUpdate then + g_game.setFightMode(FightOffensive) + end + elseif combat == 'balanced' then + ui.attack:setEnabled(true) + ui.balanced:setEnabled(false) + ui.defense:setEnabled(true) + if not ignoreUpdate then + g_game.setFightMode(FightBalanced) + end + elseif combat == 'defense' then + ui.attack:setEnabled(true) + ui.balanced:setEnabled(true) + ui.defense:setEnabled(false) + if not ignoreUpdate then + g_game.setFightMode(FightDefensive) + end + end +end + +function selectPvp(pvp, ignoreUpdate) + local ui = getInventoryUi() + if pvp then + ui.pvp:setImageClip( + ui.pvp.imageClipCheckedX .. ' ' .. ui.pvp.imageClipCheckedY .. ' ' .. ui.pvp.imageClipWidth .. ' 20') + if not ignoreUpdate then + g_game.setPVPMode(PVPRedFist) + end + else + ui.pvp:setImageClip(ui.pvp.imageClipUncheckedX .. ' ' .. ui.pvp.imageClipUncheckedY .. ' ' .. + ui.pvp.imageClipWidth .. ' 20') + if not ignoreUpdate then + g_game.setPVPMode(PVPWhiteHand) + end + end +end + +function changeInventorySize() + inventoryShrink = not inventoryShrink + g_settings.set('mainpanel_shrink_inventory', inventoryShrink) + refreshInventorySizes() + reloadMainPanelSizes() + local player = g_game.getLocalPlayer() + if player and g_game.isOnline() then + + onFreeCapacityChange(player, player:getFreeCapacity()) + onSoulChange(player, player:getSoul()) + end +end + +function getSlot5() + return inventoryController.ui.offPanel.shield +end + +-- @ End of Inventory + +-- @ Minimap +local minimapWidget = nil -- bot fix +local otmm = true +local oldPos = nil +local fullscreenWidget +local virtualFloor = 7 +local dayTimeEvent +local currentDayTime = { + h = 12, + m = 0 +} + +local function refreshVirtualFloors() + mapController.ui.layersPanel.layersMark:setMarginTop(((virtualFloor + 1) * 4) - 3) + mapController.ui.layersPanel.automapLayers:setImageClip((virtualFloor * 14) .. ' 0 14 67') +end + +local function onPositionChange() + local player = g_game.getLocalPlayer() + if not player then + return + end + + local pos = player:getPosition() + if not pos then + return + end + + local minimapWidget = mapController.ui.minimapBorder.minimap + if not (minimapWidget) or minimapWidget:isDragging() then + return + end + + if not minimapWidget.fullMapView then + minimapWidget:setCameraPosition(pos) + end + + minimapWidget:setCrossPosition(pos) + virtualFloor = pos.z + refreshVirtualFloors() +end + +mapController = Controller:new() +mapController:setUI('mainmappanel', modules.game_interface.getMainRightPanel()) + +local mapControllerEvents = mapController:addEvent(LocalPlayer, { + onPositionChange = onPositionChange +}) + +function onChangeWorldTime(hour, minute) + currentDayTime = { + h = hour % 24, + m = minute + } + + if dayTimeEvent ~= nil then + removeEvent(dayTimeEvent) + dayTimeEvent = nil + end + + dayTimeEvent = scheduleEvent(function() + local nextH = currentDayTime.h + local nextM = currentDayTime.m + 12 + if nextM >= 60 then + nextH = nextH + 1 + nextM = nextM - 60 + end + onChangeWorldTime(nextH, nextM) + end, 30000) + + local position = math.floor((124 / (24 * 60)) * ((hour * 60) + minute)) + local mainWidth = 31 + local secondaryWidth = 0 + + if (position + 31) >= 124 then + secondaryWidth = ((position + 31) - 124) + 1 + mainWidth = 31 - secondaryWidth + end + + mapController.ui.rosePanel.ambients.main:setWidth(mainWidth) + mapController.ui.rosePanel.ambients.secondary:setWidth(secondaryWidth) + + if secondaryWidth == 0 then + mapController.ui.rosePanel.ambients.secondary:hide() + else + mapController.ui.rosePanel.ambients.secondary:setImageClip('0 0 ' .. secondaryWidth .. ' 31') + mapController.ui.rosePanel.ambients.secondary:show() + end + + if mainWidth == 0 then + mapController.ui.rosePanel.ambients.main:hide() + else + mapController.ui.rosePanel.ambients.main:setImageClip(position .. ' 0 ' .. mainWidth .. ' 31') + mapController.ui.rosePanel.ambients.main:show() + end +end + +function mapController:onInit() + mapControllerEvents:connect() + mapControllerEvents:execute('onPositionChange') + + self.ui.minimapBorder.minimap:getChildById('floorUpButton'):hide() + self.ui.minimapBorder.minimap:getChildById('floorDownButton'):hide() + self.ui.minimapBorder.minimap:getChildById('zoomInButton'):hide() + self.ui.minimapBorder.minimap:getChildById('zoomOutButton'):hide() + self.ui.minimapBorder.minimap:getChildById('resetButton'):hide() + + connect(g_game, { + onChangeWorldTime = onChangeWorldTime + }) +end + +function mapController:onGameStart() + -- Load Map + g_minimap.clean() + + local minimapFile = '/minimap' + local loadFnc = nil + + if otmm then + minimapFile = minimapFile .. '.otmm' + loadFnc = g_minimap.loadOtmm + else + minimapFile = minimapFile .. '_' .. g_game.getClientVersion() .. '.otcm' + loadFnc = g_map.loadOtcm + end + + if g_resources.fileExists(minimapFile) then + loadFnc(minimapFile) + end + + self.ui.minimapBorder.minimap:load() +end + +function mapController:onGameEnd() + -- Save Map + if otmm then + g_minimap.saveOtmm('/minimap.otmm') + else + g_map.saveOtcm('/minimap_' .. g_game.getClientVersion() .. '.otcm') + end + + self.ui.minimapBorder.minimap:save() +end + +function mapController:onTerminate() + mapControllerEvents:disconnect() + disconnect(g_game, { + onChangeWorldTime = onChangeWorldTime + }) +end + +function zoomIn() + mapController.ui.minimapBorder.minimap:zoomIn() +end + +function zoomOut() + mapController.ui.minimapBorder.minimap:zoomOut() +end + +function fullscreen() + local minimapWidget = mapController.ui.minimapBorder.minimap + if not minimapWidget then + minimapWidget = fullscreenWidget + end + local zoom; + + if not minimapWidget then + return + end + + if minimapWidget.fullMapView then + fullscreenWidget = nil + minimapWidget:setParent(mapController.ui.minimapBorder) + minimapWidget:fill('parent') + mapController.ui:show(true) + zoom = minimapWidget.zoomMinimap + mapController:unbindKeyDown('Escape', fullscreen) + minimapWidget.fullMapView = false + else + fullscreenWidget = minimapWidget + mapController.ui:hide(true) + minimapWidget:setParent(modules.game_interface.getRootPanel()) + minimapWidget:fill('parent') + zoom = minimapWidget.zoomFullmap + mapController:bindKeyDown('Escape', fullscreen) + minimapWidget.fullMapView = true + end + + local pos = oldPos or minimapWidget:getCameraPosition() + oldPos = minimapWidget:getCameraPosition() + minimapWidget:setZoom(zoom) + minimapWidget:setCameraPosition(pos) +end + +function upLayer() + if virtualFloor == 0 then + return + end + + mapController.ui.minimapBorder.minimap:floorUp(1) + virtualFloor = virtualFloor - 1 + refreshVirtualFloors() +end + +function downLayer() + if virtualFloor == 15 then + return + end + + mapController.ui.minimapBorder.minimap:floorDown(1) + virtualFloor = virtualFloor + 1 + refreshVirtualFloors() +end + +function onClickRoseButton(dir) + if dir == 'north' then + mapController.ui.minimapBorder.minimap:move(0, 1) + elseif dir == 'north-east' then + mapController.ui.minimapBorder.minimap:move(-1, 1) + elseif dir == 'east' then + mapController.ui.minimapBorder.minimap:move(-1, 0) + elseif dir == 'south-east' then + mapController.ui.minimapBorder.minimap:move(-1, -1) + elseif dir == 'south' then + mapController.ui.minimapBorder.minimap:move(0, -1) + elseif dir == 'south-west' then + mapController.ui.minimapBorder.minimap:move(1, -1) + elseif dir == 'west' then + mapController.ui.minimapBorder.minimap:move(1, 0) + elseif dir == 'north-west' then + mapController.ui.minimapBorder.minimap:move(1, 1) + end +end + +function resetMap() + mapController.ui.minimapBorder.minimap:reset() + local player = g_game.getLocalPlayer() + if player then + virtualFloor = player:getPosition().z + refreshVirtualFloors() + end +end + +function getMiniMapUi() + return mapController.ui.minimapBorder.minimap +end +-- @ End of Minimap diff --git a/modules/game_mainpanel/mainpanel.otmod b/modules/game_mainpanel/mainpanel.otmod new file mode 100644 index 0000000000..cc2cf2b32b --- /dev/null +++ b/modules/game_mainpanel/mainpanel.otmod @@ -0,0 +1,9 @@ +Module + name: game_mainpanel + description: Main panel + author: marcosvf132 + website: https://github.com/edubart/otclient + sandboxed: true + scripts: [ mainpanel ] + @onLoad: init() + @onUnload: terminate() \ No newline at end of file diff --git a/modules/game_minimap/flagwindow.otui b/modules/game_minimap/flagwindow.otui deleted file mode 100644 index c0fac4a337..0000000000 --- a/modules/game_minimap/flagwindow.otui +++ /dev/null @@ -1,188 +0,0 @@ -FlagButton < CheckBox - size: 15 15 - margin-left: 2 - image-source: /images/game/minimap/flagcheckbox - image-size: 15 15 - image-border: 3 - icon-source: /images/game/minimap/mapflags - icon-size: 11 11 - icon-clip: 0 0 11 11 - icon-offset: 2 4 - text: - - $!checked: - image-clip: 26 0 26 26 - - $hover !checked: - image-clip: 78 0 26 26 - - $checked: - image-clip: 0 0 26 26 - - $hover checked: - image-clip: 52 0 26 26 - - -FlagWindow < MainWindow - id: flagWindow - !text: tr('Create Map Mark') - size: 196 185 - - Label - id: position - !text: tr('Position') .. ':' - text-auto-resize: true - anchors.top: parent.top - anchors.left: parent.left - margin-top: 2 - - Label - !text: tr('Description') .. ':' - anchors.left: parent.left - anchors.top: prev.bottom - margin-top: 7 - - TextEdit - id: description - margin-top: 3 - anchors.left: parent.left - anchors.top: prev.bottom - width: 158 - - FlagButton - id: flag1 - anchors.left: parent.left - anchors.top: prev.bottom - margin-top: 6 - margin-left: 0 - - FlagButton - id: flag2 - icon-clip: 11 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag3 - icon-clip: 22 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag4 - icon-clip: 33 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag5 - icon-clip: 44 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag6 - icon-clip: 55 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag7 - icon-clip: 66 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag8 - icon-clip: 77 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag9 - icon-clip: 88 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag10 - icon-clip: 99 0 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag11 - icon-clip: 0 11 11 11 - anchors.left: parent.left - anchors.top: prev.bottom - margin-top: 6 - margin-left: 0 - - FlagButton - id: flag12 - icon-clip: 11 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag13 - icon-clip: 22 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag14 - icon-clip: 33 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag15 - icon-clip: 44 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag16 - icon-clip: 55 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag17 - icon-clip: 66 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag18 - icon-clip: 77 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag19 - icon-clip: 88 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - FlagButton - id: flag20 - icon-clip: 99 11 11 11 - anchors.left: prev.right - anchors.top: prev.top - - Button - id: okButton - !text: tr('Ok') - width: 64 - anchors.right: next.left - anchors.bottom: parent.bottom - margin-right: 10 - - Button - id: cancelButton - !text: tr('Cancel') - width: 64 - anchors.right: parent.right - anchors.bottom: parent.bottom diff --git a/modules/game_minimap/minimap.lua b/modules/game_minimap/minimap.lua deleted file mode 100644 index 68d504f206..0000000000 --- a/modules/game_minimap/minimap.lua +++ /dev/null @@ -1,153 +0,0 @@ -local otmm = true -local oldPos = nil -local minimapButton = nil - --- bot fix -minimapWidget = nil - -local function updateCameraPosition() - local player = g_game.getLocalPlayer() - if not player then - return - end - - local pos = player:getPosition() - if not pos then - return - end - - local minimapWidget = controller.ui.contentsPanel.minimap - if minimapWidget:isDragging() then - return - end - - if not minimapWidget.fullMapView then - minimapWidget:setCameraPosition(pos) - end - - minimapWidget:setCrossPosition(pos) -end - -local function toggle() - if minimapButton:isOn() then - controller.ui:close() - else - controller.ui:open() - end -end - -local function toggleFullMap() - local rootPanel = modules.game_interface.getRootPanel() - local minimapWidget = controller.ui.contentsPanel.minimap - if not minimapWidget then - minimapWidget = rootPanel.minimap - end - local zoom; - - if minimapWidget.fullMapView then - minimapWidget:setParent(controller.ui.contentsPanel) - minimapWidget:fill('parent') - controller.ui:show(true) - zoom = minimapWidget.zoomMinimap - else - controller.ui:hide(true) - minimapWidget:setParent(rootPanel) - minimapWidget:fill('parent') - zoom = minimapWidget.zoomFullmap - end - - minimapWidget.fullMapView = not minimapWidget.fullMapView - -- minimapWidget:setAlternativeWidgetsVisible(fullmapView) - - local pos = oldPos or minimapWidget:getCameraPosition() - oldPos = minimapWidget:getCameraPosition() - minimapWidget:setZoom(zoom) - minimapWidget:setCameraPosition(pos) -end - -controller = Controller:new() -controller:setUI('minimap', modules.game_interface.getRightPanel()) -local localPlayerEvent = controller:addEvent(LocalPlayer, { - onPositionChange = updateCameraPosition -}) - -function controller:onInit() - minimapButton = modules.client_topmenu.addRightGameToggleButton('minimapButton', tr('Minimap') .. ' (Ctrl+M)', - '/images/topbuttons/minimap', toggle) - minimapButton:setOn(true) - - minimapWidget = self.ui.contentsPanel.minimap - - local gameRootPanel = modules.game_interface.getRootPanel() - self:bindKeyPress('Alt+Left', function() - minimapWidget:move(1, 0) - end, gameRootPanel) - self:bindKeyPress('Alt+Right', function() - minimapWidget:move(-1, 0) - end, gameRootPanel) - self:bindKeyPress('Alt+Up', function() - minimapWidget:move(0, 1) - end, gameRootPanel) - self:bindKeyPress('Alt+Down', function() - minimapWidget:move(0, -1) - end, gameRootPanel) - - self:bindKeyDown('Ctrl+M', toggle) - self:bindKeyDown('Ctrl+Shift+M', toggleFullMap) - - self.ui:setContentMinimumHeight(80) - self.ui:setup() -end - -function controller:onGameStart() - self.ui:setupOnStart() -- load character window configuration - - -- Load Map - local minimapFile = '/minimap' - local loadFnc = nil - - if otmm then - minimapFile = minimapFile .. '.otmm' - loadFnc = g_minimap.loadOtmm - else - minimapFile = minimapFile .. '_' .. g_game.getClientVersion() .. '.otcm' - loadFnc = g_map.loadOtcm - end - - if g_resources.fileExists(minimapFile) then - loadFnc(minimapFile) - end - - self.ui.contentsPanel.minimap:load() -end - -function controller:onGameEnd() - self.ui:setParent(nil, true) - - -- Save Map - if otmm then - g_minimap.saveOtmm('/minimap.otmm') - else - g_map.saveOtcm('/minimap_' .. g_game.getClientVersion() .. '.otcm') - end - - self.ui.contentsPanel.minimap:save() - - g_minimap.clean() -end - -function controller:onTerminate() - minimapButton:destroy() - minimapButton = nil -end - -function onMiniWindowOpen() - minimapButton:setOn(true) - localPlayerEvent:connect() - localPlayerEvent:execute('onPositionChange') -end - -function onMiniWindowClose() - minimapButton:setOn(false) - localPlayerEvent:disconnect() -end diff --git a/modules/game_minimap/minimap.otmod b/modules/game_minimap/minimap.otmod deleted file mode 100644 index 8daee7d1c5..0000000000 --- a/modules/game_minimap/minimap.otmod +++ /dev/null @@ -1,9 +0,0 @@ -Module - name: game_minimap - description: Manage minimap - author: edubart, BeniS - website: https://github.com/edubart/otclient - sandboxed: true - scripts: [ minimap ] - @onLoad: controller:init() - @onUnload: controller:terminate() \ No newline at end of file diff --git a/modules/game_minimap/minimap.otui b/modules/game_minimap/minimap.otui deleted file mode 100644 index 4b0b166d78..0000000000 --- a/modules/game_minimap/minimap.otui +++ /dev/null @@ -1,29 +0,0 @@ -MiniWindow - id: minimapWindow - !text: tr('Minimap') - height: 150 - icon: /images/topbuttons/minimap - @onOpen: onMiniWindowOpen() - @onClose: onMiniWindowClose() - &save: true - - Label - text: ? - text-align: center - phantom: false - !tooltip: tr('Hold left mouse button to navigate\nScroll mouse middle button to zoom\nRight mouse button to create map marks\nPress Ctrl+Shift+M to view the entire game map') - anchors.top: minimizeButton.top - anchors.right: minimizeButton.left - margin-right: 3 - size: 14 14 - - MiniWindowContents - Minimap - id: minimap - anchors.fill: parent - - ResizeBorder - anchors.right: parent.right - anchors.top: parent.top - anchors.bottom: parent.bottom - enabled: true \ No newline at end of file diff --git a/modules/game_outfit/outfit.lua b/modules/game_outfit/outfit.lua index cfeadf9572..4007e486c2 100644 --- a/modules/game_outfit/outfit.lua +++ b/modules/game_outfit/outfit.lua @@ -1,337 +1,1674 @@ -local ADDON_SETS = { - [1] = { 1 }, - [2] = { 2 }, - [3] = { 1, 2 }, - [4] = { 3 }, - [5] = { 1, 3 }, - [6] = { 2, 3 }, - [7] = { 1, 2, 3 } +local opcodeSystem = { + enable = false, + id = 213 } -local addons = nil -local outfit = nil -local outfits = nil -local outfitWindow = nil -local outfitCreature = nil -local mountCreature = nil -local mounts = nil -local currentColorBox = nil -local currentClotheButtonBox = nil +local window = nil +local appearanceGroup = nil +local colorModeGroup = nil +local colorBoxGroup = nil -local currentOutfit = 1 -local currentMount = 1 +local floor = nil +local movementCheck = nil +local showFloorCheck = nil +local showOutfitCheck = nil +local showMountCheck = nil +local showWingsCheck = nil +local showAuraCheck = nil +local showShaderCheck = nil +local showBarsCheck = nil +local showTitleCheck = nil +local showEffectsCheck = nil local colorBoxes = {} +local currentColorBox = nil -controller = Controller:new() +ignoreNextOutfitWindow = 0 +local floorTiles = 7 +local settingsFile = "/settings/outfit.json" +local settings = {} -localPlayerEvent = EventController:new(LocalPlayer, { - onOutfitChange = function(creature) - creature = creature or g_game.getLocalPlayer() - local selectedOutfit = outfits[currentOutfit] +local tempOutfit = {} +local ServerData = { + currentOutfit = {}, + outfits = {}, + mounts = {}, + wings = {}, + auras = {}, + shaders = {}, + healthBars = {}, + effects = {}, + title = {} +} - local selectedAddons - local availableAddons +local lastSelectAura = "None" +local lastSelectWings = "None" +local lastSelectEffects = "None" +local lastSelectShader = "Outfit - Default" +local lastSelectTitle = "None" - if outfit == nil then - outfit = creature:getOutfit() +local function checkPresetsValidity(presets) + for i, preset in ipairs(presets) do + if type(preset) == "number" and preset > 0 then + return true end + end + return false +end - outfit.mount = nil - - selectedAddons = outfit.addons - availableAddons = selectedOutfit[3] +local function attachEffectIfValid(UICreature, value) + local creature = UICreature:getCreature() + if checkPresetsValidity({value}) then + if creature then + creature:attachEffect(g_attachedEffects.getById(value)) + end + end +end - if table.empty(outfits) or not outfit then - return +local function attachOrDetachEffect(Id, attach) + local creature = previewCreature:getCreature() + if checkPresetsValidity({Id}) then + if creature then + if attach then + if not creature:getAttachedEffectById(Id) then + local effect = g_attachedEffects.getById(Id) + if effect then + creature:attachEffect(effect) + end + end + else + creature:detachEffectById(Id) + end end + end +end - local nameWidget = outfitWindow:getChildById('outfitName') - nameWidget:setText(selectedOutfit[2]) +local function showSelectionList(data, tempValue, tempField, onSelectCallback) + window.presetsList:hide() + window.presetsScroll:hide() + window.presetButtons:hide() - for k, addon in pairs(addons) do - addon.widget:setChecked(false) - addon.widget:setEnabled(false) - end + window.selectionList.onChildFocusChange = nil + window.selectionList:destroyChildren() - outfit.addons = 0 + local focused = nil + do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId("0") - for k, addon in pairs(addons) do - local isEnabled = availableAddons == 3 or addon.value == availableAddons - addon.widget:setEnabled(isEnabled) - addon.widget:setChecked(isEnabled and (selectedAddons == 3 or addon.value == selectedAddons)) + button.outfit:setOutfit({ + type = 0 + }) + button.name:setText("None") + if tempValue == 0 then + focused = 0 end + end + if data and #data > 0 then + for _, itemData in ipairs(data) do - outfit.type = selectedOutfit[1] - outfitCreature:setOutfit(outfit) + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId(tostring(itemData[1])) - if table.empty(mounts) or not mount then - return + local Category = modules.game_attachedeffects.getCategory(itemData[1]) + if Category == 1 then + button.outfit:setOutfit({ + type = modules.game_attachedeffects.thingId(itemData[1]) + }) + elseif Category == 2 then + button.outfit:setOutfit(previewCreature:getCreature():getOutfit()) + button.outfit:getCreature():attachEffect(g_attachedEffects.getById(itemData[1])) + elseif Category == 5 then + button.outfit:setImageSource(modules.game_attachedeffects.getTexture(itemData[1])) + end + + button.name:setText(modules.game_attachedeffects.getName(itemData[1])) + if tempValue == itemData[1] then + focused = (itemData[1]) + end end + end + if focused ~= nil then + local w = window.selectionList[focused] + w:focus() + window.selectionList:ensureChildVisible(w, { + x = 0, + y = 196 + }) + end + + window.selectionList.onChildFocusChange = onSelectCallback + window.selectionList:show() + window.selectionScroll:show() + window.listSearch:show() +end + +local AppearanceData = {"preset", "outfit", "mount", "wings", "aura", "effects", "shader", "healthBar", "title"} + +function init() + if opcodeSystem.enable then + ProtocolGame.registerExtendedOpcode(opcodeSystem.id, function(protocol, opcode, buffer) + local status, json_data = pcall(json.decode, buffer) - local nameMountWidget = outfitWindow:getChildById('mountName') - nameMountWidget:setText(mounts[currentMount][2]) + if not status then + g_logger.error("[Crafting] JSON error: " .. buffer) + return false + end - mount.type = mounts[currentMount][1] - mountCreature:setOutfit(mount) + ServerData.auras = json_data.action + ServerData.wings = json_data.wings + ServerData.shaders = json_data.shader + ServerData.healthBars = json_data.HealthBar + ServerData.effects = json_data.effect + ServerData.title = json_data.title + end) end -}) + connect(g_game, { + onOpenOutfitWindow = create, + onGameEnd = destroy + }) +end -function controller:onGameEnd() +function terminate() + if opcodeSystem.enable then + ProtocolGame.unregisterExtendedOpcode(opcodeSystem.id) + end + disconnect(g_game, { + onOpenOutfitWindow = create, + onGameEnd = destroy + }) destroy() end -controller:registerEvents(g_game, { - onOpenOutfitWindow = function(creatureOutfit, outfitList, creatureMount, mountList, creatureFamiliar, familiarList) - localPlayerEvent:connect() +function onMovementChange(checkBox, checked) + if checked == true then + previewCreature:getCreature():setStaticWalking(1000) + else + previewCreature:getCreature():setStaticWalking(0) + end + + settings.movement = checked +end + +function onShowFloorChange(checkBox, checked) + if checked then + floor:show() + + -- Magic! + local delay = 50 + periodicalEvent(function() + if movementCheck:isChecked() then + local direction = previewCreature:getDirection() + if direction == Directions.North then + local newMargin = floor:getMarginTop() + 8 + floor:setMarginTop(newMargin) + if newMargin >= 96 then + for i = 1, floorTiles do + floor:moveChildToIndex(floor:getChildByIndex(floorTiles * floorTiles), 1) + end + floor:setMarginTop(32) + end + elseif direction == Directions.South then + local newMargin = floor:getMarginBottom() + 8 + floor:setMarginBottom(newMargin) + if newMargin >= 64 then + for i = 1, floorTiles do + floor:moveChildToIndex(floor:getChildByIndex(1), floorTiles * floorTiles) + end + floor:setMarginBottom(0) + end + elseif direction == Directions.East then + local newMargin = floor:getMarginRight() + 8 + floor:setMarginRight(newMargin) + if newMargin >= 64 then + floor:setMarginRight(0) + end + elseif direction == Directions.West then + local newMargin = floor:getMarginLeft() + 8 + floor:setMarginLeft(newMargin) + if newMargin >= 64 then + floor:setMarginLeft(0) + end + end + else + floor:setMargin(0) + end + end, function() + return window and floor and showFloorCheck:isChecked() + end, delay, delay) + else + floor:hide() + end + + settings.showFloor = checked +end + +function onShowMountChange(checkBox, checked) + settings.showMount = checked + updatePreview() +end + +function onShowOutfitChange(checkBox, checked) + settings.showOutfit = checked + showMountCheck:setEnabled(settings.showOutfit) + showWingsCheck:setEnabled(settings.showOutfit) + showAuraCheck:setEnabled(settings.showOutfit) + showShaderCheck:setEnabled(settings.showOutfit) + showBarsCheck:setEnabled(settings.showOutfit) + showEffectsCheck:setEnabled(settings.effects) + updatePreview() +end + +function onShowAuraChange(checkBox, checked) + settings.showAura = checked + updatePreview() +end + +function onShowWingsChange(checkBox, checked) + settings.showWings = checked + updatePreview() +end + +function onShowShaderChange(checkBox, checked) + settings.showShader = checked + updatePreview() +end + +function onShowTitleChange(checkBox, checked) + settings.showTitle = checked + updatePreview() +end + +function onShowBarsChange(checkBox, checked) + settings.showBars = checked + updatePreview() +end + +function onShowEffectsChange(checkBox, checked) + settings.effects = checked + updatePreview() +end + +local PreviewOptions = { + ["showFloor"] = onShowFloorChange, + ["showOutfit"] = onShowOutfitChange, + ["showMount"] = onShowMountChange, + ["showWings"] = onShowWingsChange, + ["showAura"] = onShowAuraChange, + ["showShader"] = onShowShaderChange, + ["showBars"] = onShowBarsChange, + ["showTitle"] = onShowTitleChange, + ["showEffects"] = onShowEffectsChange +} - outfitCreature = creatureOutfit - mountCreature = creatureMount - outfits = outfitList - mounts = mountList +function create(player, outfitList, creatureMount, mountList, wingsList, auraList, effectsList, shaderList) + if ignoreNextOutfitWindow and g_clock.millis() < ignoreNextOutfitWindow + 1000 then + return + end + local currentOutfit = player:getOutfit() + if window then destroy() + end - outfitWindow = g_ui.displayUI('outfitwindow') + if currentOutfit.shader == "" then + currentOutfit.shader = "Outfit - Default" + end - local outfitCreatureBox = outfitWindow:getChildById('outfitCreatureBox') + loadSettings() - if outfitCreature then - outfit = outfitCreature:getOutfit() - outfitCreatureBox:setCreature(outfitCreature) + ServerData = { + currentOutfit = currentOutfit, + outfits = outfitList, + mounts = mountList, + wings = wingsList, + auras = auraList, + effects = effectsList, + shaders = shaderList + --[[ + healthBars = barsList, + title = titleList]] + + } + + window = g_ui.displayUI("outfitwindow") + + local checks = {{window.preview.options.showWings, ServerData.wings}, + {window.preview.options.showAura, ServerData.auras}, + {window.preview.options.showShader, ServerData.shaders}, + {window.preview.options.showBars, ServerData.healthBars}, + {window.preview.options.showEffects, ServerData.effects}, + {window.preview.options.showTitle, ServerData.title}, + + {window.appearance.settings.wings, ServerData.wings}, + {window.appearance.settings.aura, ServerData.auras}, + {window.appearance.settings.shader, ServerData.shaders}, + {window.appearance.settings.healthBar, ServerData.healthBars}, + {window.appearance.settings.effects, ServerData.effects}, + {window.appearance.settings.title, ServerData.title}} + + for _, check in ipairs(checks) do + local widget, data = check[1], check[2] + if not table.empty(data) then + widget:setVisible(true) else - outfitCreatureBox:hide() - outfitWindow:getChildById('outfitName'):hide() - outfitWindow:getChildById('outfitNextButton'):hide() - outfitWindow:getChildById('outfitPrevButton'):hide() + widget:setVisible(false) end + end + + floor = window.preview.panel.floor + for i = 1, floorTiles * floorTiles do + g_ui.createWidget("FloorTile", floor) + end + floor:hide() + + for _, appKey in ipairs(AppearanceData) do + updateAppearanceText(appKey, "None") + end + + previewCreature = window.preview.panel.creature + previewCreature:setCreatureSize(200) + previewCreature:setCenter(true) + -- previewCreature:setBorderColor('red') + -- previewCreature:setBorderWidth(2) + + if settings.currentPreset == nil then + loadDefaultSettings() + print("game_outfit error funtion loadSettings()") + end + if settings.currentPreset > 0 then + local preset = settings.presets[settings.currentPreset] + tempOutfit = table.copy(preset.outfit) - local mountCreatureBox = outfitWindow:getChildById('mountCreatureBox') - if mountCreature then - mount = mountCreature:getOutfit() - mountCreatureBox:setCreature(mountCreature) + updateAppearanceText("preset", preset.title) + else + tempOutfit = currentOutfit + end + + updatePreview() + + updateAppearanceTexts(currentOutfit) + + if g_game.getFeature(GamePlayerMounts) then + local isMount = g_game.getLocalPlayer():isMounted() + if isMount then + window.configure.mount.check:setEnabled(true) + window.configure.mount.check:setChecked(true) else - mountCreatureBox:hide() - outfitWindow:getChildById('mountName'):hide() - outfitWindow:getChildById('mountNextButton'):hide() - outfitWindow:getChildById('mountPrevButton'):hide() - end - - -- set addons - addons = { - [1] = { - widget = outfitWindow:getChildById('addon1'), - value = 1 - }, - [2] = { - widget = outfitWindow:getChildById('addon2'), - value = 2 - } + window.configure.mount.check:setEnabled(currentOutfit.mount > 0) + window.configure.mount.check:setChecked(isMount and currentOutfit.mount > 0) + end + end + + if currentOutfit.addons == 3 then + window.configure.addon1.check:setChecked(true) + window.configure.addon2.check:setChecked(true) + elseif currentOutfit.addons == 2 then + window.configure.addon1.check:setChecked(false) + window.configure.addon2.check:setChecked(true) + elseif currentOutfit.addons == 1 then + window.configure.addon1.check:setChecked(true) + window.configure.addon2.check:setChecked(false) + end + window.configure.addon1.check.onCheckChange = onAddonChange + window.configure.addon2.check.onCheckChange = onAddonChange + + configureAddons(currentOutfit.addons) + + movementCheck = window.preview.panel.movement + showFloorCheck = window.preview.options.showFloor.check + showOutfitCheck = window.preview.options.showOutfit.check + showMountCheck = window.preview.options.showMount.check + showWingsCheck = window.preview.options.showWings.check + showAuraCheck = window.preview.options.showAura.check + showShaderCheck = window.preview.options.showShader.check + showBarsCheck = window.preview.options.showBars.check + showEffectsCheck = window.preview.options.showEffects.check + showTitleCheck = window.preview.options.showTitle.check + + movementCheck.onCheckChange = onMovementChange + for _, option in ipairs(window.preview.options:getChildren()) do + option.check.onCheckChange = PreviewOptions[option:getId()] + end + + movementCheck:setChecked(settings.movement) + showFloorCheck:setChecked(settings.showFloor) + + if not settings.showOutfit then + showMountCheck:setEnabled(false) + showWingsCheck:setEnabled(false) + showAuraCheck:setEnabled(false) + showShaderCheck:setEnabled(false) + showBarsCheck:setEnabled(false) + showTitleCheck:setEnabled(false) + showEffectsCheck:setEnabled(false) + end + + showOutfitCheck:setChecked(settings.showOutfit) + showMountCheck:setChecked(settings.showMount) + showWingsCheck:setChecked(settings.showWings) + showAuraCheck:setChecked(settings.showAura) + showShaderCheck:setChecked(settings.showShader) + showBarsCheck:setChecked(settings.showBars) + showEffectsCheck:setChecked(settings.effects) + showTitleCheck:setChecked(settings.showTitle) + + colorBoxGroup = UIRadioGroup.create() + for j = 0, 6 do + for i = 0, 18 do + local colorBox = g_ui.createWidget("ColorBox", window.appearance.colorBoxPanel) + local outfitColor = getOutfitColor(j * 19 + i) + colorBox:setImageColor(outfitColor) + colorBox:setId("colorBox" .. j * 19 + i) + colorBox.colorId = j * 19 + i + + if colorBox.colorId == currentOutfit.head then + currentColorBox = colorBox + colorBox:setChecked(true) + end + colorBoxGroup:addWidget(colorBox) + end + end + + colorBoxGroup.onSelectionChange = onColorCheckChange + + appearanceGroup = UIRadioGroup.create() + appearanceGroup:addWidget(window.appearance.settings.preset.check) + appearanceGroup:addWidget(window.appearance.settings.outfit.check) + appearanceGroup:addWidget(window.appearance.settings.mount.check) + appearanceGroup:addWidget(window.appearance.settings.aura.check) + appearanceGroup:addWidget(window.appearance.settings.wings.check) + appearanceGroup:addWidget(window.appearance.settings.shader.check) + appearanceGroup:addWidget(window.appearance.settings.healthBar.check) + appearanceGroup:addWidget(window.appearance.settings.effects.check) + appearanceGroup:addWidget(window.appearance.settings.title.check) + appearanceGroup.onSelectionChange = onAppearanceChange + appearanceGroup:selectWidget(window.appearance.settings.preset.check) + + colorModeGroup = UIRadioGroup.create() + colorModeGroup:addWidget(window.appearance.colorMode.head) + colorModeGroup:addWidget(window.appearance.colorMode.primary) + colorModeGroup:addWidget(window.appearance.colorMode.secondary) + colorModeGroup:addWidget(window.appearance.colorMode.detail) + + colorModeGroup.onSelectionChange = onColorModeChange + colorModeGroup:selectWidget(window.appearance.colorMode.head) + + window.preview.options.showMount:setVisible(g_game.getFeature(GamePlayerMounts)) + window.configure.mount:setVisible(g_game.getFeature(GamePlayerMounts)) + window.appearance.settings.mount:setVisible(g_game.getFeature(GamePlayerMounts)) + window.listSearch.search.onKeyPress = onFilterSearch + previewCreature:getCreature():setDirection(2) +end + +function destroy() + if window then + floor = nil + movementCheck = nil + showFloorCheck = nil + showOutfitCheck = nil + showMountCheck = nil + showWingsCheck = nil + showAuraCheck = nil + showShaderCheck = nil + showBarsCheck = nil + showEffectsCheck = nil + showTitleCheck = nil + colorBoxes = {} + currentColorBox = nil + if appearanceGroup then + appearanceGroup:destroy() + appearanceGroup = nil + end + colorModeGroup:destroy() + colorModeGroup = nil + colorBoxGroup:destroy() + colorBoxGroup = nil + + ServerData = { + currentOutfit = {}, + outfits = {}, + mounts = {}, + wings = {}, + auras = {}, + shaders = {}, + healthBars = {}, + effects = {}, + title = {} } - for _, addon in pairs(addons) do - addon.widget.onCheckChange = function(self) - onAddonCheckChange(self, addon.value) + saveSettings() + settings = {} + window:destroy() + window = nil + lastSelectAura = "None" + lastSelectWings = "None" + lastSelectEffects = "None" + lastSelectShader = "None" + end +end + +function configureAddons(addons) + local hasAddon1 = addons == 1 or addons == 3 + local hasAddon2 = addons == 2 or addons == 3 + window.configure.addon1.check:setEnabled(hasAddon1) + window.configure.addon2.check:setEnabled(hasAddon2) + + window.configure.addon1.check.onCheckChange = nil + window.configure.addon2.check.onCheckChange = nil + window.configure.addon1.check:setChecked(false) + window.configure.addon2.check:setChecked(false) + if tempOutfit.addons == 3 then + window.configure.addon1.check:setChecked(true) + window.configure.addon2.check:setChecked(true) + elseif tempOutfit.addons == 2 then + window.configure.addon1.check:setChecked(false) + window.configure.addon2.check:setChecked(true) + elseif tempOutfit.addons == 1 then + window.configure.addon1.check:setChecked(true) + window.configure.addon2.check:setChecked(false) + end + window.configure.addon1.check.onCheckChange = onAddonChange + window.configure.addon2.check.onCheckChange = onAddonChange +end + +function newPreset() + if not settings.presets then + settings.presets = {} + end + + local presetWidget = g_ui.createWidget("PresetButton", window.presetsList) + local presetId = #settings.presets + 1 + presetWidget:setId(presetId) + presetWidget.title:setText("New Preset") + local outfitCopy = table.copy(tempOutfit) + presetWidget.creature:setOutfit(outfitCopy) + -- presetWidget.creature:setCenter(true) + + settings.presets[presetId] = { + title = "New Preset", + outfit = outfitCopy, + aura = "None", + effects = "None", + wings = "None", + shader = "None", + mounted = window.configure.mount.check:isChecked() + } + + presetWidget:focus() + window.presetsList:ensureChildVisible(presetWidget, { + x = 0, + y = 196 + }) + + lastSelectAura = "None" + lastSelectWings = "None" + lastSelectEffects = "None" + lastSelectShader = "Outfit - Default" + lastSelectTitle = "None" +end + +function deletePreset() + local presetId = settings.currentPreset + if presetId == 0 then + local focused = window.presetsList:getFocusedChild() + if focused then + presetId = tonumber(focused:getId()) + end + end + + if not presetId or presetId == 0 then + return + end + + table.remove(settings.presets, presetId) + window.presetsList[presetId]:destroy() + settings.currentPreset = 0 + local newId = 1 + for _, child in ipairs(window.presetsList:getChildren()) do + child:setId(newId) + newId = newId + 1 + end + + previewCreature:getCreature():clearAttachedEffects() + previewCreature:getCreature():setShader("Outfit - Default") + updateAppearanceText("preset", "None") + updateAppearanceText("shader", "Outfit - Default") + updateAppearanceText("aura", "None") + updateAppearanceText("wings", "None") + updateAppearanceText("effects", "None") + +end + +function savePreset() + local presetId = settings.currentPreset + if presetId == 0 then + local focused = window.presetsList:getFocusedChild() + if focused then + presetId = tonumber(focused:getId()) + end + end + + if not presetId or presetId == 0 then + return + end + + window.presetsList[presetId].creature:getCreature():clearAttachedEffects() + local outfitCopy = table.copy(tempOutfit) + + window.presetsList[presetId].creature:setOutfit(outfitCopy) + + settings.presets[presetId].outfit = outfitCopy + settings.presets[presetId].mounted = window.configure.mount.check:isChecked() + + settings.presets[presetId].shader = "Outfit - Default" + settings.presets[presetId].auras = lastSelectAura or "None" + settings.presets[presetId].effects = lastSelectEffects or "None" + settings.presets[presetId].wings = lastSelectWings or "None" + settings.presets[presetId].shaders = lastSelectShader or "None" + + settings.currentPreset = presetId + + attachEffectIfValid(window.presetsList[presetId].creature, lastSelectAura) + attachEffectIfValid(window.presetsList[presetId].creature, lastSelectEffects) + attachEffectIfValid(window.presetsList[presetId].creature, lastSelectWings) + local presets = {lastSelectAura, lastSelectEffects, lastSelectWings} + local hasValidAE = checkPresetsValidity(presets) + + if (hasValidAE and window.presetsList[presetId].creature:getCreatureSize() == 0) then + + window.presetsList[presetId].creature:setCreatureSize(150) + window.presetsList[presetId].creature:setCenter(true) + window.presetsList[presetId].creature:setSize("86 86") + else + window.presetsList[presetId].creature:setSize("64 64") + window.presetsList[presetId].creature:setCreatureSize(0) + window.presetsList[presetId].creature:setCenter(false) + end + if lastSelectShader ~= "None" or lastSelectShader ~= "Outfit - Default" then + window.presetsList[presetId].creature:getCreature():setShader(lastSelectShader) + end + + --[[ if lastSelectTitle ~= "None" then + window.presetsList[presetId].creature:getCreature():setTitle(lastSelectTitle, "verdana-11px-rounded", "#0000ff") + end ]] + -- @ +end + +function renamePreset() + local presetId = settings.currentPreset + if presetId == 0 then + local focused = window.presetsList:getFocusedChild() + if focused then + presetId = tonumber(focused:getId()) + end + end + + if not presetId or presetId == 0 then + return + end + + local presetWidget = window.presetsList[presetId] + presetWidget.title:hide() + presetWidget.rename.input:setText("") + presetWidget.rename.save.onClick = function() + saveRename(presetId) + end + presetWidget.rename:show() +end + +function saveRename(presetId) + local presetWidget = window.presetsList[presetId] + if not presetWidget then + return + end + + local newTitle = presetWidget.rename.input:getText():trim() + presetWidget.rename.input:setText("") + presetWidget.rename:hide() + presetWidget.title:setText(newTitle) + presetWidget.title:show() + settings.presets[presetId].title = newTitle + + if presetId == settings.currentPreset then + updateAppearanceText("preset", newTitle) + end +end + +function onAppearanceChange(widget, selectedWidget) + local id = selectedWidget:getParent():getId() + if id == "preset" then + showPresets() + elseif id == "outfit" then + showOutfits() + elseif id == "mount" then + showMounts() + -- numbers + elseif id == "aura" then + showSelectionList(ServerData.auras, tempOutfit.auras, "aura", onAuraSelect) + elseif id == "wings" then + showSelectionList(ServerData.wings, tempOutfit.wings, "wings", onWingsSelect) + elseif id == "effects" then + showSelectionList(ServerData.effects, tempOutfit.effects, "effects", onEffectBarSelect) + -- strings + elseif id == "shader" then + showShaders() + elseif id == "healthBar" then + showHealthBars() + elseif id == "title" then + showTitle() + end +end + +function showPresets() + window.listSearch:hide() + window.selectionList:hide() + window.selectionScroll:hide() + + local focused = nil + if window.presetsList:getChildCount() == 0 and settings.presets then + for presetId, preset in ipairs(settings.presets) do + local presetWidget = g_ui.createWidget("PresetButton", window.presetsList) + presetWidget:setId(presetId) + presetWidget.title:setText(preset.title) + presetWidget.creature:setOutfit(preset.outfit) + + attachEffectIfValid(presetWidget.creature, preset.auras) + attachEffectIfValid(presetWidget.creature, preset.effects) + attachEffectIfValid(presetWidget.creature, preset.wings) + + local presets = {preset.auras, preset.effects, preset.wings} + local hasValidAE = checkPresetsValidity(presets) + if (hasValidAE and presetWidget.creature:getCreatureSize() == 0) then + + presetWidget.creature:setCreatureSize(125) + presetWidget.creature:setCenter(true) + presetWidget.creature:setSize("86 86") + + else + presetWidget.creature:setSize("64 64") + presetWidget.creature:setCreatureSize(0) + presetWidget.creature:setCenter(false) + + end + + if preset.shaders ~= "None" then + presetWidget.creature:getCreature():setShader(preset.shaders) + lastSelectShader = preset.shaders + end + + if presetId == settings.currentPreset then + focused = presetId + end end + end - -- hook outfit sections - currentClotheButtonBox = outfitWindow:getChildById('head') - currentClotheButtonBox.onCheckChange = onClotheCheckChange - outfitWindow:getChildById('primary').onCheckChange = onClotheCheckChange - outfitWindow:getChildById('secondary').onCheckChange = onClotheCheckChange - outfitWindow:getChildById('detail').onCheckChange = onClotheCheckChange + if focused then + local w = window.presetsList[focused] - -- populate color panel - local colorBoxPanel = outfitWindow:getChildById('colorBoxPanel') - for j = 0, 6 do - for i = 0, 18 do - local colorId = j * 19 + i + w:focus() + window.presetsList:ensureChildVisible(w, { + x = 0, + y = 196 + }) + onPresetSelect(nil, window.presetsList[focused]) + end - local colorBox = g_ui.createWidget('ColorBox', colorBoxPanel) - colorBox:setImageColor(getOutfitColor(colorId)) - colorBox:setId('colorBox' .. colorId) - colorBox.colorId = colorId + window.presetsList.onChildFocusChange = onPresetSelect + window.presetsList:show() + window.presetsScroll:show() + window.presetButtons:show() +end - if colorId == outfit.head then - currentColorBox = colorBox - colorBox:setChecked(true) - end +function showOutfits() + window.presetsList:hide() + window.presetsScroll:hide() + window.presetButtons:hide() + + window.selectionList.onChildFocusChange = nil + window.selectionList:destroyChildren() + + local focused = nil + for _, outfitData in ipairs(ServerData.outfits) do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId(outfitData[1]) + + local outfit = table.copy(previewCreature:getCreature():getOutfit()) + outfit.type = outfitData[1] + outfit.addons = outfitData[3] + outfit.mount = 0 + outfit.auras = 0 + outfit.wings = 0 + outfit.shader = "Outfit - Default" + outfit.healthBar = 0 + outfit.effects = 0 + button.outfit:setOutfit(outfit) + + local thingType = g_things.getThingType(outfit.type, ThingCategoryCreature) + button.outfit:setPadding(-8) + button.outfit:setCreatureSize(thingType:getRealSize() + 32) + --button.outfit:setBorderColor('red') + --button.outfit:setBorderWidth(2) + + button.name:setText(outfitData[2]) + if tempOutfit.type == outfitData[1] then + focused = outfitData[1] + configureAddons(outfitData[3]) + end + end + + if focused then + local w = window.selectionList[focused] + w:focus() + window.selectionList:ensureChildVisible(w, { + x = 0, + y = 196 + }) + end + + window.selectionList.onChildFocusChange = onOutfitSelect + window.selectionList:show() + window.selectionScroll:show() + window.listSearch:show() +end + +function showMounts() + window.presetsList:hide() + window.presetsScroll:hide() + window.presetButtons:hide() + + window.selectionList.onChildFocusChange = nil + window.selectionList:destroyChildren() + + local focused = nil + + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId(0) + button.name:setText("None") + focused = 0 + + for _, mountData in ipairs(ServerData.mounts) do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId(mountData[1]) + + button.outfit:setOutfit({ + type = mountData[1] + }) + + local thingType = g_things.getThingType(mountData[1], ThingCategoryCreature) + button.outfit:setPadding(-8) + button.outfit:setCreatureSize(thingType:getRealSize() + 32) + + button.name:setText(mountData[2]) + if tempOutfit.mount == mountData[1] then + focused = mountData[1] + end + end + + if #ServerData.mounts == 1 then + window.selectionList:focusChild(nil) + end + + window.configure.mount.check:setEnabled(focused) + window.configure.mount.check:setChecked(g_game.getLocalPlayer():isMounted() and focused) + + if focused ~= nil then + local w = window.selectionList[focused] + w:focus() + window.selectionList:ensureChildVisible(w, { + x = 0, + y = 196 + }) + end + + window.selectionList.onChildFocusChange = onMountSelect + window.selectionList:show() + window.selectionScroll:show() + window.listSearch:show() +end + +function showShaders() + window.presetsList:hide() + window.presetsScroll:hide() + window.presetButtons:hide() + + window.selectionList.onChildFocusChange = nil + window.selectionList:destroyChildren() + + local focused = nil + do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId("Outfit - Default") + + button.outfit:setOutfit({ + type = tempOutfit.type, + addons = tempOutfit.addons + }) + button.outfit:getCreature():setShader("Outfit - Default") + button.name:setText("Outfit - Default") + if tempOutfit.shaders == "Outfit - Default" then + focused = "Outfit - Default" + end + end + + if ServerData.shaders and #ServerData.shaders > 0 then + for _, shaderData in ipairs(ServerData.shaders) do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId(shaderData[2]) + + button.outfit:setOutfit({ + type = tempOutfit.type, + addons = tempOutfit.addons + + }) + button.outfit:getCreature():setShader(shaderData[2]) + + button.name:setText(shaderData[2]) + + if tempOutfit.shaders == shaderData[2] then - colorBox.onCheckChange = onColorCheckChange - colorBoxes[#colorBoxes + 1] = colorBox + focused = shaderData[2] end end + end + if focused ~= nil then + local w = window.selectionList[focused] + w:focus() + window.selectionList:ensureChildVisible(w, { + x = 0, + y = 196 + }) + end - currentOutfit = 1 - currentMount = 1 + window.selectionList.onChildFocusChange = onShaderSelect + window.selectionList:show() + window.selectionScroll:show() + window.listSearch:show() +end - if outfit then - for i = 1, #outfitList do - if outfitList[i][1] == outfit.type then - currentOutfit = i - break - end +function showHealthBars() + window.presetsList:hide() + window.presetsScroll:hide() + window.presetButtons:hide() + + window.selectionList.onChildFocusChange = nil + window.selectionList:destroyChildren() + + local focused = nil + do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId("0") + + button.outfit:hide() + button.name:setText("None") + if tempOutfit.healthBar == 0 then + focused = 0 + end + end + if ServerData.healthBars and #ServerData.healthBars > 0 then + for _, barData in ipairs(ServerData.healthBars) do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId(barData) + + local Category = modules.game_attachedeffects.getCategory(barData) + if Category == 5 then + button.outfit:setImageSource(modules.game_attachedeffects.getTexture(barData)) + button.outfit:setWidth(64) + button.outfit:setHeight(32) + else + button.outfit:setOutfit(previewCreature:getCreature():getOutfit()) + button.outfit:getCreature():attachEffect(g_attachedEffects.getById(barData)) end - if mount ~= nil then - for i = 1, #mountList do - if mountList[i][1] == mount.type then - currentMount = i - break - end - end + button.bar:show() + + button.name:setText(barData) + if tempOutfit.healthBar == barData then + focused = barData end end + end + if focused ~= nil then + local w = window.selectionList[focused] + w:focus() + window.selectionList:ensureChildVisible(w, { + x = 0, + y = 196 + }) + end + + window.selectionList.onChildFocusChange = onHealthBarSelect + window.selectionList:show() + window.selectionScroll:show() + window.listSearch:show() +end + +function showTitle() + window.presetsList:hide() + window.presetsScroll:hide() + window.presetButtons:hide() + + window.selectionList.onChildFocusChange = nil + window.selectionList:destroyChildren() + + local focused = nil + do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId("0") - localPlayerEvent:execute('onOutfitChange') + button.outfit:setOutfit({ + type = 0 + }) + button.name:setText("None") + if tempOutfit.tile == 0 then + focused = 0 + end end -}) + if ServerData.title and #ServerData.title > 0 then + for _, titleData in ipairs(ServerData.title) do + local button = g_ui.createWidget("SelectionButton", window.selectionList) + button:setId(tostring(titleData)) -function destroy() - if not outfitWindow then - return + button.outfit:setOutfit(previewCreature:getCreature():getOutfit()) + button.outfit:getCreature():getCreature():setTitle(titleData, "verdana-11px-rounded", "#0000ff") + + button.name:setText(tostring(titleData)) + if tempOutfit.tile == titleData then + focused = tostring(titleData) + end + end + end + if focused ~= nil then + local w = window.selectionList[focused] + w:focus() + window.selectionList:ensureChildVisible(w, { + x = 0, + y = 196 + }) end - outfitWindow:destroy() - localPlayerEvent:disconnect() + window.selectionList.onChildFocusChange = onTitleSelect + window.selectionList:show() + window.selectionScroll:show() + window.listSearch:show() +end + +function onPresetSelect(list, focusedChild, unfocusedChild, reason) + + if focusedChild then + + local presetId = tonumber(focusedChild:getId()) + local preset = settings.presets[presetId] + tempOutfit = table.copy(preset.outfit) + + for _, outfitData in ipairs(ServerData.outfits) do + if tempOutfit.type == outfitData[1] then + configureAddons(outfitData[3]) + break + end + end + + if g_game.getFeature(GamePlayerMounts) then + window.configure.mount.check:setChecked(preset.mounted and tempOutfit.mount > 0) + end + + settings.currentPreset = presetId + + updatePreview() + + updateAppearanceTexts(tempOutfit) + + updateAppearanceText("preset", preset.title) + updateAppearanceText("aura", modules.game_attachedeffects.getName(preset.auras)) + updateAppearanceText("wings", modules.game_attachedeffects.getName(preset.wings)) + updateAppearanceText("shader", preset.shaders or "Outfit - Default") + updateAppearanceText("effects", modules.game_attachedeffects.getName(preset.effects)) - outfitWindow = nil - outfitCreature = nil - currentColorBox = nil - currentClotheButtonBox = nil + previewCreature:getCreature():clearAttachedEffects() - colorBoxes = {} - addons = {} + if settings.effects and preset.effects then + attachEffectIfValid(previewCreature, preset.effects) + end + + if settings.showWings and preset.wings then + attachEffectIfValid(previewCreature, preset.wings) + end + + if settings.showAura and preset.auras then + attachEffectIfValid(previewCreature, preset.auras) + end + + if not settings.showShader or preset.shaders == "None" then + previewCreature:getCreature():setShader("Outfit - Default") + else + previewCreature:getCreature():setShader(preset.shaders) + end + + tempOutfit.wings = preset.wings + tempOutfit.auras = preset.auras + tempOutfit.shaders = preset.shaders + tempOutfit.effects = preset.effects + lastSelectAura = preset.auras + lastSelectWings = preset.wings + lastSelectEffects = preset.effects + lastSelectShader = preset.shaders + + end end -function randomize() - local outfitTemplate = { outfitWindow:getChildById('detail'), outfitWindow:getChildById('secondary'), - outfitWindow:getChildById('primary'), outfitWindow:getChildById('head') } +function onOutfitSelect(list, focusedChild, unfocusedChild, reason) + if focusedChild then + local outfitType = tonumber(focusedChild:getId()) + local outfit = focusedChild.outfit:getCreature():getOutfit() + tempOutfit.type = outfit.type + tempOutfit.addons = outfit.addons - for i, template in pairs(outfitTemplate) do - template:setChecked(true) - colorBoxes[math.random(1, #colorBoxes)]:setChecked(true) - template:setChecked(false) + deselectPreset() + + configureAddons(outfit.addons) + + if showOutfitCheck:isChecked() then + updatePreview() + end + updateAppearanceText("outfit", focusedChild.name:getText()) end end -function accept() - if mount then - outfit.mount = mount.type +function onMountSelect(list, focusedChild, unfocusedChild, reason) + if focusedChild then + local mountType = tonumber(focusedChild:getId()) + tempOutfit.mount = mountType + + deselectPreset() + + if showMountCheck:isChecked() then + updatePreview() + end + + window.configure.mount.check:setEnabled(tempOutfit.mount > 0) + window.configure.mount.check:setChecked(g_game.getLocalPlayer():isMounted() and tempOutfit.mount > 0) + + updateAppearanceText("mount", focusedChild.name:getText()) end - g_game.changeOutfit(outfit) - destroy() end -function nextOutfitType() - if not outfits then - return +function onAuraSelect(list, focusedChild, unfocusedChild, reason) + local auraName = window.appearance.settings["aura"].name:getText() + if auraName ~= "None" then + local auraId = tonumber(lastSelectAura) + if auraId then + previewCreature:getCreature():detachEffectById(auraId) + end + end + if focusedChild then + local auraType = tonumber(focusedChild:getId()) + + if checkPresetsValidity({auraType}) then + previewCreature:getCreature():attachEffect(g_attachedEffects.getById(auraType)) + lastSelectAura = auraType + tempOutfit.auras = auraType + updatePreview() + deselectPreset() + updateAppearanceText("aura", modules.game_attachedeffects.getName(auraType)) + else + lastSelectAura = "None" + tempOutfit.auras = 0 + updateAppearanceText("aura", "None") + end end +end - currentOutfit = currentOutfit + 1 - if currentOutfit > #outfits then - currentOutfit = 1 +function onWingsSelect(list, focusedChild, unfocusedChild, reason) + local wingsName = window.appearance.settings["wings"].name:getText() + if wingsName ~= "None" then + local wingsId = tonumber(lastSelectWings) + if wingsId then + previewCreature:getCreature():detachEffectById(wingsId) + end end - localPlayerEvent:execute('onOutfitChange') + if focusedChild then + local wingsType = tonumber(focusedChild:getId()) + + if checkPresetsValidity({wingsType}) then + + previewCreature:getCreature():attachEffect(g_attachedEffects.getById(wingsType)) + lastSelectWings = wingsType + tempOutfit.wings = wingsType + updatePreview() + deselectPreset() + updateAppearanceText("wings", modules.game_attachedeffects.getName(wingsType)) + else + lastSelectWings = "None" + tempOutfit.wings = 0 + updateAppearanceText("wings", "None") + end + end end -function previousOutfitType() - if not outfits then - return +function onShaderSelect(list, focusedChild, unfocusedChild, reason) + if focusedChild then + local shaderType = focusedChild:getId() + if shaderType ~= "None" then + previewCreature:getCreature():setShader(shaderType) + lastSelectShader = shaderType + tempOutfit.shaders = shaderType + else + previewCreature:getCreature():setShader("Outfit - Default") + lastSelectShader = "Outfit - Default" + tempOutfit.shaders = "Outfit - Default" + end + + updatePreview() + + deselectPreset() + + updateAppearanceText("shader", focusedChild.name:getText()) end +end - currentOutfit = currentOutfit - 1 - if currentOutfit <= 0 then - currentOutfit = #outfits +function onHealthBarSelect(list, focusedChild, unfocusedChild, reason) + if window.appearance.settings["healthBar"].name:getText() ~= "None" then + previewCreature:getCreature():detachEffectById(tonumber(window.appearance.settings["healthBar"].name:getText())) end + if focusedChild then + local barType = tonumber(focusedChild:getId()) + tempOutfit.healthBar = barType + updatePreview() + if barType > 0 then + previewCreature:getCreature():attachEffect(g_attachedEffects.getById(barType)) + end + + deselectPreset() - localPlayerEvent:execute('onOutfitChange') + updateAppearanceText("healthBar", focusedChild.name:getText()) + end end -function nextMountType() - if not mounts then - return +function onEffectBarSelect(list, focusedChild, unfocusedChild, reason) + local effectName = window.appearance.settings["effects"].name:getText() + if effectName ~= "None" then + local effectId = tonumber(lastSelectEffects) + if effectId then + previewCreature:getCreature():detachEffectById(effectId) + end end - currentMount = currentMount + 1 - if currentMount > #mounts then - currentMount = 1 + if focusedChild then + local effect_id = tonumber(focusedChild:getId()) + + if checkPresetsValidity({effect_id}) then + previewCreature:getCreature():attachEffect(g_attachedEffects.getById(effect_id)) + lastSelectEffects = effect_id + tempOutfit.effects = effect_id + updatePreview() + deselectPreset() + updateAppearanceText("effects", modules.game_attachedeffects.getName(effect_id)) + else + updateAppearanceText("effects", "None") + lastSelectEffects = "None" + tempOutfit.effects = 0 + end end - localPlayerEvent:execute('onOutfitChange') end -function previousMountType() - if not mounts then - return +function onTitleSelect(list, focusedChild, unfocusedChild, reason) + if window.appearance.settings["title"].name:getText() ~= "None" then + previewCreature:getCreature():clearTitle() end - currentMount = currentMount - 1 - if currentMount <= 0 then - currentMount = #mounts + if focusedChild then + local titleType = tostring(focusedChild:getId()) + + if titleType ~= "None" then + previewCreature:getCreature():setTitle(titleType, "verdana-11px-rounded", "#0000ff") + lastSelectTitle = titleType + else + lastSelectTitle = "None" + previewCreature:getCreature():clearTitle() + end + + updatePreview() + deselectPreset() + updateAppearanceText("title", focusedChild.name:getText()) end +end - localPlayerEvent:execute('onOutfitChange') +function updateAppearanceText(widget, text) + if window.appearance.settings[widget] then + window.appearance.settings[widget].name:setText(text) + end end -function onAddonCheckChange(addon, value) - if addon:isChecked() then - outfit.addons = outfit.addons + value - else - outfit.addons = outfit.addons - value +function updateAppearanceTexts(outfit) + for _, appKey in ipairs(AppearanceData) do + updateAppearanceText(appKey, "None") + end + + for key, value in pairs(outfit) do + local newKey = key + local appKey = key + if key == "type" then + newKey = "outfits" + appKey = "outfit" + end + local dataTable = ServerData[newKey] + if dataTable then + for _, data in ipairs(dataTable) do + if outfit[key] == data[1] or outfit[key] == data[2] then + if appKey and data[2] then + updateAppearanceText(appKey, data[2]) + end + end + end + end end +end + +function deselectPreset() + settings.currentPreset = 0 +end + +function onAddonChange(widget, checked) + local addonId = widget:getParent():getId() - outfitCreature:setOutfit(outfit) + local addons = tempOutfit.addons + if addonId == "addon1" then + addons = checked and addons + 1 or addons - 1 + elseif addonId == "addon2" then + addons = checked and addons + 2 or addons - 2 + end + + settings.currentPreset = 0 + + tempOutfit.addons = addons + updatePreview() + if appearanceGroup:getSelectedWidget() == window.appearance.settings.outfit.check then + showOutfits() + end +end + +function onColorModeChange(widget, selectedWidget) + local colorMode = selectedWidget:getId() + if colorMode == "head" then + colorBoxGroup:selectWidget(window.appearance.colorBoxPanel["colorBox" .. tempOutfit.head]) + elseif colorMode == "primary" then + colorBoxGroup:selectWidget(window.appearance.colorBoxPanel["colorBox" .. tempOutfit.body]) + elseif colorMode == "secondary" then + colorBoxGroup:selectWidget(window.appearance.colorBoxPanel["colorBox" .. tempOutfit.legs]) + elseif colorMode == "detail" then + colorBoxGroup:selectWidget(window.appearance.colorBoxPanel["colorBox" .. tempOutfit.feet]) + end +end + +function onColorCheckChange(widget, selectedWidget) + local colorId = selectedWidget.colorId + local colorMode = colorModeGroup:getSelectedWidget():getId() + if colorMode == "head" then + tempOutfit.head = colorId + elseif colorMode == "primary" then + tempOutfit.body = colorId + elseif colorMode == "secondary" then + tempOutfit.legs = colorId + elseif colorMode == "detail" then + tempOutfit.feet = colorId + end + + updatePreview() + + if appearanceGroup:getSelectedWidget() == window.appearance.settings.outfit.check then + showOutfits() + end end -function onColorCheckChange(colorBox) - if colorBox == currentColorBox then - colorBox.onCheckChange = nil - colorBox:setChecked(true) - colorBox.onCheckChange = onColorCheckChange +function updatePreview() + local direction = previewCreature:getDirection() + + --[[ + without c++ + g_lua.bindClassMemberFunction("getDirection", &UICreature::getDirection); + + local direction = previewCreature:getCreature():getDirection() -> Not work + local direction= previewCreature:getDirection() ->not work + print(g_game.getLocalPlayer():getCreature():getDirection()) -> + + ]] + + local previewOutfit = table.copy(tempOutfit) + + if not settings.showOutfit then + previewCreature:hide() + else + previewCreature:show() + end + + if not settings.showMount then + previewOutfit.mount = 0 + end + + if settings.showAura then + attachOrDetachEffect(lastSelectAura, true) else - currentColorBox.onCheckChange = nil - currentColorBox:setChecked(false) - currentColorBox.onCheckChange = onColorCheckChange + attachOrDetachEffect(lastSelectAura, false) + end - currentColorBox = colorBox + if settings.showWings then + attachOrDetachEffect(lastSelectWings, true) + else + attachOrDetachEffect(lastSelectWings, false) + end - if currentClotheButtonBox:getId() == 'head' then - outfit.head = currentColorBox.colorId - elseif currentClotheButtonBox:getId() == 'primary' then - outfit.body = currentColorBox.colorId - elseif currentClotheButtonBox:getId() == 'secondary' then - outfit.legs = currentColorBox.colorId - elseif currentClotheButtonBox:getId() == 'detail' then - outfit.feet = currentColorBox.colorId + if settings.effects then + attachOrDetachEffect(lastSelectEffects, true) + else + attachOrDetachEffect(lastSelectEffects, false) + end + + if not settings.showShader then + if previewCreature and lastSelectShader and lastSelectShader ~= "Outfit - Default" then + local creature = previewCreature:getCreature() + if creature then + creature:setShader("Outfit - Default") + end + end + else + if previewCreature and lastSelectShader and lastSelectShader ~= "Outfit - Default" then + local creature = previewCreature:getCreature() + if creature then + creature:setShader(lastSelectShader) + end + end + end + + if not settings.showBars then + previewOutfit.healthBar = 0 + window.preview.panel.bars:hide() + else + if g_game.getFeature(GamePlayerMounts) and settings.showMount and previewOutfit.mount > 0 then + window.preview.panel.bars:setMarginTop(45) + window.preview.panel.bars:setMarginLeft(25) + else + window.preview.panel.bars:setMarginTop(60) + window.preview.panel.bars:setMarginLeft(15) + end + local name = g_game.getCharacterName() + window.preview.panel.bars.name:setText(name) + if name:find("g") or name:find("j") or name:find("p") or name:find("q") or name:find("y") then + window.preview.panel.bars.name:setHeight(14) + else + window.preview.panel.bars.name:setHeight(11) end + window.preview.panel.bars.name:setMarginLeft(-43) - outfitCreature:setOutfit(outfit) + local healthBar = window.preview.panel.bars.healthBar + local manaBar = window.preview.panel.bars.manaBar + manaBar:setMarginTop(0) + healthBar:setMarginTop(1) + healthBar.image:setMargin(0) + healthBar.image:hide() + manaBar.image:setMargin(0) + manaBar.image:hide(0) + + window.preview.panel.bars:show() + end + + previewCreature:setOutfit(previewOutfit) + previewCreature:getCreature():setDirection(direction) + +end + +function rotate(value) + local direction = previewCreature:getDirection() + + direction = direction + value + + if direction > Directions.West then + direction = Directions.North + elseif direction < Directions.North then + direction = Directions.West end + + previewCreature:getCreature():setDirection(direction) + + floor:setMargin(0) end -function onClotheCheckChange(clotheButtonBox) - if clotheButtonBox == currentClotheButtonBox then - clotheButtonBox.onCheckChange = nil - clotheButtonBox:setChecked(true) - clotheButtonBox.onCheckChange = onClotheCheckChange +function onFilterSearch() + addEvent(function() + local searchText = window.listSearch.search:getText():lower():trim() + local children = window.selectionList:getChildren() + if searchText:len() >= 1 then + for _, child in ipairs(children) do + local text = child.name:getText():lower() + if text:find(searchText) then + child:show() + else + child:hide() + end + end + else + for _, child in ipairs(children) do + child:show() + end + end + end) +end + +function saveSettings() + if not g_resources.fileExists(settingsFile) then + g_resources.makeDir("/settings") + g_resources.writeFileContents(settingsFile, "[]") + end + + local fullSettings = {} + do + local json_status, json_data = pcall(function() + return json.decode(g_resources.readFileContents(settingsFile)) + end) + + if not json_status then + g_logger.error("[saveSettings] Couldn't load JSON: " .. json_data) + return + end + fullSettings = json_data + end + + fullSettings[g_game.getCharacterName()] = settings + + local json_status, json_data = pcall(function() + return json.encode(fullSettings) + end) + + if not json_status then + g_logger.error("[saveSettings] Couldn't save JSON: " .. json_data) + return + end + + g_resources.writeFileContents(settingsFile, json.encode(fullSettings)) +end + +function loadSettings() + if not g_resources.fileExists(settingsFile) then + g_resources.makeDir("/settings") + end + + if g_resources.fileExists(settingsFile) then + local json_status, json_data = pcall(function() + return json.decode(g_resources.readFileContents(settingsFile)) + end) + + if not json_status then + g_logger.error("[loadSettings] Couldn't load JSON: " .. json_data) + return + end + + settings = json_data[g_game.getCharacterName()] + if not settings then + loadDefaultSettings() + end else - currentClotheButtonBox.onCheckChange = nil - currentClotheButtonBox:setChecked(false) - currentClotheButtonBox.onCheckChange = onClotheCheckChange + loadDefaultSettings() + end +end - currentClotheButtonBox = clotheButtonBox +function loadDefaultSettings() + settings = { + movement = true, + showFloor = true, + showOutfit = true, + showMount = true, + showWings = true, + showAura = true, + showShader = true, + showBars = true, + showTitle = true, + showEffects = true, + presets = {}, + currentPreset = 0 + } + settings.currentPreset = 0 +end + +function sendAction(action, data) + local protocolGame = g_game.getProtocolGame() + + if data == nil then + data = {} + end - local colorId = 0 - if currentClotheButtonBox:getId() == 'head' then - colorId = outfit.head - elseif currentClotheButtonBox:getId() == 'primary' then - colorId = outfit.body - elseif currentClotheButtonBox:getId() == 'secondary' then - colorId = outfit.legs - elseif currentClotheButtonBox:getId() == 'detail' then - colorId = outfit.feet + if protocolGame then + protocolGame.sendExtendedJSONOpcode(protocolGame, opcodeSystem.id, { + action = action, + data = data + }) + end + + return +end + +function accept() + if g_game.getFeature(GamePlayerMounts) then + local player = g_game.getLocalPlayer() + local isMountedChecked = window.configure.mount.check:isChecked() + if not player:isMounted() and isMountedChecked then + player:mount() + elseif player:isMounted() and not isMountedChecked then + player:dismount() + end + if settings.currentPreset > 0 then + settings.presets[settings.currentPreset].mounted = isMountedChecked end - outfitWindow:recursiveGetChildById('colorBox' .. colorId):setChecked(true) end + + g_game.changeOutfit(tempOutfit) + if opcodeSystem.enable then + sendAction("changeOutfit", { + wingsName = lastSelectWings, + auraName = lastSelectAura, + shaderName = lastSelectShader, + titleName = lastSelectTitle, + EffectName = lastSelectEffects + }) + end + destroy() end diff --git a/modules/game_outfit/outfit.otmod b/modules/game_outfit/outfit.otmod index b253e76c38..d50da3db13 100644 --- a/modules/game_outfit/outfit.otmod +++ b/modules/game_outfit/outfit.otmod @@ -1,9 +1,9 @@ Module name: game_outfit description: Change local player outfit - author: baxnie, edubart - website: https://github.com/edubart/otclient + author: Oen44 + website: https://discord.gg/DUkqbedmgP sandboxed: true scripts: [ outfit ] - @onLoad: controller:init() - @onUnload: controller:terminate() + @onLoad: init() + @onUnload: terminate() \ No newline at end of file diff --git a/modules/game_outfit/outfitwindow.otui b/modules/game_outfit/outfitwindow.otui index 92eb7f7a50..0c0850a80d 100644 --- a/modules/game_outfit/outfitwindow.otui +++ b/modules/game_outfit/outfitwindow.otui @@ -1,191 +1,7 @@ -NextOutfitButton < NextButton -PrevOutfitButton < PreviousButton -NextMountButton < NextButton -PrevMountButton < PreviousButton +FloorTile < UIWidget + image-source: /images/ui/outfits/floor + size: 32 32 + phantom: true -MainWindow - !text: tr('Select Outfit') - size: 338 375 +OutfitWindow - @onEnter: modules.game_outfit.accept() - @onEscape: modules.game_outfit.destroy() - - // Creature Boxes - Creature - id: outfitCreatureBox - anchors.top: parent.top - anchors.left: parent.left - margin-top: 15 - margin-left: 22 - padding: 4 4 4 4 - creature-size: 80 - - Label - id: outfitName - !text: tr('No Outfit') - width: 115 - anchors.bottom: prev.top - anchors.left: prev.left - margin-bottom: 2 - - NextOutfitButton - id: outfitNextButton - anchors.left: outfitCreatureBox.right - anchors.verticalCenter: outfitCreatureBox.verticalCenter - margin-left: 3 - enabled: true - @onClick: modules.game_outfit.nextOutfitType() - - PrevOutfitButton - id: outfitPrevButton - anchors.right: outfitCreatureBox.left - anchors.verticalCenter: outfitCreatureBox.verticalCenter - margin-right: 3 - enabled: true - @onClick: modules.game_outfit.previousOutfitType() - - Creature - id: mountCreatureBox - anchors.top: parent.top - anchors.right: parent.right - margin-top: 15 - margin-right: 22 - padding: 4 4 4 4 - creature-size: 80 - - Label - id: mountName - !text: tr('No Mount') - width: 115 - anchors.bottom: prev.top - anchors.left: prev.left - margin-bottom: 2 - - NextMountButton - id: mountNextButton - anchors.left: mountCreatureBox.right - anchors.verticalCenter: mountCreatureBox.verticalCenter - margin-left: 3 - enabled: true - @onClick: modules.game_outfit.nextMountType() - - PrevMountButton - id: mountPrevButton - anchors.right: mountCreatureBox.left - anchors.verticalCenter: mountCreatureBox.verticalCenter - margin-right: 3 - enabled: true - @onClick: modules.game_outfit.previousMountType() - - // Addon Check Boxes - - CheckBox - id: addon1 - !text: tr('Addon 1') - width: 80 - anchors.top: outfitCreatureBox.bottom - anchors.left: parent.left - margin-top: 6 - margin-left: 2 - enabled: false - - CheckBox - id: addon2 - !text: tr('Addon 2') - width: 80 - anchors.top: prev.top - anchors.left: prev.right - enabled: false - - CheckBox - id: addon3 - !text: tr('Addon 3') - width: 80 - anchors.top: prev.top - anchors.left: prev.right - enabled: false - - // Body Selection Buttons - - ButtonBox - id: head - !text: tr('Head') - anchors.top: addon1.bottom - anchors.left: addon1.left - margin-top: 5 - checked: true - width: 76 - - ButtonBox - id: primary - !text: tr('Primary') - anchors.top: prev.top - anchors.left: prev.right - width: 76 - - ButtonBox - id: secondary - !text: tr('Secondary') - anchors.top: prev.top - anchors.left: prev.right - width: 76 - - ButtonBox - id: detail - !text: tr('Detail') - anchors.top: prev.top - anchors.left: prev.right - width: 76 - - // Color Panel - - Panel - id: colorBoxPanel - anchors.top: head.bottom - anchors.left: head.left - margin-top: 3 - margin-right: 20 - width: 302 - height: 119 - layout: - type: grid - cell-size: 14 14 - cell-spacing: 2 - num-columns: 19 - num-lines: 7 - - // Action Button Section - - Button - id: randomizeButton - !text: tr('Randomize') - !tooltip: tr('Randomize characters outfit') - width: 75 - anchors.left: prev.left - anchors.top: prev.bottom - margin-right: 16 - @onClick: modules.game_outfit.randomize() - - HorizontalSeparator - anchors.left: parent.left - anchors.right: parent.right - anchors.bottom: next.top - margin-bottom: 10 - margin-top: 5 - - Button - id: outfitOkButton - !text: tr('Ok') - width: 64 - anchors.right: next.left - anchors.bottom: parent.bottom - margin-right: 16 - @onClick: modules.game_outfit.accept() - - Button - id: outfitCancelButton - !text: tr('Cancel') - width: 64 - anchors.right: parent.right - anchors.bottom: parent.bottom - @onClick: modules.game_outfit.destroy() diff --git a/modules/game_outfit/serverSIDE/if c++ (protocol)/not yet.txt b/modules/game_outfit/serverSIDE/if c++ (protocol)/not yet.txt new file mode 100644 index 0000000000..455d0ef5dd --- /dev/null +++ b/modules/game_outfit/serverSIDE/if c++ (protocol)/not yet.txt @@ -0,0 +1,8 @@ +Tfs 1.5: +https://github.com/kokekanon/forgottenserver-downgrade/pull/2 +https://github.com/kokekanon/forgottenserver-downgrade/pull/7 +https://github.com/kokekanon/forgottenserver-downgrade/pull/9 + +Tfs 1.4.2: + +canary: diff --git a/modules/game_outfit/serverSIDE/if lua (opcode)/not yet.txt b/modules/game_outfit/serverSIDE/if lua (opcode)/not yet.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/modules/game_prey/prey.lua b/modules/game_prey/prey.lua index a14b411fa5..b7b230bcc6 100644 --- a/modules/game_prey/prey.lua +++ b/modules/game_prey/prey.lua @@ -163,12 +163,12 @@ end function check() if g_game.getFeature(GamePrey) then if not preyButton then - preyButton = modules.client_topmenu.addRightGameToggleButton('preyButton', tr('Prey Dialog'), - '/images/topbuttons/prey_window', toggle) + preyButton = modules.game_mainpanel.addToggleButton('preyButton', tr('Prey Dialog'), + '/images/options/button_preydialog', toggle) end if not preyTrackerButton then - preyTrackerButton = modules.client_topmenu.addRightGameToggleButton('preyTrackerButton', tr('Prey Tracker'), - '/images/topbuttons/prey', toggleTracker) + preyTrackerButton = modules.game_mainpanel.addToggleButton('preyTrackerButton', tr('Prey Tracker'), + '/images/options/button_prey', toggleTracker) end elseif preyButton then preyButton:destroy() @@ -180,6 +180,14 @@ function toggleTracker() if preyTracker:isVisible() then preyTracker:hide() else + if not preyTracker:getParent() then + local panel = modules.game_interface.findContentPanelAvailable(preyTracker, preyTracker:getMinimumHeight()) + if not panel then + return + end + + panel:addChild(preyTracker) + end preyTracker:show() end end diff --git a/modules/game_questlog/questlog.lua b/modules/game_questlog/questlog.lua index d94f7bdefa..7a8012f5c5 100644 --- a/modules/game_questlog/questlog.lua +++ b/modules/game_questlog/questlog.lua @@ -5,10 +5,10 @@ function init() g_ui.importStyle('questlogwindow') g_ui.importStyle('questlinewindow') - questLogButton = modules.client_topmenu.addLeftGameButton('questLogButton', tr('Quest Log'), - '/images/topbuttons/questlog', function() + questLogButton = modules.game_mainpanel.addToggleButton('questLogButton', tr('Quest Log'), + '/images/options/button_questlog', function() g_game.requestQuestLog() - end) + end, false, 1000) connect(g_game, { onQuestLog = onGameQuestLog, diff --git a/modules/game_shaders/shaders.lua b/modules/game_shaders/shaders.lua index 4f29159c39..ccbb71607f 100644 --- a/modules/game_shaders/shaders.lua +++ b/modules/game_shaders/shaders.lua @@ -145,6 +145,7 @@ function init() g_keyboard.bindKeyDown(HOTKEY, toggle) shadersPanel = g_ui.createWidget('ShadersPanel', modules.game_interface.getMapPanel()) + shadersPanel:setMarginTop(80) shadersPanel:hide() local mapComboBox = shadersPanel:getChildById('mapComboBox') diff --git a/modules/game_shop/serverSIDE/shopSERVER.lua b/modules/game_shop/serverSIDE/shopSERVER.lua new file mode 100644 index 0000000000..4580c4ee0a --- /dev/null +++ b/modules/game_shop/serverSIDE/shopSERVER.lua @@ -0,0 +1 @@ +--not yet \ No newline at end of file diff --git a/modules/game_shop/shop.lua b/modules/game_shop/shop.lua new file mode 100644 index 0000000000..58fb75e0c3 --- /dev/null +++ b/modules/game_shop/shop.lua @@ -0,0 +1,677 @@ +-- private variables +local SHOP_EXTENTED_OPCODE = 201 + +shop = nil +transferWindow = nil +local otcv8shop = false +local shopButton = nil +local msgWindow = nil +local browsingHistory = false +local transferValue = 0 + +-- for classic store +local storeUrl = "" +local coinsPacketSize = 0 + +local CATEGORIES = {} +local HISTORY = {} +local STATUS = {} +local AD = {} + +local selectedOffer = {} + +local function sendAction(action, data) + + local protocolGame = g_game.getProtocolGame() + if data == nil then + data = {} + end + if protocolGame then + protocolGame:sendExtendedJSONOpcode(SHOP_EXTENTED_OPCODE, { + action = action, + data = data + }) + end +end + +-- public functions +function init() + connect(g_game, { + onGameStart = check, + onGameEnd = hide + + }) + + ProtocolGame.registerExtendedJSONOpcode(SHOP_EXTENTED_OPCODE, onExtendedJSONOpcode) + + if g_game.isOnline() then + check() + end + createShop() + createTransferWindow() +end + +function terminate() + disconnect(g_game, { + onGameStart = check, + onGameEnd = hide + + }) + + ProtocolGame.unregisterExtendedJSONOpcode(SHOP_EXTENTED_OPCODE, onExtendedJSONOpcode) + + if shopButton then + shopButton:destroy() + shopButton = nil + end + if shop then + disconnect(shop.categories, { + onChildFocusChange = changeCategory + }) + shop:destroy() + shop = nil + end + if msgWindow then + msgWindow:destroy() + end +end + +function check() + otcv8shop = false + sendAction("init") +end + +function hide() + if not shop then + return + end + shop:hide() +end + +function show() + if not shop or not shopButton then + return + end + + shop:show() + shop:raise() + shop:focus() +end + +function softHide() + if not transferWindow then + return + end + + transferWindow:hide() + shop:show() +end + +function showTransfer() + if not shop or not transferWindow then + return + end + + hide() + transferWindow:show() + transferWindow:raise() + transferWindow:focus() +end + +function hideTransfer() + if not shop or not transferWindow then + return + end + + transferWindow:hide() + show() +end + +function toggle() + if not shop then + return + end + if shop:isVisible() then + return hide() + end + show() + check() +end + +function createShop() + if shop then + return + end + shop = g_ui.displayUI('shop') + shop:hide() + shopButton = modules.game_mainpanel.addStoreButton('store', tr('Shop'), '/images/options/store_large', toggle, + false, 8) + + + connect(shop.categories, { + onChildFocusChange = changeCategory + }) + +end + +function createTransferWindow() + if transferWindow then + return + end + transferWindow = g_ui.displayUI('transfer') + transferWindow:hide() +end + +function onStoreInit(url, coins) + if otcv8shop then + return + end + storeUrl = url + if storeUrl:len() > 0 then + if storeUrl:sub(storeUrl:len(), storeUrl:len()) ~= "/" then + storeUrl = storeUrl .. "/" + end + storeUrl = storeUrl .. "64/" + if storeUrl:sub(1, 4):lower() ~= "http" then + storeUrl = "http://" .. storeUrl + end + end + coinsPacketSize = coins + createShop() + createTransferWindow() +end + +function onStoreCategories(categories) + if not shop or otcv8shop then + return + end + local correctCategories = {} + for i, category in ipairs(categories) do + local image = "" + if category.icon:len() > 0 then + image = storeUrl .. category.icon + end + table.insert(correctCategories, { + type = "image", + image = image, + name = category.name, + offers = {} + }) + end + processCategories(correctCategories) +end + +function onStoreOffers(categoryName, offers) + if not shop or otcv8shop then + return + end + local updated = false + + for i, category in ipairs(CATEGORIES) do + if category.name == categoryName then + if #category.offers ~= #offers then + updated = true + end + for i = 1, #category.offers do + if category.offers[i].title ~= offers[i].name or category.offers[i].id ~= offers[i].id or + category.offers[i].cost ~= offers[i].price then + updated = true + end + end + if updated then + for offer in pairs(category.offers) do + category.offers[offer] = nil + end + for i, offer in ipairs(offers) do + local image = "" + if offer.icon:len() > 0 then + image = storeUrl .. offer.icon + end + table.insert(category.offers, { + id = offer.id, + type = "image", + image = image, + cost = offer.price, + title = offer.name, + description = offer.description + }) + end + end + end + end + if not updated then + return + end + + local activeCategory = shop.categories:getFocusedChild() + changeCategory(activeCategory, activeCategory) +end + +function onStoreTransactionHistory(currentPage, hasNextPage, offers) + if not shop or otcv8shop then + return + end + HISTORY = {} + for i, offer in ipairs(offers) do + table.insert(HISTORY, { + id = offer.id, + type = "image", + image = storeUrl .. offer.icon, + cost = offer.price, + title = offer.name, + description = offer.description + }) + end + + if not browsingHistory then + return + end + clearOffers() + shop.categories:focusChild(nil) + for i, transaction in ipairs(HISTORY) do + addOffer(0, transaction) + end +end + +function onStorePurchase(message) + if not shop or otcv8shop then + return + end + if not transferWindow:isVisible() then + processMessage({ + title = "Successful shop purchase", + msg = message + }) + else + processMessage({ + title = "Successfuly gifted coins", + msg = message + }) + softHide() + end +end + +function onStoreError(errorType, message) + if not shop or otcv8shop then + return + end + if not transferWindow:isVisible() then + processMessage({ + title = "Shop Error", + msg = message + }) + else + processMessage({ + title = "Gift coins error", + msg = message + }) + end +end + +function onCoinBalance(coins, transferableCoins) + if not shop or otcv8shop then + return + end + shop.infoPanel.points:setText(tr("Points:") .. " " .. coins) + transferWindow.coinsBalance:setText(tr('Transferable Tibia Coins: ') .. coins) + transferWindow.coinsAmount:setMaximum(coins) + shop.infoPanel.buy:hide() + shop.infoPanel:setHeight(20) +end + +function transferCoins() + if not transferWindow then + return + end + local amount = 0 + amount = transferWindow.coinsAmount:getValue() + local recipient = transferWindow.recipient:getText() + + g_game.transferCoins(recipient, amount) + transferWindow.recipient:setText('') + transferWindow.coinsAmount:setValue(0) +end + +function onExtendedJSONOpcode(protocol, code, json_data) + createShop() + createTransferWindow() + + local action = json_data['action'] + local data = json_data['data'] + local status = json_data['status'] + if not action or not data then + return false + end + + otcv8shop = true + if action == 'categories' then + processCategories(data) + elseif action == 'history' then + processHistory(data) + elseif action == 'message' then + processMessage(data) + end + + if status then + processStatus(status) + end +end + +function clearOffers() + while shop.offers:getChildCount() > 0 do + local child = shop.offers:getLastChild() + shop.offers:destroyChildren(child) + end +end + +function clearCategories() + CATEGORIES = {} + clearOffers() + while shop.categories:getChildCount() > 0 do + local child = shop.categories:getLastChild() + shop.categories:destroyChildren(child) + end +end + +function clearHistory() + HISTORY = {} + if browsingHistory then + clearOffers() + end +end + +function processCategories(data) + if table.equal(CATEGORIES, data) then + return + end + clearCategories() + CATEGORIES = data + for i, category in ipairs(data) do + addCategory(category) + end + if not browsingHistory then + local firstCategory = shop.categories:getChildByIndex(1) + if firstCategory then + firstCategory:focus() + end + end +end + +function processHistory(data) + if table.equal(HISTORY, data) then + return + end + HISTORY = data + if browsingHistory then + showHistory(true) + end +end + +function processMessage(data) + if msgWindow then + msgWindow:destroy() + end + + local title = tr(data["title"]) + local msg = data["msg"] + msgWindow = displayInfoBox(title, msg) + msgWindow.onDestroy = function(widget) + if widget == msgWindow then + msgWindow = nil + end + end + msgWindow:show() + msgWindow:raise() + msgWindow:focus() +end +local function formatNumberWithCommas(value) + local formattedValue = string.format("%d", value) + -- Add commas to the formatted value + formattedValue = formattedValue:reverse():gsub("(%d%d%d)", "%1,") + return formattedValue:reverse():gsub("^,", "") +end + +function processStatus(data) + if table.equal(STATUS, data) then + return + end + STATUS = data + + if data['ad'] then + processAd(data['ad']) + end + if data['points'] then + shop.infoPanel.points:setText(tr("Points:") .. " " .. formatNumberWithCommas(data['points'])) + end + if data['buyUrl'] and data['buyUrl']:sub(1, 4):lower() == "http" then + shop.infoPanel.buy:show() + shop.infoPanel.buy.onMouseRelease = function() + scheduleEvent(function() + g_platform.openUrl(data['buyUrl']) + end, 50) + end + else + shop.infoPanel.buy:hide() + shop.infoPanel:setHeight(20) + end +end + +function processAd(data) + if table.equal(AD, data) then + return + end + AD = data + + if data['image'] then + + shop.adPanel:setHeight(shop.infoPanel:getHeight()) + shop.adPanel.ad:setText("") + shop.adPanel.ad:setImageSource(data['image']) + shop.adPanel.ad:setImageFixedRatio(true) + shop.adPanel.ad:setImageAutoResize(true) + shop.adPanel.ad:setHeight(shop.infoPanel:getHeight()) + + elseif data['text'] and data['text']:len() > 0 then + shop.adPanel:setHeight(shop.infoPanel:getHeight()) + shop.adPanel.ad:setText(data['text']) + shop.adPanel.ad:setHeight(shop.infoPanel:getHeight()) + else + shop.adPanel:setHeight(0) + end + if data['url'] and data['url']:sub(1, 4):lower() == "http" then + shop.adPanel.ad.onMouseRelease = function() + scheduleEvent(function() + g_platform.openUrl(data['url']) + end, 50) + end + else + shop.adPanel.ad.onMouseRelease = nil + end +end + +function addCategory(data) + + local category + if data["type"] == "item" then + category = g_ui.createWidget('ShopCategoryItem', shop.categories) + category.item:setItemId(data["item"]) + category.item:setItemCount(data["count"]) + -- category.item:setShowCount(false) + elseif data["type"] == "outfit" then + category = g_ui.createWidget('ShopCategoryCreature', shop.categories) + category.creature:setOutfit(data["outfit"]) + + elseif data["type"] == "shader" then + category = g_ui.createWidget('ShopCategoryCreature', shop.categories) + category.creature:setOutfit(g_game.getLocalPlayer():getOutfit()) + category.creature:getCreature():setShader(data["shader"]) + + elseif data["type"] == "image" then + category = g_ui.createWidget('ShopCategoryImage', shop.categories) + if data["image"] and data["image"]:sub(1, 4):lower() == "http" then + HTTP.downloadImage(data['image'], function(path, err) + if err then + g_logger.warning("HTTP error: " .. err .. " - " .. data["image"]) + return + end + category.image:setImageSource(path) + end) + else + category.image:setImageSource(data["image"]) + end + else + g_logger.error("Invalid shop category type: " .. tostring(data["type"])) + return + end + category:setId("category_" .. shop.categories:getChildCount()) + category.name:setText(data["name"]) +end + +function showHistory(force) + if browsingHistory and not force then + return + end + + sendAction("history") + + browsingHistory = true + clearOffers() + shop.categories:focusChild(nil) + for i, transaction in ipairs(HISTORY) do + addOffer(0, transaction) + end +end + +function addOffer(category, data) + local offer + if data["type"] == "item" then + offer = g_ui.createWidget('ShopOfferItem', shop.offers) + offer.item:setItemId(data["item"]) + offer.item:setItemCount(data["count"]) + -- offer.item:setShowCount(false) + + elseif data["type"] == "effect" then + + offer = g_ui.createWidget('ShopOfferCreature', shop.offers) + offer.creature:setOutfit(g_game.getLocalPlayer():getOutfit()) + offer.creature:getCreature():attachEffect(g_attachedEffects.getById(data["title"])) + + elseif data["type"] == "shader" then + + offer = g_ui.createWidget('ShopOfferCreature', shop.offers) + offer.creature:setOutfit(g_game.getLocalPlayer():getOutfit()) + offer.creature:getCreature():setShader(data["title"]) + + elseif data["type"] == "outfit" then + offer = g_ui.createWidget('ShopOfferCreature', shop.offers) + offer.creature:setOutfit(data["outfit"]) + if data["outfit"]["rotating"] then + -- offer.creature:setAutoRotating(true) + end + elseif data["type"] == "image" then + offer = g_ui.createWidget('ShopOfferImage', shop.offers) + if data["image"] and data["image"]:sub(1, 4):lower() == "http" then + HTTP.downloadImage(data['image'], function(path, err) + if err then + g_logger.warning("HTTP error: " .. err .. " - " .. data['image']) + return + end + if not offer.image then + return + end + offer.image:setImageSource(path) + end) + elseif data["image"] and data["image"]:len() > 1 then + offer.image:setImageSource(data["image"]) + end + else + g_logger.error("Invalid shop offer type: " .. tostring(data["type"])) + return + end + offer:setId("offer_" .. category .. "_" .. shop.offers:getChildCount()) + offer.title:setColoredText(data["title"] .. " {[" .. data["cost"] .. " points], #ff0000}") + offer.description:setText(data["description"]) + offer.offerId = data["id"] + if category ~= 0 then + offer.onDoubleClick = buyOffer + offer.buyButton.onClick = function() + buyOffer(offer) + end + else + offer.buyButton:hide() + end +end + +function changeCategory(widget, newCategory) + if not newCategory then + return + end + + browsingHistory = false + local id = tonumber(newCategory:getId():split("_")[2]) + clearOffers() + for i, offer in ipairs(CATEGORIES[id]["offers"]) do + addOffer(id, offer) + end +end + +function buyOffer(widget) + if not widget then + return + end + local split = widget:getId():split("_") + if #split ~= 3 then + return + end + local category = tonumber(split[2]) + local offer = tonumber(split[3]) + local item = CATEGORIES[category]["offers"][offer] + if not item then + return + end + + selectedOffer = { + category = category, + offer = offer, + title = item.title, + cost = item.cost, + id = widget.offerId + } + + scheduleEvent(function() + if msgWindow then + msgWindow:destroy() + end + + local title = tr("Buying from shop") + local msg = "Do you want to buy " .. item.title .. " for " .. item.cost .. " premium points?" + msgWindow = displayGeneralBox(title, msg, { + { + text = tr('Yes'), + callback = buyConfirmed + }, + { + text = tr('No'), + callback = buyCanceled + }, + anchor = AnchorHorizontalCenter + }, buyConfirmed, buyCanceled) + msgWindow:show() + msgWindow:raise() + msgWindow:focus() + msgWindow:raise() + end, 50) +end + +function buyConfirmed() + msgWindow:destroy() + msgWindow = nil + sendAction("buy", selectedOffer) + +end + +function buyCanceled() + msgWindow:destroy() + msgWindow = nil + selectedOffer = {} +end diff --git a/modules/game_shop/shop.otmod b/modules/game_shop/shop.otmod new file mode 100644 index 0000000000..eec111afbf --- /dev/null +++ b/modules/game_shop/shop.otmod @@ -0,0 +1,10 @@ +Module + name: game_shop + description: Game shop + author: otclient.ovh + website: http://otclient.ovh + sandboxed: true + scripts: [ shop ] + dependencies: [ client_topmenu ] + @onLoad: init() + @onUnload: terminate() diff --git a/modules/game_shop/shop.otui b/modules/game_shop/shop.otui new file mode 100644 index 0000000000..67a0d1fff9 --- /dev/null +++ b/modules/game_shop/shop.otui @@ -0,0 +1,246 @@ +ShopCategory < Panel + height: 36 + focusable: true + background: alpha + + $focus: + background: #99999999 + + Label + id: name + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + margin-left: 40 + text-align: left + color: white + font: verdana-11px-rounded + +ShopCategoryItem < ShopCategory + UIItem + id: item + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + margin-top: 2 + margin-bottom: 2 + margin-left: 2 + virtual: true + size: 32 32 + +ShopCategoryCreature < ShopCategory + UICreature + id: creature + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + margin-top: 2 + margin-bottom: 2 + margin-left: 2 + size: 32 32 + + +ShopCategoryImage < ShopCategory + Label + id: image + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + margin-top: 2 + margin-bottom: 2 + margin-left: 2 + size: 32 32 + + + +ShopOffer < Panel + height: 56 + background: alpha + + $focus: + background: #99999999 + + Label + id: title + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + margin-top: 4 + margin-left: 55 + text-align: topleft + color: white + font: verdana-11px-rounded + + Label + id: description + anchors.top: prev.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + margin-left: 55 + margin-right: 55 + text-align: topleft + text-auto-resize: true + text-wrap: true + color: white + font: verdana-11px-rounded + + Button + id: buyButton + text: BUY + height: 25 + anchors.verticalCenter: parent.verticalCenter + anchors.left: prev.right + anchors.right: parent.right + margin-right: 15 + text-align: center + +ShopOfferItem < ShopOffer + UIItem + id: item + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + margin-top: 4 + margin-bottom: 4 + margin-left: 2 + virtual: true + size: 48 48 + +ShopOfferCreature < ShopOffer + UICreature + id: creature + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + margin-top: 4 + margin-bottom: 4 + margin-left: 2 + size: 48 48 + +ShopOfferImage < ShopOffer + Label + id: image + anchors.top: parent.top + anchors.left: parent.left + anchors.bottom: parent.bottom + margin-top: 4 + margin-bottom: 4 + margin-left: 2 + size: 48 48 + +MainWindow + id: shopWindow + !text: tr('Shop') + size: 750 500 + @onEscape: modules.game_shop.hide() + $mobile: + size: 500 360 + + Panel + id: infoPanel + anchors.top: parent.top + anchors.left: parent.left + width: 230 + height: 60 + + Label + id: points + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + margin-top: 10 + text: - + text-auto-resize: true + + Button + id: buy + anchors.horizontalCenter: parent.horizontalCenter + width: 150 + anchors.top: prev.bottom + margin-top: 10 + visible: false + !text: tr("Buy points2") + + Panel + id: adPanel + anchors.top: parent.top + anchors.left: infoPanel.right + anchors.right: parent.right + margin-left: 10 + height: 0 + + Label + id: ad + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.bottom: parent.bottom + text-auto-resize: true + text-wrap: true + text-align: center + font: sans-bold-16px + + TextList + id: categories + vertical-scrollbar: categoriesScrollBar + anchors.top: infoPanel.bottom + anchors.left: infoPanel.left + anchors.right: infoPanel.right + anchors.bottom: transactionHistory.top + margin-top: 10 + margin-bottom: 10 + padding: 1 + focusable: false + + VerticalScrollBar + id: categoriesScrollBar + anchors.top: categories.top + anchors.bottom: categories.bottom + anchors.right: categories.right + step: 50 + pixels-scroll: true + + TextList + id: offers + vertical-scrollbar: offersScrollBar + anchors.top: adPanel.bottom + anchors.left: adPanel.left + anchors.right: adPanel.right + anchors.bottom: transactionHistory.top + margin-top: 10 + margin-bottom: 10 + padding: 1 + focusable: false + + VerticalScrollBar + id: offersScrollBar + anchors.top: offers.top + anchors.bottom: offers.bottom + anchors.right: offers.right + step: 50 + pixels-scroll: true + + Button + id: transactionHistory + !text: tr('Transaction history') + width: 128 + anchors.left: parent.left + anchors.bottom: parent.bottom + @onClick: modules.game_shop.showHistory() + + Label + id: transferOpen + !text: tr('by kondra (otclient@otclient.ovh)') + width: 450 + anchors.left: prev. right + margin-left: 45 + anchors.verticalCenter: prev.verticalCenter + + + Button + id: buttonCancel + !text: tr('Close') + width: 64 + anchors.right: parent.right + anchors.bottom: parent.bottom + @onClick: modules.game_shop.hide() \ No newline at end of file diff --git a/modules/game_shop/transfer.otui b/modules/game_shop/transfer.otui new file mode 100644 index 0000000000..dbfefc499f --- /dev/null +++ b/modules/game_shop/transfer.otui @@ -0,0 +1,80 @@ +MainWindow + id: transferWindow + !text: tr('Gift Tibia Coins') + size: 280 240 + @onEscape: modules.game_shop.hideTransfer() + + Label + anchors.top: parent.top + anchors.left: parent.left + anchors.right: parent.right + text-wrap: true + height: 56 + !text: tr('Please select the amount of Tibia Coins you would like to gift and enter the name of the character that should receive the Tibia Coins.') + + Label + anchors.top: prev.bottom + anchors.left: parent.left + margin-top: 20 + !text: tr('Reciepient:') + + TextEdit + id: recipient + anchors.verticalCenter: prev.verticalCenter + anchors.right: parent.right + width: 150 + text-align: left + + Label + id: coinsBalance + anchors.top: prev.bottom + anchors.left: parent.left + anchors.right: parent.right + margin-top: 10 + text-align: center + !text: tr('Transferable Tibia Coins:') + + Label + id: coinsAmountLabel + anchors.top: prev.bottom + anchors.left: parent.left + margin-top: 20 + !text: tr('Amount to gift: ') + + SpinBox + id: coinsAmount + anchors.right: parent.right + width: 100 + anchors.verticalCenter: prev.verticalCenter + text: 0 + minimum: 0 + maximum: 0 + focusable: true + editable: true + + HorizontalSeparator + anchors.right: parent.right + anchors.left: parent.left + anchors.bottom: cancelButton.top + margin-bottom: 8 + + Button + id: cancelButton + !text: tr('Cancel') + font: cipsoftFont + anchors.right: parent.right + anchors.bottom: parent.bottom + size: 45 21 + margin-top: 15 + margin-right: 5 + @onClick: modules.game_shop.hideTransfer() + + Button + id: giftButton + !text: tr('Gift') + font: cipsoftFont + size: 45 21 + anchors.verticalCenter: prev.verticalCenter + anchors.right: prev.left + margin-right: 5 + @onClick: modules.game_shop.transferCoins() \ No newline at end of file diff --git a/modules/game_skills/skills.lua b/modules/game_skills/skills.lua index 3325c7ef1f..ea683ca775 100644 --- a/modules/game_skills/skills.lua +++ b/modules/game_skills/skills.lua @@ -26,8 +26,8 @@ function init() onGameEnd = offline }) - skillsButton = modules.client_topmenu.addRightGameToggleButton('skillsButton', tr('Skills') .. ' (Alt+S)', - '/images/topbuttons/skills', toggle) + skillsButton = modules.game_mainpanel.addToggleButton('skillsButton', tr('Skills') .. ' (Alt+S)', + '/images/options/button_skills', toggle, false, 1) skillsButton:setOn(true) skillsWindow = g_ui.loadUI('skills') @@ -325,6 +325,14 @@ function toggle() skillsWindow:close() skillsButton:setOn(false) else + if not skillsWindow:getParent() then + local panel = modules.game_interface.findContentPanelAvailable(skillsWindow, skillsWindow:getMinimumHeight()) + if not panel then + return + end + + panel:addChild(skillsWindow) + end skillsWindow:open() skillsButton:setOn(true) updateHeight() @@ -361,8 +369,10 @@ end function onSkillButtonClick(button) local percentBar = button:getChildById('percent') - if percentBar then + local skillIcon = button:getChildById('icon') + if percentBar and skillIcon then showPercentBar(button, not percentBar:isVisible()) + skillIcon:setVisible(skillIcon:isVisible()) local char = g_game.getCharacterName() if percentBar:isVisible() then @@ -377,8 +387,10 @@ end function showPercentBar(button, show) local percentBar = button:getChildById('percent') - if percentBar then + local skillIcon = button:getChildById('icon') + if percentBar and skillIcon then percentBar:setVisible(show) + skillIcon:setVisible(show) if show then button:setHeight(21) else diff --git a/modules/game_skills/skills.otui b/modules/game_skills/skills.otui index b8864e2970..ae13deb5da 100644 --- a/modules/game_skills/skills.otui +++ b/modules/game_skills/skills.otui @@ -23,11 +23,31 @@ SkillValueLabel < GameLabel anchors.bottom: parent.bottom anchors.left: prev.left +ImageSkill < UIWidget + id: icon + size: 9 9 + width: 9 + margin-top: 13 + anchors.left: parent.left + anchors.top: parent.top + phantom: false + +RedPercentPanel < ProgressBar + id: percent + background-color: red + height: 5 + margin-top: 15 + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + phantom: false + SkillPercentPanel < ProgressBar id: percent background-color: green height: 5 margin-top: 15 + margin-left: 15 anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top @@ -60,8 +80,7 @@ MiniWindow SkillNameLabel !text: tr('Level') SkillValueLabel - SkillPercentPanel - background-color: red + RedPercentPanel SkillButton id: health @@ -109,20 +128,23 @@ MiniWindow SkillNameLabel !text: tr('Stamina') SkillValueLabel - SkillPercentPanel + RedPercentPanel SkillButton id: offlineTraining SkillNameLabel !text: tr('Offline Training') SkillValueLabel - SkillPercentPanel + RedPercentPanel SkillButton id: magiclevel SkillNameLabel !text: tr('Magic Level') SkillValueLabel + ImageSkill + image-source: /images/icons/icon_magic + image-size: 9 9 SkillPercentPanel background-color: red @@ -131,6 +153,9 @@ MiniWindow SkillNameLabel !text: tr('Fist Fighting') SkillValueLabel + ImageSkill + image-source: /images/icons/icon_fist + image-size: 9 9 SkillPercentPanel SkillButton @@ -138,6 +163,9 @@ MiniWindow SkillNameLabel !text: tr('Club Fighting') SkillValueLabel + ImageSkill + image-source: /images/icons/icon_club + image-size: 9 9 SkillPercentPanel SkillButton @@ -145,6 +173,9 @@ MiniWindow SkillNameLabel !text: tr('Sword Fighting') SkillValueLabel + ImageSkill + image-source: /images/icons/icon_sword + image-size: 9 9 SkillPercentPanel SkillButton @@ -152,6 +183,9 @@ MiniWindow SkillNameLabel !text: tr('Axe Fighting') SkillValueLabel + ImageSkill + image-source: /images/icons/icon_axe + image-size: 9 9 SkillPercentPanel SkillButton @@ -159,6 +193,9 @@ MiniWindow SkillNameLabel !text: tr('Distance Fighting') SkillValueLabel + ImageSkill + image-source: /images/icons/icon_distance + image-size: 9 9 SkillPercentPanel SkillButton @@ -166,6 +203,9 @@ MiniWindow SkillNameLabel !text: tr('Shielding') SkillValueLabel + ImageSkill + image-source: /images/icons/icon_shielding + image-size: 9 9 SkillPercentPanel SkillButton @@ -173,6 +213,9 @@ MiniWindow SkillNameLabel !text: tr('Fishing') SkillValueLabel + ImageSkill + image-source: /images/icons/icon_fishing + image-size: 9 9 SkillPercentPanel SmallSkillButton diff --git a/modules/game_spelllist/spelllist.lua b/modules/game_spelllist/spelllist.lua index 9ea465118f..7d9f682a8f 100644 --- a/modules/game_spelllist/spelllist.lua +++ b/modules/game_spelllist/spelllist.lua @@ -105,8 +105,8 @@ function init() spelllistWindow = g_ui.displayUI('spelllist', modules.game_interface.getRightPanel()) spelllistWindow:hide() - spelllistButton = modules.client_topmenu.addRightGameToggleButton('spelllistButton', tr('Spell List'), - '/images/topbuttons/spelllist', toggle) + spelllistButton = modules.game_mainpanel.addToggleButton('spelllistButton', tr('Spell List'), + '/images/options/button_spells', toggle, false, 4) spelllistButton:setOn(false) nameValueLabel = spelllistWindow:getChildById('labelNameValue') diff --git a/modules/game_tasks/images/taskIcon.png b/modules/game_tasks/images/taskIcon.png index e81f6f6a507e2c0c84bb1d3efc57f9c33bbe2102..6acc9f86c3aea018aad9425eb351a9a5c03aa902 100644 GIT binary patch literal 2940 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 O{aWh!YL8Xy0{;sHBV{T8 diff --git a/modules/game_tasks/tasks.otui b/modules/game_tasks/tasks.otui index 758fc36c4e..1a01c89261 100644 --- a/modules/game_tasks/tasks.otui +++ b/modules/game_tasks/tasks.otui @@ -1,4 +1,4 @@ -MiniPanel < Panel +MiniPanel2 < Panel text-offset: 0 3 text-align: top image-source: /images/ui/minipanel @@ -88,7 +88,7 @@ MainWindow @onEnter: modules.game_tasks.toggleWindow() @onEscape: modules.game_tasks.toggleWindow() - MiniPanel + MiniPanel2 id: listSearch anchors.top: parent.top anchors.left: parent.left diff --git a/modules/game_textmessage/textmessage.lua b/modules/game_textmessage/textmessage.lua index a4e7b40504..7c5ac29a94 100644 --- a/modules/game_textmessage/textmessage.lua +++ b/modules/game_textmessage/textmessage.lua @@ -2,15 +2,15 @@ MessageSettings = { none = {}, consoleRed = { color = TextColors.red, - consoleTab = 'Default' + consoleTab = 'Local Chat' }, consoleOrange = { color = TextColors.orange, - consoleTab = 'Default' + consoleTab = 'Local Chat' }, consoleBlue = { color = TextColors.blue, - consoleTab = 'Default' + consoleTab = 'Local Chat' }, centerRed = { color = TextColors.red, @@ -128,6 +128,7 @@ function calculateVisibleTime(text) end function displayMessage(mode, text) + if not g_game.isOnline() then return end diff --git a/modules/game_unjustifiedpoints/unjustifiedpoints.lua b/modules/game_unjustifiedpoints/unjustifiedpoints.lua index 1ef9dd30ee..b0db503e35 100644 --- a/modules/game_unjustifiedpoints/unjustifiedpoints.lua +++ b/modules/game_unjustifiedpoints/unjustifiedpoints.lua @@ -25,9 +25,9 @@ function init() onSkullChange = onSkullChange }) - unjustifiedPointsButton = modules.client_topmenu.addRightGameToggleButton('unjustifiedPointsButton', + unjustifiedPointsButton = modules.game_mainpanel.addToggleButton('unjustifiedPointsButton', tr('Unjustified Points'), - '/images/topbuttons/unjustifiedpoints', + '/images/options/button_frags', toggle) unjustifiedPointsButton:setOn(true) unjustifiedPointsButton:hide() @@ -82,6 +82,14 @@ function toggle() unjustifiedPointsWindow:close() unjustifiedPointsButton:setOn(false) else + if not unjustifiedPointsWindow:getParent() then + local panel = modules.game_interface.findContentPanelAvailable(unjustifiedPointsWindow, unjustifiedPointsWindow:getMinimumHeight()) + if not panel then + return + end + + panel:addChild(unjustifiedPointsWindow) + end unjustifiedPointsWindow:open() unjustifiedPointsButton:setOn(true) end diff --git a/modules/game_viplist/viplist.lua b/modules/game_viplist/viplist.lua index 7335fe5d0a..2fa1ced989 100644 --- a/modules/game_viplist/viplist.lua +++ b/modules/game_viplist/viplist.lua @@ -14,8 +14,8 @@ function init() g_keyboard.bindKeyDown('Ctrl+P', toggle) - vipButton = modules.client_topmenu.addRightGameToggleButton('vipListButton', tr('VIP List') .. ' (Ctrl+P)', - '/images/topbuttons/viplist', toggle) + vipButton = modules.game_mainpanel.addToggleButton('vipListButton', tr('VIP List') .. ' (Ctrl+P)', + '/images/options/button_vip', toggle, false, 3) vipButton:setOn(true) vipWindow = g_ui.loadUI('viplist') @@ -101,6 +101,14 @@ function toggle() vipWindow:close() vipButton:setOn(false) else + if not vipWindow:getParent() then + local panel = modules.game_interface.findContentPanelAvailable(vipWindow, vipWindow:getMinimumHeight()) + if not panel then + return + end + + panel:addChild(vipWindow) + end vipWindow:open() vipButton:setOn(true) end diff --git a/modules/gamelib/const.lua b/modules/gamelib/const.lua index 518ac02764..bac993a1c9 100644 --- a/modules/gamelib/const.lua +++ b/modules/gamelib/const.lua @@ -197,8 +197,9 @@ GameContainerFilter = 113 GameEnterGameShowAppearance = 114 GameSmoothWalkElevation = 115 GameNegativeOffset = 116 -GameItemTooltipV8 = 117 -GameForgeConvergence = 118 +GameItemTooltipV8 = 117 +GameWingsAurasEffectsShader = 118 -- note: change to 117 if not approved GameItemTooltipV8 +GameForgeConvergence = 119 TextColors = { red = '#f55e5e', -- '#c83200' diff --git a/modules/gamelib/controller.lua b/modules/gamelib/controller.lua index e329ff6770..da04ddae3d 100644 --- a/modules/gamelib/controller.lua +++ b/modules/gamelib/controller.lua @@ -5,7 +5,7 @@ local TypeEvent = { local function onGameStart(self) if self.dataUI ~= nil and self.dataUI.onGameStart then - self.ui = g_ui.loadUI('/' .. self.name .. '/' .. self.dataUI.name, g_ui.getRootWidget()) + self.ui = g_ui.loadUI('/' .. self.name .. '/' .. self.dataUI.name, self.dataUI.parent or g_ui.getRootWidget()) end if self.__onGameStart ~= nil then @@ -48,8 +48,7 @@ Controller = { externalEvents = nil, keyboardEvents = nil, attrs = nil, - opcodes = nil, - keyboardAnchor = nil + opcodes = nil } function Controller:new() @@ -108,16 +107,7 @@ function Controller:init() end end -function Controller:setKeyboardAnchor(widget) - self.keyboardAnchor = widget -end - function Controller:setUI(name, parent, onGameStart) - if type(parent) == "boolean" then - onGameStart = parent - parent = nil - end - self.dataUI = { name = name, parent = parent, onGameStart = onGameStart or false } end @@ -136,7 +126,7 @@ function Controller:terminate() end for i, event in pairs(self.keyboardEvents) do - g_keyboard['unbind' .. event.name](event.args[1], event.args[2], event.args[3]) + g_keyboard['unbind' .. event.name](event.args) end for i, opcode in pairs(self.opcodes) do @@ -163,7 +153,6 @@ function Controller:terminate() self.attrs = nil self.opcodes = nil self.externalEvents = nil - self.keyboardAnchor = nil self.__onGameStart = nil self.__onGameEnd = nil end @@ -245,43 +234,45 @@ function Controller:sendExtendedOpcode(opcode, ...) end end -function Controller:bindKeyDown(...) - local args = { ... } - if args[3] == nil or type(args[3]) == 'boolean' then - args[4] = args[3] - args[3] = self.keyboardAnchor - end +function Controller:bindKeyDown(key, ...) table.insert(self.keyboardEvents, { name = 'KeyDown', - args = args + key = key, + args = ... }) - g_keyboard.bindKeyDown(args[1], args[2], args[3]) + g_keyboard.bindKeyDown(key, ...) end -function Controller:bindKeyUp(...) - local args = { ... } - if args[3] == nil or type(args[3]) == 'boolean' then - args[4] = args[3] - args[3] = self.keyboardAnchor +function Controller:unbindKeyDown(key, ...) + for index, entry in pairs(self.keyboardEvents) do + if entry.key == key then + table.remove(self.keyboardEvents, index) + break + end end + table.insert(self.keyboardEvents, { - name = 'KeyUp', - args = args + name = 'KeyDown', + key = key, + args = ... }) + g_keyboard.unbindKeyDown(key, ...) +end - print(args[1], args[2], args[3]) - g_keyboard.bindKeyUp(args[1], args[2], args[3]) +function Controller:bindKeyUp(key, ...) + table.insert(self.keyboardEvents, { + name = 'KeyUp', + key = key, + args = ... + }) + g_keyboard.bindKeyUp(key, ...) end -function Controller:bindKeyPress(...) - local args = { ... } - if args[3] == nil or type(args[3]) == 'boolean' then - args[4] = args[3] - args[3] = self.keyboardAnchor - end +function Controller:bindKeyPress(key, ...) table.insert(self.keyboardEvents, { name = 'KeyPress', - args = args + key = key, + args = ... }) - g_keyboard.bindKeyPress(args[1], args[2], args[3]) + g_keyboard.bindKeyPress(key, ...) end diff --git a/modules/gamelib/game.lua b/modules/gamelib/game.lua index 9eabc3898c..03a173ece9 100644 --- a/modules/gamelib/game.lua +++ b/modules/gamelib/game.lua @@ -58,7 +58,7 @@ function g_game.getSupportedClients() 1012, 1013, 1020, 1021, 1022, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1080, 1081, 1082, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1281, 1285, - 1286, 1287, 1291, 1300, 1314, 1316, 1320, 1321, 1332 } + 1286, 1287, 1291, 1300, 1310, 1311, 1314, 1316, 1320, 1321, 1322, 1332 } end -- The client version and protocol version where diff --git a/modules/gamelib/player.lua b/modules/gamelib/player.lua index 0249769147..f3dbb71167 100644 --- a/modules/gamelib/player.lua +++ b/modules/gamelib/player.lua @@ -20,6 +20,25 @@ PlayerStates = { Hungry = 65536 } +Icons = {} +Icons[PlayerStates.Poison] = { tooltip = tr('You are poisoned'), path = '/images/game/states/poisoned', id = 'condition_poisoned' } +Icons[PlayerStates.Burn] = { tooltip = tr('You are burning'), path = '/images/game/states/burning', id = 'condition_burning' } +Icons[PlayerStates.Energy] = { tooltip = tr('You are electrified'), path = '/images/game/states/electrified', id = 'condition_electrified' } +Icons[PlayerStates.Drunk] = { tooltip = tr('You are drunk'), path = '/images/game/states/drunk', id = 'condition_drunk' } +Icons[PlayerStates.ManaShield] = { tooltip = tr('You are protected by a magic shield'), path = '/images/game/states/magic_shield', id = 'condition_magic_shield' } +Icons[PlayerStates.Paralyze] = { tooltip = tr('You are paralysed'), path = '/images/game/states/slowed', id = 'condition_slowed' } +Icons[PlayerStates.Haste] = { tooltip = tr('You are hasted'), path = '/images/game/states/haste', id = 'condition_haste' } +Icons[PlayerStates.Swords] = { tooltip = tr('You may not logout during a fight'), path = '/images/game/states/logout_block', id = 'condition_logout_block' } +Icons[PlayerStates.Drowning] = { tooltip = tr('You are drowning'), path = '/images/game/states/drowning', id = 'condition_drowning' } +Icons[PlayerStates.Freezing] = { tooltip = tr('You are freezing'), path = '/images/game/states/freezing', id = 'condition_freezing' } +Icons[PlayerStates.Dazzled] = { tooltip = tr('You are dazzled'), path = '/images/game/states/dazzled', id = 'condition_dazzled' } +Icons[PlayerStates.Cursed] = { tooltip = tr('You are cursed'), path = '/images/game/states/cursed', id = 'condition_cursed' } +Icons[PlayerStates.PartyBuff] = { tooltip = tr('You are strengthened'), path = '/images/game/states/strengthened', id = 'condition_strengthened' } +Icons[PlayerStates.PzBlock] = { tooltip = tr('You may not logout or enter a protection zone'), path = '/images/game/states/protection_zone_block', id = 'condition_protection_zone_block' } +Icons[PlayerStates.Pz] = { tooltip = tr('You are within a protection zone'), path = '/images/game/states/protection_zone', id = 'condition_protection_zone' } +Icons[PlayerStates.Bleeding] = { tooltip = tr('You are bleeding'), path = '/images/game/states/bleeding', id = 'condition_bleeding' } +Icons[PlayerStates.Hungry] = { tooltip = tr('You are hungry'), path = '/images/game/states/hungry', id = 'condition_hungry' } + InventorySlotOther = 0 InventorySlotHead = 1 InventorySlotNeck = 2 diff --git a/modules/startup/startup.lua b/modules/startup/startup.lua index 14d1f0dbc6..bf78b0ef86 100644 --- a/modules/startup/startup.lua +++ b/modules/startup/startup.lua @@ -6,11 +6,11 @@ function init() if g_platform.isMobile() then g_window.setMinimumSize({ width = 640, height = 360 }) else - g_window.setMinimumSize({ width = 800, height = 640 }) + g_window.setMinimumSize({ width = 1020, height = 644 }) end -- window size - local size = { width = 1024, height = 600 } + local size = { width = 1020, height = 644 } size = g_settings.getSize('window-size', size) g_window.resize(size) diff --git a/src/client/const.h b/src/client/const.h index e843a5d679..c78ba51f95 100644 --- a/src/client/const.h +++ b/src/client/const.h @@ -144,7 +144,6 @@ namespace Otc Fatal, Dodge, Momentum, - Transcendence, LastSkill }; @@ -546,9 +545,9 @@ namespace Otc GameSmoothWalkElevation = 115, GameNegativeOffset = 116, GameItemTooltipV8 = 117, - GameForgeConvergence = 118, - - LastGameFeature, + GameWingsAurasEffectsShader = 118, // note: change to 117 if not approved GameItemTooltipV8 + GameForgeConvergence = 119, + LastGameFeature = 120 }; enum MagicEffectsType_t : uint8_t diff --git a/src/client/creature.cpp b/src/client/creature.cpp index 6e327c7f1f..b6e9f87e50 100644 --- a/src/client/creature.cpp +++ b/src/client/creature.cpp @@ -105,7 +105,7 @@ void Creature::drawLight(const Point& dest, const LightViewPtr& lightView) { drawAttachedLightEffect(dest + m_walkOffset * g_drawPool.getScaleFactor(), lightView); } -void Creature::draw(const Rect& destRect, uint8_t size) +void Creature::draw(const Rect& destRect, uint8_t size, bool center) { if (!getThingType()) return; @@ -115,7 +115,10 @@ void Creature::draw(const Rect& destRect, uint8_t size) frameSize = std::max(frameSize * (size / 100.f), 2 * g_gameConfig.getSpriteSize() * (size / 100.f)); g_drawPool.bindFrameBuffer(frameSize); { - const auto& p = Point(frameSize - g_gameConfig.getSpriteSize()) + getDisplacement(); + auto p = Point(frameSize - g_gameConfig.getSpriteSize()) + getDisplacement(); + if (center) + p /= 2; + internalDraw(p); if (isMarked()) internalDraw(p, getMarkedColor()); @@ -743,7 +746,9 @@ void Creature::setHealthPercent(uint8_t healthPercent) void Creature::setDirection(Otc::Direction direction) { - assert(direction != Otc::InvalidDirection); + if (direction == Otc::InvalidDirection) + return; + m_direction = direction; // xPattern => creature direction @@ -778,6 +783,13 @@ void Creature::setOutfit(const Outfit& outfit) m_numPatternZ = std::min(1, getNumPatternZ() - 1); } + if ((g_game.getFeature(Otc::GameWingsAurasEffectsShader))) { + m_outfit.setWing(0); + m_outfit.setAura(0); + m_outfit.setEffect(0); + m_outfit.setShader("Outfit - Default"); + } + if (const auto& tile = getTile()) tile->checkForDetachableThing(); @@ -1108,8 +1120,10 @@ void Creature::setStaticWalking(uint16_t v) { m_walkingAnimationSpeed = v; - if (v == 0) + if (v == 0) { + m_walkAnimationPhase = 0; return; + } m_walkUpdateEvent = g_dispatcher.cycleEvent([self = static_self_cast()] { self->updateWalkAnimation(); diff --git a/src/client/creature.h b/src/client/creature.h index d6e61affcd..6cdc4cc129 100644 --- a/src/client/creature.h +++ b/src/client/creature.h @@ -55,7 +55,7 @@ class Creature : public Thing void onDisappear() override; void draw(const Point& dest, bool drawThings = true, const LightViewPtr& lightView = nullptr) override; - void draw(const Rect& destRect, uint8_t size); + void draw(const Rect& destRect, uint8_t size, bool center = false); void drawLight(const Point& dest, const LightViewPtr& lightView) override; void internalDraw(Point dest, const Color& color = Color::white); diff --git a/src/client/game.cpp b/src/client/game.cpp index 58e88b468d..9e08065eb4 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -405,7 +405,11 @@ void Game::processRemoveAutomapFlag(const Position& pos, int icon, const std::st } void Game::processOpenOutfitWindow(const Outfit& currentOutfit, const std::vector >& outfitList, - const std::vector >& mountList) + const std::vector >& mountList, + const std::vector >& wingsList, + const std::vector >& aurasList, + const std::vector >& effectList, + const std::vector>& shaderList) { // create virtual creature outfit const auto& virtualOutfitCreature = std::make_shared(); @@ -426,7 +430,7 @@ void Game::processOpenOutfitWindow(const Outfit& currentOutfit, const std::vecto virtualMountCreature->setOutfit(mountOutfit); } - g_lua.callGlobalField("g_game", "onOpenOutfitWindow", virtualOutfitCreature, outfitList, virtualMountCreature, mountList); + g_lua.callGlobalField("g_game", "onOpenOutfitWindow", virtualOutfitCreature, outfitList, virtualMountCreature, mountList, wingsList, aurasList, effectList, shaderList); } void Game::processOpenNpcTrade(const std::vector >& items) diff --git a/src/client/game.h b/src/client/game.h index 23535f6553..2238e8cb5d 100644 --- a/src/client/game.h +++ b/src/client/game.h @@ -127,7 +127,11 @@ class Game // outfit void processOpenOutfitWindow(const Outfit& currentOutfit, const std::vector >& outfitList, - const std::vector >& mountList); + const std::vector >& mountList, + const std::vector >& wingsList, + const std::vector >& aurasList, + const std::vector >& effectsList, + const std::vector>& shaderList ); // npc trade static void processOpenNpcTrade(const std::vector >& items); diff --git a/src/client/luafunctions.cpp b/src/client/luafunctions.cpp index 8d244f83d9..ba1c647ada 100644 --- a/src/client/luafunctions.cpp +++ b/src/client/luafunctions.cpp @@ -911,6 +911,10 @@ void Client::registerLuaFunctions() g_lua.bindClassMemberFunction("setCreatureSize", &UICreature::setCreatureSize); g_lua.bindClassMemberFunction("getCreature", &UICreature::getCreature); g_lua.bindClassMemberFunction("getCreatureSize", &UICreature::getCreatureSize); + // note: check function + g_lua.bindClassMemberFunction("getDirection", &UICreature::getDirection); + g_lua.bindClassMemberFunction("setCenter", &UICreature::setCenter); + g_lua.bindClassMemberFunction("isCentered", &UICreature::isCentered); g_lua.registerClass(); g_lua.bindClassStaticFunction("create", [] { return std::make_shared(); }); diff --git a/src/client/luavaluecasts_client.cpp b/src/client/luavaluecasts_client.cpp index 637286a053..f5e228c823 100644 --- a/src/client/luavaluecasts_client.cpp +++ b/src/client/luavaluecasts_client.cpp @@ -74,6 +74,17 @@ bool luavalue_cast(int index, Outfit& outfit) g_lua.getField("mount", index); outfit.setMount(g_lua.popInteger()); } + if (g_game.getFeature(Otc::GameWingsAurasEffectsShader)) { + g_lua.getField("wings", index); + outfit.setWing(g_lua.popInteger()); + g_lua.getField("effects", index); + outfit.setEffect(g_lua.popInteger()); + g_lua.getField("auras", index); + outfit.setAura(g_lua.popInteger()); + g_lua.getField("shaders", index); + outfit.setShader(g_lua.popString()); + + } return true; } diff --git a/src/client/outfit.cpp b/src/client/outfit.cpp index b82d61048d..5f190f941f 100644 --- a/src/client/outfit.cpp +++ b/src/client/outfit.cpp @@ -118,6 +118,11 @@ void Outfit::resetClothes() setLegs(0); setFeet(0); setMount(0); + setWing(0); + setAura(0); + setEffect(0); + setShader("Outfit - Default"); + } void Outfit::setHead(uint8_t head) { diff --git a/src/client/outfit.h b/src/client/outfit.h index 18aeb97aa7..ad7e6c1e29 100644 --- a/src/client/outfit.h +++ b/src/client/outfit.h @@ -39,6 +39,10 @@ class Outfit void setId(uint16_t id) { m_id = id; } void setAuxId(uint16_t id) { m_auxId = id; } void setMount(uint16_t mount) { m_mount = mount; } + void setWing(uint16_t Wing) { m_wing = Wing; } + void setAura(uint16_t Aura) { m_aura = Aura; } + void setEffect(uint16_t Effect) { m_effect = Effect; } + void setShader(const std::string& shader) { m_shader = shader; } void setHead(uint8_t head); void setBody(uint8_t body); @@ -54,6 +58,10 @@ class Outfit uint16_t getId() const { return m_id; } uint16_t getAuxId() const { return m_auxId; } uint16_t getMount() const { return m_mount; } + uint16_t getWing() const { return m_wing; } + uint16_t getAura() const { return m_aura; } + uint16_t getEffect() const { return m_effect; } + std::string getShader() const { return m_shader; } uint8_t getHead() const { return m_head; } uint8_t getBody() const { return m_body; } @@ -85,7 +93,11 @@ class Outfit m_legs == other.m_legs && m_feet == other.m_feet && m_addons == other.m_addons && - m_mount == other.m_mount; + m_mount == other.m_mount && + m_wing == other.m_wing && + m_aura == other.m_aura && + m_effect == other.m_effect && + m_shader == other.m_shader; } bool operator!=(const Outfit& other) const { return !(*this == other); } @@ -97,6 +109,10 @@ class Outfit uint16_t m_id{ 0 }; uint16_t m_auxId{ 0 }; uint16_t m_mount{ 0 }; + uint16_t m_wing{ 0 }; + uint16_t m_aura{ 0 }; + uint16_t m_effect{ 0 }; + std::string m_shader; uint8_t m_head{ 0 }; uint8_t m_body{ 0 }; diff --git a/src/client/protocolgameparse.cpp b/src/client/protocolgameparse.cpp index 3fdb12a797..e5fce22499 100644 --- a/src/client/protocolgameparse.cpp +++ b/src/client/protocolgameparse.cpp @@ -692,8 +692,12 @@ void ProtocolGame::parseResourceBalance(const InputMessagePtr& msg) const void ProtocolGame::parseWorldTime(const InputMessagePtr& msg) { - msg->getU8(); // hour - msg->getU8(); // min + + const auto hour = msg->getU8(); + const auto min = msg->getU8(); +// note: needs mehah approval + g_lua.callGlobalField("g_game", "onChangeWorldTime", hour, min); +// } void ProtocolGame::parseStore(const InputMessagePtr& msg) const @@ -701,7 +705,7 @@ void ProtocolGame::parseStore(const InputMessagePtr& msg) const parseCoinBalance(msg); const uint8_t categories = msg->getU16(); - for (auto i = -1; ++i < categories;) { + for (int_fast32_t i = -1; ++i < categories;) { msg->getString(); // category msg->getString(); // description @@ -710,7 +714,7 @@ void ProtocolGame::parseStore(const InputMessagePtr& msg) const std::vector icons; const uint8_t iconCount = msg->getU8(); - for (auto j = -1; ++j < iconCount; ) { + for (int_fast32_t j = -1; ++j < iconCount; ) { icons.push_back(msg->getString()); } @@ -774,7 +778,7 @@ void ProtocolGame::parseStoreTransactionHistory(const InputMessagePtr& msg) cons } const uint8_t entries = msg->getU8(); - for (auto i = -1; ++i < entries;) { + for (int_fast32_t i = -1; ++i < entries;) { uint16_t time = msg->getU16(); uint8_t productType = msg->getU8(); uint32_t coinChange = msg->getU32(); @@ -788,7 +792,7 @@ void ProtocolGame::parseStoreOffers(const InputMessagePtr& msg) msg->getString(); // categoryName const uint16_t offers = msg->getU16(); - for (auto i = -1; ++i < offers;) { + for (int_fast32_t i = -1; ++i < offers;) { msg->getU32(); // offerId msg->getString(); // offerName msg->getString(); // offerDescription @@ -807,17 +811,17 @@ void ProtocolGame::parseStoreOffers(const InputMessagePtr& msg) std::vector icons; const uint8_t iconCount = msg->getU8(); - for (auto j = -1; ++j < iconCount;) { + for (int_fast32_t j = -1; ++j < iconCount;) { icons.emplace_back(msg->getString()); } const uint16_t subOffers = msg->getU16(); - for (auto j = -1; ++j < subOffers;) { + for (int_fast32_t j = -1; ++j < subOffers;) { msg->getString(); // name msg->getString(); // description const uint8_t subIcons = msg->getU8(); - for (auto k = -1; ++k < subIcons;) { + for (int_fast32_t k = -1; ++k < subIcons;) { msg->getString(); // icon } msg->getString(); // serviceType @@ -876,7 +880,7 @@ void ProtocolGame::parseGMActions(const InputMessagePtr& msg) else numViolationReasons = 32; - for (auto i = -1; ++i < numViolationReasons;) + for (int_fast32_t i = -1; ++i < numViolationReasons;) actions.push_back(msg->getU8()); g_game.processGMActions(actions); @@ -1125,22 +1129,15 @@ void ProtocolGame::parseOpenContainer(const InputMessagePtr& msg) const uint8_t itemCount = msg->getU8(); std::vector items(itemCount); - for (auto i = -1; ++i < itemCount;) + for (int_fast32_t i = -1; ++i < itemCount;) items[i] = getItem(msg); if (g_game.getFeature(Otc::GameContainerFilter)) { - // Check if container is store inbox id - if (containerItem->getId() == 23396) { - msg->getU8(); - const uint8_t listSize = msg->getU8(); - for (auto i = -1; ++i < listSize;) { - msg->getU8(); - msg->getString(); - } - } else { - // Parse store inbox category empty - msg->getU8(); + msg->getU8(); + const uint8_t listSize = msg->getU8(); + for (int_fast8_t i = -1; ++i < listSize;) { msg->getU8(); + msg->getString(); } } @@ -1228,7 +1225,7 @@ void ProtocolGame::parseOpenNpcTrade(const InputMessagePtr& msg) else listCount = msg->getU8(); - for (auto i = -1; ++i < listCount;) { + for (int_fast32_t i = -1; ++i < listCount;) { const uint16_t itemId = msg->getU16(); const uint8_t count = msg->getU8(); @@ -1262,7 +1259,7 @@ void ProtocolGame::parsePlayerGoods(const InputMessagePtr& msg) const } const uint8_t size = msg->getU8(); - for (auto i = -1; ++i < size;) { + for (int_fast32_t i = -1; ++i < size;) { const uint16_t itemId = msg->getU16(); uint16_t amount; @@ -1285,7 +1282,7 @@ void ProtocolGame::parseOwnTrade(const InputMessagePtr& msg) const uint8_t count = msg->getU8(); std::vector items(count); - for (auto i = -1; ++i < count;) + for (int_fast32_t i = -1; ++i < count;) items[i] = getItem(msg); Game::processOwnTrade(name, items); @@ -1297,7 +1294,7 @@ void ProtocolGame::parseCounterTrade(const InputMessagePtr& msg) const uint8_t count = msg->getU8(); std::vector items(count); - for (auto i = -1; ++i < count; ) + for (int_fast32_t i = -1; ++i < count; ) items[i] = getItem(msg); Game::processCounterTrade(name, items); @@ -1428,7 +1425,7 @@ void ProtocolGame::parseAnimatedText(const InputMessagePtr& msg) void ProtocolGame::parseAnthem(const InputMessagePtr& msg) { uint8_t type = msg->getU8(); - if (type <= 2) { + if (type >= 0 && type <= 2) { msg->getU16(); // Anthem id } } @@ -1458,12 +1455,12 @@ void ProtocolGame::parseDistanceMissile(const InputMessagePtr& msg) void ProtocolGame::parseItemClasses(const InputMessagePtr& msg) { const uint8_t classSize = msg->getU8(); - for (auto i = 0; i < classSize; i++) { + for (int_fast8_t i = 0; i < classSize; i++) { msg->getU8(); // class id // tiers const uint8_t tiersSize = msg->getU8(); - for (auto j = 0; j < tiersSize; j++) { + for (int_fast8_t j = 0; j < tiersSize; j++) { msg->getU8(); // tier id msg->getU64(); // upgrade cost } @@ -1471,22 +1468,20 @@ void ProtocolGame::parseItemClasses(const InputMessagePtr& msg) if (g_game.getFeature(Otc::GameDynamicForgeVariables)) { const uint8_t grades = msg->getU8(); - for (auto i = 0; i < grades; i++) { + for (int_fast8_t i = 0; i < grades; i++) { msg->getU8(); // Tier msg->getU8(); // Exalted cores } if (g_game.getFeature(Otc::GameForgeConvergence)) { - // Convergence fusion prices per tier - const uint8_t totalConvergenceFusion = msg->getU8(); // total size count - for (auto i = 0; i < totalConvergenceFusion; i++) { + const uint8_t convergenceFusionSize = msg->getU8(); + for (int_fast8_t i = 0; i < convergenceFusionSize; i++) { msg->getU8(); // tier id msg->getU64(); // upgrade cost } - // Convergence transfer prices per tier - const uint8_t totalConvergenceTransfer = msg->getU8(); // total size count - for (auto i = 0; i < totalConvergenceTransfer; i++) { + const uint8_t convergenceTransferSize = msg->getU8(); + for (int_fast8_t i = 0; i < convergenceTransferSize; i++) { msg->getU8(); // tier id msg->getU64(); // upgrade cost } @@ -1498,19 +1493,19 @@ void ProtocolGame::parseItemClasses(const InputMessagePtr& msg) msg->getU8(); // Dust Percent Upgrade msg->getU16(); // Max Dust msg->getU16(); // Max Dust Cap - msg->getU8(); // Dust Normal Fusion + msg->getU8(); // Dust Fusion if (g_game.getFeature(Otc::GameForgeConvergence)) { - msg->getU8(); // Dust Convergence Fusion + msg->getU8(); // Convergence Fusion } - msg->getU8(); // Dust Normal Transfer + msg->getU8(); // Dust Transfer if (g_game.getFeature(Otc::GameForgeConvergence)) { - msg->getU8(); // Dust Convergence Transfer + msg->getU8(); // Convergence Transfer } msg->getU8(); // Chance Base msg->getU8(); // Chance Improved msg->getU8(); // Reduce Tier Loss } else { - for (auto i = 1; i <= 11; i++) { + for (int_fast8_t i = 1; i <= 11; i++) { msg->getU8(); // Forge values } } @@ -1535,7 +1530,7 @@ void ProtocolGame::parseTrappers(const InputMessagePtr& msg) if (numTrappers > 8) g_logger.traceError("too many trappers"); - for (auto i = 0; i < numTrappers; ++i) { + for (int_fast32_t i = 0; i < numTrappers; ++i) { const uint32_t id = msg->getU32(); if (const auto& creature = g_map.getCreatureById(id)) { //TODO: set creature as trapper @@ -1686,7 +1681,7 @@ void ProtocolGame::parsePremiumTrigger(const InputMessagePtr& msg) const uint8_t triggerCount = msg->getU8(); std::vector triggers; - for (auto i = 0; i < triggerCount; ++i) { + for (int_fast32_t i = 0; i < triggerCount; ++i) { triggers.push_back(msg->getU8()); } @@ -1708,7 +1703,7 @@ void ProtocolGame::parsePlayerInfo(const InputMessagePtr& msg) const const uint16_t spellCount = msg->getU16(); std::vector spells; - for (auto i = 0; i < spellCount; ++i) { + for (int_fast32_t i = 0; i < spellCount; ++i) { if (g_game.getFeature(Otc::GameUshortSpell)) { spells.push_back(msg->getU16()); // spell id } else { @@ -1898,8 +1893,10 @@ void ProtocolGame::parsePlayerSkills(const InputMessagePtr& msg) const } if (g_game.getFeature(Otc::GameAdditionalSkills)) { - // Critical, Life Leech, Mana Leech - for (int_fast32_t skill = Otc::CriticalChance; skill <= Otc::ManaLeechAmount; ++skill) { + // Critical, Life Leech, Mana Leech, Dodge, Fatal, Momentum have no level percent, nor loyalty bonus + + const uint8_t lastSkill = g_game.getClientVersion() >= 1281 ? Otc::LastSkill : Otc::ManaLeechAmount + 1; + for (int_fast32_t skill = Otc::CriticalChance; skill < lastSkill; ++skill) { if (!g_game.getFeature(Otc::GameLeechAmount)) { if (skill == Otc::LifeLeechAmount || skill == Otc::ManaLeechAmount) { continue; @@ -1919,12 +1916,10 @@ void ProtocolGame::parsePlayerSkills(const InputMessagePtr& msg) const if (g_game.getClientVersion() >= 1281) { // forge skill stats - const uint8_t lastSkill = g_game.getClientVersion() >= 1332 ? Otc::LastSkill : Otc::Momentum + 1; - for (int_fast32_t skill = Otc::Fatal; skill < lastSkill; ++skill) { - const uint16_t level = msg->getU16(); - const uint16_t baseLevel = msg->getU16(); - m_localPlayer->setSkill(static_cast(skill), level, 0); - m_localPlayer->setBaseSkill(static_cast(skill), baseLevel); + const uint8_t slots = g_game.getClientVersion() >= 1332 ? 4 : 3; // 1281: CONST_SLOT_LEFT, CONST_SLOT_ARMOR, CONST_SLOT_HEAD, 1332: CONST_SLOT_LEGS + for (int_fast32_t i = 0; i < slots; ++i) { + msg->getU16(); // skill + msg->getU16(); // skill } // bonus cap @@ -1942,7 +1937,7 @@ void ProtocolGame::parsePlayerState(const InputMessagePtr& msg) const if (g_game.getClientVersion() >= 1281) { states = msg->getU32(); if (g_game.getFeature(Otc::GamePlayerStateCounter)) - msg->getU8(); // icons counter + msg->getU8(); } else { if (g_game.getFeature(Otc::GamePlayerStateU16)) states = msg->getU16(); @@ -2066,7 +2061,7 @@ void ProtocolGame::parseChannelList(const InputMessagePtr& msg) { const uint8_t count = msg->getU8(); std::vector > channelList; - for (auto i = 0; i < count; ++i) { + for (int_fast32_t i = 0; i < count; ++i) { const uint16_t id = msg->getU16(); const auto& name = msg->getString(); channelList.emplace_back(id, name); @@ -2082,10 +2077,10 @@ void ProtocolGame::parseOpenChannel(const InputMessagePtr& msg) if (g_game.getFeature(Otc::GameChannelPlayerList)) { const uint16_t joinedPlayers = msg->getU16(); - for (auto i = 0; i < joinedPlayers; ++i) + for (int_fast32_t i = 0; i < joinedPlayers; ++i) g_game.formatCreatureName(msg->getString()); // player name const uint16_t invitedPlayers = msg->getU16(); - for (auto i = 0; i < invitedPlayers; ++i) + for (int_fast32_t i = 0; i < invitedPlayers; ++i) g_game.formatCreatureName(msg->getString()); // player name } @@ -2138,8 +2133,6 @@ void ProtocolGame::parseTextMessage(const InputMessagePtr& msg) const Otc::MessageMode mode = Proto::translateMessageModeFromServer(code); std::string text; - g_logger.debug(stdext::format("[parseTextMessage] code: %d, mode: %d", code, mode)); - switch (mode) { case Otc::MessageChannelManagement: msg->getU16(); // channelId @@ -2170,7 +2163,7 @@ void ProtocolGame::parseTextMessage(const InputMessagePtr& msg) color[1] = msg->getU8(); text = msg->getString(); - for (auto i = 0; i < 2; ++i) { + for (int_fast32_t i = 0; i < 2; ++i) { if (value[i] == 0) continue; @@ -2205,13 +2198,10 @@ void ProtocolGame::parseTextMessage(const InputMessagePtr& msg) throw Exception("unknown message mode %d", mode); break; default: + text = msg->getString(); break; } - if (text.empty()) { - text = msg->getString(); - } - Game::processTextMessage(mode, text); } @@ -2237,7 +2227,7 @@ void ProtocolGame::parseFloorChangeUp(const InputMessagePtr& msg) int skip = 0; if (pos.z == g_gameConfig.getMapSeaFloor()) - for (auto i = g_gameConfig.getMapSeaFloor() - g_gameConfig.getMapAwareUndergroundFloorRange(); i >= 0; --i) + for (int_fast32_t i = g_gameConfig.getMapSeaFloor() - g_gameConfig.getMapAwareUndergroundFloorRange(); i >= 0; --i) skip = setFloorDescription(msg, pos.x - range.left, pos.y - range.top, i, range.horizontal(), range.vertical(), 8 - i, skip); else if (pos.z > g_gameConfig.getMapSeaFloor()) setFloorDescription(msg, pos.x - range.left, pos.y - range.top, pos.z - g_gameConfig.getMapAwareUndergroundFloorRange(), range.horizontal(), range.vertical(), 3, skip); @@ -2288,7 +2278,7 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg) const if (g_game.getFeature(Otc::GameNewOutfitProtocol)) { const uint16_t outfitCount = g_game.getClientVersion() >= 1281 ? msg->getU16() : msg->getU8(); - for (auto i = 0; i < outfitCount; ++i) { + for (int_fast32_t i = 0; i < outfitCount; ++i) { uint16_t outfitId = msg->getU16(); const auto& outfitName = msg->getString(); uint8_t outfitAddons = msg->getU8(); @@ -2313,14 +2303,14 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg) const outfitEnd = msg->getU8(); } - for (auto i = outfitStart; i <= outfitEnd; ++i) + for (int_fast32_t i = outfitStart; i <= outfitEnd; ++i) outfitList.emplace_back(i, "", 0); } std::vector > mountList; if (g_game.getFeature(Otc::GamePlayerMounts)) { const uint16_t mountCount = g_game.getClientVersion() >= 1281 ? msg->getU16() : msg->getU8(); - for (auto i = 0; i < mountCount; ++i) { + for (int_fast32_t i = 0; i < mountCount; ++i) { const uint16_t mountId = msg->getU16(); // mount type const auto& mountName = msg->getString(); // mount name @@ -2335,9 +2325,42 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg) const } } + std::vector > wingList; + std::vector > auraList; + std::vector > effectList; + std::vector > shaderList; + if (g_game.getFeature(Otc::GameWingsAurasEffectsShader)) { + int wingCount = msg->getU8(); + for (int i = 0; i < wingCount; ++i) { + int wingId = msg->getU16(); + std::string wingName = msg->getString(); + wingList.push_back(std::make_tuple(wingId, wingName)); + } + int auraCount = msg->getU8(); + for (int i = 0; i < auraCount; ++i) { + int auraId = msg->getU16(); + std::string auraName = msg->getString(); + auraList.push_back(std::make_tuple(auraId, auraName)); + } + int effectCount = msg->getU8(); + for (int i = 0; i < effectCount; ++i) { + int effectId = msg->getU16(); + std::string effectName = msg->getString(); + effectList.push_back(std::make_tuple(effectId, effectName)); + } + int shaderCount = msg->getU8(); + for (int i = 0; i < shaderCount; ++i) { + int shaderId = msg->getU16(); + std::string shaderName = msg->getString(); + shaderList.push_back(std::make_tuple(shaderId, shaderName)); + } + + } + + if (g_game.getClientVersion() >= 1281) { const uint16_t familiarCount = msg->getU16(); - for (auto i = 0; i < familiarCount; ++i) { + for (int_fast32_t i = 0; i < familiarCount; ++i) { msg->getU16(); // familiar lookType msg->getString(); // familiar name const uint8_t familiarMode = msg->getU8(); // 0x00 // mode: 0x00 - available, 0x01 store (requires U32 store offerId) @@ -2351,7 +2374,7 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg) const msg->getU8(); // randomize mount (bool) } - g_game.processOpenOutfitWindow(currentOutfit, outfitList, mountList); + g_game.processOpenOutfitWindow(currentOutfit, outfitList, mountList, wingList, auraList, effectList, shaderList); } void ProtocolGame::parseKillTracker(const InputMessagePtr& msg) @@ -2361,7 +2384,7 @@ void ProtocolGame::parseKillTracker(const InputMessagePtr& msg) // corpse items const uint8_t size = msg->getU8(); - for (auto i = 0; i < size; i++) { + for (int_fast32_t i = 0; i < size; i++) { getItem(msg); } } @@ -2445,7 +2468,7 @@ void ProtocolGame::parseQuestLog(const InputMessagePtr& msg) { std::vector > questList; const uint16_t questsCount = msg->getU16(); - for (auto i = 0; i < questsCount; ++i) { + for (int_fast32_t i = 0; i < questsCount; ++i) { uint16_t id = msg->getU16(); const auto& name = msg->getString(); bool completed = msg->getU8(); @@ -2460,7 +2483,7 @@ void ProtocolGame::parseQuestLine(const InputMessagePtr& msg) std::vector> questMissions; const uint16_t questId = msg->getU16(); const uint8_t missionCount = msg->getU8(); - for (auto i = 0; i < missionCount; ++i) { + for (int_fast32_t i = 0; i < missionCount; ++i) { const auto& missionName = msg->getString(); const auto& missionDescrition = msg->getString(); questMissions.emplace_back(missionName, missionDescrition); @@ -2482,7 +2505,7 @@ void ProtocolGame::parseItemInfo(const InputMessagePtr& msg) const { std::vector> list; const uint8_t size = msg->getU8(); - for (auto i = 0; i < size; ++i) { + for (int_fast32_t i = 0; i < size; ++i) { const auto& item = std::make_shared(); item->setId(msg->getU16()); item->setCountOrSubType(g_game.getFeature(Otc::GameCountU16) ? msg->getU16() : msg->getU8()); @@ -2497,7 +2520,7 @@ void ProtocolGame::parseItemInfo(const InputMessagePtr& msg) const void ProtocolGame::parsePlayerInventory(const InputMessagePtr& msg) { const uint16_t size = msg->getU16(); - for (auto i = 0; i < size; ++i) { + for (int_fast32_t i = 0; i < size; ++i) { msg->getU16(); // id msg->getU8(); // subtype msg->getU16(); // count @@ -2512,7 +2535,7 @@ void ProtocolGame::parseModalDialog(const InputMessagePtr& msg) const uint8_t sizeButtons = msg->getU8(); std::vector > buttonList; - for (auto i = 0; i < sizeButtons; ++i) { + for (int_fast32_t i = 0; i < sizeButtons; ++i) { const auto& value = msg->getString(); uint8_t buttonId = msg->getU8(); buttonList.emplace_back(buttonId, value); @@ -2520,7 +2543,7 @@ void ProtocolGame::parseModalDialog(const InputMessagePtr& msg) const uint8_t sizeChoices = msg->getU8(); std::vector > choiceList; - for (auto i = 0; i < sizeChoices; ++i) { + for (int_fast32_t i = 0; i < sizeChoices; ++i) { const auto& value = msg->getString(); uint8_t choideId = msg->getU8(); choiceList.emplace_back(choideId, value); @@ -2578,7 +2601,7 @@ void ProtocolGame::parseCreaturesMark(const InputMessagePtr& msg) len = msg->getU8(); } - for (auto i = 0; i < len; ++i) { + for (int_fast32_t i = 0; i < len; ++i) { const uint32_t id = msg->getU32(); const bool isPermanent = msg->getU8() != 1; const uint8_t markType = msg->getU8(); @@ -2625,14 +2648,14 @@ void ProtocolGame::setMapDescription(const InputMessagePtr& msg, int x, int y, i } int skip = 0; - for (auto nz = startz; nz != endz + zstep; nz += zstep) + for (int_fast32_t nz = startz; nz != endz + zstep; nz += zstep) skip = setFloorDescription(msg, x, y, nz, width, height, z - nz, skip); } int ProtocolGame::setFloorDescription(const InputMessagePtr& msg, int x, int y, int z, int width, int height, int offset, int skip) { - for (auto nx = 0; nx < width; ++nx) { - for (auto ny = 0; ny < height; ++ny) { + for (int_fast32_t nx = 0; nx < width; ++nx) { + for (int_fast32_t ny = 0; ny < height; ++ny) { const Position tilePos(x + nx + offset, y + ny + offset, z); if (skip == 0) skip = setTileDescription(msg, tilePos); @@ -2650,7 +2673,7 @@ int ProtocolGame::setTileDescription(const InputMessagePtr& msg, Position positi g_map.cleanTile(position); bool gotEffect = false; - for (auto stackPos = 0; stackPos < 256; ++stackPos) { + for (int_fast32_t stackPos = 0; stackPos < 256; ++stackPos) { if (msg->peekU16() >= 0xff00) return msg->getU16() & 0xff; @@ -2723,8 +2746,20 @@ Outfit ProtocolGame::getOutfit(const InputMessagePtr& msg, bool parseMount/* = t msg->getU8(); //feet } outfit.setMount(mount); + } + if (g_game.getFeature(Otc::GameWingsAurasEffectsShader)) { + const uint16_t wings = msg->getU16(); + outfit.setWing(wings); + const uint16_t auras = msg->getU16(); + outfit.setAura(auras); + + const uint16_t effects = msg->getU16(); + outfit.setEffect(effects); + outfit.setShader(msg->getString()); + + } return outfit; } @@ -2928,7 +2963,7 @@ CreaturePtr ProtocolGame::getCreature(const InputMessagePtr& msg, int type) cons std::vector attachedEffectList; if (g_game.getFeature(Otc::GameCreatureAttachedEffect)) { uint8_t listSize = msg->getU8(); - for (auto i = -1; ++i < listSize;) + for (int_fast8_t i = -1; ++i < listSize;) attachedEffectList.push_back(msg->getU16()); } @@ -3017,41 +3052,40 @@ ItemPtr ProtocolGame::getItem(const InputMessagePtr& msg, int id) if (item->isContainer()) { if (g_game.getFeature(Otc::GameContainerTypes)) { - const uint8_t containerType = msg->getU8(); // container type - switch (containerType) { - case 2: // Content Counter - msg->getU32(); // ammo total - break; - case 4: // Loot Highlight - break; - case 9: // Manager - msg->getU32(); // loot flags - if (g_game.getClientVersion() >= 1332) { - msg->getU32(); // obtain flags - } - break; - case 11: // Quiver Loot - msg->getU32(); // loot flags - msg->getU32(); // ammo total - if (g_game.getClientVersion() >= 1332) { - msg->getU32(); // obtain flags - } - break; - default: - break; + // container flags + // 9: quick loot, 2: quiver, 4: unlooted corpse + const uint8_t containerType = msg->getU8(); + + if (containerType == 9) { + // quick loot categories + msg->getU32(); + if (g_game.getClientVersion() >= 1332) { + msg->getU32(); + } + } else if (containerType == 2) { + // quiver ammo count + msg->getU32(); } + + // corpse not looted yet + /* + if ((containerType & 4) != 0) { + // this flag has no bytes to parse + // draw effect 252 on top of the tile + } + */ } else { if (g_game.getFeature(Otc::GameThingQuickLoot)) { const bool hasQuickLootFlags = msg->getU8() != 0; if (hasQuickLootFlags) { - msg->getU32(); // loot flags + msg->getU32(); // quick loot flags } } if (g_game.getFeature(Otc::GameThingQuiver)) { const uint8_t hasQuiverAmmoCount = msg->getU8(); if (hasQuiverAmmoCount) { - msg->getU32(); // ammo total + msg->getU32(); // ammoTotal } } } @@ -3234,12 +3268,10 @@ void ProtocolGame::parseLootContainers(const InputMessagePtr& msg) { msg->getU8(); // quickLootFallbackToMainContainer ? 1 : 0 const uint8_t containers = msg->getU8(); - for (auto i = 0; i < containers; ++i) { - msg->getU8(); // category type - msg->getU16(); // loot container id - if (g_game.getClientVersion() >= 1332) { - msg->getU16(); // obtainer container id - } + for (int_fast32_t i = 0; i < containers; ++i) { + msg->getU8(); // category + msg->getU16(); // lootContainerId + msg->getU16(); // obtainContainerId } } @@ -3247,7 +3279,7 @@ void ProtocolGame::parseSupplyStash(const InputMessagePtr& msg) { const uint16_t size = msg->getU16(); std::vector> stashItems; - for (auto i = 0; i < size; ++i) { + for (int_fast32_t i = 0; i < size; ++i) { uint16_t itemId = msg->getU16(); uint32_t amount = msg->getU32(); stashItems.push_back({ itemId, amount }); @@ -3340,7 +3372,7 @@ void ProtocolGame::parseBlessDialog(const InputMessagePtr& msg) const uint8_t totalBless = msg->getU8(); // total bless // parse each bless - for (auto i = 0; i < totalBless; i++) { + for (int_fast32_t i = 0; i < totalBless; i++) { msg->getU16(); // bless bit wise msg->getU8(); // player bless count msg->getU8(); // store? @@ -3359,7 +3391,7 @@ void ProtocolGame::parseBlessDialog(const InputMessagePtr& msg) // parse log const uint8_t logCount = msg->getU8(); // log count - for (auto i = 0; i < logCount; i++) { + for (int_fast32_t i = 0; i < logCount; i++) { msg->getU32(); // timestamp msg->getU8(); // color message (0 = white loss, 1 = red) msg->getString(); // history message @@ -3395,7 +3427,7 @@ void ProtocolGame::parseItemsPrice(const InputMessagePtr& msg) { const uint16_t priceCount = msg->getU16(); // count - for (auto i = 0; i < priceCount; i++) { + for (int_fast32_t i = 0; i < priceCount; i++) { const uint16_t itemId = msg->getU16(); // item client id if (g_game.getClientVersion() >= 1281) { const auto& item = Item::create(itemId); @@ -3532,7 +3564,7 @@ void ProtocolGame::parseRewardHistory(const InputMessagePtr& msg) { const uint8_t historyCount = msg->getU8(); // history count - for (auto i = 0; i < historyCount; i++) { + for (int_fast32_t i = 0; i < historyCount; i++) { msg->getU32(); // timestamp msg->getU8(); // is Premium msg->getString(); // description @@ -3770,7 +3802,7 @@ void ProtocolGame::parseMarketEnter(const InputMessagePtr& msg) const uint8_t offers = msg->getU8(); std::vector> depotItems; const uint16_t itemsSent = msg->getU16(); - for (auto i = 0; i < itemsSent; i++) { + for (int_fast32_t i = 0; i < itemsSent; i++) { const uint16_t itemId = msg->getU16(); const ItemPtr& item = Item::create(itemId); const uint16_t classification = item->getClassification(); @@ -3796,7 +3828,7 @@ void ProtocolGame::parseMarketEnterOld(const InputMessagePtr& msg) const uint16_t itemsSent = msg->getU16(); std::unordered_map depotItems; - for (auto i = 0; i < itemsSent; i++) { + for (int_fast32_t i = 0; i < itemsSent; i++) { const uint16_t itemId = msg->getU16(); const uint16_t count = msg->getU16(); depotItems.emplace(itemId, count); @@ -3841,7 +3873,7 @@ void ProtocolGame::parseMarketDetail(const InputMessagePtr& msg) std::vector> purchaseStats; uint8_t count = msg->getU8(); - for (auto i = -1; ++i < count;) { + for (int_fast32_t i = -1; ++i < count;) { uint32_t transactions = msg->getU32(); uint64_t totalPrice = 0; uint64_t highestPrice = 0; @@ -3863,7 +3895,7 @@ void ProtocolGame::parseMarketDetail(const InputMessagePtr& msg) std::vector> saleStats; count = msg->getU8(); - for (auto i = -1; ++i < count;) { + for (int_fast32_t i = -1; ++i < count;) { uint32_t transactions = msg->getU32(); uint64_t totalPrice = 0; uint64_t highestPrice = 0; @@ -4022,7 +4054,7 @@ void ProtocolGame::parseBosstiarySlots(const InputMessagePtr& msg) { if (bossesUnlocked) { const uint16_t bossesUnlockedSize = msg->getU16(); - for (auto i = 0; i < bossesUnlockedSize; ++i) { + for (uint_fast16_t i = 0; i < bossesUnlockedSize; ++i) { msg->getU32(); // bossId msg->getU8(); // bossRace } @@ -4031,7 +4063,7 @@ void ProtocolGame::parseBosstiarySlots(const InputMessagePtr& msg) { void ProtocolGame::parseBosstiaryCooldownTimer(const InputMessagePtr& msg) { const uint16_t bossesOnTrackerSize = msg->getU16(); - for (auto i = 0; i < bossesOnTrackerSize; ++i) { + for (uint_fast16_t i = 0; i < bossesOnTrackerSize; ++i) { msg->getU32(); // bossRaceId msg->getU64(); // Boss cooldown in seconds } diff --git a/src/client/protocolgamesend.cpp b/src/client/protocolgamesend.cpp index 5288c4432b..76475fd2f2 100644 --- a/src/client/protocolgamesend.cpp +++ b/src/client/protocolgamesend.cpp @@ -776,6 +776,12 @@ void ProtocolGame::sendChangeOutfit(const Outfit& outfit) msg->addU16(0x00); //familiars msg->addU8(0x00); //randomizeMount } + if (g_game.getFeature(Otc::GameWingsAurasEffectsShader)) { + msg->addU16(outfit.getWing()); // wings + msg->addU16(outfit.getAura()); // auras + msg->addU16(outfit.getEffect()); // effects + msg->addString(outfit.getShader()); // shader + } send(msg); } diff --git a/src/client/uicreature.cpp b/src/client/uicreature.cpp index 5e6ec8e1c9..da1934cd47 100644 --- a/src/client/uicreature.cpp +++ b/src/client/uicreature.cpp @@ -31,7 +31,7 @@ void UICreature::drawSelf(DrawPoolType drawPane) if (m_creature) { m_creature->setMarked(m_imageColor); - m_creature->draw(getPaddingRect(), m_creatureSize); + m_creature->draw(getPaddingRect(), m_creatureSize, m_center); } } @@ -48,7 +48,9 @@ void UICreature::onStyleApply(const std::string_view styleName, const OTMLNodePt UIWidget::onStyleApply(styleName, styleNode); for (const auto& node : styleNode->children()) { - if (node->tag() == "creature-size") { + if (node->tag() == "creature-center") { + m_center = node->value(); + } else if (node->tag() == "creature-size") { m_creatureSize = node->value(); } else if (node->tag() == "outfit-id") { auto outfit = getOutfit(); diff --git a/src/client/uicreature.h b/src/client/uicreature.h index 8bd1922af2..512ed630ea 100644 --- a/src/client/uicreature.h +++ b/src/client/uicreature.h @@ -38,9 +38,32 @@ class UICreature : public UIWidget uint8_t getCreatureSize() { return m_creatureSize; } void setCreatureSize(uint8_t size) { m_creatureSize = size; } + void setCenter(bool v) { m_center = v; } + bool isCentered() { return m_center; } + + /* + // @ note: + this did not work: + UIcreature:getCreature():getDirection() + UIcreature:getDirection() + in game_outfit + function updatePreview() + local direction = previewCreature:getDirection() + + plan b: + */ + Otc::Direction getDirection() { + if (m_creature != nullptr) { + return m_creature->getDirection(); + } else { + return Otc::InvalidDirection; + } + } + // @ protected: void onStyleApply(const std::string_view styleName, const OTMLNodePtr& styleNode) override; Outfit getOutfit() { if (!m_creature) setOutfit({}); return m_creature->getOutfit(); } CreaturePtr m_creature; uint8_t m_creatureSize{ 0 }; + bool m_center{ false }; }; diff --git a/src/framework/core/config.h b/src/framework/core/config.h index 535c57a2f7..b31fdcf803 100644 --- a/src/framework/core/config.h +++ b/src/framework/core/config.h @@ -37,7 +37,6 @@ class Config : public LuaObject bool unload(); bool save(); void clear() const; - void setValue(const std::string& key, const std::string& value); void setList(const std::string& key, const std::vector& list); std::string getValue(const std::string& key); diff --git a/src/framework/luaengine/luainterface.cpp b/src/framework/luaengine/luainterface.cpp index 7c79bc8a0f..6440a7480f 100644 --- a/src/framework/luaengine/luainterface.cpp +++ b/src/framework/luaengine/luainterface.cpp @@ -1321,6 +1321,17 @@ int LuaInterface::getTop() const return lua_gettop(L); } +std::string LuaInterface::getSource(int level) +{ + lua_Debug ar; + ar.short_src[0] = 0; + ar.currentline = 0; + if (lua_getstack(L, level, &ar) == 1) { + lua_getinfo(L, "Sl", &ar); + } + return std::string(ar.short_src) + ":" + std::to_string(ar.currentline); +} + void LuaInterface::loadFiles(const std::string& directory, bool recursive, const std::string& contains) { for (const std::string& fileName : g_resources.listDirectoryFiles(directory)) { diff --git a/src/framework/luaengine/luainterface.h b/src/framework/luaengine/luainterface.h index c64671a15f..9d45d39ea1 100644 --- a/src/framework/luaengine/luainterface.h +++ b/src/framework/luaengine/luainterface.h @@ -356,6 +356,8 @@ class LuaInterface void clearStack() { pop(stackSize()); } bool hasIndex(int index) { return (stackSize() >= (index < 0 ? -index : index) && index != 0); } + std::string getSource(int level = 2); + void loadFiles(const std::string& directory, bool recursive = false, const std::string& contains = ""); /// Pushes any type onto the stack diff --git a/src/framework/luafunctions.cpp b/src/framework/luafunctions.cpp index d87b3f68cd..99f8fbc721 100644 --- a/src/framework/luafunctions.cpp +++ b/src/framework/luafunctions.cpp @@ -561,6 +561,7 @@ void Application::registerLuaFunctions() g_lua.bindClassMemberFunction("intersectsMargin", &UIWidget::intersectsMargin); g_lua.bindClassMemberFunction("intersectsPadding", &UIWidget::intersectsPadding); g_lua.bindClassMemberFunction("getId", &UIWidget::getId); + g_lua.bindClassMemberFunction("getSource", &UIWidget::getSource); g_lua.bindClassMemberFunction("getParent", &UIWidget::getParent); g_lua.bindClassMemberFunction("getFocusedChild", &UIWidget::getFocusedChild); g_lua.bindClassMemberFunction("getHoveredChild", &UIWidget::getHoveredChild); diff --git a/src/framework/ui/uiwidget.cpp b/src/framework/ui/uiwidget.cpp index 0cccf5d672..a976f7f977 100644 --- a/src/framework/ui/uiwidget.cpp +++ b/src/framework/ui/uiwidget.cpp @@ -35,6 +35,16 @@ UIWidget::UIWidget() { + m_source = g_lua.getSource(2); + int level = 3; + while((m_source.find("corelib") != std::string::npos || m_source.find("gamelib") != std::string::npos + || m_source.find("game_bot/functions/ui") != std::string::npos || m_source.find("[C]") != std::string::npos) && level < 8) { + std::string tmp_src = g_lua.getSource(level); + if (tmp_src.length() <= 3) break; + m_source = tmp_src; + level += 1; + } + setProp(PropEnabled, true, false); setProp(PropVisible, true, false); setProp(PropFocusable, true, false); @@ -879,7 +889,7 @@ void UIWidget::internalDestroy() void UIWidget::destroy() { if (isDestroyed()) - g_logger.warning(stdext::format("attempt to destroy widget '%s' two times", m_id)); + g_logger.warning(stdext::format("attempt to destroy widget '%s' (%s) two times", m_id, m_source)); // hold itself reference const UIWidgetPtr self = static_self_cast(); diff --git a/src/framework/ui/uiwidget.h b/src/framework/ui/uiwidget.h index 96ac7bc560..d555599b4d 100644 --- a/src/framework/ui/uiwidget.h +++ b/src/framework/ui/uiwidget.h @@ -90,6 +90,7 @@ class UIWidget : public LuaObject friend class UIManager; std::string m_id; + std::string m_source; int16_t m_childIndex{ -1 }; Rect m_rect; @@ -324,6 +325,7 @@ class UIWidget : public LuaObject bool intersectsPadding(const Rect rect) { return getPaddingRect().intersects(rect); } std::string getId() { return m_id; } + std::string getSource() { return m_source; } UIWidgetPtr getParent() { return m_parent; } UIWidgetPtr getFocusedChild() { return m_focusedChild; } UIWidgetPtr getHoveredChild(); diff --git a/tools/api/status.php b/tools/api/status.php new file mode 100644 index 0000000000..b6d97cc863 --- /dev/null +++ b/tools/api/status.php @@ -0,0 +1,154 @@ +type; + +// TOP MENU function EnterGame.postCacheInfo() + +if ($requestType === 'cacheinfo') { + if (function_exists('curl_init')) { + try { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, "https://otarchive.com/server/62cde2f41770eac22ec6ad19"); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_ENCODING, ""); + + $site = curl_exec($ch); + curl_close($ch); + + preg_match('/Informed Players (\d+) \(\d+\)/', $site, $matches); + + $doc = new DOMDocument(); + @$doc->loadHTML($site); + + $xpath = new DOMXPath($doc); + + + $thElement = $xpath->query('//th[contains(text(), "Informed Players")]')->item(0); + if ($thElement) { + + $tdElement = $thElement->nextSibling; + if ($tdElement && $tdElement->nodeName === 'td') { + $playersOnlineText = $tdElement->nodeValue; + + if (preg_match('/(\d+)/', $playersOnlineText, $matches)) { + $playersOnline = $matches[1]; + } + } + } + $playersOnline = $matches[1]; + } catch (Exception $e) { + } + } else { + + $site = file_get_contents("https://otarchive.com/server/62cde2f41770eac22ec6ad19"); + + preg_match('/Informed Players (\d+) \(\d+\)/', $site, $matches); + + $doc = new DOMDocument(); + @$doc->loadHTML($site); + + $xpath = new DOMXPath($doc); + + $thElement = $xpath->query('//th[contains(text(), "Informed Players")]')->item(0); + if ($thElement) { + + $tdElement = $thElement->nextSibling; + if ($tdElement && $tdElement->nodeName === 'td') { + $playersOnlineText = $tdElement->nodeValue; + + if (preg_match('/(\d+)/', $playersOnlineText, $matches)) { + $playersOnline = $matches[1]; + } + } + } + $playersOnline = $matches[1]; + } + + + $online_discord = 0; + try { + $online_discord = json_decode(file_get_contents("https://discordapp.com/api/guilds/628769144925585428/widget.json"))->presence_count; + } catch (Exception $e) { + } + + $response = array( + "playersonline" => "$playersOnline", + "discord_online" => $online_discord, + "discord_link" => "https://discord.gg/HZN8yJJSyC", + "youtube_link" => "https://www.youtube.com/watch?v=6_2zizoJKxQ", + "gamingyoutubestreams" => "0", + "gamingyoutubeviewer" => "0", + "test" => $requestType, + ); + echo json_encode($response); + + // TOP MENU function EnterGame.postEventScheduler() + +} elseif ($requestType === 'eventschedule') { + // TEST + $eventSchedulerCalendar = array( + array( + "startdate" => strtotime("2024-03-20"), + "enddate" => strtotime("2024-03-25"), + "colorlight" => "#FF0000", + "colordark" => "#800000", + "description" => "Descripcion del evento 1", + "displaypriority" => 1, + "isseasonal" => true, + "name" => "Evento 1", + "specialevent" => true + ), + array( + "startdate" => strtotime("2024-04-01"), + "enddate" => strtotime("2024-04-05"), + "colorlight" => "#00FF00", + "colordark" => "#008000", + "description" => "Descripcion del evento 2", + "displaypriority" => 2, + "isseasonal" => false, + "name" => "Evento 2", + "specialevent" => false + ) + ); + + $response = array( + "lastupdatetimestamp" => time(), + "eventlist" => $eventSchedulerCalendar, + ); + echo json_encode($response); +} + +//EnterGame.postShowOff() +elseif ($requestType === 'showoff') { + + $response = array( + "image" => "https://raw.githubusercontent.com/mehah/otclient/main/data/images/clienticon.png", + "title" => "OTClient - Redemption", + "description" => "Otclient is an alternative Tibia client for usage with otserv. It aims to be complete and flexible, for that it uses LUA scripting for all game interface functionality and configurations files with a syntax similar to CSS for the client interface design." + ); + echo json_encode($response); + + // EnterGame.postShowCreatureBoost() +} elseif ($requestType === 'Creatureboost') { + + + $response = array( + "creature" => array( + "type" => 222 + ), + "boss" => array( + "type" => 232 + ) + ); + echo json_encode($response); +} else { + http_response_code(504); +} +?> \ No newline at end of file From 10954a70155e39bc95135539013490860258e6f4 Mon Sep 17 00:00:00 2001 From: Luan Luciano Date: Sun, 23 Jun 2024 20:07:20 -0300 Subject: [PATCH 2/9] fix: 13.32 compatibility tweaks (#789) --- modules/gamelib/const.lua | 2 +- src/client/const.h | 5 +- src/client/protocolgameparse.cpp | 309 +++++++++++++++++-------------- 3 files changed, 172 insertions(+), 144 deletions(-) diff --git a/modules/gamelib/const.lua b/modules/gamelib/const.lua index bac993a1c9..e342503d9f 100644 --- a/modules/gamelib/const.lua +++ b/modules/gamelib/const.lua @@ -198,7 +198,7 @@ GameEnterGameShowAppearance = 114 GameSmoothWalkElevation = 115 GameNegativeOffset = 116 GameItemTooltipV8 = 117 -GameWingsAurasEffectsShader = 118 -- note: change to 117 if not approved GameItemTooltipV8 +GameWingsAurasEffectsShader = 118 GameForgeConvergence = 119 TextColors = { diff --git a/src/client/const.h b/src/client/const.h index c78ba51f95..f8aaaecee4 100644 --- a/src/client/const.h +++ b/src/client/const.h @@ -144,6 +144,7 @@ namespace Otc Fatal, Dodge, Momentum, + Transcendence, LastSkill }; @@ -545,9 +546,9 @@ namespace Otc GameSmoothWalkElevation = 115, GameNegativeOffset = 116, GameItemTooltipV8 = 117, - GameWingsAurasEffectsShader = 118, // note: change to 117 if not approved GameItemTooltipV8 + GameWingsAurasEffectsShader = 118, GameForgeConvergence = 119, - LastGameFeature = 120 + LastGameFeature }; enum MagicEffectsType_t : uint8_t diff --git a/src/client/protocolgameparse.cpp b/src/client/protocolgameparse.cpp index e5fce22499..c042d196cf 100644 --- a/src/client/protocolgameparse.cpp +++ b/src/client/protocolgameparse.cpp @@ -692,12 +692,9 @@ void ProtocolGame::parseResourceBalance(const InputMessagePtr& msg) const void ProtocolGame::parseWorldTime(const InputMessagePtr& msg) { - const auto hour = msg->getU8(); const auto min = msg->getU8(); -// note: needs mehah approval g_lua.callGlobalField("g_game", "onChangeWorldTime", hour, min); -// } void ProtocolGame::parseStore(const InputMessagePtr& msg) const @@ -705,7 +702,7 @@ void ProtocolGame::parseStore(const InputMessagePtr& msg) const parseCoinBalance(msg); const uint8_t categories = msg->getU16(); - for (int_fast32_t i = -1; ++i < categories;) { + for (auto i = -1; ++i < categories;) { msg->getString(); // category msg->getString(); // description @@ -714,7 +711,7 @@ void ProtocolGame::parseStore(const InputMessagePtr& msg) const std::vector icons; const uint8_t iconCount = msg->getU8(); - for (int_fast32_t j = -1; ++j < iconCount; ) { + for (auto j = -1; ++j < iconCount; ) { icons.push_back(msg->getString()); } @@ -778,7 +775,7 @@ void ProtocolGame::parseStoreTransactionHistory(const InputMessagePtr& msg) cons } const uint8_t entries = msg->getU8(); - for (int_fast32_t i = -1; ++i < entries;) { + for (auto i = -1; ++i < entries;) { uint16_t time = msg->getU16(); uint8_t productType = msg->getU8(); uint32_t coinChange = msg->getU32(); @@ -792,7 +789,7 @@ void ProtocolGame::parseStoreOffers(const InputMessagePtr& msg) msg->getString(); // categoryName const uint16_t offers = msg->getU16(); - for (int_fast32_t i = -1; ++i < offers;) { + for (auto i = -1; ++i < offers;) { msg->getU32(); // offerId msg->getString(); // offerName msg->getString(); // offerDescription @@ -811,17 +808,17 @@ void ProtocolGame::parseStoreOffers(const InputMessagePtr& msg) std::vector icons; const uint8_t iconCount = msg->getU8(); - for (int_fast32_t j = -1; ++j < iconCount;) { + for (auto j = -1; ++j < iconCount;) { icons.emplace_back(msg->getString()); } const uint16_t subOffers = msg->getU16(); - for (int_fast32_t j = -1; ++j < subOffers;) { + for (auto j = -1; ++j < subOffers;) { msg->getString(); // name msg->getString(); // description const uint8_t subIcons = msg->getU8(); - for (int_fast32_t k = -1; ++k < subIcons;) { + for (auto k = -1; ++k < subIcons;) { msg->getString(); // icon } msg->getString(); // serviceType @@ -880,7 +877,7 @@ void ProtocolGame::parseGMActions(const InputMessagePtr& msg) else numViolationReasons = 32; - for (int_fast32_t i = -1; ++i < numViolationReasons;) + for (auto i = -1; ++i < numViolationReasons;) actions.push_back(msg->getU8()); g_game.processGMActions(actions); @@ -1129,15 +1126,22 @@ void ProtocolGame::parseOpenContainer(const InputMessagePtr& msg) const uint8_t itemCount = msg->getU8(); std::vector items(itemCount); - for (int_fast32_t i = -1; ++i < itemCount;) + for (auto i = -1; ++i < itemCount;) items[i] = getItem(msg); if (g_game.getFeature(Otc::GameContainerFilter)) { - msg->getU8(); - const uint8_t listSize = msg->getU8(); - for (int_fast8_t i = -1; ++i < listSize;) { + // Check if container is store inbox id + if (containerItem->getId() == 23396) { + msg->getU8(); + const uint8_t listSize = msg->getU8(); + for (auto i = -1; ++i < listSize;) { + msg->getU8(); + msg->getString(); + } + } else { + // Parse store inbox category empty + msg->getU8(); msg->getU8(); - msg->getString(); } } @@ -1225,7 +1229,7 @@ void ProtocolGame::parseOpenNpcTrade(const InputMessagePtr& msg) else listCount = msg->getU8(); - for (int_fast32_t i = -1; ++i < listCount;) { + for (auto i = -1; ++i < listCount;) { const uint16_t itemId = msg->getU16(); const uint8_t count = msg->getU8(); @@ -1259,7 +1263,7 @@ void ProtocolGame::parsePlayerGoods(const InputMessagePtr& msg) const } const uint8_t size = msg->getU8(); - for (int_fast32_t i = -1; ++i < size;) { + for (auto i = -1; ++i < size;) { const uint16_t itemId = msg->getU16(); uint16_t amount; @@ -1282,7 +1286,7 @@ void ProtocolGame::parseOwnTrade(const InputMessagePtr& msg) const uint8_t count = msg->getU8(); std::vector items(count); - for (int_fast32_t i = -1; ++i < count;) + for (auto i = -1; ++i < count;) items[i] = getItem(msg); Game::processOwnTrade(name, items); @@ -1294,7 +1298,7 @@ void ProtocolGame::parseCounterTrade(const InputMessagePtr& msg) const uint8_t count = msg->getU8(); std::vector items(count); - for (int_fast32_t i = -1; ++i < count; ) + for (auto i = -1; ++i < count; ) items[i] = getItem(msg); Game::processCounterTrade(name, items); @@ -1455,12 +1459,12 @@ void ProtocolGame::parseDistanceMissile(const InputMessagePtr& msg) void ProtocolGame::parseItemClasses(const InputMessagePtr& msg) { const uint8_t classSize = msg->getU8(); - for (int_fast8_t i = 0; i < classSize; i++) { + for (auto i = 0; i < classSize; i++) { msg->getU8(); // class id // tiers const uint8_t tiersSize = msg->getU8(); - for (int_fast8_t j = 0; j < tiersSize; j++) { + for (auto j = 0; j < tiersSize; j++) { msg->getU8(); // tier id msg->getU64(); // upgrade cost } @@ -1468,20 +1472,22 @@ void ProtocolGame::parseItemClasses(const InputMessagePtr& msg) if (g_game.getFeature(Otc::GameDynamicForgeVariables)) { const uint8_t grades = msg->getU8(); - for (int_fast8_t i = 0; i < grades; i++) { + for (auto i = 0; i < grades; i++) { msg->getU8(); // Tier msg->getU8(); // Exalted cores } if (g_game.getFeature(Otc::GameForgeConvergence)) { - const uint8_t convergenceFusionSize = msg->getU8(); - for (int_fast8_t i = 0; i < convergenceFusionSize; i++) { + // Convergence fusion prices per tier + const uint8_t totalConvergenceFusion = msg->getU8(); // total size count + for (auto i = 0; i < totalConvergenceFusion; i++) { msg->getU8(); // tier id msg->getU64(); // upgrade cost } - const uint8_t convergenceTransferSize = msg->getU8(); - for (int_fast8_t i = 0; i < convergenceTransferSize; i++) { + // Convergence transfer prices per tier + const uint8_t totalConvergenceTransfer = msg->getU8(); // total size count + for (auto i = 0; i < totalConvergenceTransfer; i++) { msg->getU8(); // tier id msg->getU64(); // upgrade cost } @@ -1493,19 +1499,28 @@ void ProtocolGame::parseItemClasses(const InputMessagePtr& msg) msg->getU8(); // Dust Percent Upgrade msg->getU16(); // Max Dust msg->getU16(); // Max Dust Cap - msg->getU8(); // Dust Fusion + msg->getU8(); // Dust Normal Fusion if (g_game.getFeature(Otc::GameForgeConvergence)) { - msg->getU8(); // Convergence Fusion + msg->getU8(); // Dust Convergence Fusion } - msg->getU8(); // Dust Transfer + msg->getU8(); // Dust Normal Transfer if (g_game.getFeature(Otc::GameForgeConvergence)) { - msg->getU8(); // Convergence Transfer + msg->getU8(); // Dust Convergence Transfer } msg->getU8(); // Chance Base msg->getU8(); // Chance Improved msg->getU8(); // Reduce Tier Loss } else { - for (int_fast8_t i = 1; i <= 11; i++) { + uint8_t totalForgeValues = 13; + if (g_game.getFeature(Otc::GameForgeConvergence)) { + totalForgeValues++; + } + + if (g_game.getFeature(Otc::GameForgeConvergence)) { + totalForgeValues++; + } + + for (auto i = 1; i <= totalForgeValues; i++) { msg->getU8(); // Forge values } } @@ -1530,7 +1545,7 @@ void ProtocolGame::parseTrappers(const InputMessagePtr& msg) if (numTrappers > 8) g_logger.traceError("too many trappers"); - for (int_fast32_t i = 0; i < numTrappers; ++i) { + for (auto i = 0; i < numTrappers; ++i) { const uint32_t id = msg->getU32(); if (const auto& creature = g_map.getCreatureById(id)) { //TODO: set creature as trapper @@ -1681,7 +1696,7 @@ void ProtocolGame::parsePremiumTrigger(const InputMessagePtr& msg) const uint8_t triggerCount = msg->getU8(); std::vector triggers; - for (int_fast32_t i = 0; i < triggerCount; ++i) { + for (auto i = 0; i < triggerCount; ++i) { triggers.push_back(msg->getU8()); } @@ -1703,7 +1718,7 @@ void ProtocolGame::parsePlayerInfo(const InputMessagePtr& msg) const const uint16_t spellCount = msg->getU16(); std::vector spells; - for (int_fast32_t i = 0; i < spellCount; ++i) { + for (auto i = 0; i < spellCount; ++i) { if (g_game.getFeature(Otc::GameUshortSpell)) { spells.push_back(msg->getU16()); // spell id } else { @@ -1893,10 +1908,8 @@ void ProtocolGame::parsePlayerSkills(const InputMessagePtr& msg) const } if (g_game.getFeature(Otc::GameAdditionalSkills)) { - // Critical, Life Leech, Mana Leech, Dodge, Fatal, Momentum have no level percent, nor loyalty bonus - - const uint8_t lastSkill = g_game.getClientVersion() >= 1281 ? Otc::LastSkill : Otc::ManaLeechAmount + 1; - for (int_fast32_t skill = Otc::CriticalChance; skill < lastSkill; ++skill) { + // Critical, Life Leech, Mana Leech + for (int_fast32_t skill = Otc::CriticalChance; skill <= Otc::ManaLeechAmount; ++skill) { if (!g_game.getFeature(Otc::GameLeechAmount)) { if (skill == Otc::LifeLeechAmount || skill == Otc::ManaLeechAmount) { continue; @@ -1916,10 +1929,12 @@ void ProtocolGame::parsePlayerSkills(const InputMessagePtr& msg) const if (g_game.getClientVersion() >= 1281) { // forge skill stats - const uint8_t slots = g_game.getClientVersion() >= 1332 ? 4 : 3; // 1281: CONST_SLOT_LEFT, CONST_SLOT_ARMOR, CONST_SLOT_HEAD, 1332: CONST_SLOT_LEGS - for (int_fast32_t i = 0; i < slots; ++i) { - msg->getU16(); // skill - msg->getU16(); // skill + const uint8_t lastSkill = g_game.getClientVersion() >= 1332 ? Otc::LastSkill : Otc::Momentum + 1; + for (int_fast32_t skill = Otc::Fatal; skill < lastSkill; ++skill) { + const uint16_t level = msg->getU16(); + const uint16_t baseLevel = msg->getU16(); + m_localPlayer->setSkill(static_cast(skill), level, 0); + m_localPlayer->setBaseSkill(static_cast(skill), baseLevel); } // bonus cap @@ -1937,7 +1952,7 @@ void ProtocolGame::parsePlayerState(const InputMessagePtr& msg) const if (g_game.getClientVersion() >= 1281) { states = msg->getU32(); if (g_game.getFeature(Otc::GamePlayerStateCounter)) - msg->getU8(); + msg->getU8(); // icons counter } else { if (g_game.getFeature(Otc::GamePlayerStateU16)) states = msg->getU16(); @@ -2061,7 +2076,7 @@ void ProtocolGame::parseChannelList(const InputMessagePtr& msg) { const uint8_t count = msg->getU8(); std::vector > channelList; - for (int_fast32_t i = 0; i < count; ++i) { + for (auto i = 0; i < count; ++i) { const uint16_t id = msg->getU16(); const auto& name = msg->getString(); channelList.emplace_back(id, name); @@ -2077,10 +2092,10 @@ void ProtocolGame::parseOpenChannel(const InputMessagePtr& msg) if (g_game.getFeature(Otc::GameChannelPlayerList)) { const uint16_t joinedPlayers = msg->getU16(); - for (int_fast32_t i = 0; i < joinedPlayers; ++i) + for (auto i = 0; i < joinedPlayers; ++i) g_game.formatCreatureName(msg->getString()); // player name const uint16_t invitedPlayers = msg->getU16(); - for (int_fast32_t i = 0; i < invitedPlayers; ++i) + for (auto i = 0; i < invitedPlayers; ++i) g_game.formatCreatureName(msg->getString()); // player name } @@ -2133,6 +2148,8 @@ void ProtocolGame::parseTextMessage(const InputMessagePtr& msg) const Otc::MessageMode mode = Proto::translateMessageModeFromServer(code); std::string text; + g_logger.debug(stdext::format("[parseTextMessage] code: %d, mode: %d", code, mode)); + switch (mode) { case Otc::MessageChannelManagement: msg->getU16(); // channelId @@ -2163,7 +2180,7 @@ void ProtocolGame::parseTextMessage(const InputMessagePtr& msg) color[1] = msg->getU8(); text = msg->getString(); - for (int_fast32_t i = 0; i < 2; ++i) { + for (auto i = 0; i < 2; ++i) { if (value[i] == 0) continue; @@ -2198,10 +2215,13 @@ void ProtocolGame::parseTextMessage(const InputMessagePtr& msg) throw Exception("unknown message mode %d", mode); break; default: - text = msg->getString(); break; } + if (text.empty()) { + text = msg->getString(); + } + Game::processTextMessage(mode, text); } @@ -2227,7 +2247,7 @@ void ProtocolGame::parseFloorChangeUp(const InputMessagePtr& msg) int skip = 0; if (pos.z == g_gameConfig.getMapSeaFloor()) - for (int_fast32_t i = g_gameConfig.getMapSeaFloor() - g_gameConfig.getMapAwareUndergroundFloorRange(); i >= 0; --i) + for (auto i = g_gameConfig.getMapSeaFloor() - g_gameConfig.getMapAwareUndergroundFloorRange(); i >= 0; --i) skip = setFloorDescription(msg, pos.x - range.left, pos.y - range.top, i, range.horizontal(), range.vertical(), 8 - i, skip); else if (pos.z > g_gameConfig.getMapSeaFloor()) setFloorDescription(msg, pos.x - range.left, pos.y - range.top, pos.z - g_gameConfig.getMapAwareUndergroundFloorRange(), range.horizontal(), range.vertical(), 3, skip); @@ -2278,7 +2298,7 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg) const if (g_game.getFeature(Otc::GameNewOutfitProtocol)) { const uint16_t outfitCount = g_game.getClientVersion() >= 1281 ? msg->getU16() : msg->getU8(); - for (int_fast32_t i = 0; i < outfitCount; ++i) { + for (auto i = 0; i < outfitCount; ++i) { uint16_t outfitId = msg->getU16(); const auto& outfitName = msg->getString(); uint8_t outfitAddons = msg->getU8(); @@ -2303,14 +2323,15 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg) const outfitEnd = msg->getU8(); } - for (int_fast32_t i = outfitStart; i <= outfitEnd; ++i) + for (auto i = outfitStart; i <= outfitEnd; ++i) outfitList.emplace_back(i, "", 0); } std::vector > mountList; + if (g_game.getFeature(Otc::GamePlayerMounts)) { const uint16_t mountCount = g_game.getClientVersion() >= 1281 ? msg->getU16() : msg->getU8(); - for (int_fast32_t i = 0; i < mountCount; ++i) { + for (auto i = 0; i < mountCount; ++i) { const uint16_t mountId = msg->getU16(); // mount type const auto& mountName = msg->getString(); // mount name @@ -2325,42 +2346,9 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg) const } } - std::vector > wingList; - std::vector > auraList; - std::vector > effectList; - std::vector > shaderList; - if (g_game.getFeature(Otc::GameWingsAurasEffectsShader)) { - int wingCount = msg->getU8(); - for (int i = 0; i < wingCount; ++i) { - int wingId = msg->getU16(); - std::string wingName = msg->getString(); - wingList.push_back(std::make_tuple(wingId, wingName)); - } - int auraCount = msg->getU8(); - for (int i = 0; i < auraCount; ++i) { - int auraId = msg->getU16(); - std::string auraName = msg->getString(); - auraList.push_back(std::make_tuple(auraId, auraName)); - } - int effectCount = msg->getU8(); - for (int i = 0; i < effectCount; ++i) { - int effectId = msg->getU16(); - std::string effectName = msg->getString(); - effectList.push_back(std::make_tuple(effectId, effectName)); - } - int shaderCount = msg->getU8(); - for (int i = 0; i < shaderCount; ++i) { - int shaderId = msg->getU16(); - std::string shaderName = msg->getString(); - shaderList.push_back(std::make_tuple(shaderId, shaderName)); - } - - } - - if (g_game.getClientVersion() >= 1281) { const uint16_t familiarCount = msg->getU16(); - for (int_fast32_t i = 0; i < familiarCount; ++i) { + for (auto i = 0; i < familiarCount; ++i) { msg->getU16(); // familiar lookType msg->getString(); // familiar name const uint8_t familiarMode = msg->getU8(); // 0x00 // mode: 0x00 - available, 0x01 store (requires U32 store offerId) @@ -2374,6 +2362,41 @@ void ProtocolGame::parseOpenOutfitWindow(const InputMessagePtr& msg) const msg->getU8(); // randomize mount (bool) } + std::vector > wingList; + std::vector > auraList; + std::vector > effectList; + std::vector > shaderList; + + if (g_game.getFeature(Otc::GameWingsAurasEffectsShader)) { + const uint8_t wingCount = msg->getU8(); + for (auto i = 0; i < wingCount; ++i) { + const uint16_t wingId = msg->getU16(); + const auto& wingName = msg->getString(); + wingList.emplace_back(wingId, wingName); + } + + const uint8_t auraCount = msg->getU8(); + for (auto i = 0; i < auraCount; ++i) { + const uint16_t auraId = msg->getU16(); + const auto& auraName = msg->getString(); + auraList.emplace_back(auraId, auraName); + } + + const uint8_t effectCount = msg->getU8(); + for (auto i = 0; i < effectCount; ++i) { + const uint16_t effectId = msg->getU16(); + const auto& effectName = msg->getString(); + effectList.emplace_back(effectId, effectName); + } + + const uint8_t shaderCount = msg->getU8(); + for (auto i = 0; i < shaderCount; ++i) { + const uint16_t shaderId = msg->getU16(); + const auto& shaderName = msg->getString(); + shaderList.emplace_back(shaderId, shaderName); + } + } + g_game.processOpenOutfitWindow(currentOutfit, outfitList, mountList, wingList, auraList, effectList, shaderList); } @@ -2384,7 +2407,7 @@ void ProtocolGame::parseKillTracker(const InputMessagePtr& msg) // corpse items const uint8_t size = msg->getU8(); - for (int_fast32_t i = 0; i < size; i++) { + for (auto i = 0; i < size; i++) { getItem(msg); } } @@ -2468,7 +2491,7 @@ void ProtocolGame::parseQuestLog(const InputMessagePtr& msg) { std::vector > questList; const uint16_t questsCount = msg->getU16(); - for (int_fast32_t i = 0; i < questsCount; ++i) { + for (auto i = 0; i < questsCount; ++i) { uint16_t id = msg->getU16(); const auto& name = msg->getString(); bool completed = msg->getU8(); @@ -2483,7 +2506,7 @@ void ProtocolGame::parseQuestLine(const InputMessagePtr& msg) std::vector> questMissions; const uint16_t questId = msg->getU16(); const uint8_t missionCount = msg->getU8(); - for (int_fast32_t i = 0; i < missionCount; ++i) { + for (auto i = 0; i < missionCount; ++i) { const auto& missionName = msg->getString(); const auto& missionDescrition = msg->getString(); questMissions.emplace_back(missionName, missionDescrition); @@ -2505,7 +2528,7 @@ void ProtocolGame::parseItemInfo(const InputMessagePtr& msg) const { std::vector> list; const uint8_t size = msg->getU8(); - for (int_fast32_t i = 0; i < size; ++i) { + for (auto i = 0; i < size; ++i) { const auto& item = std::make_shared(); item->setId(msg->getU16()); item->setCountOrSubType(g_game.getFeature(Otc::GameCountU16) ? msg->getU16() : msg->getU8()); @@ -2520,7 +2543,7 @@ void ProtocolGame::parseItemInfo(const InputMessagePtr& msg) const void ProtocolGame::parsePlayerInventory(const InputMessagePtr& msg) { const uint16_t size = msg->getU16(); - for (int_fast32_t i = 0; i < size; ++i) { + for (auto i = 0; i < size; ++i) { msg->getU16(); // id msg->getU8(); // subtype msg->getU16(); // count @@ -2535,7 +2558,7 @@ void ProtocolGame::parseModalDialog(const InputMessagePtr& msg) const uint8_t sizeButtons = msg->getU8(); std::vector > buttonList; - for (int_fast32_t i = 0; i < sizeButtons; ++i) { + for (auto i = 0; i < sizeButtons; ++i) { const auto& value = msg->getString(); uint8_t buttonId = msg->getU8(); buttonList.emplace_back(buttonId, value); @@ -2543,7 +2566,7 @@ void ProtocolGame::parseModalDialog(const InputMessagePtr& msg) const uint8_t sizeChoices = msg->getU8(); std::vector > choiceList; - for (int_fast32_t i = 0; i < sizeChoices; ++i) { + for (auto i = 0; i < sizeChoices; ++i) { const auto& value = msg->getString(); uint8_t choideId = msg->getU8(); choiceList.emplace_back(choideId, value); @@ -2601,7 +2624,7 @@ void ProtocolGame::parseCreaturesMark(const InputMessagePtr& msg) len = msg->getU8(); } - for (int_fast32_t i = 0; i < len; ++i) { + for (auto i = 0; i < len; ++i) { const uint32_t id = msg->getU32(); const bool isPermanent = msg->getU8() != 1; const uint8_t markType = msg->getU8(); @@ -2648,14 +2671,14 @@ void ProtocolGame::setMapDescription(const InputMessagePtr& msg, int x, int y, i } int skip = 0; - for (int_fast32_t nz = startz; nz != endz + zstep; nz += zstep) + for (auto nz = startz; nz != endz + zstep; nz += zstep) skip = setFloorDescription(msg, x, y, nz, width, height, z - nz, skip); } int ProtocolGame::setFloorDescription(const InputMessagePtr& msg, int x, int y, int z, int width, int height, int offset, int skip) { - for (int_fast32_t nx = 0; nx < width; ++nx) { - for (int_fast32_t ny = 0; ny < height; ++ny) { + for (auto nx = 0; nx < width; ++nx) { + for (auto ny = 0; ny < height; ++ny) { const Position tilePos(x + nx + offset, y + ny + offset, z); if (skip == 0) skip = setTileDescription(msg, tilePos); @@ -2673,7 +2696,7 @@ int ProtocolGame::setTileDescription(const InputMessagePtr& msg, Position positi g_map.cleanTile(position); bool gotEffect = false; - for (int_fast32_t stackPos = 0; stackPos < 256; ++stackPos) { + for (auto stackPos = 0; stackPos < 256; ++stackPos) { if (msg->peekU16() >= 0xff00) return msg->getU16() & 0xff; @@ -2746,8 +2769,8 @@ Outfit ProtocolGame::getOutfit(const InputMessagePtr& msg, bool parseMount/* = t msg->getU8(); //feet } outfit.setMount(mount); - } + if (g_game.getFeature(Otc::GameWingsAurasEffectsShader)) { const uint16_t wings = msg->getU16(); outfit.setWing(wings); @@ -2757,9 +2780,10 @@ Outfit ProtocolGame::getOutfit(const InputMessagePtr& msg, bool parseMount/* = t const uint16_t effects = msg->getU16(); outfit.setEffect(effects); - outfit.setShader(msg->getString()); + outfit.setShader(msg->getString()); } + return outfit; } @@ -2962,8 +2986,8 @@ CreaturePtr ProtocolGame::getCreature(const InputMessagePtr& msg, int type) cons std::vector attachedEffectList; if (g_game.getFeature(Otc::GameCreatureAttachedEffect)) { - uint8_t listSize = msg->getU8(); - for (int_fast8_t i = -1; ++i < listSize;) + const uint8_t listSize = msg->getU8(); + for (auto i = -1; ++i < listSize;) attachedEffectList.push_back(msg->getU16()); } @@ -3052,28 +3076,29 @@ ItemPtr ProtocolGame::getItem(const InputMessagePtr& msg, int id) if (item->isContainer()) { if (g_game.getFeature(Otc::GameContainerTypes)) { - // container flags - // 9: quick loot, 2: quiver, 4: unlooted corpse - const uint8_t containerType = msg->getU8(); - - if (containerType == 9) { - // quick loot categories - msg->getU32(); - if (g_game.getClientVersion() >= 1332) { - msg->getU32(); - } - } else if (containerType == 2) { - // quiver ammo count - msg->getU32(); - } - - // corpse not looted yet - /* - if ((containerType & 4) != 0) { - // this flag has no bytes to parse - // draw effect 252 on top of the tile + const uint8_t containerType = msg->getU8(); // container type + switch (containerType) { + case 2: // Content Counter + msg->getU32(); // ammo total + break; + case 4: // Loot Highlight + break; + case 9: // Manager + msg->getU32(); // loot flags + if (g_game.getClientVersion() >= 1332) { + msg->getU32(); // obtain flags + } + break; + case 11: // Quiver Loot + msg->getU32(); // loot flags + msg->getU32(); // ammo total + if (g_game.getClientVersion() >= 1332) { + msg->getU32(); // obtain flags + } + break; + default: + break; } - */ } else { if (g_game.getFeature(Otc::GameThingQuickLoot)) { const bool hasQuickLootFlags = msg->getU8() != 0; @@ -3085,7 +3110,7 @@ ItemPtr ProtocolGame::getItem(const InputMessagePtr& msg, int id) if (g_game.getFeature(Otc::GameThingQuiver)) { const uint8_t hasQuiverAmmoCount = msg->getU8(); if (hasQuiverAmmoCount) { - msg->getU32(); // ammoTotal + msg->getU32(); // ammo total } } } @@ -3268,10 +3293,12 @@ void ProtocolGame::parseLootContainers(const InputMessagePtr& msg) { msg->getU8(); // quickLootFallbackToMainContainer ? 1 : 0 const uint8_t containers = msg->getU8(); - for (int_fast32_t i = 0; i < containers; ++i) { - msg->getU8(); // category - msg->getU16(); // lootContainerId - msg->getU16(); // obtainContainerId + for (auto i = 0; i < containers; ++i) { + msg->getU8(); // category type + msg->getU16(); // loot container id + if (g_game.getClientVersion() >= 1332) { + msg->getU16(); // obtainer container id + } } } @@ -3279,7 +3306,7 @@ void ProtocolGame::parseSupplyStash(const InputMessagePtr& msg) { const uint16_t size = msg->getU16(); std::vector> stashItems; - for (int_fast32_t i = 0; i < size; ++i) { + for (auto i = 0; i < size; ++i) { uint16_t itemId = msg->getU16(); uint32_t amount = msg->getU32(); stashItems.push_back({ itemId, amount }); @@ -3372,7 +3399,7 @@ void ProtocolGame::parseBlessDialog(const InputMessagePtr& msg) const uint8_t totalBless = msg->getU8(); // total bless // parse each bless - for (int_fast32_t i = 0; i < totalBless; i++) { + for (auto i = 0; i < totalBless; i++) { msg->getU16(); // bless bit wise msg->getU8(); // player bless count msg->getU8(); // store? @@ -3391,7 +3418,7 @@ void ProtocolGame::parseBlessDialog(const InputMessagePtr& msg) // parse log const uint8_t logCount = msg->getU8(); // log count - for (int_fast32_t i = 0; i < logCount; i++) { + for (auto i = 0; i < logCount; i++) { msg->getU32(); // timestamp msg->getU8(); // color message (0 = white loss, 1 = red) msg->getString(); // history message @@ -3427,7 +3454,7 @@ void ProtocolGame::parseItemsPrice(const InputMessagePtr& msg) { const uint16_t priceCount = msg->getU16(); // count - for (int_fast32_t i = 0; i < priceCount; i++) { + for (auto i = 0; i < priceCount; i++) { const uint16_t itemId = msg->getU16(); // item client id if (g_game.getClientVersion() >= 1281) { const auto& item = Item::create(itemId); @@ -3564,7 +3591,7 @@ void ProtocolGame::parseRewardHistory(const InputMessagePtr& msg) { const uint8_t historyCount = msg->getU8(); // history count - for (int_fast32_t i = 0; i < historyCount; i++) { + for (auto i = 0; i < historyCount; i++) { msg->getU32(); // timestamp msg->getU8(); // is Premium msg->getString(); // description @@ -3802,7 +3829,7 @@ void ProtocolGame::parseMarketEnter(const InputMessagePtr& msg) const uint8_t offers = msg->getU8(); std::vector> depotItems; const uint16_t itemsSent = msg->getU16(); - for (int_fast32_t i = 0; i < itemsSent; i++) { + for (auto i = 0; i < itemsSent; i++) { const uint16_t itemId = msg->getU16(); const ItemPtr& item = Item::create(itemId); const uint16_t classification = item->getClassification(); @@ -3828,7 +3855,7 @@ void ProtocolGame::parseMarketEnterOld(const InputMessagePtr& msg) const uint16_t itemsSent = msg->getU16(); std::unordered_map depotItems; - for (int_fast32_t i = 0; i < itemsSent; i++) { + for (auto i = 0; i < itemsSent; i++) { const uint16_t itemId = msg->getU16(); const uint16_t count = msg->getU16(); depotItems.emplace(itemId, count); @@ -3873,7 +3900,7 @@ void ProtocolGame::parseMarketDetail(const InputMessagePtr& msg) std::vector> purchaseStats; uint8_t count = msg->getU8(); - for (int_fast32_t i = -1; ++i < count;) { + for (auto i = -1; ++i < count;) { uint32_t transactions = msg->getU32(); uint64_t totalPrice = 0; uint64_t highestPrice = 0; @@ -3895,7 +3922,7 @@ void ProtocolGame::parseMarketDetail(const InputMessagePtr& msg) std::vector> saleStats; count = msg->getU8(); - for (int_fast32_t i = -1; ++i < count;) { + for (auto i = -1; ++i < count;) { uint32_t transactions = msg->getU32(); uint64_t totalPrice = 0; uint64_t highestPrice = 0; @@ -4054,7 +4081,7 @@ void ProtocolGame::parseBosstiarySlots(const InputMessagePtr& msg) { if (bossesUnlocked) { const uint16_t bossesUnlockedSize = msg->getU16(); - for (uint_fast16_t i = 0; i < bossesUnlockedSize; ++i) { + for (auto i = 0; i < bossesUnlockedSize; ++i) { msg->getU32(); // bossId msg->getU8(); // bossRace } @@ -4063,7 +4090,7 @@ void ProtocolGame::parseBosstiarySlots(const InputMessagePtr& msg) { void ProtocolGame::parseBosstiaryCooldownTimer(const InputMessagePtr& msg) { const uint16_t bossesOnTrackerSize = msg->getU16(); - for (uint_fast16_t i = 0; i < bossesOnTrackerSize; ++i) { + for (auto i = 0; i < bossesOnTrackerSize; ++i) { msg->getU32(); // bossRaceId msg->getU64(); // Boss cooldown in seconds } @@ -4134,4 +4161,4 @@ void ProtocolGame::parseCreatureTyping(const InputMessagePtr& msg) creature->setTyping(typing); else g_logger.traceError("could not get creature"); -} \ No newline at end of file +} From ae6e2ae4ebf953f5918ae62cb77efb33a61b794d Mon Sep 17 00:00:00 2001 From: kokekanon <114332266+kokekanon@users.noreply.github.com> Date: Sun, 23 Jun 2024 20:30:04 -0400 Subject: [PATCH 3/9] fix: split modules from game_mainpanel and small fix (#790) * fix: split modules minimap idea by : kojimhojo "What are the bugs // what are the missing features? I think it would be a good idea to split game mainpanel in game minimap game_inventory game_mainpanel (healthMana + options) so as not to confuse" * fix: flag mini windows clipping * fix: split modules game_inventory idea by : kojimhojo "What are the bugs // what are the missing features? I think it would be a good idea to split game mainpanel in game minimap game_inventory game_mainpanel (healthMana + options) so as not to confuse" * fix: split modules game_healthinfo idea by : kojimhojo "What are the bugs // what are the missing features? I think it would be a good idea to split game mainpanel in game minimap game_inventory game_mainpanel (healthMana + options) so as not to confuse" * fix: possible fix height mainpanel if button in gamestart fix: possible fix height mainpanel if button in gamestart * fix: add commits Tfs 1.4.2 aura/effect/shader --- data/styles/30-minimap.otui | 1 + .../vBot_4.8/cavebot/minimap.lua | 2 +- .../vBot_4.8/vBot/quiver_label.lua | 2 +- modules/game_healthinfo/healthinfo.lua | 40 + modules/game_healthinfo/healthinfo.otmod | 9 + .../healthinfo.otui} | 0 modules/game_interface/interface.otmod | 3 + modules/game_interface/widgets/statsbar.lua | 8 +- modules/game_inventory/inventory.lua | 335 +++++++++ modules/game_inventory/inventory.otmod | 9 + .../inventory.otui} | 0 modules/game_mainpanel/mainpanel.lua | 690 +----------------- modules/game_mainpanel/mainpanel.otmod | 4 +- modules/game_minimap/minimap.lua | 248 +++++++ modules/game_minimap/minimap.otmod | 9 + .../minimap.otui} | 0 .../serverSIDE/if c++ (protocol)/c++.txt | 11 + .../serverSIDE/if c++ (protocol)/not yet.txt | 8 - 18 files changed, 708 insertions(+), 671 deletions(-) create mode 100644 modules/game_healthinfo/healthinfo.lua create mode 100644 modules/game_healthinfo/healthinfo.otmod rename modules/{game_mainpanel/mainhealthmanapanel.otui => game_healthinfo/healthinfo.otui} (100%) create mode 100644 modules/game_inventory/inventory.lua create mode 100644 modules/game_inventory/inventory.otmod rename modules/{game_mainpanel/maininventorypanel.otui => game_inventory/inventory.otui} (100%) create mode 100644 modules/game_minimap/minimap.lua create mode 100644 modules/game_minimap/minimap.otmod rename modules/{game_mainpanel/mainmappanel.otui => game_minimap/minimap.otui} (100%) create mode 100644 modules/game_outfit/serverSIDE/if c++ (protocol)/c++.txt delete mode 100644 modules/game_outfit/serverSIDE/if c++ (protocol)/not yet.txt diff --git a/data/styles/30-minimap.otui b/data/styles/30-minimap.otui index f05a380941..b7466c2e9e 100644 --- a/data/styles/30-minimap.otui +++ b/data/styles/30-minimap.otui @@ -1,6 +1,7 @@ MinimapFlag < UIWidget size: 11 11 focusable: false + clipping: true MinimapCross < UIWidget focusable: false diff --git a/mods/game_bot/default_configs/vBot_4.8/cavebot/minimap.lua b/mods/game_bot/default_configs/vBot_4.8/cavebot/minimap.lua index e2501d48d5..604faa9393 100644 --- a/mods/game_bot/default_configs/vBot_4.8/cavebot/minimap.lua +++ b/mods/game_bot/default_configs/vBot_4.8/cavebot/minimap.lua @@ -1,4 +1,4 @@ -local minimap = modules.game_mainpanel.getMiniMapUi() +local minimap = modules.game_minimap.getMiniMapUi() minimap.onMouseRelease = function(widget,pos,button) if not minimap.allowNextRelease then return true end diff --git a/mods/game_bot/default_configs/vBot_4.8/vBot/quiver_label.lua b/mods/game_bot/default_configs/vBot_4.8/vBot/quiver_label.lua index 3c2f0c9fd2..927f07782e 100644 --- a/mods/game_bot/default_configs/vBot_4.8/vBot/quiver_label.lua +++ b/mods/game_bot/default_configs/vBot_4.8/vBot/quiver_label.lua @@ -1,4 +1,4 @@ -local quiverSlot = modules.game_mainpanel.getSlot5() or "" +local quiverSlot = modules.game_inventory.getSlot5() or "" local label = quiverSlot.count label = label or g_ui.loadUIFromString([[ diff --git a/modules/game_healthinfo/healthinfo.lua b/modules/game_healthinfo/healthinfo.lua new file mode 100644 index 0000000000..c64c509e80 --- /dev/null +++ b/modules/game_healthinfo/healthinfo.lua @@ -0,0 +1,40 @@ +-- @ Health/Mana +local function healthManaEvent() + local player = g_game.getLocalPlayer() + if not player then + return + end + + healthManaController.ui.health.text:setText(player:getHealth()) + healthManaController.ui.health.current:setWidth(math.max(12, math.ceil( + (healthManaController.ui.health.total:getWidth() * player:getHealth()) / player:getMaxHealth()))) + + healthManaController.ui.mana.text:setText(player:getMana()) + healthManaController.ui.mana.current:setWidth(math.max(12, math.ceil( + (healthManaController.ui.mana.total:getWidth() * player:getMana()) / player:getMaxMana()))) +end + +healthManaController = Controller:new() +healthManaController:setUI('healthinfo', modules.game_interface.getMainRightPanel()) + +local healthManaControllerEvents = healthManaController:addEvent(LocalPlayer, { + onHealthChange = healthManaEvent, + onManaChange = healthManaEvent +}) + +function healthManaController:onInit() +end + +function healthManaController:onTerminate() +end + +function healthManaController:onGameStart() + healthManaControllerEvents:connect() + healthManaControllerEvents:execute('onHealthChange') + healthManaControllerEvents:execute('onManaChange') +end + +function healthManaController:onGameEnd() + healthManaControllerEvents:disconnect() +end +-- @ End of Health/Mana diff --git a/modules/game_healthinfo/healthinfo.otmod b/modules/game_healthinfo/healthinfo.otmod new file mode 100644 index 0000000000..fcdba5a771 --- /dev/null +++ b/modules/game_healthinfo/healthinfo.otmod @@ -0,0 +1,9 @@ +Module + name: game_healthinfo + description: Displays health, mana points, soul points, and conditions + author: edubart, BeniS + website: https://github.com/edubart/otclient + sandboxed: true + scripts: [ healthinfo ] + @onLoad: healthManaController:init() + @onUnload: healthManaController:terminate() diff --git a/modules/game_mainpanel/mainhealthmanapanel.otui b/modules/game_healthinfo/healthinfo.otui similarity index 100% rename from modules/game_mainpanel/mainhealthmanapanel.otui rename to modules/game_healthinfo/healthinfo.otui diff --git a/modules/game_interface/interface.otmod b/modules/game_interface/interface.otmod index 1ee64fdb33..468cbd8441 100644 --- a/modules/game_interface/interface.otmod +++ b/modules/game_interface/interface.otmod @@ -6,6 +6,9 @@ Module sandboxed: true scripts: [ widgets/uigamemap, widgets/uiitem, widgets/statsbar, gameinterface ] load-later: + - game_minimap + - game_healthinfo + - game_inventory - game_mainpanel - game_prey - game_imbuing diff --git a/modules/game_interface/widgets/statsbar.lua b/modules/game_interface/widgets/statsbar.lua index 264584e2e8..dc409080f2 100644 --- a/modules/game_interface/widgets/statsbar.lua +++ b/modules/game_interface/widgets/statsbar.lua @@ -176,8 +176,8 @@ local function toggleIcon(bitChanged) {content = statsBar.parallelOnTop.icons,loadIconTransparent = true}, {content = statsBar.defaultOnTop.icons,loadIconTransparent = true}, {content = statsBar.compactOnTop.icons, loadIconTransparent = true}, - {content = modules.game_mainpanel.getIconsPanelOff()}, - {content = modules.game_mainpanel.getIconsPanelOn()} + {content = modules.game_inventory.getIconsPanelOff()}, + {content = modules.game_inventory.getIconsPanelOn()} } for _, contentData in ipairs(contents) do @@ -478,8 +478,8 @@ function StatsBar.OnGameEnd() StatsBar.hideAll() - modules.game_mainpanel.getIconsPanelOn():destroyChildren() - modules.game_mainpanel.getIconsPanelOff():destroyChildren() + modules.game_inventory.getIconsPanelOn():destroyChildren() + modules.game_inventory.getIconsPanelOff():destroyChildren() statsBar.largeOnTop.icons:destroyChildren() statsBar.parallelOnTop.icons:destroyChildren() diff --git a/modules/game_inventory/inventory.lua b/modules/game_inventory/inventory.lua new file mode 100644 index 0000000000..70ecae2b28 --- /dev/null +++ b/modules/game_inventory/inventory.lua @@ -0,0 +1,335 @@ +-- @ Inventory +local inventoryShrink = false +local function getInventoryUi() + if inventoryShrink then + return inventoryController.ui.offPanel + end + + return inventoryController.ui.onPanel +end + +local function walkEvent() + if modules.client_options.getOption('autoChaseOverride') then + if g_game.isAttacking() and g_game.getChaseMode() == ChaseOpponent then + selectPosture('stand', true) + end + end +end + +local function combatEvent() + local chaseMode = g_game.getChaseMode() + if chaseMode == 1 then + chaseModeRadioGroup:selectWidget(chaseModeBox, true) + else + chaseModeRadioGroup:selectWidget(standModeBox, true) + end + + if g_game.getFightMode() == FightOffensive then + selectCombat('attack', true) + elseif g_game.getFightMode() == FightBalanced then + selectCombat('balanced', true) + elseif g_game.getFightMode() == FightDefensive then + selectCombat('defense', true) + end + + selectPvp(g_game.getPVPMode() == PVPRedFist, true) +end + +local function inventoryEvent(player, slot, item, oldItem) + if inventoryShrink then + return + end + + local ui = getInventoryUi() + local slotPanel + local toggler + if slot == InventorySlotHead then + slotPanel = ui.helmet + toggler = slotPanel.helmet + elseif slot == InventorySlotNeck then + slotPanel = ui.amulet + toggler = slotPanel.amulet + elseif slot == InventorySlotBack then + slotPanel = ui.backpack + toggler = slotPanel.backpack + elseif slot == InventorySlotBody then + slotPanel = ui.armor + toggler = slotPanel.armor + elseif slot == InventorySlotRight then + slotPanel = ui.shield + toggler = slotPanel.shield + elseif slot == InventorySlotLeft then + slotPanel = ui.sword + toggler = slotPanel.sword + elseif slot == InventorySlotLeg then + slotPanel = ui.legs + toggler = slotPanel.legs + elseif slot == InventorySlotFeet then + slotPanel = ui.boots + toggler = slotPanel.boots + elseif slot == InventorySlotFinger then + slotPanel = ui.ring + toggler = slotPanel.ring + elseif slot == InventorySlotAmmo then + slotPanel = ui.tools + toggler = slotPanel.tools + end + + if not slotPanel then + return + end + + slotPanel.item:setItem(item) + toggler:setEnabled(not item) + slotPanel.item:setWidth(34) + slotPanel.item:setHeight(34) +end + +local function onSoulChange(localPlayer, soul) + local ui = getInventoryUi() + if not localPlayer then + return + end + if not soul then + return + end + + if ui.soulPanel and ui.soulPanel.soul then + ui.soulPanel.soul:setText(soul) + end + + if ui.soulAndCapacity and ui.soulAndCapacity.soul then + ui.soulAndCapacity.soul:setText(soul) + end + +end + +local function onFreeCapacityChange(player, freeCapacity) + if not player then + return + end + + if not freeCapacity then + return + end + if freeCapacity > 99999 then + freeCapacity = math.min(9999, math.floor(freeCapacity / 1000)) .. "k" + elseif freeCapacity > 999 then + freeCapacity = math.floor(freeCapacity) + elseif freeCapacity > 99 then + freeCapacity = math.floor(freeCapacity * 10) / 10 + end + local ui = getInventoryUi() + if ui.capacityPanel and ui.capacityPanel.capacity then + ui.capacityPanel.capacity:setText(freeCapacity) + end + if ui.soulAndCapacity and ui.soulAndCapacity.capacity then + ui.soulAndCapacity.capacity:setText(freeCapacity) + end +end + +function getIconsPanelOn() + return inventoryController.ui.onPanel.icons +end + +function getIconsPanelOff() + return inventoryController.ui.offPanel.icons +end + +local function refreshInventory_panel() + local player = g_game.getLocalPlayer() + if player then + onSoulChange(player, player:getSoul()) + onFreeCapacityChange(player, player:getFreeCapacity()) + end + if inventoryShrink then + return + end + + for i = InventorySlotFirst, InventorySlotPurse do + if g_game.isOnline() then + inventoryEvent(player, i, player:getInventoryItem(i)) + else + inventoryEvent(player, i, nil) + end + end + +end + +local function refreshInventorySizes() + if inventoryShrink then + inventoryController.ui:setOn(false) + inventoryController.ui.onPanel:hide() + inventoryController.ui.offPanel:show() + else + inventoryController.ui:setOn(true) + inventoryController.ui.onPanel:show() + inventoryController.ui.offPanel:hide() + refreshInventory_panel() + end + combatEvent() + walkEvent() + modules.game_mainpanel.reloadMainPanelSizes() +end + +function onSetChaseMode(self, selectedChaseModeButton) + if selectedChaseModeButton == nil then + return + end + local buttonId = selectedChaseModeButton:getId() + local chaseMode + + if buttonId == 'followPosture' then + chaseMode = ChaseOpponent + else -- standModeBox + chaseMode = DontChase + end + + g_game.setChaseMode(chaseMode) +end + +inventoryController = Controller:new() +inventoryController:setUI('inventory', modules.game_interface.getMainRightPanel()) + +local inventoryControllerEvents = inventoryController:addEvent(LocalPlayer, { + onInventoryChange = inventoryEvent, + onSoulChange = onSoulChange, + onFreeCapacityChange = onFreeCapacityChange +}) + +local inventoryControllerEvents_game = inventoryController:addEvent(g_game, { + onWalk = walkEvent, + onAutoWalk = walkEvent, + onFightModeChange = combatEvent, + onChaseModeChange = combatEvent, + onSafeFightChange = combatEvent, + onPVPModeChange = combatEvent +}) + +function inventoryController:onInit() + refreshInventory_panel() + local ui = getInventoryUi() + standModeBox = ui.standPosture + chaseModeBox = ui.followPosture + chaseModeRadioGroup = UIRadioGroup.create() + chaseModeRadioGroup:addWidget(standModeBox) + chaseModeRadioGroup:addWidget(chaseModeBox) + connect(chaseModeRadioGroup, { + onSelectionChange = onSetChaseMode + }) +end + +function inventoryController:onTerminate() + inventoryControllerEvents:disconnect() + inventoryControllerEvents_game:disconnect() +end + +function inventoryController:onGameStart() + inventoryControllerEvents:connect() + inventoryControllerEvents:execute('onInventoryChange') + inventoryControllerEvents:execute('onSoulChange') + inventoryControllerEvents:execute('onFreeCapacityChange') + + inventoryControllerEvents_game:connect() + inventoryControllerEvents_game:execute('onWalk') + inventoryControllerEvents_game:execute('onAutoWalk') + inventoryControllerEvents_game:execute('onFightModeChange') + inventoryControllerEvents_game:execute('onChaseModeChange') + inventoryControllerEvents_game:execute('onSafeFightChange') + inventoryControllerEvents_game:execute('onPVPModeChange') + + inventoryShrink = g_settings.getBoolean('mainpanel_shrink_inventory') + refreshInventorySizes() + refreshInventory_panel() + + if g_game.getClientVersion() < 1000 then + inventoryController.ui.offPanel.blessings:hide() + inventoryController.ui.offPanel.expert:hide() + inventoryController.ui.onPanel.blessings:hide() + inventoryController.ui.onPanel.expert:hide() + end +end + +function inventoryController:onGameEnd() + inventoryControllerEvents:disconnect() + inventoryControllerEvents_game:disconnect() +end + +function selectPosture(key, ignoreUpdate) + local ui = getInventoryUi() + if key == 'stand' then + ui.standPosture:setEnabled(false) + ui.followPosture:setEnabled(true) + if not ignoreUpdate then + g_game.setChaseMode(DontChase) + end + elseif key == 'follow' then + ui.standPosture:setEnabled(true) + ui.followPosture:setEnabled(false) + if not ignoreUpdate then + g_game.setChaseMode(ChaseOpponent) + end + end +end + +function selectCombat(combat, ignoreUpdate) + local ui = getInventoryUi() + if combat == 'attack' then + ui.attack:setEnabled(false) + ui.balanced:setEnabled(true) + ui.defense:setEnabled(true) + if not ignoreUpdate then + g_game.setFightMode(FightOffensive) + end + elseif combat == 'balanced' then + ui.attack:setEnabled(true) + ui.balanced:setEnabled(false) + ui.defense:setEnabled(true) + if not ignoreUpdate then + g_game.setFightMode(FightBalanced) + end + elseif combat == 'defense' then + ui.attack:setEnabled(true) + ui.balanced:setEnabled(true) + ui.defense:setEnabled(false) + if not ignoreUpdate then + g_game.setFightMode(FightDefensive) + end + end +end + +function selectPvp(pvp, ignoreUpdate) + local ui = getInventoryUi() + if pvp then + ui.pvp:setImageClip( + ui.pvp.imageClipCheckedX .. ' ' .. ui.pvp.imageClipCheckedY .. ' ' .. ui.pvp.imageClipWidth .. ' 20') + if not ignoreUpdate then + g_game.setPVPMode(PVPRedFist) + end + else + ui.pvp:setImageClip(ui.pvp.imageClipUncheckedX .. ' ' .. ui.pvp.imageClipUncheckedY .. ' ' .. + ui.pvp.imageClipWidth .. ' 20') + if not ignoreUpdate then + g_game.setPVPMode(PVPWhiteHand) + end + end +end + +function changeInventorySize() + inventoryShrink = not inventoryShrink + g_settings.set('mainpanel_shrink_inventory', inventoryShrink) + refreshInventorySizes() + modules.game_mainpanel.reloadMainPanelSizes() + local player = g_game.getLocalPlayer() + if player and g_game.isOnline() then + + onFreeCapacityChange(player, player:getFreeCapacity()) + onSoulChange(player, player:getSoul()) + end +end + +function getSlot5() + return inventoryController.ui.offPanel.shield +end + +-- @ End of Inventory diff --git a/modules/game_inventory/inventory.otmod b/modules/game_inventory/inventory.otmod new file mode 100644 index 0000000000..9927f997a3 --- /dev/null +++ b/modules/game_inventory/inventory.otmod @@ -0,0 +1,9 @@ +Module + name: game_inventory + description: View local player equipments window + author: baxnie, edubart, BeniS + website: https://github.com/edubart/otclient + sandboxed: true + scripts: [ inventory ] + @onLoad: inventoryController:init() + @onUnload: inventoryController:terminate() diff --git a/modules/game_mainpanel/maininventorypanel.otui b/modules/game_inventory/inventory.otui similarity index 100% rename from modules/game_mainpanel/maininventorypanel.otui rename to modules/game_inventory/inventory.otui diff --git a/modules/game_mainpanel/mainpanel.lua b/modules/game_mainpanel/mainpanel.lua index ae1aaea344..85928f6e56 100644 --- a/modules/game_mainpanel/mainpanel.lua +++ b/modules/game_mainpanel/mainpanel.lua @@ -1,17 +1,3 @@ -function init() - mapController:init() - healthManaController:init() - inventoryController:init() - optionsController:init() -end - -function terminate() - mapController:terminate() - healthManaController:terminate() - inventoryController:terminate() - optionsController:terminate() -end - local standModeBox local chaseModeBox local optionsAmount = 0 @@ -27,8 +13,13 @@ function reloadMainPanelSizes() if not main or not rightPanel then return end + + local height = 1 + local function calculatePanelHeight(icon_count, max_icons_per_row, icon_size) + local rows = math.ceil(icon_count / max_icons_per_row) + return (rows * icon_size) + (rows * 3) + end - local height = 4 for _, panel in ipairs(main:getChildren()) do if panel.panelHeight ~= nil then if panel:isVisible() then @@ -36,23 +27,37 @@ function reloadMainPanelSizes() height = height + panel.panelHeight if panel:getId() == 'mainoptionspanel' and panel:isOn() then - local currentOptionsAmount = math.ceil(optionsAmount / 5) - local optionsHeight = (currentOptionsAmount * 28) + 3 - local currentSpecialsAmount = math.ceil(specialsAmount / 2) - local specialsHeight = (currentSpecialsAmount * 28) + 3 - local maxPanelHeight = math.max(optionsHeight, specialsHeight) - - if storeAmount > 1 then - local currentStoreAmount = math.ceil(storeAmount / 1) - local storeHeight = (currentStoreAmount * 20) + 3 - panel.onPanel.store:setHeight(storeHeight) - maxPanelHeight = math.max(maxPanelHeight, storeHeight) + + local function calculatePanelHeightFromPanel(panel, icon_width, icon_height, max_icons_per_row) + local icon_count = 0 + for _, icon in ipairs(panel:getChildren()) do + if icon:isVisible() then + icon_count = icon_count + 1 + end + end + + local rows = math.ceil(icon_count / max_icons_per_row) + return (rows * icon_height) + (rows * 3) end - panel:setHeight(panel:getHeight() + maxPanelHeight) - height = height + maxPanelHeight - if storeAmount >= 2 then - height = height + 15 + local options_panel = optionsController.ui.onPanel.options + local options_height = calculatePanelHeightFromPanel(options_panel, 18, 18, 5) + + local specials_panel = optionsController.ui.onPanel.specials + local specials_height = calculatePanelHeightFromPanel(specials_panel, 18, 18, 2) + + local max_panel_height = math.max(options_height, specials_height) + panel:setHeight(panel:getHeight() + max_panel_height) + height = height + options_height + + local store_panel = panel.onPanel.store + local store_height = calculatePanelHeightFromPanel(store_panel, 18, 18, 1) + + store_panel:setHeight(store_height) + height = height + store_height + + if store_panel:getChildCount() >= 2 then + height = height + 15 end end else @@ -192,628 +197,3 @@ function addStoreButton(id, description, image, callback, front) end -- @ End of Options --- @ Health/Mana -local function healthManaEvent() - local player = g_game.getLocalPlayer() - if not player then - return - end - - healthManaController.ui.health.text:setText(player:getHealth()) - healthManaController.ui.health.current:setWidth(math.max(12, math.ceil( - (healthManaController.ui.health.total:getWidth() * player:getHealth()) / player:getMaxHealth()))) - - healthManaController.ui.mana.text:setText(player:getMana()) - healthManaController.ui.mana.current:setWidth(math.max(12, math.ceil( - (healthManaController.ui.mana.total:getWidth() * player:getMana()) / player:getMaxMana()))) -end - -healthManaController = Controller:new() -healthManaController:setUI('mainhealthmanapanel', modules.game_interface.getMainRightPanel()) - -local healthManaControllerEvents = healthManaController:addEvent(LocalPlayer, { - onHealthChange = healthManaEvent, - onManaChange = healthManaEvent -}) - -function healthManaController:onInit() -end - -function healthManaController:onTerminate() -end - -function healthManaController:onGameStart() - healthManaControllerEvents:connect() - healthManaControllerEvents:execute('onHealthChange') - healthManaControllerEvents:execute('onManaChange') -end - -function healthManaController:onGameEnd() - healthManaControllerEvents:disconnect() -end --- @ End of Health/Mana - --- @ Inventory -local inventoryShrink = false -local function getInventoryUi() - if inventoryShrink then - return inventoryController.ui.offPanel - end - - return inventoryController.ui.onPanel -end - -local function walkEvent() - if modules.client_options.getOption('autoChaseOverride') then - if g_game.isAttacking() and g_game.getChaseMode() == ChaseOpponent then - selectPosture('stand', true) - end - end -end - -local function combatEvent() - local chaseMode = g_game.getChaseMode() - if chaseMode == 1 then - chaseModeRadioGroup:selectWidget(chaseModeBox, true) - else - chaseModeRadioGroup:selectWidget(standModeBox, true) - end - - if g_game.getFightMode() == FightOffensive then - selectCombat('attack', true) - elseif g_game.getFightMode() == FightBalanced then - selectCombat('balanced', true) - elseif g_game.getFightMode() == FightDefensive then - selectCombat('defense', true) - end - - selectPvp(g_game.getPVPMode() == PVPRedFist, true) -end - -local function inventoryEvent(player, slot, item, oldItem) - if inventoryShrink then - return - end - - local ui = getInventoryUi() - local slotPanel - local toggler - if slot == InventorySlotHead then - slotPanel = ui.helmet - toggler = slotPanel.helmet - elseif slot == InventorySlotNeck then - slotPanel = ui.amulet - toggler = slotPanel.amulet - elseif slot == InventorySlotBack then - slotPanel = ui.backpack - toggler = slotPanel.backpack - elseif slot == InventorySlotBody then - slotPanel = ui.armor - toggler = slotPanel.armor - elseif slot == InventorySlotRight then - slotPanel = ui.shield - toggler = slotPanel.shield - elseif slot == InventorySlotLeft then - slotPanel = ui.sword - toggler = slotPanel.sword - elseif slot == InventorySlotLeg then - slotPanel = ui.legs - toggler = slotPanel.legs - elseif slot == InventorySlotFeet then - slotPanel = ui.boots - toggler = slotPanel.boots - elseif slot == InventorySlotFinger then - slotPanel = ui.ring - toggler = slotPanel.ring - elseif slot == InventorySlotAmmo then - slotPanel = ui.tools - toggler = slotPanel.tools - end - - if not slotPanel then - return - end - - slotPanel.item:setItem(item) - toggler:setEnabled(not item) - slotPanel.item:setWidth(34) - slotPanel.item:setHeight(34) -end - -local function onSoulChange(localPlayer, soul) - local ui = getInventoryUi() - if not localPlayer then - return - end - if not soul then - return - end - - if ui.soulPanel and ui.soulPanel.soul then - ui.soulPanel.soul:setText(soul) - end - - if ui.soulAndCapacity and ui.soulAndCapacity.soul then - ui.soulAndCapacity.soul:setText(soul) - end - -end - -local function onFreeCapacityChange(player, freeCapacity) - if not player then - return - end - - if not freeCapacity then - return - end - if freeCapacity > 99999 then - freeCapacity = math.min(9999, math.floor(freeCapacity / 1000)) .. "k" - elseif freeCapacity > 999 then - freeCapacity = math.floor(freeCapacity) - elseif freeCapacity > 99 then - freeCapacity = math.floor(freeCapacity * 10) / 10 - end - local ui = getInventoryUi() - if ui.capacityPanel and ui.capacityPanel.capacity then - ui.capacityPanel.capacity:setText(freeCapacity) - end - if ui.soulAndCapacity and ui.soulAndCapacity.capacity then - ui.soulAndCapacity.capacity:setText(freeCapacity) - end -end - -function getIconsPanelOn() - return inventoryController.ui.onPanel.icons -end - -function getIconsPanelOff() - return inventoryController.ui.offPanel.icons -end - -local function refreshInventory_panel() - local player = g_game.getLocalPlayer() - if player then - onSoulChange(player, player:getSoul()) - onFreeCapacityChange(player, player:getFreeCapacity()) - end - if inventoryShrink then - return - end - - for i = InventorySlotFirst, InventorySlotPurse do - if g_game.isOnline() then - inventoryEvent(player, i, player:getInventoryItem(i)) - else - inventoryEvent(player, i, nil) - end - end - -end - -local function refreshInventorySizes() - if inventoryShrink then - inventoryController.ui:setOn(false) - inventoryController.ui.onPanel:hide() - inventoryController.ui.offPanel:show() - else - inventoryController.ui:setOn(true) - inventoryController.ui.onPanel:show() - inventoryController.ui.offPanel:hide() - refreshInventory_panel() - end - combatEvent() - walkEvent() - reloadMainPanelSizes() -end - -function onSetChaseMode(self, selectedChaseModeButton) - if selectedChaseModeButton == nil then - return - end - local buttonId = selectedChaseModeButton:getId() - local chaseMode - - if buttonId == 'followPosture' then - chaseMode = ChaseOpponent - else -- standModeBox - chaseMode = DontChase - end - - g_game.setChaseMode(chaseMode) -end - -inventoryController = Controller:new() -inventoryController:setUI('maininventorypanel', modules.game_interface.getMainRightPanel()) - -local inventoryControllerEvents = inventoryController:addEvent(LocalPlayer, { - onInventoryChange = inventoryEvent, - onSoulChange = onSoulChange, - onFreeCapacityChange = onFreeCapacityChange -}) - -local inventoryControllerEvents_game = inventoryController:addEvent(g_game, { - onWalk = walkEvent, - onAutoWalk = walkEvent, - onFightModeChange = combatEvent, - onChaseModeChange = combatEvent, - onSafeFightChange = combatEvent, - onPVPModeChange = combatEvent -}) - -function inventoryController:onInit() - refreshInventory_panel() - local ui = getInventoryUi() - standModeBox = ui.standPosture - chaseModeBox = ui.followPosture - chaseModeRadioGroup = UIRadioGroup.create() - chaseModeRadioGroup:addWidget(standModeBox) - chaseModeRadioGroup:addWidget(chaseModeBox) - connect(chaseModeRadioGroup, { - onSelectionChange = onSetChaseMode - }) -end - -function inventoryController:onTerminate() - inventoryControllerEvents:disconnect() - inventoryControllerEvents_game:disconnect() -end - -function inventoryController:onGameStart() - inventoryControllerEvents:connect() - inventoryControllerEvents:execute('onInventoryChange') - inventoryControllerEvents:execute('onSoulChange') - inventoryControllerEvents:execute('onFreeCapacityChange') - - inventoryControllerEvents_game:connect() - inventoryControllerEvents_game:execute('onWalk') - inventoryControllerEvents_game:execute('onAutoWalk') - inventoryControllerEvents_game:execute('onFightModeChange') - inventoryControllerEvents_game:execute('onChaseModeChange') - inventoryControllerEvents_game:execute('onSafeFightChange') - inventoryControllerEvents_game:execute('onPVPModeChange') - - inventoryShrink = g_settings.getBoolean('mainpanel_shrink_inventory') - refreshInventorySizes() - refreshInventory_panel() - - if g_game.getClientVersion() < 1000 then - inventoryController.ui.offPanel.blessings:hide() - inventoryController.ui.offPanel.expert:hide() - inventoryController.ui.onPanel.blessings:hide() - inventoryController.ui.onPanel.expert:hide() - end -end - -function inventoryController:onGameEnd() - inventoryControllerEvents:disconnect() - inventoryControllerEvents_game:disconnect() -end - -function selectPosture(key, ignoreUpdate) - local ui = getInventoryUi() - if key == 'stand' then - ui.standPosture:setEnabled(false) - ui.followPosture:setEnabled(true) - if not ignoreUpdate then - g_game.setChaseMode(DontChase) - end - elseif key == 'follow' then - ui.standPosture:setEnabled(true) - ui.followPosture:setEnabled(false) - if not ignoreUpdate then - g_game.setChaseMode(ChaseOpponent) - end - end -end - -function selectCombat(combat, ignoreUpdate) - local ui = getInventoryUi() - if combat == 'attack' then - ui.attack:setEnabled(false) - ui.balanced:setEnabled(true) - ui.defense:setEnabled(true) - if not ignoreUpdate then - g_game.setFightMode(FightOffensive) - end - elseif combat == 'balanced' then - ui.attack:setEnabled(true) - ui.balanced:setEnabled(false) - ui.defense:setEnabled(true) - if not ignoreUpdate then - g_game.setFightMode(FightBalanced) - end - elseif combat == 'defense' then - ui.attack:setEnabled(true) - ui.balanced:setEnabled(true) - ui.defense:setEnabled(false) - if not ignoreUpdate then - g_game.setFightMode(FightDefensive) - end - end -end - -function selectPvp(pvp, ignoreUpdate) - local ui = getInventoryUi() - if pvp then - ui.pvp:setImageClip( - ui.pvp.imageClipCheckedX .. ' ' .. ui.pvp.imageClipCheckedY .. ' ' .. ui.pvp.imageClipWidth .. ' 20') - if not ignoreUpdate then - g_game.setPVPMode(PVPRedFist) - end - else - ui.pvp:setImageClip(ui.pvp.imageClipUncheckedX .. ' ' .. ui.pvp.imageClipUncheckedY .. ' ' .. - ui.pvp.imageClipWidth .. ' 20') - if not ignoreUpdate then - g_game.setPVPMode(PVPWhiteHand) - end - end -end - -function changeInventorySize() - inventoryShrink = not inventoryShrink - g_settings.set('mainpanel_shrink_inventory', inventoryShrink) - refreshInventorySizes() - reloadMainPanelSizes() - local player = g_game.getLocalPlayer() - if player and g_game.isOnline() then - - onFreeCapacityChange(player, player:getFreeCapacity()) - onSoulChange(player, player:getSoul()) - end -end - -function getSlot5() - return inventoryController.ui.offPanel.shield -end - --- @ End of Inventory - --- @ Minimap -local minimapWidget = nil -- bot fix -local otmm = true -local oldPos = nil -local fullscreenWidget -local virtualFloor = 7 -local dayTimeEvent -local currentDayTime = { - h = 12, - m = 0 -} - -local function refreshVirtualFloors() - mapController.ui.layersPanel.layersMark:setMarginTop(((virtualFloor + 1) * 4) - 3) - mapController.ui.layersPanel.automapLayers:setImageClip((virtualFloor * 14) .. ' 0 14 67') -end - -local function onPositionChange() - local player = g_game.getLocalPlayer() - if not player then - return - end - - local pos = player:getPosition() - if not pos then - return - end - - local minimapWidget = mapController.ui.minimapBorder.minimap - if not (minimapWidget) or minimapWidget:isDragging() then - return - end - - if not minimapWidget.fullMapView then - minimapWidget:setCameraPosition(pos) - end - - minimapWidget:setCrossPosition(pos) - virtualFloor = pos.z - refreshVirtualFloors() -end - -mapController = Controller:new() -mapController:setUI('mainmappanel', modules.game_interface.getMainRightPanel()) - -local mapControllerEvents = mapController:addEvent(LocalPlayer, { - onPositionChange = onPositionChange -}) - -function onChangeWorldTime(hour, minute) - currentDayTime = { - h = hour % 24, - m = minute - } - - if dayTimeEvent ~= nil then - removeEvent(dayTimeEvent) - dayTimeEvent = nil - end - - dayTimeEvent = scheduleEvent(function() - local nextH = currentDayTime.h - local nextM = currentDayTime.m + 12 - if nextM >= 60 then - nextH = nextH + 1 - nextM = nextM - 60 - end - onChangeWorldTime(nextH, nextM) - end, 30000) - - local position = math.floor((124 / (24 * 60)) * ((hour * 60) + minute)) - local mainWidth = 31 - local secondaryWidth = 0 - - if (position + 31) >= 124 then - secondaryWidth = ((position + 31) - 124) + 1 - mainWidth = 31 - secondaryWidth - end - - mapController.ui.rosePanel.ambients.main:setWidth(mainWidth) - mapController.ui.rosePanel.ambients.secondary:setWidth(secondaryWidth) - - if secondaryWidth == 0 then - mapController.ui.rosePanel.ambients.secondary:hide() - else - mapController.ui.rosePanel.ambients.secondary:setImageClip('0 0 ' .. secondaryWidth .. ' 31') - mapController.ui.rosePanel.ambients.secondary:show() - end - - if mainWidth == 0 then - mapController.ui.rosePanel.ambients.main:hide() - else - mapController.ui.rosePanel.ambients.main:setImageClip(position .. ' 0 ' .. mainWidth .. ' 31') - mapController.ui.rosePanel.ambients.main:show() - end -end - -function mapController:onInit() - mapControllerEvents:connect() - mapControllerEvents:execute('onPositionChange') - - self.ui.minimapBorder.minimap:getChildById('floorUpButton'):hide() - self.ui.minimapBorder.minimap:getChildById('floorDownButton'):hide() - self.ui.minimapBorder.minimap:getChildById('zoomInButton'):hide() - self.ui.minimapBorder.minimap:getChildById('zoomOutButton'):hide() - self.ui.minimapBorder.minimap:getChildById('resetButton'):hide() - - connect(g_game, { - onChangeWorldTime = onChangeWorldTime - }) -end - -function mapController:onGameStart() - -- Load Map - g_minimap.clean() - - local minimapFile = '/minimap' - local loadFnc = nil - - if otmm then - minimapFile = minimapFile .. '.otmm' - loadFnc = g_minimap.loadOtmm - else - minimapFile = minimapFile .. '_' .. g_game.getClientVersion() .. '.otcm' - loadFnc = g_map.loadOtcm - end - - if g_resources.fileExists(minimapFile) then - loadFnc(minimapFile) - end - - self.ui.minimapBorder.minimap:load() -end - -function mapController:onGameEnd() - -- Save Map - if otmm then - g_minimap.saveOtmm('/minimap.otmm') - else - g_map.saveOtcm('/minimap_' .. g_game.getClientVersion() .. '.otcm') - end - - self.ui.minimapBorder.minimap:save() -end - -function mapController:onTerminate() - mapControllerEvents:disconnect() - disconnect(g_game, { - onChangeWorldTime = onChangeWorldTime - }) -end - -function zoomIn() - mapController.ui.minimapBorder.minimap:zoomIn() -end - -function zoomOut() - mapController.ui.minimapBorder.minimap:zoomOut() -end - -function fullscreen() - local minimapWidget = mapController.ui.minimapBorder.minimap - if not minimapWidget then - minimapWidget = fullscreenWidget - end - local zoom; - - if not minimapWidget then - return - end - - if minimapWidget.fullMapView then - fullscreenWidget = nil - minimapWidget:setParent(mapController.ui.minimapBorder) - minimapWidget:fill('parent') - mapController.ui:show(true) - zoom = minimapWidget.zoomMinimap - mapController:unbindKeyDown('Escape', fullscreen) - minimapWidget.fullMapView = false - else - fullscreenWidget = minimapWidget - mapController.ui:hide(true) - minimapWidget:setParent(modules.game_interface.getRootPanel()) - minimapWidget:fill('parent') - zoom = minimapWidget.zoomFullmap - mapController:bindKeyDown('Escape', fullscreen) - minimapWidget.fullMapView = true - end - - local pos = oldPos or minimapWidget:getCameraPosition() - oldPos = minimapWidget:getCameraPosition() - minimapWidget:setZoom(zoom) - minimapWidget:setCameraPosition(pos) -end - -function upLayer() - if virtualFloor == 0 then - return - end - - mapController.ui.minimapBorder.minimap:floorUp(1) - virtualFloor = virtualFloor - 1 - refreshVirtualFloors() -end - -function downLayer() - if virtualFloor == 15 then - return - end - - mapController.ui.minimapBorder.minimap:floorDown(1) - virtualFloor = virtualFloor + 1 - refreshVirtualFloors() -end - -function onClickRoseButton(dir) - if dir == 'north' then - mapController.ui.minimapBorder.minimap:move(0, 1) - elseif dir == 'north-east' then - mapController.ui.minimapBorder.minimap:move(-1, 1) - elseif dir == 'east' then - mapController.ui.minimapBorder.minimap:move(-1, 0) - elseif dir == 'south-east' then - mapController.ui.minimapBorder.minimap:move(-1, -1) - elseif dir == 'south' then - mapController.ui.minimapBorder.minimap:move(0, -1) - elseif dir == 'south-west' then - mapController.ui.minimapBorder.minimap:move(1, -1) - elseif dir == 'west' then - mapController.ui.minimapBorder.minimap:move(1, 0) - elseif dir == 'north-west' then - mapController.ui.minimapBorder.minimap:move(1, 1) - end -end - -function resetMap() - mapController.ui.minimapBorder.minimap:reset() - local player = g_game.getLocalPlayer() - if player then - virtualFloor = player:getPosition().z - refreshVirtualFloors() - end -end - -function getMiniMapUi() - return mapController.ui.minimapBorder.minimap -end --- @ End of Minimap diff --git a/modules/game_mainpanel/mainpanel.otmod b/modules/game_mainpanel/mainpanel.otmod index cc2cf2b32b..676dcab130 100644 --- a/modules/game_mainpanel/mainpanel.otmod +++ b/modules/game_mainpanel/mainpanel.otmod @@ -5,5 +5,5 @@ Module website: https://github.com/edubart/otclient sandboxed: true scripts: [ mainpanel ] - @onLoad: init() - @onUnload: terminate() \ No newline at end of file + @onLoad: optionsController:init() + @onUnload: optionsController:terminate() \ No newline at end of file diff --git a/modules/game_minimap/minimap.lua b/modules/game_minimap/minimap.lua new file mode 100644 index 0000000000..e63c8525f9 --- /dev/null +++ b/modules/game_minimap/minimap.lua @@ -0,0 +1,248 @@ +-- @ Minimap +local minimapWidget = nil -- bot fix +local otmm = true +local oldPos = nil +local fullscreenWidget +local virtualFloor = 7 +local dayTimeEvent +local currentDayTime = { + h = 12, + m = 0 +} + +local function refreshVirtualFloors() + mapController.ui.layersPanel.layersMark:setMarginTop(((virtualFloor + 1) * 4) - 3) + mapController.ui.layersPanel.automapLayers:setImageClip((virtualFloor * 14) .. ' 0 14 67') +end + +local function onPositionChange() + local player = g_game.getLocalPlayer() + if not player then + return + end + + local pos = player:getPosition() + if not pos then + return + end + + local minimapWidget = mapController.ui.minimapBorder.minimap + if not (minimapWidget) or minimapWidget:isDragging() then + return + end + + if not minimapWidget.fullMapView then + minimapWidget:setCameraPosition(pos) + end + + minimapWidget:setCrossPosition(pos) + virtualFloor = pos.z + refreshVirtualFloors() +end + +mapController = Controller:new() +mapController:setUI('minimap', modules.game_interface.getMainRightPanel()) + +local mapControllerEvents = mapController:addEvent(LocalPlayer, { + onPositionChange = onPositionChange +}) + +function onChangeWorldTime(hour, minute) + currentDayTime = { + h = hour % 24, + m = minute + } + + if dayTimeEvent ~= nil then + removeEvent(dayTimeEvent) + dayTimeEvent = nil + end + + dayTimeEvent = scheduleEvent(function() + local nextH = currentDayTime.h + local nextM = currentDayTime.m + 12 + if nextM >= 60 then + nextH = nextH + 1 + nextM = nextM - 60 + end + onChangeWorldTime(nextH, nextM) + end, 30000) + + local position = math.floor((124 / (24 * 60)) * ((hour * 60) + minute)) + local mainWidth = 31 + local secondaryWidth = 0 + + if (position + 31) >= 124 then + secondaryWidth = ((position + 31) - 124) + 1 + mainWidth = 31 - secondaryWidth + end + + mapController.ui.rosePanel.ambients.main:setWidth(mainWidth) + mapController.ui.rosePanel.ambients.secondary:setWidth(secondaryWidth) + + if secondaryWidth == 0 then + mapController.ui.rosePanel.ambients.secondary:hide() + else + mapController.ui.rosePanel.ambients.secondary:setImageClip('0 0 ' .. secondaryWidth .. ' 31') + mapController.ui.rosePanel.ambients.secondary:show() + end + + if mainWidth == 0 then + mapController.ui.rosePanel.ambients.main:hide() + else + mapController.ui.rosePanel.ambients.main:setImageClip(position .. ' 0 ' .. mainWidth .. ' 31') + mapController.ui.rosePanel.ambients.main:show() + end +end + +function mapController:onInit() + mapControllerEvents:connect() + mapControllerEvents:execute('onPositionChange') + + self.ui.minimapBorder.minimap:getChildById('floorUpButton'):hide() + self.ui.minimapBorder.minimap:getChildById('floorDownButton'):hide() + self.ui.minimapBorder.minimap:getChildById('zoomInButton'):hide() + self.ui.minimapBorder.minimap:getChildById('zoomOutButton'):hide() + self.ui.minimapBorder.minimap:getChildById('resetButton'):hide() + + connect(g_game, { + onChangeWorldTime = onChangeWorldTime + }) +end + +function mapController:onGameStart() + -- Load Map + g_minimap.clean() + + local minimapFile = '/minimap' + local loadFnc = nil + + if otmm then + minimapFile = minimapFile .. '.otmm' + loadFnc = g_minimap.loadOtmm + else + minimapFile = minimapFile .. '_' .. g_game.getClientVersion() .. '.otcm' + loadFnc = g_map.loadOtcm + end + + if g_resources.fileExists(minimapFile) then + loadFnc(minimapFile) + end + + self.ui.minimapBorder.minimap:load() +end + +function mapController:onGameEnd() + -- Save Map + if otmm then + g_minimap.saveOtmm('/minimap.otmm') + else + g_map.saveOtcm('/minimap_' .. g_game.getClientVersion() .. '.otcm') + end + + self.ui.minimapBorder.minimap:save() +end + +function mapController:onTerminate() + mapControllerEvents:disconnect() + disconnect(g_game, { + onChangeWorldTime = onChangeWorldTime + }) +end + +function zoomIn() + mapController.ui.minimapBorder.minimap:zoomIn() +end + +function zoomOut() + mapController.ui.minimapBorder.minimap:zoomOut() +end + +function fullscreen() + local minimapWidget = mapController.ui.minimapBorder.minimap + if not minimapWidget then + minimapWidget = fullscreenWidget + end + local zoom; + + if not minimapWidget then + return + end + + if minimapWidget.fullMapView then + fullscreenWidget = nil + minimapWidget:setParent(mapController.ui.minimapBorder) + minimapWidget:fill('parent') + mapController.ui:show(true) + zoom = minimapWidget.zoomMinimap + mapController:unbindKeyDown('Escape', fullscreen) + minimapWidget.fullMapView = false + else + fullscreenWidget = minimapWidget + mapController.ui:hide(true) + minimapWidget:setParent(modules.game_interface.getRootPanel()) + minimapWidget:fill('parent') + zoom = minimapWidget.zoomFullmap + mapController:bindKeyDown('Escape', fullscreen) + minimapWidget.fullMapView = true + end + + local pos = oldPos or minimapWidget:getCameraPosition() + oldPos = minimapWidget:getCameraPosition() + minimapWidget:setZoom(zoom) + minimapWidget:setCameraPosition(pos) +end + +function upLayer() + if virtualFloor == 0 then + return + end + + mapController.ui.minimapBorder.minimap:floorUp(1) + virtualFloor = virtualFloor - 1 + refreshVirtualFloors() +end + +function downLayer() + if virtualFloor == 15 then + return + end + + mapController.ui.minimapBorder.minimap:floorDown(1) + virtualFloor = virtualFloor + 1 + refreshVirtualFloors() +end + +function onClickRoseButton(dir) + if dir == 'north' then + mapController.ui.minimapBorder.minimap:move(0, 1) + elseif dir == 'north-east' then + mapController.ui.minimapBorder.minimap:move(-1, 1) + elseif dir == 'east' then + mapController.ui.minimapBorder.minimap:move(-1, 0) + elseif dir == 'south-east' then + mapController.ui.minimapBorder.minimap:move(-1, -1) + elseif dir == 'south' then + mapController.ui.minimapBorder.minimap:move(0, -1) + elseif dir == 'south-west' then + mapController.ui.minimapBorder.minimap:move(1, -1) + elseif dir == 'west' then + mapController.ui.minimapBorder.minimap:move(1, 0) + elseif dir == 'north-west' then + mapController.ui.minimapBorder.minimap:move(1, 1) + end +end + +function resetMap() + mapController.ui.minimapBorder.minimap:reset() + local player = g_game.getLocalPlayer() + if player then + virtualFloor = player:getPosition().z + refreshVirtualFloors() + end +end + +function getMiniMapUi() + return mapController.ui.minimapBorder.minimap +end +-- @ End of Minimap diff --git a/modules/game_minimap/minimap.otmod b/modules/game_minimap/minimap.otmod new file mode 100644 index 0000000000..959f182da3 --- /dev/null +++ b/modules/game_minimap/minimap.otmod @@ -0,0 +1,9 @@ +Module + name: game_minimap + description: Manage minimap + author: edubart, BeniS + website: https://github.com/edubart/otclient + sandboxed: true + scripts: [ minimap ] + @onLoad: mapController:init() + @onUnload: mapController:terminate() diff --git a/modules/game_mainpanel/mainmappanel.otui b/modules/game_minimap/minimap.otui similarity index 100% rename from modules/game_mainpanel/mainmappanel.otui rename to modules/game_minimap/minimap.otui diff --git a/modules/game_outfit/serverSIDE/if c++ (protocol)/c++.txt b/modules/game_outfit/serverSIDE/if c++ (protocol)/c++.txt new file mode 100644 index 0000000000..81b3fc18bf --- /dev/null +++ b/modules/game_outfit/serverSIDE/if c++ (protocol)/c++.txt @@ -0,0 +1,11 @@ +Tfs 0.4: + +Tfs 1.5: +- https://github.com/kokekanon/forgottenserver-downgrade/pull/2 +- https://github.com/kokekanon/forgottenserver-downgrade/pull/7 +- https://github.com/kokekanon/forgottenserver-downgrade/pull/9 + +Tfs 1.4.2: +- https://github.com/kokekanon/TFS-1.4.2-Compatible-Aura-Effect-Wings-Shader-MEHAH/commit/77f80d505b01747a7c519e224d11c124de157a8f + +canary: diff --git a/modules/game_outfit/serverSIDE/if c++ (protocol)/not yet.txt b/modules/game_outfit/serverSIDE/if c++ (protocol)/not yet.txt deleted file mode 100644 index 455d0ef5dd..0000000000 --- a/modules/game_outfit/serverSIDE/if c++ (protocol)/not yet.txt +++ /dev/null @@ -1,8 +0,0 @@ -Tfs 1.5: -https://github.com/kokekanon/forgottenserver-downgrade/pull/2 -https://github.com/kokekanon/forgottenserver-downgrade/pull/7 -https://github.com/kokekanon/forgottenserver-downgrade/pull/9 - -Tfs 1.4.2: - -canary: From a36084ef3234b611eaf179ec39c46f0afbb7e038 Mon Sep 17 00:00:00 2001 From: Renato Machado Date: Mon, 24 Jun 2024 16:43:36 -0300 Subject: [PATCH 4/9] fix: crash on call g_shaders.clear() via lua --- src/framework/luafunctions.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/framework/luafunctions.cpp b/src/framework/luafunctions.cpp index 99f8fbc721..35ac04dc18 100644 --- a/src/framework/luafunctions.cpp +++ b/src/framework/luafunctions.cpp @@ -436,7 +436,9 @@ void Application::registerLuaFunctions() g_lua.bindSingletonFunction("g_shaders", "setupMountShader", &ShaderManager::setupMountShader, &g_shaders); g_lua.bindSingletonFunction("g_shaders", "addMultiTexture", &ShaderManager::addMultiTexture, &g_shaders); g_lua.bindSingletonFunction("g_shaders", "getShader", &ShaderManager::getShader, &g_shaders); - g_lua.bindSingletonFunction("g_shaders", "clear", &ShaderManager::clear, &g_shaders); + g_lua.bindClassStaticFunction("g_shaders", "clear", [] { + g_mainDispatcher.addEvent([] { g_shaders.clear(); }); + }); // UIWidget g_lua.registerClass(); From ed8cea5787b37010dfca9658941c395087fa06df Mon Sep 17 00:00:00 2001 From: Renato Machado Date: Tue, 25 Jun 2024 13:47:54 -0300 Subject: [PATCH 5/9] fix: autoreload --- src/framework/core/modulemanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/framework/core/modulemanager.cpp b/src/framework/core/modulemanager.cpp index 2baa830d24..2152585f39 100644 --- a/src/framework/core/modulemanager.cpp +++ b/src/framework/core/modulemanager.cpp @@ -161,7 +161,7 @@ void ModuleManager::enableAutoReload() { std::vector modules; for (const auto& module : getModules()) { - if (!module->isReloadable() || !module->canReload()) + if (!module->isReloadable()) continue; ModuleData data = { module, {} }; From 26475c9a2c667d054d6621906cbdd23bb68ac766 Mon Sep 17 00:00:00 2001 From: matheussf Date: Wed, 26 Jun 2024 04:16:35 -0300 Subject: [PATCH 6/9] feat: menu hide action bar and hide spell cooldown group (#793) * feat: menu hide action bar and hide spell cooldown group * fix: hide cooldown groups button should be aligned with options * fix: when the button is pressed should also update the menu option \ remove add anchor - the height is enough --- modules/client_options/data_options.lua | 12 +++++++ modules/client_options/general.otui | 22 ++++++++++++ modules/game_actionbar/game_actionbar.lua | 10 ++++++ modules/game_cooldown/cooldown.lua | 41 ++++++++++++++--------- 4 files changed, 69 insertions(+), 16 deletions(-) diff --git a/modules/client_options/data_options.lua b/modules/client_options/data_options.lua index 60de2c9df5..9e4825d094 100644 --- a/modules/client_options/data_options.lua +++ b/modules/client_options/data_options.lua @@ -308,6 +308,18 @@ return { modules.game_interface.getRightExtraPanel():setOn(value) end }, + showActionbar = { + value = false, + action = function(value, options, controller, panels, extraWidgets) + modules.game_actionbar.setActionBarVisible(value) + end + }, + showSpellGroupCooldowns = { + value = true, + action = function(value, options, controller, panels, extraWidgets) + modules.game_cooldown.setSpellGroupCooldownsVisible(value) + end + }, dontStretchShrink = { value = false, action = function(value, options, controller, panels, extraWidgets) diff --git a/modules/client_options/general.otui b/modules/client_options/general.otui index c365213837..0c600986b4 100644 --- a/modules/client_options/general.otui +++ b/modules/client_options/general.otui @@ -43,6 +43,28 @@ Panel id: showRightExtraPanel !text: tr('Show an extra right panel') + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showActionbar + !text: tr('Show action bar') + + SmallReversedQtPanel + anchors.left: parent.left + anchors.right: parent.right + anchors.top: prev.bottom + margin-top: 7 + height: 22 + + OptionCheckBox + id: showSpellGroupCooldowns + !text: tr('Show spell group cooldowns') + SmallReversedQtPanel anchors.left: parent.left anchors.right: parent.right diff --git a/modules/game_actionbar/game_actionbar.lua b/modules/game_actionbar/game_actionbar.lua index cf3c8c5569..d2b4dc4e21 100644 --- a/modules/game_actionbar/game_actionbar.lua +++ b/modules/game_actionbar/game_actionbar.lua @@ -913,6 +913,16 @@ function loadActionBar() setupHotkeys() end +function setActionBarVisible(visible) + if visible then + actionBar:setHeight(34) + actionBar:show() + else + actionBar:setHeight(0) + actionBar:hide() + end +end + function round(n) return n % 1 >= 0.5 and math.ceil(n) or math.floor(n) end diff --git a/modules/game_cooldown/cooldown.lua b/modules/game_cooldown/cooldown.lua index a1a8ecb7f1..027ab6831c 100644 --- a/modules/game_cooldown/cooldown.lua +++ b/modules/game_cooldown/cooldown.lua @@ -23,7 +23,13 @@ function init() cooldownButton = modules.game_mainpanel.addToggleButton('cooldownButton', tr('Cooldowns'), '/images/options/cooldowns', toggle, false, 5) - cooldownButton:setOn(true) + if modules.client_options.getOption('showSpellGroupCooldowns') then + cooldownButton:setOn(true) + modules.client_options.setOption('showSpellGroupCooldowns', true) + else + cooldownButton:setOn(false) + modules.client_options.setOption('showSpellGroupCooldowns', false) + end cooldownButton:hide() @@ -100,43 +106,34 @@ end function onMiniWindowOpen() cooldownButton:setOn(true) + modules.client_options.setOption('showSpellGroupCooldowns', true) end function onMiniWindowClose() cooldownButton:setOn(false) + modules.client_options.setOption('showSpellGroupCooldowns', false) end function toggle() local console = modules.game_console.consolePanel if cooldownButton:isOn() then - cooldownWindow:hide() + modules.client_options.setOption('showSpellGroupCooldowns', false) cooldownButton:setOn(false) - - if console then - console:addAnchor(AnchorTop, modules.game_actionbar.getPanelActionbar():getId(), AnchorBottom) - end else - cooldownWindow:show() + modules.client_options.setOption('showSpellGroupCooldowns', true) cooldownButton:setOn(true) - - if console then - console:addAnchor(AnchorTop, cooldownWindow:getId(), AnchorBottom) - end - end end function online() - if g_game.getFeature(GameSpellList) then - cooldownButton:show() cooldownButton:setOn(true) + modules.client_options.setOption('showSpellGroupCooldowns', true) else - cooldownButton:hide() cooldownButton:setOn(false) - cooldownWindow:hide() + modules.client_options.setOption('showSpellGroupCooldowns', false) end if not lastPlayer or lastPlayer ~= g_game.getCharacterName() then @@ -275,3 +272,15 @@ function onSpellGroupCooldown(groupId, duration) groupCooldown[groupId] = true end end + +function setSpellGroupCooldownsVisible(visible) + if visible then + cooldownWindow:setHeight(30) + cooldownWindow:show() + else + cooldownWindow:hide() + cooldownWindow:setHeight(10) + end + + cooldownButton:setOn(visible) +end \ No newline at end of file From bf38f4dedd55c92044f71be0aacdb87c745a205a Mon Sep 17 00:00:00 2001 From: matheussf Date: Wed, 26 Jun 2024 04:16:51 -0300 Subject: [PATCH 7/9] fix: enable chat mode switch with enter, disable with esc and switch pressing the button on console ui (#792) --- modules/game_console/console.lua | 5 +++-- modules/game_console/console.otui | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/game_console/console.lua b/modules/game_console/console.lua index 6c2d47a33e..d3eb3ab644 100644 --- a/modules/game_console/console.lua +++ b/modules/game_console/console.lua @@ -282,10 +282,8 @@ function toggleChat() consoleToggleChat.isChecked = not consoleToggleChat.isChecked if consoleToggleChat.isChecked then consoleToggleChat:setText(tr('Chat Off')) - consoleToggleChat.isChecked = true else consoleToggleChat:setText(tr('Chat On')) - consoleToggleChat.isChecked = false end end @@ -372,6 +370,8 @@ function disableChatOnCall() if isChatEnabled() and not consoleToggleChat.isChecked then toggleChat() end + + updateChatMode() end function isChatEnabled() @@ -447,6 +447,7 @@ function load() else consoleToggleChat:setText(tr('Chat On')) end + updateChatMode() end loadCommunicationSettings() end diff --git a/modules/game_console/console.otui b/modules/game_console/console.otui index c15add9e92..0233d8a134 100644 --- a/modules/game_console/console.otui +++ b/modules/game_console/console.otui @@ -254,4 +254,4 @@ Panel self.isChecked = true self:setText(tr('Chat Off')) end - @onCheckChange: updateChatMode() + updateChatMode() From 97ffa75b18ae2d39efcc1fdfb83d67f08b5cebf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renato=20Foot=20Guimar=C3=A3es=20Costallat?= Date: Wed, 26 Jun 2024 09:43:10 -0300 Subject: [PATCH 8/9] fix: windows gha build (#786) --- vcpkg.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vcpkg.json b/vcpkg.json index d43aef6307..a06e85f29f 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -30,5 +30,5 @@ "platform": "windows | osx" } ], - "builtin-baseline":"13c3c0fcc203d179f4443fe48d252e3ff220cbeb" + "builtin-baseline":"01f602195983451bc83e72f4214af2cbc495aa94" } From 13a3d188d35d69f1f2917fd293d197d3748f558c Mon Sep 17 00:00:00 2001 From: Luan Luciano Date: Wed, 26 Jun 2024 19:51:48 -0300 Subject: [PATCH 9/9] fix: issues in protocolgameparse.cpp and standardized loops (#795) --- src/client/protocolgameparse.cpp | 101 +++++++++++++++---------------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/src/client/protocolgameparse.cpp b/src/client/protocolgameparse.cpp index c042d196cf..d9aa12a323 100644 --- a/src/client/protocolgameparse.cpp +++ b/src/client/protocolgameparse.cpp @@ -1428,8 +1428,8 @@ void ProtocolGame::parseAnimatedText(const InputMessagePtr& msg) void ProtocolGame::parseAnthem(const InputMessagePtr& msg) { - uint8_t type = msg->getU8(); - if (type >= 0 && type <= 2) { + const uint8_t type = msg->getU8(); + if (type <= 2) { msg->getU16(); // Anthem id } } @@ -1472,7 +1472,7 @@ void ProtocolGame::parseItemClasses(const InputMessagePtr& msg) if (g_game.getFeature(Otc::GameDynamicForgeVariables)) { const uint8_t grades = msg->getU8(); - for (auto i = 0; i < grades; i++) { + for (auto i = 0; i < grades; ++i) { msg->getU8(); // Tier msg->getU8(); // Exalted cores } @@ -1480,14 +1480,14 @@ void ProtocolGame::parseItemClasses(const InputMessagePtr& msg) if (g_game.getFeature(Otc::GameForgeConvergence)) { // Convergence fusion prices per tier const uint8_t totalConvergenceFusion = msg->getU8(); // total size count - for (auto i = 0; i < totalConvergenceFusion; i++) { + for (auto i = 0; i < totalConvergenceFusion; ++i) { msg->getU8(); // tier id msg->getU64(); // upgrade cost } // Convergence transfer prices per tier const uint8_t totalConvergenceTransfer = msg->getU8(); // total size count - for (auto i = 0; i < totalConvergenceTransfer; i++) { + for (auto i = 0; i < totalConvergenceTransfer; ++i) { msg->getU8(); // tier id msg->getU64(); // upgrade cost } @@ -2094,6 +2094,7 @@ void ProtocolGame::parseOpenChannel(const InputMessagePtr& msg) const uint16_t joinedPlayers = msg->getU16(); for (auto i = 0; i < joinedPlayers; ++i) g_game.formatCreatureName(msg->getString()); // player name + const uint16_t invitedPlayers = msg->getU16(); for (auto i = 0; i < invitedPlayers; ++i) g_game.formatCreatureName(msg->getString()); // player name @@ -2180,11 +2181,11 @@ void ProtocolGame::parseTextMessage(const InputMessagePtr& msg) color[1] = msg->getU8(); text = msg->getString(); - for (auto i = 0; i < 2; ++i) { - if (value[i] == 0) + for (auto j = 0; j < 2; ++j) { + if (value[j] == 0) continue; - g_map.addAnimatedText(std::make_shared(std::to_string(value[i]), color[i]), pos); + g_map.addAnimatedText(std::make_shared(std::to_string(value[j]), color[j]), pos); } break; } @@ -2407,7 +2408,7 @@ void ProtocolGame::parseKillTracker(const InputMessagePtr& msg) // corpse items const uint8_t size = msg->getU8(); - for (auto i = 0; i < size; i++) { + for (auto i = 0; i < size; ++i) { getItem(msg); } } @@ -2428,8 +2429,8 @@ void ProtocolGame::parseVipAdd(const InputMessagePtr& msg) const uint32_t status = msg->getU8(); if (g_game.getFeature(Otc::GameVipGroups)) { - uint8_t size = msg->getU8(); - for (int i = 0; size; i++) { + const uint8_t size = msg->getU8(); + for (auto i = 0; i < size; ++i) { msg->getU8(); // Group ID } } @@ -2452,8 +2453,8 @@ void ProtocolGame::parseVipLogout(const InputMessagePtr& msg) { // On QT client this operation is being processed on the 'parseVipState', now this opcode if for groups if (g_game.getFeature(Otc::GameVipGroups)) { - uint8_t size = msg->getU8(); - for (int i = 0; size; i++) { + const uint8_t size = msg->getU8(); + for (auto i = 0; i < size; ++i) { msg->getU8(); // Group ID msg->getString(); // Group name msg->getU8(); // Can edit group? (bool) @@ -3202,7 +3203,7 @@ void ProtocolGame::parseBestiaryTracker(const InputMessagePtr& msg) } const uint8_t size = msg->getU8(); - for (uint8_t i = 0; i < size; i++) { + for (auto i = 0; i < size; ++i) { msg->getU16(); // RaceID msg->getU32(); // Kill count msg->getU16(); // First unlock @@ -3215,13 +3216,13 @@ void ProtocolGame::parseBestiaryTracker(const InputMessagePtr& msg) void ProtocolGame::parseTaskHuntingBasicData(const InputMessagePtr& msg) { const uint16_t preys = msg->getU16(); - for (uint16_t i = 0; i < preys; i++) { + for (auto i = 0; i < preys; ++i) { msg->getU16(); // RaceID msg->getU8(); // Difficult } const uint8_t options = msg->getU8(); - for (uint8_t j = 0; j < options; j++) { + for (auto j = 0; j < options; ++j) { msg->getU8(); // Difficult msg->getU8(); // Stars msg->getU16(); // First kill @@ -3246,16 +3247,16 @@ void ProtocolGame::parseTaskHuntingData(const InputMessagePtr& msg) case Otc::PREY_TASK_STATE_SELECTION: { const uint16_t creatures = msg->getU16(); - for (uint16_t i = 0; i < creatures; i++) { + for (auto i = 0; i < creatures; ++i) { msg->getU16(); // RaceID msg->getU8(); // Is unlocked } + break; } - break; case Otc::PREY_TASK_STATE_LIST_SELECTION: { const uint16_t creatures = msg->getU16(); - for (uint16_t i = 0; i < creatures; i++) { + for (auto i = 0; i < creatures; ++i) { msg->getU16(); // RaceID msg->getU8(); // Is unlocked } @@ -3329,7 +3330,7 @@ void ProtocolGame::parsePartyAnalyzer(const InputMessagePtr& msg) msg->getU32(); // LeaderID msg->getU8(); // Price type const uint8_t size = msg->getU8(); - for (uint8_t i = 0; i < size; i++) { + for (auto i = 0; i < size; ++i) { msg->getU32(); // MemberID msg->getU8(); // Highlight msg->getU64(); // Loot @@ -3341,7 +3342,7 @@ void ProtocolGame::parsePartyAnalyzer(const InputMessagePtr& msg) uint8_t names = msg->getU8(); if (names != 0) { names = msg->getU8(); - for (uint8_t i = 0; i < names; i++) { + for (auto i = 0; i < names; ++i) { msg->getU32(); // MemberID msg->getString(); // Member name } @@ -3350,14 +3351,13 @@ void ProtocolGame::parsePartyAnalyzer(const InputMessagePtr& msg) void ProtocolGame::parseImbuementDurations(const InputMessagePtr& msg) { - uint8_t itemListSize = msg->getU8(); // amount of items to display - - for (uint8_t itemIndex = 0; itemIndex < itemListSize; ++itemIndex) { + const uint8_t itemListSize = msg->getU8(); // amount of items to display + for (auto itemIndex = 0; itemIndex < itemListSize; ++itemIndex) { msg->getU8(); // item slot id getItem(msg); // imbued item - uint8_t imbuingSlotCount = msg->getU8(); // total amount of imbuing slots on item - for (uint8_t imbuIndex = 0; imbuIndex < imbuingSlotCount; ++imbuIndex) { + const uint8_t imbuingSlotCount = msg->getU8(); // total amount of imbuing slots on item + for (auto imbuIndex = 0; imbuIndex < imbuingSlotCount; ++imbuIndex) { bool slotImbued = msg->getU8(); // 0 - empty, 1 - imbued if (slotImbued) { @@ -3399,7 +3399,7 @@ void ProtocolGame::parseBlessDialog(const InputMessagePtr& msg) const uint8_t totalBless = msg->getU8(); // total bless // parse each bless - for (auto i = 0; i < totalBless; i++) { + for (auto i = 0; i < totalBless; ++i) { msg->getU16(); // bless bit wise msg->getU8(); // player bless count msg->getU8(); // store? @@ -3418,7 +3418,7 @@ void ProtocolGame::parseBlessDialog(const InputMessagePtr& msg) // parse log const uint8_t logCount = msg->getU8(); // log count - for (auto i = 0; i < logCount; i++) { + for (auto i = 0; i < logCount; ++i) { msg->getU32(); // timestamp msg->getU8(); // color message (0 = white loss, 1 = red) msg->getString(); // history message @@ -3454,7 +3454,7 @@ void ProtocolGame::parseItemsPrice(const InputMessagePtr& msg) { const uint16_t priceCount = msg->getU16(); // count - for (auto i = 0; i < priceCount; i++) { + for (auto i = 0; i < priceCount; ++i) { const uint16_t itemId = msg->getU16(); // item client id if (g_game.getClientVersion() >= 1281) { const auto& item = Item::create(itemId); @@ -3526,13 +3526,13 @@ void ProtocolGame::parseOpenRewardWall(const InputMessagePtr& msg) namespace { void parseRewardDay(const InputMessagePtr& msg) { - uint8_t redeemMode = msg->getU8(); // reward type + const uint8_t redeemMode = msg->getU8(); // reward type if (redeemMode == 1) { // select x items from the list msg->getU8(); // items to select - uint8_t itemListSize = msg->getU8(); - for (uint8_t listIndex = 0; listIndex < itemListSize; ++listIndex) { + const uint8_t itemListSize = msg->getU8(); + for (auto listIndex = 0; listIndex < itemListSize; ++listIndex) { msg->getU16(); // Item ID msg->getString(); // Item name msg->getU32(); // Item weight @@ -3540,9 +3540,9 @@ namespace { } else if (redeemMode == 2) { // no choice, click to redeem all - uint8_t itemListSize = msg->getU8(); - for (uint8_t listIndex = 0; listIndex < itemListSize; ++listIndex) { - uint8_t bundleType = msg->getU8(); // type of reward + const uint8_t itemListSize = msg->getU8(); + for (auto listIndex = 0; listIndex < itemListSize; ++listIndex) { + const uint8_t bundleType = msg->getU8(); // type of reward switch (bundleType) { case 1: { // Items @@ -3572,13 +3572,13 @@ namespace { void ProtocolGame::parseDailyReward(const InputMessagePtr& msg) { const uint8_t days = msg->getU8(); // Reward count (7 days) - for (uint8_t day = 1; day <= days; day++) { + for (auto day = 1; day <= days; ++day) { parseRewardDay(msg); // Free account parseRewardDay(msg); // Premium account } const uint8_t bonus = msg->getU8(); - for (uint8_t i = 0; i < bonus; i++) { + for (auto i = 0; i < bonus; ++i) { msg->getString(); // Bonus name msg->getU8(); // Bonus ID } @@ -3591,7 +3591,7 @@ void ProtocolGame::parseRewardHistory(const InputMessagePtr& msg) { const uint8_t historyCount = msg->getU8(); // history count - for (auto i = 0; i < historyCount; i++) { + for (auto i = 0; i < historyCount; ++i) { msg->getU32(); // timestamp msg->getU8(); // is Premium msg->getString(); // description @@ -3628,7 +3628,7 @@ std::vector ProtocolGame::getPreyMonsters(const InputMessagePtr& ms { std::vector monsters; const uint8_t monstersSize = msg->getU8(); // monster list size - for (uint8_t i = 0; i < monstersSize; i++) + for (auto i = 0; i < monstersSize; ++i) monsters.emplace_back(getPreyMonster(msg)); return monsters; @@ -3697,7 +3697,7 @@ void ProtocolGame::parsePreyData(const InputMessagePtr& msg) { std::vector races; const uint16_t creatures = msg->getU16(); - for (uint16_t i = 0; i < creatures; i++) { + for (auto i = 0; i < creatures; ++i) { races.push_back(msg->getU16()); // RaceID } const uint32_t nextFreeReroll = msg->getU32(); // next free roll @@ -3712,7 +3712,7 @@ void ProtocolGame::parsePreyData(const InputMessagePtr& msg) std::vector races; const uint16_t creatures = msg->getU16(); - for (uint16_t i = 0; i < creatures; i++) { + for (auto i = 0; i < creatures; ++i) { races.push_back(msg->getU16()); // RaceID } const uint32_t nextFreeReroll = msg->getU32(); // next free roll @@ -3754,7 +3754,7 @@ Imbuement ProtocolGame::getImbuementInfo(const InputMessagePtr& msg) imbuement.premiumOnly = msg->getU8(); // is premium const uint8_t itemsSize = msg->getU8(); // items size - for (uint8_t i = 0; i < itemsSize; i++) { + for (auto i = 0; i < itemsSize; ++i) { const uint16_t id = msg->getU16(); // item client ID const auto& description = msg->getString(); // item name const uint16_t count = msg->getU16(); // count @@ -3782,25 +3782,25 @@ void ProtocolGame::parseImbuementWindow(const InputMessagePtr& msg) const uint8_t slot = msg->getU8(); // slot id std::unordered_map> activeSlots; - for (uint8_t i = 0; i < slot; i++) { + for (auto j = 0; j < slot; j++) { const uint8_t firstByte = msg->getU8(); if (firstByte == 0x01) { Imbuement imbuement = getImbuementInfo(msg); const uint32_t duration = msg->getU32(); // duration const uint32_t removalCost = msg->getU32(); // removecost - activeSlots[i] = std::make_tuple(imbuement, duration, removalCost); + activeSlots[j] = std::make_tuple(imbuement, duration, removalCost); } } const uint16_t imbSize = msg->getU16(); // imbuement size std::vector imbuements; - for (uint16_t i = 0; i < imbSize; i++) { + for (auto i = 0; i < imbSize; ++i) { imbuements.push_back(getImbuementInfo(msg)); } const uint32_t neededItemsSize = msg->getU32(); // needed items size std::vector needItems; - for (uint32_t i = 0; i < neededItemsSize; i++) { + for (uint32_t i = 0; i < neededItemsSize; ++i) { const uint16_t needItemId = msg->getU16(); const uint16_t count = msg->getU16(); const auto& needItem = Item::create(needItemId); @@ -3829,7 +3829,7 @@ void ProtocolGame::parseMarketEnter(const InputMessagePtr& msg) const uint8_t offers = msg->getU8(); std::vector> depotItems; const uint16_t itemsSent = msg->getU16(); - for (auto i = 0; i < itemsSent; i++) { + for (auto i = 0; i < itemsSent; ++i) { const uint16_t itemId = msg->getU16(); const ItemPtr& item = Item::create(itemId); const uint16_t classification = item->getClassification(); @@ -3855,7 +3855,7 @@ void ProtocolGame::parseMarketEnterOld(const InputMessagePtr& msg) const uint16_t itemsSent = msg->getU16(); std::unordered_map depotItems; - for (auto i = 0; i < itemsSent; i++) { + for (auto i = 0; i < itemsSent; ++i) { const uint16_t itemId = msg->getU16(); const uint16_t count = msg->getU16(); depotItems.emplace(itemId, count); @@ -3994,12 +3994,12 @@ void ProtocolGame::parseMarketBrowse(const InputMessagePtr& msg) std::vector offers; const uint32_t buyOfferCount = msg->getU32(); - for (uint32_t i = 0; i < buyOfferCount; i++) { + for (uint32_t i = 0; i < buyOfferCount; ++i) { offers.push_back(readMarketOffer(msg, Otc::MARKETACTION_BUY, var)); } const uint32_t sellOfferCount = msg->getU32(); - for (uint32_t i = 0; i < sellOfferCount; i++) { + for (uint32_t i = 0; i < sellOfferCount; ++i) { offers.push_back(readMarketOffer(msg, Otc::MARKETACTION_SELL, var)); } std::vector> intOffers; @@ -4080,7 +4080,6 @@ void ProtocolGame::parseBosstiarySlots(const InputMessagePtr& msg) { const bool bossesUnlocked = msg->getU8(); if (bossesUnlocked) { const uint16_t bossesUnlockedSize = msg->getU16(); - for (auto i = 0; i < bossesUnlockedSize; ++i) { msg->getU32(); // bossId msg->getU8(); // bossRace

  • XtnHD@$Z&7>f!e%%SK7A0XhYk!oV++8hCrI8IOj0> z@5X7ZSXo{M6m?zWy(7j**Ud>1LtQt-mn6P033u-Qq#i$hjQ0+0G)5beBtZn6vuCOR z`0gvUXqtw8 z-c#2N#u#FZ%;z0ZBEKH&srRyC=Nv05D*A-P= z5qv;vjSv16zFZo>UpAfRIZI1RoR+8beUDZO=lz)kvn*pWnJ}4Lq3h=Kwx_NttaZ%i z-TMJpyR{){no?C2Wm%G@>EHZ_@yv@vB7;GSwLNXyQ8zW-IjmiDDZE7i=K@&!WXO)ToU@eM?`4bmi^rw1#qzUP&I8!2%dgEC&qx%8fzWaInp#GNfN%e z{*_z^z}l@18IKo^mghOvTAXt3N;9dd_AuKj&hzy5Aj4>DW z0U^sWnx-LyK%VD>5D*d4B*i=buP+Ywca`^nrm4xYjM;R?^74!<8!K9ZlO%RW*luyKlX2_IGzwS(ZF~@|3EoC`JXRFHULN2Gk`^vb9?q zqV(bf3qJ7M;oduMyMM-)H`YV}tE;PMV`%D%;`8e_L@SNfnn%Cx kt4kfFAAd|f0{Fk;Pw2jUT4XKCY5)KL07*qoM6N<$g6H8dXaE2J literal 0 HcmV?d00001 diff --git a/data/images/inventory/inventory_finger.png b/data/images/inventory/inventory_finger.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd65d8ccd40ae0e2ce487dfb80d626b2d45d696 GIT binary patch literal 326 zcmV-M0lEH(P)y*{$^BnQY3UC&-Pk~s23$3X=5&$XKn;l$=3Ky>XNEK1 zj1m!sEQ5hd12jMbG~j;&(kz!Wn;n(qs_$EnX1Ro62nefH#mm!!>a&h{O!Fj34!ckW zlj&SudmwrNOw+`5T{hnvl%W7Q-waIdXL1wATzMXgj|F8}5=AkA?~`V^ocshF$Kl%d zDT;!x^%@0OmPHT*RCRs&8ECtfuIsRE8`|{eA2_(pgu`L4p|0N29rxXO(!3wft$z#u}UsZKk%z%Ut z@`#zp8`rAUi>j~BIrrXbqpIBG5^i|i0xSgZZ2wT7?(HuWBJ+PjcyRc+wmWUQd6&9w z7z_q@@A>}a3-ita4xfLiX_~UNxrwS`okLX_Tn*@7Uhwk8SLU4o9DMeL=G~l~ogMN# zXEGU6)fL_cRF$S_I6Xb(+pp(`m^%aehtD-%Sz+tW78{%Eq-jFd%}A3JRi!8k49fc2 z8c+8Qbm;)bTDCSe=&kfXp(qQ^&(G;!_OaID#8Ffg#t6{GqBa~JCz z2#m&KPEJl}8c$hP)Kv{YXaX4Mt@g0iE>D4WJEPrc)qzNH-#2E6t%i|}zx-h`QkDlo2d#hM$8I4DX2;1A+h%v+vQH>;tBhR}S5n`N% zvEA+I6gjRQWRKc$vPQXrvs{Z?}=e*#XJ=@2Y|sC zaI=Hno}KaL%^$=VNRkwd%4j&`>hh8-%SaPP=>uh15`0)r20{qbRn6;@-#I!uBF2DA z9L`yswYVgq)k+zSh7@JV#^wgCRto6i05L{7S%z4le{u15x-}|M6;-ez7!gE-Vp336 z)5>U?W^oHb2#7IEiUL(dti=E^D!yqD5ki<+C1SD8U;t&lUUV&h6`?E(#-j;Q6=DQq zFvbu zc~07DVXa$S0WhR#iWMR1Kg$zih+#U2tXM(}pb%p~>`ak`6>yfc-J+Z41n+15LePj9 z!CH%m%-$;AHx$KmFwN5kt_4uQTF3g@8dX&iW5gJP6N}EGW}TfqO?yUNH;A>^Whj8c zXgI{BDV>*d^tKH1$<)xgf(dkhByE-o(k?U$eb^^p%AeXOgi zJ?h%i_=Z!V-ia>3mGn%x52G{B!e&BGp1 S4eX8p00001f@#*aHDQ3FepYe2EA6-^0-#9-n$Adtx*kIQIAPWO^#g-xB?P{~RFbJ(1;!XS=Lmx?^y%k| zHHgUM#*^tum*(1_d_qGcNdnF}+U@okNEzHM5LA}b5K$BrK!^xwnu2o<#u$j`CWuBp zVgHa)3Tc`G066DnBuQd&0L+@370@OOgRXJBhR~bpupt;@SF2EJ!uev2Fz6x-x*(zg zgg&_qb!{mcW%ak!AfkfwHpHz#mnO6tw&eLulO#csB=vcqENmm@eV`4fl!8(UQ54k+ zU_VSYgdQ4@h!8~)n$2eY3Y0%O&DCE`_)ofQC3K2hT6Bh1+pA6TW56 zPN!o``E#>!?y5jpNp`y(gb?^ACAb73rTiEG4N>+cd|3PiWCF&PaVYyF00000NkvXX Hu0mjfj{!4z literal 0 HcmV?d00001 diff --git a/data/images/inventory/inventory_left_hand.png b/data/images/inventory/inventory_left_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..4bdfb1a65481ae04bc54053236f00e1961d4844e GIT binary patch literal 637 zcmV-@0)qXCP)~K-$?Qj^j`*7smIy z6ABZ+AW0(1r4mfTM5onYO9>&7iAZE0vJxgD6O3_SU=Sn$rD73=VW8V?vd7Lct2Uvs z`+;KdIP&>CT(4d5Zf&7lDni%wM?1GZ1B~G^e~HBB1p0#kn#~4GqKV>`0`UAAwtYTq zY`g&x;m_?YFoV06jA3~1Bl)&{&~zQmRugCE=ZHiiU|`dYduj$`B}~z16eCRok%?lV z0K+gb8VwPP#c_4@9oN}Nbz_a znx?@t4E!n-QLmNR+}T|OK$Jri`?L>D*8vc6xg36XJ8Y3g<_@7CDU?hmG59-xecg_W zi~Pdka{~lKnbPSr3`2+8?ZL_E>C`#548SkQl=+&${qPBOT{NHqQHZ= z$KyeN(8rN_WSQ+V0T2<~E*E;e9VG2xAcSL<VP)2!XFzlCNA}oj`O5==|dH6Q6Fbuf#F12N5{GxD2fv4+|G@;F_Pw{ogYg+S15 zwHZ7f(C_yVK%QktA!)U8UcNjf&vUGEtXHe!Dd4Q*+2|QcDcYSjQb?wMOo@}24<9BV zpw()jq(o~?01h2+2N8&q1f>*GNWAk{Zz;+G?*nzc!F$hiIwkZ2S(ec>&2cl}og>NRkAtHO@Pnvj`!Nr@-my zDS0agU^4j~=NwXgzCoV1&{`9z2snZQ=NFgZ+wpVWzkiQ4mMDsdBE@>OrYy=&u*Mi> z^BJwYMW@pti4%s82Ybi%!3ucina}5V@3GdhUaxmfy1K4$&hhTuJB&3fmJ2%V&cib> zo6qQWyNpI7`X_y29TUef%X0nkq`SGk60`dy!{LxeCy(g$dKhDv-_IYO0i_hqIhM;M z)9Dmr3{BJQ#9C|deyf<)npnqF_2OX!;v}J}Dx7mD6;V~yUIIl?;H;xD4FZ96_Td&N zA<43gG|h;VLQ1)J%!Uw9ks{AqNF}lM2n3vW_~41PrrYb1Wf@AUo!B%F6aJBal!7!#(Xpnk>+N6dnX=VpYZbt{T2q!KQi_Ku;9Wo|MUo~IWro zq9{U2`7w~zx-TPeesLL|4IhJm#bQD5fp(tboZlNlDFu0+Gw5&c3tH=kWuVjT((QIw ztycW<_ARURnxZIBYIg>VF)Wu$j5Qx|X_C@^)ZLqdy##Kquf*-!U&*qZCr_RbMcWok zl7vpDy}Jv1pePFN?(Wc9lcpJYE2rMnU#7s#^_BSH<`!!$C;dKozCDnp)7>}TEYHZY zj9#zD@aa>Ol9Xl1YE$ohABaP)PP^pWwcy!z--jqpIRyK!2>kyz{V(fJ8j}A6fG0Wj P00000NkvXXu0mjfAzt{1 literal 0 HcmV?d00001 diff --git a/data/images/inventory/inventory_neck.png b/data/images/inventory/inventory_neck.png new file mode 100644 index 0000000000000000000000000000000000000000..4e19f4d52bc8ee2f733a81bc8e26c9cacfee70c8 GIT binary patch literal 586 zcmV-Q0=4~#P)#aSBro6zefz{t_x!YlV&EZ~4Y9fyaNE?Rfe_d*3;P^-WNMs_j~m_%=HZ$O0Ma0KX1Cw0pt*IEG)7!5}hHEh%Z2%?Vm zd)JI769lO>d~@GKiGpy`?=c!r{wYZ<06&b?YkJJ5-{e?w^NlOT@N!u&Ko) zT|HKCo2FFF^OhbkaaYqcCC_u%VBUw3b{HuLBEsjvfGp2y?O&B)7gv5-KIUCe*O3>+2vY(0q_y) Y7noZ0WHHNrO8@`>07*qoM6N<$f?ER#LI3~& literal 0 HcmV?d00001 diff --git a/data/images/inventory/inventory_right_hand.png b/data/images/inventory/inventory_right_hand.png new file mode 100644 index 0000000000000000000000000000000000000000..df7dc95dba7fbad843aa074f9ed387a4b89741ea GIT binary patch literal 1504 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 LF=&q@t=afrc6EVY literal 0 HcmV?d00001 diff --git a/data/images/inventory/min_button_small.png b/data/images/inventory/min_button_small.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ad3d6c3fcc419c6c01873a605c4795fb379f8a GIT binary patch literal 2411 zcmcIleNYp38eX6(Ql*LbL2DhB#j4z}+1-3^Y7|U32xlN-qG)UDW_JS%Nj78`l36YsZtZW*8T2$O^uxsBt7ez5iQhukZ21VXDf`wCj9rF^{%ow{CptU-OqI){voaxKmAVAQgNzxGmy><|oJnbB3FA|Has|_^oQBabtXV+Hc+v%z@nq-ibE8yip10e9QA_WIM zZm(bn8j*2c16WIsF$5lmh-F4(qM$`q8*JkJEUZyzQJPTeVI8R;v}#InL$njoSVx*jWg=j>8(uov2z9_9%n6wEPh6O1fMksJ8r757* z`e3NX6GaPRb|r{1srP4z1$)THVuh^0SNLf*yOQ;aX;Z-%I=a_a;dhT`%Fr0=W<3BV z0AWNll&^#rd7*^=g*>9KquKZjCO=Dwyx-3A?x{lArdVJl$QoX@p7Sz%KuDJqO>SV# zl*k$pC9YJV1c9n>JFYUQRR%(hf(4FGK&_w;7)qob4$L#0EA%i>tJPrf3L@pDS&P|- z08t8#V+>A`#c_hsqYQ(qP|~TUQBtdRq8b&crPW$SMd*leU0}bNrz<4;r2P|Z%kVVd zh&p6YX;p+)$>JzWX>_QQQWL0CkJG5urB|x;8oh?mIj7hP{2cglDECiUB~=VyBp8*8 z0bG(GHOjEy5qiFfmUE6)JW zRZ=$tc92CbCxFt0CclrhZ29EM&B5bMXP{`Q*Nq4*6=j%U^jsQqC0t}d|bgrL~z7IT(;+1~0aALKtt%$@etsIIlR z^3zP&ym@nsM^+sfsy=t)r5Q!%ZAp8#z5A!%b@pe_TdLn#dwlNYPOjjGf8@@p%T$#(dYhysX8py!4oGZR6u|a=7E>_cP_sZK__1$m_~u zJE`Q#K;RGQ^D-L`9~!IuXIEF3+PZ1LllRwj2Q<7~{z*cuue?0#yuEdHS6k}wfwYrQ*a2lev7@W6Q9pFN>Bmc2Yg~M3gzU{g zl-B(Rs;@WAody+u@!hRkx4!ZA4>Ui-GQ+!iJdzt_wRRH zt4e)@I@-|CaO1{}lP6WdhTh)ZdPL5pr*8jC`pDh?q!l>M_PyWIe&)=Xd!e#YD7-!L zO?S6{#eL=OI8}3L|6QS=k?aZHA06wxcyVlO>%k?OrxqhS3GcN_t<{4`mvauiZP|6X z&mMWYt*ZL_(XGkTT`f?5D6*}VY~o&Pyqose8~g6OSl3f7_BYkb-YZXpj<)GsbGXl1 z(I$Lk%g5w;ZMGxQM-C2uC(C3h>S|(W%QGLp-%>wkRdVlp>n@N<1hVz|iC%d@e*V~s zl|%KdHCPiAzVlq9R3lG4GBPsK-EGQrn`LVpj*F+4^eq1H)V2fn;yygIXW^ZcSLD)v Oxg|T_+_Gx(w*LY#b#J!- literal 0 HcmV?d00001 diff --git a/data/images/options/analyzers.png b/data/images/options/analyzers.png new file mode 100644 index 0000000000000000000000000000000000000000..7409ff3a3de97f32035840c9da094f0325fc07a5 GIT binary patch literal 2397 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 literal 0 HcmV?d00001 diff --git a/data/images/options/bot.png b/data/images/options/bot.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d5fd7e31e64dd7424c540d6ff639e88b716cde GIT binary patch literal 3075 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 literal 0 HcmV?d00001 diff --git a/data/images/options/button_battlelist.png b/data/images/options/button_battlelist.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb9b600b3e0317a77582c05bca9a9595608e0c7 GIT binary patch literal 3438 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 MeM2~Byf<(EH%ek^SO5S3 literal 0 HcmV?d00001 diff --git a/data/images/options/button_empty.png b/data/images/options/button_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..79776ebfc4451bbc7ac3a0c89ec20657cb3992b5 GIT binary patch literal 2638 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 literal 0 HcmV?d00001 diff --git a/data/images/options/button_options.png b/data/images/options/button_options.png new file mode 100644 index 0000000000000000000000000000000000000000..cd4c594a126e3de250149cef8b902d7eefb98905 GIT binary patch literal 3190 zcmcImc~}#78XmMoyg1Yqb`=P*RZ&AS2}cqL2ub9SAXg~VQkcvEDI}9-!VwO^76s8_ zr659~v^#pTznOWz_xFD9 z_s#drfxrOomCOFN3;=+YzCMCr@_#dVt}$6e{wiMi>1O~ia*^`+fu0C1K`FuBUX;xs zhr_lfaYqUdH~XCrT$A0rPWa6yVJ5e4DmDcL#$P>m$ai-xCA^BC|G6)}P_jy1lkuy0 zp4|G48|jNSd7twfU7EJ|n^W)dvsS!(aNu#-0B3!t(FsX++5VvYW8qbaT}Nt$I(jUz zV~a8aj#VaBB>?7|-fp!T(3xa*iyB89FHB`HZBP0w-Voim4zjYr;Nduv>%th zWp0*vD&R*a^Ih9d6-})RT&A1>{JtGeGmpybA$YcjI4vubQAYmOk#U)?=bK)M(1mtr z(1;&KHhR8tcu8?yC#&8z`+(o-tCxc;+jNVgLECs2>-w-W)lK6W&v+KyW2n5`+hqGT zo@In*@+S@%Vk_4Vh9wsje>K%XDWOQCi{h-&^0UI)*Y`bI>t>n(v|QNrbS%W9jdXIU z!Y6_NfaR+Vrx8$6Y6So?k4Y%o3%5#V+jz^s>Xt*el!pD^;#mT{$27``liVMd9barI0oVQV!43I--u<0O+ z#sIktXRebAW$vJoyD1Tj8!Xr{w-vBzS^~MzZEKZnX>3ur5^xC$p?@ju98;qgK?3NBxXLMmJtisSL~g$kT!p)kp;DVtxD$`L$? zus0~03qS>s3guCm3?_>Pf;1K*6l8N*Y%bG@#$a(7j9I9N>;nW+K`#cz5h}th&r>_G!O$hG|17BP2<22Oha7QY$gLjm=cinTo)NH zz~KageTMkiwncE5)k~|OyF=Raxc6c@XK9mSQIhmeia!e@a7>j1DN)ZD(&_)%T=YK@Pe6%(F8##{|9_M| zXDb{F$zxD*aMG!UWax$wGg}n;f7k2zv)_!Pc{n-a49kV#N?t6CXH-s7E6L$Ioh_^- zXS#*2z%$h6K-tkt!RviZvkUXLG-?`(jZ;n8$xFQ_W$|}R6m?*4i`E7kSWG{*&-xt` zlkD`zA(M5)!{w8=Sy)5kGvs6iucGf<$x_>}Y;Nda(UYCN_LWoP-OU@06Yu92+@oaq zWC;)qe3h|*DyHRniB|#^unF++$=J|gTaR25i*q#oE7Z`d1^I+emfcH0+c4$0?TWCA z@D5eR^l16<%`JQBY2w0z!qu>Fw5Nv5EU#o2Wltzdq@4-TSc3 zsKRl}vJrmN(N|X`Mqcud_*n0rwOyM&@ZsC5K$e#yOV^}H@tEAX7TBZRXi<6z6W&^m zg$y@#YIEwg?G(5a`%g?vgx(#R(u>d3Y{||mE+cx*%ewo~CcW?+^>%5TWLp;__doEXB~@R@$Y`E6ISS^ z$OPrwvVc#!PD*#2IHFk<+?`PD#MAnr{*%qL>rY1$# zq(8pJ-e@}pAIgyv1d)(1K0SRy`|I}^S7p~6S6cisGV*3rRCC76p39DQf-o_b2Nw5` z$KW6q*{!%}{!eL1Rn=CptOWb=3oijRKLW!BtH~UOYe)L}`g$9tzP2^ZK2c~9V`DK^ z*52r__F$5(zp_A3Xnwk+p@wfF3<6rpU0l)!7PsU(o$l)Din;XB)9w0u_bPLy)dY;) zNU#Pf3ck{dy6&onhK2-LIVT_F^naxuyZy~_AbPM=`^5jrI(YpGV^NpY^=GmyN?tDZfWX- zeK|WPrl+TG-UI-NAGSY7+X`H0ZJh~85500FKVtB7YEfnHeSdg)-yDU8E?@uP6u|e|Xhy^{!95N^^mmO;Ov{a^5d?gvfA;00u3s*%fd`Vp!%(qU7-SyoXMb3R6iDRW+K~oz7|N zw*>e9%goCp>g%+K-Md{m9Q%$hh8x!FKFBD`GQV8^^y$;#;kYH=*UADGNjj@@Rv5qA zjy!_!tnT!l#l?j=UOyE@IzK*_ibs2UdvorT5^rtPe4=A* zrD78zeH=9)U->zY!vPt8>Fe!ntgjCeXPZQq(#v!2viF&j1+93)6F#I}4^N*wZ?v6P zJ#<YLxC>m^sfB)2t-AZS! ziYhTSzG)60g8GZl`%RXE-YTf3McRDfq6S z*dj3jrKthrd}k9H**Rx2-#7Do&-c8~ z`+n~^$=k>YShQgI0ssIO1qHIh(dTOPw#Cdsf2FJL4+4ONr_j%DqYo_MBe?JYU)*Yt z!JxaMxI*=ThTx`+wx2b;?|=SiB{%`WjXsa&XU#rewaah!!guzY{#9;b*k7^u8^5!BZ`j_k=<1Yfg*E+`x|YQs zo|VfvtVyX(2CQ9nG-FM}nB2|~!;pt@GKb>$_u$zpw;A3?oRkZGY-p>R3(ooBuNB*^ z7w1-Sx~bNo-c`ku?{8cndkF+ze4J&yHMdL7a#S(SE|hJx*x;~PlpA}{>UzvD_tG~= zOxuvN&#D9SN(!#HpLYB#FL+7&Phrb04A0&MIwpELoQ~9ed**S@6w9V_3=vlZV7%9` zmc{s_9VO;`g8k^w0KY|QXEn^r;KBw^soug;?|(9O&*)Mws~q60G4#b)#JUTplk=s4 zF>(N~Tw=a0fG^9i0PxNQAvanP9kPK5Ns@>>v%kc&Bq@pp0IzjvQXV8i6gWO25Q=@NJIvQ3uTBP28>^~7Uz}5Lb2c`}F~&4cVtTZ5yJK?aFTCxPw+ zGRP#;m{d>P^o2)vlfm)KaQ6D?z0es8pP*1knIuwbYAP|+ohXqBNNBO39263TLO>A& zdAeA^OCyNoE8j4%5ji9iN)O$79LglI)o(Y46Rr`Z4+u3DUBy3fkd)7 zq&L8jkUxheCC#Aa3jY*zmubDfODyN6OA%5yB9|n~AjCff5i3@{*$jqe)=HCQiLWAs zArg{^B%v@lDh!<2N}3>1NaP8UKZs-I^Gq~Srk@PqDI_wkM3VR>Q5)Z|;3#O+xYbcY zF)T@yyP6eEFF@El1;WBp$P{-12ol`MT#(LmXE5FA1hPAmOnwawLF)kKDR^%OmcYXJ z^tXYAgfN4|as^KeAwg^w9u-9t3SlM~4}&nDMkBy99-lyo_wXbz=zN%fc=8aC&ZCm4 zkjE=s=z6vUN;cbPUjMpmVF`qC%s9lP^F1gG9!w=r<3SpMM)U9>Feo&H;7*NaP!R^1 z0)ogJwosW6JvqF@-?Exj!6+l0#)s)-5FtP`I)i|Ccu)v@hC4#=@T9p@sh%LkgTlw- zV2BwnktOlaIuR!E1PDng7T|IJQR62`l*mFPFzUIxxtdXSG>Sl>98F#N^!bQDc1({F zg}7Hm$K*lgT4&)QbCMAlKmA(xJMO)m&eyc52?$F1C&_;elS|?isXQ6tBS4-0pT$M` zBk^)x%AZSryTtz=rBB-mCGf-o1Z|uoyg3+>xy8Ir3hBS|_3GPi+R+<0+T+Z_ndXX4 zX4*3%MyX|J^Q};~e*yq=xj}3nZeU({$L5HLpyl&M`qRI^`mt~Pd~0toZ@IOqR%AE( zJ!?|=#OmXB&ksh`#jo3&x^&=@+7@FWAhGuVSC)qL%>qI8RYq^6;mI+9t0<+`tGMz( z=VQgX-k0L%cZ(aA*x;M%MzcdPtys{g0x1QJSmWW2?j818odpi>ItLgW8miH1T{T!} zhhHI z#cf$pQc-c>SfD6hSwCzzA~-j4U3SIBb!k|YA~P#13x-#fb6)C)9(LAlU3t5TYLpsR zmuyHeY}Rl!;ZV;M*-|CG|1zXp{1Aa z^Ki1ZNkFQhdW!m!mdyncmVlj^%4@7B`-PEIArd-hY!g(d}&Du!^>-7)3%h96c~oHvtK;A(-Q2erS{)A z`PG)%#fug#va(v>bW*S1+}R%MSsDV|9~iJ~$^}#I81pBe46nR>$R+g1+UyL)_4^9u zym|8^egDkcjdgIi9Dlr}rKOw`Aj%#ej9Jk1xtyaKo$vw@6BD22&9V8g_|oDPUf+HA ztuFoL6btx8#&FvG&;zh8)Txfw)q(i#uiL*Ut}e9RVc*mHl`f_#(o~Tqz8)}sVcM<(aGAsbI!Y816C>33eEcyf zX>QE5?Kbg_ieDj(};QBL=kRfk$} zm~Yy*8+vOZtJ$ld9kENiCpyCSiS+~N zeOog!b>Yp*&uijNQ@p(F=QQ^9t-vQ}EY2qP%1*}-i*+5AmX`TVdyDvKPZt^)F8~yOvg%QgCN?1*Yj{PLejVr@K4jU-!e@)c9jBMG@*2n4I0?4i2hi3 zH}*2a1+O{L@u25P{+WWBtqnVeZZH68T$Ct(oVV((;~gBcY~?X@hlk&Du_QGL$G@>_ePO*R^%n=DaT8MWgYL3$ z!He>g+mX#^$5y<~;u*!kxvuLbWnbfKz)iyaqzB$&L)JN^(k zWjTJq?si$FW{OJ(lo*Db<7kTQoQwU6q?@0*dAXzj7b}8abuC-?9Tv&4nkB1r0O0Iu zd+dPE58wgdy}R--iCz-;2_II+kRe-q$?-873=IHY3*$8qtU&cd85${93BZnXWgtm5v`T00(&a*w{8r z0f_?;y+QyECR7p_LiAN@Q6h`XCc!i&m&oCfX>2By!TyLyr_y*7DwjfIkf=01mCa{y zh(jL`v!+EN_+p{|kS**@07mKc8a{<$Fc`=N23f6*q+rE@anLDrItfFNbO|aw6i-s= zJcb#Bs1DZ3HF~*PMYJ(OGIgw80Afl9U5L?)(5iGpVZs7NiH9^48kuTyX#l8+QtQ>a zDD^wwBg?9By$>F&J!wL}#+OB!tD}kRV0`l>~87HiASTG6oO!qSzV= zqZsVfcXIum0KCC9z&a?A^4Go$v+gPC%RR&Q#eF-Us>Y|v~sgm5kp`}ONpl&Kf3(vo9G`XhVcDdUh&Wm(7D&9p4 zdU(M`HT5!(USDb{uEe=+?Qq(hlppq`sWdefyIKtf>p8;&;F#q?2f^`P0^89=0^EqU za9eY-?kU-gR%^=7FRH7nw@>4!tQVS8#knWz>B7Xe9}b12IYb@$?BKqAKq@B1VzDHi z|EZxNy9&X>%_1~9+6nl6PljbL?W@C%fQ!V8&~xUwIhV^i3CXp6ontUBQ*m>SgjM4` z%nr_&EpfgB5S-_gvw#0GQ9@p^#q#`qxpU3SB(oOMP6S%!e}F~d2^owobT0s_xRgmx zA3S&foIHK{>64~&(!zR7=c8Mmq9rA(FU0*a6);_GZfa_}Vi=p2Zv1R+hQGi6T(kP8 zZxdcVoz?0!edkio&A9ZVCO+2zbeeI*1mQ=e!eeK6C&YT9=zYv)AQ)j zJa9!po%3Weu*f1co1}_WIEPGH&C81y0pM6+;b`yhLU(ufYpq?id4lz?`${bA46yi= z=|&c?$TL=1P&ak@^tfaSnJiTlTBM4|huXXMAiPwuDQ=OVc8>9EcXw%NDe%RL0y_Y= ztG0D_6>=zqTJbey--1(&^m3UIS4ppUZ_F6G@C_T9B+fu1U@2Gr0v#wpUM#bJ=_efXhQ8UHd+Z>?qFlWBJ;B16F%fsf4 z1{xb1Y1W;U56oiEoKM`G5;)Ty_OF#xzp!)M4!Rp>NN(T04W!BPIymg!#cCre6ls*s=q+$@oK>h_A>7agBIH9~WZnv!<^ z&raFz#YrTRll5-f%2$)KuQt1^IVFxxO6qI5wjZFfSj+Rn&ayLcUz$WSCyGTCIXD@L zHrExb%xfJR9OBdT>$7Lf8Ap~y!3aL?bj3c5yCK?w@dW*IS^h1ocs_NoOI_zbHg?p- zUHz|n+MnK-NO$XcH8&${67Lee9Xp%Y9P1eG1-U^f_PqxQDag1`M~dU?+2QYpR{gM* z7-fhnbCWJM-B80Xq@<#6zPbJ5oh+#B^(?6Z!1+YQ9AjnDMEUg<`0?)7W>w`dB6koL zx&W&k;c@E-9_H?b8AgV`<8`Sb#`v>0j-FP(k=BxOysZ5!WrG6y0|)>CenG$! zN_UlWwf(@BOK&{$SgXz)e%i9^{LsqJ>Xba=BZhFgil^ek(3WJ}j?&nPdr`$c6y&GjH&)eK( zjoPvyFKx`o-9YpaaBCRZi}IIuifP75%B@)u)flEn?bBPnkz= z#jHCzz`i3~JV(Qd^yZY4h1YauUUMq-JMe0u?VM=fmTJrUVK2KnB$6|PE=(~1%$zrV z>Hx8TACtfNt9)C^1 zVLw46!8F|Gg!(evu?_+ejI}l=;UUn<21}-xgCr}WCCLnHK?ErTq74DG#1la(kwmp7 zV>VM537)W65GsOTr!bf=S^i})4m3Ge7%B?+ZpH$tj|2xdtHB5#2p+<=I$fif6W zSH4)n;zO{jBMpa$GUswRR5lDkEHcc(lgU;fp3Sym;n_BpARgurtti%391@FY{Ye)x z-%$XCj)!l2{^zpg2q1)GGD1{R0Ea|@tvPrr(2|1>u(S%mQ(y?O%CQcxCc{K47R3I- zwnfB6b`C4#kF4XWI0z#J=74MqB8&%#EC?T9V`Yh_kjNywwFL>LfaCy}4S_f;2ciZD zL_8K!CtMyY5GDxufjI1c)Hn!21R{ojgT&l&yqXbq#Dxo2jHE7NVt;tSdnQI9T+{A0{pG5ELbbh7{4}uZWze)aQm{<@X31^95`#>bp|FgIVe<5b5Ql#%jY+MD8g+Uwez>uhvR z&7t-$?kQ(%hLclH_Z?OL8 zsz)*vX0K3zf#%bNYLmGTN2w$Cj#Y3{2Qf>YIKF*(CpHrVBx;cwouo+iRF`3LNXHWu zF8VCxR0a4$NkCN836S)m+4=Ql z=b68No@g;f2vOR*F;iEdKNwyZ&Wh|d*QEv?NH&qm6^M4CLhGWJkSuSRvD@ zFr}rX3l}X~myyxelx=KmtO+X*4h|;xS8iuAb%5ODyH|X-K9b>Hsb`p=>UZx5Ug+eJ z3^RQe)aXCXO$JcVrrSPlwHONIUC??{8>7Y;&7!czEyVZ#|z3Cq@Uck< z{jP8!j+DWm+e%+Pe)0qd-IWQHd9BY~eAmV|*<~}L^Z?wxSM`E_+P!=GR_ZbT&_*aE zB!t5`^S+l+=u<#`o_zNf=0_8$Mpp6Yx0Z7S`Omdu>dq@>aX}Fgl$!J@2NZ`k>Y+>8 zz>SVCw6aB&??gdCE~eIYcF_ZEg+^q)q^v+skJ)hAwh4_!=O()4iHI9&b{3@#%{1{HxKIL4!y%@Uj~s9@t)03`o}P6+nXNpr zE_~?L_j=9=OI^E$A8E(lcXoDun`UmkWOgtfQi7>#VP%r%%2#pc&AwH2)Ya7uKD?&Y z^w?Qg=%QLK4UCMo7HsqCDe+^N9&q`YQgq05N&qvpFQTCJ`ADQmj5nEG-lm;JD*KugDz~X4lu4k^ z1B1Ry&v@ilMx-X=Uck8)=JxH|{rq(0&CSjA^{!JgGctm&Jp>ZrSC6Y5n5jDQl4N_27C z`lwMWC!?pfs&s=HCKvsyDk~}m9Z-&{^t7U#rYS`i-YFGb{g|iwryItfmcAb?5oaww z4fYax_Q|wEI|@Vff2oO^S91F8@ZiIUi)Zdujtv!!M0U$GnR;@w#%cR?p5Be!b+xo@ zE>yI$;`p&+pvuh5ER!1gydh<6RdC7Gw#LTBz^1Ge&nw|~{K~K1tWo@8T=ik}POPDW zvbL!58`A@AOVDI8d0>Q!u1LFV_`Nu5?XQ{NF`0$=BBV-9Q~^2mj(!>WYmm-jYiCz= z`EpWU1bv1HTd9_*%Nnla=O-+sHTbo(RK0se7%uX*$40a(u?XKL%Z{0FcGYIL(q l6P4)cozk0Gi)`VK0B+}!m+R>eZ~V`MtJ7x3i}YPT{2O$`!ZH8= literal 0 HcmV?d00001 diff --git a/data/images/options/button_shrink.png b/data/images/options/button_shrink.png new file mode 100644 index 0000000000000000000000000000000000000000..5320652f2f1aec7c666ee6920c6f2bc4ce34a6b4 GIT binary patch literal 4529 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 literal 0 HcmV?d00001 diff --git a/data/images/options/button_spells.png b/data/images/options/button_spells.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5d696c4230cd32a167b2eb395e869c3f97e9c2 GIT binary patch literal 3675 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 UJhF&3Y53#p?cvL+bdTQsZ)+4Nl>h($ literal 0 HcmV?d00001 diff --git a/data/images/options/cooldowns.png b/data/images/options/cooldowns.png new file mode 100644 index 0000000000000000000000000000000000000000..5ecc43425b0c0feec4296b8e0ad2f5d88ba11005 GIT binary patch literal 2921 zcmbVO2~-nj9v{#uBH9E|Jg|lVDyifS1X3abK}iI}h*g46!^{w4AQO{70)n^}1(ang zr+61%R#Af@m&z(uP|B?$2#BEc34$CR2p&*&g2;CFx!bp$_h#lhe&7H1zu%YW>$7H# z@nT~D0Os&KxdQBOi@jz>hS*nb{j3lB&60ciD*<3`x&AdsUom$H08Af{_-$5g_V!{! zXc$=pqrnJS6DG&d0O0JRk&7THq9Oz%Vu_3c4wjUH1PROmH`#krz2)x6Hi>7H0@)Dd z;|E1aAtxAgSxIo#urUE)h)P7zgoVnKYz+sTkjuu#`eh18n1HCH9MDxyNZ9P{OK?XO z2*HU=BSBOujlgmuiyUDl%bsCJpi}7#3Y9^jGe}fNw!H(J!6HmPAV#NvL)ZfD>Pa$e z#sRmfRB|?jqE@TPY6clqh$%EDCnpM(PNCCD7=omXl&M4-l1yp!Ndgy9LJEmoB|&8b zy+lzk8m{7in5rLb2$N5Vl_@9vgn5jj5y>euGF5NW1Q3R%aPn|P=ma?oQIJq143Vjn z7?w7Lm2X2;sB#TW=uNdvuLGXq#U6L5G5L} zfDn%eOie4jHFCDQ0uiZDg&&HBeu|XuCzT0wCfR{tyGbI0QMHozy8{SUq(V3#7Bwb` z${^9HepD)(!C*7!*pyABeuR3Xup}h%vrtDiQ-AVbP%LL)kxKN3U>IVDpo%aNX0Rko zBt|H5nHVHYxsmOThN23L7}Jh1p@p|Mnv1l|ADMW-Y zNeGh}LJ~P(rofK&FrDcnvS-p9Kb_~IP`Ey_pU%Vo=lOLC307L7&_69lUvT=AV0%iG zSg;}|D`Eq(V{#NKAxvZeTLkH|n*&1nup%%xxh(n99{4C$y$!*H{*Q2fgelPwm0F}g zT*a8T{xF>=nDP{T9e%Wf@}DM7?ES80Kf$p^pdU`PAZ#+##1I+QxfEE7y0+-fKLB8c zC6DXs=b3mcqh6ZETU>D>syC;%ICY>vdNaAJ@Kk<$=yKY0yv6)^_IOIro@oQSEo+is zSBnh)LmbV^P8aIzUu_-+xiMiYBN@Tm5_iZ3>V$bz)9Eiyl6+LJPJR1m@WNT~ms)Rm zcR{$V=KJ2)&K(#-H}PeEajXZ|lE6#q)@Ivgm}=8%ESArrt|jUU`9vvc8X?%i19;Kf zcrHDCK9rPZ8Zn1Uv=K^Et?`E1a@+mDjTTq#F@AsLQ=|2Eq_Oj9h6chORqMl+oZCC> z;yhEPvG?Q4O! z?r48c4^J!bQ7_zg;J^W;Qd#0(lmT#4%7v#p9qXR%%B=5x@ZiB<+m+WX;)=FP{DkTlaQSEAwWviOoXTAg^;jFnxeBdWOWxHBR!r$8A z#wCv#$J#l^{uUh`-ncNosAzb&|6y{S4{)Y&yJ1|~C85s2!GTZQiwj?XpS{-*@bdC1 zC@2_u^JbQ%@!p&5U0s!xJixIn{Bm8$r9~-%#SreUu;kJu#pv6Y%I>;%*T-KxDbs4T ztkO}sqhoV>`}Mp$nv2UiE}sZAx3?OX;eg)rf~uZ@zP>F%K|z6mBr{{FRC-~pHg)+r z!y9#V$t9YH0Rc5$t~g+oMMaL^S)p#%_{d=C+XnNc6A#%X>s?R7>5;*Xk(lvEC2DdO z9uKr_5ywUiH6+ekK4Zp==#CRvS^itLv^6)&ud-OI%*@QJmONJyt|MloSUWyy_cA6O zm#}^zKPAC*F91k&`Nw@u+f*v9xCy}E9KZe9XByG5glnoEfmnPRm!12eGIe=FLqkbR zZZ6qyYl=1R_WDrWST(ByrY{0))ANWl6SgR~QV%jK6>LJomoA zDsrZ@y7-t&?5^l&=gjJj=Qf7qHf~QY48{8r!{78ahC0j!E_`1~UT^>-ei!`}@J)J^ zE}-~OOP*-q$;{z2E=j%oc!?B?{mhv&V>c8F`20l`dD4@@=g0USM_0x~DWxln z-HYqK@Ro)pAw|oIf_3&K9jx4C*!8gFRdzv9lko_3|F0tvalTwPBPfaXo%Cstam`lU a7^N!sZsCho=`Z@rFwet>o9ni9&p!d!Otnw| literal 0 HcmV?d00001 diff --git a/data/images/options/green_large.png b/data/images/options/green_large.png new file mode 100644 index 0000000000000000000000000000000000000000..8023d9a9b9ca59101e3658504416c46fb0fc5173 GIT binary patch literal 7530 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 Yj~#J#|Ma$I>)%il!?Ok@dKV)83q;aNH2?qr literal 0 HcmV?d00001 diff --git a/data/images/options/hotkeys.png b/data/images/options/hotkeys.png new file mode 100644 index 0000000000000000000000000000000000000000..375ad4514bf75d28a8800aac8470f3834a261485 GIT binary patch literal 2674 zcmb_e3se(V8V>5V6ooAk6wpctS`eAcWM=Z35~(~Y)CLe@MT}b~Gm{YVm?0A&u&x$r zD;9yJ*7!h=7GV$79$DR5*;1Bnfz5JUl}h)pUC~9Lr$uVT)h??dXK#3U~`M}tG?I|ux7%fI*%oSxuPHt_<%{2G+ZK+Yf34xGg&2RTB^iMsc3QhYEhh%00dUXL5iGKi;X9oYVjm50mh!&uvjz+ zahTQOHJ*T?Y)ytJk+m}-l|%|r2qG0JR1#82;|duTD?$+zgAoiyF$hr-GC6@MMAIKJ z2xq4aL}t=+)4{-%TAb@}a0Cn&6%|Q}FbQin!cvt=1tTboq7Xnpe6h_zIw2b$Im3{| z@RZ%eIZUigtOj@_Is$kkG~ZF)K;VM#(1O_tJNEVcO(~rG^PvkNHni4<`_7W z;n@N^#UvL3nUS7sI3m%`kPg+I+n^7$CmXSzgEvy{`2I{a$6&ekZYU3TGjbc)h)MAjc#AKogCB>*PB_e}J z6f-~u18#uya-4=p14^kFIZ9GW@BAc|D)4mHGk?nEG)n=FZ=y;SdIm!cB&1Nv^bm&Q z6r`6b6u{>+LSlM@p2Wx*HR*N}c+p79Y*vpd8ZgRH8IH&qK%rFPkP^XVkP^jF4=skM zq%@7lXpfsG4ML=tc+k4y>Gvax$)6rsOrl9o5G3XCx>`(mn#|DR>D#79)Z-^bo}OQn z%K*|JX#P}mo;5g%NISE}2x|AE=7PUZJWm$>uyk5VW2lnCAR19AAOndjA-xhuAcagO zQz$T$#8k?e)W0KLs+Hmd_{xwO-~Jrw(`BJ@Nt=-YD<>@e`N{k=Urwoc z^`QSfD%ME!@Du#R=jcCk@qn`MJv}`iTjWcsU+JRDkRxfELaN;_ydvt?guJ#FIsCd> zfA_&don-$71HYrXvNGXqZH&-wWMt%zx@8fo9$#lRo8!*c)}GDLB$_TDH}wDbTW7WP znW`S!IrXJP1lp@OHS%5#n@q^ z|H-r|f2lbhhJVx6d8X_4v0HjS-Suv3Yb9~XeC#7vOg4*m2u~j9qS03qY8r&i?Zeu3 zQ*M#&T+i?)LxRPE)1?c9^9n11Qm$CA&pu>dLJwY>*zVWYz3cji1^J0Q+cY*(5WD~U z*hhJ1-*0L8wbQvZEIBZ&^rhH+qjGs>|I_vOp2+J*1_y7Yr>D2YFS&DXY5c|l_0daI z_8W&n#yF?AtO9;2bWU&Yold>aosQ95yd=oiFce+oJAC|jWL5c1{ps>^PYn;%HxK>+ zt6c7Lc0*Ip{LAbz$sA$&c;b`dXAeX~`bvVWAz7*7xlz)u${Uvj?25UZ(c02d5gNMP z?u#w^k8sBaQH99v;yHdN>6l-omDUdUxCc7MYXspbIjvON*sn7|$Es6CSg9vulHU%U_=~Y;ujhIr99jC-n80rgN`E_i&-k zcO{4Yz1(u9dr{n{S8YWcCs+|8=(u<>;H_gLveW}}(G712i-#75zUmS-cae4XcP6x7 zX?i%(w!G$R-}?BwqeK4v(wFn9*7*-RT2^uu{dFa(g`Haw=l1OrZ`PkYxhnW*$nWy% z6u+?DxVuifDypxq?}Mn}@$rH20kMl(6u3aD3EPJ5un;>Nb(d>X^Lq~BgfJAkzc~2n ziNrU)aMayC$Q_Say&>V{y;uFq>#i#U)HN3y>xh-MlGA_D$~{3RkqND zG?gXGdh^bnI2B$Ou)+uYI*5CbhYVGe=|vHoLjndtBT4-e20{Z-gZUE(#5L x?Qn2Icht4VeAa4*JLZ*M36AL0R1DmHywY7d^3MLs8qdGN)a10JQwdwk{s*-b)J^~Z literal 0 HcmV?d00001 diff --git a/data/images/options/idk1.png b/data/images/options/idk1.png new file mode 100644 index 0000000000000000000000000000000000000000..c086b31c4e6ccd6dca7dd2e21bda02b035b1b560 GIT binary patch literal 8123 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 Xh={kC#t5AMjsXU`w{^<39tHmw<_UiH literal 0 HcmV?d00001 diff --git a/data/images/options/terminal.png b/data/images/options/terminal.png new file mode 100644 index 0000000000000000000000000000000000000000..d97d6716584b2df6b0af3ab3dc35556efedc9f06 GIT binary patch literal 3330 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 JeZ-oV{{v{TC|dvk literal 0 HcmV?d00001 diff --git a/data/images/options/yellow_large.png b/data/images/options/yellow_large.png new file mode 100644 index 0000000000000000000000000000000000000000..5188da2baff96e43457af7a0780694f1b84e1f02 GIT binary patch literal 8159 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 literal 0 HcmV?d00001 diff --git a/data/images/topbuttons/button_mute_up.png b/data/images/topbuttons/button_mute_up.png new file mode 100644 index 0000000000000000000000000000000000000000..207db97bec313f7477c81df50831bdb437e62efa GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^JRmj)8<3o<+3y6T3O!vMLn?0dPKf0@puo}0{n2Od zy*pp`h*ZyzI`$_!sprXN)+1*&1Zk==@3>_>*MVWly=hDt%p43=v9fO*R|Z&@8((mA zm+x4@aAH5pBtymiXTdTZDds-L3EO&doo?KjEzqs~l2K<}sHZyfZ+|J-GB$pnbP0l+XkKKlD2$ literal 0 HcmV?d00001 diff --git a/data/images/topbuttons/button_options.png b/data/images/topbuttons/button_options.png new file mode 100644 index 0000000000000000000000000000000000000000..bcacdfcc080902a0eff55dd6f7dec475502d5be0 GIT binary patch literal 1938 zcmbVMeNYr-7+?H60g)1dB8GJ_kQwfF_YMwj^8&mhIO5=hL&0)nZ}&aexZ7QK7r0|I zs1QU2M$j@xG|QSub8MV6!v>u4W7I4)B|j$AX7Ue5$^59vNqZNL8+EiMZ)R`bec#{v zd!Fa_e6%@=@}`D97m6UrR9n8a1iquxM>7fjx3|SlMUapT&SG)ou!0MqC3$nuS)|F7 znSvm*R|CO=Z}Sa=o;*4ncH%sd~4mw)!Q#0ITPbv zH?FB@-A8p>Ymvz0#oxvb4QrYP?S0qM4%}(fCwyEmKC!Yd4$N2{`a}PT-bv(yqwjBe zJ#t!8Z_(NG$l~nYckjeGLZy31!Qop=A{RBCk4WUxv6lBy4x?t_90}e`a<>BQkKH`0pE~S%;vK zQ^foV89~CPt4|2BenTvROpNB7gqMPA zbsNXf5r|S_#zqrbZg-#-K>}#H&ZuR`v`jR^q$7=Kgu$4K>Iu?>6PY+^&=Mp?7^(CO zH1NZqHHmdoCDxY%w&0f;t5y_|!twh0dR@IiCrDK|EEdS2$Mt$GL}+C{uh2d%FDH&M zSb@w)oTzXDkE)EcOQ==M81!^B1g{vR<>i1(P%zv_i#Vwx)R0DiEEB|uwUTGVILqL` z1H6D&WQZk$Sg~4A1i4yx40Z7M0RvE4yFF;*k-m7nK@+l)TL;4k2=Yj@?DUHOF9EVp zD={Fq4!W7BMk7)d3DAllIR(KpmMF)V%cvekjn10S@vKlUr`&e|SZM{AF+HI-Xh~A5 z&vX(5MUs@7J_AJ%qfooRa&G@4p?XSBJOG6y!_o@_11PL03-Wl%Sx52?832x2<4;~&cBi`EWl#Q1anrDE`YQ~^8I*wy0H^HPE$uyUi zCempwVN5e>UBIo^x=e;NQ-+&iU2fOdeXGFKsueJHpZ%ZrizN z879>q=$ulpII!|?=t#9tG^2Kb8DrG+0~QNxb5E?mC~bW;fTaIY7Nam(a4Yq+1ahjN zT4VWmY}w(^d0g$+(KzsjLmWA~ueZnGaA2s*;G}{d!C41*IN&5W$>!aTJ_o1Z1)DX; znc4o`n$J6$iEwN3@v@edX^CroTk1fxcZq7TZTGmVmj-^Fxuq|q`}&_RbX;;q7az`A zf4l0a*M3n=TyG+4>*RODF6Tf literal 0 HcmV?d00001 diff --git a/data/images/ui/1pixel_down_frame.png b/data/images/ui/1pixel_down_frame.png new file mode 100644 index 0000000000000000000000000000000000000000..8fb22dd11c6406516db19fb1a759d8a53283790f GIT binary patch literal 974 zcmV;<12O!GP)3Tr5fbFRvq)geB4@f#rMk=80zO@w4=|hnG%XH2JTv@}>~guJ zyCXCAS1ARFguzgXV~jvVz}>NtnJ}~c@9qDHKq&E-OBae0Rw8O zzqN1sTq$KO^V2Td`*y95?aEA4GsFA)`>$HW|Kj!a^^ZUM_V$)FGykd*@#lCcaG8OJ z0r1ChRy>!?gm0oIo=+(S9ucwxiQYT>F^m#V)&Mhg0KEfb2C@do3}g@3(r-Z!;n5X_ zGO49%2x1Zu$^)3(?{|3s8+iaz18P+w#zd2G^e}X22x4-YCivqzuXrx=Ji|>LK*P-7 zRT@C!<>dvwEQ>5b;^X5(i5NW(P!z;tnkIDslVw@p$Kz3!AW=$zZ~GX<^SLhzyw)m9 zkZ85a1DI$oh)j&3Jb;Or!CPyx1hWGcX#fp(hZoI;67ztn^8wU6;65t~q7Ok@kRgk( zc14iAAT1E^WB zyN;=HqoCBT2x=a1Xwm>C1|8C)a=+iM&`mbM65LE+0w=O25*-(BW zrX@-0AOw$;2k`QMgg-v`SUi_n^$;H_x7$s509}L?1rdW#ZB6_KJV0jP5fRD*n2a&h z0dx&e3`9=EbVP~A`FxfL(<31zVmz)l?TX-rp(C_4ks1ZL!7i6ee*f<~3_$N=SLa$Q zU~4b+-q-t^tvk8Udq-sAmw+39L}sG3hA{>*6J~~pgxQ+)^)WCVkNEujL@5R5^BK3> zZ7&Z1?QlTv9mquQeSOY~`x-NQL2DJ;R+?HXT5GsouV}4ddl-e8!Q2sJpwxm^8}9e} zdNSP|W`@=pmSsU}4f8xBA`lVCOq@=qwJnDOG6M5_L#=DO=6S~X+c&gYalPJ<88CAk wj|XJt{`&g*g1h5zIP7g(+u$%;O;?KJ2a(3+-o3-|LI3~&07*qoM6N<$f?J-#zyJUM literal 0 HcmV?d00001 diff --git a/data/images/ui/2pixel_up_frame_borderimage.png b/data/images/ui/2pixel_up_frame_borderimage.png new file mode 100644 index 0000000000000000000000000000000000000000..e0e5d34655fab5e83269fa8243bc08c47c281dcf GIT binary patch literal 15255 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/2pixel_up_frame_borderimage_dark.png b/data/images/ui/2pixel_up_frame_borderimage_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5fab8b9d01b454c2a5e2308726a6da6c24c8caa2 GIT binary patch literal 6984 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 J)mdLi`ajwY;5+~T literal 0 HcmV?d00001 diff --git a/data/images/ui/2pixel_up_frame_borderimage_dark_reversed.png b/data/images/ui/2pixel_up_frame_borderimage_dark_reversed.png new file mode 100644 index 0000000000000000000000000000000000000000..4a6fd721bd4c99a9386e56e104257e51fe8c0a50 GIT binary patch literal 8698 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 U!EfBN_OAuDR!-1uOTRP!2ha|)aR2}S literal 0 HcmV?d00001 diff --git a/data/images/ui/3pixel_frame_borderimage.png b/data/images/ui/3pixel_frame_borderimage.png new file mode 100644 index 0000000000000000000000000000000000000000..a1948ddef39b502a04ffc0094037e0931dc24b92 GIT binary patch literal 15013 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/actionbar_locked.png b/data/images/ui/actionbar_locked.png new file mode 100644 index 0000000000000000000000000000000000000000..47e27b320b025c3f0c5f0ddef895d52331f464df GIT binary patch literal 3367 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 geER9H-G8b2|4e3`REAdf7i6d_>)Ec4t2ety#WQ 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 z zWjM%LeNZrbaGH0&>Pk8mFf?qMx(27!VoxL7s|1L(astO-wwfzWF*R@C1izefhFowe z9hH{v+X-O;cimB*0^Ng}c~m+C_?{1z%)TbCB|PYTE>6&`Gz^2&&3^bS|LPlF1cHil zZ-FQ=kNw(UOoIabs-8cW^XY^dC6_-@x$`%Fyp;l5$N^AlV}H_mN~r;~|JoP5iJqNM z`N`L3Z9`5=V zlg)`xY}#Oam8K$rC<v>vs z1zJ&eKyw2S^q_8eH)X&o?iX>o!0WGKYi?)i*0#!ys4G$A8tH!X43<(zq|9@Z%AC;H zkRtYE?oz84Lyg;q>>_cR{=biX4<YKN2_W03PEqz)?gUVd= z{f0Dmq>Wbz$<32d)}6Y#xQVZ(Kj*CDeQtaw{+XIwV`i7K8w!>D-lse|>c5MG`*2f^ zI~x~kxxT~>DsCp3c7AS4xEQm%B$Hjs(bRDrfxJqqY~eF8h0KZlqSkSRXUBWKjIJ^k z=n@nQY*K7&T@Pb%xn8brx=B2%Re{Iow=96O<%a!RKX`$vAS+NGxnf|VduPV7nPA;xYz?a!Pr3};MDO-a}7-C>pW zQ;-+34|?=XU9&wDf{bNzv50qHRhU=wUFcUrAnuK52yFb5FCB`$7{gfZw~Ut96Pe^kw$U82XeU%nGR{3ao0n^nlZ#eN$K3Si44azo z6MjDPT@GA3ahaEClt0$HQ0j4vIRa#=D|8L*0q+HMhV(zp!a}Ab<(fSVM_49#?}Z>H zQ_1_DZuZwMczKqEjQS)j?t|dRK;g6Y7PsC9;)#31$Lo;U?FZ+u{^|n|=6=6k(U?+M z9b!BauCa*n@11#^LH4ryWHov(ZIjWf&AO#|7i$YrjxRQpV-D=S*J|AvpSr|tl&d@f z*^>9TG#dWcoDF84B;CAaSU_&eKsLCprF}E1U zHoh{xL)c`alCP-~vF*&k{E9J+XD&^_ZL}886C1G*#LDS_?7d|74wKLQKc{gvJ_Ur% zjHgv>JC_5a4)RCi(hNK>xQVYr8vVnAe@bTV$ar9c=Wnef_Ix!RU8&pjxbyO-SKE7a ziUj9w2JVpqa~{s_)$+owjpWDw+VhK`0#7ulv(&Da_mYYuBTt3qHDYL{2mj!L%P?kV zQ>lmw{$9ofmV`K-be-7M?0{VU&r4EPM!N%n0*L= z?4lR=I9L7t%Qr{;-q8O&@XqiK#P`UOk;lgWh*p|}g4)C>?`c^@<}FV;+77@D4xXj< zFznVF*Ff&R$=a2mXyv-Ru3^D;PeNCl*0=vwKmC8{F54$`E#uw9dQXe1ZQ522Y`{T> KBe2lUH|c)@jdgVZ literal 0 HcmV?d00001 diff --git a/data/images/ui/blank.png b/data/images/ui/blank.png new file mode 100644 index 0000000000000000000000000000000000000000..8174bf87755edcf0bc21acbe7a29744b3f211ba9 GIT binary patch literal 2780 zcmV<23M2K2P)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 LW`EW8(9!<@RC~p+ literal 2085 zcmeIy{Wla?7zgm{&?)pH4l}XdlJS-?rdi2g%rs+Wj4@*dp-x^R#27QiOc-jtB%!sa zP}=QqV!c$-da2zULT#97DV3KL#gc=<@p8QEo#}trUv@v==RWtGd(OQ-+tx(5v117a{3o-hngNZFW7rWY(PFBXf%X0a8;_J%m#91e%e<@)%*f_#1be2+o? z3W0%vJRXnF=f^1s1OlNzC=|xW$BVv6NJtP%Bx12xa#kTRIXPJ>m8PVmz=!zXzkdTI z#mf!=r~nbii@WvT2Dr=H;lBaY<7ff#0BC9}hDzT^>N;FRiYWdfF8{Ph5+V!-aUoH$ zB6MuH$OMPRpdHq8PmRJ4g-<6FeQ1ojD)s&}8*~zs_Z|~4nQ&h6qA@}=LH=kg7jYM=)+w$8%t(hY~#)RP`>!Nsx zRYbop+JW79_*?fw_?X}?CSgG$)3LOOnC*x@?3uMe>$chLVcCwUH9y4aNS9F9xymlX za%UY-+f)}Sd${xba}3V@1dS=@wKOtf-{#m1OkBUX@=mXQ+GcrFD&L_Tl7_ zHz$8{G2WZ|8lR)aJL2lppY*)r+UR^F##^hhK09y0abxClr{YNYSl(fWGV{L1c@NFj zOiUv}s(D?|f(tP(+BQF4mY=0E+1LDOPPY$ReM#6J@Mc?A`(_w2>&y+*87VGt5M2@O zqifF6&3lB?nCmbRt6Dvd;LxkY5`p*S5^bW1iP~Vf&>&-)v4pHnhKsUo1h$~~vThl0 zJA8qLK@qGJ2Yh1b5u7obk$STg%YSc1;x4GC`@zeuwzSByirAyJC&_H((tY0U){9|t z!FBmpy?u*xv~a%a<84iz93!>8T!MKIJg0c(MHX_T5fjkH9}myq4Xqq+yKVV&#(r_X ze#6N@gxm6)N$_V}v$x{OU(Yio?<|@>G}gDqTu*OJKJ^!GE7lL(E8_l2UKt6i@KIy= zl8AoGclP7YQ(x@q@GoHk>JxTY;Q>0j%y87e<%IJ;xgrG}`Uz1MpBHtker~Lz18cq5D diff --git a/data/images/ui/checkbox.png b/data/images/ui/checkbox.png index 10b7b9373e9f8d234618ef55d7f63abe79ca9993..efff3232cfe95fc5e3eaedb16ff17a0eafd24cda 100644 GIT binary patch literal 2215 zcmbVN3sBQ`7*8ppGIb0#U*~2lLtC&-A2hbXszAYZSU~KCLu8~$C>d>1)6f=00q2-H zbgU;uIp*Q%bUJVNz`5z>a2pdm5e0GXZk+X|_!^sgG3Rst^60tU9=G+HO1k>r{=T&iEVEGT!4=J)F;@VmK8UzU#Yn|!91SY zY275An3IzetJ!&Z#@n%>+2d<>^p217^u}DB@YLlAF}@u;q3)!wM~1DAc(oy-3wpWf z4B4QBT7+wU(MC);R%Nk9SVmRn=9t4MrE*eKZ}h3n(Z`$ppKPkAxbk??sU5Wyc*QuO z@S%Cl=DKOZSIXxIKRc#{n!m`nKM6x~fpDW8h8LX>^jK8j5I}YH6Co(Hk2Wvn7n>Gf z1Z$V!0XbzJy91zs+;cq+oG7Ar*g{!pMko6I=qDnWCUv50wMlMrBvXa7VL3-FTApqu zmKPCPQZ#oCJllf-0z1Xyu*Ys=oR~)^8sNpiI`9|~!2=M!NGBT1-(piHoXm0*td^lt zLJ_ZlXK7^$G+wSkXTnOkLW{^Xh(aZmD=;~Vsb|4MKM}CTkp)-T!P6`Q2N-b+Tg>Z3z|+AH z?2aHU;~bI+2!?oY2cnS410f9nNg{}I6mzx#<0OGlHp)&hyc1v*L9C;YHvZBVyFF;a$)~tL7(;^mCE95&aZpGW@~J97u2g{Rb#084~C5e+82SR={$090W|;aVv#57^?^l%7`ViHkJd1fp@9_ zFH9!P$T)eNAt<9>Cjv3cXqp7(QH`oVOG@J{gj{OD<5g0vN~x7n8qF+iJW45W)H1wZ z&l1If%nt7-|Kt7)js~5D+x|CCpx*)|ff;BgNLI;EM=YY24Xtc6JWvG~P6Vo3Cn5rA zrAX1xWBPw9Fi7hzqyXtZqZ69Sw^0)03b2lD3-2i`r>v%_#O z2m;IC1Ohj~8AdT+aB*NlwHwe*2nvxI^@(P~iN2bQjHtvZm3NuiXRf5h>R$d^e~5ed_Magb5!Hj4{lSHD=QzM2M@fwWE^*4Iy*!4 zmUUHG!9^xXqV6p^_oX4@a9Nj>7$dn<)^mNi5BsUU`dHJ+8%-~q!FEr1r}E>*D>+9` z%4~7tLep2>jPK4xyARiQPP-+()pO7lef!db+*GOTR3)miF72)PM(9`g*QLKZzI^Ij z+n(+#CvF@sO>a~vtxL!43t!P}^zZIE^0dBsLx=B~>+Mxs18F|_eaIWaT{+#Q)sb(8 zE-v{|t}!SRUCX9=LOgY{I(6j2d8r5Ugj++lE?b`9X#dPxwl3|IYoil(`^ue@`){PQEZy!~a-KfBaM2+y@nNqz zHb<}^{G30|6kXc$dghVCGlZjRKX^Z8zdyV2naGZW?A78|rf=I*Q)|83>Ajfn-7Vj@ z@4x%m5^vdtZPK>qTYOd064lJ#Zr;1P<6_^gFAtHH!n8Z5@9-^NB)j(9-3{(-?MrU5 zzZ{|4ruOt(TD>;^qB(c=qUZB&s#AMQFP9tAA{U~Zj?LS?2 zTJV52io#o4KSI({Qwo^WjZM!kt*JA1@7+?oTifaFw5z;d^<{U|K4jY7Sy3R%zvsI* q)mK%T)?d^X$F^PY?vG)8F$k1U$lSi%bcPFj7>z0E`uCFZSN{$#lP+rj delta 748 zcmV004R=004l4008;_004mL004C`008P>0026e000+n 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/console_button.png b/data/images/ui/console_button.png new file mode 100644 index 0000000000000000000000000000000000000000..23450c347305f85af4f85e602c42569262be9249 GIT binary patch literal 7595 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 A9smFU literal 0 HcmV?d00001 diff --git a/data/images/ui/console_flash_right.png b/data/images/ui/console_flash_right.png new file mode 100644 index 0000000000000000000000000000000000000000..29413a79ba21385eb309997ae290aff0b4d4ffcf GIT binary patch literal 2900 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 T*_vegvmE3fDlA*I;lqCe!X_YW literal 0 HcmV?d00001 diff --git a/data/images/ui/console_whisper.png b/data/images/ui/console_whisper.png new file mode 100644 index 0000000000000000000000000000000000000000..5c077d265355717e6a93615e8930da4e0c19cd11 GIT binary patch literal 3257 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 literal 0 HcmV?d00001 diff --git a/data/images/ui/divider_horizontal.png b/data/images/ui/divider_horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..ad24ef224a1468ce45af5f0d14cf25361126e682 GIT binary patch literal 751 zcmV^D)L4LqwR_-RGR{-g~dAsseBv2LNvkRlT2Po|(P( z>#tvK_IR8?G0V0!{C=wH$;<#=O|pG`eSxTX6Cr?@X^bf%+qOl-d7f`?Z!5Y8M?@8v zc{vgh5e6tC7FI-<`LPRigW`ZCr%uEDk0m{7*!OS9Z zj8UlOO+@CLAfV8;mXTHE&6#+NK}1!hs_q^!MYOf{{r#<~X14I=oUOGv$CH^e^VKBl z$H(7hcE8{EeFp%dl`-bldso%_{jO%J3XrPq`z|6e!`;_EM1+XEd1Q#_979DH!G7#j zr7D$`nVBi7W|kF1q^ea|`IJ>awYI4WGlLM3OXBr zkeRJ*b53TyTrR!$-n+Z^(S>Es`Fv(GeL2Y=|NJ}W6cGTb>o9iqo{_h|Zo)!DV+=E6 zrpSnlRb3-up%4+RB3_7?=AIEETtH^E=2c~807Q%l5wUJ}L;zUt<2VS!%wr6oM(@OA zW>rN*|92A=W>FPW+x8ux<2V*ZM67et@2F%rIi3ky^O7ESSkK=fpCjnKp_Av9G50{-4ikVw$ z03MHrnXSYUk*X3A5SVz40wO|8=h;<-hyYrXK}M?Tj38jC`4eGH31bXmYThz)k*q<- h-FqL;XMQ!w{{hpYQTRMF2~Ge2002ovPDHLkV1gJ4Tt5H+ literal 0 HcmV?d00001 diff --git a/data/images/ui/hide_eye.png b/data/images/ui/hide_eye.png new file mode 100644 index 0000000000000000000000000000000000000000..85cbd593f3810650dd6baaba51b7916daa530dd8 GIT binary patch literal 3402 zcmcImYgkiP7QLWS9ty-4TB!-w2j~#;BrgfCgc1-mA`z%HaFg6XB*_g)fFM|+wGf5M zP|yNmEo~8jHWitoC1B7hwFA?RAWgvv)LLnah@fayz`5bo&U~$(em5EDGasqtNpb^zUVFiyn&#c8mdl4PD0J@Pj0X2*yQ)2IIU)OeSLk z8dG?rz#RSse`&6HRmkOv9ric-Ri4}U@~#W{VLK1uVrx0?d=kbvB3i68W#-TxwN8h*j{gmG~K1PKFua$PlnH1lVDl}dl(%5ZSJVHBh7Dr|HN)r7k%}X z9$(k3fz|ImUB!1)KLf)5IhN%bukY5dvH8rFh3a^lh*x$c>tB1v`C8m?bXyG^*Kv1! z(At8RN)LZc`5c>jFnmeZ)opH9hUX=auyXnfAkioR5>bRLHGL`zI`)ma;-vmp(yy*0Yr&p8`tY27+;e|x|cR7nRFFHQph zPN=p{OKgC$@)ZDJcUTr3tBs9}V2Kfh4`kKXN2gGs(E#8Vpi@EOWLS$6!HF^@8yq&7 zL7Ys&24j39iIFM}oFwDzQN!E!Y>5`{Nft9DV1Pf)Psc(56tEV;=@fFMhNWYJQ@AYj z+WMFP;-*5h$!u`Cp|O#C90yUuIA0$cUQD7gaCD{*iAE(-Xx=z7k;Ehr83YmqPb9I3 zG?p(NH}eD0Y-)*=6~%pZCKr0g29vZ}6^lSfPfzzrr}!Z1L;`9S6oX74lksQ-UX!8J zLOQ%svt|~73v0w`nMx}|lsGFQBtlZPY!GESU4lY22dmV~$b!a9E1wh}~)V$7+@B1vfIV5t~ShENQ;luE%fMNA5wMuccIvXo3^(3!JnTh%gj z=0Ng4qFPx=P(%uyO!FmE$au1ZLB~rZR4QJ?WJpn$Q|MwyN+CLR~i2K=P zz`aKW<=t1qbD#x0%%hIizh7}g?v&(X=Pu|?Ep~sIdg9VMZ{NC><_=||Vd(r%B8)a8cVa97vqK>Pg#x~%cSbM>ap2B5!ktpG^Cc)b;({`%rV zfa@+MQtB7-f&O1QtAcrb;}gez9QYF8TLhg{&#J1h?FNsXb^v8bVNFe=v0fgrkpG@v zMzC=Fx5xLT)p6cE#=&Uc0|`eV*q?2_|b~m;*QICZk+r?h3Og< ztQc%`eKT%%*~z6?knrip<>guCCco8PzBWs{&L0~2SmCC~(-VYQecrwwN~4=D#bSzh zxSO4w+bK>S{+SQ+OD}K66naE|TGLa1PgIuxt_43RUJRVR*P*M{Iiv!5;~+1#UH$id z;r{u{x0D&?#fTdoc_1zNkI*@Ygn*#K^VttVV(D*d# z4QgpbZt2#^$1Z2eF{D<5e&^1!iS=Jpj&$fUn(FK40qMiN%Nz`h6Ig}f#*QHjiFZYK z%DA!ZWDP2aWeiP@UF|<#|7F3mhUSUhnD_~Sz{SO7eUU8RqjlqeT-x^Ix?eJvVb%-( zkteNAA(*>+o@DvwVn6#z;>hnw^8mS$qv%P`Z(^LQS-h>2y0@>dDMRzq#RZgF(Ghk* z*|w+<5VMj+vV%lm@TC#m_YH}_IW_dto&4pBL19kO&y7Z%#|Ixd0Hs&Xx;?fAIf`g|ej~b1F?fDR+_hx{6HNf3(IQ5V>9{}Dm zG@f?@HwxP|`9Z!Ij8jZqFt}cMJ&hM-Ajxcl*Sf!Ysu;Y;y(Nq-F_irF;DO}IB1%D7 zp~)j*m!(@ndnquunDA`$C-eD<08POI4 zubtEi*-=O%r}-)Ak6dkW5Qh`8WxFDvcrlq^ih@RTgb&(6gA9{l>SikSOyPMgia=E-+nj7<}@OZ?@O`A;dStE(*!;MDEYRCS! zSJ8cTy|&2X)UPeqhW*Eh16gYIXjING4-UhemdE2stmZG;larILH4JTK9nfRi z?%X*VRiZnMsCY#;cOny`Z?^>`iYUoP%g~ALJ^nar@~-JR^H^r}uN!4$|8hod>=~%! z&}p;-v2S!#gchuxSW!1LG*n|0vTohAtpoz|Q=0rH?*{aJViei}4x_zKhdl*_2~v-o zJI+AZG9Yx!9<#31>ta=vXV8ZRcdR)u7?YCz0oEvJaKH7;IdxaAK_nee8C)v|pK2Jz zH)P)p)v_*e)r!3nW0q{1-+Q1pSo0NoNnK_`dBxJeb}8r94^GAHlTMK6bo}Mi4c}Tn O)x$!zaE-wU`~L%(lPk9X literal 0 HcmV?d00001 diff --git a/data/images/ui/high_ping.png b/data/images/ui/high_ping.png new file mode 100644 index 0000000000000000000000000000000000000000..0c1aa9ea45680021ea61644ff8528e3686c936fc GIT binary patch literal 2196 zcmcIm4Qvxt9PfrOHbkLJnc~NBxPTwm`{=d3JE>!=V=YjaqlTf0?DgKe^;~<`^=@mo z7}TkO30oj6#J~v1M@$GPVMn36C-44HsP#iE)arMzSxuY}vyFijGD5VOWh7F!01 z%3wKBq9+g`I#^0(7?$ve4j@3@<8nSna17_987Iv-DMpZ7ZprB((ie%%C7>cz_@<0~nLNID&QqMBw!QKT7;<~Rx?D5F6$L5k9haRUrKWXK6MZmPOQSd1X7 z*O^`tOYQd|7SGUXMmkP7Vsr|`Y1YA5J`Dha!8=1^u?*TUOY5p!cn%7J%qt`T zWl7N!F@Wntje%-J$F*vb_(x5N9@P^;9pacft!l>X*bBdE;M6sw*T*bWn{Gu_qOa&A zAX~NWC1oqg2$Jbx^%l{)JDvTs$q2%vcSwFe%+M7x2@Kp~e35rc*9T2UDtj(odHvwUN5%wtYc^#U$U|DzwBO(T%8Daz=M