Skip to content

Commit e40a7b3

Browse files
committed
Added some new template functions to expose the character statinfo values
1 parent b40bb4d commit e40a7b3

File tree

4 files changed

+25
-4
lines changed

4 files changed

+25
-4
lines changed

_datafiles/world/default/templates/character/status.template

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
{{- $hpDisplay := printf "%s" ( healthStr .Character.Health .Character.HealthMax.Value 22 ) }}
77
{{- $mpDisplay := printf "%s" ( manaStr .Character.Mana .Character.ManaMax.Value 22 ) }}
88
┌─ <ansi fg="black-bold">.:</ansi><ansi fg="20">Info</ansi> ──────────────────────┐ ┌─ <ansi fg="black-bold">.:</ansi><ansi fg="20">Attributes</ansi> ───────────────────────────┐
9-
│ <ansi fg="yellow">Area: </ansi>{{ printf "%-22s" .Character.Zone }}│ │ <ansi fg="yellow">Strength: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" .Character.Stats.Strength.Value (.Character.StatMod "strength") }} <ansi fg="yellow">Vitality: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" .Character.Stats.Vitality.Value (.Character.StatMod "vitality") }} │
10-
<ansi fg="yellow">Race: </ansi>{{ printf "%-22s" .Character.Race }} <ansi fg="yellow">Speed: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" .Character.Stats.Speed.Value (.Character.StatMod "speed") }} <ansi fg="yellow">Mysticism: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" .Character.Stats.Mysticism.Value (.Character.StatMod "mysticism") }}
11-
<ansi fg="yellow">Level: </ansi>{{ printf "%-22d" .Character.Level }} │ <ansi fg="yellow">Smarts: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" .Character.Stats.Smarts.Value (.Character.StatMod "smarts") }} <ansi fg="yellow">Percept: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" .Character.Stats.Perception.Value (.Character.StatMod "perception") }} │
9+
│ <ansi fg="yellow">Area: </ansi>{{ printf "%-22s" .Character.Zone }}│ │ <ansi fg="yellow">Strength: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" (charStatValue .Character "strength") (.Character.StatMod "strength") }} <ansi fg="yellow">Vitality: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" (charStatValue .Character "Vitality") (.Character.StatMod "vitality") }} │
10+
<ansi fg="yellow">Race: </ansi>{{ printf "%-22s" .Character.Race }} <ansi fg="yellow">Speed: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" (charStatValue .Character "Speed") (.Character.StatMod "speed") }} <ansi fg="yellow">Mysticism: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" (charStatValue .Character "Mysticism") (.Character.StatMod "mysticism") }}
11+
<ansi fg="yellow">Level: </ansi>{{ printf "%-22d" .Character.Level }} │ <ansi fg="yellow">Smarts: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" (charStatValue .Character "Smarts") (.Character.StatMod "smarts") }} <ansi fg="yellow">Percept: </ansi>{{ printf "<ansi fg=\"stat\">%-4d</ansi><ansi fg=\"statmod\">(%-3d)</ansi>" (charStatValue .Character "Perception") (.Character.StatMod "perception") }} │
1212
<ansi fg="yellow">Exp: </ansi>{{ printf "%-22s" ( tnl .UserId ) }} └──────────────────────────────────────────┘
1313
<ansi fg="yellow">Health: </ansi>{{ printf "%s" $hpDisplay }} ┌─ <ansi fg="black-bold">.:</ansi><ansi fg="20">Wealth</ansi> ────────┐ ┌─ <ansi fg="black-bold">.:</ansi><ansi fg="20">Training</ansi> ───────┐
1414
<ansi fg="yellow">Mana: </ansi>{{ printf "%s" $mpDisplay }} │ <ansi fg="yellow">Gold: </ansi>{{ printf "%-11s" (numberFormat .Character.Gold) }} │ │ <ansi fg="yellow">Train Pts:</ansi> {{ printf "%-7d" .Character.TrainingPoints }} │
1515
│ <ansi fg="yellow">Armor: </ansi>{{ printf "%-6s" ( printf "%d" (.Character.GetDefense)) }} {{ if permadeath }}<ansi fg="yellow">Lives: </ansi>{{ printf "%-7d" .Character.ExtraLives }}{{ else }} {{ end }} │ │ <ansi fg="yellow">Bank: </ansi>{{ printf "%-11s" (numberFormat .Character.Bank) }} │ │ <ansi fg="yellow">Stat Pts:</ansi> {{ printf "%-7d" .Character.StatPoints }} │
1616
└───────────────────────────────┘ └───────────────────┘ └────────────────────┘
1717
{{- if gt .Character.StatPoints 0 }}{{ if lt .Character.Level 5 }}
18-
<ansi fg="alert-5">TIP:</ansi> <ansi fg="alert-2">Type <ansi fg="command">status train</ansi> to spend stat points on improvements.</ansi> {{ end }}{{ end -}}
18+
<ansi fg="alert-5">TIP:</ansi> <ansi fg="alert-2">Type <ansi fg="command">status train</ansi> to spend stat points on improvements.</ansi> {{ end }}{{ end -}}

internal/characters/character.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,6 +1372,8 @@ func (c *Character) StatMod(statName string) int {
13721372
}
13731373

13741374
// returns true if something has changed.
1375+
// TODO: [nitpick] There are many repetitive Get("X") calls; consider iterating over a slice of stat names or using a helper to apply updates in a loop for readability.
1376+
13751377
func (c *Character) RecalculateStats() {
13761378

13771379
// Make sure racial base stats are set

internal/templates/templatesfunctions.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,24 @@ import (
2323

2424
var (
2525
funcMap = template.FuncMap{
26+
"charStatBase": func(char *characters.Character, name string) int {
27+
return char.Stats.Get(name).Base
28+
},
29+
"charStatTraining": func(char *characters.Character, name string) int {
30+
return char.Stats.Get(name).Training
31+
},
32+
"charStatMods": func(char *characters.Character, name string) int {
33+
return char.Stats.Get(name).Mods
34+
},
35+
"charStatValue": func(char *characters.Character, name string) int {
36+
return char.Stats.Get(name).Value
37+
},
38+
"charStatValueAdj": func(char *characters.Character, name string) int {
39+
return char.Stats.Get(name).ValueAdj
40+
},
41+
"charStatRacial": func(char *characters.Character, name string) int {
42+
return char.Stats.Get(name).Racial
43+
},
2644
"pad": pad,
2745
"padLeft": padLeft,
2846
"padRight": padRight,

internal/usercommands/status.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ func Status(rest string, user *users.UserRecord, room *rooms.Room, flags events.
6060
after := 0
6161
spent := 0
6262

63+
// TODO: Now that we have removed the switch statement and replaced it with a map this command will always succeed so spent = 1 will always be true if the character has training points to spend. Need to come back to this and add some checks to see if the stat can actually be trained.
6364
before = user.Character.Stats.Get(selection).Value - user.Character.Stats.Get(selection).Mods
6465
user.Character.Stats.Get(selection).Training += 1
6566
spent = 1

0 commit comments

Comments
 (0)