Compare commits

...

13 Commits

63 changed files with 1709 additions and 10527 deletions

View File

@ -148,46 +148,6 @@ function L_drawMainCustomUI_All() {
// L_sq_GoDungeon(1504); // L_sq_GoDungeon(1504);
// CargoType <- 0;
// Sq_GetExeStr_Map[21910] <- function(Index) {
// CargoType = 0;
// return 21910;
// }
// Sq_GetExeStr_Map[21911] <- function(Index) {
// CargoType = 1;
// return 21911;
// }
// Rindro_Haker.LoadHook(0xE67800, ["int", "int"],
// function(args) {
// //点击了仓库转移物品
// if (args[0] == 0x2B) {
// if (CargoType == 0) {
// printf("点击个人仓库转移物品");
// local T = {
// op = 21091001,
// type = 0,
// }
// Rindro_BaseToolClass.SendPackEx(T);
// return [0];
// }
// if (CargoType == 1) {
// printf("点击账号仓库转移物品");
// local T = {
// op = 21091001,
// type = 1,
// }
// Rindro_BaseToolClass.SendPackEx(T);
// return [0];
// }
// }
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });
@ -226,4 +186,5 @@ function L_drawMainCustomUI_All() {
// ::print("\t<no attributes>\n") // ::print("\t<no attributes>\n")
// } // }
// } // }

View File

@ -0,0 +1,365 @@
/*
文件名: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 return true;" +
"\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 + "_");
}

View File

@ -1505,6 +1505,7 @@ class LenheartNewUI_ItemSlot extends LenheartNewUI_CommonUi {
ItemCount = null; ItemCount = null;
ItemObject = null; ItemObject = null;
ItemInfoWindow = null; ItemInfoWindow = null;
HoverFlag = false;
//禁止点击 //禁止点击
NoClick = false; NoClick = false;
@ -1535,6 +1536,19 @@ class LenheartNewUI_ItemSlot extends LenheartNewUI_CommonUi {
} }
} }
} }
CheckInRect();
}
function CheckInRect() {
local MousePos_X = IMouse.GetXPos();
local MousePos_Y = IMouse.GetYPos();
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, 30, 30)) {
//绘制悬停框
L_sq_SetDrawImgModel(2, 0);
Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X, Y);
L_sq_ReleaseDrawImgModel();
HoverFlag = true;
} else HoverFlag = false;
} }
function SetItem(item) { function SetItem(item) {

View File

@ -1,15 +1,16 @@
/* /*
文件名:Lenheart_Ani_Class.nut 文件名:CustomAnimation_Class.nut
路径:Base/UI/Lenheart_Ani_Class.nut 路径:Base/_Tool/CustomAnimation_Class.nut
创建日期:2024-08-06 18:56 创建日期:2026-01-13 19:54
文件用途:Ani 文件用途:
*/ */
class Lenheart_Ani { class Rindro_CustomAnimation {
X = 0;
Y = 0;
//Img路径
ImgPath = null; ImgPath = null;
//Img对象
Img = null;
//帧信息
ImgFrame = null; ImgFrame = null;
@ -27,22 +28,27 @@ class Lenheart_Ani {
//img 路径 调用帧数组 //img 路径 调用帧数组
constructor(path, frame, Pos) { constructor(path, frame) {
ImgPath = ("Character/" + path + ".img").tolower(); ImgPath = path.tolower();
Img = Rindro_Image(ImgPath);
ImgFrame = frame; ImgFrame = frame;
InitTime = Clock(); InitTime = Clock();
State = 1; State = 1;
X = Pos[0];
Y = Pos[1]; //预载入img
foreach(FrameObj in ImgFrame) {
Img.DrawPng(FrameObj.ImgIndex, -999, 999);
}
} }
function Show(dt) { function Show(dt, X, Y) {
if (State == 1) { if (State == 1) {
if (ImgFrame) { if (ImgFrame) {
local NowFrameObj = ImgFrame[CurFrame]; local NowFrameObj = ImgFrame[CurFrame];
PlayCurTime += dt; PlayCurTime += dt;
L_sq_DrawImg(ImgPath, NowFrameObj.ImgIndex, NowFrameObj.Pos[0] + X, NowFrameObj.Pos[1] + Y); Img.DrawPng(NowFrameObj.ImgIndex, NowFrameObj.Pos[0] + X, NowFrameObj.Pos[1] + Y);
if (PlayCurTime >= NowFrameObj.Delay) { if (PlayCurTime >= NowFrameObj.Delay) {
CurFrame++; CurFrame++;
//播放完成 //播放完成
@ -57,12 +63,12 @@ class Lenheart_Ani {
} }
} }
function ShowEx(dt,gRgba,rate_x,rate_y) { function ShowEx(dt, X, Y, gRgba, rate_x, rate_y) {
if (State == 1) { if (State == 1) {
if (ImgFrame) { if (ImgFrame) {
local NowFrameObj = ImgFrame[CurFrame]; local NowFrameObj = ImgFrame[CurFrame];
PlayCurTime += dt; PlayCurTime += dt;
L_sq_DrawImg(ImgPath, NowFrameObj.ImgIndex, NowFrameObj.Pos[0] + X, NowFrameObj.Pos[1] + Y,1,gRgba,rate_x,rate_y); Img.DrawExPng(NowFrameObj.ImgIndex, NowFrameObj.Pos[0] + X, NowFrameObj.Pos[1] + Y, 0, gRgba, rate_x, rate_y);
if (PlayCurTime >= NowFrameObj.Delay) { if (PlayCurTime >= NowFrameObj.Delay) {
CurFrame++; CurFrame++;
//播放完成 //播放完成
@ -77,8 +83,7 @@ class Lenheart_Ani {
} }
} }
function Reset() function Reset() {
{
CurFrame = 0; CurFrame = 0;
State = 1; State = 1;
} }

View File

@ -368,4 +368,79 @@ Rindro_Haker.LoadHook(0x67C560, ["pointer", "int", "int", "int", "int", "void"],
// // print(format("%02x", args.pop())); // // print(format("%02x", args.pop()));
// // 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;
});
// Rindro_Haker.LoadHook(0x7FFA80, ["int", "int", "int", "int", "int", "int", "int", "int", "int", "int", "int", "void"],
// function(args) {
// if(args[0] == 0xA){
// args[1] = 4600563;
// printf("切换武器")
// return 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) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });
// NativePointer(0x8266F5).writeShort(0x9090)
// NativePointer(0x78FD37).writeShort(0x9090)
// NativePointer(0x78FD3B).writeShort(0x9090)

View File

@ -239,6 +239,8 @@ class Rindro_Script {
local Key = Rindro_Script.GetBinString(FindKey); local Key = Rindro_Script.GetBinString(FindKey);
if (Key) { if (Key) {
local StrFilePath = Key.tolower(); local StrFilePath = Key.tolower();
local Type = StrFilePath.slice(0, StrFilePath.find("/")).tolower();
getroottable().RindroLoadStringTable.rawset(Type, {});
local StrFile = R_Utils.GetScriptFileReader(StrFilePath, 10240000); local StrFile = R_Utils.GetScriptFileReader(StrFilePath, 10240000);
if (StrFile) { if (StrFile) {
local StrBuffer = StrFile.Buffer.readUtf8String(StrFile.Size); local StrBuffer = StrFile.Buffer.readUtf8String(StrFile.Size);
@ -247,7 +249,7 @@ class Rindro_Script {
if (strobj.find(">") != null) { if (strobj.find(">") != null) {
local strobjarr = split(strobj, ">"); local strobjarr = split(strobj, ">");
if (strobjarr.len() > 1) { if (strobjarr.len() > 1) {
getroottable().RindroLoadStringTable.rawset(strobjarr[0], Sq_ConvertWideChar(strobjarr[1], "big5")); getroottable().RindroLoadStringTable[Type].rawset(strobjarr[0], Sq_ConvertWideChar(strobjarr[1], "big5"));
} }
} }
} }
@ -293,17 +295,28 @@ class Rindro_Script {
} }
} }
function GetLoadString(Key) { function GetLoadString(Type, Key) {
if (getroottable().RindroLoadStringTable.rawin(Key)) return getroottable().RindroLoadStringTable[Key]; if (getroottable().RindroLoadStringTable.rawin(Type) && getroottable().RindroLoadStringTable[Type].rawin(Key)) return getroottable().RindroLoadStringTable[Type][Key];
else return ""; else return "";
} }
function UnpackData(IO, i) { function UnpackData(IO, i, Type) {
local out = ""; local out = "";
IO.seek(i); //内容指示位 IO.seek(i); //内容指示位
local currentByte = IO.readn('c'); //内容指示位 local currentByte = IO.readn('c'); //内容指示位
local after = IO.GetInt(); local after = IO.GetInt();
switch (currentByte) { switch (currentByte) {
case 9: {
local NewcurrentByte = IO.readn('c');
local Newafter = IO.GetInt();
local Buf = Rindro_Script.GetBinString(after);
if (!Buf) {
Buf = "";
} else {
Buf = Rindro_Script.GetLoadString(Type, Buf);
}
return Buf;
}
case 10: { case 10: {
IO.seek(i - 4); IO.seek(i - 4);
local Before = IO.readn('i'); local Before = IO.readn('i');
@ -311,7 +324,7 @@ class Rindro_Script {
if (!Buf) { if (!Buf) {
Buf = ""; Buf = "";
} else { } else {
Buf = "<" + Before + "::" + Buf + "`" + Rindro_Script.GetLoadString(Buf) + "`>"; Buf = "<" + Before + "::" + Buf + "`" + Rindro_Script.GetLoadString(Type, Buf) + "`>";
} }
Buf = Buf + "\r\n"; Buf = Buf + "\r\n";
out += Buf; out += Buf;
@ -327,8 +340,7 @@ class Rindro_Script {
Bbuf.writen(after, 'i'); Bbuf.writen(after, 'i');
Bbuf.seek(0); Bbuf.seek(0);
local Buf = Bbuf.readn('f'); local Buf = Bbuf.readn('f');
out += after + '\t'; return Buf;
break;
} }
case 6: case 6:
case 8: case 8:
@ -338,15 +350,8 @@ class Rindro_Script {
if (!Buf) Buf = ""; if (!Buf) Buf = "";
return Buf; return Buf;
} }
case 9: {
IO.seek(i + 6);
local Before = IO.readn('i');
local Buf = Rindro_Script.GetBinString(Before);
out += Rindro_Script.GetLoadString(Buf);
}
default: default:
out += ""; return "";
break;
} }
return out; return out;
@ -363,24 +368,24 @@ class Rindro_Script {
local i = 2; local i = 2;
while (true) { while (true) {
if (i< ReadObject.Size && ReadObject.Size - i >= 5) { if (i< ReadObject.Size && ReadObject.Size - i >= 5) {
local str = Rindro_Script.UnpackData(IO, i); local str = Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
//名称 //名称
if (str == "[name]") { if (str == "[name]") {
local RealKey = str.slice(1, str.len() - 1); local RealKey = str.slice(1, str.len() - 1);
EquipmentAtt[RealKey] <- Rindro_Script.UnpackData(IO, i); EquipmentAtt[RealKey] <- Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
} }
//装备类型 //装备类型
else if (str == "[equipment type]") { else if (str == "[equipment type]") {
local Buf = Rindro_Script.UnpackData(IO, i); local Buf = Rindro_Script.UnpackData(IO, i, "equipment");
EquipmentAtt["equipment_type"] <- Buf.slice(1, -1); EquipmentAtt["equipment_type"] <- Buf.slice(1, -1);
i += 5; i += 5;
} }
//称号动画 //称号动画
else if (str == "[custom animation]") { else if (str == "[custom animation]") {
local Buf = Rindro_Script.UnpackData(IO, i).tolower(); local Buf = Rindro_Script.UnpackData(IO, i, "equipment").tolower();
EquipmentAtt["custom_animation"] <- Buf; EquipmentAtt["custom_animation"] <- Buf;
i += 5; i += 5;
} }
@ -389,12 +394,12 @@ class Rindro_Script {
EquipmentAtt["Aurora"] <- {}; EquipmentAtt["Aurora"] <- {};
EquipmentAtt["Aurora"].Back <- []; EquipmentAtt["Aurora"].Back <- [];
EquipmentAtt["Aurora"].Front <- []; EquipmentAtt["Aurora"].Front <- [];
local Count = Rindro_Script.UnpackData(IO, i); local Count = Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
for (local z = 0; z< Count; z++) { for (local z = 0; z< Count; z++) {
local Layer = Rindro_Script.UnpackData(IO, i); local Layer = Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
local Path = Rindro_Script.UnpackData(IO, i).tolower(); local Path = Rindro_Script.UnpackData(IO, i, "equipment").tolower();
i += 5; i += 5;
if (Layer == 0) EquipmentAtt["Aurora"].Back.append(Path); if (Layer == 0) EquipmentAtt["Aurora"].Back.append(Path);
if (Layer == 1) EquipmentAtt["Aurora"].Front.append(Path); if (Layer == 1) EquipmentAtt["Aurora"].Front.append(Path);
@ -405,7 +410,7 @@ class Rindro_Script {
else if (str == "[hide layer]") { else if (str == "[hide layer]") {
EquipmentAtt["hidelayer"] <- []; EquipmentAtt["hidelayer"] <- [];
while (true) { while (true) {
local Buffer = Rindro_Script.UnpackData(IO, i); local Buffer = Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
if (Buffer == "[/hide layer]") { if (Buffer == "[/hide layer]") {
break; break;
@ -415,7 +420,7 @@ class Rindro_Script {
} }
//Ani //Ani
else if (str == "[animation job]") { else if (str == "[animation job]") {
local Job = Rindro_Script.UnpackData(IO, i).slice(1, -1); local Job = Rindro_Script.UnpackData(IO, i, "equipment").slice(1, -1);
local SpacePos = Job.find(" "); local SpacePos = Job.find(" ");
if (SpacePos) { if (SpacePos) {
Job = Job.slice(0, SpacePos) + Job.slice(SpacePos + 1); Job = Job.slice(0, SpacePos) + Job.slice(SpacePos + 1);
@ -424,24 +429,24 @@ class Rindro_Script {
EquipmentAtt["Ani_" + Job] <- {}; EquipmentAtt["Ani_" + Job] <- {};
i += 5; i += 5;
local Index1 = Rindro_Script.UnpackData(IO, i); local Index1 = Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
local Index2 = Rindro_Script.UnpackData(IO, i); local Index2 = Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
EquipmentAtt["Ani_" + Job].variation <- [Index1, Index2]; EquipmentAtt["Ani_" + Job].variation <- [Index1, Index2];
EquipmentAtt["Ani_" + Job].layer_variation <- []; EquipmentAtt["Ani_" + Job].layer_variation <- [];
while (true) { while (true) {
try { try {
local Ret = Rindro_Script.UnpackData(IO, i); local Ret = Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
if (Ret == "[animation job]" || (Rindro_Script.endswith(Ret, "]") && Ret != "[equipment ani script]" && Ret != "[layer variation]")) { if (Ret == "[animation job]" || (Rindro_Script.endswith(Ret, "]") && Ret != "[equipment ani script]" && Ret != "[layer variation]")) {
i -= 5; i -= 5;
break; break;
} else if (Ret == "[layer variation]") { } else if (Ret == "[layer variation]") {
local InfoBuf = {}; local InfoBuf = {};
InfoBuf.Zorder <- Rindro_Script.UnpackData(IO, i); InfoBuf.Zorder <- Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
InfoBuf.Path <- Rindro_Script.UnpackData(IO, i); InfoBuf.Path <- Rindro_Script.UnpackData(IO, i, "equipment");
i += 5; i += 5;
EquipmentAtt["Ani_" + Job].layer_variation.append(InfoBuf); EquipmentAtt["Ani_" + Job].layer_variation.append(InfoBuf);
} }
@ -692,13 +697,14 @@ class Rindro_Script {
function ResolvingData(IO, Func, Path) { function ResolvingData(IO, Func, Path) {
local DataTable = {}; local DataTable = {};
DataTable.filepath <- Path; DataTable.filepath <- Path;
local Type = Path.slice(0, Path.find("/")).tolower();
local DataArr = []; local DataArr = [];
local Length = IO.len(); local Length = IO.len();
if (Length >= 7) { if (Length >= 7) {
local i = 2; local i = 2;
while (true) { while (true) {
if (i< Length && Length - i >= 5) { if (i< Length && Length - i >= 5) {
local str = Rindro_Script.UnpackData(IO, i); local str = Rindro_Script.UnpackData(IO, i, Type);
i += 5; i += 5;
DataArr.push(str); DataArr.push(str);
} else break; } else break;

29
Base/_Z_Data/Global.nut Normal file
View File

@ -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_();

View File

@ -1,37 +0,0 @@
/*
文件名:DrawHudMain.nut
路径:Base/CallBack/DrawHudMain.nut
创建日期:2024-08-29 09:39
文件用途:
*/
//血槽背景
function L_HUD_BloodBackground() {
local RootTab = getroottable();
local obj = sq_getMyCharacter();
if (!obj) return;
if (RootTab.rawin("HudUi_Obj")) {
RootTab.HudUi_Obj.BottomShow(obj);
}
if (RootTab.rawin("EventList_Obj")) {
foreach(win in EventList_Obj.Events) {
win.EventShow(obj);
}
}
}
getroottable().Camera_Pos <- {};
//城镇摄像机
function L_Sync_Camera_Pos(Camera_Object) {
// print(Camera_Object);
// print(Camera_Object);
getroottable().Camera_Pos.X <- L_sq_RA(Camera_Object + 0x638);
getroottable().Camera_Pos.Y <- L_sq_RA(Camera_Object + 0x63C);
}
function Sq_DrawChannel() {
// L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer_calendarui.img", 0, 0, 0);
}

View File

@ -1,231 +0,0 @@
/*
文件名:DrawMain.nut
路径:Base/CallBack/DrawMain.nut
创建日期:2024-08-06 18:58
文件用途:绘制回调
*/
//在DrawMain后面调用
function L_drawMainCustomUI_All() {
local obj = sq_getMyCharacter();
if (!obj) return;
local RootTab = getroottable();
//获取与上一帧的dt
if (!(RootTab.rawin("Rindro_DurationFlag"))) {
Rindro_DurationFlag <- L_Getmicroseconds();
Rindro_Duration <- 0;
} else {
local NowM = L_Getmicroseconds();
Rindro_Duration = (NowM - Rindro_DurationFlag);
Rindro_DurationFlag = NowM;
}
//下帧执行任务事件
if (RootTab.rawin("LenheartNextFrameFuncTab")) {
foreach(Func in RootTab["LenheartNextFrameFuncTab"]) {
Func();
}
RootTab["LenheartNextFrameFuncTab"] = [];
} else {
RootTab.LenheartNextFrameFuncTab <- [];
}
//重载逻辑
Sq_ReloadLogic();
//初始化活动图标
Lenheart_EventList_Fun(obj);
//加载注册Base函数窗口
if (RootTab.rawin("LenheartBaseFuncTab")) {
local LenheartFunc = RootTab["LenheartBaseFuncTab"];
foreach(Func in LenheartFunc) {
Func(obj);
}
}
//加载注册Ex函数窗口
if (RootTab.rawin("LenheartFuncTab")) {
local LenheartFunc = RootTab["LenheartFuncTab"];
foreach(name,Func in LenheartFunc) {
if(name = "GetDamageRateFuncN"){
print(name);
Func(obj);
}
}
}
//所有插件初始化完毕
if (!getroottable().rawin("LenheartPluginsInitFlag")) {
local T = {
op = 25001021,
}
Rindro_BaseToolClass.SendPackEx(T);
getroottable().LenheartPluginsInitFlag <- true;
}
// for (local i = 0; i< 100; i++) {
// for (local z = 0; z < 100; z++) {
// sq_PutPixel(sq_RGBA(230, 200, 155, 255), 200 + i, 200 + z);
// }
// }
// sq_DrawBox(100, 100, 100, 100, 0xffffffff);
// L_Sq_CallFunc(0x11E86C0, "char", FFI_STDCALL, ["int", "int", "int", "int", "int"], 10, 10, 750, 350, 0xffffffff);
// for (local i = 0; i< 100; i++) {
// for (local z = 0; z< 100; z++) {
// sq_PutPixel(sq_RGBA(230, 200, 155, 255), 200 + i, 200 + z);
// }
// }
// L_sq_Test(0x11A7B65);
// local Device = NativePointer(0x1B45AB8).readInt();
// print(format("Device:0x%02x", Device));
// L_sq_Test(Device);
// if (!TTTAAA) TTTAAA = Rindro_Draw_Character(0, [601590000, 1751501, 601500069], "rest.ani", null);
// if (TTTAAA) TTTAAA.Draw(120, 200);
}
// for (local i = 0; i < 42; i++) {
// local Value = MemoryTool.DecodeMemoryData(0x394e8c00+0x1050 + (i * 4));
// if(Value == 151)print("Value :" + i * 4);
// }
// print(MemoryTool.DecodeMemoryData(0x1DFFB240));
// MemoryTool.EncodeMemoryData(0x304bdc00+0x1054,7);
// TTTAAA <- null;
// L_NewWindows("Lenheart", 56, 0x1);
// L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], 0x01ADE090, 56, 0, 0);
// getroottable().Lsnzz <- Clock();
// dofile("sqr/Base/_Tool/Json.nut");
// print(T);
// Register_DPS_Pack(1, function(Jso) {
// printT(Jso);
// });
// for (local i = 0; i< 50; i++) {
// local asos = sq_CreateCharacter(0,0);
// // asos.setValid(false);
// // local obj = sq_GetCNRDObjectToActiveObject(asos);
// // sq_SendDestroyPacketPassiveObject(obj);
// // sendDestroyPacket(obj);
// // sq_SendDestroyPacketPassiveObject(asos);
// // sq_AddObject(sq_getMyCharacter(), asos, OBJECTTYPE_VIRTUALCHARACTER, false);
// // asos.setValid(false);
// // L_sq_Test(L_Sq_GetObjectAddress(asos));
// L_Sq_CallFunc(0x5A44B0, "void", FFI_MS_CDECL, ["int"], L_Sq_GetObjectAddress(asos));
// }
// local asos = sq_CreateAICharacter(900);
// // sq_DeleteParticleCreater(asos);
// local asos = sq_CreateAICharacter(419);
// asos.setCurrentPos(sq_getMyCharacter().getXPos() + 100, sq_getMyCharacter().getYPos(), 0);
// sq_AddObject(sq_getMyCharacter(), asos, OBJECTTYPE_VIRTUALCHARACTER, false);
// sq_ChangeDrawLayer(asos, ENUM_DRAWLAYER_CLOSEBACK);
// L_sq_GoDungeon(1504);
// CargoType <- 0;
// Sq_GetExeStr_Map[21910] <- function(Index) {
// CargoType = 0;
// return 21910;
// }
// Sq_GetExeStr_Map[21911] <- function(Index) {
// CargoType = 1;
// return 21911;
// }
// Rindro_Haker.LoadHook(0xE67800, ["int", "int"],
// function(args) {
// //点击了仓库转移物品
// if (args[0] == 0x2B) {
// if (CargoType == 0) {
// printf("点击个人仓库转移物品");
// local T = {
// op = 21091001,
// type = 0,
// }
// Rindro_BaseToolClass.SendPackEx(T);
// return [0];
// }
// if (CargoType == 1) {
// printf("点击账号仓库转移物品");
// local T = {
// op = 21091001,
// type = 1,
// }
// Rindro_BaseToolClass.SendPackEx(T);
// return [0];
// }
// }
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });
// function onAttack_Swordman(obj, damager, boundingBox, isStuck)
// {
// local Mon = sq_GetCNRDObjectToActiveObject(damager);
// Mon.setHp(0, null, true);
// }
// function getCurrentModuleDamageRate(obj) {
// local LLJob = sq_getJob(obj);
// local LLGrowT = sq_getGrowType(obj);
// if (LLJob == 0 && LLGrowT == 2)
// return 2100000000.0;
// return 1.0;
// }
// function onStartDungeon_Swordman(obj) {
// print(666);
// obj.setEnableDamageBox(false);
// }
// local chrobj = sq_CreateCharacter(0, 4);
// print("-----------------------------------------------/");
// foreach(member, val in chrobj.getclass()) {
// ::print(member + "\n");
// local attr;
// if ((attr = chrobj.getclass().getattributes(member)) != null) {
// foreach(i, v in attr) {
// ::print("\t" + i + " = " + (typeof v) + "\n");
// }
// } else {
// ::print("\t<no attributes>\n")
// }
// }

View File

@ -1,84 +0,0 @@
/*
文件名:GetDamageRate.nut
路径:Base/CallBack/GetDamageRate.nut
创建日期:2024-08-09 14:10
文件用途:获取伤害倍率
*/
RindroDamageRate <- 1.0;
function L_getCurrentModuleDamageRate(obj) {
if (!obj)
return 1.0;
local ClientRat = 1.0;
try {
ClientRat = getCurrentModuleDamageRate(obj).tofloat();
} catch (exception) {
ClientRat = 1.0;
}
return (RindroDamageRate * ClientRat);
}
function Lenheart_GetDamageRate_Fun(obj) {
//在城镇时
if (sq_GetCurrentModuleType() == 1) {
RindroDamageRate = 1.0;
}
}
//修改伤害回调
function SetDamageRateCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
RindroDamageRate = Jso.rate;
}
Pack_Control.rawset(2024110902, SetDamageRateCallBack);
getroottable()["LenheartFuncTab"].rawset("GetDamageRateFuncN", Lenheart_GetDamageRate_Fun);
// ModuleDamageTable <- {
// //这个1是 副本编号
// [1] = {
// //这个0是大职业编号 比如说鬼剑士就是 0 女格斗家就是 1 在character/character.lst 这个文件里可以看
// [0] = {
// //这个0 和 1 是转职编号 0就是未转职 1 就是转了剑魂
// [0] = 1.0,
// [1] = 3.0
// }
// },
// //2号副本
// [2] ={
// //女格斗家职业
// [1] = {
// [0] = 1.0,
// [1] = 3.0
// }
// }
// }
// function getCurrentModuleDamageRate(obj)
// {
// local Rate = 1.0;
// local stage = sq_GetGlobaludpModuleStage();
// local dungeon = sq_GetDungeonByStage(stage);
// local dungeonIndex = sq_GetDuegonIndex(dungeon);
// local LLJob = sq_getJob(obj);
// local LLGrowT = sq_getGrowType(obj);
// //处于生效副本中
// if(ModuleDamageTable.rawin(dungeonIndex)){
// //自己是生效职业
// if(ModuleDamageTable[dungeonIndex].rawin(LLJob)){
// //是生效转职
// if(ModuleDamageTable[dungeonIndex][LLJob].rawin(LLGrowT)){
// Rate += ModuleDamageTable[dungeonIndex][LLJob][LLGrowT].tofloat();
// }
// }
// }
// return Rate;
// }

View File

@ -1,183 +0,0 @@
/*
文件名:PackControl.nut
路径:Base/PackControl/PackControl.nut
创建日期:2024-08-06 22:13
文件用途:
*/
Pack_Control <- {}
Pack_Hex_Control <- {}
Pack_DPS_Control <- {}
function Register_DPS_Pack(Id, Func) {
Pack_DPS_Control.rawset(Id, Func);
}
function Sq_Pack_Control(Chunk) {
try {
local Pack_Json = Json.Decode(Chunk);
if (Pack_Json.op == 2147483646) {
if (Pack_DPS_Control.rawin(Pack_Json.dps_id)) {
local Jso = Json.Decode(Chunk);
Jso.rawdelete("op");
Pack_DPS_Control[Pack_Json.dps_id](Jso);
}
} else {
if (Pack_Control.rawin(Pack_Json.op)) {
try {
Pack_Control[Pack_Json.op](Chunk);
} catch (exception) {
print("error pack: " + Pack_Json.op);
}
}
}
} catch (exception) {
// print("error packmsg: " + Pack_Json.op);
print(exception);
}
}
function Sq_Pack_ControlLocal(Chunk) {
local Pack_Json = Json.Decode(Chunk);
if (Pack_Json.op == 2147483646) {
if (Pack_DPS_Control.rawin(Pack_Json.dps_id)) {
local Jso = Json.Decode(Chunk);
Jso.rawdelete("op");
Pack_DPS_Control[Pack_Json.dps_id](Jso);
}
} else {
if (Pack_Control.rawin(Pack_Json.op)) {
Pack_Control[Pack_Json.op](Chunk);
}
}
}
//字节流包
function Sq_BlobPack_Control(Size, Pointer) {
local Pack = Packet();
Pack.Load(Pointer, Size);
local Op = Pack.GetInt();
//读取位置回到原点
// Pack.Seek(0);
if (Pack_Hex_Control.rawin(Op)) {
Pack_Hex_Control[Op](Pack);
}
}
function SendPackToDP_S(Id, T) {
T.op <- 2147483646;
T.dps_id <- Id;
Rindro_BaseToolClass.SendPackEx(T);
}
//进入副本回调
function LenheartGotoDgnCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
local DgnId = Jso.map.id;
local DgnRate = Jso.map.ra;
L_sq_GoDungeon(DgnId);
}
Pack_Control.rawset(2024041602, LenheartGotoDgnCallBack);
//进入副本增加属性
function LenheartAdditionalAttributes(obj) {
obj = sq_ObjectToSQRCharacter(obj);
//在副本中
if (sq_GetCurrentModuleType() == 3) {
if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/lenheartap.nut")) {
if ("LenheartAttributesTable" in getroottable()) {
local Abarr = {};
foreach(AtObj in getroottable()["LenheartAttributesTable"]) {
foreach(Apos, At in AtObj) {
if (!Abarr.rawin(Apos)) Abarr[Apos] <- At;
else Abarr[Apos] += At;
}
}
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/lenheartap.nut", true);
CNSquirrelAppendage.sq_Append(appendage, obj, obj);
local change_appendage = appendage.sq_getChangeStatus("Yosin_LenheartDgnBuff");
if (!change_appendage) {
change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0,
CHANGE_STATUS_TYPE_COOLTIME_DECLINE,
false, 0, 115514);
}
if (change_appendage) {
change_appendage.clearParameter();
foreach(Key, Value in Abarr) {
if (Key == 0) change_appendage.addParameter(13, false, Value.tofloat()); //HP
else if (Key == 1) change_appendage.addParameter(48, false, Value.tofloat()); //MP
else if (Key == "strength") change_appendage.addParameter(0, false, Value.tofloat()); //力量
else if (Key == "intelligence") change_appendage.addParameter(1, false, Value.tofloat()); //智力
else if (Key == "vitality") change_appendage.addParameter(2, false, Value.tofloat()); //体力
else if (Key == "spirit") change_appendage.addParameter(3, false, Value.tofloat()); //精神
else if (Key == "physicalAttack") change_appendage.addParameter(4, false, Value.tofloat()); //物攻
else if (Key == "magicAttack") change_appendage.addParameter(31, false, Value.tofloat()); //魔攻
else if (Key == "independentAttack") {
change_appendage.addParameter(53, false, Value.tofloat()); //独立
change_appendage.addParameter(54, false, Value.tofloat()); //独立
} else if (Key == "physicalDefense") change_appendage.addParameter(5, false, Value.tofloat()); //物理防御
else if (Key == "magicDefense") change_appendage.addParameter(32, false, Value.tofloat()); //魔法防御
else if (Key == "physicalCritical") change_appendage.addParameter(15, false, Value.tofloat() / 10.0); //物理暴击
else if (Key == "magicCritical") change_appendage.addParameter(16, false, Value.tofloat() / 10.0); //魔法暴击
else if (Key == "attackSpeed") change_appendage.addParameter(10, false, Value.tofloat()); //攻速
else if (Key == "releaseSpeed") change_appendage.addParameter(12, false, Value.tofloat()); //释放
else if (Key == "moveSpeed") change_appendage.addParameter(11, false, Value.tofloat()); //移速
else if (Key == "resistance") change_appendage.addParameter(39, false, Value.tofloat()); //抗磨
else if (Key == "hitRate") change_appendage.addParameter(33, false, Value.tofloat()); //命中
else if (Key == "avoidance") change_appendage.addParameter(27, false, Value.tofloat()); //闪避
else if (Key == "hpRecovery") change_appendage.addParameter(14, false, Value.tofloat()); //HP恢复
else if (Key == "mpRecovery") change_appendage.addParameter(29, false, Value.tofloat()); //MP恢复
else if (Key == "stun") change_appendage.addParameter(41, false, Value.tofloat()); //僵直
else if (Key == "hardStun") change_appendage.addParameter(34, false, Value.tofloat()); //硬直
else if (Key == "fire") change_appendage.addParameter(42, false, Value.tofloat()); //火强
else if (Key == "fireResistance") change_appendage.addParameter(20, false, Value.tofloat()); //火抗
else if (Key == "water") change_appendage.addParameter(43, false, Value.tofloat()); //冰强
else if (Key == "waterResistance") change_appendage.addParameter(21, false, Value.tofloat()); //冰抗
else if (Key == "light") change_appendage.addParameter(45, false, Value.tofloat()); //光强
else if (Key == "lightResistance") change_appendage.addParameter(23, false, Value.tofloat()); //光抗
else if (Key == "dark") change_appendage.addParameter(44, false, Value.tofloat()); //暗强
else if (Key == "darkResistance") change_appendage.addParameter(22, false, Value.tofloat()); //暗抗
}
}
}
}
}
}
if (getroottable().rawin("LenheartFuncTab")) {
getroottable()["LenheartFuncTab"].rawset("LenheartAdditionalAttributesFunc", LenheartAdditionalAttributes);
} else {
local T = {};
T.rawset("LenheartAdditionalAttributesFunc", LenheartAdditionalAttributes);
getroottable().rawset("LenheartFuncTab", T);
}
//进入副本增加属性
function LenheartAdditionalCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
if ("LenheartAttributesTable" in getroottable()) {
local T = getroottable()["LenheartAttributesTable"];
T.rawset("LenheartCollectBoxAb", Jso.Attribute);
} else {
local T = {};
T.rawset("LenheartCollectBoxAb", Jso.Attribute);
getroottable().rawset("LenheartAttributesTable", T);
}
}
Pack_Control.rawset(20069016, LenheartAdditionalCallBack);
getroottable().PluginsCompatibilityModeCallBack <- false;
//兼容模式
function CompatibilityModeCallBack(Chunk) {
getroottable().PluginsCompatibilityModeCallBack <- true;
}
Pack_Control.rawset(30004, CompatibilityModeCallBack);

View File

@ -1,32 +0,0 @@
/*
文件名:PushDamage.nut
路径:Base/CallBack/PushDamage.nut
创建日期:2024-08-30 14:41
文件用途:发生伤害时
*/
PushDamageFontDataFuncTab <- {};
PushDamageFontFuncTab <- {};
function Sq_PushDamageData(ObjAddress, MySelfAddress, Value) {
// print("MyCharacter: " + format("%02x", L_sq_RA(0x1AB7CDC)));
// print("ObjAddress: " + format("%02x", ObjAddress));
// print("A1: " + format("%02x", A1));
// print("A2: " + format("%02x", A2));
// print(" ");
foreach(Func in PushDamageFontFuncTab) {
Func(ObjAddress, MySelfAddress, Value);
}
}
function Sq_PushDamageFontData(ObjAddress, X, Y, Z, Value, Type, A1, A2) {
local Flag = true;
foreach(Func in PushDamageFontDataFuncTab) {
local Ret = Func(ObjAddress, X, Y, Z, Value, Type, A1, A2);
if (Ret == false) {
Flag = false;
}
}
return Flag;
}

View File

@ -1,30 +0,0 @@
/*
文件名:Interface.nut
路径:Base/Interface.nut
创建日期:2025-05-01 07:39
文件用途:所有基础文件加载以后 将会执行的逻辑 用于初始化一些接口和默认设置
*/
//消息框黏贴
NativePointer(0x011C53B0).writeShort(0x1B0);
//修复233号弹窗
NativePointer(0x00727017).writeByteArray([0xEB, 0x11, 0x90, 0x90, 0x90, 0x90, 0x90]);
//反遍历函数
NativePointer(0x1370FD7).writeInt(0);
//全局的道具信息
if (!getroottable().rawin("Rindro_ItemInfoObject")) Rindro_ItemInfoObject <- {};
//开启热重载目录
if(getroottable().rawin("RINDROLOCAL") && RINDROLOCAL == true)Sq_AutoReload("sqr");
print("cs base ");
print("cs base ");
print("cs base ");
print("cs base ");
print("cs base ");
print("cs base ");
print("cs base ");

View File

@ -1,512 +0,0 @@
/*
文件名:Lenheart_Character_Info_Class.nut
路径:Base/UI/Lenheart_Character_Info_Class.nut
创建日期:2024-08-27 12:13
文件用途:个人信息属性面板
*/
return;
class Lenheart_Character_Info_ClassC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
Visible = false;
//图标路径
IconPath = "interface2/profile/profile_icon1.img";
//我的信息
MyInfo = null;
//滚轮偏移值
YOffset = 0;
function My_GetCharacterInfoCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
MyInfo = Jso.Attribute;
}
//初始化
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20069014, My_GetCharacterInfoCallBack.bindenv(this));
}
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) {
DrawInfo(obj);
}
function CheckPosInDrawBox(PosY) {
if ((PosY + YOffset) >= 0 && (PosY + YOffset)< 144) return true;
return false;
}
//绘制信息
function DrawInfo(obj) {
if (MyInfo) {
//生命魔法值
local PosOffset = 0;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 0, X + 4, Y + 3 + YOffset);
L_sq_DrawCode("HP", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local HpStr = MyInfo.CurHp.tostring() + "/" + MyInfo.MaxHp.tostring();
L_sq_DrawCode(HpStr, X + 128 - LenheartTextClass.GetStringLength(HpStr), Y + 4 + (0 * 18) + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
L_sq_DrawImg(IconPath, 1, X + 130, Y + 3 + YOffset);
L_sq_DrawCode("MP", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local HpStr = MyInfo.CurMp.tostring() + "/" + MyInfo.MaxMp.tostring();
L_sq_DrawCode(HpStr, X + 248 - LenheartTextClass.GetStringLength(HpStr), Y + 4 + (0 * 18) + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
}
//力量智力
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 2, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("力量", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.Strength.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
L_sq_DrawImg(IconPath, 3, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("智力", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.Intellect.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
}
//体力精神
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 4, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("体力", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.Vitality.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
L_sq_DrawImg(IconPath, 5, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("精神", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.Spirit.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
}
//物理攻击魔法攻击
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 6, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("物理攻击", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.PhysicalAttack.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
L_sq_DrawImg(IconPath, 7, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("魔法攻击", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.MagicalAttack.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
}
//独立攻击力
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 31, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("独立攻击力(物理/魔法)", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.IndependentAttack.tostring();
L_sq_DrawCode(Str, X + 248 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
}
//物理防御魔法防御
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 8, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("物理防御", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.PhysicalDefend.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
L_sq_DrawImg(IconPath, 9, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("魔法防御", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.MagicalDefend.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(150, 255, 30, 250), 0, 1);
}
//物理暴击 魔法暴击
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 10, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("物理暴击", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = format("%0.1f%%", MyInfo.PhysicalCrit);
L_sq_DrawCode(Str, X + 133 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 11, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("魔法暴击", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = format("%0.1f%%", MyInfo.MagicalCrit);
L_sq_DrawCode(Str2, X + 253 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//攻击速度 释放速度
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 12, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("攻击速度", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = format("%0.1f%%", MyInfo.AttackSpeed);
L_sq_DrawCode(Str, X + 133 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 13, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("释放速度", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = format("%0.1f%%", MyInfo.ReleaseSpeed);
L_sq_DrawCode(Str2, X + 253 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//移动速度 抗魔
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 14, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("移动速度", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = format("%0.1f%%", MyInfo.MoveSpeed);
L_sq_DrawCode(Str, X + 133 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 15, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("抗魔", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.AntiMagic.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//命中率 回避率
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 16, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("命中率", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = format("%0.1f%%", MyInfo.HitRate);
L_sq_DrawCode(Str, X + 133 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 17, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("回避率", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = format("%0.1f%%", MyInfo.DodgeRate);
L_sq_DrawCode(Str2, X + 253 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//HP恢复量 MP恢复量
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 18, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("HP恢复量", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.HPRecovery.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 19, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("MP恢复量", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.MPRecovery.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//僵直度 硬直
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 20, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("僵直度", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.StunRate.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 21, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("硬直", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.StunResist.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//火属性强化 火属性抗性
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 22, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("火属性强化", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.FireStrength.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 23, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("火属性抗性", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.FireResist.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//冰属性强化 冰属性抗性
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 24, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("冰属性强化", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.IceStrength.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 25, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("冰属性抗性", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.IceResist.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//光属性强化 光属性抗性
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 26, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("光属性强化", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.LightStrength.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 27, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("光属性抗性", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.LightResist.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//暗属性强化 暗属性抗性
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 28, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("暗属性强化", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.DarkStrength.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 29, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("暗属性抗性", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.DarkResist.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
//名望值 罪恶值
PosOffset += 18;
if (CheckPosInDrawBox(PosOffset)) {
L_sq_DrawImg(IconPath, 53, X + 4, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("名望值", X + 20, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str = MyInfo.Fame.tostring();
L_sq_DrawCode(Str, X + 128 - LenheartTextClass.GetStringLength(Str), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
L_sq_DrawImg(IconPath, 45, X + 130, Y + 3 + PosOffset + YOffset);
L_sq_DrawCode("最终伤害", X + 148, Y + 4 + PosOffset + YOffset, sq_RGBA(255, 255, 255, 250), 0, 1);
local Str2 = MyInfo.FinalDamage.tostring();
L_sq_DrawCode(Str2, X + 248 - LenheartTextClass.GetStringLength(Str2), Y + 4 + PosOffset + YOffset, sq_RGBA(251, 251, 251, 250), 0, 1);
}
}
}
function Show(obj) {
}
function RealShow(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//override
//鼠标滚轮事件回调
function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) {
if (Flag) {
if (YOffset< 0) YOffset += 18;
}
if (!Flag) {
if (YOffset > (-145)) YOffset -= 18;
}
}
//调用原生方法
LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
}
GetMyInfoFlag = false;
//逻辑入口
function Proc(obj) {
Visible = false;
LenheartNewUI_Windows.SyncPos(X, Y);
local WindowX = sq_GetPopupWindowMainCotrol(74);
if (!WindowX) {
GetMyInfoFlag = false;
}
if (!WindowX) return;
if (!GetMyInfoFlag) {
GetMyInfoFlag = true;
local T = {
op = 20069013,
Info = Lenheart_Character_GetAttribute(null)
}
SendPackEx(T);
}
X = Base_X;
Y = Base_Y;
}
Base_X = 0;
Base_Y = 0;
function SyncState(Args) {
Base_X = Args[0] + 800;
Base_Y = Args[1] - 174;
local obj = sq_getMyCharacter();
RealShow(obj);
Visible = true;
}
}
DrawCodeCallBackFunc.Rindro_Character_Info <- function(Args) {
if (getroottable().rawin("Lenheart_Character_Info_Class_Obj")) {
local MyWindow = getroottable().rawget("Lenheart_Character_Info_Class_Obj");
MyWindow.SyncState(Args);
}
}
//个人信息窗口逻辑
function L_Character_Info_Window(WindowObject) {
return false;
// //返回Flase 原逻辑继续执行 返回Tue 原逻辑终止执行
// local Flag = false;
// if (getroottable().rawin("Lenheart_Character_Info_Class_Obj")) {
// local MyWindow = getroottable().rawget("Lenheart_Character_Info_Class_Obj");
// local Ret = MyWindow.SyncState(WindowObject);
// if (Ret) Flag = true;
// }
// return Flag;
}
getroottable().rawdelete("Lenheart_Character_Info_Class_Obj");
function Lenheart_Character_Info_Class_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("Lenheart_Character_Info_Class_Obj")) {
RootTab.rawset("Lenheart_Character_Info_Class_Obj", LenheartNewUI_CreateWindow(Lenheart_Character_Info_ClassC, "个人信息属性面板窗口", 0, 0, 263, 146, 0));
}
}
getroottable()["LenheartFuncTab"].rawset("Lenheart_Character_Info_ClassFuncN", Lenheart_Character_Info_Class_Fun);
class Lenheart_Other_Character_Info_ClassC extends Lenheart_Character_Info_ClassC {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
Visible = false;
//图标路径
IconPath = "interface2/profile/profile_icon1.img";
//我的信息
MyInfo = null;
//滚轮偏移值
YOffset = 0;
function Other_GetCharacterInfoCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
MyInfo = Jso.Attribute;
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20069012, Other_GetCharacterInfoCallBack.bindenv(this));
}
function RegisterWidget() {
}
function Show(obj) {
}
function DrawMain(obj) {
DrawInfo(obj);
}
function RealShow(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//override
//鼠标滚轮事件回调
function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
if (Flag) {
if (YOffset< 0) YOffset += 18;
}
if (!Flag) {
if (YOffset > (-145)) YOffset -= 18;
}
//调用原生方法
LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
}
//逻辑入口
function Proc(obj) {
Visible = false;
LenheartNewUI_Windows.SyncPos(X, Y);
local WindowX = sq_GetPopupWindowMainCotrol(74);
if (!WindowX || !OldWindowAddress) return;
X = L_sq_RA(OldWindowAddress + 0x14);
Y = L_sq_RA(OldWindowAddress + 0x18) + 154;
}
OldWindowAddress = null;
function SyncState(Address) {
OldWindowAddress = Address;
local obj = sq_getMyCharacter();
RealShow(obj);
Visible = true;
return true;
}
}
//他人信息窗口逻辑
function L_Other_Character_Info_Window(WindowObject) {
return false;
//返回Flase 原逻辑继续执行 返回Tue 原逻辑终止执行
local Flag = false;
if (getroottable().rawin("Lenheart_Other_Character_Info_Class_Obj")) {
local MyWindow = getroottable().rawget("Lenheart_Other_Character_Info_Class_Obj");
local Ret = MyWindow.SyncState(WindowObject);
if (Ret) Flag = true;
}
return Flag;
}
getroottable().rawdelete("Lenheart_Other_Character_Info_Class_Obj");
function Lenheart_Other_Character_Info_Class_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("Lenheart_Other_Character_Info_Class_Obj")) {
RootTab.rawset("Lenheart_Other_Character_Info_Class_Obj", LenheartNewUI_CreateWindow(Lenheart_Other_Character_Info_ClassC, "他人信息属性面板窗口", 0, 0, 263, 146, 0));
}
}
getroottable()["LenheartFuncTab"].rawset("Lenheart_Other_Character_Info_ClassFuncN", Lenheart_Other_Character_Info_Class_Fun);

View File

@ -1,57 +0,0 @@
/*
文件名:Lenheart_Cursor_Class.nut
路径:Base/UI/Lenheart_Cursor_Class.nut
创建日期:2024-09-25 19:23
文件用途:鼠标绘制逻辑
*/
class Rindro_Cursor {
//强制锁
ForceLockState = false;
//是否启用
UseState = 0;
TypeState = 0;
SubState = 0;
constructor() {
}
function Proc(Xpos, Ypos) {
//使用自建的鼠标绘制函数
if (UseState) {
//工作类型为0
if (TypeState == 0) {
//常规状态
if (SubState == 0) {
L_sq_DrawImg("interface/newstyle/windows/cursor.img", 0, Xpos, Ypos);
}
//按下状态
else if (SubState == 1) {
L_sq_DrawImg("interface/newstyle/windows/cursor.img", 1, Xpos, Ypos);
}
} else {
L_sq_DrawImg("interface/newstyle/windows/cursor.img", TypeState, Xpos, Ypos);
}
}
}
function Sync(Xpos, Ypos) {
Proc(Xpos, Ypos);
return UseState;
}
}
_Rindro_Cusor_ <- Rindro_Cursor();
function SyncRindro_Cursor(Xpos, Ypos) {
if (getroottable().rawin("_Rindro_Cusor_")) {
local Ret = _Rindro_Cusor_.Sync(Xpos, Ypos);
return Ret;
}
return false;
}

View File

@ -1,418 +0,0 @@
/*
文件名:Lenheart_Each_Class.nut
路径:Base/UI/Lenheart_Each_Class.nut
创建日期:2024-09-30 14:46
文件用途:交互界面类
*/
class LenheartNewUI_Each_BaseButton extends LenheartNewUI_CommonUi {
State = 0;
BaseIdx = 29;
DWidth = null;
Path = null;
Idx = null;
SetFlag = null;
SetIndex = null;
Icon = null;
IconIdx = null;
Str = null;
StrColor = sq_RGBA(189, 159, 126, 250);
constructor(X, Y, W, H, Path, Idx) {
this.DWidth = W;
this.Path = Path;
this.Idx = Idx;
LenheartNewUI_CommonUi.constructor(X, Y, W, H);
}
function SetFrame(gPath, gIdx) {
if (gPath) Path = gPath;
Idx = gIdx;
}
function Show(obj) {
//不可用
if (State == 8) {
// L_sq_DrawImg(Path, Idx + 3, X, Y);
} else {
//按下
if (isLBDown) {
L_sq_DrawImg(Path, Idx + 1, X, Y);
if (Icon) L_sq_DrawImg(Icon, IconIdx, X + 3, Y + 2);
if (Str) L_sq_DrawCode(Str, X + 60 - LenheartTextClass.GetStringLength(Str) / 2, Y + 5, StrColor, 0, 1);
}
//悬停
else if (isInRect) {
L_sq_DrawImg(Path, Idx, X, Y);
if (Icon) L_sq_DrawImg(Icon, IconIdx, X + 3, Y + 1);
if (Str) L_sq_DrawCode(Str, X + 60 - LenheartTextClass.GetStringLength(Str) / 2, Y + 4, StrColor, 0, 1);
}
//普通
else {
L_sq_DrawImg(Path, 0, X, Y);
if (Icon) L_sq_DrawImg(Icon, IconIdx, X + 3, Y + 1);
if (Str) L_sq_DrawCode(Str, X + 60 - LenheartTextClass.GetStringLength(Str) / 2, Y + 4, StrColor, 0, 1);
}
}
}
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
if (isLBDown && OnClick) {
OnClick(this);
}
isLBDown = false;
}
}
class Lenheart_EachC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
// Visible = false;
Info = null;
NPC_Index = null;
NPC_Flag = false;
NPC_ButtonMap = null;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
NPC_ButtonMap = {};
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {
}
function Show(obj) {
}
function TopShow(obj) {
if (NPC_Index) {
SyncPos();
LenheartNewUI_Windows.Show(obj);
}
}
function DrawMain(obj) {
// if (Info) {
// local NPC_Index = Rindro_BaseToolClass.GetEachNpcId();
// }
}
// function BottomShow() {}
//初始化NPC按钮
function InitNpcButton() {
Childrens = [];
if (NPC_ButtonMap.rawin(NPC_Index)) {
foreach(Func in NPC_ButtonMap[NPC_Index]) {
Func(this);
}
}
this.Visible = true;
}
function AddEachForNpc(Index, Func) {
if (NPC_ButtonMap.rawin(Index)) {
NPC_ButtonMap[Index].append(Func);
return;
}
NPC_ButtonMap.rawset(Index, [Func]);
}
function RemoveEachForNpc(Index) {
NPC_ButtonMap.rawdelete(Index);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
NPC_Index = Rindro_BaseToolClass.GetEachNpcId();
if (NPC_Index) {
if (!NPC_Flag) {
NPC_Flag = true;
InitNpcButton();
}
} else {
NPC_Flag = false;
}
}
function CloseAllEach() {
local EachClassObject = L_sq_RA(0x1ADE0E0);
if (EachClassObject) {
local FristChildOffset = (EachClassObject + 0x68);
for (local i = 0; i< 74; i++) {
local AddressBuf = FristChildOffset + (4 * i);
local ChildAddress = L_sq_RA(AddressBuf);
if (ChildAddress) {
local OpenFlag = L_sq_RA(ChildAddress + 0xC);
if (OpenFlag = 257) L_sq_WA(ChildAddress + 0xC, 256);
}
}
}
}
function Lenheart_Get_Each_Info() {
local EachCount = 0;
local Xpos = 0;
local Ypos = 0;
local EachClassObject = L_sq_RA(0x1ADE0E0);
if (EachClassObject) {
local FristChildOffset = (EachClassObject + 0x68);
for (local i = 0; i< 74; i++) {
local AddressBuf = FristChildOffset + (4 * i);
local ChildAddress = L_sq_RA(AddressBuf);
if (ChildAddress) {
local OpenFlag = L_sq_RA(ChildAddress + 0xC);
if (OpenFlag == 257) EachCount++;
}
//第0个的时候记录一下坐标
if (i == 0) {
Xpos = L_sq_RA(ChildAddress + 0x14);
Ypos = L_sq_RA(ChildAddress + 0x18);
}
}
}
return {
Count = EachCount,
X = Xpos,
Y = Ypos
};
}
//override
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
//调用原生方法
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
}
function SyncPos() {
//读取交互坐标数据
Info = Lenheart_Get_Each_Info();
X = Info.X;
Y = Info.Y + (21 * Info.Count);
//宽度
Width = 100;
//高度
Height = (21 * Childrens.len());
//同步子对象坐标
foreach(pos, winobj in Childrens) {
winobj.X = Info.X;
winobj.Y = Info.Y + (21 * (Info.Count + pos));
}
}
}
function Lenheart_Each_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("L_Each_Obj")) {
RootTab.rawset("L_Each_Obj", LenheartNewUI_CreateWindow(Lenheart_EachC, "玩家与NPC交互界面窗口", 0, 0, 0, 0, 0));
}
}
getroottable()["LenheartFuncTab"].rawset("Lenheart_EachN", Lenheart_Each_Fun);
class Lenheart_PlayerEachC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//是否可见
// Visible = false;
Info = null;
Basic = null;
//当前交互角色姓名
PlayerEach_Name = null;
PlayerEach_Flag = false;
PlayerEach_ButtonMap = null;
//通用按钮
PlayerEach_CommonButtonMap = null;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
PlayerEach_ButtonMap = {};
PlayerEach_CommonButtonMap = {};
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {}
function Show(obj) {}
function TopShow(obj) {}
function DrawMain(obj) {}
function MySelfShow() {
if (PlayerEach_Name) {
local obj = sq_getMyCharacter();
LenheartNewUI_Windows.Show(obj);
}
}
//初始化NPC按钮
function InitNpcButton() {
Childrens = [];
if (PlayerEach_ButtonMap.rawin(PlayerEach_Name)) {
foreach(Func in PlayerEach_ButtonMap[PlayerEach_Name]) {
Func(this);
}
}
foreach(Func in PlayerEach_CommonButtonMap) {
Func(this);
}
this.Visible = true;
}
function AddEachForCommon(Index, Func) {
PlayerEach_CommonButtonMap.rawset(Index, Func);
}
function RemoveEachForCommon(Index) {
PlayerEach_CommonButtonMap.rawdelete(Index);
}
function AddEachForPlayerName(Index, Func) {
if (PlayerEach_ButtonMap.rawin(Index)) {
PlayerEach_ButtonMap[Index].append(Func);
return;
}
PlayerEach_ButtonMap.rawset(Index, [Func]);
}
function RemoveEachForPlayerName(Index) {
PlayerEach_ButtonMap.rawdelete(Index);
}
function CloseAllEach() {
if (Basic) {
L_sq_WA(L_sq_P2I(Basic) + 0xC, 256);
}
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
local Str = L_Sq_GetPlayerEachName();
if (Str.len() > 0) {
PlayerEach_Name = Str;
}
if (PlayerEach_Name) {
if (!PlayerEach_Flag) {
PlayerEach_Flag = true;
InitNpcButton();
}
} else {
PlayerEach_Flag = false;
}
}
//override
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
}
function SelfSyncPos(gInfo) {
//读取交互坐标数据
Info = gInfo;
Basic = gInfo.BasicAdd;
X = Info.X;
Y = Info.Y + (21 * Info.Count);
//宽度
Width = 100;
//高度
Height = (21 * Childrens.len());
//同步子对象坐标
foreach(pos, winobj in Childrens) {
winobj.X = Info.X;
winobj.Y = Info.Y + (21 * (Info.Count + pos));
}
}
}
RindroPlayerEachDrawFlag <- false;
RindroPlayerEachDrawCountBuffer <- 0;
RindroPlayerEachDrawCount <- 0;
Rindro_Haker.LoadHook(0x10002A0, ["pointer", "int", "int"],
function(args) {
if (L_Sq_GetPlayerEachName().len() <= 0) return;
local Xpos = L_sq_RA(L_sq_P2I(args[0]) + 0x14);
local Ypos = L_sq_RA(L_sq_P2I(args[0]) + 0x18);
if (!RindroPlayerEachDrawFlag) {
local RootTab = getroottable();
RindroPlayerEachDrawFlag = true;
if (RootTab.rawin("L_PlayerEach_Obj")) {
RootTab["L_PlayerEach_Obj"].SelfSyncPos({
X = Xpos,
Y = Ypos,
Count = RindroPlayerEachDrawCount,
BasicAdd = args[0]
});
RootTab["L_PlayerEach_Obj"].MySelfShow();
}
}
RindroPlayerEachDrawCountBuffer++;
// print(args[0]);
return null;
},
function(args) {
return null;
});
function Lenheart_PlayerEach_Fun(obj) {
local RootTab = getroottable();
RindroPlayerEachDrawFlag = false;
RindroPlayerEachDrawCount = RindroPlayerEachDrawCountBuffer;
RindroPlayerEachDrawCountBuffer = 0;
if (!RootTab.rawin("L_PlayerEach_Obj")) {
RootTab.rawset("L_PlayerEach_Obj", LenheartNewUI_CreateWindow(Lenheart_PlayerEachC, "玩家与玩家交互界面窗口", 0, 0, 0, 0, 0));
}
}
getroottable()["LenheartFuncTab"].rawset("Lenheart_PlayerEachN", Lenheart_PlayerEach_Fun);

View File

@ -1,374 +0,0 @@
/*
文件名:Lenheart_Event_Class.nut
路径:Base/UI/Lenheart_Event_Class.nut
创建日期:2024-08-11 09:47
文件用途:活动图标
*/
class LenheartNewUI_EventButton extends LenheartNewUI_CommonUi {
State = 0;
BaseIdx = 29;
DWidth = null;
Path = null;
Idx = null;
BindObj = null;
Timer = 0;
EffFlag = true;
ShowName = null;
constructor(X, Y, Path, Idx) {
this.DWidth = 20;
this.Path = Path;
this.Idx = Idx;
LenheartNewUI_CommonUi.constructor(X, Y, 20, 20);
Timer = Clock();
}
function SetFrame(gPath, gIdx) {
if (gPath) Path = gPath;
Idx = gIdx;
}
function Show(obj) {
T_DrawDynamicAni(obj, "common/yosinevent/eventsystemeff.ani", X, Y, "EventIcon" + ObjectId);
//不可用
if (State == 8) {
L_sq_DrawImg(Path, Idx + 3, X, Y + 1);
} else {
//按下
if (isLBDown) {
L_sq_DrawImg(Path, Idx + 1, X, Y);
}
//悬停
else if (isInRect) {
L_sq_DrawImg(Path, Idx, X, Y);
}
//普通
else {
L_sq_DrawImg(Path, Idx, X, Y);
}
}
}
//鼠标左键按下回调
function OnMouseLbDown(MousePos_X, MousePos_Y) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) isLBDown = true;
}
//鼠标左键弹起回调 overr
function OnMouseLbUp(MousePos_X, MousePos_Y) {
if (isLBDown && OnClick) {
local obj = sq_getMyCharacter();
obj.sq_PlaySound("CLICK_BUTTON1");
OnClick(this);
}
isLBDown = false;
}
}
class Rindro_Event extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
EventFlag = true;
//不是窗口
NoWindow = true;
//显示标志位
PosIdx = null;
//闪烁透明度
Alpha = 250;
//闪烁模式
BlinkMode = false;
//时间
Timer = 0;
//是否可见
Visible = true;
//主要Button
MainButton = null;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Timer = Clock();
}
//绘制主界面
function DrawMain(obj) {
local RT = Clock() - Timer;
//根据模式调整透明度
if (!BlinkMode) Alpha = sq_GetUniformVelocity(250, 130, RT, 500);
else Alpha = sq_GetUniformVelocity(130, 250, RT, 500);
//转换模式
if (RT >= 500) {
Timer = Clock();
BlinkMode = !BlinkMode;
}
L_sq_SetDrawImgModel(2, 0);
L_sq_DrawImg("interface2/yosin/eventsystemeff.img", 0, X, Y, 1, sq_RGBA(255, 255, 255, Alpha), 1.0, 1.0);
L_sq_ReleaseDrawImgModel();
}
function Show(obj) {
// DrawMain(obj);
// LenheartNewUI_Windows.Show(obj);
}
function EventShow(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
function TopShow(obj) {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 20, 20)) {
local XposOffset = 0;
local Len = LenheartTextClass.GetStringLength(MainButton.ShowName);
local Count = ((Len - 10) / 15) + 1;
XposOffset = (-(10 + Count * 15) / 2) + 10;
L_sq_DrawImg("interface2/yosin/eventsystem.img", 0, X + XposOffset, Y - 24);
for (local i = 0; i< Count; i++) {
L_sq_DrawImg("interface2/yosin/eventsystem.img", 1, X + XposOffset + 5 + (15 * i), Y - 24);
}
L_sq_DrawImg("interface2/yosin/eventsystem.img", 2, X + XposOffset + 5 + (15 * Count), Y - 24);
L_sq_DrawCode(MainButton.ShowName, X - Len / 2 + 12, Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1);
}
}
function SyncEventIcon() {
local Count = L_sq_RA(L_sq_RA(0x1A39C2C) + 0x6c);
X = EventList_Obj.X + (((Count + PosIdx) % 8) * 20);
Y = EventList_Obj.Y - ((Count + PosIdx) / 8) * 20;
}
//逻辑入口
function Proc(obj) {
//同步图标位置
SyncEventIcon();
LenheartNewUI_Windows.SyncPos(X, Y);
}
}
class Rindro_EventList {
X = 0;
Y = 0;
//活动数组
Events = null;
EventsMap = null;
function YosinEventIconInfoCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
X = Jso.YosinEventIconInfoXpos;
Y = Jso.YosinEventIconInfoYpos;
getroottable()["LenheartEventOffset"] <- {
x = X - 456,
y = Y
};
L_sq_RefreshEventIcon();
}
constructor() {
Events = [];
EventsMap = {};
Pack_Control.rawset(30002, YosinEventIconInfoCallBack.bindenv(this));
}
//添加活动
function AddEvent(Name, Idx, WindowObject, ...) {
if (EventsMap.rawin(Name)) return EventsMap.rawget(Name);
local Window = LenheartNewUI_CreateWindow(Rindro_Event, Name, 0, 0, 20, 20, 0)
local Flag = Events.len();
local ImgPath = "interface2/yosin/eventsystemlist.img";
if (vargc == 1) ImgPath = vargv[0];
local ButtonBuf = LenheartNewUI_EventButton(0, 0, ImgPath, Idx);
ButtonBuf.BindObj = WindowObject;
ButtonBuf.ShowName = Name;
ButtonBuf.OnClick = function(B_obj) {
if (B_obj.BindObj) B_obj.BindObj.OpenCallBack();
}.bindenv(this);
Window.AddChild(ButtonBuf);
Window.PosIdx = Events.len();
Window.MainButton = ButtonBuf;
Events.append(Window);
EventsMap.rawset(Name, Window);
return Window;
}
//检测是否悬停活动图标
function CheckInEvent(MousePos_X, MousePos_Y) {
if (sq_GetPopupWindowMainCotrol(244)) return;
foreach(Window in Events) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Window.X, Window.Y, Window.Width, Window.Height)) {
getroottable().WindowsShowABFlag <- true;
}
}
}
}
getroottable().rawdelete("EventList_Obj")
function Lenheart_EventList_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("EventList_Obj")) {
RootTab.rawset("EventList_Obj", Rindro_EventList());
}
}
//获取活动图标坐标 在活动图标变动时会被调用
function Sq_Get_Event_Pos_X() {
if (getroottable().rawin("LenheartEventOffset")) {
return getroottable()["LenheartEventOffset"].x;
} else {
getroottable()["LenheartEventOffset"] <- {
x = 277,
y = 530
};
return getroottable()["LenheartEventOffset"].x;
}
}
function Sq_Get_Event_Pos_Y() {
if (getroottable().rawin("LenheartEventOffset")) {
return getroottable()["LenheartEventOffset"].y;
} else {
getroottable()["LenheartEventOffset"] <- {
x = 277,
y = 530
};
return getroottable()["LenheartEventOffset"].y;
}
}
/*
//活动图标类
class Rindro_EventIcon extends LenheartNewUI_CommonUi {
//Key
Key = null;
//活动图标文字
EventStr = null;
//活动图标Ani编号
EventFrame = null;
//绑定对象
BandObject = null;
//图标img路径
ImgPath = "interface2/yosin/eventsystemlist.img";
x = null;
y = null;
constructor(gEventStr, gEventFrame, gKey, gBandObject) {
this.EventStr = gEventStr;
this.EventFrame = gEventFrame;
this.Key = gKey;
this.BandObject = gBandObject;
local RootTab = getroottable();
if (RootTab.rawin("YosinEventSystem")) {
local Arr = RootTab["YosinEventSystem"];
local TryAppend = true;
local wpos;
foreach(pos, value in Arr) {
if (value.Key == this.Key) {
TryAppend = false;
wpos = pos;
}
}
if (TryAppend) {
Arr.append(this);
RootTab.rawset("YosinEventSystem", Arr);
} else {
Arr[wpos] = this;
RootTab.rawset("YosinEventSystem", Arr);
}
} else {
local Arr = [];
Arr.append(this);
RootTab.rawset("YosinEventSystem", Arr);
}
}
function Show(obj, X, Y) {
x = X;
y = Y;
//绘制框
T_DrawDynamicAni(obj, "common/yosinevent/eventsystemeff.ani", X, Y, "YosinEventIconEffA");
try {
if (isLBDown()) {
//绘制活动图标
L_sq_DrawImg(ImgPath, EventFrame, X, Y + 1);
//T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y + 1, EventFrame, "YosinEventIconKey" + Key);
} else {
//绘制活动图标
L_sq_DrawImg(ImgPath, EventFrame, X, Y);
}
} catch (exception) {
if (isLBDown()) {
//绘制活动图标
T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y + 1, EventFrame, "YosinEventIconKey" + Key);
} else {
//绘制活动图标
T_DrawStayAni(obj, "common/yosinevent/eventsystemlist.ani", X, Y, EventFrame, "YosinEventIconKey" + Key);
}
}
}
function StrShow(obj, X, Y) {
//悬停
if (isInRect() && EventStr) {
local count = EventStr.len() / 3;
T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7), Y - 24, 0, "YosinEventIconStrEffL");
for (local i = 0; i< count; i++) {
T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7) + 5 + (i * 15), Y - 24, 1, "YosinEventIconStrEffZ");
}
T_DrawStayAni(obj, "common/yosinevent/eventsystem.ani", X - (count * 7) + 5 + (count * 15), Y - 24, 2, "YosinEventIconStrEffR");
L_sq_DrawCode(EventStr, X - (count * 4), Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1);
}
if (isLBActive()) {
BandObject.MainState = true;
BandObject.OpenClassCallBack();
}
}
//悬停状态
function isInRect() {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, x, y, 20, 20)) return true;
else return false;
}
//左键按下状态
function isLBDown() {
if (isInRect() && Mobj.Lb == 1) return true;
else return false;
}
//左键弹起状态
function isLBUp() {
if (isInRect() && Mobj.Lb == 0) return true;
else return false;
}
//左键单击状态
function isLBActive() {
if (isInRect() && Mobj.LbEvent) return true;
else return false;
}
}
*/

File diff suppressed because it is too large Load Diff

View File

@ -1,52 +0,0 @@
/*
文件名:OldWindowsMap.nut
路径:Base/UI/OldWindowsMap.nut
创建日期:2024-08-06 18:56
文件用途:用于查询是否鼠标悬停在原生窗口上的Flag 以下编号代表着没有悬停其他均为悬停在原生窗口
*/
NotOldWindowsMap <- {}
NotOldWindowsMap.rawset(92, 1);
NotOldWindowsMap.rawset(79, 1);
NotOldWindowsMap.rawset(2395, 1);
NotOldWindowsMap.rawset(2396, 1);
NotOldWindowsMap.rawset(3877, 1);
NotOldWindowsMap.rawset(3878, 1);
NotOldWindowsMap.rawset(3873, 1);
NotOldWindowsMap.rawset(3874, 1);
NotOldWindowsMap.rawset(3858, 1);
NotOldWindowsMap.rawset(3871, 1);
NotOldWindowsMap.rawset(3857, 1);
NotOldWindowsMap.rawset(3861, 1);
NotOldWindowsMap.rawset(3862, 1);
NotOldWindowsMap.rawset(93, 1);
NotOldWindowsMap.rawset(94, 1);
NotOldWindowsMap.rawset(95, 1);
NotOldWindowsMap.rawset(96, 1);
NotOldWindowsMap.rawset(97, 1);
NotOldWindowsMap.rawset(98, 1);
NotOldWindowsMap.rawset(99, 1);
NotOldWindowsMap.rawset(100, 1);
NotOldWindowsMap.rawset(101, 1);
NotOldWindowsMap.rawset(114, 1);
NotOldWindowsMap.rawset(88, 1);
NotOldWindowsMap.rawset(102, 1);
NotOldWindowsMap.rawset(108, 1);
NotOldWindowsMap.rawset(109, 1);
NotOldWindowsMap.rawset(103, 1);
NotOldWindowsMap.rawset(104, 1);
NotOldWindowsMap.rawset(110, 1);
NotOldWindowsMap.rawset(111, 1);
NotOldWindowsMap.rawset(105, 1);
NotOldWindowsMap.rawset(106, 1);
NotOldWindowsMap.rawset(112, 1);
NotOldWindowsMap.rawset(113, 1);
NotOldWindowsMap.rawset(107, 1);
NotOldWindowsMap.rawset(87, 1);
NotOldWindowsMap.rawset(86, 1);
NotOldWindowsMap.rawset(80, 1);
NotOldWindowsMap.rawset(81, 1);
NotOldWindowsMap.rawset(82, 1);
NotOldWindowsMap.rawset(83, 1);
NotOldWindowsMap.rawset(4067, 1);
NotOldWindowsMap.rawset(122, 1);
NotOldWindowsMap.rawset(120, 1);

View File

@ -1,426 +0,0 @@
/*
文件名:_ENUM_KEY.nut
路径:Base/_ENUM/_ENUM_KEY.nut
创建日期:2024-08-06 22:09
文件用途:按键枚举类
*/
DIK_ESCAPE <- 0x01
DIK_1 <- 0x02
DIK_2 <- 0x03
DIK_3 <- 0x04
DIK_4 <- 0x05
DIK_5 <- 0x06
DIK_6 <- 0x07
DIK_7 <- 0x08
DIK_8 <- 0x09
DIK_9 <- 0x0A
DIK_0 <- 0x0B
DIK_MINUS <- 0x0C /* - on main keyboard */
DIK_EQUALS <- 0x0D
DIK_BACK <- 0x0E /* backspace */
DIK_TAB <- 0x0F
DIK_Q <- 0x10
DIK_W <- 0x11
DIK_E <- 0x12
DIK_R <- 0x13
DIK_T <- 0x14
DIK_Y <- 0x15
DIK_U <- 0x16
DIK_I <- 0x17
DIK_O <- 0x18
DIK_P <- 0x19
DIK_LBRACKET <- 0x1A
DIK_RBRACKET <- 0x1B
DIK_RETURN <- 0x1C /* Enter on main keyboard */
DIK_LCONTROL <- 0x1D
DIK_A <- 0x1E
DIK_S <- 0x1F
DIK_D <- 0x20
DIK_F <- 0x21
DIK_G <- 0x22
DIK_H <- 0x23
DIK_J <- 0x24
DIK_K <- 0x25
DIK_L <- 0x26
DIK_SEMICOLON <- 0x27
DIK_APOSTROPHE <- 0x28
DIK_GRAVE <- 0x29 /* accent grave */
DIK_LSHIFT <- 0x2A
DIK_BACKSLASH <- 0x2B
DIK_Z <- 0x2C
DIK_X <- 0x2D
DIK_C <- 0x2E
DIK_V <- 0x2F
DIK_B <- 0x30
DIK_N <- 0x31
DIK_M <- 0x32
DIK_COMMA <- 0x33
DIK_PERIOD <- 0x34 /* . on main keyboard */
DIK_SLASH <- 0x35 /* / on main keyboard */
DIK_RSHIFT <- 0x36
DIK_MULTIPLY <- 0x37 /* * on numeric keypad */
DIK_LMENU <- 0x38 /* left Alt */
DIK_SPACE <- 0x39
DIK_CAPITAL <- 0x3A
DIK_F1 <- 0x3B
DIK_F2 <- 0x3C
DIK_F3 <- 0x3D
DIK_F4 <- 0x3E
DIK_F5 <- 0x3F
DIK_F6 <- 0x40
DIK_F7 <- 0x41
DIK_F8 <- 0x42
DIK_F9 <- 0x43
DIK_F10 <- 0x44
DIK_NUMLOCK <- 0x45
DIK_SCROLL <- 0x46 /* Scroll Lock */
DIK_NUMPAD7 <- 0x47
DIK_NUMPAD8 <- 0x48
DIK_NUMPAD9 <- 0x49
DIK_SUBTRACT <- 0x4A /* - on numeric keypad */
DIK_NUMPAD4 <- 0x4B
DIK_NUMPAD5 <- 0x4C
DIK_NUMPAD6 <- 0x4D
DIK_ADD <- 0x4E /* + on numeric keypad */
DIK_NUMPAD1 <- 0x4F
DIK_NUMPAD2 <- 0x50
DIK_NUMPAD3 <- 0x51
DIK_NUMPAD0 <- 0x52
DIK_DECIMAL <- 0x53 /* . on numeric keypad */
DIK_OEM_102 <- 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */
DIK_F11 <- 0x57
DIK_F12 <- 0x58
DIK_F13 <- 0x64 /* (NEC PC98) */
DIK_F14 <- 0x65 /* (NEC PC98) */
DIK_F15 <- 0x66 /* (NEC PC98) */
DIK_KANA <- 0x70 /* (Japanese keyboard) */
DIK_ABNT_C1 <- 0x73 /* /? on Brazilian keyboard */
DIK_CONVERT <- 0x79 /* (Japanese keyboard) */
DIK_NOCONVERT <- 0x7B /* (Japanese keyboard) */
DIK_YEN <- 0x7D /* (Japanese keyboard) */
DIK_ABNT_C2 <- 0x7E /* Numpad . on Brazilian keyboard */
DIK_NUMPADEQUALS <- 0x8D /* = on numeric keypad (NEC PC98) */
DIK_PREVTRACK <- 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */
DIK_AT <- 0x91 /* (NEC PC98) */
DIK_COLON <- 0x92 /* (NEC PC98) */
DIK_UNDERLINE <- 0x93 /* (NEC PC98) */
DIK_KANJI <- 0x94 /* (Japanese keyboard) */
DIK_STOP <- 0x95 /* (NEC PC98) */
DIK_AX <- 0x96 /* (Japan AX) */
DIK_UNLABELED <- 0x97 /* (J3100) */
DIK_NEXTTRACK <- 0x99 /* Next Track */
DIK_NUMPADENTER <- 0x9C /* Enter on numeric keypad */
DIK_RCONTROL <- 0x9D
DIK_MUTE <- 0xA0 /* Mute */
DIK_CALCULATOR <- 0xA1 /* Calculator */
DIK_PLAYPAUSE <- 0xA2 /* Play / Pause */
DIK_MEDIASTOP <- 0xA4 /* Media Stop */
DIK_VOLUMEDOWN <- 0xAE /* Volume - */
DIK_VOLUMEUP <- 0xB0 /* Volume + */
DIK_WEBHOME <- 0xB2 /* Web home */
DIK_NUMPADCOMMA <- 0xB3 /* , on numeric keypad (NEC PC98) */
DIK_DIVIDE <- 0xB5 /* / on numeric keypad */
DIK_SYSRQ <- 0xB7
DIK_RMENU <- 0xB8 /* right Alt */
DIK_PAUSE <- 0xC5 /* Pause */
DIK_HOME <- 0xC7 /* Home on arrow keypad */
DIK_UP <- 0xC8 /* UpArrow on arrow keypad */
DIK_PRIOR <- 0xC9 /* PgUp on arrow keypad */
DIK_LEFT <- 0xCB /* LeftArrow on arrow keypad */
DIK_RIGHT <- 0xCD /* RightArrow on arrow keypad */
DIK_END <- 0xCF /* End on arrow keypad */
DIK_DOWN <- 0xD0 /* DownArrow on arrow keypad */
DIK_NEXT <- 0xD1 /* PgDn on arrow keypad */
DIK_INSERT <- 0xD2 /* Insert on arrow keypad */
DIK_DELETE <- 0xD3 /* Delete on arrow keypad */
DIK_LWIN <- 0xDB /* Left Windows key */
DIK_RWIN <- 0xDC /* Right Windows key */
DIK_APPS <- 0xDD /* AppMenu key */
DIK_POWER <- 0xDE /* System Power */
DIK_SLEEP <- 0xDF /* System Sleep */
DIK_WAKE <- 0xE3 /* System Wake */
DIK_WEBSEARCH <- 0xE5 /* Web Search */
DIK_WEBFAVORITES <- 0xE6 /* Web Favorites */
DIK_WEBREFRESH <- 0xE7 /* Web Refresh */
DIK_WEBSTOP <- 0xE8 /* Web Stop */
DIK_WEBFORWARD <- 0xE9 /* Web Forward */
DIK_WEBBACK <- 0xEA /* Web Back */
DIK_MYCOMPUTER <- 0xEB /* My Computer */
DIK_MAIL <- 0xEC /* Mail */
DIK_MEDIASELECT <- 0xED /* Media Select */
FFI_FIRST_ABI <- 0;
FFI_SYSV <- 1;
FFI_STDCALL <- 2;
FFI_THISCALL <- 3;
FFI_FASTCALL <- 4;
FFI_MS_CDECL <- 5;
FFI_PASCAL <- 6;
FFI_REGISTER <- 7;
function Sq_L_Medal(x, y) {}
function Sq_SettingWindowCallBack(x, y) {}
function Sq_BuffSwitchingCallBack(x, y) {}
function Sq_SwitchingCallBack(x, y) {}
function Sq_UpgradeCallBack(x, y) {}
function Sq_RecoveryCallBack(x, y) {}
function Sq_RecoveryTypeSetCallBack(Type) {}
function Sq_DrawMainMaxLayerCustomUI(pack) {}
function Lenheart(VmTop) {}
function Sq_MouseEventCallBack(Lb, Rb, Mb) {}
function Sq_SelectCharacter(Chunk) {}
function Sq_DrawMainTopLayerCustomUI(pack) {}
function Sq_GetExeStr_Event(StrIndex) {
return StrIndex;
}
function Sq_CreatChr(chunk) {}
function Sq_SendPackType_Event(Type) {}
function Sq_SendPackByte_Event(Parm) {}
function Sq_SendPackWord_Event(Parm) {}
function Sq_SendPackDWord_Event(Parm) {}
function Sq_SendPackChar_Event(Parm) {}
function Sq_SendPack_Event() {}
function Sq_DrawItemBack(Xpos, Ypos, Image) {}
function Sq_DrawItemFront(Xpos, Ypos, Image) {}
function Sq_GetDrawMonBloodSw() {
return false;
}
function Sq_DrawMonsterBlood(Object, X, Y) {}
function Sq_Set_Inventory_M_Pos(This) {}
function Sq_Get_Ex_IntData(SkillAddress, Idx, objAddress) {
return 0;
}
function Sq_Get_Ex_SkillCoolTime(SkillAddress, Idx, objAddress) {
return 0;
}
function Sq_Get_Ex_LevelData(SkillAddress, Idx, objAddress) {
return 0;
}
function Sq_PlayerEachPos(x, y) {}
function Sq_DrawMainMaxLayerCustomUI(pack) {}
function Sq_PushDamageFontData(ObjAddress, X, Y, Z, Value, Type, A8, A9) {
return true;
}
function Sq_PushDamageData(ObjAddress, MySelfAddress, Value);
function Sq_Pack_Control(chunk) {}
function Sq_MessageWindowDraw(a, c) {}
function Sq_Get_Event_Pos_X() {
return 1;
}
function Sq_Get_Event_Pos_Y() {
return 1;
}
function Sq_L_OtherPlayerInfo(x, y, Type, Value, ImgBuf) {
local str = Value.tostring();
local lenght = L_sq_GetStringDrawLength(str);
L_sq_DrawImg(ImgBuf, x + 70 - lenght, y + 5);
return Value;
}
function Sq_DrawMiniMapUI(a) {}
function Sq_CompleteTask(a1, a2, a3) {}
function L_drawMainCustomUI_All() {}
function L_MouseCallBack(a, b, c, d) {}
function L_DrawWindow_A() {}
function L_DrawWindow_B() {}
function L_OpenOldWindowCallBack(WindowIndex) {}
function L_Old_Window_Get(WindowObject) {}
function L_Character_Info_Window(WindowObject) {
return false;
}
function L_Other_Character_Info_Window(WindowObject) {
return false;
}
function L_Old_Window_Visible(WindowObject, Flag) {}
getroottable().LenheartBaseFuncTab <- {};
getroottable().LenheartFuncTab <- {};
getroottable().Rindro_Scr_Width <- L_sq_RA(0x4D848E);
getroottable().Rindro_Scr_High <- L_sq_RA(0x4D8495);
//获取装备偏移
function Rindro_GetEquAddr(addr) {
switch (addr) {
case 1:
return 0x3038;
break;
case 2:
return 0x304C;
break;
case 3:
return 0x3048;
break;
case 4:
return 0x3050;
break;
case 5:
return 0x3044;
break;
case 6:
return 0x3040;
break;
case 7:
return 0x3058;
break;
case 8:
return 0x305C;
break;
case 9:
return 0x3054;
break;
case 10:
return 0x3060;
break;
case 11:
return 0x3064;
break;
case 12:
return 0x303c;
break;
case 13: //帽子
return 0x3010;
break;
case 14: //头部
return 0x3014;
break;
case 15: //脸
return 0x3018;
break;
case 16:
return 0x301c;
break;
case 17:
return 0x3020;
break;
case 18:
return 0x3024;
break;
case 19:
return 0x3028;
break;
case 20:
return 0x302c;
break;
case 21:
return 0x3030;
break;
case 22:
return 0x3034;
break;
case 23:
return 0x3030;
break;
case 24:
return 0x3068;
break;
case 25:
return 0x306C;
break;
case 26:
return 0x3070;
break;
case 27:
return 0x3074;
break;
}
return -1;
}
//本地模式
if(!getroottable().rawin("RINDROLOCAL"))RINDROLOCAL <- false;
function deepcopy(obj) {
local copies = {}; // 用于跟踪已拷贝对象的表
return _deepcopy(obj, copies);
}
function _deepcopy(obj, copies) {
local type = typeof obj;
// 处理基本类型
if (type != "table" && type != "array" && type != "class" && type != "instance") {
return obj;
}
// 处理循环引用
if (obj in copies) {
return copies[obj];
}
// 创建新容器
local newObj;
if (type == "array") {
newObj = array(obj.len());
copies[obj] <- newObj; // 在拷贝前记录
for (local i = 0; i < obj.len(); i++) {
newObj[i] = _deepcopy(obj[i], copies);
}
}
else if (type == "table") {
newObj = {};
copies[obj] <- newObj; // 在拷贝前记录
foreach(key, val in obj) {
// 键也需要深拷贝
local newKey = _deepcopy(key, copies);
local newVal = _deepcopy(val, copies);
newObj[newKey] <- newVal;
}
}
else { // 类和实例(浅拷贝)
newObj = obj;
copies[obj] <- newObj;
}
return newObj;
}

View File

@ -1,545 +0,0 @@
/*
文件名:Animation_Class.nut
路径:Base/_Tool/Animation_Class.nut
创建日期:2024-10-21 16:57
文件用途:动画类
*/
class Rindro_Animation {
//Ani是否可用
IsUsability = true;
//当前帧数
CurrentFrameIndex = 0;
//当前帧时间
CurrentIndexT = 0;
//当前帧
CurrentFrame = null;
//Ani的标签
AnimationFlag = null;
//图片对象数组
PngList = null;
//帧对象数组
FrameList = null;
//附加选项
AdditionalOptions = null;
//角度
Angle = 0;
constructor(Data, ...) {
PngList = [];
FrameList = [];
//附加选项
if (vargc > 0) AdditionalOptions = vargv[0];
//初始化数据
InitData(Data);
}
function InitData(Data) {
local Buf;
if (type(Data) == "table") {
Buf = Data;
}
//从PVF数据加载
else if (type(Data) == "string") {
local ReadObject = R_Utils.GetScriptFileReader(Data);
if (ReadObject) {
Buf = Rindro_Script.ReadAnimation(ReadObject);
}
}
if (Buf) {
AnimationFlag = Buf.Flag;
FrameList = Buf.Frame;
foreach(FrameObj in FrameList) {
//如果有附加处理 格式化
if (AdditionalOptions && AdditionalOptions.rawin("ImgFormat")) FrameObj.Img_Path = AdditionalOptions["ImgFormat"](FrameObj.Img_Path);
local Png = Rindro_Image.Load(FrameObj.Img_Path);
// Png.Draw(-500, -500);
//如果有附加处理 坐标
if (AdditionalOptions && AdditionalOptions.rawin("Pos")) {
FrameObj.Pos.x += AdditionalOptions["Pos"].x;
FrameObj.Pos.y += AdditionalOptions["Pos"].y;
}
// Spritebuf.SetPosition(FrameObj.Pos);
PngList.append(Png);
}
} else {
AnimationFlag = {};
FrameList.append({
AttackBox = [],
DamageBox = [],
Delay = 800,
Flag = {},
Img_Index = 0,
Img_Path = "",
Pos = {
x = -248,
y = -331
}
})
// print(Data);
// print("创建Ani失败,找不到Ani数据");
}
}
//重置Ani
function Reset() {
IsUsability = true;
FlushFrame(0);
}
//获取当前帧信息
function GetCurrentFrameInfo() {
return FrameList[CurrentFrameIndex];
}
function FlushFrame(Index) {
if (PngList.len() <= 0) return;
//同步当前帧
CurrentFrameIndex = Index;
//当前帧更换为本帧
CurrentFrame = PngList[CurrentFrameIndex];
local FlagBuf = FrameList[CurrentFrameIndex].Flag;
//关键帧
if ("SET_FLAG" in FlagBuf) {
// if (StateMachine && StateMachine.State != -1) StateMachine.ChangeAniKeyFlag(FlagBuf.SET_FLAG);
}
//播放音效
if ("PLAY_SOUND" in FlagBuf) {
R_Utils.PlaySound(FlagBuf.PLAY_SOUND);
}
}
//绘制
function DrawFrame(X, Y) {
// local NowDrawPng = CurrentFrame;
if (FrameList.len() <= 0) return;
local FrameObj = FrameList[CurrentFrameIndex];
// printT(FrameObj);
//坐标偏移
local XOffset = FrameObj.Pos.x;
local YOffset = FrameObj.Pos.y;
//染色
local RGBA = sq_RGBA(255, 255, 255, 255);
if ("RGBA" in FrameObj.Flag) {
local Fbuf = FrameObj.Flag.RGBA;
RGBA = sq_RGBA(Fbuf[0].tointeger(), Fbuf[1].tointeger(), Fbuf[2].tointeger(), Fbuf[3].tointeger());
}
//缩放
local XRate = 1.0;
local YRate = 1.0;
if ("IMAGE_RATE" in FrameObj.Flag) {
local Fbuf = FrameObj.Flag.IMAGE_RATE;
XRate = Fbuf.x;
YRate = Fbuf.y;
}
//线性减淡
if ("GRAPHIC_EFFECT_LINEARDODGE" in FrameObj.Flag) {
L_sq_SetDrawImgModel(2, 0);
}
if (CurrentFrame) CurrentFrame.DrawExPng(FrameObj.Img_Index, X + XOffset, Y + YOffset, Angle, RGBA, XRate, YRate);
//线性减淡
if ("GRAPHIC_EFFECT_LINEARDODGE" in FrameObj.Flag) {
L_sq_ReleaseDrawImgModel();
}
}
function Draw(X, Y) {
//可用性检查
if (IsUsability) {
DrawFrame(X, Y);
//累加当前帧时间
CurrentIndexT += Rindro_Duration;
//当前帧时间 超过 当前帧延迟就需要切换帧了
if ("Delay" in FrameList[CurrentFrameIndex] && CurrentIndexT >= FrameList[CurrentFrameIndex].Delay) {
CurrentIndexT = 0;
//如果当前帧小于总帧数就切换
if (CurrentFrameIndex<(FrameList.len() - 1)) {
FlushFrame(CurrentFrameIndex + 1);
}
//说明播放完毕了
else {
//如果有循环
if ("LOOP" in AnimationFlag) {
FlushFrame(0);
}
//没有循环触发状态机回调
else {
//将不再可用
IsUsability = false;
}
}
}
}
}
function DrawIndex(X, Y, Index) {
// return;
if (IsUsability) {
FlushFrame(Index);
DrawFrame(X, Y);
}
}
}
//绘制角色类
class Rindro_Draw_Character {
//名字
Name = null;
//职业
Job = null;
//绘制体信息
DrawInfo = null;
//隐藏图层Map
HideMap = null;
ENUM_RINDRO_JOB_NAME = ["swordman", "fighter", "gunner", "mage", "priest", "atgunner", "thief", "atfighter", "atmage", "demonicswordman", "creatormage"];
ENUM_RINDRO_JOB_TITLE_HEIGHT = [
//男鬼剑士
{
x = -42,
y = -154
},
//女格斗
{
x = -42,
y = -140
},
//男神枪手
{
x = -44,
y = -168
},
//女魔法师
{
x = -46,
y = -126
},
//男圣职者
{
x = -46,
y = -166
},
//女神枪手
{
x = -42,
y = -156
},
//女暗夜使者
{
x = -44,
y = -154
},
//男格斗家
{
x = -45,
y = -160
},
//男魔法师
{
x = -45,
y = -140
},
//黑暗武士
{
x = -42,
y = -154
},
//缔造者
{
x = -46,
y = -126
},
];
ENUM_RINDRO_JOB_FACE_HEIGHT = [
//男鬼剑士
{
x = 11,
y = 111
},
//女格斗
{
x = 9,
y = 103
},
//男神枪手
{
x = 13,
y = 131
},
//女魔法师
{
x = 14,
y = 87
},
//男圣职者
{
x = 16,
y = 126
},
//女神枪手
{
x = 11,
y = 119
},
//女暗夜使者
{
x = 12,
y = 115
},
//男格斗家
{
x = 13,
y = 119
},
//男魔法师
{
x = 13,
y = 101
},
//黑暗武士
{
x = -42,
y = -154
},
//缔造者
{
x = -46,
y = -126
},
];
//获取角色AniBy装备
function GetCharacAniByEqu(Job, Equ, AniName) {
local AniList = [];
foreach(value in Equ) {
if (value > 0) {
local ListBuf = CreateEquipmentAni(value, Job, AniName);
AniList.extend(ListBuf);
}
}
local n = AniList.len();
for (local i = 0; i< n - 1; i++) {
for (local j = i + 1; j< n; j++) {
if (AniList[i].Layer > AniList[j].Layer) {
// 交换两个元素
local temp = AniList[i];
AniList[i] = AniList[j];
AniList[j] = temp;
}
}
}
return AniList;
}
function CreateEquipmentAni(Index, Job, AniName) {
local AniList = [];
//获取装备或时装的文件路径
local FilePath = R_Utils.GetEquPath(Index);
if (FilePath) {
local ReadObject = R_Utils.GetScriptFileReader("equipment/" + FilePath);
if (ReadObject) {
local Equ = Rindro_Script.ReadEquipment(ReadObject);
//职业名字
local JobName = ENUM_RINDRO_JOB_NAME[Job];
//没有装备类型
if (!(Equ.rawin("equipment_type"))) Equ.equipment_type <- "normal";
//光环单独处理 其他的在下面处理
if (Equ.equipment_type == "aurora avatar") {
foreach(Path in Equ.Aurora.Back) {
// local AniBuf = Rindro_Animation(Path);
AniList.append({
Ani = Path,
AniName = Path + Clock(),
Layer = -10000,
DrawType = "Native"
});
}
foreach(Path in Equ.Aurora.Front) {
// local AniBuf = Rindro_Animation(Path);
AniList.append({
Ani = Path,
AniName = Path + Clock(),
Layer = 10000,
DrawType = "Native"
});
}
}
//称号
else if (Equ.equipment_type == "title name") {
local PathBuf = "equipment/" + FilePath;
PathBuf = PathBuf.slice(0, R_Utils.String.FindLastSubstring(PathBuf, "/"));
local Path = PathBuf + "/" + Equ.custom_animation;
local Ao = {
Pos = ENUM_RINDRO_JOB_TITLE_HEIGHT[Job]
}
local AniBuf = Rindro_Animation(Path, Ao);
AniList.append({
Ani = AniBuf,
Layer = 10001,
});
}
//没有Ani 就那种透明时装
if (!(Equ.rawin("Ani_" + JobName))) return AniList;
//记录时装的隐藏图层值
if (Equ.rawin("hidelayer")) {
foreach(value in Equ["hidelayer"]) {
HideMap.rawset(value, true);
}
}
//读取Ani配置
local AniScript = Equ["Ani_" + JobName];
// printT(AniScript);
if (Equ.equipment_type == "skin avatar") {
local Path;
if (JobName.find("at") >= 0) {
Path = format("character/%s/atanimation/%s", JobName.slice(2), AniName);
} else Path = format("character/%s/animation/%s", JobName, AniName);
local Ao = {
ImgVariation = AniScript.variation,
ImgFormat = function(ImgPath) {
if (ImgVariation[0] > 0) {
local Pos = ImgPath.find("%04d");
ImgPath = ImgPath.slice(0, Pos) + "%02d%02d" + ImgPath.slice(Pos + 4);
return format(ImgPath, ImgVariation[0], ImgVariation[1]);
} else {
return format(ImgPath, ImgVariation[1]);
}
}
}
local AniBuf = Rindro_Animation(Path, Ao);
AniList.append({
Ani = AniBuf,
Layer = -1,
});
} else {
foreach(Info in AniScript.layer_variation) {
local PathBuf = "equipment/" + FilePath;
PathBuf = PathBuf.slice(0, R_Utils.String.FindLastSubstring(PathBuf, "/"));
local Path = PathBuf + "/" + Info.Path + "/" + AniName;
local Ao = {
ImgVariation = AniScript.variation,
ImgFormat = function(ImgPath) {
return format(ImgPath, ImgVariation[0], ImgVariation[1]);
}
}
local AniBuf = Rindro_Animation(Path, Ao);
AniList.append({
Ani = AniBuf,
Layer = Info.Zorder,
});
}
}
}
}
return AniList;
}
constructor(Job, EquipmentArr, Action, Name) {
HideMap = {};
DrawInfo = GetCharacAniByEqu(Job, EquipmentArr, Action);
this.Job = Job;
this.Name = Name;
}
function Draw(X, Y) {
foreach(AniInfo in DrawInfo) {
// print(AniInfo.Layer);
if (!HideMap.rawin(AniInfo.Layer)) {
if (!AniInfo.rawin("DrawType") || AniInfo["DrawType"] != "Native") {
AniInfo.Ani.Draw(X, Y);
} else {
Rindro_BaseToolClass.DrawAniEx(X, Y, AniInfo.Ani, AniInfo.AniName);
}
}
}
if (Name) {
L_sq_DrawCode(Name, 44 + X + ENUM_RINDRO_JOB_TITLE_HEIGHT[Job].x - (LenheartTextClass.GetStringLength(Name) / 2), Y + ENUM_RINDRO_JOB_TITLE_HEIGHT[Job].y + 24, sq_RGBA(255, 255, 255, 250), 1, 1);
}
}
function DrawFace(X, Y) {
//兼容模式
if (getroottable().PluginsCompatibilityModeCallBack){
return;
}
setClip(X, Y, X + 22, Y + 18); //开始裁切
foreach(AniInfo in DrawInfo) {
try {
AniInfo.Ani.DrawIndex(X + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].x, Y + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].y, 0);
} catch (exception) {
}
}
releaseClip(); //裁切结束
}
}
//鬼剑士
//601580026 101550559
// Sassq <- {};
// Sassq[0] <- Rindro_Draw_Character(0, [
// 601550071,
// 601560067,
// 601570062,
// 601500069,
// 601510068,
// 601540069,
// 601520061,
// 601530060,
// 601580026,
// 0,
// 27610,
// 26058
// ], "rest.ani", "鬼剑士-Kina")
// //格斗家
// Sassq[1] <- Rindro_Draw_Character(1, [26373, 102550540, 102560700, 102570504, 102520514, 102500742, 102510739, 102540664, 102580139, 102530474], "rest.ani", "Kina")
// //神枪手
// Sassq[2] <- Rindro_Draw_Character(2, [26373, 104550553, 104560725, 104570492, 104520541, 104500750, 104510913, 104540671, 104580148, 104530494], "rest.ani", "Kina")
// //魔法师
// Sassq[3] <- Rindro_Draw_Character(3, [26373, 106550521, 106560580, 106570446, 106520529, 106500603, 106510607, 106540583, 106580143, 106530461], "rest.ani", "Kina")
// //圣职者
// Sassq[4] <- Rindro_Draw_Character(4, [26373, 108550600, 108560591, 108570687, 108520580, 108500587, 108510590, 108540562, 108580138, 108530560], "rest.ani", "Kina")
// //女枪
// Sassq[5] <- Rindro_Draw_Character(5, [26373, 105550431, 105560424, 105570386, 105520415, 105500424, 105510429, 105540408, 105580144, 105530361], "rest.ani", "Kina")
// //暗夜
// Sassq[6] <- Rindro_Draw_Character(6, [26373, 109550385, 109560393, 109570369, 109520406, 109500402, 109510414, 109540389, 109580134, 109530355], "rest.ani", "Kina")
// //男格斗
// Sassq[7] <- Rindro_Draw_Character(7, [26373, 103550302, 103560311, 103570274, 103520297, 103500297, 103510301, 103540284, 103580128, 103530246], "rest.ani", "Kina")
// //男法
// Sassq[8] <- Rindro_Draw_Character(8, [26373, 107550220, 107560223, 107570188, 107520224, 107500233, 107510231, 107540209, 107580129, 107530192], "rest.ani", "Kina")

View File

@ -1,516 +0,0 @@
/*
文件名:BaseTool_Class.nut
路径:Base/_Tool/BaseTool_Class.nut
创建日期:2024-08-06 23:49
文件用途:基础工具类
*/
function printT(T) {
Sq_OutPutTable(Json.Encode(T));
}
//Json类
class Json {
function Encode(Table) {
local JsonObj = JSONEncoder();
return JsonObj.encode(Table);
local Size = Table.len();
local Pos = 0;
local Str = "{";
foreach(Key, Value in Table) {
++Pos;
Str += "\"";
Str += Key.tostring();
Str += "\"";
Str += ":";
if (typeof(Value) == "string") {
Str += "\"";
Str += Value;
Str += "\"";
} else if (typeof(Value) == "table") {
Str += Json.Encode(Value);
} else if (typeof(Value) == "array") {
Str += "[";
foreach(ArrObj in Value) {
if (typeof(ArrObj) == "table") Str += Json.Encode(Value);
else {
Str += ArrObj;
Str += ",";
}
}
Str = Str.slice(0, Str.len() - 1);
Str += "]";
} else Str += Value;
if (Pos != Size) Str += ",";
}
Str += "}";
return Str;
}
function Decode(Str) {
// Str = L_sq_DecondeJson(Str);
// local Str = "local _M = " + Str + ";\n return _M;\n";
// local Func = compilestring(Str);
// return Func();
local JsonObj = JSONParser();
return JsonObj.parse(Str);
}
}
//Key 键盘按键类
class KeyPress {
function KeyDown(obj, KeyValue) {
local KeyEvent = obj.getVar(KeyValue.tostring()); //声明储存器
KeyEvent.clear_vector(); //清空储存器的向量位
if (sq_IsKeyDown(KeyValue, ENUM_SUBKEY_TYPE_ALL) && KeyEvent.getInt(0) == 0) {
KeyEvent.setInt(0, 1);
return true;
}
}
function KeyUp(obj, KeyValue) {
local KeyEvent = obj.getVar(KeyValue.tostring()); //声明储存器
if (sq_IsKeyUp(KeyValue, ENUM_SUBKEY_TYPE_ALL)) {
KeyEvent.setInt(0, 0);
}
}
function isKeyPress(KeyValue) {
local obj = sq_getMyCharacter();
if (KeyPress.KeyDown(obj, KeyValue)) {
return true;
}
KeyPress.KeyUp(obj, KeyValue);
}
}
//Key 键盘按键类
class KeyPressNB {
function KeyDown(obj, KeyValue, VarKey) {
local KeyEvent = obj.getVar(VarKey); //声明储存器
KeyEvent.clear_vector(); //清空储存器的向量位
if (sq_IsKeyDown(KeyValue, ENUM_SUBKEY_TYPE_ALL) && KeyEvent.getInt(0) == 0) {
KeyEvent.setInt(0, 1);
return true;
}
}
function KeyUp(obj, KeyValue, VarKey) {
local KeyEvent = obj.getVar(VarKey); //声明储存器
if (sq_IsKeyUp(KeyValue, ENUM_SUBKEY_TYPE_ALL)) {
KeyEvent.setInt(0, 0);
}
}
function isKeyPress(KeyValue, VarKey) {
local obj = sq_getMyCharacter();
obj = sq_GetCNRDObjectToActiveObject(obj);
if (KeyPressNB.KeyDown(obj, KeyValue, VarKey)) {
return true;
}
KeyPressNB.KeyUp(obj, KeyValue, VarKey);
}
}
//基础工具类
class Rindro_BaseToolClass {
function IsNumber(value) {
try {
local Buffer = value.tointeger();
return true;
} catch (exception) {
return false;
}
}
function GetItemNameById(ItemId) {
local ItemObject = L_sq_GetItem(ItemId);
local NamePointer = L_sq_RA(ItemObject + 0x20);
local ItemName = NativePointer(L_sq_I2P(NamePointer)).readUnicodeString();
return ItemName;
}
function SendPack(T) {
local str = Json.Encode(T);
L_sq_SendPackType(130);
L_sq_SendPackWChar(str);
L_sq_SendPack();
}
function SendPackEx(T) {
local str = L_sq_EncondeJson(T);
L_sq_SendPackType(130);
L_sq_SendPackWChar(str);
L_sq_SendPack();
}
function RegisterPack(Id, CallBack) {
Pack_Control.rawset(Id, CallBack);
}
function RegisterHexPack(Id, CallBack)
{
Pack_Hex_Control.rawset(Id, CallBack);
}
//绘制简易静态Ani // obj -- ani路径 -- X -- Y -- 第几帧 -- ani名字
function T_DrawStayAni(obj, aniFileName, x, y, index, aniname) {
local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName);
//sq_AnimationProc(SelectAni);
sq_DrawSpecificFrame(SelectAni, x, y, false, index, false, 1.0);
return SelectAni;
}
//绘制简易静态Ani // obj -- ani路径 -- X -- Y -- 第几帧 -- ani名字
function T_DrawStayAniRate(obj, aniFileName, x, y, index, aniname, rate) {
local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName);
SelectAni.setImageRateFromOriginal(rate, rate);
//sq_AnimationProc(SelectAni);
sq_DrawSpecificFrame(SelectAni, x, y, false, index, false, 1.0);
return SelectAni;
}
//绘制简易动态Ani // obj -- ani路径 -- X -- Y -- ani名字
function T_DrawDynamicAni(obj, aniFileName, x, y, aniname) {
local ani = obj.getVar().GetAnimationMap(aniname, aniFileName);
sq_AnimationProc(ani);
sq_drawCurrentFrame(ani, x, y, true);
return ani;
}
//超简易绘制动态Ani
function DrawAniEx(X, Y, AniPath, ...) {
local AniName = "简易播放Ani:" + AniPath;
if (vargc > 0) AniName = vargv[0];
local obj = sq_getMyCharacter();
local ani = obj.getVar().GetAnimationMap(AniName, AniPath);
sq_AnimationProc(ani);
sq_drawCurrentFrame(ani, X, Y, true);
return ani;
}
//初始化根表成员
function InitClass(Name) {
local RootTab = getroottable();
if (RootTab.rawin(Name) == true) {
RootTab.rawdelete(Name);
}
}
//获取交互Npc名称
function GetEachNpcId() {
local OneAddress = L_sq_RA(0x1ADE0E0);
if (OneAddress) {
local TowAddress = L_sq_RA(OneAddress + 8);
if (TowAddress) {
local Id = L_sq_RA(TowAddress + 0x210);
return Id;
}
}
return null;
}
function DrawTriptych(X, Y, Width, Img, StartIndex) {
//如果没有载入img就载入
if (!Rindro_Image_GlobalMap.rawin(Img)) {
Rindro_Image_GlobalMap[Img] <- Rindro_Image(Img);
}
Rindro_Image_GlobalMap[Img].DrawPng(StartIndex, X, Y);
//获取第一张图片的宽
local FirstW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex).GetWidth();
//获取中间的图片宽
local MiddleW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 1).GetWidth();
//获得最后一张图片的宽
local LastW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 2).GetWidth();
//绘制中间
Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 1, X + FirstW, Y, 0, sq_RGBA(255, 255, 255, 250), (Width - LastW - FirstW).tofloat() / MiddleW, 1.0);
//绘制最后一张
Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 2, X + Width - LastW, Y);
}
function DrawTriptychDetail(X, Y, Width, Img, Fi, Mi, La) {
//如果没有载入img就载入
if (!Rindro_Image_GlobalMap.rawin(Img)) {
Rindro_Image_GlobalMap[Img] <- Rindro_Image(Img);
}
Rindro_Image_GlobalMap[Img].DrawPng(Fi, X, Y);
//获取第一张图片的宽
local FirstW = Rindro_Image_GlobalMap[Img].GetPng(Fi).GetWidth();
//获取中间的图片宽
local MiddleW = Rindro_Image_GlobalMap[Img].GetPng(Mi).GetWidth();
//获得最后一张图片的宽
local LastW = Rindro_Image_GlobalMap[Img].GetPng(La).GetWidth();
//绘制中间
Rindro_Image_GlobalMap[Img].DrawExPng(Mi, X + FirstW, Y, 0, sq_RGBA(255, 255, 255, 250), (Width - LastW - FirstW).tofloat() / MiddleW, 1.0);
//绘制最后一张
Rindro_Image_GlobalMap[Img].DrawPng(La, X + Width - LastW, Y);
}
function DrawNineBox(X, Y, Width, Height, Img, StartIndex) {
//如果没有载入img就载入
if (!Rindro_Image_GlobalMap.rawin(Img)) {
Rindro_Image_GlobalMap[Img] <- Rindro_Image(Img);
}
//绘制左上角
Rindro_Image_GlobalMap[Img].DrawPng(StartIndex, X, Y);
//获取左上角的图片宽高
local LeftTopW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex).GetWidth();
local LeftTopH = Rindro_Image_GlobalMap[Img].GetPng(StartIndex).GetHeight();
//绘制上边
//获取上边的宽
local TopW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 1).GetWidth();
Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 1, X + LeftTopW, Y, 0, sq_RGBA(255, 255, 255, 250), (Width - LeftTopW * 2).tofloat() / TopW, 1.0);
//绘制右上角
Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 2, X + Width - LeftTopW, Y);
//绘制左边
//获取左边的高
local LeftH = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 3).GetHeight();
Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 3, X, Y + LeftTopH, 0, sq_RGBA(255, 255, 255, 250), 1.0, (Height - LeftTopH * 2).tofloat() / LeftH);
//绘制中间
//获取中间的宽高
local MiddleW = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 4).GetWidth();
local MiddleH = Rindro_Image_GlobalMap[Img].GetPng(StartIndex + 4).GetHeight();
Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 4, X + LeftTopW, Y + LeftTopH, 0, sq_RGBA(255, 255, 255, 250), (Width - LeftTopW * 2).tofloat() / MiddleW, (Height - LeftTopH * 2).tofloat() / MiddleH);
//绘制右边
Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 5, X + Width - LeftTopW, Y + LeftTopH, 0, sq_RGBA(255, 255, 255, 250), 1.0, (Height - LeftTopH * 2).tofloat() / LeftH);
//绘制左下角
Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 6, X, Y + Height - LeftTopH);
//绘制下边
Rindro_Image_GlobalMap[Img].DrawExPng(StartIndex + 7, X + LeftTopW, Y + Height - LeftTopH, 0, sq_RGBA(255, 255, 255, 250), (Width - LeftTopW * 2).tofloat() / TopW, 1.0);
//绘制右下角
Rindro_Image_GlobalMap[Img].DrawPng(StartIndex + 8, X + Width - LeftTopW, Y + Height - LeftTopH);
}
}
//获取文字绘制长度
class LenheartTextClass {
function GetStringLength(str) {
if (typeof str != "string") str = "无字符";
return L_sq_GetStringDrawLength(str);
}
}
class MemoryTool {
//给指定地址写入字节数组
function WirteByteArr(Address, ByteArr) {
for (local i = 0; i< ByteArr.len(); i++) {
L_sq_WAB(Address + i, ByteArr[i]);
}
}
//解密读取内存地址的数据
function DecodeMemoryData(Address) {
local nEax, nEcx8, nEsi, nEdx, nTmp;
nEax = NativePointer(L_sq_I2P(Address)).readInt();
if (nEax == -1) return nEax;
nEcx8 = NativePointer(L_sq_I2P(Address + 8)).readInt();
if (nEcx8 == -1) return nEcx8;
nEsi = NativePointer(L_sq_I2P(0x1AF8D78)).readInt();
if (nEsi == -1) return nEdx;
nEdx = nEax >> 16;
nTmp = (nEdx << 2) + nEsi + 36;
nEdx = NativePointer(L_sq_I2P(nTmp)).readInt();
if (nEdx == -1) return nEdx;
nEax = nEax & 65535;
nTmp = (nEax << 2) + nEdx + 8468;
nEax = NativePointer(L_sq_I2P(nTmp)).readInt();
if (nEax == -1) return nEax;
nEdx = nEax & 0xFFFF;
nEsi = nEdx << 16;
nEsi = nEsi | nEdx;
nEax = nEsi ^ nEcx8;
return nEax;
}
//加密写入内存地址数据
function EncodeMemoryData(AddreSs, Data) {
local JEdi, JEcx, JEax, JEsi, JEdx, JSs;
JEcx = AddreSs;
JEax = L_sq_RA(0x1AF8DB8);
JEax = JEax + 1;
L_sq_WA(0x1AF8DB8, JEax);
JEdx = JEax;
JEdx = JEdx >> 8;
JEdx = JEdx << 24;
JEdx = JEdx >> 24;
JEdx = L_sq_RA(JEdx * 2 + 0x1843F58);
JEdx = JEdx & 0xFFFF;
JEax = JEax << 24;
JEax = JEax >> 24;
JSs = L_sq_RA(JEax * 2 + 0x1844158);
JSs = JSs & 0xFFFF;
JEdx = JEdx ^ JSs;
JEax = JEdx;
JEax = JEax & 0xFFFF;
JEsi = Data;
JEdx = JEsi >> 16;
JSs = JEsi & 0xFFFF;
JEdx = JEdx + JSs;
JEdx = JEdx ^ JEax;
JEdi = JEdx;
JEdx = JEax;
JEax = JEax << 16;
JEax = JEax + JEdx;
JEsi = Data;
JEax = JEax ^ JEsi;
JEsi = AddreSs + 8;
L_sq_WA(JEsi, JEax);
JEax = L_sq_RA(AddreSs);
JEsi = L_sq_RA(0x1AF8D78);
JEcx = JEdi;
JEcx = JEcx << 16;
JEcx = JEcx + JEdx;
JEdx = JEax;
JEdx = JEdx >> 16;
JEdx = L_sq_RA(JEsi + JEdx * 4 + 36);
JEax = JEax & 0xFFFF;
L_sq_WA(JEdx + JEax * 4 + 8468, JEcx);
}
function DecodeMemoryDataF(Address) {
local Value = MemoryTool.DecodeMemoryData(Address);
local Bl = blob();
Bl.writen(Value, 'i');
Bl.seek(0);
return Bl.readn('f');
}
function ReadFloat(Address) {
local Arr = [];
for (local i = 0; i< 4; i++) {
Arr.append(L_sq_RAB(Address + i));
}
// local Value = L_sq_RAB(Address);
// print(Value);
local Bl = blob();
foreach(intvalue in Arr) {
Bl.writen(intvalue, 'c');
}
// Bl.writen(Value, 'i');
Bl.seek(0);
return Bl.readn('f');
}
}
//大数字
class longlong {
Value = null;
//构造函数 不管是不是string类型都要转成string类型
constructor(StrValue) {
Value = StrValue.tostring();
}
function _add(other) {
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "+"));
}
function _sub(other) {
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "-"));
}
function _mul(other) {
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "*"));
}
function _div(other) {
return L_sq_LongLongOperation(this.Value, other.Value, "/");
}
function _unm() {
return longlong(L_sq_LongLongOperation(longlong("0"), this.Value, "-"));
}
function _modulo(other) {
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "%"));
}
function GetFormat(FType) {
local Buf = L_sq_LongLongOperation(this.Value, FType, "format");
if (Buf.len()< 2) return Buf + ".0";
local Value = Buf.slice(0, -1);
local Unit = Buf.slice(-1);
local RetStr = format(FType + Unit, Value.tofloat());
return RetStr;
}
}
//任务队列
class QuestQueue {
//队列
Queue = null;
constructor() {
Queue = {};
}
//添加任务
function AddQuest(QuestName, QuestLogic, ...) {
local args = null;
if (vargc > 0) {
args = [];
for (local i = 0; i< vargc; i++) {
args.append(vargv[i]);
}
}
Queue[QuestName] <- {
Logic = QuestLogic,
InseartTime = Clock(),
arg = args
};
}
//移除任务
function RemoveQuest(QuestName) {
if (Queue) {
Queue.rawdelete(QuestName);
}
}
//执行任务
function Run() {
if (Queue) {
local NowTime = Clock();
foreach(QuestName, QuestInfo in Queue) {
if (QuestInfo.arg && QuestInfo.arg.len() > 0) {
local Arr = [];
Arr.append(getroottable());
Arr.append(QuestName);
Arr.append(NowTime);
foreach(value in QuestInfo.arg) {
Arr.append(value);
}
QuestInfo.Logic.acall(Arr);
// QuestInfo.Logic(QuestName, NowTime - QuestInfo.InseartTime, QuestInfo.arg);
} else QuestInfo.Logic(QuestName, NowTime - QuestInfo.InseartTime);
}
}
}
//示例
/*
Obj.AddQuest("测试任务",function (Name,Time)
{
print(Time);
if(Time >= 2000)Obj.RemoveQuest(Name);
}.bindenv(this));
*/
}

View File

@ -1,60 +0,0 @@
/*
文件名:Hacker_Class.nut
路径:Base/_Tool/Hacker_Class.nut
创建日期:2024-09-24 06:25
文件用途:
*/
class _Rindro_Hacker {
HookTable = null;
constructor() {
HookTable = {};
}
function UnLoadHook(AddressStr) {
Sq_DeHookFunc(HookTable[AddressStr]);
}
function LoadHook(AddressStr, ArgumentArr, EnterFunc, LeaveFunc) {
//如果已经HOOK过 需要先卸载原来的HOOK
if (HookTable.rawin(AddressStr)) {
UnLoadHook(AddressStr);
print("地址: " + AddressStr + " 已经装载了Hook,本次操作将会卸载之前的Hook在执行。")
}
local Controler = Sq_HookFunc(AddressStr, ArgumentArr, EnterFunc, LeaveFunc);
HookTable.rawset(AddressStr, Controler);
}
}
//初始化Hacker
if (!(getroottable().rawin("Rindro_Haker"))) Rindro_Haker <- _Rindro_Hacker();
//重选角色时触发的回调函数(进入赛利亚房间)
OnSetCharacter_Control <- {}
Rindro_Haker.LoadHook(0x674350, ["pointer", "int"],
function(args) {
foreach(Func in OnSetCharacter_Control) {
Func();
}
return null;
},
function(args) {
return null;
});
OnSetCharacter_Control.MarrySystem <- function() {
if (getroottable().rawin("Yosin_14SkillXpos1") &&
getroottable().rawin("Yosin_14SkillXpos2") &&
getroottable().rawin("Yosin_14SkillYpos1") &&
getroottable().rawin("Yosin_14SkillYpos2")
) {
for (local i = 6; i< 7; i++) {
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x14, Yosin_14SkillXpos1 + (i * 31));
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x18, Yosin_14SkillYpos1);
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x14, Yosin_14SkillXpos2 + (i * 31));
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x18, Yosin_14SkillYpos2);
}
}
};

View File

@ -1,301 +0,0 @@
/*
文件名:Hacker_RegApi.nut
路径:Base/_Tool/Hacker_RegApi.nut
创建日期:2024-09-25 18:31
文件用途:注册API
*/
//工具类
class R_Utils {
String = {
FindLastSubstring = function(str, substring) {
local strLen = str.len();
local subLen = substring.len();
local lastIndex = -1;
for (local i = 0; i <= strLen - subLen; i++) {
local found = true;
for (local j = 0; j< subLen; j++) {
if (str[i + j] != substring[j]) {
found = false;
break;
}
}
if (found) {
lastIndex = i;
}
}
return lastIndex;
}
}
//播放音效
function PlaySound(SoundName) {
L_Sq_CallFunc(0x75BD70, "void", FFI_MS_CDECL, ["pointer", "int", "int", "int"], Memory.allocUtf8String(SoundName).C_Object, -1, 0, 0);
}
//读取文件内容
function ReadScript(Path, Size, CodePage) {
local ReadPath = L_sq_P2I(Memory.allocUtf8String(Path).C_Object);
local Reader = Memory.alloc(Size);
local ReadBuffer = L_sq_P2I(Reader.C_Object);
L_Sq_CallFunc(0x11A2030, "int", FFI_FASTCALL, ["int", "int", "int", "int", "int", "int"], 0x1D17638, 0, ReadPath, ReadBuffer, 0x100000, 0x19DAF4);
if (CodePage == "utf8")
return Reader.readUtf8String();
if (CodePage == "unicode")
return Reader.readUnicodeString();
if (CodePage == "big5")
return Reader.readBig5String();
}
//读取文件
function GetScriptFileReader(Path, ...) {
local AllocSize = 102400;
if (vargc > 0) AllocSize = vargv[0];
//读取路径
local ReadPath = L_sq_P2I(Memory.allocUtf8String(Path).C_Object);
//读取缓存
local Reader = Memory.alloc(AllocSize);
local ReadBuffer = L_sq_P2I(Reader.C_Object);
//实际读取大小
local ReadSizeer = Memory.alloc(4);
local ReadSizeBuffer = L_sq_P2I(ReadSizeer.C_Object);
local Flag = L_Sq_CallFunc(0x59E3D0, "bool", FFI_MS_CDECL, ["int", "int", "int", "int"], ReadPath, ReadBuffer, AllocSize, ReadSizeBuffer);
if (Flag) {
return {
Buffer = Reader,
Size = ReadSizeer.readInt()
};
} else return null;
}
//读取配置表
function ReadScriptConfig(Path, Size, ...) {
local CodePage = "utf8";
if (vargc > 0) CodePage = vargv[0];
local Script = R_Utils.ReadScript(Path, Size, CodePage);
local Func = compilestring("return " + Script);
local Ret = Func();
return Ret;
}
//获取一个指定装备的角色对象
function GetCharacByEqu(Job, GrowType, Equ) {
local Obj = sq_CreateCharacter(Job, GrowType);
local ObjAddress = L_Sq_GetObjectAddress(Obj);
foreach(value in Equ) {
local ItemObject = L_sq_GetItem(value);
// L_Sq_CallFunc(0x825570, "void", FFI_THISCALL, ["int", "int"], ObjAddress, ItemObject);
L_Sq_CallFunc(0x8265A0, "void", FFI_THISCALL, ["int", "int", "int"], ObjAddress, ItemObject, -1);
}
return sq_GetCNRDObjectToSQRCharacter(Obj);
}
//获取装备编号的得文件路径
function GetEquPath(Equ) {
local EquPathAddress = L_Sq_CallFunc(0x1219E80, "int", FFI_THISCALL, ["int", "int"], 0x1d7993c, Equ);
if (EquPathAddress) {
return NativePointer(EquPathAddress).readUnicodeString();
}
return null;
}
//获取Lst文件的返回Array
function GetLstArr(Path, Header) {
local Arr = [];
local LstBuf = R_Utils.GetScriptFileReader(Path);
if (LstBuf) {
local IO = Sq_Point2Blob(L_sq_P2I(LstBuf.Buffer.C_Object), LstBuf.Size);
local i = 2;
while (i< LstBuf.Size) {
if ((LstBuf.Size - i) >= 10) {
IO.seek(i + 6); //内容指示位
local FindKey = IO.readn('i');
local Key = Rindro_Script.GetBinString(FindKey);
if (Key) {
local StrFilePath = Header + Key.tolower();
Arr.append(StrFilePath);
}
} else break;
i += 10;
}
}
return Arr;
}
//通过处理函数获取文件Table
function GetFileTableByHandle(Path, Func) {
local Data = {};
local FileData = R_Utils.GetScriptFileReader(Path);
if (FileData) {
if (FileData.Size >= 7) {
//创建Blob对象
local IO = Sq_Point2Blob(L_sq_P2I(FileData.Buffer.C_Object), FileData.Size);
//以5为单步从第二位开始遍历字节
local i = 2;
while (true) {
if (i< FileData.Size && FileData.Size - i >= 5) {
i = Func(Data, IO, i);
} else break;
}
}
}
return Data;
}
}
//根据List读取文件地址
// Rindro_Haker.LoadHook(0x1219E80, ["int", "int", "int"],
// function(args) {
// // print(format("%02x", args[0]));
// // print(args[2]);
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// // local Path = NativePointer(L_sq_I2P(args.pop())).readUnicodeString();
// // if (Path != "character/swordman/weapon/katana/kat_lowkogaras.equ" && Path != "new_elvengard.twn") {
// // print(args[0]);
// // print(args[1]);
// // // print(format("%02x", args[1]));
// // print(Path);
// // }
// return null;
// });
//可能是构造装备以及构造其他东西
// Rindro_Haker.LoadHook(0x972220, ["int", "int", "int", "int"],
// function(args) {
// // print(format("%02x", args[0]));
// // local AniPath = NativePointer(L_sq_I2P(args[0])).readUnicodeString();
// if (args[0] == 10402) {
// print(args[0]);
// print(args[1]);
// print(args[2]);
// }
// // print(args[2]);
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });
//绘制字符
getroottable().DrawCodeCallBackFunc <- {};
// Rindro_Haker.LoadHook(0x1206BD0, ["int", "int", "int", "pointer", "int", "void"],
// function(args) {
// // print("nut:" + format("%02x", args[3]));
// if (args[3]) {
// // for (local i = 0; i< 10000; i++) {
// local DrawCode = NativePointer((args[3])).readUnicodeString();
// if (DrawCode in DrawCodeCallBackFunc)
// DrawCodeCallBackFunc[DrawCode](args);
// // }
// }
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });
//绘制城镇回调
getroottable().DrawTownCallBackFunc <- {};
Rindro_Haker.LoadHook(0x1108700, ["int", "void"],
function(args) {
// print("nut:" + format("%02x", args[3]));
// print(format("%02x", args[0]));
foreach(Func in DrawTownCallBackFunc) {
Func();
}
return null;
},
function(args) {
// print(666);
// print(format("%02x", args.pop()));
// TTTAni <- args.pop();
return null;
});
//顺图
function Rindro_Gm_MoveMap(obj) {
if (sq_IsKeyDown(OPTION_HOTKEY_PAUSE_IN_TOWER, ENUM_SUBKEY_TYPE_ALL) && RINDROLOCAL) {
if (KeyPress.isKeyPress(0)) L_sq_MoveMap(2);
if (KeyPress.isKeyPress(1)) L_sq_MoveMap(0);
if (KeyPress.isKeyPress(2)) L_sq_MoveMap(3);
if (KeyPress.isKeyPress(3)) L_sq_MoveMap(1);
}
}
getroottable()["LenheartFuncTab"].rawset("Rindro_Gm_MoveMapFuncN", Rindro_Gm_MoveMap);
//丢弃物品回调
getroottable().DiscardItemCallBackFunc <- {};
function Sq_DiscardItem(Item) {
local Flag = true;
foreach(Func in DiscardItemCallBackFunc) {
local Ret = Func(Item);
if (!Ret) Flag = false;
}
return Flag;
}
//从exe获取字符串
getroottable()["Sq_GetExeStr_Map"] <- {};
function Sq_GetExeStr_Event(Index)
{
if(Index in getroottable()["Sq_GetExeStr_Map"]){
return getroottable()["Sq_GetExeStr_Map"][Index](Index);
}
return Index;
}
// //hook打开窗口
// Rindro_Haker.LoadHook(0xE6E070, ["int","int","int","int","void"],
// function(args) {
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });
// Rindro_Haker.LoadHook(0xE6E070, ["int", "int", "int", "int", "int"],
// function(args) {
// print("nut:" + format("%02x", args[0]));
// print("nut:" + format("%02x", args[1]));
// print("nut:" + format("%02x", args[2]));
// print("nut:" + format("%02x", args[3]));
// return null;
// },
// function(args) {
// // print(666);
// // print(format("%02x", args.pop()));
// // TTTAni <- args.pop();
// return null;
// });

View File

@ -1,80 +0,0 @@
/*
文件名:Image_Class.nut
路径:Base/_Tool/Image_Class.nut
创建日期:2024-10-21 16:58
文件用途: 图片类
*/
class Rindro_Png {
C_Object = null;
Path = null;
Idx = null;
constructor(Object, Path, Idx) {
this.Path = Path;
this.Idx = Idx;
this.C_Object = Object;
}
function Draw(X, Y) {
L_Sq_CallFunc(0x11A8F60, "int", FFI_THISCALL, ["int", "int", "int", "int"], NativePointer(0x1B45B94).readInt(), X, Y, this.C_Object);
}
function DrawEx(X, Y, Model, Rgba, Xrate, Yrate) {
L_Sq_CallFunc(0x11A97E0, "int", FFI_THISCALL, ["int", "int", "int", "int", "float", "float", "float", "int", "float", "float"], NativePointer(0x1B45B94).readInt(), X, Y, this.C_Object, Xrate, Yrate, Model, Rgba, 0, 0);
}
function GetWidth()
{
return NativePointer(this.C_Object + 0x1C).readShort();
}
function GetHeight()
{
return NativePointer(this.C_Object + 0x1E).readShort();
}
}
class Rindro_Image {
Img = null;
Path = null;
constructor(Path) {
this.Path = Path;
//读取Img
Img = L_Sq_CallFunc(0x11C0410, "int", FFI_THISCALL, ["int", "int", "int"], NativePointer(0x1B4684C).readInt(), 0, L_sq_P2I(Memory.allocUtf8String(Path).C_Object));
}
function GetPng(Idx) {
if (Img) {
local PngObject = L_Sq_CallFunc(0x11AA190, "int", FFI_THISCALL, ["int", "int"], Img, Idx);
return Rindro_Png(PngObject, Path, Idx);
}
}
function DrawPng(Idx, X, Y) {
local Buffer = GetPng(Idx);
Buffer.Draw(X, Y);
}
function DrawExPng(Idx, X, Y, Model, Rgba, Xrate, Yrate) {
local Buffer = GetPng(Idx);
Buffer.DrawEx(X, Y, Model, Rgba, Xrate, Yrate)
}
//加载
function Load(Path) {
if (!(getroottable().rawin("Rindro_Image_Map"))) getroottable().Rindro_Image_Map <- {};
if (getroottable().Rindro_Image_Map.rawin(Path)) return getroottable().Rindro_Image_Map[Path];
else {
getroottable().Rindro_Image_Map[Path] <- Rindro_Image(Path);
return getroottable().Rindro_Image_Map[Path];
}
}
}
Rindro_Image_GlobalMap <- {};
Rindro_Image_GlobalMap["lenheartui"] <- Rindro_Image("interface/lenheartwindowcommon.img");
/*
local Png = TestImg.GetPng(0);
Png.Draw(200, 200);
Png.DrawEx(100, 400, 0, sq_RGBA(255, 255, 255, 255), 1.5, 1.5);
*/

View File

@ -1,661 +0,0 @@
/*
文件名:Json_Class.nut
路径:Base/_Tool/Json_Class.nut
创建日期:2024-09-27 23:54
文件用途:Json类
*/
class JSONParser {
static version = "1.0.1";
state = "";
stack = null;
container = null;
key = "";
value = "";
converter = null;
constructor() {
stack = [];
container = {};
}
function parse(str, ...) {
if (vargc > 0) converter = vargc[0];
local string = {
go = function() {
state = "ok";
}.bindenv(this),
firstokey = function() {
key = value;
state = "colon";
}.bindenv(this),
okey = function() {
key = value;
state = "colon";
}.bindenv(this),
ovalue = function() {
value = this._convert(value, "string", converter);
state = "ocomma";
}.bindenv(this),
firstavalue = function() {
value = this._convert(value, "string", converter);
state = "acomma";
}.bindenv(this),
avalue = function() {
value = value;
this._convert(value, "string", converter);
state = "acomma";
}.bindenv(this)
};
local number = {
go = function() {
state = "ok";
}.bindenv(this),
ovalue = function() {
value = this._convert(value, "number", converter);
state = "ocomma";
}.bindenv(this),
firstavalue = function() {
value = this._convert(value, "number", converter);
state = "acomma";
}.bindenv(this),
avalue = function() {
value = this._convert(value, "number", converter);
state = "acomma";
}.bindenv(this)
};
local action = {};
action["{"] <- {
go = function() {
stack.push({
state = "ok"
});
container = {};
state = "firstokey";
}.bindenv(this),
ovalue = function() {
stack.push({
container = container,
state = "ocomma",
key = key
});
container = {};
state = "firstokey";
}.bindenv(this),
firstavalue = function() {
stack.push({
container = container,
state = "acomma"
});
container = {};
state = "firstokey";
}.bindenv(this),
avalue = function() {
stack.push({
container = container,
state = "acomma"
});
container = {};
state = "firstokey";
}.bindenv(this)
},
action["}"] <- {
firstokey = function() {
local pop = stack.pop();
value = container;
container = ("container" in pop) ? pop.container : null;
key = ("key" in pop) ? pop.key : null;
state = pop.state;
}.bindenv(this),
ocomma = function() {
local pop = stack.pop();
container[key] <- value;
value = container;
container = ("container" in pop) ? pop.container : null;
key = ("key" in pop) ? pop.key : null;
state = pop.state;
}.bindenv(this)
},
action["["] <- {
go = function() {
stack.push({
state = "ok"
});
container = [];
state = "firstavalue";
}.bindenv(this),
ovalue = function() {
stack.push({
container = container,
state = "ocomma",
key = key
});
container = [];
state = "firstavalue";
}.bindenv(this),
firstavalue = function() {
stack.push({
container = container,
state = "acomma"
});
container = [];
state = "firstavalue";
}.bindenv(this),
avalue = function() {
stack.push({
container = container,
state = "acomma"
});
container = [];
state = "firstavalue";
}.bindenv(this)
},
action["]"] <- {
firstavalue = function() {
local pop = stack.pop();
value = container;
container = ("container" in pop) ? pop.container : null;
key = ("key" in pop) ? pop.key : null;
state = pop.state;
}.bindenv(this),
acomma = function() {
local pop = stack.pop();
container.push(value);
value = container;
container = ("container" in pop) ? pop.container : null;
key = ("key" in pop) ? pop.key : null;
state = pop.state;
}.bindenv(this)
},
action[":"] <- {
colon = function() {
local err = false;
foreach(akey, avalue in container) {
if (akey == key) err = true;
break
}
if (err) throw "Duplicate key \"" + key + "\"";
state = "ovalue";
}.bindenv(this)
},
action[","] <- {
ocomma = function() {
container[key] <- value;
state = "okey";
}.bindenv(this),
acomma = function() {
container.push(value);
state = "avalue";
}.bindenv(this)
},
action["true"] <- {
go = function() {
value = true;
state = "ok";
}.bindenv(this),
ovalue = function() {
value = true;
state = "ocomma";
}.bindenv(this),
firstavalue = function() {
value = true;
state = "acomma";
}.bindenv(this),
avalue = function() {
value = true;
state = "acomma";
}.bindenv(this)
},
action["false"] <- {
go = function() {
value = false;
state = "ok";
}.bindenv(this),
ovalue = function() {
value = false;
state = "ocomma";
}.bindenv(this),
firstavalue = function() {
value = false;
state = "acomma";
}.bindenv(this),
avalue = function() {
value = false;
state = "acomma";
}.bindenv(this)
},
action["null"] <- {
go = function() {
value = null;
state = "ok";
}.bindenv(this),
ovalue = function() {
value = null;
state = "ocomma";
}.bindenv(this),
firstavalue = function() {
value = null;
state = "acomma";
}.bindenv(this),
avalue = function() {
value = null;
state = "acomma";
}.bindenv(this)
}
state = "go";
stack = [];
local start = 0;
try {
local result, token, tokenizer = _JSONTokenizer();
while (token = tokenizer.nextToken(str, start)) {
if ("ptfn" == token.type) {
action[token.value][state]();
} else if ("number" == token.type) {
value = token.value;
number[state]();
} else if ("string" == token.type) {
value = tokenizer.unescape(token.value);
string[state]();
}
start += token.length;
}
} catch (e) {
state = e;
}
if (state != "ok" || regexp("[^\\s]").capture(str, start)) {
local near = str.slice(start, GetMin(str.len(), start + 10));
throw "JSON Syntax Error near `" + near + "`";
}
return value;
}
function GetMin(a, b) {
return a< b ? a : b;
}
function _convert(value, type, converter) {
if ("function" == typeof converter) {
local parametercCount = 2;
if ("getinfos" in converter) {
parametercCount = converter.getinfos().parameters.len() -
1;
}
if (parametercCount == 1) {
return converter(value);
} else if (parametercCount == 2) {
return converter(value, type);
} else {
throw "Error: converter function must take 1 or 2 parameters"
}
} else if ("number" == type) {
local Ret = (value.find(".") == null && value.find("e") == null && value.find("E") == null) ? value.tointeger() : value.tofloat();
return Ret;
} else {
return value;
}
}
}
class _JSONTokenizer {
_ptfnRegex = null;
_numberRegex = null;
_stringRegex = null;
_ltrimRegex = null;
_unescapeRegex = null;
constructor() {
this._ptfnRegex = regexp("^(?:\\,|\\:|\\[|\\]|\\{|\\}|true|false|null)");
this._numberRegex = regexp("^(?:\\-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)");
this._stringRegex = regexp("^(?:\\\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\\\")");
this._ltrimRegex = regexp("^[\\s\\t\\n\\r]*");
this._unescapeRegex = regexp("\\\\(?:(?:u\\d{4})|[\\\"\\\\/bfnrt])");
}
function nextToken(str, ...) {
local start = 0;
if (vargc > 0) start = vargv[0];
local
m,
type,
token,
value,
length,
whitespaces;
whitespaces = this._leadingWhitespaces(str, start);
start += whitespaces;
if (m = this._ptfnRegex.capture(str, start)) {
value = str.slice(m[0].begin, m[0].end);
type = "ptfn";
} else if (m = this._numberRegex.capture(str, start)) {
value = str.slice(m[0].begin, m[0].end);
type = "number";
} else if (m = this._stringRegex.capture(str, start)) {
value = str.slice(m[1].begin, m[1].end);
type = "string";
} else {
return null;
}
token = {
type = type,
value = value,
length = m[0].end - m[0].begin + whitespaces
};
return token;
}
function _leadingWhitespaces(str, start) {
local r = this._ltrimRegex.capture(str, start);
if (r) {
return r[0].end - r[0].begin;
} else {
return 0;
}
}
_unescapeReplacements = {
b = "\b",
f = "\f",
n = "\n",
r = "\r",
t = "\t"
};
function unescape(str) {
local start = 0;
local res = "";
while (start< str.len()) {
local m = this._unescapeRegex.capture(str, start);
if (m) {
local token = str.slice(m[0].begin, m[0].end);
local pre = str.slice(start, m[0].begin);
res += pre;
if (token.len() == 6) {
res += token;
} else {
local char = token.slice(1);
if (char in this._unescapeReplacements) {
res += this._unescapeReplacements[char];
} else {
res += char;
}
}
} else {
res += str.slice(start);
break;
}
start = m[0].end;
}
return res;
}
}
class JSONEncoder {
static VERSION = "2.0.0";
static _maxDepth = 32;
function encode(value) {
return this._encode(value);
}
function _encode(val, ...) {
local depth = 0;
if (vargc > 0) depth = vargv[0];
if (depth > this._maxDepth) {
throw "Possible cyclic reference";
}
local
r = "",
s = "",
i = 0;
switch (typeof val) {
case "table":
case "class":
s = "";
foreach(k, v in val) {
if (typeof v != "function") {
s += ",\"" + k + "\":" + this._encode(v, depth + 1);
}
}
s = s.len() > 0 ? s.slice(1) : s;
r += "{" + s + "}";
break;
case "array":
s = "";
for (i = 0; i< val.len(); i++) {
s += "," + this._encode(val[i], depth + 1);
}
s = (i > 0) ? s.slice(1) : s;
r += "[" + s + "]";
break;
case "integer":
case "float":
case "bool":
r += val;
break;
case "null":
r += "null";
break;
case "instance":
if ("_serializeRaw" in val && typeof val._serializeRaw == "function") {
r += val._serializeRaw().tostring();
} else if ("_serialize" in val && typeof val._serialize == "function") {
r += this._encode(val._serialize(), depth + 1);
} else {
s = "";
try {
foreach(k, v in val) {
s += ",\"" + k + "\":" + this._encode(v, depth + 1);
}
} catch (e) {
foreach(k, v in val.getclass()) {
if (typeof v != "function") {
s += ",\"" + k + "\":" + this._encode(val[k], depth + 1);
}
}
}
s = s.len() > 0 ? s.slice(1) : s;
r += "{" + s + "}";
}
break;
case "blob":
r += "\"" + (val.len() ? this._escape(val.tostring()) : "") + "\"";
break;
default:
r += "\"" + this._escape(val.tostring()) + "\"";
break;
}
return r;
}
function _escape(str) {
local res = "";
for (local i = 0; i< str.len(); i++) {
local ch1 = (str[i] & 0xFF);
if ((ch1 & 0x80) == 0x00) {
ch1 = format("%c", ch1);
if (ch1 == "\"") {
res += "\\\"";
} else if (ch1 == "\\") {
res += "\\\\";
} else if (ch1 == "/") {
res += "\\/";
} else if (ch1 == "\b") {
res += "\\b";
} else if (ch1 == "\f") {
res += "\\f";
} else if (ch1 == "\n") {
res += "\\n";
} else if (ch1 == "\r") {
res += "\\r";
} else if (ch1 == "\t") {
res += "\\t";
} else if (ch1 == "\0") {
res += "\\u0000";
} else {
res += ch1;
}
} else {
if ((ch1 & 0xE0) == 0xC0) {
local ch2 = (str[++i] & 0xFF);
res += format("%c%c", ch1, ch2);
} else if ((ch1 & 0xF0) == 0xE0) {
local ch2 = (str[++i] & 0xFF);
local ch3 = (str[++i] & 0xFF);
res += format("%c%c%c", ch1, ch2, ch3);
} else if ((ch1 & 0xF8) == 0xF0) {
local ch2 = (str[++i] & 0xFF);
local ch3 = (str[++i] & 0xFF);
local ch4 = (str[++i] & 0xFF);
res += format("%c%c%c%c", ch1, ch2, ch3, ch4);
}
}
}
return res;
}
}

View File

@ -1,204 +0,0 @@
/*
文件名:MemoryClass.nut
路径:Base/_Tool/MemoryClass.nut
创建日期:2024-09-24 08:22
文件用途:
*/
class Memory {
function alloc(Size) {
return NativePointer(Size.tostring());
}
function allocUtf8String(Str) {
return NativePointer(Str_Ptr(Str));
}
}
class NativePointer {
//大小
Size = -1;
C_Object = null;
constructor(T) {
if (type(T) == "integer") {
C_Object = L_sq_I2P(T);
} else if (type(T) == "userdata") {
C_Object = T;
} else if (type(T) == "string") {
C_Object = Sq_New_Point(T.tointeger());
Size = T;
//注册销毁伪析构
Register_Destruction(C_Object, this);
}
}
function add(intoffset) {
return NativePointer(L_sq_I2P(L_sq_P2I(this.C_Object) + intoffset));
}
function sub(intoffset) {
return NativePointer(L_sq_I2P(L_sq_P2I(this.C_Object) - intoffset));
}
function writeByteArray(arr) {
Sq_Memory_WriteByteArr(this.C_Object, arr);
}
function readByteArray(size) {
local PointB = Sq_Point2Blob(this.C_Object, size);
local arr = [];
foreach(value in PointB) {
arr.append(value);
}
return arr;
}
function write(value, type) {
local Buf = blob(0);
Buf.writen(value, type);
local arr = [];
foreach(value in Buf) {
arr.append(value);
}
writeByteArray(arr);
}
function writeS8(value) {
write(value, 'c');
}
function writeU8(value) {
write(value, 'b');
}
function writeS16(value) {
write(value, 's');
}
function writeU16(value) {
write(value, 'w');
}
function writeS32(value) {
write(value, 'i');
}
function writeU32(value) {
write(value, 'i');
}
function writeShort(value) {
write(value, 's');
}
function writeUShort(value) {
write(value, 'w');
}
function writeInt(value) {
write(value, 'i');
}
function writeUInt(value) {
write(value, 'i');
}
function writeFloat(value) {
write(value, 'f');
}
function writeDouble(value) {
write(value, 'd');
}
function read(type) {
local Buf = Sq_Point2Blob(L_sq_P2I(this.C_Object), 4);
return Buf.readn(type);
}
function readS8() {
return read('c');
}
function readU8() {
return read('b');
}
function readS16() {
return read('s');
}
function readU16() {
return read('w');
}
function readS32() {
return read('i');
}
function readU32() {
return read('i');
}
function readShort() {
return read('s');
}
function readUShort() {
return read('w');
}
function readInt() {
return read('i');
}
function readUInt() {
return read('i');
}
function readFloat() {
return read('f');
}
function readDouble() {
return read('d');
}
function readUnicodeString(...) {
if (vargc > 0) {
return Sq_Memory_ReadString(this.C_Object, vargv[0]);
} else {
return Sq_Memory_ReadString(this.C_Object);
}
}
function readUtf8String(...) {
if (vargc > 0) {
return Sq_Memory_ReadStringByUtf8(this.C_Object, vargv[0]);
} else {
return Sq_Memory_ReadStringByUtf8(this.C_Object);
}
}
function readBig5String(...) {
if (vargc > 0) {
return Sq_Memory_ReadStringByBig5(this.C_Object, vargv[0]);
} else {
return Sq_Memory_ReadStringByBig5(this.C_Object);
}
}
function readPointer() {
return Sq_ReadPoint(this.C_Object);
}
function tostring() {
return this.C_Object.tostring();
}
}

View File

@ -1,61 +0,0 @@
/*
文件名:Pack_Class.nut
路径:Base/_Tool/Pack_Class.nut
创建日期:2025-06-30 09:24
文件用途:字节包
*/
class Packet {
//读取指针位置
Index = 0;
//内存数据
Pointer = null;
//包大小
Size = 0;
//加载包
function Load(P, S) {
Pointer = P;
Size = S;
}
//读取指针跳转
function Seek(...) {
local Pos = vargv[0];
local Mode = 0;
if(vargc > 1) Mode = vargv[1];
if (Mode == 0) {
Index = Pos;
} else if (Mode == 1) {
Index += Pos;
} else if (Mode == 2) {
Index -= Pos;
}
}
//读取整形
function GetInt() {
local Size_t = 4;
if (Index + Size_t > Size) {
print("读取包越界!");
return;
}
local Buf = NativePointer(Pointer).add(Index).readInt();
Index += Size_t;
return Buf;
}
//读取流
function GetStream(Size_t) {
if (Index + Size_t > Size) {
print("读取包越界!");
return;
}
local Np = NativePointer(Pointer).add(Index);
Np.Size = Size_t;
Index += Size_t;
return Np;
}
}

View File

@ -1,713 +0,0 @@
/*
文件名:Script_Class.nut
路径:Base/_Tool/Script_Class.nut
创建日期:2024-10-21 14:49
文件用途:PVF读取类
*/
class BlobEx extends blob {
constructor(BaseBlob) {
blob.constructor(BaseBlob.len());
writeblob(BaseBlob);
}
function writeblob(B) {
blob.writeblob(B);
seek(0);
}
function GetUShort() {
return readn('s');
}
function GetShort() {
return readn('w');
}
function charPtrToInt(arr) {
local value = ((arr[0]) << 0) |
((arr[1]) << 8) |
((arr[2]) << 16) |
((arr[3]) << 24);
return value;
}
function GetInt() {
local CurTPos = tell();
local Ret = charPtrToInt([this[CurTPos], this[CurTPos + 1], this[CurTPos + 2], this[CurTPos + 3]]);
seek(4, 'c');
return Ret;
}
function Get256() {
local Buf = readn('c');
return (256.0 + Buf.tofloat()) % 256.0;
}
function GetFloat() {
return readn('f');
}
function GetString(count) {
local MBuf = Memory.alloc(count);
local BlobBuf = readblob(count);
local arr = [];
foreach(value in BlobBuf) {
arr.append(value);
}
MBuf.writeByteArray(arr);
return MBuf.readUtf8String(count);
}
}
Rindro_Script_Bin_Data <- [];
class _PVF_Data_ {
//数据
Data = null;
//位置
Pos = 0;
//最大值
Max = 0;
function _typeof() {
return "pvf_data";
}
constructor(gData) {
Data = gData;
Max = gData.len();
}
function Last() {
if (Pos > 0) {
Pos--;
return Get();
}
return null;
}
function Seek(i) {
if (Pos > 0 && Pos<(Max - 1)) {
Pos = i;
}
}
function Get() {
local Ret = Data[Pos];
if (Pos<(Max - 1)) {
Pos++;
}
return Ret;
}
function Eof() {
if (Pos == Max - 1)
return true;
}
function Next() {
if (Pos<(Max - 1)) {
Pos++;
return Get();
}
return null;
}
}
class Rindro_Script {
function Get_Ani_Flip_Type(data) {
switch (data) {
case 1:
return "HORIZON";
case 2:
return "VERTICAL";
case 3:
return "ALL";
default:
return "";
}
}
function Get_Ani_Effect_Type(data) {
switch (data) {
case 0:
return "NONE";
case 1:
return "DODGE";
case 2:
return "LINEARDODGE";
case 3:
return "DARK";
case 4:
return "XOR";
case 5:
return "MONOCHROME";
case 6:
return "SPACEDISTORT";
default:
return "";
}
}
function Get_Ani_Damage_Type(data) {
switch (data) {
case 0:
return "NORMAL";
case 1:
return "SUPERARMOR";
case 2:
return "UNBREAKABLE";
default:
return "";
}
}
function Get_Ani_Flag(data) {
switch (data) {
case 0:
return "LOOP";
case 1:
return "SHADOW";
case 3:
return "COORD";
case 7:
return "IMAGE_RATE";
case 8:
return "IMAGE_ROTATE";
case 9:
return "RGBA";
case 10:
return "INTERPOLATION";
case 11:
return "GRAPHIC_EFFECT";
case 12:
return "DELAY";
case 13:
return "DAMAGE_TYPE";
case 14:
return "DAMAGE_BOX";
case 15:
return "ATTACK_BOX";
case 16:
return "PLAY_SOUND";
case 17:
return "PRELOAD";
case 18:
return "SPECTRUM";
case 23:
return "SET_FLAG";
case 24:
return "FLIP_TYPE";
case 25:
return "LOOP_START";
case 26:
return "LOOP_END";
case 27:
return "CLIP";
case 28:
return "OPERATION";
default:
return "";
}
}
function endswith(Str, cmp) {
local len = cmp.len();
local EndStr = Str.slice(-len);
if (EndStr == cmp)
return true;
return false;
}
function InitLoad_String() {
if (getroottable().rawin("RindroLoadStringTable")) return;
getroottable().RindroLoadStringTable <- {};
local N_String = R_Utils.GetScriptFileReader("n_string.lst");
if (N_String) {
local IO = Sq_Point2Blob(L_sq_P2I(N_String.Buffer.C_Object), N_String.Size);
local i = 2;
while (i< N_String.Size) {
if ((N_String.Size - i) >= 10) {
IO.seek(i + 6); //内容指示位
local FindKey = IO.readn('i');
local Key = Rindro_Script.GetBinString(FindKey);
if (Key) {
local StrFilePath = Key.tolower();
local StrFile = R_Utils.GetScriptFileReader(StrFilePath, 10240000);
if (StrFile) {
local StrBuffer = StrFile.Buffer.readUtf8String(StrFile.Size);
local StrArr = split(StrBuffer, "\r\n");
foreach(index, strobj in StrArr) {
if (strobj.find(">") != null) {
local strobjarr = split(strobj, ">");
if (strobjarr.len() > 1) {
getroottable().RindroLoadStringTable.rawset(strobjarr[0], Sq_ConvertWideChar(strobjarr[1], "big5"));
}
}
}
}
}
} else break;
i += 10;
}
}
}
function GetBin() {
local BinFile = R_Utils.GetScriptFileReader("stringtable.bin", 40960000);
if (BinFile) {
local Ro = Sq_Point2Blob(L_sq_P2I(BinFile.Buffer.C_Object), BinFile.Size);
Ro = BlobEx(Ro.readblob(Ro.len()));
local Count = Ro.readn('i');
local CurrentIndex = 0;
for (local i = 0; i< Count; i++) {
Ro.seek(CurrentIndex * 4 + 4);
local StartPos = Ro.readn('i');
local EndPos = Ro.readn('i');
local Len = EndPos - StartPos;
Ro.seek(StartPos + 4);
if (Len > 0) {
local Str = Ro.GetString(Len);
Rindro_Script_Bin_Data.append(Str);
} else {
Rindro_Script_Bin_Data.append("");
}
CurrentIndex++;
}
}
}
function GetBinString(Index) {
if (!(getroottable().rawin("ENUM_TW_GROWTYPE_VERS")) || ENUM_TW_GROWTYPE_VERS >= 24112901) //24112901更新了新的读取bin文件的方式
return L_sq_StringBinById(Index);
else {
if (Index< Rindro_Script_Bin_Data.len()) return Rindro_Script_Bin_Data[Index];
return "";
}
}
function GetLoadString(Key) {
if (getroottable().RindroLoadStringTable.rawin(Key)) return getroottable().RindroLoadStringTable[Key];
else return "";
}
function UnpackData(IO, i) {
local out = "";
IO.seek(i); //内容指示位
local currentByte = IO.readn('c'); //内容指示位
local after = IO.GetInt();
switch (currentByte) {
case 10: {
IO.seek(i - 4);
local Before = IO.readn('i');
local Buf = Rindro_Script.GetBinString(after);
if (!Buf) {
Buf = "";
} else {
Buf = "<" + Before + "::" + Buf + "`" + Rindro_Script.GetLoadString(Buf) + "`>";
}
Buf = Buf + "\r\n";
out += Buf;
break;
}
case 2: {
IO.seek(-4, 'c');
local ret = IO.readn('i');
return ret;
}
case 4: {
local Bbuf = blob(4);
Bbuf.writen(after, 'i');
Bbuf.seek(0);
local Buf = Bbuf.readn('f');
out += after + '\t';
break;
}
case 6:
case 8:
case 7:
case 5: {
local Buf = Rindro_Script.GetBinString(after);
if (!Buf) Buf = "";
return Buf;
}
case 9: {
IO.seek(i + 6);
local Before = IO.readn('i');
local Buf = Rindro_Script.GetBinString(Before);
out += Rindro_Script.GetLoadString(Buf);
}
default:
out += "";
break;
}
return out;
}
function ReadEquipment(ReadObject) {
local EquipmentAtt = {};
if (ReadObject.Size >= 7) {
//创建Blob对象
local IOBUF = Sq_Point2Blob(L_sq_P2I(ReadObject.Buffer.C_Object), ReadObject.Size);
local IO = BlobEx(IOBUF.readblob(IOBUF.len()));
//以5为单步从第二位开始遍历字节
local i = 2;
while (true) {
if (i< ReadObject.Size && ReadObject.Size - i >= 5) {
local str = Rindro_Script.UnpackData(IO, i);
i += 5;
//名称
if (str == "[name]") {
local RealKey = str.slice(1, str.len() - 1);
EquipmentAtt[RealKey] <- Rindro_Script.UnpackData(IO, i);
i += 5;
}
//装备类型
else if (str == "[equipment type]") {
local Buf = Rindro_Script.UnpackData(IO, i);
EquipmentAtt["equipment_type"] <- Buf.slice(1, -1);
i += 5;
}
//称号动画
else if (str == "[custom animation]") {
local Buf = Rindro_Script.UnpackData(IO, i).tolower();
EquipmentAtt["custom_animation"] <- Buf;
i += 5;
}
//光环生成效果
else if (str == "[aurora graphic effects]") {
EquipmentAtt["Aurora"] <- {};
EquipmentAtt["Aurora"].Back <- [];
EquipmentAtt["Aurora"].Front <- [];
local Count = Rindro_Script.UnpackData(IO, i);
i += 5;
for (local z = 0; z< Count; z++) {
local Layer = Rindro_Script.UnpackData(IO, i);
i += 5;
local Path = Rindro_Script.UnpackData(IO, i).tolower();
i += 5;
if (Layer == 0) EquipmentAtt["Aurora"].Back.append(Path);
if (Layer == 1) EquipmentAtt["Aurora"].Front.append(Path);
}
i += 5;
}
//隐藏图层
else if (str == "[hide layer]") {
EquipmentAtt["hidelayer"] <- [];
while (true) {
local Buffer = Rindro_Script.UnpackData(IO, i);
i += 5;
if (Buffer == "[/hide layer]") {
break;
}
EquipmentAtt["hidelayer"].append(Buffer);
}
}
//Ani
else if (str == "[animation job]") {
local Job = Rindro_Script.UnpackData(IO, i).slice(1, -1);
local SpacePos = Job.find(" ");
if (SpacePos) {
Job = Job.slice(0, SpacePos) + Job.slice(SpacePos + 1);
}
i += 5;
EquipmentAtt["Ani_" + Job] <- {};
i += 5;
local Index1 = Rindro_Script.UnpackData(IO, i);
i += 5;
local Index2 = Rindro_Script.UnpackData(IO, i);
i += 5;
EquipmentAtt["Ani_" + Job].variation <- [Index1, Index2];
EquipmentAtt["Ani_" + Job].layer_variation <- [];
while (true) {
try {
local Ret = Rindro_Script.UnpackData(IO, i);
i += 5;
if (Ret == "[animation job]" || (Rindro_Script.endswith(Ret, "]") && Ret != "[equipment ani script]" && Ret != "[layer variation]")) {
i -= 5;
break;
} else if (Ret == "[layer variation]") {
local InfoBuf = {};
InfoBuf.Zorder <- Rindro_Script.UnpackData(IO, i);
i += 5;
InfoBuf.Path <- Rindro_Script.UnpackData(IO, i);
i += 5;
EquipmentAtt["Ani_" + Job].layer_variation.append(InfoBuf);
}
} catch (exception) {
break;
}
}
}
} else break;
}
}
return EquipmentAtt;
}
function ReadAnimation(ReadObject) {
local Ro = Sq_Point2Blob(L_sq_P2I(ReadObject.Buffer.C_Object), ReadObject.Size);
Ro = BlobEx(Ro.readblob(Ro.len()));
local AniObject = {
Img_List = [],
Frame = [],
Flag = {}
};
local Frame_Max = Ro.readn('s');
local Img_Count = Ro.readn('s');
//Img的路径读取 存入数组
for (local index = 0; index< Img_Count; index++) {
local Buf = Ro.readn('i');
local ImgPath = Ro.GetString(Buf);
//有可能Img有空路径
AniObject.Img_List.append(ImgPath);
}
//Ani头部标签数量
local Ani_H_Item_Count = Ro.readn('s');
//处理标签
for (local index = 0; index< Ani_H_Item_Count; index++) {
//标签类型
local Type = Ro.readn('s');
switch (Type) {
case 0:
case 1: {
local Key = Rindro_Script.Get_Ani_Flag(Type);
local Value = Ro.readn('c');
AniObject.Flag.rawset(Key, Value);
break;
}
case 3:
case 28: {
local Key = Rindro_Script.Get_Ani_Flag(Type);
local Value = Ro.readn('s');
AniObject.Flag.rawset(Key, Value);
break;
}
case 18:
// print("残影解析");
//此处无解析 暂时先保证运行 残影功能暂时用不上
Ro.readn('c');
Ro.readn('i');
Ro.readn('i');
Ro.readn('i');
Ro.Get256();
Ro.Get256();
Ro.Get256();
Ro.Get256();
Ro.readn('s');
break;
default:
break;
}
}
//读取每一个Img
for (local index = 0; index< Frame_Max; index++) {
//帧结构体对象
local FrameObject = {
AttackBox = [],
DamageBox = [],
Flag = {},
};
//碰撞框项目数量
local Ani_Box_Item_Count = Ro.readn('s');
for (local _i = 0; _i< Ani_Box_Item_Count; _i++) {
local Box_Type = Ro.readn('s');
local D_Box_b = [];
for (local _k = 0; _k< 6; _k++) {
D_Box_b.append(Ro.readn('i'));
}
if (Box_Type == 15) {
FrameObject.AttackBox.append(D_Box_b);
} else {
FrameObject.DamageBox.append(D_Box_b);
}
// //0是攻击框 1是受击框
// FrameObject.Box.rawset(15 - Box_Type, D_Box_b);
}
//调用的第几个Img
local Index_Buf = Ro.GetShort();
//如果等于-1说明是img路径为空
if (Index_Buf != 65535) {
FrameObject.Img_Path <- AniObject.Img_List[Index_Buf].tolower();
//Img中的PNG下标
FrameObject.Img_Index <- Ro.readn('s');
} else {
FrameObject.Img_Path <- "";
FrameObject.Img_Index <- 0;
}
//坐标
FrameObject.Pos <- {
x = Ro.readn('i'),
y = Ro.readn('i'),
};
//Img中的项目数量
local Img_Flag_Count = Ro.readn('s');
for (local _o = 0; _o< Img_Flag_Count; _o++) {
local Img_Flag_Type = Ro.readn('s');
local Key;
local Value;
switch (Img_Flag_Type) {
case 0:
case 1:
case 10:
Key = Rindro_Script.Get_Ani_Flag(Img_Flag_Type);
Value = Ro.readn('c');
FrameObject.Flag.rawset(Key, Value);
break;
case 3:
Key = "COORD";
Value = Ro.readn('s');
FrameObject.Flag.rawset(Key, Value);
break;
case 17:
Key = "PRELOAD";
Value = 1;
FrameObject.Flag.rawset(Key, Value);
break;
case 7:
Key = "IMAGE_RATE";
Value = {
x = Ro.GetFloat(),
y = Ro.GetFloat()
};
FrameObject.Flag.rawset(Key, Value);
break;
case 8:
Key = "IMAGE_ROTATE";
Value = Ro.GetFloat();
FrameObject.Flag.rawset(Key, Value);
break;
case 9:
Key = "RGBA";
Value = [
Ro.Get256(),
Ro.Get256(),
Ro.Get256(),
Ro.Get256(),
];
FrameObject.Flag.rawset(Key, Value);
break;
case 11:
local Effect_Type = Ro.readn('s');
Key = "GRAPHIC_EFFECT_" + Rindro_Script.Get_Ani_Effect_Type(Effect_Type);
switch (Effect_Type) {
case 5:
Value = [Ro.Get256(), Ro.Get256(), Ro.Get256()];
break;
case 6:
Value = [Ro.GetShort(), Ro.GetShort()];
break;
}
FrameObject.Flag.rawset(Key, Value);
break;
case 12:
Value = Ro.readn('i');
FrameObject.Delay <- Value;
break;
case 13:
Key = "DAMAGE_TYPE";
Value = Rindro_Script.Get_Ani_Damage_Type(Ro.readn('s'));
FrameObject.Flag.rawset(Key, Value);
break;
case 16:
local SoundTempSize = Ro.readn('i');
Key = "PLAY_SOUND";
Value = Ro.GetString(SoundTempSize);
FrameObject.Flag.rawset(Key, Value);
break;
case 23:
Key = "SET_FLAG";
Value = Ro.readn('i');
FrameObject.Flag.rawset(Key, Value);
break;
case 24:
Key = "FLIP_TYPE";
Value = Rindro_Script.Get_Ani_Flip_Type(Ro.readn('s'));
FrameObject.Flag.rawset(Key, Value);
break;
case 25:
Key = "LOOP_START";
FrameObject.Flag.rawset(Key, 1);
break;
case 26:
Key = "LOOP_END";
Value = Ro.readn('i');
FrameObject.Flag.rawset(Key, Value);
break;
case 27:
Key = "CLIP";
Value = [
Ro.GetShort(),
Ro.GetShort(),
Ro.GetShort(),
Ro.GetShort(),
];
FrameObject.Flag.rawset(Key, Value);
break;
default:
break;
}
}
//每一帧都是一个结构体 存入数组中
AniObject.Frame.append(FrameObject);
}
return AniObject;
}
//获取文件并处理
function GetFileData(Path, Func) {
local N_Buffer = R_Utils.GetScriptFileReader(Path);
if (N_Buffer) {
local IO = Sq_Point2Blob(L_sq_P2I(N_Buffer.Buffer.C_Object), N_Buffer.Size);
IO = BlobEx(IO.readblob(IO.len()));
return Rindro_Script.ResolvingData(IO, Func, Path);
} else {
print(Path + "找不到文件!");
return null;
}
}
function ResolvingData(IO, Func, Path) {
local DataTable = {};
DataTable.filepath <- Path;
local DataArr = [];
local Length = IO.len();
if (Length >= 7) {
local i = 2;
while (true) {
if (i< Length && Length - i >= 5) {
local str = Rindro_Script.UnpackData(IO, i);
i += 5;
DataArr.push(str);
} else break;
}
Func(DataTable, _PVF_Data_(DataArr));
return DataTable;
}
return null;
}
}
// Rindro_Script.GetBin();
Rindro_Script.InitLoad_String();

View File

@ -1,113 +0,0 @@
/*
文件名:CharacterInfoData.nut
路径:Base/_Z_Data/CharacterInfoData.nut
创建日期:2024-09-03 11:34
文件用途:角色信息数据
*/
//读取属性数据
function Lenheart_Character_GetAttribute(Address) {
//传入读传入不传读自己
local ObjectAddress = Address;
if (ObjectAddress == null)
ObjectAddress = L_sq_RA(0x1AB7CDC);
if (!ObjectAddress) return;
local Info = {};
//当前HP
Info.CurHp <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x2BEC);
//总HP
Info.MaxHp <- L_sq_RA(ObjectAddress + 0x36A0);
//当前MP
Info.CurMp <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x2BF8);
//总MP
Info.MaxMp <- L_sq_RA(ObjectAddress + 0x36A4);
//力量
Info.Strength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x2364);
//智力
Info.Intellect <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x2394);
//体力
Info.Vitality <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x237C);
//精神
Info.Spirit <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x23AC);
//物理攻击 (没读武器精通)
Info.PhysicalAttack <- (MemoryTool.DecodeMemoryData(ObjectAddress + 0x1E54) * (Info.Strength.tofloat() * 0.004 + 1)).tointeger() + MemoryTool.DecodeMemoryData(ObjectAddress + 0x1EB4);
//魔法攻击
Info.MagicalAttack <- (MemoryTool.DecodeMemoryData(ObjectAddress + 0x1E84) * (Info.Intellect.tofloat() * 0.004 + 1)).tointeger() + MemoryTool.DecodeMemoryData(ObjectAddress + 0x1ED8);
//独立攻击力 //TODO 需要加上成长独立攻击力 需要服务端发送给我
Info.IndependentAttack <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x22C8) + MemoryTool.DecodeMemoryData(ObjectAddress + 0x22F8);
//物理防御
Info.PhysicalDefend <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x273C);
//魔法防御
Info.MagicalDefend <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x276C);
//物理暴击
Info.PhysicalCrit <- MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x1F14);
//魔法暴击
Info.MagicalCrit <- MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x1F20);
//攻击速度
Info.AttackSpeed <- (MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x2688) - 1.0) * 100.0;
//释放速度
Info.ReleaseSpeed <- (MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x26A0) - 1.0) * 100.0;
//移动速度
Info.MoveSpeed <- (MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x2670) - 1.0) * 100.0;
//抗魔值
local Kbuf = 0;
for (local i = 1; i< 13; ++i) {
local EquOffset = Rindro_GetEquAddr(i);
local AbAddress = L_sq_RA(ObjectAddress + EquOffset);
if (AbAddress) {
Kbuf += MemoryTool.DecodeMemoryData(AbAddress + 0xAD4);
}
}
Info.AntiMagic <- Kbuf;
//命中率
Info.HitRate <- MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x1F50);
//闪避率
Info.DodgeRate <- MemoryTool.DecodeMemoryDataF(ObjectAddress + 0x1C50);
//HP回复量
Info.HPRecovery <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1D64) * 1.6;
//MP回复量
Info.MPRecovery <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1D7C) * 7.2;
//僵直度
Info.StunRate <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1DF4);
//硬直
Info.StunResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1DDC);
//火属性强化
Info.FireStrength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B54);
//冰属性强化
Info.IceStrength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B60);
//光属性强化
Info.LightStrength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B78);
//暗属性强化
Info.DarkStrength <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B6C);
//火属性抗性
Info.FireResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1AF4);
//冰属性抗性
Info.IceResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B00);
//光属性抗性
Info.LightResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B18);
//暗属性抗性
Info.DarkResist <- MemoryTool.DecodeMemoryData(ObjectAddress + 0x1B0C);
//名望值
Info.Fame <- 0;
//最终伤害
Info.FinalDamage <- 0;
return Info;
}
// function Rindro_GetCharacterInfoCallBack(Chunk) {
// local Jso = Json.Decode(Chunk);
// Jso.op <- 20069011;
// Jso.Info <- Lenheart_Character_GetAttribute(null);
// Rindro_BaseToolClass.SendPackEx(Jso);
// }
// Pack_Control.rawset(20069010, Rindro_GetCharacterInfoCallBack);

