This commit is contained in:
Lenheart 2025-05-27 21:24:22 +08:00
parent e1528c41bb
commit d71fc5c822
126 changed files with 11382 additions and 1202 deletions

View File

@ -0,0 +1,5 @@
# This directory is a Syncthing folder marker.
# Do not delete.
folderID: ss9v4-63p4r
created: 2025-05-01T05:49:43+08:00

View File

@ -2,8 +2,9 @@
文件名:DrawHudMain.nut
路径:Base/CallBack/DrawHudMain.nut
创建日期:2024-08-29 09:39
文件用途:血槽绘制入口(图层在血槽层)
文件用途:
*/
//血槽背景
function L_HUD_BloodBackground() {
local RootTab = getroottable();
local obj = sq_getMyCharacter();
@ -21,6 +22,7 @@ function L_HUD_BloodBackground() {
getroottable().Camera_Pos <- {};
//城镇摄像机
function L_Sync_Camera_Pos(Camera_Object) {
// print(Camera_Object);
// print(Camera_Object);
@ -31,5 +33,5 @@ function L_Sync_Camera_Pos(Camera_Object) {
function Sq_DrawChannel() {
// L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer_calendarui.img", 0, 0, 0);
print(Clock());
}
}

View File

@ -9,17 +9,18 @@ function L_drawMainCustomUI_All() {
local obj = sq_getMyCharacter();
if (!obj) return;
local RootTab = getroottable();
//获取与上一帧的dt
if (!(getroottable().rawin("Rindro_DurationFlag"))) {
if (!(RootTab.rawin("Rindro_DurationFlag"))) {
Rindro_DurationFlag <- L_Getmicroseconds();
Rindro_Duration <- 0;
} else {
local NowM = L_Getmicroseconds();
Rindro_Duration = NowM - Rindro_DurationFlag;
Rindro_Duration = (NowM - Rindro_DurationFlag) / 2;
Rindro_DurationFlag = NowM;
}
local RootTab = getroottable();
//下帧执行任务事件
if (RootTab.rawin("LenheartNextFrameFuncTab")) {
foreach(Func in RootTab["LenheartNextFrameFuncTab"]) {
@ -31,158 +32,119 @@ function L_drawMainCustomUI_All() {
}
//重载逻辑
try {
local Func = loadfile("Yosin_Game_Reloading.Sign", true);
Func();
L_Cmd("cmd.exe /c del Yosin_Game_Reloading.Sign");
//清空窗口
L_Windows_List = [];
//清空所有注册包
Pack_Control = {};
PushDamageFontDataFuncTab <- {};
PushDamageFontFuncTab <- {};
//清空活动图标窗口
getroottable().rawdelete("EventList_Obj");
//清空插件初始化状态
getroottable().rawdelete("LenheartPluginsInitFlag");
getroottable().rawdelete("RINDRO_GET_ITEM_FLAG");
//特殊清空
getroottable().rawdelete("OnlineAnnouncement_Obj");
//血槽UI
getroottable().rawdelete("HudUi_Obj");
//交互UI
getroottable().rawdelete("L_Each_Obj");
//战令
getroottable().rawdelete("AradPass_Obj");
//战斗力系统
getroottable().rawdelete("CombatRankC_Obj");
//刷图签到
getroottable().rawdelete("FightSign_Obj");
//希曼音乐会
getroottable().rawdelete("MidsummerParty_Obj");
//在线签到
getroottable().rawdelete("OnilneSign_Obj");
//全服竞拍
getroottable().rawdelete("ServerAuction_Obj");
//秒伤统计
getroottable().rawdelete("DamagePerSecond_Obj");
//皮肤仓库
getroottable().rawdelete("SkinHub_Obj");
} catch (exception) {
if (exception != "cannot open the file")
print("Reloading Script Fail !!! \n" + exception);
}
//
local RootTab = getroottable();
//尝试调用百级UI
// if (getroottable().rawin("Lenheart_100UI_Event_BackGround")) Lenheart_100UI_Event_BackGround();
// if (getroottable().rawin("Lenheart_100UI")) Lenheart_100UI(obj);
Sq_ReloadLogic();
//初始化活动图标
Lenheart_EventList_Fun(obj);
//加载注册Base函数窗口
if (RootTab.rawin("LenheartBaseFuncTab")) {
if (RINDRO_INIT_FLAG) {
local LenheartFunc = RootTab["LenheartBaseFuncTab"];
foreach(Func in LenheartFunc) {
Func(obj);
}
local LenheartFunc = RootTab["LenheartBaseFuncTab"];
foreach(Func in LenheartFunc) {
Func(obj);
}
}
//加载注册Ex函数窗口
if (RootTab.rawin("LenheartFuncTab")) {
if (RINDRO_INIT_FLAG) {
local LenheartFunc = RootTab["LenheartFuncTab"];
foreach(Func in LenheartFunc) {
Func(obj);
}
local LenheartFunc = RootTab["LenheartFuncTab"];
foreach(Func in LenheartFunc) {
Func(obj);
}
}
//所有插件初始化完毕
if (!getroottable().rawin("LenheartPluginsInitFlag")) {
if (RINDRO_INIT_FLAG) {
local T = {
op = 25001021,
}
Rindro_BaseToolClass.SendPackEx(T);
getroottable().LenheartPluginsInitFlag <- true;
local T = {
op = 25001021,
}
Rindro_BaseToolClass.SendPackEx(T);
getroottable().LenheartPluginsInitFlag <- true;
}
//初始化Item信息
if (!getroottable().rawin("RINDRO_GET_ITEM_FLAG")) {
RINDRO_CONFIG <- Rindro_GetLocalConfig();
getroottable().RINDRO_GET_ITEM_FLAG <- true;
Rindro_BaseToolClass.SendPackEx({
op = 20069005,
md5 = Rindro_GetMd5()
});
}
// if (Clock() - getroottable().Lsnzz >= 50) {
// getroottable().Lsnzz = Clock();
// local T = {
// op = 25001021,
// }
// Rindro_BaseToolClass.SendPackEx(T);
// }
// if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/curreny.nut")) {
// local appendage1 = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 174, false, "appendage/curreny.nut", true);
// }
// print(format("%02X", L_sq_RA(0x1B474D4)));
// print(R_Mouse.IsLock());
// print(format("%02X", L_sq_RA(0x3431de00 + 0x14)));
// L_sq_WA(0x3431de00 + 0x14,200);
// print(format("%02X", L_sq_RA(0x1AE94C4, "0x590+0x44+")));
//外界主界面
// if(L_sq_RA(0x1B474D4) == 0x3C7FB100)print(true);
// else print(false);
// print(CheckInOldW());
// GetTownBaseBackgroundAddress();
// print(getroottable().WindowsShowABFlag);
// L_Sq_GetPlayerEachName();
// Sout("%L",L_Sq_GetPlayerEachName());
// print(Rindro_BaseToolClass.GetEachNpcId());
// for (local i = 0; i< 400; i++) {
// local WindowAddress = L_sq_GetWindowById(i);
// if (WindowAddress != 0) print(format("%02X", WindowAddress));
// if (WindowAddress == 0x39F56000) print(i);
// }
// if (Clock() - getroottable().SINNU >= 10) {
// getroottable().SINNU = Clock();
// L_sq_MoveTown(1, 1, 474, 249);
// }
// print(sq_GetCurrentModuleType());
// Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/luke/newtile/02_success_back_1.ani", 430, 210 + 26, "卢克阻截开始" + AHSJKDNJKA);
}
// AHSJKDNJKA <- Clock();
// getroottable().SINNU <- Clock();
// 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);
// print(T);
// Register_DPS_Pack(1, function(Jso) {
// printT(Jso);
// });
// local asos = sq_CreateAICharacter(900);
// 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);
// }

View File

@ -35,4 +35,50 @@ function SetDamageRateCallBack(Chunk) {
}
Pack_Control.rawset(2024110902, SetDamageRateCallBack);
getroottable()["LenheartFuncTab"].rawset("GetDamageRateFuncN", Lenheart_GetDamageRate_Fun);
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

@ -0,0 +1,157 @@
/*
文件名:PackControl.nut
路径:Base/PackControl/PackControl.nut
创建日期:2024-08-06 22:13
文件用途:
*/
Pack_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);
}
}
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 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) {
//在副本中
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);

View File

@ -1,71 +0,0 @@
/*
文件名:Window_Get.nut
路径:Base/CallBack/Window_Get.nut
创建日期:2024-08-08 13:38
文件用途:窗口被获取时经过的函数
*/
getroottable().RindroOneRunTable <- {};
function OneRunCode(Func, Key, Window_Obj) {
if (!RindroOneRunTable.rawin(Key)) {
Func(Window_Obj);
RindroOneRunTable.rawset(Key, true);
}
}
function L_Old_Window_Get(Window_Obj) {
// print(L_sq_RA(Window_Obj + 0xC));
// L_sq_WA(Window_Obj + 0xC,257);
// L_sq_RA(Window_Obj, "0xC+");
// if (L_sq_RA(Window_Obj + 0x14) == 0) {
// print(L_sq_RA(Window_Obj + 0x18));
// print(format("%02x", Window_Obj));
// }
// if (0x422e2100 == Window_Obj) {
// print(L_sq_RA(Window_Obj + 0x14));
// }
// OneRunCode(function(Window_Obj) {
// if (0x185242C == L_sq_RA(Window_Obj)) {
// //任务提示
// if (L_sq_RAB(Window_Obj + 0x78) == 131 && L_sq_RAB(Window_Obj + 0x79) == 2) {
// L_sq_WA(Window_Obj + 0x14, 144);
// L_sq_WA(Window_Obj + 0x18, 53);
// }
// }
// }, "任务提示设置", Window_Obj);
// //任务提示
// if (0x185242C == L_sq_RA(Window_Obj)) {
// if (L_sq_RA(Window_Obj + 0x44) == 131 && L_sq_RAB(Window_Obj + 0x79) == 2) {
// L_sq_WA(Window_Obj + 0x14, 144);
// L_sq_WA(Window_Obj + 0x18, 53);
// }
// }
// if(369 == L_sq_RA(Window_Obj + 0x78))
// print(format("%02X", Window_Obj));
}
//窗口是否打开
function L_Old_Window_Visible(WindowObject, Flag) {
// print(format("%02X", WindowObject));
// if (Character_Info_Window_Address.rawin(WindowObject)) {
// L_sq_WAB(WindowObject + 0xc, 0);
// // print(L_sq_RA(WindowObject + 0x14));
// // print(format("%02X", WindowObject));
// }
// print(1213);
// foreach(Key, Table in Character_Info_Window_Address) {
// L_sq_WA(Key + 0xC, 256);
// // print(format("%02X", Key));
// }
}

21
Base/Interface.nut Normal file
View File

@ -0,0 +1,21 @@
/*
文件名: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"))Sq_AutoReload("sqr");

View File

@ -1,40 +0,0 @@
/*
文件名:PackControl.nut
路径:Base/PackControl/PackControl.nut
创建日期:2024-08-06 22:13
文件用途:
*/
Pack_Control <- {}
function Sq_Pack_Control(Chunk) {
try {
local Pack_Json = Json.Decode(Chunk);
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);
}
}
function Sq_Pack_ControlLocal(Chunk) {
local Pack_Json = Json.Decode(Chunk);
if (Pack_Control.rawin(Pack_Json.op)) {
Pack_Control[Pack_Json.op](Chunk);
}
}
//进入副本回调
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);

View File

@ -4,6 +4,7 @@
创建日期:2024-08-27 12:13
文件用途:个人信息属性面板
*/
return;
class Lenheart_Character_Info_ClassC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
@ -372,6 +373,7 @@ DrawCodeCallBackFunc.Rindro_Character_Info <- function(Args) {
//个人信息窗口逻辑
function L_Character_Info_Window(WindowObject) {
return false;
// //返回Flase 原逻辑继续执行 返回Tue 原逻辑终止执行
// local Flag = false;
// if (getroottable().rawin("Lenheart_Character_Info_Class_Obj")) {
@ -487,6 +489,7 @@ class Lenheart_Other_Character_Info_ClassC extends Lenheart_Character_Info_Class
//他人信息窗口逻辑
function L_Other_Character_Info_Window(WindowObject) {
return false;
//返回Flase 原逻辑继续执行 返回Tue 原逻辑终止执行
local Flag = false;
if (getroottable().rawin("Lenheart_Other_Character_Info_Class_Obj")) {

View File

@ -6,6 +6,11 @@
*/
class Rindro_Cursor {
//强制锁
ForceLockState = false;
//是否启用
UseState = 0;
TypeState = 0;

View File

@ -238,13 +238,181 @@ function Lenheart_Each_Fun(obj) {
getroottable()["LenheartFuncTab"].rawset("Lenheart_EachN", Lenheart_Each_Fun);
// Rindro_Haker.LoadHook(0x10041D0, ["int", "int", "int"],
// function(args) {
// if (getroottable().rawin("L_Each_Obj")) {
// getroottable()["L_Each_Obj"].BottomShow();
// }
// return null;
// },
// function(args) {
// return null;
// });
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

@ -88,6 +88,9 @@ class Rindro_Event extends LenheartNewUI_Windows {
//是否可见
Visible = true;
//主要Button
MainButton = null;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
@ -127,13 +130,17 @@ class Rindro_Event extends LenheartNewUI_Windows {
function TopShow(obj) {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 20, 20)) {
L_sq_DrawImg("interface2/yosin/eventsystem.img", 0, X - 7, Y - 24);
local Len = ObjectId.len() / 3;
for (local i = 0; i< Len; i++) {
L_sq_DrawImg("interface2/yosin/eventsystem.img", 1, X - 2 + (15 * i), Y - 24);
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 - 2 + (15 * Len - 1), Y - 24);
L_sq_DrawCode(ObjectId, X + 5, Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1);
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);
}
}
@ -158,6 +165,7 @@ class Rindro_EventList {
//活动数组
Events = null;
EventsMap = null;
function YosinEventIconInfoCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
@ -175,12 +183,14 @@ class Rindro_EventList {
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";
@ -193,7 +203,10 @@ class Rindro_EventList {
}.bindenv(this);
Window.AddChild(ButtonBuf);
Window.PosIdx = Events.len();
Window.MainButton = ButtonBuf;
Events.append(Window);
EventsMap.rawset(Name, Window);
return Window;
}
//检测是否悬停活动图标

View File

@ -21,12 +21,13 @@ class R_Mouse {
}
//锁定鼠标
function Lock() {
_Rindro_Cusor_.UseState = 1;
L_sq_WAB(0x1B46886, 1);
//技能描述窗口
Sq_Memory_WriteByteArr(L_sq_I2P(0x4CC47E), [0xE9, 0xA0, 0x00, 0x00, 0x00, 0x90]);
//物品描述窗口
Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x90, 0x90, 0x90, 0x90, 0x90, 0x90]);
// Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x90, 0x90, 0x90, 0x90, 0x90, 0x90]);
//buff信息描述窗口
Sq_Memory_WriteByteArr(L_sq_I2P(0x4BF532), [0x90, 0x90, 0x90, 0x90]);
//原生商城 个人信息等按钮的悬停
@ -36,10 +37,11 @@ class R_Mouse {
}
//解锁鼠标
function UnLock() {
_Rindro_Cusor_.UseState = 0;
L_sq_WAB(0x1B46886, 0);
Sq_Memory_WriteByteArr(L_sq_I2P(0x4CC47E), [0x39, 0x05, 0xE0, 0xF6, 0xA3, 0x01]);
Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x56, 0xE8, 0x10, 0xFE, 0xFF, 0xFF]);
// Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x56, 0xE8, 0x10, 0xFE, 0xFF, 0xFF]);
Sq_Memory_WriteByteArr(L_sq_I2P(0x4BF532), [0x75, 0x07, 0x32, 0xC0]);
L_sq_WAB(0x4C4690, 0x55);
L_sq_WAB(0x11C6510, 0x55);
@ -51,6 +53,7 @@ class R_Mouse {
}
//设置鼠标工作类型
function SetType(Type) {
_Rindro_Cusor_.TypeState = Type;
// L_sq_WAB(0x1b46898, Type);
}
@ -61,6 +64,7 @@ class R_Mouse {
}
//鼠标0状态设置是否按下
function SetBaseState(Flag) {
_Rindro_Cusor_.SubState = Flag;
// return L_sq_WAB(0x1B46874, Flag);
}
@ -145,6 +149,15 @@ class LenheartNewUI_BaseWindow extends Rindro_BaseToolClass {
Window.SyncPos(X, Y);
}
}
/*
* @函数作用: 添加子对象
* @参数 name
*/
function AddChild(gChild) {
this.Childrens.append(gChild);
gChild.Parent = this;
}
}
//游戏窗口类
@ -473,18 +486,17 @@ function CheackMouseInOldWindows() {
local Flag = L_sq_RA(WindowAddress);
foreach(value in OldBaseWindowArr) {
if (Flag == value) {
// if ((L_sq_RA(WindowAddress + 0x14) == 0 && L_sq_RA(WindowAddress + 0x18) == 0) || Flag == 0x184D0C4) {
// print(false);
// }
//空地
if (Flag == 0x184D0C4 || Flag == 0x0184CF6C) {
//都为0的时候城镇背景 508是血槽那一块的逻辑 坐标Y是508
if ((L_sq_RA(WindowAddress + 0x14) == 0 && (L_sq_RA(WindowAddress + 0x18) == 0 || L_sq_RA(WindowAddress + 0x18) == 508))) {
return false;
}
} else return false;
} else {
//原生窗口里的按钮
if(Flag == 0x184D174)return true;
return false;
}
}
}
}
@ -547,7 +559,8 @@ function L_MouseCallBack(MouseState, MouseFlag, MousePos_X, MousePos_Y) {
// }
if (MouseState == 0x200) {
//常规事件就要设定鼠标是否锁定逻辑
RunMouseLogic(MousePos_X, MousePos_Y);
if (_Rindro_Cusor_.ForceLockState == false)
RunMouseLogic(MousePos_X, MousePos_Y);
}
//判断是否悬停活动图标 没悬停在老窗口上 没在选图界面
@ -615,7 +628,8 @@ function L_MouseCallBack(MouseState, MouseFlag, MousePos_X, MousePos_Y) {
//打开原生窗口回调
function L_OpenOldWindowCallBack(WindowIndex) {
//将新窗口渲染队列改为下层 抵消窗口 Esc窗口 登录可能显示的任务窗口
if (WindowIndex != 170 && WindowIndex != 176 && WindowIndex != 276 && WindowIndex != 275 && WindowIndex != 278 && WindowIndex != 283 && WindowIndex != 36) {
if (WindowIndex != 170 && WindowIndex != 176 && WindowIndex != 276 && WindowIndex != 275 && WindowIndex != 278 && WindowIndex != 279 && WindowIndex != 283 && WindowIndex != 36) {
getroottable().WindowsShowABFlag <- false;
}
}
@ -865,6 +879,48 @@ class LenheartNewUI_Button extends LenheartNewUI_CommonUi {
}
}
class LenheartNewUI_VerticalButton extends LenheartNewUI_CommonUi {
State = 0;
BaseIdx = 29;
DHeight = null; // 改为高度
Path = "interface/lenheartwindowcommon.img";
Idx = 172;
FillHeight = 2; // 改为填充高度
FirstHeight = 28; // 改为首节高度
Width = 24; // 固定宽度,垂直按钮宽度通常是固定的
constructor(X, Y, H) {
this.DHeight = H;
LenheartNewUI_CommonUi.constructor(X, Y, 24, H + 28 * 2); // 宽度固定,高度动态
}
function SetFrame(gPath, gIdx) {
if (gPath) Path = gPath;
Idx = gIdx;
}
function Show(obj) {
//不可用
if (State == 8) {
L_sq_Draw3Image_Vertical(X + 1, Y, this.Width, this.DHeight, Path, Idx + 9, FillHeight, FirstHeight);
} else {
//按下
if (isLBDown) {
L_sq_Draw3Image_Vertical(X + 1, Y, this.Width, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight);
}
//悬停
else if (isInRect) {
L_sq_Draw3Image_Vertical(X, Y, this.Width, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight);
}
//普通
else {
L_sq_Draw3Image_Vertical(X, Y, this.Width, this.DHeight, Path, Idx, FillHeight, FirstHeight);
}
}
}
}
class LenheartNewUI_ButtonText extends LenheartNewUI_Button {
TextStr = null;
TextX = null;

View File

@ -4,8 +4,6 @@
创建日期:2024-08-06 22:09
文件用途:按键枚举类
*/
//反遍历
L_sq_WA(0x1370FD7, 0);
DIK_ESCAPE <- 0x01
DIK_1 <- 0x02
DIK_2 <- 0x03
@ -150,7 +148,144 @@ 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:
@ -238,4 +373,7 @@ function Rindro_GetEquAddr(addr) {
break;
}
return -1;
}
}
//本地模式
if(!getroottable().rawin("RINDROLOCAL"))RINDROLOCAL <- false;

View File

@ -62,8 +62,8 @@ class Rindro_Animation {
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).GetPng(FrameObj.Img_Index);
Png.Draw(-500, -500);
local Png = Rindro_Image.Load(FrameObj.Img_Path);
// Png.Draw(-500, -500);
//如果有附加处理 坐标
if (AdditionalOptions && AdditionalOptions.rawin("Pos")) {
@ -75,7 +75,22 @@ class Rindro_Animation {
PngList.append(Png);
}
} else {
error("创建Ani失败,找不到Ani数据");
AnimationFlag = {};
FrameList.append({
AttackBox = [],
DamageBox = [],
Delay = 800,
Flag = {},
Img_Index = 0,
Img_Path = "",
Pos = {
x = -248,
y = -331
}
})
// print(Data);
// print("创建Ani失败,找不到Ani数据");
}
}
@ -92,6 +107,7 @@ class Rindro_Animation {
}
function FlushFrame(Index) {
if (PngList.len() <= 0) return;
//同步当前帧
CurrentFrameIndex = Index;
//当前帧更换为本帧
@ -110,13 +126,12 @@ class Rindro_Animation {
//绘制
function DrawFrame(X, Y) {
// local NowDrawPng = CurrentFrame;
local FrameObj = FrameList[CurrentFrameIndex];
//线性减淡
if ("GRAPHIC_EFFECT_LINEARDODGE" in FrameObj.Flag) {
L_sq_SetDrawImgModel(2, 0);
}
// local NowDrawPng = CurrentFrame;
if (FrameList.len() <= 0) return;
local FrameObj = FrameList[CurrentFrameIndex];
// printT(FrameObj);
//坐标偏移
local XOffset = FrameObj.Pos.x;
@ -138,8 +153,17 @@ class Rindro_Animation {
YRate = Fbuf.y;
}
if (CurrentFrame) CurrentFrame.DrawEx(X + XOffset, Y + YOffset, Angle, RGBA, XRate, YRate);
L_sq_ReleaseDrawImgModel();
//线性减淡
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();
}
}
@ -172,6 +196,14 @@ class Rindro_Animation {
}
}
}
function DrawIndex(X, Y, Index) {
// return;
if (IsUsability) {
FlushFrame(Index);
DrawFrame(X, Y);
}
}
}
@ -246,6 +278,65 @@ class Rindro_Draw_Character {
},
];
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) {
@ -379,8 +470,15 @@ class Rindro_Draw_Character {
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) {
setClip(X, Y, X + 22, Y + 18); //开始裁切
foreach(AniInfo in DrawInfo) {
AniInfo.Ani.DrawIndex(X + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].x, Y + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].y, 0);
}
releaseClip(); //裁切结束
}
}
//鬼剑士
//601580026 101550559
// Sassq <- {};

View File

@ -192,21 +192,22 @@ class MemoryTool {
}
}
//解密读取内存地址的数据
function DecodeMemoryData(Address) {
local nEax, nEcx8, nEsi, nEdx, nTmp;
nEax = L_sq_RA(Address);
nEax = NativePointer(L_sq_I2P(Address)).readInt();
if (nEax == -1) return nEax;
nEcx8 = L_sq_RA(Address + 8);
nEcx8 = NativePointer(L_sq_I2P(Address + 8)).readInt();
if (nEcx8 == -1) return nEcx8;
nEsi = L_sq_RA(0x1AF8D78);
nEsi = NativePointer(L_sq_I2P(0x1AF8D78)).readInt();
nEdx = nEax >> 16;
nTmp = (nEdx << 2) + nEsi + 36;
nEdx = L_sq_RA(nTmp);
nEdx = NativePointer(L_sq_I2P(nTmp)).readInt();
if (nEdx == -1) return nEdx;
nEax = nEax & 65535;
nTmp = (nEax << 2) + nEdx + 8468;
nEax = L_sq_RA(nTmp);
nEax = NativePointer(L_sq_I2P(nTmp)).readInt();
if (nEax == -1) return nEax;
nEdx = nEax & 0xFFFF;
nEsi = nEdx << 16;
@ -285,4 +286,47 @@ class MemoryTool {
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;
}
}

View File

