露露定制
This commit is contained in:
parent
e2592664e8
commit
797ae588e6
|
|
@ -1198,6 +1198,21 @@
|
|||
]
|
||||
},
|
||||
"imgPath": "HorseGuessing"
|
||||
},
|
||||
"露露定制内容": {
|
||||
"Private": true,
|
||||
"Enabled": false,
|
||||
"price": 999,
|
||||
"Script": [
|
||||
"Project/ExpandEquipment/ExpandEquipment.nut",
|
||||
"Project/CustomPlugins/lulu/ObjectConvert.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "定制的拓展装备 定制的对象转换",
|
||||
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,390 @@
|
|||
/*
|
||||
文件名: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);
|
||||
}
|
||||
}
|
||||
if (getroottable().rawin("onEquipment")) {
|
||||
getroottable().onEquipment(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 (getroottable().rawin("onDeequipment")) {
|
||||
getroottable().onEquipment(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()["LenheartBaseFuncTab"].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) {}
|
||||
|
||||
*/
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
/*
|
||||
文件名: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);
|
||||
}
|
||||
|
|
@ -53,6 +53,7 @@ class ExpandEquipmentC {
|
|||
getroottable()[FuncName](obj, Index);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
foreach(Index, _v in EquipIndexList) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue