DOF/sqr/User/Asset/Item/Equipment.nut

306 lines
11 KiB
Plaintext

/*
文件名: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;
//稀有度边框颜色对应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);
local background = Yosin_NineBoxStretch(0, 0, 208, 600, "sprite/interface/lenheartwindowcommon.img", 213);
AddUIChild(background);
//210
Init();
}
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, true, {
color = RarityColor[Equipment.Rarity]
});
Canvas.DrawActor(EquName, 41, 7);
}
//绘制分割线
Canvas.DrawLine(3, 37, 207, 38);
//绘制品级 //TODO 现在默认100
local Percentage = 94;
//品级文字
local PercentageGradeText = FontAssetManager.GenerateNormal(GetPercentageText(Percentage), true, {
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), true, {
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, {
color = RarityColor[Equipment.Rarity]
});
Canvas.DrawActor(RarityTagName, 210 - RarityTagName.GetSize().w - 6, 41);
//绘制重量
local WeightText = FontAssetManager.GenerateNormal((Equipment.Weight.tofloat() / 1000.0) + "kg", true, {
color = sq_RGBA(161, 131, 74, 255)
});
Canvas.DrawActor(WeightText, 6, 57);
//绘制最低多少级可以使用
local MinUseLevelText = FontAssetManager.GenerateNormal(Equipment.Minimum_level + "级以上可以使用", true, {
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, {
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, {
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, {
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, {
color = sq_RGBA(133, 121, 80, 255)
});
Canvas.DrawActor(DurabilityText, 6, 121);
//绘制分割线
Canvas.DrawLine(3, 139, 207, 139);
Canvas.EndDraw();
Addchild(Canvas);
}
// 根据数值获取对应的品级文字
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;
//装备可穿戴职业
Job = 0;
//装备图标
Icon = null;
//动画
Animation_Job = null;
//装备描述
Description = "";
//文件路径
DirPath = null;
//光环特效
Aurora_effects = null;
//装备属性
Property = 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("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"];
}
}
}
}
//设置真实装备类型
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() {
}
}