View File

@ -12,11 +12,14 @@
"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/_Tool/CustomAnimation_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,8 +57,34 @@
"CSBase/Interface.nut" "CSBase/Interface.nut"
], ],
"ProjectScript": { "ProjectScript": {
"修复道具数量显示": {
"Private": true,
"Script": [
"Project/FixItemCout/FixItemCout.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "修复道具数量显示",
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png"
}
},
"扩展装备": {
"Private": true,
"Enabled": false,
"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,
"Enabled": false,
"Script": [ "Script": [
"Project/Trainingroom/Training_SummonMonster.nut", "Project/Trainingroom/Training_SummonMonster.nut",
"Project/Trainingroom/Training_ModifyAttributes.nut", "Project/Trainingroom/Training_ModifyAttributes.nut",
@ -72,6 +101,7 @@
}, },
"融合装备": { "融合装备": {
"Private": true, "Private": true,
"Enabled": false,
"Script": [ "Script": [
"Project/ItemTool/ItemFusion/ItemFusion.nut" "Project/ItemTool/ItemFusion/ItemFusion.nut"
], ],
@ -119,6 +149,7 @@
}, },
"赛利亚的热忱": { "赛利亚的热忱": {
"Private": true, "Private": true,
"Enabled": false,
"Script": [ "Script": [
"Project/SeriaZeal/SeriaZeal.nut" "Project/SeriaZeal/SeriaZeal.nut"
], ],
@ -162,6 +193,7 @@
}, },
"累计奖励": { "累计奖励": {
"price": 10, "price": 10,
"Enabled": false,
"Script": [ "Script": [
"Project/CumulativeReward/CumulativeReward.nut" "Project/CumulativeReward/CumulativeReward.nut"
], ],
@ -206,6 +238,7 @@
}, },
"世界BOSS": { "世界BOSS": {
"price": 100, "price": 100,
"Enabled": false,
"Script": [ "Script": [
"Project/WorldBoss/WorldBoss.nut" "Project/WorldBoss/WorldBoss.nut"
], ],
@ -292,6 +325,7 @@
}, },
"世界BOSS毁梦": { "世界BOSS毁梦": {
"Private": true, "Private": true,
"Enabled": false,
"price": 100, "price": 100,
"Script": [ "Script": [
"Project/WorldBoss/WorldBoss_HM.nut" "Project/WorldBoss/WorldBoss_HM.nut"
@ -307,6 +341,7 @@
}, },
"仓库锁": { "仓库锁": {
"Private": true, "Private": true,
"Enabled": false,
"price": 100, "price": 100,
"Script": [ "Script": [
"Project/WarehouseLock/WarehouseLock.nut" "Project/WarehouseLock/WarehouseLock.nut"
@ -322,6 +357,7 @@
}, },
"圣者遗物箱": { "圣者遗物箱": {
"price": 30, "price": 30,
"Enabled": false,
"Script": [ "Script": [
"Project/AncientheroLuckyBox/AncientheroLuckyBox.nut" "Project/AncientheroLuckyBox/AncientheroLuckyBox.nut"
], ],
@ -352,6 +388,7 @@
}, },
"皮肤仓库": { "皮肤仓库": {
"price": 25, "price": 25,
"Enabled": false,
"Script": [ "Script": [
"Project/SkinHub/SkinHub.nut" "Project/SkinHub/SkinHub.nut"
], ],
@ -378,6 +415,7 @@
}, },
"收集箱": { "收集箱": {
"price": 50, "price": 50,
"Enabled": false,
"Script": [ "Script": [
"Project/CollectionBox/CollectionBox.nut" "Project/CollectionBox/CollectionBox.nut"
], ],
@ -400,6 +438,7 @@
}, },
"伤害控制": { "伤害控制": {
"price": 10, "price": 10,
"Enabled": false,
"Script": [], "Script": [],
"info": { "info": {
"ProjectAuthor": "10", "ProjectAuthor": "10",
@ -416,6 +455,7 @@
}, },
"战令": { "战令": {
"price": 60, "price": 60,
"Enabled": false,
"Script": [ "Script": [
"Project/AradPass/AradPass_Help.nut", "Project/AradPass/AradPass_Help.nut",
"Project/AradPass/AradPass_Quest.nut", "Project/AradPass/AradPass_Quest.nut",
@ -464,6 +504,7 @@
}, },
"秒伤统计": { "秒伤统计": {
"price": 0, "price": 0,
"Enabled": false,
"Script": [ "Script": [
"Project/DamagePerSecond/DamagePerSecond.nut" "Project/DamagePerSecond/DamagePerSecond.nut"
], ],
@ -490,6 +531,7 @@
}, },
"土罐": { "土罐": {
"price": 25, "price": 25,
"Enabled": false,
"Script": [ "Script": [
"Project/Tuguan/Tuguan.nut" "Project/Tuguan/Tuguan.nut"
], ],
@ -520,6 +562,7 @@
}, },
"上线公告": { "上线公告": {
"price": 0, "price": 0,
"Enabled": false,
"Script": [ "Script": [
"Project/OnlineAnnouncement/OnlineAnnouncement.nut" "Project/OnlineAnnouncement/OnlineAnnouncement.nut"
], ],
@ -542,6 +585,7 @@
}, },
"时装变身": { "时装变身": {
"price": 0, "price": 0,
"Enabled": false,
"Script": [ "Script": [
"Project/Shapeshifting/Shapeshifting.nut" "Project/Shapeshifting/Shapeshifting.nut"
], ],
@ -568,6 +612,7 @@
}, },
"战力系统": { "战力系统": {
"price": 50, "price": 50,
"Enabled": false,
"Script": [ "Script": [
"Project/CombatRank/CombatRank.nut" "Project/CombatRank/CombatRank.nut"
], ],
@ -594,6 +639,7 @@
}, },
"安图恩": { "安图恩": {
"price": 200, "price": 200,
"Enabled": false,
"Script": [ "Script": [
"Project/Anton/Rindro_Anton_CreateParty.nut", "Project/Anton/Rindro_Anton_CreateParty.nut",
"Project/Anton/Rindro_Anton_FightSituation.nut", "Project/Anton/Rindro_Anton_FightSituation.nut",
@ -723,6 +769,7 @@
}, },
"卢克": { "卢克": {
"price": 200, "price": 200,
"Enabled": false,
"Script": [ "Script": [
"Project/Luke/Rindro_Luke_CreateParty.nut", "Project/Luke/Rindro_Luke_CreateParty.nut",
"Project/Luke/Rindro_Luke_FightSituation.nut", "Project/Luke/Rindro_Luke_FightSituation.nut",
@ -826,6 +873,114 @@
}, },
"imgPath": "Luke" "imgPath": "Luke"
}, },
"超时空": {
"price": 300,
"Enabled": false,
"Script": [
"Project/Fiendwar/FiendFightLogic.nut",
"Project/Fiendwar/Rindro_Fiendwar_CreateParty.nut",
"Project/Fiendwar/FiendwarHallGoBossDgn.nut",
"Project/Fiendwar/FiendwarFightSituation.nut",
"Project/Fiendwar/FiendwarNoti.nut",
"Project/Fiendwar/Rindro_Fiendwar_Party.nut",
"Project/Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut",
"Project/Fiendwar/Rindro_Fiendwar_PartyFormation.nut",
"Project/Fiendwar/Rindro_Fiendwar_PartyHall.nut",
"Project/Fiendwar/Rindro_Fiendwar_PartyInfo.nut",
"Project/Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut",
"Project/Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut",
"Project/Fiendwar/FiendReward.nut",
"Project/Fiendwar/Rindro_Fiendwar.nut"
],
"info": {
"ProjectAuthor": "200",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "一比一复刻!卢克攻坚战 完全体!",
"ProjectDetails": [
{
"type": "str",
"content": "99%机制还原。"
},
{
"type": "str",
"content": "加载插件后要启动19频道作为卢克攻坚战频道。"
},
{
"type": "img",
"content": "1"
},
{
"type": "str",
"content": "频道将会限制只能够在卢克区域活动!"
},
{
"type": "str",
"content": "通过游戏菜单中的寻找队伍,打开攻坚战队伍界面,在这里可以创建与加入攻坚队!"
},
{
"type": "img",
"content": "4"
},
{
"type": "img",
"content": "13"
},
{
"type": "str",
"content": "独家功能1:进团时队长能看到申请人信息,战斗力会直接读登录器的战斗力表!"
},
{
"type": "img",
"content": "5"
},
{
"type": "str",
"content": "独家功能2:攻坚队队内聊天"
},
{
"type": "img",
"content": "6"
},
{
"type": "str",
"content": "独家功能3:头像直接读取当前时装"
},
{
"type": "img",
"content": "7"
},
{
"type": "str",
"content": "独家功能4:后台配置表里可以直接对卢克难度进行调整适合原版、微变、超变的服务器不用麻烦的改pvf副本难度"
},
{
"type": "str",
"content": "独家功能5:可以对全攻坚队复活币使用进行限制"
},
{
"type": "img",
"content": "8"
},
{
"type": "str",
"content": "独家功能6:有简易战况表,可以在没打开大攻坚战况表的的情况下知道了解攻坚状态"
},
{
"type": "img",
"content": "9"
},
{
"type": "str",
"content": "独家功能7:可以设定通关多少次副本才能领取翻牌奖励(也可设置站甲板即可翻牌)"
},
{
"type": "img",
"content": "12"
}
]
},
"imgPath": "Luke"
},
"世界地图修补": { "世界地图修补": {
"price": 0, "price": 0,
"Script": [ "Script": [
@ -846,6 +1001,7 @@
}, },
"成就系统": { "成就系统": {
"Private": true, "Private": true,
"Enabled": false,
"Script": [ "Script": [
"Project/Achievement/Achievement.nut" "Project/Achievement/Achievement.nut"
], ],
@ -858,6 +1014,7 @@
}, },
"新成就系统": { "新成就系统": {
"Private": true, "Private": true,
"Enabled": false,
"price": 999, "price": 999,
"Script": [ "Script": [
"Project/Achievement_New/Achievement_New.nut" "Project/Achievement_New/Achievement_New.nut"
@ -871,6 +1028,7 @@
}, },
"定制-交易行": { "定制-交易行": {
"Private": true, "Private": true,
"Enabled": false,
"price": 999, "price": 999,
"Script": [ "Script": [
"Project/Exchange/Exchange.nut", "Project/Exchange/Exchange.nut",
@ -885,6 +1043,7 @@
}, },
"桃花定制战力系统": { "桃花定制战力系统": {
"Private": true, "Private": true,
"Enabled": false,
"price": 999, "price": 999,
"Script": [ "Script": [
"Project/TH_CombatRank/TH_CombatRank.nut" "Project/TH_CombatRank/TH_CombatRank.nut"
@ -898,6 +1057,7 @@
}, },
"毁梦定制战力系统": { "毁梦定制战力系统": {
"Private": true, "Private": true,
"Enabled": false,
"price": 999, "price": 999,
"Script": [ "Script": [
"Project/HM_CombatRank/HM_CombatRank.nut" "Project/HM_CombatRank/HM_CombatRank.nut"
@ -911,6 +1071,7 @@
}, },
"宿命魂石": { "宿命魂石": {
"Private": true, "Private": true,
"Enabled": false,
"price": 999, "price": 999,
"Script": [ "Script": [
"Project/FatalismStone/FatalismStone_Stone.nut", "Project/FatalismStone/FatalismStone_Stone.nut",
@ -926,6 +1087,7 @@
}, },
"宽屏UI": { "宽屏UI": {
"Private": true, "Private": true,
"Enabled": false,
"Script": [ "Script": [
"Project/HudUi/HudUi.nut" "Project/HudUi/HudUi.nut"
], ],
@ -938,6 +1100,7 @@
}, },
"NPC交易": { "NPC交易": {
"Private": true, "Private": true,
"Enabled": false,
"Script": [ "Script": [
"Project/NpcTransaction/NpcTransaction.nut" "Project/NpcTransaction/NpcTransaction.nut"
], ],

View File

@ -0,0 +1,384 @@
/*
文件名: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) {}
*/

View File

@ -1,190 +0,0 @@
/*
文件名:FiendFightLogic.nut
路径:Plugins/Fiendwar/FiendFightLogic.nut
创建日期:2024-05-27 19:18
文件用途:超时空战斗逻辑
*/
class FiendFightLogicC {
//进入BOSS房间发包告诉服务端的Flag
IsBossActiveMsgPackFlag = false;
constructor() {
//注册回调包
Pack_Control.rawset(20063030, SetCharacterDamageRate.bindenv(this));
Pack_Control.rawset(20063600, CreatePassiveObjectById.bindenv(this));
Pack_Control.rawset(20063602, GetBossHp.bindenv(this));
Pack_Control.rawset(20063604, SetBossHp.bindenv(this));
Pack_Control.rawset(20063608, CheckMonsterIsV.bindenv(this));
}
//检测怪物是否存在
function CheckMonsterIsV(Chunk) {
if (!IsBossActiveMsgPackFlag) return;
local Jso = Json.Decode(Chunk);
local Idx = Jso.id;
local ObjectBuf = GetObjectByIndex(Idx);
if (!ObjectBuf) {
local T = {
op = 20063609,
id = Idx
}
Rindro_BaseToolClass.SendPack(T);
}
}
//设置BOSS生命值
function SetBossHp(Chunk) {
if (!IsBossActiveMsgPackFlag) return;
local Jso = Json.Decode(Chunk);
local BossObject = GetObjectByIndex(210994);
//没找到BOSS
if (!BossObject) {
local T = {
op = 20063605,
}
Rindro_BaseToolClass.SendPack(T);
} else {
BossObject.setHp(Jso.hp, null, true);
}
}
//获取BOSS生命值
function GetBossHp(Chunk) {
if (!IsBossActiveMsgPackFlag) return;
local BossObject = GetObjectByIndex(210994);
local curthp = -1;
local rmaxhp = -1;
//找到BOSS
if (BossObject) {
curthp = BossObject.getHp();
rmaxhp = BossObject.getHpMax();
}
local T = {
op = 20063603,
hp = curthp,
maxhp = rmaxhp
}
Rindro_BaseToolClass.SendPack(T);
}
//设置伤害值回调
function SetCharacterDamageRate(Chunk) {
local Jso = Json.Decode(Chunk);
local Rate = Jso.damageMarkup.tofloat() / 100.0;
//超时空伤害设置
if (getroottable().rawin("LenheartFiendModuleDamageRate")) {
getroottable()["LenheartFiendModuleDamageRate"] = Rate;
}
}
//召唤PassiveObject回调
function CreatePassiveObjectById(Chunk) {
local Jso = Json.Decode(Chunk);
local ObjectId = Jso.id;
local ZPos = Jso.z;
//确保在BOSS房间才召唤免得游戏崩溃
if (IsBossActiveMsgPackFlag) {
local obj = sq_GetMyMasterCharacter();
obj = sq_GetCNRDObjectToActiveObject(obj);
// obj.sq_SendCreatePassiveObjectPacket(ObjectId, 0, 99999990, 0, ZPos);
// sq_SendCreatePassiveObjectPacketFromPassivePos(obj, ObjectId, 0, 99999990, 0, ZPos);
sq_SendCreatePassiveObjectPacket(obj, ObjectId, 0, 99999990, 0, ZPos, obj.getDirection());
local Jso = {
op = 20063601,
id = ObjectId,
z = ZPos
}
Rindro_BaseToolClass.SendPack(Jso);
}
}
//获取指定对象
function GetObjectByIndex(Idx) {
local obj = sq_GetMyMasterCharacter();
obj = sq_GetCNRDObjectToActiveObject(obj);
local objectManager = obj.getObjectManager();
local CollisionObjectNumber = objectManager.getCollisionObjectNumber();
for (local i = 0; i< CollisionObjectNumber; i += 1) {
local object = objectManager.getCollisionObject(i);
if (object && object.isObjectType(OBJECTTYPE_ACTIVE)) {
local activeObj = sq_GetCNRDObjectToActiveObject(object);
local MonsterIndex = activeObj.getCollisionObjectIndex();
if (MonsterIndex == Idx) {
return activeObj;
}
}
}
return null;
}
//获取地图ID
function GetMapIndex() {
local stage = sq_GetGlobaludpModuleStage();
local MapIndex = sq_GetMapIndex(stage);
return MapIndex;
}
//检测是否在超时空BOSS图
function CheckBossIsActive() {
//如果在副本中
if (sq_GetCurrentModuleType() == 3) {
//在BOSS地图
if (GetMapIndex() == 24151) {
if (!IsBossActiveMsgPackFlag) {
IsBossActiveMsgPackFlag = true;
local Jso = {
op = 20063801
}
Rindro_BaseToolClass.SendPack(Jso);
return;
}
}
}
//退出副本以后设置flag 还原
else {
IsBossActiveMsgPackFlag = false;
}
}
//怪物死亡回调包
function MonsterDieCallBack(obj) {
//遍历怪物死亡
local objectManager = obj.getObjectManager();
local CollisionObjectNumber = objectManager.getCollisionObjectNumber();
for (local i = 0; i< CollisionObjectNumber; i += 1) {
local object = objectManager.getCollisionObject(i);
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && object.getTeam() != 0) {
local activeObj = sq_GetCNRDObjectToActiveObject(object);
if (activeObj.isDead()) {
local MonsterIndex = activeObj.getCollisionObjectIndex();
if (MonsterIndex >= 210994 && MonsterIndex <= 210999) {
local Jso = {
op = 20063503,
monster_id = MonsterIndex
}
Rindro_BaseToolClass.SendPack(Jso);
}
}
}
}
}
function Proc(obj) {
//如果进入BOSS房间需要告诉服务端
CheckBossIsActive();
//如果在和BOSS干架 要检测所有怪物的死亡
if (IsBossActiveMsgPackFlag) {
//怪物死亡检测
MonsterDieCallBack(obj);
}
}
}

View File

@ -1,328 +0,0 @@
/*
文件名:FiendReward.nut
路径:Plugins/Fiendwar/FiendReward.nut
创建日期:2024-05-13 10:03
文件用途:超时空奖励
*/
class FiendRewardC extends LenheartNewUI_Windows {
//调试模式
DeBugMode = true;
//默认显示状态需要是关闭 因为要通过收包打开
Visible = false;
//奖励信息
RewardInfo = null;
//奖励动画开始时间
AniStartFlag = null;
//收到奖励包
function RewardCallBack(Chunk) {
// Sout("收到请求加入包 : \n\n\n %L", Chunk);
local Jso = Json.Decode(Chunk);
RewardInfo = Jso;
Visible = true;
AniStartFlag = Clock();
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20063026, RewardCallBack.bindenv(this));
local T = {
op = 20063061,
}
Rindro_BaseToolClass.SendPackEx(T);
}
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);
}
AniName_Flag = 0;
AniActFlag = 0;
Ani_Title = null;
Ani_Time = null;
Ani_Time2 = null;
Ani_Card_1 = null;
Ani_Card_2 = null;
Ani_Card_Open_1 = null;
Ani_Card_Open_2 = null;
AniTimeStartFlag = 0;
AniRewardMyStartFlag = 0;
Ani_Card_All_1 = null;
Ani_Card_All_Open = null;
Ani_Card_All_Open_Gold = null;
AniRewardReloadFlag = 0;
AlphaValue = 0.0;
//绘制主界面
function DrawMain(obj) {
if (AniStartFlag) {
local ExiTime = Clock() - AniStartFlag;
//绘制背景
L_sq_DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 0, X + 0, Y + 0, 1, sq_RGBA(255, 255, 255, 150), 1.0, 1.0);
//标题一阶段
Ani_Title = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_title_00.ani", X + 188, Y + 30, "超时空奖励标题1" + AniName_Flag);
if (sq_IsEnd(Ani_Title)) {
if (AniActFlag == 0) AniActFlag = 1;
}
//时间二阶段
if (AniActFlag >= 1) {
Ani_Time = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_time.ani", X + 55, Y + 120, "超时空奖励标题2" + AniName_Flag);
if (sq_IsEnd(Ani_Time)) {
if (AniActFlag == 1) AniActFlag = 2;
}
}
//时间三阶段
if (AniActFlag >= 2) {
Ani_Time2 = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_rank_00.ani", X + 570, Y + 90, "超时空奖励标题3" + AniName_Flag);
if (sq_IsEnd(Ani_Time2)) {
//记录一下时间
if (AniActFlag == 2) {
AniTimeStartFlag = Clock();
AniActFlag = 3;
}
}
}
//时间四阶段
if (AniActFlag >= 3) {
local al = sq_GetUniformVelocity(0, 100, Clock() - AniTimeStartFlag, 1500);
AlphaValue = al.tofloat() / 100.0;
local RealTime = RewardInfo.time;
local seconds = RealTime / 10;
local hours = seconds / 3600;
local minutes = seconds / 60;
seconds %= 60;
hours = format("%02d", hours);
seconds = format("%02d", seconds).slice(-2);
minutes = format("%02d", minutes).slice(-2);
local Offset = -6;
DrawImg("hud/fiendwartime.img", hours.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
DrawImg("hud/fiendwartime.img", hours.slice(1).tointeger(), X + 260 + Offset, Y + 139);
DrawImg("hud/fiendwartime.img", 10, X + 286 + Offset, Y + 139);
Offset += 60;
DrawImg("hud/fiendwartime.img", minutes.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
DrawImg("hud/fiendwartime.img", minutes.slice(1).tointeger(), X + 260 + Offset, Y + 139);
DrawImg("hud/fiendwartime.img", 10, X + 286 + Offset, Y + 139);
Offset += 60;
DrawImg("hud/fiendwartime.img", seconds.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
DrawImg("hud/fiendwartime.img", seconds.slice(1).tointeger(), X + 260 + Offset, Y + 139);
Offset += 160;
local DieCount = RewardInfo.deathsNum;
local DrawDieStr = format("%02d", DieCount);
DrawImg("hud/fiendwartime.img", DrawDieStr.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
DrawImg("hud/fiendwartime.img", DrawDieStr.slice(1).tointeger(), X + 260 + Offset, Y + 139);
if (al >= 100) {
if (AniActFlag == 3) {
AniActFlag = 4;
}
}
}
//卡牌一阶段
if (AniActFlag == 4) {
Ani_Card_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_01.ani", X + 0, Y + 30, "超时空奖励个人第一张卡牌" + AniName_Flag);
Ani_Card_2 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_02.ani", X + 0, Y + 30, "超时空奖励个人第二张卡牌" + AniName_Flag);
if (sq_IsEnd(Ani_Card_1) && sq_IsEnd(Ani_Card_2)) {
if (AniActFlag == 4) AniActFlag = 5;
}
}
//卡牌二阶段
if (AniActFlag == 5) {
Ani_Card_Open_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 218, Y + 280, "超时空奖励个人第一张卡牌打开" + AniName_Flag);
Ani_Card_Open_2 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 406, Y + 280, "超时空奖励个人第二张卡牌打开" + AniName_Flag);
if (sq_IsEnd(Ani_Card_Open_1) && sq_IsEnd(Ani_Card_Open_2)) {
if (AniActFlag == 5) {
AniRewardMyStartFlag = Clock();
AniActFlag = 6;
}
}
}
//卡牌三阶段
if (AniActFlag == 6) {
local BackGroundFlag = 0;
if (RewardInfo.rewards[0].item == -1) BackGroundFlag = 1;
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 218, Y + 280);
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 406, Y + 280);
DrawItemEx(X + 290, Y + 342, RewardInfo.rewards[0].item, RewardInfo.rewards[0].num, RewardInfo.pid, 0, -10);
DrawItemEx(X + 478, Y + 342, RewardInfo.rewards[0].item2, RewardInfo.rewards[0].num2, RewardInfo.pid, 0, -10);
if ((Clock() - AniRewardMyStartFlag) >= 1500) {
AniActFlag = 7;
}
}
//卡牌四阶段
if (AniActFlag == 7) {
Ani_Card_All_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_00.ani", X + 0, Y + 0, "二阶段翻牌未翻开" + AniName_Flag);
if (sq_IsEnd(Ani_Card_All_1)) {
if (AniActFlag == 7) {
Ani_Card_All_Open = array(8);
Ani_Card_All_Open_Gold = array(8);
AniActFlag = 8;
}
}
}
//卡牌五阶段
if (AniActFlag == 8) {
for (local i = 0; i< 8; i++) {
Ani_Card_All_Open[i] = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 30 + ((i % 4) * 188), Y + 250 + ((i / 4) * 138), "超时空奖励团队卡牌打开" + "i" + AniName_Flag);
if (i<(RewardInfo.rewards2.len() - 1) && RewardInfo.rewards2[i][0].grade == 1) {
Ani_Card_All_Open_Gold[i] = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/gold_nomal.ani", X + 30 + ((i % 4) * 188), Y + 250 + ((i / 4) * 138), "超时空奖励团队卡牌打开金牌" + "i" + AniName_Flag);
}
}
if (sq_IsEnd(Ani_Card_All_Open[7])) {
if (AniActFlag == 8) {
AniActFlag = 9;
AniRewardReloadFlag = Clock();
}
}
}
//卡牌六阶段
if (AniActFlag == 9) {
for (local i = 0; i< 8; i++) {
DrawRewardCard(i);
}
//重置
if (Clock() - AniRewardReloadFlag >= 2000) {
AniActFlag = 0;
Ani_Title = null;
Ani_Time = null;
Ani_Time2 = null;
Ani_Card_1 = null;
Ani_Card_2 = null;
Ani_Card_Open_1 = null;
Ani_Card_Open_2 = null;
AniTimeStartFlag = 0;
AniRewardMyStartFlag = 0;
Ani_Card_All_1 = null;
Ani_Card_All_Open = null;
Ani_Card_All_Open_Gold = null;
AniRewardReloadFlag = 0;
AlphaValue = 0.0;
RewardInfo = null;
AniStartFlag = null;
AniName_Flag += 1;
CloseWindow();
}
}
}
}
function DrawRewardCard(Index) {
if (Index > (RewardInfo.rewards2.len() - 1)) {
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 24, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
return;
}
local Info = RewardInfo.rewards2[Index][0];
local BackGroundFlag = 0;
if (Info.count == 0) {
BackGroundFlag = 1;
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 0, -10);
}
if (Info.count == 1) {
if (Info.grade == 1)(BackGroundFlag = -5)
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 0, -10);
} else if (Info.count == 2) {
if (Info.grade == 1)(BackGroundFlag = -5)
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72 - 20, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 999999, 0);
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72 + 20, Y + 250 + ((Index / 4) * 138) + 62, Info.item2, Info.num2, Index, -20, -10);
}
}
ItemInfoDrawS = null;
//绘制道具相信信息
ItemObject = null;
//绘制道具带道具信息
function DrawItemEx(X, Y, Id, Count, Pid, Flag, Flag2) {
try {
if (Flag != 999999) {
local PartyMasterIcon = FiendwarTotal.GetInstance().MyTeam.MembersList[Pid];
local XOffset = -77 + Flag;
local YOffset = -31 + Flag2;
sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
//绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
releaseClip(); //裁切结束
}
local DrawName = PartyMasterIcon.InfoObj.Name;
//绘制名字
L_sq_DrawCode(DrawName, X + XOffset + 100 - LenheartTextClass.GetStringLength(DrawName) / 2, Y + YOffset + 4, sq_RGBA(247, 214, 90, 250), 0, 1);
}
if (Id != -1) {
local Rarity = AllItemInfoObject[Id].Rarity;
L_sq_DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 5 + Rarity, X - 3, Y - 3);
L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0);
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) {
ItemInfoDrawS = {};
ItemInfoDrawS.X <- X;
ItemInfoDrawS.Y <- Y;
ItemInfoDrawS.ItemId <- Id;
}
}
} catch (exception) {
}
}
//绘制悬停
function DrawItemInfoF(obj) {
if (ItemInfoDrawS) {
if (!ItemObject) {
local ItemId = ItemInfoDrawS.ItemId;
if (AllItemInfoObject.rawin(ItemId)) {
ItemObject = ItemInfoClass(AllItemInfoObject[ItemId]);
}
}
ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength);
} else {
ItemObject = null;
}
}
function DrawImg(Path, Index, XPos, YPos) {
L_sq_DrawImg(Path, Index, XPos, YPos, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
}
function Show(obj) {
ItemInfoDrawS = null;
DrawMain(obj);
// DrawItemInfoF(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
}

View File

@ -1,188 +0,0 @@
/*
文件名:Fiendwar.nut
路径:Project/Fiendwar/Fiendwar.nut
创建日期:2024-11-16 20:19
文件用途:
*/
dofile("sqr/Project/Fiendwar/FiendwarHall.nut"); //大厅
dofile("sqr/Project/Fiendwar/FiendwarHallParty.nut"); //大厅的队伍
dofile("sqr/Project/Fiendwar/FiendwarPartyInfo.nut"); //攻坚队具体信息窗口
dofile("sqr/Project/Fiendwar/FiendwarPartyMemberInfo.nut"); //攻坚队具体信息中的队员信息UI
dofile("sqr/Project/Fiendwar/FiendwarPlayerInteractive.nut"); //攻坚队玩家交互
dofile("sqr/Project/Fiendwar/FiendwarPartyFormation.nut"); //攻坚队具体信息中的编队
dofile("sqr/Project/Fiendwar/FiendwarHallCreateParty.nut");
dofile("sqr/Project/Fiendwar/FiendwarHallApplyJoin.nut");
dofile("sqr/Project/Fiendwar/FiendwarFightSituation.nut"); //战况表
dofile("sqr/Project/Fiendwar/FiendwarHallGoBossDgn.nut"); //前往BOSS框
dofile("sqr/Project/Fiendwar/FiendwarNoti.nut"); //超时空信息分发
dofile("sqr/Project/Fiendwar/FiendReward.nut"); //超时空奖励
dofile("sqr/Project/Fiendwar/FiendFightLogic.nut"); //战斗逻辑
class FiendwarTotal extends Rindro_BaseToolClass {
//基础配置
BaseConfig = null;
/*
town_index 城镇编号
channel_index 频道编号
*/
//我的客户端cid
MyCid = null;
//我的攻坚队ID
MyPartyId = null;
//我是否是攻坚队队长
IsCaptain = null;
//我的队伍
MyTeam = null;
//开始攻坚动画
StartAniFlag = false;
//攻坚结束时间
EndTime = null;
PackCurT = null;
//全局获取对象方法
function GetInstance() {
if (getroottable().rawin("FiendwarCObj"))
return getroottable()["FiendwarCObj"];
else {
local RootTab = getroottable();
local Cobj = FiendwarTotal();
RootTab.rawset("FiendwarCObj", Cobj);
Cobj.InitWindow();
return Cobj;
}
}
//请求基础信息配置
function GetFiendwarBase() {
local T = {
op = 20063501,
}
SendPack(T);
}
//请求掉线配置信息
function GetFiendwarDown() {
local T = {
op = 20063063,
}
SendPack(T);
}
//基础信息配置
function FiendwarBase(Chunk) {
BaseConfig = Json.Decode(Chunk);
FiendwarChannelTownLogicCallBack();
}
//团本专属频道上线城镇移动包
function FiendwarChannelTownLogicCallBack() {
if (BaseConfig.channel_index.find("20")) {
if (L_sq_GetTownIndex() != BaseConfig.town_index) {
L_sq_MoveTown(BaseConfig.town_index, 0, 474, 249);
}
} else {
//在超时空区域的 要转移回普通城镇
if (L_sq_GetTownIndex() == BaseConfig.town_index) {
L_sq_MoveTown(1, 1, 474, 249);
}
}
}
//开团Flag包
function StartFight(Chunk) {
FiendwarTotal.GetInstance().StartAniFlag = true;
}
FiendwarHallC_Window = null;
FiendwarFightSituationSwitchC_Window = null;
FiendwarNotiC_Window = null;
FiendRewardC_Window = null;
FiendFightLogicC_Object = null;
constructor() {
//获取基础配置回调包
Pack_Control.rawset(20063502, FiendwarBase.bindenv(this));
Pack_Control.rawset(20063028, StartFight.bindenv(this));
//第一次上线要重新请求一下位置信息
GetFiendwarBase();
//请求掉线配置信息
GetFiendwarDown();
}
//初始化窗口
function InitWindow() {
FiendwarHallC_Window = LenheartNewUI_CreateWindow(FiendwarHallC, "超时空攻坚队伍列表", 320, 40, 478, 434, 18);
FiendwarFightSituationSwitchC_Window = LenheartNewUI_CreateWindow(FiendwarFightSituationSwitchC, "超时空战况表开关", 770, 9, 30, 30, 0);
FiendwarNotiC_Window = LenheartNewUI_CreateWindow(FiendwarNotiC, "超时空攻坚队伍消息分发", 0, 0, 0, 0, 0);
FiendRewardC_Window = LenheartNewUI_CreateWindow(FiendRewardC, "超时空奖励界面", 0, 0, 800, 600, 0);
FiendFightLogicC_Object = FiendFightLogicC();
}
function ClearInfo() {
//我的客户端cid
MyCid = null;
//我的攻坚队ID
MyPartyId = null;
//我是否是攻坚队队长
IsCaptain = null;
//我的队伍
MyTeam = null;
//开始攻坚动画
StartAniFlag = false;
//攻坚结束时间
EndTime = null;
PackCurT = null;
}
function Proc(obj) {
//开始攻坚动画
if (FiendwarTotal.GetInstance().StartAniFlag) {
local Ani = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/common/title/start_back.ani", 400, 260, "超时空开始攻坚Ani1");
if (sq_IsEnd(Ani)) {
FiendwarTotal.GetInstance().StartAniFlag = false;
sq_Rewind(Ani);
}
}
if (FiendFightLogicC_Object) FiendFightLogicC_Object.Proc(obj);
}
}
getroottable().rawdelete("FiendwarCObj");
function LenheartFiendwar(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("FiendwarCObj")) {
local Cobj = FiendwarTotal();
RootTab.rawset("FiendwarCObj", Cobj);
Cobj.InitWindow();
} else {
RootTab["FiendwarCObj"].Proc(obj);
}
}
if (getroottable().rawin("LenheartTopFuncTab")) {
getroottable()["LenheartTopFuncTab"].rawset("LenheartFiendwarFunc", LenheartFiendwar);
} else {
local T = {};
T.rawset("LenheartFiendwarFunc", LenheartFiendwar);
getroottable().rawset("LenheartTopFuncTab", T);
}

View File

@ -1,696 +0,0 @@
/*
文件名:FiendwarFightSituation.nut
路径:Plugins/Fiendwar/FiendwarFightSituation.nut
创建日期:2024-04-10 21:28
文件用途:超时空攻坚战况
*/
//复选框
class Fiendwar_LenheartNewUI_SwitchButton extends LenheartNewUI_CommonUi {
//透明度
AlphaValue = 1.0;
State = 0;
ImgIndex = null;
constructor(X, Y) {
LenheartNewUI_CommonUi.constructor(X, Y, 14, 15);
}
function SyncAlpha(Value) {
AlphaValue = Value;
}
function Show(obj) {
//不可用
if (State == 8) {
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 3 : 141, X, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
} else {
//悬停
if (isLBDown) {
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
}
//按下
else if (isInRect) {
if (State == 0)
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 1 : 139, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
if (State == 1)
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
}
//普通
else {
if (State == 0)
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex : 138, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
if (State == 1)
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
}
}
}
}
class Fiendwar_LenheartNewUI_ProgressIndicator extends LenheartNewUI_CommonUi {
//透明度
AlphaValue = 1.0;
//宽
DWidth = null;
//控制者
Controller = 0;
//回调函数
OnChangeControl = null;
//球的偏移 因为除不尽 所以这个最好单独写
BXposOffset = 0;
constructor(X, Y, W, H) {
this.DWidth = W;
LenheartNewUI_CommonUi.constructor(X, Y, W, H);
}
function Show(obj) {
//绘制左
L_sq_DrawImg("hud/fiendwarl.img", 19, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
local OffserIndex = 0;
//绘制中
for (local i = 0; i< this.DWidth; i++) {
if (i > (Controller * this.DWidth).tointeger())
OffserIndex = 0;
else OffserIndex = 1;
L_sq_DrawImg("hud/fiendwarl.img", 21 + OffserIndex, X + 8 + i, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
}
//绘制右
L_sq_DrawImg("hud/fiendwarl.img", 20, X + 8 + this.DWidth, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
// local BXposOffset = 0;
// if (BaseX && EndX) BXposOffset = EndX - BaseX;
//绘制球
L_sq_DrawImg("hud/fiendwarl.img", 23, X + BXposOffset + 1, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
}
//按下时的基准X
BaseX = null;
EndX = null;
//鼠标左键按下回调
function OnMouseLbDown(MousePos_X, MousePos_Y) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + BXposOffset + 1, Y + 1, 15, 14)) {
isLBDown = true;
if (!BaseX) BaseX = MousePos_X;
}
}
//鼠标事件回调
function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
if (isLBDown && Flag == 1) {
if (MousePos_X > (X + DWidth + 8))
MousePos_X = (X + DWidth + 8);
else if (MousePos_X<(X + 8))
MousePos_X = (X + 8);
EndX = MousePos_X;
if (BaseX && EndX) {
BXposOffset = EndX - BaseX;
Controller = BXposOffset.tofloat() / DWidth.tofloat();
AlphaValue = Controller;
if (AlphaValue< 0.4) AlphaValue = 0.4;
if (OnChangeControl) OnChangeControl(Controller);
}
}
}
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
isLBDown = false;
}
}
class FiendwarFightSituationC extends LenheartNewUI_Windows {
Visible = false;
//调试模式
// DeBugMode = true;
//透明度
AlphaValue = 1.0;
//简易战况表复选框
BaseSituationBtn = null;
//简易战况表是否开启
BaseSituationFlag = 0;
//雷达是否存在
RadarFlag = true;
//turret2
turret2 = true;
MonsterFace = {
m20413 = 1,
m20412 = 3,
m20411 = 4,
m20415 = 15,
m20408 = 9,
m20409 = 8,
m20405 = 5,
m20404 = 6,
m20406 = 12,
m20401 = 13,
m20402 = 10,
m20403 = 11,
};
SlotPos = [
[50, 479],
[50, 374],
[50, 270],
[140, 167],
[186, 89],
[275, 36],
[275, 141],
[411, 11],
[365, 88],
[455, 141],
[545, 36],
[141, 427],
[185, 348],
[185, 245],
[321, 271],
[411, 219],
[546, 245],
[591, 166],
[141, 530],
[276, 505],
[320, 375],
[410, 478],
[546, 504],
[456, 401],
[681, 478],
[545, 348],
[680, 374],
[725, 244],
[690, 53],
[727, 129],
]
Info = null;
PackCurT = null;
EndTime = null;
function InfoCallBack(Chunk) {
// print(Chunk);
local Jso = Json.Decode(Chunk);
Info = Jso.fightInfo.platVos;
EndTime = Jso.fightInfo.endTime;
RadarFlag = Jso.fightInfo.radar;
turret2 = Jso.fightInfo.turret2;
FiendwarTotal.GetInstance().EndTime = Jso.fightInfo.endTime;
local Pt = Clock();
PackCurT = Pt;
FiendwarTotal.GetInstance().PackCurT = Pt;
local Win = LenheartNewUI_CreateWindow(FiendwarPartyInfoC, "超时空我的队伍窗口", 430, 15, 354, 290, 18);
Win.CloseWindow();
local Win = LenheartNewUI_CreateWindow(FiendwarHallC, "超时空攻坚队伍列表", 320, 40, 478, 434, 18);
Win.CloseWindow();
}
//收到进入BOSS请求包
function GoBossCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
local Win = LenheartNewUI_CreateWindow(FiendwarHallGoBossDgnC, "超时空攻坚进入罗什", 273, 225, 270, 120, 19);
Win.Visible = true;
Win.Dark = Jso.boss1;
Win.Light = Jso.boss2;
Win.RegisterWidget();
}
PlayerGiveUpTime = null;
PlayerGiveUpFlagTime = null;
//放弃副本包
function PlayerGiveUpCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
PlayerGiveUpTime = Jso.endTime;
PlayerGiveUpFlagTime = Clock();
}
function GetInfo() {
local T = {
op = 20063053,
// teamsId = FiendwarTotal.GetInstance().MyPartyId
}
Rindro_BaseToolClass.SendPackEx(T);
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20063016, InfoCallBack.bindenv(this));
Pack_Control.rawset(20063022, GoBossCallBack.bindenv(this));
Pack_Control.rawset(20063024, PlayerGiveUpCallBack.bindenv(this));
GetInfo();
}
function RegisterWidget() {
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(770, 0, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
CloseButton.OnClick = function() {
local Win = LenheartNewUI_CreateWindow(FiendwarFightSituationSwitchC, "超时空战况表开关", 770, 9, 30, 30, 0);
Win.ResetFocus();
this.Visible = false;
}.bindenv(this);
Childrens.append(CloseButton);
local PIButton = Fiendwar_LenheartNewUI_ProgressIndicator(264, 11, 80, 10);
PIButton.Controller = 1.0;
PIButton.BaseX = 273;
PIButton.EndX = 352;
PIButton.BXposOffset = 79;
PIButton.OnChangeControl = function(Controller) {
AlphaValue = Controller;
if (AlphaValue< 0.4) AlphaValue = 0.4;
}.bindenv(this);
Childrens.append(PIButton);
//简易战况表复选框
BaseSituationBtn = Fiendwar_LenheartNewUI_SwitchButton(198, 9);
BaseSituationBtn.State = 0;
BaseSituationBtn.ImgIndex = 358;
BaseSituationBtn.Width = 19;
BaseSituationBtn.Height = 19;
BaseSituationBtn.OnClick = function() {
switch (BaseSituationFlag) {
case 0:
BaseSituationFlag = 1;
break;
case 1:
BaseSituationFlag = 0;
break;
}
BaseSituationBtn.State = BaseSituationFlag;
}.bindenv(this);
AddChild(BaseSituationBtn);
}
//绘制简易动态Ani // obj -- ani路径 -- X -- Y -- ani名字
function T_DrawDynamicAni(obj, aniFileName, x, y, aniname, Alpha) {
local ani = obj.getVar().GetAnimationMap(aniname, aniFileName);
ani.setRGBA(255, 255, 255, Alpha);
sq_AnimationProc(ani);
sq_drawCurrentFrame(ani, x, y, true);
return ani;
}
function DrawParty() {
//绘制我的队伍
if (FiendwarTotal.GetInstance().MyTeam) {
local Mt = FiendwarTotal.GetInstance().MyTeam;
if (!Mt) return;
local PartyMaster;
foreach(index, PartyMasterIcon in Mt.MembersList) {
local XOffset = 0;
local YOffset = 9 + (index * 22);
DrawImg("interface2/fiendwar_kr/navigation/partyseatnumber.img", 0, X + XOffset + 10, Y + YOffset);
DrawImg("interface2/fiendwar_kr/navigation/partyseatnumber.img", PartyMasterIcon.InfoObj.TeamId, X + XOffset + 10, Y + YOffset + 1);
sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
//绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
releaseClip(); //裁切结束
}
local RgbaValue = sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger());
if (PartyMasterIcon.InfoObj.Captain) RgbaValue = sq_RGBA(247, 214, 90, (250 * AlphaValue).tointeger());
if (PartyMasterIcon.InfoObj.Captain) DrawImg("hud/fiendwarl.img", 18, X + 42 + XOffset, Y + 1 + YOffset);
local DrawName = PartyMasterIcon.InfoObj.Name;
if (PlayerGiveUpTime && PlayerGiveUpTime[index]) {
local STime = ((PlayerGiveUpTime[index] - (Clock() - PlayerGiveUpFlagTime)) / 1000);
DrawName = "复活时间: " + STime.tostring() + "秒";
if (STime <= 0) DrawName = PartyMasterIcon.InfoObj.Name;
}
//绘制名字
L_sq_DrawCode(DrawName, X + XOffset + 58, Y + YOffset + 4, RgbaValue, 0, 1);
}
}
}
//绘制主界面
function DrawMain(obj) {
//绘制背景框
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 0, X + 7, Y);
//绘制建议进度表文字
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 71, X + 130, Y + 10);
//绘制透明度文字
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 72, X + 220, Y + 10);
DrawParty();
//Boss底层特效
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/boss_effect.ani", X + 720, Y + 110, "超时空战况表背景图BOSS区域", (250 * AlphaValue).tointeger());
//下路特效
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linebottom.ani", X + 7, Y, "超时空战况表背景图下路特效B");
//中路特效
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linemiddle.ani", X + 7, Y, "超时空战况表背景图中路特效B");
//上路特效
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linetop.ani", X + 7, Y, "超时空战况表背景图上路特效B");
//绘制地图
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 64, X + 7, Y + 1);
if (Info) {
foreach(Index, Value in Info) {
if (Value.id != -1) {
//裁切比例
local SliceRate = 0;
if (Value.e && Value.s) {
SliceRate = (Value.e.tofloat() - (Clock().tofloat() - PackCurT.tofloat())) / Value.s.tofloat();
}
//BOSS暗
if (Value.id == 28) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 60, X - 68 + SlotPos[Value.id][0], Y - 56 + SlotPos[Value.id][1]);
}
//BOSS光
else if (Value.id == 29) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 61, X - 68 + SlotPos[Value.id][0], Y - 56 + SlotPos[Value.id][1]);
}
//兵营
else if (Value.id == 10 || Value.id == 17 || Value.id == 27) {
local Offset = 0;
if (!Value.m) Offset = 7;
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 5 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
//复活
if (!Value.m) {
if (SliceRate != 0) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 55, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
}
}
//生成小怪
else {
if (SliceRate != 0) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 54, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
}
}
}
//前哨
else if (Value.id == 7 || Value.id == 15 || Value.id == 24) {
local Offset = 0;
if (!Value.m) Offset = 7;
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 4 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
if (SliceRate != 0) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 54, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
}
} else if (Value.id == 6 || Value.id == 23) {
//雷达
if (Value.id == 6) {
local Offset = 0;
if (!Value.m) Offset = 7;
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 2 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
}
//炮塔
else if (Value.id == 23) {
local Offset = 0;
if (!Value.m) Offset = 7;
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 3 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
}
}
//基地和出发点一定有框
if (Value.id == 0 || Value.id == 1 || Value.id == 11 || Value.id == 18) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
//基地两边都画
if (Value.id == 0) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X - 30 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X + 33 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
}
} else {
//有怪物
if (Value.m || Value.n) {
if (Value.m) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 27, X + 36 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
//如果不是这些 那就是移动怪 并且活着
if (Value.id != 10 && Value.id != 17 && Value.id != 27 && Value.id != 28 && Value.id != 29 && Value.id != 7 && Value.id != 15 && Value.id != 24 && Value.id != 6 && Value.id != 23 && !Value.n) {
//没人打
if (Value.u.len()< 1) {
if (SliceRate != 0) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 56, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
DrawProgress(52, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
}
}
//战斗中
else {
if (SliceRate != 0) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 53, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
DrawProgress(49, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
}
}
}
} else if (Value.n) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 59, X + 36 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
}
DrawImg("interface2/fiendwar_kr/navigation/monsterface.img", 14, X + 37 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 98, X + 38 + SlotPos[Value.id][0], Y + 37 + SlotPos[Value.id][1]);
}
}
//如果有玩家
if (Value.u.len() >= 1) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X - 30 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
//说明有战斗
if (Value.m) {
//战斗特效
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/hexagon_ef_red.ani", X - 32 + SlotPos[Value.id][0], Y - 25 + SlotPos[Value.id][1], "超时空战况表战斗方格", (250 * AlphaValue).tointeger());
} else {
//TODO 这里判断有没有商人 没有商人画绿色 有画黄色
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/hexagon_ef_green.ani", X - 32 + SlotPos[Value.id][0], Y - 25 + SlotPos[Value.id][1], "超时空战况表安全方格", (250 * AlphaValue).tointeger());
}
//绘制队伍编号
foreach(index, pos in Value.u) {
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 28 + pos, X - 24 + SlotPos[Value.id][0], Y + (index * 11) + 2 + SlotPos[Value.id][1]);
}
}
//雷达死完要绘制怪物头像
if (!RadarFlag) {
if (Value.m || Value.n) {
local ImgIndex = 0;
if (Value.m && MonsterFace.rawin("m" + Value.m)) ImgIndex = MonsterFace["m" + Value.m];
DrawImg("interface2/fiendwar_kr/navigation/monsterface.img", ImgIndex, X + 37 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
}
}
}
}
}
DrawFightTime(obj);
}
function DrawImg(Path, Index, XPos, YPos) {
L_sq_DrawImg(Path, Index, XPos, YPos, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
}
function DrawProgress(Index, SliceRate, X, Y) {
if (!turret2) return;
if (RadarFlag) SliceRate = 1.0;
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 48, X, Y);
setClip(X, Y, X + (SliceRate * 61.0).tointeger(), Y + 3); //开始裁切
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", Index, X, Y);
releaseClip(); //裁切结束
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//攻坚时间
function DrawFightTime(obj) {
L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 47, X + 576, Y - 9);
if (EndTime) {
local RealTime = EndTime - (Clock() - PackCurT);
local seconds = RealTime / 1000;
local hours = seconds / 3600;
local minutes = seconds / 60;
seconds %= 60;
hours = format("%02d", hours);
seconds = format("%02d", seconds).slice(-2);
minutes = format("%02d", minutes).slice(-2);
local Offset = 0;
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(1).tointeger(), X + 669 + Offset, Y + 2);
Offset += 38;
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(1).tointeger(), X + 669 + Offset, Y + 2);
Offset += 38;
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(1).tointeger(), X + 669 + Offset, Y + 2);
}
}
MainButton = null;
//逻辑入口
function Proc(obj) {
//在基地
if (L_sq_GetRegionIndex() == 2) DrawParty();
if (getroottable().rawin("FiendwarTotal") && FiendwarTotal.GetInstance().EndTime) {
DrawFightTime(obj);
L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 13, X + 770, Y);
}
// //界面未打开
// if (!this.Visible) {
// //在甲板
// if (FiendwarTotal.GetInstance().BaseConfig && FiendwarTotal.GetInstance().BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == FiendwarTotal.GetInstance().BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) {
// if (!MainButton) {
// MainButton = LenheartBaseButton(X + 770, Y, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
// } else {
// MainButton.Show();
// if (MainButton.isLBActive()) {
// this.Visible = true;
// GetInfo();
// }
// }
// }
// }
LenheartNewUI_Windows.SyncPos(X, Y);
}
}
/*
文件名:FiendwarHallCreateParty.nut
路径:Plugins/Fiendwar/FiendwarHallCreateParty.nut
创建日期:2024-03-18 13:20
文件用途:
*/
class FiendwarFightSituationSwitchC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不要窗口模式
NoWindow = true;
function GetInfo() {
local T = {
op = 20063053,
// teamsId = FiendwarTotal.GetInstance().MyPartyId
}
Rindro_BaseToolClass.SendPackEx(T);
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(0, 0, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
CloseButton.OnClick = function() {
local Win = LenheartNewUI_CreateWindow(FiendwarFightSituationC, "超时空攻坚战况表", 0, 8, 800, 600, 0);
Win.Visible = true;
Win.ResetFocus();
GetInfo();
}.bindenv(this);
AddChild(CloseButton);
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
//绘制主界面
function DrawMain(obj) {
if (FiendwarTotal.GetInstance().EndTime)
DrawFightTime(obj);
}
//攻坚时间
function DrawFightTime(obj) {
L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 47, X + 576, Y - 9);
if (FiendwarTotal.GetInstance().EndTime) {
local RealTime = FiendwarTotal.GetInstance().EndTime - (Clock() - FiendwarTotal.GetInstance().PackCurT);
local seconds = RealTime / 1000;
local hours = seconds / 3600;
local minutes = seconds / 60;
seconds %= 60;
hours = format("%02d", hours);
seconds = format("%02d", seconds).slice(-2);
minutes = format("%02d", minutes).slice(-2);
local Offset = 0;
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(1).tointeger(), X + 669 + Offset, Y + 2);
Offset += 38;
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(1).tointeger(), X + 669 + Offset, Y + 2);
Offset += 38;
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(1).tointeger(), X + 669 + Offset, Y + 2);
}
}
function CloseWindow() {
// print(1233);
// local Win = LenheartNewUI_CreateWindow(FiendwarFightSituationSwitchC, "超时空战况表开关", 770, 9, 30, 30, 0);
// Win.Visible = true;
// Win.ResetFocus();
// LenheartNewUI_Windows.CloseWindow();
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
if (!FiendwarTotal.GetInstance().EndTime) {
Visible = false;
} else {
Visible = true;
}
LenheartNewUI_Windows.SyncPos(X, Y);
}
}
LenheartNewUI_CreateWindow(FiendwarFightSituationC, "超时空攻坚战况表", 0, 8, 800, 600, 0);

