package game import ( "fmt" "thehouseoficarus/internal/combat" "thehouseoficarus/internal/net" "thehouseoficarus/internal/player" ) func (g *Game) triggerTransport(sess *net.Session, p *player.Player, mod *ModDef) { if combat.GetCombat(p.Name) != nil { sess.WriteLine("You can't teleport during combat!") return } if p.Action != nil { g.cancelAction(p) } g.consumeJunkCost(p, mod) sciXP := mod.BaseXP g.awardSkillXP(sess, p, player.Science, sciXP) if p.OptionBool("xp_drops") { sess.WriteLine(g.colorize(sess, "xp", fmt.Sprintf("+%dxp sci", sciXP))) } g.AccountStore.SaveCharacter(p) if g.Hub != nil { for _, other := range g.Hub.PlayersInRoom(p.RoomID) { if other != sess { other.WriteLine(fmt.Sprintf("\n%s teleports away.", p.Name)) } } } sess.WriteLine(fmt.Sprintf("\nYou activate %s...", mod.Name)) p.RoomID = mod.Destination if g.Hub != nil { g.Hub.LeaveRoom(sess) g.Hub.EnterRoom(sess, p.RoomID) } room, _ := g.World.LoadRoom(p.RoomID) destName := fmt.Sprintf("room %d", p.RoomID) if room != nil { destName = room.Name } sess.WriteLine(fmt.Sprintf("You materialize at %s.", destName)) g.AccountStore.SaveCharacter(p) g.doLook(sess) }