Rindro-Sqr/Project/ItemTool/ItemFusion/ItemFusion.nut

382 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
文件名:ItemFusion.nut
路径:Project/ItemTool/ItemFusion/ItemFusion.nut
创建日期:2025-12-06 10:07
文件用途:
*/
class ItemFusionC_ItemSlot extends LenheartNewUI_CommonUi {
WindowImg = Rindro_Image("interface2/itemtoolwindow/itemfusion/itemfusion.img");
Item = null;
//覆写悬停Flag
HoverFlag = false;
//UseFlag
UseFlag = true;
constructor(X, Y) {
LenheartNewUI_CommonUi.constructor(X, Y, 46, 47);
}
function Show(obj) {
WindowImg.DrawPng(9, X, Y);
//如果槽里面有道具 绘制道具
if (Item) {
if (Item.rawin("itemAddress")) Parent.TemporaryDrawItemAddress = Item.itemAddress;
Parent.DrawItemBase(X + 9, Y + 10, Item.itemId, 1);
}
CheckInRect();
}
function CheckInRect() {
local MousePos_X = IMouse.GetXPos();
local MousePos_Y = IMouse.GetYPos();
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + 9, Y + 10, 24, 24)) {
//绘制悬停框
L_sq_SetDrawImgModel(2, 0);
Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X + 8, Y + 8);
L_sq_ReleaseDrawImgModel();
HoverFlag = true;
} else HoverFlag = false;
}
//override
function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
if (!Visible) return;
//调用原生方法
LenheartNewUI_CommonUi.OnMouseProc(Flag, MousePos_X, MousePos_Y);
}
function DiscardItem(info) {
if (HoverFlag) {
if (info) {
Item = info;
}
return true;
}
}
//鼠标右键按下回调
function OnMouseRbDown(MousePos_X, MousePos_Y) {
if (!UseFlag) return;
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + 9, Y + 10, 24, 24)) {
Item = null;
if (Parent.ItemInfoDrawS) {
L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0);
Parent.ItemInfoDrawS = null;
Parent.ResetFocus();
}
if (Parent.Slot[2].Item != null) {
Parent.Msg = 0;
Parent.Slot[2].Item = null;
}
}
}
}
class ItemFusionC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
Visible = false;
Slot = null;
//Ani任务队列
AniQueue = null;
//动画播放Flag
AniFlag = false;
SoundFlag = false;
NPCList = null;
Msg = 0;
WindowImg = Rindro_Image("interface2/itemtoolwindow/itemfusion/itemfusion.img");
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
AniQueue = QuestQueue();
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
InifPvf();
RegNpc();
DiscardItemCallBackFunc.rawset("RecoveryC", DiscardItem.bindenv(this));
Pack_Control.rawset(21006002, function(Chunk) {
local Jso = Json.Decode(Chunk);
Msg = Jso.msg;
if (Jso.rawin("value")) {
Slot[2].Item = {
itemId = Jso.value[0]
}
}
}.bindenv(this));
Pack_Control.rawset(21006004, function(Chunk) {
local Jso = Json.Decode(Chunk);
if (Jso.rawin("error")) {
foreach(value in Slot) {
value.Item = null;
}
Msg = 0;
} else {
AniQueue.AddQuest("装备融合特效动画", function(Name, Time) {
local AniPath = "etc/rindro/itemtool/itemfusion/itemfusioneffect.ani";
local Ani = DrawAniEx(X + 8, Y + 120, AniPath, "装备融合特效1");
if (sq_GetAnimationFrameIndex(Ani) == 10 && !SoundFlag) {
R_Utils.PlaySound("RANK_UP");
SoundFlag = true;
}
if (sq_GetAnimationFrameIndex(Ani) == 40) {
sq_Rewind(Ani);
AniQueue.RemoveQuest(Name);
foreach(value in Slot) {
value.Item = null;
}
Msg = 0;
SoundFlag = false;
}
}.bindenv(this));
}
}.bindenv(this));
}
function RegisterWidget() {
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(228, 5, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
this.Visible = false;
}.bindenv(this);
Childrens.append(CloseButton);
//确认按钮
local ConfirmButton = LenheartNewUI_ButtonText(85, 250, 15, "确认融合");
ConfirmButton.DWidth = 18;
ConfirmButton.Width = 74;
ConfirmButton.SetTextOffset(-4, 1);
ConfirmButton.OnClickEx = function(Btn) {
if (!Btn.Visible) return;
local T = {
op = 21006003,
}
SendPackEx(T);
}.bindenv(this);
ConfirmButton.SetCallBackFunc(function(Btn) {
// if (mode >= 1 && mode< 3) {
// Btn.Visible = true;
// } else {
// Btn.Visible = false;
// }
}.bindenv(this));
AddChild(ConfirmButton);
//创建槽
Slot = [ItemFusionC_ItemSlot(49, 58), ItemFusionC_ItemSlot(150, 58), ItemFusionC_ItemSlot(99, 182)];
foreach(value in Slot) {
AddChild(value);
}
Slot[2].UseFlag = false;
}
//绘制主界面
function DrawMain(obj) {
//背景框
DrawNineBox(X, Y, 244, 294, "interface/lenheartwindowcommon.img", 213);
DrawWindowTitle(247);
//绘制标题名
L_sq_DrawCode("装备融合", X + 100, Y + 6, sq_RGBA(230, 200, 155, 255), 0, 1);
DrawNineBox(X + 5, Y + 27, 235, 260, "interface/lenheartwindowcommon.img", 97);
local SlotEnableCount = 0;
for (local i = 0; i< 2; i++) {
local value = Slot[i];
if (value.Item != null) SlotEnableCount++;
}
WindowImg.DrawPng(0 + SlotEnableCount, X + 8, Y + 30);
WindowImg.DrawPng(3, X + 8, Y + 32);
WindowImg.DrawPng(8, X + 112, Y + 70);
if (Msg == 2 && Slot[1].Item != null && Slot[0].Item != null) {
WindowImg.DrawPng(7, X + 5, Y + 240);
L_sq_DrawCode("不是可以融合的装备!", X + 72, Y + 246, sq_RGBA(255, 255, 255, 255), 0, 1);
}
// local Co = [
// 0xFFFF64A0, // 起始色: (160,100,255,255)
// 0xFFEB6EAA, // 过渡色1
// 0xFFDB78B4, // 过渡色2
// 0xFFDB82BE, // 过渡色3
// 0xFFAF8CC8, // 过渡色4
// 0xFF9B96D2, // 过渡色5
// 0xFF8BDCDC, // 过渡色6修正格式0xFF8BDCDC
// 0xFF7BB4E6, // 过渡色7
// 0xFF6FBEE0, // 过渡色8
// 0xFF4BC8FA, // 过渡色9修正格式0xFF4BC8FA
// 0xFF37D2F4, // 过渡色10
// 0xFF00B1FF // 结束色: (255,177,0,255)
// ];
// DrawText("测试文本", X + 30, Y + 40, Co);
}
// function DrawText(Str, XPos, YPos, Color) {
// if (typeof Color == "array") {
// for (local i = 0; i< 12; i++) {
// local clipBottom = YPos + (13 - i);
// setClip(0, YPos - 1, getroottable().Rindro_Scr_Width, clipBottom); //开始裁切
// L_sq_DrawCode(Str, XPos, YPos, Color[i], 0, 1);
// releaseClip(); //裁切结束
// }
// }
// }
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
AniQueue.Run();
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
//回收道具回调
function DiscardItem(ItemAddress) {
local MousePos_X = IMouse.GetXPos();
local MousePos_Y = IMouse.GetYPos();
if (!sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) return true;
if (!Visible) return true;
else {
local info = FindItemPosByForeachInven(ItemAddress);
for (local i = 0; i< 2; i++) {
local Value = Slot[i];
local Ret = Value.DiscardItem(info);
if (Ret) {
R_Utils.PlaySound("CHANGE_ALERT");
if (Slot[0].Item && Slot[1].Item) {
local T = {
op = 21006001,
item1 = Slot[0].Item,
item2 = Slot[1].Item,
}
SendPackEx(T);
}
break;
}
}
}
}
//遍历背包查找Item
function FindItemPosByForeachInven(FindAddress) {
local Inven = L_sq_RA(0x1A5FB24);
local InvenAdd = L_sq_RA(Inven + 56);
InvenAdd += 36;
for (local z = 0; z< 5; z++) {
for (local i = 0; i< 48; i++) {
local ItemAdd = L_sq_RA(InvenAdd + ((i + (z * 48)) * 4));
if (ItemAdd == FindAddress) return {
type = z,
pos = i,
vis = false,
count = MemoryTool.DecodeMemoryData(FindAddress + 0x1A4),
itemId = L_sq_RA(FindAddress + 0x1c),
itemAddress = FindAddress
}
}
}
return null;
}
function InifPvf() {
Rindro_Script.GetFileData("etc/rindro/itemtool/itemfusion/itemfusion.etc", function(DataTable, Data) {
while (!Data.Eof()) {
local Fragment = Data.Get();
if (Fragment == "[NPC]") {
NPCList = [];
while (true) {
local Fbuf = Data.Get();
if (Fbuf == "[/NPC]") {
break;
}
NPCList.append(Fbuf);
}
}
}
});
}
function RegNpc() {
local EachManager = getroottable()["L_Each_Obj"];
foreach(id in NPCList) {
//先清空注册
EachManager.AddEachForNpc(id, function(SThis) {
//关闭按钮
local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3);
ApplyEngagementButton.Icon = "interface2/popup_menu/popup_icon_cn.img";
ApplyEngagementButton.IconIdx = 49;
ApplyEngagementButton.Str = "融合";
ApplyEngagementButton.Data = SThis.NPC_Index;
ApplyEngagementButton.OnClick = function(Button) {
InitWindow();
//打开背包
L_sq_Open_ExWindow(0x1ADE090, 0, 0, 1);
Button.Parent.CloseAllEach();
Button.Parent.CloseWindow();
ResetFocus();
R_Utils.PlaySound("WINDOW_SHOW");
}.bindenv(this);
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
SThis.AddChild(ApplyEngagementButton);
}.bindenv(this));
}
}
function InitWindow() {
Visible = true;
}
}
// L_Windows_List <- [];
// getroottable().rawdelete("LenheartPluginsInitFlag");
// getroottable().rawdelete("EventList_Obj")
// getroottable().rawdelete("ItemFusion_Obj");
// getroottable().rawdelete("L_Each_Obj");
function Lenheart_ItemFusion_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("ItemFusion_Obj")) {
RootTab.rawset("ItemFusion_Obj", true);
LenheartNewUI_CreateWindow(ItemFusionC, "装备改造-融合装备", 100, 120, 246, 292, 24);
}
}
getroottable()["LenheartFuncTab"].rawset("ItemFusionFuncN", Lenheart_ItemFusion_Fun);