diff --git a/sqr/User/Asset/AssetManager.nut b/sqr/User/Asset/AssetManager.nut index 0fa51ae..32f704d 100644 --- a/sqr/User/Asset/AssetManager.nut +++ b/sqr/User/Asset/AssetManager.nut @@ -148,6 +148,13 @@ class _AssetManager_ { if (Ret == "[/item group name table]") break; DataTable.item_group_name_table.rawset(Ret, Data.Get()); } + } else if (Pack == "[elemental property tag]") { + DataTable.elemental_property_tag <- {}; + while (true) { + local Ret = Data.Get(); + if (Ret == "[/elemental property tag]") break; + DataTable.elemental_property_tag.rawset(Ret, Data.Get()); + } } } }); @@ -211,8 +218,8 @@ class _AssetManager_ { DataTable.DirPath <- DataTable.filepath.slice(0, DataTable.filepath.lastfind("/") + 1); while (!Data.Eof()) { local Pack = Data.Get(); - //名称 grade 套装Id 稀有度 最低穿戴登记 重量 组名 购买价格 出售价格 - if (Pack == "[name]" || Pack == "[part set index]" || Pack == "[grade]" || Pack == "[rarity]" || Pack == "[minimum level]" || Pack == "[weight]" || Pack == "[item group name]" || Pack == "[price]" || Pack == "[repair price]" || Pack == "[value]" || Pack == "[durability]") { + //名称 grade 套装Id 稀有度 最低穿戴登记 重量 组名 购买价格 出售价格 耐久 名望 四维 所有属强 四属强 双暴 命中 四属抗 属性攻击 + if (Pack == "[name]" || Pack == "[part set index]" || Pack == "[grade]" || Pack == "[rarity]" || Pack == "[minimum level]" || Pack == "[weight]" || Pack == "[item group name]" || Pack == "[price]" || Pack == "[repair price]" || Pack == "[value]" || Pack == "[durability]" || Pack == "[physical attack]" || Pack == "[magical attack]" || Pack == "[physical defense]" || Pack == "[magical defense]" || Pack == "[all elemental attack]" || Pack == "[dark attack]" || Pack == "[light attack]" || Pack == "[water attack]" || Pack == "[fire attack]" || Pack == "[attack speed]" || Pack == "[cast speed]" || Pack == "[move speed]" || Pack == "[physical critical hit]" || Pack == "[magical critical hit]" || Pack == "[stuck]" || Pack == "[fire resistance]" || Pack == "[dark resistance]" || Pack == "[light resistance]" || Pack == "[water resistance]" || Pack == "[elemental property]" || Pack == "[flavor text]") { local RealKey = Pack.slice(1, -1); DataTable[RealKey] <- Data.Get(); } @@ -225,6 +232,11 @@ class _AssetManager_ { DataTable.usable_job.append(Ret.slice(1, -1).tolower()); } } + //读取三攻 + else if (Pack == "[equipment physical attack]" || Pack == "[equipment magical attack]" || Pack == "[separate attack]") { + local RealKey = Pack.slice(1, -1); + DataTable[RealKey] <- [Data.Get(), Data.Get()]; + } //图标 else if (Pack == "[icon]") { DataTable.icon <- {}; diff --git a/sqr/User/Asset/Item/Equipment.nut b/sqr/User/Asset/Item/Equipment.nut index 5ac0254..fecece5 100644 --- a/sqr/User/Asset/Item/Equipment.nut +++ b/sqr/User/Asset/Item/Equipment.nut @@ -13,6 +13,8 @@ class GameItem.EquipmentInfo extends Yosin_Window { Equipment = null; //画布 Canvas = null; + //画布实际高度 + RealCanvasHeight = 0; //稀有度边框颜色对应Idx表 //白装 蓝装 紫装 粉装 金装 红装 橙装 RarityFrameColorIdx = [0, 1, 2, 4, 6, 3, 5]; @@ -36,10 +38,12 @@ class GameItem.EquipmentInfo extends Yosin_Window { this.Equipment = Equipment.weakref(); base.constructor(clock() + "EquipmentInfo" + Equipment.Idx, 0, 0, 0, 0, 0); - local background = Yosin_NineBoxStretch(0, 0, 208, 600, "sprite/interface/lenheartwindowcommon.img", 213); - AddUIChild(background); //210 Init(); + + local background = Yosin_NineBoxStretch(0, 0, 208, RealCanvasHeight + 10, "sprite/interface/lenheartwindowcommon.img", 213); + background.SetZOrder(-1); + AddUIChild(background); } function Init() { @@ -60,7 +64,7 @@ class GameItem.EquipmentInfo extends Yosin_Window { //绘制装备名称 if (Equipment.Name.len() > 0) { - local EquName = FontAssetManager.GenerateNormal(Equipment.Name, true, { + local EquName = FontAssetManager.GenerateNormal(Equipment.Name, false, { color = RarityColor[Equipment.Rarity] }); Canvas.DrawActor(EquName, 41, 7); @@ -69,10 +73,10 @@ class GameItem.EquipmentInfo extends Yosin_Window { //绘制分割线 Canvas.DrawLine(3, 37, 207, 38); - //绘制品级 //TODO 现在默认100 - local Percentage = 94; + //绘制品级 + local Percentage = Equipment.Property ? Equipment.Property.Percentage : 100; //品级文字 - local PercentageGradeText = FontAssetManager.GenerateNormal(GetPercentageText(Percentage), true, { + local PercentageGradeText = FontAssetManager.GenerateNormal(GetPercentageText(Percentage), false, { color = sq_RGBA(255, 240, 0, 255) }); //百分比UI @@ -81,51 +85,51 @@ class GameItem.EquipmentInfo extends Yosin_Window { local PercentageUIBG = CL_SpriteFrameObject("sprite/interface/lenheartwindowcommon.img", 632); Canvas.DrawSpriteFrame(PercentageUIBG, 47, 48); //百分比文字 - local PercentageText = FontAssetManager.GenerateNormal(format("(%d%%)", Percentage), true, { + 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], true, { + 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", true, { + 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 + "级以上可以使用", true, { + 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], true, { + 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], true, { + 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 + "金币", true, { + 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, true, { + 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); @@ -133,12 +137,178 @@ class GameItem.EquipmentInfo extends Yosin_Window { //绘制分割线 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) { @@ -196,6 +366,8 @@ class GameItem.Equipment extends GameItem.Item { SellPrice = -1; //耐久度 Durability = -1; + //冒险家名望 + AdventurerFame = 0; //装备可穿戴职业 Job = 0; //装备图标 @@ -212,6 +384,61 @@ class GameItem.Equipment extends GameItem.Item { //装备属性 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) { @@ -246,6 +473,8 @@ class GameItem.Equipment extends GameItem.Item { 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"]; //图标 @@ -253,6 +482,40 @@ class GameItem.Equipment extends GameItem.Item { 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"]; } } } diff --git a/sqr/User/Stage/TestStage.nut b/sqr/User/Stage/TestStage.nut index e172640..f724ae5 100644 --- a/sqr/User/Stage/TestStage.nut +++ b/sqr/User/Stage/TestStage.nut @@ -15,7 +15,17 @@ function TestStage() { local Equ = GameItem.Equipment(27675); local Window = Equ.GetEquipmentInfoWindow(); - Window.SetPosition(300, 80); + Window.SetPosition(100, 80); + Window.ResetFocus(); + + local Equ = GameItem.Equipment(101020048); + local Window = Equ.GetEquipmentInfoWindow(); + Window.SetPosition(350, 80); + Window.ResetFocus(); + + local Equ = GameItem.Equipment(24144); + local Window = Equ.GetEquipmentInfoWindow(); + Window.SetPosition(580, 80); Window.ResetFocus();