diff options
| author | historia <[not public]> | 2026-06-22 01:54:28 -0400 |
|---|---|---|
| committer | historia <[not public]> | 2026-06-22 01:54:28 -0400 |
| commit | 7f07c7236578e1a7bcef0282ff9d7f5bf8c7c045 (patch) | |
| tree | 7f9182f6fc9ed44d4738bfc6758660d741ba88e7 /internal/game | |
| parent | a3ae1e6aad696f584d138d9363c05dedff136a65 (diff) | |
| download | thehouseoficarus-7f07c7236578e1a7bcef0282ff9d7f5bf8c7c045.tar.gz | |
fix: safespot fixes
Diffstat (limited to 'internal/game')
| -rw-r--r-- | internal/game/action_farm.go | 2 | ||||
| -rw-r--r-- | internal/game/cmd_hide.go | 6 | ||||
| -rw-r--r-- | internal/game/cmd_look.go | 32 | ||||
| -rw-r--r-- | internal/game/sys_safespot.go | 8 |
4 files changed, 17 insertions, 31 deletions
diff --git a/internal/game/action_farm.go b/internal/game/action_farm.go index 6361901..87ea6b7 100644 --- a/internal/game/action_farm.go +++ b/internal/game/action_farm.go @@ -614,7 +614,7 @@ func (g *Game) showFarmPatches(sess *net.Session, p *player.Player) { sess.WriteLine("") for _, d := range displays { - sess.WriteLine(fmt.Sprintf(" A %s: %s.", d.name, d.line)) + sess.WriteLine(fmt.Sprintf("A %s: %s.", d.name, d.line)) } } diff --git a/internal/game/cmd_hide.go b/internal/game/cmd_hide.go index 9445949..2dca478 100644 --- a/internal/game/cmd_hide.go +++ b/internal/game/cmd_hide.go @@ -87,10 +87,10 @@ func (g *Game) executeHide(sess *net.Session, args []string, rawInput string) { if st.SafespotLevel <= 0 { if cfg.RespawnTicks > 0 { sess.WriteLine(fmt.Sprintf("The %s has been destroyed and hasn't reformed yet.", objDef.Name)) - } else { - sess.WriteLine(fmt.Sprintf("The %s has been completely destroyed.", objDef.Name)) + return } - return + st.SafespotLevel = len(cfg.Levels) + st.SafespotTicksAtLevel = 0 } inCombat := combat.GetCombat(p.Name) != nil diff --git a/internal/game/cmd_look.go b/internal/game/cmd_look.go index 4cc556a..903b32d 100644 --- a/internal/game/cmd_look.go +++ b/internal/game/cmd_look.go @@ -24,8 +24,8 @@ func (g *Game) doLook(sess *net.Session) { g.showRoomName(sess, p, room) g.showRoomDescription(sess, p, room) - g.showRoomMobs(sess, p, room) g.showRoomObjects(sess, p, room) + g.showRoomMobs(sess, p, room) g.showGroundItems(sess, p, room) g.showRoomExits(sess, p, room) g.showRoomPlayers(sess, p, room) @@ -104,7 +104,7 @@ func (g *Game) showRoomMobs(sess *net.Session, p *player.Player, room *world.Roo } mobLevel := mobCombatLevel(m) levelStr := g.levelColorize(sess, playerLevel, mobLevel, fmt.Sprintf("(level %d)", mobLevel)) - sess.WriteLine(fmt.Sprintf(" %s %s%s%s", g.colorize(sess, mobColor, displayName), levelStr, hp, desc)) + sess.WriteLine(fmt.Sprintf("%s %s%s%s", g.colorize(sess, mobColor, displayName), levelStr, hp, desc)) } } } @@ -128,7 +128,7 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world. continue } - if def.Hidden && (def.Safespot == nil || g.safespotTier(p) < def.Safespot.Tier) { + if def.Hidden { continue } @@ -136,24 +136,6 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world. continue } - if def.Hidden && def.Safespot != nil { - st := g.World.GetObjState(p.RoomID, objID, 0) - levelInfo := "" - if st != nil { - if st.SafespotLevel <= 0 && def.Safespot.RespawnTicks > 0 { - continue - } - if st.SafespotLevel <= 0 { - levelInfo = " (destroyed)" - } else if st.SafespotLevel < len(def.Safespot.Levels) { - levelInfo = " (degraded)" - } - } - sess.WriteLine(fmt.Sprintf(" %s that could provide cover.%s", - g.objColorize(sess, def, def.Name), levelInfo)) - continue - } - type instInfo struct { idx int depleted bool @@ -216,7 +198,7 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world. if showTimers && len(instances) > 0 && instances[0].quality > 0 { qualityTimer = fmt.Sprintf(" (Burning for %d more ticks)", instances[0].quality) } - sess.WriteLine(fmt.Sprintf(" %s%s%s", line, suffix, qualityTimer)) + sess.WriteLine(fmt.Sprintf("%s%s%s", line, suffix, qualityTimer)) } for _, ins := range timed { @@ -234,7 +216,7 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world. if showTimers { timer = fmt.Sprintf(" (despawn: %d/%d)", ins.sharedCur, ins.sharedMax) } - sess.WriteLine(fmt.Sprintf(" %s%s%s", line, tag, timer)) + sess.WriteLine(fmt.Sprintf("%s%s%s", line, tag, timer)) } for _, ins := range depleted { @@ -252,7 +234,7 @@ func (g *Game) showRoomObjects(sess *net.Session, p *player.Player, room *world. if showTimers { timer = fmt.Sprintf(" (respawns in %d ticks)", ins.respawnIn) } - sess.WriteLine(fmt.Sprintf(" %s (depleted)%s%s", line, tag, timer)) + sess.WriteLine(fmt.Sprintf("%s (depleted)%s%s", line, tag, timer)) } } } @@ -549,7 +531,7 @@ func (g *Game) doLookTarget(sess *net.Session, input string) { if realSt != nil { levelStr := "intact" if realSt.SafespotLevel <= 0 { - levelStr = "destroyed" + levelStr = fmt.Sprintf("intact (level %d/%d)", len(def.Safespot.Levels), len(def.Safespot.Levels)) } else if realSt.SafespotLevel < len(def.Safespot.Levels) { levelStr = fmt.Sprintf("degraded (level %d/%d)", realSt.SafespotLevel, len(def.Safespot.Levels)) } else { diff --git a/internal/game/sys_safespot.go b/internal/game/sys_safespot.go index ffb7948..b0e94c2 100644 --- a/internal/game/sys_safespot.go +++ b/internal/game/sys_safespot.go @@ -99,7 +99,7 @@ func (g *Game) activateSafespot(sess *net.Session, p *player.Player, ss *Safespo return } - if cfg.RespawnOnHide { + if cfg.RespawnOnHide && len(st.SafespotOccupants) == 0 { st.SafespotLevel = len(cfg.Levels) st.SafespotTicksAtLevel = 0 } else if st.SafespotLevel <= 0 { @@ -211,7 +211,11 @@ func (g *Game) degradeSafespot(st *world.ObjState, objDef *object.ObjectDef, cfg } } st.SafespotOccupants = nil - g.scheduleSafespotRespawn(st, objDef, cfg) + if cfg.RespawnTicks > 0 { + g.scheduleSafespotRespawn(st, objDef, cfg) + } else { + g.World.RemoveObjInstance(st.RoomID, objDef.ID) + } return } |