View File

@ -1,406 +0,0 @@
/*
文件名:FiendwarHall.nut
路径:Plugins/Fiendwar/FiendwarHall.nut
创建日期:2024-03-11 12:54
文件用途:超时空之战大厅
*/
class FiendwarHallC extends LenheartNewUI_Windows {
// DeBugMode = true;
WindowObj = null; //窗口对象
MainState = false; //主状态
X = 320;
Y = 40;
//默认显示状态需要是关闭 因为要通过按钮打开
Visible = false;
//攻坚队List
PartyList = null;
function GetInstance() {
return getroottable()["FiendwarHallCObj"];
}
//获取所有队伍回调包
function GetAllTeamCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
//清除原来的List PartyList可以直接清除 但是Childrens中的窗口需要调用底层方法清除队伍类
PartyList = [];
// this.RemoveChilds(FiendwarHallPartyC);
//遍历包构造攻坚队UI对象
foreach(TeamsSimple in Jso.TeamSimList) {
local T = {
TeamId = TeamsSimple.TeamId.tostring(),
TeamName = TeamsSimple.TeamName,
TeamPlayerCount = TeamsSimple.TeamPlayerCount,
State = TeamsSimple.State
}
local TeamBuf = FiendwarHallPartyC(T);
AddChild(TeamBuf);
PartyList.append(TeamBuf);
}
//收到刷新队伍列表包时需要将队伍窗口关闭
if ("Close" in Jso) LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
// RemoveChilds(FiendwarHallPartyC, false);
}
//获取攻坚队信息回调
function GetTeamInfoCallBack(Chunk) {
// Sout("收到包 : \n %L", Chunk);
local Jso = Json.Decode(Chunk);
LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
local Win = LenheartNewUI_CreateWindow(FiendwarPartyInfoC, "超时空我的队伍窗口", 430, 15, 354, 290, 18);
FiendwarTotal.GetInstance().MyTeam = Win;
Win.Visible = false;
if (!("Close" in Jso)) {
//开启队伍窗口显示
Win.Visible = true;
//设置置顶
Win.ResetFocus();
}
//清空成员对象集合
Win.MembersList = [];
//清空是否为我的队伍状态
Win.IsMyTeam = false;
//清空是否为队长状态
Win.IsCaptain = false;
//赋值队伍名称
Win.TeamName = Jso.team.TeamName;
//赋值队伍ID
Win.TeamID = Jso.team.TeamId;
//遍历Team包 用于构造队伍窗口中的每一位成员
foreach(_index, MemberObj in Jso.team.characNum) {
//说明我在这个攻坚队里
if (Jso.cid == MemberObj.CID) {
Win.IsMyTeam = true;
local Fo = FiendwarTotal.GetInstance();
//向全局类存入我的攻坚队伍ID
Fo.MyPartyId = Jso.team.TeamId;
//存入我的CID
Fo.MyCid = Jso.cid;
//说明是队长
if (Jso.cid == Jso.team.captainCid) {
Win.IsCaptain = true;
//存入我是攻坚队队长
Fo.IsCaptain = true;
}
}
local T = {
PartyId = Jso.team.TeamId, //攻坚队ID
TeamId = MemberObj.characNum + 1, //小队编号
Level = MemberObj.PlayerLevel.tostring(), //等级
Name = MemberObj.PlayerName, //名字
JobName = MemberObj.PlayerGrowTypeJob, //职业名
Job = MemberObj.PlayerJob, //职业编号
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
EquVos = MemberObj.equVos, //装备List 用于显示头像
Captain = MemberObj.CaptainBool, //是否为攻坚队队长
Cid = MemberObj.CID, //Cid
OnlineState = MemberObj.onLineStart, //在线状态
ExitTime = MemberObj.exitTime, //离队时间
PlayerSession = MemberObj.PlayerSession, //玩家在世界中的Session 用于进行原生用户操作
ClearanceCount = MemberObj.ClearanceCount, //通关次数
ClearanceCountMax = Jso.ClearanceCountMax, //总通关次数
}
//通过类构造并添加队伍成员UI对象
local TeamBuf = FiendwarPartyInfoMemberC(T);
Win.AddChild(TeamBuf);
Win.MembersList.append(TeamBuf);
}
//刷新界面
Win.RegisterWidget();
//刷新自己的界面
RegisterWidget();
}
//获取所有队伍
function GetAllTeamCall() {
local Jso = {
op = 20063011
}
SendPack(Jso);
}
//退出队伍回调
function ExitPartyCallBack(Chunk) {
LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
FiendwarTotal.GetInstance().ClearInfo();
local Win = LenheartNewUI_CreateWindow(FiendwarHallC, "超时空攻坚队伍列表", 320, 40, 478, 434, 18);
Win.CloseWindow();
RegisterWidget();
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
PartyList = [];
//注册控件
RegisterWidget();
//注册回调包
Pack_Control.rawset(20063002, GetAllTeamCallBack.bindenv(this));
Pack_Control.rawset(20063004, GetTeamInfoCallBack.bindenv(this));
Pack_Control.rawset(20063008, ExitPartyCallBack.bindenv(this));
GetAllTeamCall();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
OnlyPreparingBtn = null;
OnlyPreparingFlag = 1;
InputObject = null;
function RegisterWidget() {
RemoveChilds(FiendwarHallPartyC, false);
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(457, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
CloseWindow();
}.bindenv(this);
AddChild(CloseButton);
//我的频道复选框
local MyChannelBtn = LenheartNewUI_SwitchButtonText(16, 30, "我的频道");
MyChannelBtn.State = 1;
MyChannelBtn.ImgIndex = 358;
MyChannelBtn.SetTextPos(12, 2);
MyChannelBtn.Width = 76;
MyChannelBtn.Height = 16;
AddChild(MyChannelBtn);
//只查看招募中的攻坚队
OnlyPreparingBtn = LenheartNewUI_SwitchButtonText(110, 30, "只查看招募中的攻坚队");
OnlyPreparingBtn.ImgIndex = 358;
OnlyPreparingBtn.SetTextPos(12, 2);
OnlyPreparingBtn.Width = 76;
OnlyPreparingBtn.Height = 16;
OnlyPreparingBtn.OnClick = function() {
switch (OnlyPreparingFlag) {
case 0:
OnlyPreparingFlag = 1;
break;
case 1:
OnlyPreparingFlag = 0;
break;
}
OnlyPreparingBtn.State = OnlyPreparingFlag;
}.bindenv(this);
AddChild(OnlyPreparingBtn);
//搜索队伍输入框
InputObject = LenheartNewUI_BaseInput(260, 31, 80, 20);
AddChild(InputObject);
//搜索按钮
local FindButton = LenheartNewUI_ButtonText(348, 28, 5, "搜索");
FindButton.SetTextOffset(0, 1);
FindButton.OnClick = function() {
if (InputObject.str.len() > 0) {
}
}.bindenv(this);
AddChild(FindButton);
//重置按钮
local ResetButton = LenheartNewUI_ButtonText(408, 28, 5, "重置");
ResetButton.SetTextOffset(0, 1);
ResetButton.OnClick = function() {
InputObject.str = "";
}.bindenv(this);
AddChild(ResetButton);
//编号按钮
local ModelButton = LenheartNewUI_ButtonText(9, 56, -18, "编号");
ModelButton.Idx = 163;
ModelButton.DWidth = -8;
ModelButton.SetTextOffset(-9, 1);
AddChild(ModelButton);
//状态按钮
local StateButton = LenheartNewUI_ButtonText(51, 56, -18, "状态");
StateButton.Idx = 163;
StateButton.DWidth = -8;
StateButton.SetTextOffset(-9, 1);
AddChild(StateButton);
//频道按钮
local ChannelButton = LenheartNewUI_ButtonText(93, 56, -18, "频道");
ChannelButton.Idx = 163;
ChannelButton.DWidth = -8;
ChannelButton.SetTextOffset(-9, 1);
AddChild(ChannelButton);
//攻坚队名称按钮
local PartyNameButton = LenheartNewUI_ButtonText(135, 56, 100, "攻坚队名称");
PartyNameButton.Idx = 163;
PartyNameButton.DWidth = 223;
PartyNameButton.FillWidth = 1;
PartyNameButton.FirstWidth = 21;
PartyNameButton.SetTextOffset(26, 1);
AddChild(PartyNameButton);
//阶段按钮
local StageButton = LenheartNewUI_ButtonText(289, 56, 52, "阶段");
StageButton.Idx = 163;
StageButton.DWidth = 140;
StageButton.FillWidth = 1;
StageButton.FirstWidth = 21;
StageButton.SetTextOffset(26, 1);
AddChild(StageButton);
//队员数量按钮
local TeammembersButton = LenheartNewUI_ButtonText(402, 56, 50, "队员数量");
TeammembersButton.Idx = 163;
TeammembersButton.FillWidth = 1;
TeammembersButton.FirstWidth = 21;
TeammembersButton.DWidth = 47;
TeammembersButton.SetTextOffset(-8, 1);
AddChild(TeammembersButton);
//创建攻坚队按钮
local CreateOrMyPartyStr = "创建攻坚队";
if (FiendwarTotal.GetInstance().MyPartyId) CreateOrMyPartyStr = "我的攻坚队";
local MyPartyButton = LenheartNewUI_ButtonText(15, 395, 30, CreateOrMyPartyStr);
MyPartyButton.SetTextOffset(-6, 1);
MyPartyButton.OnClick = function() {
if (FiendwarTotal.GetInstance().MyPartyId) {
//发送查看攻坚队具体信息包
local T = {
op = 20063013,
teamsId = FiendwarTotal.GetInstance().MyPartyId
}
Rindro_BaseToolClass.SendPackEx(T);
} else {
local Win = LenheartNewUI_CreateWindow(FiendwarHallCreatePartyC, "超时空创建队伍窗口", 290, 220, 284, 154, 18);
Win.Visible = true;
Win.ResetFocus();
}
}.bindenv(this);
AddChild(MyPartyButton);
//左翻页按钮
local LeftButton = LenheartNewUI_BaseButton(160, 400, 15, 15, "interface/lenheartwindowcommon.img", 34);
LeftButton.OnClick = function() {
if (Page > 0) Page--;
}.bindenv(this);
AddChild(LeftButton);
//右翻页按钮
local RightButton = LenheartNewUI_BaseButton(220, 400, 15, 15, "interface/lenheartwindowcommon.img", 38);
RightButton.OnClick = function() {
if (Page<(((PartyList.len() / PageMaxCount)))) Page++;
}.bindenv(this);
AddChild(RightButton);
//进入待机按钮
local FQButton = LenheartNewUI_ButtonText(300, 394, 20, "进入待机");
FQButton.SetTextOffset(-5, 2);
FQButton.State = 8;
AddChild(FQButton);
//刷新按钮
local RefreshButton = LenheartNewUI_BaseButton(410, 395, 25, 25, "interface/lenheartwindowcommon.img", 366);
RefreshButton.OnClick = function() {
GetAllTeamCall();
}.bindenv(this);
AddChild(RefreshButton);
//设置按钮
local SettingButton = LenheartNewUI_BaseButton(440, 394, 15, 15, "interface/lenheartwindowcommon.img", 362);
SettingButton.State = 8;
AddChild(SettingButton);
}
function DrawMainBackGround(obj) {
//Item信息框一般为211的宽度
L_sq_DrawWindow(X, Y + 10, 540 * 0.85, 420 * 0.9, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
L_sq_DrawWindow(X + 6, Y + 19, 528 * 0.85, 47, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
//绘制背景框标题栏
L_sq_DrawImg("hud/fiendwarl.img", 3, X + 1, Y);
L_sq_DrawCode("寻找攻坚队", X + 217, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1);
//绘制队伍List
DrawPartyList(obj);
L_sq_DrawWindow(X + 6, Y + 382, 528 * 0.85, 24, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
//计算页数
local PageStr = Page + 1 + " / " + ((PartyList.len() / PageMaxCount) + 1);
//绘制当前页数
L_sq_DrawCode(PageStr, X + 166 + LenheartTextClass.GetStringLength(PageStr) / 2, Y + 402, sq_RGBA(134, 120, 79, 255), 0, 1);
}
Page = 0;
PageMaxCount = 13;
//绘制队伍信息
function DrawPartyList(obj) {
if (PartyList.len() <= 0) return;
//先遍历一遍全部挪走
foreach(Index, TeamObj in PartyList) {
TeamObj.SyncPos(9999, 9999);
}
//在遍历需要显示的同步坐标
foreach(Index, TeamObj in PartyList.slice((((Page) * PageMaxCount) > 0) ? ((Page) * PageMaxCount) : 0, ((Page + 1) * PageMaxCount) > PartyList.len() ? PartyList.len() : ((Page + 1) * PageMaxCount))) {
TeamObj.SyncPos(X, Y + 2 + (Index % PageMaxCount) * 23);
// TeamObj.Show();
}
}
//绘制主界面
function DrawMain(obj) {
DrawMainBackGround(obj);
}
//绘制入口
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
MainButton = null;
//逻辑入口
function Proc(obj) {
//界面未打开
if (!this.Visible && L_sq_RA(0x1A5FB4C, "0x14+0x28+")< 2) {
//在甲板
if (FiendwarTotal.GetInstance().BaseConfig && FiendwarTotal.GetInstance().BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == FiendwarTotal.GetInstance().BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) {
local PaW = sq_GetPopupWindowMainCotrol(6);
if (PaW) {
L_sq_UseSkill(DIK_ESCAPE);
this.Visible = true;
GetAllTeamCall();
}
}
}
LenheartNewUI_Windows.SyncPos(X, Y);
}
//鼠标滚轮时间回调
function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
switch (Flag) {
//下
case 0: {
if (Page<(((PartyList.len() / PageMaxCount)))) Page++;
break;
}
//上
case 1: {
if (Page > 0) Page--;
break;
}
}
LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
}
}

View File

@ -1,259 +0,0 @@
/*
文件名:FiendwarHallApplyJoin.nut
路径:Plugins/Fiendwar/FiendwarHallApplyJoin.nut
创建日期:2024-04-02 12:07
文件用途:超时空玩家申请加入攻坚队
*/
class FiendwarHallApplyJoinC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//角色对象
Charc = null;
//角色等级
Level = "100级";
//角色名称
Name = "凌众K";
//角色职业
Job = 0;
//角色决斗等级
PvpLevel = 1;
//职业名称
JobName = "大暗黑天";
//角色复活币
Coin = "139个";
//角色疲劳值
Fatigue = "156";
//战斗力
Combat = "170051206";
//通过次数
ClearanceCount = 63;
//玩家世界Session
PlayerSession = 0;
//请求者信息集合
RequestJoinTeamArr = null;
NowSelectJoinIndex = 0;
//角色头像集合
AvatarArr = null;
//初始化Flag
InitFlag = false;
//X Y 裁切开始X Y 裁切结束X Y
OffsetArr = [
//男鬼剑士
[45, 103, 230, 231],
//女格斗家
[56, 102, 235, 279],
//男神枪手
[52, 130, 238, 246],
//女魔法师
[55, 87, 234, 293],
//男圣职者
[42, 115, 223, 200],
//女神枪手
[52, 119, 226, 209],
//暗夜使者
[56, 102, 225, 226],
//男格斗家
[50, 114, 239, 216],
//男魔法师
[54, 103, 236, 276],
//黑暗武士
[46, 102, 229, 232],
//缔造者
[56, 86, 235, 293],
]
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
RequestJoinTeamArr = [];
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function InitInfo() {
local InfoObj = RequestJoinTeamArr[NowSelectJoinIndex];
Charc = InfoObj.Charc;
//角色等级
Level = InfoObj.Level;
//角色名称
Name = InfoObj.Name;
//角色职业
Job = InfoObj.Job;
//角色决斗等级
PvpLevel = InfoObj.PvpLevel;
//职业名称
JobName = InfoObj.JobName;
//角色复活币
Coin = InfoObj.Coin + "个";
//角色疲劳值
Fatigue = InfoObj.Fatigue.tostring();
//战斗力
Combat = InfoObj.Combat;
//通过次数
ClearanceCount = InfoObj.ClearanceCount;
//头像
AvatarArr = InfoObj.AvatarArr;
//玩家世界Session
this.PlayerSession = InfoObj.PlayerSession;
Childrens = [];
//注册控件
RegisterWidget();
InitFlag = true;
}
function PopOne() {
if (RequestJoinTeamArr.len() > 1) {
RequestJoinTeamArr.remove(0);
InitInfo();
} else {
RequestJoinTeamArr = [];
CloseWindow();
}
}
function RegisterWidget() {
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(244, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
PopOne();
}.bindenv(this);
AddChild(CloseButton);
//冒险团按钮
local MButton = LenheartNewUI_ButtonText(24, 114, 15, "冒险团信息");
MButton.SetTextOffset(-13, 2);
AddChild(MButton);
//冒险图鉴按钮
local FQButton = LenheartNewUI_ButtonText(95, 113, 15, "冒险图鉴");
FQButton.State = 8;
FQButton.SetTextOffset(-7, 2);
AddChild(FQButton);
//查看信息按钮
local CButton = LenheartNewUI_ButtonText(166, 114, 15, "查看信息");
CButton.SetTextOffset(-7, 2);
CButton.OnClick = function() {
local obj = sq_GetMyMasterCharacter();
// obj.sq_PlaySound("CLICK_BUTTON1");
L_sq_SendPackType(8);
L_sq_SendPackWord(this.PlayerSession);
L_sq_SendPackByte(3);
L_sq_SendPack();
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
}.bindenv(this);
AddChild(CButton);
//确认按钮
local OkButton = LenheartNewUI_ButtonText(74, 192, -1, "是");
OkButton.SetTextOffset(3, 2);
OkButton.OnClick = function() {
local T = {
op = 20063003,
teamsId = RinDro_Anton_Obj.MyRaidTeamId,
charac = Charc
}
Rindro_BaseToolClass.SendPackEx(T);
PopOne();
}.bindenv(this);
AddChild(OkButton);
//拒绝按钮
local NoButton = LenheartNewUI_ButtonText(130, 192, -1, "否");
NoButton.SetTextOffset(3, 2);
NoButton.OnClick = function() {
local T = {
op = 20063019,
charac = Charc.CID
}
Rindro_BaseToolClass.SendPackEx(T);
PopOne();
}.bindenv(this);
AddChild(NoButton);
//左翻页按钮
local LeftButton = LenheartNewUI_BaseButton(90, 220, 15, 15, "interface/lenheartwindowcommon.img", 34);
LeftButton.OnClick = function() {
if (NowSelectJoinIndex > 0) NowSelectJoinIndex--;
InitInfo();
}.bindenv(this);
AddChild(LeftButton);
//右翻页按钮
local RightButton = LenheartNewUI_BaseButton(154, 220, 15, 15, "interface/lenheartwindowcommon.img", 38);
RightButton.OnClick = function() {
if (NowSelectJoinIndex< RequestJoinTeamArr.len() - 1) NowSelectJoinIndex++;
InitInfo();
}.bindenv(this);
AddChild(RightButton);
}
//绘制主界面
function DrawMain(obj) {
if (!InitFlag) return;
//标题栏
L_sq_DrawButton(X - 2, Y, 252, "interface/lenheartwindowcommon.img", 609, 2, 7);
//绘制窗口名字
L_sq_DrawCode("攻坚队申请", X + 100, Y + 4, sq_RGBA(134, 120, 79, 255), 0, 1);
//Item信息框一般为211的宽度
L_sq_DrawWindow(X, Y + 16, 240, 200, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
//绘制背景
L_sq_DrawImg("hud/fiendwarl.img", 15, X + 6, Y + 22);
//绘制角色背景
L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40);
//绘制角色头像
if (AvatarArr) {
foreach(AvatarObj in AvatarArr) {
local AXpos = AvatarObj.D[0] + X + OffsetArr[Job][0] - 8;
local AYpos = AvatarObj.D[1] + Y + OffsetArr[Job][1] + 40;
setClip(AXpos + OffsetArr[Job][2], AYpos + OffsetArr[Job][3], AXpos + OffsetArr[Job][2] + 22, AYpos + OffsetArr[Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
releaseClip(); //裁切结束
}
}
//绘制角色等级
L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
//绘制角色名字
L_sq_DrawCode(Name, X + 137 - LenheartTextClass.GetStringLength(Name) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
//绘制角色职业类型图标
if (Job != 4) L_sq_DrawImg("hud/fiendwarl.img", 16, X + 176, Y + 43);
//绘制角色职业名称
L_sq_DrawCode(JobName, X + 224 - LenheartTextClass.GetStringLength(JobName) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
//Item信息框一般为211的宽度
L_sq_DrawWindow(X + 21, Y + 65, 30, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
L_sq_DrawWindow(X + 62, Y + 65, 156, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
//绘制决斗等级
local PvpImg = PvpLevel / 6;
L_sq_DrawImg("hud/fiendwarl1.img", 99, X + 25, Y + 74);
L_sq_DrawCode(PvpLevel.tostring(), X + 45 - LenheartTextClass.GetStringLength(PvpLevel.tostring()) / 2, Y + 91, sq_RGBA(134, 120, 79, 255), 0, 1);
//绘制各项信息
L_sq_DrawCode("复活币:", X + 70, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
L_sq_DrawCode(Coin, X + 134 - LenheartTextClass.GetStringLength(Coin) / 2, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
L_sq_DrawCode("疲劳值:", X + 158, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
L_sq_DrawCode(Fatigue, X + 216 - LenheartTextClass.GetStringLength(Fatigue) / 2, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
L_sq_DrawCode("战斗力:", X + 70, Y + 93, sq_RGBA(134, 120, 79, 255), 0, 1);
L_sq_DrawCode(Combat, X + 170 - LenheartTextClass.GetStringLength(Combat) / 2, Y + 93, sq_RGBA(74, 162, 86, 255), 0, 1);
L_sq_DrawCode("通关超时空攻坚战" + ClearanceCount + "次", X + 130 - LenheartTextClass.GetStringLength("通关超时空攻坚战" + ClearanceCount + "次") / 2, Y + 144, sq_RGBA(221, 213, 147, 255), 0, 1);
L_sq_DrawCode("申请加入攻坚队。", X + 87, Y + 160, sq_RGBA(160, 132, 75, 255), 0, 1);
L_sq_DrawCode("请确定是否同意?", X + 87, Y + 176, sq_RGBA(160, 132, 75, 255), 0, 1);
L_sq_DrawWindow(X + 77, Y + 216, 100, 20, "interface/lenheartwindowcommon.img", 204, 4, 14, 4, 14);
//绘制页数
local Str = (NowSelectJoinIndex + 1) + " / " + RequestJoinTeamArr.len();
L_sq_DrawCode(Str, X + 137 - LenheartTextClass.GetStringLength(Str) / 2, Y + 222, sq_RGBA(134, 120, 79, 255), 0, 1);
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
}

View File

@ -1,81 +0,0 @@
/*
文件名:FiendwarHallCreateParty.nut
路径:Plugins/Fiendwar/FiendwarHallCreateParty.nut
创建日期:2024-03-18 13:20
文件用途:
*/
class FiendwarHallCreatePartyC extends LenheartNewUI_Windows {
//调试模式
DeBugMode = false;
X = 290;
Y = 220;
//输入框
InputObject = null;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(266, 2, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
CloseWindow();
}.bindenv(this);
AddChild(CloseButton);
local OkButton = LenheartNewUI_ButtonText(78, 124, 5, "确定");
OkButton.SetTextOffset(0, 1);
OkButton.OnClick = function() {
//如果队伍名输出框的文字长度大于0就创建队伍 创建时告诉服务端自己的 头发 帽子 脸部 皮肤
if (InputObject.str.len() > 0) {
local T = {
op = 20063001,
teamsName = InputObject.str,
items = [L_sq_GetCharacterAttribute(0x1c, 21), L_sq_GetCharacterAttribute(0x1c, 15), L_sq_GetCharacterAttribute(0x1c, 14), L_sq_GetCharacterAttribute(0x1c, 13)],
}
Rindro_BaseToolClass.SendPackEx(T);
CloseWindow();
}
}.bindenv(this);
AddChild(OkButton);
local CloseButton = LenheartNewUI_ButtonText(144, 124, 5, "取消");
CloseButton.SetTextOffset(0, 1);
CloseButton.OnClick = function() {
CloseWindow();
}.bindenv(this);
AddChild(CloseButton);
InputObject = LenheartNewUI_BaseInput(62, 68, 152, 20);
AddChild(InputObject);
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
//绘制主界面
function DrawMain(obj) {
L_sq_DrawWindow(X, Y + 10, 260, 120, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
L_sq_DrawWindow(X, Y + 10, 260, 120, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 0, X + 11, Y + 21);
L_sq_DrawImg("hud/fiendwarl.img", 9, X - 2, Y + 2);
L_sq_DrawCode("创建攻坚队", X + 112, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1);
L_sq_DrawImg("hud/fiendwarl.img", 10, X + 72, Y + 44);
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
}

View File

@ -1,81 +0,0 @@
/*
文件名:FiendwarHallGoBossDgn.nut
路径:Plugins/Fiendwar/FiendwarHallGoBossDgn.nut
创建日期:2024-05-10 06:55
文件用途:进入罗什的窗口
*/
class FiendwarHallGoBossDgnC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
Dark = 0;
Light = 0;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {
Childrens = [];
// //关闭按钮
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
// CloseButton.OnClick = function() {
// this.Visible = false;
// }.bindenv(this);
// Childrens.append(CloseButton);
//黑暗按钮
local DarkButton = LenheartNewUI_BaseButton(4, 20, 264, 48, "interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 1);
DarkButton.OnClick = function() {
local T = {
op = 20063059,
key = 28
}
Rindro_BaseToolClass.SendPackEx(T);
CloseWindow();
}.bindenv(this);
if (Dark) DarkButton.State = 8;
Childrens.append(DarkButton);
//纯白按钮
local LightButton = LenheartNewUI_BaseButton(4, 68, 264, 48, "interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 5);
LightButton.OnClick = function() {
local T = {
op = 20063059,
key = 29
}
Rindro_BaseToolClass.SendPackEx(T);
CloseWindow();
}.bindenv(this);
if (Light) LightButton.State = 8;
Childrens.append(LightButton);
}
//绘制主界面
function DrawMain(obj) {
L_sq_DrawWindow(X, Y + 10, 246, 85, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
L_sq_DrawWindow(X, Y + 10, 246, 85, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
// L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 0, X + 11, Y + 21);
L_sq_DrawImg("hud/fiendwarl.img", 25, X - 3, Y + 2);
L_sq_DrawCode("量子时空传送站", X + 98, Y + 5, sq_RGBA(179, 169, 135, 255), 0, 1);
// L_sq_DrawImg("hud/fiendwarl.img", 10, X + 72, Y + 44);
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
}

View File

@ -1,77 +0,0 @@
/*
文件名:FiendwarHallParty.nut
路径:Plugins/Fiendwar/FiendwarHallParty.nut
创建日期:2024-04-01 22:30
文件用途:超时空之战 大厅中的队伍对象
*/
class FiendwarHallPartyC extends LenheartNewUI_CommonUi {
X = 0;
Y = 0;
Width = null;
Height = null;
TeamObj = null;
//选中状态
SelectState = false;
//攻坚状态
OffensiveState = 0;
constructor(gTeamObj) {
//拿到信息Map
TeamObj = gTeamObj;
//设定宽高 坐标不重要 会被父窗口的Sync同步坐标
this.Width = 458;
this.Height = 21;
this.OnClick = function() {
//还原父对象中其他攻坚队伍类 选中自己
foreach(Obj in Parent.PartyList) {
Obj.SelectState = false;
}
SelectState = !SelectState;
//发送查看攻坚队具体信息包
local T = {
op = 20063013,
teamsId = TeamObj.TeamId
}
Rindro_BaseToolClass.SendPackEx(T);
}
LenheartNewUI_CommonUi.constructor(10, 82, this.Width, this.Height);
}
function Show(obj) {
//绘制底槽
L_sq_DrawImg("hud/fiendwarl.img", 4, X, Y);
//绘制队伍编号
L_sq_DrawCode(TeamObj.TeamId, X + 22 - LenheartTextClass.GetStringLength(TeamObj.TeamId) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
//绘制队长头像
L_sq_DrawImg("interface/lenheartwindowcommon.img", 55, X + 52, Y + 7);
try {
local channel_index = FiendwarTotal.GetInstance().BaseConfig.channel_index;
channel_index = channel_index.slice(channel_index.len() - 2, channel_index.len());
//绘制频道信息
L_sq_DrawCode(channel_index, X + 102 - LenheartTextClass.GetStringLength(channel_index) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
} catch (exception) {
}
//绘制攻坚队名称
L_sq_DrawCode(TeamObj.TeamName, X + 130, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
//绘制攻坚队攻坚状态
L_sq_DrawImg("hud/fiendwarl.img", 6 + TeamObj.State, X + 314, Y + 2);
local PartyPlayerCountStr = TeamObj.TeamPlayerCount + " / " + 8;
//绘制攻坚队队员数量
L_sq_DrawCode(PartyPlayerCountStr, X + 434 - LenheartTextClass.GetStringLength(PartyPlayerCountStr) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
if (SelectState) {
L_sq_DrawImg("hud/fiendwarl.img", 5, X, Y);
}
if (isInRect) {
L_sq_DrawImg("hud/fiendwarl.img", 5, X, Y);
}
}
}

View File

@ -1,112 +0,0 @@
/*
文件名:FiendwarNoti.nut
路径:Plugins/Fiendwar/FiendwarNoti.nut
创建日期:2024-04-12 22:12
文件用途:超时空攻坚战队伍消息
*/
class FiendwarNotiC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//消息内容
Msg = null;
//队长名称
Name = null;
//消息时间
Timer = null;
//队伍聊天消息分发
function FiendwarPartyNotiCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
Name = Jso.Name;
Msg = Jso.msg;
Timer = Clock();
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
//队伍聊天消息分发
Pack_Control.rawset(20063018, FiendwarPartyNotiCallBack.bindenv(this));
}
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);
}
//队长头像
PartyMasterIcon = null;
//绘制主界面
function DrawMain(obj) {
if (!Name || !Msg) return;
//绘制背景框
L_sq_DrawImg("hud/fiendwarl.img", 24, X + 134, Y + 180);
//绘制队长图标
// L_sq_DrawImg
if (FiendwarTotal.GetInstance().MyTeam) {
local Mt = FiendwarTotal.GetInstance().MyTeam;
local PartyMaster;
foreach(index, value in Mt.MembersList) {
if (value.InfoObj.Captain) {
PartyMasterIcon = clone(value);
}
}
sq_DrawBox(X + 42 + 118, Y + 1 + 185, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
//绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + 118;
local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 185;
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
releaseClip(); //裁切结束
}
}
//绘制队长名字
L_sq_DrawCode(Name, X + 184, Y + 189, sq_RGBA(247, 214, 90, 255), 0, 1);
//绘制点
L_sq_DrawCode(" ", X + 210, Y + 189, sq_RGBA(230, 200, 155, 255), 0, 1);
//绘制消息
L_sq_DrawCode(Msg, X + 190 + LenheartTextClass.GetStringLength(Name), Y + 189, 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);
if (Name && Msg)
Visible = true;
else
Visible = false;
if (Timer) {
if (Clock() - Timer >= 3500) {
Timer = null;
Name = null;
Msg = null;
}
}
}
}

View File

@ -1,120 +0,0 @@
/*
文件名:FiendwarPartyFormation.nut
路径:Plugins/Fiendwar/FiendwarPartyFormation.nut
创建日期:2024-04-02 12:09
文件用途:超时空攻坚队 队内编队
*/
//编队用按钮需要传递参数所以重写
class FiendwarPartyInfoEdit_BaseButton extends LenheartNewUI_BaseButton {
MyInfoIndex = 0;
constructor(X, Y, W, H, Path, Idx, InfoIndex) {
MyInfoIndex = InfoIndex;
LenheartNewUI_BaseButton.constructor(X, Y, W, H, Path, Idx);
}
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
if (isLBDown && OnClick) {
OnClick(MyInfoIndex);
}
isLBDown = false;
}
}
//编队窗口
class FiendwarPartyFormation extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
PartyMarkFlag = -1;
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() {
CloseWindow();
}.bindenv(this);
AddChild(CloseButton);
//搜索按钮
local QdButton = LenheartNewUI_ButtonText(10, 157, 5, "签到");
QdButton.State = 8;
QdButton.SetTextOffset(0, 1);
AddChild(QdButton);
//解散队伍按钮
local BreakPartyButton = LenheartNewUI_ButtonText(80, 158, 5, "解散队伍");
BreakPartyButton.SetTextOffset(-12, 1);
BreakPartyButton.OnClick = function() {
}.bindenv(this);
AddChild(BreakPartyButton);
//关闭按钮
local CloseButton = LenheartNewUI_ButtonText(150, 158, 5, "关闭");
CloseButton.SetTextOffset(0, 1);
CloseButton.OnClick = function() {
CloseWindow();
}.bindenv(this);
AddChild(CloseButton);
for (local i = 0; i< 8; i++) {
//右翻页按钮
local PartyIndexButton = FiendwarPartyInfoEdit_BaseButton(12 + (i % 2 * 136), 35 + ((i / 2) * 30), 41, 17, "interface/newstyle/windows/party/party_icon.img", 3 + (i * 3), i);
//继承类 并重写 调用时传入InfoIndex
PartyIndexButton.OnClick = function(MyInfoIndex) {
PartyMarkFlag = MyInfoIndex;
}.bindenv(this);
AddChild(PartyIndexButton);
}
}
//绘制主界面
function DrawMain(obj) {
//标题栏
L_sq_DrawButton(X - 1, Y, 284, "interface/lenheartwindowcommon.img", 609, 2, 7);
//Item信息框一般为211的宽度
L_sq_DrawWindow(X, Y + 17, 272, 154, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
for (local q = 0; q< 8; q++) {
L_sq_DrawImg("interface/lenheartwindowcommon.img", 358, X + 60 + (q % 2 * 136), Y + 34 + ((q / 2) * 30));
for (local i = 0; i< 3; i++) {
L_sq_DrawImg("interface/lenheartwindowcommon.img", 361, X + 80 + (q % 2 * 136) + (i * 20), Y + 34 + ((q / 2) * 30));
}
}
if (PartyMarkFlag != -1) {
L_sq_WA(0x1b46898, 47);
}
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
//还原编队的鼠标指针
local win = LenheartNewUI_CreateWindow(FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
if (win.PartyMarkFlag != -1) {
win.PartyMarkFlag = -1;
L_sq_WA(0x1b46898, 0);
}
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
}
}

View File

@ -1,252 +0,0 @@
/*
文件名:FiendwarPartyInfo.nut
路径:Plugins/Fiendwar/FiendwarPartyInfo.nut
创建日期:2024-03-27 19:18
文件用途:超时空攻坚队队伍信息窗口
*/
class FiendwarPartyInfoC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//队员列表
MembersList = null;
//队伍名称
TeamName = "";
//队伍ID
TeamID = 99999999;
//是否是我的攻坚队
IsMyTeam = false;
//是否是队长
IsCaptain = false;
//收到请求加入攻坚队包
function JoinTeamCallBack(Chunk) {
// Sout("收到请求加入包 : \n\n\n %L", Chunk);
local Jso = Json.Decode(Chunk);
local win = LenheartNewUI_CreateWindow(FiendwarHallApplyJoinC, "超时空申请加入队伍窗口", 542, 348, 257, 240, 18);
win.Visible = true;
win.ResetFocus();
local T = {
Charc = Jso.charac, //角色对象
Level = Jso.charac.PlayerLevel,
Name = Jso.charac.PlayerName,
Job = Jso.charac.PlayerJob,
PvpLevel = Jso.charac.pvp,
JobName = Jso.charac.PlayerGrowTypeJob,
Coin = Jso.charac.PlayCoin,
Fatigue = Jso.charac.PlayFatigue,
Combat = Jso.charac.ZL,
ClearanceCount = Jso.charac.ClearanceCount,
AvatarArr = Jso.charac.equVos,
PlayerSession = Jso.charac.PlayerSession
}
//没人
if (win.RequestJoinTeamArr.len() == 0) {
win.RequestJoinTeamArr.append(T);
win.InitInfo();
} else win.RequestJoinTeamArr.append(T);
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
// RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20063006, JoinTeamCallBack.bindenv(this));
}
function RegisterWidget() {
//清除老的按钮在刷新
RemoveChilds(FiendwarPartyInfoMemberC, false);
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(336, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
CloseWindow();
}.bindenv(this);
AddChild(CloseButton);
//队伍按钮
local ModelButton = LenheartNewUI_ButtonText(9, 60, -18, "队伍");
ModelButton.Idx = 163;
ModelButton.DWidth = -8;
ModelButton.SetTextOffset(-9, 1);
AddChild(ModelButton);
//等级按钮
local StateButton = LenheartNewUI_ButtonText(51, 60, -18, "等级");
StateButton.Idx = 163;
StateButton.DWidth = -8;
StateButton.SetTextOffset(-9, 1);
AddChild(StateButton);
//角色名按钮
local ChannelButton = LenheartNewUI_ButtonText(93, 60, 44, "角色名");
ChannelButton.Idx = 163;
ChannelButton.DWidth = 120;
ChannelButton.FillWidth = 1;
ChannelButton.FirstWidth = 21;
ChannelButton.SetTextOffset(17, 1);
AddChild(ChannelButton);
//攻坚队名称按钮
local PartyNameButton = LenheartNewUI_ButtonText(196, 60, 36, "职业名");
PartyNameButton.Idx = 163;
PartyNameButton.DWidth = 100;
PartyNameButton.FillWidth = 1;
PartyNameButton.FirstWidth = 21;
PartyNameButton.SetTextOffset(11, 1);
AddChild(PartyNameButton);
//入场材料按钮
local Striiu = "入场材料";
if (FiendwarTotal.GetInstance().EndTime) Striiu = "通关次数";
local StageButton = LenheartNewUI_ButtonText(289, 60, 0, Striiu);
StageButton.Idx = 163;
StageButton.DWidth = 26;
StageButton.FillWidth = 1;
StageButton.FirstWidth = 21;
StageButton.SetTextOffset(-14, 1);
AddChild(StageButton);
//如果不是我的队伍 并且我没有攻坚队
if (!IsMyTeam && !FiendwarTotal.GetInstance().MyPartyId) {
local JoinPartyButton = LenheartNewUI_ButtonText(10, 268, 10, "参加攻坚队");
JoinPartyButton.SetTextOffset(-15, 1);
JoinPartyButton.OnClick = function() {
local T = {
op = 20063005,
teamsId = TeamID,
items = [L_sq_GetCharacterAttribute(0x1c, 21), L_sq_GetCharacterAttribute(0x1c, 15), L_sq_GetCharacterAttribute(0x1c, 14), L_sq_GetCharacterAttribute(0x1c, 13)],
}
Rindro_BaseToolClass.SendPackEx(T);
}.bindenv(this);
AddChild(JoinPartyButton);
}
//如果是我的队伍
if (IsMyTeam) {
//退出按钮
local ExitButton = LenheartNewUI_ButtonText(220, 268, 5, "退出");
ExitButton.SetTextOffset(-1, 1);
ExitButton.OnClick = function() {
local T = {
op = 20063009,
teamsId = TeamID
}
Rindro_BaseToolClass.SendPackEx(T);
FiendwarTotal.GetInstance().MyCid = null;
FiendwarTotal.GetInstance().MyPartyId = null;
FiendwarTotal.GetInstance().IsCaptain = null;
}.bindenv(this);
AddChild(ExitButton);
if (IsCaptain) {
//队伍编制按钮
local PartyEditButton = LenheartNewUI_ButtonText(10, 268, 5, "队伍编制");
PartyEditButton.SetTextOffset(-12, 1);
PartyEditButton.OnClick = function() {
local win = LenheartNewUI_CreateWindow(FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
win.Visible = true;
}.bindenv(this);
AddChild(PartyEditButton);
//修改信息按钮
local FqButton = LenheartNewUI_ButtonText(100, 267, 5, "修改信息");
FqButton.State = 8;
FqButton.SetTextOffset(-12, 1);
AddChild(FqButton);
//队伍招募按钮
local FqButton1 = LenheartNewUI_ButtonText(160, 267, 5, "队伍招募");
FqButton1.State = 8;
FqButton1.SetTextOffset(-12, 1);
AddChild(FqButton1);
if (!FiendwarTotal.GetInstance().EndTime) {
//队伍招募按钮
local FightOpenButton = LenheartNewUI_ButtonText(290, 268, 5, "开始攻坚");
FightOpenButton.SetTextOffset(-12, 1);
FightOpenButton.OnClick = function() {
local T = {
op = 20063051,
teamsId = TeamID
}
Rindro_BaseToolClass.SendPackEx(T);
}.bindenv(this);
AddChild(FightOpenButton);
}
}
}
}
//绘制主界面
function DrawMain(obj) {
//标题栏
L_sq_DrawButton(X, Y, 344, "interface/lenheartwindowcommon.img", 609, 2, 7);
//绘制队伍名字
L_sq_DrawCode(TeamName, X + 178 - LenheartTextClass.GetStringLength(TeamName) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
//Item信息框一般为211的宽度
L_sq_DrawWindow(X, Y + 17, 340, 250, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
//绘制头图
L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/memberwindow.img", 0, X + 10, Y + 24);
//绘制阶段图 //TODO 根据阶段绘制img
L_sq_DrawImg("hud/fiendwarl.img", 7, X + 296, Y + 34);
//绘制队伍List
DrawMembersList(obj);
}
//绘制队伍信息
function DrawMembersList(obj) {
if (MembersList.len() <= 0) return;
//遍历需要显示的同步坐标
foreach(Index, TeamObj in MembersList) {
TeamObj.SyncPos(X, Y + 2 + Index * 23);
}
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
/*
# override # "
* @函数作用:
* @参数 name
* @返回值
*/
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
foreach(Window in Childrens) {
Window.OnMouseLbUp(MousePos_X, MousePos_Y);
}
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
//判断没有点到具体角色就隐藏
if (!sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y + 80, Width, MembersList.len() * 21)) {
//交互窗口需要隐藏
local Each = LenheartNewUI_CreateWindow(FiendwarHallPlayerInteractiveC, "超时空玩家交互", X, Y, 100, 21, 0);
Each.Visible = false;
}
}
}

View File

@ -1,188 +0,0 @@
/*
文件名:FiendwarPartyMemberInfo.nut
路径:Plugins/Fiendwar/FiendwarPartyMemberInfo.nut
创建日期:2024-04-02 10:49
文件用途:攻坚队详细信息中的队员显示类
*/
//队员显示类
class FiendwarPartyInfoMemberC extends LenheartNewUI_CommonUi {
X = 0;
Y = 0;
Width = null;
Height = null;
InfoObj = null;
//构造时间
ConstructorTime = null;
//选中状态
SelectState = false;
//攻坚状态
OffensiveState = 0;
//头像框的颜色
HandBoxColor = [
0xff717272,
0xff7b2a29,
0xff874e0d,
0xff8b8108,
0xff658e2d,
0xff0f5c8a,
0xff27238f,
0xff4e2491,
0xff932586,
]
//X Y 裁切开始X Y 裁切结束X Y
OffsetArr = [
//男鬼剑士
[45, 103, 230, 231],
//女格斗家
[56, 102, 235, 279],
//男神枪手
[52, 130, 238, 246],
//女魔法师
[55, 87, 234, 293],
//男圣职者
[42, 115, 223, 200],
//女神枪手
[52, 119, 226, 209],
//暗夜使者
[56, 102, 225, 226],
//男格斗家
[50, 114, 239, 216],
//男魔法师
[54, 103, 236, 276],
//黑暗武士
[46, 102, 229, 232],
//缔造者
[56, 86, 235, 293],
]
constructor(gInfoObj) {
ConstructorTime = Clock();
InfoObj = gInfoObj;
this.Width = 458;
this.Height = 21;
this.OnClick = function() {
//还原其他 选中自己
foreach(Obj in Parent.MembersList) {
Obj.SelectState = false;
}
SelectState = !SelectState;
local win = LenheartNewUI_CreateWindow(FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
//编队状态
if (win.PartyMarkFlag != -1) {
//并且是属于我的攻坚队的成员
if (FiendwarTotal.GetInstance().MyPartyId == InfoObj.PartyId) {
local T = {
op = 20063015,
teamsId = InfoObj.PartyId,
cidNew = InfoObj.Cid,
num = win.PartyMarkFlag
}
Rindro_BaseToolClass.SendPackEx(T);
win.PartyMarkFlag = -1;
L_sq_WA(0x1b46898, 0);
return;
}
//点了其他队伍成员要还原编队状态
else {
win.PartyMarkFlag = -1;
L_sq_WA(0x1b46898, 0);
}
}
local Interactive = LenheartNewUI_CreateWindow(FiendwarHallPlayerInteractiveC, "超时空玩家交互", 0, 0, 100, 21, 0);
//改变鼠标坐标
Interactive.X = MousePos_X;
Interactive.Y = MousePos_Y;
//赋值对象参数
Interactive.InfoObj = InfoObj;
//对象不是我
if (InfoObj.Cid == FiendwarTotal.GetInstance().MyCid) {
Interactive.InfoObj.IsMyself <- true;
}
//刷新UI
Interactive.InitInfo();
}
LenheartNewUI_CommonUi.constructor(10, 82, this.Width, this.Height);
//如果没有材料要建立一个购买材料的Button 并且要判断是否是自己 //TODO 这里还不行 要拓展一个函数来比对名字
/*
local Name = L_Sq_GetObjectName(sq_GetMyMasterCharacter());
local Name2 = "夜刃";
Name == Name2 失败了
*/
// if (!InfoObj.StkHasFlag && InfoObj.Name == L_Sq_GetObjectName(sq_GetMyMasterCharacter())) {
// }
}
function Show(obj) {
//绘制底槽
L_sq_DrawImg("hud/fiendwarl.img", 12, X, Y);
//绘制队伍编号
L_sq_DrawImg("interface/newstyle/windows/party/party_icon.img", InfoObj.TeamId * 3, X, Y + 1);
sq_DrawBox(X + 42, Y + 1, 22, 18, HandBoxColor[InfoObj.TeamId]);
//绘制队长头像
foreach(AvatarObj in InfoObj.EquVos) {
local AXpos = AvatarObj.D[0] + X + OffsetArr[InfoObj.Job][0];
local AYpos = AvatarObj.D[1] + Y + OffsetArr[InfoObj.Job][1];
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
releaseClip(); //裁切结束
// }
}
if (InfoObj.Captain) L_sq_DrawImg("hud/fiendwarl.img", 18, X + 42, Y + 1);
//绘制等级
L_sq_DrawCode(InfoObj.Level, X + 76 - LenheartTextClass.GetStringLength(InfoObj.Level) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
//绘制角色名
L_sq_DrawCode(InfoObj.Name, X + 138 - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
//绘制职业名
L_sq_DrawCode(InfoObj.JobName, X + 234 - LenheartTextClass.GetStringLength(InfoObj.JobName) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
//离线了
if (InfoObj.ExitTime > 0) {
local DrawTime = InfoObj.ExitTime - (Clock() - ConstructorTime);
local seconds = (DrawTime / 1000) % 60; // 计算秒数
local minutes = (DrawTime / (1000 * 60)) % 60; // 计算分钟数
local DrawTimeStr = format("%02d分%02d秒", minutes, seconds);
L_sq_DrawCode(DrawTimeStr, X + 306 - LenheartTextClass.GetStringLength(DrawTimeStr) / 2, Y + 5, sq_RGBA(255, 50, 50, 255), 0, 1);
}
//通关次数
else if (InfoObj.ClearanceCount > 0) {
L_sq_DrawCode((InfoObj.ClearanceCount - 1) + "/" + (InfoObj.ClearanceCountMax), X + 306 - LenheartTextClass.GetStringLength((InfoObj.ClearanceCount - 1) + "/" + (InfoObj.ClearanceCountMax)) / 2, Y + 5, sq_RGBA(250, 250, 181, 255), 0, 1);
} else if (InfoObj.StkHasFlag) {
L_sq_DrawImg("hud/fiendwarlstk.img", 0, X + 280, Y + 3);
} else {
L_sq_DrawImg("hud/fiendwarlstk.img", 1, X + 280, Y + 3);
}
if (SelectState) {
L_sq_DrawImg("hud/fiendwarl.img", 13, X, Y);
}
if (isInRect) {
L_sq_DrawImg("hud/fiendwarl.img", 13, X, Y);
}
}
MousePos_X = 0;
MousePos_Y = 0;
//鼠标事件回调
function OnMouseProc(Flag, gMousePos_X, gMousePos_Y) {
this.MousePos_X = gMousePos_X;
this.MousePos_Y = gMousePos_Y;
LenheartNewUI_CommonUi.OnMouseProc(Flag, gMousePos_X, gMousePos_Y);
}
}

View File

@ -1,227 +0,0 @@
/*
文件名:FiendwarPlayerInteractive.nut
路径:Plugins/Fiendwar/FiendwarPlayerInteractive.nut
创建日期:2024-04-02 10:55
文件用途:超时空玩家交互
*/
//角色交互按钮需要传递参数所以重写
class FiendwarPlayerInteractive_BaseButton extends LenheartNewUI_BaseButton {
OnShow = null;
constructor(X, Y, W, H, Path, Idx) {
LenheartNewUI_BaseButton.constructor(X, Y, W, H, Path, Idx);
}
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
Y--;
if (isLBDown && OnClick) {
OnClick();
}
isLBDown = false;
local Each = LenheartNewUI_CreateWindow(FiendwarHallPlayerInteractiveC, "超时空玩家交互", X, Y, 100, 21, 0);
Each.Visible = false;
}
function Show(obj) {
//不可用
if (State == 8) {
L_sq_DrawImg(Path, Idx + 3, X, Y + 1);
} else {
//按下
if (isLBDown) {
Y++;
L_sq_DrawImg(Path, (Idx * 2) + 2, X, Y);
}
//悬停
else if (isInRect) {
L_sq_DrawImg(Path, (Idx * 2) + 1, X, Y);
}
//普通
else {
L_sq_DrawImg(Path, 0, X, Y);
}
}
if (OnShow) OnShow(X, Y);
}
}
//角色交互类
class FiendwarHallPlayerInteractiveC extends LenheartNewUI_Windows {
// DeBugMode = true;
//信息对象
InfoObj = null;
//初始化Flag 初始化以后才显示
InitInfoFlag = false;
//有多少个标签
InitIndexFlag = 1;
//头像框颜色
HandBoxColor = [
0xff717272,
0xff7b2a29,
0xff874e0d,
0xff8b8108,
0xff658e2d,
0xff0f5c8a,
0xff27238f,
0xff4e2491,
0xff932586,
]
//X Y 裁切开始X Y 裁切结束X Y
OffsetArr = [
//男鬼剑士
[45, 103, 230, 231],
//女格斗家
[56, 102, 235, 279],
//男神枪手
[52, 130, 238, 246],
//女魔法师
[55, 87, 234, 293],
//男圣职者
[42, 115, 223, 200],
//女神枪手
[52, 119, 226, 209],
//暗夜使者
[56, 102, 225, 226],
//男格斗家
[50, 114, 239, 216],
//男魔法师
[54, 103, 236, 276],
//黑暗武士
[46, 102, 229, 232],
//缔造者
[56, 86, 235, 293],
]
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
//初始化信息
function InitInfo() {
Childrens = [];
//还原标签数量
InitIndexFlag = 1;
//还原高度
Height = 21;
//还原可见性
Visible = true;
//置顶窗口
ResetFocus();
RegisterWidget();
InitInfoFlag = true;
}
function RegisterWidget() {
//是团长才能委任 并且不是我自己 并且我们在同一个攻坚队
if (FiendwarTotal.GetInstance().IsCaptain && !("IsMyself" in InfoObj) && FiendwarTotal.GetInstance().MyPartyId == InfoObj.PartyId) {
//委任团长按钮
local GiveMasterButton = FiendwarPlayerInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
GiveMasterButton.OnShow = function(X, Y) {
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 11, X, Y + 2);
L_sq_DrawCode("委任团长", X + 36, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
}
GiveMasterButton.OnClick = function() {
}.bindenv(this);
AddChild(GiveMasterButton);
InitIndexFlag++;
Height += 21;
}
//查看信息按钮
local CheckInfoButton = FiendwarPlayerInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
CheckInfoButton.OnShow = function(X, Y) {
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 10, X, Y + 2);
L_sq_DrawCode("查看信息", X + 36, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
}
CheckInfoButton.OnClick = function() {
local obj = sq_GetMyMasterCharacter();
//obj.sq_PlaySound("CLICK_BUTTON1");
L_sq_SendPackType(8);
L_sq_SendPackWord(InfoObj.PlayerSession);
L_sq_SendPackByte(3);
L_sq_SendPack();
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
}.bindenv(this);
AddChild(CheckInfoButton);
InitIndexFlag++;
Height += 21;
if (!("IsMyself" in InfoObj)) {
//交易按钮
local TransactionButton = FiendwarPlayerInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
TransactionButton.OnShow = function(X, Y) {
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 0, X, Y + 2);
L_sq_DrawCode("交易", X + 46, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
}
TransactionButton.OnClick = function() {
local obj = sq_GetMyMasterCharacter();
//obj.sq_PlaySound("CLICK_BUTTON1");
L_sq_SendPackType(10);
L_sq_SendPackWord(InfoObj.PlayerSession);
L_sq_SendPackByte(1);
L_sq_SendPackDWord(22053);
L_sq_SendPack();
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
}.bindenv(this);
AddChild(TransactionButton);
InitIndexFlag++;
Height += 21;
if (FiendwarTotal.GetInstance().IsCaptain && FiendwarTotal.GetInstance().MyPartyId == InfoObj.PartyId) {
//攻坚队员强退按钮
local KickMemberButton = FiendwarPlayerInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 4);
KickMemberButton.OnShow = function(X, Y) {
L_sq_DrawImg("interface2/popup_menu/popup_icon_warning.img", 3, X, Y + 2);
L_sq_DrawCode("攻坚队员强退", X + 24, Y + 5, sq_RGBA(255, 50, 50, 255), 0, 1);
}
KickMemberButton.OnClick = function() {
local obj = sq_GetMyMasterCharacter();
//obj.sq_PlaySound("CLICK_BUTTON1");
local T = {
op = 20063021,
teamsId = InfoObj.PartyId,
charCid = InfoObj.Cid
}
Rindro_BaseToolClass.SendPackEx(T);
}.bindenv(this);
AddChild(KickMemberButton);
InitIndexFlag++;
Height += 21;
}
}
}
function Show(obj) {
if (!InitInfoFlag) return;
L_sq_DrawImg("interface2/popup_menu/popup_back.img", 0, X, Y);
//绘制角色名
L_sq_DrawCode(InfoObj.Name, X + 61 - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, Y + 4, sq_RGBA(169, 255, 171, 255), 0, 1);
//绘制头像
foreach(AvatarObj in InfoObj.EquVos) {
local AXpos = AvatarObj.D[0] + X + OffsetArr[InfoObj.Job][0] - 40;
local AYpos = AvatarObj.D[1] + Y + OffsetArr[InfoObj.Job][1];
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
releaseClip(); //裁切结束
}
LenheartNewUI_Windows.Show(obj);
}
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
}

View File

@ -265,14 +265,15 @@ class FiendRewardC extends LenheartNewUI_Windows {
local YOffset = -31 + Flag2; local YOffset = -31 + Flag2;
sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]); sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
//绘制队长头像 // //绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) { // foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12; // local AXpos = AvatarObj.F[0][2] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
local AYpos = AvatarObj.F[1][3] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset; // local AYpos = AvatarObj.F[1][3] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切 // setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos); // DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束 // releaseClip(); //裁切结束
} // }
local DrawName = PartyMasterIcon.InfoObj.Name; local DrawName = PartyMasterIcon.InfoObj.Name;
//绘制名字 //绘制名字
L_sq_DrawCode(DrawName, X + XOffset + 100 - LenheartTextClass.GetStringLength(DrawName) / 2, Y + YOffset + 4, sq_RGBA(247, 214, 90, 250), 0, 1); L_sq_DrawCode(DrawName, X + XOffset + 100 - LenheartTextClass.GetStringLength(DrawName) / 2, Y + YOffset + 4, sq_RGBA(247, 214, 90, 250), 0, 1);

View File

@ -326,14 +326,14 @@ class FiendwarFightSituationC extends LenheartNewUI_Windows {
sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]); sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
// //绘制队长头像 // // //绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) { // foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12; // local AXpos = AvatarObj.F[0][2] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
local AYpos = AvatarObj.F[1][3] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset; // local AYpos = AvatarObj.F[1][3] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切 // setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos); // DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束 // releaseClip(); //裁切结束
} // }
local RgbaValue = sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()); local RgbaValue = sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger());
if (PartyMasterIcon.InfoObj.Captain) RgbaValue = sq_RGBA(247, 214, 90, (250 * AlphaValue).tointeger()); if (PartyMasterIcon.InfoObj.Captain) RgbaValue = sq_RGBA(247, 214, 90, (250 * AlphaValue).tointeger());

View File

@ -67,14 +67,14 @@ class FiendwarNotiC extends LenheartNewUI_Windows {
} }
sq_DrawBox(X + 42 + 118, Y + 1 + 185, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]); sq_DrawBox(X + 42 + 118, Y + 1 + 185, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
//绘制队长头像 // //绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) { // foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + 118; // local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + 118;
local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 185; // local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 185;
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切 // setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos); // L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
releaseClip(); //裁切结束 // releaseClip(); //裁切结束
} // }
} }

View File

@ -6,19 +6,6 @@
*/ */
dofile("sqr/Project/Fiendwar/FiendFightLogic.nut");
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_CreateParty.nut");
dofile("sqr/Project/Fiendwar/FiendwarHallGoBossDgn.nut");
dofile("sqr/Project/Fiendwar/FiendwarFightSituation.nut");
dofile("sqr/Project/Fiendwar/FiendwarNoti.nut");
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_Party.nut");
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut");
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyFormation.nut");
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyHall.nut");
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyInfo.nut");
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut");
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut");
dofile("sqr/Project/Fiendwar/FiendReward.nut");
//超时空核心数据类 //超时空核心数据类
@ -175,7 +162,7 @@ class RinDro_Fiendwar extends Rindro_BaseToolClass {
JobName = MemberObj.PlayerGrowTypeJob, //职业名 JobName = MemberObj.PlayerGrowTypeJob, //职业名
Job = MemberObj.PlayerJob, //职业编号 Job = MemberObj.PlayerJob, //职业编号
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料 StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
EquVos = MemberObj.equVos, //装备List 用于显示头像 EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null), //装备List 用于显示头像
Captain = MemberObj.CaptainBool, //是否为攻坚队队长 Captain = MemberObj.CaptainBool, //是否为攻坚队队长
Cid = MemberObj.CID, //Cid Cid = MemberObj.CID, //Cid
OnlineState = MemberObj.onLineStart, //在线状态 OnlineState = MemberObj.onLineStart, //在线状态

View File

@ -204,15 +204,15 @@ class Rindro_FiendwarApplyJoinC extends LenheartNewUI_Windows {
//绘制角色背景 //绘制角色背景
L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40); L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40);
//绘制角色头像 //绘制角色头像
if (AvatarArr) { // if (AvatarArr) {
foreach(AvatarObj in AvatarArr) { // foreach(AvatarObj in AvatarArr) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[Job][0] - 8; // local AXpos = AvatarObj.F[0][2] + X + OffsetArr[Job][0] - 8;
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[Job][1] + 40; // local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[Job][1] + 40;
setClip(AXpos + OffsetArr[Job][2], AYpos + OffsetArr[Job][3], AXpos + OffsetArr[Job][2] + 22, AYpos + OffsetArr[Job][3] + 18); //开始裁切 // setClip(AXpos + OffsetArr[Job][2], AYpos + OffsetArr[Job][3], AXpos + OffsetArr[Job][2] + 22, AYpos + OffsetArr[Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos); // L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束 // releaseClip(); //裁切结束
} // }
} // }
//绘制角色等级 //绘制角色等级
L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1); L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
//绘制角色名字 //绘制角色名字

View File

@ -36,7 +36,7 @@ class Rindro_FiendwarPartyInfoC extends LenheartNewUI_Windows {
win.ResetFocus(); win.ResetFocus();
local T = { local T = {
Charc = Jso.charac, //角色对象 Charc = Jso.charac, //角色对象
Level = Jso.charac.PlayerLevel, Level = Jso.charac.PlayerLevel.tostring(),
Name = Jso.charac.PlayerName, Name = Jso.charac.PlayerName,
Job = Jso.charac.PlayerJob, Job = Jso.charac.PlayerJob,
PvpLevel = Jso.charac.pvp, PvpLevel = Jso.charac.pvp,
@ -45,7 +45,7 @@ class Rindro_FiendwarPartyInfoC extends LenheartNewUI_Windows {
Fatigue = Jso.charac.PlayFatigue, Fatigue = Jso.charac.PlayFatigue,
Combat = Jso.charac.ZL, Combat = Jso.charac.ZL,
ClearanceCount = Jso.charac.ClearanceCount, ClearanceCount = Jso.charac.ClearanceCount,
AvatarArr = Jso.charac.equVos, AvatarArr = Rindro_Draw_Character(Jso.charac.PlayerJob, Jso.charac.equVos, "rest.ani", null),
PlayerSession = Jso.charac.PlayerSession PlayerSession = Jso.charac.PlayerSession
} }
//没人 //没人

View File

@ -132,14 +132,14 @@ class Rindro_FiendwarPartyInfoMemberC extends LenheartNewUI_CommonUi {
L_sq_DrawImg("interface/newstyle/windows/party/party_icon.img", InfoObj.TeamId * 3, X, Y + 1); L_sq_DrawImg("interface/newstyle/windows/party/party_icon.img", InfoObj.TeamId * 3, X, Y + 1);
sq_DrawBox(X + 42, Y + 1, 22, 18, HandBoxColor[InfoObj.TeamId]); sq_DrawBox(X + 42, Y + 1, 22, 18, HandBoxColor[InfoObj.TeamId]);
//绘制队长头像 // //绘制队长头像
foreach(AvatarObj in InfoObj.EquVos) { // foreach(AvatarObj in InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0]; // local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0];
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1]; // local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1];
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切 // setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos); // L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束 // releaseClip(); //裁切结束
} // }
if (InfoObj.Captain) L_sq_DrawImg("hud/fiendwarl.img", 18, X + 42, Y + 1); if (InfoObj.Captain) L_sq_DrawImg("hud/fiendwarl.img", 18, X + 42, Y + 1);

View File

@ -209,14 +209,14 @@ class Rindro_FiendwarPlayerInteractiveC extends LenheartNewUI_Windows {
L_sq_DrawImg("interface2/popup_menu/popup_back.img", 0, X, Y); L_sq_DrawImg("interface2/popup_menu/popup_back.img", 0, X, Y);
//绘制角色名 //绘制角色名
L_sq_DrawCode(InfoObj.Name, X + 61 - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, Y + 4, sq_RGBA(169, 255, 171, 255), 0, 1); L_sq_DrawCode(InfoObj.Name, X + 61 - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, Y + 4, sq_RGBA(169, 255, 171, 255), 0, 1);
//绘制头像 // //绘制头像
foreach(AvatarObj in InfoObj.EquVos) { // foreach(AvatarObj in InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0] - 40; // local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0] - 40;
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1]; // local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1];
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切 // setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos); // L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束 // releaseClip(); //裁切结束
} // }
LenheartNewUI_Windows.Show(obj); LenheartNewUI_Windows.Show(obj);
} }

View File

@ -0,0 +1,138 @@
/*
文件名:FixItemCout.nut
路径:Project/FixItemCout/FixItemCout.nut
创建日期:2026-01-14 16:58
文件用途:
*/
class FixItemCoutC {
Img = Rindro_Image("common/smallnumber.img");
Img2 = Rindro_Image("interface/digit/small_stroke_white.img");
LengthList = [6, 4, 6, 6, 6, 6, 6, 6, 6, 6, 3, 8, 7];
SmallLengthList = [5, 4, 5, 5, 5, 5, 5, 5, 5, 5];
constructor() {
_FixItemCount_();
}
function Logic(X, Y, Count) {
if (Count > 1) {
local Suf = -1;
if (Count > 9999) {
Count = Count / 10000.0;
Suf = 12;
local Str = Count.tostring();
if (typeof Count == "float") Str = format("%.1f", Count);
local Length = 0;
local DrawList = [];
for (local i = 0; i< Str.len(); i++) {
local char = Str.slice(i, i + 1);
local Width = 0;
if (char == ".") {
Width = 3;
DrawList.append({
index = 10,
width = Width
})
} else {
local Index = char.tointeger();
Width = LengthList[Index];
DrawList.append({
index = Index,
width = Width
})
}
Length += Width;
}
if (Suf != -1) {
DrawList.append({
index = Suf,
width = LengthList[Suf]
})
Length += LengthList[Suf];
}
local DrawOffset = 0;
foreach(index, info in DrawList) {
local offset = 0;
if (index != 0) {
offset = DrawList[index - 1].width + DrawOffset
}
Img.DrawPng(info.index, X - Length + offset, Y + (info.index == 10 ? 7 : 0) + (info.index == 12 ? -1 : 0));
DrawOffset = offset;
}
} else if (Count > 999 && Count <= 9999) {
local Str = Count.tostring();
local Length = 0;
local DrawList = [];
for (local i = 0; i< Str.len(); i++) {
local char = Str.slice(i, i + 1);
local Index = char.tointeger();
DrawList.append({
index = Index,
width = SmallLengthList[Index]
});
Length += SmallLengthList[Index];
}
local DrawOffset = 0;
foreach(index, info in DrawList) {
local offset = 0;
if (index != 0) {
offset = DrawList[index - 1].width + DrawOffset
}
Img2.DrawPng(info.index, X - 1 - Length + offset, Y);
DrawOffset = offset;
}
} else if (Count <= 999) {
local Str = Count.tostring();
local Length = 0;
local DrawList = [];
for (local i = 0; i< Str.len(); i++) {
local char = Str.slice(i, i + 1);
local Index = char.tointeger();
DrawList.append({
index = Index,
width = LengthList[Index]
});
Length += LengthList[Index];
}
local DrawOffset = 0;
foreach(index, info in DrawList) {
local offset = 0;
if (index != 0) {
offset = DrawList[index - 1].width + DrawOffset
}
Img.DrawPng(info.index, X - 1 - Length + offset, Y);
DrawOffset = offset;
}
}
}
}
}
getroottable().rawdelete("FixItemCout_Obj");
function Lenheart_FixItemCout_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("FixItemCout_Obj")) {
RootTab.rawset("FixItemCout_Obj", FixItemCoutC());
}
}
function Sq_FixItemCount(X, Y, Count) {
local RootTab = getroottable();
if (RootTab.rawin("FixItemCout_Obj")) {
RootTab["FixItemCout_Obj"].Logic(X, Y, Count);
}
}
getroottable()["LenheartFuncTab"].rawset("FixItemCoutFuncN", Lenheart_FixItemCout_Fun);

View File

@ -696,4 +696,44 @@ class TH_CombatRankC_Item {
} }
} }
} }
} }
CargoType <- 0;
Sq_GetExeStr_Map[21910] <- function(Index) {
CargoType = 0;
return 21910;
}
Sq_GetExeStr_Map[21911] <- function(Index) {
CargoType = 1;
return 21911;
}
Rindro_Haker.LoadHook(0xE67800, ["int", "int"],
function(args) {
//点击了仓库转移物品
if (args[0] == 0x2B) {
if (CargoType == 0) {
// printf("点击个人仓库转移物品");
local T = {
op = 21091001,
type = 0,
}
Rindro_BaseToolClass.SendPackEx(T);
return [0];
}
if (CargoType == 1) {
// printf("点击账号仓库转移物品");
local T = {
op = 21091001,
type = 1,
}
Rindro_BaseToolClass.SendPackEx(T);
return [0];
}
}
return null;
},
function(args) {
return null;
});

