func GetNeighbors(room types.Room) []types.Room { neighbors := []types.Room{} for _, dir := range room.GetExits() { coords := room.NextLocation(dir) neighbor := GetRoomByLocation(coords, room.GetZoneId()) if neighbor != nil { neighbors = append(neighbors, neighbor) } } for _, id := range room.GetLinks() { neighbor := GetRoom(id) if neighbor != nil { neighbors = append(neighbors, neighbor) } } return neighbors }
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) }