aboutsummaryrefslogtreecommitdiff
path: root/internal/game/action_steal.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-06-25 00:44:47 -0400
committerhistoria <[not public]>2026-06-25 00:44:47 -0400
commit94a06fbbe682701ca4d4bd2a70cd74d8df29c932 (patch)
treeeb49fb1893e61092138164d419e863ee3fe0d1e2 /internal/game/action_steal.go
parent15b7e221b799ef107dec44ecdb294026dfd3d059 (diff)
downloadthehouseoficarus-94a06fbbe682701ca4d4bd2a70cd74d8df29c932.tar.gz
refactor: replaced map[string]any with typed structs for Data
Diffstat (limited to 'internal/game/action_steal.go')
-rw-r--r--internal/game/action_steal.go69
1 files changed, 33 insertions, 36 deletions
diff --git a/internal/game/action_steal.go b/internal/game/action_steal.go
index 259c914..65c684c 100644
--- a/internal/game/action_steal.go
+++ b/internal/game/action_steal.go
@@ -257,43 +257,42 @@ func (g *Game) startSteal(sess *net.Session, p *player.Player, targetType string
}
sess.WriteLine(fmt.Sprintf("You attempt to steal from the %s...", targetName))
- p.ActionState = &ActionState{Type: ActionStealing, TargetName: targetName}
g.broadcastAction(sess, "\n%s glances around the room.", p.Name)
p.Action = &action.Action{
- Type: "steal",
+ Type: action.TypeSteal,
TargetID: targetID,
TargetName: targetName,
WaitLeft: engine.ToTicks(stealSpeed),
- Data: map[string]any{
- "target_type": targetType,
- "steal_table": stealTable,
- "steal_level": stealLevel,
- "steal_xp": stealXP,
- "steal_speed": stealSpeed,
- "target_name": targetName,
- "mob_instance_id": mobInstanceID,
- "obj_def_id": objDefID,
- "guard_mob": guardMob,
- "guard_watching": guardWatching,
+ Data: &action.StealData{
+ TargetType: targetType,
+ StealTable: stealTable,
+ StealLevel: stealLevel,
+ StealXP: stealXP,
+ StealSpeed: stealSpeed,
+ TargetName: targetName,
+ MobInstanceID: mobInstanceID,
+ ObjDefID: objDefID,
+ GuardMob: guardMob,
+ GuardWatching: guardWatching,
},
}
}
func (g *Game) advanceSteal(sess *net.Session, p *player.Player) {
- data := p.Action.Data
- targetType := data["target_type"].(string)
- stealTable := data["steal_table"].(string)
- stealLevel := data["steal_level"].(int)
- stealXP := data["steal_xp"].(int)
- stealSpeed := data["steal_speed"].(float64)
- targetName := data["target_name"].(string)
- guardMob := data["guard_mob"].(string)
- guardWatching := data["guard_watching"].(bool)
+ d := p.Action.Data.(*action.StealData)
+ targetType := d.TargetType
+ stealTable := d.StealTable
+ stealLevel := d.StealLevel
+ stealXP := d.StealXP
+ stealSpeed := d.StealSpeed
+ targetName := d.TargetName
+ guardMob := d.GuardMob
+ guardWatching := d.GuardWatching
if targetType == "mob" {
- mobInstanceID := data["mob_instance_id"].(string)
+ mobInstanceID := d.MobInstanceID
mob := g.MobStore.GetInstance(mobInstanceID)
if mob == nil || mob.HP <= 0 || mob.RoomID != p.RoomID {
sess.WriteLine("Your target is gone.")
@@ -305,14 +304,14 @@ func (g *Game) advanceSteal(sess *net.Session, p *player.Player) {
g.cancelAction(p)
return
}
- data["steal_level"] = mob.StealLevel
- data["steal_xp"] = mob.StealXP
- data["steal_speed"] = mob.StealSpeed
+ d.StealLevel = mob.StealLevel
+ d.StealXP = mob.StealXP
+ d.StealSpeed = mob.StealSpeed
stealLevel = mob.StealLevel
stealXP = mob.StealXP
stealSpeed = mob.StealSpeed
} else {
- objDefID := data["obj_def_id"].(string)
+ objDefID := d.ObjDefID
found := false
for _, st := range g.World.AllObjInstances(p.RoomID) {
if st.DefID == objDefID && !st.Depleted {
@@ -327,13 +326,13 @@ func (g *Game) advanceSteal(sess *net.Session, p *player.Player) {
}
objDef, err := g.ObjectStore.Load(objDefID)
if err == nil {
- data["steal_level"] = objDef.StealLevel
- data["steal_xp"] = objDef.StealXP
- data["steal_speed"] = objDef.StealSpeed
+ d.StealLevel = objDef.StealLevel
+ d.StealXP = objDef.StealXP
+ d.StealSpeed = objDef.StealSpeed
stealLevel = objDef.StealLevel
stealXP = objDef.StealXP
stealSpeed = objDef.StealSpeed
- data["guard_mob"] = objDef.GuardMob
+ d.GuardMob = objDef.GuardMob
guardMob = objDef.GuardMob
if guardMob != "" {
@@ -344,7 +343,7 @@ func (g *Game) advanceSteal(sess *net.Session, p *player.Player) {
g.guardWatchTimers[timerKey] = 0
}
guardWatching = g.isGuardWatching(p.RoomID, objDefID)
- data["guard_watching"] = guardWatching
+ d.GuardWatching = guardWatching
}
}
}
@@ -387,7 +386,7 @@ func (g *Game) advanceSteal(sess *net.Session, p *player.Player) {
p.Action.WaitLeft = engine.ToTicks(stealSpeed)
} else {
if targetType == "mob" {
- mobInstanceID := data["mob_instance_id"].(string)
+ mobInstanceID := d.MobInstanceID
mob := g.MobStore.GetInstance(mobInstanceID)
sess.WriteLine(fmt.Sprintf("The %s notices you! They attack!", targetName))
g.cancelAction(p)
@@ -467,13 +466,11 @@ func (g *Game) startStealGuardTalk(sess *net.Session, p *player.Player, guardMob
return
}
- p.ActionState = &ActionState{Type: ActionTalking, TargetName: guardMob.Name}
-
p.Action = &action.Action{
Type: "talk",
TargetID: guardMob.DefID,
TargetName: guardMob.Name,
- Data: map[string]any{"node": "start", "talk_cfg": cfg, "steal_guard": true},
+ Data: &action.TalkData{Node: "start", Cfg: cfg, StealGuard: true},
}
g.showTalkNode(sess, node)