View File

@ -146,10 +146,10 @@ class ItemCrossoverC extends LenheartNewUI_Windows {
if (!MaterialIsEnough) { if (!MaterialIsEnough) {
local str = "跨界材料不足!"; local str = "跨界材料不足!";
L_sq_DrawCode(str, X + 147 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, sq_RGBA(255, 60, 48, 255), 0, 1); L_sq_DrawCode(str, X + 148 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, sq_RGBA(255, 60, 48, 255), 0, 1);
} else { } else {
local str = CrossoverItem.Name; local str = CrossoverItem.Name;
L_sq_DrawCode(str, X + 147 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, GetRarityColor(CrossoverItem.Rarity), 0, 1); L_sq_DrawCode(str, X + 148 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, GetRarityColor(CrossoverItem.Rarity), 0, 1);
} }
} }
} }

View File

@ -16,12 +16,8 @@ class ItemFusionC_ItemSlot extends LenheartNewUI_ItemSlot {
HoverFlag = false; HoverFlag = false;
<<<<<<< HEAD
constructor(X, Y, Index) { constructor(X, Y, Index) {
MyIndex = Index; MyIndex = Index;
=======
constructor(X, Y) {
>>>>>>> a11458d226ec41caa22d30b6d76893362389e3e1
LenheartNewUI_ItemSlot.constructor(X, Y); LenheartNewUI_ItemSlot.constructor(X, Y);
} }
@ -36,21 +32,21 @@ class ItemFusionC_ItemSlot extends LenheartNewUI_ItemSlot {
// if (Item.rawin("itemAddress")) Parent.TemporaryDrawItemAddress = null; // if (Item.rawin("itemAddress")) Parent.TemporaryDrawItemAddress = null;
// } // }
CheckInRect(); // CheckInRect();
} }
function CheckInRect() { // function CheckInRect() {
local MousePos_X = IMouse.GetXPos(); // local MousePos_X = IMouse.GetXPos();
local MousePos_Y = IMouse.GetYPos(); // local MousePos_Y = IMouse.GetYPos();
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, 30, 30)) { // if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, 30, 30)) {
//绘制悬停框 // //绘制悬停框
L_sq_SetDrawImgModel(2, 0); // L_sq_SetDrawImgModel(2, 0);
Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X, Y); // Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X, Y);
L_sq_ReleaseDrawImgModel(); // L_sq_ReleaseDrawImgModel();
HoverFlag = true; // HoverFlag = true;
} else HoverFlag = false; // } else HoverFlag = false;
} // }
function DiscardItem(info) { function DiscardItem(info) {

View File

@ -68,6 +68,7 @@ class ItemInheritC extends LenheartNewUI_Windows {
// ResultItemSlot.SetItem(ItemR); // ResultItemSlot.SetItem(ItemR);
AddChild(ResultItemSlot); AddChild(ResultItemSlot);
} }

View File

@ -0,0 +1,353 @@
/*
文件名:ItemOtherWolrdUpgrade.nut
路径:Project/ItemTool/ItemOtherWolrdUpgrade/ItemOtherWolrdUpgrade.nut
创建日期:2026-01-13 19:31
文件用途:
*/
class ItemOtherWolrdUpgradeC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
// Visible = false;
Img = Rindro_Image("interface2/ui/newitemtool/otherworldup.img");
//装备
Item = null;
//装备槽位
ItemSlot = null;
//注册的NPC列表
NPCList = null;
//所需的基础材料
BasicMaterials = null;
//等级倍率
LevelRate = null;
//品级倍率
RarityRate = null;
//背景动画
BackGroundAni = null;
//错误
Error = 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);
DiscardItemCallBackFunc.rawset("ItemOtherWolrdUpgradeC", DiscardItem.bindenv(this));
//初始化信息
InifPvf();
//注册NPC回调
RegNpc();
//初始化背景动画
local BallFrameArr = [];
for (local i = 0; i< 30; i++) {
local T = {
ImgIndex = i,
Delay = 60,
Pos = [0, 0]
}
BallFrameArr.append(T);
}
BackGroundAni = Rindro_CustomAnimation("interface2/itemtoolwindow/changeoptions/mastercube.img", BallFrameArr);
Pack_Control.rawset(21010002, 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(21010004, function(Chunk) {
//清空
Item = null;
ItemSlot.RemoveItem();
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 = 21010003,
item = Item
});
}.bindenv(this);
CrossoverButton.SetCallBackFunc(function(Btn) {
if (ErrorMsg || !MaterialIsEnough) {
Btn.State = 8;
} else {
Btn.State = 0;
}
}.bindenv(this));
AddChild(CrossoverButton);
ItemSlot = LenheartNewUI_ItemSlot(132, 100);
ItemSlot.SetRemoveCallBack(function(obj) {
Item = null;
}.bindenv(this));
AddChild(ItemSlot);
}
//绘制主界面
function DrawMain(obj) {
//背景框
DrawNineBox(X, Y, 292, 292, "interface/lenheartwindowcommon.img", 213);
//标题
DrawWindowTitle(293);
//绘制标题名
L_sq_DrawCode("异界装备升级", X + 110, Y + 5, sq_RGBA(230, 200, 155, 255), 0, 1);
setClip(X + 8, Y + 32, X + 285, Y + 259);
local rate = 0.35;
Img.DrawExPng(1, X + 12, Y + 36, 0, sq_RGBA(255, 255, 255, 250), rate, rate);
L_sq_SetDrawImgModel(2, 0);
BackGroundAni.ShowEx(Duration, X + 12 - 80, Y + 36 - 45, sq_RGBA(255, 255, 255, 250), 0.75, 0.75);
L_sq_ReleaseDrawImgModel();
releaseClip();
Img.DrawPng(0, X + 8, Y + 32);
// if (MaterialsList) {
// foreach(Index, Info in MaterialsList) {
// DrawItemBase(X + 31 + 51 * Index, Y + 195, Info.ItemId, Info.ItemCount);
// }
// }
//绘制跨界所需材料及数量信息
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 + 148 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, sq_RGBA(255, 60, 48, 255), 0, 1);
} else {
local str = Item.Name;
L_sq_DrawCode(str, X + 148 - LenheartTextClass.GetStringLength(str) / 2, Y + 142, GetRarityColor(Item.Rarity), 0, 1);
}
}
}
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 {
Item = FindItemPosByForeachInven(ItemAddress);
if (Item) {
local ItemObject = Rindro_Item();
ItemObject.LoadByAddress(Item.ItemAddress);
ItemSlot.SetItem(ItemObject);
SendPackEx({
op = 21010001,
item = Item
});
}
}
}
//遍历背包查找Item
function FindItemPosByForeachInven(FindAddress) {
local Inven = L_sq_RA(0x1A5FB24);
local InvenAdd = L_sq_RA(Inven + 56);
InvenAdd += 36;
for (local z = 0; z< 1; 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;
}
local rRarity = L_sq_RA(FindAddress + 0xF4);
//不是异界装备
if (rRarity != 5) return;
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 = rRarity,
Level = L_sq_RA(FindAddress + 0x8)
};
}
}
}
return null;
}
//读取配置
function InifPvf() {
Rindro_Script.GetFileData("etc/rindro/itemtool/itemotherworldupgrade/itemotherworldupgrade.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);
}
} else if (Fragment == "[BASIC MATERIALS]") {
BasicMaterials = [];
while (true) {
local Fbuf = Data.Get();
if (Fbuf == "[/BASIC MATERIALS]") {
break;
}
local T = {
Item = Fbuf,
Count = Data.Get()
}
BasicMaterials.push(T);
}
} else if (Fragment == "[LEVEL RATE]") {
LevelRate = Data.Get()
} else if (Fragment == "[RARITY RATE]") {
RarityRate = Data.Get()
}
}
});
}
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;
//清空
Item = null;
ItemSlot.RemoveItem();
ErrorMsg = null;
MaterialInfo = null;
MaterialIsEnough = false;
}
}
L_Windows_List <- [];
getroottable().rawdelete("LenheartPluginsInitFlag");
getroottable().rawdelete("EventList_Obj")
getroottable().rawdelete("ItemOtherWolrdUpgrade_Obj");
getroottable().rawdelete("L_Each_Obj");
function Lenheart_ItemOtherWolrdUpgrade_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("ItemOtherWolrdUpgrade_Obj")) {
RootTab.rawset("ItemOtherWolrdUpgrade_Obj", true);
LenheartNewUI_CreateWindow(ItemOtherWolrdUpgradeC, "异界装备升级窗口", ((getroottable().Rindro_Scr_Width - 700) / 2).tointeger(), 160, 292, 290, 28);
}
}
getroottable()["LenheartFuncTab"].rawset("ItemOtherWolrdUpgradeFuncN", Lenheart_ItemOtherWolrdUpgrade_Fun);

