diff --git a/Base/CallBack/PackControl.nut b/Base/CallBack/PackControl.nut index 2915e8a..249f426 100644 --- a/Base/CallBack/PackControl.nut +++ b/Base/CallBack/PackControl.nut @@ -5,6 +5,7 @@ 文件用途: */ Pack_Control <- {} +Pack_Hex_Control <- {} Pack_DPS_Control <- {} function Register_DPS_Pack(Id, Func) { @@ -52,12 +53,16 @@ function Sq_Pack_ControlLocal(Chunk) { } //字节流包 -function Sq_BlobPack_Control(Size,Pointer) -{ +function Sq_BlobPack_Control(Size, Pointer) { local Pack = Packet(); - Pack.Load(Pointer,Size); - // print(Pack.GetInt()); - // print(Pack.GetInt()); + Pack.Load(Pointer, Size); + local Op = Pack.GetInt(); + //读取位置回到原点 + // Pack.Seek(0); + + if (Pack_Hex_Control.rawin(Op)) { + Pack_Hex_Control[Op](Pack); + } } diff --git a/Base/_Tool/Animation_Class.nut b/Base/_Tool/Animation_Class.nut index d8e0e98..e92140d 100644 --- a/Base/_Tool/Animation_Class.nut +++ b/Base/_Tool/Animation_Class.nut @@ -497,7 +497,11 @@ class Rindro_Draw_Character { 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); + try { + AniInfo.Ani.DrawIndex(X + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].x, Y + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].y, 0); + } catch (exception) { + + } } releaseClip(); //裁切结束 } diff --git a/Base/_Tool/BaseTool_Class.nut b/Base/_Tool/BaseTool_Class.nut index 5466d7e..20e9fe9 100644 --- a/Base/_Tool/BaseTool_Class.nut +++ b/Base/_Tool/BaseTool_Class.nut @@ -148,6 +148,11 @@ class Rindro_BaseToolClass { Pack_Control.rawset(Id, CallBack); } + function RegisterHexPack(Id, CallBack) + { + Pack_Hex_Control.rawset(Id, CallBack); + } + //绘制简易静态Ani // obj -- ani路径 -- X -- Y -- 第几帧 -- ani名字 function T_DrawStayAni(obj, aniFileName, x, y, index, aniname) { local SelectAni = obj.getVar().GetAnimationMap(aniname, aniFileName); diff --git a/Base/_Tool/MemoryClass.nut b/Base/_Tool/MemoryClass.nut index 3d6b156..9e4bef3 100644 --- a/Base/_Tool/MemoryClass.nut +++ b/Base/_Tool/MemoryClass.nut @@ -36,13 +36,11 @@ class NativePointer { } function add(intoffset) { - this.C_Object = L_sq_I2P(L_sq_P2I(this.C_Object) + intoffset); - return this; + return NativePointer(L_sq_I2P(L_sq_P2I(this.C_Object) + intoffset)); } function sub(intoffset) { - this.C_Object = L_sq_I2P(L_sq_P2I(this.C_Object) - intoffset); - return this; + return NativePointer(L_sq_I2P(L_sq_P2I(this.C_Object) - intoffset)); } function writeByteArray(arr) { diff --git a/Base/_Tool/Packet_Class.nut b/Base/_Tool/Packet_Class.nut index 3c9bdb1..61c4b47 100644 --- a/Base/_Tool/Packet_Class.nut +++ b/Base/_Tool/Packet_Class.nut @@ -4,10 +4,10 @@ 创建日期:2025-06-30 09:24 文件用途:字节包 */ -class Packet{ +class Packet { //读取指针位置 - ReadIndex = 0; + Index = 0; //内存数据 Pointer = null; @@ -16,24 +16,46 @@ class Packet{ //加载包 - function Load(P,S) - { + function Load(P, S) { Pointer = P; Size = S; } + //读取指针跳转 + function Seek(...) { + local Pos = vargv[0]; + local Mode = 0; + if(vargc > 1) Mode = vargv[1]; + if (Mode == 0) { + Index = Pos; + } else if (Mode == 1) { + Index += Pos; + } else if (Mode == 2) { + Index -= Pos; + } + } + //读取整形 - function GetInt() - { + function GetInt() { local Size_t = 4; - if(ReadIndex + Size_t > Size){ + if (Index + Size_t > Size) { print("读取包越界!"); return; } - local Buf = NativePointer(Pointer).add(ReadIndex).readInt(); - ReadIndex += Size_t; + local Buf = NativePointer(Pointer).add(Index).readInt(); + Index += Size_t; return Buf; } - //读取 + //读取流 + function GetStream(Size_t) { + if (Index + Size_t > Size) { + print("读取包越界!"); + return; + } + local Np = NativePointer(Pointer).add(Index); + Np.Size = Size_t; + Index += Size_t; + return Np; + } } diff --git a/FileConfig.json b/FileConfig.json index 586e64d..5993b4f 100644 --- a/FileConfig.json +++ b/FileConfig.json @@ -26,6 +26,18 @@ "Base/Interface.nut" ], "ProjectScript": { + "累计奖励": { + "price": 10, + "Script": [ + "Project/CumulativeReward/CumulativeReward.nut" + ], + "info": { + "ProjectAuthor": "官方 (期限:月)", + "ProjectVersion": "1.0.0", + "ProjectDescribe": "累计在线奖励(仿官版)", + "ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png" + } + }, "成就系统": { "Private": true, "Script": [ @@ -96,6 +108,7 @@ "price": 999, "Script": [ "Project/FatalismStone/FatalismStone_Stone.nut", + "Project/FatalismStone/FatalismStone_BackPack.nut", "Project/FatalismStone/FatalismStone.nut" ], "info": { @@ -544,6 +557,135 @@ }, "imgPath": "Anton" }, + "卢克": { + "price": 200, + "Script": [ + "Project/Luke/Rindro_Luke_CreateParty.nut", + "Project/Luke/Rindro_Luke_FightSituation.nut", + "Project/Luke/Rindro_Luke_Noti.nut", + "Project/Luke/Rindro_Luke_Party.nut", + "Project/Luke/Rindro_Luke_PartyApplyJoin.nut", + "Project/Luke/Rindro_Luke_PartyFormation.nut", + "Project/Luke/Rindro_Luke_PartyHall.nut", + "Project/Luke/Rindro_Luke_PartyInfo.nut", + "Project/Luke/Rindro_Luke_PartyMemberInfo.nut", + "Project/Luke/Rindro_Luke_PlayerInteractive.nut", + "Project/Luke/Rindro_Luke_Reward.nut", + "Project/Luke/Rindro_Luke.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" + }, "世界地图修补": { "price": 0, "Script": [ diff --git a/Project/Anton/Rindro_Anton_PlayerInteractive.nut b/Project/Anton/Rindro_Anton_PlayerInteractive.nut index 0ed0728..ea3eeb5 100644 --- a/Project/Anton/Rindro_Anton_PlayerInteractive.nut +++ b/Project/Anton/Rindro_Anton_PlayerInteractive.nut @@ -210,13 +210,9 @@ class Rindro_AntonPlayerInteractiveC extends LenheartNewUI_Windows { //绘制角色名 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(); //裁切结束 - } + local AXpos = X; + local AYpos = Y + 1; + InfoObj.EquVos.DrawFace(AXpos, AYpos); LenheartNewUI_Windows.Show(obj); } diff --git a/Project/CumulativeReward/CumulativeReward.nut b/Project/CumulativeReward/CumulativeReward.nut new file mode 100644 index 0000000..0465ebf --- /dev/null +++ b/Project/CumulativeReward/CumulativeReward.nut @@ -0,0 +1,255 @@ +/* +文件名:CumulativeReward.nut +路径:Project/CumulativeReward/CumulativeReward.nut +创建日期:2025-10-05 20:49 +文件用途: 累计奖励 +*/ +class CumulativeRewardC extends LenheartNewUI_Windows { + //调试模式 + // DeBugMode = true; + + //不是窗口 + NoWindow = true; + + + //下一奖励道具 + NextRewardItem = 3037; + //当前阶段 + CurrentStage = 1; + //当前阶段已过时间 + CurrentStageTime = 0; + //下一阶段所需时间 + NextStageTime = 0; + //总累计次数 + TotalCount = null; + //当前累计次数 + CurrentCount = 0; + //奖励道具信息(数组) + /*对象结构体 + { + id = 3037,(编号) + count = 1,(数量) + state = 0,(0未达到要求,1达到要求未领取,2已领取) + } + */ + RewardItemInfo = null; + + //领取按钮List + RewardButtonList = null; + + //收包记录时间 + RecvPackTime = 0; + + //下方界面是否打开Flag + IsOpen = false; + + + Img1 = null; + + //请求配置的Flag + RequestConfig = false; + + //全部完成的Flag + AllFinish = false; + + + function CheckTimePack() { + SendPackEx({ + op = 20097001, + }); + } + + function CheckConfigPack() { + SendPackEx({ + op = 20097005, + }); + } + + //是否可见 + // Visible = false; + constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { + Childrens = []; + RewardButtonList = []; + //注册控件 + RegisterWidget(); + + LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); + + //配置回包 + RegisterPack(20097004, function(Chunk) { + local Jso = Json.Decode(Chunk); + this.X = Jso.X; + this.Y = Jso.Y; + TotalCount = Jso.TotalCount; + CurrentCount = Jso.currentCount; + RewardItemInfo = Jso.RewardItemInfo; + foreach(button in RewardButtonList) { + RemoveChild(button.ObjectId); + } + RewardButtonList = []; + foreach(pos, value in RewardItemInfo) { + local ButtonBuf = LenheartNewUI_BaseButton(12 + (pos % 4) * 52, 109 + (pos / 4) * 104, 28, 18, "interface2/event/chn_event_2018/180619_honey_time/main.img", 6); + ButtonBuf.Data = pos; + ButtonBuf.OnClickEx = function(button) { + SendPackEx({ + op = 20097003, + id = button.Data + }); + }.bindenv(this); + ButtonBuf.SetCallBackFunc(function(button) { + if (!IsOpen) button.Visible = false; + else button.Visible = true; + }.bindenv(this)); + AddChild(ButtonBuf); + RewardButtonList.append(ButtonBuf); + if (value.start == 0 || value.start == 2) ButtonBuf.State = 8; + } + RequestConfig = false; + }.bindenv(this)); + //时间回包 + RegisterPack(20097002, function(Chunk) { + local Jso = Json.Decode(Chunk); + local Arr = Jso.info; + NextRewardItem = Arr[0]; + CurrentStage = Arr[1]; + if (CurrentStage >= 3) { + CurrentStage = 3; + AllFinish = true; + } + CurrentStageTime = Arr[2]; + NextStageTime = Arr[3]; + RecvPackTime = Clock(); + + }.bindenv(this)); + + + CheckTimePack(); + + Img1 = Rindro_Image("interface2/event/chn_event_2018/180619_honey_time/main.img"); + } + + function RegisterWidget() { + + + } + + //绘制主界面 + function DrawMain(obj) { + //绘制进度条底槽 + Img1.DrawPng(20, X + 33, Y + 20); + //计算百分比 + if (RecvPackTime != 0) { + local TimePercentage = (CurrentStageTime.tofloat() + ((Clock() - RecvPackTime).tofloat())) / NextStageTime.tofloat(); + + if (TimePercentage > 1.0) { + TimePercentage = 1.0; + if (!RequestConfig && !AllFinish) { + CheckTimePack(); + CheckConfigPack(); + RequestConfig = true; + } + } + + setClip(X + 36, Y + 24, X + 36 + (101.0 * TimePercentage).tointeger(), Y + 24 + 6); //开始裁切 + //绘制进度条 + Img1.DrawPng(21, X + 36, Y + 24); + releaseClip(); //裁切结束 + } + + //绘制下一奖励道具 + DrawItemBase(X + 6, Y + 6, NextRewardItem, 1); + //绘制盖子 + Img1.DrawPng(19, X, Y); + //绘制阶段文字 + Img1.DrawExPng(25 + CurrentStage, X + 46, Y + 3, 0, sq_RGBA(255, 255, 255, 250), 0.85, 0.85); + + if (IsOpen) { + //绘制所有奖励道具 + if (RewardItemInfo) { + foreach(pos, value in RewardItemInfo) { + DrawItemBase(X + 12 + (pos % 4) * 52, Y + 80 + (pos / 4) * 104, value.id, value.count); + } + } + } + } + + EffectFlag = false; + EffectTime = 0; + + function TopShow(obj) { + if (!IsOpen) return; + if (EffectTime == 0) EffectTime = Clock(); + local A = 60; + if (!EffectFlag) { + A = sq_GetUniformVelocity(60, 255, Clock() - EffectTime, 600); + if (A >= 255) { + EffectFlag = true; + EffectTime = Clock(); + } + } else { + A = sq_GetUniformVelocity(255, 60, Clock() - EffectTime, 600); + if (A <= 60) { + EffectFlag = false; + EffectTime = Clock(); + } + } + //绘制完成 + if (RewardItemInfo) { + foreach(pos, value in RewardItemInfo) { + if (value.start == 1) { + L_sq_SetDrawImgModel(2, 0); + Img1.DrawExPng(10, X + 4 + (pos % 4) * 52, Y + 102 + (pos / 4) * 104, 0, sq_RGBA(255, 255, 255, A), 1.0, 1.0); + L_sq_ReleaseDrawImgModel(); + } else if (value.start == 2) Img1.DrawPng(24, X + 12 + (pos % 4) * 52, Y + 110 + (pos / 4) * 104); + } + } + } + + function Show(obj) { + LenheartNewUI_Windows.Show(obj); + DrawMain(obj); + } + + //鼠标事件回调 + function OnMouseProc(Flag, MousePos_X, MousePos_Y) { + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y, Width, Height)) { + IsOpen = true; + } else { + IsOpen = false; + } + } + + + //心跳时间 + HeartTime = 0; + + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X, Y); + + if (IsOpen) { + Img1.DrawPng(18, X, Y + 38); + Width = 206 + Height = 266; + } else { + Width = 144 + Height = 40; + } + + if (Clock() - HeartTime > 30000) { + CheckTimePack(); + HeartTime = Clock(); + } + } + +} + +function Lenheart_CumulativeReward_Fun(obj) { + local RootTab = getroottable(); + if (!RootTab.rawin("CumulativeReward_Obj")) { + RootTab.rawset("CumulativeReward_Obj", true); + LenheartNewUI_CreateWindow(CumulativeRewardC, "累计奖励窗口", ((getroottable().Rindro_Scr_Width - 405) / 2).tointeger(), 64, 405, 372, 0); + } +} + +getroottable()["LenheartFuncTab"].rawset("CumulativeRewardFuncN", Lenheart_CumulativeReward_Fun); \ No newline at end of file diff --git a/Project/CumulativeReward/img/0.png b/Project/CumulativeReward/img/0.png new file mode 100644 index 0000000..c7422af Binary files /dev/null and b/Project/CumulativeReward/img/0.png differ diff --git a/Project/CumulativeReward/img/1.png b/Project/CumulativeReward/img/1.png new file mode 100644 index 0000000..c7422af Binary files /dev/null and b/Project/CumulativeReward/img/1.png differ diff --git a/Project/CumulativeReward/img/2.png b/Project/CumulativeReward/img/2.png new file mode 100644 index 0000000..22ee275 Binary files /dev/null and b/Project/CumulativeReward/img/2.png differ diff --git a/Project/CumulativeReward/img/3.png b/Project/CumulativeReward/img/3.png new file mode 100644 index 0000000..af4d162 Binary files /dev/null and b/Project/CumulativeReward/img/3.png differ diff --git a/Project/FatalismStone/FatalismStone.nut b/Project/FatalismStone/FatalismStone.nut index 85f16f9..2a7b74a 100644 --- a/Project/FatalismStone/FatalismStone.nut +++ b/Project/FatalismStone/FatalismStone.nut @@ -6,6 +6,7 @@ */ //魂石list FatalismStoneLst <- null; +FatalismStoneConfig <- null; //魂石Img主体 FatalismStone_StoneImg <- {}; FatalismStone_StoneImg["icon_Frame"] <- Rindro_Image("interface2/rindro_reward.img"); @@ -19,13 +20,10 @@ class FatalismStoneC extends LenheartNewUI_Windows { // NoWindow = true; //是否可见 - Visible = false; + // Visible = false; //Img Img = null; - - //属性数据位数 - AttrCount = 2; //总格子数 GridCount = 77; //总穿戴数 @@ -33,21 +31,31 @@ class FatalismStoneC extends LenheartNewUI_Windows { //功能标题 FunctionTitle = null; + //功能页面 + FunctionPage = 0; + //Ani任务队列 + AniQueue = null; + + //背包数据 + BackPackData = null; //背包页面 BackpackPage = 0; //背包页面Tabbars BackpackPageTabbars = null; - //魂石数据 - FatalismStoneData = null; //页面魂石集合 PageFatalismStoneLst = null; - + //穿戴魂石集合 + WearFatalismStoneLst = null; //穿戴页面坐标数组 WearPagePos = [131, 140, 32, 180, 234, 180, 32, 272, 234, 272, 131, 413]; + //洗练对象 + WashStone = null; + + //查询魂石背包数据 function QueryFatalismStoneBackpack() { SendPackEx({ @@ -61,70 +69,29 @@ class FatalismStoneC extends LenheartNewUI_Windows { BackpackPageTabbars = []; //注册控件 RegisterWidget(); - LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); - InitImg(); - - //初始化魂石列表 InitFatalismStoneLst(); //背包数据回包 - RegisterPack(21000002, function(Chunk) { - local Jso = Json.Decode(Chunk); - FatalismStoneData = []; - //三个背包页 - for (local j = 0; j< 3; j++) { - local Buf = []; - //每个背包页77格道具 - for (local i = 0; i< GridCount; i++) { - local Obj = Jso.BackPackData[i + (j * GridCount)]; - local _Id = Obj.id; - local _CultivationDegree = Obj.cultivationDegree; - Buf.append({ - Id = _Id, - CultivationDegree = _CultivationDegree / 100.0, - XPos = 310 + (i % 11 * 39), - YPos = 260 + (i / 11 * 35), - StoneType = j - }); - } - FatalismStoneData.append(Buf); - } - //穿戴页 - local WearBuf = []; - for (local i = 0; i< WearCount; i++) { - local Obj = Jso.WearData[i]; - - local _Id = Obj.id; - local _CultivationDegree = Obj.cultivationDegree; - - local _Xpos = WearPagePos[i * 2]; - local _Ypos = WearPagePos[i * 2 + 1]; - _Xpos += 5; - _Ypos += 5; - - local infoBuf = { - Id = _Id, - CultivationDegree = _CultivationDegree / 100.0, - XPos = _Xpos, - YPos = _Ypos, - }; - if (i == 0) infoBuf.StoneType <- 0; - else if (i >= 1 && i <= 4) infoBuf.StoneType <- 1; - else if (i == 5) infoBuf.StoneType <- 2; - WearBuf.append(infoBuf); - } - FatalismStoneData.append(WearBuf); + RegisterHexPack(21000002, function(Pack) { + local Data = []; + local BackPackSize = Pack.GetInt(); + local BackPackDataBuffer = Pack.GetStream(BackPackSize); + Data.append(BackPackDataBuffer); + local WearSize = Pack.GetInt(); + local WearDataBuffer = Pack.GetStream(WearSize); + Data.append(WearDataBuffer); + BackPackData = FatalismStone_BackPack(); + BackPackData.Deserialize(Data); InitPageFatalismStone(); }.bindenv(this)); - + //请求魂石数据 QueryFatalismStoneBackpack(); } function RegisterWidget() { - //关闭按钮 local CloseButton = LenheartNewUI_BaseButton(738, 2, 11, 12, "interface/lenheartwindowcommon.img", 276); CloseButton.OnClick = function() { @@ -161,9 +128,6 @@ class FatalismStoneC extends LenheartNewUI_Windows { }.bindenv(this); FunctionTitle.append(FuncTabbar4); - - - local Tabbars3 = LenheartNewUI_TabbarsText(302, 235, "天魂石"); Tabbars3.SetTextOffset(13, 4); Tabbars3.State = 1; @@ -203,50 +167,41 @@ class FatalismStoneC extends LenheartNewUI_Windows { InitPageFatalismStone(); }.bindenv(this); BackpackPageTabbars.append(Tabbars5); + + local WashButton = LenheartNewUI_ButtonText(483, 182, 24, "洗练"); + WashButton.OnClickSound = "ICON_QUICK_SET"; + WashButton.SetTextOffset(9, 1); + WashButton.OnClick = function() { + if (FunctionPage == 0 && WashStone) { + SendPackEx({ + op = 21000005, + uuid = WashStone.Uuid, + rarity = WashStone.Info["rarity"], + }); + AniQueue.AddQuest("洗练特效动画", function(Name, Time) { + local AniPath = "fatalismstone/animation/eff1.ani"; + local Ani = DrawAniEx(X + 440, Y + 32, AniPath, "魂石洗练特效"); + if (sq_GetAnimationFrameIndex(Ani) == 15) { + sq_Rewind(Ani); + AniQueue.RemoveQuest(Name); + } + }.bindenv(this)); + R_Utils.PlaySound("BUTTON_06"); + } + }.bindenv(this); + WashButton.SetCallBackFunc(function(Btn) { + if (FunctionPage != 0) Btn.Visible = false; + else Btn.Visible = true; + }.bindenv(this)) + AddChild(WashButton); } //初始化背包 function InitPageFatalismStone() { - // if (!BackpackData || BackpackData.len() == 0) return; - if (!FatalismStoneData) return; - local SubBackPack = FatalismStoneData[BackpackPage]; - local ItArr = SubBackPack; - foreach(value in FatalismStoneData[3]) { - ItArr.append(value); - } - PageFatalismStoneLst = []; - foreach(info in ItArr) { - local StoneBuf; - if (!info.Id) StoneBuf = FatalismStone_Stone(null); - else StoneBuf = FatalismStone_Stone(info.Id); - StoneBuf.InitializeData(info); - PageFatalismStoneLst.append(StoneBuf); - } - - - - //计算全身的属性 - local AttributeTable = {}; - for (local i = GridCount; i< GridCount + WearCount; i++) { - local StoneObj = PageFatalismStoneLst[i]; - local Att = StoneObj.GetAttribute(); - if (Att) { - foreach(key, value in Att) { - if (!AttributeTable.rawin(key)) AttributeTable.rawset(key, value); - else AttributeTable.rawset(key, AttributeTable.rawget(key) + value); - } - } - } - - //记录最新属性数据 - if ("LenheartAttributesTable" in getroottable()) { - local T = getroottable()["LenheartAttributesTable"]; - T.rawset("LenheartCollectFatalismStoneAb", AttributeTable); - } else { - local T = {}; - T.rawset("LenheartCollectFatalismStoneAb", AttributeTable); - getroottable().rawset("LenheartAttributesTable", T); - } + if (!BackPackData) return; + //设置需要渲染的当前背包页面 + PageFatalismStoneLst = BackPackData.GetList(BackpackPage); + WearFatalismStoneLst = BackPackData.GetList(3); } //绘制主界面 @@ -265,22 +220,48 @@ class FatalismStoneC extends LenheartNewUI_Windows { L_sq_DrawWindow(X + 300, Y + 253, 420, 220, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13); //下背景框 Img["main"].DrawPng(1, X + 309, Y + 259); - } + //洗练页面 + if (FunctionPage == 0) { + //绘制洗练槽 + Img["main"].DrawPng(2, X + 500, Y + 90); + if (WashStone) { + local NowCultivationDegree = "当前魂石洗练度: " + WashStone.Info.cultivationDegree.tostring(); + local NeedStkStr = FatalismStoneConfig["wash_cost"][WashStone.Info["rarity"]] + "个"; + L_sq_DrawCode("当前魂石洗练度: ", X + 471, Y + 140, sq_RGBA(174, 174, 174, 250), 1, 1); + L_sq_DrawCode("洗练所需魂屑: ", X + 473, Y + 160, sq_RGBA(174, 174, 174, 250), 1, 1); + L_sq_DrawCode(WashStone.Info.cultivationDegree.tostring() + "%", X + 560, Y + 140, sq_RGBA(104, 237, 161, 250), 1, 1); + L_sq_DrawCode(NeedStkStr, X + 552, Y + 160, sq_RGBA(104, 237, 161, 250), 1, 1); + WashStone.Show(obj, X + 505, Y + 95); + } + } + } function Show(obj) { DrawMain(obj); LenheartNewUI_Windows.Show(obj); //绘制魂石 + //背包中的魂石 if (PageFatalismStoneLst) { foreach(Pos, Stone in PageFatalismStoneLst) { - // sq_DrawBox(X + Stone.XPos, Y + Stone.YPos, 34,34, 0xffffffff); - Stone.Show(obj, X + Stone.XPos, Y + Stone.YPos); + local XPos = 310 + (Pos % 11 * 39); + local YPos = 260 + (Pos / 11 * 35); + if (Stone) Stone.Show(obj, X + XPos, Y + YPos); } } + //穿戴的魂石 + if (WearFatalismStoneLst) { + foreach(Pos, Stone in WearFatalismStoneLst) { + local XPos = WearPagePos[Pos * 2]; + local YPos = WearPagePos[Pos * 2 + 1]; + XPos += 5; + YPos += 5; + if (Stone) Stone.Show(obj, X + XPos, Y + YPos); + } + } + AniQueue.Run(); } - function TopShow(obj) { LenheartNewUI_Windows.TopShow(obj); //还没有初始化数据的时候直接返回 @@ -289,8 +270,30 @@ class FatalismStoneC extends LenheartNewUI_Windows { local MousePos_Y = IMouse.GetYPos(); //魂石的悬停绘制 foreach(Pos, Stone in PageFatalismStoneLst) { - if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 31, 31)) { - Stone.HoverShow(X + Stone.XPos + 31, Y + Stone.YPos); + local XPos = 310 + (Pos % 11 * 39); + local YPos = 260 + (Pos / 11 * 35); + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 31, 31)) { + //绘制悬停框 + L_sq_SetDrawImgModel(2, 0); + Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X + XPos + 1, Y + YPos + 1); + L_sq_ReleaseDrawImgModel(); + if (Stone && !DragObj) Stone.HoverShow(X + XPos + 31, Y + YPos); + } + } + //魂石穿戴的悬停绘制 + if (WearFatalismStoneLst) { + foreach(Pos, Stone in WearFatalismStoneLst) { + local XPos = WearPagePos[Pos * 2]; + local YPos = WearPagePos[Pos * 2 + 1]; + XPos += 5; + YPos += 5; + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 31, 31)) { + //绘制悬停框 + L_sq_SetDrawImgModel(2, 0); + Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X + XPos + 1, Y + YPos + 1); + L_sq_ReleaseDrawImgModel(); + if (Stone && !DragObj) Stone.HoverShow(X + XPos + 31, Y + YPos); + } } } //绘制拖拽的魂石 @@ -299,89 +302,158 @@ class FatalismStoneC extends LenheartNewUI_Windows { } } - //鼠标右键按下回调 - function OnMouseRbDown(MousePos_X, MousePos_Y) { - LenheartNewUI_BaseWindow.OnMouseRbDown(MousePos_X, MousePos_Y); - if (PageFatalismStoneLst) { - foreach(Pos, Stone in PageFatalismStoneLst) { - if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 31, 31)) { - // //发送穿戴装备包 - // SendPackEx({ - // op = 21000003, - // type = BackpackPage, - // pos = Pos - // }) - } - } - } - } - //当前拖拽的物品对象 DragObj = null; DragOldPos = null; + DragType = null; //鼠标左键按下回调 function OnMouseLbDown(MousePos_X, MousePos_Y) { LenheartNewUI_BaseWindow.OnMouseLbDown(MousePos_X, MousePos_Y); + if (!PageFatalismStoneLst) return; foreach(Pos, Stone in PageFatalismStoneLst) { - if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 34, 34)) { - if (Stone.isSuccess) { + local XPos = 310 + (Pos % 11 * 39); + local YPos = 260 + (Pos / 11 * 35); + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) { + if (Stone && Stone.isSuccess) { DragObj = Stone; - PageFatalismStoneLst[Pos] = FatalismStone_Stone(null); - PageFatalismStoneLst[Pos].InitializeData(DragObj.BackupInfo); + PageFatalismStoneLst[Pos] = null; DragOldPos = Pos; + DragType = 1; //背包中的拖拽 + } + } + } + if (WearFatalismStoneLst) { + foreach(Pos, Stone in WearFatalismStoneLst) { + local XPos = WearPagePos[Pos * 2]; + local YPos = WearPagePos[Pos * 2 + 1]; + XPos += 5; + YPos += 5; + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) { + if (Stone) { + DragObj = Stone; + WearFatalismStoneLst[Pos] = null; + DragOldPos = Pos + (GridCount * 3); + DragType = 0; //身上的拖拽 + } } } } } - //鼠标左键抬起回调 function OnMouseLbUp(MousePos_X, MousePos_Y) { LenheartNewUI_BaseWindow.OnMouseLbUp(MousePos_X, MousePos_Y); - if (!PageFatalismStoneLst) return; - foreach(Pos, Stone in PageFatalismStoneLst) { - if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + Stone.XPos, Y + Stone.YPos, 34, 34)) { + if (PageFatalismStoneLst) { + foreach(Pos, Stone in PageFatalismStoneLst) { + local XPos = 310 + (Pos % 11 * 39); + local YPos = 260 + (Pos / 11 * 35); if (DragObj) { - //获取到旧的穿戴类型 - local OldEType = DragObj.Stone_Type; - //获取到新的穿戴类型 - local NewEType = Stone.Stone_Type; - - //如果两个类型相同则进行交换 相同位置也不发包 - if (OldEType == NewEType && DragOldPos != Pos) { - SendPackEx({ - op = 21000003, - oldtype = DragOldPos >= GridCount ? -1 : BackpackPage, - oldpos = DragOldPos >= GridCount ? (DragOldPos - GridCount) : DragOldPos, - newtype = Pos >= GridCount ? -1 : BackpackPage, - newpos = Pos >= GridCount ? (Pos - GridCount) : Pos - }) + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) { + StoneMoveLogic(Pos, Stone); } - - //播放移动声音 - R_Utils.PlaySound(DragObj.Info["move wav"]); - - //放回原位 - PageFatalismStoneLst[DragOldPos] = DragObj; - DragObj = null; } } } - } - - Cetshi = 0; - //逻辑入口 - function Proc(obj) { - LenheartNewUI_Windows.SyncPos(X, Y); - - if (Clock() - Cetshi > 100) { - Cetshi = Clock(); + if (WearFatalismStoneLst) { + foreach(Pos, Stone in WearFatalismStoneLst) { + local XPos = WearPagePos[Pos * 2]; + local YPos = WearPagePos[Pos * 2 + 1]; + XPos += 5; + YPos += 5; + if (DragObj) { + if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + XPos, Y + YPos, 34, 34)) { + StoneMoveLogic((GridCount * 3) + Pos, Stone); + } + } + } + } + //洗练的区域 + if (FunctionPage == 0 && sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + 500, Y + 90, 42, 42)) { + if (DragObj) { + WashStone = DragObj; + } + } + if (DragObj) { + //播放移动声音 + R_Utils.PlaySound(DragObj.Info["move wav"]); + //放回原位 + if (DragType == 1) PageFatalismStoneLst[DragOldPos] = DragObj; + else if (DragType == 0) WearFatalismStoneLst[DragOldPos - (GridCount * 3)] = DragObj; + DragObj = null; } } + function StoneMoveLogic(Pos, Stone) { + local OldEType = DragObj.Stone_Type; //老装备类型 + local NewEType; //新装备类型 + //如果新位置有魂石 获取到新的穿戴类型 + if (Stone) NewEType = Stone.Stone_Type; + else { + //这是往身上拖 + if (Pos >= GridCount * 3) { + local RealPos = Pos - (GridCount * 3); + if (RealPos == 0) NewEType = 0; + if (RealPos >= 1 && RealPos <= 4) NewEType = 1; + if (RealPos == 5) NewEType = 2; + } + //这是往背包拖 + else { + NewEType = BackpackPage; + } + } + + //如果两个类型相同则进行交换 相同位置也不发包 + if (OldEType == NewEType && DragOldPos != Pos) { + //老装备的页面位置 + SendPackEx({ + op = 21000003, + oldtype = DragType == 1 ? BackpackPage : 3, + oldpos = DragType == 1 ? DragOldPos : DragOldPos - (GridCount * 3), + newtype = Pos >= (GridCount * 3) ? 3 : BackpackPage, + newpos = Pos >= (GridCount * 3) ? Pos - (GridCount * 3) : Pos + }) + QueryFatalismStoneBackpack(); + } + } + + //计算全身属性 + function StatisticalAttribute() { + local AttributeTable = {}; + local WearStoneList = BackPackData.GetList(3); + for (local i = 0; i< WearStoneList.len(); i++) { + local StoneObj = WearStoneList[i]; + if (StoneObj) { + local Att = StoneObj.GetAttribute(); + if (Att) { + foreach(key, value in Att) { + local RealValue = value; + if (typeof RealValue == "array") RealValue = RealValue[0]; + if (!AttributeTable.rawin(key)) AttributeTable.rawset(key, value); + else AttributeTable.rawset(key, AttributeTable.rawget(key) + value); + } + } + } + } + //记录最新属性数据 + if ("LenheartAttributesTable" in getroottable()) { + local T = getroottable()["LenheartAttributesTable"]; + T.rawset("LenheartCollectFatalismStoneAb", AttributeTable); + } else { + local T = {}; + T.rawset("LenheartCollectFatalismStoneAb", AttributeTable); + getroottable().rawset("LenheartAttributesTable", T); + } + } + + //逻辑入口 + function Proc(obj) { + LenheartNewUI_Windows.SyncPos(X, Y); + } + + //初始化PVF魂石列表 function InitFatalismStoneLst() { FatalismStoneLst = {}; Rindro_Script.GetFileData("fatalismstone/fatalismstone.lst", function(DataTable, Data) { @@ -391,16 +463,29 @@ class FatalismStoneC extends LenheartNewUI_Windows { FatalismStoneLst.rawset(Id, Path); } }); + FatalismStoneConfig = Rindro_Script.GetFileData("fatalismstone/fatalismstone.etc", function(DataTable, Data) { + while (!Data.Eof()) { + local Str = Data.Get(); + if (Str == "[wash item]") { + DataTable.wash_item <- Data.Get(); + } else if (Str == "[wash cost]") { + DataTable.wash_cost <- [Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get()]; + } + } + }); } + function InitImg() { Img = {}; Img["main"] <- Rindro_Image("hud/fatalism_stone.img"); + AniQueue = QuestQueue(); } function OpenCallBack() { Visible = true; QueryFatalismStoneBackpack(); + WashStone = null; } } diff --git a/Project/FatalismStone/FatalismStone_BackPack.nut b/Project/FatalismStone/FatalismStone_BackPack.nut new file mode 100644 index 0000000..a131cb1 --- /dev/null +++ b/Project/FatalismStone/FatalismStone_BackPack.nut @@ -0,0 +1,107 @@ +/* +文件名:FatalismStone_BackPack.nut +路径:Project/FatalismStone/FatalismStone_BackPack.nut +创建日期:2025-08-27 17:54 +文件用途:魂石背包类 +*/ + +//魂石背包类 +class FatalismStone_BackPack { + + //背包总格子数 + GridCount = 77; + //穿戴总格子数 + WearCount = 6; + + StoneArr = null; + + + constructor() { + StoneArr = []; + + //魂石单个数据回包 + Rindro_BaseToolClass.RegisterHexPack(21000012, function(Pack) { + local Uuid = Pack.GetInt(); + local Info = { + Cultivation = Pack.GetInt().tofloat() * 0.01, + } + foreach(StoneObject in StoneArr) { + if (!StoneObject) continue; + if (StoneObject.Uuid == Uuid) { + StoneObject.InitializeData(Info); + break; + } + } + }.bindenv(this)); + + //魂石多个数据回包 + Rindro_BaseToolClass.RegisterHexPack(21000014, function(Pack) { + local Count = Pack.GetInt(); + for (local i = 0; i< Count; i++) { + local Uuid = Pack.GetInt(); + local Info = { + Cultivation = Pack.GetInt().tofloat() * 0.01, + } + foreach(StoneObject in StoneArr) { + if (!StoneObject) continue; + if (StoneObject.Uuid == Uuid) { + StoneObject.InitializeData(Info); + break; + } + } + } + }.bindenv(this)); + } + + //通过数据构造背包 反序列化 + function Deserialize(N_Data) { + local BackpackData = N_Data[0]; + local WearData = N_Data[1]; + + //转换背包数据 + local BackPackArr = []; + for (local i = 0; i<(GridCount * 3); i++) { + local StoneId = BackpackData.add(i * 8).readInt(); + local StoneUuid = BackpackData.add(i * 8 + 4).readInt(); + if (StoneId != 0 && StoneUuid != 0) { + local StoneObj = FatalismStone_Stone(StoneId); + StoneObj.Stone_Type = i / GridCount; + StoneObj.Uuid = StoneUuid; + BackPackArr.append(StoneObj); + } else { + BackPackArr.append(null); + } + } + //转化穿戴数据 + local WearArr = []; + for (local i = 0; i< WearCount; i++) { + local StoneId = WearData.add(i * 8).readInt(); + local StoneUuid = WearData.add(i * 8 + 4).readInt(); + if (StoneId != 0 && StoneUuid != 0) { + local StoneObj = FatalismStone_Stone(StoneId); + StoneObj.Uuid = StoneUuid; + WearArr.append(StoneObj); + } else { + WearArr.append(null); + } + } + + //两段数据放入总数据 + StoneArr.extend(BackPackArr); + StoneArr.extend(WearArr); + } + + //获取魂石的列表 3为身上穿戴的 + function GetList(Page) { + local SliceLength = GridCount; + if (Page == 3) SliceLength = WearCount; + return StoneArr.slice(Page * 77, Page * 77 + SliceLength); + } +} + + + +L_Windows_List <- []; +getroottable().rawdelete("LenheartPluginsInitFlag"); +getroottable().rawdelete("EventList_Obj") +getroottable().rawdelete("FatalismStone_Obj"); \ No newline at end of file diff --git a/Project/FatalismStone/FatalismStone_Stone.nut b/Project/FatalismStone/FatalismStone_Stone.nut index 8aa6c7a..48a67dc 100644 --- a/Project/FatalismStone/FatalismStone_Stone.nut +++ b/Project/FatalismStone/FatalismStone_Stone.nut @@ -32,6 +32,10 @@ FatalismStone_AttrTagDrawOrder <- ["[physical attack]", "[magical attack]", "[ph class FatalismStone_Stone { + //唯一ID + Uuid = null; + //魂石ID + Id = null; //数据 Info = null; //显示偏移位置 @@ -42,6 +46,10 @@ class FatalismStone_Stone { //完成Flag isSuccess = false; + //唯一属性加载Flag + isInitializeData = false; + //唯一属性请求Flag + isInitializeRequestData = false; constructor(Arg) { if (Arg != null) { @@ -54,6 +62,7 @@ class FatalismStone_Stone { FatalismStoneLst.rawset(Arg, Buf); } Initialize(Buf); + Id = Arg; } else printf("FatalismStone_Stone:没有找到Id为" + Arg + "的魂石"); } isSuccess = true; @@ -74,13 +83,14 @@ class FatalismStone_Stone { //悬停 function HoverShow(X, Y) { - - //绘制悬停框 - L_sq_SetDrawImgModel(2, 0); - Rindro_Image_GlobalMap["lenheartui"].DrawPng(353, X - 31 + 1, Y + 1); - L_sq_ReleaseDrawImgModel(); - if (!isSuccess) return; + if (!isInitializeRequestData) { + isInitializeRequestData = true; + Rindro_BaseToolClass.SendPackEx({ + op = 21000011, + uuid = Uuid + }) + } //基础长度50 local Height = 50; Height += Info.Attribute.len() * 14; //计算属性带来的高度加成 @@ -178,23 +188,15 @@ class FatalismStone_Stone { //初始化数据 function InitializeData(info) { - BackupInfo = info; - //同步位置 - XPos = info.XPos; - YPos = info.YPos; - - //如果是没有ID的通过传入的数据确定魂石类型 - if (Stone_Type == null) Stone_Type = info.StoneType; - - - if (!isSuccess) return; //得到洗练度 - local Rate = info.CultivationDegree; + local Rate = info.Cultivation; Info.cultivationDegree = (Rate * 100.0); //计算属性 foreach(Key, value in Info.Attribute) { - Info.Attribute[Key] = (value[0] + (value[1] - value[0]) * Rate).tointeger(); + local BaseValueArr = FatalismStoneLst[Id].Attribute[Key]; + Info.Attribute[Key] = (BaseValueArr[0] + (BaseValueArr[1] - BaseValueArr[0]) * Rate).tointeger(); } + isInitializeData = true; } //品级颜色 diff --git a/Project/HM_CombatRank/HM_CombatRank.nut b/Project/HM_CombatRank/HM_CombatRank.nut index 7c9d862..e7eca6e 100644 --- a/Project/HM_CombatRank/HM_CombatRank.nut +++ b/Project/HM_CombatRank/HM_CombatRank.nut @@ -38,6 +38,8 @@ class TH_CombatRankC extends LenheartNewUI_Windows { DeclareTimer = null; DeclareFlag = false; + //排行名次颜色集合 + RankColor = null; //公会奖励集合 GuildReward = null; GuildFlagData = null; @@ -82,6 +84,10 @@ class TH_CombatRankC extends LenheartNewUI_Windows { RegisterPack(20096102, function(Chunk) { local Jso = Json.Decode(Chunk); PersonReward = Jso["config"]; + RankColor = []; + foreach (colorarr in Jso["pmys"]) { + RankColor.append(sq_RGBA(colorarr[0], colorarr[1], colorarr[2], colorarr[3])); + } }.bindenv(this)); //基础公会数据回包 @@ -194,18 +200,14 @@ class TH_CombatRankC extends LenheartNewUI_Windows { // }.bindenv(this); // TitleButtonList.append(FuncTabbar2); - // local FuncTabbar3 = LenheartNewUI_TabbarsText(476, 23, "我的战力"); - // FuncTabbar3.SetTextOffset(8, 4); - // AddChild(FuncTabbar3); - // FuncTabbar3.OnClick = function() { - // TitleButtonList[0].State = 0; - // TitleButtonList[1].State = 0; - // TitleButtonList[2].State = 1; - // Page = 0; - // LookingInfo = MyCombat; - // ScrollBar.Reset(); - // }.bindenv(this); - // TitleButtonList.append(FuncTabbar3); + local FuncTabbar3 = LenheartNewUI_BaseButton(706, 8, 11, 12, "interface/lenheartwindowcommon.img", 593); + AddChild(FuncTabbar3); + FuncTabbar3.OnClick = function() { + Page = 0; + LookingInfo = MyCombat; + ScrollBar.Reset(); + }.bindenv(this); + TitleButtonList.append(FuncTabbar3); ScrollBar = Yosin_ScrollBar(729, 295, 218, 60); ScrollBar.SetParent(this); @@ -631,10 +633,12 @@ class TH_CombatRankC_Item { Combat = Info.zdlS; } + local Color = sq_RGBA(230, 200, 155, 255); + if(Idx < 10 && Parent.RankColor)Color = Parent.RankColor[Idx]; //绘制排名 - L_sq_DrawCode(Ranking, X + 25 - LenheartTextClass.GetStringLength(Ranking) / 2, Y + 14, sq_RGBA(230, 200, 155, 255), 0, 1); + L_sq_DrawCode(Ranking, X + 25 - LenheartTextClass.GetStringLength(Ranking) / 2, Y + 14, Color, 0, 1); //绘制角色名 - L_sq_DrawCode(CharacName, X + 110 - LenheartTextClass.GetStringLength(CharacName) / 2, Y + 14, sq_RGBA(230, 200, 155, 255), 0, 1); + L_sq_DrawCode(CharacName, X + 110 - LenheartTextClass.GetStringLength(CharacName) / 2, Y + 14, Color, 0, 1); //绘制膜拜次数 L_sq_DrawCode(MbCount, X + 213 - LenheartTextClass.GetStringLength(MbCount) / 2, Y + 14, sq_RGBA(230, 200, 155, 255), 0, 1); //绘制职业 diff --git a/Project/Luke/Rindro_Luke.nut b/Project/Luke/Rindro_Luke.nut index a78b739..a946df6 100644 --- a/Project/Luke/Rindro_Luke.nut +++ b/Project/Luke/Rindro_Luke.nut @@ -6,17 +6,7 @@ */ -dofile("sqr/Project/Luke/Rindro_Luke_CreateParty.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_FightSituation.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_Noti.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_Party.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_PartyApplyJoin.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_PartyFormation.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_PartyHall.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_PartyInfo.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_PartyMemberInfo.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_PlayerInteractive.nut"); -dofile("sqr/Project/Luke/Rindro_Luke_Reward.nut"); + //卢克核心数据类 diff --git a/Project/Luke/Rindro_Luke_PlayerInteractive.nut b/Project/Luke/Rindro_Luke_PlayerInteractive.nut index 8cf62ee..21ccf4a 100644 --- a/Project/Luke/Rindro_Luke_PlayerInteractive.nut +++ b/Project/Luke/Rindro_Luke_PlayerInteractive.nut @@ -210,13 +210,9 @@ class Rindro_LukePlayerInteractiveC extends LenheartNewUI_Windows { //绘制角色名 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(); //裁切结束 - } + local AXpos = X; + local AYpos = Y + 1; + InfoObj.EquVos.DrawFace(AXpos, AYpos); LenheartNewUI_Windows.Show(obj); } diff --git a/folder-alias.json b/folder-alias.json index d645530..46c4ab2 100644 --- a/folder-alias.json +++ b/folder-alias.json @@ -169,5 +169,8 @@ }, "Project/HM_CombatRank": { "description": "毁梦定制-战力榜" + }, + "Project/CumulativeReward": { + "description": "累计奖励" } } \ No newline at end of file