func spawnerMenu(s *Session, area types.Area) { utils.ExecMenu("Spawners", s, func(menu *utils.Menu) { for i, spawner := range model.GetAreaSpawners(area.GetId()) { sp := spawner menu.AddActionI(i, spawner.GetName(), func() bool { specificSpawnerMenu(s, sp) return true }) } menu.AddAction("n", "New", func() bool { name := s.getRawUserInput("Name of spawned NPC: ") if name != "" { model.CreateSpawner(name, area.GetId()) } return true }) }) }
func specificAreaMenu(s *Session, area types.Area) { utils.ExecMenu(area.GetName(), s, func(menu *utils.Menu) { menu.AddAction("r", "Rename", func() bool { newName := s.getRawUserInput("New name: ") if newName != "" { area.SetName(newName) } return true }) menu.AddAction("d", "Delete", func() bool { answer := s.getRawUserInput("Are you sure? ") if strings.ToLower(answer) == "y" { model.DeleteArea(area.GetId()) } return false }) menu.AddAction("s", "Spawners", func() bool { spawnerMenu(s, area) return true }) }) }
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) }