/* 文件名:Equipment.nut 路径:User/Asset/Item/Equipment.nut 创建日期:2024-12-12 19:03 文件用途: */ //装备信息标签类(信息类) if (!GameItem.rawin("EquipmentInfoTag")) GameItem.EquipmentInfoTag <- null; //装备信息窗口 class GameItem.EquipmentInfo extends Yosin_Window { //装备 Equipment = null; //画布 Canvas = null; //画布实际高度 RealCanvasHeight = 0; //稀有度边框颜色对应Idx表 //白装 蓝装 紫装 粉装 金装 红装 橙装 RarityFrameColorIdx = [0, 1, 2, 4, 6, 3, 5]; //稀有度对应名称 RarityNameTag = ["普通", "高级", "稀有", "神器", "史诗", "勇者", "传说"]; //稀有度对应颜色 RarityColor = [0xffffffff, 0xff68d5ed, 0xffb36bff, 0xffff00f0, 0xffffb100, 0xffff6666, 0xffff5500]; //品级对应的文字显示 PercentageText = ["最下级", "下级", "中级", "上级", "最上级"]; // 定义每个品级对应的数值范围边界 PercentageRangeBoundaries = [20, 40, 60, 80]; //交易类型对应的文字显示 TradeTypeText = ["自由交易", "不可交易", "封装", "账号绑定"]; //交易类型对应的文字颜色 TradeTypeColor = [0xffffffff, 0xffbb3332, 0xff4ba157, 0xffff5500]; //装备类型描述 GroupNameTag = ["武器", "防具", "饰品", "光环"]; constructor(Equipment) { this.Equipment = Equipment.weakref(); base.constructor(clock() + "EquipmentInfo" + Equipment.Idx, 0, 0, 0, 0, 0); //210 Init(); local background = Yosin_NineBoxStretch(0, 0, 208, RealCanvasHeight + 10, "sprite/interface/lenheartwindowcommon.img", 213); background.SetZOrder(-1); AddUIChild(background); } function Init() { Canvas = CL_CanvasObject(); Canvas.ResizeAndClear(210, 600); Canvas.SetFillBrush(sq_RGBA(59, 56, 57, 250)); Canvas.SetStrokeBrush(sq_RGBA(59, 56, 57, 250)); Canvas.BeginDraw(); //构造图标 及图标边框 if (Equipment.Icon) { local Icon = CL_SpriteFrameObject(Equipment.Icon.path, Equipment.Icon.index); Canvas.DrawSpriteFrame(Icon, 7, 7); local IconFrame = CL_SpriteFrameObject("sprite/item/iconmark.img", 62 + RarityFrameColorIdx[Equipment.Rarity]); Canvas.DrawSpriteFrame(IconFrame, 7, 7); } //绘制装备名称 if (Equipment.Name.len() > 0) { local EquName = FontAssetManager.GenerateNormal(Equipment.Name, false, { color = RarityColor[Equipment.Rarity] }); Canvas.DrawActor(EquName, 41, 7); } //绘制分割线 Canvas.DrawLine(3, 37, 207, 38); //绘制品级 local Percentage = Equipment.Property ? Equipment.Property.Percentage : 100; //品级文字 local PercentageGradeText = FontAssetManager.GenerateNormal(GetPercentageText(Percentage), false, { color = sq_RGBA(255, 240, 0, 255) }); //百分比UI local PercentageUI = CL_SpriteFrameObject("sprite/interface/lenheartwindowcommon.img", 633); Canvas.DrawSpriteFrame(PercentageUI, 48, 49, PercentageUI.GetSize().w * (Percentage.tofloat() / 100.0)); local PercentageUIBG = CL_SpriteFrameObject("sprite/interface/lenheartwindowcommon.img", 632); Canvas.DrawSpriteFrame(PercentageUIBG, 47, 48); //百分比文字 local PercentageText = FontAssetManager.GenerateNormal(format("(%d%%)", Percentage), false, { color = sq_RGBA(161, 131, 74, 255) }); Canvas.DrawActor(PercentageGradeText, 6, 41); Canvas.DrawActor(PercentageText, 130, 41); //绘制稀有度名称 local RarityTagName = FontAssetManager.GenerateNormal(RarityNameTag[Equipment.Rarity], false, { color = RarityColor[Equipment.Rarity] }); Canvas.DrawActor(RarityTagName, 210 - RarityTagName.GetSize().w - 6, 41); //绘制重量 local WeightText = FontAssetManager.GenerateNormal((Equipment.Weight.tofloat() / 1000.0) + "kg", false, { color = sq_RGBA(161, 131, 74, 255) }); Canvas.DrawActor(WeightText, 6, 57); //绘制最低多少级可以使用 local MinUseLevelText = FontAssetManager.GenerateNormal(Equipment.Minimum_level + "级以上可以使用", false, { color = sq_RGBA(161, 131, 74, 255) }); Canvas.DrawActor(MinUseLevelText, 210 - MinUseLevelText.GetSize().w - 6, 57); //绘制是否封装 如果有主体属性读取 否则一律为封装 local IsPackage = Equipment.Property ? Equipment.Property.IsPackage : 0; local IsPackageText = FontAssetManager.GenerateNormal(TradeTypeText[IsPackage], false, { color = TradeTypeColor[IsPackage] }); Canvas.DrawActor(IsPackageText, 210 - IsPackageText.GetSize().w - 6, 73); //绘制装备类型 local GroupNameText = FontAssetManager.GenerateNormal(GameItem.EquipmentInfoTag.item_group_name_table[Equipment.GroupName], false, { color = sq_RGBA(194, 161, 56, 255) }); Canvas.DrawActor(GroupNameText, 210 - GroupNameText.GetSize().w - 6, 89); //绘制售价 local RealSellPrice = (Equipment.SellPrice == -1 ? (Equipment.Price == -1 ? 0 : Equipment.Price) : Equipment.SellPrice) / 5; local SellPriceText = FontAssetManager.GenerateNormal(RealSellPrice + "金币", false, { color = sq_RGBA(133, 121, 78, 255) }); Canvas.DrawActor(SellPriceText, 210 - SellPriceText.GetSize().w - 6, 105); //绘制耐久度 local DurabilityText = FontAssetManager.GenerateNormal("耐久度 " + (Equipment.Property ? Equipment.Property.Durability : Equipment.Durability) + "/" + Equipment.Durability, false, { color = sq_RGBA(133, 121, 80, 255) }); Canvas.DrawActor(DurabilityText, 6, 121); //绘制分割线 Canvas.DrawLine(3, 139, 207, 139); //下面的绘制逻辑开始使用行put来做 RealCanvasHeight = 141; //绘制冒险家名望 local AdventurerFameFrame = CL_SpriteFrameObject("sprite/interface2/profile/profile_cn/profile_cn.img", 0); Canvas.DrawSpriteFrame(AdventurerFameFrame, 6, RealCanvasHeight + 3); local AdventurerFame = FontAssetManager.GenerateNormal("冒险家名望 " + Equipment.AdventurerFame, false, { color = sq_RGBA(133, 121, 80, 255) }); Canvas.DrawActor(AdventurerFame, 22, RealCanvasHeight); //绘制分割 AddSliceLine(); //绘制物理攻击力 DrawAttack("EquipmentPhysicalAttack", "物理攻击力"); //绘制魔法攻击力 DrawAttack("EquipmentMagicalAttack", "魔法攻击力"); //绘制独立攻击力 DrawAttack("SeparateAttack", "独立攻击力"); //绘制四维 DrawAttribute("PhysicalAttack", "力量"); DrawAttribute("MagicalAttack", "智力"); DrawAttribute("PhysicalDefense", "体力"); DrawAttribute("MagicalDefense", "精神"); //绘制分割 Canvas.DrawLine(3, RealCanvasHeight + 3, 207, RealCanvasHeight + 3); RealCanvasHeight += 6; //绘制三速 DrawSpeed("AttackSpeed", "攻击速度"); DrawSpeed("CastSpeed", "释放速度"); DrawSpeed("MoveSpeed", "移动速度"); //绘制双爆 DrawCritical("PhysicalCriticalHit", "物理暴击率"); DrawCritical("MagicalCriticalHit", "魔法暴击率"); //绘制命中率 DrawStuck("Stuck", "命中率"); //绘制四属抗 DrawElement("DarkResistance", "暗属性抗性"); DrawElement("LightResistance", "光属性抗性"); DrawElement("FireResistance", "火属性抗性"); DrawElement("WaterResistance", "水属性抗性"); //绘制四属强 DrawElement("DarkAttack", "暗属性强化"); DrawElement("LightAttack", "光属性强化"); DrawElement("FireAttack", "火属性强化"); DrawElement("WaterAttack", "水属性强化"); //绘制属性攻击 if (Equipment.ElementalProperty) { local Text = FontAssetManager.GenerateNormal(GameItem.EquipmentInfoTag.elemental_property_tag[Equipment.ElementalProperty], false, { color = sq_RGBA(215, 196, 147, 255) }); Canvas.DrawActor(Text, 6, RealCanvasHeight); AddHeight(); } //绘制描述 if (Equipment.FlavorText) { //绘制分割 Canvas.DrawLine(3, RealCanvasHeight + 3, 207, RealCanvasHeight + 3); RealCanvasHeight += 6; local Text = FontAssetManager.GenerateNormal(Equipment.FlavorText, false, { color = sq_RGBA(133, 121, 80, 255), wrap_width = 204 }); Canvas.DrawActor(Text, 6, RealCanvasHeight); RealCanvasHeight += Text.GetSize().h; } Canvas.EndDraw(); Addchild(Canvas); } //绘制属强属抗 function DrawElement(Type, TypeName) { if (Equipment[Type] != 0) { local AttackText = FontAssetManager.GenerateNormal(TypeName + " " + (Equipment[Type] >= 0 ? "+" : "-") + Equipment[Type], false, { color = sq_RGBA(215, 196, 147, 255) }); Canvas.DrawActor(AttackText, 6, RealCanvasHeight); AddHeight(); } } //绘制命中 function DrawStuck(Type, TypeName) { if (Equipment[Type] != 0) { local Value = Equipment[Type]; local AttackText = FontAssetManager.GenerateNormal(TypeName + " " + (Value >= 0 ? "+" : "") + Value + "%", false, { color = sq_RGBA(215, 196, 147, 255) }); Canvas.DrawActor(AttackText, 6, RealCanvasHeight); AddHeight(); } } //绘制双爆 function DrawCritical(Type, TypeName) { if (Equipment[Type] != 0) { local AttackText = FontAssetManager.GenerateNormal(TypeName + " " + (Equipment[Type] >= 0 ? "+" : "-") + Equipment[Type] + "%", false, { color = sq_RGBA(215, 196, 147, 255) }); Canvas.DrawActor(AttackText, 6, RealCanvasHeight); AddHeight(); } } //绘制三速 function DrawSpeed(Type, TypeName) { if (Equipment[Type] != 0) { local Value = (Equipment[Type].tofloat() * 0.1).tointeger(); local AttackText = FontAssetManager.GenerateNormal(TypeName + " " + (Value >= 0 ? "+" : "-") + Value + "%", false, { color = sq_RGBA(215, 196, 147, 255) }); Canvas.DrawActor(AttackText, 6, RealCanvasHeight); AddHeight(); } } //绘制四维 function DrawAttribute(Type, TypeName) { if (Equipment[Type] != 0) { local AttackText = FontAssetManager.GenerateNormal(TypeName + " " + Equipment[Type], false, { color = sq_RGBA(134, 120, 79, 255) }); Canvas.DrawActor(AttackText, 6, RealCanvasHeight); AddHeight(); } } //绘制三攻 function DrawAttack(Type, TypeName) { if (Equipment[Type] != null) { local RealValue; //数组为没有百分比计算过的原始数据 if (typeof Equipment[Type] == "array") { local MaxValue = Equipment[Type][0]; local MinValue = Equipment[Type][1]; local Rate = Equipment.Property ? Equipment.Property[Type + "Rate"] : 100; Rate = Rate.tofloat() / 100.0; RealValue = (MinValue + ((MaxValue - MinValue).tofloat() * Rate).tointeger()); } //百分比计算过的数据 else if (typeof Equipment[Type] == "integer") { RealValue = Equipment[Type]; } local AttackText = FontAssetManager.GenerateNormal(TypeName + " " + RealValue, false, { color = sq_RGBA(134, 120, 79, 255) }); Canvas.DrawActor(AttackText, 6, RealCanvasHeight); AddHeight(); } } //增加行高 function AddHeight() { RealCanvasHeight += 16; } //增加分割行 function AddSliceLine() { RealCanvasHeight += 18; Canvas.DrawLine(3, RealCanvasHeight, 207, RealCanvasHeight); RealCanvasHeight += 2; } // 根据数值获取对应的品级文字 function GetPercentageText(num) { if (num< PercentageRangeBoundaries[0]) { return PercentageText[0]; } for (local i = 0; i< PercentageRangeBoundaries.len(); i++) { if (num <= PercentageRangeBoundaries[i]) { return PercentageText[i + 1]; } } return PercentageText.top(); } } if (!getroottable().rawin("chongzaiflag")) { getroottable()["chongzaiflag"] <- true; } else { //遍历窗口队列 如果可见则调用Show for (local i = 0; i< _SYS_WINDOW_LIST_.len(); i++) { local Window = _SYS_WINDOW_LIST_[i]; Window.Visible = false; Window.RemoveSelf(); } TestStage(); } class GameItem.Equipment extends GameItem.Item { //装备ID Idx = -1; //装备名称 Name = ""; //装备类型 Type = -1; //装备槽位 SlotType = -1; //装备可穿戴等级 Minimum_level = -1; //装备等级组 Grade = null; //装备稀有度 Rarity = 0; //重量 Weight = 0; //装备组名 GroupName = "null"; //购买价格 Price = -1; //维修价格 RepairPrice = -1; //出售价格 SellPrice = -1; //耐久度 Durability = -1; //冒险家名望 AdventurerFame = 0; //装备可穿戴职业 Job = 0; //装备图标 Icon = null; //动画 Animation_Job = null; //装备描述 Description = ""; //文件路径 DirPath = null; //光环特效 Aurora_effects = null; //装备属性 Property = null; //力量 PhysicalAttack = 0; //智力 MagicalAttack = 0; //体力 PhysicalDefense = 0; //精神 MagicalDefense = 0; //所有属强 AllElementalAttack = 0; //暗属强 DarkAttack = 0; //光属强 LightAttack = 0; //水属强 WaterAttack = 0; //火属强 FireAttack = 0; //物理攻击力 EquipmentPhysicalAttack = 0; //魔法攻击力 EquipmentMagicalAttack = 0; //独立攻击力 SeparateAttack = 0; //攻击速度 AttackSpeed = 0; //释放速度 CastSpeed = 0; //移动速度 MoveSpeed = 0; //物理暴击率 PhysicalCriticalHit = 0; //魔法暴击率 MagicalCriticalHit = 0; //命中率 Stuck = 0; //暗属抗 DarkResistance = 0; //光属抗 LightResistance = 0; //水属抗 WaterResistance = 0; //火属抗 FireResistance = 0; //属性攻击 ElementalProperty = null; //描述 FlavorText = null; constructor(...) { //直接裸构造 if (vargv.len() == 0) { } //通过参数构造 else if (vargv.len() == 1) { //通过ID构造 if (typeof vargv[0] == "integer") { local EquInfo = AssetManager.GetEquipment(vargv[0]); if (EquInfo) { Idx = vargv[0]; //名称 if (EquInfo.rawin("name")) Name = EquInfo["name"]; //类型 if (EquInfo.rawin("type")) GetRealEquipmentType(EquInfo["type"].path); //最低使用等级 if (EquInfo.rawin("minimum level")) Minimum_level = EquInfo["minimum level"]; //等级组 if (EquInfo.rawin("grade")) Grade = EquInfo["grade"]; //稀有度 if (EquInfo.rawin("rarity")) Rarity = EquInfo["rarity"]; //重量 if (EquInfo.rawin("weight")) Weight = EquInfo["weight"]; //组名 if (EquInfo.rawin("item group name")) GroupName = EquInfo["item group name"]; //购买价格 if (EquInfo.rawin("price")) Price = EquInfo["price"]; //维修价格 if (EquInfo.rawin("repair price")) RepairPrice = EquInfo["repair price"]; //出售价格 if (EquInfo.rawin("value")) SellPrice = EquInfo["value"]; //耐久度 if (EquInfo.rawin("durability")) Durability = EquInfo["durability"]; //冒险家名望 if (EquInfo.rawin("adventurerfame")) AdventurerFame = EquInfo["adventurerfame"]; //职业 if (EquInfo.rawin("usable_job")) Job = EquInfo["usable_job"]; //图标 if (EquInfo.rawin("icon")) Icon = EquInfo["icon"]; if (EquInfo.rawin("Ani")) Animation_Job = EquInfo["Ani"]; if (EquInfo.rawin("DirPath")) DirPath = EquInfo["DirPath"]; if (EquInfo.rawin("aurora_effects")) Aurora_effects = EquInfo["aurora_effects"]; //四维 if (EquInfo.rawin("physical attack")) PhysicalAttack = EquInfo["physical attack"]; if (EquInfo.rawin("magical attack")) MagicalAttack = EquInfo["magical attack"]; if (EquInfo.rawin("physical defense")) PhysicalDefense = EquInfo["physical defense"]; if (EquInfo.rawin("magical defense")) MagicalDefense = EquInfo["magical defense"]; //属强 if (EquInfo.rawin("all elemental attack")) AllElementalAttack = EquInfo["all elemental attack"]; if (EquInfo.rawin("dark attack")) DarkAttack = EquInfo["dark attack"]; if (EquInfo.rawin("light attack")) LightAttack = EquInfo["light attack"]; if (EquInfo.rawin("water attack")) WaterAttack = EquInfo["water attack"]; if (EquInfo.rawin("fire attack")) FireAttack = EquInfo["fire attack"]; //三攻 if (EquInfo.rawin("equipment physical attack")) EquipmentPhysicalAttack = EquInfo["equipment physical attack"]; if (EquInfo.rawin("equipment magical attack")) EquipmentMagicalAttack = EquInfo["equipment magical attack"]; if (EquInfo.rawin("separate attack")) SeparateAttack = EquInfo["separate attack"]; //三速 if (EquInfo.rawin("attack speed")) AttackSpeed = EquInfo["attack speed"]; if (EquInfo.rawin("cast speed")) CastSpeed = EquInfo["cast speed"]; if (EquInfo.rawin("move speed")) MoveSpeed = EquInfo["move speed"]; //双暴 if (EquInfo.rawin("physical critical hit")) PhysicalCriticalHit = EquInfo["physical critical hit"]; if (EquInfo.rawin("magical critical hit")) MagicalCriticalHit = EquInfo["magical critical hit"]; //命中率 if (EquInfo.rawin("stuck")) Stuck = -EquInfo["stuck"]; //四属抗 if (EquInfo.rawin("dark resistance")) DarkResistance = EquInfo["dark resistance"]; if (EquInfo.rawin("light resistance")) LightResistance = EquInfo["light resistance"]; if (EquInfo.rawin("water resistance")) WaterResistance = EquInfo["water resistance"]; if (EquInfo.rawin("fire resistance")) FireResistance = EquInfo["fire resistance"]; //属性攻击 if (EquInfo.rawin("elemental property")) ElementalProperty = EquInfo["elemental property"]; //描述 if (EquInfo.rawin("flavor text")) FlavorText = EquInfo["flavor text"]; } } } } //设置真实装备类型 function SetRealEquipmentType(AType, BType) { SlotType = AType; Type = BType; } //获取真实装备类型 function GetRealEquipmentType(EType) { if (EType == "skin avatar") SetRealEquipmentType("skin", "avatar"); else if (EType == "weapon") SetRealEquipmentType("weapon", "equipment"); else if (EType == "hat avatar") SetRealEquipmentType("hat", "avatar"); else if (EType == "hair avatar") SetRealEquipmentType("hair", "avatar"); else if (EType == "coat avatar") SetRealEquipmentType("coat", "avatar"); else if (EType == "pants avatar") SetRealEquipmentType("pants", "avatar"); else if (EType == "waist avatar") SetRealEquipmentType("waist", "avatar"); else if (EType == "shoes avatar") SetRealEquipmentType("shoes", "avatar"); else if (EType == "breast avatar") SetRealEquipmentType("breast", "avatar"); else if (EType == "face avatar") SetRealEquipmentType("face", "avatar"); else if (EType == "aurora avatar") SetRealEquipmentType("aurora", "aurora"); } //获取装备信息窗口 function GetEquipmentInfoWindow() { if (Property) { } else { return GameItem.EquipmentInfo(this); } } //穿戴装备回调 function OnWearStart() { } //穿戴时 function OnWearProc(Dt) { } //卸载时 function OnWearEnd() { } }