桃花定制战力排行榜

This commit is contained in:
Lenheart 2025-07-05 22:29:38 +08:00
parent 7031e65d8b
commit e28a2c3189
2 changed files with 540 additions and 0 deletions

View File

@ -0,0 +1,540 @@
/*
文件名:TH_CombatRank.nut
路径:Project/TH_CombatRank/TH_CombatRank.nut
创建日期:2025-07-01 10:18
文件用途:战力排行榜
*/
class TH_CombatRankC extends LenheartNewUI_Windows {
//调试模式
// DeBugMode = true;
//不是窗口
// NoWindow = true;
//是否可见
Visible = false;
Img = null;
TitleButtonList = null;
//个人 公会
Page = 0;
Test = null;
//个人战力集合
CombatInfoList = null;
//个人奖励集合
PersonReward = null;
//个人排行人物
CharacShow = null;
//查看中的详细个人信息
LookingInfo = null;
//公会奖励集合
GuildReward = null;
GuildFlagData = null;
//公会战力集合
GuildInfoList = null;
//滚动条
ScrollBar = null;
ScrollBarRate = 0;
ScrollBarValue = 604;
function CheckPersonalCombatPower() {
SendPackEx({
op = 20096003
})
}
function CheckGuildCombatPower() {
SendPackEx({
op = 20096005
})
}
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
Childrens = [];
TitleButtonList = [];
//注册控件
RegisterWidget();
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
Img = {};
Img["main"] <- Rindro_Image("interface/rindro/thnew_rank.img");
Img["information_button_cn"] <- Rindro_Image("interface2/hud/information_button/information_button_cn.img");
Img["newuserinfo"] <- Rindro_Image("interface/userinfomation/newuserinfo.img");
//基础配置数据回包
RegisterPack(20096102, function(Chunk) {
local Jso = Json.Decode(Chunk);
PersonReward = Jso["config"];
}.bindenv(this));
//基础公会数据回包
RegisterPack(20096104, function(Chunk) {
local Jso = Json.Decode(Chunk);
GuildReward = Jso["config"];
GuildFlagData = {};
foreach(object in Jso["config2"]) {
GuildFlagData.rawset(object.guildId, [object.img, object.imgid]);
}
}.bindenv(this));
//查询个人战力排行榜包
RegisterPack(20096004, function(Chunk) {
local Jso = Json.Decode(Chunk);
local ranking = Jso.ranking;
CombatInfoList = [];
CharacShow = [];
foreach(Pos, Info in ranking) {
local CharacDraw = Rindro_Draw_Character(Info.job.tointeger(), Info.avaS, "rest.ani", null)
CharacShow.append(CharacDraw);
if (!Info.rawin("guildname")) Info.guildname <- "无公会";
local Buf = TH_CombatRankC_Item(this, Pos, Info, 0);
Buf.CharacShow = CharacDraw;
CombatInfoList.append(Buf);
}
}.bindenv(this));
RegisterPack(20096006, function(Chunk) {
local Jso = Json.Decode(Chunk);
local ranking = Jso.ranking;
GuildInfoList = [];
foreach(Pos, Info in ranking) {
local Buf = TH_CombatRankC_Item(this, Pos, Info, 1);
GuildInfoList.append(Buf);
}
}.bindenv(this));
CheckPersonalCombatPower();
CheckGuildCombatPower();
UploadYourOwnCombatPower();
}
function RegisterWidget() {
//关闭按钮
local CloseButton = LenheartNewUI_BaseButton(521, 2, 11, 12, "interface/lenheartwindowcommon.img", 276);
CloseButton.OnClick = function() {
this.Visible = false;
}.bindenv(this);
Childrens.append(CloseButton);
local FuncTabbar1 = LenheartNewUI_TabbarsText(4, 23, "巅峰战力");
FuncTabbar1.State = 1;
FuncTabbar1.SetTextOffset(8, 4);
AddChild(FuncTabbar1);
FuncTabbar1.OnClick = function() {
TitleButtonList[1].State = 0;
TitleButtonList[0].State = 1;
Page = 0;
ScrollBar.Reset();
}.bindenv(this);
TitleButtonList.append(FuncTabbar1);
local FuncTabbar2 = LenheartNewUI_TabbarsText(65, 23, "公会战力");
FuncTabbar2.SetTextOffset(8, 4);
AddChild(FuncTabbar2);
FuncTabbar2.OnClick = function() {
TitleButtonList[0].State = 0;
TitleButtonList[1].State = 1;
Page = 1;
ScrollBar.Reset();
}.bindenv(this);
TitleButtonList.append(FuncTabbar2);
ScrollBar = Yosin_ScrollBar(530, 315, 198, 50);
ScrollBar.SetParent(this);
ScrollBar.SetStep(20 / 100.0);
ScrollBar.SetOnChange(function(Rate) {
ScrollBarRate = Rate;
}.bindenv(this));
}
//绘制主界面
function DrawMain(obj) {
Img["main"].DrawPng(0, X, Y);
Img["main"].DrawPng(0, X, Y);
Img["main"].DrawPng(0, X, Y);
Img["information_button_cn"].DrawPng(136, X + 5, Y + 295);
if (Page == 0) {
//职业
L_sq_DrawCode("职业", X + 58, Y + 299, sq_RGBA(179, 169, 135, 255), 0, 1);
//角色名
L_sq_DrawCode("角色名", X + 152, Y + 299, sq_RGBA(179, 169, 135, 255), 0, 1);
//公会名
L_sq_DrawCode("战斗力", X + 280, Y + 299, sq_RGBA(179, 169, 135, 255), 0, 1);
//战斗力
L_sq_DrawCode(" 奖励", X + 438, Y + 299, sq_RGBA(179, 169, 135, 255), 0, 1);
setClip(X, Y + 316, X + 528, Y + 316 + 196);
if (CombatInfoList) {
foreach(Pos, Object in CombatInfoList) {
Object.Show(X, Y + 316 + (Pos * 40) - (ScrollBarRate * ScrollBarValue).tointeger());
}
}
releaseClip(); //裁切结束
//绘制前三名
if (CharacShow) {
for (local i = 0; i< 3; i++) {
local CharacObj = CharacShow[i];
local OffsetX = 270;
local OffsetY = 268;
if (i == 1) {
OffsetX = 130;
OffsetY = 268;
}
if (i == 2) {
OffsetX = 410;
OffsetY = 268;
}
if (!LookingInfo || i != LookingInfo.Idx) CharacObj.Draw(X + OffsetX, Y + OffsetY);
}
}
//如果有查看者
if (LookingInfo) {
Img["main"].DrawPng(7, X + 2, Y + 44);
Img["information_button_cn"].DrawPng(136, X + 5, Y + 295);
T_DrawDynamicAni(obj, "ui/selectcharacter/animation/selectcharactereffect.ani", X + 15, Y + 50, "桃花战斗力角色背景光环");
Img["main"].DrawPng(8, X + 30, Y + 160);
LookingInfo.CharacShow.Draw(X + 80, Y + 248);
//角色名
L_sq_DrawCode("角色名: " + LookingInfo.Info.name, X + 150, Y + 60, sq_RGBA(230, 200, 155, 255), 0, 1);
//职业
L_sq_DrawCode("角色职业: " + LookingInfo.Info.jobname, X + 150, Y + 78, sq_RGBA(230, 200, 155, 255), 0, 1);
//等级
L_sq_DrawCode("角色等级: " + LookingInfo.Info.level, X + 150, Y + 96, sq_RGBA(230, 200, 155, 255), 0, 1);
//公会名
L_sq_DrawCode("所属公会: " + LookingInfo.Info.guildname, X + 150, Y + 114, sq_RGBA(230, 200, 155, 255), 0, 1);
//是否在线
L_sq_DrawCode("当前状态: " + (LookingInfo.Info.isOnline ? "在线" : "离线"), X + 150, Y + 132, sq_RGBA(230, 200, 155, 255), 0, 1);
//战斗力
L_sq_DrawCode("战斗力: " + LookingInfo.Info.zdlS, X + 150, Y + 150, sq_RGBA(230, 200, 155, 255), 0, 1);
L_sq_DrawCode("-- 基础战斗力: " + LookingInfo.Info.jczdlS, X + 150, Y + 168, sq_RGBA(179, 169, 135, 255), 0, 1);
L_sq_DrawCode(" 四维: " + LookingInfo.Info.swzldS, X + 150, Y + 186, sq_RGBA(179, 169, 135, 255), 0, 1);
L_sq_DrawCode(" 三攻: " + LookingInfo.Info.sgzldS, X + 150, Y + 204, sq_RGBA(179, 169, 135, 255), 0, 1);
L_sq_DrawCode(" 属强: " + LookingInfo.Info.sqzldS, X + 150, Y + 222, sq_RGBA(179, 169, 135, 255), 0, 1);
L_sq_DrawCode(" 其他: " + LookingInfo.Info.qtzldS, X + 150, Y + 240, sq_RGBA(179, 169, 135, 255), 0, 1);
L_sq_DrawCode("-- 魂石战斗力: " + LookingInfo.Info.fstS, X + 150, Y + 258, sq_RGBA(179, 169, 135, 255), 0, 1);
}
}
if (Page == 1) {
//职业
L_sq_DrawCode("会长", X + 58, Y + 299, sq_RGBA(179, 169, 135, 255), 0, 1);
//角色名
L_sq_DrawCode("公会名称", X + 152, Y + 299, sq_RGBA(179, 169, 135, 255), 0, 1);
//公会名
L_sq_DrawCode("战斗力", X + 280, Y + 299, sq_RGBA(179, 169, 135, 255), 0, 1);
//战斗力
L_sq_DrawCode(" 奖励", X + 438, Y + 299, sq_RGBA(179, 169, 135, 255), 0, 1);
setClip(X, Y + 316, X + 528, Y + 316 + 196);
if (GuildInfoList) {
foreach(Pos, Object in GuildInfoList) {
Object.Show(X, Y + 316 + (Pos * 40) - (ScrollBarRate * ScrollBarValue).tointeger());
}
}
releaseClip(); //裁切结束
}
}
function Show(obj) {
DrawMain(obj);
LenheartNewUI_Windows.Show(obj);
}
function TopShow(obj) {
LenheartNewUI_Windows.TopShow(obj);
local MousePos_X = IMouse.GetXPos();
local MousePos_Y = IMouse.GetYPos();
if (CombatInfoList && Page == 0) {
setClip(X, Y + 316, X + 528, Y + 316 + 196);
foreach(Pos, Object in CombatInfoList) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y + 316 + (Pos * 40) - (ScrollBarRate * ScrollBarValue).tointeger(), 526, 39)) {
Object.HoverShow(X, Y + 316 + (Pos * 40) - (ScrollBarRate * ScrollBarValue).tointeger());
}
}
releaseClip(); //裁切结束
}
}
function DrawItemBase(X, Ypos, Id, Count) {
if ((Ypos + 28) > this.Y + 316 && Ypos< this.Y + 316 + 196) {
LenheartNewUI_Windows.DrawItemBase(X, Ypos, Id, Count);
}
}
//鼠标滚轮事件回调
function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
LenheartNewUI_BaseWindow.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
//左侧的滚动条判定
if (MousePos_X > X && MousePos_X<(X + 528) && MousePos_Y > (Y + 316) && MousePos_Y<(Y + 316 + 196)) {
if (Flag) ScrollBar.DoStep(-1);
if (!Flag) ScrollBar.DoStep(1);
}
}
//鼠标左键按下回调
function OnMouseLbDown(MousePos_X, MousePos_Y) {
LenheartNewUI_BaseWindow.OnMouseLbDown(MousePos_X, MousePos_Y);
if (CombatInfoList) {
foreach(Pos, Object in CombatInfoList) {
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y + 316 + (Pos * 40) - (ScrollBarRate * ScrollBarValue).tointeger(), 526, 39)) {
Object.OnMouseLbDown(X, Y + 316 + (Pos * 40) - (ScrollBarRate * ScrollBarValue).tointeger());
}
}
}
}
//逻辑入口
function Proc(obj) {
LenheartNewUI_Windows.SyncPos(X, Y);
}
//上传自身战斗力
//时装 帽子 头部 脸 上衣 下装 鞋子 胸部 腰部 皮肤 光环
AvatarInfoIdx = [0x3038, 0x3010, 0x3014, 0x3018, 0x301c, 0x3020, 0x3024, 0x3028, 0x302c, 0x3030, 0x3034];
creInfoIdx = [0x3068, 0x306C, 0x3070, 0x3074];
function UploadYourOwnCombatPower() {
local obj = sq_GetMyMasterCharacter();
if (!obj) return;
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 equiitemsbuf = [];
local equiupbuf = [];
for (local i = 1; i< 13; ++i) {
//编号
local Index = L_sq_GetCharacterAttribute(0x1c, i);
//强化
local Upvalue = L_sq_GetCharacterAttribute(0x1054, i)
//是否有增幅属性
local IsZf = L_sq_GetCharacterAttribute(0x10A8, i)
//锻造
local DsUpvalue = L_sq_GetCharacterAttribute(0x10E8, i);
//附魔卡片
local Enchanting = L_sq_GetCharacterAttribute(0x1084, i);
equiitemsbuf.append(Index);
local Info = [];
if (IsZf) {
Info.append(0);
Info.append(Upvalue);
} else {
Info.append(Upvalue);
Info.append(0);
}
Info.append(DsUpvalue);
Info.append(Enchanting);
equiupbuf.append(Info);
}
//记录宠物
local creitemsbuf = [];
foreach(offset in creInfoIdx) {
local creEquiAddress = L_sq_RA(C_Object + offset);
if (creEquiAddress >= 0x400000) {
local NormalIndex = L_sq_RA(creEquiAddress + 0x1c);
creitemsbuf.append(NormalIndex);
} else {
creitemsbuf.append(0);
}
}
//记录四维三攻属强
local Attributes = 0;
Attributes += L_sq_GetCharacterAttribute(0x2364);
Attributes += L_sq_GetCharacterAttribute(0x2394);
Attributes += L_sq_GetCharacterAttribute(0x237c);
Attributes += L_sq_GetCharacterAttribute(0x23ac);
local AttackValue = 0;
AttackValue += L_sq_GetCharacterAttribute(0x1E54);
AttackValue += L_sq_GetCharacterAttribute(0x1E84);
AttackValue += L_sq_GetCharacterAttribute(0x22C8);
local Enhancement = 0; //火冰光暗
Enhancement += L_sq_GetCharacterAttribute(0x1b54);
Enhancement += L_sq_GetCharacterAttribute(0x1b60);
Enhancement += L_sq_GetCharacterAttribute(0x1b78);
Enhancement += L_sq_GetCharacterAttribute(0x1b6c);
local T = {
op = 20096001,
ava = avataritemsbuf,
equ = equiitemsbuf,
sw = Attributes,
atk = AttackValue,
ele = Enhancement,
cre = creitemsbuf,
job = sq_getJob(obj),
exjob = sq_getGrowType(obj),
name = L_Sq_GetObjectName(obj),
equUp = equiupbuf,
fst = 0,
}
SendPackEx(T);
}
function OpenCallBack() {
UploadYourOwnCombatPower();
CheckPersonalCombatPower();
CheckGuildCombatPower();
LookingInfo = null;
this.Visible = true;
}
}
L_Windows_List <- [];
getroottable().rawdelete("LenheartPluginsInitFlag");
getroottable().rawdelete("EventList_Obj")
getroottable().rawdelete("TH_CombatRank_Obj");
function Lenheart_TH_CombatRank_Fun(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("TH_CombatRank_Obj")) {
RootTab.rawset("TH_CombatRank_Obj", true);
local Win = LenheartNewUI_CreateWindow(TH_CombatRankC, "桃花定制战力榜窗口", ((getroottable().Rindro_Scr_Width - 542) / 2).tointeger(), 28, 542, 515, 28);
EventList_Obj.AddEvent("全服战力榜", 694, Win, "interface2/hud/information_button/information_button_cn.img");
}
}
getroottable()["LenheartFuncTab"].rawset("TH_CombatRankFuncN", Lenheart_TH_CombatRank_Fun);
class TH_CombatRankC_Item {
//Img
Img = null;
//编号
Idx = null;
//父对象
Parent = null;
//显示角色
CharacShow = null;
//信息体
Info = null;
//类型
Type = 0;
constructor(Window, Idx, Info, Type) {
Parent = Window;
Img = Window.Img["main"];
this.Idx = Idx;
this.Info = Info;
this.Type = Type;
}
function Show(X, Y) {
if (Idx< 3) {
Img.DrawPng(4 + Idx, X + 3, Y);
} else {
Img.DrawPng(1, X + 3, Y);
}
local Ranking = (Idx + 1).tostring();
local JobName;
local CharacName;
local Combat;
if (this.Type == 0) {
JobName = Info.jobname;
CharacName = Info.name;
Combat = Info.zdlS;
} else if (this.Type == 1) {
JobName = Info.guildMaster;
CharacName = Info.guildName;
Combat = Info.zdlS;
}
//绘制排名
L_sq_DrawCode(Ranking, X + 17 - LenheartTextClass.GetStringLength(Ranking) / 2, Y + 14, sq_RGBA(230, 200, 155, 255), 0, 1);
//绘制职业
L_sq_DrawCode(JobName, X + 70 - LenheartTextClass.GetStringLength(JobName) / 2, Y + 14, sq_RGBA(230, 200, 155, 255), 0, 1);
//绘制角色名
L_sq_DrawCode(CharacName, X + 170 - LenheartTextClass.GetStringLength(CharacName) / 2, Y + 14, sq_RGBA(230, 200, 155, 255), 0, 1);
//绘制战斗力
L_sq_DrawCode(Combat, X + 298 - LenheartTextClass.GetStringLength(Combat) / 2, Y + 14, sq_RGBA(230, 200, 155, 255), 0, 1);
//绘制奖励
if (this.Type == 0) {
if (Parent.PersonReward) {
local Reward = Parent.PersonReward[Idx];
foreach(Pos, ItemInfo in Reward) {
Parent.DrawItemBase(X + 377 + (Pos * 30), Y + 6, ItemInfo[0], ItemInfo[1]);
}
}
} else if (this.Type == 1) {
if (Parent.PersonReward) {
local Reward = Parent.PersonReward[Idx];
foreach(Pos, ItemInfo in Reward) {
Parent.DrawItemBase(X + 377 + (Pos * 30), Y + 6, ItemInfo[0], ItemInfo[1]);
}
}
}
}
function HoverShow(X, Y) {
if (Y <= (Parent.Y + 316 + 196)) {
Img.DrawPng(2, X + 3, Y);
}
}
function OnMouseLbDown(X, Y) {
if (this.Type == 0) {
if (Y <= (Parent.Y + 316 + 196) && Y >= (Parent.Y + 316)) {
Parent.LookingInfo = this;
}
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 642 KiB