/* 文件名:Rindro_LukeFightSituation.nut 路径:Plugins/Rindro_Luke/Rindro_LukeFightSituation.nut 创建日期:2024-04-10 21:28 文件用途:卢克攻坚战况 */ //复选框 class RinDro_Luke_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 Rindro_LukeFightSituationC extends LenheartNewUI_Windows { luke_game_navigation = Rindro_Image("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img"); luke_state_full = Rindro_Image("interface2/raid/luke/luke_game_navigation/luke_state_full/luke_state_full.img"); newantondungeoninfo = Rindro_Image("hud/newantondungeoninfo.img"); newantondungeoninfo2 = Rindro_Image("hud/newantondungeoninfo2.img"); Visible = false; //调试模式 DeBugMode = true; //透明度 AlphaValue = 1.0; //攻坚战况信息 Info = null; //战况消息外部窗口 ExternalWindow = null; //选择进入地下城指针状态 SelectDgnMarkFlag = 0; //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], ] MapIndexTable = null; //判断孵化进入的操作表 MapMoveMark = false; //副本中移动的标志 HuoShanMonserTable = null; //火山怪物投放表 //获取攻坚信息 function GetInfo() { local T = { op = 20084053, } SendPackEx(T); } //火山怪物投放包 function HuoShanMonsterEvent(Chunk) { local Info = Json.Decode(Chunk); if (sq_GetCurrentModuleType() == 3) { local obj = sq_GetMyMasterCharacter(); obj = sq_ObjectToSQRCharacter(obj); obj.sq_SendCreatePassiveObjectPacket(HuoShanMonserTable[Info.FuHuaId], 0, 120, 1, 0); } } //设置伤害值回调 function SetCharacterDamageRate(Chunk) { local Jso = Json.Decode(Chunk); local Rate = Jso.damageMarkup.tofloat() / 100.0; //伤害设置 if (getroottable().rawin("LenheartRaidModuleDamageRate")) { getroottable()["LenheartRaidModuleDamageRate"] = Rate; } } function setLukeRaidBoss_DamageHp(Chunk) { local Jso = Json.Decode(Chunk); local obj = sq_GetMyMasterCharacter(); obj = sq_ObjectToSQRCharacter(obj); local mob = LukeRaid_getMonsterObject(obj, 664670); if (mob) { local mobMaxhp = mob.getHpMax(); local mobhp = mob.getHp(); local newhp = mobhp - (mobMaxhp.tofloat() * (Jso.ReduceHp.tofloat() / 100.0)).tointeger(); mob.setHp(newhp, null, true); } } constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { Childrens = []; Pack_Control.rawset(20084402, setLukeRaidBoss_DamageHp.bindenv(this)); //初始化判断孵化进入操作表 MapIndexTable = {}; MapIndexTable.rawset(33100, 7); MapIndexTable.rawset(33103, 8); MapIndexTable.rawset(33119, 9); MapIndexTable.rawset(33116, 10); //火山怪物投放表 HuoShanMonserTable = {}; HuoShanMonserTable.rawset(1, 202210052); HuoShanMonserTable.rawset(2, 202210053); HuoShanMonserTable.rawset(3, 202210054); HuoShanMonserTable.rawset(4, 202210055); Pack_Control.rawset(20084040, HuoShanMonsterEvent.bindenv(this)); Pack_Control.rawset(20084030, SetCharacterDamageRate.bindenv(this)); //注册控件 RegisterWidget(); LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); ExternalWindow = Rindro_Luke_FightSituatioExternalC("卢克攻坚战况表外部窗口", getroottable().Rindro_Scr_Width.tointeger() - 103, 8, 103, 22, 0); ExternalWindow.AddParentWin(this); GetInfo(); } //副本List DgnList = null; //初始化信息 function InitInfo(InfoObj) { Info = InfoObj; //取出副本信息 InfoObj = InfoObj.dunList; if ("DanSheng_Buff" in Info) DanShengBuffObject = Info.DanSheng_Buff; //诞生圣所BUFF对象 if ("ManYan_Buff" in Info) ManYanBuffObject = Info.ManYan_Buff; //蔓延圣所BUFF对象 if ("YanMie_Buff" in Info) YanMieBuffObject = Info.YanMie_Buff; //湮灭圣所BUFF对象 DgnList = []; //当前构造时间 local Time_C = Clock(); foreach(DgnObj in InfoObj) { //诞生 if (DgnObj.id == 1) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 100; DgnObj.Y <- 226; DgnObj.BloodType <- 3; DgnObj.BloodImg <- 2; DgnObj.NameIdx <- 0; } //湮灭 else if (DgnObj.id == 2) { DgnObj.BackGroundIdx <- 3; DgnObj.X <- 448; DgnObj.Y <- 95; DgnObj.BloodType <- 3; DgnObj.BloodImg <- 2; DgnObj.NameIdx <- 1; } //蔓延 else if (DgnObj.id == 3) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 448; DgnObj.Y <- 376; DgnObj.BloodType <- 3; DgnObj.BloodImg <- 2; DgnObj.NameIdx <- 2; } //光之入口 else if (DgnObj.id == 4) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 170; DgnObj.Y <- 144; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 9; } //暗之入口 else if (DgnObj.id == 5) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 170; DgnObj.Y <- 314; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 10; } //光祭坛 else if (DgnObj.id == 6) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 310; DgnObj.Y <- 170; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 3; } //暗祭坛 else if (DgnObj.id == 7) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 310; DgnObj.Y <- 288; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 4; } //力量 else if (DgnObj.id == 8) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 460; DgnObj.Y <- 170; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 5; } //智慧 else if (DgnObj.id == 9) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 460; DgnObj.Y <- 288; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 6; } //能源控制 else if (DgnObj.id == 10) { DgnObj.BackGroundIdx <- 6; DgnObj.Timer <- Time_C; DgnObj.X <- 385; DgnObj.Y <- 229; DgnObj.BloodImg <- 3; DgnObj.BloodType <- 1; DgnObj.NameIdx <- 18; DgnObj.type <- 1; } //光圣殿 else if (DgnObj.id == 11) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 520; DgnObj.Y <- 84; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 12; } //暗圣殿 else if (DgnObj.id == 12) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 520; DgnObj.Y <- 378; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 14; } //光王座 else if (DgnObj.id == 13) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 520; DgnObj.Y <- 200; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 16; } //暗王座 else if (DgnObj.id == 14) { DgnObj.BackGroundIdx <- 3; DgnObj.Timer <- Time_C; DgnObj.X <- 520; DgnObj.Y <- 200; DgnObj.BloodType <- 1; DgnObj.BloodImg <- 3; DgnObj.NameIdx <- 16; } //能源储藏 else if (DgnObj.id == 15) { DgnObj.BackGroundIdx <- 6; DgnObj.Timer <- Time_C; DgnObj.X <- 385 + 230; DgnObj.Y <- 229; DgnObj.BloodImg <- 3; DgnObj.BloodType <- 1; DgnObj.NameIdx <- 18; DgnObj.type <- 1; } DgnList.append(clone(DgnObj)); } } BaseSituationBtn = null; //简易战况表是否开启 BaseSituationFlag = 1; function RegisterWidget() { //进入地下城 local GoDgnButton = LenheartNewUI_BaseButton(578, 519, 95, 29, "hud/newantondungeonbutton.img", 6); GoDgnButton.OnClick = function() { SelectDgnMarkFlag = 1; }.bindenv(this); Childrens.append(GoDgnButton); //返回城镇 local ReturnTownButton = LenheartNewUI_BaseButton(678, 519, 95, 29, "hud/newantondungeonbutton.img", 9); ReturnTownButton.OnClick = function() { local T = { op = 20084305, } SendPackEx(T); }.bindenv(this); Childrens.append(ReturnTownButton); //简易战况表复选框 BaseSituationBtn = RinDro_Luke_LenheartNewUI_SwitchButton(220, 20); BaseSituationBtn.State = 1; 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); // //关闭按钮 // local CloseButton = LenheartNewUI_BaseButton(696, 20, 103, 22, "hud/newantondungeonbutton.img", 3); // CloseButton.OnClick = function() { // CloseWindow(); // CloseFlag = Clock(); // }.bindenv(this); // Childrens.append(CloseButton); } function DrawParty() { //绘制待命房间 luke_game_navigation.DrawPng(33, X + 20, Y + 488); //绘制我的队伍 if (RinDro_Luke_Obj.MyRaidTeam) { local Mt = RinDro_Luke_Obj.MyRaidTeam; if (!Mt) return; local PartyMaster; local PosI = 0; foreach(index, PartyMasterIcon in Mt.MembersList) { if (!("Standby" in PartyMasterIcon.InfoObj) || !PartyMasterIcon.InfoObj.Standby) continue; local XOffset = 0; 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(); //裁切结束 } PosI++; } } } PartyBackground = [ [10, -65, 24, -60, 25, 25], [9, -65, 0, -60, 1, 1], [11, -65, 42, -60, 48, 49], [8, -65, -24, -60, -24, -23], [12, -65, 64, -60, 71, 72], ] //绘制副本 function DrawDungeon(DgnObj) { //普通类型副本 if (DgnObj.type == 0) { //绘制血条 if ("hp" in DgnObj && "BloodType" in DgnObj) { //已经死亡 if (DgnObj.hp == DgnObj.BloodType) { //绘制副本血槽背景 DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", DgnObj.BackGroundIdx, X + DgnObj.X - 10, Y + DgnObj.Y - 11); DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", 6, X + DgnObj.X - 10, Y + DgnObj.Y - 11); } else { DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", 10, X + DgnObj.X - 10, Y + DgnObj.Y - 11); //绘制副本血槽背景 DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", DgnObj.BackGroundIdx, X + DgnObj.X - 10, Y + DgnObj.Y - 11); DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", 4, X + DgnObj.X - 10, Y + DgnObj.Y - 11); //得出血条类型需要的img local ImgIdx = DgnObj.BloodImg; //绘制血条 DrawImg("hud/newlukedungeonblood.img", ImgIdx - DgnObj.hp, X + DgnObj.X, Y + DgnObj.Y); //绘制副本名称 DrawImg("interface2/raid/luke/luke_game_navigation/dungeon_name/luke_dungeon_name.img", DgnObj.NameIdx, X + DgnObj.X - 16, Y + DgnObj.Y + 70); } } } //进度条类型副本 else if (DgnObj.type == 1) { //绘制副本血槽背景 if ("gr" in DgnObj && DgnObj.gr == 1) { DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", 18, X + DgnObj.X - 10, Y + DgnObj.Y - 11); } else { DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", DgnObj.BackGroundIdx, X + DgnObj.X - 10, Y + DgnObj.Y - 11); } //如果存活 if (DgnObj.state == 0) { local Remainder = DgnObj.time - (Clock() - DgnObj.Timer); local Rate = Remainder.tofloat() / DgnObj.maxTime; local Idx = (Rate * 100.0).tointeger(); if (Idx< 0) Idx = 0; if (DgnObj.maxTime == 0) Idx = 99; //绘制时间进度条 DrawImg("hud/newantondungeonloading3.img", 99 - Idx, X + DgnObj.X - 4, Y + DgnObj.Y - 4); //绘制时间 local ttt = (Remainder / 1000.0).tointeger(); local TimeStr = ttt.tostring(); if (ttt <= 0) TimeStr = "∞"; L_sq_DrawCode(TimeStr, X + DgnObj.X + 35 - LenheartTextClass.GetStringLength(TimeStr) / 2, Y + DgnObj.Y + 36, sq_RGBA(255, 255, 255, 255), 0, 1); } else { local Remainder = DgnObj.time - (Clock() - DgnObj.Timer); local Rate = Remainder.tofloat() / DgnObj.maxTime; local Idx = (Rate * 100.0).tointeger(); //绘制时间进度条 L_sq_DrawImg("hud/newantondungeonloading3.img", 99 - Idx, X + DgnObj.X - 4, Y + DgnObj.Y - 4, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0); //绘制时间 local TimeStr = (Remainder / 1000.0).tointeger().tostring(); L_sq_DrawCode(TimeStr, X + DgnObj.X + 35 - LenheartTextClass.GetStringLength(TimeStr) / 2, Y + DgnObj.Y + 36, sq_RGBA(255, 85, 0, 255), 0, 1); } } if (DgnObj.id == 4) { DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", 101, X + DgnObj.X + 60, Y + DgnObj.Y + 23); } else if (DgnObj.id == 5) { DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", 102, X + DgnObj.X + 60, Y + DgnObj.Y + 18); } else if (DgnObj.id == 6) { DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", 103, X + DgnObj.X + 60, Y + DgnObj.Y + 24); } else if (DgnObj.id == 7) { DrawImg("interface2/raid/luke/luke_game_navigation/luke_game_navigation.img", 104, X + DgnObj.X + 60, Y + DgnObj.Y + 24); } else if (DgnObj.id == 13) { DrawImg("interface2/raid/luke/luke_game_navigation/dungeon_name/luke_dungeon_name.img", 13, X + DgnObj.X - 15, Y + DgnObj.Y + 94); } else if (DgnObj.id == 14) { DrawImg("interface2/raid/luke/luke_game_navigation/dungeon_name/luke_dungeon_name.img", 15, X + DgnObj.X - 15, Y + DgnObj.Y + 94); } else if (DgnObj.id == 15) { DrawImg("interface2/raid/luke/luke_game_navigation/dungeon_name/luke_dungeon_name.img", 17, X + DgnObj.X - 15, Y + DgnObj.Y + 76); } //绘制队伍信息 local PartyCount = DgnObj.Party.len(); for (local i = 0; i< PartyCount; i++) { local ImgInfo = PartyBackground[i]; DrawImg("hud/newantondungeoninfo.img", ImgInfo[0], X + DgnObj.X + ImgInfo[1], Y + DgnObj.Y + ImgInfo[2]); local cid = DgnObj.Party[i][0]; local count = DgnObj.Party[i][1] - 1; local CharacV = RinDro_Luke_Obj.Portrait[cid]; 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(); //裁切结束 } //绘制队伍人数 for (local z = 0; z< count; z++) { DrawImg("hud/newantondungeoninfo.img", 13, X + DgnObj.X + ImgInfo[3] + 40, Y + DgnObj.Y + 4 + ImgInfo[5] + (z * 6)); } //绘制队伍编号 DrawImg("hud/newantondungeonpartymark.img", CharacV.TeamId, X + DgnObj.X + ImgInfo[3] - 3, Y + DgnObj.Y + 3 + ImgInfo[4]); } } DgnIdTName = { d1 = "诞生之圣所", d2 = "湮灭之圣所", d3 = "蔓延之圣所", d4 = "光明祭坛入口", d5 = "黑暗祭坛入口", d6 = "光明祭坛", d7 = "黑暗祭坛", d8 = "力量祭坛", d9 = "智慧祭坛", d10 = "能源控制室", d11 = "光之圣殿", d12 = "暗之圣殿", d13 = "机械王座: 光", d14 = "机械王座: 暗", d15 = "能源储藏室", } //高级绘制文字(带换行) function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc) { 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 DrawSimpleSituation() { if (!BaseSituationFlag || !DgnList) return; local X = 0; //绘制背景 foreach(Index, d_obj in DgnList) { local Obj_X = 0; local Obj_Y = 0 + (Index * 35); local ImgIdX = 80; //TODO 长文字到时候用81 DrawImg("hud/newantondungeoninfo2.img", ImgIdX, X + Obj_X, Y + 300 + Obj_Y); } //绘制上层 foreach(Index, d_obj in DgnList) { local Obj_X = 0; local Obj_Y = 0 + (Index * 35); //绘制队伍底槽 for (local i = 0; i< 4; i++) { DrawImg("hud/partytype.img", 22, X + 2 + Obj_X + (i * 24), Y + 300 + Obj_Y + 20); } foreach(pos, pobj in d_obj.Party) { local cid = pobj[0]; local CharacV = RinDro_Luke_Obj.Portrait[cid]; //绘制队伍编号 DrawImg("hud/partytype.img", 1 + CharacV.TeamId, X + 2 + Obj_X + (pos * 24), Y + 300 + Obj_Y + 20); } local DgnName = DgnIdTName["d" + d_obj.id]; local Yoffset = 16; //TODO 长文字到时候改偏移 local RGBA = sq_RGBA(255, 177, 0, 250); if (d_obj.id != 5) RGBA = sq_RGBA(255, 255, 255, 255); //绘制名字 L_sq_DrawCode_Ex(DgnName, X + 102, Y + 305 + Obj_Y + Yoffset, RGBA, 0, 1); //绘制血槽背景 DrawImg("hud/newantondungeoninfo2.img", 82, X + Obj_X + 2, Y + 300 + Obj_Y + 2); local BloodIdx = 83; //TODO 不一样的血条到时候改血条 local Rate = (88.0 - 88.0 * (d_obj.hp.tofloat() / d_obj.BloodType.tofloat())).tointeger(); if (d_obj.type == 1) { local Remainder = d_obj.time - (Clock() - d_obj.Timer); local RateBuf = Remainder.tofloat() / d_obj.maxTime; Rate = (RateBuf * 88.0).tointeger(); } else if (d_obj.type == 2) { Rate = 88; } else if (d_obj.type == 3) { Rate = 88; } //绘制生命值 setClip(X + Obj_X + 6, Y + 300 + Obj_Y + 6, X + Obj_X + 6 + Rate, Y + 300 + Obj_Y + 6 + 9); //开始裁切 DrawImg("hud/newantondungeoninfo2.img", BloodIdx, X + Obj_X + 6, Y + 300 + Obj_Y + 6); releaseClip(); //裁切结束 } } //绘制主界面 function DrawMain(obj) { //绘制背景框 luke_game_navigation.DrawPng(2, X, Y - 18); //绘制背景图 luke_state_full.DrawPng(RinDro_Luke_Obj.MyRaidState == 3 ? 1 : 0, X, Y - 18); //绘制简易战况表 newantondungeoninfo2.DrawPng(62, X + 220, Y + 19); //绘制待命房间 DrawParty(); //绘制小队移动 newantondungeoninfo.DrawPng(14, X + 570, Y + 488); if (DgnList) { foreach(d_obj in DgnList) { DrawDungeon(d_obj); } } //绘制主界面复活币剩余 newantondungeoninfo2.DrawPng(85, X + 45 + 350, Y + 488); //绘制主界面复活币剩余 local CoinCount = (RinDro_Luke_Obj.FightConfig.rebornNum - Info.ResurrectionNum).tostring(); for (local i = 0; i< 2; i++) { if (CoinCount.len() >= (i + 1)) DrawImg("hud/newantonrewardtime.img", CoinCount.slice(0 + i, 1 + i).tointeger(), X + 45 + 75 + (i * 18) + 350, Y + 515); } } 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) { DrawMain(obj); LenheartNewUI_Windows.Show(obj); //结束时间 if (RinDro_Luke_Obj.EndTime) { DrawFightTime(obj); } } //攻坚时间 function DrawFightTime(obj) { local X = ((getroottable().Rindro_Scr_Width - 146 - 103 - 550)).tointeger() L_sq_DrawImg("hud/newantondungeoninfo.img", 1, X + 542, Y); L_sq_DrawImg("hud/newantondungeoninfo.img", 2, X + 542 + 38, Y + 2); if (RinDro_Luke_Obj.EndTime != null) { if (RinDro_Luke_Obj.EndTime< 0) RinDro_Luke_Obj.EndTime = 0; local RealTime = RinDro_Luke_Obj.EndTime - (Clock() - RinDro_Luke_Obj.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 X1 = 551; local X2 = X1 + 18; local Offset = 0; L_sq_DrawImg("hud/newantondungeonnum.img", hours.slice(0, 1).tointeger(), X + X1 + Offset, Y + 28); L_sq_DrawImg("hud/newantondungeonnum.img", hours.slice(1).tointeger(), X + X2 + Offset, Y + 28); Offset += 46; L_sq_DrawImg("hud/newantondungeonnum.img", minutes.slice(0, 1).tointeger(), X + X1 + Offset, Y + 28); L_sq_DrawImg("hud/newantondungeonnum.img", minutes.slice(1).tointeger(), X + X2 + Offset, Y + 28); Offset += 46; L_sq_DrawImg("hud/newantondungeonnum.img", seconds.slice(0, 1).tointeger(), X + X1 + Offset, Y + 28); L_sq_DrawImg("hud/newantondungeonnum.img", seconds.slice(1).tointeger(), X + X2 + Offset, Y + 28); } } //判断是否可重合 function PosEvent(Pos, MPos) { local Offset = abs(Pos - MPos); if (Offset< 10) return true; else return false; } //判断自身地图相关事件 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; } } FightLogicTimer = Clock(); MapVar = null; //地图暂存器 DanShengBuffObject = null; //诞生圣所BUFF对象 ManYanBuffObject = null; //蔓延圣所BUFF对象 YanMieBuffObject = null; //湮灭圣所BUFF对象 //获取BUFF对应的OBJ编号 function GETBUFFOBJINDEX(num) { switch (num) { case 0: return 537170; case 1: return 537190; case 2: return 537210; case 4: return 537270; case 6: return 537300; case 8: return 537240; case 10: return 537330; case 11: return 537360; case 12: return 537370; } } function LukeRaid_getMonsterObject(obj, idNeed) { if (!obj) return null; local objectManager = obj.getObjectManager(); if (objectManager == null) return null; for (local i = 0; i< objectManager.getCollisionObjectNumber(); i += 1) { local object = objectManager.getCollisionObject(i); if (object && object.isObjectType(OBJECTTYPE_MONSTER)) { local object2 = sq_GetCNRDObjectToCollisionObject(object); local id = object2.getCollisionObjectIndex(object2); if (id == idNeed) { return object2; } } } return null; } function getLukeRaid_QuattuorManusMK2ChangeLayer(obj) { local mob = LukeRaid_getMonsterObject(obj, 560650); if (mob) sq_ChangeDrawLayer(mob, ENUM_DRAWLAYER_MIDDLEBACK); } //卢克BUFF obj 机制 function MachineLukeBuffPassObject(obj) { obj = sq_GetCNRDObjectToSQRCharacter(obj); local stage = sq_GetGlobaludpModuleStage(); local dungeon = sq_GetDungeonByStage(stage); local dungeonIndex = sq_GetDuegonIndex(dungeon); local MapIndex = sq_GetMapIndex(stage); if (MapIndex != -1) { if (!MapVar || MapVar != MapIndex) { //同步地图暂存器 MapVar = MapIndex; //诞生之圣所 if (dungeonIndex == 15154 || dungeonIndex == 15155 || dungeonIndex == 15156) { local objindex = GETBUFFOBJINDEX(DanShengBuffObject[0]); obj.sq_SendCreatePassiveObjectPacket(objindex, 0, 120, 1, 0); } //湮灭之圣所 if (dungeonIndex == 15157 || dungeonIndex == 15158 || dungeonIndex == 15159) { local objindex = GETBUFFOBJINDEX(YanMieBuffObject[0]); obj.sq_SendCreatePassiveObjectPacket(objindex, 0, 120, 1, 0); } //蔓延之圣所 if (dungeonIndex == 15160 || dungeonIndex == 15161 || dungeonIndex == 15162) { local objindex = GETBUFFOBJINDEX(ManYanBuffObject[0]); obj.sq_SendCreatePassiveObjectPacket(objindex, 0, 120, 1, 0); } } } local T = Clock() - FightLogicTimer; if (T >= 500) { FightLogicTimer = Clock(); getLukeRaid_QuattuorManusMK2ChangeLayer(obj); //遍历对象管理器并执行操作 local objectManager = obj.getObjectManager(); if (!objectManager) { _20084401_Flag = false; return; } local CollisionObjectNumber = objectManager.getCollisionObjectNumber(); for (local i = 0; i< CollisionObjectNumber; i += 1) { local object = objectManager.getCollisionObject(i); local ObjectIndex = object.getCollisionObjectIndex(); if (ObjectIndex == 202303004) { if (!_20084401_Flag) { _20084401_Flag = true; local T = { op = 20084401 } SendPackEx(T); } } } } } _20084401_Flag = false; //逻辑入口 function Proc(obj) { LenheartNewUI_Windows.SyncPos(X, Y); MapEventTest(obj); if (SelectDgnMarkFlag) { R_Mouse.SetType(151); } //卢克BUFFObj 机制 MachineLukeBuffPassObject(obj); } //鼠标左键弹起回调 function OnMouseLbUp(MousePos_X, MousePos_Y) { if (SelectDgnMarkFlag != 0) { SelectDgnMarkFlag = 0; R_Mouse.SetType(0); foreach(d_obj in DgnList) { if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + d_obj.X, Y + d_obj.Y, 71, 71)) { local T = { op = 20084301, DunId = d_obj.id } SendPackEx(T); //关闭攻坚战况表窗口 CloseWindow(); //关闭攻坚队窗口 RinDro_Luke_Obj.PartyWindow_Object.CloseWindow(); //关闭攻坚队大厅窗口 RinDro_Luke_Obj.PartyHallWindow_Object.CloseWindow(); } } } LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y); } MainButton = null; CloseMainButton = null; CloseFlag = false; //顶层绘制 function TopDraw(obj) { //界面未打开 if (!this.Visible) { //在甲板 if (RinDro_Luke_Obj.BaseConfig && "channel_index" in RinDro_Luke_Obj.BaseConfig && RinDro_Luke_Obj.BaseConfig.channel_index.find("19") && "town_index" in RinDro_Luke_Obj.BaseConfig && L_sq_GetTownIndex() == RinDro_Luke_Obj.BaseConfig.town_index && (RinDro_Luke_Obj.MyRaidState == 1 || RinDro_Luke_Obj.MyRaidState == 3) && !CloseFlag) { } if (CloseFlag) { if (Clock() - CloseFlag >= 10) CloseFlag = false; } } else { } } } class Rindro_Luke_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, 103, 22, "hud/newantondungeonbutton.img", 0); 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 = 0; } else { button.Idx = 3; } }.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_Luke_Obj.EndTime) { Window.DrawFightTime(obj); } Window.DrawSimpleSituation(); } //逻辑入口 function Proc(obj) { LenheartNewUI_Windows.SyncPos(X, Y); //在甲板 if (RinDro_Luke_Obj.BaseConfig && "channel_index" in RinDro_Luke_Obj.BaseConfig && RinDro_Luke_Obj.BaseConfig.channel_index.find("19") && "town_index" in RinDro_Luke_Obj.BaseConfig && L_sq_GetTownIndex() == RinDro_Luke_Obj.BaseConfig.town_index && (RinDro_Luke_Obj.MyRaidState == 1 || RinDro_Luke_Obj.MyRaidState == 3)) { Visible = true; } else { Visible = false; } } } getroottable().rawdelete("RinDro_Luke_Obj");