aboutsummaryrefslogtreecommitdiff
path: root/internal/game/cmd_attack.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/game/cmd_attack.go')
-rw-r--r--internal/game/cmd_attack.go15
1 files changed, 11 insertions, 4 deletions
diff --git a/internal/game/cmd_attack.go b/internal/game/cmd_attack.go
index f6ccf0c..2f79c16 100644
--- a/internal/game/cmd_attack.go
+++ b/internal/game/cmd_attack.go
@@ -195,7 +195,11 @@ func (g *Game) playerAttack(sess *net.Session, p *player.Player, mob *world.MobI
if mob.HP < mob.MaxHP && mob.HP > 0 {
mob.StartRegen()
}
- gains := g.awardCombatXP(p, dmg)
+ gains, leveled := g.awardCombatXP(p, dmg)
+
+ for _, skill := range leveled {
+ sess.WriteLine(fmt.Sprintf("*** You are now level %d %s! ***", p.Level(skill), skill))
+ }
mobName := mobDisplayName(mob, true)
attacker := mob.Name
@@ -348,9 +352,10 @@ func (g *Game) endCombat(sess *net.Session, p *player.Player, mob *world.MobInst
}
}
-func (g *Game) awardCombatXP(p *player.Player, dmg int) []xpGain {
+func (g *Game) awardCombatXP(p *player.Player, dmg int) ([]xpGain, []player.SkillName) {
baseXP := dmg * 4
var gains []xpGain
+ var leveledUp []player.SkillName
switch p.AttackStyle {
case player.Accurate:
@@ -370,10 +375,12 @@ func (g *Game) awardCombatXP(p *player.Player, dmg int) []xpGain {
}
for _, gain := range gains {
- p.AddXP(player.SkillName(gain.Skill), gain.XP)
+ if newLevel := p.AddSkillXP(player.SkillName(gain.Skill), gain.XP); newLevel > 0 {
+ leveledUp = append(leveledUp, player.SkillName(gain.Skill))
+ }
}
g.AccountStore.SaveCharacter(p)
- return gains
+ return gains, leveledUp
}
func (g *Game) dropItemsOnDeath(p *player.Player) {