428 lines
15 KiB
Plaintext
428 lines
15 KiB
Plaintext
/*
|
|
文件名:Rindro_Luke.nut
|
|
路径:Project/Luke/Rindro_Luke.nut
|
|
创建日期:2024-08-13 09:30
|
|
文件用途:卢克
|
|
*/
|
|
|
|
|
|
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");
|
|
|
|
|
|
//卢克核心数据类
|
|
class RinDro_Luke 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 = 20084501,
|
|
}
|
|
SendPackEx(T);
|
|
}
|
|
//请求掉线配置信息
|
|
function GetFiendwarDown() {
|
|
local T = {
|
|
op = 20084063,
|
|
}
|
|
SendPackEx(T);
|
|
}
|
|
|
|
//基础信息配置
|
|
function FiendwarBase(Chunk) {
|
|
BaseConfig = Json.Decode(Chunk);
|
|
FiendwarChannelTownLogicCallBack();
|
|
}
|
|
|
|
//基础攻坚信息配置
|
|
function LukeFightBase(Chunk) {
|
|
FightConfig = Json.Decode(Chunk);
|
|
}
|
|
|
|
//团本专属频道上线城镇移动包
|
|
function FiendwarChannelTownLogicCallBack() {
|
|
if (BaseConfig.channel_index.find("19")) {
|
|
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_LukePartyInfoMemberC) {
|
|
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 = 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, //小队编号
|
|
Level = MemberObj.PlayerLevel.tostring(), //等级
|
|
Name = MemberObj.PlayerName, //名字
|
|
JobName = MemberObj.PlayerGrowTypeJob, //职业名
|
|
Job = MemberObj.PlayerJob, //职业编号
|
|
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
|
|
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null), //装备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_LukePartyInfoMemberC(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 = Jso.state;
|
|
MyRaidState = Jso.state;
|
|
|
|
//在获取一下攻坚队信息
|
|
local Jso = {
|
|
op = 20084011
|
|
}
|
|
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(20084028, RaidStartFightCallBack.bindenv(this));
|
|
Pack_Control.rawset(20084016, RaidFightInfoCallBack.bindenv(this));
|
|
Pack_Control.rawset(20084004, GetTeamInfoCallBack.bindenv(this));
|
|
Pack_Control.rawset(20084036, LukeFightBase.bindenv(this));
|
|
//攻坚奖励包
|
|
Pack_Control.rawset(20084026, RaidRewardInfoCallBack.bindenv(this));
|
|
//初始化包 退出队伍 或者 被 请出队伍
|
|
Pack_Control.rawset(20084008, RaidInitCallBack.bindenv(this));
|
|
//火山怪物投放
|
|
Pack_Control.rawset(20084050, MonsterSendCallBack.bindenv(this));
|
|
//绘制动画包
|
|
Pack_Control.rawset(20084038, RaidPlayAniCallBack.bindenv(this));
|
|
|
|
|
|
//获取基础配置回调包
|
|
Pack_Control.rawset(20084502, FiendwarBase.bindenv(this));
|
|
//第一次上线要重新请求一下位置信息
|
|
GetFiendwarBase();
|
|
//看看是否有断线重连
|
|
GetFiendwarDown();
|
|
}
|
|
|
|
|
|
function Proc(obj) {
|
|
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 - 255, 18);
|
|
RewardWindow_Object = LenheartNewUI_CreateWindow(Rindro_Luke_RewardC, "卢克翻牌奖励窗口", 0, 0, 0, 0, 0);
|
|
LenheartNewUI_CreateWindow(Rindro_Luke_NotiC, "卢克攻坚队伍消息分发", 0, 0, 0, 0, 0);
|
|
|
|
if (FightSituationWindow_Object) FightSituationWindow_Object.TopDraw(obj);
|
|
|
|
//绘制动画
|
|
DrawPlayAni(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_Luke_Obj");
|
|
|
|
function Lenheart_Rindro_Luke_New(obj) {
|
|
local RootTab = getroottable();
|
|
if (!RootTab.rawin("RinDro_Luke_Obj")) {
|
|
RootTab.rawset("RinDro_Luke_Obj", RinDro_Luke());
|
|
} else {
|
|
RootTab["RinDro_Luke_Obj"].Proc(obj);
|
|
}
|
|
}
|
|
|
|
if (getroottable().rawin("LenheartTopFuncTab")) {
|
|
getroottable()["LenheartTopFuncTab"].rawset("Lenheart_Rindro_Luke_NewFunc", Lenheart_Rindro_Luke_New);
|
|
} else {
|
|
local T = {};
|
|
T.rawset("Lenheart_Rindro_Luke_NewFunc", Lenheart_Rindro_Luke_New);
|
|
getroottable().rawset("LenheartTopFuncTab", T);
|
|
} |