View File

@ -36,7 +36,7 @@ class Rindro_LukePartyInfoC extends LenheartNewUI_Windows {
win.ResetFocus(); win.ResetFocus();
local T = { local T = {
Charc = Jso.charac, //角色对象 Charc = Jso.charac, //角色对象
Level = Jso.charac.PlayerLevel, Level = Jso.charac.PlayerLevel.tostring(),
Name = Jso.charac.PlayerName, Name = Jso.charac.PlayerName,
Job = Jso.charac.PlayerJob, Job = Jso.charac.PlayerJob,
PvpLevel = Jso.charac.pvp, PvpLevel = Jso.charac.pvp,

View File

@ -14,10 +14,10 @@ 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");
//窗口名称 //窗口名称
WindowTitle = "普通宝藏哥布林的宝箱"; WindowTitle = "普通宝藏哥布林的宝箱";

View File

@ -220,5 +220,20 @@
}, },
"Project/WarehouseLock": { "Project/WarehouseLock": {
"description": "仓库锁" "description": "仓库锁"
},
"Base/_Z_Data/Global.nut": {
"description": "全局信息类"
},
"Project/ExpandEquipment": {
"description": "拓展装备"
},
"Project/ItemTool/ItemOtherWolrdUpgrade": {
"description": "异界装备升级"
},
"Base/_Tool/CustomAnimation_Class.nut": {
"description": "自定义Ani"
},
"Project/FixItemCout": {
"description": "修复道具数量显示"
} }
} }