Compare commits

...

2 Commits

Author SHA1 Message Date
Lenheart 2c5cbf6c4b 上架装备跨界插件 2025-12-15 16:45:38 +08:00
Lenheart 7edd836c63 装备跨界 2025-12-15 15:02:34 +08:00
29 changed files with 1084 additions and 76 deletions

View File

@ -235,7 +235,13 @@ function Lenheart_Each_Fun(obj) {
} }
} }
getroottable()["LenheartFuncTab"].rawset("Lenheart_EachN", Lenheart_Each_Fun); function Lenheart_Get_EachObj()
{
Lenheart_Each_Fun(1);
return getroottable().L_Each_Obj;
}
getroottable()["LenheartFuncTab"].rawset("_Lenheart_EachN", Lenheart_Each_Fun);

View File

@ -529,6 +529,26 @@ function CheackMouseInOldWindows() {
//设定鼠标逻辑 //设定鼠标逻辑
function RunMouseLogic(MousePos_X, MousePos_Y) { function RunMouseLogic(MousePos_X, MousePos_Y) {
// if (CheackMouseInNewWindows(MousePos_X, MousePos_Y)) {
// //悬停鼠标变更
// Sq_Memory_WriteByteArr(L_sq_I2P(0x110BA8D), [0x90, 0x90, 0x90]);
// //点击头顶图标
// Sq_Memory_WriteByteArr(L_sq_I2P(0xE7220C), [0xEB]);
// //点击NPC打开交互
// Sq_Memory_WriteByteArr(L_sq_I2P(0xE72234), [0xE9, 0xD0, 0x00, 0x00, 0x00, 0x90]);
// //点击仓库交互
// Sq_Memory_WriteByteArr(L_sq_I2P(0xFCF380), [0xC3]);
// //点击邮箱交互
// Sq_Memory_WriteByteArr(L_sq_I2P(0x94FDA0), [0xC3]);
// } else {
// Sq_Memory_WriteByteArr(L_sq_I2P(0x110BA8D), [0x89, 0x5F, 0x48]);
// Sq_Memory_WriteByteArr(L_sq_I2P(0xE7220C), [0x75]);
// Sq_Memory_WriteByteArr(L_sq_I2P(0xE72234), [0x0F, 0x85, 0xCF, 0x00, 0x00, 0x00]);
// Sq_Memory_WriteByteArr(L_sq_I2P(0xFCF380), [0x55]);
// Sq_Memory_WriteByteArr(L_sq_I2P(0x94FDA0), [0x55]);
// }
//解锁鼠标 如果鼠标已处于锁定状态 并且没有悬停在任何窗口上 解锁鼠标 //解锁鼠标 如果鼠标已处于锁定状态 并且没有悬停在任何窗口上 解锁鼠标
if (R_Mouse.IsLock()) { if (R_Mouse.IsLock()) {
//不在任何新窗口上 //不在任何新窗口上

View File

@ -429,4 +429,4 @@ function sq_GetCharacterAttribute(address) {
function sq_GetCharacterEquipAttribute(offest, Slot) { function sq_GetCharacterEquipAttribute(offest, Slot) {
return L_sq_GetCharacterAttribute(offest, Slot); return L_sq_GetCharacterAttribute(offest, Slot);
} }

View File

@ -291,7 +291,25 @@ class Rindro_BaseToolClass {
Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 8, X + Width - LeftTopW, Y + Height - LeftTopH); Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 8, X + Width - LeftTopW, Y + Height - LeftTopH);
} }
//品级颜色
function GetRarityColor(rarity) {
switch (rarity) {
case 0:
return sq_RGBA(255, 255, 255, 255);
case 1:
return sq_RGBA(104, 213, 237, 255);
case 2:
return sq_RGBA(179, 107, 254, 255);
case 3:
return sq_RGBA(255, 0, 240, 255);
case 4:
return sq_RGBA(255, 177, 0, 255);
case 5:
return sq_RGBA(255, 102, 102, 255);
case 6:
return sq_RGBA(255, 50, 50, 255);
}
}
} }
//获取文字绘制长度 //获取文字绘制长度
class LenheartTextClass { class LenheartTextClass {

View File

@ -9,6 +9,9 @@ class _Rindro_Hacker {
HookData = null; HookData = null;
NextReturnAddress = null;
CpuContext = null;
constructor() { constructor() {
HookTable = {}; HookTable = {};
HookData = {}; HookData = {};
@ -29,6 +32,17 @@ class _Rindro_Hacker {
HookTable.rawset(AddressStr, Controler); HookTable.rawset(AddressStr, Controler);
} }
} }
function _Haker_SetNextReturnAddress(Address) {
local Buffer = "" + Address;
Rindro_Haker.NextReturnAddress = Buffer.slice(Buffer.find("0x") + 2, -1);
}
function _Haker_SetCpuContext(tab) {
Rindro_Haker.CpuContext = tab;
}
//初始化Hacker //初始化Hacker
if (!(getroottable().rawin("Rindro_Haker"))) Rindro_Haker <- _Rindro_Hacker(); if (!(getroottable().rawin("Rindro_Haker"))) Rindro_Haker <- _Rindro_Hacker();
@ -60,4 +74,5 @@ OnSetCharacter_Control.MarrySystem <- function() {
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x18, Yosin_14SkillYpos2); L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x18, Yosin_14SkillYpos2);
} }
} }
}; };

View File