@ -42,4 +42,19 @@ Rindro_Haker.LoadHook(0x674350, ["pointer", "int"],
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

@ -100,6 +100,49 @@ class R_Utils {
}
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;
}
}
@ -158,11 +201,11 @@ getroottable().DrawCodeCallBackFunc <- {};
// // print("nut:" + format("%02x", args[3]));
// if (args[3]) {
// // for (local i = 0; i< 10000; i++) {
// local DrawCode = NativePointer((args[3])).readUnicodeString();
// // print(DrawCode);
// if (DrawCode in DrawCodeCallBackFunc)
// DrawCodeCallBackFunc[DrawCode](args);
// // print(args[3]);
// // }
// }
// return null;
// },
@ -173,6 +216,7 @@ getroottable().DrawCodeCallBackFunc <- {};
// return null;
// });
//绘制城镇回调
getroottable().DrawTownCallBackFunc <- {};
Rindro_Haker.LoadHook(0x1108700, ["int", "void"],
@ -193,8 +237,65 @@ Rindro_Haker.LoadHook(0x1108700, ["int", "void"],
//顺图
function Rindro_Gm_MoveMap()
{
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()["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

@ -6,8 +6,12 @@
*/
class Rindro_Png {
C_Object = null;
Path = null;
Idx = null;
constructor(Object) {
constructor(Object, Path, Idx) {
this.Path = Path;
this.Idx = Idx;
this.C_Object = Object;
}
@ -22,15 +26,18 @@ class Rindro_Png {
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) {
return Rindro_Png(L_Sq_CallFunc(0x11AA190, "int", FFI_THISCALL, ["int", "int"], Img, Idx));
local PngObject = L_Sq_CallFunc(0x11AA190, "int", FFI_THISCALL, ["int", "int"], Img, Idx);
return Rindro_Png(PngObject, Path, Idx);
}
}

View File

@ -27,7 +27,7 @@ class JSONParser {
if (vargc > 0) converter = vargc[0];
// actions for string tokens
local string = {
go = function() {
state = "ok";
@ -55,7 +55,7 @@ class JSONParser {
}.bindenv(this)
};
// the actions for number tokens
local number = {
go = function() {
state = "ok";
@ -75,8 +75,8 @@ class JSONParser {
};
// action table
// describes where the state machine will go from each given state
local action = {};
@ -188,9 +188,9 @@ class JSONParser {
action[":"] <- {
colon = function() {
// Check if the key already exists
// NOTE previous code used 'if (key in container)...'
// but this finds table ('container') member methods too
local err = false;
foreach(akey, avalue in container) {
if (akey == key) err = true;
@ -271,11 +271,11 @@ class JSONParser {
//
state = "go";
stack = [];
// current tokenizeing position
local start = 0;
try {
@ -285,14 +285,14 @@ class JSONParser {
while (token = tokenizer.nextToken(str, start)) {
if ("ptfn" == token.type) {
// punctuation/true/false/null
action[token.value][state]();
} else if ("number" == token.type) {
// number
value = token.value;
number[state]();
} else if ("string" == token.type) {
// string
value = tokenizer.unescape(token.value);
string[state]();
}
@ -322,11 +322,11 @@ class JSONParser {
function _convert(value, type, converter) {
if ("function" == typeof converter) {
// # of params for converter function
local parametercCount = 2;
// .getinfos() is missing on ei platform
if ("getinfos" in converter) {
parametercCount = converter.getinfos().parameters.len() -
1;
@ -361,19 +361,19 @@ class _JSONTokenizer {
_unescapeRegex = null;
constructor() {
// punctuation/true/false/null
this._ptfnRegex = regexp("^(?:\\,|\\:|\\[|\\]|\\{|\\}|true|false|null)");
// numbers
this._numberRegex = regexp("^(?:\\-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)");
// strings
this._stringRegex = regexp("^(?:\\\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\\\")");
// ltrim pattern
this._ltrimRegex = regexp("^[\\s\\t\\n\\r]*");
// string unescaper tokenizer pattern
this._unescapeRegex = regexp("\\\\(?:(?:u\\d{4})|[\\\"\\\\/bfnrt])");
}
@ -389,20 +389,20 @@ class _JSONTokenizer {
length,
whitespaces;
// count # of left-side whitespace chars
whitespaces = this._leadingWhitespaces(str, start);
start += whitespaces;
if (m = this._ptfnRegex.capture(str, start)) {
// punctuation/true/false/null
value = str.slice(m[0].begin, m[0].end);
type = "ptfn";
} else if (m = this._numberRegex.capture(str, start)) {
// number
value = str.slice(m[0].begin, m[0].end);
type = "number";
} else if (m = this._stringRegex.capture(str, start)) {
// string
value = str.slice(m[1].begin, m[1].end);
type = "string";
} else {
@ -429,7 +429,7 @@ class _JSONTokenizer {
}
}
// unesacape() replacements table
_unescapeReplacements = {
b = "\b",
f = "\f",
@ -449,7 +449,7 @@ class _JSONTokenizer {
if (m) {
local token = str.slice(m[0].begin, m[0].end);
// append chars before match
local pre = str.slice(start, m[0].begin);
res += pre;
@ -482,8 +482,8 @@ class JSONEncoder {
static VERSION = "2.0.0";
// max structure depth
// anything above probably has a cyclic ref
static _maxDepth = 32;
@ -495,7 +495,7 @@ class JSONEncoder {
function _encode(val, ...) {
local depth = 0;
if (vargc > 0) depth = vargv[0];
// detect cyclic reference
if (depth > this._maxDepth) {
throw "Possible cyclic reference";
}
@ -511,7 +511,7 @@ class JSONEncoder {
case "class":
s = "";
// serialize properties, but not functions
foreach(k, v in val) {
if (typeof v != "function") {
s += ",\"" + k + "\":" + this._encode(v, depth + 1);
@ -547,12 +547,12 @@ class JSONEncoder {
if ("_serializeRaw" in val && typeof val._serializeRaw == "function") {
// include value produced by _serializeRaw()
r += val._serializeRaw().tostring();
} else if ("_serialize" in val && typeof val._serialize == "function") {
// serialize instances by calling _serialize method
r += this._encode(val._serialize(), depth + 1);
} else {
@ -561,15 +561,15 @@ class JSONEncoder {
try {
// iterate through instances which implement _nexti meta-method
foreach(k, v in val) {
s += ",\"" + k + "\":" + this._encode(v, depth + 1);
}
} catch (e) {
// iterate through instances w/o _nexti
// serialize properties, but not functions
foreach(k, v in val.getclass()) {
if (typeof v != "function") {
s += ",\"" + k + "\":" + this._encode(val[k], depth + 1);
@ -585,13 +585,13 @@ class JSONEncoder {
break;
case "blob":
// This is a workaround for a known bug:
// on device side Blob.tostring() returns null
// (instaead of an empty string)
r += "\"" + (val.len() ? this._escape(val.tostring()) : "") + "\"";
break;
// strings and all other
default:
r += "\"" + this._escape(val.tostring()) + "\"";
break;
@ -608,7 +608,7 @@ class JSONEncoder {
local ch1 = (str[i] & 0xFF);
if ((ch1 & 0x80) == 0x00) {
// 7-bit Ascii
ch1 = format("%c", ch1);
@ -637,16 +637,16 @@ class JSONEncoder {
} else {
if ((ch1 & 0xE0) == 0xC0) {
// 110xxxxx = 2-byte unicode
local ch2 = (str[++i] & 0xFF);
res += format("%c%c", ch1, ch2);
} else if ((ch1 & 0xF0) == 0xE0) {
// 1110xxxx = 3-byte unicode
local ch2 = (str[++i] & 0xFF);
local ch3 = (str[++i] & 0xFF);
res += format("%c%c%c", ch1, ch2, ch3);
} else if ((ch1 & 0xF8) == 0xF0) {
// 11110xxx = 4 byte unicode
local ch2 = (str[++i] & 0xFF);
local ch3 = (str[++i] & 0xFF);
local ch4 = (str[++i] & 0xFF);

View File

@ -24,6 +24,14 @@ class BlobEx extends blob {
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]]);
@ -55,6 +63,59 @@ class BlobEx extends blob {
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) {
@ -215,6 +276,8 @@ class Rindro_Script {
if (Len > 0) {
local Str = Ro.GetString(Len);
Rindro_Script_Bin_Data.append(Str);
} else {
Rindro_Script_Bin_Data.append("");
}
CurrentIndex++;
}
@ -222,8 +285,12 @@ class Rindro_Script {
}
function GetBinString(Index) {
if (Index< Rindro_Script_Bin_Data.len()) return Rindro_Script_Bin_Data[Index];
return "";
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) {
@ -235,7 +302,7 @@ class Rindro_Script {
local out = "";
IO.seek(i); //内容指示位
local currentByte = IO.readn('c'); //内容指示位
local after = IO.readn('i');
local after = IO.GetInt();
switch (currentByte) {
case 10: {
IO.seek(i - 4);
@ -251,8 +318,9 @@ class Rindro_Script {
break;
}
case 2: {
out += after + '\t';
break;
IO.seek(-4, 'c');
local ret = IO.readn('i');
return ret;
}
case 4: {
local Bbuf = blob(4);
@ -289,7 +357,8 @@ class Rindro_Script {
local EquipmentAtt = {};
if (ReadObject.Size >= 7) {
//创建Blob对象
local IO = Sq_Point2Blob(L_sq_P2I(ReadObject.Buffer.C_Object), ReadObject.Size);
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) {
@ -320,10 +389,10 @@ class Rindro_Script {
EquipmentAtt["Aurora"] <- {};
EquipmentAtt["Aurora"].Back <- [];
EquipmentAtt["Aurora"].Front <- [];
local Count = Rindro_Script.UnpackData(IO, i).tointeger() - 9;
local Count = Rindro_Script.UnpackData(IO, i);
i += 5;
for (local z = 0; z< Count; z++) {
local Layer = Rindro_Script.UnpackData(IO, i).tointeger() - 9;
local Layer = Rindro_Script.UnpackData(IO, i);
i += 5;
local Path = Rindro_Script.UnpackData(IO, i).tolower();
i += 5;
@ -343,9 +412,9 @@ class Rindro_Script {
EquipmentAtt["Ani_" + Job] <- {};
i += 5;
local Index1 = Rindro_Script.UnpackData(IO, i).tointeger() - 9;
local Index1 = Rindro_Script.UnpackData(IO, i);
i += 5;
local Index2 = Rindro_Script.UnpackData(IO, i).tointeger() - 9;
local Index2 = Rindro_Script.UnpackData(IO, i);
i += 5;
EquipmentAtt["Ani_" + Job].variation <- [Index1, Index2];
EquipmentAtt["Ani_" + Job].layer_variation <- [];
@ -358,7 +427,7 @@ class Rindro_Script {
break;
} else if (Ret == "[layer variation]") {
local InfoBuf = {};
InfoBuf.Zorder <- Rindro_Script.UnpackData(IO, i).tointeger() - 9;
InfoBuf.Zorder <- Rindro_Script.UnpackData(IO, i);
i += 5;
InfoBuf.Path <- Rindro_Script.UnpackData(IO, i);
i += 5;
@ -594,6 +663,39 @@ class Rindro_Script {
}
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.GetBin();
Rindro_Script.InitLoad_String();

View File

@ -104,10 +104,10 @@ function Lenheart_Character_GetAttribute(Address) {
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);
// 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

@ -1,483 +0,0 @@
/*
文件名:ItemData.nut
路径:Base/_Z_Data/ItemData.nut
创建日期:2024-08-06 23:58
文件用途:用于存放Item数据
*/
if (!getroottable().rawin("Rindro_ItemInfoObject")) Rindro_ItemInfoObject <- {};
if (!getroottable().rawin("Rindro_ItemInfoBuf")) Rindro_ItemInfoBuf <- "";
if (!getroottable().rawin("RINDRO_INIT_FLAG")) RINDRO_INIT_FLAG <- true;
//获取本地配置
function Rindro_GetLocalConfig() {
// local Buf = L_sq_GetLocalConfig();
// if (!Buf) {
// return {
// md5 = -1
// };
// } else return dofile("Rindro_Config.cfg");
}
//获取本地信息版本
function Rindro_GetMd5() {
// return RINDRO_CONFIG.md5;
return -1;
}
//初始化各种信息
function Rindro_Init() {
// //道具信息
// local ItemArray = getroottable().RINDRO_CONFIG.itemInfo;
// Rindro_ItemInfoBuf = "";
// foreach(Value in ItemArray) {
// if (Value.Name2.len() == 0)
// Value.Name2 = "Rindro-Team";
// getroottable().Rindro_ItemInfoObject[Value.Id] <- Value;
// }
// RINDRO_INIT_FLAG = true;
}
//更新本地配置
function Rindro_ItemInfoCallBack(Chunk) {
// local Jso = Json.Decode(Chunk);
// if ("ZipSEnd" in Jso) {
// getroottable().Rindro_ItemInfoObject <- {};
// Rindro_ItemInfoBuf += Jso.ZipS;
// local ZlibStrBuf = L_sq_Dezlib(Rindro_ItemInfoBuf);
// if (ZlibStrBuf == "null") {
// Rindro_ItemInfoBuf = "";
// return;
// }
// ZlibStrBuf = L_sq_DecondeJson(ZlibStrBuf);
// L_sq_SetLocalConfig("return " + ZlibStrBuf);
// getroottable().RINDRO_CONFIG <- dofile("Rindro_Config.cfg");
// Rindro_Init();
// } else {
// Rindro_ItemInfoBuf += Jso.ZipS;
// }
}
Pack_Control.rawset(20240422, Rindro_ItemInfoCallBack);
//无需更新本地配置
Pack_Control.rawset(20240424, function(Chunk) {
Rindro_Init();
});
//道具绘制类
class ItemInfoClass {
//Gm模式
GmModel = true;
Info = null;
PageLength = 0;
//静态品级颜色
static RarityColor = [
0xFFFFFFFF, //白
0xFFEDD568, //蓝
0xFFFF6BB3, //紫
0xFFF000FF, //粉
0xFF00B1FF, //黄
0xFF6666FF, //红
0xFF0055FF, //橙
];
//我的品级颜色
MyRarityColor = null;
//我的售价长度
MyPriceLength = null;
//我的冷却时间长度
MyCoolTimeLength = null;
//获取真实类型
function GetRealType(Type) {
switch (Type) {
case "[material]":
return "材料";
case "[recipe]":
return "设计图";
case "[upgradable legacy]":
return "袖珍罐";
case "[quest]":
return "任务";
case "[booster random]":
case "[multi upgradable legacy]":
case "[booster selection]":
case "[cera booster]":
case "[unlimited waste]":
case "[usable cera package]":
case "[only effect]":
return "消耗品";
case "[weapon]":
return "武器";
case "[title name]":
return "称号";
case "[coat]":
return "上衣";
case "[pants]":
return "下衣";
case "[hat]":
return "帽子";
case "[shoulder]":
return "护肩";
case "[waist]":
return "腰带";
case "[shoes]":
return "鞋子";
case "[amulet]":
return "项链";
case "[wrist]":
return "手镯";
case "[ring]":
return "戒指";
case "[support]":
return "辅助装备";
case "[aurora avatar]":
return "光环";
case "[magic stone]":
return "魔法石";
case "[creature]":
return "寵物";
case "[artifact red]":
return "宠物装备 红";
case "[artifact blue]":
return "宠物装备 蓝";
case "[artifact green]":
return "宠物装备 绿";
case "[skin avatar]":
return "皮肤";
case "[hair avatar]":
return "头部装扮";
case "[waist avatar]":
return "腰部装扮";
case "[hat avatar]":
return "帽子装扮";
case "[coat avatar]":
return "上衣装扮";
case "[face avatar]":
return "脸部装扮";
case "[breast avatar]":
return "胸部装扮";
case "[pants avatar]":
return "下装装扮";
case "[shoes avatar]":
return "鞋装扮";
default:
return "道具";
}
}
constructor(gInfo) {
Info = clone(gInfo);
//Gm模式显示编号
if (GmModel) Info.Name += "[" + Info.Id + "]";
//配置品级颜色
if (Info.Rarity< 0 || Info.Rarity > 6) {
MyRarityColor = Info.Rarity;
} else {
MyRarityColor = RarityColor[Info.Rarity];
}
//配置售价长度
if ("Price" in Info) {
MyPriceLength = LenheartTextClass.GetStringLength(Info.Price.tostring());
}
//配置冷却时间长度
if ("CoolTime" in Info) {
MyCoolTimeLength = LenheartTextClass.GetStringLength((Info.CoolTime / 1000.0).tostring());
}
//配置类型
if ("Type" in Info) {
Info.Type = GetRealType(Info.Type);
}
//配置装备类型
else if ("EquipmentType" in Info) {
Info.Type <- GetRealType(Info.EquipmentType);
}
PageLength += 72;
CheckStrLength();
}
function CheckInfoLength(TableKey, AddLength) {
if (TableKey in Info) {
PageLength += AddLength;
}
}
function CheckStrLength() {
if ("Explain" in Info) {
// local Buf = LenheartTextClass.GetStringLength(Info.Explain.tostring());
// local Pn = (Buf / 211.0);
// if (Pn< 1) PageLength += 12;
// if (Pn > 1) Pn = Pn.tointeger() + 1;
// PageLength += (16 * Pn);
local Buf = L_sq_GetStringDrawArray(Info.Explain, 220);
PageLength += (Buf.len() * 16);
// PageLength += 12;
}
}
//高级绘制文字(带换行)
function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc, hl) {
local strarr = [];
if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc);
else {
local Bpos = 0;
while (true) {
local Npos = str.find("\n", Bpos);
if (!Npos) {
local strbuff = str.slice(Bpos, str.len());
strarr.append(strbuff);
break;
}
local strbuff = str.slice(Bpos, Npos);
strarr.append(strbuff);
Bpos = Npos + 1;
}
for (local z = 0; z< strarr.len(); z++) {
L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc);
}
}
}
function Show(X, Y) {
if (X< 0) X = 0;
if ((X + 211) > 800) X = (800 - 211);
if (Y< 0) Y = 0;
if (Y + PageLength > 600) Y = 600 - PageLength;
//Item信息框一般为211的宽度
L_sq_DrawWindow(X, Y, 211, PageLength, "interface2/popup/popup.img", 134, 6, 12, 6, 13);
//绘制名字 和 图标
if ("Id" in Info) L_Sq_DrawItem(X + 8 + 174, Y + 8, Info.Id, 1, 0, 0, 0);
if ("Name2" in Info) L_sq_DrawCode(Info.Name2, X + 8, Y + 9, MyRarityColor, 1, 1);
if ("Name" in Info) L_sq_DrawCode(Info.Name, X + 8, Y + 23, MyRarityColor, 1, 1);
//绘制线
L_sq_DrawImg("interface2/popup/popup.img", 270, X + 7, Y + 26 + 16);
//绘制重量
if ("Weight" in Info) {
L_sq_DrawCode((Info.Weight.tofloat() / 1000.0).tostring() + "kg", X + 7, Y + 24 + 24, 0xFFFFFFFF, 1, 1);
}
//绘制售价
if ("Price" in Info) {
L_sq_DrawCode("金币", X + 186, Y + 24 + 24, 0xFFFFFFFF, 1, 1);
L_sq_DrawCode(Info.Price.tostring(), X - MyPriceLength + 186, Y + 24 + 24, 0xFFFFFFFF, 1, 1);
}
//绘制类型
if ("Type" in Info) {
L_sq_DrawCode(Info.Type.tostring(), X + 7, Y + 48 + 16, 0xFFFFFFFF, 1, 1);
}
//绘制冷却时间
if ("CoolTime" in Info) {
L_sq_DrawCode("秒", X + 186 + 12, Y + 48 + 16, 0xFFFFFFFF, 1, 1);
L_sq_DrawCode((Info.CoolTime / 1000.0).tostring(), X - MyCoolTimeLength + 214 - 18, Y + 48 + 16, 0xFFFFFFFF, 1, 1);
}
//绘制普通描述
if ("Explain" in Info) {
local a = L_sq_GetStringDrawArray(Info.Explain, 220);
foreach(Pos, va in a) {
L_sq_DrawCode(va, X + 7, Y + 48 + 12 + 24 + (Pos * 16), 0xFFEDD568, 1, 1);
}
}
}
}
// print(L_sq_P2I(Memory.allocUtf8String("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img").C_Object));
// local Npk = L_Sq_CallFunc(0x11C0410, "int", FFI_THISCALL, ["int", "int", "int"], L_sq_RA(0x1B4684C), 0, L_sq_P2I(Memory.allocUtf8String("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img").C_Object));
// print(Npk);
// local Img = L_Sq_CallFunc(0x11AA190, "int", FFI_THISCALL, ["int", "int"], Npk, 0);
// print(format("%02x", Img));
// print("width: " + NativePointer(Img).add(0x1C).readShort());
// print("height: " + NativePointer(Img).add(0x20).readShort());
// local ReadPath = L_sq_P2I(Memory.allocUtf8String("etc/rindro/horseguessing/horseguessing.dat").C_Object);
// print(format("%02x", ReadPath));
// local Reader = Memory.alloc(1024);
// local ReadBuffer = L_sq_P2I(Reader.C_Object);
// print(format("%02x", ReadBuffer));
// L_Sq_CallFunc(0x11A2030, "int", FFI_FASTCALL, ["int", "int", "int", "int", "int", "int"], 0x1D17638, 0, ReadPath, ReadBuffer, 0x100000, 0x19DAF4);
// // print(Reader.readUtf8String());
// local Func = compilestring(Reader.readUtf8String());
// local Ret = Func();
// print(Ret);
// local Tabs = dofile("aw.nut");
// print(Tabs.itemInfo.len());
// local Address = L_Sq_GetExportByName("fopen");
// print(Address);
// L_Sq_CallFunc(0xE6E070, "void", 4, ["int", "int", "int", "int", "char"], L_sq_RA(0x1A5FB20), 0, 33, "", 0x65535);
// Rindro_Haker.LoadHook(0x4C9FA0, ["pointer", "int", "void"],
// function(args) {
// // print(555);
// return null;
// },
// function(args) {
// // print(666);
// return null;
// });
// print(L_sq_StringBinById(435110));
// Rindro_Haker.LoadHook(0x4017F0, ["int", "int", "int", "int"],
// function(args) {
// print(args[0]);
// print(args[1]);
// print(args[2]);
// return null;
// },
// function(args) {
// return null;
// });
// 0x121a1e2
//this 0x1D17638
// local Read = Memory.alloc(10000);
// print(Read);
// L_Sq_CallFunc(0x11A2030, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], 0x1D17638, Memory.allocUtf8String("sqr/a.nut").C_Object, Read.C_Object, 0x100000,0x19DAF4);
// local Str = Read.readUtf8String();
// print(Str);
// local A = IRDSQRCharacter.pushScriptFiles("a.nut");
// local Read = Memory.alloc(10000);
// print(Read);
// L_Sq_CallFunc(0x121A100, "char", FFI_MS_CDECL, ["int", "int", "int", "int", "int"], Memory.allocUtf8String("").C_Object, Memory.allocUtf8String("sqr/a.nut").C_Object, Read.C_Object, 0x100000,0x19DAF4);
// local Str = Read.readUtf8String();
// print(Str);
// L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 79, 0, 0);
// local Old = L_sq_RA(0x1AB7CDC);
// Old = L_sq_RA(Old + 0x3038);
// local ItemObject = L_sq_GetItem(27582);
// //移除
// L_Sq_CallFunc(0x825AD0, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),Old);
// //移除Ani
// L_Sq_CallFunc(0x84CD10, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),Old);
// //穿戴
// L_Sq_CallFunc(0x825570, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),ItemObject);
// local ItemObject = L_sq_GetItem(101020037);
// // print(ItemObject);
// // L_Sq_CallFunc(0x4B0F10, "int", FFI_THISCALL, ["int"], L_sq_RA(0x1AE45B4));
// local Hs = L_Sq_CallFunc(0x779EB0, "pointer", FFI_THISCALL, ["int"], L_sq_RA(0x1AE45B4));
// print(Hs);
// Hs = L_sq_P2I(Hs);
// print(format("%02x", Hs));
// L_Sq_CallFunc(0x825AD0, "void", FFI_THISCALL, ["int","int"], Hs, ItemObject);
// L_Sq_CallFunc(0x84CD10, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC), ItemObject);
// local PP = L_Sq_CallFunc(0x65DE50, "pointer", FFI_THISCALL, ["pointer"], 0xE8675E97, 0);
// print("PP: " + PP);
// local WuseAdd = L_Sq_CallFunc(0x972220, "int", FFI_MS_CDECL, ["int", "int", "int"], 27582, 0x19E990, 0);
// print("MY: " + WuseAdd);
// print(L_sq_Test());
// local Address = L_sq_Test(26058);
// print(Address);
// local Ret = L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 275, Address, 41);
// print(Ret);
// L_Sq_CallFunc(0xF3B3B0, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], Ret, 600, 200, 28, 28);
// Rindro_Haker.LoadHook(0x8265A0, ["int", "int", "int", "void"],
// function(args) {
// // print(args[0]);
// // print(args[1]);
// print(format("%02x", args[0]));
// // print(args[0]);
// return null;
// },
// function(args) {
// // print(args.pop());
// // print(">>>>>>");
// return null;
// });
// Rindro_Haker.LoadHook(0x7B64BA, ["int", "int", "int", "int", "int", "int", "char"],
// function(args) {
// // print("args[0] : " + args[0]);
// // print("args[1] : " + format("%02x", args[1]));
// // print("args[2] : " + format("%02x", args[2]));
// // print("args[3] : " + args[3]);
// // print("args[4] : " + args[4]);
// // print("args[5] : " + args[5]);
// // print(args[1]);
// // print(args[2]);
// // print(args[0]);
// return null;
// },
// function(args) {
// // print(args.pop());
// // print(">>>>>>");
// return null;
// });
// local Str = "{\"stringValue\":\"thisiszifuchuan\",\"numberValue\":123.45,\"integerValue\":42,\"booleanValue\":true,\"arrayValue\":[1,\"two\",true,{\"key\":\"value\"}],\"objectValue\":{\"name\":\"John Doe\",\"age\":30,\"address\":{\"street\":\"123 Main St\",\"city\":\"Anytown\",\"state\":\"CA\",\"zip\":\"12345\"}}}";
// print("***********************");
// print(Str);
// print(Str.len());
// local JsonObj = JSONParser();
// local T = JsonObj.parse(Str);
// print(">>>>>>>>>>>>>>");
// print(T);
// print(">>>>>>>>>>>>>>");
// local Str2 = Json.Encode(T);
// print("***********************");
// print(Str2);
// print(Str2.len());
function getScrollBasisPos_Swordman(obj) {
print(111);
}
function drawAppend_VirtualCharacter(ChrJob, GrowJob, Sc_Xpos, Sc_Ypos, Front_After_Flag, f) {
// local obj = sq_GetMyMasterCharacter();
// print(Clock());
// Sout("a: %L",a);
// Sout("b: %L",b);
// Sout("c: %L",c);
// Sout("d: %L",d);
// Sout("e: %L",e);
// Sout("f: %L",f);
// print(a);
// print(b);
// print(c);
// print(d);
// print(e);
// print(f);
// if (!e) {
// BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3/Chivalry_S3_Bottom_00.ani", c, d, "Server_AuctionSystemTimeP22");
// BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3_2/Chivalry_S3_Text.ani", c, d, "Server_AuctionSystemTimeP");
// BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3/Chivalry_S3_Text.ani", c, d - 50, "Server_AuctionSystemTimeP2");
// BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3_3/Chivalry_S3_Text.ani", c, d - 100, "Server_AuctionSystemTimeP3");
// }
}

View File

@ -1,63 +0,0 @@
//枚举类
dofile("sqr/Base/_ENUM/_ENUM_KEY.nut"); //按键枚举类
//枚举类
//基础工具类
dofile("sqr/Base/_Tool/Json_Class.nut"); //Json类
dofile("sqr/Base/_Tool/BaseTool_Class.nut"); //基础工具类
dofile("sqr/Base/_Tool/MemoryClass.nut"); //内存类
dofile("sqr/Base/_Tool/Hacker_Class.nut"); //黑客工具类
dofile("sqr/Base/_Tool/Hacker_RegApi.nut"); //黑客注册工具类
dofile("sqr/Base/_Tool/Script_Class.nut"); //pvf读取类
dofile("sqr/Base/_Tool/Image_Class.nut"); //image类
dofile("sqr/Base/_Tool/Animation_Class.nut"); //动画类
//基础工具类
//回调注册类
dofile("sqr/Base/PackControl/PackControl.nut"); //收包类
dofile("sqr/Base/CallBack/DrawMain.nut"); //绘制入口
dofile("sqr/Base/CallBack/DrawHudMain.nut"); //hud绘制入口
dofile("sqr/Base/CallBack/Window_Get.nut"); //原始窗口HOOK
dofile("sqr/Base/CallBack/PushDamage.nut"); //Push伤害
dofile("sqr/Base/CallBack/GetDamageRate.nut"); //获取伤害
// dofile("sqr/Base/CallBack/Window_Get.nut"); //原始窗口HOOK
//数据类
dofile("sqr/Base/_Z_Data/ItemData.nut"); //Item数据
dofile("sqr/Base/_Z_Data/CharacterInfoData.nut"); //角色信息数据
//数据类
//UI框架类
dofile("sqr/Base/UI/Lenheart_Cursor_Class.nut"); //鼠标类
dofile("sqr/Base/UI/OldWindowsMap.nut"); //窗口Map
dofile("sqr/Base/UI/Lenheart_UI_Class.nut"); //UI
dofile("sqr/Base/UI/Lenheart_Ani_Class.nut"); //Ani
dofile("sqr/Base/UI/Lenheart_Each_Class.nut"); //交互图标类
dofile("sqr/Base/UI/Lenheart_Event_Class.nut"); //活动图标
dofile("sqr/Base/UI/Lenheart_Character_Info_Class.nut"); //个人信息属性面板
//-----------------------------------------------------------------------------------------------------
dofile("sqr/Project/Tuguan/Tuguan.nut"); //土罐
dofile("sqr/Project/HellExLogic/HellExLogic.nut"); //深渊派对特殊逻辑
dofile("sqr/Project/RepairWorldMap/RepairWorldMap.nut"); //修补世界地图
dofile("sqr/Project/OnilneSign/OnilneSign.nut"); //在线签到
dofile("sqr/Project/FightSign/FightSign.nut"); //每日签到
dofile("sqr/Project/CombatRank/CombatRank.nut"); //战斗力系统
dofile("sqr/Project/Anton/Rindro_Anton.nut"); //安图恩
dofile("sqr/Project/Luke/Rindro_Luke.nut"); //卢克
dofile("sqr/Project/AradPass/AradPass.nut"); //战令
dofile("sqr/Project/MidsummerParty/MidsummerParty.nut"); //希曼音乐会
dofile("sqr/Project/ServerAuction/ServerAuction.nut"); //全服竞拍
dofile("sqr/Project/OnlineAnnouncement/OnlineAnnouncement.nut"); //上线公告
dofile("sqr/Project/Shapeshifting/Shapeshifting.nut"); //时装变身
dofile("sqr/Project/HudUi/HudUi.nut"); //百级UI
dofile("sqr/Project/DamagePerSecond/DamagePerSecond.nut"); //秒伤统计
dofile("sqr/Project/CollectionBox/CollectionBox.nut"); //收集箱
dofile("sqr/Project/HorseGuessing/HorseGuessing.nut"); //骑士马战
dofile("sqr/Project/SkinHub/SkinHub.nut"); //皮肤仓库
dofile("sqr/Project/MarrySystem/MarrySystem.nut"); //结婚系统

443
FileConfig.json Normal file
View File

@ -0,0 +1,443 @@
{
"BaseScript": [
"Base/_ENUM/_ENUM_.nut",
"Base/_Tool/Json_Class.nut",
"Base/_Tool/BaseTool_Class.nut",
"Base/_Tool/MemoryClass.nut",
"Base/_Tool/Hacker_Class.nut",
"Base/_Tool/Hacker_RegApi.nut",
"Base/_Tool/Script_Class.nut",
"Base/_Tool/Image_Class.nut",
"Base/_Tool/Animation_Class.nut",
"Base/CallBack/PackControl.nut",
"Base/CallBack/DrawMain.nut",
"Base/CallBack/DrawHudMain.nut",
"Base/CallBack/PushDamage.nut",
"Base/CallBack/GetDamageRate.nut",
"Base/_Z_Data/CharacterInfoData.nut",
"Base/UI/Lenheart_Cursor_Class.nut",
"Base/UI/OldWindowsMap.nut",
"Base/UI/Lenheart_UI_Class.nut",
"Base/UI/Lenheart_Ani_Class.nut",
"Base/UI/Lenheart_Each_Class.nut",
"Base/UI/Lenheart_Event_Class.nut",
"Base/UI/Lenheart_Character_Info_Class.nut",
"Base/Interface.nut"
],
"ProjectScript": {
"成就系统": {
"Private": true,
"Script": [
"Project/Achievement/Achievement.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "自用成就系统",
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png"
}
},
"世界BOSS": {
"Private": true,
"Script": [
"Project/WorldBoss/WorldBoss.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "自用世界BOSS",
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png"
}
},
"百级血槽": {
"Private": true,
"Script": [
"Project/HudUi/HudUi.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "自用血槽",
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:baijixueshuang.png"
}
},
"骑士马战": {
"Private": true,
"price": 100,
"Script": [
"Project/HorseGuessing/HorseGuessing_Guide.nut",
"Project/HorseGuessing/HorseGuessing_KnightInfo.nut",
"Project/HorseGuessing/HorseGuessing_PastRecord.nut",
"Project/HorseGuessing/HorseGuessing.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "通过配置表,周期性的开发马战活动,可使用游戏道具进行竞猜获得游戏中的道具。",
"ProjectDetails": [
{
"type": "str",
"content": "骑士马战为娱乐玩法,禁止用于任何违法行为,否则后果自负"
},
{
"type": "img",
"content": "1"
}
]
},
"imgPath": "HorseGuessing"
},
"皮肤仓库": {
"price": 25,
"Script": [
"Project/SkinHub/SkinHub.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "可设置伤害字体的皮肤,使用字体道具解锁,可预览伤害字体样式。",
"ProjectDetails": [
{
"type": "str",
"content": "可设置伤害字体的皮肤,使用字体道具解锁,可预览伤害字体样式。"
},
{
"type": "str",
"content": "点击测试字体按钮或者按空格键可以飘出测试字体。"
},
{
"type": "img",
"content": "1"
}
]
},
"imgPath": "SkinHub"
},
"收集箱": {
"price": 50,
"Script": [
"Project/CollectionBox/CollectionBox.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "可设置多期收集箱,可自定义宝珠摆放位置。",
"ProjectDetails": [
{
"type": "str",
"content": "可在收集箱中点击镶嵌,消耗对应的道具后,可以完成镶嵌,收集箱会提升角色的属性!"
},
{
"type": "img",
"content": "0"
}
]
},
"imgPath": "CollectionBox"
},
"战令": {
"price": 60,
"Script": [
"Project/AradPass/AradPass.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "可通过设置后台表格,开启期限战令活动。",
"ProjectDetails": [
{
"type": "str",
"content": "后台表格可配置开启豪华版战令所需要的解锁道具,拥有该道具可以激活豪华版战令,获得更多奖励.还可以设置使用后增加战令经验的道具,方便大佬快速战令满级!"
},
{
"type": "img",
"content": "1"
},
{
"type": "str",
"content": "后台表格可配置每日任务,赛季任务,重复任务。有可完成的任务时,会有红色角标提醒,也可以一键完成所有已达成任务."
},
{
"type": "img",
"content": "2"
},
{
"type": "str",
"content": "后台表格可配置全服助力相关内容,多少次数给予多少战力经验."
},
{
"type": "img",
"content": "3"
},
{
"type": "mov",
"content": "http://110.40.43.39:5244/d/script/rindro/Script/Project/AradPass/vid/2.mp4?sign=t2C9PYMuyrbJxUoVzskhNGE2JPvSNDeJviCUUZpQWps=:0",
"width": 1130,
"height": 712,
"index": 2
}
]
},
"imgPath": "AradPass"
},
"秒伤统计": {
"price": 0,
"Script": [
"Project/DamagePerSecond/DamagePerSecond.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "组队可用的秒伤统计系统,可显示每个玩家的秒伤排列。",
"ProjectDetails": [
{
"type": "str",
"content": "在团队副本、多人 PVP 等激烈战斗场景中实时显示每位队员的输出能力DPS每秒伤害。"
},
{
"type": "str",
"content": "伤害统计窗口可以随意拖动位置"
},
{
"type": "img",
"content": "1"
}
]
},
"imgPath": "DamagePerSecond"
},
"土罐": {
"price": 25,
"Script": [
"Project/Tuguan/Tuguan.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "通过服务器的表格配置,可开启土罐的黄金袖珍罐来获取游戏道具。",
"ProjectDetails": [
{
"type": "str",
"content": "通过服务器的表格配置,可开启土罐的黄金袖珍罐来获取游戏道具。"
},
{
"type": "img",
"content": "1"
},
{
"type": "str",
"content": "点击查看概率按钮可跳转网页,显示设定的概率"
},
{
"type": "img",
"content": "2"
}
]
},
"imgPath": "Tuguan"
},
"上线公告": {
"price": 0,
"Script": [
"Project/OnlineAnnouncement/OnlineAnnouncement.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "通过设定后台的表格,让指定玩家上线时触发全体动画播报。",
"ProjectDetails": [
{
"type": "str",
"content": "在大佬玩家上线时,播放定制好的Ani内容,给大佬的牌面拉满!"
},
{
"type": "img",
"content": "0"
}
]
},
"imgPath": "OnlineAnnouncement"
},
"时装变身": {
"price": 0,
"Script": [
"Project/Shapeshifting/Shapeshifting.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "通过设定后台的表格,让拥有指定时装套装的角色可以在城镇变身。",
"ProjectDetails": [
{
"type": "str",
"content": "通过设定后台的表格,让拥有指定时装套装的角色可以在城镇变身。可以随时召唤和解除。"
},
{
"type": "img",
"content": "1"
},
{
"type": "img",
"content": "2"
}
]
},
"imgPath": "Shapeshifting"
},
"战力系统": {
"price": 50,
"Script": [
"Project/CombatRank/CombatRank.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "当自身战斗力发生变化时显示战力浮动UI并且在活动图标处可查看全服战斗力排行榜。",
"ProjectDetails": [
{
"type": "str",
"content": "当自身战斗力发生变化时显示战力浮动UI并且在活动图标处可查看全服战斗力排行榜。"
},
{
"type": "img",
"content": "0"
},
{
"type": "img",
"content": "1"
}
]
},
"imgPath": "CombatRank"
},
"安图恩": {
"price": 200,
"Script": [
"Project/Anton/Rindro_Anton_CreateParty.nut",
"Project/Anton/Rindro_Anton_FightSituation.nut",
"Project/Anton/Rindro_Anton_Noti.nut",
"Project/Anton/Rindro_Anton_Party.nut",
"Project/Anton/Rindro_Anton_PartyApplyJoin.nut",
"Project/Anton/Rindro_Anton_PartyFormation.nut",
"Project/Anton/Rindro_Anton_PartyHall.nut",
"Project/Anton/Rindro_Anton_PartyInfo.nut",
"Project/Anton/Rindro_Anton_PartyMemberInfo.nut",
"Project/Anton/Rindro_Anton_PlayerInteractive.nut",
"Project/Anton/Rindro_Anton_Reward.nut",
"Project/Anton/Rindro_Anton.nut"
],
"info": {
"ProjectAuthor": "官方 (期限:月)",
"ProjectVersion": "1.0.0",
"ProjectDescribe": "一比一复刻!安图恩攻坚战 完全体!",
"ProjectDetails": [
{
"type": "str",
"content": "99%机制还原,包含炸震颤 炸舰炮,孵化不打火山动物园等等。"
},
{
"type": "str",
"content": "加载插件后要启动18频道作为安图恩攻坚战频道。"
},
{
"type": "img",
"content": "1"
},
{
"type": "str",
"content": "频道将会限制只能够在安图恩区域活动!"
},
{
"type": "img",
"content": "2"
},
{
"type": "str",
"content": "通过游戏菜单中的寻找队伍,打开攻坚战队伍界面,在这里可以创建与加入攻坚队!"
},
{
"type": "img",
"content": "3"
},
{
"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": "10"
},
{
"type": "str",
"content": "独家功能8:如果不压制孵化,火山将会投放孵化的怪物(动物园机制)"
},
{
"type": "img",
"content": "11"
},
{
"type": "str",
"content": "独家功能9:可以设定通关多少次副本才能领取翻牌奖励(也可设置站甲板即可翻牌)"
},
{
"type": "img",
"content": "12"
}
]
},
"imgPath": "Anton"
}
}
}

View File

@ -0,0 +1,691 @@
/*
文件名:Achievement.nut
路径:Project/Achievement/Achievement.nut
创建日期:2025-02-23 08:37
文件用途:成就系统
*/
class Yosin_DragButton extends LenheartNewUI_CommonUi {
State = 0;
BaseIdx = 29;
DHeight = null; // 改为高度
Path = "interface/lenheartwindowcommon.img";
Idx = 172;
FillHeight = 2; // 改为填充高度
FirstHeight = 7; // 改为首节高度
Width = 9; // 固定宽度,垂直按钮宽度通常是固定的
Visible = true;
DeBugMode = false;
BasePos = null;
MoveFlag = false;
//鼠标相对位置
M_Xpos = null;
M_Ypos = null;
B_X = null;
B_Y = null;
Move_Value = 0;
Max_Move_Value = 0;
CurrentMovePosY = 0;
constructor(X, Y, H) {
this.DHeight = H;
LenheartNewUI_CommonUi.constructor(X, Y, Width, H + 7 * 2); // 宽度固定,高度动态
BasePos = {
x = X,
y = Y
}
}
function SetFrame(gPath, gIdx) {
if (gPath) Path = gPath;
Idx = gIdx;
}
function Show(obj) {
//不可用
if (State == 8) {
L_sq_Draw3Image_Vertical(X + 1, Y, this.DHeight, Path, Idx + 9, FillHeight, FirstHeight);
} else {
//按下
if (isLBDown) {
L_sq_Draw3Image_Vertical(X, Y + 1, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight);
}
//悬停
else if (isInRect) {
L_sq_Draw3Image_Vertical(X, Y, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight);
}
//普通
else {
L_sq_Draw3Image_Vertical(X, Y, this.DHeight, Path, Idx, FillHeight, FirstHeight);
}
}
}
//鼠标左键按下回调
function OnMouseLbDown(MousePos_X, MousePos_Y) {
LenheartNewUI_CommonUi.OnMouseLbDown(MousePos_X, MousePos_Y);
if (isInRect) {
MoveFlag = true;
M_Xpos = MousePos_X; //原始鼠标位置数据
M_Ypos = MousePos_Y;
B_X = X; //原始窗口位置
B_Y = Y;
}
}
//鼠标事件回调
function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
LenheartNewUI_CommonUi.OnMouseProc(Flag, MousePos_X, MousePos_Y);
//移动
if (MoveFlag) {
Move_Value = MousePos_Y - M_Ypos + CurrentMovePosY;
print(Move_Value);
if ( Move_Value <= (Max_Move_Value - Height + BasePos.y)) {
Y = (Move_Value);
Localtion_Y = (BasePos.y + Move_Value);
}
}
}
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
LenheartNewUI_CommonUi.OnMouseLbUp(MousePos_X, MousePos_Y);
MoveFlag = false;
CurrentMovePosY = Move_Value; //记录当前移动位置
}
//设置最大移动值
function SetMaxMoveValue(Value) {
Max_Move_Value = Value;
}
}
// class Yosin_DragButton extends LenheartNewUI_CommonUi {
// //路径
// Path = "";
// //索引
// Idx = 0;
// //方向
// Direction = false;
// //按钮
// Button = null;
// //变动位置回调函数
// OnChange = null;
// //鼠标相对位置
// M_Xpos = null;
// M_Ypos = null;
// //未移动时的初始坐标
// BasePos = null;
// //移动Flag
// MoveFlag = false;
// //最大移动值
// Max_Move_Value = 0;
// //移动值
// Move_Value = 0;
// //侦测值
// Detect_Value = 0;
// B_X = null;
// B_Y = null;
// Visible = true;
// DeBugMode = false;
// constructor(X, Y, S_H, H) {
// Childrens = [];
// this.Path = Path;
// this.Idx = Idx;
// LenheartNewUI_CommonUi.constructor(X, Y, 9, H);
// Button = LenheartNewUI_VerticalButton(X, Y, S_H);
// Button.SetFrame("interface/lenheartwindowcommon.img", 184);
// AddChild(Button);
// BasePos = {
// x = X,
// y = Y
// }
// }
// //生成DT
// function GenerateDt() {
// try {
// local CurT = L_Getmicroseconds();
// Duration = (CurT - DurationFlag);
// DurationFlag = CurT;
// } catch (exception) {
// }
// }
// function DeBug(obj) {
// sq_DrawBox(X, Y, Width, Height, 0xffffffff);
// }
// function Show(obj) {
// LenheartNewUI_Windows.Show(obj);
// }
// //同步坐标
// function SyncPos(X, Y) {
// this.X = X;
// this.Y = Y;
// foreach(Window in Childrens) {
// Window.SyncPos(X, Y);
// }
// }
// //鼠标事件回调
// function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
// LenheartNewUI_CommonUi.OnMouseProc(Flag, MousePos_X, MousePos_Y);
// if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Parent.X + Button.Localtion_X , Parent.Y + Button.Localtion_Y, Width, Height)){
// isInRect = true;
// }
// else isInRect = false;
// foreach(Window in Childrens) {
// Window.OnMouseProc(Flag, MousePos_X, MousePos_Y);
// }
// //移动
// if (MoveFlag) {
// //左键拖动
// if (Direction) {
// Move_Value = B_X + (MousePos_X - M_Xpos);
// if (!(Move_Value >= (0 + BasePos.x) && Move_Value <= (Max_Move_Value - Width + BasePos.x))) {
// X = Move_Value;
// // DragLogic((Move_Value - Localtion_X).tofloat() / (Max_Move_Value - Width + BasePos.x - Localtion_X).tofloat());
// }
// } else {
// Move_Value = B_Y + (MousePos_Y - M_Ypos);
// if (Move_Value >= (0 + BasePos.y) && Move_Value <= (Max_Move_Value - Height + BasePos.y)) {
// Y = (Move_Value);
// Button.Localtion_Y = (Move_Value);
// // DragLogic((Move_Value - Localtion_Y).tofloat() / (Max_Move_Value - Height + BasePos.y - Localtion_Y).tofloat());
// }
// }
// SyncPos(X, Y);
// }
// }
// //鼠标左键按下回调
// function OnMouseLbDown(MousePos_X, MousePos_Y) {
// LenheartNewUI_CommonUi.OnMouseLbDown(MousePos_X, MousePos_Y);
// foreach(Window in Childrens) {
// Window.OnMouseLbDown(MousePos_X, MousePos_Y);
// }
// if (isInRect) {
// MoveFlag = true;
// M_Xpos = MousePos_X; //原始鼠标位置数据
// M_Ypos = MousePos_Y;
// B_X = X; //原始窗口位置
// B_Y = Y;
// }
// }
// //鼠标左键弹起回调
// function OnMouseLbUp(MousePos_X, MousePos_Y) {
// LenheartNewUI_CommonUi.OnMouseLbUp(MousePos_X, MousePos_Y);
// foreach(Window in Childrens) {
// Window.OnMouseLbUp(MousePos_X, MousePos_Y);
// }
// MoveFlag = false;
// }
// //鼠标右键按下回调
// function OnMouseRbDown(MousePos_X, MousePos_Y) {
// LenheartNewUI_CommonUi.OnMouseRbDown(MousePos_X, MousePos_Y);
// foreach(Window in Childrens) {
// Window.OnMouseRbDown(MousePos_X, MousePos_Y);
// }
// }
// //鼠标右键弹起回调
// function OnMouseRbUp(MousePos_X, MousePos_Y) {
// LenheartNewUI_CommonUi.OnMouseRbUp(MousePos_X, MousePos_Y);
// foreach(Window in Childrens) {
// Window.OnMouseRbUp(MousePos_X, MousePos_Y);
// }
// }
// //鼠标滚轮时间回调
// function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
// LenheartNewUI_CommonUi.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
// foreach(Window in Childrens) {
// Window.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
// }
// }
// //设置最大移动值
// function SetMaxMoveValue(Value) {
// Max_Move_Value = Value;
// }
// }
class AchievementC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
// Visible = false;
EtcInfo = null;
WindowImg = Rindro_Image("achievement/main.img");
WindowBackGroundImg = Rindro_Image("achievement/mainbackground.img");
ButtonInfo = null;
Info = null;
Data = null;
IsOther = false;
OtherName = null;
Page = 1;
//滚轮值
ScrollValue = 0;
ScrollValueMax = 500;
EventWindow = null;
//查询成就回包
function OnQueryAchievementBack(Chunk) {
local Jso = Json.Decode(Chunk);
if (Jso.rawin("click")) {
IsOther = true;
} else IsOther = false;
Data = {};
foreach(ValueObject in Jso.Achievement) {
Data.rawset(ValueObject.id, ValueObject);
}
}
function OnQueryAchievementBack2(Chunk) {
local Jso = Json.Decode(Chunk);
EventWindow = EventList_Obj.AddEvent("AchievementEvent1", 682, null);
EventWindow.MainButton.ShowName = Jso.VipInfo;
}
function OnQueryAchievementBack3(Chunk) {
local Jso = Json.Decode(Chunk);
EventWindow = EventList_Obj.AddEvent("人物属性加成", 433, null);
EventWindow.MainButton.OnClick = function(B_obj) {
local T = {
op = 20091601,
}
SendPackEx(T);
}.bindenv(this);
}
//查询成就
function QueryAchievement() {
local T = {
op = 20091001,
cjid = Page,
cid2 = OtherName ? OtherName : "-1"
}
SendPackEx(T);
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
InitButtonConfig();
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20091002, OnQueryAchievementBack.bindenv(this));
Pack_Control.rawset(20092002, OnQueryAchievementBack2.bindenv(this));
Pack_Control.rawset(20091010, OnQueryAchievementBack3.bindenv(this));
InitConfig();
InitAchievement();
QueryAchievement();
EventWindow = EventList_Obj.AddEvent("人物属性加成", 433, null);
EventWindow.MainButton.OnClick = function(B_obj) {
local T = {
op = 20091601,
}
SendPackEx(T);
}.bindenv(this);
}
function InitAchievement() {
Childrens = [];
ScrollValueMax = 0;
RegisterWidget();
if (Info.len() > Page) {
//绘制成就
foreach(InfoObj in Info[Page]) {
if (InfoObj.Pos.y - 320 > ScrollValueMax) ScrollValueMax = InfoObj.Pos.y - 320;
DrawAItem(InfoObj);
}
}
}
function InitButtonConfig() {
local AchieData = R_Utils.GetScriptFileReader("etc/th_plugin/control.etc");
if (AchieData) {
local DataArr = [];
if (AchieData.Size >= 7) {
//创建Blob对象
local IOBUF = Sq_Point2Blob(L_sq_P2I(AchieData.Buffer.C_Object), AchieData.Size);
local IO = BlobEx(IOBUF.readblob(IOBUF.len()));
//以5为单步从第二位开始遍历字节
local i = 2;
while (true) {
if (i< AchieData.Size && AchieData.Size - i >= 5) {
local str = Rindro_Script.UnpackData(IO, i);
i += 5;
//城镇编号
if (str == "[info]") {
local Data = {};
while (true) {
local Ret = Rindro_Script.UnpackData(IO, i);
i += 5;
if (Ret == "[/info]") {
DataArr.append(Data);
break;
}
if (Ret == "[icon]") {
Data.Icon <- {};
Data.Icon.Path <- Rindro_Script.UnpackData(IO, i).tolower();
i += 5;
Data.Icon.Idx <- Rindro_Script.UnpackData(IO, i);
i += 5;
}
if (Ret == "[pos]") {
Data.Pos <- {};
Data.Pos.x <- Rindro_Script.UnpackData(IO, i);
i += 5;
Data.Pos.y <- Rindro_Script.UnpackData(IO, i);
i += 5;
}
if (Ret == "[size]") {
Data.Size <- {};
Data.Size.x <- Rindro_Script.UnpackData(IO, i);
i += 5;
Data.Size.y <- Rindro_Script.UnpackData(IO, i);
i += 5;
}
}
}
} else break;
}
}
ButtonInfo = DataArr;
}
}
function InitConfig() {
Info = [];
local PageLst = R_Utils.GetLstArr("etc/th_plugin/info.lst", "etc/");
foreach(Index, Path in PageLst) {
local AchieData = R_Utils.GetScriptFileReader(Path);
if (AchieData) {
local DataArr = {};
if (AchieData.Size >= 7) {
//创建Blob对象
local IOBUF = Sq_Point2Blob(L_sq_P2I(AchieData.Buffer.C_Object), AchieData.Size);
local IO = BlobEx(IOBUF.readblob(IOBUF.len()));
//以5为单步从第二位开始遍历字节
local i = 2;
while (true) {
if (i< AchieData.Size && AchieData.Size - i >= 5) {
local str = Rindro_Script.UnpackData(IO, i);
i += 5;
//城镇编号
if (str == "[info]") {
local Data = {};
while (true) {
local Ret = Rindro_Script.UnpackData(IO, i);
i += 5;
if (Ret == "[/info]") {
DataArr.rawset(Data.Id, Data);
break;
}
if (Ret == "[id]") {
Data.Id <- Rindro_Script.UnpackData(IO, i);
i += 5;
}
if (Ret == "[icon]") {
Data.Icon <- {};
Data.Icon.Path <- Rindro_Script.UnpackData(IO, i).tolower();
i += 5;
Data.Icon.Idx <- Rindro_Script.UnpackData(IO, i);
i += 5;
}
if (Ret == "[pos]") {
Data.Pos <- {};
Data.Pos.x <- Rindro_Script.UnpackData(IO, i);
i += 5;
Data.Pos.y <- Rindro_Script.UnpackData(IO, i);
i += 5;
}
if (Ret == "[size]") {
Data.Size <- {};
Data.Size.x <- Rindro_Script.UnpackData(IO, i);
i += 5;
Data.Size.y <- Rindro_Script.UnpackData(IO, i);
i += 5;
}
if (Ret == "[str]") {
Data.Str <- [];
while (true) {
local strbuffer = Rindro_Script.UnpackData(IO, i);
i += 5;
strbuffer = Sq_ConvertWideChar(strbuffer, "big5")
if (strbuffer == "[/str]") break;
Data.Str.append(strbuffer);
}
}
}
}
} else break;
}
}
Info.append(DataArr);
}
}
}
function RegisterWidget() {
//类型按钮
for (local i = 0; i< ButtonInfo.len(); i++) {
local Config = ButtonInfo[i];
local TypeButton = LenheartNewUI_BaseButton(Config.Pos.x, Config.Pos.y, Config.Size.x, Config.Size.y, Config.Icon.Path, Config.Icon.Idx);
TypeButton.Data = i;
TypeButton.OnClickEx = function(Button) {
Page = Button.Data;
InitAchievement();
QueryAchievement();
}.bindenv(this);
Childrens.append(TypeButton);
}
// local TestButton = Yosin_DragButton(50, 120, 10);
// TestButton.SetFrame("interface/lenheartwindowcommon.img", 184);
// TestButton.SetMaxMoveValue(400);
// AddChild(TestButton);
// Childrens.append(TestButton);
}
//绘制主界面
function DrawMain(obj) {
WindowBackGroundImg.DrawPng(0 + Page, X, Y);
WindowImg.DrawPng(19, X + EtcInfo.closebutton_pos[0], Y + EtcInfo.closebutton_pos[1]); //关闭按钮图标
}
function DrawInfo() {
if (Info.len() > Page) {
//绘制成就
foreach(InfoObj in Info[Page]) {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + InfoObj.Pos.x, Y + InfoObj.Pos.y - ScrollValue, InfoObj.Size.x, InfoObj.Size.y)) {
for (local i = 0; i< InfoObj.Str.len(); i += 2) {
local OffsetRate = InfoObj.Str.len() / 2;
local StrBuffer = format(InfoObj.Str[i], Data[InfoObj.Id].num);
local StrBuffer2 = InfoObj.Str[i + 1];
L_sq_DrawWindow(IMouse.GetXPos() + 32, IMouse.GetYPos() + 60 - (OffsetRate * 44) + (i / 2 * 44), 144, 24, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
L_sq_DrawCode(StrBuffer, IMouse.GetXPos() + 42, IMouse.GetYPos() + 70 - (OffsetRate * 44) + (i / 2 * 44), (Data[InfoObj.Id].achievement > (i / 2)) ? 0xFFedd568 : 0xFF969696, 1, 1);
L_sq_DrawCode(StrBuffer2, IMouse.GetXPos() + 42, IMouse.GetYPos() + 88 - (OffsetRate * 44) + (i / 2 * 44), (Data[InfoObj.Id].achievement > (i / 2)) ? 0xFFedd568 : 0xFF969696, 1, 1);
}
}
}
}
}
function Show(obj) {
DrawMain(obj);
setClip(X + EtcInfo.clicp_pos[0], Y + EtcInfo.clicp_pos[1], X + EtcInfo.clicp_pos[2], Y + EtcInfo.clicp_pos[3]);
LenheartNewUI_Windows.Show(obj);
releaseClip(); //裁切结束
DrawInfo();
}
function DrawAItem(InfoObj) {
local Button = LenheartNewUI_BaseButton(InfoObj.Pos.x, InfoObj.Pos.y, InfoObj.Size.x, InfoObj.Size.y, InfoObj.Icon.Path, InfoObj.Icon.Idx);
Button.Data = InfoObj;
Button.SetCallBackFunc(function(Button) {
local InfoObj = Button.Data;
Button.Localtion_X = InfoObj.Pos.x;
Button.Localtion_Y = InfoObj.Pos.y - ScrollValue;
}.bindenv(this));
Button.OnClickEx = function(Button) {
if (IsOther) return;
local T = {
op = 20091005,
cjid = Page,
id = Button.Data.Id
}
SendPackEx(T);
}.bindenv(this);
Childrens.append(Button);
}
RegisFlag = false;
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
local RootTab = getroottable();
if (RootTab.rawin("L_PlayerEach_Obj") && RegisFlag == false) {
RegisFlag = true;
RootTab["L_PlayerEach_Obj"].AddEachForCommon("查看收集信息", 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 = 58;
ApplyEngagementButton.Str = "查看收集信息";
ApplyEngagementButton.OnClick = function(Button) {
if (L_Sq_GetPlayerEachName().len() <= 0 || L_Sq_GetPlayerEachName() == L_Sq_GetObjectName(sq_GetMyMasterCharacter())) {
} else {
OtherName = L_Sq_GetPlayerEachName();
Visible = true;
InitAchievement();
QueryAchievement();
}
Button.Parent.CloseAllEach();
}.bindenv(this);
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
SThis.AddChild(ApplyEngagementButton);
}.bindenv(this));
}
}
//override
//鼠标滚轮事件回调
function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
if (Flag) {
if (ScrollValue > 0) ScrollValue -= 35;
}
if (!Flag) {
if (ScrollValue< ScrollValueMax) ScrollValue += 35;
}
//调用原生方法
LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
}
//override
//鼠标左键按下回调
function OnMouseLbDown(MousePos_X, MousePos_Y) {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + EtcInfo.closebutton_pos[0], Y + EtcInfo.closebutton_pos[1], EtcInfo.closebutton_pos[2], EtcInfo.closebutton_pos[3])) {
CloseWindow();
}
LenheartNewUI_Windows.OnMouseLbDown(MousePos_X, MousePos_Y);
}
function OpenCallBack() {
Visible = true;
IsOther = false;
OtherName = null;
InitAchievement();
QueryAchievement();
}
}
L_Windows_List <- [];
getroottable().rawdelete("LenheartPluginsInitFlag");
getroottable().rawdelete("EventList_Obj")
getroottable().rawdelete("Achievement_Obj");
function Lenheart_Achievement_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("Achievement_Obj")) {
RootTab.rawset("Achievement_Obj", true);
local Info = Rindro_Script.GetFileData("etc/th_plugin/etc.etc", function(DataTable, Data) {
while (!Data.Eof()) {
local Str = Data.Get();
if (Str == "[window pos]") {
DataTable.window_pos <- [Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get()];
} else if (Str == "[clicp pos]") {
DataTable.clicp_pos <- [Data.Get(), Data.Get(), Data.Get(), Data.Get()];
} else if (Str == "[closebutton pos]") {
DataTable.closebutton_pos <- [Data.Get(), Data.Get(), Data.Get(), Data.Get()];
}
}
}.bindenv(this));
local window_Info = Info.window_pos;
local Win = LenheartNewUI_CreateWindow(AchievementC, "成就系统窗口", window_Info[0], window_Info[1], window_Info[2], window_Info[3], window_Info[4]);
Win.EtcInfo = Info;
EventList_Obj.AddEvent("成就系统", 118, Win);
}
}
getroottable()["LenheartFuncTab"].rawset("AchievementFuncN", Lenheart_Achievement_Fun);

View File

@ -6,19 +6,6 @@
*/
dofile("sqr/Project/Anton/Rindro_Anton_CreateParty.nut");
dofile("sqr/Project/Anton/Rindro_Anton_FightSituation.nut");
dofile("sqr/Project/Anton/Rindro_Anton_Noti.nut");
dofile("sqr/Project/Anton/Rindro_Anton_Party.nut");
dofile("sqr/Project/Anton/Rindro_Anton_PartyApplyJoin.nut");
dofile("sqr/Project/Anton/Rindro_Anton_PartyFormation.nut");
dofile("sqr/Project/Anton/Rindro_Anton_PartyHall.nut");
dofile("sqr/Project/Anton/Rindro_Anton_PartyInfo.nut");
dofile("sqr/Project/Anton/Rindro_Anton_PartyMemberInfo.nut");
dofile("sqr/Project/Anton/Rindro_Anton_PlayerInteractive.nut");
dofile("sqr/Project/Anton/Rindro_Anton_Reward.nut");
//安图恩核心数据类
class RinDro_Anton extends Rindro_BaseToolClass {
//基础配置
@ -98,7 +85,7 @@ class RinDro_Anton extends Rindro_BaseToolClass {
} else {
//在安图恩区域的 要转移回普通城镇
if (L_sq_GetTownIndex() == BaseConfig.town_index) {
L_sq_MoveTown(1, 1, 474, 249);
L_sq_MoveTown(getroottable().rawin("RindroRaidNormalTown") ? getroottable().RindroRaidNormalTown : 2, getroottable().rawin("RindroRaidNormalArea") ? getroottable().RindroRaidNormalArea : 1, 474, 249);
}
}
}
@ -158,7 +145,7 @@ class RinDro_Anton extends Rindro_BaseToolClass {
}
//构造CID对应的装备数组方便绘制
Portrait.rawset(MemberObj.CID, {
EquVos = clone(MemberObj.equVos),
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null),
Job = MemberObj.PlayerJob,
TeamId = MemberObj.characNum,
Name = MemberObj.PlayerName,
@ -172,7 +159,7 @@ class RinDro_Anton extends Rindro_BaseToolClass {
JobName = MemberObj.PlayerGrowTypeJob, //职业名
Job = MemberObj.PlayerJob, //职业编号
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
EquVos = MemberObj.equVos, //装备List 用于显示头像
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null), //装备List 用于显示头像
Captain = MemberObj.CaptainBool, //是否为攻坚队队长
Cid = MemberObj.CID, //Cid
OnlineState = MemberObj.onLineStart, //在线状态

View File

@ -401,13 +401,9 @@ class Rindro_AntonFightSituationC extends LenheartNewUI_Windows {
local YOffset = 9 + (index * 22);
//绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[PartyMasterIcon.InfoObj.Job][0] - 17 + ((PosI % 10) * 24);
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 512 + ((PosI / 10) * 20);
setClip(AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
local AXpos = X + 26 + ((PosI % 10) * 24);
local AYpos = Y + 513 + ((PosI / 10) * 20);
PartyMasterIcon.InfoObj.EquVos.DrawFace(AXpos, AYpos);
PosI++;
}
}
@ -550,14 +546,12 @@ class Rindro_AntonFightSituationC extends LenheartNewUI_Windows {
local XOffset = 0;
local YOffset = 9;
//绘制队长头像
foreach(AvatarObj in CharacV.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[CharacV.Job][0] + DgnObj.X + ImgInfo[3] - 28;
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[CharacV.Job][1] + DgnObj.Y + ImgInfo[4] + 2;
setClip(AXpos + OffsetArr[CharacV.Job][2], AYpos + OffsetArr[CharacV.Job][3], AXpos + OffsetArr[CharacV.Job][2] + 22, AYpos + OffsetArr[CharacV.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
local AXpos = X + DgnObj.X + ImgInfo[3] + 16;
local AYpos = Y + DgnObj.Y + ImgInfo[4] + 2;
CharacV.EquVos.DrawFace(AXpos, AYpos);
//绘制队伍人数
for (local z = 0; z< count; z++) {

View File

@ -87,18 +87,16 @@ class Rindro_Anton_NotiC extends LenheartNewUI_Windows {
if (Ct >= 200) {
//绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[PartyMasterIcon.InfoObj.Job][0] - 9 + 150;
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 184;
setClip(AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
local AXpos = X - 9 + 150 + 44;
local AYpos = Y + 184 + 2;
PartyMasterIcon.InfoObj.EquVos.DrawFace(AXpos, AYpos);
}
}
//绘制消息
if (Ct >= 200) L_sq_DrawCode(Msg, X + 270 + LenheartTextClass.GetStringLength(Name), Y + 190, sq_RGBA(230, 200, 155, 255), 0, 1);
if (Ct >= 2000) Msg = null;
}
function Show(obj) {

View File

@ -47,7 +47,6 @@ class Rindro_AntonPartyC extends LenheartNewUI_CommonUi {
//绘制队伍编号
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;

View File

@ -205,13 +205,10 @@ class Rindro_AntonApplyJoinC extends LenheartNewUI_Windows {
L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40);
//绘制角色头像
if (AvatarArr) {
foreach(AvatarObj in AvatarArr) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[Job][0] - 8;
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); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
//绘制队长头像
local AXpos = X + 42 - 8;
local AYpos = Y + 1 + 40;
AvatarArr.DrawFace(AXpos, AYpos);
}
//绘制角色等级
L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);

View File

@ -268,7 +268,7 @@ class Rindro_Anton_PartyHallC extends LenheartNewUI_Windows {
//计算页数
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);
L_sq_DrawCode(PageStr, X + 196 - LenheartTextClass.GetStringLength(PageStr) / 2, Y + 402, sq_RGBA(134, 120, 79, 255), 0, 1);
}
//重置所有选中

View File

@ -45,7 +45,7 @@ class Rindro_AntonPartyInfoC extends LenheartNewUI_Windows {
Fatigue = Jso.charac.PlayFatigue,
Combat = Jso.charac.ZL,
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
}
//没人
@ -159,7 +159,7 @@ class Rindro_AntonPartyInfoC extends LenheartNewUI_Windows {
}.bindenv(this);
JoinPartyButton.SetCallBackFunc(function(window) {
if (!IsMyTeam && !RinDro_Anton_Obj.MyRaidTeamId)
window.X = 10;
window.X = X + 10;
else window.X = 90000;
}.bindenv(this));
AddChild(JoinPartyButton);

View File

@ -135,13 +135,9 @@ class Rindro_AntonPartyInfoMemberC extends LenheartNewUI_CommonUi {
sq_DrawBox(X + 42, Y + 1, 22, 18, HandBoxColor[InfoObj.TeamId]);
//绘制队长头像
foreach(AvatarObj in InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0];
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); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
local AXpos = X + 42;
local AYpos = Y + 1;
InfoObj.EquVos.DrawFace(AXpos, AYpos);
if (InfoObj.Captain) L_sq_DrawImg("hud/rindroanton.img", 18, X + 42, Y + 1);

View File

@ -370,12 +370,9 @@ class Rindro_Anton_RewardC extends LenheartNewUI_Windows {
L_sq_DrawImg("interface2/raid/anton/reward/anton_reward.img", 5 + Rarity, X + 156 + (160 * i), Y + 378, 1, sq_RGBA(255, 255, 255, CradAlphaOffset), OpenRealXrate, 1.0);
//绘制物品
if (OpenRealXrate >= 1.0 && i == 3) {
if (OpenRealXrate >= 1.0) {
DrawItemBase(X + 159 + (160 * i), Y + 380, CardInfo.item, CardInfo.num);
L_sq_DrawCode(Name, X + 174 + (160 * i) - LenheartTextClass.GetStringLength(Name) / 2, Y + 416, ItemNameColor[Rarity], 0, 1);
// if (ActFlag == 5) {
// ActFlag = 6;
// }
}
@ -506,14 +503,11 @@ class Rindro_Anton_RewardC extends LenheartNewUI_Windows {
function DrawProfile(Cid, gx, gy, CodeXOffset) {
if (RinDro_Anton_Obj.Portrait.rawin(Cid)) {
local InfoObj = RinDro_Anton_Obj.Portrait[Cid];
//绘制队长头像
foreach(AvatarObj in InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0] + gx - 110;
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1] + gy - 5;
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);
releaseClip(); //裁切结束
}
local AXpos = X + gx - 110 + 42;
local AYpos = Y + gy - 5 + 1;
InfoObj.EquVos.DrawFace(AXpos, AYpos);
L_sq_DrawCode(InfoObj.Name, gx + CodeXOffset - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, gy, 0xff00b1ff, 0, 1);
} else {

BIN
Project/Anton/img/0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 372 KiB

BIN
Project/Anton/img/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

BIN
Project/Anton/img/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
Project/Anton/img/11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 KiB

BIN
Project/Anton/img/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
Project/Anton/img/13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

BIN
Project/Anton/img/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

BIN
Project/Anton/img/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

BIN
Project/Anton/img/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 341 KiB

BIN
Project/Anton/img/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
Project/Anton/img/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
Project/Anton/img/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
Project/Anton/img/8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
Project/Anton/img/9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -135,14 +135,14 @@ class AradPass_QuestC extends LenheartNewUI_Windows {
ExpLimit = Jso.ExpLimit;
QuestSuccessTips = [0, 0, 0];
if (Parent) Parent.TabSuccessTips[1] = 0;
if (Parent && Parent.TabSuccessTips) Parent.TabSuccessTips[1] = 0;
foreach(Pos, Value in Jso.task) {
foreach(QuestObject in Value) {
if (QuestObject.SuccessState == 0) {
if (QuestObject.NowSuccessCount >= QuestObject.MaxSuccessCount) {
QuestSuccessTips[Pos] = 1;
Parent.TabSuccessTips[1] = 1;
if (Parent && Parent.TabSuccessTips)Parent.TabSuccessTips[1] = 1;
break;
}
}

BIN
Project/AradPass/img/0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

BIN
Project/AradPass/img/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

BIN
Project/AradPass/img/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 KiB

BIN
Project/AradPass/img/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 KiB

BIN
Project/AradPass/vid/0.mp4 Normal file

Binary file not shown.

BIN
Project/AradPass/vid/2.mp4 Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 KiB

View File

@ -338,22 +338,26 @@ class CombatRankC extends LenheartNewUI_Windows {
if (ShowCharacter) {
foreach(Index, AniDrawObj in ShowCharacter) {
local OffsetX = 270;
local OffsetY = 268;
if (Index == 1) {
OffsetX = 130;
OffsetY = 268;
}
if (Index == 2) {
OffsetX = 410;
OffsetY = 268;
}
if (AniDrawObj) {
foreach(AniObj in AniDrawObj) {
AniObj.X = X + OffsetX;
AniObj.Y = Y + OffsetY;
AniObj.Show(Duration);
try {
local OffsetX = 270;
local OffsetY = 268;
if (Index == 1) {
OffsetX = 130;
OffsetY = 268;
}
if (Index == 2) {
OffsetX = 410;
OffsetY = 268;
}
if (AniDrawObj) {
foreach(AniObj in AniDrawObj) {
AniObj.X = X + OffsetX;
AniObj.Y = Y + OffsetY;
AniObj.Show(Duration);
}
}
} catch (exception) {
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 479 KiB

View File

@ -4,48 +4,7 @@
创建日期:2024-08-31 10:32
文件用途:秒伤统计
*/
//大数字
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 DamagePerSecondC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
@ -93,27 +52,6 @@ class DamagePerSecondC extends LenheartNewUI_Windows {
Childrens = [];
DamagePerSecondList = {};
// DamagePerSecondList.rawset(0, {
// Name = "测试1",
// Damage = longlong("3002132000321100000")
// });
// DamagePerSecondList.rawset(1, {
// Name = "测试2",
// Damage = longlong("2002313000012310000")
// });
// DamagePerSecondList.rawset(2, {
// Name = "测试3",
// Damage = longlong("10000012121300000")
// });
// DamagePerSecondList.rawset(3, {
// Name = "测试4",
// Damage = longlong("1500012313000000")
// });
// foreach(Oii in DamagePerSecondList) {
// TotalDamage += Oii.Damage;
// }
//注册控件
RegisterWidget();

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -0,0 +1,182 @@
/*
文件名:EventShop.nut
路径:Project/EventShop/EventShop.nut
创建日期:2025-01-11 13:59
文件用途:活动商店
*/
class EventShopC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
Visible = false;
//商品列表
GoodsList = null;
//当前商店归属NPC
NPC_Index = -1;
//活动币数量
ActivityCoin = 99999;
WindowImg = Rindro_Image("eventshop/main.img");
//配置包
function BaseConfig(Chunk) {
local Jso = Json.Decode(Chunk);
//注册NPC功能
RegisterNpc(Jso.npc);
foreach(npc_id in Jso.npc) {
RegisterNpc(npc_id);
}
}
//请求商品列表
function RequestGoodsList(Index) {
local T = {
op = 20088001,
npc = Index
}
SendPackEx(T);
}
//请求商品列表回调
function RequestGoodsListCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
GoodsList = Jso.itemShops;
ActivityCoin = Jso.count;
NPC_Index = Jso.npc;
//初始化商店
InitGoodsList();
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20088004, BaseConfig.bindenv(this));
Pack_Control.rawset(20088002, RequestGoodsListCallBack.bindenv(this));
RequestGoodsList(2);
}
function RegisterNpc(id) {
local EachManager = getroottable()["L_Each_Obj"];
//先清空注册
EachManager.RemoveEachForNpc(id);
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 = 7;
ApplyEngagementButton.Str = "活动商店";
ApplyEngagementButton.OnClick = function(Button) {
Button.Parent.CloseAllEach();
Button.Parent.CloseWindow();
RequestGoodsList(Button.Parent.NPC_Index);
Visible = true;
ResetFocus();
}.bindenv(this);
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
SThis.AddChild(ApplyEngagementButton);
}.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 InitGoodsList() {
}
//绘制项目
function DrawItemCur(Object, XPos, Ypos) {
DrawItemBase(XPos, Ypos, Object.itemId, Object.num);
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, XPos, Ypos, 24, 24)) {
WindowImg.DrawPng(1, XPos, Ypos);
L_sq_DrawCode("所需活动币: " + Object.reItemNum, X + 26, Y + 288, sq_RGBA(189, 159, 126, 255), 0, 1);
if (MouseClickFlag) {
local T = {
op = 20088005,
npc = NPC_Index,
itemId = Object.itemId,
itemNum = 1
}
SendPackEx(T);
}
} else {
// if (Info.vis) {
// //关闭道具信息窗口
// L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0);
// Info.vis = false;
// DrawItemCurObject = null;
// }
}
}
MouseClickFlag = false;
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
MouseClickFlag = true;
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
}
//绘制主界面
function DrawMain(obj) {
if (!GoodsList) return;
WindowImg.DrawPng(0, X + 0, Y + 0);
foreach(Pos, Object in GoodsList) {
DrawItemCur(Object, X + 24 + ((Pos % 7) * 30), Y + 64 + ((Pos / 7) * 30));
}
//绘制活动币数量
L_sq_DrawCode(ActivityCoin.tostring(), X + 188 - LenheartTextClass.GetStringLength(ActivityCoin.tostring()) / 2, Y + 288, sq_RGBA(189, 159, 126, 255), 0, 1);
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 124, Y + 284, 21, 21)) {
L_sq_DrawWindow(X + 40, Y - 100 + 350, 224, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
local QuestTipsStr = "拥有的活动币数量,活动币可在游戏中获得,请留意有以内的各种玩法!";
local QuestTipsArray = L_sq_GetStringDrawArray(QuestTipsStr, 251);
foreach(Pos, va in QuestTipsArray) {
// Sout("文本内容嗯: %L", va);
L_sq_DrawCode(va, X + 40 + 7, Y - 100 + 7 + 350 + (Pos * 16), 0xFFFFFFFF, 1, 1);
}
}
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
MouseClickFlag = false;
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
}
getroottable().rawdelete("EventShop_Obj");
function Lenheart_EventShop_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("EventShop_Obj")) {
RootTab.rawset("EventShop_Obj", true);
LenheartNewUI_CreateWindow(EventShopC, "活动商店窗口", 60, 120, 260, 318, 32);
}
}
getroottable()["LenheartFuncTab"].rawset("EventShopFuncN", Lenheart_EventShop_Fun);

View File

@ -0,0 +1,190 @@
/*
文件名: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

@ -0,0 +1,328 @@
/*
文件名: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

@ -0,0 +1,188 @@
/*
文件名: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

@ -0,0 +1,696 @@
/*
文件名: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

@ -0,0 +1,406 @@
/*
文件名: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

@ -0,0 +1,259 @@
/*
文件名: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

@ -0,0 +1,81 @@
/*
文件名: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

@ -0,0 +1,81 @@
/*
文件名: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

@ -0,0 +1,77 @@
/*
文件名: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

@ -0,0 +1,112 @@
/*
文件名: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

@ -0,0 +1,120 @@
/*
文件名: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

@ -0,0 +1,252 @@
/*
文件名: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

@ -0,0 +1,188 @@
/*
文件名: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

@ -0,0 +1,227 @@
/*
文件名: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

@ -0,0 +1,190 @@
/*
文件名: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

@ -0,0 +1,328 @@
/*
文件名:FiendReward.nut
路径:Project/Fiendwar/FiendReward.nut
创建日期:2024-11-26 14:44
文件用途:
*/
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 = RinDro_Fiendwar_Obj.MyRaidTeam.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.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;
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);
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 = L_sq_RA(L_sq_GetItem(Id) + 0xF4);
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) {
print(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

@ -0,0 +1,703 @@
/*
文件名:FiendwarFightSituation.nut
路径:Project/Fiendwar/FiendwarFightSituation.nut
创建日期:2024-11-26 14:44
文件用途:
*/
//复选框
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;
ExternalWindow = null;
//雷达是否存在
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;
RinDro_Fiendwar_Obj.EndTime = Jso.fightInfo.endTime;
local Pt = Clock();
PackCurT = Pt;
RinDro_Fiendwar_Obj.PackCurT = Pt;
// local Win = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyInfoC, "超时空我的队伍窗口", 430, 15, 354, 290, 18);
// Win.CloseWindow();
// local Win = LenheartNewUI_CreateWindow(Rindro_Fiendwar_PartyHallC, "超时空攻坚队伍列表", 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 = RinDro_Fiendwar_Obj.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));
ExternalWindow = Rindro_Fiendwar_FightSituatioExternalC("超时空攻坚战况表外部窗口", getroottable().Rindro_Scr_Width.tointeger() - 296, 8, 103, 22, 0);
ExternalWindow.AddParentWin(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(FiendwarFightSituationC, "超时空战况表开关", 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 (RinDro_Fiendwar_Obj.MyRaidTeam) {
local Mt = RinDro_Fiendwar_Obj.MyRaidTeam;
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.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;
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);
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);
}
}
//逻辑入口
function Proc(obj) {
//在基地
if (RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) DrawParty();
// if (getroottable().rawin("FiendwarTotal") && RinDro_Fiendwar_Obj.EndTime) {
// DrawFightTime(obj);
// L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 13, X + 770, Y);
// }
// //界面未打开
// if (!this.Visible) {
// //在甲板
// if (RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.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);
}
MainButton = null;
CloseMainButton = null;
CloseFlag = false;
//顶层绘制
function TopDraw(obj) {
//界面未打开
if (!this.Visible) {
//在甲板
if (RinDro_Fiendwar_Obj.BaseConfig && "channel_index" in RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("19") && "town_index" in RinDro_Fiendwar_Obj.BaseConfig && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.BaseConfig.town_index && (RinDro_Fiendwar_Obj.MyRaidState == 1 || RinDro_Fiendwar_Obj.MyRaidState == 3) && !CloseFlag) {
}
if (CloseFlag) {
if (Clock() - CloseFlag >= 10)
CloseFlag = false;
}
} else {
}
ExternalWindow.Show(obj);
}
}
class Rindro_Fiendwar_FightSituatioExternalC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
NoWindow = true;
//操作窗口
Window = null;
//是否可见
// Visible = false;
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
}
function RegisterWidget() {
//开启按钮
local CloseButton = LenheartNewUI_BaseButton(0, 0, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
CloseButton.OnClick = function() {
if (!Window.Visible) {
Window.Visible = true;
Window.ResetFocus();
Window.GetInfo();
} else {
Window.CloseWindow();
}
}.bindenv(this);
CloseButton.SetCallBackFunc(function(button) {
if (!Window.Visible) {
button.Idx = 13;
} else {
button.Idx = 13;
}
}.bindenv(this));
Childrens.append(CloseButton);
}
function AddParentWin(Win) {
Window = Win;
}
//绘制主界面
function DrawMain(obj) {}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
function TopShow(obj) {
//结束时间
if (RinDro_Fiendwar_Obj.EndTime) {
Window.DrawFightTime(obj);
}
// Window.DrawSimpleSituation();
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
//在甲板
if (RinDro_Fiendwar_Obj.BaseConfig && "channel_index" in RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("20") && "town_index" in RinDro_Fiendwar_Obj.BaseConfig && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.BaseConfig.town_index && (RinDro_Fiendwar_Obj.RaidStage == 1 || RinDro_Fiendwar_Obj.RaidStage == 3)) {
Visible = true;
} else {
Visible = false;
}
}
}

View File

@ -0,0 +1,81 @@
/*
文件名:FiendwarHallGoBossDgn.nut
路径:Project/Fiendwar/FiendwarHallGoBossDgn.nut
创建日期:2024-11-28 15:07
文件用途:进入罗什的窗口
*/
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

@ -0,0 +1,112 @@
/*
文件名:FiendwarNoti.nut
路径:Project/Fiendwar/FiendwarNoti.nut
创建日期:2024-11-26 14:45
文件用途:
*/
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

@ -0,0 +1,434 @@
/*
文件名:Rindro_Fiendwar.nut
路径:Project/Fiendwar/Rindro_Fiendwar.nut
创建日期:2024-08-13 09:30
文件用途:超时空
*/
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");
//超时空核心数据类
class RinDro_Fiendwar extends Rindro_BaseToolClass {
//基础配置
BaseConfig = null;
//攻坚配置
FightConfig = null;
//我的攻坚队状态
MyRaidState = null;
//我的攻坚队伍
MyRaidTeam = null;
//我的攻坚队伍ID
MyRaidTeamId = null;
//我的Cid
MyCid = null;
//我是否是攻坚队队长
IsCaptain = null;
//结束时间
EndTime = null;
//我的攻坚队攻坚阶段
RaidStage = 0;
//我的攻坚队伍头像存储
Portrait = null;
//超时空我的队伍窗口
PartyWindow_Object = null;
//攻坚战况表窗口
FightSituationWindow_Object = null;
//攻坚大厅窗口
PartyHallWindow_Object = null;
//翻牌奖励窗口
RewardWindow_Object = null;
//编队窗口
PartyFormationWindow_Object = null;
//攻坚开始动画的Flag
DrawStartAniMark = false;
//请求基础信息配置
function GetFiendwarBase() {
local T = {
op = 20063501,
}
SendPackEx(T);
}
//请求掉线配置信息
function GetFiendwarDown() {
local T = {
op = 20063063,
}
SendPackEx(T);
}
//基础信息配置
function FiendwarBase(Chunk) {
BaseConfig = Json.Decode(Chunk);
FiendwarChannelTownLogicCallBack();
}
//基础攻坚信息配置
function FiendwarFightBase(Chunk) {
FightConfig = Json.Decode(Chunk);
}
//团本专属频道上线城镇移动包
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(getroottable().rawin("RindroRaidNormalTown") ? getroottable().RindroRaidNormalTown : 2, getroottable().rawin("RindroRaidNormalArea") ? getroottable().RindroRaidNormalArea : 1, 474, 249);
}
}
}
//获取攻坚队信息回调
function GetTeamInfoCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
local ZlibStr = Jso.ZipS;
Jso.ZipS = Json.Decode(L_sq_Dezlib(Jso.ZipS));
Jso.team <- Jso.ZipS.team;
//取的窗口对象
local Win = PartyWindow_Object;
Win.InfoFlag = true;
//如果攻坚队伍信息中已经有了角色成员 清空成员对象集合
for (local i = 0; i< Win.Childrens.len(); i++) {
local Cobj = Win.Childrens[i];
if (Cobj instanceof Rindro_FiendwarPartyInfoMemberC) {
Win.Childrens.remove(i);
i--;
}
}
//重置成员数组
Win.MembersList = [];
//清空是否为我的队伍状态
Win.IsMyTeam = false;
//清空是否为队长状态
Win.IsCaptain = false;
//赋值队伍名称
Win.TeamName = Jso.team.TeamName;
//赋值队伍ID
Win.TeamID = Jso.team.TeamId;
//还原头像
Portrait = {};
//遍历Team包 用于构造队伍窗口中的每一位成员
foreach(_index, MemberObj in Jso.team.characNum) {
// for (local i = 0; i< 8; i++) {
// local MemberObj = Jso.team.characNum[0];
// local MemberObj = Jso.team.characNum[0];
//说明我在这个攻坚队里
if (Jso.cid == MemberObj.CID) {
Win.IsMyTeam = true;
MyRaidState = Jso.team.State;
MyRaidTeam = PartyWindow_Object;
//向全局类存入我的攻坚队伍ID
MyRaidTeamId = Jso.team.TeamId;
//存入我的CID
MyCid = Jso.cid;
//说明是队长
if (Jso.cid == Jso.team.captainCid) {
Win.IsCaptain = true;
//存入我是攻坚队队长
IsCaptain = true;
}
}
//构造CID对应的装备数组方便绘制
Portrait.rawset(MemberObj.CID, {
EquVos = clone(MemberObj.equVos),
Job = MemberObj.PlayerJob,
TeamId = MemberObj.characNum + 1,
Name = MemberObj.PlayerName,
});
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 = FightConfig.rewardCondition, //总通关次数
}
//通过类构造并添加队伍成员UI对象
local TeamBuf = Rindro_FiendwarPartyInfoMemberC(T);
Win.AddChild(TeamBuf);
Win.MembersList.append(TeamBuf);
}
if (("OpenWin" in Jso)) {
//开启队伍窗口显示
Win.Visible = true;
//设置置顶
Win.ResetFocus();
}
}
//攻坚队攻坚开始回调
function RaidStartFightCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
RaidStage = 1;
MyRaidState = 1;
//在获取一下攻坚队信息
local Jso = {
op = 20063011
}
SendPackEx(Jso);
}
//结束时间
EndTime = null;
//上次刷新信息包的时间
PackCurT = null;
//攻坚队信息包
function RaidFightInfoCallBack(Chunk) {
PackCurT = Clock();
local Info = Json.Decode(Chunk).fightInfo;
EndTime = Info.endTime;
if (FightSituationWindow_Object) FightSituationWindow_Object.InitInfo(Info);
//如果存在
if (MyRaidTeam && MyRaidTeam.InfoFlag) {
for (local i = 0; i< MyRaidTeam.MembersList.len(); i++) {
local PInfo = MyRaidTeam.MembersList[i].InfoObj;
local CID = PInfo.Cid;
local Flag = false;
foreach(scid in Info.Standby) {
if (scid == CID) Flag = true;
}
if (Flag) {
MyRaidTeam.MembersList[i].InfoObj.Standby <- true;
} else {
MyRaidTeam.MembersList[i].InfoObj.Standby <- false;
}
}
}
}
//收到奖励包
function RaidRewardInfoCallBack(Chunk) {
local Info = Json.Decode(Chunk);
RewardWindow_Object.Init(Info);
}
//收到初始化包
function RaidInitCallBack(Chunk) {
//我的攻坚队状态
MyRaidState = null;
//我的攻坚队伍
MyRaidTeam = null;
//我的攻坚队伍ID
MyRaidTeamId = null;
//我的Cid
MyCid = null;
//我是否是攻坚队队长
IsCaptain = null;
//结束时间
EndTime = null;
//我的攻坚队攻坚阶段
RaidStage = 0;
//我的攻坚队伍头像存储
Portrait = null;
//超时空我的队伍窗口
PartyWindow_Object.DestroyWindow();
//攻坚战况表窗口
FightSituationWindow_Object.DestroyWindow();
//攻坚大厅窗口
PartyHallWindow_Object.DestroyWindow();
//翻牌奖励窗口
RewardWindow_Object.DestroyWindow();
//编队窗口
PartyFormationWindow_Object.DestroyWindow();
//超时空我的队伍窗口
PartyWindow_Object = null;
//攻坚战况表窗口
FightSituationWindow_Object = null;
//攻坚大厅窗口
PartyHallWindow_Object = null;
//翻牌奖励窗口
RewardWindow_Object = null;
//编队窗口
PartyFormationWindow_Object = null;
}
MonsterFMap = [202210052, 202210053, 202210054, 202210055];
//火山怪物投放包
function MonsterSendCallBack(Chunk) {
local Info = Json.Decode(Chunk);
if (sq_GetCurrentModuleType() == 3) {
local obj = sq_GetMyMasterCharacter();
obj = sq_ObjectToSQRCharacter(obj);
obj.sq_SendCreatePassiveObjectPacket(MonsterFMap[Info.id], 0, 120, 1, 0);
}
}
constructor() {
// DrawStartAniMark = true;
// DrawStartAniT = Clock();
Pack_Control.rawset(20063028, RaidStartFightCallBack.bindenv(this));
Pack_Control.rawset(20063016, RaidFightInfoCallBack.bindenv(this));
Pack_Control.rawset(20063004, GetTeamInfoCallBack.bindenv(this));
Pack_Control.rawset(20063036, FiendwarFightBase.bindenv(this));
//攻坚奖励包
Pack_Control.rawset(20063026, RaidRewardInfoCallBack.bindenv(this));
//初始化包 退出队伍 或者 被 请出队伍
Pack_Control.rawset(20063008, RaidInitCallBack.bindenv(this));
//火山怪物投放
Pack_Control.rawset(20063050, MonsterSendCallBack.bindenv(this));
//绘制动画包
Pack_Control.rawset(20063038, RaidPlayAniCallBack.bindenv(this));
//获取基础配置回调包
Pack_Control.rawset(20063502, FiendwarBase.bindenv(this));
//第一次上线要重新请求一下位置信息
GetFiendwarBase();
//看看是否有断线重连
GetFiendwarDown();
FiendFightLogicC_Object = FiendFightLogicC();
}
FiendFightLogicC_Object = null;
function Proc(obj) {
PartyHallWindow_Object = LenheartNewUI_CreateWindow(Rindro_Fiendwar_PartyHallC, "新超时空攻坚大厅窗口", ((getroottable().Rindro_Scr_Width - 478)).tointeger(), 40, 478, 434, 18);
PartyFormationWindow_Object = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyFormation, "超时空我的队伍编队窗口", 375, 190, 294, 192, 18);
FightSituationWindow_Object = LenheartNewUI_CreateWindow(FiendwarFightSituationC, "超时空攻坚战况表", 0, 8, 770, 600, 0);
PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyInfoC, "超时空我的队伍窗口", 6, 15, 354, 566 - 255, 18);
RewardWindow_Object = LenheartNewUI_CreateWindow(FiendRewardC, "超时空翻牌奖励窗口", 0, 0, 0, 0, 0);
LenheartNewUI_CreateWindow(FiendwarNotiC, "超时空攻坚队伍消息分发", 0, 0, 0, 0, 0);
if (FightSituationWindow_Object) FightSituationWindow_Object.TopDraw(obj);
//绘制动画
DrawPlayAni(obj);
if (FiendFightLogicC_Object) FiendFightLogicC_Object.Proc(obj);
}
DrawPlayAniMark = null;
DrawPlayAniT = null;
function RaidPlayAniCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
DrawPlayAniMark = Jso.type;
DrawPlayAniT = Clock();
}
//绘制通关副本动画
function DrawPlayAni(obj) {
if (!DrawPlayAniMark || !DrawPlayAniT) return;
local Offset = 0;
if (getroottable().Rindro_Scr_Width > 800) Offset = ((getroottable().Rindro_Scr_Width - 800) / 2);
local Ct = Clock() - DrawPlayAniT;
switch (DrawPlayAniMark) {
case 1: //通关擎天A
case 2: //通关擎天B
case 13: //通关擎天B
local Ani = T_DrawDynamicAni(obj, "common/anton/title/04_clear_back.ani", 0 + Offset, 180, "超时空通关擎天A" + DrawPlayAniT);
local str = "擎天之柱A";
if (DrawPlayAniMark == 2) str = "擎天之柱B"
if (DrawPlayAniMark == 13) str = "黑色火山"
if (Ct >= 350 && Ct <= 1400) L_sq_DrawCode(str, 236 + Offset + 158 - LenheartTextClass.GetStringLength(str) / 2, 244, sq_RGBA(255, 146, 0, 250), 0, 1);
break;
case 5:
T_DrawDynamicAni(obj, "common/luke/newtile/00_start_back.ani", 401 + Offset, 210 + 26, "超时空阻截开始" + DrawPlayAniT);
break;
case 6:
T_DrawDynamicAni(obj, "common/luke/newtile/02_success_back.ani", 401 + Offset, 210 + 26, "超时空阻截成功" + DrawPlayAniT);
break;
case 7:
T_DrawDynamicAni(obj, "common/luke/newtile/01_fail_back.ani", 401 + Offset, 210 + 26, "超时空阻截失败" + DrawPlayAniT);
break;
case 8:
T_DrawDynamicAni(obj, "common/luke/newtile/00_start_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀开始" + DrawPlayAniT);
break;
case 9:
T_DrawDynamicAni(obj, "common/luke/newtile/02_success_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀成功" + DrawPlayAniT);
break;
case 10:
T_DrawDynamicAni(obj, "common/luke/newtile/01_fail_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀失败" + DrawPlayAniT);
break;
case 11:
case 12:
T_DrawDynamicAni(obj, "common/anton/title/03_warning_back.ani", 0 + Offset, 210 + 26, "超时空火山警告" + DrawPlayAniT);
local str = "火山能量即将过载,请立即前往压制!!!";
if (DrawPlayAniMark == 12) str = "震颤的大地已经复活,请立即前往压制!!!"
if (Ct >= 350 && Ct <= 1600) L_sq_DrawCode(str, 236 + Offset + 158 - LenheartTextClass.GetStringLength(str) / 2, 320, sq_RGBA(255, 50, 50, 250), 0, 1);
break;
default:
break;
}
if (Ct >= 3000) {
DrawPlayAniMark = null;
DrawPlayAniT = null;
}
}
}
getroottable().rawdelete("RinDro_Fiendwar_Obj");
function Lenheart_Rindro_Fiendwar_New(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("RinDro_Fiendwar_Obj")) {
RootTab.rawset("RinDro_Fiendwar_Obj", RinDro_Fiendwar());
} else {
RootTab["RinDro_Fiendwar_Obj"].Proc(obj);
}
}
if (getroottable().rawin("LenheartTopFuncTab")) {
getroottable()["LenheartTopFuncTab"].rawset("Lenheart_Rindro_Fiendwar_NewFunc", Lenheart_Rindro_Fiendwar_New);
} else {
local T = {};
T.rawset("Lenheart_Rindro_Fiendwar_NewFunc", Lenheart_Rindro_Fiendwar_New);
getroottable().rawset("LenheartTopFuncTab", T);
}

View File

@ -0,0 +1,106 @@
/*
文件名:Rindro_Fiendwar_CreateParty.nut
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_CreateParty.nut
创建日期:2024-07-15 20:28
文件用途:超时空创建队伍窗口
*/
class Rindro_FiendwarCreatePartyC extends LenheartNewUI_Windows {
//调试模式
DeBugMode = false;
X = 290;
Y = 220;
//输入框
InputObject = null;
//时装 帽子 头部 脸 上衣 下装 鞋子 胸部 腰部 皮肤 光环
AvatarInfoIdx = [0x3038, 0x3010, 0x3014, 0x3018, 0x301c, 0x3020, 0x3024, 0x3028, 0x302c, 0x3030, 0x3034];
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(266, 2, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
DestroyWindow();
}.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 C_Object = L_sq_RA(0x1ab7cdc);
local avataritemsbuf = [];
foreach(offset in AvatarInfoIdx) {
local AvatarEquiAddress = L_sq_RA(C_Object + offset);
if (AvatarEquiAddress >= 0x400000) {
local Ab = [];
local NormalIndex = L_sq_RA(AvatarEquiAddress + 0x1c);
local ExIndex = L_sq_RA(AvatarEquiAddress + 0x13E0);
Ab.append(NormalIndex);
Ab.append(ExIndex);
avataritemsbuf.append(Ab);
} else {
local Ab = [];
Ab.append(0);
Ab.append(0);
avataritemsbuf.append(Ab);
}
}
local T = {
op = 20063001,
teamsName = InputObject.str,
items = avataritemsbuf,
}
SendPackEx(T);
DestroyWindow();
}
}.bindenv(this);
AddChild(OkButton);
local CloseButton = LenheartNewUI_ButtonText(144, 124, 5, "取消");
CloseButton.SetTextOffset(0, 1);
CloseButton.OnClick = function() {
DestroyWindow();
}.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

@ -0,0 +1,79 @@
/*
文件名:Rindro_Fiendwar_Party.nut
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_Party.nut
创建日期:2024-07-15 21:02
文件用途:超时空队伍对象
*/
class Rindro_FiendwarPartyC 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.Childrens) {
if (Obj instanceof Rindro_FiendwarPartyC) {
Obj.SelectState = false;
}
}
SelectState = !SelectState;
//发送查看攻坚队具体信息包
local T = {
op = 20063013,
teamsId = TeamObj.TeamId
}
SendPackEx(T);
}
LenheartNewUI_CommonUi.constructor(10, 82, this.Width, this.Height);
}
function Show(obj) {
//绘制底槽
L_sq_DrawImg("hud/rindroanton.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);
// print(TeamObj.State);
//绘制攻坚队攻坚状态
L_sq_DrawImg("hud/newantonui.img", 4 + TeamObj.State, X + 314, Y + 2);
local PartyPlayerCountStr = TeamObj.TeamPlayerCount + " / " + 20;
//绘制攻坚队队员数量
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/rindroanton.img", 5, X, Y);
}
if (isInRect) {
L_sq_DrawImg("hud/rindroanton.img", 5, X, Y);
}
}
}

View File

@ -0,0 +1,258 @@
/*
文件名:Rindro_Fiendwar_PartyApplyJoin.nut
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut
创建日期:2024-07-16 21:54
文件用途:超时空玩家申请加入攻坚队
*/
class Rindro_FiendwarApplyJoinC 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 = [
//男鬼剑士
[56, 112, 220, 222],
//女格斗家
[54, 103, 240, 278],
//男神枪手
[55, 130, 236, 246],
//女魔法师
[57, 88, 234, 291],
//男圣职者
[57, 124, 208, 190],
//女神枪手
[56, 119, 226, 209],
//暗夜使者
[56, 117, 225, 212],
//男格斗家
[56, 118, 233, 212],
//男魔法师
[54, 103, 236, 276],
//黑暗武士
[56, 112, 220, 222],
//缔造者
[57, 88, 234, 291],
]
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_Fiendwar_Obj.MyRaidTeamId,
applyCid = Charc.CID
}
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
}
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.F[0][2] + X + OffsetArr[Job][0] - 8;
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); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], 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

@ -0,0 +1,121 @@
/*
文件名:Rindro_Fiendwar_PartyFormation.nut
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyFormation.nut
创建日期:2024-07-16 16:22
文件用途:超时空 队内编队
*/
//编队用按钮需要传递参数所以重写
class Rindro_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 Rindro_FiendwarPartyFormation extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
Visible = false;
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() {
PartyMarkFlag = 99;
}.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 = Rindro_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) {
R_Mouse.SetType(151);
}
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
//鼠标左键弹起回调
function OnMouseLbUp(MousePos_X, MousePos_Y) {
//还原编队的鼠标指针
if (this.PartyMarkFlag != -1) {
this.PartyMarkFlag = -1;
R_Mouse.SetType(0);
}
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
}
}

View File

@ -0,0 +1,347 @@
/*
文件名:Rindro_Fiendwar_PartyHall.nut
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyHall.nut
创建日期:2024-07-15 16:50
文件用途:超时空组队大厅
*/
class Rindro_Fiendwar_PartyHallC extends LenheartNewUI_Windows {
Visible = false;
//调试模式
// DeBugMode = true;
//页数
Page = 0;
//一页放多少个队伍
PageMaxCount = 13;
//攻坚队List
PartyList = null;
//获取所有队伍
function GetAllTeamCall() {
local Jso = {
op = 20063011
}
SendPack(Jso);
}
//获取所有队伍收包
function GetAllTeamCallCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
//清除原来的List PartyList可以直接清除 但是Childrens中的窗口需要调用底层方法清除队伍类
PartyList = [];
RemoveAllParty();
//遍历包构造攻坚队UI对象
foreach(TeamsSimple in Jso.TeamSimList) {
local RealState = 0;
if (TeamsSimple.State == 1) RealState = 1;
else if (TeamsSimple.State == 2) RealState = 0;
else if (TeamsSimple.State == 3) RealState = 2;
else if (TeamsSimple.State == 4) RealState = 3;
local T = {
TeamId = TeamsSimple.TeamId.tostring(),
TeamName = TeamsSimple.TeamName,
TeamPlayerCount = TeamsSimple.TeamPlayerCount,
State = RealState
}
local TeamBuf = Rindro_FiendwarPartyC(T);
AddChild(TeamBuf);
PartyList.append(TeamBuf);
}
//收到刷新队伍列表包时需要将队伍窗口关闭 //TODO
// if ("Close" in Jso) LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
PartyList = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Pack_Control.rawset(20063002, GetAllTeamCallCallBack.bindenv(this));
GetAllTeamCall();
}
OnlyPreparingBtn = null;
OnlyPreparingFlag = 1;
InputObject = null;
function RegisterWidget() {
//关闭按钮
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 MyPartyButton = LenheartNewUI_ButtonText(15, 395, 30, "创建攻坚队");
MyPartyButton.SetTextOffset(-6, 1);
MyPartyButton.OnClick = function() {
//有队伍则查看队伍信息
if (RinDro_Fiendwar_Obj.MyRaidTeamId) {
//发送查看攻坚队具体信息包
local T = {
op = 20063013,
teamsId = RinDro_Fiendwar_Obj.MyRaidTeamId
}
SendPackEx(T);
}
//否则创建队伍
else {
local Win = LenheartNewUI_CreateWindow(Rindro_FiendwarCreatePartyC, "超时空创建队伍窗口", 290, 220, 284, 154, 18);
Win.Visible = true;
Win.ResetFocus();
}
}.bindenv(this);
//设置动态回调改变按钮名称
MyPartyButton.SetCallBackFunc(function(window) {
if (RinDro_Fiendwar_Obj.MyRaidTeamId) window.TextStr = "我的攻坚队";
else window.TextStr = "创建攻坚队";
}.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 DrawMain(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/rindroanton.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);
}
//重置所有选中
function ResetAllSelect() {
foreach(Index, TeamObj in PartyList) {
TeamObj.SelectState = false;
}
}
//移除队伍
function RemoveParty(TeamId) {
local ObjectID = null;
for (local i = 0; i< Childrens.len(); i++) {
local Cobj = Childrens[i];
if (Cobj instanceof Rindro_FiendwarPartyC) {
if (Cobj.TeamObj.TeamId.tointeger() == TeamId.tointeger()) {
ObjectID = Cobj.ObjectId;
}
}
}
if (ObjectID) RemoveChild(ObjectID);
}
//移除所有队伍
function RemoveAllParty() {
for (local i = 0; i< Childrens.len(); i++) {
local Cobj = Childrens[i];
if (Cobj instanceof Rindro_FiendwarPartyC) {
Childrens.remove(i);
i--;
}
}
}
//绘制队伍信息
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);
}
}
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 (RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.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);
}
}

View File

@ -0,0 +1,311 @@
/*
文件名:Rindro_Fiendwar_PartyInfo.nut
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyInfo.nut
创建日期:2024-07-15 22:12
文件用途:超时空队伍信息窗口
*/
class Rindro_FiendwarPartyInfoC extends LenheartNewUI_Windows {
Visible = false;
//调试模式
// DeBugMode = true;
//是否存在信息
InfoFlag = false;
//队员列表
MembersList = null;
//队伍名称
TeamName = "";
//队伍ID
TeamID = 99999999;
//是否是我的攻坚队
IsMyTeam = false;
//是否是队长
IsCaptain = false;
//收到请求加入攻坚队包
function JoinTeamCallBack(Chunk) {
local Jso = Json.Decode(Chunk);
local win = LenheartNewUI_CreateWindow(Rindro_FiendwarApplyJoinC, "超时空申请加入队伍窗口", 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));
RegisterWidget();
}
function RegisterWidget() {
//关闭按钮
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 StageButton = LenheartNewUI_ButtonText(289, 60, 0, "入场材料");
StageButton.Idx = 163;
StageButton.DWidth = 26;
StageButton.FillWidth = 1;
StageButton.FirstWidth = 21;
StageButton.SetTextOffset(-14, 1);
StageButton.SetCallBackFunc(function(window) {
if (RinDro_Fiendwar_Obj.EndTime) window.TextStr = "通关次数";
else window.TextStr = "入场材料";
}.bindenv(this));
AddChild(StageButton);
//如果不是我的队伍 并且我没有攻坚队
local JoinPartyButton = LenheartNewUI_ButtonText(10, 268 + 8, 10, "参加攻坚队");
JoinPartyButton.SetTextOffset(-15, 1);
JoinPartyButton.OnClick = function() {
//时装 帽子 头部 脸 上衣 下装 鞋子 胸部 腰部 皮肤 光环
local AvatarInfoIdx = [0x3038, 0x3010, 0x3014, 0x3018, 0x301c, 0x3020, 0x3024, 0x3028, 0x302c, 0x3030, 0x3034];
local C_Object = L_sq_RA(0x1ab7cdc);
local avataritemsbuf = [];
foreach(offset in AvatarInfoIdx) {
local AvatarEquiAddress = L_sq_RA(C_Object + offset);
if (AvatarEquiAddress >= 0x400000) {
local Ab = [];
local NormalIndex = L_sq_RA(AvatarEquiAddress + 0x1c);
local ExIndex = L_sq_RA(AvatarEquiAddress + 0x13E0);
Ab.append(NormalIndex);
Ab.append(ExIndex);
avataritemsbuf.append(Ab);
} else {
local Ab = [];
Ab.append(0);
Ab.append(0);
avataritemsbuf.append(Ab);
}
}
local T = {
op = 20063005,
teamsId = TeamID,
items = avataritemsbuf,
}
SendPackEx(T);
}.bindenv(this);
JoinPartyButton.SetCallBackFunc(function(window) {
if (!IsMyTeam && !RinDro_Fiendwar_Obj.MyRaidTeamId)
window.X = 10;
else window.X = 90000;
}.bindenv(this));
AddChild(JoinPartyButton);
//如果是我的队伍
//退出按钮
local ExitButton = LenheartNewUI_ButtonText(220, 268 + 8, 5, "退出");
ExitButton.SetTextOffset(-1, 1);
ExitButton.OnClick = function() {
local T = {
op = 20063009,
teamsId = TeamID
}
SendPackEx(T);
RinDro_Fiendwar_Obj.MyCid = null;
RinDro_Fiendwar_Obj.MyRaidTeamId = null;
RinDro_Fiendwar_Obj.IsCaptain = null;
//重置所有选中 并且从攻坚大厅对象中移除这个子对象
local HallWin = LenheartNewUI_CreateWindow(Rindro_Fiendwar_PartyHallC, "新超时空攻坚大厅窗口", 320, 40, 478, 434, 18);
HallWin.ResetAllSelect();
HallWin.RemoveParty(this.TeamID);
DestroyWindow();
}.bindenv(this);
ExitButton.SetCallBackFunc(function(window) {
if (!IsMyTeam) window.X = X + 900000;
else window.X = X + 220;
}.bindenv(this));
AddChild(ExitButton);
//队伍编制按钮
local PartyEditButton = LenheartNewUI_ButtonText(10, 268 + 8, 5, "队伍编制");
PartyEditButton.SetTextOffset(-12, 1);
PartyEditButton.OnClick = function() {
local win = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
win.Visible = true;
win.ResetFocus();
}.bindenv(this);
PartyEditButton.SetCallBackFunc(function(window) {
if (!IsMyTeam || !IsCaptain) window.X = X + 900000;
else window.X = X + 10;
}.bindenv(this));
AddChild(PartyEditButton);
//修改信息按钮
local FqButton = LenheartNewUI_ButtonText(100, 267 + 8, 5, "修改信息");
FqButton.State = 8;
FqButton.SetTextOffset(-12, 1);
FqButton.SetCallBackFunc(function(window) {
if (!IsMyTeam || !IsCaptain) window.X = X + 900000;
else window.X = X + 100;
}.bindenv(this));
AddChild(FqButton);
//队伍招募按钮
local FqButton1 = LenheartNewUI_ButtonText(160, 267 + 8, 5, "队伍招募");
FqButton1.State = 8;
FqButton1.SetTextOffset(-12, 1);
FqButton1.SetCallBackFunc(function(window) {
if (!IsMyTeam || !IsCaptain) window.X = X + 900000;
else window.X = X + 160;
}.bindenv(this));
AddChild(FqButton1);
//队伍招募按钮
local FightOpenButton = LenheartNewUI_ButtonText(290, 268 + 8, 5, "开始攻坚");
FightOpenButton.SetTextOffset(-12, 1);
FightOpenButton.OnClick = function() {
local T = {
op = 20063051,
teamsId = TeamID
}
SendPackEx(T);
}.bindenv(this);
FightOpenButton.SetCallBackFunc(function(window) {
// if (!IsMyTeam || !IsCaptain || RinDro_Fiendwar_Obj.EndTime) window.X = X + 900000;
// else window.X = X + 290;
if ((RinDro_Fiendwar_Obj.MyRaidState == 0 || RinDro_Fiendwar_Obj.MyRaidState == 2) && IsCaptain && IsMyTeam) window.X = X + 290;
else window.X = X + 900000;
}.bindenv(this));
AddChild(FightOpenButton);
}
//绘制主界面
function DrawMain(obj) {
//如果没有信息则直接返回不绘制
if (!InfoFlag) return;
//标题栏
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, 252, "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(Rindro_FiendwarPlayerInteractiveC, "超时空玩家交互", X, Y, 100, 21, 0);
Each.Visible = false;
}
}
}

View File

@ -0,0 +1,190 @@
/*
文件名:Rindro_Fiendwar_PartyMemberInfo.nut
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut
创建日期:2024-07-15 22:52
文件用途:超时空队伍横条
*/
//队员显示类
class Rindro_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 = [
//男鬼剑士
[56, 112, 220, 222],
//女格斗家
[54, 103, 240, 278],
//男神枪手
[55, 130, 236, 246],
//女魔法师
[57, 88, 234, 291],
//男圣职者
[57, 124, 208, 190],
//女神枪手
[56, 119, 226, 209],
//暗夜使者
[56, 117, 225, 212],
//男格斗家
[56, 118, 233, 212],
//男魔法师
[54, 103, 236, 276],
//黑暗武士
[56, 112, 220, 222],
//缔造者
[57, 88, 234, 291],
]
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(Rindro_FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
//编队状态
if (win.PartyMarkFlag != -1) {
//并且是属于我的攻坚队的成员
if (RinDro_Fiendwar_Obj.MyRaidTeamId == InfoObj.PartyId) {
local gnum = win.PartyMarkFlag + 1;
if (gnum == 100) gnum = 0;
local T = {
op = 20063015,
teamsId = InfoObj.PartyId,
cidNew = InfoObj.Cid,
num = gnum
}
SendPackEx(T);
win.PartyMarkFlag = -1;
R_Mouse.SetType(0);
win.ResetFocus();
return;
}
//点了其他队伍成员要还原编队状态
else {
win.PartyMarkFlag = -1;
R_Mouse.SetType(0);
}
}
local Interactive = LenheartNewUI_CreateWindow(Rindro_FiendwarPlayerInteractiveC, "超时空玩家交互", 0, 0, 100, 21, 0);
//改变鼠标坐标
Interactive.X = MousePos_X;
Interactive.Y = MousePos_Y;
//赋值对象参数
Interactive.InfoObj = InfoObj;
//对象不是我
if (InfoObj.Cid == RinDro_Fiendwar_Obj.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.F[0][2] + X + OffsetArr[InfoObj.Job][0];
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); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], 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

@ -0,0 +1,227 @@
/*
文件名:Rindro_Fiendwar_PlayerInteractive.nut
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut
创建日期:2024-07-16 11:02
文件用途:超时空攻坚队玩家交互按钮
*/
//角色交互按钮需要传递参数所以重写
class Rindro_FiendwarInteractive_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(Rindro_FiendwarPlayerInteractiveC, "超时空玩家交互", 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 Rindro_FiendwarPlayerInteractiveC 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 = [
//男鬼剑士
[56, 112, 220, 222],
//女格斗家
[54, 103, 240, 278],
//男神枪手
[55, 130, 236, 246],
//女魔法师
[57, 88, 234, 291],
//男圣职者
[57, 124, 208, 190],
//女神枪手
[56, 119, 226, 209],
//暗夜使者
[56, 117, 225, 212],
//男格斗家
[56, 118, 233, 212],
//男魔法师
[54, 103, 236, 276],
//黑暗武士
[56, 112, 220, 222],
//缔造者
[57, 88, 234, 291],
]
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 (RinDro_Fiendwar_Obj.IsCaptain && !("IsMyself" in InfoObj) && RinDro_Fiendwar_Obj.MyRaidTeamId == InfoObj.PartyId) {
//委任团长按钮
local GiveMasterButton = Rindro_FiendwarInteractive_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 = Rindro_FiendwarInteractive_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 = Rindro_FiendwarInteractive_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 (RinDro_Fiendwar_Obj.IsCaptain && RinDro_Fiendwar_Obj.MyRaidTeamId == InfoObj.PartyId) {
//攻坚队员强退按钮
local KickMemberButton = Rindro_FiendwarInteractive_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
}
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.F[0][2] + X + OffsetArr[InfoObj.Job][0] - 40;
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); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
LenheartNewUI_Windows.Show(obj);
}
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
}

View File

@ -4,9 +4,9 @@
创建日期:2024-09-25 20:30
文件用途:骑士马战
*/
dofile("sqr/Project/HorseGuessing/HorseGuessing_Guide.nut"); //骑士马战指引
dofile("sqr/Project/HorseGuessing/HorseGuessing_KnightInfo.nut"); //骑士马战资料
dofile("sqr/Project/HorseGuessing/HorseGuessing_PastRecord.nut"); //骑士马战过往战绩
// dofile("sqr/Project/HorseGuessing/HorseGuessing_Guide.nut"); //骑士马战指引
// dofile("sqr/Project/HorseGuessing/HorseGuessing_KnightInfo.nut"); //骑士马战资料
// dofile("sqr/Project/HorseGuessing/HorseGuessing_PastRecord.nut"); //骑士马战过往战绩
class HorseGuessingBaseButton extends LenheartNewUI_BaseButton {
//是否翻转

Binary file not shown.

After

Width:  |  Height:  |  Size: 626 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

View File

@ -75,7 +75,7 @@ class HudUiC extends LenheartNewUI_Windows {
}
//技能栏
for (local i = 0; i< 6; i++) {
for (local i = 0; i< 7; i++) {
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x14, 433 + (i * 31));
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x18, 565);
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x14, 433 + (i * 31));
@ -568,6 +568,7 @@ class HudUiC extends LenheartNewUI_Windows {
//绘制主界面
function DrawMain(obj) {
//绘制背景
L_sq_DrawImg("interface2/hud/lenheartaddhud.img", 0, 347, 526);
@ -658,4 +659,5 @@ getroottable()["LenheartFuncTab"].rawset("HudUiFuncN", Lenheart_HudUi_Fun);
// L_sq_Test(L_sq_RA(0x01AB7CDC), 0x3DB61400);
// local Ret = L_sq_Test(L_sq_RA(0x01AB7CDC), 10);
// local Ret = L_sq_Test(L_sq_RA(0x01A5FA88), 101020037);
// print(format("%02x", Ret));
// print(format("%02x", Ret));

View File

@ -98,7 +98,7 @@ class RinDro_Luke extends Rindro_BaseToolClass {
} else {
//在卢克区域的 要转移回普通城镇
if (L_sq_GetTownIndex() == BaseConfig.town_index) {
L_sq_MoveTown(1, 1, 474, 249);
L_sq_MoveTown(getroottable().rawin("RindroRaidNormalTown") ? getroottable().RindroRaidNormalTown : 2, getroottable().rawin("RindroRaidNormalArea") ? getroottable().RindroRaidNormalArea : 1, 474, 249);
}
}
}
@ -160,11 +160,12 @@ class RinDro_Luke extends Rindro_BaseToolClass {
}
//构造CID对应的装备数组方便绘制
Portrait.rawset(MemberObj.CID, {
EquVos = clone(MemberObj.equVos),
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null),
Job = MemberObj.PlayerJob,
TeamId = MemberObj.characNum,
Name = MemberObj.PlayerName,
});
local T = {
PartyId = Jso.team.TeamId, //攻坚队ID
TeamId = MemberObj.characNum, //小队编号
@ -173,7 +174,7 @@ class RinDro_Luke extends Rindro_BaseToolClass {
JobName = MemberObj.PlayerGrowTypeJob, //职业名
Job = MemberObj.PlayerJob, //职业编号
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
EquVos = MemberObj.equVos, //装备List 用于显示头像
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null), //装备List 用于显示头像
Captain = MemberObj.CaptainBool, //是否为攻坚队队长
Cid = MemberObj.CID, //Cid
OnlineState = MemberObj.onLineStart, //在线状态
@ -335,7 +336,7 @@ class RinDro_Luke extends Rindro_BaseToolClass {
PartyHallWindow_Object = LenheartNewUI_CreateWindow(Rindro_Luke_PartyHallC, "新卢克攻坚大厅窗口", ((getroottable().Rindro_Scr_Width - 478)).tointeger(), 40, 478, 434, 18);
PartyFormationWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukePartyFormation, "卢克我的队伍编队窗口", 375, 190, 294, 192, 18);
FightSituationWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukeFightSituationC, "卢克攻坚战况表", ((getroottable().Rindro_Scr_Width - 800) / 2).tointeger(), 8, 800, 600, 0);
PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukePartyInfoC, "卢克我的队伍窗口", 6, 15, 354, 566, 18);
PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukePartyInfoC, "卢克我的队伍窗口", 6, 15, 354, 566 - 255, 18);
RewardWindow_Object = LenheartNewUI_CreateWindow(Rindro_Luke_RewardC, "卢克翻牌奖励窗口", 0, 0, 0, 0, 0);
LenheartNewUI_CreateWindow(Rindro_Luke_NotiC, "卢克攻坚队伍消息分发", 0, 0, 0, 0, 0);

View File

@ -56,7 +56,7 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
Visible = false;
//调试模式
DeBugMode = true;
// DeBugMode = true;
//透明度
AlphaValue = 1.0;
@ -133,6 +133,7 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
obj = sq_ObjectToSQRCharacter(obj);
local mob = LukeRaid_getMonsterObject(obj, 664670);
if (mob) {
mob = sq_GetCNRDObjectToActiveObject(mob);
local mobMaxhp = mob.getHpMax();
local mobhp = mob.getHp();
local newhp = mobhp - (mobMaxhp.tofloat() * (Jso.ReduceHp.tofloat() / 100.0)).tointeger();
@ -143,7 +144,7 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
Pack_Control.rawset(20084402, setLukeRaidBoss_DamageHp.bindenv(this));
Pack_Control.rawset(20084042, setLukeRaidBoss_DamageHp.bindenv(this));
//初始化判断孵化进入操作表
MapIndexTable = {};
MapIndexTable.rawset(33100, 7);
@ -409,13 +410,9 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
local YOffset = 9 + (index * 22);
//绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[PartyMasterIcon.InfoObj.Job][0] - 17 + ((PosI % 10) * 24);
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 512 + ((PosI / 10) * 20);
setClip(AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
local AXpos = X + 26 + ((PosI % 10) * 24);
local AYpos = Y + 513 + ((PosI / 10) * 20);
PartyMasterIcon.InfoObj.EquVos.DrawFace(AXpos, AYpos);
PosI++;
}
}
@ -524,13 +521,9 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
local YOffset = 9;
//绘制队长头像
foreach(AvatarObj in CharacV.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[CharacV.Job][0] + DgnObj.X + ImgInfo[3] - 28;
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[CharacV.Job][1] + DgnObj.Y + ImgInfo[4] + 2;
setClip(AXpos + OffsetArr[CharacV.Job][2], AYpos + OffsetArr[CharacV.Job][3], AXpos + OffsetArr[CharacV.Job][2] + 22, AYpos + OffsetArr[CharacV.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
local AXpos = X + DgnObj.X + ImgInfo[3] + 16;
local AYpos = Y + DgnObj.Y + ImgInfo[4] + 2;
CharacV.EquVos.DrawFace(AXpos, AYpos);
//绘制队伍人数
for (local z = 0; z< count; z++) {
@ -740,29 +733,7 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
}
//判断自身地图相关事件
function MapEventTest(obj) {
if (sq_GetCurrentModuleType() != 3) return;
local stage = sq_GetGlobaludpModuleStage();
local MapIndex = sq_GetMapIndex(stage);
if (MapIndexTable.rawin(MapIndex)) {
local X = obj.getXPos();
local Y = obj.getYPos();
local Mark = false;
if (MapIndex == 33103 && PosEvent(X, 737) && PosEvent(Y, 354)) Mark = true;
if (MapIndex == 33100 && PosEvent(X, 369) && PosEvent(Y, 387)) Mark = true;
if (MapIndex == 33116 && PosEvent(X, 365) && PosEvent(Y, 374)) Mark = true;
if (MapIndex == 33119 && PosEvent(X, 838) && PosEvent(Y, 424)) Mark = true;
if (Mark == true && MapMoveMark == false) {
local T = {
op = 20084303,
DunId = MapIndexTable[MapIndex]
}
SendPackEx(T);
MapMoveMark = true;
} else if (Mark == false) MapMoveMark = false;
} else {
MapMoveMark = false;
}
}

View File

@ -87,18 +87,16 @@ class Rindro_Luke_NotiC extends LenheartNewUI_Windows {
if (Ct >= 200) {
//绘制队长头像
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[PartyMasterIcon.InfoObj.Job][0] - 9 + 150;
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 184;
setClip(AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
local AXpos = X - 9 + 150 + 44;
local AYpos = Y + 184 + 2;
PartyMasterIcon.InfoObj.EquVos.DrawFace(AXpos, AYpos);
}
}
//绘制消息
if (Ct >= 200) L_sq_DrawCode(Msg, X + 270 + LenheartTextClass.GetStringLength(Name), Y + 190, sq_RGBA(230, 200, 155, 255), 0, 1);
if (Ct >= 2000) Msg = null;
}
function Show(obj) {

View File

@ -205,13 +205,10 @@ class Rindro_LukeApplyJoinC extends LenheartNewUI_Windows {
L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40);
//绘制角色头像
if (AvatarArr) {
foreach(AvatarObj in AvatarArr) {
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[Job][0] - 8;
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); //开始裁切
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
releaseClip(); //裁切结束
}
//绘制队长头像
local AXpos = X + 42 - 8;
local AYpos = Y + 1 + 40;
AvatarArr.DrawFace(AXpos, AYpos);
}
//绘制角色等级
L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);

Some files were not shown because too many files have changed in this diff Show More