using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class NpcQuestProgress { public HashSet acceptingQuests; public HashSet inProgressQuests; public HashSet completedQuests; public NpcQuestProgress(HashSet acceptingQuests, HashSet inProgressQuests = null, HashSet completingQuests = null) { this.acceptingQuests = acceptingQuests; this.inProgressQuests = inProgressQuests; this.completedQuests = completingQuests; if (this.acceptingQuests == null) this.acceptingQuests = new HashSet(); if (this.inProgressQuests == null) this.inProgressQuests = new HashSet(); if (this.completedQuests == null) this.completedQuests = new HashSet(); } } public class NpcState { public HashSet completedDialogues = new HashSet(); public Hashtable npcQuestMap = new Hashtable() { {NpcID.KARA, new NpcQuestProgress( new HashSet() { QuestID.QUEST_KARA_MAGIC_MUSHROOM, QuestID.QUEST_KARA_BULKY_MUSHROOM, QuestID.QUEST_KARA_LITTLE_CRITTERS, QuestID.QUEST_KARA_BANDITS, QuestID.QUEST_KARA_PLUCKING_HARPIES, }) }, {NpcID.ESTER, new NpcQuestProgress( new HashSet() { QuestID.QUEST_ESTER_ALL_ABOUT_STATS, QuestID.QUEST_ESTER_ALL_ABOUT_EQUIPS, QuestID.QUEST_ESTER_PREEMPTIVE_STRIKE, QuestID.QUEST_ESTER_EMPTIVE_STRIKE, QuestID.QUEST_ESTER_TINY_LEADER, QuestID.QUEST_ESTER_LITTLE_NIGHTMARE, QuestID.QUEST_ESTER_THE_JOURNEY_BEGINS, }) }, {NpcID.LYN, new NpcQuestProgress( new HashSet() { QuestID.QUEST_LYN_GETTING_THE_GOODS, QuestID.QUEST_LYN_BEAUTIFUL_LANDSCAPES, }) }, {NpcID.VILLAGER1, new NpcQuestProgress( new HashSet() { }) }, {NpcID.VILLAGER2, new NpcQuestProgress( new HashSet() { }) }, {NpcID.SUE, new NpcQuestProgress( new HashSet() { }) }, {NpcID.VERA, new NpcQuestProgress( new HashSet() { }) }, {NpcID.REI, new NpcQuestProgress( new HashSet() { }) }, {NpcID.ISHRA, new NpcQuestProgress( new HashSet() { }) }, {NpcID.SCOUT1, new NpcQuestProgress( new HashSet() { }) }, {NpcID.SCOUT2, new NpcQuestProgress( new HashSet() { }) }, }; } public class NpcShop { public Hashtable items; // Hashtable public NpcShop(Hashtable items) { this.items = items; } } public class NpcCraftingList { public Hashtable items; // Hashtable> public NpcCraftingList(Hashtable items) { this.items = items; } } public class Npc { public NpcID npcID; public string name; public NpcBehavior behavior; public NpcShop shop; public NpcCraftingList craftingList; public List utilityRequirements; public Npc(NpcID npcID, string name, NpcBehavior behavior = null, NpcShop shop = null, NpcCraftingList craftingList = null, List utilityRequirements = null) { this.npcID = npcID; this.name = name; this.behavior = behavior; if (this.behavior != null) { this.behavior.npcID = this.npcID; } this.shop = shop; this.craftingList = craftingList; this.utilityRequirements = utilityRequirements; } public bool AcceptQuest(QuestID questID) { if (State.state.quests.AcceptQuest(questID)) { ((NpcQuestProgress)State.state.npcState.npcQuestMap[npcID]).acceptingQuests.Remove(questID); ((NpcQuestProgress)State.state.npcState.npcQuestMap[npcID]).inProgressQuests.Add(questID); return true; } return false; } public bool CompleteQuest(QuestID questID) { if (State.state.quests.CompleteQuest(questID)) { ((NpcQuestProgress)State.state.npcState.npcQuestMap[npcID]).inProgressQuests.Remove(questID); ((NpcQuestProgress)State.state.npcState.npcQuestMap[npcID]).completedQuests.Add(questID); return true; } return false; } } public enum NpcCG { NONE, AIRA_POSE1, AIRA_POSE2, SUE, VERA, LYN, KARA, ESTER, } public enum NpcID { NONE, PLAYER, // Valley KARA, ESTER, LYN, CHIEF, VILLAGER1, VILLAGER2, // Dense Forest SUE, VERA, ISHRA, REI, SCOUT1, SCOUT2, VAMPIRE1, // Hestus City ERUN, REESE } public class NpcInfo { public static Hashtable npcs = new Hashtable() { {NpcID.PLAYER, new Npc(NpcID.PLAYER, "Aira")}, // Town {NpcID.KARA, new Npc(NpcID.KARA, "Kara", new NpcBehavior_Generic( new Hashtable() { { QuestID.QUEST_KARA_MAGIC_MUSHROOM, DialogueID.KARA_ACCEPT_MAGIC_MUSHROOM}, { QuestID.QUEST_KARA_BULKY_MUSHROOM, DialogueID.KARA_ACCEPT_BULKY_MUSHROOM}, { QuestID.QUEST_KARA_LITTLE_CRITTERS, DialogueID.KARA_ACCEPT_BULKY_MUSHROOM}, { QuestID.QUEST_KARA_BANDITS, DialogueID.KARA_ACCEPT_BANDITS}, { QuestID.QUEST_KARA_PLUCKING_HARPIES, DialogueID.KARA_ACCEPT_PLUCKING_HARPIES}, }, new Hashtable() { { QuestID.QUEST_KARA_MAGIC_MUSHROOM, DialogueID.KARA_COMPLETE_MAGIC_MUSHROOM}, { QuestID.QUEST_KARA_BULKY_MUSHROOM, DialogueID.KARA_COMPLETE_BULKY_MUSHROOM}, { QuestID.QUEST_KARA_LITTLE_CRITTERS, DialogueID.KARA_COMPLETE_LITTLE_CRITTERS}, { QuestID.QUEST_KARA_BANDITS, DialogueID.KARA_COMPLETE_BANDITS}, { QuestID.QUEST_KARA_PLUCKING_HARPIES, DialogueID.KARA_COMPLETE_PLUCKING_HARPIES}, { QuestID.QUEST_ESTER_THE_JOURNEY_BEGINS, DialogueID.KARA_COMPLETE_THE_JOURNEY_BEGINS}, }, DialogueID.KARA_SHOW_QUESTS, DialogueID.KARA_CANCEL, DialogueID.KARA_DEFAULT), /*shop=*/ null, new NpcCraftingList(new Hashtable() { { Lottery.generateItem(ItemSubType.ARCHER_BOW), new Hashtable() { { ItemSubType.FOX_FUR, 5 }, { ItemSubType.SQUIRREL_FUR, 5 }, { ItemSubType.BRANCH, 10 }, { ItemSubType.HARPY_FEATHER, 10 }, { ItemSubType.CRAFTING_MATERIAL_1, 15 }, } }, { Lottery.generateItem(ItemSubType.ARCHER_BOOTS), new Hashtable() { { ItemSubType.FOX_FUR, 10 }, { ItemSubType.SQUIRREL_FUR, 8 }, { ItemSubType.CRAFTING_MATERIAL_1, 5 }, } }, { Lottery.generateItem(ItemSubType.ARCHER_TUNIC), new Hashtable() { { ItemSubType.FOX_FUR, 15 }, { ItemSubType.SQUIRREL_FUR, 15 }, { ItemSubType.CRAFTING_MATERIAL_1, 10 }, } }, { Lottery.generateItem(ItemSubType.BANDIT_BOW), new Hashtable() { { ItemSubType.LARGE_HARPY_FEATHER, 10 }, { ItemSubType.BREASTPLATE, 15 }, { ItemSubType.SOFT_FABRIC, 15 }, { ItemSubType.CRAFTING_MATERIAL_1, 20 }, } }, { Lottery.generateItem(ItemSubType.BANDIT_BOOTS), new Hashtable() { { ItemSubType.LARGE_HARPY_FEATHER, 10 }, { ItemSubType.BREASTPLATE, 10 }, { ItemSubType.SOFT_FABRIC, 10 }, { ItemSubType.CRAFTING_MATERIAL_1, 10 }, } }, { Lottery.generateItem(ItemSubType.BANDIT_OUTFIT), new Hashtable() { { ItemSubType.FUZZY_SCARF, 10 }, { ItemSubType.BREASTPLATE, 10 }, { ItemSubType.SOFT_FABRIC, 10 }, { ItemSubType.CRAFTING_MATERIAL_1, 15 }, } }, { Lottery.generateItem(ItemSubType.ARCHER_GLOVES), new Hashtable() { { ItemSubType.FOX_FUR, 10 }, { ItemSubType.SQUIRREL_FUR, 10 }, { ItemSubType.BRANCH, 10 }, { ItemSubType.BREASTPLATE, 8 }, { ItemSubType.HARPY_FEATHER, 5 }, { ItemSubType.LARGE_HARPY_FEATHER, 10 }, { ItemSubType.CRAFTING_MATERIAL_1, 30 }, } }, { Lottery.generateItem(ItemSubType.GODDESS_BOW), new Hashtable() { { ItemSubType.GREEN_MUSHROOM_SAMPLE, 10 }, } }, }), /*utilityRequirements=*/new List() { QuestID.QUEST_ESTER_ALL_ABOUT_EQUIPS }) }, {NpcID.ESTER, new Npc(NpcID.ESTER, "Ester", new NpcBehavior_Generic( new Hashtable() { { QuestID.QUEST_ESTER_ALL_ABOUT_STATS, DialogueID.ESTER_ACCEPT_ALL_ABOUT_STATS}, { QuestID.QUEST_ESTER_ALL_ABOUT_EQUIPS, DialogueID.ESTER_ACCEPT_ALL_ABOUT_EQUIPS}, { QuestID.QUEST_ESTER_PREEMPTIVE_STRIKE, DialogueID.ESTER_ACCEPT_PREEMPTIVE_STRIKE}, { QuestID.QUEST_ESTER_EMPTIVE_STRIKE, DialogueID.ESTER_ACCEPT_EMPTIVE_STRIKE}, { QuestID.QUEST_ESTER_TINY_LEADER, DialogueID.ESTER_ACCEPT_TINY_LEADER}, { QuestID.QUEST_ESTER_LITTLE_NIGHTMARE, DialogueID.ESTER_ACCEPT_LITTLE_NIGHTMARE}, { QuestID.QUEST_ESTER_THE_JOURNEY_BEGINS, DialogueID.ESTER_ACCEPT_THE_JOURNEY_BEGINS}, }, new Hashtable() { { QuestID.QUEST_ESTER_ALL_ABOUT_STATS, DialogueID.ESTER_COMPLETE_ALL_ABOUT_STATS}, { QuestID.QUEST_ESTER_ALL_ABOUT_EQUIPS, DialogueID.ESTER_COMPLETE_ALL_ABOUT_EQUIPS}, { QuestID.QUEST_ESTER_PREEMPTIVE_STRIKE, DialogueID.ESTER_COMPLETE_PREEMPTIVE_STRIKE}, { QuestID.QUEST_ESTER_EMPTIVE_STRIKE, DialogueID.ESTER_COMPLETE_EMPTIVE_STRIKE}, { QuestID.QUEST_ESTER_TINY_LEADER, DialogueID.ESTER_COMPLETE_TINY_LEADER}, { QuestID.QUEST_ESTER_LITTLE_NIGHTMARE, DialogueID.ESTER_COMPLETE_LITTLE_NIGHTMARE}, }, DialogueID.KARA_SHOW_QUESTS, DialogueID.KARA_CANCEL, DialogueID.KARA_DEFAULT)) }, {NpcID.LYN, new Npc(NpcID.LYN, "Lyn", new NpcBehavior_Generic( new Hashtable() { { QuestID.QUEST_LYN_GETTING_THE_GOODS, DialogueID.LYN_ACCEPT_GETTING_THE_GOODS}, { QuestID.QUEST_LYN_BEAUTIFUL_LANDSCAPES, DialogueID.LYN_ACCEPT_BEAUTIFUL_LANDSCAPES}, }, new Hashtable() { { QuestID.QUEST_LYN_GETTING_THE_GOODS, DialogueID.LYN_COMPLETE_GETTING_THE_GOODS}, { QuestID.QUEST_LYN_BEAUTIFUL_LANDSCAPES, DialogueID.LYN_COMPLETE_BEAUTIFUL_LANDSCAPES}, }, DialogueID.KARA_SHOW_QUESTS, DialogueID.KARA_CANCEL, DialogueID.KARA_DEFAULT), new NpcShop(new Hashtable() { { Lottery.generateItem(ItemSubType.MUSHROOM_SOUP), 100 }, { Lottery.generateItem(ItemSubType.TASTY_MUSHROOM_SOUP), 250 }, { Lottery.generateItem(ItemSubType.BREAD_LOAF), 350 }, { Lottery.generateItem(ItemSubType.APPLE), 400 }, { Lottery.generateItem(ItemSubType.SOFT_FABRIC), 300 }, { Lottery.generateItem(ItemSubType.FUZZY_SCARF), 350 }, { Lottery.generateItem(ItemSubType.BREASTPLATE), 400 }, { Lottery.generateItem(ItemSubType.HARPY_FEATHER), 200 }, { Lottery.generateItem(ItemSubType.LARGE_HARPY_FEATHER), 500 }, }), /*craftingList=*/null, /*utilityRequirements=*/new List() { QuestID.QUEST_LYN_GETTING_THE_GOODS }) }, // Dense Forest {NpcID.SUE, new Npc(NpcID.SUE, "Sue", new NpcBehavior_Generic( new Hashtable(), new Hashtable(), DialogueID.ERROR, DialogueID.ERROR, DialogueID.ERROR))}, {NpcID.VERA, new Npc(NpcID.VERA, "Vera", new NpcBehavior_Generic( new Hashtable(), new Hashtable(), DialogueID.ERROR, DialogueID.ERROR, DialogueID.ERROR))}, }; }