新增扩展装备项目及全局信息类描述,更新Hacker_RegApi.nut以支持装备穿戴回调
This commit is contained in:
parent
dfd46dc127
commit
420fa26303
|
|
@ -0,0 +1,364 @@
|
||||||
|
/*
|
||||||
|
文件名:RegistPushString.nut
|
||||||
|
路径:Base/CallBack/RegistPushString.nut
|
||||||
|
创建日期:2025-12-27 03:32
|
||||||
|
文件用途:注册推送字符串
|
||||||
|
*/
|
||||||
|
|
||||||
|
_o_procAppend_All_Map_ <- {}
|
||||||
|
function _o_procAppend_All_(obj) {
|
||||||
|
foreach (Func in _o_procAppend_All_Map_) {
|
||||||
|
Func(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onBeforeAttack_All_Map_ <- {}
|
||||||
|
function _o_onBeforeAttack_All_(obj, damager, boundingBox, isStuck) {
|
||||||
|
foreach (Func in _o_onBeforeAttack_All_Map_) {
|
||||||
|
Func(obj, damager, boundingBox, isStuck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onAfterAttack_All_Map_ <- {}
|
||||||
|
function _o_onAfterAttack_All_(obj, damager, boundingBox, isStuck) {
|
||||||
|
foreach (Func in _o_onAfterAttack_All_Map_) {
|
||||||
|
Func(obj, damager, boundingBox, isStuck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onAttackParent_appendage_plugins_Map_ <- {}
|
||||||
|
function _o_onAttackParent_appendage_plugins(appendage, realAttacker, damager, boundingBox, isStuck) {
|
||||||
|
foreach (Func in _o_onAttackParent_appendage_plugins_Map_) {
|
||||||
|
Func(appendage, realAttacker, damager, boundingBox, isStuck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onBeforeDamage_All_Map_ <- {}
|
||||||
|
function _o_onBeforeDamage_All_(obj) {
|
||||||
|
foreach (Func in _o_onBeforeDamage_All_Map_) {
|
||||||
|
Func(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onDamageParent_appendage_plugins_Map_ <- {}
|
||||||
|
function _o_onDamageParent_appendage_plugins(appendage, attacker, boundingBox, isStuck) {
|
||||||
|
foreach (Func in _o_onDamageParent_appendage_plugins_Map_) {
|
||||||
|
Func(appendage, attacker, boundingBox, isStuck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onSetHp_appendage_plugins_Map_ <- {}
|
||||||
|
function _o_onSetHp_appendage_plugins(appendage, hp, attacker) {
|
||||||
|
foreach (Func in _o_onSetHp_appendage_plugins_Map_) {
|
||||||
|
Func(appendage, hp, attacker);
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_sendSetMpPacket_All_Map_ <- {}
|
||||||
|
function _o_sendSetMpPacket_All_(obj, mp, sendInstant) {
|
||||||
|
foreach (Func in _o_sendSetMpPacket_All_Map_) {
|
||||||
|
Func(obj, mp, sendInstant);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onApplyHpDamage_appendage_plugins_Map_ <- {}
|
||||||
|
function _o_onApplyHpDamage_appendage_plugins(appendage, newHpDamage, attacker) {
|
||||||
|
foreach (Func in _o_onApplyHpDamage_appendage_plugins_Map_) {
|
||||||
|
Func(appendage, newHpDamage, attacker);
|
||||||
|
}
|
||||||
|
return newHpDamage;
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_getImmuneTypeDamageRate_appendage_plugins_Map_ <- {}
|
||||||
|
function _o_getImmuneTypeDamageRate_appendage_plugins(appendage, damageRate, attacker) {
|
||||||
|
foreach (Func in _o_getImmuneTypeDamageRate_appendage_plugins_Map_) {
|
||||||
|
Func(appendage, damageRate, attacker);
|
||||||
|
}
|
||||||
|
return damageRate;
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onDestroyObject_appendage_plugins_Map_ <- {}
|
||||||
|
function _o_onDestroyObject_appendage_plugins(appendage, destroyObj) {
|
||||||
|
foreach (Func in _o_onDestroyObject_appendage_plugins_Map_) {
|
||||||
|
Func(appendage, destroyObj);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onStartDungeon_All_Map_ <- {}
|
||||||
|
function _o_onStartDungeon_All_(obj) {
|
||||||
|
foreach (Func in _o_onStartDungeon_All_Map_) {
|
||||||
|
Func(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onStartMap_All_Map_ <- {}
|
||||||
|
function _o_onStartMap_All_(obj) {
|
||||||
|
foreach (Func in _o_onStartMap_All_Map_) {
|
||||||
|
Func(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onEndMap_All_Map_ <- {}
|
||||||
|
function _o_onEndMap_All_(obj) {
|
||||||
|
foreach (Func in _o_onEndMap_All_Map_) {
|
||||||
|
Func(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_onChangeSkillEffect_All_Map_ <- {}
|
||||||
|
function _o_onChangeSkillEffect_All_(obj, skillIndex, reciveData) {
|
||||||
|
foreach (Func in _o_onChangeSkillEffect_All_Map_) {
|
||||||
|
Func(obj, skillIndex, reciveData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_useSkill_before_All_Map_ <- {}
|
||||||
|
function _o_useSkill_before_All_(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate)
|
||||||
|
{
|
||||||
|
foreach (Func in _o_useSkill_before_All_Map_) {
|
||||||
|
Func(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_useSkill_after_All_Map_ <- {}
|
||||||
|
function _o_useSkill_after_All_(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate)
|
||||||
|
{
|
||||||
|
foreach (Func in _o_useSkill_after_All_Map_) {
|
||||||
|
Func(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_o_setState_All_Map_ <- {}
|
||||||
|
function _o_setState_All_(obj, state, datas, isResetTimer)
|
||||||
|
{
|
||||||
|
foreach (Func in _o_setState_All_Map_) {
|
||||||
|
Func(obj, state, datas, isResetTimer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 procAppend 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_procAppend_%s_(obj) {" +
|
||||||
|
"\n _o_procAppend_All_(obj);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n return procAppend_%s(obj);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n return 1;" +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("procAppend_" + jobname, "_o_procAppend_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 onBeforeAttack 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_onBeforeAttack_%s_(obj, damager, boundingBox, isStuck) {" +
|
||||||
|
"\n _o_onBeforeAttack_All_(obj, damager, boundingBox, isStuck);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n onBeforeAttack_%s(obj, damager, boundingBox, isStuck);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("onBeforeAttack_" + jobname, "_o_onBeforeAttack_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//注册 onAttackParent 函数
|
||||||
|
L_sq_RegistSqrPushStringMap("onAttackParent_appendage_plugins", "_o_onAttackParent_appendage_plugins");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//注册 onAfterAttack 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_onAfterAttack_%s_(obj, damager, boundingBox, isStuck) {" +
|
||||||
|
"\n _o_onAfterAttack_All_(obj, damager, boundingBox, isStuck);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n onAfterAttack_%s(obj, damager, boundingBox, isStuck);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("onAfterAttack_" + jobname, "_o_onAfterAttack_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 onBeforeDamage 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_onBeforeDamage_%s_(obj) {" +
|
||||||
|
"\n _o_onBeforeDamage_All_(obj);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n onBeforeDamage_%s(obj);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("onBeforeDamage_" + jobname, "_o_onBeforeDamage_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 onDamageParent 函数
|
||||||
|
L_sq_RegistSqrPushStringMap("onDamageParent_appendage_plugins", "_o_onDamageParent_appendage_plugins");
|
||||||
|
|
||||||
|
//注册 onSetHp 函数
|
||||||
|
L_sq_RegistSqrPushStringMap("onSetHp_appendage_plugins", "_o_onSetHp_appendage_plugins");
|
||||||
|
|
||||||
|
//注册 sendSetMpPacket 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_sendSetMpPacket_%s_(obj, mp, sendInstant) {" +
|
||||||
|
"\n _o_sendSetMpPacket_All_(obj, mp, sendInstant);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n return sendSetMpPacket_%s(obj, mp, sendInstant);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("sendSetMpPacket_" + jobname, "_o_sendSetMpPacket_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 onApplyHpDamage 函数
|
||||||
|
L_sq_RegistSqrPushStringMap("onApplyHpDamage_appendage_plugins", "_o_onApplyHpDamage_appendage_plugins");
|
||||||
|
|
||||||
|
//注册 onApplyHpDamage 函数
|
||||||
|
L_sq_RegistSqrPushStringMap("getImmuneTypeDamageRate_appendage_plugins", "_o_getImmuneTypeDamageRate_appendage_plugins");
|
||||||
|
|
||||||
|
//注册 onApplyHpDamage 函数
|
||||||
|
L_sq_RegistSqrPushStringMap("onDestroyObject_appendage_plugins", "_o_onDestroyObject_appendage_plugins");
|
||||||
|
|
||||||
|
|
||||||
|
//注册 onStartDungeon 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_onStartDungeon_%s_(obj) {" +
|
||||||
|
"\n _o_onStartDungeon_All_(obj);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n return onStartDungeon_%s(obj);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("onStartDungeon_" + jobname, "_o_onStartDungeon_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 onStartMap 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_onStartMap_%s_(obj) {" +
|
||||||
|
"\n _o_onStartMap_All_(obj);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n onStartMap_%s(obj);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("onStartMap_" + jobname, "_o_onStartMap_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 onEndMap 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_onEndMap_%s_(obj) {" +
|
||||||
|
"\n _o_onEndMap_All_(obj);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n onEndMap_%s(obj);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("onEndMap_" + jobname, "_o_onEndMap_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 onChangeSkillEffect 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_onChangeSkillEffect_%s_(obj, skillIndex, reciveData) {" +
|
||||||
|
"\n _o_onChangeSkillEffect_All_(obj, skillIndex, reciveData);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n onChangeSkillEffect_%s(obj, skillIndex, reciveData);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("onChangeSkillEffect_" + jobname, "_o_onChangeSkillEffect_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 useSkill_before 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_useSkill_before_%s_(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) {" +
|
||||||
|
"\n _o_useSkill_before_All_(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n return useSkill_before_%s(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n return true;" +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("useSkill_before_" + jobname, "_o_useSkill_before_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 useSkill_after 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_useSkill_after_%s_(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) {" +
|
||||||
|
"\n _o_useSkill_after_All_(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n return useSkill_after_%s(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n return true;" +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("useSkill_after_" + jobname, "_o_useSkill_after_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
//注册 setState 函数
|
||||||
|
foreach(jobname in getroottable()._Global_Info_.JobName) {
|
||||||
|
local funcStr = "function _o_setState_%s_(obj, state, datas, isResetTimer) {" +
|
||||||
|
"\n _o_setState_All_(obj, state, datas, isResetTimer);" +
|
||||||
|
"\n try {" +
|
||||||
|
"\n setState_%s(obj, state, datas, isResetTimer);" +
|
||||||
|
"\n } catch (exception) {" +
|
||||||
|
"\n " +
|
||||||
|
"\n }" +
|
||||||
|
"\n}";
|
||||||
|
funcStr = format(funcStr, jobname, jobname);
|
||||||
|
local func = compilestring(funcStr, jobname + "GenerateScript");
|
||||||
|
func();
|
||||||
|
L_sq_RegistSqrPushStringMap("setState_" + jobname, "_o_setState_" + jobname + "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -369,3 +369,42 @@ Rindro_Haker.LoadHook(0x67C560, ["pointer", "int", "int", "int", "int", "void"],
|
||||||
// // TTTAni <- args.pop();
|
// // TTTAni <- args.pop();
|
||||||
// return null;
|
// return null;
|
||||||
// });
|
// });
|
||||||
|
|
||||||
|
|
||||||
|
//右边窗口公告
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
StrIII <- Memory.allocUtf8String("sadasda");
|
||||||
|
L_Sq_CallFunc(0x9536C0, "void", FFI_FASTCALL, ["int", "int", "pointer", "int", "int", "int", "int", "int"], NativePointer(NativePointer(0x1A5FB20).readInt()).add(0x40).readInt(), 0, StrIII.C_Object, 0xFF9BC8E6, 16, 0, 0, 0);
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
//穿戴或脱下装备
|
||||||
|
getroottable().WearOrRemoveEquipmentCallBackFunc <- {};
|
||||||
|
Rindro_Haker.LoadHook(0x7B64BA, ["int", "int", "bool"],
|
||||||
|
function(args) {
|
||||||
|
// foreach (Func in WearOrRemoveEquipmentCallBackFunc) {
|
||||||
|
// Func(args);
|
||||||
|
// }
|
||||||
|
// print(args[1]);
|
||||||
|
// local ThisC = NativePointer(0x1A5FB24).readInt();
|
||||||
|
// local Slot = NativePointer(Rindro_Haker.CpuContext.ebp).add(8).readInt();
|
||||||
|
|
||||||
|
// local EquiObj = L_Sq_CallFunc(0x7B03C0, "int", FFI_FASTCALL, ["int", "int", "int"], ThisC, 0, Slot);
|
||||||
|
// if (EquiObj) {
|
||||||
|
// local Index = NativePointer(EquiObj).add(0x1c).readInt();
|
||||||
|
// print(Index);
|
||||||
|
// }
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
function(args) {
|
||||||
|
foreach (Func in WearOrRemoveEquipmentCallBackFunc) {
|
||||||
|
Func(args);
|
||||||
|
}
|
||||||
|
// print(666);
|
||||||
|
// print(format("%02x", args.pop()));
|
||||||
|
// TTTAni <- args.pop();
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
文件名:Global.nut
|
||||||
|
路径:Base/_Z_Data/Global.nut
|
||||||
|
创建日期:2025-12-27 03:50
|
||||||
|
文件用途:全局信息类
|
||||||
|
*/
|
||||||
|
class _GlobalInfoClass_ {
|
||||||
|
//职业名称
|
||||||
|
JobName = null;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
|
||||||
|
InitJobNmae();
|
||||||
|
}
|
||||||
|
|
||||||
|
function InitJobNmae() {
|
||||||
|
JobName = [];
|
||||||
|
Rindro_Script.GetFileData("character/character.lst", function(DataTable, Data) {
|
||||||
|
while (!Data.Eof()) {
|
||||||
|
local Index = Data.Get();
|
||||||
|
local Name = Data.Get();
|
||||||
|
Name = Name.slice(Name.find("/") + 1, Name.find(".chr"));
|
||||||
|
JobName.append(Name);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getroottable()._Global_Info_ <- _GlobalInfoClass_();
|
||||||
|
|
@ -12,11 +12,13 @@
|
||||||
"Base/_Tool/Image_Class.nut",
|
"Base/_Tool/Image_Class.nut",
|
||||||
"Base/_Tool/Animation_Class.nut",
|
"Base/_Tool/Animation_Class.nut",
|
||||||
"Base/_Tool/Item_Class.nut",
|
"Base/_Tool/Item_Class.nut",
|
||||||
|
"Base/_Z_Data/Global.nut",
|
||||||
"Base/CallBack/PackControl.nut",
|
"Base/CallBack/PackControl.nut",
|
||||||
"Base/CallBack/DrawMain.nut",
|
"Base/CallBack/DrawMain.nut",
|
||||||
"Base/CallBack/DrawHudMain.nut",
|
"Base/CallBack/DrawHudMain.nut",
|
||||||
"Base/CallBack/PushDamage.nut",
|
"Base/CallBack/PushDamage.nut",
|
||||||
"Base/CallBack/GetDamageRate.nut",
|
"Base/CallBack/GetDamageRate.nut",
|
||||||
|
"Base/CallBack/RegistPushString.nut",
|
||||||
"Base/_Z_Data/CharacterInfoData.nut",
|
"Base/_Z_Data/CharacterInfoData.nut",
|
||||||
"Base/UI/Lenheart_Cursor_Class.nut",
|
"Base/UI/Lenheart_Cursor_Class.nut",
|
||||||
"Base/UI/OldWindowsMap.nut",
|
"Base/UI/OldWindowsMap.nut",
|
||||||
|
|
@ -54,6 +56,18 @@
|
||||||
"CSBase/Interface.nut"
|
"CSBase/Interface.nut"
|
||||||
],
|
],
|
||||||
"ProjectScript": {
|
"ProjectScript": {
|
||||||
|
"扩展装备": {
|
||||||
|
"Private": true,
|
||||||
|
"Script": [
|
||||||
|
"Project/ExpandEquipment/ExpandEquipment.nut"
|
||||||
|
],
|
||||||
|
"info": {
|
||||||
|
"ProjectAuthor": "官方 (期限:月)",
|
||||||
|
"ProjectVersion": "1.0.0",
|
||||||
|
"ProjectDescribe": "NPC交易定制插件",
|
||||||
|
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png"
|
||||||
|
}
|
||||||
|
},
|
||||||
"修炼场": {
|
"修炼场": {
|
||||||
"Private": true,
|
"Private": true,
|
||||||
"Script": [
|
"Script": [
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,382 @@
|
||||||
|
/*
|
||||||
|
文件名:ExpandEquipment.nut
|
||||||
|
路径:Project/ExpandEquipment/ExpandEquipment.nut
|
||||||
|
创建日期:2026-01-03 00:29
|
||||||
|
文件用途:
|
||||||
|
*/
|
||||||
|
class ExpandEquipmentC {
|
||||||
|
|
||||||
|
//回调集合信息
|
||||||
|
FuncMapInfo = null;
|
||||||
|
//全身装备的ID
|
||||||
|
EquipIndexList = null;
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
FuncMapInfo = {};
|
||||||
|
EquipIndexList = {};
|
||||||
|
|
||||||
|
GenerateEquipmentFunctionMap();
|
||||||
|
|
||||||
|
RegisterCallback();
|
||||||
|
}
|
||||||
|
|
||||||
|
function Proc(obj) {
|
||||||
|
//在副本中 附加AP的逻辑
|
||||||
|
if (sq_GetCurrentModuleType() == 3) {
|
||||||
|
local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "appendage/appendage_plugins.nut");
|
||||||
|
if (!appendage) {
|
||||||
|
CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, true, "appendage/appendage_plugins.nut", true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "appendage/appendage_plugins.nut");
|
||||||
|
if (appendage) {
|
||||||
|
CNSquirrelAppendage.sq_RemoveAppendage(obj, "appendage/appendage_plugins.nut");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//检测身上的装备逻辑
|
||||||
|
local ReloadFlag = false;
|
||||||
|
local NewEquipList = {};
|
||||||
|
for (local i = 1; i< 13; ++i) {
|
||||||
|
//编号
|
||||||
|
local Index = L_sq_GetCharacterAttribute(0x1c, i);
|
||||||
|
if (Index) {
|
||||||
|
NewEquipList.rawset(Index, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach(Index, _v in NewEquipList) {
|
||||||
|
if (!EquipIndexList.rawin(Index)) {
|
||||||
|
ReloadFlag = true;
|
||||||
|
if (FuncMapInfo.rawin("[on equipment event]")) {
|
||||||
|
if (FuncMapInfo["[on equipment event]"].rawin(Index)) {
|
||||||
|
local FuncName = FuncMapInfo["[on equipment event]"][Index];
|
||||||
|
getroottable()[FuncName](obj, Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach(Index, _v in EquipIndexList) {
|
||||||
|
if (!NewEquipList.rawin(Index)) {
|
||||||
|
ReloadFlag = true;
|
||||||
|
if (FuncMapInfo.rawin("[on deequipment event]")) {
|
||||||
|
if (FuncMapInfo["[on deequipment event]"].rawin(Index)) {
|
||||||
|
local FuncName = FuncMapInfo["[on deequipment event]"][Index];
|
||||||
|
getroottable()[FuncName](obj, Index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ReloadFlag) {
|
||||||
|
ReloadFlag = false;
|
||||||
|
EquipIndexList = {};
|
||||||
|
GenerateEquipmentFunctionMap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function RegisterCallback() {
|
||||||
|
|
||||||
|
_o_procAppend_All_Map_["ExpandEquipmentC"] <- function(obj) {
|
||||||
|
if (FuncMapInfo.rawin("[on proc event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on proc event]"]) {
|
||||||
|
getroottable()[Func](obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onBeforeAttack_All_Map_["ExpandEquipmentC"] <- function(obj, damager, boundingBox, isStuck) {
|
||||||
|
if (FuncMapInfo.rawin("[on before attack event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on before attack event]"]) {
|
||||||
|
getroottable()[Func](obj, damager, boundingBox, isStuck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onAfterAttack_All_Map_["ExpandEquipmentC"] <- function(obj, damager, boundingBox, isStuck) {
|
||||||
|
if (FuncMapInfo.rawin("[on after attack event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on after attack event]"]) {
|
||||||
|
getroottable()[Func](obj, damager, boundingBox, isStuck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onAttackParent_appendage_plugins_Map_["ExpandEquipmentC"] <- function(appendage, realAttacker, damager, boundingBox, isStuck) {
|
||||||
|
if (FuncMapInfo.rawin("[on attack event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on attack event]"]) {
|
||||||
|
getroottable()[Func](appendage, realAttacker, damager, boundingBox, isStuck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onBeforeDamage_All_Map_["ExpandEquipmentC"] <- function(obj) {
|
||||||
|
if (FuncMapInfo.rawin("[on before damage event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on before damage event]"]) {
|
||||||
|
getroottable()[Func](obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onDamageParent_appendage_plugins_Map_["ExpandEquipmentC"] <- function(appendage, attacker, boundingBox, isStuck) {
|
||||||
|
if (FuncMapInfo.rawin("[on damage event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on damage event]"]) {
|
||||||
|
getroottable()[Func](appendage, attacker, boundingBox, isStuck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onSetHp_appendage_plugins_Map_["ExpandEquipmentC"] <- function(appendage, hp, attacker) {
|
||||||
|
if (FuncMapInfo.rawin("[on set hp event]")) {
|
||||||
|
local ret = -1;
|
||||||
|
foreach(Func in FuncMapInfo["[on set hp event]"]) {
|
||||||
|
ret = getroottable()[Func](appendage, hp, attacker);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_sendSetMpPacket_All_Map_["ExpandEquipmentC"] <- function(obj, mp, sendInstant) {
|
||||||
|
if (FuncMapInfo.rawin("[on set mp event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on set mp event]"]) {
|
||||||
|
getroottable()[Func](obj, mp, sendInstant);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onApplyHpDamage_appendage_plugins_Map_["ExpandEquipmentC"] <- function(appendage, newHpDamage, attacker) {
|
||||||
|
if (FuncMapInfo.rawin("[on apply damage event]")) {
|
||||||
|
local ret = newHpDamage;
|
||||||
|
foreach(Func in FuncMapInfo["[on apply damage event]"]) {
|
||||||
|
ret = getroottable()[Func](appendage, ret, attacker);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return newHpDamage;
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_getImmuneTypeDamageRate_appendage_plugins_Map_["ExpandEquipmentC"] <- function(appendage, damageRate, attacker) {
|
||||||
|
if (FuncMapInfo.rawin("[on immune damage event]")) {
|
||||||
|
local ret = damageRate;
|
||||||
|
foreach(Func in FuncMapInfo["[on immune damage event]"]) {
|
||||||
|
ret = getroottable()[Func](appendage, ret, attacker);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return damageRate;
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onDestroyObject_appendage_plugins_Map_["ExpandEquipmentC"] <- function(appendage, destroyObj) {
|
||||||
|
if (FuncMapInfo.rawin("[on destroy object event]")) {
|
||||||
|
local ret = true;
|
||||||
|
foreach(Func in FuncMapInfo["[on destroy object event]"]) {
|
||||||
|
ret = getroottable()[Func](appendage, destroyObj);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onStartDungeon_All_Map_["ExpandEquipmentC"] <- function(obj) {
|
||||||
|
if (FuncMapInfo.rawin("[on start dungeon event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on start dungeon event]"]) {
|
||||||
|
getroottable()[Func](obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onStartMap_All_Map_["ExpandEquipmentC"] <- function(obj) {
|
||||||
|
if (FuncMapInfo.rawin("[on start map event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on start map event]"]) {
|
||||||
|
getroottable()[Func](obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onEndMap_All_Map_["ExpandEquipmentC"] <- function(obj) {
|
||||||
|
if (FuncMapInfo.rawin("[on end map event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on end map event]"]) {
|
||||||
|
getroottable()[Func](obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_onChangeSkillEffect_All_Map_["ExpandEquipmentC"] <- function(obj, skillIndex, reciveData) {
|
||||||
|
if (FuncMapInfo.rawin("[on send effect packet event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on send effect packet event]"]) {
|
||||||
|
getroottable()[Func](obj, skillIndex, reciveData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_useSkill_before_All_Map_["ExpandEquipmentC"] <- function(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) {
|
||||||
|
if (FuncMapInfo.rawin("[on before use skill event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on before use skill event]"]) {
|
||||||
|
getroottable()[Func](obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_useSkill_after_All_Map_["ExpandEquipmentC"] <- function(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) {
|
||||||
|
if (FuncMapInfo.rawin("[on after use skill event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on after use skill event]"]) {
|
||||||
|
getroottable()[Func](obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
_o_setState_All_Map_["ExpandEquipmentC"] <- function(obj, state, datas, isResetTimer) {
|
||||||
|
if (FuncMapInfo.rawin("[on set state event]")) {
|
||||||
|
foreach(Func in FuncMapInfo["[on set state event]"]) {
|
||||||
|
getroottable()[Func](obj, state, datas, isResetTimer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.bindenv(this);
|
||||||
|
|
||||||
|
|
||||||
|
OnSetCharacter_Control["ExpandEquipmentC"] <- function() {
|
||||||
|
FuncMapInfo = {};
|
||||||
|
GenerateEquipmentFunctionMap();
|
||||||
|
}.bindenv(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成穿戴函数回调
|
||||||
|
function GenerateEquipmentFunctionMap() {
|
||||||
|
//获取全身装备编号
|
||||||
|
EquipIndexList = {};
|
||||||
|
for (local i = 1; i< 13; ++i) {
|
||||||
|
//编号
|
||||||
|
local Index = L_sq_GetCharacterAttribute(0x1c, i);
|
||||||
|
if (Index) EquipIndexList.rawset(Index, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(Index, _v in EquipIndexList) {
|
||||||
|
local Info = GetSingleEquipmentInfo(Index);
|
||||||
|
if (Info.len() > 0) {
|
||||||
|
foreach(FuncType, FuncName in Info) {
|
||||||
|
if (!FuncMapInfo.rawin(FuncType)) {
|
||||||
|
FuncMapInfo[FuncType] <- {};
|
||||||
|
}
|
||||||
|
FuncMapInfo[FuncType].rawset(Index, FuncName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSingleEquipmentInfo 回调函数
|
||||||
|
function GetSingleEquipmentInfo(Index) {
|
||||||
|
local FuncMap = {};
|
||||||
|
local FilePath = R_Utils.GetEquPath(Index);
|
||||||
|
if (FilePath) {
|
||||||
|
FuncMap = Rindro_Script.GetFileData("equipment/" + FilePath, function(DataTable, Data) {
|
||||||
|
while (!Data.Eof()) {
|
||||||
|
local Fragment = Data.Get();
|
||||||
|
if (
|
||||||
|
Fragment == "[on equipment event]" ||
|
||||||
|
Fragment == "[on deequipment event]" ||
|
||||||
|
Fragment == "[on proc event]" ||
|
||||||
|
Fragment == "[on before attack event]" ||
|
||||||
|
Fragment == "[on attack event]" ||
|
||||||
|
Fragment == "[on after attack event]" ||
|
||||||
|
Fragment == "[on before damage event]" ||
|
||||||
|
Fragment == "[on damage event]" ||
|
||||||
|
Fragment == "[on set hp event]" ||
|
||||||
|
Fragment == "[on set mp event]" ||
|
||||||
|
Fragment == "[on apply damage event]" ||
|
||||||
|
Fragment == "[on immune damage event]" ||
|
||||||
|
Fragment == "[on start dungeon event]" ||
|
||||||
|
Fragment == "[on start map event]" ||
|
||||||
|
Fragment == "[on end map event]" ||
|
||||||
|
Fragment == "[on send effect packet event]" ||
|
||||||
|
Fragment == "[on before use skill event]" ||
|
||||||
|
Fragment == "[on after use skill event]" ||
|
||||||
|
Fragment == "[on set state event]" ||
|
||||||
|
Fragment == "[on destroy object event]"
|
||||||
|
) {
|
||||||
|
local FuncName = Data.Get();
|
||||||
|
DataTable.rawset(Fragment, FuncName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
FuncMap.rawdelete("filepath");
|
||||||
|
}
|
||||||
|
return FuncMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
getroottable().rawdelete("ExpandEquipment_Obj");
|
||||||
|
|
||||||
|
function Lenheart_ExpandEquipment_Fun(obj) {
|
||||||
|
local RootTab = getroottable();
|
||||||
|
if (!RootTab.rawin("ExpandEquipment_Obj")) {
|
||||||
|
RootTab.rawset("ExpandEquipment_Obj", ExpandEquipmentC());
|
||||||
|
}
|
||||||
|
RootTab["ExpandEquipment_Obj"].Proc(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
getroottable()["LenheartFuncTab"].rawset("ExpandEquipmentFuncN", Lenheart_ExpandEquipment_Fun);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function on_equipment_109000001(Index) {}
|
||||||
|
|
||||||
|
function on_deequipment_109000001(Index) {}
|
||||||
|
|
||||||
|
function on_proc_109000001(obj) {}
|
||||||
|
|
||||||
|
function on_before_attack_109000001(obj, damager, boundingBox, isStuck) {}
|
||||||
|
|
||||||
|
function on_attack_109000001(appendage, realAttacker, damager, boundingBox, isStuck) {}
|
||||||
|
|
||||||
|
function on_after_attack_109000001(obj, damager, boundingBox, isStuck) {}
|
||||||
|
|
||||||
|
function on_before_damage_109000001(obj) {}
|
||||||
|
|
||||||
|
function on_damage_109000001(appendage, attacker, boundingBox, isStuck) {}
|
||||||
|
|
||||||
|
function on_set_hp_109000001(appendage, hp, attacker) {}
|
||||||
|
|
||||||
|
function on_set_mp_109000001(obj, mp, sendInstant) {}
|
||||||
|
|
||||||
|
function on_apply_damage_109000001(appendage, newHpDamage, attacker) {}
|
||||||
|
|
||||||
|
function on_immune_damage_109000001(appendage, damageRate, attacker) {}
|
||||||
|
|
||||||
|
function on_start_dungeon_109000001(obj) {}
|
||||||
|
|
||||||
|
function on_start_map_109000001(obj) {}
|
||||||
|
|
||||||
|
function on_end_map_109000001(obj) {}
|
||||||
|
|
||||||
|
function on_send_effect_packet_109000001(obj, skillIndex, reciveData) {}
|
||||||
|
|
||||||
|
function on_before_use_skill_109000001(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) {}
|
||||||
|
|
||||||
|
function on_after_use_skill_109000001(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate) {}
|
||||||
|
|
||||||
|
function on_set_state_109000001(obj, state, datas, isResetTimer) {}
|
||||||
|
|
||||||
|
function on_destroy_object_109000001(appendage, destroyObj) {}
|
||||||
|
|
@ -14,6 +14,7 @@ class TreasureGoblinC extends LenheartNewUI_Windows {
|
||||||
//是否可见
|
//是否可见
|
||||||
// Visible = false;
|
// Visible = false;
|
||||||
|
|
||||||
|
|
||||||
BaseImg = Rindro_Image("interface2/rindro_reward.img");
|
BaseImg = Rindro_Image("interface2/rindro_reward.img");
|
||||||
MainImg = Rindro_Image("treasuregoblin/main.img");
|
MainImg = Rindro_Image("treasuregoblin/main.img");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -220,5 +220,11 @@
|
||||||
},
|
},
|
||||||
"Project/WarehouseLock": {
|
"Project/WarehouseLock": {
|
||||||
"description": "仓库锁"
|
"description": "仓库锁"
|
||||||
|
},
|
||||||
|
"Base/_Z_Data/Global.nut": {
|
||||||
|
"description": "全局信息类"
|
||||||
|
},
|
||||||
|
"Project/ExpandEquipment": {
|
||||||
|
"description": "拓展装备"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue