public void AddHeal(RecoverEventArgs e) { this.HealAmount += e.Amount; if (Class == ClassType.NONE) { Class = SkillDictionary.GetClass(e.Skill); } this.HealLogList.Add(e.log); HealSkillEntity entity = null; foreach (HealSkillEntity hse in HealList) { if (hse.Target == e.Name) { entity = hse; break; } } if (entity == null) { entity = new HealSkillEntity(); entity.Target = e.Name; this.HealList.Add(entity); } entity.TotalRecover += e.Amount; entity.Count++; }
// 순위, 클래스, 이름, dps, 총데, 딜시간, 최대데미지, // 공격횟수, 스킬비율, 평타비율, 치명타비율 public void UpdataListView() { if (ListItem.SubItems[1].Text == "") { ListItem.SubItems[1].Text = SkillDictionary.GetClassString(Class); } ListItem.SubItems[3].Text = DPS + ""; ListItem.SubItems[4].Text = TotalDamage + ""; ListItem.SubItems[5].Text = TotalDealTime + "초"; ListItem.SubItems[6].Text = HPRecover + ""; ListItem.SubItems[7].Text = HealAmount + ""; ListItem.SubItems[8].Text = MaxDamage + ""; ListItem.SubItems[9].Text = TotalDealCount + "회"; ListItem.SubItems[10].Text = percentSkill + "%"; ListItem.SubItems[11].Text = percentNormal + "%"; ListItem.SubItems[12].Text = percentCritical + "%"; ListItem.SubItems[13].Text = NewTotalNormalDealCount + "회"; ListItem.SubItems[14].Text = NewTotalSkillDealCount + "회"; ListItem.SubItems[15].Text = NewTotalDealCount + "회"; ListItem.SubItems[16].Text = TotalNormalCancelCount + "회"; ListItem.SubItems[17].Text = PercentNormalCancel + "%"; ListItem.SubItems[18].Text = MaxNormalCancelCount + "회"; ListItem.SubItems[19].Text = CurrentNormalCancelCount + "회"; ListItem.SubItems[20].Text = (NewTotalNormalDealCount == 0) ? "0" : (NewTotalNormalDamage / NewTotalNormalDealCount) + ""; ListItem.SubItems[21].Text = (NewTotalSkillDealCount == 0) ? "0" : (NewTotalSkillDamage / NewTotalSkillDealCount) + ""; ListItem.SubItems[22].Text = (NewTotalDealCount == 0) ? "0" : (TotalDamage / NewTotalDealCount) + ""; ListItem.SubItems[23].Text = MPRecover + ""; }
public override String GetQuery() { String url = ""; StringBuilder sb = new StringBuilder(url); sb.Append("?" + "starttime" + "=" + EventList[0].Time); sb.Append("&" + "endtime" + "=" + EventList[3].Time); sb.Append("&" + "cleartime" + "=" + ClearTime); sb.Append("&" + "totaldamage" + "=" + TotalDamage); // 2013-05-08 최대 유저수는 7을 안넘는다 int tmp = UserList.Count; if (tmp > 7) { tmp = 7; } sb.Append("&" + "usercount" + "=" + tmp); sb.Append("&" + "userinfo" + "="); int count = 0; String userName = ""; String userServer = ""; foreach (User u in UserList) { sb.Append(SkillDictionary.GetClassString(u.Class)); String playerName = u.Name; String[] temp = playerName.Split('-'); if (temp.Length == 1) { // 통합서버가 아니다. userName = playerName; userServer = (String)this.main.GetServer(); } else { // 통합서버다. userName = temp[0]; userServer = temp[1]; } sb.Append(":" + userServer); sb.Append(":" + userName); sb.Append(":" + u.TotalDamage); sb.Append(":" + ((u.Name == LogParser.Myname) ? 1 : 0)); sb.Append(":" + u.DPS); sb.Append(":" + u.PercentNormalCancel); sb.Append(":" + u.HPRecover); sb.Append(":" + u.HealAmount); sb.Append("|"); count++; if (count == 7) { break; } } sb.Append("&" + "version" + "=" + this.main.Version); return(sb.ToString()); }
protected void AppendUser() { int i = 0; foreach (User u in UserList) { sb.AppendLine(" " + (++i) + ". " + SkillDictionary.GetClassString(u.Class) + " " + u.Name + "(" + u.TotalDamage + " " + (100 * u.TotalDamage / TotalDamage) + "%)"); } }
public int SendDealRecord(bool my, String userserver, String username, User user, int dealtime, int recerdType) { String url = ""; try { StringBuilder sb = new StringBuilder(url); sb.Append("?" + "programuser" + "=" + ((my) ? 1 : 0)); sb.Append("&" + "userserver" + "=" + userserver); sb.Append("&" + "username" + "=" + username); sb.Append("&" + "userclass" + "=" + SkillDictionary.GetClassString(user.Class)); sb.Append("&" + "dealtime" + "=" + dealtime); sb.Append("&" + "dps" + "=" + user.DPS); sb.Append("&" + "totaldamage" + "=" + user.TotalDamage); sb.Append("&" + "dealcount" + "=" + user.TotalDealCount); sb.Append("&" + "skillrate" + "=" + user.percentSkill); sb.Append("&" + "normalrate" + "=" + user.percentNormal); sb.Append("&" + "criticalrate" + "=" + user.percentCritical); sb.Append("&" + "type" + "=" + recerdType); sb.Append("&" + "target" + "=" + user.LastTarget); sb.Append("&" + "normalcancel" + "=" + user.PercentNormalCancel); sb.Append("&" + "version" + "=" + this.mainForm.Version); WebRequest myWebRequest = WebRequest.Create(sb.ToString()); WebResponse myWebResponse = myWebRequest.GetResponse(); StreamReader reader = new StreamReader(myWebResponse.GetResponseStream()); string temp = reader.ReadToEnd(); int ret = -1; try { ret = Int32.Parse(temp); } catch { } return(ret); } catch (Exception ee) { ee.ToString(); return(-1); } }
public void AddDamage(PlayerDamageEventArgs e) { //5초간 딜이 없다면 마지막시간으로 //int temp = DateTime.Compare(e.Time, lastDataTime); int temp = e.Time.Subtract(lastDataTime).Seconds; #if TICK if (temp > 0) { totalDealTime++; } #else if (temp < 5 && temp >= 0) { TotalDealTime += temp; } else { TotalDealTime++; } #endif TimeSpan timeSpan = e.Time - lastDataTime; lastDataTime = e.Time; TotalDamage += e.Damage; if (e.Damage > MaxDamage) { MaxDamage = e.Damage; } this.TotalDealCount++; if (e.Skill != "") { this.totalSkillDealCount++; if (Class == ClassType.NONE) { Class = SkillDictionary.GetClass(e.Skill); if (Class == ClassType.NONE) { } } } else { e.Skill = "평타"; this.totalNormalDealCount++; } // NewTotalDealCount TotalNormalCancelCount MaxNormalCancelCount CurrentNormalCancelCount // 2013-05-30 if (e.Skill == "평타") { NewTotalNormalDamage += e.Damage; } else { NewTotalSkillDamage += e.Damage; } // 2013-05-21 if (NewTotalDealCount == 0) // 첫타는.. { NewTotalDealCount++; if (e.Skill == "평타") { NewTotalNormalDealCount++; } else { NewTotalSkillDealCount++; } } else { if (isLastSkill == true && e.Skill != "평타") //스킬 & 스킬 { NewTotalDealCount++; CurrentNormalCancelCount = 0; NewTotalSkillDealCount++; } else if ((isLastSkill == true && e.Skill == "평타") || (isLastSkill == false && e.Skill != "평타")) // 스킬 & 평타 { NewTotalDealCount++; if (timeSpan.TotalSeconds <= 3) { TotalNormalCancelCount++; CurrentNormalCancelCount++; } else { CurrentNormalCancelCount = 0; } if (e.Skill == "평타") { NewTotalNormalDealCount++; } else { NewTotalSkillDealCount++; } } else if (isLastSkill == false && e.Skill == "평타") //평타 & 평타 { if (timeSpan.TotalSeconds > 0) { NewTotalDealCount++; NewTotalNormalDealCount++; CurrentNormalCancelCount = 0; } } } isLastSkill = (e.Skill != "평타"); MaxNormalCancelCount = (CurrentNormalCancelCount > MaxNormalCancelCount) ? CurrentNormalCancelCount : MaxNormalCancelCount; PercentNormalCancel = (NewTotalDealCount > 1) ? (TotalNormalCancelCount * 100 / (NewTotalDealCount - 1)) : 0; SkillEntity skillEntity = null; foreach (SkillEntity skill in SkillList) { if (skill.SkillName == e.Skill) { skillEntity = skill; break; } } if (skillEntity == null) { SkillEntity se = new SkillEntity(); se.SkillName = e.Skill; SkillList.Add(se); skillEntity = se; } skillEntity.TotalDamage += e.Damage; skillEntity.Count++; if (e.bCritical) { skillEntity.CriticalCount++; } this.TotalCriticalDealCount = this.TotalCriticalDealCount + ((e.bCritical) ? 1 : 0); DPS = (TotalDealTime > 0) ? (TotalDamage / this.TotalDealTime) : 0; percentSkill = (TotalDealCount > 0) ? (totalSkillDealCount * 100 / TotalDealCount) : 0; percentNormal = (TotalDealCount > 0) ? (totalNormalDealCount * 100 / TotalDealCount) : 0; // 2013-05-10 평타는 아예 빼기 때문에 스킬만 계산 percentCritical = (totalSkillDealCount > 0) ? (TotalCriticalDealCount * 100 / totalSkillDealCount) : 0; LogList.Add(e.log); LastTarget = e.Target; }
private void InitializeComponentManually() { this.topMostCheckbox = new HostedCheckbox(); this.statusToolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.opacityTrackBar = new ToolStripTrackBar(); this.statusToolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.oneClassCheckbox = new HostedCheckbox(); this.statusToolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.autoSortCheckbox = new HostedCheckbox(); // // topMostCheckbox // this.topMostCheckbox.Checked = true; this.topMostCheckbox.Name = "topMostCheckbox"; this.topMostCheckbox.Size = new System.Drawing.Size(66, 22); this.topMostCheckbox.Text = "항상 위"; this.topMostCheckbox.Checked = this.TopMost; this.topMostCheckbox.Click += new System.EventHandler(this.topMostCheckbox_Click); // // statusToolStripSeparator1 // this.statusToolStripSeparator1.Name = "toolStripSeparator1"; this.statusToolStripSeparator1.Size = new System.Drawing.Size(6, 25); // // opacityTrackBar // this.opacityTrackBar.AutoSize = false; this.opacityTrackBar.Name = "opacityTrackBar"; this.opacityTrackBar.Size = new System.Drawing.Size(100, 20); this.opacityTrackBar.Value = 0; this.opacityTrackBar.ValueChanged += new System.EventHandler(this.opacityTrackBar_ValueChanged); // // statusToolStripSeparator2 // this.statusToolStripSeparator2.Name = "toolStripSeparator1"; this.statusToolStripSeparator2.Size = new System.Drawing.Size(6, 25); // // oneClassCheckbox // this.oneClassCheckbox.Checked = LogParser.OneClassFlag; this.oneClassCheckbox.Size = new System.Drawing.Size(66, 22); this.oneClassCheckbox.Text = "클래스별 1인"; this.oneClassCheckbox.Click += new System.EventHandler(this.oneClassCheckbox_Click); // // statusToolStripSeparator3 // this.statusToolStripSeparator3.Size = new System.Drawing.Size(6, 25); // // autoSortCheckbox // this.autoSortCheckbox.Checked = LogParser.AutoSortFlag; this.autoSortCheckbox.Size = new System.Drawing.Size(66, 22); this.autoSortCheckbox.Text = "자동정렬"; this.autoSortCheckbox.Click += new System.EventHandler(this.autoSortCheckbox_Click); this.statusToolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.topMostCheckbox, this.statusToolStripSeparator1, this.opacityTrackBar, this.statusToolStripSeparator2, this.oneClassCheckbox, this.statusToolStripSeparator3, this.autoSortCheckbox }); //2013-04-30 this.labelVersion.Text += Version; //this.panelInformaion.Controls.Remove(this.panelUpdate); //this.panelUpdate.Controls.Clear(); this.panelUpdate.Controls.Remove(this.progressBar1); toolStripClassViewItems = new ToolStripMenuItem[12]; toolStripClassViewItems[0] = new ToolStripMenuItem("전체"); toolStripClassViewItems[0].Checked = true; toolStripClassViewItems[1] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.검성)); toolStripClassViewItems[2] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.수호성)); toolStripClassViewItems[3] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.살성)); toolStripClassViewItems[4] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.궁성)); toolStripClassViewItems[5] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.마도성)); toolStripClassViewItems[6] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.정령성)); toolStripClassViewItems[7] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.치유성)); toolStripClassViewItems[8] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.호법성)); toolStripClassViewItems[9] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.사격성)); toolStripClassViewItems[10] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.음유성)); toolStripClassViewItems[11] = new ToolStripMenuItem(SkillDictionary.GetClassString(ClassType.기갑성)); foreach (ToolStripMenuItem item in toolStripClassViewItems) { item.Click += new EventHandler(item_Click); } this.toolStripClassView.DropDownItems.AddRange(toolStripClassViewItems); comboBoxSelectServer.Items.Add(""); comboBoxSelectServer.Items.AddRange(ServerList.ServerName); this.panelPopup.Controls.Remove(this.progressBarBoss); HidePopup(); //2013-09-30 분간측정 메뉴로 이동 for (int i = 0; i < 10; i++) { ToolStripMenuItem ii = new ToolStripMenuItem((i + 1) + "분"); this.분간측정ToolStripMenuItem.DropDownItems.Add(ii); ii.Click += new EventHandler(ii_Click); } if (this.tabControl1.Controls.Contains(hiddenTabPage)) { this.tabControl1.Controls.Remove(this.hiddenTabPage); } }
private void ParseLine(string line) { //bool matched = false; try { if (String.IsNullOrEmpty(line)) { return; } MatchCollection matches;//, matches2; //2013.09.27 22:03:05 : [charname:소주빵;0.6275 1.0000 0.6275] 님의 귓속말: 65레벨 호법성 [cmd:NhkYrLsNIUzA4S2H8bKZ80VRg5mfKVnkcIKURP7j+0JFUYOZnylZ5HCClET+4/tCMyFSf2E6oRjO/ARkAPeSAA==] [cmd:NhkYrLsNIUzA4S2H8bKZ80VRg5mfKVnkcIKURP7j+0JFUYOZnylZ5HCClET+4/tCBFIJJAvhQDR0YvSr04J+Hw==] //2013.09.27 22:05:35 : [charname:소주빵;0.6275 1.0000 0.6275] 님의 귓속말: 65레벨 호법성 [cmd:NhkYrLsNIUzA4S2H8bKZ80VRg5mfKVnkcIKURP7j+0JFUYOZnylZ5HCClET+4/tCU2f0SPAFix1Al20lxc5xrA==] [cmd:NhkYrLsNIUzA4S2H8bKZ80VRg5mfKVnkcIKURP7j+0JFUYOZnylZ5HCClET+4/tCb1i817SotrLkxDzVpR19Tg==] //2013.09.27 23:13:44 : [charname:양주오빠;0.6275 1.0000 0.6275] 님의 귓속말: 65레벨 마도성 [cmd:PRsw2mUTV6+xEJEbzsUmjUVRg5mfKVnkcIKURP7j+0JFUYOZnylZ5HCClET+4/tC+rENLG7oLuN2jKnfHei2Cg==] [cmd:PRsw2mUTV6+xEJEbzsUmjUVRg5mfKVnkcIKURP7j+0JFUYOZnylZ5HCClET+4/tCkf5+HgnjLItxN1XZDgINPQ= //2013.09.28 19:13:13 : 양맥-이스라펠 님의 귓속말: 65레벨 정령성 [cmd:QjDMbqN8fEG9MKRVzO8PGEVRg5mfKVnkcIKURP7j+0JFUYOZnylZ5HCClET+4/tC5MwvBuvh5IrzUzKexwiXyw==] [cmd:QjDMbqN8fEG9MKRVzO8PGEVRg5mfKVnkcIKURP7j+0JFUYOZnylZ5HCClET+4/tCxTXqOAN7CGj3YfYHyAkDrQ==] //파티지원포스지원Regex = new Regex(timeStampRegex + "\\[charname:(?<name>.+);(?<ignore>.+) 님의 귓속말: (?<level>.+) (?<class>.+) \\[cmd:(?<ignore2>.+) \\[cmd:(?<ignore3>.+)", RegexOptions.Compiled); matches = 티지원포스지원Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value; ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 6, name)); return; } matches = 통합파티지원포스지원Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value; ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 6, name)); return; } matches = 타인의채팅Regex.Matches(line); if (matches.Count > 0) { return; } //도움말, 공지사항도 ? matches = 자신의채팅Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value; String chat = matches[0].Groups["chat"].Value; if (name.IndexOf(' ') == -1) //채널창이 아니면..이름에 빈칸이 없다면 { /* * if (name != Myname) * {// 내이름 세팅 * ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 0, name)); * } */ if (chat.StartsWith("//이름")) { ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 0, name)); } else if (chat.StartsWith("//템")) { String searchName = chat.Split(' ')[1]; ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 1, searchName)); } else if (chat.StartsWith("//모두지우기")) { ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 2, null)); } else if (chat.StartsWith("//도움말 바센1")) { String where = chat.Split(' ')[1]; ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 3, where)); } else if (chat.StartsWith("//타이머")) { ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 5, null)); } else if (chat.StartsWith("//")) { String tmp = chat.Substring(2); int step = 0; try { step = Int32.Parse(tmp); ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 4, step + "")); } catch { } } /* * else if (chat.Trim().Contains("사용 완료!")) * { * // 2013-07-15 * // 팻 18 * } */ else if (name == "티아마트" || name == "마르쿠탄") { InstanceDungeonEvent(this, new InstanceDungeonEventArgs(line, time, 1, name, chat)); } else { //if (name == "도움말" || name == "공지사항") return; //2013-07-15 if (name.Trim() == "도움말" || name.Trim() == "공지사항") { } else if (chat.Trim().EndsWith(".") || chat.Trim().EndsWith("!") || chat.Trim().EndsWith("?")) { } else if (chat.Contains("니다")) { } //2013-07-16 명령: /* * else if (name.Trim() == "명령" && chat.Contains("사용합니다")) ; * else if (name.Trim() == "소환" && chat.Contains("소환했습니다")) ; * else if (name.Trim() == "변신" && (chat.Contains("발생했습니다") || chat.Contains("변신했습니다") || chat.Contains("회복했습니다"))) ; * else if (name.Trim() == "수면" && chat.EndsWith("니다.")) ; */ else { // 2013-07-17 저주: // 2013-07-15 // 여기까지 왔다면 이름을 세팅하자. ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 0, name)); } } } else if (name.EndsWith("소환") || name.EndsWith("변신") || name.EndsWith("강화") || name.EndsWith("보호") || name.EndsWith("저주")) { //스킬에 : 가 포함되어져 있는 것들이다. } else { InstanceDungeonEvent(this, new InstanceDungeonEventArgs(line, time, 1, name, chat)); } } //도움말, 공지사항도 ? matches = 지역채널에입장했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String where = matches[0].Groups["where"].Value; InstanceDungeonEvent(this, new InstanceDungeonEventArgs(line, time, 0, where, null)); return; } matches = 대미지를줬습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value; String skill = matches[0].Groups["skill"].Value; String target = matches[0].Groups["target"].Value; int damage = matches[0].Groups["damage"].Value.GetDigits(); bool bCritical = false; // 2013-05-07 평타는 계산하지 않는다. // if (line.IndexOf("치명타") != -1) bCritical = true; if (line.IndexOf("치명타") != -1 && skill != "") { bCritical = true; } if (name == "") { name = Myname; MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Attack, "")); } else if (name.IndexOf("의 정령") != -1 || name.IndexOf("의 기운") != -1) { DamageInflicted(this, new PlayerDamageEventArgs(line, time, Noname, name + "-" + skill, target, damage, bCritical)); return; } else if (name.IndexOf(' ') != -1 && skill.IndexOf(name) != -1) { DamageInflicted(this, new PlayerDamageEventArgs(line, time, Noname, name + "-" + skill, target, damage, bCritical)); return; } else if (name == "빙판" && skill.StartsWith("빙판") && skill.EndsWith("효과")) { DamageInflicted(this, new PlayerDamageEventArgs(line, time, Noname, name + "-" + skill, target, damage, bCritical)); return; } //2013-09-27 이벤트때문에 이런 이름들이 존나 많아짐 else if (name == "티아마트" || name == "마르쿠탄" || name == "히페리온" || name == "카이시넬" || name == "카룬") {// 이름에 빈칸이 없지만.. // 이미 유저목록에 이 이름이 있다면 패스하자 if (mainForm.data.GetPlayer(name) == null) { // 위의 이름이 들어오고 스킬목록에 없다면 추가하지 않는다. if (SkillDictionary.GetClass(skill) == ClassType.NONE) { return; } } } else if ((name.IndexOf(" ")) != -1) { // 여기까지 왔다면 몹이다. return; } DamageInflicted(this, new PlayerDamageEventArgs(line, time, name, skill, target, damage, bCritical)); //matched = true; return; } matches = 대미지를받았습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value; String skill = matches[0].Groups["skill"].Value; int damage = matches[0].Groups["damage"].Value.GetDigits(); String from = matches[0].Groups["from"].Value; if (name == "") { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.BeBeaten1, damage + "")); } else { // 다른사람 피해, 중독 출혈 신석 도트 // 지연폭발류 bool bCritical = false; // from은 없다.. 항상 효과 //2013.02.08 03:41:49 : 치명타! 땅의 정령이 시야랑에게서 564의 치명적인 대미지를 받았습니다. if (line.IndexOf("치명타") != -1) { bCritical = true; } // 1818 if (line.IndexOf("어둠의 문양 파열") != -1) { } if (name.EndsWith("어둠의 문양 파열 I 추")) { name = name.Substring(0, name.Length - 15); skill = "어둠의 문양 파열 I 추가 효과"; } DamageInflicted(this, new PlayerDamageEventArgs(line, time, Noname, skill, name, damage, bCritical)); //matched = true; } return; } matches = 사용한영향으로대미지를받았습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int damage = matches[0].Groups["damage"].Value.GetDigits(); MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.BeBeaten2, damage + "")); } matches = 공격이반사되어대미지를받았습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int damage = matches[0].Groups["damage"].Value.GetDigits(); MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.BeBeaten3, damage + "")); return; } //자힐.. 스킬.. //만큼회복됐습니다Regex = new Regex(timeStampRegex + "(?<skill>.+)[을를] 사용해 (?<amount>[^a-zA-Z]+)만큼 (?<what>.+)[이가] 회복됐습니다", RegexOptions.Compiled); matches = 만큼회복됐습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int amount = matches[0].Groups["amount"].Value.GetDigits(); String name = LogParser.Myname; String skill = matches[0].Groups["skill"].Value; MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Heal1, "")); RecoverEvent(this, new RecoverEventArgs(line, time, name, null, skill, amount, (matches[0].Groups["what"].Value == "생명력"))); return; } // 사용해만큼회복했습니다... 내가 치유다.. 힐을한다 // 2013.09.27 00:39:19 : 치유의 빛 VI을 사용해 소주전용풍이 1,615만큼 생명력을 회복했습니다. //만큼회복했습니다Regex = new Regex(timeStampRegex + "(?<skill>.+)[을를] 사용해 (?<name>.+)[이가] (?<amount>[^a-zA-Z]+)만큼 (?<what>.+)[을를] 회복했습니다", RegexOptions.Compiled); matches = 만큼회복했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int amount = matches[0].Groups["amount"].Value.GetDigits(); String who = LogParser.Myname; String skill = matches[0].Groups["skill"].Value; String name = matches[0].Groups["name"].Value; RecoverEvent(this, new RecoverEventArgs(line, time, name, who, skill, amount, (matches[0].Groups["what"].Value == "생명력"))); return; } //도트류? WHO가 없다.. 미분류 힐 //효과로회복했습니다Regex = new Regex(timeStampRegex + "((?<name>.+)[이가] )?(?<skill>.+)의 효과로 (?<amount>[^a-zA-Z]+)의 (?<what>.+)을 회복했습니다", RegexOptions.Compiled); // 버그 : 2013.09.22 21:18:48 : 흑영귀-이스라펠이 고갈의 문양 폭발 III 추가 효과의 효과로 2,536의 생명력을 회복했습니다. matches = 추가효과의효과로회복했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int amount = matches[0].Groups["amount"].Value.GetDigits(); String name = matches[0].Groups["name"].Value; String skill = matches[0].Groups["skill"].Value; if (name == "") { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Heal1, "")); name = LogParser.Myname; } else if (name.IndexOf(" ") != -1) { return; } RecoverEvent(this, new RecoverEventArgs(line, time, name, null, skill, amount, (matches[0].Groups["what"].Value == "생명력"))); return; } matches = 효과로회복했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int amount = matches[0].Groups["amount"].Value.GetDigits(); String name = matches[0].Groups["name"].Value; String skill = matches[0].Groups["skill"].Value; if (name == "") { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Heal1, "")); name = LogParser.Myname; } else if (name.IndexOf(" ") != -1) { return; } RecoverEvent(this, new RecoverEventArgs(line, time, name, null, skill, amount, (matches[0].Groups["what"].Value == "생명력"))); return; } //사용해회복했습니다Regex = new Regex(timeStampRegex + "(?<name>.+)[이가] (?<skill>.+)[을를] 사용해 ((?<whom>.+)[이가] )?(?<amount>[^a-zA-Z]+)의 (?<what>.+)을 회복했습니다", RegexOptions.Compiled); //2013.09.22 21:11:40 : 나비가 온후한 울림 V을 사용해 에꾸가 1,778의 생명력을 회복했습니다. //2013.09.22 21:11:53 : 구라독종이 약초 치료 V을 사용해 818의 생명력을 회복했습니다. // 중요: 여기는 자기자신의 로그가 올수 없다. 자힐의 경우 만큼 회복이 된다 // 치유의 기운이 소환: 치유의 기운 III을 사용해 깐따삐아가 394의 생명력을 회복했습니다. matches = 사용해회복했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int amount = matches[0].Groups["amount"].Value.GetDigits(); String skill = matches[0].Groups["skill"].Value; String name = matches[0].Groups["name"].Value; String who = matches[0].Groups["whom"].Value; // who가 있다면.. 실제회복한 사람은 who이다 if (String.IsNullOrEmpty(who) == false) { name = who; who = matches[0].Groups["name"].Value; } if (name.IndexOf(" ") != -1) { return; } RecoverEvent(this, new RecoverEventArgs(line, time, name, who, skill, amount, (matches[0].Groups["what"].Value == "생명력"))); return; } // 이것도 무조건 나만.. 사용해회복했습니다와 쌍을 이룬다. // 사용해회복했습니다 : 무조건 다른사람 // 사용한영향으로회복됐습니다 : 무조건 나만 //사용한영향으로회복됐습니다Regex = new Regex(timeStampRegex + "(?<name>.+)[이가] 사용한 (?<skill>.+)의 영향으로 (?<amount>[^a-zA-Z]+)의 (?<what>.+)[이가] 회복됐습니다", RegexOptions.Compiled); matches = 사용한영향으로회복됐습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int amount = matches[0].Groups["amount"].Value.GetDigits(); String name = LogParser.Myname; String skill = matches[0].Groups["skill"].Value; String who = matches[0].Groups["name"].Value; MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Heal2, "")); RecoverEvent(this, new RecoverEventArgs(line, time, name, who, skill, amount, (matches[0].Groups["what"].Value == "생명력"))); return; } // 비약류? //방법없이회복했습니다Regex = new Regex(timeStampRegex + "((?<name>.+)[이가] )?(?<amount>[^a-zA-Z]+)의 (?<what>.+)을 회복했습니다", RegexOptions.Compiled); matches = 방법없이회복했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); int amount = matches[0].Groups["amount"].Value.GetDigits(); String name = matches[0].Groups["name"].Value; if (String.IsNullOrEmpty(name)) { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Heal3, "")); name = LogParser.Myname; } RecoverEvent(this, new RecoverEventArgs(line, time, name, null, null, amount, (matches[0].Groups["what"].Value == "생명력"))); return; } matches = 속도를회복했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value; String what = matches[0].Groups["what"].Value; if (matches[0].Groups["name"].Value == "") { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Repair1, what)); } return; } matches = 사용한영향으로상태가됐습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String target = matches[0].Groups["target"].Value; String debuff = matches[0].Groups["debuff"].Value.Trim(); if (target == "") { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Debuff1, debuff)); } return; } matches = 사용한영향으로기타등등Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String debuff = matches[0].Groups["debuff"].Value.Trim(); MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Status1, debuff)); return; } matches = 벗어났습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value; String debuff = matches[0].Groups["debuff"].Value; if (name == "") { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Repair2, debuff)); } return; } matches = 사용해상태가됐습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); if (matches[0].Groups["name"].Value == "") { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Status2, "")); } return; } matches = 내스킬을써서효과가발생했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Status3, "")); return; } //효과가발동했습니다Regex matches = 효과가발동했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String skill = matches[0].Groups["skill"].Value.Trim(); MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Debuff2, skill)); return; } //2013-05-03 matches = 사망했습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value.Trim(); String ignore = matches[0].Groups["ignore"].Value.Trim(); if (name == "") { MyStatusEvent(this, new MyStatusEventArgs(line, time, MyStatus.Die, null)); } return; } //2013-05-24 matches = 경험치를얻었습니다Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String target = matches[0].Groups["target"].Value.Trim(); String amount = matches[0].Groups["amount"].Value.Trim(); InstanceDungeonEvent(this, new InstanceDungeonEventArgs(line, time, 2, target, amount)); return; } matches = 삼자가자신의무엇가를변경했습니다Regex.Matches(line); if (matches.Count > 0) { return; } matches = 무시Regex.Matches(line); if (matches.Count > 0) { //tempEvent(this, new LogEventArgs(">>무시 " + line)); return; } matches = 명령표현Regex.Matches(line); if (matches.Count > 0) { DateTime time = matches[0].Groups["time"].Value.GetTime(LogTimeFormat); String name = matches[0].Groups["name"].Value; String target = matches[0].Groups["target"].Value; if (name == Myname && target != "" && target.IndexOf(" ") == -1) { ChatCommandEvent(this, new ChatCommandEventArgs(line, time, 1, target)); } return; } matches = 감정표현Regex.Matches(line); if (matches.Count > 0) { return; } tempEvent(this, new LogEventArgs(line)); } catch { } }