Rindro-Sqr/Project/Anton/Rindro_Anton.nut

424 lines
15 KiB
Plaintext
Raw Normal View History

2024-09-16 17:09:36 +08:00
/*
文件名:Rindro_Anton.nut
路径:Project/Anton/Rindro_Anton.nut
创建日期:2024-08-13 09:30
文件用途:安图恩
*/
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 {
//基础配置
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 = 20064501,
}
SendPackEx(T);
}
//请求掉线配置信息
function GetFiendwarDown() {
local T = {
op = 20064063,
}
SendPackEx(T);
}
//基础信息配置
function FiendwarBase(Chunk) {
BaseConfig = Json.Decode(Chunk);
FiendwarChannelTownLogicCallBack();
}
//基础攻坚信息配置
function AntonFightBase(Chunk) {
FightConfig = Json.Decode(Chunk);
}
//团本专属频道上线城镇移动包
function FiendwarChannelTownLogicCallBack() {
if (BaseConfig.channel_index.find("18")) {
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);
}
}
}
//获取攻坚队信息回调
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_AntonPartyInfoMemberC) {
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) {
// 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,
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 = 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_AntonPartyInfoMemberC(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 = 20064011
}
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(20064028, RaidStartFightCallBack.bindenv(this));
Pack_Control.rawset(20064016, RaidFightInfoCallBack.bindenv(this));
Pack_Control.rawset(20064004, GetTeamInfoCallBack.bindenv(this));
Pack_Control.rawset(20064036, AntonFightBase.bindenv(this));
//攻坚奖励包
Pack_Control.rawset(20064026, RaidRewardInfoCallBack.bindenv(this));
//初始化包 退出队伍 或者 被 请出队伍
Pack_Control.rawset(20064008, RaidInitCallBack.bindenv(this));
//火山怪物投放
Pack_Control.rawset(20064050, MonsterSendCallBack.bindenv(this));
//绘制动画包
Pack_Control.rawset(20064038, RaidPlayAniCallBack.bindenv(this));
//获取基础配置回调包
Pack_Control.rawset(20064502, FiendwarBase.bindenv(this));
//第一次上线要重新请求一下位置信息
GetFiendwarBase();
//看看是否有断线重连
GetFiendwarDown();
}
function Proc(obj) {
PartyHallWindow_Object = LenheartNewUI_CreateWindow(Rindro_Anton_PartyHallC, "新安图恩攻坚大厅窗口", ((getroottable().Rindro_Scr_Width - 478)).tointeger(), 40, 478, 434, 18);
PartyFormationWindow_Object = LenheartNewUI_CreateWindow(Rindro_AntonPartyFormation, "安图恩我的队伍编队窗口", 375, 190, 294, 192, 18);
FightSituationWindow_Object = LenheartNewUI_CreateWindow(Rindro_AntonFightSituationC, "安图恩攻坚战况表", ((getroottable().Rindro_Scr_Width - 800) / 2).tointeger(), 8, 800, 600, 0);
PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_AntonPartyInfoC, "安图恩我的队伍窗口", 6, 15, 354, 566, 18);
RewardWindow_Object = LenheartNewUI_CreateWindow(Rindro_Anton_RewardC, "安图恩翻牌奖励窗口", 0, 0, 0, 0, 0);
LenheartNewUI_CreateWindow(Rindro_Anton_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 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, 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 + 158 - LenheartTextClass.GetStringLength(str) / 2, 244, sq_RGBA(255, 146, 0, 250), 0, 1);
break;
case 5:
T_DrawDynamicAni(obj, "common/anton/title/00_start_back.ani", 430, 210 + 26, "安图恩阻截开始" + DrawPlayAniT);
break;
case 6:
T_DrawDynamicAni(obj, "common/anton/title/02_success_back.ani", 430, 210 + 26, "安图恩阻截成功" + DrawPlayAniT);
break;
case 7:
T_DrawDynamicAni(obj, "common/anton/title/01_fail_back.ani", 430, 210 + 26, "安图恩阻截失败" + DrawPlayAniT);
break;
case 8:
T_DrawDynamicAni(obj, "common/anton/title/00_start_back_1.ani", 430, 210 + 26, "安图恩灭杀开始" + DrawPlayAniT);
break;
case 9:
T_DrawDynamicAni(obj, "common/anton/title/02_success_back_1.ani", 430, 210 + 26, "安图恩灭杀成功" + DrawPlayAniT);
break;
case 10:
T_DrawDynamicAni(obj, "common/anton/title/01_fail_back_1.ani", 430, 210 + 26, "安图恩灭杀失败" + DrawPlayAniT);
break;
case 11:
case 12:
T_DrawDynamicAni(obj, "common/anton/title/03_warning_back.ani", 0, 210 + 26, "安图恩火山警告" + DrawPlayAniT);
local str = "火山能量即将过载,请立即前往压制!!!";
if (DrawPlayAniMark == 12) str = "震颤的大地已经复活,请立即前往压制!!!"
if (Ct >= 350 && Ct <= 1600) L_sq_DrawCode(str, 236 + 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_Anton_Obj");
function Lenheart_Rindro_Anton_New(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("RinDro_Anton_Obj")) {
RootTab.rawset("RinDro_Anton_Obj", RinDro_Anton());
} else {
RootTab["RinDro_Anton_Obj"].Proc(obj);
}
}
if (getroottable().rawin("LenheartTopFuncTab")) {
getroottable()["LenheartTopFuncTab"].rawset("Lenheart_Rindro_Anton_NewFunc", Lenheart_Rindro_Anton_New);
} else {
local T = {};
T.rawset("Lenheart_Rindro_Anton_NewFunc", Lenheart_Rindro_Anton_New);
getroottable().rawset("LenheartTopFuncTab", T);
}