aboutsummaryrefslogtreecommitdiff
path: root/internal/game/act_steal.go
diff options
context:
space:
mode:
authorhistoria <[not public]>2026-07-08 02:23:59 -0400
committerhistoria <[not public]>2026-07-08 02:23:59 -0400
commit2bbe6b8e912bbc5f4a61a33988fb27aca7bd5eb3 (patch)
treeef4aef5a7393de51d765b24d565b414ddac4b9fe /internal/game/act_steal.go
parent71f0f381de64e045f91da19450adacf10fbc7902 (diff)
downloadthehouseoficarus-2bbe6b8e912bbc5f4a61a33988fb27aca7bd5eb3.tar.gz
feat: object and mob steal tables can include both tables and items
Diffstat (limited to 'internal/game/act_steal.go')
-rw-r--r--internal/game/act_steal.go23
1 files changed, 11 insertions, 12 deletions
diff --git a/internal/game/act_steal.go b/internal/game/act_steal.go
index 0aae6d1..d081d8b 100644
--- a/internal/game/act_steal.go
+++ b/internal/game/act_steal.go
@@ -93,7 +93,7 @@ func (g *Game) resolveStealTarget(sess *net.Session, p *player.Player, input str
roomMobs := g.MobStore.MobsInRoom(p.RoomID)
var stealMobs []*world.MobInstance
for _, m := range roomMobs {
- if m.StealTable != "" {
+ if len(m.StealDrops) > 0 {
stealMobs = append(stealMobs, m)
}
}
@@ -102,7 +102,7 @@ func (g *Game) resolveStealTarget(sess *net.Session, p *player.Player, input str
var stealObjs []*object.ObjectDef
for _, st := range roomObjs {
def, err := g.ObjectStore.Load(st.DefID)
- if err != nil || def.Steal == nil || def.Steal.Table == "" {
+ if err != nil || def.Steal == nil || len(def.Steal.Drops) == 0 {
continue
}
stealObjs = append(stealObjs, def)
@@ -183,7 +183,7 @@ func (g *Game) resolveStealTarget(sess *net.Session, p *player.Player, input str
}
func (g *Game) startSteal(sess *net.Session, p *player.Player, targetType string, mob *world.MobInstance, objDef *object.ObjectDef) {
- var stealTable string
+ var stealDrops []behavior.DropEntry
var stealLevel int
var stealXP int
var stealSpeed float64
@@ -195,7 +195,7 @@ func (g *Game) startSteal(sess *net.Session, p *player.Player, targetType string
guardWatching := false
if targetType == "mob" {
- stealTable = mob.StealTable
+ stealDrops = mob.StealDrops
stealLevel = mob.StealLevel
stealXP = mob.StealXP
stealSpeed = mob.StealSpeed
@@ -207,7 +207,7 @@ func (g *Game) startSteal(sess *net.Session, p *player.Player, targetType string
sess.WriteLine("They don't seem interested in you.")
return
}
- if stealTable == "" {
+ if len(stealDrops) == 0 {
sess.WriteLine(fmt.Sprintf("You can't steal from the %s.", targetName))
return
}
@@ -224,7 +224,7 @@ func (g *Game) startSteal(sess *net.Session, p *player.Player, targetType string
return
}
} else {
- stealTable = objDef.Steal.Table
+ stealDrops = objDef.Steal.Drops
stealLevel = objDef.Steal.Level
stealXP = objDef.Steal.XP
stealSpeed = objDef.Steal.Speed
@@ -233,7 +233,7 @@ func (g *Game) startSteal(sess *net.Session, p *player.Player, targetType string
objDefID = objDef.ID
guardMob = objDef.Steal.GuardMob
- if stealTable == "" {
+ if len(stealDrops) == 0 {
sess.WriteLine(fmt.Sprintf("You can't steal from the %s.", targetName))
return
}
@@ -270,7 +270,7 @@ func (g *Game) startSteal(sess *net.Session, p *player.Player, targetType string
WaitLeft: engine.ToTicks(stealSpeed),
Data: &behavior.StealData{
TargetType: targetType,
- StealTable: stealTable,
+ StealDrops: stealDrops,
StealLevel: stealLevel,
StealXP: stealXP,
StealSpeed: stealSpeed,
@@ -286,7 +286,7 @@ func (g *Game) startSteal(sess *net.Session, p *player.Player, targetType string
func (g *Game) advanceSteal(sess *net.Session, p *player.Player) {
d := p.Action.Data.(*behavior.StealData)
targetType := d.TargetType
- stealTable := d.StealTable
+ stealDrops := d.StealDrops
stealLevel := d.StealLevel
stealXP := d.StealXP
stealSpeed := d.StealSpeed
@@ -362,11 +362,10 @@ func (g *Game) advanceSteal(sess *net.Session, p *player.Player) {
}
if rand.Float64() < chance {
- dt, err := behavior.LoadDropTable(g.DataDir, stealTable)
- if err != nil || len(dt.Drops) == 0 {
+ if len(stealDrops) == 0 {
sess.WriteLine("You steal nothing of value.")
} else {
- drop := behavior.ResolveDrop(g.DataDir, dt.Drops)
+ drop := behavior.ResolveDrop(g.DataDir, stealDrops)
if drop == nil || drop.ItemID == "" {
sess.WriteLine("You steal nothing of value.")
} else {