Example #1
0
        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);
            }
        }
Example #2
0
        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();
        }
Example #3
0
        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++;
            }
        }
Example #4
0
        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();
            }
        }
Example #5
0
 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();
 }
Example #6
0
        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);
        }
Example #7
0
        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();
            }
        }