public static string GetGearPropDiffString(GearPropType propType, int value, int standardValue) { var propStr = GetGearPropString(propType, value); if (value > standardValue) { string subfix = null; switch (propType) { case GearPropType.incSTR: case GearPropType.incDEX: case GearPropType.incINT: case GearPropType.incLUK: case GearPropType.incMHP: case GearPropType.incMMP: case GearPropType.incMDF: case GearPropType.incARC: case GearPropType.incPAD: case GearPropType.incMAD: case GearPropType.incPDD: case GearPropType.incMDD: subfix = $"({standardValue} #$+{value - standardValue}#)"; break; case GearPropType.bdR: case GearPropType.incBDR: case GearPropType.imdR: case GearPropType.incIMDR: subfix = $"({standardValue}% #$+{value - standardValue}%#)"; break; } propStr = "#$" + propStr + "# " + subfix; } return(propStr); }
public static Potential CreateFromNode(Wz_Node potentialNode, int pLevel) { Potential potential = new Potential(); if (potentialNode == null || !Int32.TryParse(potentialNode.Text, out potential.code)) { return(null); } foreach (Wz_Node subNode in potentialNode.Nodes) { if (subNode.Text == "info") { foreach (Wz_Node infoNode in subNode.Nodes) { switch (infoNode.Text) { case "optionType": potential.optionType = Convert.ToInt32(infoNode.Value); break; case "reqLevel": potential.reqLevel = Convert.ToInt32(infoNode.Value); break; case "weight": potential.weight = Convert.ToInt32(infoNode.Value); break; case "string": potential.stringSummary = Convert.ToString(infoNode.Value); break; } } } else if (subNode.Text == "level") { Wz_Node levelNode = subNode.FindNodeByPath(pLevel.ToString()); if (levelNode != null) { foreach (Wz_Node propNode in levelNode.Nodes) { try { GearPropType propType = (GearPropType)Enum.Parse(typeof(GearPropType), propNode.Text); int value = (propType == GearPropType.face ? 0 : Convert.ToInt32(propNode.Value)); potential.props.Add(propType, value); } catch { } } } else { return(null); } } } return(potential); }
private static int GetPropTypeWeight(GearPropType type) { if ((int)type < 100) { switch (type) { case GearPropType.incSTR: case GearPropType.incDEX: case GearPropType.incINT: case GearPropType.incLUK: case GearPropType.incPAD: case GearPropType.incMAD: case GearPropType.incSpeed: case GearPropType.incJump: return(1); case GearPropType.incMHP: case GearPropType.incMMP: return(100); case GearPropType.incPDD_incMDD: case GearPropType.incPDD: return(10); case GearPropType.incPAD_incMAD: return(2); case GearPropType.incMHP_incMMP: return(200); } } return(int.MaxValue); }
private bool checkGearPropReq(Dictionary <GearPropType, int> props, GearPropType prop, int value) { int v; if (!props.TryGetValue(prop, out v) || value >= v) { return(true); } return(false); }
private Dictionary <GearPropType, int> getAdditionProps(Addition addition) { Dictionary <GearPropType, int> props = new Dictionary <GearPropType, int>(); if (addition != null && (addition.Type == AdditionType.critical || addition.Type == AdditionType.statinc)) { bool con = false; switch (addition.ConType) { case GearPropType.reqLevel: con = (this.status.Level >= addition.ConValue[0]); break; case GearPropType.reqJob: foreach (int val in addition.ConValue) { con |= this.status.Job == val; } break; case GearPropType.reqCraft: default: con = true; break; } if (con) { string strcr; int cr; if (addition.Props.TryGetValue("prob", out strcr) && Int32.TryParse(strcr, out cr)) { props.Add(GearPropType.incCr, cr); } if (addition.Type == AdditionType.statinc) { foreach (var kv in addition.Props) { try { GearPropType propType = (GearPropType)Enum.Parse(typeof(GearPropType), kv.Key); if ((int)propType > 0 && (int)propType < 100) { props.Add(propType, Convert.ToInt32(kv.Value)); } } catch { } } } } } return(props); }
public static GearLevelInfo CreateFromNode(Wz_Node node) { GearLevelInfo info = new GearLevelInfo(); foreach (Wz_Node child in node.Nodes) { if (child.Text == "exp") { info.Exp = child.GetValue(0); } else { string prefix; if (child.Text.EndsWith("Min") || child.Text.EndsWith("Max")) { prefix = child.Text.Substring(0, child.Text.Length - 3); } else { prefix = child.Text; } Range range; try { GearPropType propType = (GearPropType)Enum.Parse(typeof(GearPropType), prefix, true); info.BonusProps.TryGetValue(propType, out range); if (child.Text.EndsWith("Min")) { range.Min = child.GetValue(0); info.BonusProps[propType] = range; } else if (child.Text.EndsWith("Max")) { range.Max = child.GetValue(0); info.BonusProps[propType] = range; } else { range.Min = range.Max = child.GetValue(0); info.BonusProps[propType] = range; } } catch { } } } return(info); }
public static bool IsEpicPropType(GearPropType type) { switch (type) { case GearPropType.incPAD: case GearPropType.incMAD: case GearPropType.incSTR: case GearPropType.incDEX: case GearPropType.incINT: case GearPropType.incLUK: return(true); default: return(false); } }
public static bool IsV5SupportPropType(GearPropType type) { switch (type) { case GearPropType.incMDD: case GearPropType.incMDDr: case GearPropType.incACC: case GearPropType.incACCr: case GearPropType.incEVA: case GearPropType.incEVAr: return(false); default: return(true); } }
private static int GetPropTypeWeight(GearPropType type) { if ((int)type < 100) { switch (type) { case GearPropType.incMHP: case GearPropType.incMMP: case GearPropType.incACC: case GearPropType.incEVA: return(10); } return(1); } return(int.MaxValue); }
public string ConvertSummary() { if (string.IsNullOrEmpty(this.stringSummary)) { return(null); } List <string> types = new List <string>(this.props.Keys.Count); foreach (GearPropType k in this.props.Keys) { types.Add(k.ToString()); } types.Sort((a, b) => b.Length.CompareTo(a.Length)); string str = this.stringSummary; foreach (string s in types) { GearPropType t = (GearPropType)Enum.Parse(typeof(GearPropType), s); str = str.Replace("#" + s, this.props[t].ToString()); } return(str); }
public static GearSealedInfo CreateFromNode(Wz_Node node, GlobalFindNodeFunction findNode) { GearSealedInfo info = new GearSealedInfo(); foreach (Wz_Node child in node.Nodes) { switch (child.Text) { case "exp": info.Exp = child.GetValue(0); break; case "icon": info.Icon = BitmapOrigin.CreateFromNode(child, findNode); info.HasIcon = true; break; case "iconRaw": info.IconRaw = BitmapOrigin.CreateFromNode(child, findNode); info.HasIcon = true; break; default: try { GearPropType propType = (GearPropType)Enum.Parse(typeof(GearPropType), child.Text, true); info.BonusProps[propType] = child.GetValue(0); } finally { } break; } } return(info); }
public static string GetGearPropString(GearPropType propType, int value) { return(GetGearPropString(propType, value, 0)); }
/// <summary> /// 获取GearPropType所对应的文字说明。 /// </summary> /// <param Name="propType">表示装备属性枚举GearPropType。</param> /// <param Name="Value">表示propType属性所对应的值。</param> /// <returns></returns> public static string GetGearPropString(GearPropType propType, int value, int signFlag) { string sign; switch (signFlag) { default: case 0: //默认处理符号 sign = value > 0 ? "+" : null; break; case 1: //固定加号 sign = "+"; break; case 2: //无特别符号 sign = ""; break; } switch (propType) { case GearPropType.incSTR: return("力量 : " + sign + value); case GearPropType.incSTRr: return("力量 : " + sign + value + "%"); case GearPropType.incDEX: return("敏捷 : " + sign + value); case GearPropType.incDEXr: return("敏捷 : " + sign + value + "%"); case GearPropType.incINT: return("智力 : " + sign + value); case GearPropType.incINTr: return("智力 : " + sign + value + "%"); case GearPropType.incLUK: return("运气 : " + sign + value); case GearPropType.incLUKr: return("运气 : " + sign + value + "%"); case GearPropType.incAllStat: return("所有属性 : " + sign + value); case GearPropType.incMHP: return("最大HP : " + sign + value); case GearPropType.incMHPr: return("最大HP : " + sign + value + "%"); case GearPropType.incMMP: return("最大MP : " + sign + value); case GearPropType.incMMPr: return("最大MP : " + sign + value + "%"); case GearPropType.incMDF: return("MaxDF : " + sign + value); case GearPropType.incPAD: return("攻击力 : " + sign + value); case GearPropType.incPADr: return("攻击力 : " + sign + value + "%"); case GearPropType.incMAD: return("魔法力 : " + sign + value); case GearPropType.incMADr: return("魔法力 : " + sign + value + "%"); case GearPropType.incPDD: return("防御力 : " + sign + value); case GearPropType.incPDDr: return("物理防御力 : " + sign + value + "%"); case GearPropType.incMDD: return("魔法防御力 : " + sign + value); case GearPropType.incMDDr: return("魔法防御力 : " + sign + value + "%"); case GearPropType.incACC: return("命中值 : " + sign + value); case GearPropType.incACCr: return("命中值 : " + sign + value + "%"); case GearPropType.incEVA: return("回避值 : " + sign + value); case GearPropType.incEVAr: return("回避值 : " + sign + value + "%"); case GearPropType.incSpeed: return("移动速度 : " + sign + value); case GearPropType.incJump: return("跳跃力 : " + sign + value); case GearPropType.incCraft: return("手技 : " + sign + value); case GearPropType.damR: case GearPropType.incDAMr: return("总伤害 : " + sign + value + "%"); case GearPropType.incCr: return("爆击率 : " + sign + value + "%"); case GearPropType.knockback: return("直接攻击时" + value + "的比率发生后退现象。"); case GearPropType.incPVPDamage: return("大乱斗时追加攻击力" + sign + value); case GearPropType.incPQEXPr: return("组队任务经验值增加" + value + "%"); case GearPropType.incBDR: case GearPropType.bdR: return("攻击BOSS怪物时,伤害+" + value + "%"); case GearPropType.incIMDR: case GearPropType.imdR: return("无视怪物防御率:+" + value + "%"); case GearPropType.limitBreak: return("伤害上限突破至" + value + "。"); case GearPropType.reduceReq: return("装备等级降低:- " + value); case GearPropType.only: return(value == 0 ? null : "固有道具"); case GearPropType.tradeBlock: return(value == 0 ? null : "不可交换"); case GearPropType.equipTradeBlock: return(value == 0 ? null : "装备后无法交换"); case GearPropType.accountSharable: return(value == 0 ? null : "世界内只有我的角色之间可以移动"); case GearPropType.onlyEquip: return(value == 0 ? null : "固有装备物品"); case GearPropType.notExtend: return(value == 0 ? null : "无法延长有效时间。"); case GearPropType.tradeAvailable: switch (value) { case 1: return(" #c使用宿命剪刀,可以使物品交易1次。#"); case 2: return(" #c使用白金宿命剪刀,可以使物品交易1次。#"); default: return(null); } case GearPropType.accountShareTag: switch (value) { case 1: return(" #c使用物品共享牌,可以在同一账号内的角色间移动1次。#"); default: return(null); } case GearPropType.noPotential: return(value == 0 ? null : "无法设置潜能。"); case GearPropType.fixedPotential: return(value == 0 ? null : "无法重设潜能"); case GearPropType.superiorEqp: return(value == 0 ? null : "道具强化成功时,可以获得更高的效果。"); case GearPropType.nActivatedSocket: return(value == 0 ? null : "#c可以镶嵌星岩#"); case GearPropType.jokerToSetItem: return(value == 0 ? null : " #c当前装备3个以上的所有套装道具中包含的幸运物品!#"); case GearPropType.abilityTimeLimited: return(value == 0 ? null : "限期能力值"); case GearPropType.blockGoldHammer: return(value == 0 ? null : "无法使用黄金锤"); case GearPropType.incMHP_incMMP: return("最大HP/最大MP:" + sign + value); case GearPropType.incMHPr_incMMPr: return("最大HP/最大MP:" + sign + value + "%"); case GearPropType.incPAD_incMAD: return("攻击力/魔力:" + sign + value); case GearPropType.incPDD_incMDD: return("物理/魔法防御力:" + sign + value); case GearPropType.incACC_incEVA: return("命中值/回避值:" + sign + value); case GearPropType.incARC: return("ARC : " + sign + value); default: return(null); } }
private Bitmap renderBase(out int picHeight, out int iconY) { //绘制左侧部分 Bitmap leftPart = new Bitmap(252, DefaultPicHeight); Graphics g = Graphics.FromImage(leftPart); StringFormat format = new StringFormat(); int value; picHeight = 10; if (gear.Star > 0) //绘制星星 { if (gear.Star < 5) { for (int i = 0; i < gear.Star; i++) { g.DrawImage(Resource.ToolTip_Equip_Star_Star, 126 - gear.Star * 13 / 2 + 13 * i, picHeight); } picHeight += 18; } else { int star = gear.Star % 5, star2 = gear.Star / 5; int dx = 126 - (13 * star + 26 * star2) / 2; for (int i = 0; i < 1; i++, dx += 26) { g.DrawImage(Resource.ToolTip_Equip_Star_Star2, dx, picHeight); } for (int i = 0; i < star; i++, dx += 13) { g.DrawImage(Resource.ToolTip_Equip_Star_Star, dx, picHeight + 5); } for (int i = 1; i < star2; i++, dx += 26) { g.DrawImage(Resource.ToolTip_Equip_Star_Star2, dx, picHeight); } picHeight += 28; } } //装备标题 StringResult sr; if (StringLinker == null || !StringLinker.StringEqp.TryGetValue(gear.ItemID, out sr)) { sr = new StringResult(); sr.Name = "(null)"; } string gearName = sr.Name; string nameAdd = gear.ScrollUp > 0 ? ("+" + gear.ScrollUp) : null; switch (Gear.GetGender(gear.ItemID)) { case 0: nameAdd += "Male"; break; case 1: nameAdd += "Female"; break; } if (!string.IsNullOrEmpty(nameAdd)) { gearName += " (" + nameAdd + ")"; } format.Alignment = StringAlignment.Center; g.DrawString(gearName, GearGraphics.ItemNameFont, GearGraphics.GetGearNameBrush(gear.diff, gear.ScrollUp > 0), 124, picHeight, format);//绘制装备名称 picHeight += 19; //装备rank string rankStr; if (gear.GetBooleanValue(GearPropType.specialGrade)) { rankStr = ItemStringHelper.GetGearGradeString(GearGrade.Special); } else { rankStr = ItemStringHelper.GetGearGradeString(gear.Grade); } g.DrawString(rankStr, GearGraphics.ItemDetailFont, Brushes.White, 127, picHeight, format); picHeight += 21; //额外属性 for (int i = 0; i < 2; i++) { string attrStr = GetGearAttributeString(i); if (!string.IsNullOrEmpty(attrStr)) { g.DrawString(attrStr, GearGraphics.ItemDetailFont, GearGraphics.GearNameBrushC, 126, picHeight, format); picHeight += 19; } } //装备限时 if (gear.TimeLimited) { DateTime time = DateTime.Now.AddDays(7d); string expireStr = time.ToString("USABLE UNTIL M-d-yyyy AT H:m"); g.DrawString(expireStr, GearGraphics.ItemDetailFont, Brushes.White, 126, picHeight, format); picHeight += 16; } picHeight += 1; iconY = picHeight + 1; bool epic = gear.Epic; //绘制图标 if (gear.Icon.Bitmap != null) { g.DrawImage(GearGraphics.EnlargeBitmap(gear.Icon.Bitmap), 14 + (1 - gear.Icon.Origin.X) * 2, iconY + (33 - gear.Icon.Origin.Y) * 2); } if (gear.Cash) { g.DrawImage(GearGraphics.EnlargeBitmap(Resource.CashItem_0), 14 + 68 - 26, iconY + 68 - 26); } //绘制属性要求 drawGearReq(g, ref picHeight); //绘制装备等级 if (gear.Props.TryGetValue(GearPropType.level, out value)) { g.DrawImage(Resource.ToolTip_Equip_GrowthEnabled_itemLEV, 96, picHeight); GearGraphics.DrawGearGrowthNumber(g, 160, picHeight + 4, (value == -1) ? "m" : value.ToString(), true); picHeight += 12; g.DrawImage(Resource.ToolTip_Equip_GrowthEnabled_itemEXP, 96, picHeight); GearGraphics.DrawGearGrowthNumber(g, 160, picHeight + 4, (value == -1) ? "m" : "0%", true); } else { g.DrawImage(Resource.ToolTip_Equip_GrowthDisabled_itemLEV, 96, picHeight); g.DrawImage(Resource.ToolTip_Equip_GrowthDisabled_none, 160, picHeight + 4 + 3); picHeight += 12; g.DrawImage(Resource.ToolTip_Equip_GrowthDisabled_itemEXP, 96, picHeight); g.DrawImage(Resource.ToolTip_Equip_GrowthDisabled_none, 160, picHeight + 4 + 3); } picHeight += 12; if (gear.Props.TryGetValue(GearPropType.durability, out value)) { if (value > 100) { value = 100; } g.DrawImage(value > 0 ? Resource.ToolTip_Equip_Can_durability : Resource.ToolTip_Equip_Cannot_durability, 96, picHeight); GearGraphics.DrawGearDetailNumber(g, 173, picHeight, value.ToString() + "%", value > 0); } picHeight += 13; //绘制职业要求 int reqJob; gear.Props.TryGetValue(GearPropType.reqJob, out reqJob); g.DrawString("Common", GearGraphics.ItemDetailFont, reqJob > 0 ? Brushes.Red : Brushes.White, 10, picHeight); if (reqJob == 0) { reqJob = 0x1f; //0001 1111 } if (reqJob == -1) { reqJob = 0; //0000 0000 } g.DrawString("Warrior", GearGraphics.ItemDetailFont, (reqJob & 1) == 0 ? Brushes.Red : Brushes.White, 46, picHeight); g.DrawString("Magician", GearGraphics.ItemDetailFont, (reqJob & 2) == 0 ? Brushes.Red : Brushes.White, 82, picHeight); g.DrawString("Bowman", GearGraphics.ItemDetailFont, (reqJob & 4) == 0 ? Brushes.Red : Brushes.White, 130, picHeight); g.DrawString("Thief", GearGraphics.ItemDetailFont, (reqJob & 8) == 0 ? Brushes.Red : Brushes.White, 178, picHeight); g.DrawString("Pirate", GearGraphics.ItemDetailFont, (reqJob & 16) == 0 ? Brushes.Red : Brushes.White, 214, picHeight); picHeight += 19; //额外职业要求 string extraReq = ItemStringHelper.GetExtraJobReqString(gear.type) ?? (gear.Props.TryGetValue(GearPropType.reqSpecJob, out value) ? ItemStringHelper.GetExtraJobReqString(value) : null); if (!string.IsNullOrEmpty(extraReq)) { g.DrawString(extraReq, GearGraphics.ItemDetailFont, GearGraphics.GearNameBrushC, 124, picHeight, format); picHeight += 18; } //分割线1号 g.DrawLine(Pens.White, 6, picHeight, 245, picHeight); picHeight += 9; bool hasPart2 = false; //绘制属性 if (gear.Props.TryGetValue(GearPropType.superiorEqp, out value) && value > 0) { g.DrawString("Superior", GearGraphics.ItemNameFont, GearGraphics.SetItemNameBrush, 126, picHeight, format); picHeight += 18; } if (gear.Props.TryGetValue(GearPropType.limitBreak, out value) && value > 0) { g.DrawString("Max Damage: ", GearGraphics.ItemNameFont, GearGraphics.SetItemNameBrush, 126, picHeight, format); picHeight += 18; } bool isWeapon = Gear.IsLeftWeapon(gear.type) || Gear.IsDoubleHandWeapon(gear.type); string typeStr = ItemStringHelper.GetGearTypeString(gear.type); if (!string.IsNullOrEmpty(typeStr)) { g.DrawString("·", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString((isWeapon ? "Arms" : "Equipment") + "Type : " + typeStr, GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 16; hasPart2 = true; } if (gear.Props.TryGetValue(GearPropType.attackSpeed, out value)) { g.DrawString("·", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString("Attack Speed : " + ItemStringHelper.GetAttackSpeedString(value), GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 16; hasPart2 = true; } List <GearPropType> props = new List <GearPropType>(); foreach (KeyValuePair <GearPropType, int> p in gear.Props) { if ((int)p.Key < 100 && p.Value != 0) { props.Add(p.Key); } } props.Sort(); foreach (GearPropType type in props) { g.DrawString("·", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString(ItemStringHelper.GetGearPropString(type, gear.Props[type]), (epic && Gear.IsEpicPropType(type)) ? GearGraphics.EpicGearDetailFont : GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 16; hasPart2 = true; } bool hasTuc = gear.HasTuc && gear.Props.TryGetValue(GearPropType.tuc, out value); if (hasTuc) { g.DrawString("Remaining Enhancements : " + value, GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); picHeight += 16; hasPart2 = true; } if (gear.Props.TryGetValue(GearPropType.limitBreak, out value) && value > 0) { g.DrawString(ItemStringHelper.GetGearPropString(GearPropType.limitBreak, value), GearGraphics.ItemDetailFont, GearGraphics.SetItemNameBrush, 8, picHeight); picHeight += 16; hasPart2 = true; } if (hasTuc && gear.Hammer > -1) { if (gear.Hammer == 2) { g.DrawString("Hammers Applied: 2 (Max)", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); picHeight += 16; } if (gear.Props.TryGetValue(GearPropType.superiorEqp, out value) && value > 0) { g.DrawString(ItemStringHelper.GetGearPropString(GearPropType.superiorEqp, value), GearGraphics.ItemDetailFont, GearGraphics.SetItemNameBrush, 8, picHeight); picHeight += 16; } if (gear.Star > 0) { g.DrawString("Star Force: " + gear.Star + "Infused", GearGraphics.ItemDetailFont, GearGraphics.OrangeBrush, 8, picHeight); picHeight += 16; } picHeight += 2; g.DrawString("Hammers Applied: 0", GearGraphics.ItemDetailFont, GearGraphics.GoldHammerBrush, 8, picHeight); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.DrawString(": " + gear.Hammer.ToString() + (gear.Hammer == 2 ? "(MAX)" : null), GearGraphics.TahomaFont, GearGraphics.GoldHammerBrush, 140, picHeight - 2); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault; picHeight += 15; hasPart2 = true; } //分割线2号 if (hasPart2) { g.DrawLine(Pens.White, 6, picHeight, 245, picHeight); picHeight += 9; } //绘制潜能 int optionCount = 0; foreach (Potential potential in gear.Options) { if (potential != null) { g.DrawString("·", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString(potential.ConvertSummary(), GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 16; optionCount++; } } if (optionCount > 0) { picHeight += 4 * optionCount; } else if (gear.CanPotential) { GearGraphics.DrawString(g, "Potential. (Click on the magnifying glass button in the item window to unleash.)", GearGraphics.ItemDetailFont, 8, 236, ref picHeight, 16); picHeight += 4; } //绘制附加潜能 int adOptionCount = 0; foreach (Potential potential in gear.AdditionalOptions) { if (potential != null) { adOptionCount++; } } if (adOptionCount > 0) { //分割线3号 picHeight -= 3; g.DrawLine(Pens.White, 6, picHeight, 245, picHeight); g.DrawImage(GetAdditionalOptionIcon(gear.AdditionGrade), 8, picHeight + 1); g.DrawString("Potential", GearGraphics.ItemDetailFont, GearGraphics.SetItemNameBrush, 26, picHeight + 2); picHeight += 24; foreach (Potential potential in gear.AdditionalOptions) { if (potential != null) { g.DrawString("+", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString(potential.ConvertSummary(), GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 18; adOptionCount++; } } picHeight += 5; } //绘制desc if (!string.IsNullOrEmpty(sr.Desc)) { if (optionCount > 0) { picHeight -= 2; } picHeight -= 3; GearGraphics.DrawString(g, sr.Desc, GearGraphics.ItemDetailFont, 8, 236, ref picHeight, 16); picHeight += 5; } if (gear.Props.TryGetValue(GearPropType.tradeAvailable, out value) && value != 0) { g.DrawString(ItemStringHelper.GetGearPropString(GearPropType.tradeAvailable, value), GearGraphics.ItemDetailFont, GearGraphics.OrangeBrush, 14, picHeight - 5); picHeight += 16; } if (gear.Props.TryGetValue(GearPropType.accountShareTag, out value) && value != 0) { GearGraphics.DrawString(g, " #c" + ItemStringHelper.GetGearPropString(GearPropType.accountShareTag, 1) + "#", GearGraphics.ItemDetailFont, 8, 236, ref picHeight, 16); picHeight += 16; } //绘制倾向 if (gear.State == GearState.itemList) { string incline = null; GearPropType[] inclineTypes = new GearPropType[] { GearPropType.charismaEXP, GearPropType.senseEXP, GearPropType.insightEXP, GearPropType.willEXP, GearPropType.craftEXP, GearPropType.charmEXP }; string[] inclineString = new string[] { " Ambition", " Empathy", " Insight", " Willpower", " Diligence", " Charm" }; for (int i = 0; i < inclineTypes.Length; i++) { if (gear.Props.TryGetValue(inclineTypes[i], out value) && value > 0) { incline += "," + value + inclineString[i]; } } if (!string.IsNullOrEmpty(incline)) { picHeight -= 5; GearGraphics.DrawString(g, "#cGrants " + incline.Substring(1) + " EXP when first equipped (up to the daily maximum).#", GearGraphics.ItemDetailFont, 8, 236, ref picHeight, 16); picHeight += 8; } } format.Dispose(); g.Dispose(); return(leftPart); }
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); }
private void addProp(GearPropType type, int value) { switch (type) { case GearPropType.incSTR: status.Strength.GearAdd += value; break; case GearPropType.incSTRr: status.Strength.Rate += value; break; case GearPropType.incDEX: status.Dexterity.GearAdd += value; break; case GearPropType.incDEXr: status.Dexterity.Rate += value; break; case GearPropType.incINT: status.Intelligence.GearAdd += value; break; case GearPropType.incINTr: status.Intelligence.Rate += value; break; case GearPropType.incLUK: status.Luck.GearAdd += value; break; case GearPropType.incLUKr: status.Luck.Rate += value; break; case GearPropType.incAllStat: status.Strength.GearAdd += value; status.Dexterity.GearAdd += value; status.Intelligence.GearAdd += value; status.Luck.GearAdd += value; break; case GearPropType.incPAD: status.PADamage.GearAdd += value; break; case GearPropType.incPADr: status.PADamage.Rate += value; break; case GearPropType.incPDD: status.PDDamage.GearAdd += value; break; case GearPropType.incPDDr: status.PDDamage.Rate += value; break; case GearPropType.incMAD: status.MADamage.GearAdd += value; break; case GearPropType.incMADr: status.MADamage.Rate += value; break; case GearPropType.incMDD: status.MDDamage.GearAdd += value; break; case GearPropType.incMDDr: status.MDDamage.Rate += value; break; case GearPropType.incACC: status.PAccurate.GearAdd += value; status.MAccurate.GearAdd += value; break; case GearPropType.incACCr: status.PAccurate.Rate += value; status.MAccurate.Rate += value; break; case GearPropType.incEVA: status.PEvasion.GearAdd += value; status.MEvasion.GearAdd += value; break; case GearPropType.incEVAr: status.PEvasion.Rate += value; status.MEvasion.Rate += value; break; case GearPropType.incCr: status.CriticalRate.GearAdd += value; break; case GearPropType.incMHP: status.MaxHP.GearAdd += value; break; case GearPropType.incMHPr: status.MaxHP.Rate += value; break; case GearPropType.incMMP: status.MaxMP.GearAdd += value; break; case GearPropType.incMMPr: status.MaxMP.Rate += value; break; case GearPropType.incSpeed: status.MoveSpeed.GearAdd += value; break; case GearPropType.incJump: status.Jump.GearAdd += value; break; //case GearPropType.incCriticaldamageMax: status.CriticalDamageMax.GearAdd += value; break; //case GearPropType.incCriticaldamageMin: status.CriticalDamageMin.GearAdd += value; break; case GearPropType.incCriticaldamage: status.CriticalDamage.GearAdd += value; break; } }
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 static Gear CreateFromNode(Wz_Node node, GlobalFindNodeFunction findNode) { int gearID; Match m = Regex.Match(node.Text, @"^(\d{8})\.img$"); if (!(m.Success && Int32.TryParse(m.Result("$1"), out gearID))) { return(null); } Gear gear = new Gear(); gear.ItemID = gearID; gear.type = Gear.GetGearType(gear.ItemID); Wz_Node infoNode = node.FindNodeByPath("info"); if (infoNode != null) { foreach (Wz_Node subNode in infoNode.Nodes) { switch (subNode.Text) { case "icon": if (subNode.Value is Wz_Png) { gear.Icon = BitmapOrigin.CreateFromNode(subNode, findNode); } break; case "iconRaw": if (subNode.Value is Wz_Png) { gear.IconRaw = BitmapOrigin.CreateFromNode(subNode, findNode); } break; case "sample": if (subNode.Value is Wz_Png) { gear.Sample = BitmapOrigin.CreateFromNode(subNode, findNode); } break; case "addition": //附加属性信息 foreach (Wz_Node addiNode in subNode.Nodes) { Addition addi = Addition.CreateFromNode(addiNode); if (addi != null) { gear.Additions.Add(addi); } } gear.Additions.Sort((add1, add2) => (int)add1.Type - (int)add2.Type); break; case "option": //附加潜能信息 Wz_Node itemWz = findNode != null?findNode("Item\\ItemOption.img") : null; if (itemWz == null) { break; } int optIdx = 0; foreach (Wz_Node optNode in subNode.Nodes) { int optId = 0, optLevel = 0; foreach (Wz_Node optArgNode in optNode.Nodes) { switch (optArgNode.Text) { case "option": optId = Convert.ToInt32(optArgNode.Value); break; case "level": optLevel = Convert.ToInt32(optArgNode.Value); break; } } Potential opt = Potential.CreateFromNode(itemWz.FindNodeByPath(optId.ToString("d6")), optLevel); if (opt != null) { gear.Options[optIdx++] = opt; } } break; case "level": //可升级信息 if (subNode.Nodes["fixLevel"].GetValueEx <int>(0) != 0) { gear.FixLevel = true; } Wz_Node levelInfo = subNode.Nodes["info"]; gear.Levels = new List <GearLevelInfo>(); if (levelInfo != null) { for (int i = 1; ; i++) { Wz_Node levelInfoNode = levelInfo.Nodes[i.ToString()]; if (levelInfoNode != null) { GearLevelInfo info = GearLevelInfo.CreateFromNode(levelInfoNode); int lv; Int32.TryParse(levelInfoNode.Text, out lv); info.Level = lv; gear.Levels.Add(info); } else { break; } } } Wz_Node levelCase = subNode.Nodes["case"]; if (levelCase != null) { int probTotal = 0; foreach (Wz_Node caseNode in levelCase.Nodes) { int prob = caseNode.Nodes["prob"].GetValueEx(0); probTotal += prob; for (int i = 0; i < gear.Levels.Count; i++) { GearLevelInfo info = gear.Levels[i]; Wz_Node caseLevel = caseNode.Nodes[info.Level.ToString()]; if (caseLevel != null) { //desc Wz_Node caseHS = caseLevel.Nodes["hs"]; if (caseHS != null) { info.HS = caseHS.GetValue <string>(); } //随机技能 Wz_Node caseSkill = caseLevel.Nodes["Skill"]; if (caseSkill != null) { foreach (Wz_Node skillNode in caseSkill.Nodes) { int id = skillNode.Nodes["id"].GetValueEx(-1); int level = skillNode.Nodes["level"].GetValueEx(-1); if (id >= 0 && level >= 0) { info.Skills[id] = level; } } } //装备技能 Wz_Node equipSkill = caseLevel.Nodes["EquipmentSkill"]; if (equipSkill != null) { foreach (Wz_Node skillNode in equipSkill.Nodes) { int id = skillNode.Nodes["id"].GetValueEx(-1); int level = skillNode.Nodes["level"].GetValueEx(-1); if (id >= 0 && level >= 0) { info.EquipmentSkills[id] = level; } } } info.Prob = prob; } } } foreach (var info in gear.Levels) { info.ProbTotal = probTotal; } } gear.Props.Add(GearPropType.level, 1); break; case "sealed": //封印解除信息 Wz_Node sealedInfo = subNode.Nodes["info"]; gear.Seals = new List <GearSealedInfo>(); if (sealedInfo != null) { foreach (Wz_Node levelInfoNode in sealedInfo.Nodes) { GearSealedInfo info = GearSealedInfo.CreateFromNode(levelInfoNode, findNode); int lv; Int32.TryParse(levelInfoNode.Text, out lv); info.Level = lv; gear.Seals.Add(info); } } gear.Props.Add(GearPropType.@sealed, 1); break; case "variableStat": //升级奖励属性 foreach (Wz_Node statNode in subNode.Nodes) { GearPropType type; if (Enum.TryParse(statNode.Text, out type)) { try { gear.VariableStat.Add(type, Convert.ToSingle(statNode.Value)); } finally { } } } break; case "abilityTimeLimited": //限时属性 foreach (Wz_Node statNode in subNode.Nodes) { GearPropType type; if (Enum.TryParse(statNode.Text, out type)) { try { gear.AbilityTimeLimited.Add(type, Convert.ToInt32(statNode.Value)); } finally { } } } break; default: { GearPropType type; if (!int.TryParse(subNode.Text, out _) && Enum.TryParse(subNode.Text, out type)) { try { gear.Props.Add(type, Convert.ToInt32(subNode.Value)); } finally { } } } break; } } } int value; //读取默认可升级状态 if (gear.Props.TryGetValue(GearPropType.tuc, out value) && value > 0) { gear.HasTuc = true; gear.CanPotential = true; } else if (Gear.SpecialCanPotential(gear.type)) { gear.CanPotential = true; } //读取默认gearGrade if (gear.Props.TryGetValue(GearPropType.fixedGrade, out value)) { gear.Grade = (GearGrade)(value - 1); } //自动填充Grade if (gear.Options.Any(opt => opt != null) && gear.Grade == GearGrade.C) { gear.Grade = GearGrade.B; } //添加默认装备要求 GearPropType[] types = new GearPropType[] { GearPropType.reqJob, GearPropType.reqLevel, GearPropType.reqSTR, GearPropType.reqDEX, GearPropType.reqINT, GearPropType.reqLUK }; foreach (GearPropType type in types) { if (!gear.Props.ContainsKey(type)) { gear.Props.Add(type, 0); } } //修复恶魔盾牌特殊属性 if (gear.type == GearType.demonShield) { if (gear.Props.TryGetValue(GearPropType.incMMP, out value)) { gear.Props.Remove(GearPropType.incMMP); gear.Props.Add(GearPropType.incMDF, value); } } //备份标准属性 gear.StandardProps = new Dictionary <GearPropType, int>(gear.Props); //追加限时属性 gear.MakeTimeLimitedPropAvailable(); return(gear); }
/// <summary> /// 获取GearPropType所对应的文字说明。 /// </summary> /// <param Name="propType">表示装备属性枚举GearPropType。</param> /// <param Name="Value">表示propType属性所对应的值。</param> /// <returns></returns> public static string GetGearPropString(GearPropType propType, int value, int signFlag) { string sign; switch (signFlag) { default: case 0: //默认处理符号 sign = value > 0 ? "+" : null; break; case 1: //固定加号 sign = "+"; break; case 2: //无特别符号 sign = ""; break; } switch (propType) { case GearPropType.incSTR: return("STR : " + sign + value); case GearPropType.incSTRr: return("STR : " + sign + value + "%"); case GearPropType.incDEX: return("DEX : " + sign + value); case GearPropType.incDEXr: return("DEX : " + sign + value + "%"); case GearPropType.incINT: return("INT : " + sign + value); case GearPropType.incINTr: return("INT : " + sign + value + "%"); case GearPropType.incLUK: return("LUK : " + sign + value); case GearPropType.incLUKr: return("LUK : " + sign + value + "%"); case GearPropType.incAllStat: return("All Stat: " + sign + value); // case GearPropType.statR: return "All Stat: " + sign + value + "%"; case GearPropType.incMHP: return("HP : " + sign + value); case GearPropType.incMHPr: return("HP : " + sign + value + "%"); case GearPropType.incMMP: return("MP : " + sign + value); case GearPropType.incMMPr: return("MP : " + sign + value + "%"); case GearPropType.incMDF: return("MaxDF : " + sign + value); case GearPropType.incPAD: return("Attack : " + sign + value); case GearPropType.incPADr: return("Attack : " + sign + value + "%"); case GearPropType.incMAD: return("MAtt : " + sign + value); case GearPropType.incMADr: return("MAtt : " + sign + value + "%"); case GearPropType.incPDD: return("Armor : " + sign + value); case GearPropType.incPDDr: return("Armor : " + sign + value + "%"); case GearPropType.incMDD: return("Magic Defence: " + sign + value); case GearPropType.incMDDr: return("Magic Defence: " + sign + value + "%"); case GearPropType.incACC: return("Accuracy: " + sign + value); case GearPropType.incACCr: return("Accuracy: " + sign + value + "%"); case GearPropType.incEVA: return("Avoid: " + sign + value); case GearPropType.incEVAr: return("Avoid: " + sign + value + "%"); case GearPropType.incSpeed: return("Speed : " + sign + value); case GearPropType.incJump: return("Jump : " + sign + value); case GearPropType.incCraft: return("Diligence : " + sign + value); case GearPropType.damR: case GearPropType.incDAMr: return("DMG : " + sign + value + "%"); case GearPropType.incCr: return("Crit Chance : " + sign + value + "%"); case GearPropType.knockback: return("Knockback chance reduced by " + value + "%"); case GearPropType.incPVPDamage: return("PVP Attack " + sign + " " + value); case GearPropType.incPQEXPr: return("Party Quest XP " + value + "% 증가"); case GearPropType.incEXPr: return("Increased XP " + value + "%"); case GearPropType.incBDR: case GearPropType.bdR: return("Boss Damage +" + value + "%"); case GearPropType.incIMDR: case GearPropType.imdR: return("IED: +" + value + "%"); case GearPropType.limitBreak: return("최대 데미지 제한 증가 : +" + value); case GearPropType.reduceReq: return("Reduced Level Req: - " + value); case GearPropType.nbdR: return("Damage to Normal Monsters: +" + value + "%"); case GearPropType.only: return(value == 0 ? null : "Unique Equipped"); case GearPropType.tradeBlock: return(value == 0 ? null : "Untradable"); case GearPropType.equipTradeBlock: return(value == 0 ? null : "Untradable Once Equipped"); case GearPropType.accountSharable: return(value == 0 ? null : "Tradable within Account"); case GearPropType.sharableOnce: return(value == 0 ? null : "Can be moved once within Account"); case GearPropType.onlyEquip: return(value == 0 ? null : "Unique Equipped"); case GearPropType.notExtend: return(value == 0 ? null : "Cannot extend time limit"); case GearPropType.tradeAvailable: switch (value) { case 1: return("#cYou can use Karma's Scissors or Silver Karma's Scissors to make one exchange possible..#"); case 2: return("#cPlatinum Karma's Scissors can be used to enable one exchange.#"); default: return(null); } case GearPropType.accountShareTag: switch (value) { case 1: return(" #cCan be moved once within account by using a share name tag。#"); default: return(null); } case GearPropType.noPotential: return(value == 0 ? null : "Cannot have potential"); case GearPropType.fixedPotential: return(value == 0 ? null : "Fixed Potential"); case GearPropType.superiorEqp: return(value == 0 ? null : "아이템 강화 성공시 더욱 높은 효과를 받을 수 있습니다."); case GearPropType.nActivatedSocket: return(value == 0 ? null : "#c可以镶嵌星岩#"); case GearPropType.jokerToSetItem: return(value == 0 ? null : "#c3개 이상 착용하고 있는 모든 세트 아이템에 포함되는 럭키 아이템!#"); case GearPropType.abilityTimeLimited: return(value == 0 ? null : "Temporary Stats"); case GearPropType.blockGoldHammer: return(value == 0 ? null : "Cannot be Golden Hammered"); case GearPropType.cantRepair: return(value == 0 ? null : "Cannot Repair"); case GearPropType.colorvar: return(value == 0 ? null : "#cThis equipements color can be changed with dye.#"); case GearPropType.incMHP_incMMP: return("Max HP / Max MP : " + sign + value); case GearPropType.incMHPr_incMMPr: return("Max HP / Max MP : " + sign + value + "%"); case GearPropType.incPAD_incMAD: case GearPropType.incAD: return("ATT / MATT : " + sign + value); case GearPropType.incPDD_incMDD: return("PDD: " + sign + value); case GearPropType.incACC_incEVA: return("ACC / EVA:" + sign + value); case GearPropType.incARC: return("ARC: " + sign + value); case GearPropType.incAUT: return("AUT: " + sign + value); default: return(null); } }
private Bitmap renderBase(out int picHeight, out int iconY) { //绘制左侧部分 Bitmap leftPart = new Bitmap(252, DefaultPicHeight); Graphics g = Graphics.FromImage(leftPart); StringFormat format = new StringFormat(); int value; picHeight = 10; if (gear.Star > 0) //绘制星星 { if (gear.Star < 5) { for (int i = 0; i < gear.Star; i++) { g.DrawImage(Resource.ToolTip_Equip_Star_Star, 126 - gear.Star * 13 / 2 + 13 * i, picHeight); } picHeight += 18; } else { int star = gear.Star % 5, star2 = gear.Star / 5; int dx = 126 - (13 * star + 26 * star2) / 2; for (int i = 0; i < 1; i++, dx += 26) { g.DrawImage(Resource.ToolTip_Equip_Star_Star2, dx, picHeight); } for (int i = 0; i < star; i++, dx += 13) { g.DrawImage(Resource.ToolTip_Equip_Star_Star, dx, picHeight + 5); } for (int i = 1; i < star2; i++, dx += 26) { g.DrawImage(Resource.ToolTip_Equip_Star_Star2, dx, picHeight); } picHeight += 28; } } //装备标题 StringResult sr; if (StringLinker == null || !StringLinker.StringEqp.TryGetValue(gear.ItemID, out sr)) { sr = new StringResult(); sr.Name = "(null)"; } string gearName = sr.Name; string nameAdd = gear.ScrollUp > 0 ? ("+" + gear.ScrollUp) : null; switch (Gear.GetGender(gear.ItemID)) { case 0: nameAdd += "男"; break; case 1: nameAdd += "女"; break; } if (!string.IsNullOrEmpty(nameAdd)) { gearName += " (" + nameAdd + ")"; } format.Alignment = StringAlignment.Center; g.DrawString(gearName, GearGraphics.ItemNameFont, GearGraphics.GetGearNameBrush(gear.diff, gear.ScrollUp > 0), 124, picHeight, format);//绘制装备名称 picHeight += 19; //装备rank string rankStr; if (gear.GetBooleanValue(GearPropType.specialGrade)) { rankStr = ItemStringHelper.GetGearGradeString(GearGrade.Special); } else { rankStr = ItemStringHelper.GetGearGradeString(gear.Grade); } g.DrawString(rankStr, GearGraphics.ItemDetailFont, Brushes.White, 127, picHeight, format); picHeight += 21; //额外属性 for (int i = 0; i < 2; i++) { string attrStr = GetGearAttributeString(i); if (!string.IsNullOrEmpty(attrStr)) { g.DrawString(attrStr, GearGraphics.ItemDetailFont, GearGraphics.GearNameBrushC, 126, picHeight, format); picHeight += 19; } } //装备限时 if (gear.TimeLimited) { DateTime time = DateTime.Now.AddDays(7d); string expireStr = time.ToString("到yyyy年 M月 d日 H时 m分可以用"); g.DrawString(expireStr, GearGraphics.ItemDetailFont, Brushes.White, 126, picHeight, format); picHeight += 16; } picHeight += 1; iconY = picHeight + 1; bool epic = gear.Epic; //绘制图标 if (gear.Icon.Bitmap != null) { g.DrawImage(GearGraphics.EnlargeBitmap(gear.Icon.Bitmap), 14 + (1 - gear.Icon.Origin.X) * 2, iconY + (33 - gear.Icon.Origin.Y) * 2); } if (gear.Cash) { g.DrawImage(GearGraphics.EnlargeBitmap(Resource.CashItem_0), 14 + 68 - 26, iconY + 68 - 26); } //绘制属性要求 drawGearReq(g, ref picHeight); //绘制装备等级 if (gear.Props.TryGetValue(GearPropType.level, out value)) { g.DrawImage(Resource.ToolTip_Equip_GrowthEnabled_itemLEV, 96, picHeight); GearGraphics.DrawGearGrowthNumber(g, 160, picHeight + 4, (value == -1) ? "m" : value.ToString(), true); picHeight += 12; g.DrawImage(Resource.ToolTip_Equip_GrowthEnabled_itemEXP, 96, picHeight); GearGraphics.DrawGearGrowthNumber(g, 160, picHeight + 4, (value == -1) ? "m" : "0%", true); } else { g.DrawImage(Resource.ToolTip_Equip_GrowthDisabled_itemLEV, 96, picHeight); g.DrawImage(Resource.ToolTip_Equip_GrowthDisabled_none, 160, picHeight + 4 + 3); picHeight += 12; g.DrawImage(Resource.ToolTip_Equip_GrowthDisabled_itemEXP, 96, picHeight); g.DrawImage(Resource.ToolTip_Equip_GrowthDisabled_none, 160, picHeight + 4 + 3); } picHeight += 12; if (gear.Props.TryGetValue(GearPropType.durability, out value)) { if (value > 100) { value = 100; } g.DrawImage(value > 0 ? Resource.ToolTip_Equip_Can_durability : Resource.ToolTip_Equip_Cannot_durability, 96, picHeight); GearGraphics.DrawGearDetailNumber(g, 173, picHeight, value.ToString() + "%", value > 0); } picHeight += 13; //绘制职业要求 int reqJob; gear.Props.TryGetValue(GearPropType.reqJob, out reqJob); g.DrawString("新手", GearGraphics.ItemDetailFont, reqJob > 0 ? Brushes.Red : Brushes.White, 10, picHeight); if (reqJob == 0) { reqJob = 0x1f; //0001 1111 } if (reqJob == -1) { reqJob = 0; //0000 0000 } g.DrawString("战士", GearGraphics.ItemDetailFont, (reqJob & 1) == 0 ? Brushes.Red : Brushes.White, 46, picHeight); g.DrawString("魔法师", GearGraphics.ItemDetailFont, (reqJob & 2) == 0 ? Brushes.Red : Brushes.White, 82, picHeight); g.DrawString("弓箭手", GearGraphics.ItemDetailFont, (reqJob & 4) == 0 ? Brushes.Red : Brushes.White, 130, picHeight); g.DrawString("飞侠", GearGraphics.ItemDetailFont, (reqJob & 8) == 0 ? Brushes.Red : Brushes.White, 178, picHeight); g.DrawString("海盗", GearGraphics.ItemDetailFont, (reqJob & 16) == 0 ? Brushes.Red : Brushes.White, 214, picHeight); picHeight += 19; //额外职业要求 string extraReq = ItemStringHelper.GetExtraJobReqString(gear.type) ?? (gear.Props.TryGetValue(GearPropType.reqSpecJob, out value) ? ItemStringHelper.GetExtraJobReqString(value) : null); if (!string.IsNullOrEmpty(extraReq)) { g.DrawString(extraReq, GearGraphics.ItemDetailFont, GearGraphics.GearNameBrushC, 124, picHeight, format); picHeight += 18; } //分割线1号 g.DrawLine(Pens.White, 6, picHeight, 245, picHeight); picHeight += 9; bool hasPart2 = false; //绘制属性 if (gear.Props.TryGetValue(GearPropType.superiorEqp, out value) && value > 0) { g.DrawString("极真", GearGraphics.ItemNameFont, GearGraphics.SetItemNameBrush, 126, picHeight, format); picHeight += 18; } if (gear.Props.TryGetValue(GearPropType.limitBreak, out value) && value > 0) { g.DrawString("突破极限", GearGraphics.ItemNameFont, GearGraphics.SetItemNameBrush, 126, picHeight, format); picHeight += 18; } bool isWeapon = Gear.IsLeftWeapon(gear.type) || Gear.IsDoubleHandWeapon(gear.type); string typeStr = ItemStringHelper.GetGearTypeString(gear.type); if (!string.IsNullOrEmpty(typeStr)) { g.DrawString("·", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString((isWeapon ? "武器" : "装备") + "分类 : " + typeStr, GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 16; hasPart2 = true; } if (gear.Props.TryGetValue(GearPropType.attackSpeed, out value)) { g.DrawString("·", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString("攻击速度 : " + ItemStringHelper.GetAttackSpeedString(value), GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 16; hasPart2 = true; } List <GearPropType> props = new List <GearPropType>(); foreach (KeyValuePair <GearPropType, int> p in gear.Props) { if ((int)p.Key < 100 && p.Value != 0) { props.Add(p.Key); } } props.Sort(); foreach (GearPropType type in props) { g.DrawString("·", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString(ItemStringHelper.GetGearPropString(type, gear.Props[type]), (epic && Gear.IsEpicPropType(type)) ? GearGraphics.EpicGearDetailFont : GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 16; hasPart2 = true; } bool hasTuc = gear.HasTuc && gear.Props.TryGetValue(GearPropType.tuc, out value); if (hasTuc) { g.DrawString("·可升级次数 : " + value + "回", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); picHeight += 16; hasPart2 = true; } if (gear.Props.TryGetValue(GearPropType.limitBreak, out value) && value > 0) { g.DrawString(ItemStringHelper.GetGearPropString(GearPropType.limitBreak, value), GearGraphics.ItemDetailFont, GearGraphics.SetItemNameBrush, 8, picHeight); picHeight += 16; hasPart2 = true; } if (hasTuc && gear.Hammer > -1) { if (gear.Hammer == 2) { g.DrawString("黄金锤提炼完成", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); picHeight += 16; } if (gear.Props.TryGetValue(GearPropType.superiorEqp, out value) && value > 0) { g.DrawString(ItemStringHelper.GetGearPropString(GearPropType.superiorEqp, value), GearGraphics.ItemDetailFont, GearGraphics.SetItemNameBrush, 8, picHeight); picHeight += 16; } if (gear.Star > 0) { g.DrawString("·应用" + gear.Star + "星强化", GearGraphics.ItemDetailFont, GearGraphics.OrangeBrush, 8, picHeight); picHeight += 16; } picHeight += 2; g.DrawString("金锤子已提高的强化次数", GearGraphics.ItemDetailFont, GearGraphics.GoldHammerBrush, 8, picHeight); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; g.DrawString(": " + gear.Hammer.ToString() + (gear.Hammer == 2 ? "(MAX)" : null), GearGraphics.TahomaFont, GearGraphics.GoldHammerBrush, 140, picHeight - 2); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SystemDefault; picHeight += 14; hasPart2 = true; } //分割线2号 if (hasPart2) { g.DrawLine(Pens.White, 6, picHeight, 245, picHeight); picHeight += 9; } //绘制潜能 int optionCount = 0; foreach (Potential potential in gear.Options) { if (potential != null) { g.DrawString("·", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString(potential.ConvertSummary(), GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 16; optionCount++; } } if (optionCount > 0) { picHeight += 4 * optionCount; } else if (gear.CanPotential) { GearGraphics.DrawString(g, " #c潜能卷轴# 可增加 #cC级物品# 潜力,但需鉴定。\n #c放大镜# 可解除 #c未鉴定物品# 潜能的封印。", GearGraphics.ItemDetailFont, 8, 236, ref picHeight, 16); picHeight += 4; } //绘制附加潜能 int adOptionCount = 0; foreach (Potential potential in gear.AdditionalOptions) { if (potential != null) { adOptionCount++; } } if (adOptionCount > 0) { //分割线3号 picHeight -= 3; g.DrawLine(Pens.White, 6, picHeight, 245, picHeight); g.DrawImage(GetAdditionalOptionIcon(gear.AdditionGrade), 8, picHeight + 1); g.DrawString("附加潜能", GearGraphics.ItemDetailFont, GearGraphics.SetItemNameBrush, 26, picHeight + 2); picHeight += 24; foreach (Potential potential in gear.AdditionalOptions) { if (potential != null) { g.DrawString("+", GearGraphics.ItemDetailFont, Brushes.White, 8, picHeight); g.DrawString(potential.ConvertSummary(), GearGraphics.ItemDetailFont, Brushes.White, 20, picHeight); picHeight += 18; adOptionCount++; } } picHeight += 5; } //绘制desc if (!string.IsNullOrEmpty(sr.Desc)) { if (optionCount > 0) { picHeight -= 2; } picHeight -= 3; GearGraphics.DrawString(g, sr.Desc, GearGraphics.ItemDetailFont, 8, 236, ref picHeight, 16); picHeight += 5; } if (gear.Props.TryGetValue(GearPropType.tradeAvailable, out value) && value != 0) { g.DrawString(ItemStringHelper.GetGearPropString(GearPropType.tradeAvailable, value), GearGraphics.ItemDetailFont, GearGraphics.OrangeBrush, 14, picHeight - 5); picHeight += 16; } if (gear.Props.TryGetValue(GearPropType.accountShareTag, out value) && value != 0) { GearGraphics.DrawString(g, " #c" + ItemStringHelper.GetGearPropString(GearPropType.accountShareTag, 1) + "#", GearGraphics.ItemDetailFont, 8, 236, ref picHeight, 16); picHeight += 16; } //绘制倾向 if (gear.State == GearState.itemList) { string incline = null; GearPropType[] inclineTypes = new GearPropType[] { GearPropType.charismaEXP, GearPropType.senseEXP, GearPropType.insightEXP, GearPropType.willEXP, GearPropType.craftEXP, GearPropType.charmEXP }; string[] inclineString = new string[] { "领导力", "感性", "洞察力", "意志", "手技", "魅力" }; for (int i = 0; i < inclineTypes.Length; i++) { if (gear.Props.TryGetValue(inclineTypes[i], out value) && value > 0) { incline += "," + inclineString[i] + value; } } if (!string.IsNullOrEmpty(incline)) { picHeight -= 5; GearGraphics.DrawString(g, "\n #c装备时可以获得" + incline.Substring(1) + "的经验值,仅限1次。#", GearGraphics.ItemDetailFont, 8, 236, ref picHeight, 16); picHeight += 8; } } format.Dispose(); g.Dispose(); return(leftPart); }
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); }
/// <summary> /// 获取GearPropType所对应的文字说明。 /// </summary> /// <param Name="propType">表示装备属性枚举GearPropType。</param> /// <param Name="Value">表示propType属性所对应的值。</param> /// <returns></returns> public static string GetGearPropString(GearPropType propType, int value, int signFlag) { string sign; switch (signFlag) { default: case 0: //默认处理符号 sign = value > 0 ? "+" : null; break; case 1: //固定加号 sign = "+"; break; case 2: //无特别符号 sign = ""; break; } switch (propType) { case GearPropType.incSTR: return("STR : " + sign + value); case GearPropType.incSTRr: return("STR : " + sign + value + "%"); case GearPropType.incDEX: return("DEX : " + sign + value); case GearPropType.incDEXr: return("DEX : " + sign + value + "%"); case GearPropType.incINT: return("INT : " + sign + value); case GearPropType.incINTr: return("INT : " + sign + value + "%"); case GearPropType.incLUK: return("LUK : " + sign + value); case GearPropType.incLUKr: return("LUK : " + sign + value + "%"); case GearPropType.incAllStat: return("All Stats : " + sign + value); case GearPropType.incMHP: return("MaxHP : " + sign + value); case GearPropType.incMHPr: return("MaxHP : " + sign + value + "%"); case GearPropType.incMMP: return("MaxMP : " + sign + value); case GearPropType.incMMPr: return("MaxMP : " + sign + value + "%"); case GearPropType.incMDF: return("MaxDF : " + sign + value); case GearPropType.incPAD: return("Attack Power: " + sign + value); case GearPropType.incPADr: return("Attack Power: " + sign + value + "%"); case GearPropType.incMAD: return("Magic Attack: " + sign + value); case GearPropType.incMADr: return("Magic Attack: " + sign + value + "%"); case GearPropType.incPDD: return("Defense : " + sign + value); case GearPropType.incPDDr: return("Defense : " + sign + value + "%"); case GearPropType.incSpeed: return("Speed: " + sign + value); case GearPropType.incJump: return("Jump: " + sign + value); case GearPropType.incCraft: return("Diligence: " + sign + value); case GearPropType.damR: case GearPropType.incDAMr: return("Damage: " + sign + value + "%"); case GearPropType.incCr: return("Critical Rate: " + sign + value + "%"); case GearPropType.incCDr: return("Critical Damage: " + sign + value + "%"); case GearPropType.knockback: return("Knockback Chance: " + value + "%"); case GearPropType.incPQEXPr: return("Party Quest EXP: +" + value + "%"); case GearPropType.incEXPr: return("EXP: " + value + "%"); case GearPropType.incBDR: case GearPropType.bdR: return("Boss Damage: +" + value + "%"); case GearPropType.incIMDR: case GearPropType.imdR: return("Ignored Enemy DEF: +" + value + "%"); case GearPropType.limitBreak: return("Max Damage: " + value); case GearPropType.reduceReq: return("Required Level: -" + value); case GearPropType.nbdR: return("Damage Against Normal Monsters: +" + value + "%"); case GearPropType.only: return(value == 0 ? null : "One-of-a-kind item"); case GearPropType.tradeBlock: return(value == 0 ? null : "Untradable"); case GearPropType.equipTradeBlock: return(value == 0 ? null : "Cannot be Traded when equipped"); case GearPropType.accountSharable: return(value == 0 ? null : "Account-bound. Transferable within world."); case GearPropType.sharableOnce: return(value == 0 ? null : "Tradable once within the same world.\n(Cannot be traded after transfer)"); case GearPropType.blockGoldHammer: return(value == 0 ? null : "Golden Hammer cannot be used."); case GearPropType.onlyEquip: return(value == 0 ? null : "Unique Equipped Item"); case GearPropType.notExtend: return(value == 0 ? null : "Duration cannot be extended."); case GearPropType.tradeAvailable: switch (value) { case 1: return("#cUse the Scissors of Karma to enable this item to be traded one time.#"); case 2: return("#cUse the Platinum Scissors of Karma to enable this item to be traded one time.#"); default: return(null); } case GearPropType.accountShareTag: switch (value) { case 1: return("#cUse the Sharing Tag to move an item to another character on the same account once.#"); default: return(null); } case GearPropType.noPotential: return(value == 0 ? null : "This item cannot gain Potential."); case GearPropType.fixedPotential: return(value == 0 ? null : "Potential Reset Not Allowed"); case GearPropType.superiorEqp: return(value == 0 ? null : "Allows you to gain even higher stats with successful item enhancement."); case GearPropType.nActivatedSocket: return(value == 0 ? null : "#cYou can mount a Nebulite on this item.#"); case GearPropType.jokerToSetItem: return(value == 0 ? null : "#cThis lucky item counts toward any set, so long as you have at least 3 set pieces equipped!#"); case GearPropType.plusToSetItem: return(value == 0 ? null : "#cWhen equipped, the item set will count as having equipped two.#"); case GearPropType.abilityTimeLimited: return(value == 0 ? null : "Time Limited Stats"); // case GearPropType.colorvar: return value == 0 ? null : "#c该装备å¯é€šè¿‡æŸ“色颜料æ¥å˜æ›´é¢œè‰².#"; case GearPropType.incMHP_incMMP: return("MaxHP / MaxMP : " + sign + value); case GearPropType.incMHPr_incMMPr: return("MaxHP / MaxMP : " + sign + value + "%"); case GearPropType.incPAD_incMAD: return("Attack Power & Magic ATT: " + sign + value); case GearPropType.incPDD_incMDD: return("Defense: " + sign + value); case GearPropType.incARC: return("ARC : " + sign + value); case GearPropType.incAUT: return("SAC : " + sign + value); default: return(null); } }
public bool GetBooleanValue(GearPropType type) { int value; return(this.Props.TryGetValue(type, out value) && value != 0); }
/// <summary> /// 获取GearPropType所对应的文字说明。 /// </summary> /// <param Name="propType">表示装备属性枚举GearPropType。</param> /// <param Name="Value">表示propType属性所对应的值。</param> /// <returns></returns> public static string GetGearPropString(GearPropType propType, int value, int signFlag) { string sign; switch (signFlag) { default: case 0: //默认处理符号 sign = value > 0 ? "+" : null; break; case 1: //固定加号 sign = "+"; break; case 2: //无特别符号 sign = ""; break; } switch (propType) { case GearPropType.incSTR: return("力量 : " + sign + value); case GearPropType.incSTRr: return("力量 : " + sign + value + "%"); case GearPropType.incDEX: return("敏捷 : " + sign + value); case GearPropType.incDEXr: return("敏捷 : " + sign + value + "%"); case GearPropType.incINT: return("智力 : " + sign + value); case GearPropType.incINTr: return("智力 : " + sign + value + "%"); case GearPropType.incLUK: return("幸運 : " + sign + value); case GearPropType.incLUKr: return("幸運 : " + sign + value + "%"); case GearPropType.incAllStat: return("全部屬性 : " + sign + value); case GearPropType.incMHP: return("MaxHP: " + sign + value); case GearPropType.incMHPr: return("MaxHP: " + sign + value + "%"); case GearPropType.incMMP: return("MaxMP: " + sign + value); case GearPropType.incMMPr: return("MaxMP: " + sign + value + "%"); case GearPropType.incMDF: return("MaxDF : " + sign + value); case GearPropType.incPAD: return("攻擊力 : " + sign + value); case GearPropType.incPADr: return("攻擊力 : " + sign + value + "%"); case GearPropType.incMAD: return("魔法攻擊力 : " + sign + value); case GearPropType.incMADr: return("魔法攻擊力 : " + sign + value + "%"); case GearPropType.incPDD: return("防禦力 : " + sign + value); case GearPropType.incPDDr: return("物理防禦力 : " + sign + value + "%"); case GearPropType.incMDD: return("魔法防禦力 : " + sign + value); case GearPropType.incMDDr: return("魔法防禦力 : " + sign + value + "%"); case GearPropType.incACC: return("命中率 : " + sign + value); case GearPropType.incACCr: return("命中率 : " + sign + value + "%"); case GearPropType.incEVA: return("回避率 : " + sign + value); case GearPropType.incEVAr: return("回避率 : " + sign + value + "%"); case GearPropType.incSpeed: return("移動速度 : " + sign + value); case GearPropType.incJump: return("跳躍力 : " + sign + value); case GearPropType.incCraft: return("手藝 : " + sign + value); case GearPropType.damR: case GearPropType.incDAMr: return("總傷害 : " + sign + value + "%"); case GearPropType.incCr: return("爆擊率 : " + sign + value + "%"); case GearPropType.knockback: return("直接打擊時的機率強弓:" + value); case GearPropType.incPVPDamage: return("大亂鬥時增加攻擊力" + sign + value); case GearPropType.incPQEXPr: return("组隊任務經驗值增加" + value + "%"); case GearPropType.incEXPr: return("經驗值增加" + value + "%"); case GearPropType.incBDR: case GearPropType.bdR: return("BOSS攻擊時傷害+" + value + "%"); case GearPropType.incIMDR: case GearPropType.imdR: return("怪物防禦力無視:+" + value + "%"); case GearPropType.limitBreak: return("傷害上限突破至" + value + "。"); case GearPropType.reduceReq: return("裝備等级降低:- " + value); case GearPropType.nbdR: return("攻擊一般怪物時傷害+" + value + "%"); case GearPropType.only: return(value == 0 ? null : "專屬道具"); case GearPropType.tradeBlock: return(value == 0 ? null : "無法交換"); case GearPropType.equipTradeBlock: return(value == 0 ? null : "裝備後不可交易"); case GearPropType.accountSharable: return(value == 0 ? null : "只能在同帳號內移動"); case GearPropType.onlyEquip: return(value == 0 ? null : "只能單獨使用"); case GearPropType.notExtend: return(value == 0 ? null : "無法延長有效時間。"); case GearPropType.tradeAvailable: switch (value) { case 1: return("若使用 #c宿命剪刀,該道具可進行一次交易!#"); case 2: return("若使用 #c白金神奇剪刀,該道具可進行一次交易!#"); default: return(null); } case GearPropType.accountShareTag: switch (value) { case 1: return(" #c若使用分享名牌技術,可以相同帳號內的角色進行移動一次。#"); default: return(null); } case GearPropType.noPotential: return(value == 0 ? null : "無法設置潛能。"); case GearPropType.fixedPotential: return(value == 0 ? null : "無法重設潛能"); case GearPropType.superiorEqp: return(value == 0 ? null : "道具強化成功時, 可以獲得更高效果。"); case GearPropType.nActivatedSocket: return(value == 0 ? null : "#c可以鑲嵌星岩#"); case GearPropType.jokerToSetItem: return(value == 0 ? null : " c當前裝備3個以上的所有套装道具中包含的幸運物品!#"); case GearPropType.abilityTimeLimited: return(value == 0 ? null : "期間限定能力值"); case GearPropType.blockGoldHammer: return(value == 0 ? null : "無法使用黄金鐵鎚"); case GearPropType.colorvar: return(value == 0 ? null : "#c此裝備可以通過染色顏料進行染色。#"); case GearPropType.incMHP_incMMP: return("MaxHP/MaxMP: " + sign + value); case GearPropType.incMHPr_incMMPr: return("MaxHP/MaxMP:" + sign + value + "%"); case GearPropType.incPAD_incMAD: return("攻擊/魔法攻擊力:" + sign + value); case GearPropType.incPDD_incMDD: return("物理防禦力:" + sign + value); case GearPropType.incACC_incEVA: return("命中值/回避值:" + sign + value); case GearPropType.incARC: return("ARC : " + sign + value); case GearPropType.incAUT: return("AUT : " + sign + value); default: return(null); } }
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); }
/// <summary> /// 获取GearPropType所对应的文字说明。 /// </summary> /// <param Name="propType">表示装备属性枚举GearPropType。</param> /// <param Name="Value">表示propType属性所对应的值。</param> /// <returns></returns> public static string GetGearPropString(GearPropType propType, int value, int signFlag) { string sign; switch (signFlag) { default: case 0: //默认处理符号 sign = value > 0 ? "+" : null; break; case 1: //固定加号 sign = "+"; break; case 2: //无特别符号 sign = ""; break; } switch (propType) { case GearPropType.incSTR: return("STR : " + sign + value); case GearPropType.incSTRr: return("STR : " + sign + value + "%"); case GearPropType.incDEX: return("DEX : " + sign + value); case GearPropType.incDEXr: return("DEX : " + sign + value + "%"); case GearPropType.incINT: return("INT : " + sign + value); case GearPropType.incINTr: return("INT : " + sign + value + "%"); case GearPropType.incLUK: return("LUK : " + sign + value); case GearPropType.incLUKr: return("LUK : " + sign + value + "%"); case GearPropType.incAllStat: return("올스탯: " + sign + value); case GearPropType.incMHP: return("최대 HP : " + sign + value); case GearPropType.incMHPr: return("최대 HP : " + sign + value + "%"); case GearPropType.incMMP: return("최대 MP : " + sign + value); case GearPropType.incMMPr: return("최대 MP : " + sign + value + "%"); case GearPropType.incMDF: return("MaxDF : " + sign + value); case GearPropType.incPAD: return("공격력 : " + sign + value); case GearPropType.incPADr: return("공격력 : " + sign + value + "%"); case GearPropType.incMAD: return("마력 : " + sign + value); case GearPropType.incMADr: return("마력 : " + sign + value + "%"); case GearPropType.incPDD: return("방어력 : " + sign + value); case GearPropType.incPDDr: return("방어력 : " + sign + value + "%"); //case GearPropType.incMDD: return "마법방어력 : " + sign + value; //case GearPropType.incMDDr: return "마법방어력 : " + sign + value + "%"; //case GearPropType.incACC: return "명중치 : " + sign + value; //case GearPropType.incACCr: return "명중치 : " + sign + value + "%"; //case GearPropType.incEVA: return "회피치 : " + sign + value; //case GearPropType.incEVAr: return "회피치 : " + sign + value + "%"; case GearPropType.incSpeed: return("이동속도 : " + sign + value); case GearPropType.incJump: return("점프력 : " + sign + value); case GearPropType.incCraft: return("손재주 : " + sign + value); case GearPropType.damR: case GearPropType.incDAMr: return("데미지 : " + sign + value + "%"); case GearPropType.incCr: return("크리티컬 확률 : " + sign + value + "%"); case GearPropType.knockback: return("직접 타격시 " + value + "%의 확률로 넉백"); case GearPropType.incPVPDamage: return("대난투 시 추가 공격력" + sign + " " + value); case GearPropType.incPQEXPr: return("파티퀘스트 경험치 " + value + "% 증가"); case GearPropType.incBDR: case GearPropType.bdR: return("보스 공격시 데미지 +" + value + "%"); case GearPropType.incIMDR: case GearPropType.imdR: return("몬스터 방어력 무시 : +" + value + "%"); //case GearPropType.limitBreak: return "최대 데미지 제한 증가 : +" + value; case GearPropType.reduceReq: return("착용 레벨 감소 : - " + value); case GearPropType.only: return(value == 0 ? null : "고유 아이템"); case GearPropType.tradeBlock: return(value == 0 ? null : "교환 불가"); case GearPropType.equipTradeBlock: return(value == 0 ? null : "장착시 교환 불가"); case GearPropType.accountSharable: return(value == 0 ? null : "계정 내 이동만 가능"); case GearPropType.onlyEquip: return(value == 0 ? null : "고유장착 아이템"); case GearPropType.notExtend: return(value == 0 ? null : "유효기간 연장 불가"); case GearPropType.tradeAvailable: switch (value) { case 1: return(" #c카르마의 가위를 사용하면 1회 교환이 가능하게 할 수 있습니다.#"); case 2: return(" #c플래티넘 카르마의 가위를 사용하면 1회 교환이 가능하게 할 수 있습니다.#"); default: return(null); } case GearPropType.accountShareTag: switch (value) { case 1: return(" #c쉐어 네임 텍을 사용하면 1회 같은 계정 내 캐릭터로 이동할 수 있습니다.#"); default: return(null); } case GearPropType.noPotential: return(value == 0 ? null : "잠재능력 설정 불가"); case GearPropType.fixedPotential: return(value == 0 ? null : "잠재능력 재설정 불가"); case GearPropType.blockGoldHammer: return(value == 0 ? null : "황금망치 사용 불가"); case GearPropType.superiorEqp: return(value == 0 ? null : "아이템 강화 성공시 더욱 높은 효과를 받을 수 있습니다."); case GearPropType.nActivatedSocket: return(value == 0 ? null : "#c可以镶嵌星岩#"); case GearPropType.jokerToSetItem: return(value == 0 ? null : " #c어떠한 셋트 아이템에도 포함되는 럭키 아이템!#"); case GearPropType.incMHP_incMMP: return("최대 HP / 최대 MP : " + sign + value); case GearPropType.incMHPr_incMMPr: return("최대 HP / 최대 MP : " + sign + value + "%"); case GearPropType.incPAD_incMAD: return("공격력 / 마력 : " + sign + value); case GearPropType.incPDD_incMDD: return("방어력 : " + sign + value); //case GearPropType.incACC_incEVA: return "명중치 / 회피치:" + sign + value; case GearPropType.incARC: return("ARC : " + sign + value); default: return(null); } }