public Choice AddChoiceEnemy(String choiceName, Enemy monster, ChoiceControler choiceControler = null) { if (choiceControler == null) { choiceControler = this; } Choice cho = choiceControler.GetChoice(choiceName); cho.EnemyList.Add(monster); cho.TextArrangement(); return(cho); }
public Choice ChangeChoiceText(String choiceName, ChoiceControler choiceControler = null, TextAndPosition onlyShowText = null, TextAndPosition selectText = null, List <TextAndPosition> streamText = null, TextAndPosition returnText = null) { if (choiceControler == null) { choiceControler = this; } //testLog(choiceName); Choice cho = choiceControler.GetChoice(choiceName); if (onlyShowText != null) { cho.OnlyShowText = new List <TextAndPosition>() { onlyShowText }; } if (selectText != null) { cho.SelectText = new List <TextAndPosition>() { selectText }; } if (streamText != null) { cho.StreamText = streamText; } if (returnText != null) { cho.ReturnText = new List <TextAndPosition>() { returnText }; } cho.TextArrangement(); return(cho); }
/* * public List<Quest> QuestList{get;set;} * public List<TextAndPosition> GreetMessage{get;set;} * public List<TextAndPosition> ConversationMessage{get;set;} * public List<TextAndPosition> QuestAcceptMessage{get;set;} * public List<TextAndPosition> QuestRejectMessage{get;set;} * public List<TextAndPosition> QuestCompleteMassage{get;set;} * public List<TextAndPosition> RevisitGreetMessage{get;set;} * public List<TextAndPosition> RevisitConversationMessage{get;set;} * public List<TextAndPosition> RevisitQuestAcceptMessage{get;set;} * public List<TextAndPosition> RevisitQuestRejectMessage{get;set;} * public List<TextAndPosition> PreQuestMessage{get;set;} * public List<TextAndPosition> RevisitPreQuestMessage{get;set;} * * GreetPhase * ConversationPhase * QuestAccept * QuestReject * QuestComplete */ public static String Accost(Player player, NPC npc, String back) { //NPC객체와의 소통,출력을 담당할 메소드. 플레이어와 NPC간의 모든 상호작용을 담당함 player.PlayerQuestCheck(npc); //MeetingQuest의 완료조건 확인 sameQuestList = QuestControler.SameQuestList(player.QuestList, npc.QuestList); //플레이어가 가지고 있는 퀘스트 목록과 NPC가 가지고 있는 퀘스트의 목록중 일치하는 퀘스트를 저장 globalPlayer = player; //매개변수로 받아온 player의 객체를 저장 globalNPC = npc; //NPC의 객체를 저장 backField = back; //돌아갈 필드의 이름을 저장 NpcQuestList = npc.QuestList; //NPC의 퀘스트 목록을 저장 currentChoice = "GreetPhase"; //첫 화면을 저장 if (!NpcCC.GetChoice(currentChoice).IsVisit) //현재 초이스가 방문한적이 없다면 NPC관련 Choice의 텍스트들을 초기화 { NpcTalkInit(); } if (QuestControler.ContainsCompleteQuest(sameQuestList)) //일치하는 퀘스트중 완료한 퀘스트가 있다면 실행 { ReplaceQuestCompleteText(); //QuestComplete이라는 이름의 Choice의 선택지를 추가.동시에 GreetPhase에 CompleteQuestList로 가는 선택지를 추가 } else { ReplaceQuestIntroductionText(); //QuestIntroduction이라는 이름의 Choice의 선택지를 추가, 동시에 GreetPhase에 QuestIntroduction으로 가는 선택지를 추가 } NpcDTG.Display(NpcCC.GetChoiceClone(currentChoice)); while (currentChoice != "end") { keyInfo = Console.ReadKey(); //1.입력 받음 NpcDTG.SelectingText(keyInfo); //2.입력에 따라 내부적으로 선택지의 Index변경 if (keyInfo.Key == ConsoleKey.I) { player.inven.OpenInventory(); } if (keyInfo.Key == ConsoleKey.Enter) //3.그 입력이 Enter키 일 경우 { currentChoice = (String)NpcDTG.GetCurrentSelectValue(); //4.현재 선택지의 index에 있는 value를 가져옴 if (currentChoice == "end") { //currentChoice가 end면 이전 장소로 돌아간다. NpcCC.GetChoice("ConversationPhase").LeaveChoice(); //해당 Choice의 출력 문자를 변경(ex. 처음 보는구먼. 반갑네 -> 또 왔구먼. 잘 쉬다가게) NpcCC.GetChoice("GreetPhase").LeaveChoice(); return(backField); //이전 필드의 이름을 return; } if (currentChoice == "QuestAccept") { //현재 Choice가 QuestAccept라면 실행 Quest tQuest = QuestControler.FindQuestByName(NpcQuestList, lastQuestName); tQuest.isAccept = true; globalPlayer.QuestList.Add(tQuest); //마지막에 수락한 Quest의 객체를 플레이어에게 넘김 if (tQuest.isReject) { NpcCC.ChangeChoiceText(choiceName: "QuestAccept", onlyShowText: npc.GetRevisitQuestAcceptMessage()); NpcCC.ChangeChoiceText(choiceName: "QuestReject", onlyShowText: npc.GetRevisitQuestRejectMessage()); } else { NpcCC.ChangeChoiceText(choiceName: "QuestAccept", onlyShowText: npc.GetQuestAcceptMessage()); NpcCC.ChangeChoiceText(choiceName: "QuestReject", onlyShowText: npc.GetQuestRejectMessage()); } NpcCC.RemoveChoiceSelectText("QuestIntroduction", lastQuestIndex); //목록에서 삭제 if (NpcCC.GetChoice("QuestIntroduction").SelectText.Count == 1) { NpcCC.RemoveChoiceSelectTextByValue("GreetPhase", "QuestIntroduction"); } //ReplaceQuestIntroductionText(); } if (currentChoice == "QuestReject") { Quest tQuest = QuestControler.FindQuestByName(NpcQuestList, lastQuestName); if (tQuest.isReject) { NpcCC.ChangeChoiceText(choiceName: "QuestAccept", onlyShowText: npc.GetRevisitQuestAcceptMessage()); NpcCC.ChangeChoiceText(choiceName: "QuestReject", onlyShowText: npc.GetRevisitQuestRejectMessage()); } else { NpcCC.ChangeChoiceText(choiceName: "QuestAccept", onlyShowText: npc.GetQuestAcceptMessage()); NpcCC.ChangeChoiceText(choiceName: "QuestReject", onlyShowText: npc.GetQuestRejectMessage()); } } if (currentChoice == "QuestComplete") { Choice tChoice = NpcCC.GetChoice("QuestReward"); lastQuestName = PlayData.CurrentSelectedText.text; tChoice.QuickDelegate = "QuestReward"; //ActionList안에 정의되어있는 QuestReward 델리게이트를 현재 퀘스트 값들로 다시 초기화 PlayData.delegateList.ActionList["QuickReward"] = () => { Quest tQuest = QuestControler.FindQuestByName(NpcQuestList, lastQuestName); tQuest.TakeRewardAll(); }; NpcCC.ChangeChoiceText(choiceName: "QuestComplete", onlyShowText: QuestControler.FindQuestByName(NpcQuestList, lastQuestName).QuestCompleteMessage); } //AAAAAAA선택한 Choice Display전AAAAAAA// currentQuest = QuestControler.FindQuestByName(NpcQuestList, currentChoice); if (currentQuest != null && currentQuest.QuestName == currentChoice) { lastQuestIndex = NpcDTG.currentSelectNum; NpcDTG.Display(currentQuest.QuestContents); lastQuestName = currentChoice; } else if (currentChoice == "QuestReward") { if (QuestControler.FindQuestByName(NpcQuestList, lastQuestName).QuestReward.Count + player.inven.InventoryList.Count > 20) //보상의 아이템 갯수와 플레이어 인벤의 아이템 갯수의 합이 20을 초과하면 보상지급 취 { currentChoice = "GreetPhase"; AlertWindow("인벤토리 공간이 부족합니다!", textXPos: 24, textYPos: 9); NpcDTG.Display(NpcCC.GetChoice(currentChoice)); continue; } NpcDTG.Cho = NpcCC.GetChoice("QuestReward"); NpcDTG.Cho.QuickRun(); NpcCC.RemoveChoiceSelectTextByText("CompleteQuestList", lastQuestName); QuestControler.CompleteQuestList.Add(QuestControler.FindQuestByName(NpcQuestList, lastQuestName)); player.QuestList.Remove(QuestControler.FindQuestByName(NpcQuestList, lastQuestName)); sameQuestList.Remove(QuestControler.FindQuestByName(NpcQuestList, lastQuestName)); NpcQuestList.Remove(QuestControler.FindQuestByName(NpcQuestList, lastQuestName)); if (!QuestControler.ContainsCompleteQuest(sameQuestList)) { NpcCC.RemoveChoiceSelectTextByValue("GreetPhase", "CompleteQuestList"); } if (!QuestControler.ContainsCompleteQuest(sameQuestList) && NpcCC.GetChoice("QuestIntroduction").SelectText.Count > 1) { ReplaceQuestIntroductionText(); } currentChoice = (String)NpcDTG.Cho.QuickNext(); Console.ReadKey(); NpcDTG.Display(NpcCC.GetChoice(currentChoice)); } else { NpcDTG.Display(NpcCC.GetChoice(currentChoice)); } //VVVVVVV선택한 Choice Display후VVVVVVV// if (currentChoice == "QuestReject") { //testLog(lastQuestName); QuestControler.FindQuestByName(NpcQuestList, lastQuestName).isReject = true; //testLog(NpcQuestList.Find(q => q.QuestName.Equals(lastQuestName)).isReject); } if (NpcDTG.Cho.ChoiceType == ChoiceType.QUICKNEXT) { currentChoice = (String)NpcDTG.Cho.QuickNext(); Console.ReadKey(); NpcDTG.Display(NpcCC.GetChoice(currentChoice)); } } else { NpcDTG.Display(); } } return(backField); }