feat: 添加偷窃系统和自己服装备功能

- 新增偷窃系统(Steal)模块及相关UI界面
- 添加自己服(MySelf)装备功能及显示界面
- 在folder-alias.json中添加新系统路径映射
- 为BaseTool_Class添加DrawNineBoxAlpha方法支持透明度
- 修改NewItemInfoWindow装备判断逻辑
- 在FileConfig.json中为多个系统添加Enabled配置项
- 在ObjectConvert.nut中添加装备掉落相关函数
This commit is contained in:
2026-04-08 22:26:57 +08:00
parent fb1309b486
commit feb316d882
8 changed files with 464 additions and 65 deletions

View File

@@ -53,32 +53,32 @@ function sq_SetObjectAbilityFloatWithDecrypt(obj, ObjectAddressOffset, Value) {
//[human damage rate]
// print(DATK(AtkC, 0x294).readFloat());
//[human damage rate]
// print(DATK(AtkC, 0x294).readFloat());
//[fort damage rate]
// print(DATK(AtkC, 0x2A0).readFloat());
//[fort damage rate]
// print(DATK(AtkC, 0x2A0).readFloat());
//[monster damage rate]
// print(DATK(AtkC, 0x2AC).readFloat());
//[monster damage rate]
// print(DATK(AtkC, 0x2AC).readFloat());
//[critical hit]
// print(DATK(AtkC, 0x68).readFloat());
//[critical hit]
// print(DATK(AtkC, 0x68).readFloat());
//[damage]
// print(DATK(AtkC, 0x0).readFloat());
//[damage]
// print(DATK(AtkC, 0x0).readFloat());
//[damage bonus]
// print(DATK(AtkC, 0x24).readInt());
//[damage bonus]
// print(DATK(AtkC, 0x24).readInt());
//[absolute damage]
// print(DATK(AtkC, 0x18).readInt());
//[absolute damage]
// print(DATK(AtkC, 0x18).readInt());
//[damage reaction]
// print(NativePointer(AtkC + 0x4C).readInt());
//[damage reaction]
// print(NativePointer(AtkC + 0x4C).readInt());
//[knuck back]
// print(DATK(AtkC, 0x8C).readInt());
//[knuck back]
// print(DATK(AtkC, 0x8C).readInt());
function EncodeAttackMemoryData(AtkC, Offset) {
@@ -130,37 +130,32 @@ function sq_SetCurrentAttackInfoDamage(attackInfo, damage) {
MemoryTool.EncodeMemoryData(AtkC + 0x0, B.readn('i'));
}
function sq_GetCurrentAttackInfoAbsoluteDamage(attackInfo)
{
function sq_GetCurrentAttackInfoAbsoluteDamage(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x18);
return Res;
}
function sq_SetCurrentAttackInfoAbsoluteDamage(attackInfo, damage)
{
function sq_SetCurrentAttackInfoAbsoluteDamage(attackInfo, damage) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
MemoryTool.EncodeMemoryData(AtkC + 0x18, damage);
}
function sq_GetCurrentAttackInfoBonusRate(attackInfo)
{
function sq_GetCurrentAttackInfoBonusRate(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x24);
return Res;
}
// print(DATK(AtkC, 0x1c8).readFloat());
// print(DATK(AtkC, 0x1ec).readInt());
// print(DATK(AtkC, 0x234).readInt());
function sq_GetCurrentAttackInfoChangeStatus(attackInfo)
{
// print(DATK(AtkC, 0x1c8).readFloat());
// print(DATK(AtkC, 0x1ec).readInt());
// print(DATK(AtkC, 0x234).readInt());
function sq_GetCurrentAttackInfoChangeStatus(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Info = [EncodeAttackMemoryData(AtkC, 0x1c8).readFloat(), EncodeAttackMemoryData(AtkC, 0x1ec).readInt(), EncodeAttackMemoryData(AtkC, 0x234).readInt()];
return Info;
}
function sq_SetCurrentAttackInfoChangeStatus(attackInfo, Data1, Data2, Data3)
{
function sq_SetCurrentAttackInfoChangeStatus(attackInfo, Data1, Data2, Data3) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local B = blob();
B.writen(Data1, 'f');
@@ -176,8 +171,7 @@ function sq_SetCurrentAttackInfoChangeStatus(attackInfo, Data1, Data2, Data3)
MemoryTool.EncodeMemoryData(AtkC + 0x234, B.readn('i'));
}
function sq_GetCurrentAttackInfoHumanDamageRate(attackInfo)
{
function sq_GetCurrentAttackInfoHumanDamageRate(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x294);
local B = blob();
@@ -186,8 +180,7 @@ function sq_GetCurrentAttackInfoHumanDamageRate(attackInfo)
return B.readn('f');
}
function sq_SetCurrentAttackInfoHumanDamageRate(attackInfo, rate)
{
function sq_SetCurrentAttackInfoHumanDamageRate(attackInfo, rate) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local B = blob();
B.writen(rate, 'f');
@@ -195,8 +188,7 @@ function sq_SetCurrentAttackInfoHumanDamageRate(attackInfo, rate)
MemoryTool.EncodeMemoryData(AtkC + 0x294, B.readn('i'));
}
function sq_GetCurrentAttackInfoFortDamageRate(attackInfo)
{
function sq_GetCurrentAttackInfoFortDamageRate(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x2A0);
local B = blob();
@@ -205,8 +197,7 @@ function sq_GetCurrentAttackInfoFortDamageRate(attackInfo)
return B.readn('f');
}
function sq_SetCurrentAttackInfoFortDamageRate(attackInfo, rate)
{
function sq_SetCurrentAttackInfoFortDamageRate(attackInfo, rate) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local B = blob();
B.writen(rate, 'f');
@@ -214,8 +205,7 @@ function sq_SetCurrentAttackInfoFortDamageRate(attackInfo, rate)
MemoryTool.EncodeMemoryData(AtkC + 0x2A0, B.readn('i'));
}
function sq_GetCurrentAttackInfoMonsterDamageRate(attackInfo)
{
function sq_GetCurrentAttackInfoMonsterDamageRate(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x2AC);
local B = blob();
@@ -224,8 +214,7 @@ function sq_GetCurrentAttackInfoMonsterDamageRate(attackInfo)
return B.readn('f');
}
function sq_SetCurrentAttackInfoMonsterDamageRate(attackInfo, rate)
{
function sq_SetCurrentAttackInfoMonsterDamageRate(attackInfo, rate) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local B = blob();
B.writen(rate, 'f');
@@ -233,8 +222,7 @@ function sq_SetCurrentAttackInfoMonsterDamageRate(attackInfo, rate)
MemoryTool.EncodeMemoryData(AtkC + 0x2AC, B.readn('i'));
}
function sq_GetCurrentAttackInfoCriticalRate(attackInfo)
{
function sq_GetCurrentAttackInfoCriticalRate(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x68);
local B = blob();
@@ -243,8 +231,7 @@ function sq_GetCurrentAttackInfoCriticalRate(attackInfo)
return B.readn('f');
}
function sq_SetCurrentAttackInfoCriticalRate(attackInfo, rate)
{
function sq_SetCurrentAttackInfoCriticalRate(attackInfo, rate) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local B = blob();
B.writen(rate, 'f');
@@ -252,35 +239,30 @@ function sq_SetCurrentAttackInfoCriticalRate(attackInfo, rate)
MemoryTool.EncodeMemoryData(AtkC + 0x68, B.readn('i'));
}
function sq_GetCurrentAttackInfoDamageReaction(attackInfo)
{
function sq_GetCurrentAttackInfoDamageReaction(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x4C);
return Res;
}
function sq_GetCurrentAttackeHitStunTime(attackInfo)
{
function sq_GetCurrentAttackeHitStunTime(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x138);
return Res;
}
function sq_GetCurrentAttackInfoKnuckBackType(attackInfo)
{
function sq_GetCurrentAttackInfoKnuckBackType(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x8C);
return Res;
}
function sq_SetCurrentAttackInfoKnuckBackType(attackInfo, type)
{
function sq_SetCurrentAttackInfoKnuckBackType(attackInfo, type) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
MemoryTool.EncodeMemoryData(AtkC + 0x8C, type);
}
function sq_GetCurrentAttackInfoStuckRate(attackInfo)
{
function sq_GetCurrentAttackInfoStuckRate(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x74);
local B = blob();
@@ -289,8 +271,7 @@ function sq_GetCurrentAttackInfoStuckRate(attackInfo)
return B.readn('f');
}
function sq_SetCurrentAttackInfoStuckRate(attackInfo, rate)
{
function sq_SetCurrentAttackInfoStuckRate(attackInfo, rate) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local B = blob();
B.writen(rate, 'f');
@@ -298,16 +279,37 @@ function sq_SetCurrentAttackInfoStuckRate(attackInfo, rate)
MemoryTool.EncodeMemoryData(AtkC + 0x74, B.readn('i'));
}
function sq_GetCurrentAttackUpForce(attackInfo)
{
function sq_GetCurrentAttackUpForce(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x5c);
return Res;
}
function sq_GetCurrentAttackBackForce(attackInfo)
{
function sq_GetCurrentAttackBackForce(attackInfo) {
local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]);
local Res = MemoryTool.DecodeMemoryData(AtkC + 0x50);
return Res;
}
}
function sq_DropEquipmentUnique(id, posX, posY) {
local T = {
op = 21016001,
id = id,
posX = posX,
posY = posY,
}
Rindro_BaseToolClass.SendPackEx(T);
}
function sq_DropEquipment(rarity, posX, posY)
{
local T = {
op = 21016003,
rarity = rarity,
posX = posX,
posY = posY,
}
Rindro_BaseToolClass.SendPackEx(T);
}