// @author: xxx@syg.com(必填, 创建模块的人员) // -------------------------------------------------------------------- // @description: // 战斗控制器 //
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( "玩家%s同意了你的切磋请求,点击”立即切磋“立即进入切磋战斗?" ), 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;