From a19e6b6ab01670a5932308c7bd0e0e5eed8cbcad Mon Sep 17 00:00:00 2001 From: historia <[not public]> Date: Fri, 12 Jun 2026 23:52:06 -0400 Subject: feat: firemaking skill implemented. overhauled how ground items and despawn are handled. --- internal/game/cmd_attack.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'internal/game/cmd_attack.go') 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) { -- cgit v1.2.3