2025-01-19 09:48:40 +08:00
|
|
|
/*
|
|
|
|
|
文件名:Stackable.nut
|
|
|
|
|
路径:User/Asset/Item/Stackable.nut
|
|
|
|
|
创建日期:2025-01-18 01:46
|
|
|
|
|
文件用途:可堆叠物品
|
|
|
|
|
*/
|
|
|
|
|
//消耗品图标窗口
|
|
|
|
|
class GameItem.StackableIcon extends CL_CanvasObject {
|
|
|
|
|
|
2025-01-20 18:02:26 +08:00
|
|
|
constructor(Stackable, RenderCount = true) {
|
2025-01-19 09:48:40 +08:00
|
|
|
base.constructor();
|
|
|
|
|
ResizeAndClear(32, 32);
|
|
|
|
|
BeginDraw();
|
|
|
|
|
//构造图标 及图标边框
|
|
|
|
|
if (Stackable.Icon) {
|
|
|
|
|
//图标
|
|
|
|
|
local Icon = CL_SpriteFrameObject(Stackable.Icon.path, Stackable.Icon.index);
|
|
|
|
|
DrawSpriteFrame(Icon, 0, 0);
|
|
|
|
|
|
|
|
|
|
//边框
|
2025-02-20 13:53:36 +08:00
|
|
|
local IconFrame = CL_SpriteFrameObject("sprite/item/iconmark.img", 62 + AssetManager.EtcConfig.ItemInfoTag.rarityframe_color_idx[Stackable.Rarity]);
|
2025-01-19 09:48:40 +08:00
|
|
|
DrawSpriteFrame(IconFrame, 0, 0);
|
2025-01-20 18:02:26 +08:00
|
|
|
|
|
|
|
|
//数量
|
|
|
|
|
if (RenderCount && Stackable.Count > 0) {
|
|
|
|
|
local CountText = Yosin_Mininumber(Stackable.Count);
|
|
|
|
|
DrawActor(CountText, 28 - CountText.GetSize().w, 0);
|
|
|
|
|
}
|
2025-01-19 09:48:40 +08:00
|
|
|
}
|
|
|
|
|
EndDraw();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//消耗品信息窗口
|
|
|
|
|
class GameItem.StackableInfo extends Yosin_Window {
|
|
|
|
|
//消耗品
|
|
|
|
|
Stackable = null;
|
|
|
|
|
//画布
|
|
|
|
|
Canvas = null;
|
|
|
|
|
//画布实际高度
|
|
|
|
|
RealCanvasHeight = 0;
|
|
|
|
|
|
|
|
|
|
constructor(Stackable) {
|
|
|
|
|
this.Stackable = Stackable.weakref();
|
|
|
|
|
base.constructor(clock() + "StackableInfo" + Stackable.Idx, 0, 0, 0, 0, 0);
|
|
|
|
|
|
|
|
|
|
Init();
|
|
|
|
|
|
|
|
|
|
local background = Yosin_NineBoxStretch(211, RealCanvasHeight + 10, "sprite/interface/lenheartwindowcommon.img", 213);
|
|
|
|
|
background.SetZOrder(-1);
|
|
|
|
|
Addchild(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 (Stackable.Icon) {
|
2025-01-20 18:02:26 +08:00
|
|
|
local Icon = GameItem.StackableIcon(Stackable, false);
|
2025-01-19 09:48:40 +08:00
|
|
|
Canvas.DrawActor(Icon, 7, 7);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//绘制名称
|
|
|
|
|
if (Stackable.Name.len() > 0) {
|
|
|
|
|
local DrawName = Stackable.Name;
|
|
|
|
|
local EquName = FontAssetManager.GenerateNormal(DrawName, false, {
|
2025-02-20 13:53:36 +08:00
|
|
|
color = AssetManager.EtcConfig.ItemInfoTag.rarity_color[Stackable.Rarity]
|
2025-01-19 09:48:40 +08:00
|
|
|
});
|
|
|
|
|
Canvas.DrawActor(EquName, 41, 7);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//绘制分割线
|
|
|
|
|
Canvas.DrawLine(3, 37, 207, 38);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//绘制稀有度名称
|
2025-02-20 13:53:36 +08:00
|
|
|
local RarityTagName = FontAssetManager.GenerateNormal(AssetManager.EtcConfig.ItemInfoTag.rarity_name_tag[Stackable.Rarity], false, {
|
|
|
|
|
color = AssetManager.EtcConfig.ItemInfoTag.rarity_color[Stackable.Rarity]
|
2025-01-19 09:48:40 +08:00
|
|
|
});
|
|
|
|
|
Canvas.DrawActor(RarityTagName, 210 - RarityTagName.GetSize().w - 6, 41);
|
|
|
|
|
|
|
|
|
|
//绘制类型
|
|
|
|
|
local RealGroupName = Stackable.GroupName ? Stackable.GroupName : "cube stuff";
|
2025-02-20 13:53:36 +08:00
|
|
|
local GroupNameText = FontAssetManager.GenerateNormal(AssetManager.EtcConfig.ItemInfoTag.item_group_name_table[RealGroupName], false, {
|
2025-01-19 09:48:40 +08:00
|
|
|
color = sq_RGBA(194, 161, 56, 255)
|
|
|
|
|
});
|
|
|
|
|
Canvas.DrawActor(GroupNameText, 6, 41);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//下面的绘制逻辑开始使用行put来做
|
|
|
|
|
RealCanvasHeight = 64;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//绘制交易类型 如果有主体属性读取 否则一律为封装
|
|
|
|
|
local TradeType = Stackable.TradeType;
|
2025-02-20 13:53:36 +08:00
|
|
|
local TradeTypeText = FontAssetManager.GenerateNormal(AssetManager.EtcConfig.ItemInfoTag.trade_type_text[TradeType], false, {
|
|
|
|
|
color = AssetManager.EtcConfig.ItemInfoTag.trade_type_color[TradeType]
|
2025-01-19 09:48:40 +08:00
|
|
|
});
|
|
|
|
|
Canvas.DrawActor(TradeTypeText, 6, 60);
|
|
|
|
|
|
|
|
|
|
//绘制售价
|
|
|
|
|
local RealSellPrice = (Stackable.SellPrice == -1 ? (Stackable.Price == -1 ? 0 : Stackable.Price) : Stackable.SellPrice) / 5;
|
|
|
|
|
local SellPriceText = FontAssetManager.GenerateNormal(RealSellPrice + "金币", false, {
|
|
|
|
|
color = sq_RGBA(133, 121, 78, 255)
|
|
|
|
|
});
|
|
|
|
|
Canvas.DrawActor(SellPriceText, 210 - SellPriceText.GetSize().w - 6, 60);
|
|
|
|
|
|
|
|
|
|
//绘制分割
|
|
|
|
|
AddSliceLine();
|
|
|
|
|
|
|
|
|
|
//绘制描述
|
|
|
|
|
if (Stackable.FlavorText) {
|
|
|
|
|
// //绘制分割
|
|
|
|
|
// Canvas.DrawLine(3, RealCanvasHeight + 3, 207, RealCanvasHeight + 3);
|
|
|
|
|
// RealCanvasHeight += 6;
|
|
|
|
|
|
|
|
|
|
local Text = FontAssetManager.GenerateNormal(Stackable.FlavorText, false, {
|
|
|
|
|
color = sq_RGBA(133, 121, 80, 255),
|
|
|
|
|
wrap_width = 200
|
|
|
|
|
});
|
|
|
|
|
Canvas.DrawActor(Text, 6, RealCanvasHeight);
|
|
|
|
|
RealCanvasHeight += Text.GetSize().h;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Canvas.EndDraw();
|
|
|
|
|
Addchild(Canvas);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//增加行高
|
|
|
|
|
function AddHeight() {
|
|
|
|
|
RealCanvasHeight += 16;
|
|
|
|
|
}
|
|
|
|
|
//增加分割行
|
|
|
|
|
function AddSliceLine() {
|
|
|
|
|
RealCanvasHeight += 18;
|
|
|
|
|
Canvas.DrawLine(3, RealCanvasHeight, 207, RealCanvasHeight);
|
|
|
|
|
RealCanvasHeight += 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GameItem.Stackable extends GameItem.Item {
|
|
|
|
|
|
|
|
|
|
//物品ID
|
|
|
|
|
Idx = -1;
|
|
|
|
|
//物品名称
|
|
|
|
|
Name = "";
|
2025-01-20 18:02:26 +08:00
|
|
|
//数量
|
|
|
|
|
Count = 0;
|
2025-01-19 09:48:40 +08:00
|
|
|
|
|
|
|
|
//物品类型
|
|
|
|
|
Type = null;
|
|
|
|
|
//交易类型
|
|
|
|
|
TradeType = 0;
|
|
|
|
|
|
|
|
|
|
//物品最低使用等级
|
|
|
|
|
Minimum_level = 0;
|
|
|
|
|
//物品等级组
|
|
|
|
|
Grade = 0;
|
|
|
|
|
//物品稀有度
|
|
|
|
|
Rarity = 0;
|
|
|
|
|
//物品重量
|
|
|
|
|
Weight = 0;
|
|
|
|
|
//物品组名
|
|
|
|
|
GroupName = null;
|
|
|
|
|
//物品购买价格
|
|
|
|
|
Price = 0;
|
|
|
|
|
//物品维修价格
|
|
|
|
|
RepairPrice = 0;
|
|
|
|
|
//物品出售价格
|
|
|
|
|
SellPrice = 0;
|
|
|
|
|
//物品职业
|
|
|
|
|
Job = null;
|
|
|
|
|
//物品图标
|
|
|
|
|
Icon = null;
|
|
|
|
|
//物品描述
|
|
|
|
|
FlavorText = "";
|
|
|
|
|
|
|
|
|
|
function _typeof() {
|
|
|
|
|
return "Stackable";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
constructor(...) {
|
|
|
|
|
//直接裸构造
|
|
|
|
|
if (vargv.len() == 0) {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//通过参数构造
|
|
|
|
|
else if (vargv.len() == 1) {
|
|
|
|
|
local StkInfo;
|
|
|
|
|
//通过ID构造
|
|
|
|
|
if (typeof vargv[0] == "integer") {
|
|
|
|
|
Idx = vargv[0];
|
2025-01-20 18:02:26 +08:00
|
|
|
ConstructStackableFromScript(AssetManager.GetStackable(Idx));
|
|
|
|
|
}
|
|
|
|
|
//通过脚本信息构造
|
|
|
|
|
else if (typeof vargv[0] == "table") {
|
|
|
|
|
Idx = vargv[0].ItemId;
|
|
|
|
|
ConstructStackableFromScript(AssetManager.GetStackable(Idx));
|
|
|
|
|
IterateStackableBasedOnActualStackableInformation(vargv[0]);
|
2025-01-19 09:48:40 +08:00
|
|
|
}
|
2025-01-20 18:02:26 +08:00
|
|
|
|
2025-01-19 09:48:40 +08:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//根据消耗品脚本信息构造消耗品
|
|
|
|
|
function ConstructStackableFromScript(StkInfo) {
|
|
|
|
|
//如果获取到对应的消耗品脚本信息
|
|
|
|
|
if (StkInfo) {
|
|
|
|
|
//名称
|
2025-02-20 13:53:36 +08:00
|
|
|
if (StkInfo.rawin("name")) Name = strip(StkInfo["name"]);
|
2025-01-19 09:48:40 +08:00
|
|
|
//类型
|
|
|
|
|
// if (StkInfo.rawin("type")) GetRealStackableType(StkInfo["type"].path);
|
|
|
|
|
//最低使用等级
|
|
|
|
|
if (StkInfo.rawin("minimum level")) Minimum_level = StkInfo["minimum level"];
|
|
|
|
|
//等级组
|
|
|
|
|
if (StkInfo.rawin("grade")) Grade = StkInfo["grade"];
|
|
|
|
|
//稀有度
|
|
|
|
|
if (StkInfo.rawin("rarity")) Rarity = StkInfo["rarity"];
|
|
|
|
|
//重量
|
|
|
|
|
if (StkInfo.rawin("weight")) Weight = StkInfo["weight"];
|
|
|
|
|
//组名
|
|
|
|
|
if (StkInfo.rawin("item group name")) GroupName = StkInfo["item group name"];
|
|
|
|
|
//购买价格
|
|
|
|
|
if (StkInfo.rawin("price")) Price = StkInfo["price"];
|
|
|
|
|
//维修价格
|
|
|
|
|
if (StkInfo.rawin("repair price")) RepairPrice = StkInfo["repair price"];
|
|
|
|
|
//出售价格
|
|
|
|
|
if (StkInfo.rawin("value")) SellPrice = StkInfo["value"];
|
|
|
|
|
//职业
|
|
|
|
|
if (StkInfo.rawin("usable_job")) Job = StkInfo["usable_job"];
|
|
|
|
|
//图标
|
|
|
|
|
if (StkInfo.rawin("icon")) Icon = StkInfo["icon"];
|
|
|
|
|
//描述
|
|
|
|
|
if (StkInfo.rawin("explain")) FlavorText = StkInfo["explain"];
|
|
|
|
|
//交易类型
|
|
|
|
|
if (StkInfo.rawin("trade_type")) TradeType = StkInfo["trade_type"];
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-01-20 18:02:26 +08:00
|
|
|
|
|
|
|
|
//根据实际的消耗品信息迭代消耗品
|
|
|
|
|
function IterateStackableBasedOnActualStackableInformation(Info) {
|
|
|
|
|
Count = Info.ItemCount;
|
|
|
|
|
TradeType = Info.ItemTradeType;
|
|
|
|
|
}
|
2025-01-19 09:48:40 +08:00
|
|
|
}
|