stats display

Addressed comments.

Addressed comments.
This commit is contained in:
Monty Marz 2021-01-10 02:05:13 +01:00 committed by Sam
parent c809569f6b
commit de5c5702b3
17 changed files with 624 additions and 1649 deletions

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

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/element/icons/stamina.png (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -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!",
],
}
)

Binary file not shown.

Binary file not shown.

View File

@ -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),
),
],

View File

@ -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

View File

@ -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));

View File

@ -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
}

View File

@ -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

View File

@ -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 }

View File

@ -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)),

View File

@ -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",

View File

@ -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();

View File

@ -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);