2620 lines
73 KiB
JavaScript
2620 lines
73 KiB
JavaScript
// --------------------------------------------------------------------
|
|
// @author: xxx@syg.com(必填, 创建模块的人员)
|
|
// @description:
|
|
// 这里填写详细说明,主要填写该模块的功能简要
|
|
// <br/>Create: {DATE}
|
|
// --------------------------------------------------------------------
|
|
const BridgeClass = require( "bridge.class" );
|
|
var HeroConst = require( "hero_const" );
|
|
var PartnerConst = require( "partner_const" );
|
|
var HeroEvent = require( "hero_event" );
|
|
var PartnerCalculate = require( "partner_calculate" );
|
|
var HeroCalculate = require( "hero_calculate" );
|
|
var HeroController = require( "hero_controller" )
|
|
var BackpackController = require( "backpack_controller" );
|
|
var PathTool = require( "pathtool" );
|
|
var BackPackConst = require( "backpack_const" );
|
|
const RoleController = require( "role_controller" );
|
|
const FID = require( "bridge.function.ids" );
|
|
|
|
|
|
// const { util } = require("config");
|
|
// const { config } = require("process");
|
|
var HeroModel = cc.Class( {
|
|
extends: BridgeClass,
|
|
ctor: function() {
|
|
this.ctrl = arguments[ 0 ];
|
|
},
|
|
|
|
properties: {},
|
|
|
|
initConfig: function() {
|
|
// 伙伴数据列表 (id :英雄唯一标识)
|
|
// 结构 this.hero_list[id] = hero_vo
|
|
this.hero_list = {};
|
|
// 伙伴bid列表的
|
|
// 结构 this.hero_bid_list[bid] = {hero_vo1,hero_vo2}
|
|
this.hero_bid_list = {};
|
|
// 伙伴数据数组形式存储,便于排序
|
|
this.hero_array = [];
|
|
|
|
// 标志第一次初始
|
|
this.is_init = true;
|
|
|
|
// 英雄上限
|
|
this.hero_max_count = 0;
|
|
// 英雄已激活上限次数
|
|
this.buy_num = 0;
|
|
|
|
//皮肤数据 结构: self.hero_skin_list[皮肤id] = 皮肤结束时间 (如果时间 == 0 表永久)
|
|
this.hero_skin_list = null;
|
|
|
|
// 英雄图书馆信息
|
|
this.dic_pokedex_info = null;
|
|
// 英雄图书馆信息 [bid] = 数据
|
|
this.dic_pokedex_bid = {};
|
|
|
|
// 熔炼祭坛的列表
|
|
this.dic_fuse_info = null;
|
|
|
|
// 已拥过有英雄id [bid] = 1
|
|
this.dic_had_hero_info = {};
|
|
|
|
// 布阵站位信息 this.pos_list[布阵类型][pos] = id
|
|
this.pos_list = {};
|
|
|
|
this.expedit_list = null;
|
|
// 阵法类型
|
|
this.use_formation_type = 1;
|
|
// 使用的圣器id
|
|
this.use_hallows_id = 0;
|
|
|
|
// 装备红点背包已更新 记录
|
|
this.is_equip_redpoint_bag_update = true;
|
|
// 装备红点英雄已更新 记录
|
|
this.is_equip_redpoint_hero_update = true;
|
|
|
|
// 是否延迟红点更新中 例子:this.is_delay_redpoint_update[HeroConst.RedPointType.eRPLevelUp] = true
|
|
// 目前只有升级红点用
|
|
this.is_delay_redpoint_update = {};
|
|
|
|
// 进阶和升星材料消耗 只能写死 如果策划改了.跟着改吧
|
|
this.upgrade_star_cost_id = 10001;
|
|
this.dic_star_count = {}
|
|
|
|
// 升星红点背包已更新 记录
|
|
this.is_upgradestar_redpoint_bag_update = true;
|
|
// 升星红点英雄已更新 记录
|
|
this.is_upgradestar_redpoint_hero_update = true;
|
|
|
|
// 阵法 红点 (一次性的)
|
|
this.is_redpoint_form = false;
|
|
// 圣器 红点 (一次性的)
|
|
this.is_redpoint_hallows = false;
|
|
|
|
// 记录登陆时候角色的等级 判断阵法是否新解锁用
|
|
this.record_login_lev = 0;
|
|
|
|
this.holy_equip_plans = {};
|
|
// 符文解锁条件信息
|
|
// var artifact_one = game.configs.partner_data.data_partner_const["artifact_one"].val;
|
|
// var artifact_two = game.configs.partner_data.data_partner_const["artifact_two"].val;
|
|
// this.artifact_lock_list = {"1":artifact_one, "2":artifact_two};
|
|
this.artifact_lucky = 0; // 符文祝福值
|
|
this.artifact_lucky_red = false; // 祝福值红点
|
|
|
|
// 英雄信息界面 升星页签的参数 6星才限时页签(后面策划要求熔炼祭坛的也加入)
|
|
this.hero_info_upgrade_star_param = 6;
|
|
|
|
this.hero_info_upgrade_star_param2 = 10;
|
|
this.hero_info_upgrade_star_param3 = 11;
|
|
this.hero_info_upgrade_star_param4 = 12;
|
|
|
|
// --天赋技能升星的材料
|
|
this.talent_skill_cost_id = 10450
|
|
// --天赋技能可学习的列表 用于红点 结构 self.dic_hero_talent_skill_learn_redpoint[skill_id] = 1
|
|
this.dic_hero_talent_skill_learn_redpoint = {}
|
|
|
|
this.is_need_update_talent_redpoint = true
|
|
|
|
|
|
// --共鸣水晶等级
|
|
this.resonate_cystal_lev = 0
|
|
|
|
// --英雄共鸣锁定信息
|
|
this.dic_resonate_lock_info = {}
|
|
// --共鸣石碑等级
|
|
this.resonate_stone_level = 0
|
|
// --共鸣历史星级
|
|
this.resonate_max_partner_lev = null //--一定要nil 有地方判断nil来决定有木有数据
|
|
// --共鸣精炼红点
|
|
this.is_resonate_extract_redpoint = false
|
|
|
|
this.dic_itemid_to_partner_id = {}
|
|
|
|
this.data_level_up_length = 200;
|
|
this.data_level_up_cache = {};
|
|
|
|
//穿戴在英雄身上的神裝信息結構 self.hero_holy_list[id] = good_vo
|
|
this.hero_holy_list = {}
|
|
},
|
|
|
|
setHeroMaxCount: function( max_count ) {
|
|
if( typeof max_count == "number" ) {
|
|
this.hero_max_count = max_count;
|
|
}
|
|
|
|
},
|
|
|
|
//--批量请求英雄的属性 装备等数据 11026
|
|
batchSendHeroInfo: function() {
|
|
|
|
if( this.hero_list ) {
|
|
var list = []
|
|
for( var k in this.hero_list ) {
|
|
var v = this.hero_list[ k ]
|
|
list.push( [ partner_id = v.id ] )
|
|
if( list.length > 150 ) {
|
|
HeroController.getInstance().sender11026( list )
|
|
list = []
|
|
}
|
|
}
|
|
if( list.length > 0 ) {
|
|
//--请求英雄详细信息
|
|
HeroController.getInstance().sender11026( list )
|
|
}
|
|
}
|
|
},
|
|
|
|
// 获取英雄上上限
|
|
getHeroMaxCount: function() {
|
|
var max_count = this.hero_max_count || 0;
|
|
var have_coutn = this.hero_array.length;
|
|
return {
|
|
max_count: max_count,
|
|
have_coutn: have_coutn
|
|
};
|
|
},
|
|
|
|
setHeroBuyNum: function( buy_num ) {
|
|
this.buy_num = Number( buy_num );
|
|
},
|
|
|
|
getHeroBuyNum: function() {
|
|
return this.buy_num || 0;
|
|
},
|
|
|
|
// --根据bid 和star 获取对应的英雄信息
|
|
// --@return 英雄信息列表
|
|
getHeroInfoByBidStar( bid, star ) {
|
|
if( !bid || !star ) return
|
|
let list = this.hero_bid_list[ bid ];
|
|
|
|
if( list ) {
|
|
list.forEach( _item => {
|
|
if( _item.face_id == 0 ) {
|
|
_item.face_id = "null";
|
|
}
|
|
} )
|
|
let return_list = []
|
|
for( let i in list ) {
|
|
let hero_vo = list[ i ]
|
|
if( hero_vo.star == star ) {
|
|
return_list.push( hero_vo )
|
|
// table_insert(return_list, hero_vo)
|
|
}
|
|
}
|
|
return return_list
|
|
}
|
|
return null
|
|
},
|
|
|
|
/**
|
|
* 更新英雄列表
|
|
* @author zhanghuxing 2019-01-24
|
|
* @param {[type]} not_show_power 不显示战力变化提示
|
|
*/
|
|
updateHeroList: function( hero_list, is_add, not_show_power, is_detail_info ) {
|
|
|
|
if( !hero_list ) return;
|
|
for( var hero_i in hero_list ) {
|
|
this.updateHeroVo( hero_list[ hero_i ], not_show_power, is_detail_info );
|
|
}
|
|
|
|
// console.log( "紅點相關" + count + JSON.stringify( lists ) );
|
|
// 熔炼祭坛的红点 新增需要重新算红点
|
|
if( is_add ) {
|
|
HeroCalculate.getInstance().clearAllStarFuseRedpointRecord();
|
|
gcore.GlobalEvent.fire( HeroEvent.Hero_Data_Add, hero_list );
|
|
let lists = this.getHeroReformListByCamp( 0 );
|
|
let count = 0;
|
|
lists.forEach( _item => {
|
|
|
|
if( _item.result.is_redpoint ) {
|
|
count++;
|
|
}
|
|
} );
|
|
|
|
// console.log( "紅點相關" + count + JSON.stringify( lists ) );
|
|
|
|
nx.mTip.openTip( "tipReform.show", count > 0 );
|
|
}
|
|
|
|
// let reds = HeroCalculate.getInstance().checkAllHeroRedPoint();
|
|
// // console.log( "所有夥伴紅點相關" + JSON.stringify( reds ) );
|
|
this.is_init = false;
|
|
},
|
|
|
|
|
|
/**
|
|
* 更新单个英雄信息,如果没有则是新增;
|
|
*/
|
|
updateHeroVo: function( info, not_show_power, is_detail_info ) {
|
|
|
|
if( !info ) return;
|
|
|
|
info.id = info.partner_id;
|
|
var bid = info.partner_bid || info.bid;
|
|
if( !bid && this.hero_list[ info.id ] )
|
|
bid = this.hero_list[ info.id ].bid;
|
|
|
|
var par_cfg = game.configs.partner_data.data_partner_base[ bid ];
|
|
if( !par_cfg ) return;
|
|
|
|
var is_add = false;
|
|
let true_star = info.star;
|
|
// if (!this.hero_list[hero_id] ){
|
|
// if (is_detail_info){
|
|
// return
|
|
// }
|
|
// this.hero_list[hero_id] = new HeroVo()
|
|
// is_add = true
|
|
// }
|
|
var hero_vo = this.hero_list[ info.id ];
|
|
if( !hero_vo ) {
|
|
if( !is_detail_info ) {
|
|
is_add = true;
|
|
var HeroVo = require( "hero_vo" );
|
|
hero_vo = this.hero_list[ info.id ] = new HeroVo();
|
|
|
|
for( var config_k in par_cfg ) {
|
|
if( config_k !== "skills" )
|
|
info[ config_k ] = par_cfg[ config_k ];
|
|
if( config_k == "star" ) {
|
|
info[ config_k ] = true_star;
|
|
}
|
|
}
|
|
|
|
// let star = info.star || config.init_star
|
|
// if( this.dic_had_hero_info[ bid ] ) {
|
|
// if( this.dic_had_hero_info[ bid ] < star ) {
|
|
// this.dic_had_hero_info[ bid ] = star
|
|
// }
|
|
// } else {
|
|
// this.dic_had_hero_info[ bid ] = star
|
|
// }
|
|
}
|
|
|
|
|
|
// 设置角色id
|
|
// var RoleController = require( "role_controller" );
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
|
if( role_vo ) {
|
|
info.rid = role_vo.rid;
|
|
info.srv_id = role_vo.srv_id;
|
|
}
|
|
}
|
|
|
|
// 旧数据
|
|
var old_vo = null;
|
|
var open_type = 0
|
|
if( !is_add ) {
|
|
if( !is_detail_info ) {
|
|
// 处理升星、进阶
|
|
if( info.star && hero_vo.star < info.star ) { // 升星
|
|
open_type = 1;
|
|
old_vo = nx.dt.objClone( hero_vo );
|
|
|
|
let data = game.configs.partner_skill_data.data_partner_skill_const[ "skill_slot" ].val;
|
|
if( hero_vo.star == data[ 1 ] - 1 ) {
|
|
hero_vo.is_open_talent = true;
|
|
}
|
|
if( info.star >= 10 ) {
|
|
// --清除 星級數量記錄
|
|
this.dic_star_count = {}
|
|
}
|
|
} else if( info.break_lev && hero_vo.break_lev < info.break_lev ) { // 进阶
|
|
open_type = 2;
|
|
old_vo = nx.dt.objClone( hero_vo );
|
|
}
|
|
}
|
|
} else {
|
|
|
|
}
|
|
|
|
// 更新最大星级
|
|
// var cur_star = info.star || par_cfg.init_star;
|
|
// if( this.dic_had_hero_info[ bid ] ) {
|
|
// if( this.dic_had_hero_info[ bid ] < cur_star )
|
|
// this.dic_had_hero_info[ bid ] = cur_star;
|
|
// } else {
|
|
// this.dic_had_hero_info[ bid ] = cur_star;
|
|
// }
|
|
|
|
hero_vo.updateHeroVo( info );
|
|
if( is_add ) {
|
|
this.hero_array.push( hero_vo );
|
|
if( !this.hero_bid_list[ hero_vo.bid ] ) {
|
|
this.hero_bid_list[ hero_vo.bid ] = []
|
|
}
|
|
this.hero_bid_list[ hero_vo.bid ].push( hero_vo )
|
|
} else {
|
|
if( open_type == 1 && old_vo ) { // 打开升星成功界面
|
|
this.ctrl.openHeroUpgradeStarExhibitionPanel( true, old_vo, hero_vo );
|
|
HeroCalculate.getInstance().clearAllHeroRecordByRedPointType( HeroConst.RedPointType.eRPStar )
|
|
} else if( open_type == 2 && old_vo ) { // 打开进阶成功界面
|
|
this.ctrl.openBreakExhibitionWindow( true, old_vo, hero_vo );
|
|
}
|
|
if( is_detail_info ) {
|
|
hero_vo.setInitAttr();
|
|
gcore.GlobalEvent.fire( HeroEvent.Hero_Detail_Data_Update, hero_vo );
|
|
} else {
|
|
if( !not_show_power ) {
|
|
if( hero_vo.partner_id == info.partner_id ) {
|
|
// nx.bridge.vset( "ShowPartner", hero_vo );
|
|
gcore.GlobalEvent.fire( HeroEvent.Hero_Data_Update, hero_vo );
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
// gcore.GlobalEvent.fire(HeroEvent.Hero_Data_Update, hero_vo);
|
|
}
|
|
|
|
|
|
HeroCalculate.getInstance().checkHeroRedPointByRedPointType( HeroConst.RedPointType.eRPLevelUp )
|
|
},
|
|
|
|
updateSingle: function( info, not_show_power, is_detail_info ) {
|
|
|
|
if( !info ) return;
|
|
|
|
info.id = info.partner_id;
|
|
var bid = info.partner_bid || info.bid;
|
|
if( !bid && this.hero_list[ info.id ] )
|
|
bid = this.hero_list[ info.id ].bid;
|
|
|
|
var par_cfg = game.configs.partner_data.data_partner_base[ bid ];
|
|
if( !par_cfg ) return;
|
|
|
|
var is_add = false;
|
|
let true_star = info.star;
|
|
// if (!this.hero_list[hero_id] ){
|
|
// if (is_detail_info){
|
|
// return
|
|
// }
|
|
// this.hero_list[hero_id] = new HeroVo()
|
|
// is_add = true
|
|
// }
|
|
var hero_vo = this.hero_list[ info.id ];
|
|
if( !hero_vo ) {
|
|
if( !is_detail_info ) {
|
|
is_add = true;
|
|
var HeroVo = require( "hero_vo" );
|
|
hero_vo = this.hero_list[ info.id ] = new HeroVo();
|
|
|
|
for( var config_k in par_cfg ) {
|
|
if( config_k !== "skills" )
|
|
info[ config_k ] = par_cfg[ config_k ];
|
|
if( config_k == "star" ) {
|
|
info[ config_k ] = true_star;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
// 设置角色id
|
|
// var RoleController = require( "role_controller" );
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
|
if( role_vo ) {
|
|
info.rid = role_vo.rid;
|
|
info.srv_id = role_vo.srv_id;
|
|
}
|
|
}
|
|
|
|
// 旧数据
|
|
var old_vo = null;
|
|
var open_type = 0
|
|
if( !is_add ) {
|
|
if( !is_detail_info ) {
|
|
// 处理升星、进阶
|
|
if( info.star && hero_vo.star < info.star ) { // 升星
|
|
open_type = 1;
|
|
old_vo = nx.dt.objClone( hero_vo );
|
|
|
|
let data = game.configs.partner_skill_data.data_partner_skill_const[ "skill_slot" ].val;
|
|
if( hero_vo.star == data[ 1 ] - 1 ) {
|
|
hero_vo.is_open_talent = true;
|
|
}
|
|
if( info.star >= 10 ) {
|
|
// --清除 星級數量記錄
|
|
this.dic_star_count = {}
|
|
}
|
|
} else if( info.break_lev && hero_vo.break_lev < info.break_lev ) { // 进阶
|
|
open_type = 2;
|
|
old_vo = nx.dt.objClone( hero_vo );
|
|
}
|
|
}
|
|
} else {
|
|
|
|
}
|
|
|
|
|
|
hero_vo.updateHeroVo( info );
|
|
if( is_add ) {
|
|
this.hero_array.push( hero_vo );
|
|
if( !this.hero_bid_list[ hero_vo.bid ] ) {
|
|
this.hero_bid_list[ hero_vo.bid ] = []
|
|
}
|
|
this.hero_bid_list[ hero_vo.bid ].push( hero_vo )
|
|
} else {
|
|
if( open_type == 1 && old_vo ) { // 打开升星成功界面
|
|
this.ctrl.openHeroUpgradeStarExhibitionPanel( true, old_vo, hero_vo );
|
|
HeroCalculate.getInstance().clearAllHeroRecordByRedPointType( HeroConst.RedPointType.eRPStar )
|
|
} else if( open_type == 2 && old_vo && old_vo.resonate_lev == 0 ) { // 打开进阶成功界面
|
|
this.ctrl.openBreakExhibitionWindow( true, old_vo, hero_vo );
|
|
}
|
|
if( is_detail_info ) {
|
|
hero_vo.setInitAttr()
|
|
gcore.GlobalEvent.fire( HeroEvent.Hero_Detail_Data_Update, hero_vo )
|
|
} else {
|
|
// if( !not_show_power ) {
|
|
// if( hero_vo.partner_id == info.partner_id ) {
|
|
// nx.bridge.vset( "ShowPartner", hero_vo );
|
|
// // gcore.GlobalEvent.fire( HeroEvent.Hero_Data_Update, hero_vo )
|
|
// }
|
|
// }
|
|
|
|
|
|
}
|
|
if( hero_vo.resonate_lev == 0 ){
|
|
nx.bridge.vset( "ShowPartner", hero_vo );
|
|
}
|
|
|
|
gcore.GlobalEvent.fire( HeroEvent.Hero_Data_Update, hero_vo );
|
|
}
|
|
|
|
HeroCalculate.getInstance().checkHeroRedPointByRedPointType( HeroConst.RedPointType.eRPLevelUp );
|
|
HeroCalculate.getInstance().checkHeroRedPointByRedPointType( HeroConst.RedPointType.eRPStar );
|
|
|
|
|
|
},
|
|
|
|
getHeroNumByBid( bid ) {
|
|
if( !bid ) {
|
|
return 0
|
|
};
|
|
let list = this.hero_bid_list[ bid ] || {}
|
|
return list.length
|
|
},
|
|
|
|
// 获取单个伙伴数据,id
|
|
// @id 是英雄唯一标识id
|
|
getHeroById: function( partner_id ) {
|
|
if( !this.hero_list ) return;
|
|
if( !partner_id || typeof partner_id != "number" ) return;
|
|
return this.hero_list[ partner_id ] || {}
|
|
},
|
|
|
|
// 删除英雄
|
|
delHeroDataList: function( list ) {
|
|
if( !list ) return;
|
|
let delParts = [];
|
|
// cc.log( "delHeroDataList" )
|
|
for( var hero_i in list ) {
|
|
let v = list[ hero_i ]
|
|
let temp_bid = this.hero_list[ v.partner_id ].bid;
|
|
delParts.push( this.hero_list[ list[ hero_i ].partner_id ] );
|
|
delete this.hero_list[ list[ hero_i ].partner_id ]
|
|
|
|
// --同时从bid英雄列表删除该英雄记录
|
|
let bidlist = this.hero_bid_list[ temp_bid ]
|
|
if( bidlist ) {
|
|
for( let i = 0; i < bidlist.length; ++i ) {
|
|
let hero_vo = bidlist[ i ]
|
|
if( hero_vo.partner_id == v.partner_id ) {
|
|
bidlist.splice( i, 1 )
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
this.hero_array = [];
|
|
for( var hero_i in this.hero_list ) {
|
|
this.hero_array.push( this.hero_list[ hero_i ] );
|
|
}
|
|
|
|
// 消除熔炼祭坛的红点 删除也要重新算
|
|
HeroCalculate.getInstance().clearAllStarFuseRedpointRecord();
|
|
|
|
// 升星红点
|
|
this.is_upgradestar_redpoint_hero_update = true
|
|
this.checkUpgradeStarRedPointUpdate()
|
|
|
|
gcore.GlobalEvent.fire( HeroEvent.Del_Hero_Event, delParts );
|
|
},
|
|
|
|
// --更新天赋信息
|
|
updateHeroVoTalent( data_list, is_not_check ) {
|
|
let is_team = false
|
|
var self = this
|
|
for( let i = 0; i < data_list.length; ++i ) {
|
|
let v = data_list[ i ]
|
|
if( self.hero_list[ v.partner_id ] ) {
|
|
self.hero_list[ v.partner_id ].updateSkill( v.dower_skill )
|
|
if( !is_team ) {
|
|
if( self.hero_list[ v.partner_id ].isFormDrama() ) {
|
|
is_team = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if( is_team && !is_not_check ) {
|
|
// --如果有剧情阵容的英雄..需要检查红点
|
|
// --检测红点
|
|
// HeroCalculate.getInstance().checkAllHeroRedPoint()
|
|
}
|
|
},
|
|
getHeroList: function() {
|
|
|
|
return this.hero_list || {}
|
|
},
|
|
|
|
getAllHeroArray: function() {
|
|
this.hero_array.forEach( _item => {
|
|
if( _item.face_id == 0 ) {
|
|
_item.face_id = "null";
|
|
}
|
|
} )
|
|
|
|
return this.hero_array;
|
|
},
|
|
|
|
// 根据阵容获取英雄列表
|
|
getHeroListByCamp: function( camp ) {
|
|
|
|
if( typeof camp !== "number" ) return;
|
|
var hero_list = [];
|
|
|
|
for( var hero_i in this.hero_array ) {
|
|
if( camp === HeroConst.CampType.eNone || camp === this.hero_array[ hero_i ].camp_type ) {
|
|
// if( this.hero_array[ hero_i ]. )
|
|
if( this.hero_array[hero_i].is_in_form > 0 ){
|
|
this.hero_array[hero_i].sortidd = this.hero_array[hero_i].quality ;
|
|
}else{
|
|
this.hero_array[hero_i].sortidd = this.hero_array[hero_i].quality - 3;
|
|
}
|
|
if( this.hero_array[hero_i].face_id == 0 ) {
|
|
this.hero_array[hero_i].face_id = "null";
|
|
}
|
|
hero_list.push( this.hero_array[ hero_i ] );
|
|
|
|
}
|
|
}
|
|
// hero_list.forEach( _item => {
|
|
// if( _item.face_id == 0 ) {
|
|
// _item.face_id = "null";
|
|
// }
|
|
// } )
|
|
|
|
var hero_sort = this.getHeroSortFunc();
|
|
return hero_list.sort( hero_sort );
|
|
},
|
|
|
|
getHeroListByStar: function( _star ) {
|
|
|
|
let hero_list = [];
|
|
|
|
for( let hero_i in this.hero_array ) {
|
|
if( _star == this.hero_array[ hero_i ].star ) {
|
|
hero_list.push( this.hero_array[ hero_i ] );
|
|
}
|
|
}
|
|
|
|
return hero_list;
|
|
},
|
|
|
|
// 获取指定BID的所有伙伴
|
|
getHeroListByBid: function( _bid ) {
|
|
|
|
let hero_list = [];
|
|
for( let hero_i in this.hero_array ) {
|
|
if( _bid == this.hero_array[ hero_i ].bid ) {
|
|
hero_list.push( this.hero_array[ hero_i ] );
|
|
}
|
|
}
|
|
return hero_list;
|
|
},
|
|
|
|
// 改造 根据阵容获取4星以上英雄列表
|
|
getHeroReformListByCamp: function( camp ) {
|
|
|
|
let camp_type = camp || 0;
|
|
let camp_fuse_list = [];
|
|
let fuse_cfg = game.configs.partner_data.data_partner_fuse_star;
|
|
if( !fuse_cfg ) return;
|
|
for( let cfg_i in fuse_cfg ) {
|
|
let fuse_cfg_item = fuse_cfg[ cfg_i ];
|
|
|
|
let base_config = game.configs.partner_data.data_partner_base[ cfg_i ];
|
|
for( let item_i in fuse_cfg_item ) {
|
|
let star = fuse_cfg_item[ item_i ].star;
|
|
let key = cfg_i + "_" + star;
|
|
let star_config = gdata( "partner_data", "data_partner_star", key );
|
|
// game.configs.partner_data.data_partner_star[key];
|
|
|
|
if( base_config && ( base_config.camp_type == camp_type || camp_type === 0 ) ) {
|
|
if( base_config && star_config && star_config.expend1.length > 0 ) {
|
|
let fuse_data = {};
|
|
// fuse_data.base_config = base_config;
|
|
// fuse_data.star_config = star_config;
|
|
fuse_data.result = HeroCalculate.getInstance().checkSingleStarFuseRedPointByStarConfig( star_config, false, cfg_i );
|
|
fuse_data.red = fuse_data.result.is_redpoint ? 1 : 0;
|
|
fuse_data._flag = "partner",
|
|
fuse_data.camp_type = base_config.camp_type;
|
|
fuse_data.bid = cfg_i;
|
|
fuse_data.icon = base_config.item_id;
|
|
fuse_data.res_id = star_config.res_id;
|
|
fuse_data.item_id = base_config.item_id;
|
|
fuse_data.quality = base_config.quality;
|
|
fuse_data.type = base_config.type;
|
|
fuse_data.stars = star;
|
|
camp_fuse_list.push( fuse_data );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return camp_fuse_list
|
|
},
|
|
|
|
// 根据阵容获取英雄列表
|
|
getDeepHeroListByCamp: function( camp ) {
|
|
if( typeof camp !== "number" ) return;
|
|
var hero_list = [];
|
|
|
|
for( var hero_i in this.hero_array ) {
|
|
if( camp === HeroConst.CampType.eNone || camp === this.hero_array[ hero_i ].camp_type ) {
|
|
hero_list.push( this.hero_array[ hero_i ] );
|
|
}
|
|
}
|
|
|
|
var hero_sort = this.getHeroSortFunc();
|
|
return hero_list.sort( hero_sort );
|
|
},
|
|
|
|
getRestHeroListByCamp: function( camp, type ) {
|
|
if( typeof camp !== "number" ) return;
|
|
var hero_list = [];
|
|
for( var hero_i in this.hero_array ) {
|
|
if( camp === HeroConst.CampType.eNone || camp === this.hero_array[ hero_i ].camp_type ) {
|
|
if( type ) {
|
|
if( this.hero_array[ hero_i ].is_lock == 0 ) {
|
|
hero_list.push( this.hero_array[ hero_i ] );
|
|
}
|
|
} else {
|
|
hero_list.push( this.hero_array[ hero_i ] );
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
var rest_hero_list = hero_list;
|
|
for( var hero_i in rest_hero_list ) {
|
|
var hero_vo = rest_hero_list[ hero_i ];
|
|
if( hero_vo.is_in_form > 0 || hero_vo.is_lock ) {
|
|
hero_vo.is_ui_lock = true;
|
|
}
|
|
}
|
|
|
|
rest_hero_list.forEach( _item => {
|
|
if( _item.face_id == 0 ) {
|
|
_item.face_id = "null";
|
|
}
|
|
} )
|
|
|
|
var hero_sort = function( role_vo1, role_vo2 ) {
|
|
if( ( !role_vo1.is_ui_lock && !role_vo2.is_ui_lock ) || ( role_vo1.is_ui_lock && role_vo2.is_ui_lock ) ) {
|
|
if( role_vo1.star === role_vo2.star ) {
|
|
if( role_vo1.power == role_vo2.power ) {
|
|
if( role_vo1.lev == role_vo2.lev ) {
|
|
return role_vo2.sort_order - role_vo1.sort_order;
|
|
} else {
|
|
return role_vo1.lev - role_vo2.lev;
|
|
}
|
|
} else {
|
|
return role_vo1.power - role_vo2.power;
|
|
}
|
|
} else {
|
|
return role_vo1.star - role_vo2.star;
|
|
}
|
|
} else {
|
|
if( role_vo1.is_ui_lock )
|
|
return 1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return rest_hero_list.sort( hero_sort );
|
|
},
|
|
|
|
setHadHeroInfo: function( list ) {
|
|
if( !list ) return;
|
|
for( var hero_i in list ) {
|
|
this.dic_had_hero_info[ list[ hero_i ].partner_id ] = list[ hero_i ].max_star;
|
|
}
|
|
|
|
let sfg = game.configs.source_data.data_source_data[ FID.Equips ];
|
|
let eqm = nx.bridge.checkConditions( sfg.lev_limit );
|
|
if( nx.dt.objEmpty( eqm ) ) {
|
|
this.dealReformEqm();
|
|
}
|
|
|
|
// this.dealPartnerSplinterRed();
|
|
// console.log( JSON.stringify( cfg ) + "裝備相關處理紅點起始" + JSON.stringify( eqms ) );
|
|
},
|
|
|
|
// 背包中 夥伴碎片合成紅點處理
|
|
dealPartnerSplinterRed: function() {
|
|
|
|
let can_merge = BackpackController.getInstance().getModel().getHeroChipRedPoint();
|
|
|
|
nx.mTip.openTip( "bag.partnermerge", can_merge );
|
|
|
|
},
|
|
|
|
// 處理 改造 義肢合成--- 芯片合成紅點
|
|
dealReformEqm: function() {
|
|
|
|
nx.mTip.openTip( "tipReform.equip.arm", false );
|
|
nx.mTip.openTip( "tipReform.equip.foot", false );
|
|
nx.mTip.openTip( "tipReform.equip.clothes", false );
|
|
nx.mTip.openTip( "tipReform.equip.head", false );
|
|
let cfg = game.configs.partner_eqm_data.data_eqm_compose_id;
|
|
let artifacts = BackpackController.getInstance().getModel().getAllBackPackArray( BackPackConst.item_sub_type.SPECIAL );
|
|
|
|
let eqms = BackpackController.getInstance().getModel().getBagItemList( BackPackConst.Bag_Code.EQUIPS );
|
|
let count = 0;
|
|
let type = [];
|
|
let have = BackpackController.getInstance().getModel().getItemNumByBid( 1 );;
|
|
for( let i in cfg ) {
|
|
let eqm = cfg[ i ];
|
|
let need = eqm.expend[ 0 ][ 0 ];
|
|
for( let e in eqms ) {
|
|
let eqmBag = eqms[ e ];
|
|
if( eqmBag.base_id == need ) {
|
|
if( eqmBag.quantity >= eqm.expend[ 0 ][ 1 ] && have >= eqm.expend[ 1 ][ 1 ] ) {
|
|
count++;
|
|
if( !nx.dt.arrMember( type, eqm.type ) ) {
|
|
type.push( eqm.type );
|
|
}
|
|
// break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if( nx.dt.arrNEmpty( type ) ) {
|
|
for( let i = 0; i < type.length; i++ ) {
|
|
let item = type[ i ];
|
|
if( item == 1 ) {
|
|
nx.mTip.openTip( "tipReform.equip.arm", true );
|
|
}
|
|
else if( item == 2 ) {
|
|
|
|
nx.mTip.openTip( "tipReform.equip.foot", true );
|
|
|
|
}
|
|
else if( item == 3 ) {
|
|
|
|
nx.mTip.openTip( "tipReform.equip.clothes", true );
|
|
|
|
}
|
|
else if( item == 4 ) {
|
|
|
|
nx.mTip.openTip( "tipReform.equip.head", true );
|
|
|
|
}
|
|
}
|
|
}
|
|
nx.mTip.openTip( "tipReform.equip", count > 0 );
|
|
|
|
|
|
let acfg = game.configs.partner_artifact_data.data_artifact_data;
|
|
let samef = [];
|
|
let target_lev = 0;
|
|
|
|
for( let arttt in acfg ) {
|
|
let artcfg = nx.dt.objClone( acfg[ arttt ] );
|
|
artcfg.quantity = 0;
|
|
artcfg.needCoins = 0;
|
|
artcfg.targetid = 0;
|
|
artcfg.target_lev = 0;
|
|
for( let art = 0; art < artifacts.length; art++ ) {
|
|
|
|
let bag = artifacts[ art ];
|
|
if( bag.base_id == artcfg.id ) {
|
|
artcfg.quantity++;
|
|
artcfg.targetid = artcfg.com_artifact;
|
|
// artcfg.needCoins +=
|
|
}
|
|
|
|
if( artcfg.quantity >= 5 && acfg[ artcfg.targetid ] ) {
|
|
artcfg.target_lev = acfg[ artcfg.targetid ].limit_lv;
|
|
}
|
|
|
|
}
|
|
samef.push( artcfg );
|
|
}
|
|
let arthave = 0;
|
|
let lev = 0;
|
|
let needCoins = 0;
|
|
samef.forEach( _art => {
|
|
if( _art.quantity >= 5 ) {
|
|
arthave = _art.quantity;
|
|
lev = _art.target_lev;
|
|
needCoins = _art.ref_expend[ 1 ][ 1 ];
|
|
}
|
|
} )
|
|
|
|
nx.mTip.openTip( "tipReform.artifact", arthave >= 5 && RoleController.getInstance().getRoleVo().lev >= lev && have >= needCoins );
|
|
},
|
|
|
|
// 初始化图鉴数据
|
|
getHeroPokedexList: function( camp ) {
|
|
if( !this.dic_pokedex_info ) {
|
|
this.dic_pokedex_info = {};
|
|
for( var camp_i in HeroConst.CampType ) {
|
|
if( camp_i !== "eNone" )
|
|
this.dic_pokedex_info[ HeroConst.CampType[ camp_i ] ] = [];
|
|
}
|
|
var pokedex_cfg = game.configs.partner_data.data_partner_pokedex;
|
|
if( pokedex_cfg ) {
|
|
for( var bid in pokedex_cfg ) {
|
|
var par_cfg = game.configs.partner_data.data_partner_base[ bid ];
|
|
for( var star_i in pokedex_cfg[ bid ] ) {
|
|
var star = pokedex_cfg[ bid ][ star_i ].star;
|
|
var key = bid + "_" + star;
|
|
var info = this.getHeroPokedexByBid( key );
|
|
if( info ) {
|
|
this.dic_pokedex_info[ info.camp_type ].push( info );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var sort_function = function( dic_pokedex_1, dic_pokedex_2 ) {
|
|
if( dic_pokedex_1.star === dic_pokedex_2.star ) {
|
|
return dic_pokedex_1.bid - dic_pokedex_2.bid;
|
|
} else {
|
|
return dic_pokedex_1.star - dic_pokedex_2.star;
|
|
}
|
|
}
|
|
// 排序
|
|
for( var dic_pokedex_i in this.dic_pokedex_info ) {
|
|
this.dic_pokedex_info[ dic_pokedex_i ].sort( sort_function );
|
|
}
|
|
}
|
|
|
|
return this.dic_pokedex_info[ camp ]
|
|
},
|
|
|
|
getHeroPokedexByBid: function( key ) {
|
|
if( this.dic_pokedex_bid[ key ] ) return this.dic_pokedex_bid[ key ];
|
|
|
|
var par_show_cfg = gdata( "partner_data", "data_partner_show", key );
|
|
if( !par_show_cfg ) {
|
|
return null
|
|
}
|
|
|
|
var par_base_cfg = game.configs.partner_data.data_partner_base[ par_show_cfg.bid ];
|
|
if( par_base_cfg ) {
|
|
var break_lev = this.getHeroMaxBreakCountByInitStar( par_show_cfg.star );
|
|
par_show_cfg.hp_max = par_show_cfg.hp // 为了计算战力用的
|
|
par_show_cfg.power = PartnerCalculate.calculatePower( par_show_cfg );
|
|
par_show_cfg.camp_type = par_base_cfg.camp_type;
|
|
par_show_cfg.name = par_base_cfg.name;
|
|
par_show_cfg.init_star = par_base_cfg.init_star;
|
|
par_show_cfg.type = par_base_cfg.type;
|
|
par_show_cfg.break_id = par_base_cfg.break_id;
|
|
par_show_cfg.break_lev = break_lev;
|
|
par_show_cfg.partner_id = par_show_cfg.bid * 10 + par_show_cfg.star; // 定义一个唯一id
|
|
par_show_cfg.is_pokedex = true; // 是不是图鉴
|
|
this.dic_pokedex_bid[ key ] = par_show_cfg;
|
|
return this.dic_pokedex_bid[ key ];
|
|
}
|
|
return null
|
|
},
|
|
|
|
// 根据初始星级 或者对应英雄最大进阶次数
|
|
getHeroMaxBreakCountByInitStar: function( init_star ) {
|
|
if( !this.dic_max_break ) {
|
|
var val = game.configs.partner_data.data_partner_const.advanced_limit.val
|
|
this.dic_max_break = {}
|
|
for( var val_i in val ) {
|
|
this.dic_max_break[ val[ val_i ][ 0 ] ] = val[ val_i ][ 1 ];
|
|
}
|
|
}
|
|
return this.dic_max_break[ init_star ] || 0
|
|
},
|
|
|
|
// 根据品质获取默认头像
|
|
getRandomHeroHeadByQuality: function( quality ) {
|
|
if( !this.dic_random_hero_head ) {
|
|
var val = game.configs.partner_data.data_partner_const.random_hero_icon.val;
|
|
this.dic_random_hero_head = {}
|
|
for( var val_i in val ) {
|
|
var item_config = gitemdata( val[ val_i ][ 1 ] );
|
|
if( item_config )
|
|
this.dic_random_hero_head[ val[ val_i ][ 0 ] ] = item_config.icon;
|
|
}
|
|
}
|
|
|
|
var quality = quality || 0;
|
|
if( quality > 5 )
|
|
quality = 5;
|
|
return this.dic_random_hero_head[ quality ]
|
|
},
|
|
|
|
|
|
// --根据阵营和星级.得到对应来源的道具id
|
|
// --self.dic_source_item_ids[camp][star] = item_id
|
|
getSourceHeroCombinationByCampStar: function( camp, star ) {
|
|
if( !this.dic_source_item_ids ) {
|
|
this.dic_source_item_ids = []
|
|
let val = game.configs.partner_data.data_partner_const.source_hero_combination.val
|
|
for( var i in val ) {
|
|
var val_i = val[ i ]
|
|
if( this.dic_source_item_ids[ val_i[ 0 ] ] == null ) {
|
|
this.dic_source_item_ids[ val_i[ 0 ] ] = []
|
|
}
|
|
this.dic_source_item_ids[ val_i[ 0 ] ][ val_i[ 1 ] ] = [ val_i[ 3 ] ]
|
|
}
|
|
}
|
|
if( this.dic_source_item_ids[ camp ] ) {
|
|
let star = star || 0
|
|
if( star == 0 ) {
|
|
star = 3 //--最低星就三
|
|
}
|
|
return this.dic_source_item_ids[ camp ][ star ]
|
|
}
|
|
},
|
|
|
|
getHadHeroInfo: function() {
|
|
return this.dic_had_hero_info || {}
|
|
},
|
|
|
|
getHadHeroStarBybid: function( bid ) {
|
|
if( this.dic_had_hero_info && this.dic_had_hero_info[ bid ] ) {
|
|
return this.dic_had_hero_info[ bid ]
|
|
}
|
|
return null
|
|
},
|
|
|
|
|
|
isOpenTanlentByHerovo( hero_vo ) {
|
|
|
|
let data = game.configs.partner_skill_data.data_partner_skill_const[ "skill_slot" ].val;
|
|
if( hero_vo[ data[ 0 ] ] ) {
|
|
if( hero_vo[ data[ 0 ] ] >= data[ 1 ] ) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
},
|
|
/************阵法相关************/
|
|
//order 参数用于同一类型玩法的多个组别
|
|
setFormList: function( data, order ) {
|
|
var form_type = data.type >= 0 ? data.type : PartnerConst.Fun_Form.Drama;
|
|
if( this.pos_list[ form_type ] ) {
|
|
if( order ) {
|
|
for( var form_i in this.pos_list[ form_type ][ order ] ) {
|
|
var vo = this.getHeroById( this.pos_list[ form_type ][ order ][ form_i ].id )
|
|
if( vo && vo.updateFormPos ) {
|
|
vo.updateFormPos( 0, form_type )
|
|
}
|
|
}
|
|
} else {
|
|
for( var form_i in this.pos_list[ form_type ] ) {
|
|
var vo = this.getHeroById( this.pos_list[ form_type ][ form_i ].id )
|
|
if( vo && vo.updateFormPos ) {
|
|
vo.updateFormPos( 0, form_type )
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
this.pos_list[ form_type ] = {}
|
|
if( order ) {
|
|
this.pos_list[ form_type ][ order ] = {};
|
|
for( var pos_i in data.pos_info ) {
|
|
this.pos_list[ form_type ][ order ][ data.pos_info[ pos_i ].pos ] = data.pos_info[ pos_i ];
|
|
var vo = this.getHeroById( data.pos_info[ pos_i ].id )
|
|
// 容错处理 bugly出现说 updateFormPos 这个是 (a null value)
|
|
if( vo && vo.updateFormPos )
|
|
vo.updateFormPos( data.pos_info[ pos_i ].pos, form_type );
|
|
}
|
|
} else {
|
|
for( var pos_i in data.pos_info ) {
|
|
this.pos_list[ form_type ][ data.pos_info[ pos_i ].pos ] = data.pos_info[ pos_i ];
|
|
var vo = this.getHeroById( data.pos_info[ pos_i ].id )
|
|
// 容错处理 bugly出现说 updateFormPos 这个是 (a null value)
|
|
if( vo && vo.updateFormPos )
|
|
vo.updateFormPos( data.pos_info[ pos_i ].pos, form_type );
|
|
}
|
|
}
|
|
|
|
// 剧情阵法逻辑
|
|
if( form_type == PartnerConst.Fun_Form.Drama ) {
|
|
this.form_power = data.power || 0;
|
|
// 阵法类型
|
|
this.use_formation_type = data.formation_type;
|
|
// 使用的圣器id
|
|
this.use_hallows_id = data.hallows_id;
|
|
|
|
// gcore.GlobalEvent.fire(HeroEvent.Form_Drama_Event,data)
|
|
// var calculate = HeroCalculate.getInstance();
|
|
// RedMgr.getInstance().addCalHandler( calculate.checkAllHeroRedPoint.bind( calculate ), RedIds.HeroAll );
|
|
|
|
// 检测红点
|
|
// HeroCalculate.getInstance().checkAllHeroRedPoint();
|
|
let list = []
|
|
if( order ) {
|
|
for( let k in this.pos_list[ form_type ][ order ] ) {
|
|
let v = this.pos_list[ form_type ][ order ][ k ]
|
|
list.push( {
|
|
partner_id: v.id
|
|
} )
|
|
}
|
|
} else {
|
|
for( let k in this.pos_list[ form_type ] ) {
|
|
let v = this.pos_list[ form_type ][ k ]
|
|
list.push( {
|
|
partner_id: v.id
|
|
} )
|
|
}
|
|
}
|
|
// --请求天赋的
|
|
HeroController.getInstance().sender11099( list )
|
|
}
|
|
},
|
|
|
|
// 获取最高战力的英雄战力
|
|
getMaxFight: function() {
|
|
if( this.hero_array ) {
|
|
this.hero_array.sort( Utils.tableUpperSorter( [ "power" ] ) );
|
|
var hero_vo = this.hero_array[ 0 ];
|
|
if( hero_vo ) {
|
|
return hero_vo.power
|
|
}
|
|
}
|
|
return 0
|
|
},
|
|
//通过bid获取等级最高的英雄信息
|
|
getTopLevHeroInfoByBid( bid ) {
|
|
if( !bid ) return;
|
|
let list = this.hero_bid_list[ bid ]
|
|
if( list ) {
|
|
list.sort( Utils.tableUpperSorter( [ "lev", "power" ] ) )
|
|
return list[ 0 ]
|
|
}
|
|
return null
|
|
},
|
|
//雇佣的
|
|
getExpeditHeroData: function() {
|
|
var hero_list = this.getAllHeroArray();
|
|
var list = [];
|
|
for( var i = 0; i < hero_list.length; i++ ) {
|
|
var tab = {}
|
|
tab.power = hero_list[ i ].power;
|
|
tab.name = hero_list[ i ].name;
|
|
tab.bid = hero_list[ i ].bid;
|
|
tab.index = i;
|
|
|
|
tab.rid = hero_list[ i ].rid;
|
|
tab.srv_id = hero_list[ i ].srv_id;
|
|
tab.id = hero_list[ i ].id;
|
|
tab.star = hero_list[ i ].star;
|
|
tab.lev = hero_list[ i ].lev;
|
|
tab.use_skin = hero_list[ i ].use_skin;
|
|
|
|
list.push( tab );
|
|
}
|
|
list.sort( function( a, b ) {
|
|
return b.power < a.power;
|
|
} );
|
|
return list
|
|
},
|
|
|
|
getTeamOrderPosList( type ) {
|
|
return this.pos_list[ type ]
|
|
},
|
|
|
|
// 获取自己的队伍阵法站位
|
|
getMyPosList: function() {
|
|
return this.pos_list[ PartnerConst.Fun_Form.Drama ] || {}
|
|
},
|
|
|
|
getHeroSortFunc: function() {
|
|
var hero_sort = function( role_vo1, role_vo2 ) {
|
|
|
|
if( role_vo1.star === role_vo2.star ) {
|
|
if( role_vo1.power == role_vo2.power ) {
|
|
if( role_vo1.lev == role_vo2.lev ) {
|
|
return role_vo1.sort_order - role_vo2.sort_order;
|
|
} else {
|
|
return role_vo2.lev - role_vo1.lev
|
|
}
|
|
} else {
|
|
return role_vo2.power - role_vo1.power
|
|
}
|
|
} else {
|
|
return role_vo2.star - role_vo1.star
|
|
}
|
|
}
|
|
return hero_sort
|
|
},
|
|
|
|
isMaxStarHero: function( bid, star ) {
|
|
if( !bid || !star ) return false;
|
|
var max_star = game.configs.partner_data.data_partner_max_star[ bid ];
|
|
if( max_star && star >= max_star ) {
|
|
return true
|
|
}
|
|
if( star >= this.hero_info_upgrade_star_param ) {
|
|
if( star == this.hero_info_upgrade_star_param2 ) {
|
|
// --10级升11有世界等级要求
|
|
return !this.checkOpenStar11()
|
|
} else if( star == this.hero_info_upgrade_star_param3 ) {
|
|
return !this.checkOpenStar12()
|
|
} else if( star == this.hero_info_upgrade_star_param4 ) {
|
|
return !this.checkOpenStar13()
|
|
}
|
|
}
|
|
return false;
|
|
},
|
|
|
|
// checkSingleStarFuseRedPointByStarConfig
|
|
getStarFuseList: function( camp_type ) {
|
|
camp_type = camp_type || 0;
|
|
var camp_fuse_list = [];
|
|
var fuse_cfg = game.configs.partner_data.data_partner_fuse_star;
|
|
if( !fuse_cfg ) return
|
|
for( var cfg_i in fuse_cfg ) {
|
|
var fuse_cfg_item = fuse_cfg[ cfg_i ];
|
|
var base_config = game.configs.partner_data.data_partner_base[ cfg_i ];
|
|
for( var item_i in fuse_cfg_item ) {
|
|
var star = fuse_cfg_item[ item_i ].star;
|
|
var key = cfg_i + "_" + star;
|
|
var star_config = gdata( "partner_data", "data_partner_star", key );
|
|
// game.configs.partner_data.data_partner_star[key];
|
|
|
|
if( base_config && ( base_config.camp_type == camp_type || camp_type === 0 ) ) {
|
|
if( base_config && star_config && star_config.expend1.length > 0 ) {
|
|
var fuse_data = {};
|
|
fuse_data.base_config = base_config;
|
|
fuse_data.star_config = star_config;
|
|
fuse_data.camp_type = base_config.camp_type;
|
|
fuse_data.bid = cfg_i;
|
|
fuse_data.star = star;
|
|
camp_fuse_list.push( fuse_data );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return camp_fuse_list
|
|
},
|
|
|
|
// --根据bid 获取一个模拟herovo对象..属性都是1级的
|
|
getMockHeroVoByBid( bid ) {
|
|
let base_config = game.configs.partner_data.data_partner_base[ bid ]
|
|
let attr_config = game.configs.partner_data.data_partner_attr[ bid ]
|
|
if( !base_config || !attr_config ) {
|
|
return
|
|
}
|
|
|
|
let hero_vo = nx.dt.objClone( base_config )
|
|
hero_vo.star = base_config.init_star //--默认星数
|
|
hero_vo.break_lev = 0 //--默认进阶
|
|
for( let k in attr_config ) { // k,v in pairs(attr_config) do
|
|
let v = attr_config[ k ]
|
|
if( !hero_vo[ k ] ) {
|
|
hero_vo[ k ] = v
|
|
}
|
|
}
|
|
hero_vo.hp = attr_config.hp_max //--血量等于最大血量
|
|
hero_vo.power = PartnerCalculate.calculatePower( hero_vo )
|
|
return hero_vo
|
|
},
|
|
/****************装备相关******************/
|
|
updateHeroEquipList: function( data ) {
|
|
var partner_id = data.partner_id;
|
|
if( partner_id && this.hero_list[ partner_id ] ) {
|
|
var hero_vo = this.hero_list[ partner_id ];
|
|
// 判断战力变化
|
|
this.hero_list[ partner_id ].updateHeroVo( data );
|
|
}
|
|
},
|
|
|
|
getHeroEquipList: function( parener_id ) {
|
|
if( this.hero_list[ parener_id ] ) {
|
|
return this.hero_list[ parener_id ].eqm_list;
|
|
}
|
|
},
|
|
|
|
|
|
//----------------------------符文锻造相关------------------------
|
|
|
|
|
|
//获取符文祝福红点状态
|
|
getArtifactLuckyRedStatus: function() {
|
|
return this.artifact_lucky_red
|
|
},
|
|
|
|
//符文祝福值
|
|
setArtifactLucky: function( value ) {
|
|
this.artifact_lucky = value;
|
|
this.updateArtifactLuckyRed();
|
|
// RedMgr.getInstance().addCalHandler( this.updateArtifactLuckyRed.bind( this ) )
|
|
},
|
|
|
|
getArtifactLucky: function() {
|
|
return this.artifact_lucky || 0
|
|
},
|
|
|
|
//祝福值红点
|
|
updateArtifactLuckyRed: function() {
|
|
var max_lucky = 0;
|
|
var lucky_cfg = game.configs.partner_artifact_data.data_artifact_const[ "change_condition" ];
|
|
if( lucky_cfg && lucky_cfg.val != null ) {
|
|
max_lucky = lucky_cfg.val;
|
|
}
|
|
if( this.artifact_lucky >= max_lucky ) {
|
|
this.artifact_lucky_red = true;
|
|
} else {
|
|
this.artifact_lucky_red = false;
|
|
}
|
|
gcore.GlobalEvent.fire( HeroEvent.Artifact_Lucky_Red_Event );
|
|
},
|
|
|
|
updatePartnerArtifactList: function( data ) {
|
|
var id = data.partner_id || 0;
|
|
if( this.hero_list[ id ] ) {
|
|
var hero_vo = this.hero_list[ id ];
|
|
if( hero_vo ) {
|
|
this.hero_list[ id ].updateHeroVo( data );
|
|
gcore.GlobalEvent.fire( HeroEvent.Artifact_Update_Event, hero_vo );
|
|
// let is_artifact = PartnerCalculate.getIsCanClothArtifact(hero_vo.bid);
|
|
// hero_vo.updateRedPoint(PartnerConst.Vo_Red_Type.Artifact,false)
|
|
}
|
|
}
|
|
},
|
|
|
|
getPartnerArtifactList: function( id ) {
|
|
if( this.hero_list[ id ] ) {
|
|
return this.hero_list[ id ].artifact_list || []
|
|
}
|
|
return []
|
|
},
|
|
|
|
// -- 符文重鑄次數相關數據
|
|
updateArtifactRecastCount( data_list ) {
|
|
this.artifact_recast_data = data_list;
|
|
},
|
|
|
|
// -- 根據符文品質獲取對應品質的重鑄次數
|
|
getArtifactRecastCountByQuality( quality ) {
|
|
let count = 0
|
|
let max_count = 0
|
|
let _type = 0
|
|
if( quality == BackPackConst.quality.orange ) { // 彩虹符文
|
|
_type = 1
|
|
} else if( quality == BackPackConst.quality.red ) { // 閃爍符文
|
|
_type = 2
|
|
}
|
|
if( this.artifact_recast_data && _type > 0 ) {
|
|
for( let k in this.artifact_recast_data ) {
|
|
let v = this.artifact_recast_data[ k ]
|
|
if( v.type == _type ) {
|
|
count = v.current
|
|
max_count = v.limit
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
count: count,
|
|
max_count: max_count
|
|
};
|
|
},
|
|
//---------------------------符文锻造相关end-------------------------
|
|
|
|
setLockByPartnerid: function( partner_id, is_lock ) {
|
|
if( this.hero_list[ partner_id ] ) {
|
|
this.hero_list[ partner_id ].is_lock = is_lock || 0;
|
|
}
|
|
},
|
|
|
|
// 活动英雄列表 根据匹配信息 熔炼祭坛用
|
|
// @dic_the_conditions 指定匹配 dic_the_conditions[bid][star] = 数量
|
|
// @dic_random_conditions 随机阵容匹配 dic_the_conditions[camp][star] = 数量
|
|
// @dic_hero_id 标志已用
|
|
// return
|
|
// @ count 拥有不重复英雄总数量
|
|
getHeroListByMatchInfo: function( dic_the_conditions, dic_random_conditions, dic_hero_id ) {
|
|
// 找不重复的数量
|
|
var count = 0;
|
|
var dic_hero_id = dic_hero_id || {};
|
|
var dic_count = {};
|
|
|
|
var _setDicCount = function( partner_id, str, max ) {
|
|
|
|
// 判断是否重复
|
|
if( !dic_hero_id[ partner_id ] ) {
|
|
if( !dic_count[ str ] )
|
|
dic_count[ str ] = 0;
|
|
if( dic_count[ str ] < max ) {
|
|
dic_count[ str ] = dic_count[ str ] + 1;
|
|
count = count + 1;
|
|
dic_hero_id[ partner_id ] = 1;
|
|
}
|
|
}
|
|
}
|
|
for( var hero_i in this.hero_list ) {
|
|
var hero = this.hero_list[ hero_i ];
|
|
if( dic_the_conditions && dic_the_conditions[ hero.bid ] && dic_the_conditions[ hero.bid ][ hero.star ] &&
|
|
hero.is_in_form == 0 && hero.is_lock == 0 && nx.dt.objEmpty( hero.dic_locks ) ) {
|
|
var str = cc.js.formatStr( "%s%s", hero.bid, hero.star );
|
|
_setDicCount( hero.partner_id, str, dic_the_conditions[ hero.bid ][ hero.star ] );
|
|
}
|
|
|
|
if( dic_random_conditions ) {
|
|
// 0表示所有阵营的合适
|
|
if( dic_random_conditions[ 0 ] && dic_random_conditions[ 0 ][ hero.star ] && hero.is_in_form == 0 && hero.is_lock == 0 ) {
|
|
// if (dic_random_conditions[0][hero.star]) {
|
|
var str = cc.js.formatStr( "_%s%s", 0, hero.star )
|
|
_setDicCount( hero.partner_id, str, dic_random_conditions[ 0 ][ hero.star ] );
|
|
// }
|
|
} else {
|
|
if( dic_random_conditions[ hero.camp_type ] && dic_random_conditions[ hero.camp_type ][ hero.star ] && hero.is_in_form == 0 && hero.is_lock == 0 ) {
|
|
var str = cc.js.formatStr( "_%s%s", hero.camp_type, hero.star );
|
|
_setDicCount( hero.partner_id, str, dic_random_conditions[ hero.camp_type ][ hero.star ] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return count;
|
|
},
|
|
|
|
/***********************************红点检查********************************/
|
|
|
|
|
|
|
|
// 检测升级红点更新
|
|
checkLevelRedPointUpdate: function() {
|
|
// gcore.GlobalEvent.fire(HeroEvent.Level_RedPoint_Event)
|
|
|
|
// if (this.is_delay_redpoint_update[HeroConst.RedPointType.eRPLevelUp])
|
|
// return
|
|
|
|
// this.is_delay_redpoint_update[HeroConst.RedPointType.eRPLevelUp] = true;
|
|
// 清除升级红点记录
|
|
HeroCalculate.getInstance().clearAllHeroRecordByRedPointType( HeroConst.RedPointType.eRPLevelUp, true )
|
|
},
|
|
|
|
// 检查阵法解锁
|
|
checkUnlockFormRedPoint: function() {
|
|
|
|
},
|
|
|
|
// 设置更新equip红点的记录
|
|
setEquipUpdateRecord: function( bool ) {
|
|
this.is_equip_redpoint_bag_update = bool;
|
|
this.is_equip_redpoint_hero_update = bool;
|
|
},
|
|
|
|
// 检查装备红点
|
|
checkEquipRedPointUpdate: function() {
|
|
// 需要 背包 返回 和 英雄更新返回 才处理红点计算
|
|
if( this.is_equip_redpoint_bag_update && this.is_equip_redpoint_hero_update ) {
|
|
//清除装备红点记录
|
|
HeroCalculate.getInstance().clearAllHeroRecordByRedPointType( HeroConst.RedPointType.eRPEquip );
|
|
gcore.GlobalEvent.fire( HeroEvent.Equip_RedPoint_Event );
|
|
}
|
|
},
|
|
|
|
// 设置更新升星红点的记录
|
|
setUpgradeStarUpdateRecord: function( bool ) {
|
|
this.is_upgradestar_redpoint_bag_update = bool;
|
|
this.is_upgradestar_redpoint_hero_update = bool;
|
|
},
|
|
|
|
// 升星红点检查
|
|
checkUpgradeStarRedPointUpdate: function() {
|
|
// 需要 背包 返回 和 英雄更新返回 才处理红点计算
|
|
if( this.is_upgradestar_redpoint_bag_update && this.is_upgradestar_redpoint_hero_update ) {
|
|
HeroCalculate.getInstance().clearAllHeroRecordByRedPointType( HeroConst.RedPointType.eRPStar );
|
|
}
|
|
},
|
|
|
|
// 检查圣器解锁
|
|
checkUnlockHallowsRedPoint: function() {
|
|
|
|
},
|
|
|
|
checkHighStarCondition: function( _star ) {
|
|
|
|
|
|
|
|
let can = [];
|
|
let star = _star + 1;
|
|
// let role_vo = RoleController.getInstance();
|
|
let cfg = game.configs.partner_data.data_get_star_cond[ star ];
|
|
|
|
switch( _star ) {
|
|
case 10: { can = this.dealStar11( cfg ); }; break;
|
|
case 11: { can = this.dealStar11( cfg ); }; break;
|
|
case 12: { can = this.dealStar13( cfg ); }; break;
|
|
}
|
|
return can;
|
|
},
|
|
|
|
|
|
// 升星 11、12 条件是否达成判断
|
|
dealStar11: function( _cfg ) {
|
|
|
|
this.desc = [];
|
|
let role_vo = RoleController.getInstance();
|
|
let levEnough = false;
|
|
let slevEnough = true;
|
|
let worldlevEnough = true;
|
|
let results = [];
|
|
let conds = [];
|
|
for( let i = 0; i < _cfg.cond1.length; i++ ) {
|
|
let cond = _cfg.cond1[ i ];
|
|
|
|
if( cond[ 0 ] == "lev" ) {
|
|
if( role_vo.getRoleVo().lev >= cond[ 1 ] ) {
|
|
levEnough = true;
|
|
} else {
|
|
this.desc.push( _cfg.desc1 + nx.text.getKey( "UpStarsNeedTip" ) );
|
|
conds.push( role_vo.getRoleVo().lev >= cond[ 1 ] );
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
if( cond[ 0 ] == "hero_star" ) {
|
|
let have = 0;
|
|
have = this.getHeroListByStar( cond[ 1 ] ).length;
|
|
if( have < cond[ 2 ] && !levEnough ) {
|
|
this.desc.push( _cfg.desc1 + nx.text.getKey( "UpStarsNeedTip" ) );
|
|
conds.push( have < cond[ 2 ] );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
results.push( ( conds.length == 0 ) );
|
|
|
|
|
|
if( role_vo.getRoleVo().lev < _cfg.cond3[ 1 ] ) {
|
|
slevEnough = false;
|
|
}
|
|
results.push( slevEnough );
|
|
this.desc.push( _cfg.desc3 + nx.text.getKey( "UpStarsNeedTip" ) );
|
|
|
|
return results;
|
|
|
|
},
|
|
|
|
// 升星 11、12 条件是否达成判断
|
|
dealStar13: function( _cfg ) {
|
|
|
|
this.desc = [];
|
|
let role_vo = RoleController.getInstance();
|
|
let levEnough = false;
|
|
let slevEnough = true;
|
|
let worldlevEnough = true;
|
|
let results = [];
|
|
let conds = [];
|
|
let cond2s = [];
|
|
let cond3s = [];
|
|
for( let i = 0; i < _cfg.cond1.length; i++ ) {
|
|
let cond = _cfg.cond1[ i ];
|
|
|
|
if( cond[ 0 ] == "lev" ) {
|
|
if( role_vo.getRoleVo().lev >= cond[ 1 ] ) {
|
|
levEnough = true;
|
|
} else {
|
|
this.desc.push( _cfg.desc1 + nx.text.getKey( "UpStarsNeedTip" ) );
|
|
conds.push( role_vo.getRoleVo().lev >= cond[ 1 ] );
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
if( cond[ 0 ] == "hero_star" ) {
|
|
let have = 0;
|
|
have = this.getHeroListByStar( cond[ 1 ] ).length;
|
|
if( have < cond[ 2 ] && !levEnough ) {
|
|
this.desc.push( _cfg.desc1 + nx.text.getKey( "UpStarsNeedTip" ) );
|
|
conds.push( have < cond[ 2 ] );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
results.push( ( conds.length == 0 ) );
|
|
|
|
|
|
for( let t = 0; t < _cfg.cond3.length; t++ ) {
|
|
let cond = _cfg.cond3[ t ];
|
|
|
|
if( role_vo.getRoleVo().lev < cond[ 1 ] ) {
|
|
slevEnough = false;
|
|
this.desc.push( _cfg.desc3 + nx.text.getKey( "UpStarsNeedTip" ) );
|
|
cond3s.push( role_vo.getRoleVo().lev >= cond[ 1 ] );
|
|
break;
|
|
}
|
|
|
|
if( cond[ 0 ] == "hero_star" ) {
|
|
let have = 0;
|
|
have = this.getHeroListByStar( cond[ 1 ] ).length;
|
|
if( have < cond[ 2 ] && !slevEnough ) {
|
|
this.desc.push( _cfg.desc3 + nx.text.getKey( "UpStarsNeedTip" ) );
|
|
cond3s.push( have < cond[ 2 ] );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
results.push( ( cond3s.length == 0 ) );
|
|
|
|
return results;
|
|
|
|
},
|
|
|
|
|
|
|
|
getDescs: function() {
|
|
|
|
return this.desc;
|
|
|
|
},
|
|
|
|
|
|
checkOpenStar11: function() {
|
|
|
|
this.desc = [];
|
|
let is_open = true;
|
|
let all = [];
|
|
let role_vo = RoleController.getInstance().getRoleVo()
|
|
// var RoleController = require( "role_controller" );
|
|
let config = game.configs.partner_data.data_partner_const.staropen11_world_lev;
|
|
if( config ) {
|
|
if( config.val[ 0 ] == "world_lev" ) {
|
|
let world_lev = RoleController.getInstance().getModel().getWorldLev() || 0
|
|
if( world_lev < config.val[ 1 ] ) {
|
|
is_open = false;
|
|
all.push( world_lev < config.val[ 1 ] );
|
|
|
|
}
|
|
}
|
|
this.desc.push( ( config.desc + config.val[ 1 ] ) );
|
|
}
|
|
|
|
// --要麼滿足 個人等級條件
|
|
// if( !is_open ) {
|
|
let config_lev = game.configs.partner_data.data_partner_const.staropen11_player_lev
|
|
if( config_lev && config_lev.val[ 0 ] == "lev" ) {
|
|
|
|
if( role_vo && role_vo.lev < config_lev.val[ 1 ] ) {
|
|
is_open = false
|
|
all.push( role_vo.lev < config_lev.val[ 1 ] );
|
|
|
|
}
|
|
this.desc.push( ( config_lev.desc + config_lev.val[ 1 ] ) );
|
|
}
|
|
// }
|
|
|
|
// --策劃加的額外條件
|
|
let config2 = game.configs.partner_data.data_partner_const.staropen11_3rd_open_limit;
|
|
let conditions = config2.val;
|
|
let enough = false;
|
|
for( let c = 0; c < conditions.length; c++ ) {
|
|
let item = conditions[ c ];
|
|
if( item[ 0 ] = "lev" ) {
|
|
if( role_vo.lev < item[ 1 ] ) {
|
|
all.push( role_vo.lev < item[ 1 ] );
|
|
}
|
|
|
|
}
|
|
if( item[ 0 ] = "hero_star" ) {
|
|
let have = 0;
|
|
have = this.getHeroListByStar( item[ 1 ] ).length;
|
|
if( have < item[ 2 ] ) {
|
|
all.push( have < item[ 2 ] );
|
|
|
|
}
|
|
// have = this.gethero
|
|
}
|
|
|
|
}
|
|
this.desc.push( ( config2.desc ) );
|
|
// let is_condition_3 = this.checkExtOpenInfo( config2 );
|
|
// if( !is_condition_3 ){
|
|
// all.push( is_condition_3 );
|
|
// }
|
|
|
|
// // if( !is_open ) {
|
|
// is_open = is_condition_3 || false
|
|
// // }
|
|
|
|
return all.length == 0;
|
|
},
|
|
|
|
checkOpenStar12: function() {
|
|
let is_open = true;
|
|
// var RoleController = require( "role_controller" );
|
|
let config = game.configs.partner_data.data_partner_const.staropen12_world_lev
|
|
if( config ) {
|
|
if( config.val[ 0 ] == "world_lev" ) {
|
|
let world_lev = RoleController.getInstance().getModel().getWorldLev() || 0
|
|
if( world_lev < config.val[ 1 ] ) {
|
|
is_open = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
// --要麼滿足 個人等級條件
|
|
if( !is_open ) {
|
|
is_open = true
|
|
let config_lev = game.configs.partner_data.data_partner_const.staropen12_player_lev
|
|
if( config_lev && config_lev.val[ 0 ] == "lev" ) {
|
|
let role_vo = RoleController.getInstance().getRoleVo()
|
|
if( role_vo && role_vo.lev < config_lev.val[ 1 ] ) {
|
|
is_open = false
|
|
}
|
|
}
|
|
}
|
|
|
|
// --策劃加的額外條件
|
|
let config2 = game.configs.partner_data.data_partner_const.staropen12_3rd_open_limit
|
|
let is_condition_3 = this.checkExtOpenInfo( config2 )
|
|
if( !is_open ) {
|
|
is_open = is_condition_3 || false
|
|
}
|
|
|
|
return is_open;
|
|
},
|
|
|
|
checkOpenStar13: function() {
|
|
let self = this;
|
|
if( self.is_star13_open ) { //如果已經計算開啟過了.就不計算了
|
|
return true
|
|
}
|
|
// --優先判斷 等級 第一條件不滿足再判斷第二條件
|
|
let config = game.configs.partner_data.data_partner_const.staropen13_limit_lev2
|
|
let is_open = true
|
|
if( config ) {
|
|
if( self.checkOpenByKeyValue( config.val[ 0 ], config.val[ 1 ] ) ) {
|
|
is_open = false
|
|
}
|
|
}
|
|
// --如果上面不滿足 再判斷第二個條件
|
|
if( !is_open ) {
|
|
is_open = true
|
|
let config = game.configs.partner_data.data_partner_const.staropen13_limit_lev1
|
|
if( config ) {
|
|
for( let i in config.val ) {
|
|
let v = config.val[ i ]
|
|
if( self.checkOpenByKeyValue( v[ 0 ], v[ 1 ] ) ) {
|
|
is_open = false
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// --條件1 個人和世界等級達到170級 或 個人等級到達180級 開啟升星
|
|
let is_condition_1 = is_open
|
|
// --條件2 擁有2個12星英雄開啟升星
|
|
let is_condition_2 = false
|
|
// --條件3 個人等級達到150,且擁有5個及以上的12星,13星
|
|
let is_condition_3 = false
|
|
|
|
// --第二個硬性條件
|
|
// --13星特殊要 曾經有2個12星英雄
|
|
let config2 = game.configs.partner_data.data_partner_const.staropen13_limit_partner
|
|
if( config2 && config2.val ) {
|
|
let count = 0
|
|
for( let k in self.dic_had_hero_info ) {
|
|
let star = self.dic_had_hero_info[ k ]
|
|
if( star >= config2.val[ 0 ] ) {
|
|
count = count + 1
|
|
if( count >= config2.val[ 1 ] ) {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
if( count < config2.val[ 1 ] ) {
|
|
is_open = false
|
|
is_condition_2 = false
|
|
} else {
|
|
is_condition_2 = true
|
|
}
|
|
}
|
|
is_condition_2 = is_open
|
|
|
|
// --策劃加的額外條件
|
|
let config3 = game.configs.partner_data.data_partner_const.staropen13_3rd_open_limit
|
|
is_condition_3 = self.checkExtOpenInfo( config3 )
|
|
if( !is_open ) {
|
|
is_open = is_condition_3
|
|
}
|
|
|
|
// local tips_str = nil
|
|
// if is_show_tips and not is_open then
|
|
// -- if not is_condition_1 and not is_condition_2 and not is_condition_3 then
|
|
// -- --三個條件都不滿足
|
|
// -- tips_str = TI18N("滿足以下任意條件開啟:1.擁有2個12星英雄 並且個人和世界等級達到170級 \n2. 擁有2個12星英雄 並且個人等級到達180級 \n3.擁有5個12星英雄 並且個人等級達到150級")
|
|
// -- end
|
|
|
|
// -- if not is_condition_1 and not is_condition_2 then
|
|
// -- --兩個都不滿足
|
|
// -- tips_str = TI18N("滿足以下條件開啟:1.擁有2個12星英雄\n2.個人和世界等級達到170級 或 個人等級到達180級")
|
|
// -- elseif not is_condition_1 and is_condition_2 then
|
|
// -- tips_str = TI18N("個人和世界等級達到170級 或 個人等級到達180級 開啟升星")
|
|
// -- else
|
|
// -- tips_str = TI18N("擁有2個12星英雄開啟升星")
|
|
// -- end
|
|
// tips_str = self:getTipsStr(13)
|
|
// end
|
|
if( is_open ) {
|
|
// --如果已經開啟 那麼記錄
|
|
self.is_star13_open = true
|
|
}
|
|
return is_open;
|
|
},
|
|
|
|
checkExtOpenInfo( config ) {
|
|
// -- 策劃要求:原來的條件沒變。只是新增一個或條件,
|
|
// -- 個人等級達到100/120/150,且擁有5個及以上的10/11/12星,開啟11/12/13星
|
|
let val = config.val
|
|
if( val == null ) return false;
|
|
|
|
if( this.checkOpenByKeyValue( val[ 0 ][ 0 ], val[ 0 ][ 1 ] ) ) {
|
|
return false
|
|
}
|
|
if( val[ 1 ] == null ) return false;
|
|
// -- local hero_star = val[2][1] or "hero_star" --這個前端不需要..因為需要寫死的
|
|
let star = val[ 1 ][ 1 ] || 10
|
|
let count = val[ 1 ][ 2 ] || 5
|
|
|
|
|
|
if( this.dic_star_count[ star ] == null ) {
|
|
this.dic_star_count[ star ] = 0
|
|
for( let k in this.dic_had_hero_info ) {
|
|
let _star = this.dic_had_hero_info[ k ];
|
|
if( _star >= star ) {
|
|
this.dic_star_count[ star ] = this.dic_star_count[ star ] + 1
|
|
if( this.dic_star_count[ star ] >= count ) {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
if( this.dic_star_count[ star ] >= count ) {
|
|
return true
|
|
}
|
|
} else {
|
|
if( this.dic_star_count[ star ] >= count ) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
},
|
|
|
|
// --return true 表示不滿足 false 表示滿足
|
|
checkOpenByKeyValue( key, value ) {
|
|
if( !value ) return false;
|
|
// var RoleController = require( "role_controller" );
|
|
if( key == "world_lev" ) {
|
|
let world_lev = RoleController.getInstance().getModel().getWorldLev() || 0
|
|
return world_lev < value
|
|
} else if( key == "lev" ) {
|
|
let role_vo = RoleController.getInstance().getRoleVo()
|
|
if( role_vo && role_vo.lev < value ) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
},
|
|
//---------------------天赋技能---------------------------
|
|
// --设置更新天赋红点
|
|
setUpdateTalentRedpoint() {
|
|
this.is_need_update_talent_redpoint = true
|
|
},
|
|
getTalentRedpointRecord() {
|
|
var self = this
|
|
if( self.is_need_update_talent_redpoint ) {
|
|
let dic_config = game.configs.partner_skill_data.data_partner_skill_learn
|
|
if( dic_config ) {
|
|
let is_enough
|
|
for( let k in dic_config ) {
|
|
let config = dic_config[ k ]
|
|
self.dic_hero_talent_skill_learn_redpoint[ config.id ] = null
|
|
is_enough = true
|
|
for( let i = 0; i < config.expend.length; ++i ) {
|
|
let v = config.expend[ i ]
|
|
let count = BackpackController.getInstance().getModel().getItemNumByBid( v[ 0 ] )
|
|
if( count < v[ 1 ] ) {
|
|
is_enough = false
|
|
break
|
|
}
|
|
}
|
|
if( is_enough ) {
|
|
self.dic_hero_talent_skill_learn_redpoint[ config.id ] = config.id
|
|
}
|
|
}
|
|
}
|
|
}
|
|
self.is_need_update_talent_redpoint = false
|
|
if( !Utils.next( self.dic_hero_talent_skill_learn_redpoint ) ) {
|
|
self.dic_hero_talent_skill_learn_redpoint = {}
|
|
}
|
|
return self.dic_hero_talent_skill_learn_redpoint
|
|
},
|
|
// --检测天赋红点更新
|
|
checkTalentRedPointUpdate() {
|
|
if( this.is_delay_redpoint_update[ HeroConst.RedPointType.eRPTalent ] ) {
|
|
return
|
|
}
|
|
this.is_delay_redpoint_update[ HeroConst.RedPointType.eRPTalent ] = true
|
|
// --清除天赋红点记录
|
|
HeroCalculate.getInstance().clearAllHeroRecordByRedPointType( HeroConst.RedPointType.eRPTalent, true )
|
|
|
|
},
|
|
// --增加详细信息
|
|
updateHeroVoDetailedInfo( info ) {
|
|
if( !info ) return
|
|
if( this.hero_list[ info.partner_id ] ) {
|
|
cc.log( this.hero_list[ info.partner_id ], info )
|
|
for( let k in info ) {
|
|
let v = info[ k ]
|
|
this.hero_list[ info.partner_id ][ k ] = v
|
|
}
|
|
this.hero_list[ info.partner_id ].is_had_detailed = true
|
|
gcore.GlobalEvent.fire( HeroEvent.Hero_Vo_Detailed_info, this.hero_list[ info.partner_id ] )
|
|
}
|
|
},
|
|
|
|
|
|
//初始化皮肤 信息英雄皮肤
|
|
initHeroSkin: function( data ) {
|
|
|
|
let lists = this.getHeroReformListByCamp( 0 );
|
|
let count = 0;
|
|
lists.forEach( _item => {
|
|
|
|
if( _item.result.is_redpoint ) {
|
|
count++;
|
|
}
|
|
} );
|
|
nx.mTip.openTip( "tipReform.show", count > 0 );
|
|
|
|
if( !data ) return
|
|
//判定是否要显示卡片展示界面
|
|
if( this.hero_skin_list ) {
|
|
let show_skin_id = null;
|
|
for( let i in data.partner_skins ) {
|
|
let v = data.partner_skins[ i ];
|
|
if( this.hero_skin_list[ v.id ] == null ) {
|
|
show_skin_id = v.id;
|
|
break
|
|
}
|
|
}
|
|
if( show_skin_id ) {
|
|
nx.bridge.createPanel( "WndPartnerSkinReward", { skin_id: show_skin_id } );
|
|
}
|
|
}
|
|
|
|
this.hero_skin_list = {};
|
|
|
|
for( let i in data.partner_skins ) {
|
|
let v = data.partner_skins[ i ];
|
|
this.hero_skin_list[ v.id ] = v.end_time;
|
|
}
|
|
|
|
gcore.GlobalEvent.fire( HeroEvent.Hero_Skin_Info_Event, data );
|
|
},
|
|
|
|
//根据皮肤id 返回皮肤数据
|
|
//@return 皮肤有效时间点.. 如果永久返回 0 如果返回nil 表示 没有解锁该皮肤
|
|
getHeroSkinInfoBySkinID: function( skin_id ) {
|
|
if( this.hero_skin_list && this.hero_skin_list[ skin_id ] != null ) {
|
|
return this.hero_skin_list[ skin_id ]
|
|
}
|
|
},
|
|
|
|
//--是否解锁该皮肤
|
|
//is_check_time:判断是否过期
|
|
isUnlockHeroSkin: function( skin_id, is_check_time ) {
|
|
if( this.hero_skin_list && this.hero_skin_list[ skin_id ] != null ) {
|
|
if( is_check_time ) {
|
|
if( this.hero_skin_list[ skin_id ] > 0 ) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
return false
|
|
},
|
|
|
|
//共鸣水晶
|
|
|
|
getCystalPreLevLimit: function() {
|
|
if( this.cystal_pre_lev_limit == null ) {
|
|
this.cystal_pre_lev_limit = 340;
|
|
var config = game.configs.resonate_data.data_const.cystal_pre_lev_limit;
|
|
if( config ) {
|
|
this.cystal_pre_lev_limit = config.val;
|
|
}
|
|
}
|
|
return this.cystal_pre_lev_limit || 340;
|
|
},
|
|
// --是否共鸣水晶最大等级 注意: 还有一个突破上限等级 后端传过来的
|
|
isResonateCystalMaxLev: function() {
|
|
// --340 英雄 13星升级的最大等级
|
|
if( this.resonate_cystal_lev && this.resonate_cystal_lev >= this.getCystalPreLevLimit() ) {
|
|
return true;
|
|
}
|
|
return false;
|
|
},
|
|
isCanShowLabelMaxLev: function( lev ) {
|
|
if( lev && lev < this.getCystalPreLevLimit() ) {
|
|
return false;
|
|
}
|
|
return true;
|
|
},
|
|
getDicResonateFiveHeroVo: function() {
|
|
return this.dic_resonate_five_hero_vo || {}
|
|
},
|
|
// --是否共鸣水晶上阵的英雄 如果 hero_vo 不确定是 hero_vo 类的 用此方法判断
|
|
isResonateCystalHero: function( hero_vo ) {
|
|
if( hero_vo.isResonateCrystalHero ) {
|
|
if( hero_vo.isResonateCrystalHero() ) {
|
|
return true
|
|
}
|
|
} else if( hero_vo.resonate_lev && hero_vo.resonate_lev > 0 ) {
|
|
return true
|
|
}
|
|
return false
|
|
},
|
|
|
|
// 更新共鸣锁定信息
|
|
updateResonateCystalInfo: function( data ) {
|
|
if( !data ) {
|
|
return
|
|
}
|
|
this.resonate_cystal_lev = data.lev
|
|
this.dic_resonate_five_hero_vo = {}
|
|
|
|
var star = 0;
|
|
for( var i in data.con_list ) {
|
|
var v = data.con_list[ i ]
|
|
if( v.id != 0 ) {
|
|
var hero_vo = this.getHeroById( v.id )
|
|
if( hero_vo && Utils.next( hero_vo ) != null ) {
|
|
this.dic_resonate_five_hero_vo[ hero_vo.id ] = hero_vo
|
|
}
|
|
if( hero_vo.star ) {
|
|
star = star + hero_vo.star;
|
|
}
|
|
}
|
|
}
|
|
for( var i in this.dic_resonate_lock_info ) {
|
|
var hero_vo = this.dic_resonate_lock_info[ i ]
|
|
if( hero_vo.updateLock ) {
|
|
var _data = [ {
|
|
lock_type: HeroConst.LockType.eHeroResonateLock,
|
|
is_lock: 0
|
|
} ]
|
|
|
|
hero_vo.updateLock( _data )
|
|
}
|
|
}
|
|
this.dic_resonate_lock_info = {};
|
|
for( var i in data.res_list ) {
|
|
var v = data.res_list[ i ]
|
|
if( v.id != 0 ) {
|
|
var hero_vo = this.getHeroById( v.id )
|
|
if( hero_vo && hero_vo.updateLock ) {
|
|
this.dic_resonate_lock_info[ v.id ] = hero_vo
|
|
var _data2 = [ {
|
|
lock_type: HeroConst.LockType.eHeroResonateLock,
|
|
is_lock: 1
|
|
} ]
|
|
hero_vo.updateLock( _data2 );
|
|
}
|
|
}
|
|
}
|
|
if( this.resonate_max_partner_lev == null ) {
|
|
// -- 说明26400没有返回了
|
|
this.resonate_max_partner_lev = star
|
|
}
|
|
},
|
|
updateResonateLockInfo: function( data ) {
|
|
this.resonate_stone_level = data.lev || 0
|
|
this.resonate_max_partner_lev = data.max_partner_lev || 0
|
|
// --判断是有红点
|
|
this.checkResonateRedPoint();
|
|
},
|
|
checkResonateRedPoint: function() {
|
|
if( !this.resonate_stone_level ) {
|
|
return
|
|
}
|
|
if( !this.resonate_max_partner_lev ) {
|
|
return
|
|
}
|
|
|
|
let resonate_stone_condition = 50
|
|
let config = game.configs.resonate_data.data_const.amp_all_start_limit;
|
|
if( config ) {
|
|
resonate_stone_condition = config.val
|
|
}
|
|
// --不满足开启不计算显示了
|
|
if( this.resonate_max_partner_lev < resonate_stone_condition ) {
|
|
return
|
|
}
|
|
|
|
let config2 = gdata( "resonate_data", "data_level_up", this.resonate_stone_level );
|
|
let is_redpoint = false
|
|
if( config2 ) {
|
|
if( config2.expend && Utils.next( config2.expend ) != null ) {
|
|
is_redpoint = true
|
|
for( var i in config2.expend ) {
|
|
var v = config2.expend[ i ]
|
|
let bid = v[ 0 ]
|
|
let num = v[ 1 ]
|
|
let have_num = BackpackController.getInstance().getModel().getItemNumByBid( bid );
|
|
if( num && num > have_num ) {
|
|
is_redpoint = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
this.is_resonate_stone_redpoint = is_redpoint
|
|
|
|
},
|
|
// 是否最高等级
|
|
isResonateMaxLevel: function( lev ) {
|
|
if( lev ) {
|
|
let config = gdata( "resonate_data", "data_level_up", lev + 1 )
|
|
if( config == null ) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
},
|
|
// 共鸣是否开启
|
|
checkResonateIsOpen: function( not_tips ) {
|
|
// var RoleController = require( "role_controller" );
|
|
var role_vo = RoleController.getInstance().getRoleVo();
|
|
var limit_lv_cfg = game.configs.resonate_data.data_const[ "open_lev" ];
|
|
if( limit_lv_cfg && role_vo && limit_lv_cfg.val <= role_vo.lev ) {
|
|
return true
|
|
}
|
|
if( !not_tips && limit_lv_cfg ) {
|
|
message( limit_lv_cfg.desc )
|
|
}
|
|
return false
|
|
},
|
|
|
|
createStar( num2, star_con, setting, star_width ) {
|
|
let num = num2 || 0
|
|
let star_setting = setting || {}
|
|
if( star_setting.star_list == null ) {
|
|
star_setting.star_list = {}
|
|
}
|
|
|
|
if( star_setting.star_list2 == null ) {
|
|
star_setting.star_list2 = {}
|
|
}
|
|
|
|
for( let i in star_setting.star_list ) {
|
|
let v = star_setting.star_list[ i ];
|
|
v.node.active = false
|
|
}
|
|
for( let i in star_setting.star_list2 ) {
|
|
let v = star_setting.star_list2[ i ];
|
|
v.node.active = false
|
|
}
|
|
if( star_setting.star10 ) {
|
|
star_setting.star10.node.active = false;
|
|
}
|
|
|
|
let _cStar = ( star_count, res, star_list ) => {
|
|
let width = star_width || ( 29 + 3 )
|
|
let x = -star_count * width * 0.5 + width * 0.5
|
|
for( let i = 0; i < star_count; i++ ) {
|
|
if( !star_list[ i ] ) {
|
|
let star = Utils.createImage( star_con, res, 0, 0, cc.v2( 0.5, 0.5 ), false, 0, false )
|
|
star.node.scale = 1;
|
|
star_list[ i ] = star
|
|
}
|
|
star_list[ i ].node.active = true
|
|
star_list[ i ].node.x = ( x + ( i - 1 ) * width )
|
|
}
|
|
}
|
|
|
|
if( num > 0 && num <= 5 ) {
|
|
let res = PathTool.getIconPath( "common", "ico_star_3" )
|
|
_cStar( num, res, star_setting.star_list )
|
|
} else if( num >= 6 && num <= 9 ) {
|
|
let res = PathTool.getIconPath( "common", "ico_star_2" )
|
|
let count = num - 5
|
|
_cStar( count, res, star_setting.star_list2 )
|
|
} else if( num >= 10 ) {
|
|
let new_num = num - 10
|
|
let res = PathTool.getIconPath( "common", "ico_star_1" )
|
|
if( star_setting.star10 == null ) {
|
|
let star = Utils.createImage( star_con, res, 0, 0, cc.v2( 0.5, 0.5 ), false, 0, false )
|
|
star.node.scale = 1.2;
|
|
star_setting.star10 = star
|
|
} else {
|
|
star_setting.star10.node.active = true;
|
|
}
|
|
|
|
if( new_num > 0 ) {
|
|
if( star_setting.star_label == null ) {
|
|
let size = star_setting.star10.node.getContentSize()
|
|
star_setting.star_label = Utils.createLabel( 12, game.configs.color_data.data_color16[ 1 ], game.configs.color_data.data_color16[ 9 ], size.width * 0.5 - 2, size.height * 0.5, "10", star_setting.star10.node, 1, cc.v2( 0.5, 0.5 ) )
|
|
} else {
|
|
star_setting.star_label.node.active = true;
|
|
}
|
|
star_setting.star_label.string = new_num;
|
|
} else {
|
|
if( star_setting.star_label ) {
|
|
star_setting.star_label.node.active = false;
|
|
}
|
|
}
|
|
}
|
|
return star_setting
|
|
},
|
|
|
|
//获取所有英雄的神装信息
|
|
sendAllHeroHolyEquipInfo() {
|
|
if( this.hero_list ) {
|
|
let list = []
|
|
for( let k in this.hero_list ) {
|
|
let v = this.hero_list[ k ];
|
|
if( !v.ishaveHolyEquipmentData() ) {
|
|
list.push( {
|
|
partner_id: v.id
|
|
} );
|
|
}
|
|
}
|
|
if( list.length > 0 ) {
|
|
//所有英雄的神装信息
|
|
HeroController.getInstance().sender11092( list )
|
|
}
|
|
}
|
|
},
|
|
|
|
//是否神装开启
|
|
//@is_show_tips 是否显示提示 --暂时没用
|
|
isOpenHolyEquipMentByHerovo( hero_vo, is_show_tips ) {
|
|
if( !hero_vo ) return false;
|
|
|
|
//神装开启所需英雄星级
|
|
let config = game.configs.partner_holy_eqm_data.data_const.open_star_condition
|
|
let star = hero_vo.star || 1
|
|
if( config && hero_vo.star < config.val ) {
|
|
return false
|
|
}
|
|
|
|
// var RoleController = require( "role_controller" );
|
|
let role_vo = RoleController.getInstance().getRoleVo()
|
|
let lev = 0
|
|
if( role_vo ) {
|
|
lev = role_vo.lev || 0
|
|
}
|
|
|
|
//策划要求两个情况 : 1世界等级110且个人等级105开启 2个人等级120开启
|
|
// 个人等级限制 --先判断2
|
|
let role_second_lv_cfg = game.configs.partner_holy_eqm_data.data_const.open_lev_second_condition
|
|
if( role_second_lv_cfg && lev < role_second_lv_cfg.val ) {
|
|
//不满足2 再判断1
|
|
// 个人等级条件
|
|
let role_lv_cfg = game.configs.partner_holy_eqm_data.data_const.open_lev_condition
|
|
if( lev < role_lv_cfg.val ) {
|
|
return false
|
|
}
|
|
// 世界等级限制
|
|
let world_lv_cfg = game.configs.partner_holy_eqm_data.data_const.open_worldlev_condition
|
|
let world_lev = RoleController.getInstance().getModel().getWorldLev()
|
|
if( world_lev && world_lv_cfg && world_lev < world_lv_cfg.val ) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
},
|
|
|
|
getHeroHolyEquipList( id ) {
|
|
if( this.hero_list[ id ] ) {
|
|
return this.hero_list[ id ].holy_eqm_list || []
|
|
}
|
|
return {}
|
|
},
|
|
|
|
updateHolyEquipmentInfo( data ) {
|
|
let self = this;
|
|
let id = data.partner_id || 0
|
|
if( self.hero_list[ id ] ) {
|
|
let hero_vo = self.hero_list[ id ]
|
|
//先清空神装记录
|
|
if( hero_vo.holy_eqm_list ) {
|
|
for( let i in hero_vo.holy_eqm_list ) {
|
|
let equip_vo = hero_vo.holy_eqm_list[ i ];
|
|
self.hero_holy_list[ equip_vo.id ] = null
|
|
self.dic_itemid_to_partner_id[ equip_vo.id ] = null
|
|
}
|
|
}
|
|
this.updateHeroVo( data )
|
|
//在重新记录新的记录
|
|
if( hero_vo.holy_eqm_list ) {
|
|
for( let i in hero_vo.holy_eqm_list ) {
|
|
let equip_vo = hero_vo.holy_eqm_list[ i ];
|
|
for( const k in data.holy_eqm ) {
|
|
const element = data.holy_eqm[ k ];
|
|
if( equip_vo.type == element.type ) {
|
|
self.hero_holy_list[ equip_vo.id ] = equip_vo
|
|
self.dic_itemid_to_partner_id[ equip_vo.id ] = hero_vo.partner_id
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
gcore.GlobalEvent.fire( HeroEvent.Holy_Equipment_Update_Event, hero_vo )
|
|
}
|
|
},
|
|
|
|
//更新神装信息
|
|
updateHeroVoHolyEquipment( data_list, is_not_check ) {
|
|
let self = this;
|
|
let is_team = false
|
|
for( let i in data_list ) {
|
|
let v = data_list[ i ];
|
|
if( self.hero_list[ v.partner_id ] ) {
|
|
self.hero_list[ v.partner_id ].updateHolyEqmList( v.holy_eqm )
|
|
if( !is_team ) {
|
|
if( self.hero_list[ v.partner_id ].isFormDrama() ) {
|
|
is_team = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
self.hero_holy_list = {}
|
|
for( let k in self.hero_list ) {
|
|
let v = this.hero_list[ k ];
|
|
if( v.holy_eqm_list ) {
|
|
for( let i in v.holy_eqm_list ) {
|
|
let equip_vo = v.holy_eqm_list[ i ];
|
|
self.hero_holy_list[ equip_vo.id ] = equip_vo
|
|
self.dic_itemid_to_partner_id[ equip_vo.id ] = v.partner_id
|
|
}
|
|
}
|
|
}
|
|
|
|
// -- 检查红点是要的暂时不考虑.留著
|
|
// -- if is_team && not is_not_check then
|
|
// -- --如果有剧情阵容的英雄..需要检查红点
|
|
// -- --检测红点
|
|
// -- HeroCalculate.checkAllHeroRedPoint()
|
|
// -- end
|
|
},
|
|
|
|
updateHolyEquipmentPlan( data, _false ) {
|
|
let self = this;
|
|
if( data.num && _false == true ) {
|
|
// console.log( JSON.stringify( this.holy_equip_plans ) + "当前的神装" );
|
|
|
|
this.holy_equip_plans.num = data.num;
|
|
}
|
|
if( data.holy_eqm_set_cell ) {
|
|
this.holy_equip_plans.holy_eqm_set_cell = data.holy_eqm_set_cell;
|
|
}
|
|
|
|
if( data.num ) { //格子上限
|
|
self.holy_equip_plan_count = data.num
|
|
}
|
|
if( !self.holy_equip_plan ) {
|
|
self.holy_equip_plan = {}
|
|
}
|
|
if( data.holy_eqm_set_cell ) {
|
|
for( let i in data.holy_eqm_set_cell ) {
|
|
let cell = data.holy_eqm_set_cell[ i ];
|
|
if( self.holy_equip_plan[ cell.id ] ) {
|
|
for( let k in cell ) {
|
|
let v = cell[ k ];
|
|
self.holy_equip_plan[ cell.id ][ k ] = v
|
|
}
|
|
} else {
|
|
self.holy_equip_plan[ cell.id ] = cell
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
getHolyEquipmentPlanDatad() {
|
|
|
|
if( this.holy_equip_plans && this.holy_equip_plans.holy_eqm_set_cell ) {
|
|
this.holy_equip_plans.holy_eqm_set_cell.sort( Utils.tableLowerSorter( [ "id" ] ) );
|
|
}
|
|
|
|
|
|
return this.holy_equip_plans;
|
|
},
|
|
|
|
getHolyPlanCount: function() {
|
|
return this.holy_equip_plan_count;
|
|
},
|
|
|
|
getHolyEquipmentPlanData() {
|
|
return this.holy_equip_plan
|
|
},
|
|
|
|
// --重生次数
|
|
setResetCount( data ) {
|
|
if( !data ) return
|
|
this.reset_count = data.day_num
|
|
let hero_vo = this.getHeroById( data.partner_id )
|
|
if( hero_vo ) {
|
|
hero_vo.initResetTime( data.end_time )
|
|
}
|
|
},
|
|
|
|
//获取神装套装描述
|
|
//@equip_vo_list 装备列表 结构{goods_vo,goods_vo,...}
|
|
//return 描述list
|
|
// 返回结构 {}
|
|
getHolyEquipSuitDes: function( equip_vo_list ) {
|
|
if( !equip_vo_list ) {
|
|
return {}
|
|
}
|
|
let dic_suit_set = []
|
|
let dic_eqm_set_list = []
|
|
for( const k in equip_vo_list ) { //遍历当前装备列表
|
|
const euip_vo = equip_vo_list[ k ];
|
|
if( euip_vo.config ) {
|
|
let eqm_key = Math.floor( euip_vo.config.eqm_set / 100 ) //判断当前是那一套套装
|
|
if( dic_suit_set[ eqm_key ] == null ) {
|
|
dic_eqm_set_list[ eqm_key ] = []
|
|
dic_suit_set[ eqm_key ] = 1
|
|
dic_eqm_set_list[ eqm_key ].push( euip_vo.config.eqm_set )
|
|
} else {
|
|
dic_suit_set[ eqm_key ] = dic_suit_set[ eqm_key ] + 1 //列表中有几件装备
|
|
dic_eqm_set_list[ eqm_key ].push( euip_vo.config.eqm_set )
|
|
}
|
|
}
|
|
}
|
|
let suit_config = []
|
|
for( const eqm_key in dic_suit_set ) {
|
|
const count = dic_suit_set[ eqm_key ];
|
|
let eqm_set_list = dic_eqm_set_list[ eqm_key ]
|
|
if( count > 1 ) { //2件以上说明有套装
|
|
eqm_set_list.sort( function( a, b ) { //按照星级排序
|
|
return b - a;
|
|
} );
|
|
|
|
let cur_eqm_set = null
|
|
let cur_config = null
|
|
for( const i in eqm_set_list ) {
|
|
const eqm_set = eqm_set_list[ i ];
|
|
let num = Number( i ) + 1
|
|
if( cur_eqm_set == null ) {
|
|
cur_eqm_set = eqm_set;
|
|
cur_config = game.configs.partner_holy_eqm_data.data_suit_info[ eqm_set ]
|
|
cur_config.sort( function( a, b ) {
|
|
return a.num < b.num
|
|
} );
|
|
} else {
|
|
if( cur_eqm_set != eqm_set ) {
|
|
cur_config = game.configs.partner_holy_eqm_data.data_suit_info[ eqm_set ]
|
|
cur_config.sort( function( a, b ) {
|
|
return a.num < b.num
|
|
} );
|
|
}
|
|
for( const _ in cur_config ) {
|
|
const suit_info = cur_config[ _ ];
|
|
if( suit_info.num == num ) {
|
|
suit_config.push( suit_info )
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
let list = []
|
|
for( const i in suit_config ) {
|
|
const v = suit_config[ i ];
|
|
//说明是激活的
|
|
let eqm_set = v.id
|
|
|
|
let id = Math.floor( eqm_set / 100 )
|
|
let config = game.configs.partner_holy_eqm_data.data_suit_res_prefix[ id ]
|
|
if( config ) {
|
|
let data = {}
|
|
data.num = v.num
|
|
data.icon_res = config.prefix // PathTool.getSuitRes(config.prefix)
|
|
data.name = cc.js.formatStr( "%s(%s)", v.name, v.num )
|
|
data.id = eqm_set
|
|
list.push( data )
|
|
}
|
|
}
|
|
list.sort( Utils.tableLowerSorter( [ "id", "num" ] ) )
|
|
return list
|
|
},
|
|
|
|
//檢查道具是否在神裝管理裡面
|
|
//@item_id 物品唯一id
|
|
checkHolyEquipmentPalnByItemID( item_id ) {
|
|
if( !item_id ) {
|
|
return false
|
|
}
|
|
if( !this.holy_equip_plan ) {
|
|
return false
|
|
}
|
|
for( const i in this.holy_equip_plan ) {
|
|
const cell = this.holy_equip_plan[ i ];
|
|
for( const j in cell.list ) {
|
|
const v = cell.list[ j ];
|
|
if( item_id == v.item_id ) {
|
|
return {
|
|
bool: true,
|
|
cell: cell
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
bool: false
|
|
}
|
|
},
|
|
|
|
//獲取所有英雄穿戴的裝備信息
|
|
//@ return
|
|
getAllHeroHolyEquipList() {
|
|
return this.hero_holy_list || {}
|
|
},
|
|
|
|
getHolyEquipById( id ) {
|
|
if( this.hero_holy_list ) {
|
|
return this.hero_holy_list[ id ]
|
|
}
|
|
},
|
|
|
|
|
|
getHolyPreviewInfo: function( _index ) {
|
|
|
|
let ct = parseInt( _index ) * 100 + 5;
|
|
let lst = [];
|
|
let cfgs = game.configs.item_data.data_holy_eqm_list;
|
|
for( let i in cfgs ) {
|
|
if( ct >= i && i >= ( ct - 4 ) ) {
|
|
let cfg = cfgs[ i ];
|
|
for( let j in cfg ) {
|
|
|
|
lst.push( cfg[ j ] );
|
|
}
|
|
}
|
|
|
|
}
|
|
lst.sort( ( a, b ) => {
|
|
return b.id - a.id;
|
|
} );
|
|
return lst;
|
|
},
|
|
|
|
|
|
getResetCount() {
|
|
return this.reset_count
|
|
},
|
|
|
|
//獲取品質
|
|
//@item_id 道具id
|
|
//@ attr_key 屬性名字
|
|
//@ value 屬性值
|
|
getHolyEquipmentQualityByItemIdAttrKey: function( item_id, attr_key, value ) {
|
|
let quality = 0
|
|
let holy_equip_config = game.configs.partner_holy_eqm_data.data_base_info[ ( item_id ) ]
|
|
if( holy_equip_config ) {
|
|
let key = Utils.getNorKey( holy_equip_config[ 2 ], attr_key )
|
|
let config = game.configs.partner_holy_eqm_data.data_attr_color_rule[ ( key ) ]
|
|
if( value > 0 && config && config.color_list[ 0 ] ) {
|
|
let list = config.color_list[ 0 ] // {0-12}
|
|
for( let i = 0; i < list.length; i++ ) {
|
|
if( list[ i + 1 ] ) {
|
|
if( value >= list[ i ] && value < list[ i + 1 ] ) {
|
|
quality = i
|
|
}
|
|
} else {
|
|
if( value >= list[ i ] ) {
|
|
quality = i
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return quality
|
|
},
|
|
|
|
//獲取某個屬性最大值
|
|
getHolyEquipmentMaxAttrByItemIdAttrKey( item_id, attr_key ) {
|
|
let max_count = 1
|
|
let holy_equip_config = game.configs.partner_holy_eqm_data.data_base_info[ ( item_id ) ]
|
|
if( holy_equip_config ) {
|
|
let config = game.configs.partner_holy_eqm_data.data_attr_max_info[ holy_equip_config[ 3 ] ]
|
|
if( config ) {
|
|
for( let i = 0; i < config.max_attr.length; i++ ) {
|
|
const v = config.max_attr[ i ];
|
|
if( v[ 0 ] && v[ 0 ] == attr_key ) {
|
|
max_count = v[ 1 ] || 1
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return max_count
|
|
},
|
|
|
|
// --是否是公會pvp 陣法類型
|
|
isGuildPvpFrom( form_type ) {
|
|
let self = this;
|
|
if( self.dic_guild_from_type == null ) {
|
|
self.dic_guild_from_type = {}
|
|
let config_list = game.configs.combat_type_data.data_fight_list;
|
|
if( config_list ) {
|
|
for( let k in config_list ) {
|
|
let config = config_list[ k ];
|
|
if( config.is_guild_pvp == 1 ) {
|
|
if( config.from != null ) {
|
|
for( let i in config.from[ 0 ] ) {
|
|
let form = config.from[ 0 ][ i ];
|
|
self.dic_guild_from_type[ form ] = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return self.dic_guild_from_type[ form_type ]
|
|
},
|
|
} ); |