diff --git a/.stfolder/syncthing-folder-62ba07.txt b/.stfolder/syncthing-folder-62ba07.txt new file mode 100644 index 0000000..9ed1db4 --- /dev/null +++ b/.stfolder/syncthing-folder-62ba07.txt @@ -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 diff --git a/Base/CallBack/DrawHudMain.nut b/Base/CallBack/DrawHudMain.nut index d7c9130..96437c1 100644 --- a/Base/CallBack/DrawHudMain.nut +++ b/Base/CallBack/DrawHudMain.nut @@ -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()); -} \ No newline at end of file +} + diff --git a/Base/CallBack/DrawMain.nut b/Base/CallBack/DrawMain.nut index 59001be..432aea7 100644 --- a/Base/CallBack/DrawMain.nut +++ b/Base/CallBack/DrawMain.nut @@ -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); \ No newline at end of file +// 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); +// } \ No newline at end of file diff --git a/Base/CallBack/GetDamageRate.nut b/Base/CallBack/GetDamageRate.nut index 4956b8b..8f6bcce 100644 --- a/Base/CallBack/GetDamageRate.nut +++ b/Base/CallBack/GetDamageRate.nut @@ -35,4 +35,50 @@ function SetDamageRateCallBack(Chunk) { } Pack_Control.rawset(2024110902, SetDamageRateCallBack); -getroottable()["LenheartFuncTab"].rawset("GetDamageRateFuncN", Lenheart_GetDamageRate_Fun); \ No newline at end of file +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; +// } \ No newline at end of file diff --git a/Base/CallBack/PackControl.nut b/Base/CallBack/PackControl.nut new file mode 100644 index 0000000..a1ad7fd --- /dev/null +++ b/Base/CallBack/PackControl.nut @@ -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); diff --git a/Base/CallBack/Window_Get.nut b/Base/CallBack/Window_Get.nut deleted file mode 100644 index 90bb390..0000000 --- a/Base/CallBack/Window_Get.nut +++ /dev/null @@ -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)); - // } -} \ No newline at end of file diff --git a/Base/Interface.nut b/Base/Interface.nut new file mode 100644 index 0000000..d752a7b --- /dev/null +++ b/Base/Interface.nut @@ -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"); diff --git a/Base/PackControl/PackControl.nut b/Base/PackControl/PackControl.nut deleted file mode 100644 index 2370ece..0000000 --- a/Base/PackControl/PackControl.nut +++ /dev/null @@ -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); \ No newline at end of file diff --git a/Base/UI/Lenheart_Character_Info_Class.nut b/Base/UI/Lenheart_Character_Info_Class.nut index 926e8d0..018e9f7 100644 --- a/Base/UI/Lenheart_Character_Info_Class.nut +++ b/Base/UI/Lenheart_Character_Info_Class.nut @@ -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")) { diff --git a/Base/UI/Lenheart_Cursor_Class.nut b/Base/UI/Lenheart_Cursor_Class.nut index 228c5ae..7f2fdad 100644 --- a/Base/UI/Lenheart_Cursor_Class.nut +++ b/Base/UI/Lenheart_Cursor_Class.nut @@ -6,6 +6,11 @@ */ class Rindro_Cursor { + //强制锁 + ForceLockState = false; + + + //是否启用 UseState = 0; TypeState = 0; diff --git a/Base/UI/Lenheart_Each_Class.nut b/Base/UI/Lenheart_Each_Class.nut index fc88423..7a48928 100644 --- a/Base/UI/Lenheart_Each_Class.nut +++ b/Base/UI/Lenheart_Each_Class.nut @@ -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; -// }); \ No newline at end of file + + + +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); \ No newline at end of file diff --git a/Base/UI/Lenheart_Event_Class.nut b/Base/UI/Lenheart_Event_Class.nut index 2377e1c..c9fb29a 100644 --- a/Base/UI/Lenheart_Event_Class.nut +++ b/Base/UI/Lenheart_Event_Class.nut @@ -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; } //检测是否悬停活动图标 diff --git a/Base/UI/Lenheart_UI_Class.nut b/Base/UI/Lenheart_UI_Class.nut index bee89fb..19af3b7 100644 --- a/Base/UI/Lenheart_UI_Class.nut +++ b/Base/UI/Lenheart_UI_Class.nut @@ -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; diff --git a/Base/_ENUM/_ENUM_KEY.nut b/Base/_ENUM/_ENUM_.nut similarity index 68% rename from Base/_ENUM/_ENUM_KEY.nut rename to Base/_ENUM/_ENUM_.nut index 0e3f235..6a83b61 100644 --- a/Base/_ENUM/_ENUM_KEY.nut +++ b/Base/_ENUM/_ENUM_.nut @@ -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; -} \ No newline at end of file +} + +//本地模式 +if(!getroottable().rawin("RINDROLOCAL"))RINDROLOCAL <- false; diff --git a/Base/_Tool/Animation_Class.nut b/Base/_Tool/Animation_Class.nut index 010cfc9..29b4bd2 100644 --- a/Base/_Tool/Animation_Class.nut +++ b/Base/_Tool/Animation_Class.nut @@ -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 <- {}; diff --git a/Base/_Tool/BaseTool_Class.nut b/Base/_Tool/BaseTool_Class.nut index 1c122cb..4dd029c 100644 --- a/Base/_Tool/BaseTool_Class.nut +++ b/Base/_Tool/BaseTool_Class.nut @@ -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; + } + } \ No newline at end of file diff --git a/Base/_Tool/Hacker_Class.nut b/Base/_Tool/Hacker_Class.nut index 8143383..672c352 100644 --- a/Base/_Tool/Hacker_Class.nut +++ b/Base/_Tool/Hacker_Class.nut @@ -42,4 +42,19 @@ Rindro_Haker.LoadHook(0x674350, ["pointer", "int"], function(args) { return null; - }); \ No newline at end of file + }); + +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); + } + } +}; \ No newline at end of file diff --git a/Base/_Tool/Hacker_RegApi.nut b/Base/_Tool/Hacker_RegApi.nut index 62d2ab2..2b861f5 100644 --- a/Base/_Tool/Hacker_RegApi.nut +++ b/Base/_Tool/Hacker_RegApi.nut @@ -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); \ No newline at end of file +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; +// }); \ No newline at end of file diff --git a/Base/_Tool/Image_Class.nut b/Base/_Tool/Image_Class.nut index 3d2a81c..11e4f2e 100644 --- a/Base/_Tool/Image_Class.nut +++ b/Base/_Tool/Image_Class.nut @@ -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); } } diff --git a/Base/_Tool/Json_Class.nut b/Base/_Tool/Json_Class.nut index e51d7ef..681c086 100644 --- a/Base/_Tool/Json_Class.nut +++ b/Base/_Tool/Json_Class.nut @@ -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); diff --git a/Base/_Tool/Script_Class.nut b/Base/_Tool/Script_Class.nut index 3cb96b5..3c38732 100644 --- a/Base/_Tool/Script_Class.nut +++ b/Base/_Tool/Script_Class.nut @@ -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(); \ No newline at end of file diff --git a/Base/_Z_Data/CharacterInfoData.nut b/Base/_Z_Data/CharacterInfoData.nut index e497694..8571a01 100644 --- a/Base/_Z_Data/CharacterInfoData.nut +++ b/Base/_Z_Data/CharacterInfoData.nut @@ -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); \ No newline at end of file +// 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); \ No newline at end of file diff --git a/Base/_Z_Data/ItemData.nut b/Base/_Z_Data/ItemData.nut deleted file mode 100644 index 97b280a..0000000 --- a/Base/_Z_Data/ItemData.nut +++ /dev/null @@ -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"); - // } -} \ No newline at end of file diff --git a/DofileList.nut b/DofileList.nut deleted file mode 100644 index 263809b..0000000 --- a/DofileList.nut +++ /dev/null @@ -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"); //结婚系统 \ No newline at end of file diff --git a/FileConfig.json b/FileConfig.json new file mode 100644 index 0000000..d95530a --- /dev/null +++ b/FileConfig.json @@ -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" + } + } +} \ No newline at end of file diff --git a/Project/Achievement/Achievement.nut b/Project/Achievement/Achievement.nut new file mode 100644 index 0000000..923cb57 --- /dev/null +++ b/Project/Achievement/Achievement.nut @@ -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); \ No newline at end of file diff --git a/Project/Anton/Rindro_Anton.nut b/Project/Anton/Rindro_Anton.nut index a11015f..5336ab0 100644 --- a/Project/Anton/Rindro_Anton.nut +++ b/Project/Anton/Rindro_Anton.nut @@ -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, //在线状态 diff --git a/Project/Anton/Rindro_Anton_FightSituation.nut b/Project/Anton/Rindro_Anton_FightSituation.nut index 83f4e9c..0896d46 100644 --- a/Project/Anton/Rindro_Anton_FightSituation.nut +++ b/Project/Anton/Rindro_Anton_FightSituation.nut @@ -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++) { diff --git a/Project/Anton/Rindro_Anton_Noti.nut b/Project/Anton/Rindro_Anton_Noti.nut index dc4ee7a..cc5e8eb 100644 --- a/Project/Anton/Rindro_Anton_Noti.nut +++ b/Project/Anton/Rindro_Anton_Noti.nut @@ -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) { diff --git a/Project/Anton/Rindro_Anton_Party.nut b/Project/Anton/Rindro_Anton_Party.nut index efe4f3e..68ff392 100644 --- a/Project/Anton/Rindro_Anton_Party.nut +++ b/Project/Anton/Rindro_Anton_Party.nut @@ -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; diff --git a/Project/Anton/Rindro_Anton_PartyApplyJoin.nut b/Project/Anton/Rindro_Anton_PartyApplyJoin.nut index a67bb52..8e911c9 100644 --- a/Project/Anton/Rindro_Anton_PartyApplyJoin.nut +++ b/Project/Anton/Rindro_Anton_PartyApplyJoin.nut @@ -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); diff --git a/Project/Anton/Rindro_Anton_PartyHall.nut b/Project/Anton/Rindro_Anton_PartyHall.nut index 20fffa2..fd438ad 100644 --- a/Project/Anton/Rindro_Anton_PartyHall.nut +++ b/Project/Anton/Rindro_Anton_PartyHall.nut @@ -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); } //重置所有选中 diff --git a/Project/Anton/Rindro_Anton_PartyInfo.nut b/Project/Anton/Rindro_Anton_PartyInfo.nut index 1a5f14b..7c81b8e 100644 --- a/Project/Anton/Rindro_Anton_PartyInfo.nut +++ b/Project/Anton/Rindro_Anton_PartyInfo.nut @@ -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); diff --git a/Project/Anton/Rindro_Anton_PartyMemberInfo.nut b/Project/Anton/Rindro_Anton_PartyMemberInfo.nut index c9549f9..d38a9c8 100644 --- a/Project/Anton/Rindro_Anton_PartyMemberInfo.nut +++ b/Project/Anton/Rindro_Anton_PartyMemberInfo.nut @@ -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); diff --git a/Project/Anton/Rindro_Anton_Reward.nut b/Project/Anton/Rindro_Anton_Reward.nut index 3210456..400bf02 100644 --- a/Project/Anton/Rindro_Anton_Reward.nut +++ b/Project/Anton/Rindro_Anton_Reward.nut @@ -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 { diff --git a/Project/Anton/img/0.png b/Project/Anton/img/0.png new file mode 100644 index 0000000..c9c7aa6 Binary files /dev/null and b/Project/Anton/img/0.png differ diff --git a/Project/Anton/img/1.png b/Project/Anton/img/1.png new file mode 100644 index 0000000..47e66a1 Binary files /dev/null and b/Project/Anton/img/1.png differ diff --git a/Project/Anton/img/10.png b/Project/Anton/img/10.png new file mode 100644 index 0000000..68358e4 Binary files /dev/null and b/Project/Anton/img/10.png differ diff --git a/Project/Anton/img/11.png b/Project/Anton/img/11.png new file mode 100644 index 0000000..2d81af4 Binary files /dev/null and b/Project/Anton/img/11.png differ diff --git a/Project/Anton/img/12.png b/Project/Anton/img/12.png new file mode 100644 index 0000000..5be1570 Binary files /dev/null and b/Project/Anton/img/12.png differ diff --git a/Project/Anton/img/13.png b/Project/Anton/img/13.png new file mode 100644 index 0000000..244e293 Binary files /dev/null and b/Project/Anton/img/13.png differ diff --git a/Project/Anton/img/2.png b/Project/Anton/img/2.png new file mode 100644 index 0000000..786f4ef Binary files /dev/null and b/Project/Anton/img/2.png differ diff --git a/Project/Anton/img/3.png b/Project/Anton/img/3.png new file mode 100644 index 0000000..1e1472e Binary files /dev/null and b/Project/Anton/img/3.png differ diff --git a/Project/Anton/img/4.png b/Project/Anton/img/4.png new file mode 100644 index 0000000..87f668f Binary files /dev/null and b/Project/Anton/img/4.png differ diff --git a/Project/Anton/img/5.png b/Project/Anton/img/5.png new file mode 100644 index 0000000..957fa18 Binary files /dev/null and b/Project/Anton/img/5.png differ diff --git a/Project/Anton/img/6.png b/Project/Anton/img/6.png new file mode 100644 index 0000000..ea75805 Binary files /dev/null and b/Project/Anton/img/6.png differ diff --git a/Project/Anton/img/7.png b/Project/Anton/img/7.png new file mode 100644 index 0000000..9097d71 Binary files /dev/null and b/Project/Anton/img/7.png differ diff --git a/Project/Anton/img/8.png b/Project/Anton/img/8.png new file mode 100644 index 0000000..571dfa3 Binary files /dev/null and b/Project/Anton/img/8.png differ diff --git a/Project/Anton/img/9.png b/Project/Anton/img/9.png new file mode 100644 index 0000000..1314708 Binary files /dev/null and b/Project/Anton/img/9.png differ diff --git a/Project/AradPass/AradPass_Quest.nut b/Project/AradPass/AradPass_Quest.nut index c9870b9..034c724 100644 --- a/Project/AradPass/AradPass_Quest.nut +++ b/Project/AradPass/AradPass_Quest.nut @@ -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; } } diff --git a/Project/AradPass/img/0.png b/Project/AradPass/img/0.png new file mode 100644 index 0000000..c7422af Binary files /dev/null and b/Project/AradPass/img/0.png differ diff --git a/Project/AradPass/img/1.png b/Project/AradPass/img/1.png new file mode 100644 index 0000000..c7422af Binary files /dev/null and b/Project/AradPass/img/1.png differ diff --git a/Project/AradPass/img/2.png b/Project/AradPass/img/2.png new file mode 100644 index 0000000..22ee275 Binary files /dev/null and b/Project/AradPass/img/2.png differ diff --git a/Project/AradPass/img/3.png b/Project/AradPass/img/3.png new file mode 100644 index 0000000..af4d162 Binary files /dev/null and b/Project/AradPass/img/3.png differ diff --git a/Project/AradPass/vid/0.mp4 b/Project/AradPass/vid/0.mp4 new file mode 100644 index 0000000..c962013 Binary files /dev/null and b/Project/AradPass/vid/0.mp4 differ diff --git a/Project/AradPass/vid/2.mp4 b/Project/AradPass/vid/2.mp4 new file mode 100644 index 0000000..3fd533f Binary files /dev/null and b/Project/AradPass/vid/2.mp4 differ diff --git a/Project/CollectionBox/img/0.png b/Project/CollectionBox/img/0.png new file mode 100644 index 0000000..03463b5 Binary files /dev/null and b/Project/CollectionBox/img/0.png differ diff --git a/Project/CombatRank/CombatRank.nut b/Project/CombatRank/CombatRank.nut index 7b53f9f..6f2ead8 100644 --- a/Project/CombatRank/CombatRank.nut +++ b/Project/CombatRank/CombatRank.nut @@ -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) { + } } } diff --git a/Project/CombatRank/img/0.png b/Project/CombatRank/img/0.png new file mode 100644 index 0000000..6e133db Binary files /dev/null and b/Project/CombatRank/img/0.png differ diff --git a/Project/CombatRank/img/1.png b/Project/CombatRank/img/1.png new file mode 100644 index 0000000..af4411a Binary files /dev/null and b/Project/CombatRank/img/1.png differ diff --git a/Project/DamagePerSecond/DamagePerSecond.nut b/Project/DamagePerSecond/DamagePerSecond.nut index d5555b6..901ace8 100644 --- a/Project/DamagePerSecond/DamagePerSecond.nut +++ b/Project/DamagePerSecond/DamagePerSecond.nut @@ -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(); diff --git a/Project/DamagePerSecond/img/0.png b/Project/DamagePerSecond/img/0.png new file mode 100644 index 0000000..bc475e0 Binary files /dev/null and b/Project/DamagePerSecond/img/0.png differ diff --git a/Project/DamagePerSecond/img/1.png b/Project/DamagePerSecond/img/1.png new file mode 100644 index 0000000..431356b Binary files /dev/null and b/Project/DamagePerSecond/img/1.png differ diff --git a/Project/EventShop/EventShop.nut b/Project/EventShop/EventShop.nut new file mode 100644 index 0000000..5578afc --- /dev/null +++ b/Project/EventShop/EventShop.nut @@ -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); \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendFightLogic.nut b/Project/Fiendwar copy/FiendFightLogic.nut new file mode 100644 index 0000000..784d38f --- /dev/null +++ b/Project/Fiendwar copy/FiendFightLogic.nut @@ -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); + } + } +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendReward.nut b/Project/Fiendwar copy/FiendReward.nut new file mode 100644 index 0000000..8f7e8a3 --- /dev/null +++ b/Project/Fiendwar copy/FiendReward.nut @@ -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); + } + +} \ No newline at end of file diff --git a/Project/Fiendwar copy/Fiendwar.nut b/Project/Fiendwar copy/Fiendwar.nut new file mode 100644 index 0000000..f5cbf3e --- /dev/null +++ b/Project/Fiendwar copy/Fiendwar.nut @@ -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); +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarFightSituation.nut b/Project/Fiendwar copy/FiendwarFightSituation.nut new file mode 100644 index 0000000..dd80d94 --- /dev/null +++ b/Project/Fiendwar copy/FiendwarFightSituation.nut @@ -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); \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarHall.nut b/Project/Fiendwar copy/FiendwarHall.nut new file mode 100644 index 0000000..db58fc4 --- /dev/null +++ b/Project/Fiendwar copy/FiendwarHall.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarHallApplyJoin.nut b/Project/Fiendwar copy/FiendwarHallApplyJoin.nut new file mode 100644 index 0000000..7a6fb9e --- /dev/null +++ b/Project/Fiendwar copy/FiendwarHallApplyJoin.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarHallCreateParty.nut b/Project/Fiendwar copy/FiendwarHallCreateParty.nut new file mode 100644 index 0000000..5099790 --- /dev/null +++ b/Project/Fiendwar copy/FiendwarHallCreateParty.nut @@ -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); + } + +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarHallGoBossDgn.nut b/Project/Fiendwar copy/FiendwarHallGoBossDgn.nut new file mode 100644 index 0000000..84fdc9d --- /dev/null +++ b/Project/Fiendwar copy/FiendwarHallGoBossDgn.nut @@ -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); + } + +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarHallParty.nut b/Project/Fiendwar copy/FiendwarHallParty.nut new file mode 100644 index 0000000..85a1903 --- /dev/null +++ b/Project/Fiendwar copy/FiendwarHallParty.nut @@ -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); + } + } + +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarNoti.nut b/Project/Fiendwar copy/FiendwarNoti.nut new file mode 100644 index 0000000..ef41953 --- /dev/null +++ b/Project/Fiendwar copy/FiendwarNoti.nut @@ -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; + } + } + } + +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarPartyFormation.nut b/Project/Fiendwar copy/FiendwarPartyFormation.nut new file mode 100644 index 0000000..537ddfd --- /dev/null +++ b/Project/Fiendwar copy/FiendwarPartyFormation.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarPartyInfo.nut b/Project/Fiendwar copy/FiendwarPartyInfo.nut new file mode 100644 index 0000000..e385f5c --- /dev/null +++ b/Project/Fiendwar copy/FiendwarPartyInfo.nut @@ -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; + } + + } +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarPartyMemberInfo.nut b/Project/Fiendwar copy/FiendwarPartyMemberInfo.nut new file mode 100644 index 0000000..f243174 --- /dev/null +++ b/Project/Fiendwar copy/FiendwarPartyMemberInfo.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/Fiendwar copy/FiendwarPlayerInteractive.nut b/Project/Fiendwar copy/FiendwarPlayerInteractive.nut new file mode 100644 index 0000000..4a6dfa1 --- /dev/null +++ b/Project/Fiendwar copy/FiendwarPlayerInteractive.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/Fiendwar/FiendFightLogic.nut b/Project/Fiendwar/FiendFightLogic.nut new file mode 100644 index 0000000..784d38f --- /dev/null +++ b/Project/Fiendwar/FiendFightLogic.nut @@ -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); + } + } +} \ No newline at end of file diff --git a/Project/Fiendwar/FiendReward.nut b/Project/Fiendwar/FiendReward.nut new file mode 100644 index 0000000..e4cff50 --- /dev/null +++ b/Project/Fiendwar/FiendReward.nut @@ -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); + } + +} \ No newline at end of file diff --git a/Project/Fiendwar/FiendwarFightSituation.nut b/Project/Fiendwar/FiendwarFightSituation.nut new file mode 100644 index 0000000..17411aa --- /dev/null +++ b/Project/Fiendwar/FiendwarFightSituation.nut @@ -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; + } + } + +} \ No newline at end of file diff --git a/Project/Fiendwar/FiendwarHallGoBossDgn.nut b/Project/Fiendwar/FiendwarHallGoBossDgn.nut new file mode 100644 index 0000000..1e88b0e --- /dev/null +++ b/Project/Fiendwar/FiendwarHallGoBossDgn.nut @@ -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); + } + +} \ No newline at end of file diff --git a/Project/Fiendwar/FiendwarNoti.nut b/Project/Fiendwar/FiendwarNoti.nut new file mode 100644 index 0000000..ba9c468 --- /dev/null +++ b/Project/Fiendwar/FiendwarNoti.nut @@ -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; + } + } + } + +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar.nut b/Project/Fiendwar/Rindro_Fiendwar.nut new file mode 100644 index 0000000..30e72f5 --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar.nut @@ -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); +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar_CreateParty.nut b/Project/Fiendwar/Rindro_Fiendwar_CreateParty.nut new file mode 100644 index 0000000..c86b4cb --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar_CreateParty.nut @@ -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); + } + +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar_Party.nut b/Project/Fiendwar/Rindro_Fiendwar_Party.nut new file mode 100644 index 0000000..b981c92 --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar_Party.nut @@ -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); + } + } + +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut b/Project/Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut new file mode 100644 index 0000000..8fb56b5 --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar_PartyFormation.nut b/Project/Fiendwar/Rindro_Fiendwar_PartyFormation.nut new file mode 100644 index 0000000..beae918 --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar_PartyFormation.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar_PartyHall.nut b/Project/Fiendwar/Rindro_Fiendwar_PartyHall.nut new file mode 100644 index 0000000..7f61d8f --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar_PartyHall.nut @@ -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); + } + +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar_PartyInfo.nut b/Project/Fiendwar/Rindro_Fiendwar_PartyInfo.nut new file mode 100644 index 0000000..5a7b46a --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar_PartyInfo.nut @@ -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; + } + + } +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut b/Project/Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut new file mode 100644 index 0000000..72b43d5 --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut b/Project/Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut new file mode 100644 index 0000000..aa61f00 --- /dev/null +++ b/Project/Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut @@ -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); + } +} \ No newline at end of file diff --git a/Project/HorseGuessing/HorseGuessing.nut b/Project/HorseGuessing/HorseGuessing.nut index de49d66..30367b2 100644 --- a/Project/HorseGuessing/HorseGuessing.nut +++ b/Project/HorseGuessing/HorseGuessing.nut @@ -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 { //是否翻转 diff --git a/Project/HorseGuessing/img/0.png b/Project/HorseGuessing/img/0.png new file mode 100644 index 0000000..de29ef6 Binary files /dev/null and b/Project/HorseGuessing/img/0.png differ diff --git a/Project/HorseGuessing/img/1.png b/Project/HorseGuessing/img/1.png new file mode 100644 index 0000000..6a0c1fd Binary files /dev/null and b/Project/HorseGuessing/img/1.png differ diff --git a/Project/HudUi/HudUi.nut b/Project/HudUi/HudUi.nut index 1ea690d..87052ad 100644 --- a/Project/HudUi/HudUi.nut +++ b/Project/HudUi/HudUi.nut @@ -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)); \ No newline at end of file +// print(format("%02x", Ret)); + diff --git a/Project/Luke/Rindro_Luke.nut b/Project/Luke/Rindro_Luke.nut index 41e10a8..a78b739 100644 --- a/Project/Luke/Rindro_Luke.nut +++ b/Project/Luke/Rindro_Luke.nut @@ -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); diff --git a/Project/Luke/Rindro_Luke_FightSituation.nut b/Project/Luke/Rindro_Luke_FightSituation.nut index 5e93c62..b4ed3ed 100644 --- a/Project/Luke/Rindro_Luke_FightSituation.nut +++ b/Project/Luke/Rindro_Luke_FightSituation.nut @@ -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; - } } diff --git a/Project/Luke/Rindro_Luke_Noti.nut b/Project/Luke/Rindro_Luke_Noti.nut index 7f9b56d..285979b 100644 --- a/Project/Luke/Rindro_Luke_Noti.nut +++ b/Project/Luke/Rindro_Luke_Noti.nut @@ -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) { diff --git a/Project/Luke/Rindro_Luke_PartyApplyJoin.nut b/Project/Luke/Rindro_Luke_PartyApplyJoin.nut index aab78b6..cd63f03 100644 --- a/Project/Luke/Rindro_Luke_PartyApplyJoin.nut +++ b/Project/Luke/Rindro_Luke_PartyApplyJoin.nut @@ -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); diff --git a/Project/Luke/Rindro_Luke_PartyHall.nut b/Project/Luke/Rindro_Luke_PartyHall.nut index 2440bd0..06153bc 100644 --- a/Project/Luke/Rindro_Luke_PartyHall.nut +++ b/Project/Luke/Rindro_Luke_PartyHall.nut @@ -326,7 +326,6 @@ class Rindro_Luke_PartyHallC extends LenheartNewUI_Windows { //逻辑入口 function Proc(obj) { - //界面未打开 if (!this.Visible && L_sq_RA(0x1A5FB4C, "0x14+0x28+")< 2) { //在甲板 diff --git a/Project/Luke/Rindro_Luke_PartyInfo.nut b/Project/Luke/Rindro_Luke_PartyInfo.nut index dad422b..a61a035 100644 --- a/Project/Luke/Rindro_Luke_PartyInfo.nut +++ b/Project/Luke/Rindro_Luke_PartyInfo.nut @@ -45,7 +45,7 @@ class Rindro_LukePartyInfoC 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 } //没人 diff --git a/Project/Luke/Rindro_Luke_PartyMemberInfo.nut b/Project/Luke/Rindro_Luke_PartyMemberInfo.nut index a1d1f5d..8206225 100644 --- a/Project/Luke/Rindro_Luke_PartyMemberInfo.nut +++ b/Project/Luke/Rindro_Luke_PartyMemberInfo.nut @@ -135,13 +135,9 @@ class Rindro_LukePartyInfoMemberC 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); diff --git a/Project/Luke/Rindro_Luke_Reward.nut b/Project/Luke/Rindro_Luke_Reward.nut index 5f008f2..be06167 100644 --- a/Project/Luke/Rindro_Luke_Reward.nut +++ b/Project/Luke/Rindro_Luke_Reward.nut @@ -753,14 +753,11 @@ class Rindro_Luke_RewardC extends LenheartNewUI_Windows { function DrawProfile(Cid, gx, gy, CodeXOffset) { if (RinDro_Luke_Obj.Portrait.rawin(Cid)) { local InfoObj = RinDro_Luke_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 { diff --git a/Project/MarrySystem/MarrySystem.nut b/Project/MarrySystem/MarrySystem.nut index 9722955..c09f63c 100644 --- a/Project/MarrySystem/MarrySystem.nut +++ b/Project/MarrySystem/MarrySystem.nut @@ -138,6 +138,7 @@ class MarrySystemC extends Rindro_BaseToolClass { GetConfig(); CheckMarryState(); + } function RegisterWidget() { @@ -232,23 +233,6 @@ class MarrySystemC extends Rindro_BaseToolClass { ApplyEngagementButton.SetCallBackFunc(function(Button) {}) SThis.AddChild(ApplyEngagementButton); }.bindenv(this)); - EachManager.AddEachForNpc(20014, 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 = 14; - ApplyEngagementButton.Str = "离开礼堂"; - ApplyEngagementButton.OnClick = function(Button) { - Button.Parent.CloseAllEach(); - Button.Parent.CloseWindow(); - local T = { - op = OP + 17 - } - SendPackEx(T); - }.bindenv(this); - ApplyEngagementButton.SetCallBackFunc(function(Button) {}) - SThis.AddChild(ApplyEngagementButton); - }.bindenv(this)); } //无论如何都添加礼堂列表 @@ -269,6 +253,24 @@ class MarrySystemC extends Rindro_BaseToolClass { ApplyEngagementButton.SetCallBackFunc(function(Button) {}) SThis.AddChild(ApplyEngagementButton); }.bindenv(this)); + + EachManager.AddEachForNpc(20014, 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 = 14; + ApplyEngagementButton.Str = "离开礼堂"; + ApplyEngagementButton.OnClick = function(Button) { + Button.Parent.CloseAllEach(); + Button.Parent.CloseWindow(); + local T = { + op = OP + 17 + } + SendPackEx(T); + }.bindenv(this); + ApplyEngagementButton.SetCallBackFunc(function(Button) {}) + SThis.AddChild(ApplyEngagementButton); + }.bindenv(this)); } //重选角色回调 diff --git a/Project/MarrySystem/MarrySystem_OpenAuditoriumList.nut b/Project/MarrySystem/MarrySystem_OpenAuditoriumList.nut index 46b07ca..fb71dcf 100644 --- a/Project/MarrySystem/MarrySystem_OpenAuditoriumList.nut +++ b/Project/MarrySystem/MarrySystem_OpenAuditoriumList.nut @@ -117,7 +117,7 @@ class MarrySystem_OpenAuditoriumListC extends LenheartNewUI_Windows { //绘制举办时间 local Time = Sq_Time(); - local TimeStr = Time2Str(DrawInfo[9] + ((DrawInfo[2] + 1) * 10 * 60) - Time); + local TimeStr = Time2Str(DrawInfo[9] - Time); L_sq_DrawCode(TimeStr, Button.X - 100 - LenheartTextClass.GetStringLength(TimeStr) / 2, Button.Y + 2, sq_RGBA(134, 120, 79, 255), 0, 1); //绘制人数 diff --git a/Project/MonsterEx/MonsterEx.nut b/Project/MonsterEx/MonsterEx.nut new file mode 100644 index 0000000..d231a61 --- /dev/null +++ b/Project/MonsterEx/MonsterEx.nut @@ -0,0 +1,106 @@ +/* +文件名:MonsterEx.nut +路径:Project/MonsterEx/MonsterEx.nut +创建日期:2025-02-07 11:46 +文件用途:怪物扩展 +*/ +Rindro_Monster_Ex_Name_Map <- {}; + +function L_Rindro_MonsterEXControl_Face(ObjectAddress, Xpos, Ypos) { + + if (getroottable().rawin("MonsterFaceImage")) { + local ret = MonsterFaceImage(L_Sq_ObjectAddressToSqrObject(ObjectAddress, "IRDMonster", 0)); + if (ret) { + L_sq_DrawImg(ret.img, ret.index, Xpos, Ypos); + return false; + } + } + return true; +} + +function L_Rindro_MonsterEXControl_Race(ObjectAddress, Xpos, Ypos) { + local v4 = L_sq_RA(ObjectAddress + 88); + local Count = (L_sq_RA(ObjectAddress + 92) - v4) >> 2; + local RaceArr = []; + for (local i = 0; i< Count; i++) { + RaceArr.append(L_sq_RA(v4 + 4 * i)); + } + //调用种族拓展 + local Monobj = L_Sq_ObjectAddressToSqrObject(L_sq_RA(ObjectAddress + 0x8), "IRDMonster", 0) + if (getroottable().rawin("MonsterCategory")) { + local Ret = MonsterCategory(Monobj, RaceArr, Xpos, Ypos); + if (Ret) RaceArr = Ret; + } + local XposBuffer = Xpos; + foreach(Pos, Index in RaceArr) { + if (Pos > 0) XposBuffer += 33; + L_sq_DrawImg("common/etc/category.img", Index, XposBuffer, Ypos); + } + + if (!Monobj.isDead() && Rindro_Monster_Ex_Name_Map.rawin(sq_GetObjectId(Monobj))) { + local Color = sq_RGBA(255, 255, 255, 255); + if(sq_GetMonsterRank(Monobj) == 1) Color = sq_RGBA(179, 107, 255, 255); + if(sq_GetMonsterRank(Monobj) == 3 || sq_GetMonsterRank(Monobj) == 5) Color = sq_RGBA(255, 0, 240 255); + L_sq_DrawCode("Lv" + sq_GetMonsterLevel(Monobj) + " " + Rindro_Monster_Ex_Name_Map[sq_GetObjectId(Monobj)], XposBuffer + (RaceArr.len() > 0 ? 33 : 0) + 2, Ypos + 3, Color, 0, 1); + return -5000; + } + return XposBuffer + (RaceArr.len() > 0 ? 33 : 0); +} + + +//获取怪物等级 +function sq_GetMonsterLevel(Object) { + return L_Sq_GetObjectDeInfo(L_Sq_GetObjectAddress(Object), 0x1A4C, true); +} +//设置怪物等级 +function sq_SetMonsterLevel(Object, Level) { + L_Sq_SetObjectDeInfo(L_Sq_GetObjectAddress(Object), 0x1A4C, true, Level); +} +//获取怪物名字 +function sq_GetMonsterName(Object) { + return L_Sq_GetObjectName(Object); +} +//设置怪物名字 +function sq_SetMonsterName(Object, Name) { + L_Sq_DeleteObjectName(Object); + Rindro_Monster_Ex_Name_Map.rawset(sq_GetObjectId(Object), Name); +} +//获取怪物阶级 +function sq_GetMonsterRank(Object) { + if (sq_IsNamed(Object)) return 4; + switch (L_sq_RA(L_Sq_GetObjectAddress(Object) + 0x3658)) { + case 0: + case 4: + case 5: + return 0; + case 1: + case 6: + return 1; + case 2: + case 7: + return 3; + case 3: + case 8: + return 5; + } + return -1; +} +//设置怪物阶级 +function sq_SetMonsterRank(Object, Type) { + L_sq_WA(L_Sq_GetObjectAddress(Object) + 0x3658, Type); +} + + + +//怪物头像回调 返回空 或者不返回则为不修改 返回 {img,index} 则为修改 +function MonsterFaceImage(obj) { + +} + +//怪物种族回调 返回空 或者不返回则为不修改 返回修改后的RaceArr数组 则为修改 +function MonsterCategory(obj, RaceArr, Xpos, Ypos) { + for (local i = 0; i< 14; i++) { + RaceArr.append(i + 1); + } + return RaceArr; +} \ No newline at end of file diff --git a/Project/NewWorldMap/NewWorldMap.nut b/Project/NewWorldMap/NewWorldMap.nut index 5d6c22e..b21c814 100644 --- a/Project/NewWorldMap/NewWorldMap.nut +++ b/Project/NewWorldMap/NewWorldMap.nut @@ -14,17 +14,30 @@ class NewWorldMapC extends LenheartNewUI_Windows { //是否可见 // Visible = false; + //世界 + World = null; //区域 Region = null; + //当前自身所在世界 + SelfMapWorld = 0; + //当前自身所在区域 + SelfMapRegion = 0; + //当前地图浏览区域 + MapRegion = -1; //Img WorldMapImg = null; + StepImg = null; Ani = null; + + Timer = Clock(); + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { Childrens = []; Region = []; + World = []; //注册控件 RegisterWidget(); @@ -34,32 +47,71 @@ class NewWorldMapC extends LenheartNewUI_Windows { // printT(Region); LoadImg(); - } function LoadImg() { WorldMapImg = Rindro_Image("worldmap.img"); + StepImg = {}; } function InitData() { - local RegionLst = R_Utils.GetScriptFileReader("region/region.lst"); - if (RegionLst) { - local IO = Sq_Point2Blob(L_sq_P2I(RegionLst.Buffer.C_Object), RegionLst.Size); - local i = 2; - while (i< RegionLst.Size) { - if ((RegionLst.Size - i) >= 10) { - IO.seek(i + 6); //内容指示位 - local FindKey = IO.readn('i'); - local Key = Rindro_Script.GetBinString(FindKey); - if (Key) { - local StrFilePath = "region/" + Key.tolower(); - InitRegion(StrFilePath); - } - } else break; - i += 10; - } - InitMiniMap(); + //读取世界 + local WorldLst = R_Utils.GetLstArr("region/world.lst", "region/"); + foreach(Path in WorldLst) { + InitWorld(Path); } + + //读取区域 + local RegionLst = R_Utils.GetLstArr("region/region.lst", "region/"); + foreach(Path in RegionLst) { + InitRegion(Path); + } + + //读取小地图 + InitMiniMap(); + } + + function InitWorld(Path) { + local Data = R_Utils.GetFileTableByHandle(Path, function(DataT, IO, i) { + local str = Rindro_Script.UnpackData(IO, i); + i += 5; + //城镇编号 + if (str == "[areas]") { + DataT.Areas <- []; + while (true) { + local Ret = Rindro_Script.UnpackData(IO, i); + i += 5; + if (Ret == "[/areas]") break; + DataT.Areas.append((Ret.tointeger() - 9)); + } + } + //背景 + else if (str == "[background]") { + DataT.Background <- {}; + DataT.Background.path <- Rindro_Script.UnpackData(IO, i); + i += 5; + DataT.Background.frame <- Rindro_Script.UnpackData(IO, i).tointeger() - 9; + i += 5; + } + //坐标 + else if (str == "[pos]") { + local Index = Rindro_Script.UnpackData(IO, i).tointeger() - 9; + i += 5; + local Path = Rindro_Script.UnpackData(IO, i); + i += 5; + DataT["pos_" + Index] <- []; + DataT["pos_" + Index].append(Path); + while (true) { + local Ret = Rindro_Script.UnpackData(IO, i); + i += 5; + if (Ret == "[/pos]") break; + DataT["pos_" + Index].append((Ret.tointeger() - 9)); + } + } + return i; + }.bindenv(this)); + World.append(Data); + printT(Data); } function InitRegion(Path) { @@ -123,6 +175,7 @@ class NewWorldMapC extends LenheartNewUI_Windows { local Ret = Rindro_Script.UnpackData(IO, i); i += 5; if (Ret == "[/image]") break; + Ret = Ret.slice(1, -1); local imgpath = Rindro_Script.UnpackData(IO, i); i += 5; @@ -138,6 +191,7 @@ class NewWorldMapC extends LenheartNewUI_Windows { } else break; } } + Region[Pos].Data <- Data; } } } @@ -152,16 +206,18 @@ class NewWorldMapC extends LenheartNewUI_Windows { } - Timer = Clock(); function GetMoveOffset(L, R) { return (-L) + (L.tofloat() * (R.tofloat() / 100.0)).tointeger() } - //绘制主界面 function DrawMain(obj) { + local Config = Region[SelfMapRegion]; + //绘制背景 WorldMapImg.DrawExPng(0, 0, -83, 0, 0xffffffff, 0.84, 0.84); + //绘制地图背景 + DrawLogic(Config); local UniRate = sq_GetAccel(0, 100, Clock() - Timer, 1000); local AccRate = sq_GetAccel(0, 100, Clock() - Timer, 1000, true); @@ -200,16 +256,128 @@ class NewWorldMapC extends LenheartNewUI_Windows { WorldMapImg.DrawExPng(7, 20, 470, 0, sq_RGBA(255, 255, 255, ((UniRate.tofloat() / 100.0) * 255.0).tointeger()), 0.6, 0.6); WorldMapImg.DrawExPng(6, 39 + newRelX, 489 + newRelY, sq_ToRadian(-angle.tofloat()), 0xffffffff, 0.6, 0.6); + + } function Show(obj) { DrawMain(obj); LenheartNewUI_Windows.Show(obj); + } + function GetImgObject(path) { + if (!(StepImg.rawin(path))) StepImg.rawset(path, Rindro_Image(path)); + return StepImg[path]; + } + + + // 环绕数法判断点是否在多边形内 + function IsPointInPolygonWindingNumber(x, y, polygon) { + local windingNumber = 0; + local n = polygon.len(); + for (local i = 0; i< n; ++i) { + local x1 = polygon[i][0]; + local y1 = polygon[i][1]; + local x2 = polygon[(i + 1) % n][0]; + local y2 = polygon[(i + 1) % n][1]; + if (y1 <= y) { + if (y2 > y && ((x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0)) { + windingNumber++; + } + } else { + if (y2 <= y && ((x2 - x1) * (y - y1) - (x - x1) * (y2 - y1)< 0)) { + windingNumber--; + } + } + } + return windingNumber != 0; + } + + + //绘制世界 + function DrawWorld(Config) { + local MapCurIndex = SelfMapWorld; + local BackgroundData = World[MapCurIndex].Background; + + local UniRate = sq_GetAccel(0, 250, Clock() - Timer, 1500); + + local BackgroundDataImgObj = GetImgObject(BackgroundData.path); + BackgroundDataImgObj.DrawExPng(BackgroundData.frame, 0, -60, 0, sq_RGBA(255, 255, 255, UniRate), 1.32, 1.32); + + foreach(index in World[MapCurIndex].Areas) { + // print(index); + if (!(World[MapCurIndex].rawin("pos_" + index))) continue; + local Config = World[MapCurIndex]["pos_" + index]; + local BackgroundDataImgObj = GetImgObject(Config[0]); + local PointArr = []; + for (local i = 4; i< Config.len(); i += 2) { + local Buf = []; + Buf.append(Config[i]); + Buf.append(Config[i + 1]); + PointArr.append(Buf); + } + if (IsPointInPolygonWindingNumber(IMouse.GetXPos().tofloat(), IMouse.GetYPos().tofloat(), PointArr)) { + BackgroundDataImgObj.DrawExPng(Config[1], Config[2], Config[3] - 60, 0, sq_RGBA(255, 255, 255, UniRate), 1.32, 1.32); + } + foreach(pos in PointArr) { + L_sq_DrawImg("interface/windowcommon.img", 50, pos[0], pos[1]); + } + } + } + + //绘制区域 + function DrawArea(Config) { + + } + + //绘制城镇地图 + function DrawTownMap(Config) { + + // local UniRate = sq_GetAccel(250, 0, Clock() - 3000 - Timer, 1000); + // local BackgroundData = Config.Data.Image.background; + // if (!(StepImg.rawin(BackgroundData.path))) StepImg.rawset(BackgroundData.path, Rindro_Image(BackgroundData.path)); + // StepImg[BackgroundData.path].DrawExPng(BackgroundData.frame, 0, -8, 0, sq_RGBA(255, 255, 255, UniRate), 1.0, 1.055); + } + + + //绘制逻辑 + function DrawLogic(Config) { + //绘制世界 + DrawWorld(Config); + //绘制区域 + DrawArea(Config); + //绘制城镇 + DrawTownMap(Config); + } + + + + //同步自身现在在哪个地图区域 + function SyncSelfMapRegion() { + local Town = L_sq_GetTownIndex(); + foreach(AreaIndex, Areaobj in Region) { + foreach(TownIndex, Townobj in Areaobj.Towns) { + if (TownIndex == Town) { + SelfMapRegion = AreaIndex; + } + } + } + } + //同步自身现在在哪个地图世界 + function SyncSelfMapWorld() { + foreach(WorldIndex, Worldobj in World) { + foreach(AreaIndex, Areaobj in Worldobj.Areas) { + if (AreaIndex == SelfMapRegion) { + SelfMapWorld = WorldIndex; + } + } + } } //逻辑入口 function Proc(obj) { + SyncSelfMapRegion(); + SyncSelfMapWorld(); LenheartNewUI_Windows.SyncPos(X, Y); } diff --git a/Project/OddsPlugins/TransformEqu.nut b/Project/OddsPlugins/TransformEqu.nut new file mode 100644 index 0000000..1f06b91 --- /dev/null +++ b/Project/OddsPlugins/TransformEqu.nut @@ -0,0 +1,132 @@ +/* +文件名:TransformEqu.nut +路径:Project/OddsPlugins/TransformEqu.nut +创建日期:2025-01-17 21:03 +文件用途:变换装备 +*/ +class TransformEquC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + // NoWindow = true; + + //是否可见 + // Visible = false; + + //属性记录表 + Attributes = null; + //播报内容数组 + BroadcastContent = null; + //是否需要绘制 + DrawFlag = false; + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + Attributes = array(7, null); + BroadcastContent = {}; + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + RetrieveAndRecordAttributes(1); + + Pack_Control.rawset(20072602, RetrieveAndRecordAttributes.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 RetrieveAndRecordAttributes(Chunk) { + //记录四维 力量 智力 体力 精神 + local AttributesBuffer = []; + AttributesBuffer.append(L_sq_GetCharacterAttribute(0x2364)); + AttributesBuffer.append(L_sq_GetCharacterAttribute(0x2394)); + AttributesBuffer.append(L_sq_GetCharacterAttribute(0x237c)); + AttributesBuffer.append(L_sq_GetCharacterAttribute(0x23ac)); + + local ObjectAddress = L_sq_RA(0x1AB7CDC); + local Wg = (MemoryTool.DecodeMemoryData(ObjectAddress + 0x1E54) * (AttributesBuffer[0].tofloat() * 0.004 + 1)).tointeger() + MemoryTool.DecodeMemoryData(ObjectAddress + 0x1EB4); + AttributesBuffer.append(Wg); + local Mg = (MemoryTool.DecodeMemoryData(ObjectAddress + 0x1E84) * (AttributesBuffer[1].tofloat() * 0.004 + 1)).tointeger() + MemoryTool.DecodeMemoryData(ObjectAddress + 0x1ED8); + AttributesBuffer.append(Mg); + local Dl = MemoryTool.DecodeMemoryData(ObjectAddress + 0x22C8) + MemoryTool.DecodeMemoryData(ObjectAddress + 0x22F8); + AttributesBuffer.append(Dl); + + for (local i = 0; i< AttributesBuffer.len(); i++) { + if (AttributesBuffer[i] != Attributes[i]) { + if (Attributes[i] != null) { + BroadcastContent.rawset(i, AttributesBuffer[i] - Attributes[i]); + DrawFlag = Clock(); + } + Attributes[i] = AttributesBuffer[i]; + } + } + } + + //绘制主界面 + function DrawMain(obj) { + + if (DrawFlag) { + if (sq_GetCurrentModuleType() == 3) { + local Xpos = sq_GetScreenXPos(obj) - 45; + local Ypos = sq_GetScreenYPos(obj) - 128; + + setClip(Xpos, Ypos - 40, Xpos + 150, Ypos + 80); //开始裁切 + local Time = Clock() - DrawFlag; + local pos = 0; + foreach(Index, Value in BroadcastContent) { + local RealAtt = ""; + if (Index == 0) RealAtt = "力量"; + if (Index == 1) RealAtt = "智力"; + if (Index == 2) RealAtt = "体力"; + if (Index == 3) RealAtt = "精神"; + if (Index == 4) RealAtt = "物理攻击力"; + if (Index == 5) RealAtt = "魔法攻击力"; + if (Index == 6) RealAtt = "独立攻击力"; + local Color = [65, 255, 78]; + if (Value< 0) Color = [255, 50, 50]; + local Ap = 250 - ((BroadcastContent.len() - pos) * Time * 0.05).tointeger(); + if (Ap< 0) Ap = 0; + L_sq_DrawCode(RealAtt + " " + (Value > 0 ? "+ " : "- ") + (abs(Value)), Xpos, Ypos + (pos * 16) - (Time * 0.05), sq_RGBA(Color[0], Color[1], Color[2], Ap), 0, 1); + pos++; + } + releaseClip(); //裁切结束 + } + } + } + + function Show(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + + } + + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X, Y); + } + +} +getroottable().rawdelete("TransformEqu_Obj"); + +function Lenheart_TransformEqu_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("TransformEqu_Obj")) { + RootTab.rawset("TransformEqu_Obj", true); + LenheartNewUI_CreateWindow(TransformEquC, "变换装备飘小字", 0, 0, 0, 0, 0); + } +} + +getroottable()["LenheartFuncTab"].rawset("TransformEquFuncN", Lenheart_TransformEqu_Fun); \ No newline at end of file diff --git a/Project/OnlineAnnouncement/img/0.png b/Project/OnlineAnnouncement/img/0.png new file mode 100644 index 0000000..a4db3d9 Binary files /dev/null and b/Project/OnlineAnnouncement/img/0.png differ diff --git a/Project/Recovery/Recovery.nut b/Project/Recovery/Recovery.nut new file mode 100644 index 0000000..5002bd6 --- /dev/null +++ b/Project/Recovery/Recovery.nut @@ -0,0 +1,350 @@ +/* +文件名:Recovery.nut +路径:Project/Recovery/Recovery.nut +创建日期:2024-11-17 06:16 +文件用途:回收系统 +*/ +// class RecoveryMaskC extends LenheartNewUI_Windows { + +// //信息 +// Info = null; +// //调试模式 +// DeBugMode = true; + +// constructor(ginfo) { +// Childrens = []; +// Info = ginfo; + +// LenheartNewUI_Windows.constructor(Clock() + "+" + Info.type + Info.pos, 0, 0, 0, 0, 0); +// } + +// function Show(obj) { +// LenheartNewUI_Windows.Show(obj); +// } + +// //逻辑入口 +// function Proc(obj) { +// local Window = sq_GetPopupWindowMainCotrol(64); +// if (Window) { +// X = Window.GetXPos() + ((Info.pos % 8) * 30); +// Y = Window.GetYPos() + 206 + ((Info.pos / 8) * 30); +// } +// LenheartNewUI_Windows.SyncPos(X, Y); +// } +// } +class RecoveryC extends LenheartNewUI_Windows { + + //包头 + Op = 20085000; + + //调试模式 + // DeBugMode = true; + + //不是窗口 + // NoWindow = true; + + //是否可见 + Visible = false; + + //待回收列表 + RecoveryList = null; + //待回收绘制列表 + RecoveryDrawList = null; + + //回收奖励列表 + RecoveryRewardList = null; + + //当前绘制对象 + DrawItemCurObject = null; + + //时间对象 + Timer = null; + + + Img = Rindro_Image("recovery/main.img"); + LenheartUI = Rindro_Image("interface/lenheartwindowcommon.img"); + + //获取配置包 + function GetBaseConfig() { + local T = { + op = Op + 1 + } + SendPackEx(T); + } + //配置包 + function BaseConfig(Chunk) { + local Jso = Json.Decode(Chunk); + //注册NPC功能 + RegisterNpc(Jso.npc_id); + } + + function RefreshRecoveryItemListCallBack(Chunk) { + local Jso = Json.Decode(Chunk); + RecoveryRewardList = Jso.reward; + } + + //遍历背包查找Item + function FindItemPosByForeachInven(FindAddress) { + local Inven = L_sq_RA(0x1A5FB24); + local InvenAdd = L_sq_RA(Inven + 56); + InvenAdd += 36; + for (local z = 0; z< 5; z++) { + for (local i = 0; i< 48; i++) { + local ItemAdd = L_sq_RA(InvenAdd + ((i + (z * 48)) * 4)); + if (ItemAdd == FindAddress) return { + type = z, + pos = i, + vis = false, + count = MemoryTool.DecodeMemoryData(FindAddress + 0x1A4), + itemId = L_sq_RA(FindAddress + 0x1c) + } + } + } + return null; + } + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + RecoveryList = {}; + RecoveryDrawList = []; + Timer = Clock(); + // RecoveryList.rawset(0x3EA5B400, {}); + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + Pack_Control.rawset(Op + 2, BaseConfig.bindenv(this)); + Pack_Control.rawset(Op + 4, RefreshRecoveryItemListCallBack.bindenv(this)); + DiscardItemCallBackFunc.rawset("RecoveryC", DiscardItem.bindenv(this)); + GetBaseConfig(); + + // local Ret = L_sq_GetWindowById(64); + // print(Ret); + } + + //刷新回收道具列表包 + function RefreshRecoveryItemList() { + local Arr = []; + foreach(obj in RecoveryList) { + Arr.append(obj); + } + local T = { + op = Op + 3 + } + if (Arr.len() > 0) T.list <- Arr; + SendPackEx(T); + } + + //回收道具回调 + function DiscardItem(ItemAddress) { + if (!Visible) return true; + else { + local info = FindItemPosByForeachInven(ItemAddress); + if (info) { + if (!(RecoveryList.rawin(ItemAddress)) && RecoveryList.len()< 60) { + //绘制列表 + RecoveryDrawList.append(ItemAddress); + // info.Mask <- RecoveryMaskC(info); + // AddChild(info.Mask); + RecoveryList.rawset(ItemAddress, info); + } + } + RefreshRecoveryItemList(); + } + } + //移除绘制道具列表中指定Item + function RemoveDrawItem(ItemAddress) { + for (local i = 0; i< RecoveryDrawList.len(); i++) { + if (RecoveryDrawList[i] == ItemAddress) { + RecoveryDrawList.remove(i); + break; + } + } + if (RecoveryList.rawin(ItemAddress)) { + RecoveryList.rawdelete(DrawItemCurObject); + } + RefreshRecoveryItemList(); + } + + 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 = 27; + ApplyEngagementButton.Str = "回收"; + ApplyEngagementButton.OnClick = function(Button) { + //打开背包 + L_sq_Open_ExWindow(0x1ADE090, 0, 0, 1); + Button.Parent.CloseAllEach(); + Button.Parent.CloseWindow(); + Visible = true; + RecoveryList = {}; + RecoveryDrawList = []; + RecoveryRewardList = null; + 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); + local CloseButton = LenheartNewUI_ButtonText(100, 381, 5, "确认"); + CloseButton.SetTextOffset(0, 1); + CloseButton.OnClick = function() { + if (RecoveryList.len() <= 0) return; + local T = { + op = Op + 5 + } + SendPackEx(T); + RecoveryList = {}; + RecoveryDrawList = []; + RecoveryRewardList = null; + }.bindenv(this); + AddChild(CloseButton); + + local CloseButton = LenheartNewUI_ButtonText(240, 381, 5, "取消"); + CloseButton.SetTextOffset(0, 1); + CloseButton.OnClick = function() { + this.Visible = false; + RecoveryList = {}; + RecoveryDrawList = []; + }.bindenv(this); + AddChild(CloseButton); + } + + //绘制主界面 + function DrawMain(obj) { + + //Item信息框一般为211的宽度 + L_sq_DrawWindow(X - 5, Y + 14, 400, 356, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + Img.DrawExPng(0, X + 0, Y + 0, 0, sq_RGBA(255, 255, 255, 250), 0.92, 0.92); + //标题栏 + L_sq_DrawButton(X - 5, Y, 405, "interface/lenheartwindowcommon.img", 609, 2, 7); + LenheartUI.DrawExPng(425, X + 191, Y + 221, 0, sq_RGBA(255, 255, 255, 250), 0.92, 0.92); + + foreach(Pos, Object in RecoveryDrawList) { + local Info = RecoveryList[Object]; + DrawItemCur(Object, Info, X + 13 + ((Pos % 12) * 32), Y + 42 + ((Pos / 12) * 34)); + } + if (RecoveryRewardList) { + local drawpos = 0; + foreach(Index, Count in RecoveryRewardList) { + DrawItemEx(X + 13 + ((drawpos % 12) * 32), Y + 250 + ((drawpos / 12) * 34), Index.tointeger(), Count); + drawpos++; + } + } + } + + //绘制项目 + function DrawItemCur(Object, Info, XPos, Ypos) { + local Id = L_sq_RA(Object + 0x1C); + local Rarity = L_sq_RA(Object + 0xF4); + L_sq_DrawImg("interface2/rindro_reward.img", Rarity, XPos - 3, Ypos - 3); + L_Sq_DrawItem(XPos, Ypos, Id, Info.count, 0, 0, 0); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, XPos, Ypos, 24, 24)) { + //打开道具信息窗口 + if (!Info.vis) { + //手动解锁道具信息窗口 + Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x56, 0xE8, 0x10, 0xFE, 0xFF, 0xFF]); + local ItemDrawInfo = L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 275, Object, 41); + //校准道具信息窗口位置 + L_Sq_CallFunc(0xF3B3B0, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], ItemDrawInfo, IMouse.GetXPos(), IMouse.GetYPos(), 24, 24); + Info.vis = true; + //我自己UI打开的道具信息窗口需要把渲染队列改为下层 以显示我打开的道具 + getroottable().WindowsShowABFlag <- false; + DrawItemCurObject = Object; + } + } else { + if (Info.vis) { + //关闭道具信息窗口 + L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0); + Info.vis = false; + DrawItemCurObject = null; + } + } + } + + //override + //鼠标右键按下回调 + function OnMouseRbDown(MousePos_X, MousePos_Y) { + if (DrawItemCurObject) { + if (RecoveryList.rawin(DrawItemCurObject)) { + local Info = RecoveryList[DrawItemCurObject]; + if (Info.vis) { + //关闭道具信息窗口 + L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0); + Info.vis = false; + RemoveDrawItem(DrawItemCurObject); + DrawItemCurObject = null; + } + } + } + //调用原生方法 + LenheartNewUI_Windows.OnMouseLbDown(MousePos_X, MousePos_Y); + } + + function Show(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + } + + //逻辑入口 + function Proc(obj) { + // //接管鼠标设定逻辑 + // if (Visible) { + // _Rindro_Cusor_.TakeoverFlag = true; + // } else { + // _Rindro_Cusor_.TakeoverFlag = false; + // } + + + //同步位移窗口逻辑 + local Window = sq_GetPopupWindowMainCotrol(64); + if (Window) { + X = Window.GetXPos() - 430; + Y = Window.GetYPos() + 60; + } + + //悬停已回收锁定逻辑 + local SelectItem = L_sq_RA(0x1AE45B4); + if (SelectItem) { + if (RecoveryList.rawin(SelectItem)) { + R_Mouse.Lock(); + _Rindro_Cusor_.ForceLockState = true; + } else { + _Rindro_Cusor_.ForceLockState = false; + } + } else { + _Rindro_Cusor_.ForceLockState = false; + } + + + LenheartNewUI_Windows.SyncPos(X, Y); + } + +} +getroottable().rawdelete("Recovery_Obj"); + +function Lenheart_Recovery_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("Recovery_Obj")) { + RootTab.rawset("Recovery_Obj", true); + LenheartNewUI_CreateWindow(RecoveryC, "回收系统窗口", 43, 128, 420, 412, 0); + } +} + +getroottable()["LenheartFuncTab"].rawset("RecoveryFuncN", Lenheart_Recovery_Fun); \ No newline at end of file diff --git a/Project/RepairWorldMap/RepairWorldMap.nut b/Project/RepairWorldMap/RepairWorldMap.nut index 6aec0d0..9473666 100644 --- a/Project/RepairWorldMap/RepairWorldMap.nut +++ b/Project/RepairWorldMap/RepairWorldMap.nut @@ -4,6 +4,8 @@ 创建日期:2024-08-10 08:04 文件用途:修补世界地图 */ +YosinWorldMapX <- 0; +YosinWorldMapY <- 0; class RepairWorldMapC extends LenheartNewUI_Windows { //调试模式 // DeBugMode = true; @@ -20,7 +22,7 @@ class RepairWorldMapC extends LenheartNewUI_Windows { //世界地图信息 Info = null; - //当前城镇编号 + //当前区域编号 AreaId = 0; //下拉框打开Flag @@ -36,6 +38,7 @@ class RepairWorldMapC extends LenheartNewUI_Windows { constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { Childrens = []; + Info = {}; //注册控件 RegisterWidget(); @@ -48,6 +51,25 @@ class RepairWorldMapC extends LenheartNewUI_Windows { L_sq_WAB(0x1031B36, 0x90); L_sq_WAB(0x1031B37, 0x90); L_sq_WAB(0x1031B38, 0x90); + + Info = Rindro_Script.GetFileData("region/region.lst", function(DataTable, Data) { + while (!Data.Eof()) { + local Key = Data.Get(); + local Path = "region/" + Data.Get(); + local RgnInfo = Rindro_Script.GetFileData(Path, function(DataTableA, Data) { + while (!Data.Eof()) { + local Str = Data.Get(); + if (Str == "[name]") { + DataTableA.Name <- Sq_ConvertWideChar(Data.Get(), "big5"); + } + } + }); + DataTable.rawset(Key.tointeger() - 1, { + Name = RgnInfo.Name + }); + } + }.bindenv(this)); + Info.rawdelete("filepath"); } function RegisterWidget() { @@ -65,19 +87,19 @@ class RepairWorldMapC extends LenheartNewUI_Windows { return; } //黑框 - L_sq_DrawImg("interface/minimap_minimap_town.img", 8, 131, 7); + L_sq_DrawImg("interface/minimap_minimap_town.img", 8, 131 + YosinWorldMapX, 7 + YosinWorldMapY); //绘制区域名称 - L_sq_DrawCode(getroottable().RINDRO_CONFIG.region[AreaId].Name, 135, 10, 0xFFFFFFFF, 1, 1); + L_sq_DrawCode(Info[AreaId].Name, 135 + YosinWorldMapX, 10 + YosinWorldMapY, 0xFFFFFFFF, 1, 1); if (TabbarFlag) { - foreach(Pos, Value in getroottable().RINDRO_CONFIG.region) { - L_sq_DrawImg("interface/minimap_minimap_town.img", 9, 131, 25 + (Pos * 18)); + foreach(Pos, Value in Info) { + L_sq_DrawImg("interface/minimap_minimap_town.img", 9, 131 + YosinWorldMapX, 25 + (Pos * 18) + YosinWorldMapY); // L_sq_DrawWindow(128, 24 + (Pos * 18), 108, 10, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); - L_sq_DrawCode(Value.Name, 135, 28 + (Pos * 18), 0xFFFFFFFF, 1, 1); - if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 131, 25 + (Pos * 18), 108, 18)) { + L_sq_DrawCode(Value.Name, 135 + YosinWorldMapX, 28 + (Pos * 18) + YosinWorldMapY, 0xFFFFFFFF, 1, 1); + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 131 + YosinWorldMapX, 25 + (Pos * 18) + YosinWorldMapY, 108, 18)) { MarkFlag = Pos; L_sq_SetDrawImgModel(2, 0); - L_sq_DrawImg("interface/minimap_minimap_town.img", 16, 131, 25 + (Pos * 18)); + L_sq_DrawImg("interface/minimap_minimap_town.img", 16, 131 + YosinWorldMapX, 25 + (Pos * 18) + YosinWorldMapY); L_sq_ReleaseDrawImgModel(); } } @@ -125,10 +147,9 @@ function Sq_DrawMiniMapUI(obj) { getroottable().rawdelete("RepairWorldMap_Obj"); function Lenheart_RepairWorldMap_Fun(obj) { - return; local RootTab = getroottable(); if (!RootTab.rawin("RepairWorldMap_Obj")) { - RootTab.rawset("RepairWorldMap_Obj", LenheartNewUI_CreateWindow(RepairWorldMapC, "世界地图修补", 230, 0, 30, 30, 0)); + RootTab.rawset("RepairWorldMap_Obj", LenheartNewUI_CreateWindow(RepairWorldMapC, "世界地图修补", 230 + YosinWorldMapX, 0 + YosinWorldMapY, 30, 30, 0)); } } diff --git a/Project/Scheming/Scheming.nut b/Project/Scheming/Scheming.nut new file mode 100644 index 0000000..d26a2dc --- /dev/null +++ b/Project/Scheming/Scheming.nut @@ -0,0 +1,764 @@ +/* +文件名:Scheming.nut +路径:Project/Scheming/Scheming.nut +创建日期:2025-03-04 10:15 +文件用途:心机牌 +*/ +class SchemingC_Player { + Charc = null; + Name = ""; + IsMyControl = true; + Card = null; + + + //Img + Img = Rindro_Image("xjp.img"); + + //生命值 + Hp = 3; + + constructor() { + Card = [0, 1, 2]; + } + + //职业int 装备array 名字string + function SetPlayer(Job, Equ, Name) { + this.Name = Name; + Charc = Rindro_Draw_Character(Job, Equ, "rest.ani", null); + } + + function SetCard(gCard) { + Card = gCard; + } + + function Draw(Xpos, Ypos) { + if (!Charc) return; + //绘制头像背景框 + sq_DrawBox(Xpos - 1, Ypos - 1, 26, 20, sq_RGBA(127, 132, 142, 250)); + sq_DrawBox(Xpos - 1, Ypos - 1 + 20, 80, 20, sq_RGBA(127, 132, 142, 250)); + L_sq_DrawCode(this.Name, Xpos + 44 - (LenheartTextClass.GetStringLength(this.Name) / 2), Ypos + 23, IsMyControl ? sq_RGBA(157, 245, 10, 250) : sq_RGBA(230, 200, 155, 250), 1, 1); + Charc.DrawFace(Xpos, Ypos); + DrawHp(Xpos, Ypos); + } + + function DrawHp(Xpos, Ypos) { + for (local i = 0; i< Hp; i++) { + Img.DrawPng(2, Xpos + 28 + (i * 18), Ypos + 2); + } + } +} +class SchemingC_Card extends LenheartNewUI_CommonUi { + State = 0; + //Img + Img = Rindro_Image("xjpcard.img"); + Id = 1; + //是否选中 + IsSelect = false; + + constructor() { + Id = 1; + LenheartNewUI_CommonUi.constructor(0, 0, 82, 107); + + OnClick = function() { + IsSelect = !IsSelect; + if (IsSelect) { + Localtion_Y -= 30; + } else { + Localtion_Y += 30; + } + } + } + + function SetCardId(CardId) { + Id = CardId + 1; + } + + + function Show(obj) { + //不可用 + if (State == 8) { + Img.DrawPng(Id, X, Y); + } else { + //按下 + if (isLBDown) { + Img.DrawPng(6, X, Y); + Img.DrawPng(Id, X, Y); + } + //悬停 + else if (isInRect) { + if (!IsSelect) Img.DrawPng(5, X, Y); + else Img.DrawPng(6, X, Y); + Img.DrawPng(Id, X, Y); + } + //普通 + else { + if (IsSelect) Img.DrawPng(6, X, Y); + Img.DrawPng(Id, X, Y); + } + } + } +} +class SchemingC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + // NoWindow = true; + + + //是否可见 + Visible = false; + + //本服或跨服模式 + IsServer = false; + + //胜利场次 + WinCount = 0; + //排名 + Ranking = 0; + //跨服排名 + OnlineRanking = 0; + //入场券数量 + TicketCount = 0; + + //阶段 + Stage = 0; + //游戏状态 + GameState = -1; + //发牌阶段 + DealCardState = 0; + //发牌时间管理器 + DealCardTimer = Clock(); + //翻牌阶段 + FlipCardState = 0; + //翻牌时间管理器 + FlipCardTimer = Clock(); + //随机牌阶段 + RandCardState = 0; + //随机牌时间管理器 + RandCardTimer = Clock(); + //匹配状态 + MatchState = 0; + + //Img + Img = Rindro_Image("xjp.img"); + //CardImg + CardImg = Rindro_Image("xjpcard.img"); + + //X轴方向偏移基准值 + XOffset = 0; + + //玩家集合 + PlayerList = null; + PlayerPos = [ + [360, 550], + [1, 274], + [360, 10], + [720, 274] + ]; + + //卡牌集合 + CardList = null; + + //点击效果Ani + ClickEffFrameArr = null; + ClickEffAni = null; + + //匹配动画Ani + MatchImg2 = Rindro_Image("xjploading2.img"); + MatchAni2 = null; + + //主牌 + MainCardId = 0; + + //出牌动画演出Flag + PlayCardAniTimer = Clock(); + PlayCardAniFlag = -1; + PlayCardAniCount = 3; + + //质疑开牌动画演出 + QuestionAniTimer = Clock(); + QuestionAniFlag = -1; + QuestionList = null; + + //回合玩家 + RoundCharac = 0; + //回合剩余时间 + RoundTime = Clock(); + + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + ClickEffAni = []; + //计算宽屏适配 + XOffset = (gWidth == 800 ? 0 : 133); + + //初始化构造 + PlayerList = array(4); + for (local i = 0; i< 4; i++) { + PlayerList[i] = SchemingC_Player(); + } + CardList = array(5); + for (local i = 0; i< 5; i++) { + CardList[i] = SchemingC_Card(); + CardList[i].Localtion_X = (XOffset + 400) - 205 + (i * 82) + CardList[i].Localtion_Y = 426; + Childrens.append(CardList[i]); + } + //注册控件 + RegisterWidget(); + //注册收包 + RegisterPacket(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + //记录点击效果帧 + ClickEffFrameArr = []; + for (local i = 0; i< 13; i++) { + local T = { + ImgIndex = i, + Delay = 50, + Pos = [0, 0] + } + ClickEffFrameArr.append(T); + } + + //匹配动画 + local MatchEffFrameArr2 = []; + for (local i = 0; i< 24; i++) { + local T = { + ImgIndex = i, + Delay = 40, + Pos = [0, 0] + } + MatchEffFrameArr2.append(T); + //预加载 + MatchImg2.DrawPng(i, -500, -500); + } + MatchAni2 = Lenheart_Ani("xjploading2.img", MatchEffFrameArr2, [XOffset + 356, 310]); + MatchAni2.ImgPath = "xjploading2.img"; + + } + + function RegisterWidget() { + //质疑按钮 + local QuestionButton = LenheartNewUI_BaseButton(getroottable().Rindro_Scr_Width == 800 ? 680 : 860, 500, 87, 34, "xjp.img", 5); + QuestionButton.OnClick = function() { + + }.bindenv(this); + QuestionButton.SetCallBackFunc(function(Button) { + if (Stage == 0) Button.Visible = false; + else Button.Visible = true; + }.bindenv(this)); + Childrens.append(QuestionButton); + + //出牌按钮 + local ProduceButton = LenheartNewUI_BaseButton(getroottable().Rindro_Scr_Width == 800 ? 680 : 860, 536, 87, 34, "xjp.img", 8); + ProduceButton.OnClick = function() { + local SendCardList = []; + foreach(Index, Card in CardList) { + if (Card.IsSelect) SendCardList.append(Index); + } + if (SendCardList.len() == 0) return; + //发送出牌包 + local T = { + op = 20092007, + CardList = SendCardList + }; + SendPackEx(T); + }.bindenv(this); + ProduceButton.SetCallBackFunc(function(Button) { + if (Stage == 0) Button.Visible = false; + else Button.Visible = true; + }.bindenv(this)); + Childrens.append(ProduceButton); + + //匹配按钮 + local MatchButton = LenheartNewUI_BaseButton(getroottable().Rindro_Scr_Width == 800 ? 355 : 488, 400, 87, 34, "xjp.img", 16); + MatchButton.OnClickEx = function(Button) { + if (!Button.Visible) return; + //发送开始匹配包 + local T = { + op = 20092001, + } + SendPackEx(T); + }.bindenv(this); + MatchButton.SetCallBackFunc(function(Button) { + if (Stage == 0) { + if (MatchState == 0) Button.Visible = true; + else Button.Visible = false; + } else Button.Visible = false; + }.bindenv(this)); + Childrens.append(MatchButton); + + //取消匹配按钮 + local CancelMatchButton = LenheartNewUI_BaseButton(getroottable().Rindro_Scr_Width == 800 ? 355 : 488, 400, 87, 34, "xjp.img", 19); + CancelMatchButton.OnClickEx = function(Button) { + if (!Button.Visible) return; + //发送开始匹配包 + local T = { + op = 20092003, + } + SendPackEx(T); + }.bindenv(this); + CancelMatchButton.SetCallBackFunc(function(Button) { + if (Stage == 0) { + if (MatchState == 1) Button.Visible = true; + else Button.Visible = false; + } else Button.Visible = false; + }.bindenv(this)); + Childrens.append(CancelMatchButton); + } + + //绘制主界面 + function DrawMain(obj) { + if (Width == 800) { + Img.DrawPng(0, X, Y); + } else { + Img.DrawPng(1, X, Y); + } + + + //匹配阶段 + if (Stage == 0) { + //绘制标题 + Img.DrawPng(11, X + XOffset + 124, Y + 60); + //绘制个人信息框 + Img.DrawPng(12, X + XOffset + 400 - 135, Y + 200); + L_sq_DrawCode("胜利场次: " + WinCount + "次", X + XOffset + 400 - 135 + 12, Y + 200 + 20, sq_RGBA(230, 200, 155, 250), 1, 1); + L_sq_DrawCode("服务器排名: 第" + (IsServer ? OnlineRanking : Ranking) + "名", X + XOffset + 400 - 135 + 12, Y + 200 + 40, sq_RGBA(230, 200, 155, 250), 1, 1); + if (!IsServer) L_sq_DrawCode("剩余入场券数量: " + Ranking + "张", X + XOffset + 400 - 135 + 12, Y + 200 + 60, sq_RGBA(230, 200, 155, 250), 1, 1); + + if (MatchState == 0) { + + } else if (MatchState == 1) { + //绘制匹配动画 + L_sq_SetDrawImgModel(2, 0); + MatchAni2.Show(Duration); + L_sq_ReleaseDrawImgModel(); + L_sq_DrawCode("匹配中", X + XOffset + 400 - 135 + 116, Y + 200 + 40 + 105, sq_RGBA(230, 200, 155, 250), 1, 1); + } + } + //游戏阶段 + else if (Stage == 1) { + //挑选万能牌 + if (GameState == -1) { + local Rate = sq_GetUniformVelocity(0, 100, Clock() - RandCardTimer, 300); + if (RandCardState< 3) { + if (RandCardState == 0) { + if ((Clock() - RandCardTimer >= 300)) { + RandCardTimer = Clock(); + RandCardState++; + return; + } + } + if (RandCardState == 1) { + if ((Clock() - RandCardTimer >= 1000)) { + RandCardTimer = Clock(); + RandCardState++; + return; + } + } + if (RandCardState == 2) { + if ((Clock() - RandCardTimer >= 1000)) { + RandCardTimer = Clock(); + RandCardState++; + return; + } + } + } + if (RandCardState == 3) { + GameState = 0; + return; + } + if (RandCardState == 0) { + Rate = abs(100 - Rate).tofloat() / 100.0; + } else { + Rate = Rate.tofloat() / 100.0; + } + + if (RandCardState == 0) + CardImg.DrawExPng(0, ((XOffset + 400) - 41), 240, 0, 0xffffffff, Rate, 1.0); + if (RandCardState == 1) + CardImg.DrawExPng(MainCardId, ((XOffset + 400) - 41), 240, 0, 0xffffffff, Rate, 1.0); + if (RandCardState == 2) { + local XBuf = sq_GetUniformVelocity(((XOffset + 400) - 41), 10, Clock() - RandCardTimer, 200); + local YBuf = sq_GetUniformVelocity(240, 30, Clock() - RandCardTimer, 200); + CardImg.DrawPng(MainCardId, XBuf, YBuf); + } + } + if (GameState >= 0) { + //大于0了就永远绘制主牌 + CardImg.DrawPng(MainCardId, 10, 30); + //计算时间因子 + if (Clock() - DealCardTimer >= 200) { + DealCardTimer = Clock(); + DealCardState++; + + if (DealCardState > 3 && GameState == 0) { + GameState = 1; + FlipCardTimer = Clock(); + } + } + //绘制发牌动画 + for (local i = 0; i< 20; i++) { + if (i< 5) { + //自己的牌只在发牌阶段绘制 + if (GameState == 0) { + if (DealCardState == 0) { + local XBuf = sq_GetUniformVelocity((X + XOffset + 400 - 40 - i), ((XOffset + 400) - 205) + (82 * i), Clock() - DealCardTimer, 200); + local YBuf = sq_GetUniformVelocity(Y + 240 - i, 426, Clock() - DealCardTimer, 200); + CardImg.DrawPng(0, XBuf, YBuf); + } else { + CardImg.DrawPng(0, ((XOffset + 400) - 205) + (82 * i), 426); + } + } + continue; + } else if (i< 10 && DealCardState >= 1) { + if (i - 5< PlayerList[i / 5].Card.len()) { + if (DealCardState == 1) { + local XBuf = sq_GetUniformVelocity((X + XOffset + 400 - 40 - i), ((XOffset + 80)), Clock() - DealCardTimer, 200); + local YBuf = sq_GetUniformVelocity(Y + 240 - i, 190 + ((i - 5) * 15), Clock() - DealCardTimer, 200); + CardImg.DrawPng(0, XBuf, YBuf); + } else { + CardImg.DrawPng(0, ((XOffset + 80)), 190 + ((i - 5) * 15)); + } + } + continue; + } else if (i< 15 && DealCardState >= 2) { + if (i - 10< PlayerList[i / 5].Card.len()) { + if (DealCardState == 2) { + local XBuf = sq_GetUniformVelocity((X + XOffset + 400 - 40 - i), ((XOffset + 400) - 86) + (15 * (i - 10)), Clock() - DealCardTimer, 200); + local YBuf = sq_GetUniformVelocity(Y + 240 - i, 54, Clock() - DealCardTimer, 200); + CardImg.DrawPng(0, XBuf, YBuf); + } else { + CardImg.DrawPng(0, ((XOffset + 400) - 86) + (15 * (i - 10)), 54); + } + } + continue; + } else if (i< 20 && DealCardState >= 3) { + if (i - 15< PlayerList[i / 5].Card.len()) { + if (DealCardState == 3) { + local XBuf = sq_GetUniformVelocity((X + XOffset + 400 - 40 - i), ((XOffset + 620)), Clock() - DealCardTimer, 200); + local YBuf = sq_GetUniformVelocity(Y + 240 - i, 190 + ((i - 15) * 15), Clock() - DealCardTimer, 200); + CardImg.DrawPng(0, XBuf, YBuf); + } else { + CardImg.DrawPng(0, ((XOffset + 620)), 190 + ((i - 15) * 15)); + } + } + continue; + } + CardImg.DrawPng(0, X + XOffset + 400 - 40 - i, Y + 240 - i); + } + } + + //绘制翻牌动画 + if (GameState == 1) { + local Rate = sq_GetUniformVelocity(0, 100, Clock() - FlipCardTimer, 300); + if (FlipCardState< 2) { + if (FlipCardState == 0) { + if ((Clock() - FlipCardTimer >= 300)) { + FlipCardTimer = Clock(); + FlipCardState++; + return; + } + } + if (FlipCardState == 1) { + if ((Clock() - FlipCardTimer >= 1000)) { + FlipCardTimer = Clock(); + FlipCardState++; + return; + } + } + } + if (FlipCardState == 2) { + GameState = 2; + return; + } + if (FlipCardState == 0) { + Rate = abs(100 - Rate).tofloat() / 100.0; + } else { + Rate = Rate.tofloat() / 100.0; + if (Rate > 0.95) { + for (local i = 0; i< 5; i++) { + CardList[i].Visible = true; + } + } + } + + for (local i = 0; i< 5; i++) { + if (FlipCardState == 0) + CardImg.DrawExPng(0, ((XOffset + 400) - 205) + (82 * i), 426, 0, 0xffffffff, Rate, 1.0); + if (FlipCardState == 1) + CardImg.DrawExPng(CardList[i].Id, ((XOffset + 400) - 205) + (82 * i), 426, 0, 0xffffffff, Rate, 1.0); + } + } + + + //绘制玩家 + foreach(Index, PlayerObj in PlayerList) { + PlayerObj.Draw(X + (XOffset + PlayerPos[Index][0]), Y + PlayerPos[Index][1]); + } + + //绘制文字当前主牌 + Img.DrawPng(4, X + 10, Y + 10); + + + //绘制出牌动画 + if (PlayCardAniFlag == 0) { + local XBuf = sq_GetUniformVelocity((X + XOffset + 400 - 40), (X + XOffset + 300 - 40), Clock() - PlayCardAniTimer, 200); + local YBuf = sq_GetUniformVelocity(Y + 400, 220, Clock() - PlayCardAniTimer, 200); + for (local i = 0; i< PlayCardAniCount; i++) { + CardImg.DrawPng(0, XBuf + (12 * i), YBuf); + } + } else if (PlayCardAniFlag == 1) { + local XBuf = sq_GetUniformVelocity((X + XOffset + 80), (X + XOffset + 300 - 40), Clock() - PlayCardAniTimer, 200); + local YBuf = sq_GetUniformVelocity(Y + 200, 220, Clock() - PlayCardAniTimer, 200); + for (local i = 0; i< PlayCardAniCount; i++) { + CardImg.DrawPng(0, XBuf + (12 * i), YBuf); + } + } else if (PlayCardAniFlag == 2) { + local XBuf = sq_GetUniformVelocity((X + XOffset + 400 - 40), (X + XOffset + 300 - 40), Clock() - PlayCardAniTimer, 200); + local YBuf = sq_GetUniformVelocity(Y + 54, 220, Clock() - PlayCardAniTimer, 200); + for (local i = 0; i< PlayCardAniCount; i++) { + CardImg.DrawPng(0, XBuf + (12 * i), YBuf); + } + } else if (PlayCardAniFlag == 3) { + local XBuf = sq_GetUniformVelocity((X + XOffset + 620), (X + XOffset + 300 - 40), Clock() - PlayCardAniTimer, 200); + local YBuf = sq_GetUniformVelocity(Y + 200, 220, Clock() - PlayCardAniTimer, 200); + for (local i = 0; i< PlayCardAniCount; i++) { + CardImg.DrawPng(0, XBuf + (12 * i), YBuf); + } + } + + { + //绘制质疑开牌动画 + if (QuestionAniFlag == 1) { + local XBufRate = sq_GetUniformVelocity(12, 82, Clock() - QuestionAniTimer, 300); + if (XBufRate >= 82) { + QuestionAniFlag++; + QuestionAniTimer = Clock(); + } + for (local i = 0; i< QuestionList.len(); i++) { + CardImg.DrawPng(0, X + XOffset + 300 - 40 + (XBufRate * i), 220); + } + } + if (QuestionAniFlag >= 2) { + local Rate = sq_GetUniformVelocity(0, 100, Clock() - QuestionAniTimer, 200); + if (QuestionAniFlag< 5) { + if (QuestionAniFlag == 2) { + if ((Clock() - QuestionAniTimer >= 300)) { + QuestionAniTimer = Clock(); + QuestionAniFlag++; + return; + } + } + if (QuestionAniFlag == 3) { + if ((Clock() - QuestionAniTimer >= 1200)) { + QuestionAniTimer = Clock(); + QuestionAniFlag++; + return; + } + } + if (QuestionAniFlag == 4) { + if ((Clock() - QuestionAniTimer >= 1000)) { + QuestionAniTimer = Clock(); + QuestionAniFlag++; + return; + } + } + } + if (QuestionAniFlag == 5) { + return; + } + if (QuestionAniFlag == 2) { + Rate = abs(100 - Rate).tofloat() / 100.0; + } else if (QuestionAniFlag == 3) { + Rate = Rate.tofloat() / 100.0; + } + + for (local i = 0; i< QuestionList.len(); i++) { + if (QuestionAniFlag == 2) + CardImg.DrawExPng(0, X + XOffset + 300 - 40 + (82 * i), 220, 0, 0xffffffff, Rate, 1.0); + if (QuestionAniFlag == 3) + CardImg.DrawExPng(QuestionList[i] + 1, X + XOffset + 300 - 40 + (82 * i), 220, 0, 0xffffffff, Rate, 1.0); + } + } + } + + //绘制当前是谁的回合 + if (RoundCharac == 0) { + // Img.DrawPng(5, X + 10, Y + 10); + } + } + + } + + function Show(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + + //绘制点击效果 + L_sq_SetDrawImgModel(2, 0); + foreach(Ani in ClickEffAni) { + Ani.ShowEx(Duration, sq_RGBA(255, 255, 255, 250), 0.8, 0.8); + } + L_sq_ReleaseDrawImgModel(); + } + + function SyncCardPos() { + //匹配阶段 + if (Stage == 0) { + foreach(Card in CardList) { + Card.Visible = false; + } + } + //游戏阶段 + else if (Stage == 1) { + //State 0 发牌阶段 1 出牌阶段 + if (GameState == 2) { + SynchronizeYourCardPosition(); + } else if (GameState <= 0) { + foreach(Card in CardList) { + Card.Visible = false; + } + } + } + } + + function SynchronizeYourCardPosition() { + //计算数量 + local DisplayCount = 0; + foreach(Card in CardList) { + if (Card.Visible) DisplayCount++; + } + //计算卡牌总宽度 + local TotalWidth = DisplayCount * 82; + //计算偏移量 居中 卡牌宽度为82 + local DrawIndex = 0; + foreach(Card in CardList) { + if (!Card.Visible) continue; + Card.Localtion_X = (XOffset + 400) - (TotalWidth / 2) + (DrawIndex * 82); + DrawIndex++; + } + } + + //逻辑入口 + function Proc(obj) { + SyncCardPos(); + LenheartNewUI_Windows.SyncPos(X, Y); + } + + //注册收包 + function RegisterPacket() { + //开始匹配回调 + Pack_Control.rawset(20092002, function(Chunk) { + local Jso = Json.Decode(Chunk); + MatchState = 1; + }.bindenv(this)); + //取消匹配回调 + Pack_Control.rawset(20092004, function(Chunk) { + local Jso = Json.Decode(Chunk); + MatchState = 0; + }.bindenv(this)); + //对局开始回调 + Pack_Control.rawset(20092006, function(Chunk) { + local Jso = Json.Decode(Chunk); + MatchState = 0; + Stage = 1; + GameState = -1; + DealCardTimer = Clock(); + RandCardTimer = Clock(); + //设置主牌 + MainCardId = Jso.MainCard; + //设置玩家 + foreach(Index, PlayerObj in Jso.CharacList) { + PlayerList[Index].SetPlayer(PlayerObj.Job, PlayerObj.Equ, PlayerObj.Name); + PlayerList[Index].SetCard(PlayerObj.CardList); + } + //设置自己的牌 + foreach(Index, CardId in Jso.CharacList[0].CardList) { + CardList[Index].SetCardId(CardId); + } + }.bindenv(this)); + //出牌成功回调 + Pack_Control.rawset(20092008, function(Chunk) { + local Jso = Json.Decode(Chunk); + local SendCardList = Jso.CardList; + + //如果是自己出牌 + if (Jso.CharacId == 0) { + //设定卡牌不可见 + foreach(Index in SendCardList) { + CardList[Index].Visible = false; + } + //设置出牌动画Flag + PlayCardAniFlag = 0; + } + //如果是其他玩家出牌 + else { + PlayerList[Jso.CharacId].Card = array(PlayerList[Jso.CharacId].Card.len() - SendCardList.len()); + //设置出牌动画Flag + PlayCardAniFlag = Jso.CharacId; + //设置出牌张数 + PlayCardAniCount = SendCardList.len(); + } + + }.bindenv(this)); + //刷新回合信息回调 + Pack_Control.rawset(20092010, function(Chunk) { + local Jso = Json.Decode(Chunk); + //回合玩家 + RoundCharac = Jso.RoundCharac; + //回合剩余时间 + RoundTime = Jso.RoundTime; + }.bindenv(this)); + + //战绩包回调 + Pack_Control.rawset(20092098, function(Chunk) { + local Jso = Json.Decode(Chunk); + this.WinCount = Jso.WinCount; + this.Ranking = Jso.Ranking; + this.OnlineRanking = Jso.OnlineRanking; + this.TicketCount = Jso.TicketCount; + }.bindenv(this)); + } + + + ClickFlag = null; + //鼠标左键按下回调 + function OnMouseLbDown(MousePos_X, MousePos_Y) { + LenheartNewUI_Windows.OnMouseLbDown(MousePos_X, MousePos_Y); + ClickFlag = { + x = MousePos_X, + y = MousePos_Y + }; + + local ClickEffAniBuffer = Lenheart_Ani("", ClickEffFrameArr, [MousePos_X - (70 * 0.8), MousePos_Y - (75 * 0.8)]); + ClickEffAniBuffer.ImgPath = "xjpclick2.img"; + ClickEffAniBuffer.LoopFlag = false; + ClickEffAni.append(ClickEffAniBuffer); + } + + function OpenCallBack() { + Visible = true; + //查询战绩 + local T = { + op = 20092097, + }; + SendPackEx(T); + } +} +getroottable().rawdelete("Scheming_Obj"); + +function Lenheart_Scheming_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("Scheming_Obj")) { + RootTab.rawset("Scheming_Obj", true); + local width = getroottable().Rindro_Scr_Width; + local Win = LenheartNewUI_CreateWindow(SchemingC, "心机牌窗口", 0, 0, width, 600, 0); + EventList_Obj.AddEvent("心机牌大作战", 364, Win); + } +} + +getroottable()["LenheartFuncTab"].rawset("SchemingFuncN", Lenheart_Scheming_Fun); \ No newline at end of file diff --git a/Project/ServerAuction/ServerAuction.nut b/Project/ServerAuction/ServerAuction.nut index ba1aacc..32f62e8 100644 --- a/Project/ServerAuction/ServerAuction.nut +++ b/Project/ServerAuction/ServerAuction.nut @@ -192,6 +192,14 @@ class ServerAuctionC extends LenheartNewUI_Windows { AddChild(OpenAuctionButton); } + function GetItemName(Id) { + //读取物品名称 + local ItemObject = L_sq_GetItem(Id); + local NamePointer = L_sq_RA(ItemObject + 0x20); + local Name = NativePointer(L_sq_I2P(NamePointer)).readUnicodeString(); + return Name; + } + //绘制主界面 function DrawMain(obj) { @@ -211,18 +219,17 @@ class ServerAuctionC extends LenheartNewUI_Windows { if (Value.cost == -1) CostItemId = 7906; if (Value.cost == -2) CostItemId = 133; //绘制扣除道具 - if (Rindro_ItemInfoObject.rawin(CostItemId)) DrawItemEx(X + 40, Y + 284, CostItemId, 1); - else L_Sq_DrawItem(X + 40, Y + 284, CostItemId, 1, 0, 0, 0); + DrawItemEx(X + 40, Y + 284, CostItemId, 1); local CostName = ""; if (Value.cost == 0) CostName = "金币"; else if (Value.cost == -1) CostName = "点券"; else if (Value.cost == -2) CostName = "代币券"; - else CostName = Rindro_ItemInfoObject[CostItemId].Name; + else CostName = GetItemName(CostItemId); //绘制扣除道具名字 L_sq_DrawCode(CostName, X + 79, Y + 300, sq_RGBA(227, 212, 154, 250), 0, 1); //绘制竞品名 - L_sq_DrawCode(Rindro_ItemInfoObject[Value.itemId].Name, X + 120, Y + 207, sq_RGBA(227, 212, 154, 250), 0, 1); + L_sq_DrawCode(GetItemName(Value.itemId), X + 120, Y + 207, sq_RGBA(227, 212, 154, 250), 0, 1); //绘制最高竞价者 L_sq_DrawCode(AuctionRealInfo.name, X + 120, Y + 230, sq_RGBA(227, 212, 154, 250), 0, 1); //绘制最高竞拍价 diff --git a/Project/Shapeshifting/Shapeshifting.nut b/Project/Shapeshifting/Shapeshifting.nut index 8b8ce5c..4b35014 100644 --- a/Project/Shapeshifting/Shapeshifting.nut +++ b/Project/Shapeshifting/Shapeshifting.nut @@ -25,6 +25,10 @@ class ShapeshiftingC extends LenheartNewUI_Windows { //初始化时间 Timer = 0; + //是否已经变身 + IsShapeshifting = false; + + //收到信息包 function GetInfoCallBack(Chunk) { if (!this) return; @@ -49,18 +53,41 @@ class ShapeshiftingC extends LenheartNewUI_Windows { function RegisterWidget() { //关闭按钮 - local CloseButton = LenheartNewUI_BaseButton(0, 0, 28, 28, "interface2/yosin/bianshen.img", 0); - CloseButton.OnClick = function() { + local OpenButton = LenheartNewUI_BaseButton(0, 0, 28, 28, "interface2/yosin/bianshen.img", 0); + OpenButton.OnClick = function() { if (ShapeMonsterId) { L_sq_SendPackType(214); L_sq_SendPackByte(2); L_sq_SendPackWord(ShapeMonsterId); L_sq_SendPack(); + IsShapeshifting = true; + } + }.bindenv(this); + OpenButton.SetCallBackFunc(function(Button) { + if (!IsShapeshifting) { + Button.Localtion_X = 0; + } else { + Button.Localtion_X = -90000; + } + }.bindenv(this)) + Childrens.append(OpenButton); + + //关闭按钮 + local CloseButton = LenheartNewUI_BaseButton(0, 0, 28, 28, "interface2/yosin/bianshen.img", 4); + CloseButton.OnClick = function() { + if (ShapeMonsterId) { + L_sq_SendPackType(215); + L_sq_SendPack(); + IsShapeshifting = false; } }.bindenv(this); CloseButton.SetCallBackFunc(function(Button) { - - }) + if (!IsShapeshifting) { + Button.Localtion_X = -90000; + } else { + Button.Localtion_X = 0; + } + }.bindenv(this)) Childrens.append(CloseButton); } @@ -72,12 +99,11 @@ class ShapeshiftingC extends LenheartNewUI_Windows { function Show(obj) { DrawMain(obj); LenheartNewUI_Windows.Show(obj); - } function CheckPlayerInfoToSeverShapeInfo() { - if(!SeverEquInfo)return; + if (!SeverEquInfo) return; local Toubu = L_sq_GetCharacterAttribute(0x1C, 14); local Maozi = L_sq_GetCharacterAttribute(0x1C, 13); local Lianbu = L_sq_GetCharacterAttribute(0x1C, 15); @@ -109,17 +135,22 @@ class ShapeshiftingC extends LenheartNewUI_Windows { //逻辑入口 function Proc(obj) { LenheartNewUI_Windows.SyncPos(X, Y); - //每五秒获取一次本地数据信息 - if (Clock() - Timer >= 5000) { - Timer = Clock(); + if (Clock() - Timer >= 1000) { CheckPlayerInfoToSeverShapeInfo(); } - if (!ShapeMonsterId) { - Visible = false; - } else { - Visible = true; + + if ("RepairWorldMap_Obj" in getroottable()) { + if (RepairWorldMap_Obj.OpenState || sq_GetCurrentModuleType() != 1) { + Visible = false; + } else { + if (!ShapeMonsterId) { + Visible = false; + } else { + Visible = true; + } + } } } diff --git a/Project/Shapeshifting/img/0.png b/Project/Shapeshifting/img/0.png new file mode 100644 index 0000000..7f12caa Binary files /dev/null and b/Project/Shapeshifting/img/0.png differ diff --git a/Project/Shapeshifting/img/1.png b/Project/Shapeshifting/img/1.png new file mode 100644 index 0000000..2fee168 Binary files /dev/null and b/Project/Shapeshifting/img/1.png differ diff --git a/Project/Shapeshifting/img/2.png b/Project/Shapeshifting/img/2.png new file mode 100644 index 0000000..08eae63 Binary files /dev/null and b/Project/Shapeshifting/img/2.png differ diff --git a/Project/SkinHub/SkinHub.nut b/Project/SkinHub/SkinHub.nut index 70516c6..ec3121b 100644 --- a/Project/SkinHub/SkinHub.nut +++ b/Project/SkinHub/SkinHub.nut @@ -206,13 +206,13 @@ class SkinHubC extends LenheartNewUI_Windows { ActiveButton.OnClickEx = function(Button) { local T = { op = 20076007, - itemId = HasDamageSkinList[Button.Data], + itemId = HasDamageSkinList[Button.Data + abs(NowPage)], type = 0 } SendPackEx(T); - NowDamageSkinIndex = HasDamageSkinList[Button.Data]; - FocusPrintIdx = HasDamageSkinList[Button.Data]; - InitDamageFont(HasDamageSkinList[Button.Data]); + NowDamageSkinIndex = HasDamageSkinList[Button.Data + abs(NowPage)]; + FocusPrintIdx = HasDamageSkinList[Button.Data + abs(NowPage)]; + InitDamageFont(HasDamageSkinList[Button.Data + abs(NowPage)]); }.bindenv(this); ActiveButton.SetCallBackFunc(function(Button) { if (Button.Data >= (HasDamageSkinList.len())) { diff --git a/Project/SkinHub/img/0.png b/Project/SkinHub/img/0.png new file mode 100644 index 0000000..1f7d45e Binary files /dev/null and b/Project/SkinHub/img/0.png differ diff --git a/Project/SkinHub/img/1.png b/Project/SkinHub/img/1.png new file mode 100644 index 0000000..de5f4f7 Binary files /dev/null and b/Project/SkinHub/img/1.png differ diff --git a/Project/Tuguan/img/0.png b/Project/Tuguan/img/0.png new file mode 100644 index 0000000..3d321fe Binary files /dev/null and b/Project/Tuguan/img/0.png differ diff --git a/Project/Tuguan/img/1.png b/Project/Tuguan/img/1.png new file mode 100644 index 0000000..c66b856 Binary files /dev/null and b/Project/Tuguan/img/1.png differ diff --git a/Project/Tuguan/img/2.png b/Project/Tuguan/img/2.png new file mode 100644 index 0000000..99c1ebc Binary files /dev/null and b/Project/Tuguan/img/2.png differ diff --git a/Project/WorldBoss/WorldBoss.nut b/Project/WorldBoss/WorldBoss.nut new file mode 100644 index 0000000..87f88c6 --- /dev/null +++ b/Project/WorldBoss/WorldBoss.nut @@ -0,0 +1,413 @@ +/* +文件名:WorldBoss.nut +路径:Project/WorldBoss/WorldBoss.nut +创建日期:2025-05-01 23:54 +文件用途:世界BOSS +*/ + +class WorldBossC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + // NoWindow = true; + + //是否可见 + Visible = false; + + WindowImg = Rindro_Image("hud/worldboss.img"); + WindowTimeImg = Rindro_Image("hud/worldboss_time.img"); + WindowTimeNumImg = Rindro_Image("hud/worldboss_timenum.img"); + + //基础信息 + BaseInfo = null; + + //Pvf信息 + PvfInfo = null; + + //伤害列表 + RankList = null; + + + //页面 + Page = 0; + //查询排名页数 + CheckPage = 1; + MaxPage = 50; + + + //计时器 + TiemrCache = null; + Timer = null; + + //累计伤害 + TotalDamage = null; + + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + + InitButtonConfig(); + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + + Pack_Control.rawset(20060002, function(Chunk) { + local Jso = Json.Decode(Chunk); + BaseInfo = Jso; + }.bindenv(this)); + + Pack_Control.rawset(20060006, function(Chunk) { + local Jso = Json.Decode(Chunk); + RankList = Jso.list; + }.bindenv(this)); + + Pack_Control.rawset(20060014, function(Chunk) { + local Jso = Json.Decode(Chunk); + Timer = Clock(); + TiemrCache = Jso.endTime; + }.bindenv(this)); + + + PushDamageFontFuncTab.rawset("DamagePerSecondCFunc", function(ObjAddress, MySelfAddress, Value) { + if (!SendDamagePackFlag) return; + if (ObjAddress == 0 || ObjAddress == MySelfAddress) { + if (!TotalDamage) TotalDamage = longlong(0); + TotalDamage += longlong(Value); + } + }.bindenv(this)); + + + + // ChangePage(1); + // SendPackEx({ + // op = 20060005, + // page = 1 + // }) + } + + function InitButtonConfig() { + PvfInfo = Rindro_Script.GetFileData("etc/rindro/worldboss/worldboss.etc", function(DataTable, Data) { + while (!Data.Eof()) { + local Key = Data.Get(); + if (Key == "[Enter Button]") { + DataTable.EnterButton <- { + x = Data.Get(), + y = Data.Get(), + width = Data.Get(), + height = Data.Get() + } + } else if (Key == "[Refresh Button]") { + DataTable.RefreshButton <- { + x = Data.Get(), + y = Data.Get(), + width = Data.Get(), + height = Data.Get() + } + } else if (Key == "[Rank List]") { + DataTable.RankList <- { + x = Data.Get(), + y = Data.Get() + } + } else if (Key == "[Time Countdown]") { + DataTable.Countdown <- { + x = Data.Get(), + y = Data.Get() + } + } + } + }.bindenv(this)); + } + + + //标题栏 + Title = null; + + function ChangePage(ToPage) { + foreach(ButtonObj in Title) { + ButtonObj.State = 0; + } + Page = ToPage; + Title[ToPage].State = 1; + } + + function RegisterWidget() { + Title = []; + local Tabbars1 = LenheartNewUI_TabbarsText(2, 27, "玩法简介"); + Tabbars1.State = 1; + Tabbars1.SetTextOffset(7, 4); + AddChild(Tabbars1); + Tabbars1.OnClick = function() { + ChangePage(0); + }.bindenv(this); + Title.append(Tabbars1); + + local Tabbars2 = LenheartNewUI_TabbarsText(64, 27, "世界BOSS"); + Tabbars2.SetTextOffset(7, 4); + AddChild(Tabbars2); + Tabbars2.OnClick = function() { + ChangePage(1); + }.bindenv(this); + Title.append(Tabbars2); + + + //关闭按钮 + local CloseButton = LenheartNewUI_BaseButton(600, 5, 11, 12, "interface/lenheartwindowcommon.img", 276); + CloseButton.OnClick = function() { + this.Visible = false; + }.bindenv(this); + Childrens.append(CloseButton); + + //进入按钮 + local EnterButton = LenheartNewUI_BaseButton(PvfInfo.EnterButton.x, PvfInfo.EnterButton.y, PvfInfo.EnterButton.width, PvfInfo.EnterButton.height, "hud/worldboss.img", 1); + EnterButton.OnClick = function() { + SendPackEx({ + op = 20060007 + }) + }.bindenv(this); + EnterButton.SetCallBackFunc(function(Btn) { + if (Page == 1) + Btn.Visible = true; + else + Btn.Visible = false; + }.bindenv(this)) + Childrens.append(EnterButton); + + //刷新按钮 + local RefreshButton = LenheartNewUI_BaseButton(PvfInfo.RefreshButton.x, PvfInfo.RefreshButton.y, PvfInfo.RefreshButton.width, PvfInfo.RefreshButton.height, "hud/worldboss.img", 5); + RefreshButton.OnClick = function() { + + }.bindenv(this); + RefreshButton.SetCallBackFunc(function(Btn) { + if (Page == 1) + Btn.Visible = true; + else + Btn.Visible = false; + }.bindenv(this)) + Childrens.append(RefreshButton); + + + //左按钮 + local LeftButton = LenheartNewUI_BaseButton(PvfInfo.RankList.x + 150, PvfInfo.RankList.y + 284, 12, 9, "interface/lenheartwindowcommon.img", 511); + LeftButton.OnClick = function() { + if (CheckPage > 1) CheckPage--; + SendPackEx({ + op = 20060005, + Page = CheckPage + }) + }.bindenv(this); + LeftButton.SetCallBackFunc(function(Btn) { + if (Page == 1) + Btn.Visible = true; + else + Btn.Visible = false; + }.bindenv(this)) + Childrens.append(LeftButton); + //关闭按钮 + local RightButton = LenheartNewUI_BaseButton(PvfInfo.RankList.x + 196, PvfInfo.RankList.y + 284, 12, 9, "interface/lenheartwindowcommon.img", 521); + RightButton.OnClick = function() { + if (CheckPage< MaxPage) CheckPage++; + SendPackEx({ + op = 20060005, + page = CheckPage + }) + }.bindenv(this); + RightButton.SetCallBackFunc(function(Btn) { + if (Page == 1) + Btn.Visible = true; + else + Btn.Visible = false; + }.bindenv(this)) + Childrens.append(RightButton); + } + + //悬停层绘制Flag + HoverFlag = null; + + //绘制主界面 + function DrawMain(obj) { + //玩法简介 + if (Page == 0) { + WindowImg.DrawPng(0, X, Y); + } + //世界BOSS + else if (Page == 1) { + WindowImg.DrawPng(9, X, Y); + WindowImg.DrawPng(10, X + PvfInfo.RankList.x, Y + PvfInfo.RankList.y); + + //绘制查询页数 + local Str = CheckPage + "/" + MaxPage; + L_sq_DrawCode(Str, X + PvfInfo.RankList.x + 179 - LenheartTextClass.GetStringLength(Str) / 2, Y + PvfInfo.RankList.y + 283, sq_RGBA(230, 200, 155, 255), 0, 1); + + HoverFlag = null; + //绘制排行榜 + if (RankList) { + foreach(Pos, info in RankList) { + local Rank = info.rank.tostring(); + L_sq_DrawCode(Rank, X + PvfInfo.RankList.x + 18 - LenheartTextClass.GetStringLength(Rank) / 2, Y + PvfInfo.RankList.y + 10 + (Pos * 20), sq_RGBA(230, 200, 155, 255), 0, 1); + + local TeamName = info.teamName; + L_sq_DrawCode(TeamName, X + PvfInfo.RankList.x + 70 - LenheartTextClass.GetStringLength(TeamName) / 2, Y + PvfInfo.RankList.y + 10 + (Pos * 20), sq_RGBA(230, 200, 155, 255), 0, 1); + + local Damage = info.totalDamage.tostring(); + L_sq_DrawCode(Damage, X + PvfInfo.RankList.x + 150 - LenheartTextClass.GetStringLength(Damage) / 2, Y + PvfInfo.RankList.y + 10 + (Pos * 20), sq_RGBA(230, 200, 155, 255), 0, 1); + + if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + PvfInfo.RankList.x, Y + PvfInfo.RankList.y + (Pos * 20), 200, 20)) { + HoverFlag = Pos; + } + } + } + + //悬停层 + if (HoverFlag != null) { + L_sq_DrawWindow(X + PvfInfo.RankList.x, Y + PvfInfo.RankList.y + (HoverFlag * 20), 200, 100, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + L_sq_DrawWindow(X + PvfInfo.RankList.x, Y + PvfInfo.RankList.y + (HoverFlag * 20), 200, 100, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); + + L_sq_DrawCode(RankList[HoverFlag].teamName, X + PvfInfo.RankList.x + 104 - LenheartTextClass.GetStringLength(RankList[HoverFlag].teamName) / 2, Y + PvfInfo.RankList.y + (HoverFlag * 20) + 14, sq_RGBA(83, 205, 255, 255), 0, 1); + local Yoffset = 40; + for (local Pos = 0; Pos < 4; Pos++) { + local info = { + name = "无队员", + job = "无职业", + damage = "0", + color = sq_RGBA(174, 174, 174, 255) + } + if(RankList[HoverFlag].team.len() > Pos) { + info = RankList[HoverFlag].team[Pos]; + info.color <- sq_RGBA(218, 248, 129, 255); + } + local Name = info.name; + L_sq_DrawCode(Name, X + PvfInfo.RankList.x + 28 - LenheartTextClass.GetStringLength(Name) / 2, Y + PvfInfo.RankList.y + (HoverFlag * 20) + Yoffset + (Pos * 20), info.color, 0, 1); + local Job = info.job; + L_sq_DrawCode(Job, X + PvfInfo.RankList.x + 110 - LenheartTextClass.GetStringLength(Job) / 2, Y + PvfInfo.RankList.y + (HoverFlag * 20) + Yoffset + (Pos * 20), info.color, 0, 1); + + local Damage = info.damage.tostring(); + L_sq_DrawCode(Damage, X + PvfInfo.RankList.x + 202 - LenheartTextClass.GetStringLength(Damage), Y + PvfInfo.RankList.y + (HoverFlag * 20) + Yoffset + (Pos * 20), info.color, 0, 1); + } + } + } + } + + + function DrawTime(obj) { + if (!TiemrCache || !Timer) return; + local DrawX = PvfInfo.Countdown.x; + local DrawY = PvfInfo.Countdown.y; + //背景绘制 + WindowTimeImg.DrawPng(1, DrawX, DrawY); + WindowTimeImg.DrawPng(0, DrawX, DrawY + 2); + + //时间绘制 + local DrawTime = TiemrCache - (Clock() - Timer); + local TotalSeconds = DrawTime / 1000; + local Minutes = (TotalSeconds % 3600) / 60; + local Seconds = (TotalSeconds % 3600) % 60; + local Millisecond = DrawTime % 1000 / 10; + + local Offset = 43; + DrawNum(format("%02d", Minutes), Offset); + Offset += 40; + WindowTimeNumImg.DrawPng(10, DrawX + Offset - 5, DrawY + 27); + DrawNum(format("%02d", Seconds), Offset); + Offset += 40; + WindowTimeNumImg.DrawPng(10, DrawX + Offset - 5, DrawY + 27); + DrawNum(format("%02d", Millisecond), Offset); + } + + function DrawNum(time, Xoffset) { + local DrawX = PvfInfo.Countdown.x; + local DrawY = PvfInfo.Countdown.y; + for (local i = 0; i< time.len(); i++) { + local DrawNum = time.slice(i, i + 1); + WindowTimeNumImg.DrawPng(DrawNum.tointeger(), DrawX + Xoffset + (i * 15), DrawY + 21); + } + } + + function Show(obj) { + DrawMain(obj); + LenheartNewUI_Windows.Show(obj); + + } + + //进入副本初始化包Flag + EnterMapPackFlag = false; + //发送伤害包Flag + SendDamagePackFlag = false; + + //副本逻辑 + function DungeonLogic() { + local stage = sq_GetGlobaludpModuleStage(); + local mapIndex = sq_GetMapIndex(stage); + local dungeon = sq_GetDungeonByStage(stage); + local dungeonIndex = sq_GetDuegonIndex(dungeon); + if (dungeonIndex == BaseInfo.dgn && mapIndex == BaseInfo.map) { + if (!EnterMapPackFlag) { + EnterMapPackFlag = true; + SendPackEx({ + op = 20060013 + }) + } + SendDamagePackFlag = true; + } else { + SendDamagePackFlag = false; + TiemrCache = null; + Timer = null; + } + } + + //发送伤害计时器 + SendDamageT = 0; + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X, Y); + if (!BaseInfo) return; + DungeonLogic(); + DrawTime(obj); + + //在副本中需要发送伤害的时候 + if (TotalDamage) { + if (SendDamagePackFlag) { + SendDamageT += Rindro_Duration; + if (SendDamageT > 5000) { + SendDamageT = 0; + SendPackEx({ + op = 20060017, + Damage = TotalDamage.Value + }) + TotalDamage = null; + } + } + //结束时再发一次 + else { + SendPackEx({ + op = 20060017, + Damage = TotalDamage.Value + }) + TotalDamage = null; + } + } + } + + function OpenCallBack() { + Visible = true; + + SendPackEx({ + op = 20060005, + page = 1 + }) + } +} + + +function Lenheart_WorldBoss_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("WorldBoss_Obj")) { + RootTab.rawset("WorldBoss_Obj", true); + local Win = LenheartNewUI_CreateWindow(WorldBossC, "阿拉德守卫战窗口", ((getroottable().Rindro_Scr_Width - 620) / 2).tointeger(), 64, 620, 430, 28); + EventList_Obj.AddEvent("阿拉德守卫战", 1001, Win); + } +} + +getroottable()["LenheartFuncTab"].rawset("WorldBossFuncN", Lenheart_WorldBoss_Fun); + diff --git a/folder-alias.json b/folder-alias.json index 8b1b8e8..a9409f7 100644 --- a/folder-alias.json +++ b/folder-alias.json @@ -115,5 +115,29 @@ }, "Project/Luke": { "description": "卢克" + }, + "Project/Recovery": { + "description": "回收系统" + }, + "Project/EventShop": { + "description": "活动商店" + }, + "Project/OddsPlugins": { + "description": "杂项" + }, + "Project/OddsPlugins/TransformEqu.nut": { + "description": "变换装备飘属性更改小字" + }, + "Project/MonsterEx": { + "description": "高级怪物系统" + }, + "Project/Achievement": { + "description": "成就系统" + }, + "Project/Scheming": { + "description": "心机牌" + }, + "Project/WorldBoss": { + "description": "世界BOSS" } } \ No newline at end of file