public string GetConString() { switch (this.ConType) { case GearPropType.reqJob: string[] reqJobs = new string[this.ConValue.Count]; for (int i = 0; i < reqJobs.Length; i++) { reqJobs[i] = ItemStringHelper.GetJobName(this.ConValue[i]) ?? this.ConValue[i].ToString(); } return("职业为" + string.Join(" 或者 ", reqJobs) + "时"); case GearPropType.reqLevel: return(this.ConValue[0] + "级以上时"); case GearPropType.reqCraft: int lastExp; return("手技经验值在" + this.ConValue[0] + "(" + getPersonalityLevel(this.ConValue[0], out lastExp) + "级" + lastExp + "点)以上时"); case GearPropType.reqWeekDay: string[] weekdays = new string[this.ConValue.Count]; for (int i = 0; i < this.ConValue.Count; i++) { weekdays[i] = GetWeekDayString(this.ConValue[i]); } return(string.Join(", ", weekdays) + "时"); default: return(null); } }
public string ConvertSummary() { StringBuilder sb = new StringBuilder(); string mobStr = null; if (MobName != null) { mobStr = MobName; } else if (Mobs.Count > 0) { mobStr = Mobs[0].ToString(); } foreach (var kv in this.Props) { if (kv.Key == GearPropType.damR) { sb.AppendFormat("+{0}% damage", kv.Value); sb.AppendFormat(" when attacking {0}.", mobStr); } else { sb.Append(ItemStringHelper.GetGearPropString(kv.Key, kv.Value)); sb.AppendFormat(" when attacking {0}.", mobStr); } } return(sb.ToString(0, sb.Length)); }
public string GetConString() { switch (this.ConType) { case GearPropType.reqJob: string[] reqJobs = new string[this.ConValue.Count]; for (int i = 0; i < reqJobs.Length; i++) { reqJobs[i] = ItemStringHelper.GetJobName(this.ConValue[i]) ?? this.ConValue[i].ToString(); } return("When your job is " + string.Join(" or ", reqJobs) + "."); case GearPropType.reqLevel: return("When your level is " + this.ConValue[0] + " or higher."); case GearPropType.reqCraft: int lastExp; return("When Diligence EXP is " + this.ConValue[0] + " (Lv. " + getPersonalityLevel(this.ConValue[0], out lastExp) + " " + lastExp + " Points) or higher"); case GearPropType.reqWeekDay: string[] weekdays = new string[this.ConValue.Count]; for (int i = 0; i < this.ConValue.Count; i++) { weekdays[i] = GetWeekDayString(this.ConValue[i]); } return("When it's " + string.Join(", ", weekdays) + ":"); default: return(null); } }
public static SetItem CreateFromNode(Wz_Node setItemNode, Wz_Node optionNode) { if (setItemNode == null) { return(null); } SetItem setItem = new SetItem(); int setItemID; if (int.TryParse(setItemNode.Text, out setItemID)) { setItem.SetItemID = setItemID; } Dictionary <string, string> desc = new Dictionary <string, string>(); foreach (Wz_Node subNode in setItemNode.Nodes) { switch (subNode.Text) { case "setItemName": setItem.SetItemName = Convert.ToString(subNode.Value); break; case "completeCount": setItem.CompleteCount = Convert.ToInt32(subNode.Value); break; case "parts": setItem.Parts = subNode.GetValue <int>() != 0; break; case "expandToolTip": setItem.ExpandToolTip = subNode.GetValue <int>() != 0; break; case "ItemID": foreach (Wz_Node itemNode in subNode.Nodes) { int idx = Convert.ToInt32(itemNode.Text); if (itemNode.Nodes.Count == 0) { int itemID = Convert.ToInt32(itemNode.Value); setItem.ItemIDs.Add(idx, new SetItemIDPart(itemID)); } else { SetItemIDPart part = new SetItemIDPart(); int num; foreach (Wz_Node itemNode2 in itemNode.Nodes) { switch (itemNode2.Text) { case "representName": part.RepresentName = Convert.ToString(itemNode2.Value); break; case "typeName": part.TypeName = Convert.ToString(itemNode2.Value); break; default: if (Int32.TryParse(itemNode2.Text, out num) && num > 0) { part.ItemIDs[Convert.ToInt32(itemNode2.Value)] = false; } break; } } setItem.ItemIDs.Add(idx, part); } } break; case "Effect": foreach (Wz_Node effectNode in subNode.Nodes) { int count = Convert.ToInt32(effectNode.Text); SetItemEffect effect = new SetItemEffect(); foreach (Wz_Node propNode in effectNode.Nodes) { switch (propNode.Text) { case "Option": if (optionNode != null) { List <Potential> potens = new List <Potential>(); foreach (Wz_Node pNode in propNode.Nodes) { string optText = Convert.ToString(pNode.FindNodeByPath("option").Value).PadLeft(6, '0'); Wz_Node opn = optionNode.FindNodeByPath(optText); if (opn == null) { continue; } Potential p = Potential.CreateFromNode(opn, Convert.ToInt32(pNode.FindNodeByPath("level").Value)); if (p != null) { potens.Add(p); } } effect.Props.Add(GearPropType.Option, potens); } break; case "OptionToMob": List <SetItemOptionToMob> opToMobList = new List <SetItemOptionToMob>(); for (int i = 1; ; i++) { Wz_Node optNode = propNode.FindNodeByPath(i.ToString()); if (optNode == null) { break; } SetItemOptionToMob option = new SetItemOptionToMob(); foreach (Wz_Node pNode in optNode.Nodes) { switch (pNode.Text) { case "mob": foreach (Wz_Node mobNode in pNode.Nodes) { option.Mobs.Add(mobNode.GetValue <int>()); } break; case "mobName": option.MobName = pNode.GetValue <string>(); break; default: { GearPropType type; if (Enum.TryParse(pNode.Text, out type)) { option.Props.Add(type, pNode.GetValue <int>()); } } break; } } opToMobList.Add(option); } effect.Props.Add(GearPropType.OptionToMob, opToMobList); break; case "activeSkill": List <SetItemActiveSkill> activeSkillList = new List <SetItemActiveSkill>(); for (int i = 0; ; i++) { Wz_Node optNode = propNode.FindNodeByPath(i.ToString()); if (optNode == null) { break; } SetItemActiveSkill activeSkill = new SetItemActiveSkill(); foreach (Wz_Node pNode in optNode.Nodes) { switch (pNode.Text) { case "id": activeSkill.SkillID = pNode.GetValue <int>(); break; case "level": activeSkill.Level = pNode.GetValue <int>(); break; } } activeSkillList.Add(activeSkill); } effect.Props.Add(GearPropType.activeSkill, activeSkillList); break; case "bonusByTime": var bonusByTimeList = new List <SetItemBonusByTime>(); for (int i = 0; ; i++) { Wz_Node optNode = propNode.FindNodeByPath(i.ToString()); if (optNode == null) { break; } var bonusByTime = new SetItemBonusByTime(); foreach (Wz_Node pNode in optNode.Nodes) { switch (pNode.Text) { case "termStart": bonusByTime.TermStart = pNode.GetValue <int>(); break; default: { GearPropType type; if (Enum.TryParse(pNode.Text, out type)) { bonusByTime.Props.Add(type, pNode.GetValue <int>()); } } break; } } bonusByTimeList.Add(bonusByTime); } effect.Props.Add(GearPropType.bonusByTime, bonusByTimeList); break; default: { GearPropType type; if (Enum.TryParse(propNode.Text, out type)) { effect.Props.Add(type, Convert.ToInt32(propNode.Value)); } } break; } } setItem.Effects.Add(count, effect); } break; case "Desc": foreach (var descNode in subNode.Nodes) { desc[descNode.Text] = Convert.ToString(descNode.Value); } break; } } //处理额外分组 if (desc.Count > 0) { foreach (var kv in desc) { SetItemIDPart combinePart = null; string combineTypeName = null; switch (kv.Key) { case "weapon": combinePart = CombinePart(setItem, gearID => Gear.IsWeapon(Gear.GetGearType(gearID))); combineTypeName = ItemStringHelper.GetSetItemGearTypeString(GearType.weapon); break; case "subweapon": combinePart = CombinePart(setItem, gearID => Gear.IsSubWeapon(Gear.GetGearType(gearID))); combineTypeName = ItemStringHelper.GetSetItemGearTypeString(GearType.subWeapon); break; case "pocket": combinePart = CombinePart(setItem, gearID => Gear.GetGearType(gearID) == GearType.pocket); combineTypeName = ItemStringHelper.GetSetItemGearTypeString(GearType.pocket); break; } if (combinePart != null) { combinePart.RepresentName = kv.Value; combinePart.TypeName = combineTypeName; ItemStringHelper.GetSetItemGearTypeString(GearType.weapon); } } } return(setItem); }
public string GetPropString() { StringBuilder sb; switch (this.Type) { case AdditionType.boss: sb = new StringBuilder(); sb.Append("攻击BOSS时,"); { string v1; if (this.Props.TryGetValue("prob", out v1)) { sb.Append("有" + v1 + "的几率"); } sb.Append("造成" + Props["damage"] + "%的额外伤害"); } return(sb.ToString()); case AdditionType.critical: sb = new StringBuilder(); { string val; if (this.Props.TryGetValue("prob", out val)) { sb.AppendFormat("爆击率{0}%\r\n", val); } if (this.Props.TryGetValue("damage", out val)) { sb.AppendFormat("爆击伤害增加{0}%\r\n", val); } if (sb.Length > 2) { sb.Remove(sb.Length - 2, 2); } } return(sb.ToString()); case AdditionType.elemboost: { string v1, elem; if (this.Props.TryGetValue("elemVol", out v1)) { switch (v1[0]) { case 'I': elem = "冰"; break; case 'F': elem = "火"; break; case 'L': elem = "雷"; break; default: elem = v1[0].ToString(); break; } return(elem + "属性效果强化" + v1.Substring(1) + "%"); } } break; case AdditionType.hpmpchange: sb = new StringBuilder(); sb.Append("每10秒恢复"); { string v1; if (this.Props.TryGetValue("hpChangePerTime", out v1)) { sb.Append("HP " + v1); } } return(sb.ToString()); case AdditionType.mobcategory: return("攻击" + ItemStringHelper.GetMobCategoryName(Convert.ToInt32(this.Props["category"])) + "怪物时,造成" + this.Props["damage"] + "%额外伤害"); case AdditionType.mobdie: sb = new StringBuilder(); { string v1; if (this.Props.TryGetValue("hpIncOnMobDie", out v1)) { sb.AppendLine("怪物死亡时 HP恢复" + v1); } if (this.Props.TryGetValue("hpIncRatioOnMobDie", out v1)) { sb.AppendLine("怪物死亡时 有" + Props["hpRatioProp"] + "%的几率 伤害的" + v1 + "%转换为HP (但不超过最大HP的10%。)"); } if (this.Props.TryGetValue("mpIncOnMobDie", out v1)) { sb.AppendLine("怪物死亡时 HP恢复" + v1); } if (this.Props.TryGetValue("mpIncRatioOnMobDie", out v1)) { sb.AppendLine("怪物死亡时 有" + Props["mpRatioProp"] + "%的几率 伤害的" + v1 + "%转换为MP (但不超过最大MP的10%。)"); } } if (sb.Length > 0) { sb.Append("在部分地区功能可能会受到限制。"); return(sb.ToString()); } break; case AdditionType.skill: switch (Convert.ToInt32(this.Props["id"])) { case 90000000: return("有一定几率增加必杀效果"); case 90001001: return("有一定几率增加眩晕效果"); case 90001002: return("有一定几率增加缓速术效果"); case 90001003: return("有一定几率增加毒效果"); case 90001004: return("有一定几率增加暗黑效果"); case 90001005: return("有一定几率增加封印效果"); case 90001006: return("有一定几率增加结冰效果"); } break; case AdditionType.statinc: sb = new StringBuilder(); { foreach (var kv in Props) { try { GearPropType propType = (GearPropType)Enum.Parse(typeof(GearPropType), kv.Key); sb.AppendLine(ItemStringHelper.GetGearPropString(propType, Convert.ToInt32(kv.Value))); } catch { } } } if (sb.Length > 0) { return(sb.ToString()); } break; default: return(null); } return(null); }
public string GetPropString() { StringBuilder sb; switch (this.Type) { case AdditionType.boss: sb = new StringBuilder(); sb.Append("보스 공격 시, "); { string v1; if (this.Props.TryGetValue("prob", out v1)) { sb.Append(v1 + "%의 확률로 "); } sb.Append(Props["damage"] + "%의 데미지 추가"); } return(sb.ToString()); case AdditionType.critical: sb = new StringBuilder(); { string val; if (this.Props.TryGetValue("prob", out val)) { sb.AppendFormat("크리티컬 확률 {0}%\r\n", val); } if (this.Props.TryGetValue("damage", out val)) { sb.AppendFormat("크리티컬 데미지 {0}%증가\r\n", val); } if (sb.Length > 2) { sb.Remove(sb.Length - 2, 2); } } return(sb.ToString()); case AdditionType.elemboost: { string v1, elem; if (this.Props.TryGetValue("elemVol", out v1)) { switch (v1[0]) { case 'I': elem = "얼음"; break; case 'F': elem = "불"; break; case 'L': elem = "전기"; break; default: elem = v1[0].ToString(); break; } return(elem + "속성 효과 " + v1.Substring(1) + "% 강화"); } } break; case AdditionType.hpmpchange: sb = new StringBuilder(); sb.Append("每10秒恢复"); { string v1; if (this.Props.TryGetValue("hpChangePerTime", out v1)) { sb.Append("HP " + v1); } } return(sb.ToString()); case AdditionType.mobcategory: return(ItemStringHelper.GetMobCategoryName(Convert.ToInt32(this.Props["category"])) + " 몬스터 공격 시, " + this.Props["damage"] + "% 추가 데미지"); case AdditionType.mobdie: sb = new StringBuilder(); { string v1; if (this.Props.TryGetValue("hpIncOnMobDie", out v1)) { sb.AppendLine("몬스터 사망 시 HP " + v1 + " 회복"); } if (this.Props.TryGetValue("hpIncRatioOnMobDie", out v1)) { sb.AppendLine("몬스터 사망 시 " + Props["hpRatioProp"] + "%의 확률로 데미지의 " + v1 + "%의 HP 회복 ( 단 최대 HP의 10%를 넘을 수 없다. )"); } if (this.Props.TryGetValue("mpIncOnMobDie", out v1)) { sb.AppendLine("몬스터 사망 시 MP " + v1 + " 회복"); } if (this.Props.TryGetValue("mpIncRatioOnMobDie", out v1)) { sb.AppendLine("몬스터 사망 시 " + Props["hpRatioProp"] + "%의 확률로 데미지의 " + v1 + "%의 MP 회복 ( 단 최대 MP의 10%를 넘을 수 없다. )"); } } if (sb.Length > 0) { sb.Append("일부 지역에서는 기능이 제한될 수 있다."); return(sb.ToString()); } break; case AdditionType.skill: switch (Convert.ToInt32(this.Props["id"])) { //case 90000000: return "확률적으로 즉사 효과 추가"; case 90001001: return("확률적으로 기절 효과 추가"); case 90001002: return("확률적으로 슬로우 효과 추가"); case 90001003: return("확률적으로 독 효과 추가"); case 90001004: return("확률적으로 암흑 효과 추가"); case 90001005: return("확률적으로 봉인 효과 추가"); case 90001006: return("확률적으로 결빙 효과 추가"); } break; case AdditionType.statinc: sb = new StringBuilder(); { foreach (var kv in Props) { try { GearPropType propType = (GearPropType)Enum.Parse(typeof(GearPropType), kv.Key); sb.AppendLine(ItemStringHelper.GetGearPropString(propType, Convert.ToInt32(kv.Value))); } catch { } } } if (sb.Length > 0) { return(sb.ToString()); } break; default: return(null); } return(null); }
public string GetPropString() { StringBuilder sb; switch (this.Type) { case AdditionType.boss: sb = new StringBuilder(); sb.Append("Boss Damage Increased by, "); { string v1; if (this.Props.TryGetValue("prob", out v1)) { sb.Append(v1 + "%"); } sb.Append(Props["damage"] + "%"); } return(sb.ToString()); case AdditionType.critical: sb = new StringBuilder(); { string val; if (this.Props.TryGetValue("prob", out val)) { sb.AppendFormat("Critical Chance increased by {0}%\r\n", val); } if (this.Props.TryGetValue("damage", out val)) { sb.AppendFormat("Minimum Critical Damage increased by {0}%\r\n", val); } if (sb.Length > 2) { sb.Remove(sb.Length - 2, 2); } } return(sb.ToString()); case AdditionType.elemboost: { string v1, elem; if (this.Props.TryGetValue("elemVol", out v1)) { switch (v1[0]) { case 'I': elem = "冰"; break; case 'F': elem = "불"; break; case 'L': elem = "雷"; break; default: elem = v1[0].ToString(); break; } return(elem + "속성 효과 " + v1.Substring(1) + "% 강화"); } } break; case AdditionType.hpmpchange: sb = new StringBuilder(); sb.Append("Every 10 seconds regain "); { string v1; if (this.Props.TryGetValue("hpChangePerTime", out v1)) { sb.Append("HP " + v1); } } return(sb.ToString()); case AdditionType.mobcategory: return(ItemStringHelper.GetMobCategoryName(Convert.ToInt32(this.Props["category"])) + " receive " + this.Props["damage"] + "% additional damage"); case AdditionType.mobdie: sb = new StringBuilder(); { string v1; if (this.Props.TryGetValue("hpIncOnMobDie", out v1)) { sb.AppendLine("HP restored on monster death: " + v1 + " 회복"); } if (this.Props.TryGetValue("hpIncRatioOnMobDie", out v1)) { sb.AppendLine("怪物死亡时 有" + Props["hpRatioProp"] + "%的几率 伤害的" + v1 + "%转换为HP (但不超过最大HP的10%。)"); } if (this.Props.TryGetValue("mpIncOnMobDie", out v1)) { sb.AppendLine("MP restored on monster death: " + v1); } if (this.Props.TryGetValue("mpIncRatioOnMobDie", out v1)) { sb.AppendLine("怪物死亡时 有" + Props["mpRatioProp"] + "%的几率 伤害的" + v1 + "%转换为MP (但不超过最大MP的10%。)"); } } if (sb.Length > 0) { sb.Append("일부 지역에서는 기능이 제한될 수 있다."); return(sb.ToString()); } break; case AdditionType.skill: switch (Convert.ToInt32(this.Props["id"])) { case 90000000: return("有一定几率增加必杀效果"); case 90001001: return("확률적으로 기절 효과 추가"); case 90001002: return("확률적으로 슬로우 효과 추가"); case 90001003: return("확률적으로 독 효과 추가"); case 90001004: return("확률적으로 암흑 효과 추가"); case 90001005: return("확률적으로 봉인 효과 추가"); case 90001006: return("확률적으로 결빙 효과 추가"); } break; case AdditionType.statinc: sb = new StringBuilder(); { foreach (var kv in Props) { try { GearPropType propType = (GearPropType)Enum.Parse(typeof(GearPropType), kv.Key); sb.AppendLine(ItemStringHelper.GetGearPropString(propType, Convert.ToInt32(kv.Value))); } catch { } } } if (sb.Length > 0) { return(sb.ToString()); } break; default: return(null); } return(null); }
public string GetPropString() { StringBuilder sb; switch (this.Type) { case AdditionType.boss: sb = new StringBuilder(); sb.Append("Has a "); { string v1; if (this.Props.TryGetValue("prob", out v1)) { sb.Append(v1 + "% chance to deal "); } sb.Append(Props["damage"] + "% extra damage on boss monsters."); } return(sb.ToString()); case AdditionType.critical: sb = new StringBuilder(); { string val; if (this.Props.TryGetValue("prob", out val)) { sb.AppendFormat("Critical Rate: +{0}%\r\n", val); } if (this.Props.TryGetValue("damage", out val)) { sb.AppendFormat("Critical Damage: +{0}%\r\n", val); } if (sb.Length > 2) { sb.Remove(sb.Length - 2, 2); } } return(sb.ToString()); case AdditionType.elemboost: { string v1, elem; if (this.Props.TryGetValue("elemVol", out v1)) { switch (v1[0]) { case 'I': elem = "Ice"; break; case 'F': elem = "Fire"; break; case 'L': elem = "Lightning"; break; default: elem = v1[0].ToString(); break; } return(elem + "-Type Attack Damage: +" + v1.Substring(1) + "%"); } } break; case AdditionType.hpmpchange: sb = new StringBuilder(); sb.Append("Every 10 seconds, recover "); { string v1; if (this.Props.TryGetValue("hpChangePerTime", out v1)) { sb.Append(v1 + " HP"); } } return(sb.ToString()); case AdditionType.mobcategory: return("When attacking " + ItemStringHelper.GetMobCategoryName(Convert.ToInt32(this.Props["category"])) + "type enemies, deals " + this.Props["damage"] + "% extra damage."); case AdditionType.mobdie: sb = new StringBuilder(); { string v1; if (this.Props.TryGetValue("hpIncOnMobDie", out v1)) { sb.AppendLine("When you kill a monster, recover " + v1 + " HP"); } if (this.Props.TryGetValue("hpIncRatioOnMobDie", out v1)) { sb.AppendLine("When you kill a monster, you have " + Props["hpRatioProp"] + "% chance to recover HP equal to " + v1 + "% of the damage taken (cannot exceed 10% of Max HP.)"); } if (this.Props.TryGetValue("mpIncOnMobDie", out v1)) { sb.AppendLine("When you kill a monster, recover " + v1 + " MP"); } if (this.Props.TryGetValue("mpIncRatioOnMobDie", out v1)) { sb.AppendLine("When you kill a monster, you have " + Props["mpRatioProp"] + "% chance to recover MP equal to " + v1 + "% of the damage taken (cannot exceed 10% of Max MP.)"); } } if (sb.Length > 0) { sb.Append("Function may be limited in some locations."); return(sb.ToString()); } break; case AdditionType.skill: switch (Convert.ToInt32(this.Props["id"])) { case 90000000: return("Has a chance to add: Instant Death effect"); case 90001001: return("Has a chance to add: Knock Down effect"); case 90001002: return("Has a chance to add: Slow effect"); case 90001003: return("Has a chance to add: Poison effect"); case 90001004: return("Has a chance to add: Darkness effect"); case 90001005: return("Has a chance to add: Seal effect"); case 90001006: return("Has a chance to add: Freeze effect"); } break; case AdditionType.statinc: sb = new StringBuilder(); { foreach (var kv in Props) { try { GearPropType propType = (GearPropType)Enum.Parse(typeof(GearPropType), kv.Key); sb.AppendLine(ItemStringHelper.GetGearPropString(propType, Convert.ToInt32(kv.Value))); } catch { } } } if (sb.Length > 0) { return(sb.ToString()); } break; default: return(null); } return(null); }