diff options
Diffstat (limited to 'internal/game/action_steal.go')
| -rw-r--r-- | internal/game/action_steal.go | 69 |
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) |
