func DeleteRoom(room types.Room) { db.DeleteObject(room.GetId()) // Disconnect all exits leading to this room loc := room.GetLocation() updateRoom := func(dir types.Direction) { next := loc.Next(dir) room := GetRoomByLocation(next, room.GetZoneId()) if room != nil { room.SetExitEnabled(dir.Opposite(), false) } } updateRoom(types.DirectionNorth) updateRoom(types.DirectionNorthEast) updateRoom(types.DirectionEast) updateRoom(types.DirectionSouthEast) updateRoom(types.DirectionSouth) updateRoom(types.DirectionSouthWest) updateRoom(types.DirectionWest) updateRoom(types.DirectionNorthWest) updateRoom(types.DirectionUp) updateRoom(types.DirectionDown) }
func (self *Session) printRoom(room types.Room) { pcs := model.PlayerCharactersIn(self.pc.GetRoomId(), self.pc.GetId()) npcs := model.NpcsIn(room.GetId()) items := model.ItemsIn(room.GetId()) store := model.StoreIn(room.GetId()) var area types.Area if room.GetAreaId() != nil { area = model.GetArea(room.GetAreaId()) } var str string areaStr := "" if area != nil { areaStr = fmt.Sprintf("%s - ", area.GetName()) } str = fmt.Sprintf("\r\n %v>>> %v%s%s %v<<< %v(%v %v %v)\r\n\r\n %v%s\r\n\r\n", types.ColorWhite, types.ColorBlue, areaStr, room.GetTitle(), types.ColorWhite, types.ColorBlue, room.GetLocation().X, room.GetLocation().Y, room.GetLocation().Z, types.ColorWhite, room.GetDescription()) if store != nil { str = fmt.Sprintf("%s Store: %s\r\n\r\n", str, types.Colorize(types.ColorBlue, store.GetName())) } extraNewLine := "" if len(pcs) > 0 { str = fmt.Sprintf("%s %sAlso here:", str, types.ColorBlue) names := make([]string, len(pcs)) for i, char := range pcs { names[i] = types.Colorize(types.ColorWhite, char.GetName()) } str = fmt.Sprintf("%s %s \r\n", str, strings.Join(names, types.Colorize(types.ColorBlue, ", "))) extraNewLine = "\r\n" } if len(npcs) > 0 { str = fmt.Sprintf("%s %s", str, types.Colorize(types.ColorBlue, "NPCs: ")) names := make([]string, len(npcs)) for i, npc := range npcs { names[i] = types.Colorize(types.ColorWhite, npc.GetName()) } str = fmt.Sprintf("%s %s \r\n", str, strings.Join(names, types.Colorize(types.ColorBlue, ", "))) extraNewLine = "\r\n" } if len(items) > 0 { itemMap := make(map[string]int) var nameList []string for _, item := range items { if item == nil { continue } _, found := itemMap[item.GetName()] if !found { nameList = append(nameList, item.GetName()) } itemMap[item.GetName()]++ } sort.Strings(nameList) str = str + " " + types.Colorize(types.ColorBlue, "Items: ") var names []string for _, name := range nameList { if itemMap[name] > 1 { name = fmt.Sprintf("%s x%v", name, itemMap[name]) } names = append(names, types.Colorize(types.ColorWhite, name)) } str = str + strings.Join(names, types.Colorize(types.ColorBlue, ", ")) + "\r\n" extraNewLine = "\r\n" } str = str + extraNewLine + " " + types.Colorize(types.ColorBlue, "Exits: ") var exitList []string for _, direction := range room.GetExits() { exitList = append(exitList, utils.DirectionToExitString(direction)) } if len(exitList) == 0 { str = str + types.Colorize(types.ColorWhite, "None") } else { str = str + strings.Join(exitList, " ") } if len(room.GetLinks()) > 0 { str = fmt.Sprintf("%s\r\n\r\n %s %s", str, types.Colorize(types.ColorBlue, "Other exits:"), types.Colorize(types.ColorWhite, strings.Join(room.LinkNames(), ", ")), ) } str = str + "\r\n" self.WriteLine(str) }
func costEstimate(start, goal types.Room) int { c1 := start.GetLocation() c2 := goal.GetLocation() return utils.Abs(c1.X-c2.X) + utils.Abs(c1.Y-c2.Y) + utils.Abs(c1.Z-c2.Z) }