Skip to content

Commit

Permalink
feature: add emoji and label option to skill sign
Browse files Browse the repository at this point in the history
  • Loading branch information
jcdcdev committed Sep 16, 2024
1 parent d2cd9da commit 6239449
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 11 deletions.
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ Displays the skill level of the player.
`{{skill bows}}`

![In game screenshot of the Skills sign](https://raw.githubusercontent.com/jcdcdev/jcdcdev.Valheim.Signs/main/docs/skill.png)
![In game screenshot of the Skills with Label & Emoji sign](https://raw.githubusercontent.com/jcdcdev/jcdcdev.Valheim.Signs/main/docs/skill-options.png)

#### Skills

Expand All @@ -100,6 +101,13 @@ Displays the skill level of the player.
- Unarmed
- WoodCutting

#### Options

| Option | Description | Example | Example Output |
|---------|---------------|------------------------|----------------|
| `emoji` | Adds an emoji | `{{skill bows emoji}}` | `🏹 100` |
| `label` | Adds a label | `{{skill bows label}}` | `Bows 100` |

### Game Time

Displays the current in-game time.
Expand Down
Binary file added docs/skill-options.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 27 additions & 11 deletions src/jcdcdev.Valheim.Signs/Converters/SkillSign.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,27 +10,43 @@ public class SkillSign : IAmADynamicSign

public string? GetSignText(Sign sign, string input)
{
var option = GetOption(input);
if (string.IsNullOrWhiteSpace(option))
{
return Constants.ErrorMessage("No skill provided");
}

if (!Enum.TryParse(option, true, out Skills.SkillType skill))
var withEmoji = input.Contains("emoji");
var withLabel = input.Contains("label");
var skill = GetSkill(input);
if (skill == Skills.SkillType.None)
{
return Constants.ErrorMessage("Invalid skill");
}

var player = Player.m_localPlayer;
var value = player.GetSkillLevel(skill);
return $"{value:F0}";
var output = string.Empty;
if (withEmoji)
{
output = $"{skill.ToEmoji()} ";
}
if (withLabel)
{
output += $"{skill} ";
}
output += $"{value:F0}";
return output;
}

private static string? GetOption(string input)
private static Skills.SkillType GetSkill(string input)
{
var option = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Skip(1).FirstOrDefault();
return option;
if (!Enum.TryParse(option, true, out Skills.SkillType skill))
{
return Skills.SkillType.None;
}

return skill;
}

public string? GetSignHoverText(Sign sign, string input) => "Skill";
public string? GetSignHoverText(Sign sign, string input)
{
var skill = GetSkill(input);
return skill == Skills.SkillType.None ? Constants.DefaultHoverError : skill.ToString();
}
}
36 changes: 36 additions & 0 deletions src/jcdcdev.Valheim.Signs/Core/Extensions/SkillExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
using System;

namespace jcdcdev.Valheim.Core.Extensions;

public static class SkillExtensions
{
public static string? ToEmoji(this Skills.SkillType type)
{
return type switch
{
Skills.SkillType.None => null,
Skills.SkillType.Swords => "⚔️",
Skills.SkillType.Knives => "🔪",
Skills.SkillType.Clubs => "🏏",
Skills.SkillType.Polearms => "🔱",
Skills.SkillType.Spears => "🗡️",
Skills.SkillType.Blocking => "🛡️",
Skills.SkillType.Axes => "🪓",
Skills.SkillType.Bows => "🏹",
Skills.SkillType.ElementalMagic => "🔥",
Skills.SkillType.BloodMagic => "🩸",
Skills.SkillType.Unarmed => "🥊",
Skills.SkillType.Pickaxes => "⛏️",
Skills.SkillType.WoodCutting => "🪓",
Skills.SkillType.Crossbows => "🏹",
Skills.SkillType.Jump => "🦘",
Skills.SkillType.Sneak => "🦥",
Skills.SkillType.Run => "🏃",
Skills.SkillType.Swim => "🏊",
Skills.SkillType.Fishing => "🎣",
Skills.SkillType.Ride => "🏇",
Skills.SkillType.All => string.Empty,
_ => string.Empty
};
}
}

0 comments on commit 6239449

Please sign in to comment.