@ -299,6 +299,24 @@ Rindro_Haker.LoadHook(0x67C560, ["pointer", "int", "int", "int", "int", "void"],
}); });
// getroottable()._11B47C0_OpenWindow_CallBackFunc <- {};
// Rindro_Haker.LoadHook(0x11B47C0, ["pointer", "int", "int"],
// function(args) {
// local Ret = null;
// foreach(Func in _11B47C0_OpenWindow_CallBackFunc) {
// local FRet = Func(args);
// if (FRet != null) Ret = FRet;
// }
// return Ret;
// },
// function(args) {
// return null;
// });
/* /*
local Flag = L_Sq_CallFunc(0x59E3D0, "bool", FFI_MS_CDECL, ["int", "int", "int", "int"], ReadPath, ReadBuffer, AllocSize, ReadSizeBuffer); local Flag = L_Sq_CallFunc(0x59E3D0, "bool", FFI_MS_CDECL, ["int", "int", "int", "int"], ReadPath, ReadBuffer, AllocSize, ReadSizeBuffer);
if (Flag) { if (Flag) {
@ -315,12 +333,17 @@ Rindro_Haker.LoadHook(0x67C560, ["pointer", "int", "int", "int", "int", "void"],
// return null; // return null;
// }, // },
// function(args) { // function(args) {
// print(NativePointer(L_sq_I2P(args[1])).readUnicodeString()); // // print(NativePointer(L_sq_I2P(args[1])).readUnicodeString());
// if (NativePointer(L_sq_I2P(args[1])).readUnicodeString() == "SQR/../etc/rindro/ancientrelic/ancientrelic.nut") { // // if (NativePointer(L_sq_I2P(args[1])).readUnicodeString() == "SQR/../etc/rindro/ancientrelic/ancientrelic.nut") {
// printf("加载AP脚本"); // // printf("加载AP脚本");
// local str = "function sq_AddFunctionName(appendage)\n{\n}\n print(778899);"; // // local str = "function sq_AddFunctionName(appendage)\n{\n}\n print(778899);";
// NativePointer(L_sq_I2P(args[4])).writeInt(str.len()); // // NativePointer(L_sq_I2P(args[4])).writeInt(str.len());
// NativePointer(L_sq_I2P(args[2])).writeByteArray(str); // // NativePointer(L_sq_I2P(args[2])).writeByteArray(str);
// // }
// if (NativePointer(L_sq_I2P(args[1])).readUnicodeString() == "ui/inventory/iteminventorywindow.ui") {
// printf("读取ui");
// print(Rindro_Haker.NextReturnAddress);
// } // }
// return null; // return null;
// }); // });

43
Base/_Tool/HookMap.nut Normal file
View File

@ -0,0 +1,43 @@
/*
文件名:HookMap.nut
路径:Base/_Tool/HookMap.nut
创建日期:2025-12-12 22:40
文件用途:
*/
//通用HOOK入口函数
function _Hook_Enter_Currency_Func_(args, TableObj) {
local Ret = null;
foreach(Func in TableObj) {
local Buf = Func(args);
if (Buf != null) Ret = Buf;
}
return Ret;
}
//通用HOOK出口函数
function _Hook_Leave_Currency_Func_(args, TableObj) {
local Ret = null;
foreach(Func in TableObj) {
local Buf = Func(args);
if (Buf != null) Ret = Buf;
}
return Ret;
}
//通用HOOK注册全局临时表名
_Hook_Register_Currency_TableName_ <- null;
//通用注册HOOK函数
function _Hook_Register_Currency_Func_(AddressString, ArgRetArr, TableName) {
getroottable().rawset(TableName + "Enter_Func", {});
getroottable().rawset(TableName + "Leave_Func", {});
_Hook_Register_Currency_TableName_ = TableName;
Rindro_Haker.LoadHook(AddressString, ArgRetArr,
function(args) {
return _Hook_Enter_Currency_Func_(args, getroottable()[getroottable()._Hook_Register_Currency_TableName_ + "Enter_Func"]);
},
function(args) {
return _Hook_Leave_Currency_Func_(args, getroottable()[getroottable()._Hook_Register_Currency_TableName_ + "Leave_Func"]);
}
);
}
_Hook_Register_Currency_Func_(0xE6E070, ["int", "int", "int", "int"], "Cb_OpenWindow_");

View File

