public EntitySkill(XMLHandler handler, XmlNode node) { NodeData = new Dictionary <string, string>(); MainOption = new Dictionary <string, string>(); BonusOption = new Dictionary <string, string>(); PercentOption = new Dictionary <string, string>(); this.xml = node.InnerXml; this.ID = Int32.Parse(node["id"].InnerText); this.Name = node["name"].InnerText.ToLower(); this.Desc = (string)node["desc"].InnerText.ToUpper(); this.ViewName = (string)handler.StrHash[this.Desc]; foreach (XmlNode child in node.ChildNodes) { string tagName = child.Name; string value = child.InnerText; NodeData.Add(tagName, value); } if (NodeData.ContainsKey("desc_long")) { DescLong = node["desc_long"].InnerText.ToUpper(); if (handler.StrHash.ContainsKey(DescLong)) { DescLongString = (string)handler.StrHash[DescLong]; } } if (NodeData.ContainsKey("activation_attribute")) { string tmp = node["activation_attribute"].InnerText.ToLower(); switch (tmp) { case "passive": this.SType = SkillType.Passive; break; case "toggle": this.SType = SkillType.Toggle; break; case "active": this.SType = SkillType.Active; break; case "charge": this.SType = SkillType.Charge; break; case "provoked": this.SType = SkillType.Provoked; break; case "maintain": this.SType = SkillType.Maintain; break; default: this.SType = SkillType.NoneActive; break; } } else { // 채집, 정기 추출, 오드 추출, 요리, 무기 제작, SType = SkillType.None; } // 음식류? if (NodeData.ContainsKey("activation_attribute")) { string v = ((string)NodeData["activation_attribute"].ToLower()); //if (v == "active") { for (int i = 1; i < 5; i++) { string tt = "effect" + i + "_type"; if (NodeData.ContainsKey(tt)) { string t2 = NodeData[tt].ToLower(); //if (t2 == "statup" || t2 == "statdown" || t2 == "statboost") if (t2.Contains("stat")) { //13 14를 메인에 // 13 14가 있으면 2,4 // 13만 있으면 1 // 음.. reserved1은 단계별 값이고 // reserved2는 단계와 상과없는 절대값이다 // reserved4는 퍼센트인것 같다 ; string tmp1 = "effect" + i + "_reserved1"; string tmp2 = "effect" + i + "_reserved2"; string tmp3 = "effect" + i + "_reserved3"; string tmp4 = "effect" + i + "_reserved4"; string tmp13 = "effect" + i + "_reserved13"; string tmp14 = "effect" + i + "_reserved14"; string value1 = (NodeData.ContainsKey(tmp1)) ? NodeData[tmp1] : null; string value2 = (NodeData.ContainsKey(tmp2)) ? NodeData[tmp2] : null; string value3 = (NodeData.ContainsKey(tmp3)) ? NodeData[tmp3] : null; string value4 = (NodeData.ContainsKey(tmp4)) ? NodeData[tmp4] : null; string value13 = (NodeData.ContainsKey(tmp13)) ? NodeData[tmp13].ToLower() : null; string value14 = (NodeData.ContainsKey(tmp14)) ? NodeData[tmp14].ToLower() : null; if (t2 == "statdown") { try { value1 = (value1 == null || value1 == "0") ? null : "-" + value1; value2 = (value2 == null || value2 == "0") ? null : "-" + value2; value3 = (value3 == null || value3 == "0") ? null : "-" + value3; value4 = (value4 == null || value4 == "0") ? null : "-" + value4; } catch //(Exception e) { } } if (SType == SkillType.Toggle && t2 == "weaponstatup") { // 화살강화때문에 value4 = value2; value2 = null; } if (SType == SkillType.Provoked && ViewName.Contains("불패의 진언") && value13 == "phyattack") { value4 = value2; value2 = null; } if (SType == SkillType.Active && DescLongString != null && (DescLongString.Contains("e" + i + ".StatUp.Value]%%") || DescLongString.Contains("e" + i + ".StatDown.Value]%%") || DescLongString.Contains("e" + i + ".WeaponStatUp.Value]%%"))) { if (value4 != null && value14 != null) { // 1818181818181818 PercentOption.Add(value13, value2); value13 = null; } else { value4 = value2; value2 = null; } } // if (SType == SkillType.Active && DescLongString != null && (DescLongString.Contains("e" + i + ".StatUp.Value2]%%") || DescLongString.Contains("e" + i + ".StatDown.Value2]%%") || DescLongString.Contains("e" + i + ".WeaponStatUp.Value2]%%"))) { } // 퍼센트옵션 ㅠ if (value13 != null && value14 == null && value4 != null) { if (value1 == null || value1 == "0") { if (value2 == null || value2 == "0") { if (value3 == null || value3 == "0") { PercentOption.Add(value13, value4); } } } } if (value13 != null) { if (value1 != null && value1 != "0") { if (MainOption.ContainsKey(value13) == false) { MainOption.Add(value13, value1); } } if (value2 != null && value2 != "0") { if (BonusOption.ContainsKey(value13) == false) { BonusOption.Add(value13, value2); } } } if (value14 != null) { if (value3 != null && value3 != "0") { if (MainOption.ContainsKey(value14) == false) { MainOption.Add(value14, value3); } } if (value4 != null && value4 != "0") { if (BonusOption.ContainsKey(value14) == false) { BonusOption.Add(value14, value4); } } } } } } } // 2013-06-21 //elementaldefendall if (MainOption.ContainsKey("elementaldefendall")) { string value = MainOption["elementaldefendall"]; MainOption.Add("elementaldefendfire", value); MainOption.Add("elementaldefendair", value); MainOption.Add("elementaldefendwater", value); MainOption.Add("elementaldefendearth", value); } } }