/* 文件名:ObjectConvert.nut 路径:Project/CustomPlugins/lulu/ObjectConvert.nut 创建日期:2026-02-09 23:33 文件用途: */ function sq_GetCNRDObjectToPassiveObject(obj) { return L_Sq_ObjectAddressToSqrObject(L_Sq_GetObjectAddress(obj), "CNRDPassiveObject", 0); } function sq_GetCNRDObjectToSQRPassiveObject(obj) { return L_Sq_ObjectAddressToSqrObject(L_Sq_GetObjectAddress(obj), "CNSquirrelPassiveObject", 0); } function sq_GetObjectAbilityInteger(obj, ObjectAddressOffset) { return NativePointer(L_Sq_GetObjectAddress(obj) + ObjectAddressOffset).readInt(); } function sq_SetObjectAbilityInteger(obj, ObjectAddressOffset, Value) { NativePointer(L_Sq_GetObjectAddress(obj) + ObjectAddressOffset).writeInt(Value); } function sq_GetObjectAbilityFloat(obj, ObjectAddressOffset) { return NativePointer(L_Sq_GetObjectAddress(obj) + ObjectAddressOffset).readFloat(); } function sq_SetObjectAbilityFloat(obj, ObjectAddressOffset, Value) { NativePointer(L_Sq_GetObjectAddress(obj) + ObjectAddressOffset).writeFloat(Value); } function sq_GetObjectAbilityIntegerWithDecrypt(obj, ObjectAddressOffset) { return MemoryTool.DecodeMemoryData(L_Sq_GetObjectAddress(obj) + ObjectAddressOffset); } function sq_SetObjectAbilityIntegerWithDecrypt(obj, ObjectAddressOffset, Value) { MemoryTool.EncodeMemoryData(L_Sq_GetObjectAddress(obj) + ObjectAddressOffset, Value); } function sq_GetObjectAbilityFloatWithDecrypt(obj, ObjectAddressOffset) { local Res = MemoryTool.DecodeMemoryData(L_Sq_GetObjectAddress(obj) + ObjectAddressOffset); local B = blob(); B.writen(Res, 'i'); return B.readn('f'); } function sq_SetObjectAbilityFloatWithDecrypt(obj, ObjectAddressOffset, Value) { local B = blob(); B.writen(Value, 'f'); MemoryTool.EncodeMemoryData(L_Sq_GetObjectAddress(obj) + ObjectAddressOffset, B.readn('i')); } //[human damage rate] // print(DATK(AtkC, 0x294).readFloat()); //[fort damage rate] // print(DATK(AtkC, 0x2A0).readFloat()); //[monster damage rate] // print(DATK(AtkC, 0x2AC).readFloat()); //[critical hit] // print(DATK(AtkC, 0x68).readFloat()); //[damage] // print(DATK(AtkC, 0x0).readFloat()); //[damage bonus] // print(DATK(AtkC, 0x24).readInt()); //[absolute damage] // print(DATK(AtkC, 0x18).readInt()); //[damage reaction] // print(NativePointer(AtkC + 0x4C).readInt()); //[knuck back] // print(DATK(AtkC, 0x8C).readInt()); function sq_GetCurrentAttackInfoDamage(attackInfo) { local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]); local Res = MemoryTool.DecodeMemoryData(AtkC + 0x0); local B = blob(); B.writen(Res, 'i'); B.seek(0); return B.readn('f'); } function sq_SetCurrentAttackInfoDamage(attackInfo, damage) { local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]); local B = blob(); B.writen(damage, 'f'); B.seek(0); MemoryTool.EncodeMemoryData(AtkC + 0x0, B.readn('i')); } 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) { local AtkC = L_sq_P2I(attackInfo["__ot"][28259608]); MemoryTool.EncodeMemoryData(AtkC + 0x18, damage); }