@ -7,6 +7,7 @@
"Base/_Tool/MemoryClass.nut", "Base/_Tool/MemoryClass.nut",
"Base/_Tool/Hacker_Class.nut", "Base/_Tool/Hacker_Class.nut",
"Base/_Tool/Hacker_RegApi.nut", "Base/_Tool/Hacker_RegApi.nut",
"Base/_Tool/HookMap.nut",
"Base/_Tool/Script_Class.nut", "Base/_Tool/Script_Class.nut",
"Base/_Tool/Image_Class.nut", "Base/_Tool/Image_Class.nut",
"Base/_Tool/Animation_Class.nut", "Base/_Tool/Animation_Class.nut",
@ -55,6 +56,10 @@
"修炼场": { "修炼场": {
"Private": true, "Private": true,
"Script": [ "Script": [
"Project/Trainingroom/Training_SummonMonster.nut",
"Project/Trainingroom/Training_ModifyAttributes.nut",
"Project/Trainingroom/Training_State.nut",
"Project/Trainingroom/Training_Setting.nut",
"Project/Trainingroom/Trainingroom.nut" "Project/Trainingroom/Trainingroom.nut"
], ],
"info": { "info": {
@ -76,6 +81,40 @@
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png" "ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png"
} }
}, },
"装备跨界": {
"price": 0,
"Script": [
"Project/ItemTool/ItemCrossover/ItemCrossover.nut"
],
"info": {
"ProjectAuthor": "0",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "装备跨界插件",
"ProjectAlias": "装备跨界插件",
"ProjectDetails": [
{
"type": "img",
"content": "0"
},
{
"type": "img",
"content": "1"
},
{
"type": "img",
"content": "2"
},
{
"type": "str",
"content": "在 etc/rindro/itemtool/itemcrossover/itemcrossover.etc 文件中更改配置,详细说明如下."
},
{
"type": "img",
"content": "3"
}
]
}
},
"赛利亚的热忱": { "赛利亚的热忱": {
"Private": true, "Private": true,
"Script": [ "Script": [
@ -102,13 +141,16 @@
{ {
"type": "img", "type": "img",
"content": "0" "content": "0"
},{ },
{
"type": "str", "type": "str",
"content": "在 etc/rindro/ancientrelic/ancientrelic.etc 文件中更改配置,三个数字为一组,(装备编号,普通状态下伤害倍率,开启魔能爆发状态下伤害倍率),可自行拓展装备和伤害,不限制装备类型." "content": "在 etc/rindro/ancientrelic/ancientrelic.etc 文件中更改配置,三个数字为一组,(装备编号,普通状态下伤害倍率,开启魔能爆发状态下伤害倍率),可自行拓展装备和伤害,不限制装备类型."
},{ },
{
"type": "img", "type": "img",
"content": "1" "content": "1"
},{ },
{
"type": "str", "type": "str",
"content": "其余机制均与原版一模一样." "content": "其余机制均与原版一模一样."
} }

View File

@ -10,6 +10,8 @@ class CustomizeWeapon_AncientRelic {
//是否有荒古装备 //是否有荒古装备
IsAncientRelic = false; IsAncientRelic = false;
//当前荒古装备信息
CurrentAncientRelicInfo = null;
//当前魔能积攒数值 //当前魔能积攒数值
MagicEnergyValue = 0; MagicEnergyValue = 0;
//当前魔能开启状态 //当前魔能开启状态
@ -23,6 +25,7 @@ class CustomizeWeapon_AncientRelic {
//魔能状态伤害增加率 //魔能状态伤害增加率
MagicDamageRate = 1.0; MagicDamageRate = 1.0;
EffectSetFlag = null;
constructor() { constructor() {
Info = {}; Info = {};
@ -38,10 +41,12 @@ class CustomizeWeapon_AncientRelic {
} }
local NormalRate = Data.Get(); local NormalRate = Data.Get();
local ExRate = Data.Get(); local ExRate = Data.Get();
local DefaultMagicEnergyValue = Data.Get();
Info.rawset(Fbuf, { Info.rawset(Fbuf, {
NormalRate = NormalRate.tofloat() / 100.0 + 1.0, NormalRate = NormalRate.tofloat() / 100.0 + 1.0,
ExRate = ExRate.tofloat() / 100.0 + 1.0 ExRate = ExRate.tofloat() / 100.0 + 1.0,
DefaultMagicEnergyValue = DefaultMagicEnergyValue.tointeger()
}) })
} }
} }
@ -52,7 +57,7 @@ class CustomizeWeapon_AncientRelic {
return MagicEnergyState ? MagicDamageRate : DamageRate; return MagicEnergyState ? MagicDamageRate : DamageRate;
}.bindenv(this)); }.bindenv(this));
DrawAppendCallBackFunc.rawset("AncientRelic", DrawEffect.bindenv(this)); // DrawAppendCallBackFunc.rawset("AncientRelic", DrawEffect.bindenv(this));
// onAttackParentCallBackFunc.rawset("AncientRelic", OnAttack.bindenv(this)); // onAttackParentCallBackFunc.rawset("AncientRelic", OnAttack.bindenv(this));
// local str = "funcaksdnjkansdknasjdad"; // local str = "funcaksdnjkansdknasjdad";
@ -70,6 +75,13 @@ class CustomizeWeapon_AncientRelic {
local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "../etc/rindro/ancientrelic/ancientrelic.nut"); local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "../etc/rindro/ancientrelic/ancientrelic.nut");
if (!appendage) { if (!appendage) {
CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 169, true, "../etc/rindro/ancientrelic/ancientrelic.nut", true); CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 169, true, "../etc/rindro/ancientrelic/ancientrelic.nut", true);
if (CurrentAncientRelicInfo) {
DamageRate = CurrentAncientRelicInfo.NormalRate;
MagicDamageRate = CurrentAncientRelicInfo.ExRate;
MagicEnergyValue = CurrentAncientRelicInfo.DefaultMagicEnergyValue;
}
//默认魔能值不为0的装备
if (MagicEnergyValue != 0) SetEffect();
} }
} }
} }
@ -77,7 +89,8 @@ class CustomizeWeapon_AncientRelic {
//魔能爆炸 //魔能爆炸
function MagicEnergyExplosion(obj) { function MagicEnergyExplosion(obj) {
local OutbreakBool = obj.getMyPassiveObject(48882, 0); local OutbreakBool = obj.getMyPassiveObject(48882, 0);
if (OutbreakBool && !MagicEnergyState) { if (OutbreakBool && !MagicEnergyState && MagicEnergyValue >= 100) {
EffectSetFlag = 7;
MagicEnergyState = true; MagicEnergyState = true;
MagicEnergyTimer = Clock(); MagicEnergyTimer = Clock();
sq_SendDestroyPacketPassiveObject(OutbreakBool); sq_SendDestroyPacketPassiveObject(OutbreakBool);
@ -85,47 +98,83 @@ class CustomizeWeapon_AncientRelic {
} }
//绘制魔能特效 // //绘制魔能特效
function DrawEffect(args) { // function DrawEffect(args) {
if (IsAncientRelic) { // if (IsAncientRelic) {
//魔能开启状态 // //魔能开启状态
if (MagicEnergyValue > 0) { // if (MagicEnergyValue > 0) {
if (MagicEnergyState) { // if (MagicEnergyState) {
if (MagicEnergyStage == 0) { // if (MagicEnergyStage == 0) {
Rindro_BaseToolClass.DrawAniEx(args[1], args[2], "etc/rindro/ancientrelic/ani/open/01_red/red_onedodge2.ani"); // Rindro_BaseToolClass.DrawAniEx(args[1], args[2], "etc/rindro/ancientrelic/ani/open/01_red/red_onedodge2.ani");
} else if (MagicEnergyStage == 1) { // } else if (MagicEnergyStage == 1) {
Rindro_BaseToolClass.DrawAniEx(args[1], args[2], "etc/rindro/ancientrelic/ani/open/02_yellow/yellow_onedodge2.ani"); // Rindro_BaseToolClass.DrawAniEx(args[1], args[2], "etc/rindro/ancientrelic/ani/open/02_yellow/yellow_onedodge2.ani");
} else if (MagicEnergyStage == 2) { // } else if (MagicEnergyStage == 2) {
Rindro_BaseToolClass.DrawAniEx(args[1], args[2], "etc/rindro/ancientrelic/ani/open/03_white/white_onedodge2.ani"); // Rindro_BaseToolClass.DrawAniEx(args[1], args[2], "etc/rindro/ancientrelic/ani/open/03_white/white_onedodge2.ani");
} // }
} // }
//普通状态 // //普通状态
else { // else {
local Step = ((MagicEnergyValue / 20).tointeger() + 1); // local Step = ((MagicEnergyValue / 20).tointeger() + 1);
if (Step > 5) Step = 5; // if (Step > 5) Step = 5;
Rindro_BaseToolClass.DrawAniEx(args[1], args[2], "etc/rindro/ancientrelic/ani/" + Step + "/particle1.ani"); // Rindro_BaseToolClass.DrawAniEx(args[1], args[2], "etc/rindro/ancientrelic/ani/" + Step + "/particle1.ani");
} // }
} // }
} // }
} // }
//攻击判定回调 //攻击判定回调
function OnAttack() { function OnAttack() {
if (IsAncientRelic) { if (IsAncientRelic && !MagicEnergyState) {
MagicEnergyValue++; MagicEnergyValue++;
SetEffect();
if (MagicEnergyValue > 100) MagicEnergyValue = 100; if (MagicEnergyValue > 100) MagicEnergyValue = 100;
} }
} }
//设置魔能值与动画关联关系
function SetEffect() {
if (MagicEnergyValue == 1) EffectSetFlag = 1;
if (MagicEnergyValue == 20) EffectSetFlag = 2;
if (MagicEnergyValue == 40) EffectSetFlag = 3;
if (MagicEnergyValue == 60) EffectSetFlag = 4;
if (MagicEnergyValue == 80) EffectSetFlag = 5;
if (MagicEnergyValue == 100) EffectSetFlag = 6;
}
function AppendProc(appendage) {
if (EffectSetFlag != null && EffectSetFlag <= 6 && !MagicEnergyState) {
appendage.sq_DeleteEffectFront();
appendage.sq_AddEffectFront("etc/rindro/ancientrelic/ani/" + EffectSetFlag + "/particle1.ani");
EffectSetFlag = null;
} else if (EffectSetFlag == 7) {
appendage.sq_DeleteEffectFront();
appendage.sq_AddEffectFront("etc/rindro/ancientrelic/ani/open/01_red/red_onedodge2.ani");
EffectSetFlag = null;
} else if (EffectSetFlag == 8) {
appendage.sq_DeleteEffectFront();
appendage.sq_AddEffectFront("etc/rindro/ancientrelic/ani/open/02_yellow/yellow_onedodge2.ani");
EffectSetFlag = null;
} else if (EffectSetFlag == 9) {
appendage.sq_DeleteEffectFront();
appendage.sq_AddEffectFront("etc/rindro/ancientrelic/ani/open/03_white/white_onedodge2.ani");
EffectSetFlag = null;
} else if (EffectSetFlag == 10) {
appendage.sq_DeleteEffectFront();
EffectSetFlag = null;
}
}
//检测是否穿戴荒古装备 //检测是否穿戴荒古装备
function CheckWear() { function CheckWear() {
for (local i = 1; i< 13; ++i) { for (local i = 1; i< 13; ++i) {
//编号 //编号
local Index = L_sq_GetCharacterAttribute(0x1c, i); local Index = L_sq_GetCharacterAttribute(0x1c, i);
if (Info.rawin(Index)) { if (Info.rawin(Index)) {
DamageRate = Info[Index].NormalRate; CurrentAncientRelicInfo = Info[Index];
MagicDamageRate = Info[Index].ExRate;
IsAncientRelic = true; IsAncientRelic = true;
return; return;
} }
@ -139,14 +188,16 @@ class CustomizeWeapon_AncientRelic {
if (MagicEnergyValue > 0) { if (MagicEnergyValue > 0) {
if (MagicEnergyState) { if (MagicEnergyState) {
//检测魔能变更时间 //检测魔能变更时间
if (Clock() - MagicEnergyTimer >= 7000) { if (Clock() - MagicEnergyTimer >= 1000) {
MagicEnergyTimer = Clock(); MagicEnergyTimer = Clock();
MagicEnergyStage++; MagicEnergyStage++;
EffectSetFlag = 7 + MagicEnergyStage;
//爆发结束 //爆发结束
if (MagicEnergyStage > 2) { if (MagicEnergyStage > 2) {
MagicEnergyState = false; MagicEnergyState = false;
MagicEnergyStage = 0; MagicEnergyStage = 0;
MagicEnergyValue = 0; MagicEnergyValue = 0;
EffectSetFlag = 10;
sq_GetCNRDObjectToSQRCharacter(obj).sq_SendCreatePassiveObjectPacket(48883, 0, 0, 0, 0); sq_GetCNRDObjectToSQRCharacter(obj).sq_SendCreatePassiveObjectPacket(48883, 0, 0, 0, 0);
} }
} }
@ -177,6 +228,11 @@ class CustomizeWeapon_AncientRelic {
DamageRate = 1.0; DamageRate = 1.0;
//魔能状态伤害增加率 //魔能状态伤害增加率
MagicDamageRate = 1.0; MagicDamageRate = 1.0;
//移除掉身上的AP
local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "../etc/rindro/ancientrelic/ancientrelic.nut");
if (appendage) {
CNSquirrelAppendage.sq_RemoveAppendage(obj, "../etc/rindro/ancientrelic/ancientrelic.nut");
}
} }
} }
} }
@ -202,4 +258,12 @@ function onAttackParent_appendage_AncientRelic(appendage, realAttacker, damager,
} }
} }
function proc_appendage_ancient(appendage) {
if (!appendage) return;
local RootTab = getroottable();
if (RootTab.rawin("CustomizeWeapon_AncientRelic_Obj")) {
RootTab["CustomizeWeapon_AncientRelic_Obj"].AppendProc(appendage);
}
}
getroottable()["LenheartFuncTab"].rawset("AncientRelicFuncN", Lenheart_AncientRelic_Fun); getroottable()["LenheartFuncTab"].rawset("AncientRelicFuncN", Lenheart_AncientRelic_Fun);

View File

@ -67,8 +67,6 @@ class EventShopC extends LenheartNewUI_Windows {
function RegisterNpc(id) { function RegisterNpc(id) {
local EachManager = getroottable()["L_Each_Obj"]; local EachManager = getroottable()["L_Each_Obj"];
//先清空注册
EachManager.RemoveEachForNpc(id);
EachManager.AddEachForNpc(id, function(SThis) { EachManager.AddEachForNpc(id, function(SThis) {
//关闭按钮 //关闭按钮

View File

@ -125,8 +125,6 @@ class ExchangeC extends LenheartNewUI_Windows {
function RegisterNpc(id) { function RegisterNpc(id) {
local EachManager = getroottable()["L_Each_Obj"]; local EachManager = getroottable()["L_Each_Obj"];
//先清空注册
EachManager.RemoveEachForNpc(id);
EachManager.AddEachForNpc(id, function(SThis) { EachManager.AddEachForNpc(id, function(SThis) {
//关闭按钮 //关闭按钮
local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3); local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3);

View File

@ -42,13 +42,6 @@ class HudUiC extends LenheartNewUI_Windows {
//修补内存 //修补内存
function FixMemory() { function FixMemory() {
printf("宽屏UI已加载!");
printf("宽屏UI已加载!");
printf("宽屏UI已加载!");
printf("宽屏UI已加载!");
printf("宽屏UI已加载!");
printf("宽屏UI已加载!");
printf("宽屏UI已加载!");
L_sq_WAB(0x400E10, 9); L_sq_WAB(0x400E10, 9);
L_sq_WAB(0x400E11, 4); L_sq_WAB(0x400E11, 4);

View File

@ -0,0 +1,327 @@
/*
文件名:ItemCrossover.nut
路径:Project/ItemTool/ItemCrossover/ItemCrossover.nut
创建日期:2025-12-14 20:47
文件用途:
*/
class ItemCrossoverC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
Visible = false;
NPCList = null;
Img = Rindro_Image("interface2/ui/newitemtool/newitemtool.img");
//待跨界装备
CrossoverItem = null;
//错误信息
ErrorMsg = null;
//所需材料信息
MaterialInfo = null;
//所需材料是否足够
MaterialIsEnough = false;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
InifPvf();
RegNpc();
DiscardItemCallBackFunc.rawset("ItemCrossoverC", DiscardItem.bindenv(this));
Pack_Control.rawset(21007002, function(Chunk) {
local Jso = Json.Decode(Chunk);
if (Jso.rawin("error")) {
ErrorMsg = 1;
}
if (Jso.rawin("MgInfo")) {
MaterialInfo = Jso.MgInfo;
//材料是否充足
MaterialIsEnough = true;
foreach(Info in MaterialInfo) {
if (Info.NeedCount > Info.RealCount) {
MaterialIsEnough = false;
break;
}
}
}
}.bindenv(this));
//成功跨界回包
Pack_Control.rawset(21007004, function(Chunk) {
//清空
CrossoverItem = null;
ErrorMsg = null;
MaterialInfo = null;
MaterialIsEnough = false;
R_Utils.PlaySound("CHNUTTREE_BOX");
}.bindenv(this));
}
function RegisterWidget() {
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(274, 4, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
this.Visible = false;
}.bindenv(this);
Childrens.append(CloseButton);
//确认按钮
local CrossoverButton = LenheartNewUI_ButtonText(109, 260, 15, "确认跨界");
CrossoverButton.DWidth = 18;
CrossoverButton.Width = 74;
CrossoverButton.SetTextOffset(-4, 1);
CrossoverButton.OnClickEx = function(Btn) {
if (!Btn.Visible) return;
SendPackEx({
op = 21007003,
item = CrossoverItem
});
}.bindenv(this);
CrossoverButton.SetCallBackFunc(function(Btn) {
// if (mode >= 1 && mode< 3) {
// Btn.Visible = true;
// } else {
// Btn.Visible = false;
// }
if (ErrorMsg || !MaterialIsEnough) {
Btn.State = 8;
} else {
Btn.State = 0;
}
}.bindenv(this));
AddChild(CrossoverButton);
}
//绘制主界面
function DrawMain(obj) {
//背景框
DrawNineBox(X, Y, 292, 292, "interface/lenheartwindowcommon.img", 213);
//标题
DrawWindowTitle(293);
//绘制标题名
L_sq_DrawCode("装备跨界", X + 123, Y + 5, sq_RGBA(230, 200, 155, 255), 0, 1);
Img.DrawPng(0, X + 8, Y + 32);
if (CrossoverItem) {
//绘制不可跨界原因
if (ErrorMsg) {
local str = "该装备不可跨界!";
L_sq_DrawCode(str, X + 147 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, sq_RGBA(255, 60, 48, 255), 0, 1);
for (local i = 0; i< 5; i++) {
Img.DrawPng(2, X + 31 + 51 * i, Y + 195);
}
} else {
//绘制跨界所需材料及数量信息
if (MaterialInfo) {
for (local i = 0; i< 5; i++) {
if (i >= MaterialInfo.len()) {
Img.DrawPng(2, X + 31 + 51 * i, Y + 195);
continue;
}
local Info = MaterialInfo[i];
DrawItemBase(X + 31 + 51 * i, Y + 195, Info.Item, Info.NeedCount);
//数量不足绘制遮盖图
if (Info.NeedCount > Info.RealCount) {
Rindro_Image_GlobalMap["lenheartui"].DrawExPng(257, X + 32 + 51 * i, Y + 196, 0, sq_RGBA(255, 255, 255, 120), 1.0, 1.0);
}
local RealCountStr = Info.RealCount.tostring();
local Color = Info.RealCount >= Info.NeedCount ? sq_RGBA(52, 255, 50, 255) : sq_RGBA(255, 60, 47, 255);
L_sq_DrawCode(RealCountStr, X + 46 + (51 * i) - LenheartTextClass.GetStringLength(RealCountStr) / 2, Y + 232, Color, 0, 1);
}
if (!MaterialIsEnough) {
local str = "跨界材料不足!";
L_sq_DrawCode(str, X + 147 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, sq_RGBA(255, 60, 48, 255), 0, 1);
} else {
local str = CrossoverItem.Name;
L_sq_DrawCode(str, X + 147 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, GetRarityColor(CrossoverItem.Rarity), 0, 1);
}
}
}
DrawItemObject(X + 133, Y + 96, CrossoverItem);
}
local MousePos_X = IMouse.GetXPos();
local MousePos_Y = IMouse.GetYPos();
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + 132, Y + 95, 30, 30)) {
L_sq_SetDrawImgModel(2, 0);
Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X + 132, Y + 95);
L_sq_ReleaseDrawImgModel();
}
}
//绘制道具带道具信息
function DrawItemObject(X, Y, Object) {
if (!Object) return;
L_Sq_DrawItem(X, Y, Object.ItemId, Object.Count, 0, 0, 0);
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 30, 30)) {
//打开道具信息窗口
if (!ItemInfoDrawS) {
ItemInfoDrawS = L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 275, Object.ItemAddress, 41);
//校准道具信息窗口位置
L_Sq_CallFunc(0xF3B3B0, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], ItemInfoDrawS, IMouse.GetXPos(), IMouse.GetYPos(), 28, 28);
//我自己UI打开的道具信息窗口需要把渲染队列改为下层 以显示我打开的道具
getroottable().WindowsShowABFlag <- false;
}
} else {
if (ItemInfoDrawS) {
L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0);
ItemInfoDrawS = null;
}
}
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
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 {
CrossoverItem = FindItemPosByForeachInven(ItemAddress);
//清空
ErrorMsg = null;
MaterialInfo = null;
MaterialIsEnough = false;
if (CrossoverItem) {
SendPackEx({
op = 21007001,
item = CrossoverItem
});
}
}
}
//遍历背包查找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) {
local NamePointer = L_sq_RA(FindAddress + 0x20);
if (z != 0) {
if (ItemInfoDrawS) {
L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0);
ItemInfoDrawS = null;
ResetFocus();
}
return null;
}
return {
Type = z,
Pos = i,
Vis = false,
Count = MemoryTool.DecodeMemoryData(FindAddress + 0x1A4),
ItemId = L_sq_RA(FindAddress + 0x1c),
ItemAddress = FindAddress,
Name = NativePointer(L_sq_I2P(NamePointer)).readUnicodeString()
Rarity = L_sq_RA(FindAddress + 0xF4),
};
}
}
}
return null;
}
function InifPvf() {
Rindro_Script.GetFileData("etc/rindro/itemtool/itemcrossover/itemcrossover.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 = Lenheart_Get_EachObj();
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 = 53;
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;
//清空
CrossoverItem = null;
ErrorMsg = null;
MaterialInfo = null;
MaterialIsEnough = false;
}
}
L_Windows_List <- [];
getroottable().rawdelete("LenheartPluginsInitFlag");
getroottable().rawdelete("EventList_Obj")
getroottable().rawdelete("ItemCrossover_Obj");
getroottable().rawdelete("L_Each_Obj");
function Lenheart_ItemCrossover_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("ItemCrossover_Obj")) {
RootTab.rawset("ItemCrossover_Obj", true);
LenheartNewUI_CreateWindow(ItemCrossoverC, "装备跨界窗口", ((getroottable().Rindro_Scr_Width - 700) / 2).tointeger(), 160, 292, 290, 28);
}
}
getroottable()["LenheartFuncTab"].rawset("ItemCrossoverFuncN", Lenheart_ItemCrossover_Fun);

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

View File

@ -336,7 +336,6 @@ class ItemFusionC extends LenheartNewUI_Windows {
local EachManager = getroottable()["L_Each_Obj"]; local EachManager = getroottable()["L_Each_Obj"];
foreach(id in NPCList) { foreach(id in NPCList) {
//先清空注册 //先清空注册
EachManager.RemoveEachForNpc(id);
EachManager.AddEachForNpc(id, function(SThis) { EachManager.AddEachForNpc(id, function(SThis) {
//关闭按钮 //关闭按钮
local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3); local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3);
@ -365,11 +364,12 @@ class ItemFusionC extends LenheartNewUI_Windows {
} }
} }
L_Windows_List <- [];
getroottable().rawdelete("LenheartPluginsInitFlag"); // L_Windows_List <- [];
getroottable().rawdelete("EventList_Obj") // getroottable().rawdelete("LenheartPluginsInitFlag");
getroottable().rawdelete("ItemFusion_Obj"); // getroottable().rawdelete("EventList_Obj")
getroottable().rawdelete("L_Each_Obj"); // getroottable().rawdelete("ItemFusion_Obj");
// getroottable().rawdelete("L_Each_Obj");
function Lenheart_ItemFusion_Fun(obj) { function Lenheart_ItemFusion_Fun(obj) {
local RootTab = getroottable(); local RootTab = getroottable();

View File

@ -0,0 +1,84 @@
/*
文件名:ItemInherit.nut
路径:Project/ItemTool/ItemInherit/ItemInherit.nut
创建日期:2025-12-15 15:03
文件用途:
*/
class ItemInheritC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
// Visible = false;
NPCList = null;
Img = Rindro_Image("interface2/ui/newitemtool/newitemtool.img");
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {
// //关闭按钮
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
// CloseButton.OnClick = function() {
// this.Visible = false;
// }.bindenv(this);
// Childrens.append(CloseButton);
}
//绘制主界面
function DrawMain(obj) {
//背景框
DrawNineBox(X, Y, 292, 292, "interface/lenheartwindowcommon.img", 213);
//标题
DrawWindowTitle(293);
//绘制标题名
L_sq_DrawCode("装备继承", X + 123, Y + 5, sq_RGBA(230, 200, 155, 255), 0, 1);
Img.DrawPng(3, X + 8, Y + 32);
Rindro_Image_GlobalMap["lenheartui"].DrawPng(469, X + 260, Y + 40);
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
}
L_Windows_List <- [];
getroottable().rawdelete("LenheartPluginsInitFlag");
getroottable().rawdelete("EventList_Obj")
getroottable().rawdelete("ItemInherit_Obj");
getroottable().rawdelete("L_Each_Obj");
function Lenheart_ItemInherit_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("ItemInherit_Obj")) {
RootTab.rawset("ItemInherit_Obj", true);
LenheartNewUI_CreateWindow(ItemInheritC, "装备继承窗口", ((getroottable().Rindro_Scr_Width - 700) / 2).tointeger(), 160, 292, 290, 28);
}
}
getroottable()["LenheartFuncTab"].rawset("ItemInheritFuncN", Lenheart_ItemInherit_Fun);

View File

@ -288,8 +288,6 @@ class NpcTransactionC extends LenheartNewUI_Windows {
function RegNpc() { function RegNpc() {
local EachManager = getroottable()["L_Each_Obj"]; local EachManager = getroottable()["L_Each_Obj"];
foreach(id in NPCList) { foreach(id in NPCList) {
//先清空注册
EachManager.RemoveEachForNpc(id);
EachManager.AddEachForNpc(id, function(SThis) { EachManager.AddEachForNpc(id, function(SThis) {
//关闭按钮 //关闭按钮
local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3); local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3);

View File

@ -169,8 +169,6 @@ class RecoveryC extends LenheartNewUI_Windows {
function RegisterNpc(id) { function RegisterNpc(id) {
local EachManager = getroottable()["L_Each_Obj"]; local EachManager = getroottable()["L_Each_Obj"];
//先清空注册
EachManager.RemoveEachForNpc(id);
EachManager.AddEachForNpc(id, function(SThis) { EachManager.AddEachForNpc(id, function(SThis) {
//关闭按钮 //关闭按钮

View File

@ -30,6 +30,7 @@ class SeriaZealC extends LenheartNewUI_Windows {
//已完成的累计次数 //已完成的累计次数
AccumCount = 0; AccumCount = 0;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = []; Childrens = [];
//注册控件 //注册控件

View File

@ -0,0 +1,58 @@
/*
文件名:Training_ModifyAttributes.nut
路径:Project/Trainingroom/Training_ModifyAttributes.nut
创建日期:2025-12-13 02:22
文件用途:修改训练房角色属性
*/
class Training_ModifyAttributesC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
// Visible = false;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {
// //关闭按钮
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
// CloseButton.OnClick = function() {
// this.Visible = false;
// }.bindenv(this);
// Childrens.append(CloseButton);
}
//绘制主界面
function DrawMain(obj) {
// print(2);
L_sq_DrawCode("修改属性页面", X + 50, Y + 80, sq_RGBA(230, 200, 155, 255), 0, 1);
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y - 28);
if (Parent && Parent.Visible) {
X = Parent.X;
Y = Parent.Y + 28;
}
}
}

View File

@ -0,0 +1,56 @@
/*
文件名:Training_Setting.nut
路径:Project/Trainingroom/Training_Setting.nut
创建日期:2025-12-13 02:24
文件用途:训练房设置
*/
class Training_SettingC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
// Visible = false;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {
// //关闭按钮
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
// CloseButton.OnClick = function() {
// this.Visible = false;
// }.bindenv(this);
// Childrens.append(CloseButton);
}
//绘制主界面
function DrawMain(obj) {
L_sq_DrawCode("设置页面", X + 50, Y + 80, sq_RGBA(230, 200, 155, 255), 0, 1);
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y - 28);
if (Parent && Parent.Visible) {
X = Parent.X;
Y = Parent.Y + 28;
}
}
}

View File

@ -0,0 +1,56 @@
/*
文件名:Training_State.nut
路径:Project/Trainingroom/Training_State.nut
创建日期:2025-12-13 02:23
文件用途:训练状态管理
*/
class Training_StateC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
// Visible = false;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {
// //关闭按钮
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
// CloseButton.OnClick = function() {
// this.Visible = false;
// }.bindenv(this);
// Childrens.append(CloseButton);
}
//绘制主界面
function DrawMain(obj) {
L_sq_DrawCode("状态页面", X + 50, Y + 80, sq_RGBA(230, 200, 155, 255), 0, 1);
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y - 28);
if (Parent && Parent.Visible) {
X = Parent.X;
Y = Parent.Y + 28;
}
}
}

View File

@ -0,0 +1,58 @@
/*
文件名:Training_SummonMonster.nut
路径:Project/Trainingroom/Training_SummonMonster.nut
创建日期:2025-12-13 02:02
文件用途:训练室-召唤怪物
*/
class Training_SummonMonsterC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
// Visible = false;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {
// //关闭按钮
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
// CloseButton.OnClick = function() {
// this.Visible = false;
// }.bindenv(this);
// Childrens.append(CloseButton);
}
//绘制主界面
function DrawMain(obj) {
// print(1);
L_sq_DrawCode("召唤怪物页面", X + 50, Y + 80, sq_RGBA(230, 200, 155, 255), 0, 1);
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y - 28);
if (Parent && Parent.Visible) {
X = Parent.X;
Y = Parent.Y + 28;
}
}
}

View File

@ -5,11 +5,14 @@
文件用途: 文件用途:
*/ */
class TrainingroomC extends LenheartNewUI_Windows { class TrainingroomC extends LenheartNewUI_Windows {
X = -321;
//调试模式 //调试模式
DeBugMode = true; // DeBugMode = true;
//不是窗口 //不是窗口
// NoWindow = true; NoWindow = true;
//是否可见 //是否可见
// Visible = false; // Visible = false;
@ -21,45 +24,173 @@ class TrainingroomC extends LenheartNewUI_Windows {
//位移修炼场副本编号 //位移修炼场副本编号
MoveTrainingroomDungeonId = 1; MoveTrainingroomDungeonId = 1;
//是否在修炼场中
InTrainingroom = false;
//队列
Queue = null;
//图像
Img = Rindro_Image("training/main.img");
//主界面展开状态
MainState = 0;
//子页面配置
PageConfig = ["召唤怪物", "修改属性", "状态", "设置"];
//子页面标题
Title = null;
//子页面
PageList = null;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = []; Childrens = [];
Title = [];
PageList = [];
Queue = QuestQueue();
//注册控件 //注册控件
RegisterWidget(); RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
X = -321;
InitPvf(); InitPvf();
Cb_OpenWindow_Enter_Func.rawset("TrainingroomC", function(args) {
NativePointer(Rindro_Haker.CpuContext.ecx).add(4344 * 4).writeInt(1);
if (args[0] == 244 && InTrainingroom) {
NativePointer(Rindro_Haker.CpuContext.ecx).add(4344 * 4).writeInt(0);
ChangeMainState(false);
}
}.bindenv(this));
} }
function RegisterWidget() { function RegisterWidget() {
// //关闭按钮
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276); local LogicFunc = function(Btn) {
// CloseButton.OnClick = function() { foreach(Pos, obj in Title) {
// this.Visible = false; if (obj != Btn) obj.State = 0;
// }.bindenv(this); else {
// Childrens.append(CloseButton); obj.State = 1;
ChangeSubPage(Pos);
}
}
};
foreach(Pos, Name in PageConfig) {
local Tabbars1 = LenheartNewUI_TabbarsText((Pos * 61), 4, Name);
if (Pos == 0) Tabbars1.State = 1;
Tabbars1.SetTextOffset(31 - LenheartTextClass.GetStringLength(Name) / 2, 4);
AddChild(Tabbars1);
Tabbars1.OnClickEx = LogicFunc.bindenv(this);
Title.append(Tabbars1);
}
//返回城镇
local ReturnToTheTownButton = LenheartNewUI_ButtonText(236, 450, 15, "返回城镇");
ReturnToTheTownButton.Idx = 74;
ReturnToTheTownButton.DWidth = 18;
ReturnToTheTownButton.Width = 74;
ReturnToTheTownButton.SetTextOffset(-4, 1);
ReturnToTheTownButton.OnClickEx = function(Btn) {
L_sq_SendPackType(45);
L_sq_SendPack();
ChangeMainState(false);
}.bindenv(this);
AddChild(ReturnToTheTownButton);
PageList.append(Training_SummonMonsterC("修炼场_召唤怪物页面", 0, 0, 300, 140, 0));
PageList.append(Training_ModifyAttributesC("修炼场_修改属性页面", 0, 0, 300, 140, 0));
PageList.append(Training_StateC("修炼场_状态页面", 0, 0, 300, 140, 0));
PageList.append(Training_SettingC("修炼场_设置页面", 0, 0, 300, 140, 0));
ChangeSubPage(0);
}
function ChangeSubPage(Index) {
for (local i = 0; i< PageList.len(); i++) {
local Object = PageList[i];
Object.Visible = false;
RemoveChild(Object.ObjectId);
}
PageList[Index].Visible = true;
AddChild(PageList[Index]);
} }
//绘制主界面 //绘制主界面
function DrawMain(obj) { function DrawMain(obj) {
Img.DrawPng(0, X, Y);
//分割线
Rindro_Image_GlobalMap["lenheartui"].DrawExPng(230, X, Y + 25, 0, sq_RGBA(255, 255, 255, 250), 1.5, 1.0);
//子页面背景框
//嵌套背景框
// DrawNineBox(X + 0, Y + 26, 302, 146, "interface/lenheartwindowcommon.img", 0);
}
function ChangeMainState(flag) {
if (MainState == 0) {
MainState = 1
Queue.AddQuest("界面移动动画", function(Name, Time) {
local Offset = sq_GetAccel(-321, 0, Time, 500, true);
X = Offset;
if (Offset == 0) {
MainState = 2;
Queue.RemoveQuest(Name);
}
}.bindenv(this));
} else if (MainState == 2) {
MainState = 1;
Queue.AddQuest("界面移动动画", function(Name, Time) {
local Offset = sq_GetAccel(0, -321, Time, 500, true);
X = Offset;
if (Offset == -321) {
MainState = 0;
Queue.RemoveQuest(Name);
}
}.bindenv(this));
}
} }
function Show(obj) { function Show(obj) {
DrawMain(obj); DrawMain(obj);
LenheartNewUI_Windows.Show(obj); LenheartNewUI_Windows.Show(obj);
Queue.Run();
} }
//修炼场中Proc
function ProcInTraining(obj) {
InTrainingroom = false;
//判断自己是否在修炼场中
if (sq_GetCurrentModuleType() != 3) return;
local stage = sq_GetGlobaludpModuleStage();
local dungeon = sq_GetDungeonByStage(stage);
local dungeonIndex = sq_GetDuegonIndex(dungeon);
if (dungeonIndex != MoveTrainingroomDungeonId) return;
InTrainingroom = true;
local KThisC = L_sq_RA(0x1B470E0);
local KeyFlag = L_sq_RA(KThisC + 269 + DIK_F12);
if (KeyFlag == 128 && MainState != 1) {
ChangeMainState(true);
}
}
//逻辑入口 //逻辑入口
function Proc(obj) { function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y); LenheartNewUI_Windows.SyncPos(X, Y);
//主动调用子对象窗口的Proc
foreach(Object in Childrens) {
if (Object instanceof LenheartNewUI_Windows)
Object.Proc(obj);
}
//判断自己是否在需要位移修炼场的区域 //判断自己是否在需要位移修炼场的区域
if (sq_GetCurrentModuleType() == 1) { if (sq_GetCurrentModuleType() == 1) {
@ -76,6 +207,8 @@ class TrainingroomC extends LenheartNewUI_Windows {
} }
} }
} }
ProcInTraining(obj);
} }
function InitPvf() { function InitPvf() {
@ -101,7 +234,7 @@ function Lenheart_Trainingroom_Fun(obj) {
local RootTab = getroottable(); local RootTab = getroottable();
if (!RootTab.rawin("Trainingroom_Obj")) { if (!RootTab.rawin("Trainingroom_Obj")) {
RootTab.rawset("Trainingroom_Obj", true); RootTab.rawset("Trainingroom_Obj", true);
LenheartNewUI_CreateWindow(TrainingroomC, "修炼场窗口", ((getroottable().Rindro_Scr_Width - 405) / 2).tointeger(), 64, 405, 372, 28); LenheartNewUI_CreateWindow(TrainingroomC, "修炼场窗口", 0, 35, 306, 474, 0);
} }
} }

View File

@ -56,7 +56,6 @@ class WorldBossC extends LenheartNewUI_Windows {
MyRankObject = null; MyRankObject = null;
//计时器 //计时器
TiemrCache = null; TiemrCache = null;
Timer = null; Timer = null;
@ -238,7 +237,6 @@ class WorldBossC extends LenheartNewUI_Windows {
} }
function RegisterWidget() { function RegisterWidget() {
//关闭按钮 //关闭按钮
local CloseButton = LenheartNewUI_BaseButton(738, 3, 11, 12, "interface/lenheartwindowcommon.img", 276); local CloseButton = LenheartNewUI_BaseButton(738, 3, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() { CloseButton.OnClick = function() {

View File

@ -196,5 +196,26 @@
}, },
"Project/Trainingroom": { "Project/Trainingroom": {
"description": "修炼场" "description": "修炼场"
},
"Base/_Tool/HookMap.nut": {
"description": "所有HOOK"
},
"Project/Trainingroom/Training_SummonMonster.nut": {
"description": "召唤怪物"
},
"Project/Trainingroom/Training_ModifyAttributes.nut": {
"description": "修改属性"
},
"Project/Trainingroom/Training_State.nut": {
"description": "状态"
},
"Project/Trainingroom/Training_Setting.nut": {
"description": "设置"
},
"Project/ItemTool/ItemCrossover": {
"description": "装备跨界"
},
"Project/ItemTool/ItemInherit": {
"description": "装备继承"
} }
} }