装备信息初步完成

This commit is contained in:
Lenheart 2025-01-07 20:36:10 +08:00
parent 69a4d18e43
commit d16ad868cb
3 changed files with 302 additions and 17 deletions

View File

@ -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 <- {};

View File

@ -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"];
}
}
}

View File

@ -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();