Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
            }
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
 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);
 }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
 public static string GetGearPropString(GearPropType propType, int value)
 {
     return(GetGearPropString(propType, value, 0));
 }
Пример #13
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);
            }
        }
Пример #14
0
        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);
        }
Пример #15
0
        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);
        }
Пример #16
0
        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;
            }
        }
Пример #17
0
        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);
        }
Пример #18
0
        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);
        }
Пример #19
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("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);
            }
        }
Пример #20
0
        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);
        }
Пример #21
0
        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);
        }
Пример #22
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("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);
            }
        }
Пример #23
0
        public bool GetBooleanValue(GearPropType type)
        {
            int value;

            return(this.Props.TryGetValue(type, out value) && value != 0);
        }
Пример #24
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);
            }
        }
Пример #25
0
        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);
        }
Пример #26
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("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);
            }
        }