363 lines
14 KiB
C#
363 lines
14 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using UnityEngine;
|
|||
|
|
|
|||
|
|
public class NpcQuestProgress {
|
|||
|
|
public HashSet<QuestID> acceptingQuests;
|
|||
|
|
public HashSet<QuestID> inProgressQuests;
|
|||
|
|
public HashSet<QuestID> completedQuests;
|
|||
|
|
|
|||
|
|
public NpcQuestProgress(HashSet<QuestID> acceptingQuests,
|
|||
|
|
HashSet<QuestID> inProgressQuests = null,
|
|||
|
|
HashSet<QuestID> completingQuests = null) {
|
|||
|
|
this.acceptingQuests = acceptingQuests;
|
|||
|
|
this.inProgressQuests = inProgressQuests;
|
|||
|
|
this.completedQuests = completingQuests;
|
|||
|
|
|
|||
|
|
if (this.acceptingQuests == null) this.acceptingQuests = new HashSet<QuestID>();
|
|||
|
|
if (this.inProgressQuests == null) this.inProgressQuests = new HashSet<QuestID>();
|
|||
|
|
if (this.completedQuests == null) this.completedQuests = new HashSet<QuestID>();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class NpcState {
|
|||
|
|
public HashSet<DialogueID> completedDialogues = new HashSet<DialogueID>();
|
|||
|
|
public Hashtable npcQuestMap = new Hashtable() {
|
|||
|
|
{NpcID.KARA,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
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>() {
|
|||
|
|
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>() {
|
|||
|
|
QuestID.QUEST_LYN_GETTING_THE_GOODS,
|
|||
|
|
QuestID.QUEST_LYN_BEAUTIFUL_LANDSCAPES,
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
{NpcID.VILLAGER1,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
{NpcID.VILLAGER2,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
{NpcID.SUE,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
{NpcID.VERA,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
{NpcID.REI,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
{NpcID.ISHRA,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
{NpcID.SCOUT1,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
{NpcID.SCOUT2,
|
|||
|
|
new NpcQuestProgress(
|
|||
|
|
new HashSet<QuestID>() {
|
|||
|
|
})
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class NpcShop {
|
|||
|
|
public Hashtable items; // Hashtable<ItemData, Cost>
|
|||
|
|
|
|||
|
|
public NpcShop(Hashtable items) {
|
|||
|
|
this.items = items;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public class NpcCraftingList {
|
|||
|
|
public Hashtable items; // Hashtable<ItemData, Hashtable<ItemID, count>>
|
|||
|
|
|
|||
|
|
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<QuestID> utilityRequirements;
|
|||
|
|
|
|||
|
|
public Npc(NpcID npcID, string name, NpcBehavior behavior = null, NpcShop shop = null, NpcCraftingList craftingList = null, List<QuestID> 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>() { 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>() { 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))},
|
|||
|
|
};
|
|||
|
|
}
|