Exemple #1
0
        private void logReader_Tick(object sender, EventArgs e)
        {
            logReader.Stop();
            foreach (byte[] logdata in logmemoryInfo.GetNewLogsData())
            {
                FFXIVLog log = FFXIVLog.ParseSingleLog(logdata);
                FFXIVLogDataSet.AnaylzedRow row = logParser.Add(log);

                var msg = log.LogBodyReplaceTabCode;
                SetStatus(msg.StartsWith(":") ? msg.Substring(1) : msg);



                ClearActorList(row);
                Mark(log);
                RejectPTMember(log);

                ParseActor(row, ActorType.FROM);
                ParseActor(row, ActorType.TO);

                Display();
            }

            if (logCount < logParser.ds.Anaylzed.Count - 100)
            {
                logCount = logParser.ds.Anaylzed.Count;
            }
            logReader.Start();
        }
        private void RejectPTMember(FFXIVLog log)
        {
            Regex regex = new Regex(@"(?<name>[A-Z][a-z']+? [A-Z][a-z']+?):.*");
            Match match = regex.Match(log.LogBodyReplaceTabCode);

            if (match.Success)
            {
                string name     = match.Groups["name"].Value;
                var    pvpActor = FindOrCreatePvPActor(name);
                pvpActor.isPTMember = true;
                actors[name]        = pvpActor;
            }
        }
        private void UpdateTargetImage(FFXIVLog log)
        {
            var regex = new Regex(@"^:(?<name>[A-Z][a-z']+? [A-Z][a-z']+?)$");
            var match = regex.Match(log.LogBodyReplaceTabCode);

            if (match.Success)
            {
                string name = match.Groups["name"].Value;
                if (actors.Keys.Contains(name))
                {
                    targetImage.Image = actors[name].jobList.Count == 1 ? actors[name].GetJobImage() : actors[name].GetRoleImage();
                }
            }
        }
        private void InitializeData()
        {
            this.logCount = 0;
            int memoryLogCount = logmemoryInfo.GetLogCount();

            FF14LogParser logParser = new FF14LogParser();

            if (memoryLogCount > 1000)
            {
                SetStatus("ログ読込中...");

                FFXIVUserFolder userfolder = new FFXIVUserFolder();
                CharacterFolder playnow    = null;
                foreach (CharacterFolder cf in userfolder.GetCharacterFolders())
                {
                    if (playnow == null)
                    {
                        playnow = cf;
                    }
                    if (cf.LastPlayTimeFromLogFile > playnow.LastPlayTimeFromLogFile)
                    {
                        playnow = cf;
                    }
                }
                List <FFXIVLog> LogsFromFile = new List <FFXIVLog>();
                memoryLogCount = logmemoryInfo.GetLogCount();
                if (playnow.LastPlayTimeFromLogFile > FFXIVLog.StartDateTime)
                {
                    foreach (FFXIVLog log in FFXIVLogFileReader.GetLogsFromFile(playnow.GeLastWriteLogFile()))
                    {
                        logParser.Add(log);
                    }
                }
                SetStatus("ログ読込中...");
                foreach (byte[] data in logmemoryInfo.GetNewLogsData())
                {
                    logParser.Add(FFXIVLog.ParseSingleLog(data));
                }
                SetStatus("読込完了");
            }
            SetProgress(100, true);
            this.logParser = logParser;
            SetProgress(0, false);
        }
        private void Mark(FFXIVLog log)
        {
            if (log.LogBodyReplaceTabCode.Contains("設定しました"))
            {
                var regex = new Regex(@".*?が(?<name>[A-Z][a-z']+? [A-Z][a-z']+?)に『(?<marker>.+?)』を設定しました。");
                var match = regex.Match(log.LogBodyReplaceTabCode);
                if (match.Success)
                {
                    string name   = match.Groups["name"].Value;
                    string marker = match.Groups["marker"].Value;

                    if (!FF14LogParser.IsPet(name))
                    {
                        var actorsStatusChanged = new Dictionary <string, PvPActor>();
                        foreach (string key in actors.Keys)
                        {
                            var pvpActor = FindOrCreatePvPActor(key);
                            if (!pvpActor.isPTMember)
                            {
                                if (key == name)
                                {
                                    pvpActor.marker           = PvPActor.GetMarkerEnum(marker);
                                    actorsStatusChanged[name] = pvpActor;
                                }
                                else if (pvpActor.marker.ToString() == marker)
                                {
                                    pvpActor.marker           = Marker.なし;
                                    actorsStatusChanged[name] = pvpActor;
                                }
                            }
                        }

                        foreach (string key in actorsStatusChanged.Keys)
                        {
                            actors[key] = actorsStatusChanged[key];
                        }
                    }
                }
            }
        }