using HISP.Player; using HISP.Server; using System.Collections.Generic; namespace HISP.Game { class Npc { public struct NpcReply { public int Id; public string ReplyText; public int GotoChatpoint; public int RequiresQuestIdCompleted; public int RequiresQuestIdNotCompleted; } public struct NpcChat { public int Id; public string ChatText; public int ActivateQuestId; public NpcReply[] Replies; } public struct NpcEntry { public int Id; public string Name; public string AdminDescription; public string ShortDescription; public string LongDescription; public bool Moves; public int X; public int Y; public string StayOn; public int RequiresQuestIdCompleted; public int RequiresQuestIdNotCompleted; public string UDLRScript; public int UDLRStartX; public int UDLRStartY; public bool AdminOnly; public bool LibarySearchable; public int IconId; public NpcChat[] Chatpoints; } public static List NpcList = new List(); public static NpcReply GetNpcReply(NpcEntry npc, int id) { foreach (NpcChat chatpoint in npc.Chatpoints) { foreach (NpcReply reply in chatpoint.Replies) { if (reply.Id == id) return reply; } } throw new KeyNotFoundException("Npc reply with " + id + " not found!"); } public static NpcReply GetNpcReply(NpcChat chatpoint, int id) { foreach(NpcReply reply in chatpoint.Replies) { if (reply.Id == id) return reply; } throw new KeyNotFoundException("Npc reply with " + id + " not found!"); } public static NpcChat GetNpcChatpoint(NpcEntry npc, int chatpointId) { foreach(Npc.NpcChat chatpoint in npc.Chatpoints) { if(chatpoint.Id == chatpointId) { return chatpoint; } } throw new KeyNotFoundException("Npc chatpoint id: " + chatpointId + " not found!"); } public static int GetDefaultChatpoint(User user, NpcEntry npc) { if (Database.HasNpcStartpointSet(user.Id, npc.Id)) return Database.GetNpcStartPoint(user.Id, npc.Id); else return 0; } public static void SetDefaultChatpoint(User user, NpcEntry npc, int chatpointId) { if (Database.HasNpcStartpointSet(user.Id, npc.Id)) Database.SetNpcStartPoint(user.Id, npc.Id, chatpointId); else Database.AddNpcStartPoint(user.Id, npc.Id, chatpointId); } public static bool NpcExists(int id) { try { GetNpcById(id); return true; } catch (KeyNotFoundException) { return false; } } public static NpcEntry GetNpcById(int id) { foreach(NpcEntry npc in NpcList) { if (npc.Id == id) return npc; } throw new KeyNotFoundException("Npc id: " + id + " not found!"); } public static NpcEntry[] GetNpcByXAndY(int x, int y) { List npcs = new List(); foreach(NpcEntry npc in NpcList) { if (npc.X == x && npc.Y == y) npcs.Add(npc); } return npcs.ToArray(); } } }