Files
fc/dev/project/assets/Scripts/mod/battle/battle_controller.js
T
2026-05-23 22:10:14 +08:00

1035 lines
37 KiB
JavaScript

// @author: xxx@syg.com(必填, 创建模块的人员)
// --------------------------------------------------------------------
// @description:
// 战斗控制器
// <br/>Create: 2018-11-28 19:19:19
// --------------------------------------------------------------------
const BridgeController = require( "bridge.controller" );
const BattleEvent = require( "battle_event" );
const BattleConst = require( "battle_const" );
const MainuiEvent = require( "mainui_event" );
const BattleRolePool = require( "battle_role_pool" );
const FID = require( "bridge.function.ids" );
const BattleController = cc.Class( {
extends: BridgeController,
name: "BattleController",
// 销毁
onDestroy: function() {
// 强制清除scene
this.openDramaFightUI( false );
this.model.closeFormView();
this.clearBattleScene();
if( BattleRolePool.getInstance ) {
BattleRolePool.getInstance().clearCachePool();
delete BattleRolePool.instance;
BattleRolePool.instance = null;
}
this._super();
},
// 初始化配置数据
initConfig: function() {
this.model = Utils.createClass( "battle_model" )
this.hook_model = Utils.createClass( "battle_hook_model" );
this.model.initConfig();
this.hook_model.initConfig()
this.is_watch_replay = false; // 是否属于观战状态
this.is_unlock_chapter = false // 是否解锁章节中
this.is_normal_battle = false; // 是否是真战斗
this.finish_result_view_list = {}; // 胜利面板列表
this.finish_fail_view_list = {}; // 失败面板列表;
this.cache_list = []; //缓存界面列表
this.is_watch_witness = false // --是否为观战状态
this.init_fight_status = false
this.circle_round_data = null // --挂机缓存数据
this.cur_fight_type = 0
this.is_battle_start = false //--是否已进入战斗状态
this.is_pk_battle = false //--是否切磋状态
this.extend_fight_type = BattleConst.Fight_Type.Darma //--额外的战斗类型记录
this.fighting_type_list = {}
this.is_drama_result = false
this.sum_lev = 0 // --己方总等级
this.enemy_lev = 0 //--敌方总等级
//关于假数据
this.is_battle_hook_wait = false; //开始假挂机数据等待
this.battle_test_data = {};
this.is_test_skip = false;
//特殊·结算
this.special_results = {};
},
// 返回当前的model
getModel: function() {
return this.model;
},
// 假战斗数据
getHookModel: function() {
return this.hook_model;
},
// 注册监听事件
registerEvents: function() {
if( this.loading_enter_scene == null ) {
this.loading_enter_scene = gcore.GlobalEvent.bind( MainuiEvent.LOADING_ENTER_SCENE, ( function() {
this.showCachePanel();
} ).bind( this ) )
}
//请求进入竞技场之前,需要告诉服务器,我要进去了,有没有真是战斗,快点告诉我
if( this.combat_type_back_event == null ) {
this.combat_type_back_event = gcore.GlobalEvent.bind( BattleEvent.COMBAT_TYPE_BACK, function( combat_type, type ) {
if( type === 0 ){ //不存在战斗
this.openRelevanceWindowAtOnce( combat_type )
}
// else{
// let config = game.configs.combat_type_data.data_fight_list[combat_type];
// if(config && config.des){
// let tip = cc.js.formatStr(nx.text.getKey("battle_loading_tip"),config.des);
// return nx.tbox(tip);
// }
// }
}, this )
}
// 退出战斗需要打开进入战斗之前的一些窗体
if( !this.battle_exit_event ) {
this.battle_exit_event = gcore.GlobalEvent.bind( EventId.EXIT_FIGHT, function( combat_type ) {
this.openRelevanceWindowAtOnce( combat_type )
}.bind( this ) )
}
},
// 注册协议接受事件
registerProtocals: function() {
this.RegisterProtocal( 20027, this.scInitFightStart ); // 战斗真正初始化数据,从0到1的战斗
this.RegisterProtocal( 20001, this.handle20001 );
this.RegisterProtocal( 20002, this.scRoundFightStart ); // 回合开始的播报 -- 包含回合开始的buff
this.RegisterProtocal( 20004, this.scRoundFightOn ); // 回合中的播报 -- 包含回合结束buff和效果播报的buff
this.RegisterProtocal( 20006, this.scFightEnd ); // 战斗结算的,也就是真是战斗结束的
this.RegisterProtocal( 20008, this.scFightExit ); // 退出战斗
this.RegisterProtocal( 20009, this.scSkipFirstTeam ); // 跳过一队
this.RegisterProtocal( 20013, this.scReBattleFight ); // 战斗重连,切进战斗或者短线重连的战斗
this.RegisterProtocal( 20014, this.scBattlePk ); // 战斗切磋请求
this.RegisterProtocal( 20015, this.scBattlePkRe ); // 战斗切磋返回
this.RegisterProtocal( 20016, this.scBattlePkTwice ); // 战斗切磋同意
this.RegisterProtocal( 20020, this.scRoundNextFight ); // 下一波怪物
this.RegisterProtocal( 20022, this.scFightSpeed ); // 改变播放速度
this.RegisterProtocal( 20029, this.scRecordBattle ); // 看录像
this.RegisterProtocal( 20033, this.handle20033 ); // 切磋结算
this.RegisterProtocal( 20034, this.handle20034 ); // 切磋视频分享
this.RegisterProtocal( 20036, this.handle20036 ); // 观看跨服录像,最后应该29协议全部转到这一条
this.RegisterProtocal( 20060, this.handle20060 ); // 请求战斗类型返回,这个时候只需要做对应ui操作的
this.RegisterProtocal( 20061, this.handle20061 ); // 假战斗初始化的,如果触发这个数据但是实际上是在真战斗中的时候,不做处理
this.RegisterProtocal( 20062, this.handle20062 ); // 跳过战斗
this.RegisterProtocal( 20063, this.handle20063 );
this.RegisterProtocal( 20064, this.handle20064 ); //直接请求通关
this.RegisterProtocal( 20065, this.handle20065 ); //新版战斗总回合数
this.RegisterProtocal( 20066, this.handle20066 ); //无尽试炼下波次上报
this.RegisterProtocal( 20070, this.handle20070 );
this.RegisterProtocal( 20080, this.handle20080 );
},
reqBaseFromServer: function( _cb ) {
// 配置加载
let cfgs = [
"battle_act_data", // 英雄战斗模型
"battle_bg_data", // 战斗场景
"buff_data", // buff
"combat_halo_data", // 阵容光环配置
"combat_type_data", // 战斗配置(类型、天平模式、倍速等)
"battle_lens_data"
];
this.loadConfigs( cfgs, ( _ret, _data ) => {
nx.dt.fnInvoke( _cb, true );
} );
},
openDramaFightUI: function( status ) {
if( this.show_fight_ui_status == status && this.fight_ui_combat == this.model.getFightStatus() ) {
return;
}
this.show_fight_ui_status = status;
this.fight_ui_combat = this.model.getFightStatus();
if( !status ) {
nx.bridge.closePanel( "WndBattleHook" );
this.model.setBattleListPanelTime();
} else {
nx.bridge.createPanel( "WndBattleHook", { is_real_combat: this.model.getFightStatus() } )
this.model.setBattleListPanelTime( 0 );
}
this.setIsNormaBattle( this.model.getFightStatus() );
this.model.startCountDownToDelete();
},
// 是否在战斗中
isInFight: function() {
return this.model.getFightStatus()
},
// 是否有战斗场景
hadBattleScene: function() {
return ( this.model.getBattleScene() != null )
},
// 设置战斗场景的状态
handleBattleSceneStatus: function( status ) {
this.model.handleBattleSceneStatus( status )
},
handle20001: function(data){
},
// 根据战斗类型请求数据,r如果是切出战斗的话 则 combat_type:BattleConst.Fight_Type.Nil
send20060: function( combat_type,_cb ) {
var protocal = {
combat_type: combat_type
}
this.SendProtocal( 20060, protocal,_cb );
//新版战斗需要清除参数
if( this.isInFight() ) {
}
},
// 返回战斗状态,
handle20060: function( data ) {
if( data.combat_type == 0 ) { // 这个就是切出战斗,
this.clearBattleScene();
} else {
}
gcore.GlobalEvent.fire( BattleEvent.COMBAT_TYPE_BACK, data.combat_type, data.type );
},
send20070: function( id,_cb ) {
var protocal = {
id: id
}
this.SendProtocal( 20070, protocal,_cb );
},
// 返回战斗状态,
handle20070: function( data ) {
if( !this.isGoodData( data ) ) {
return;
}
if(data.id!=null){
this.show_bat_id = data.id;
}
},
getShowBatID(){
return this.show_bat_id;
},
OutResult(){
this.SendProtocal( 20080, {} );
},
handle20080: function( _data ) {
if( !this.isGoodData( _data ) ) {
return;
}
},
handle20063: function(data){
if(data.type_list){
this.in_bat_list = data.type_list;
}
},
send20064: function( combat_type ) {
var protocal = {
combat_type: combat_type
}
this.SendProtocal( 20064, protocal );
},
handle20064: function( data ) {
console.log( data )
},
handle20065: function( data ) {
},
send20066: function( wave ) {
var protocal = {
wave: wave
}
this.SendProtocal( 20066, protocal );
},
handle20066: function( data ) {
},
waitOvertimeBattleHook() {
if( !this.connect_timer ) {
this.connect_timer = gcore.Timer.set( () => {
if( this.is_battle_hook_wait ) {
this.is_battle_hook_wait = false;//关闭
gcore.GlobalEvent.fire( BattleEvent.COMBAT_TYPE_BACK, 3, 2 );//锁定假战斗
}
}, 1000, 1 );
}
},
pushBattleResultData: function( data ) {
},
// 战斗结算的,也有可能不需要出结算面板
scFightEnd: function( data ) {
if( data.show_panel_type == 1 || data.combat_type == BattleConst.Fight_Type.LadderWar ) {
nx.bridge.vset( "ResultInfo", data );
}
var is_replay = false;
if( data.combat_type > 1000 ) {
data.combat_type = data.combat_type - 1000;
is_replay = true;
}
this.model.showWin( data, is_replay );
},
// 清理战斗场景,在退出战斗或者战斗结算之后,如果个战斗是剧情副本的战斗,那么就不需要清理掉场景,而是直接切换到假战斗
clearBattleScene: function() {
this.model.clearBattleScene();
},
// 请求切出战斗
requestCutOutBattle: function(_cb) {
this.send20060( BattleConst.Fight_Type.Nil,_cb );
},
// 战斗初始化数据
scInitFightStart: function( data ) {
let skip = nx.storage.get( "vip_skip" );
if( Number( skip ) == 1 ) return;
if( this.is_test_skip ) {
this.is_test_skip = false;
return;
}
if( BattleConst.canDoBattle( data.combat_type ) ) {
if( data.combat_type == 35 || data.combat_type == 27) {//组队竞技场
//加一个开始标志
// this.model.setInitFightData( data );
} else {
// this.model.setArenaTeamStart( false );
}
// if( this.model.isArenaTeamStart() ) return;
//设置最大回合数
// this.model.setMaxActionCount( game.configs.combat_type_data.data_fight_list[ data.combat_type ].max_action_count );
this.model.updateCurBattleData( data, true );
this.prepareLoaderBattleScene( data.combat_type, 2 );
}
},
// 切进战斗
scReBattleFight: function( data ) {
if( BattleConst.canDoBattle( data.combat_type ) ) {
this.model.updateCurBattleData( data, false );
this.prepareLoaderBattleScene( data.combat_type, 2 );
}
},
// 回合开始的播报
scRoundFightStart: function( data ) {
if(nx.dt.objEmpty(data))return;
nx.debug( "回合开始播报" );
this.model.playRoundStart( data);
},
// 回合中的播报
scRoundFightOn: function( data ) {
if(nx.dt.objEmpty(data))return;
nx.debug( "回合播报" );
this.model.playRoundIn( data );
},
// 回合播报结束通知服务端,对应的是20004
csSkillPlayEnd: function() {
nx.debug( "20004 播报完成" );
this.SendProtocal(20005, {});
},
// 回合开始播报完成之后,通知服务端,对应的是20002
csRoundFightEnd: function() {
nx.debug( "20002 播报完成" );
this.SendProtocal(20019, {});
},
// 战斗初始化完成之后
csReadyFightStart: function() {
nx.debug( "战斗初始化完成,通知服务端可以开始播报了" );
this.SendProtocal( 20001, {} );
},
// 请求跳过战斗
send20062: function() {
this.SendProtocal(20062, {});
},
handle20062: function( data ) {
if( !this.isGoodData( data ) ) {
return;
}
},
// 假战斗数据
handle20061: function( data ) {
cc.log( "假战斗数据" );
//清除假数据
this.is_battle_hook_wait = false;
if( this.connect_timer ) {
gcore.Timer.del( this.connect_timer );
this.connect_timer = null;
}
if( this.hook_model ){
this.hook_model.updateUnrealBattleData( data );
}
this.prepareLoaderBattleScene( data.combat_type, 1 );
// }
},
csRecordBattle: function( replay_id ) {
var protocal = {};
protocal.replay_id = replay_id;
this.SendProtocal( 20029, protocal );
},
// 战斗录像,这里只是记录战斗录像状态
scRecordBattle: function( data ) {
nx.tbox( data.msg );
if( data.code == 1 ) {
this.setWatchReplayStatus( true );
}
},
// 切磋结果返回
handle20033: function( data ) {
if( data.combat_type == null ) {
data.combat_type = BattleConst.Fight_Type.PK;
}
if( data.show_panel_type == null ) {
data.show_panel_type = 2;
nx.bridge.vset( "ResultInfo", data );
}
this.model.showWin( data );
},
newPKResultWin() {
// if( !this.battle_pk_result_data ) return;
// let data = this.battle_pk_result_data;
// if( data.combat_type == null ) {
// data.combat_type = BattleConst.Fight_Type.PK;
// }
// if( data.show_panel_type == null ) {
// data.show_panel_type = 1
// }
// this.model.showWin( this.battle_pk_result_data );
// this.battle_pk_result_data = null;
},
// 分享切磋视频
on20034: function( replay_id, channel, target_name, share_type ) {
var protocal = {}
protocal.replay_id = replay_id
protocal.channel = channel
protocal.target_name = target_name
protocal.share_type = share_type
this.SendProtocal( 20034, protocal )
},
handle20034: function( data ) {
nx.tbox( data.msg );
},
/**
* 切换进战斗的唯一接口
* @param {*} combat_type
* @param {*} in_fight_type 0:没有战斗 1:假战斗 2:真战斗
*/
prepareLoaderBattleScene: function( combat_type, in_fight_type ) {
if(combat_type == 1){//gm测试战斗
this.ui_fight_type = 1;
}
if(this.ui_fight_type == 0)return;
if( this.model ){
this.model.createBattleScene( in_fight_type, combat_type );
// 进入战斗,抛出事件
if( in_fight_type == 2 ) {
gcore.GlobalEvent.fire( EventId.ENTER_FIGHT, combat_type, in_fight_type );
}
}
},
/**
* 下一波怪物的入口
* @param {*} data
*/
scRoundNextFight: function( data ) {
if( data ) {
this.model.upDateNextMon( data );
}
},
// 战斗每一帧更新
update: function( dt ) {
// this.model.mapMovescheduleUpdate(dt);
},
// 切换战斗背景移动状态,主要是用于真假剧情战斗切换
changeMoveMapStatus: function( status ) {
this.model.changeMoveMapStatus()
},
// 查看录像返回
sender_20036: function( replay_id, replay_srv_id ) {
var protocal = {
replay_id: replay_id,
replay_srv_id: replay_srv_id,
}
this.SendProtocal( 20036, protocal );
},
handle20036: function( data ) {
if( data.code == 1 ) {
this.setWatchReplayStatus( true )
}
},
// 退出战斗
csFightExit: function() {
this.SendProtocal( 20008, {} );
},
scFightExit: function( data ) {
nx.tbox( data.msg );
},
// 跳过一队
csSkipFirstTeam: function() {
this.SendProtocal( 20009, {} );
},
scSkipFirstTeam: function( data ) {
nx.tbox( data.msg );
},
// 是否是观战状态
getWatchReplayStatus: function() {
return this.is_watch_replay;
},
// 设置观战状态
setWatchReplayStatus: function( status ) {
this.is_watch_replay = status;
},
// 是否是观战或者切磋状态
getIsClickStatus: function() {
var combat_type = this.model.getCombatType();
return this.getWatchReplayStatus() || ( combat_type == BattleConst.Fight_Type.PK ) || ( combat_type == BattleConst.Fight_Type.HeroTestWar );
},
setUnlockChapterStatus: function( status ) {
this.is_unlock_chapter = status;
},
getUnlockChapterStatus: function() {
return this.is_unlock_chapter;
},
//进入主场景后显示缓存的界面
showCachePanel: function() {
if( this.cache_list == null || this.cache_list.length <= 0 ) return;
for( var i in this.cache_list ) {
if( this.cache_list[ i ].function ) {
this.cache_list[ i ].function();
}
}
this.cache_list = [];
},
//特殊結算
pushSpecialRetInfo(combat_type,data){
this.special_results[combat_type] = data;
//如果當前戰鬥就是目標戰鬥,那就直接結算
if(this.model.getCombatType() == 0){//this.getIsSameBattleType(combat_type) ||
this.checkSpecialResults();
}
},
//每次特殊結算界面關閉時,清除目標數據
delSpecialRetInfo(combat_type){
if(this.special_results[combat_type]){
console.log("特殊结算缓存清除");
delete this.special_results[combat_type];
}
},
checkSpecialResults(){
console.log("特殊结算展示");
for(let type in this.special_results){
nx.bridge.createPanel("WndSpecialSettle",{data:this.special_results[type]});
return;
}
},
// 战斗结算界面
openFinishView: function( status, combat_type, data ) {
if( status == true ) {
if( !this.is_unlock_chapter ) {
if( combat_type == BattleConst.Fight_Type.LadderWar ) {
nx.storage.set( "battleArena", FID.CrossLadder );
gcore.GlobalEvent.fire( BattleEvent.DISPENSE_TYPE_RESLUT );
} else if( combat_type == BattleConst.Fight_Type.Arean_Team ) { //組隊競技場
// var ArenateamController = require("arenateam_controller")
// ArenateamController.getInstance().openArenateamFightResultPanel(true, data)
} else if( combat_type == BattleConst.Fight_Type.PK ) { // PK
// this.finish_result_view_list[combat_type] = Utils.createClass("battle_pk_result_window");
// this.finish_result_view_list[combat_type].open(data)
} else if( combat_type == BattleConst.Fight_Type.Arena ) {
//自己有自己的结算界面
nx.storage.set( "battleArena", FID.Arena );
gcore.GlobalEvent.fire( BattleEvent.DISPENSE_TYPE_RESLUT );
} else if( combat_type == BattleConst.Fight_Type.Adventrue ){
let data = nx.bridge.vget( "ResultInfo" );
this.model.result(data,null);
nx.bridge.vset( "ResultInfo", {} );
}else if( combat_type == BattleConst.Fight_Type.Training_Camp ){
nx.storage.set( "battleArena", FID.NewTrain );
// nx.bridge.createPanel( "WndTrainingCamp" );
}
// else if(combat_type == 3 || combat_type == 7){
// if(data.result == 1){
// this.checkSpecialResults(combat_type);
// }else{
// if( combat_type != 0 ){
// this.openOtherFinish( combat_type );
// }
// }
// }
else {
if( data.result == 1 ) {
//设置不要马上显示升级
// LevupgradeController.getInstance().waitForOpenLevUpgrade(true)
if( combat_type == 0 ){
gcore.GlobalEvent.fire( BattleEvent.DISPENSE_TYPE_RESLUT );
return;
}
this.openOtherFinish( combat_type );
} else {
// cc.log( "打开失败界面" )
if( combat_type != 0 ){
this.openOtherFinish( combat_type );
}
}
}
}
} else {
if( this.finish_result_view_list[ combat_type ] ) {
this.finish_result_view_list[ combat_type ].close();
this.finish_result_view_list[ combat_type ] = null;
}
}
},
getFinishView: function( combat_type ) {
if( this.finish_result_view_list ) {
return this.finish_result_view_list[ combat_type ]
}
},
//打开战斗伤害统计界面
openBattleHarmInfoView: function( status, data ) {
// if (status == true) {
// if (this.harm_info_view == null) {
// this.harm_info_view = Utils.createClass("battle_harm_info_window");
// }
// this.harm_info_view.open(data);
// } else {
// if (this.harm_info_view) {
// this.harm_info_view.close();
// this.harm_info_view = null;
// }
// }
},
//主要用于结算id不等于20006的结算功能
openOtherFinish( combat_type ) {
if(this.getIsSameBattleType(combat_type)){
let data = nx.bridge.vget( "ResultInfo" );
if( data.result ) {
if( data.result == 1 ) {//成功
this.openWinFinishView( true, combat_type );
// nx.bridge.Tag2PanelClose("WndWinSettle");
} else {//失败
this.openFailFinishView( true, combat_type );
// nx.bridge.Tag2PanelClose("WndFailSettle");
}
nx.bridge.vset( "DailyPop", 1 );
} else {//不需要结算数据
}
}
},
openWinFinishView( status, combat_type ) {
if( status ) {
if( !this.is_unlock_chapter ) {
//设置不要马上显示升级
let data = nx.bridge.vget( "ResultInfo" );
if(data.combat_type != combat_type)return;
nx.bridge.createPanel( "WndWinSettle", { combat_type: combat_type } );
} else {
this.battle_controller.send20060( BattleConst.Fight_Type.Darma );
}
} else {
nx.bridge.closePanel( "WndWinSettle" );
nx.bridge.vset( "ResultInfo", {} );
}
},
//失败结算界面
openFailFinishView: function( status, combat_type ) {
if( status ) {
if( !this.is_unlock_chapter ) {
//设置不要马上显示升级
nx.bridge.createPanel( "WndFailSettle", { combat_type: combat_type } );
} else {
this.battle_controller.send20060( BattleConst.Fight_Type.Darma );
}
} else {
nx.bridge.closePanel( "WndFailSettle" );
nx.bridge.vset( "ResultInfo", {} );
}
},
//获取是否相同的战斗类型
getIsSameBattleType: function( combat_type ) {
return combat_type == this.model.getCombatType();
},
getIsInBattleing(combat_type){
for(let i in this.in_bat_list){
let type = this.in_bat_list[i];
if(type!=11 && combat_type == type){//非无尽试炼
return true;
}
}
return false;
},
// -- 打开阵营详细面板
openBattleCampView( status, form_id ) {
if( status == true ) {
nx.bridge.createPanel( "WndBattkeCamp", { form_id: form_id } );
} else {
nx.bridge.closePanel( "WndBattkeCamp" );
}
},
// 记录是否为假战斗的战斗
setIsNormaBattle: function( status ) {
this.is_normal_battle = status;
},
// 是否是假战斗....
getIsNoramalBattle: function() {
return this.is_normal_battle;
},
// 改变战斗速度
csFightSpeed: function( speed ) {
var protocal = {}
protocal.speed = speed;
this.SendProtocal( 20022, protocal );
},
scFightSpeed: function( data ) {
if(data.code == 0){
nx.tbox( data.msg );
}
},
getCtrlBattleScene: function( cal_back ) {
var battle_scen = this.model.getBattleScene();
cal_back( battle_scen );
},
getDramaFightUI: function( finish_cb ) {
if( finish_cb ) {
finish_cb( this.model.getDramaFightUI() );
} else {
if( this.model )
return this.model.getDramaFightUI();
}
},
// ---------------------切磋请求
csBattlePk: function( target_id, target_srv_id, is_province ) {
var protocal = {};
protocal.target_id = target_id;
protocal.target_srv_id = target_srv_id;
protocal.is_province = is_province;
this.SendProtocal( 20014, protocal );
},
scBattlePk: function( data ) {
nx.tbox( data.msg );
require( "chat_controller" ).getInstance().closeChatPanel( false );
require( "friend_controller" ).getInstance().openFriendCheckPanel( false );
},
// 被切磋对象,在18600收到提示之后,调用这个接口同意或者取消掉
confirmBattlePk: function( promptVo ) {
},
// 被切磋对象,同意切磋或者拒绝切磋
csBattlePkRe: function( bool, data ) {
var protocal = {};
protocal.target_id = data.target_id;
protocal.target_srv_id = data.target_srv_id;
protocal.is_agree = bool ? 1 : 0;
this.SendProtocal( 20015, protocal );
},
scBattlePkRe: function( data ) {
nx.tbox( data.msg );
},
// 目标这统一了自己发起的请求.这时候自己的二次确认
scBattlePkTwice: function( data ) {
if( data ) {
if( !this.isInFight() ) {
var accept_fun = function() {
this.csBattlePkTwiceConfirm( true, { target_srv_id: data.target_srv_id, target_id: data.target_id } );
}.bind( this );
var refuse_fun = function() {
this.csBattlePkTwiceConfirm( false, { target_srv_id: data.target_srv_id, target_id: data.target_id } );
}.bind( this );
var desc = cc.js.formatStr( Utils.TI18N( "玩家<color=#0x249015>%s</color>同意了你的切磋请求,点击”立即切磋“立即进入切磋战斗?" ), data.target_name || "" );
nx.mbox( desc, [ "cancel", "confirm" ], ( _key, _box ) => {
if( _key == "cancel" ) {
refuse_fun();
} else if( _key == "confirm" ) {
accept_fun();
}
}, "friend_str12" );
}
}
},
// 发起者同意进战斗或者拒绝
csBattlePkTwiceConfirm: function( bool, data ) {
var protocal = {};
protocal.target_id = data.target_id;
protocal.target_srv_id = data.target_srv_id;
protocal.is_agree = bool ? 1 : 0;;
this.SendProtocal( 20016, protocal );
},
// 打开buff总览界面
openBattleBuffInfoView( status, left_name, right_name ) {
if( status ) {
nx.bridge.createPanel( "WndBattleBuffInfo", { left_name: left_name, right_name: right_name } );
} else {
nx.bridge.closePanel( "WndBattleBuffInfo" );
}
},
// - 更新buff列表界面数据
updateBattleBuffListView( data, group, partner_bid ) {
if( this.buff_list_view && this.buff_list_view.checkIsChosedBuffList( group, partner_bid ) ) {
this.buff_list_view.setData( data )
}
},
// -- 打开buff列表界面
openBattleBuffListView( status, data, group, partner_bid ) {
if( status ) {
nx.bridge.createPanel( "WndBattleBuffList", { data: data, group: group, partner_bid: partner_bid } );
} else {
nx.bridge.closePanel( "WndBattleBuffList" );
}
},
openBattleView: function( status, combat_type ) {
if( status )
this.createMap( null, BattleConst.Fight_Type.Darma )
else {
if( this.resources_load ) {
this.resources_load.DeleteMe()
this.resources_load = null
}
this.setCurFightType( 0 )
this.send20060( 0 )
this.circle_round_data = null
// 這個地方感覺需要判斷當前是不是在戰鬥中,否則這裡也會拋出退出戰鬥事件
this.clear( true )
}
},
clear: function( is_change ) {
this.model.clear( true )
this.battle_hook_model.battleclear()
let is_detele = this.getExtendFightType() != BattleConst.Fight_Type.Darma || this.cur_fight_type == 0
if( this.battle_scene && !tolua.isnull( this.battle_scene ) ) {
if( is_detele == true || is_change == true ) {
if( this.resources_load ) {
this.resources_load.DeleteMe()
this.resources_load = null
}
this.battle_scene.cleanFightView()
this.battle_scene.destroy();
this.battle_scene = null
this.fight_type = null
}
}
},
setCurFightType: function( fight_type ) {
this.cur_fight_type = fight_type
},
/*****战斗面板切换 */
// 获取当前的面板
getUIFightType: function() {
return this.ui_fight_type;
},
// 设置当前面板数据
setUIFightType: function( value ) {
this.ui_fight_type = value
},
// 是否在剧情副本界面
checkIsInDramaUIFight: function() {
return this.ui_fight_type == 4;
},
// 请求打开战斗相关的窗体,同时也包含了剧情副本的
requestOpenBattleRelevanceWindow: function( battle_type, params, _cb ) {
this.relevance_ui_last_type = this.ui_fight_type;
this.relevance_battle_type = battle_type;
this.relevance_params = params;
this.relevance_ui_fight_type = BattleConst.getUIFightByFightType( battle_type );
this.setUIFightType( this.relevance_ui_fight_type );
this.send20060( battle_type, _cb );
},
// 还原之前的ui战斗类型,因为可能几个带战斗类型的面板互相调用
resetUIFightType: function() {
if( this.relevance_ui_last_type ) {
this.ui_fight_type = this.relevance_ui_last_type;
this.relevance_ui_last_type = 0;
}
},
//新手演示和试用战斗触发 1 演示 2 试用
//id 英雄id 1默认试用
requestUseHeroBattle(type = 1,id = 1){
let fight_type = 44;
if(type == 2){
fight_type = 45;
}
this.requestOpenBattleRelevanceWindow(fight_type,null,(_data)=>{
if(_data){
this.send20070(id);
nx.bridge.plot.next();
}
});
},
//打开关联窗体,这里针对世界boss又需要重新判断调整
openRelevanceWindowAtOnce: function( combat_type ) {
if( combat_type == BattleConst.Fight_Type.WorldBoss || combat_type == BattleConst.Fight_Type.SingleBoss ) {
if( this.relevance_battle_type != BattleConst.Fight_Type.WorldBoss && this.relevance_battle_type != BattleConst.Fight_Type.SingleBoss ) return
} else {
if( this.relevance_battle_type != combat_type ) return
}
if( combat_type == BattleConst.Fight_Type.GuildDun ) {//公會boss
nx.bridge.createPanel( "WndGuildChallenge" );
} else if( combat_type == BattleConst.Fight_Type.StarTower ) {//試煉塔
nx.bridge.createPanel( "WndStartower", {} );
} else if( combat_type == BattleConst.Fight_Type.Arena ) {//競技場
nx.bridge.createPanel( "WndArenaLoopChallenge" );
}else if( combat_type == BattleConst.Fight_Type.CrossChampion ) {//跨服冠军赛
nx.bridge.createPanel( "WndCrossChampionWorship" );
} else if( combat_type == BattleConst.Fight_Type.Endless ) {//無盡試煉
require( "endless_trail_controller" ).getInstance().openEndlessMainWindow( true )
} else if( combat_type == BattleConst.Fight_Type.ExpeditFight ) {
// require( "heroexpedit_controller" ).getInstance().openHeroExpeditView( true )
} else if( combat_type == BattleConst.Fight_Type.LadderWar ) {//天梯賽
nx.bridge.createPanel( "WndLadder" );
} else if( combat_type == BattleConst.Fight_Type.DungeonStone ) {//日常副本
nx.bridge.createPanel( "WndDungeonMain", {} );
} else if( combat_type == BattleConst.Fight_Type.GuildWar ) {
nx.bridge.createPanel("WndGuildBatMain",{});
} else if( combat_type == BattleConst.Fight_Type.Adventrue ) {
nx.bridge.createPanel("WndAdventureModel",{});
} else if( combat_type == BattleConst.Fight_Type.LimitExercise ) {
// require( "limitexercise_controller" ).getInstance().openLimitExerciseChangeView( true )
} else if( combat_type == BattleConst.Fight_Type.ElementWar ) {//元素神殿
require( "element_controller" ).getInstance().openElementMainWindow( true )
} else if( combat_type == BattleConst.Fight_Type.PlanesWar ) {//位面戰爭
nx.bridge.createPanel( "WndPlanesafkMain", {} );
} else if( combat_type == BattleConst.Fight_Type.Training_Camp ) { // 新手训练营
nx.bridge.createPanel( "WndTrainingCamp" );
} else if( combat_type == BattleConst.Fight_Type.Arean_Team ) { // 组队竞技场
// require( "arenateam_controller" ).getInstance().openArenateamMainWindow( true )
} else if( combat_type == BattleConst.Fight_Type.EliteMatchWar || combat_type == BattleConst.Fight_Type.EliteKingMatchWar ) {
nx.bridge.createPanel("WndEliteRankMain",{});
} else if( combat_type == BattleConst.Fight_Type.GuildSecretArea ) { //公會秘境
// require( "guildsecretarea_controller" ).getInstance().openGuildsecretareaMainWindow( true, this.relevance_params )
} else if( combat_type == BattleConst.Fight_Type.HeavenWar ) { //神裝副本
nx.bridge.createPanel("WndHeavenMain",{});
} else if(combat_type == BattleConst.Fight_Type.newYearBoss){//陣營大戰
nx.bridge.createPanel("WndCampfightMain",{});
}
this.relevance_battle_type = null;
this.relevance_params = null;
},
/*****战斗面板切换 */
} );
module.exports = BattleController;