public override void OnFrame(int tick, float timePass) { base.OnFrame(tick, timePass); if (evtItem != null && evtItem.RunningState == TalkEventItem.TalkEventState.Running) { evtItem.OnFrame(tick); if (evtItem.RunningState == TalkEventItem.TalkEventState.Finish) { interactBlock = evtItem.GetResult(); if (interactBlock is SceneQuestSay) { SetupQuestItem(); } else if (interactBlock == null) { answerList.Clear(); var block = new SceneQuestAnswer(this, EventId, eventLevel, "结束", 999, 999); AddBlockAnswer(block); } } Invalidate(); } if (colorWord != null) { colorWord.OnFrame(tick, this); } }
public override void Init(int width, int height) { base.Init(width, height); showImage = true; config = ConfigData.GetSceneQuestConfig(EventId); if (config.Level > 0) { eventLevel = config.Level; } else { eventLevel = ConfigData.GetSceneConfig(UserProfile.InfoBasic.MapId).Level; } int regionIndex = 1; if (config.TriggerDNAHard != null && config.TriggerDNAHard.Length > 0) { for (int i = 0; i < config.TriggerDNAHard.Length; i++) { var dnaId = DnaBook.GetDnaId(config.TriggerDNAHard[i]); if (UserProfile.InfoBasic.HasDna(dnaId)) { vRegion.AddRegion(new ImageRegion(dnaId, 28 * regionIndex, 55, 24, 24, ImageRegionCellType.None, HSIcons.GetImage("Dna", dnaId))); dnaChangeDict[dnaId] = "事件难度 " + config.TriggerDNAHard[i].Substring(3); //dnaChangeDict[dnaId] += "$经验资源 " + GetDnaStr(-int.Parse(config.TriggerDNAHard[i + 1])); regionIndex++; } } } if (config.TriggerDNARate != null && config.TriggerDNARate.Length > 0) { for (int i = 0; i < config.TriggerDNARate.Length; i++) { var dnaId = DnaBook.GetDnaId(config.TriggerDNARate[i]); if (UserProfile.InfoBasic.HasDna(dnaId)) { var dataStr = "出现几率 " + config.TriggerDNARate[i].Substring(3); if (dnaChangeDict.ContainsKey(dnaId)) { dnaChangeDict[dnaId] += "$" + dataStr; } else { vRegion.AddRegion(new ImageRegion(dnaId, 28 * regionIndex, 55, 24, 24, ImageRegionCellType.None, HSIcons.GetImage("Dna", dnaId))); dnaChangeDict[dnaId] = dataStr; } regionIndex++; } } } interactBlock = SceneQuestBook.GetQuestData(this, EventId, eventLevel, config.Script); answerList = new List <SceneQuestBlock>(); SetupQuestItem(); }
private void AddBlockAnswer(SceneQuestBlock block) { answerList.Add(block); int id = 0; foreach (var sceneQuestBlock in answerList) //所有位置重算 { var yoff = id * 30 + Height - 10 - answerList.Count * 30; sceneQuestBlock.SetRect(new Rectangle(360 + 10, yoff, 400, 400)); id++; } }
private void NpcTalkForm_MouseClick(object sender, MouseEventArgs e) { if (tar != -1) { if (interactBlock == null)//一般是最后一选了 { Close(); // Scene.Instance.OnEventEnd(CellId, config.Id, evtItem != null ? evtItem.Type : ""); // Scene.Instance.CheckALiveAndQuestState(); return; } if (evtItem != null && evtItem.RunningState == TalkEventItem.TalkEventState.Running) { //事件过程中无视点击 return; } interactBlock = answerList[tar]; //对话换页 if (evtItem != null) { evtItem.Dispose(); evtItem = null; } if (interactBlock.Children.Count == 1 && interactBlock.Children[0] is SceneQuestSay) { interactBlock = interactBlock.Children[0]; SetupQuestItem(); } else if (interactBlock.Children.Count == 1 && interactBlock.Children[0] is SceneQuestEvent) { var evt = interactBlock.Children[0] as SceneQuestEvent; if (evt.Type == "npc") { tar = -1; //为了修一个显示bug } var region = new Rectangle(340, Height - 10 - 3 * 30 - 150, Width - 350, 150); evtItem = TalkEventItem.CreateEventItem(CellId, EventId, eventLevel, this, region, evt); evtItem.Init(); } if (evtItem != null && evtItem.AutoClose()) { Close(); // Scene.Instance.OnEventEnd(CellId, config.Id, evtItem != null ? evtItem.Type : ""); // Scene.Instance.CheckALiveAndQuestState(); } this.Invalidate(); } }
public override void Init(int width, int height) { base.Init(width, height); showImage = true; config = ConfigData.GetSceneQuestConfig(EventId); if (config.Level > 0) { eventLevel = config.Level; } else { eventLevel = ConfigData.GetSceneConfig(UserProfile.InfoBasic.MapId).Level; } interactBlock = SceneQuestBook.GetQuestData(EventId, eventLevel, config.Script); answerList = new List <SceneQuestBlock>(); SetupQuestItem(); }
public static SceneQuestBlock GetQuestData(Control c, int eventId, int level, string name) { Dictionary <int, SceneQuestBlock> levelCachDict = new Dictionary <int, SceneQuestBlock>();//存下每一深度的最后节点 SceneQuestBlock root = null; StreamReader sr = new StreamReader(DataLoader.Read("SceneQuest", String.Format("{0}.txt", name))); string line; int lineCount = 0; while ((line = sr.ReadLine()) != null) { lineCount++; int lineDepth = GetStringDepth(ref line); char type = line[0]; string script = line.Substring(1); SceneQuestBlock data; switch (type) { case 's': data = new SceneQuestSay(c, eventId, level, script, lineDepth, lineCount); break; case 'a': data = new SceneQuestAnswer(c, eventId, level, script, lineDepth, lineCount); break; case 'e': data = new SceneQuestEvent(c, eventId, level, script, lineDepth, lineCount); break; case 'r': data = new SceneQuestRollItem(c, eventId, level, script, lineDepth, lineCount); break; default: throw new Exception(string.Format("GetQuestData unknown type {0} {1}", name, lineCount)); } levelCachDict[data.Depth] = data; if (root == null) { root = data; } else { levelCachDict[data.Depth - 1].Children.Add(data); } } sr.Close(); return(root); }
private void NpcTalkForm_MouseClick(object sender, MouseEventArgs e) { if (tar != -1) { if (interactBlock == null)//一般是最后一选了 { Close(); Scene.Instance.OnEventFinish(); return; } if (evtItem != null && evtItem.RunningState == TalkEventItem.TalkEventState.Running) { //事件过程中无视点击 return; } interactBlock = answerList[tar]; //对话换页 evtItem = null; if (interactBlock.Children.Count == 1 && interactBlock.Children[0] is SceneQuestSay) { interactBlock = interactBlock.Children[0]; SetupQuestItem(); } else if (interactBlock.Children.Count == 1 && interactBlock.Children[0] is SceneQuestEvent) { evtItem = TalkEventItem.CreateEventItem(EventId, eventLevel, this, new Rectangle(10, Height - 10 - 5 * 20 - 160, Width - 20, 160), interactBlock.Children[0] as SceneQuestEvent); } if (evtItem != null && evtItem.AutoClose()) { Close(); Scene.Instance.OnEventFinish(); } this.Invalidate(); } }