mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
stats display
Addressed comments. Addressed comments.
This commit is contained in:
parent
c809569f6b
commit
de5c5702b3
BIN
assets/voxygen/element/icons/combat_rating.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/icons/combat_rating.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/element/icons/health.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/icons/health.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/element/icons/protection.png
(Stored with Git LFS)
BIN
assets/voxygen/element/icons/protection.png
(Stored with Git LFS)
Binary file not shown.
BIN
assets/voxygen/element/icons/stamina.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/icons/stamina.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -1,664 +0,0 @@
|
||||
/// Translation document instructions
|
||||
///
|
||||
/// In order to keep localization documents readible please follow the following
|
||||
/// rules:
|
||||
/// - separate the string map sections using a commentary describing the purpose
|
||||
/// of the next section
|
||||
/// - prepend multi-line strings with a commentary
|
||||
/// - append one blank lines after a multi-line strings and two after sections
|
||||
///
|
||||
/// To add a new language in Veloren, just write an additional `.ron` file in
|
||||
/// `assets/voxygen/i18n` and that's it!
|
||||
///
|
||||
/// WARNING: Localization files shall be saved in UTF-8 format without BOM
|
||||
|
||||
/// Localization for "global" English
|
||||
(
|
||||
metadata: (
|
||||
language_name: "English",
|
||||
language_identifier: "en",
|
||||
),
|
||||
convert_utf8_to_ascii: false,
|
||||
fonts: {
|
||||
"opensans": Font (
|
||||
asset_key: "voxygen.font.OpenSans-Regular",
|
||||
scale_ratio: 1.0,
|
||||
),
|
||||
"metamorph": Font (
|
||||
asset_key: "voxygen.font.Metamorphous-Regular",
|
||||
scale_ratio: 1.0,
|
||||
),
|
||||
"alkhemi": Font (
|
||||
asset_key: "voxygen.font.Alkhemikal",
|
||||
scale_ratio: 1.0,
|
||||
),
|
||||
"wizard": Font (
|
||||
asset_key: "voxygen.font.wizard",
|
||||
scale_ratio: 1.0,
|
||||
),
|
||||
"cyri": Font (
|
||||
asset_key: "voxygen.font.haxrcorp_4089_cyrillic_altgr_extended",
|
||||
scale_ratio: 1.0,
|
||||
),
|
||||
},
|
||||
string_map: {
|
||||
/// Start Common section
|
||||
// Texts used in multiple locations with the same formatting
|
||||
"common.username": "username",
|
||||
"common.singleplayer": "Singleplayer",
|
||||
"common.multiplayer": "Multiplayer",
|
||||
"common.servers": "Servers",
|
||||
"common.quit": "Quit",
|
||||
"common.settings": "Settings",
|
||||
"common.languages": "Languages",
|
||||
"common.interface": "Interface",
|
||||
"common.gameplay": "Gameplay",
|
||||
"common.controls": "Controls",
|
||||
"common.video": "Graphics",
|
||||
"common.sound": "Sound",
|
||||
"common.languages": "Languages",
|
||||
"common.resume": "Resume",
|
||||
"common.characters": "Characters",
|
||||
"common.close": "Close",
|
||||
"common.yes": "Yes",
|
||||
"common.no": "No",
|
||||
"common.back": "Back",
|
||||
"common.create": "Create",
|
||||
"common.okay": "Okay",
|
||||
"common.add": "Add",
|
||||
"common.accept": "Accept",
|
||||
"common.decline": "Decline",
|
||||
"common.disclaimer": "Disclaimer",
|
||||
"common.cancel": "Cancel",
|
||||
"common.none": "None",
|
||||
"common.error": "Error",
|
||||
"common.fatal_error": "Fatal Error",
|
||||
"common.you": "You",
|
||||
"common.automatic": "Auto",
|
||||
"common.random": "Random",
|
||||
// Settings Window title
|
||||
"common.interface_settings": "Interface Settings",
|
||||
"common.gameplay_settings": "Gameplay Settings",
|
||||
"common.controls_settings": "Controls Settings",
|
||||
"common.video_settings": "Graphics Settings",
|
||||
"common.sound_settings": "Sound Settings",
|
||||
"common.language_settings": "Language Settings",
|
||||
|
||||
// Message when connection to the server is lost
|
||||
"common.connection_lost": r#"Connection lost!
|
||||
Did the server restart?
|
||||
Is the client up to date?"#,
|
||||
|
||||
|
||||
"common.species.orc": "Orc",
|
||||
"common.species.human": "Human",
|
||||
"common.species.dwarf": "Dwarf",
|
||||
"common.species.elf": "Elf",
|
||||
"common.species.undead": "Undead",
|
||||
"common.species.danari": "Danari",
|
||||
|
||||
"common.weapons.axe": "Axe",
|
||||
"common.weapons.sword": "Sword",
|
||||
"common.weapons.staff": "Staff",
|
||||
"common.weapons.bow": "Bow",
|
||||
"common.weapons.hammer": "Hammer",
|
||||
"common.weapons.sceptre": "Healing Sceptre",
|
||||
"common.rand_appearance": "Random appearance and name",
|
||||
/// End Common section
|
||||
|
||||
|
||||
/// Start Main screen section
|
||||
"main.username": "Username",
|
||||
"main.server": "Server",
|
||||
"main.password": "Password",
|
||||
"main.connecting": "Connecting",
|
||||
"main.creating_world": "Creating world",
|
||||
"main.tip": "Tip:",
|
||||
|
||||
// Welcome notice that appears the first time Veloren is started
|
||||
"main.notice": r#"Welcome to the alpha version of Veloren!
|
||||
|
||||
Before you dive into the fun, please keep a few things in mind:
|
||||
|
||||
- This is a very early alpha. Expect bugs, extremely unfinished gameplay, unpolished mechanics, and missing features.
|
||||
|
||||
- If you have constructive feedback or bug reports, you can contact us via Reddit, GitLab, or our community Discord server.
|
||||
|
||||
- Veloren is licensed under the GPL 3 open-source licence. That means you're free to play, modify, and redistribute the game however
|
||||
you wish (provided derived work is also under GPL 3).
|
||||
|
||||
- Veloren is a non-profit community project, and everybody working on it is a volunteer.
|
||||
If you like what you see, you're welcome to join the development or art teams!
|
||||
|
||||
Thanks for taking the time to read this notice, we hope you enjoy the game!
|
||||
|
||||
~ The Veloren Devs"#,
|
||||
|
||||
// Login process description
|
||||
"main.login_process": r#"Information on the Login Process:
|
||||
|
||||
Please note that you now need an account
|
||||
to play on auth-enabled servers.
|
||||
|
||||
You can create an account over at
|
||||
|
||||
https://veloren.net/account/."#,
|
||||
"main.login.server_not_found": "Server not found",
|
||||
"main.login.authentication_error": "Auth error on server",
|
||||
"main.login.server_full": "Server is full",
|
||||
"main.login.untrusted_auth_server": "Auth server not trusted",
|
||||
"main.login.outdated_client_or_server": "ServerWentMad: Probably versions are incompatible, check for updates.",
|
||||
"main.login.timeout": "Timeout: Server did not respond in time. (Overloaded or network issues).",
|
||||
"main.login.server_shut_down": "Server shut down",
|
||||
"main.login.already_logged_in": "You are already logged into the server.",
|
||||
"main.login.network_error": "Network error",
|
||||
"main.login.failed_sending_request": "Request to Auth server failed",
|
||||
"main.login.invalid_character": "The selected character is invalid",
|
||||
"main.login.client_crashed": "Client crashed",
|
||||
"main.login.not_on_whitelist": "You need a Whitelist entry by an Admin to join",
|
||||
"main.login.banned": "You have been banned with the following reason",
|
||||
"main.login.kicked": "You have been kicked with the following reason",
|
||||
"main.login.select_language": "Select a language",
|
||||
|
||||
"main.servers.select_server": "Select a server",
|
||||
|
||||
/// End Main screen section
|
||||
|
||||
|
||||
/// Start HUD Section
|
||||
"hud.do_not_show_on_startup": "Don't show this on Startup",
|
||||
"hud.show_tips": "Show Tips",
|
||||
"hud.quests": "Quests",
|
||||
"hud.you_died": "You Died",
|
||||
"hud.waypoint_saved": "Waypoint Saved",
|
||||
|
||||
"hud.press_key_to_show_keybindings_fmt": "[{key}] Keybindings",
|
||||
"hud.press_key_to_toggle_lantern_fmt": "[{key}] Lantern",
|
||||
"hud.press_key_to_show_debug_info_fmt": "Press {key} to show debug info",
|
||||
"hud.press_key_to_toggle_keybindings_fmt": "Press {key} to toggle keybindings",
|
||||
"hud.press_key_to_toggle_debug_info_fmt": "Press {key} to toggle debug info",
|
||||
|
||||
// Chat outputs
|
||||
"hud.chat.online_msg": "[{name}] is online now",
|
||||
"hud.chat.offline_msg": "{name} went offline",
|
||||
|
||||
"hud.chat.default_death_msg": "[{name}] died",
|
||||
"hud.chat.environmental_kill_msg": "[{name}] died in {environment}",
|
||||
"hud.chat.fall_kill_msg": "[{name}] died from fall damage",
|
||||
"hud.chat.suicide_msg": "[{name}] died from self-inflicted wounds",
|
||||
|
||||
"hud.chat.pvp_melee_kill_msg": "[{attacker}] defeated [{victim}]",
|
||||
"hud.chat.pvp_ranged_kill_msg": "[{attacker}] shot [{victim}]",
|
||||
"hud.chat.pvp_explosion_kill_msg": "[{attacker}] blew up [{victim}]",
|
||||
"hud.chat.pvp_energy_kill_msg": "[{attacker}] killed [{victim}] with magic",
|
||||
"hud.chat.pvp_buff_kill_msg": "[{attacker}] killed [{victim}]",
|
||||
|
||||
|
||||
"hud.chat.npc_melee_kill_msg": "{attacker} killed [{victim}]",
|
||||
"hud.chat.npc_ranged_kill_msg": "{attacker} shot [{victim}]",
|
||||
"hud.chat.npc_explosion_kill_msg": "{attacker} blew up [{victim}]",
|
||||
"hud.chat.npc_energy_kill_msg": "[{attacker}] killed [{victim}] with magic",
|
||||
"hud.chat.npc_other_kill_msg": "[{attacker}] killed [{victim}]",
|
||||
|
||||
"hud.chat.loot_msg": "You picked up [{item}]",
|
||||
"hud.chat.loot_fail": "Your Inventory is full!",
|
||||
"hud.chat.goodbye": "Goodbye!",
|
||||
"hud.chat.connection_lost": "Connection lost. Kicking in {time} seconds.",
|
||||
|
||||
// SCT outputs
|
||||
"hud.sct.experience": "{amount} Exp",
|
||||
"hud.sct.block": "BLOCKED",
|
||||
|
||||
// Respawn message
|
||||
"hud.press_key_to_respawn": r#"Press {key} to respawn at the last campfire you visited."#,
|
||||
|
||||
// Welcome message
|
||||
"hud.welcome": r#"Welcome to the Veloren Alpha!
|
||||
|
||||
|
||||
Some tips before you start:
|
||||
|
||||
|
||||
Press F1 to see the available key commands.
|
||||
|
||||
Type /help into the chat to see chat commands
|
||||
|
||||
|
||||
There are chests and other objects randomly spawning in the World!
|
||||
|
||||
Right-Click to collect them.
|
||||
|
||||
To actually use whatever you loot from those chests open your inventory with 'B'.
|
||||
|
||||
Double click the items in your bag to use or equip them.
|
||||
|
||||
Throw them away by clicking them once and clicking outside of the bag
|
||||
|
||||
|
||||
Nights can get pretty dark in Veloren.
|
||||
|
||||
Light your lantern by pressing 'G'
|
||||
|
||||
|
||||
Want to free your cursor to close this window? Press TAB!
|
||||
|
||||
|
||||
Enjoy your stay in the World of Veloren."#,
|
||||
|
||||
"hud.temp_quest_headline": r#"Please, help us Traveller!"#,
|
||||
"hud.temp_quest_text": r#"Dungeons filled with evil cultists
|
||||
have emerged all around our peaceful towns!
|
||||
|
||||
|
||||
Gather some company, stack up on food
|
||||
and defeat their vile leaders and acolytes.
|
||||
|
||||
|
||||
Maybe you can even obtain one of their
|
||||
magically infused items?"#,
|
||||
|
||||
|
||||
|
||||
// Inventory
|
||||
"hud.bag.inventory": "{playername}'s Inventory",
|
||||
"hud.bag.stats_title": "{playername}'s Stats",
|
||||
"hud.bag.exp": "Exp",
|
||||
"hud.bag.armor": "Armor",
|
||||
"hud.bag.stats": "Stats",
|
||||
"hud.bag.head": "Head",
|
||||
"hud.bag.neck": "Neck",
|
||||
"hud.bag.tabard": "Tabard",
|
||||
"hud.bag.shoulders": "Shoulders",
|
||||
"hud.bag.chest": "Chest",
|
||||
"hud.bag.hands": "Hands",
|
||||
"hud.bag.lantern": "Lantern",
|
||||
"hud.bag.glider": "Glider",
|
||||
"hud.bag.belt": "Belt",
|
||||
"hud.bag.ring": "Ring",
|
||||
"hud.bag.back": "Back",
|
||||
"hud.bag.legs": "Legs",
|
||||
"hud.bag.feet": "Feet",
|
||||
"hud.bag.mainhand": "Mainhand",
|
||||
"hud.bag.offhand": "Offhand",
|
||||
|
||||
// Map and Questlog
|
||||
"hud.map.map_title": "Map",
|
||||
"hud.map.qlog_title": "Quests",
|
||||
|
||||
// Settings
|
||||
"hud.settings.general": "General",
|
||||
"hud.settings.none": "None",
|
||||
"hud.settings.press_behavior.toggle": "Toggle",
|
||||
"hud.settings.press_behavior.hold": "Hold",
|
||||
"hud.settings.help_window": "Help Window",
|
||||
"hud.settings.debug_info": "Debug Info",
|
||||
"hud.settings.tips_on_startup": "Tips-On-Startup",
|
||||
"hud.settings.ui_scale": "UI-Scale",
|
||||
"hud.settings.relative_scaling": "Relative Scaling",
|
||||
"hud.settings.custom_scaling": "Custom Scaling",
|
||||
"hud.settings.crosshair": "Crosshair",
|
||||
"hud.settings.transparency": "Transparency",
|
||||
"hud.settings.hotbar": "Hotbar",
|
||||
"hud.settings.toggle_shortcuts": "Toggle Shortcuts",
|
||||
"hud.settings.buffs_skillbar": "Buffs at Skillbar",
|
||||
"hud.settings.buffs_mmap": "Buffs at Minimap",
|
||||
"hud.settings.toggle_bar_experience": "Toggle Experience Bar",
|
||||
"hud.settings.scrolling_combat_text": "Scrolling Combat Text",
|
||||
"hud.settings.single_damage_number": "Single Damage Numbers",
|
||||
"hud.settings.cumulated_damage": "Cumulated Damage",
|
||||
"hud.settings.incoming_damage": "Incoming Damage",
|
||||
"hud.settings.cumulated_incoming_damage": "Cumulated Incoming Damage",
|
||||
"hud.settings.speech_bubble": "Speech Bubble",
|
||||
"hud.settings.speech_bubble_dark_mode": "Speech Bubble Dark Mode",
|
||||
"hud.settings.speech_bubble_icon": "Speech Bubble Icon",
|
||||
"hud.settings.energybar_numbers": "Energybar Numbers",
|
||||
"hud.settings.values": "Values",
|
||||
"hud.settings.percentages": "Percentages",
|
||||
"hud.settings.chat": "Chat",
|
||||
"hud.settings.background_transparency": "Background Transparency",
|
||||
"hud.settings.chat_character_name": "Character Names in chat",
|
||||
"hud.settings.loading_tips": "Loading Screen Tips",
|
||||
|
||||
"hud.settings.pan_sensitivity": "Pan Sensitivity",
|
||||
"hud.settings.zoom_sensitivity": "Zoom Sensitivity",
|
||||
"hud.settings.invert_scroll_zoom": "Invert Scroll Zoom",
|
||||
"hud.settings.invert_mouse_y_axis": "Invert Mouse Y Axis",
|
||||
"hud.settings.enable_mouse_smoothing": "Camera Smoothing",
|
||||
"hud.settings.free_look_behavior": "Free look behavior",
|
||||
"hud.settings.auto_walk_behavior": "Auto walk behavior",
|
||||
"hud.settings.stop_auto_walk_on_input": "Stop auto walk on movement",
|
||||
|
||||
"hud.settings.view_distance": "View Distance",
|
||||
"hud.settings.sprites_view_distance": "Sprites View Distance",
|
||||
"hud.settings.figures_view_distance": "Entities View Distance",
|
||||
"hud.settings.maximum_fps": "Maximum FPS",
|
||||
"hud.settings.fov": "Field of View (deg)",
|
||||
"hud.settings.gamma": "Gamma",
|
||||
"hud.settings.exposure": "Exposure",
|
||||
"hud.settings.ambiance": "Ambiance Brightness",
|
||||
"hud.settings.antialiasing_mode": "AntiAliasing Mode",
|
||||
"hud.settings.upscale_factor": "Upscale Factor",
|
||||
"hud.settings.cloud_rendering_mode": "Cloud Rendering Mode",
|
||||
"hud.settings.fluid_rendering_mode": "Fluid Rendering Mode",
|
||||
"hud.settings.fluid_rendering_mode.cheap": "Cheap",
|
||||
"hud.settings.fluid_rendering_mode.shiny": "Shiny",
|
||||
"hud.settings.cloud_rendering_mode.minimal": "Minimal",
|
||||
"hud.settings.cloud_rendering_mode.low": "Low",
|
||||
"hud.settings.cloud_rendering_mode.medium": "Medium",
|
||||
"hud.settings.cloud_rendering_mode.high": "High",
|
||||
"hud.settings.cloud_rendering_mode.ultra": "Ultra",
|
||||
"hud.settings.fullscreen": "Fullscreen",
|
||||
"hud.settings.fullscreen_mode": "Fullscreen Mode",
|
||||
"hud.settings.fullscreen_mode.exclusive": "Exclusive",
|
||||
"hud.settings.fullscreen_mode.borderless": "Borderless",
|
||||
"hud.settings.particles": "Particles",
|
||||
"hud.settings.resolution": "Resolution",
|
||||
"hud.settings.bit_depth": "Bit Depth",
|
||||
"hud.settings.refresh_rate": "Refresh Rate",
|
||||
"hud.settings.save_window_size": "Save window size",
|
||||
"hud.settings.lighting_rendering_mode": "Lighting Rendering Mode",
|
||||
"hud.settings.lighting_rendering_mode.ashikhmin": "Type A - High ",
|
||||
"hud.settings.lighting_rendering_mode.blinnphong": "Type B - Medium",
|
||||
"hud.settings.lighting_rendering_mode.lambertian": "Type L - Cheap",
|
||||
"hud.settings.shadow_rendering_mode": "Shadow Rendering Mode",
|
||||
"hud.settings.shadow_rendering_mode.none": "None",
|
||||
"hud.settings.shadow_rendering_mode.cheap": "Cheap",
|
||||
"hud.settings.shadow_rendering_mode.map": "Map",
|
||||
"hud.settings.shadow_rendering_mode.map.resolution": "Resolution",
|
||||
"hud.settings.lod_detail": "LoD Detail",
|
||||
"hud.settings.save_window_size": "Save window size",
|
||||
|
||||
|
||||
"hud.settings.music_volume": "Music Volume",
|
||||
"hud.settings.sound_effect_volume": "Sound Effects Volume",
|
||||
"hud.settings.audio_device": "Audio Device",
|
||||
|
||||
"hud.settings.awaitingkey": "Press a key...",
|
||||
"hud.settings.unbound": "None",
|
||||
"hud.settings.reset_keybinds": "Reset to Defaults",
|
||||
|
||||
"hud.social": "Other Players",
|
||||
"hud.social.online": "Online:",
|
||||
"hud.social.friends": "Friends",
|
||||
"hud.social.not_yet_available": "Not yet available",
|
||||
"hud.social.faction": "Faction",
|
||||
"hud.social.play_online_fmt": "{nb_player} player(s) online",
|
||||
"hud.social.name": "Name",
|
||||
"hud.social.level": "Level",
|
||||
"hud.social.zone": "Zone",
|
||||
"hud.social.account": "Account",
|
||||
|
||||
|
||||
"hud.crafting": "Crafting",
|
||||
"hud.crafting.recipes": "Recipes",
|
||||
"hud.crafting.ingredients": "Ingredients:",
|
||||
"hud.crafting.craft": "Craft",
|
||||
"hud.crafting.tool_cata": "Requires:",
|
||||
|
||||
"hud.group": "Group",
|
||||
"hud.group.invite_to_join": "{name} invited you to their group!",
|
||||
"hud.group.invite": "Invite",
|
||||
"hud.group.kick": "Kick",
|
||||
"hud.group.assign_leader": "Assign Leader",
|
||||
"hud.group.leave": "Leave Group",
|
||||
"hud.group.dead" : "Dead",
|
||||
"hud.group.out_of_range": "Out of range",
|
||||
"hud.group.add_friend": "Add to Friends",
|
||||
"hud.group.link_group": "Link Groups",
|
||||
"hud.group.in_menu": "In Menu",
|
||||
"hud.group.members": "Group Members",
|
||||
|
||||
"hud.spell": "Spells",
|
||||
|
||||
"hud.free_look_indicator": "Free look active. Press {key} to disable.",
|
||||
"hud.auto_walk_indicator": "Auto walk active",
|
||||
|
||||
"hud.map.difficulty": "Difficulty",
|
||||
"hud.map.towns": "Towns",
|
||||
"hud.map.castles": "Castles",
|
||||
"hud.map.dungeons": "Dungeons",
|
||||
"hud.map.caves": "Caves",
|
||||
"hud.map.cave": "Cave",
|
||||
"hud.map.town": "Town",
|
||||
"hud.map.castle": "Castle",
|
||||
"hud.map.dungeon": "Dungeon",
|
||||
"hud.map.difficulty_dungeon": "Dungeon\n\nDifficulty: {difficulty}",
|
||||
"hud.map.drag": "Drag",
|
||||
"hud.map.zoom": "Zoom",
|
||||
"hud.map.recenter": "Recenter",
|
||||
|
||||
/// End HUD section
|
||||
|
||||
|
||||
/// Start GameInput section
|
||||
|
||||
"gameinput.primary": "Basic Attack",
|
||||
"gameinput.secondary": "Secondary Attack/Block/Aim",
|
||||
"gameinput.slot1": "Hotbar Slot 1",
|
||||
"gameinput.slot2": "Hotbar Slot 2",
|
||||
"gameinput.slot3": "Hotbar Slot 3",
|
||||
"gameinput.slot4": "Hotbar Slot 4",
|
||||
"gameinput.slot5": "Hotbar Slot 5",
|
||||
"gameinput.slot6": "Hotbar Slot 6",
|
||||
"gameinput.slot7": "Hotbar Slot 7",
|
||||
"gameinput.slot8": "Hotbar Slot 8",
|
||||
"gameinput.slot9": "Hotbar Slot 9",
|
||||
"gameinput.slot10": "Hotbar Slot 10",
|
||||
"gameinput.swaploadout": "Swap Loadout",
|
||||
"gameinput.togglecursor": "Toggle Cursor",
|
||||
"gameinput.help": "Toggle Help Window",
|
||||
"gameinput.toggleinterface": "Toggle Interface",
|
||||
"gameinput.toggledebug": "Toggle FPS and Debug Info",
|
||||
"gameinput.screenshot": "Take Screenshot",
|
||||
"gameinput.toggleingameui": "Toggle Nametags",
|
||||
"gameinput.fullscreen": "Toggle Fullscreen",
|
||||
"gameinput.moveforward": "Move Forward",
|
||||
"gameinput.moveleft": "Move Left",
|
||||
"gameinput.moveright": "Move Right",
|
||||
"gameinput.moveback": "Move Backwards",
|
||||
"gameinput.jump": "Jump",
|
||||
"gameinput.glide": "Glider",
|
||||
"gameinput.roll": "Roll",
|
||||
"gameinput.climb": "Climb",
|
||||
"gameinput.climbdown": "Climb Down",
|
||||
"gameinput.wallleap": "Wall Leap",
|
||||
"gameinput.togglelantern": "Toggle Lantern",
|
||||
"gameinput.mount": "Mount",
|
||||
"gameinput.chat": "Chat",
|
||||
"gameinput.command": "Command",
|
||||
"gameinput.escape": "Escape",
|
||||
"gameinput.map": "Map",
|
||||
"gameinput.bag": "Bag",
|
||||
"gameinput.social": "Social",
|
||||
"gameinput.sit": "Sit",
|
||||
"gameinput.spellbook": "Spells",
|
||||
"gameinput.settings": "Settings",
|
||||
"gameinput.respawn": "Respawn",
|
||||
"gameinput.charge": "Charge",
|
||||
"gameinput.togglewield": "Toggle Wield",
|
||||
"gameinput.interact": "Interact",
|
||||
"gameinput.freelook": "Free Look",
|
||||
"gameinput.autowalk": "Auto Walk",
|
||||
"gameinput.dance": "Dance",
|
||||
"gameinput.select": "Select Entity",
|
||||
"gameinput.acceptgroupinvite": "Accept Group Invite",
|
||||
"gameinput.declinegroupinvite": "Decline Group Invite",
|
||||
"gameinput.crafting": "Crafting",
|
||||
"gameinput.fly": "Fly",
|
||||
"gameinput.sneak": "Sneak",
|
||||
"gameinput.swimdown": "Swim downwards",
|
||||
"gameinput.swimup": "Swim upwards",
|
||||
|
||||
/// End GameInput section
|
||||
|
||||
|
||||
/// Start chracter selection section
|
||||
"char_selection.loading_characters": "Loading characters...",
|
||||
"char_selection.delete_permanently": "Permanently delete this Character?",
|
||||
"char_selection.deleting_character": "Deleting Character...",
|
||||
"char_selection.change_server": "Change Server",
|
||||
"char_selection.enter_world": "Enter World",
|
||||
"char_selection.logout": "Logout",
|
||||
"char_selection.create_new_character": "Create New Character",
|
||||
"char_selection.creating_character": "Creating Character...",
|
||||
"char_selection.character_creation": "Character Creation",
|
||||
|
||||
"char_selection.human_default": "Human Default",
|
||||
"char_selection.level_fmt": "Level {level_nb}",
|
||||
"char_selection.uncanny_valley": "Wilderness",
|
||||
"char_selection.plains_of_uncertainty": "Plains of Uncertainty",
|
||||
"char_selection.beard": "Beard",
|
||||
"char_selection.hair_style": "Hair Style",
|
||||
"char_selection.hair_color": "Hair Color",
|
||||
"char_selection.eye_color": "Eye Color",
|
||||
"char_selection.skin": "Skin",
|
||||
"char_selection.eyeshape": "Eye Details",
|
||||
"char_selection.accessories": "Accessories",
|
||||
"char_selection.create_info_name": "Your Character needs a name!",
|
||||
|
||||
/// End character selection section
|
||||
|
||||
|
||||
/// Start character window section
|
||||
"character_window.character_name": "Character Name",
|
||||
// Character stats
|
||||
"character_window.character_stats": r#"Endurance
|
||||
|
||||
Fitness
|
||||
|
||||
Willpower
|
||||
|
||||
Protection
|
||||
"#,
|
||||
/// End character window section
|
||||
|
||||
|
||||
/// Start Escape Menu Section
|
||||
"esc_menu.logout": "Logout",
|
||||
"esc_menu.quit_game": "Quit Game",
|
||||
/// End Escape Menu Section
|
||||
|
||||
/// Buffs and Debuffs
|
||||
"buff.remove": "Click to remove",
|
||||
"buff.title.missing": "Missing Title",
|
||||
"buff.desc.missing": "Missing Description",
|
||||
// Buffs
|
||||
"buff.title.heal": "Heal",
|
||||
"buff.desc.heal": "Gain health over time.",
|
||||
"buff.title.potion": "Potion",
|
||||
"buff.desc.potion": "Drinking...",
|
||||
"buff.title.saturation": "Saturation",
|
||||
"buff.desc.saturation": "Gain health over time from consumables.",
|
||||
"buff.title.campfire_heal": "Campfire Heal",
|
||||
"buff.desc.campfire_heal": "Resting at a campfire heals 1% per second.",
|
||||
// Debuffs
|
||||
"debuff.title.bleed": "Bleeding",
|
||||
"debuff.desc.bleed": "Inflicts regular damage.",
|
||||
},
|
||||
|
||||
|
||||
vector_map: {
|
||||
"loading.tips": [
|
||||
"Press 'G' to light your lantern.",
|
||||
"Press 'F1' to see all default keybindings.",
|
||||
"You can type /say or /s to only chat with players directly around you.",
|
||||
"You can type /region or /r to only chat with players a couple of hundred blocks around you.",
|
||||
"You can type /group or /g to only chat with players in your current group.",
|
||||
"To send private messages type /tell followed by a player name and your message.",
|
||||
"NPCs with the same level can have a different difficulty.",
|
||||
"Keep an eye out for food, chests and other loot spread all around the world!",
|
||||
"Inventory filled with food? Try crafting better food from it!",
|
||||
"Wondering what's there to do? Try out one of the dungeons marked on the map!",
|
||||
"Don't forget to adjust the graphics for your system. Press 'N' to open the settings.",
|
||||
"Playing with others is fun! Press 'O' to see who is online.",
|
||||
"An NPC with a skull beneath their healthbar is quite powerful compared to yourself.",
|
||||
"Press 'J' to dance. Party!",
|
||||
"Press 'L-Shift' to open your Glider and conquer the skies.",
|
||||
"Veloren is still in Pre-Alpha. We do our best to improve it every day!",
|
||||
"If you want to join the Dev-Team or just have a chat with us join our Discord-Server.",
|
||||
"You can toggle showing your amount of health on the healthbar in the settings.",
|
||||
"In order to see your stats click the 'Stats' button in the inventory.",
|
||||
],
|
||||
"npc.speech.villager_under_attack": [
|
||||
"Help, I'm under attack!",
|
||||
"Help! I'm under attack!",
|
||||
"Ouch! I'm under attack!",
|
||||
"Ouch! I'm under attack! Help!",
|
||||
"Help me! I'm under attack!",
|
||||
"I'm under attack! Help!",
|
||||
"I'm under attack! Help me!",
|
||||
"Help!",
|
||||
"Help! Help!",
|
||||
"Help! Help! Help!",
|
||||
"I'm under attack!",
|
||||
"AAAHHH! I'm under attack!",
|
||||
"AAAHHH! I'm under attack! Help!",
|
||||
"Help! We're under attack!",
|
||||
"Help! Murderer!",
|
||||
"Help! There's a murderer on the loose!",
|
||||
"Help! They're trying to kill me!",
|
||||
"Guards, I'm under attack!",
|
||||
"Guards! I'm under attack!",
|
||||
"I'm under attack! Guards!",
|
||||
"Help! Guards! I'm under attack!",
|
||||
"Guards! Come quick!",
|
||||
"Guards! Guards!",
|
||||
"Guards! There's a villain attacking me!",
|
||||
"Guards, slay this foul villain!",
|
||||
"Guards! There's a murderer!",
|
||||
"Guards! Help me!",
|
||||
"You won't get away with this! Guards!",
|
||||
"You fiend!",
|
||||
"Help me!",
|
||||
"Help! Please!",
|
||||
"Ouch! Guards! Help!",
|
||||
"They're coming for me!",
|
||||
"Help! Help! I'm being repressed!",
|
||||
"Ah, now we see the violence inherent in the system.",
|
||||
"Tis but a scratch!",
|
||||
"Stop that!",
|
||||
"What did I ever do to you?!",
|
||||
"Please stop attacking me!",
|
||||
"Hey! Watch where you point that thing!",
|
||||
"Heinous wretch, be gone with you!",
|
||||
"Stop it! Go away!",
|
||||
"Now you're making me mad!",
|
||||
"Oi! Who do you think you are?!",
|
||||
"I'll have your head for that!",
|
||||
"Stop, please! I carry nothing of value!",
|
||||
"I'll set my brother on you, he's bigger than I am!",
|
||||
"Nooo, I'm telling mother!",
|
||||
"Curse you!",
|
||||
"Please don't do that.",
|
||||
"That wasn't very nice!",
|
||||
"Your weapon works, you can put it away now!",
|
||||
"Spare me!",
|
||||
"Please, I have a family!",
|
||||
"I'm too young to die!",
|
||||
"Can we talk about this?",
|
||||
"Violence is never the answer!",
|
||||
"Today is turning out to be a very bad day...",
|
||||
"Hey, that hurt!",
|
||||
"Eek!",
|
||||
"How rude!",
|
||||
"Stop, I beg you!",
|
||||
"A pox upon you!",
|
||||
"This isn't fun.",
|
||||
"How dare you?!",
|
||||
"You'll pay for that!",
|
||||
"Keep that up and you'll be sorry!",
|
||||
"Don't make me hurt you!",
|
||||
"There must be some misunderstanding!",
|
||||
"You don't need to do this!",
|
||||
"Be gone, fiend!",
|
||||
"That really hurt!",
|
||||
"Why would you do that?",
|
||||
"By the spirits, cease!",
|
||||
"You must have me confused with someone else!",
|
||||
"I don't deserve this!",
|
||||
"Please don't do that again.",
|
||||
"Guards, throw this monster in the lake!",
|
||||
"I'll set my tarrasque on you!",
|
||||
],
|
||||
}
|
||||
)
|
BIN
assets/voxygen/voxel/sprite/lianas/liana-0.vox
(Stored with Git LFS)
BIN
assets/voxygen/voxel/sprite/lianas/liana-0.vox
(Stored with Git LFS)
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lianas/liana-1.vox
(Stored with Git LFS)
BIN
assets/voxygen/voxel/sprite/lianas/liana-1.vox
(Stored with Git LFS)
Binary file not shown.
@ -565,12 +565,12 @@ Liana: Some((
|
||||
variations: [
|
||||
(
|
||||
model: "voxygen.voxel.sprite.lianas.liana-0",
|
||||
offset: (-1.5, -0.5, -88.0),
|
||||
offset: (-4.0, -4.0, -88.0),
|
||||
lod_axes: (0.0, 0.0, 0.5),
|
||||
),
|
||||
(
|
||||
model: "voxygen.voxel.sprite.lianas.liana-1",
|
||||
offset: (-1.0, -0.5, -55.0),
|
||||
offset: (-4.0, -4.0, -55.0),
|
||||
lod_axes: (0.0, 0.0, 0.5),
|
||||
),
|
||||
],
|
||||
|
@ -942,478 +942,7 @@ impl Client {
|
||||
/// Send a chat message to the server.
|
||||
pub fn send_chat(&mut self, message: String) {
|
||||
match validate_chat_msg(&message) {
|
||||
/* Ok(()) => self.send_msg(ClientGeneral::ChatMsg(message)), */
|
||||
Ok(()) => {
|
||||
if message.starts_with('@') {
|
||||
use comp::{item::tool::ToolKind::*, skills::*};
|
||||
match message.as_str() {
|
||||
"@stats" => {
|
||||
let stats = self
|
||||
.state
|
||||
.ecs()
|
||||
.read_storage::<comp::Stats>()
|
||||
.get(self.entity)
|
||||
.cloned()
|
||||
.unwrap();
|
||||
|
||||
tracing::info!("{:?}", stats.skill_set);
|
||||
},
|
||||
"@unlock sword" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::UnlockGroup(
|
||||
SkillGroupType::Weapon(Sword),
|
||||
)));
|
||||
},
|
||||
"@unlock sword interrupt" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::InterruptingAttacks,
|
||||
)));
|
||||
},
|
||||
"@unlock sword combo" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::TsCombo,
|
||||
)));
|
||||
},
|
||||
"@unlock sword combo damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::TsDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock sword combo regen" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::TsRegen,
|
||||
)));
|
||||
},
|
||||
"@unlock sword combo speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::TsSpeed,
|
||||
)));
|
||||
},
|
||||
"@unlock sword dash cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::DCost,
|
||||
)));
|
||||
},
|
||||
"@unlock sword dash drain" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::DDrain,
|
||||
)));
|
||||
},
|
||||
"@unlock sword dash damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::DDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock sword dash scaling" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::DScaling,
|
||||
)));
|
||||
},
|
||||
"@unlock sword dash speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::DSpeed,
|
||||
)));
|
||||
},
|
||||
"@unlock sword dash infinite" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::DInfinite,
|
||||
)));
|
||||
},
|
||||
"@unlock sword spin unlock" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::SUnlockSpin,
|
||||
)));
|
||||
},
|
||||
"@unlock sword spin damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::SDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock sword spin speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::SSpeed,
|
||||
)));
|
||||
},
|
||||
"@unlock sword spin cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::SCost,
|
||||
)));
|
||||
},
|
||||
"@unlock sword spin num" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sword(
|
||||
SwordSkill::SSpins,
|
||||
)));
|
||||
},
|
||||
"@unlock axe" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::UnlockGroup(
|
||||
SkillGroupType::Weapon(Axe),
|
||||
)));
|
||||
},
|
||||
"@unlock axe combo" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::DsCombo,
|
||||
)));
|
||||
},
|
||||
"@unlock axe combo damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::DsDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock axe combo speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::DsCombo,
|
||||
)));
|
||||
},
|
||||
"@unlock axe combo regen" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::DsRegen,
|
||||
)));
|
||||
},
|
||||
"@unlock axe spin infinite" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::SInfinite,
|
||||
)));
|
||||
},
|
||||
"@unlock axe spin helicopter" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::SHelicopter,
|
||||
)));
|
||||
},
|
||||
"@unlock axe spin damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::SDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock axe spin speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(AxeSkill::SSpeed)));
|
||||
},
|
||||
"@unlock axe spin cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(AxeSkill::SCost)));
|
||||
},
|
||||
"@unlock axe leap unlock" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::LUnlockLeap,
|
||||
)));
|
||||
},
|
||||
"@unlock axe leap damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::LDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock axe leap knockback" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::LKnockback,
|
||||
)));
|
||||
},
|
||||
"@unlock axe leap cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(AxeSkill::LCost)));
|
||||
},
|
||||
"@unlock axe leap distance" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Axe(
|
||||
AxeSkill::LDistance,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::UnlockGroup(
|
||||
SkillGroupType::Weapon(Hammer),
|
||||
)));
|
||||
},
|
||||
"@unlock hammer combo" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::SsKnockback,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer combo damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::SsDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer combo speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::SsSpeed,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer combo regen" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::SsRegen,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer charge knockback" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::CKnockback,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer charge damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::CDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer charge drain" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::CDrain,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer charge speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::CSpeed,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer leap unlock" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::LUnlockLeap,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer leap damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::LDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer leap cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::LCost,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer leap distance" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::LDistance,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer leap knockback" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::LKnockback,
|
||||
)));
|
||||
},
|
||||
"@unlock hammer leap range" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Hammer(
|
||||
HammerSkill::LRange,
|
||||
)));
|
||||
},
|
||||
"@unlock bow" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::UnlockGroup(
|
||||
SkillGroupType::Weapon(Bow),
|
||||
)));
|
||||
},
|
||||
"@unlock bow proj speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(
|
||||
BowSkill::ProjSpeed,
|
||||
)));
|
||||
},
|
||||
"@unlock bow basic damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(
|
||||
BowSkill::BDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock bow basic regen" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(BowSkill::BRegen)));
|
||||
},
|
||||
"@unlock bow charged damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(
|
||||
BowSkill::CDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock bow charged knockback" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(
|
||||
BowSkill::CKnockback,
|
||||
)));
|
||||
},
|
||||
"@unlock bow charged proj speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(
|
||||
BowSkill::CProjSpeed,
|
||||
)));
|
||||
},
|
||||
"@unlock bow charged drain" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(BowSkill::CDrain)));
|
||||
},
|
||||
"@unlock bow charged speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(BowSkill::CSpeed)));
|
||||
},
|
||||
"@unlock bow charged move" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(BowSkill::CMove)));
|
||||
},
|
||||
"@unlock bow repeater" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(
|
||||
BowSkill::UnlockRepeater,
|
||||
)));
|
||||
},
|
||||
"@unlock bow repeater damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(
|
||||
BowSkill::RDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock bow repeater glide" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(BowSkill::RGlide)));
|
||||
},
|
||||
"@unlock bow repeater arrows" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(
|
||||
BowSkill::RArrows,
|
||||
)));
|
||||
},
|
||||
"@unlock bow repeater cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Bow(BowSkill::RCost)));
|
||||
},
|
||||
"@unlock staff" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::UnlockGroup(
|
||||
SkillGroupType::Weapon(Staff),
|
||||
)));
|
||||
},
|
||||
"@unlock staff fireball" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::BExplosion,
|
||||
)));
|
||||
},
|
||||
"@unlock staff fireball damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::BDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock staff fireball regen" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::BRegen,
|
||||
)));
|
||||
},
|
||||
"@unlock staff fireball radius" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::BRadius,
|
||||
)));
|
||||
},
|
||||
"@unlock staff beam damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::FDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock staff beam range" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::FRange,
|
||||
)));
|
||||
},
|
||||
"@unlock staff beam drain" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::FDrain,
|
||||
)));
|
||||
},
|
||||
"@unlock staff beam velocity" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::FVelocity,
|
||||
)));
|
||||
},
|
||||
"@unlock staff shockwave" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::UnlockShockwave,
|
||||
)));
|
||||
},
|
||||
"@unlock staff shockwave damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::SDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock staff shockwave knockback" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::SKnockback,
|
||||
)));
|
||||
},
|
||||
"@unlock staff shockwave range" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::SRange,
|
||||
)));
|
||||
},
|
||||
"@unlock staff shockwave cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Staff(
|
||||
StaffSkill::SCost,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::UnlockGroup(
|
||||
SkillGroupType::Weapon(Sceptre),
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre beam heal" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::BHeal,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre beam damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::BDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre beam range" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::BRange,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre beam lifesteal" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::BLifesteal,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre beam regen" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::BRegen,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre beam cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::BCost,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre proj heal" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::PHeal,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre proj damage" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::PDamage,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre proj radius" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::PRadius,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre proj cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::PCost,
|
||||
)));
|
||||
},
|
||||
"@unlock sceptre proj speed" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Sceptre(
|
||||
SceptreSkill::PProjSpeed,
|
||||
)));
|
||||
},
|
||||
"@unlock health" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::General(
|
||||
GeneralSkill::HealthIncrease,
|
||||
)));
|
||||
},
|
||||
"@unlock energy" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::General(
|
||||
GeneralSkill::EnergyIncrease,
|
||||
)));
|
||||
},
|
||||
"@unlock roll melee" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Roll(
|
||||
RollSkill::ImmuneMelee,
|
||||
)));
|
||||
},
|
||||
"@unlock roll cost" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Roll(RollSkill::Cost)));
|
||||
},
|
||||
"@unlock roll strength" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Roll(
|
||||
RollSkill::Strength,
|
||||
)));
|
||||
},
|
||||
"@unlock roll duration" => {
|
||||
self.send_msg(ClientGeneral::UnlockSkill(Skill::Roll(
|
||||
RollSkill::Duration,
|
||||
)));
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
} else {
|
||||
self.send_msg(ClientGeneral::ChatMsg(message))
|
||||
}
|
||||
},
|
||||
Ok(()) => self.send_msg(ClientGeneral::ChatMsg(message)),
|
||||
Err(ChatMsgValidationError::TooLong) => tracing::warn!(
|
||||
"Attempted to send a message that's too long (Over {} bytes)",
|
||||
MAX_BYTES_CHAT_MSG
|
||||
|
@ -229,33 +229,31 @@ pub fn get_weapons(inv: &Inventory) -> (Option<ToolKind>, Option<ToolKind>) {
|
||||
)
|
||||
}
|
||||
|
||||
pub fn get_weapon_damage(inv: &Inventory) -> f32 {
|
||||
let active_power = inv.equipped(EquipSlot::Mainhand).map_or(0.0, |i| {
|
||||
fn max_equipped_weapon_damage(inv: &Inventory) -> f32 {
|
||||
let active_damage = inv.equipped(EquipSlot::Mainhand).map_or(0.0, |i| {
|
||||
if let ItemKind::Tool(tool) = &i.kind() {
|
||||
tool.base_power() * tool.base_speed()
|
||||
} else {
|
||||
0.0
|
||||
}
|
||||
});
|
||||
let second_power = inv.equipped(EquipSlot::Offhand).map_or(0.0, |i| {
|
||||
let second_damage = inv.equipped(EquipSlot::Offhand).map_or(0.0, |i| {
|
||||
if let ItemKind::Tool(tool) = &i.kind() {
|
||||
tool.base_power() * tool.base_speed()
|
||||
} else {
|
||||
0.0
|
||||
}
|
||||
});
|
||||
active_power.max(second_power).max(0.1)
|
||||
active_damage.max(second_damage)
|
||||
}
|
||||
|
||||
pub fn combat_rating(inventory: &Inventory, health: &Health, body: &Body) -> f32 {
|
||||
let defensive_weighting = tweak!(1.0);
|
||||
let offensive_weighting = tweak!(1.0);
|
||||
let defensive_rating =
|
||||
health.maximum() as f32 / (1.0 - Damage::compute_damage_reduction(inventory)) / 100.0;
|
||||
let offensive_rating = get_weapon_damage(inventory);
|
||||
//let combined_rating = 2.0 / ((1.0 / offensive_rating) + (1.0 /
|
||||
// defensive_rating)); let combined_rating = offensive_rating *
|
||||
// defensive_rating / (offensive_rating + defensive_rating);
|
||||
let defensive_rating = health.maximum() as f32
|
||||
/ (1.0 - Damage::compute_damage_reduction(inventory)).max(0.00001)
|
||||
/ 100.0;
|
||||
let offensive_rating = max_equipped_weapon_damage(inventory).max(0.1);
|
||||
let combined_rating = (offensive_rating * offensive_weighting
|
||||
+ defensive_rating * defensive_weighting)
|
||||
/ (2.0 * offensive_weighting.max(defensive_weighting));
|
||||
|
@ -540,14 +540,11 @@ impl CharacterAbility {
|
||||
} else {
|
||||
0
|
||||
};
|
||||
{
|
||||
*max_energy_gain = (*max_energy_gain as f32
|
||||
* ((energy_level + 1) * stage_data.len() as u16 - 1) as f32
|
||||
/ ((Sword(TsRegen).get_max_level().unwrap() + 1)
|
||||
* stage_data.len() as u16
|
||||
- 1) as f32)
|
||||
as u32;
|
||||
}
|
||||
- 1) as f32) as u32;
|
||||
*scales_from_combo = skills
|
||||
.get(&Sword(TsDamage))
|
||||
.copied()
|
||||
@ -641,14 +638,11 @@ impl CharacterAbility {
|
||||
} else {
|
||||
0
|
||||
};
|
||||
{
|
||||
*max_energy_gain = (*max_energy_gain as f32
|
||||
* ((energy_level + 1) * stage_data.len() as u16 - 1) as f32
|
||||
/ ((Axe(DsRegen).get_max_level().unwrap() + 1)
|
||||
* stage_data.len() as u16
|
||||
- 1) as f32)
|
||||
as u32;
|
||||
}
|
||||
- 1) as f32) as u32;
|
||||
*scales_from_combo = skills
|
||||
.get(&Axe(DsDamage))
|
||||
.copied()
|
||||
@ -736,13 +730,11 @@ impl CharacterAbility {
|
||||
} else {
|
||||
0
|
||||
};
|
||||
{
|
||||
*max_energy_gain = (*max_energy_gain as f32
|
||||
* ((energy_level + 1) * stage_data.len() as u16) as f32
|
||||
/ ((Hammer(SsRegen).get_max_level().unwrap() + 1)
|
||||
* stage_data.len() as u16)
|
||||
as f32) as u32;
|
||||
}
|
||||
* stage_data.len() as u16) as f32)
|
||||
as u32;
|
||||
*scales_from_combo = skills
|
||||
.get(&Hammer(SsDamage))
|
||||
.copied()
|
||||
@ -814,16 +806,12 @@ impl CharacterAbility {
|
||||
if let Some(level) = skills.get(&Bow(ProjSpeed)).copied().flatten() {
|
||||
*projectile_speed *= 1.5_f32.powi(level.into());
|
||||
}
|
||||
{
|
||||
let damage_level =
|
||||
skills.get(&Bow(BDamage)).copied().flatten().unwrap_or(0);
|
||||
let regen_level =
|
||||
skills.get(&Bow(BRegen)).copied().flatten().unwrap_or(0);
|
||||
let regen_level = skills.get(&Bow(BRegen)).copied().flatten().unwrap_or(0);
|
||||
let power = 1.3_f32.powi(damage_level.into());
|
||||
let regen = 1.5_f32.powi(regen_level.into());
|
||||
*projectile =
|
||||
projectile.modified_projectile(power, regen, 1_f32, 1_f32);
|
||||
}
|
||||
*projectile = projectile.modified_projectile(power, regen, 1_f32, 1_f32);
|
||||
},
|
||||
ChargedRanged {
|
||||
ref mut scaled_damage,
|
||||
@ -898,7 +886,6 @@ impl CharacterAbility {
|
||||
if !skills.contains_key(&Staff(BExplosion)) {
|
||||
*projectile = projectile.fireball_to_firebolt();
|
||||
}
|
||||
{
|
||||
let damage_level =
|
||||
skills.get(&Staff(BDamage)).copied().flatten().unwrap_or(0);
|
||||
let regen_level =
|
||||
@ -908,9 +895,7 @@ impl CharacterAbility {
|
||||
let power = 1.2_f32.powi(damage_level.into());
|
||||
let regen = 1.2_f32.powi(regen_level.into());
|
||||
let range = 1.1_f32.powi(range_level.into());
|
||||
*projectile =
|
||||
projectile.modified_projectile(power, regen, range, 1_f32);
|
||||
}
|
||||
*projectile = projectile.modified_projectile(power, regen, range, 1_f32);
|
||||
},
|
||||
BasicBeam {
|
||||
ref mut base_dps,
|
||||
@ -1058,7 +1043,7 @@ impl CharacterAbility {
|
||||
}
|
||||
}
|
||||
},
|
||||
_ => {},
|
||||
Some(_) => {},
|
||||
}
|
||||
self
|
||||
}
|
||||
|
@ -222,8 +222,18 @@ pub enum SkillGroupType {
|
||||
|
||||
impl SkillGroupType {
|
||||
/// Gets the cost in experience of earning a skill point
|
||||
#[allow(clippy::many_single_char_names)]
|
||||
pub fn skill_point_cost(self, level: u16) -> u16 {
|
||||
10 * (35.0 * (0.08 * level as f32 - 1.5).atan() + 50.0).floor() as u16
|
||||
let exp_increment = 10.0;
|
||||
let starting_exp = 150.0;
|
||||
let exp_ceiling = 1000.0;
|
||||
let scaling_factor = 0.1;
|
||||
let a = exp_increment;
|
||||
let b = (exp_ceiling - starting_exp) / ((1.0 + std::f32::consts::PI / 2.0) * exp_increment);
|
||||
let c = scaling_factor;
|
||||
let d = (-1.0_f32).tan();
|
||||
let e = starting_exp / exp_increment + b;
|
||||
(a * (b * (c * level as f32 + d).atan() + e).floor()) as u16
|
||||
}
|
||||
|
||||
/// Gets the total amount of skill points that can be spent in a particular
|
||||
|
@ -41,64 +41,67 @@ impl SkillSetBuilder {
|
||||
Some(Guard) => {
|
||||
if let Some(ToolKind::Sword) = active_item {
|
||||
// Sword
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DInfinite));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DInfinite));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
}
|
||||
},
|
||||
Some(Outcast) => {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
@ -107,57 +110,60 @@ impl SkillSetBuilder {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
@ -166,65 +172,68 @@ impl SkillSetBuilder {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LCost));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
@ -233,71 +242,74 @@ impl SkillSetBuilder {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
@ -306,71 +318,74 @@ impl SkillSetBuilder {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
@ -379,81 +394,84 @@ impl SkillSetBuilder {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SCost));
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
@ -462,104 +480,107 @@ impl SkillSetBuilder {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LCost));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
skillset.with_skill(Skill::Staff(StaffSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SCost));
|
||||
},
|
||||
_ => {},
|
||||
}
|
||||
},
|
||||
_ => {},
|
||||
Some(Villager) | None => {},
|
||||
}
|
||||
|
||||
skillset
|
||||
}
|
||||
|
||||
pub fn with_skill(&mut self, skill: Skill) {
|
||||
pub fn with_skill(mut self, skill: Skill) -> Self {
|
||||
if let Some(skill_group) = skill.get_skill_group_type() {
|
||||
self.0
|
||||
.add_skill_points(skill_group, self.0.skill_point_cost(skill));
|
||||
@ -571,11 +592,18 @@ impl SkillSetBuilder {
|
||||
skill
|
||||
);
|
||||
}
|
||||
} else {
|
||||
warn!(
|
||||
"Tried to add skill: {:?} which does not have an associated skill group.",
|
||||
skill
|
||||
);
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
pub fn with_skill_group(&mut self, skill_group: SkillGroupType) {
|
||||
pub fn with_skill_group(mut self, skill_group: SkillGroupType) -> Self {
|
||||
self.0.unlock_skill_group(skill_group);
|
||||
self
|
||||
}
|
||||
|
||||
pub fn build(self) -> SkillSet { self.0 }
|
||||
|
@ -3,7 +3,9 @@ use super::{
|
||||
item_imgs::ItemImgs,
|
||||
slots::{ArmorSlot, EquipSlot, InventorySlot, SlotManager},
|
||||
util::loadout_slot_text,
|
||||
Show, CRITICAL_HP_COLOR, LOW_HP_COLOR, QUALITY_COMMON, TEXT_COLOR, UI_HIGHLIGHT_0, UI_MAIN,
|
||||
Show, CRITICAL_HP_COLOR, LOW_HP_COLOR, QUALITY_ARTIFACT, QUALITY_COMMON, QUALITY_DEBUG,
|
||||
QUALITY_EPIC, QUALITY_HIGH, QUALITY_LEGENDARY, QUALITY_LOW, QUALITY_MODERATE, TEXT_COLOR,
|
||||
UI_HIGHLIGHT_0, UI_MAIN, XP_COLOR,
|
||||
};
|
||||
use crate::{
|
||||
hud::get_quality_col,
|
||||
@ -16,16 +18,17 @@ use crate::{
|
||||
};
|
||||
use client::Client;
|
||||
use common::{
|
||||
combat::Damage,
|
||||
comp::{item::Quality, Stats},
|
||||
combat::{combat_rating, Damage},
|
||||
comp::{item::Quality, Energy, Health, Stats},
|
||||
};
|
||||
use conrod_core::{
|
||||
color,
|
||||
widget::{self, Button, Image, Rectangle, Scrollbar, Text},
|
||||
widget_ids, Color, Colorable, Labelable, Positionable, Sizeable, Widget, WidgetCommon,
|
||||
widget_ids, Color, Colorable, Positionable, Sizeable, Widget, WidgetCommon,
|
||||
};
|
||||
|
||||
use crate::hud::slots::SlotKind;
|
||||
use inline_tweak::*;
|
||||
use vek::Vec2;
|
||||
|
||||
widget_ids! {
|
||||
@ -49,22 +52,11 @@ widget_ids! {
|
||||
inventory_title_bg,
|
||||
scrollbar_bg,
|
||||
scrollbar_slots,
|
||||
stats_button,
|
||||
tab_1,
|
||||
tab_2,
|
||||
tab_3,
|
||||
tab_4,
|
||||
bag_expand_btn,
|
||||
// Stats
|
||||
stats_alignment,
|
||||
level,
|
||||
exp_rectangle,
|
||||
exp_progress_rectangle,
|
||||
expbar,
|
||||
exp,
|
||||
divider,
|
||||
statnames,
|
||||
stats,
|
||||
// Armor Slots
|
||||
slots_bg,
|
||||
head_slot,
|
||||
@ -87,11 +79,9 @@ widget_ids! {
|
||||
bag2_slot,
|
||||
bag3_slot,
|
||||
bag4_slot,
|
||||
// ???
|
||||
end_ico,
|
||||
fit_ico,
|
||||
wp_ico,
|
||||
prot_ico,
|
||||
// Stats
|
||||
stat_icons[],
|
||||
stat_txts[],
|
||||
}
|
||||
}
|
||||
|
||||
@ -108,8 +98,9 @@ pub struct Bag<'a> {
|
||||
slot_manager: &'a mut SlotManager,
|
||||
_pulse: f32,
|
||||
localized_strings: &'a Localization,
|
||||
|
||||
stats: &'a Stats,
|
||||
health: &'a Health,
|
||||
energy: &'a Energy,
|
||||
show: &'a Show,
|
||||
}
|
||||
|
||||
@ -126,6 +117,8 @@ impl<'a> Bag<'a> {
|
||||
pulse: f32,
|
||||
localized_strings: &'a Localization,
|
||||
stats: &'a Stats,
|
||||
health: &'a Health,
|
||||
energy: &'a Energy,
|
||||
show: &'a Show,
|
||||
) -> Self {
|
||||
Self {
|
||||
@ -140,10 +133,13 @@ impl<'a> Bag<'a> {
|
||||
_pulse: pulse,
|
||||
localized_strings,
|
||||
stats,
|
||||
energy,
|
||||
health,
|
||||
show,
|
||||
}
|
||||
}
|
||||
}
|
||||
const STATS: [&str; 4] = ["Health", "Stamina", "Protection", "Combat Rating"];
|
||||
|
||||
pub struct State {
|
||||
ids: Ids,
|
||||
@ -422,25 +418,103 @@ impl<'a> Widget for Bag<'a> {
|
||||
let i18n = &self.localized_strings;
|
||||
let filled_slot = self.imgs.armor_slot;
|
||||
if !self.show.bag_inv {
|
||||
let damage_reduction = (100.0 * Damage::compute_damage_reduction(inventory)) as i32;
|
||||
Button::image(self.imgs.protection_ico)
|
||||
// Stat icons and text
|
||||
state.update(|s| {
|
||||
s.ids
|
||||
.stat_icons
|
||||
.resize(STATS.len(), &mut ui.widget_id_generator())
|
||||
});
|
||||
state.update(|s| {
|
||||
s.ids
|
||||
.stat_txts
|
||||
.resize(STATS.len(), &mut ui.widget_id_generator())
|
||||
});
|
||||
// Thresholds (lower)
|
||||
let common = tweak!(4.3);
|
||||
let moderate = tweak!(6.0);
|
||||
let high = tweak!(8.0);
|
||||
let epic = tweak!(10.0);
|
||||
let legendary = tweak!(79.0);
|
||||
let artifact = tweak!(122.0);
|
||||
let debug = tweak!(200.0);
|
||||
// Stats
|
||||
let combat_rating =
|
||||
combat_rating(inventory, self.health, &self.stats.body_type).min(999.9);
|
||||
let indicator_col = match combat_rating {
|
||||
x if (0.0..common).contains(&x) => QUALITY_LOW,
|
||||
x if (common..moderate).contains(&x) => QUALITY_COMMON,
|
||||
x if (moderate..high).contains(&x) => QUALITY_MODERATE,
|
||||
x if (high..epic).contains(&x) => QUALITY_HIGH,
|
||||
x if (epic..legendary).contains(&x) => QUALITY_EPIC,
|
||||
x if (legendary..artifact).contains(&x) => QUALITY_LEGENDARY,
|
||||
x if (artifact..debug).contains(&x) => QUALITY_ARTIFACT,
|
||||
x if x >= debug => QUALITY_DEBUG,
|
||||
_ => XP_COLOR,
|
||||
};
|
||||
for i in STATS.iter().copied().enumerate() {
|
||||
let btn = Button::image(match i.1 {
|
||||
"Health" => self.imgs.health_ico,
|
||||
"Stamina" => self.imgs.stamina_ico,
|
||||
"Combat Rating" => self.imgs.combat_rating_ico,
|
||||
"Protection" => self.imgs.protection_ico,
|
||||
_ => self.imgs.nothing,
|
||||
})
|
||||
.w_h(20.0, 20.0)
|
||||
.top_left_with_margins_on(state.ids.bg_frame, 51.0, 5.0)
|
||||
.color(UI_HIGHLIGHT_0)
|
||||
.label(&format!("{}%", damage_reduction))
|
||||
.label_y(conrod_core::position::Relative::Scalar(2.0))
|
||||
.label_x(conrod_core::position::Relative::Scalar(25.0))
|
||||
.label_color(TEXT_COLOR)
|
||||
.label_font_size(self.fonts.cyri.scale(12))
|
||||
.label_font_id(self.fonts.cyri.conrod_id)
|
||||
.with_tooltip(
|
||||
.image_color(if i.1 == "Combat Rating" {
|
||||
indicator_col
|
||||
} else {
|
||||
TEXT_COLOR
|
||||
});
|
||||
let protection_txt = format!(
|
||||
"{}%",
|
||||
(100.0 * Damage::compute_damage_reduction(inventory)) as i32
|
||||
);
|
||||
let health_txt = format!("{}", (self.health.maximum() as f32 / 10.0) as usize);
|
||||
let stamina_txt = format!("{}", (self.energy.maximum() as f32 / 10.0) as usize);
|
||||
let combat_rating_txt = format!("{}", (combat_rating * 10.0) as usize);
|
||||
|
||||
let btn = if i.0 == 0 {
|
||||
btn.top_left_with_margins_on(state.ids.bg_frame, tweak!(55.0), tweak!(10.0))
|
||||
} else {
|
||||
btn.down_from(state.ids.stat_icons[i.0 - 1], tweak!(7.0))
|
||||
};
|
||||
// TODO: Translation
|
||||
let tooltip_head = match i.1 {
|
||||
"Health" => "Health",
|
||||
"Stamina" => "Stamina",
|
||||
"Combat Rating" => "Combat Rating",
|
||||
"Protection" => "Protection",
|
||||
_ => "",
|
||||
};
|
||||
// TODO: Translation
|
||||
let tooltip_txt = match i.1 {
|
||||
"Combat Rating" => "Calculated from your\nequipment and health.",
|
||||
"Protection" => "Damage reduction through armor",
|
||||
_ => "",
|
||||
};
|
||||
btn.with_tooltip(
|
||||
self.tooltip_manager,
|
||||
"Protection",
|
||||
"Damage reduction through armor",
|
||||
&tooltip_head,
|
||||
&tooltip_txt,
|
||||
&bag_tooltip,
|
||||
TEXT_COLOR,
|
||||
)
|
||||
.set(state.ids.prot_ico, ui);
|
||||
.set(state.ids.stat_icons[i.0], ui);
|
||||
Text::new(match i.1 {
|
||||
"Health" => &health_txt,
|
||||
"Stamina" => &stamina_txt,
|
||||
"Combat Rating" => &combat_rating_txt,
|
||||
"Protection" => &protection_txt,
|
||||
_ => "",
|
||||
})
|
||||
.right_from(state.ids.stat_icons[i.0], tweak!(10.0))
|
||||
.font_id(self.fonts.cyri.conrod_id)
|
||||
.font_size(self.fonts.cyri.scale(tweak!(14)))
|
||||
.color(TEXT_COLOR)
|
||||
.graphics_for(state.ids.stat_icons[i.0])
|
||||
.set(state.ids.stat_txts[i.0], ui);
|
||||
}
|
||||
// Loadout Slots
|
||||
// Head
|
||||
let (title, desc) = loadout_slot_text(
|
||||
inventory.equipped(EquipSlot::Armor(ArmorSlot::Head)),
|
||||
|
@ -334,10 +334,10 @@ image_ids! {
|
||||
mainhand_bg: "voxygen.element.icons.mainhand",
|
||||
bag_bg: "voxygen.element.icons.bag",
|
||||
offhand_bg: "voxygen.element.icons.offhand",
|
||||
willpower_ico: "voxygen.element.icons.willpower",
|
||||
endurance_ico: "voxygen.element.icons.endurance",
|
||||
fitness_ico: "voxygen.element.icons.fitness",
|
||||
stamina_ico: "voxygen.element.icons.stamina",
|
||||
health_ico: "voxygen.element.icons.health",
|
||||
protection_ico: "voxygen.element.icons.protection",
|
||||
combat_rating_ico: "voxygen.element.icons.combat_rating",
|
||||
|
||||
not_found: "voxygen.element.not_found",
|
||||
|
||||
|
@ -1994,40 +1994,6 @@ impl Hud {
|
||||
}
|
||||
}
|
||||
|
||||
// Bag contents
|
||||
if self.show.bag {
|
||||
if let Some(player_stats) = stats.get(client.entity()) {
|
||||
match Bag::new(
|
||||
client,
|
||||
&self.imgs,
|
||||
&self.item_imgs,
|
||||
&self.fonts,
|
||||
&self.rot_imgs,
|
||||
tooltip_manager,
|
||||
&mut self.slot_manager,
|
||||
self.pulse,
|
||||
i18n,
|
||||
&player_stats,
|
||||
&self.show,
|
||||
)
|
||||
.set(self.ids.bag, ui_widgets)
|
||||
{
|
||||
Some(bag::Event::BagExpand) => self.show.bag_inv = !self.show.bag_inv,
|
||||
Some(bag::Event::Close) => {
|
||||
self.show.stats = false;
|
||||
self.show.bag(false);
|
||||
self.show.crafting(false);
|
||||
if !self.show.social {
|
||||
self.show.want_grab = true;
|
||||
self.force_ungrab = false;
|
||||
} else {
|
||||
self.force_ungrab = true
|
||||
};
|
||||
},
|
||||
None => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
// Skillbar
|
||||
// Get player stats
|
||||
let ecs = client.state().ecs();
|
||||
@ -2072,6 +2038,46 @@ impl Hud {
|
||||
)
|
||||
.set(self.ids.skillbar, ui_widgets);
|
||||
}
|
||||
// Bag contents
|
||||
if self.show.bag {
|
||||
if let (Some(player_stats), Some(health), Some(energy)) = (
|
||||
stats.get(client.entity()),
|
||||
healths.get(entity),
|
||||
energies.get(entity),
|
||||
) {
|
||||
match Bag::new(
|
||||
client,
|
||||
&self.imgs,
|
||||
&self.item_imgs,
|
||||
&self.fonts,
|
||||
&self.rot_imgs,
|
||||
tooltip_manager,
|
||||
&mut self.slot_manager,
|
||||
self.pulse,
|
||||
i18n,
|
||||
&player_stats,
|
||||
&health,
|
||||
&energy,
|
||||
&self.show,
|
||||
)
|
||||
.set(self.ids.bag, ui_widgets)
|
||||
{
|
||||
Some(bag::Event::BagExpand) => self.show.bag_inv = !self.show.bag_inv,
|
||||
Some(bag::Event::Close) => {
|
||||
self.show.stats = false;
|
||||
self.show.bag(false);
|
||||
self.show.crafting(false);
|
||||
if !self.show.social {
|
||||
self.show.want_grab = true;
|
||||
self.force_ungrab = false;
|
||||
} else {
|
||||
self.force_ungrab = true
|
||||
};
|
||||
},
|
||||
None => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
// Buffs
|
||||
let ecs = client.state().ecs();
|
||||
let entity = client.entity();
|
||||
|
@ -380,8 +380,8 @@ impl<'a> Widget for Overhead<'a> {
|
||||
// Thresholds (lower)
|
||||
let common = tweak!(4.3);
|
||||
let moderate = tweak!(6.0);
|
||||
let high = tweak!(10.8);
|
||||
let epic = tweak!(14.1);
|
||||
let high = tweak!(8.0);
|
||||
let epic = tweak!(10.0);
|
||||
let legendary = tweak!(79.0);
|
||||
let artifact = tweak!(122.0);
|
||||
let debug = tweak!(200.0);
|
||||
|
Loading…
Reference in New Issue
Block a user