/****************************************************************** * * 联盟天赋 * ******************************************************************/ const Toggle = require( "nx.fx.togs" ); const BridgeWindow = require( "bridge.window" ); const GuildskillController = require( "guildskill_controller" ); const GuildskillEvent = require( "guildskill_event" ); const GuildConst = require( "guild_const" ); const BackpackController = require( "backpack_controller" ); const SkillBase = require( "cmp.skill.base" ); const paths = { 40002 : "res_p2", 40001 : "res_p1", 30002 : "res_p2", 30001 : "res_p1", 20002 : "dam2", 20001 : "dam1", 10002 : "dam2", 10001 : "dam1", } cc.Class( { extends: BridgeWindow, properties: { nodMenu: { default: null, type: Toggle }, nodModel: { default: null, type: Toggle }, nodInfo: { default: null, type: cc.Node }, nodShow: { default: null, type: cc.Node }, nodLock: { default: null, type: cc.Node }, nodPvpAttr: { default: [], type: cc.Node }, }, onLoad: function(){ this.bindGEvent( GuildskillEvent.UpdateSkilUpgradeEvent, this.freshSkill.bind( this )); this.bindGEvent( GuildskillEvent.UpdateGuildSkillEvent, this.freshSkill.bind( this )); this.bindGEvent( GuildskillEvent.UpdateSkillStatusEvent, this.freshSkill.bind( this )); this.bindGEvent( GuildskillEvent.Guild_Pvp_Career_Info_Event, this.freshUpGrade.bind( this )); // this.bindGEvent( GuildskillEvent.Guild_Pvp_Career_Info_Event, this.freshSkill.bind( this ) ); this.nodMenu.posTog = this.onTogMenu.bind( this ); this.nodModel.posTog = this.onTogModel.bind( this ); }, // 重载:参数打开 onOpenConfigs: function( _params ) { this.nodMenu.togTo( 0 ); // this.nodModel.togTo( 1 ); this.activeMenu( 2 ); // this.activeModel( GuildConst.guildAttrType.PVE ); }, // 商城切换 onTogMenu: function( _index ) { this.activeMenu( parseInt( _index ) + 2 ); }, // 模式切换 onTogModel: function( _index ) { this.activeModel( parseInt( _index ) + 1 ); }, // 模式切換 pve pvp 需要刷新數據 activeModel: function( _index ) { let model = _index; nx.gui.setActive( this.nodLock, "", nx.dt.arrEmpty( this.PVPSkills.attr_formation ) ); nx.gui.setActive( this.nodShow, "pvp", model == GuildConst.guildAttrType.PVP ); nx.gui.setActive( this.nodShow, "pve", model == GuildConst.guildAttrType.PVE ); model == GuildConst.guildAttrType.PVP ? this.freshPvpAttr() : this.freshProps(); }, // 激活菜单 职业选择 切換職業 刷數據 activeMenu: function( _index ) { this.career = _index; let GS = GuildskillController.getInstance(); let model = GS.getModel(); this.select = 0; this.PVPSkills = model.getPvpskillInfoByCareer( this.career ); // 默認顯示控制 pve ? pvp if( nx.dt.arrEmpty( this.PVPSkills.attr_formation ) ){ this.nodModel.togTo( 1 ); this.activeModel( GuildConst.guildAttrType.PVE ); }else{ this.nodModel.togTo( 0 ); this.activeModel( GuildConst.guildAttrType.PVP ); } let skills = model.getCareerSkillInfo( this.career ); if( nx.dt.objEmpty( skills ) ){ GS.requestCareerSkillInfo( this.career ); return; } // this.skills = skills; this.freshSkill(); }, // 刷新属性相关 pve相關 freshProps: function( ){ if( !this.skills ){ return; } nx.gui.setActive( this.nodInfo, "cnt/pvp_tip", false ); nx.gui.setActive( this.nodInfo, "cnt/ops/reset", false ); let results = []; let val = this.skills.group_ids; let cfgs = game.configs.guild_skill_data; if( nx.dt.arrEmpty( val ) ){ val = [0,0,0,0,0,0]; this.base = cfgs.data_info_group[this.skills.group_id]; }else{ // 處理需要叠加計算的數據相關 let lst = []; let attrs = []; results = []; let seq = [0,0,0,0,0,0]; // 获取所有的 需要处理的属性总 let dealVal = function( _data ){ let attr_list = ""; let dealResult = function( _itemd ){ attr_list = cfgs.data_info[_itemd.id].attr_list[0][0]; seq[_itemd.seq -1] += cfgs.data_info[_itemd.id].attr_list[0][1]; results[_itemd.seq -1 ] = [attr_list,seq[_itemd.seq -1], _itemd.id ]; }; lst.forEach( _item => { if( _item.seq == 1 ){ dealResult( _item ); } if( _item.seq == 2 ){ dealResult( _item ); } if( _item.seq == 3 ){ dealResult( _item ); } if( _item.seq == 4 ){ dealResult( _item ); } if( _item.seq == 5 ){ dealResult( _item ); } if( _item.seq == 6 ){ dealResult( _item ); } } ); } // 获取所有的 需要处理的属性总 let deal = function( _data ){ let gs = cfgs.data_info_group[_data]; attrs = nx.dt.objClone( gs[0] ); for (let j = 0; j < gs.length; j++) { let g = gs[j]; lst.push( g ); } } for (let i = 0; i < this.skills.group_ids.length; i++) { let d = this.skills.group_ids[i].group_id; deal( d ); } dealVal( lst ); } let group_id = this.skills.group_id; /** * [23700]:{"career":2,"group_id":2001,"skill_ids":[{"skill_id":20011}],"group_ids":[]} */ let afg = game.configs.guild_skill_data.data_const; let sfg = game.configs.guild_skill_data.data_group; let dfg = game.configs.guild_skill_data.data_info; let key = this.career + "_" + group_id; // 显示的属性 读取相关配置信息 let attrs = afg["attr_show_" + ( this.career - 1 ) ].val; // 非手动聚焦显示下一个要升级的技能 let next = 0; this.skills.skill_ids.forEach( skill => { if( skill.status > 0 ){ next++; } }); // 右上 显示相关的技能信息 let max = afg.max_lv; // 操作及雜項顯示 this.freshOp( sfg, max, key, next ); if( next == this.skills.skill_ids.length ){ next = 0; } // 屬性相關 let cnode = nx.gui.find( this.nodShow, "pve/nod" ).children; let chd = nx.gui.find( this.nodInfo, "cnt/props" ).children; let nod_s = nx.gui.find( this.nodInfo, "top" ); // let cfg = game.configs.attr_data; for (let i = 0; i < chd.length; i++) { let clr = ""; // 右边属性 相关 let item = chd[i]; let nod = cnode[i]; if( nx.dt.arrEmpty( this.skills.group_ids ) ){ nx.bridge.attrs.setAttribute( item, [ attrs[i], val[i] ] ); nx.gui.setSpriteFrame( item, "iconsp", cc.path.join( "prefab/guild/icon/" + attrs[i] ) ); }else{ // 当升级了 天赋后显示 nx.bridge.attrs.setAttribute( item, [ results[i][0], results[i][1] ] ); nx.gui.setSpriteFrame( item, "iconsp", cc.path.join( "prefab/guild/icon/" + results[i][0] ) ); } nx.gui.setString( nod, "level", dfg[this.skills.skill_ids[i].id].lev + "/" + afg.max_lv.val ); nx.gui.setActive( nod, "abg", next > i ); nx.gui.setActive( nod, "focus", next == i ); if( next == i ){ clr = new cc.Color().fromHEX( "#EAEDF2" ); if( nx.dt.arrEmpty( this.skills.group_ids ) ){ if( nx.dt.arrEmpty( this.PVPSkills.attr_formation ) ){ this.freshMat( nx.gui.find( this.nodInfo, "cnt/mat" ), dfg[this.base[i].id].loss ); } nx.bridge.attrs.setAttribute( nod, [ attrs[i], val[i] ] ); nx.gui.setSpriteFrame( nod, "iconsp", ( "prefab/guild/icon/w" + attrs[i] ) ); nx.bridge.attrs.setAttribute( nod_s, [ attrs[i], val[i] ] ); nx.gui.setSpriteFrame( nod_s, "iconsp", ( "prefab/guild/icon/" + attrs[i] ) ); }else{ if( nx.dt.arrEmpty( this.PVPSkills.attr_formation ) ){ this.freshMat( nx.gui.find( this.nodInfo, "cnt/mat" ), dfg[this.skills.skill_ids[i].id].loss ); } nx.bridge.attrs.setAttribute( nod, [ results[i][0], results[i][1] ] ); nx.gui.setSpriteFrame( nod, "iconsp", ( "prefab/guild/icon/w" + results[i][0] ) ); nx.bridge.attrs.setAttribute( nod_s, [ attrs[i], cfgs.data_info[results[i][2]].attr_list[0][1] ]); nx.gui.setSpriteFrame( nod_s, "iconsp", ( "prefab/guild/icon/" + attrs[i] ) ); } nx.gui.setString( nod_s, "add/lev", nx.text.format( "LvNumber", dfg[this.skills.skill_ids[i].id].lev ) ); nx.gui.setString( nod_s, "add/txt", dfg[this.skills.skill_ids[i].id].lev + 1 ); }else{ if( i < next ){ clr = new cc.Color().fromHEX( "#030303" ); nx.bridge.attrs.setAttribute( nod, [ attrs[i], val[i], i + 1 ] ); nx.gui.setSpriteFrame( nod, "iconsp", ( "prefab/guild/icon/" + attrs[i] ) ); }else{ clr = new cc.Color().fromHEX( "#EAEDF2" ); nx.bridge.attrs.setAttribute( nod, [ attrs[i], val[i], i + 1 ] ); nx.gui.setSpriteFrame( nod, "iconsp", ( "prefab/guild/icon/w" + attrs[i] ) ); } } nx.gui.setColor( nod, "level", clr ); nx.gui.setActive( item, "", true ); } nx.gui.setActive( this.nodInfo, "cnt/mat", nx.dt.arrEmpty( this.PVPSkills.attr_formation ) ); nx.gui.setActive( this.nodInfo, "cnt/pve_tip", !nx.dt.arrEmpty( this.PVPSkills.attr_formation ) ); }, freshOp: function( _sfg, _max, _key, _next ){ let next = _next; let key = _key; let sfg = _sfg; let max = _max; let show_name = ""; if( sfg[key] ){ show_name = sfg[key].group_name; // 操作刷新---- this.cb = ()=>{ let GS = GuildskillController.getInstance(); let sfg = game.configs.guild_skill_data.data_info_group; // 取相应职业的属性升级序列 let skills = sfg[this.skills.group_id]; let count = 0; this.skills.skill_ids.forEach( skill => { if( skill.status > 0 ){ count++; } }); GS.requestActivitySkill( skills[count].id ); } nx.gui.setActive( this.nodInfo, "cnt/ops/other/uplevel", sfg[key].group_seq < max.val || ( sfg[key].group_seq == max.val && next < this.skills.skill_ids.length ) ); nx.gui.setActive( this.nodInfo, "cnt/ops/other/upgrade", next == this.skills.skill_ids.length && sfg[key].group_seq == max.val && nx.dt.arrEmpty( this.PVPSkills.attr_formation ) ); } // nx.gui.setActive( this.nodInfo, "cnt/ops", true ); nx.gui.setString( this.nodInfo, "top/name", show_name ); }, freshPvpAttr:function(){ // /****** * {"career":4,"attr_formation":[ * {"id":30001,"lev":0}, * {"id":30002,"lev":0}, * {"id":30003,"lev":0}, * {"id":30004,"lev":0} * ],"skill_id":0,"skill_lev":0} */ nx.gui.setActive( this.nodInfo, "cnt/pve_tip", false ); nx.gui.setActive( this.nodInfo, "cnt/pvp_tip", true ); this.unscheduleAllCallbacks(); let attr_form = this.PVPSkills.attr_formation; let afg = game.configs.guild_skill_data.data_const; let skills = []; let chd = nx.gui.find( this.nodInfo, "cnt/props" ).children; for (let i = 0; i < chd.length; i++) { let dat = attr_form[i]; let item = chd[i]; if( !dat ){ nx.gui.setActive( item, "", false ); continue; } if( dat.lev > 0 ){ skills.push( dat ); } let key = dat.id + "_" + dat.lev; let cfg = gdata( "guild_skill_data", "data_pvp_attr_info", key ); let resspn = ""; if( dat.lev > 0 ){ resspn = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/" + cfg.client_attr[0][0] ); }else{ resspn = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/w" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/w" + cfg.client_attr[0][0] ); } let ressp = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/" + cfg.client_attr[0][0] ); if( cfg ){ nx.bridge.attrs.setAttribute( this.nodPvpAttr[i], [ cfg.client_attr[0][0], cfg.client_attr[0][1], i +1 ] ); nx.gui.setSpriteFrame( this.nodPvpAttr[i], "iconsp", resspn ); nx.bridge.attrs.setAttribute( item, cfg.client_attr[0] ); nx.gui.setSpriteFrame( item, "iconsp", ressp ); } nx.gui.setActive( item, "", true ); nx.gui.setActive( this.nodPvpAttr[i], "abg", dat.lev > 0 ); nx.gui.setString( this.nodPvpAttr[i], "level", dat.lev + "/" + afg.max_lv.val ); } nx.gui.setActive( this.nodInfo, "cnt/ops/reset", !nx.dt.arrEmpty( skills ) ); nx.gui.setActive( this.nodInfo, "cnt/ops/other/uplevel", true ); nx.gui.setActive( this.nodInfo, "cnt/ops/other/upgrade", false ); let skill_nod = nx.gui.find( this.nodShow, "pvp/skill" ); let cmp = skill_nod.getComponent( SkillBase ); if( cmp ){ cmp.setData( this.PVPSkills.skill_id ); nx.gui.setActive( skill_nod, "lock", this.PVPSkills.skill_id == 0 ); nx.gui.setString( skill_nod, "lev/lev", nx.text.format( "LvNumber",this.PVPSkills.skill_lev ) ); nx.gui.setActive( skill_nod, "lev", this.PVPSkills.skill_id != 0 ); } this.scheduleOnce( ()=>{ this.onTouchPVPAttr( this.select ); }, 0.01 ); }, freshMat: function( _nod, _mat ){ nx.gui.setActive( this.nodInfo, "cnt/mat", true ); // 刷新材料显示 let nod = _nod; let mats = _mat; if( mats ){ let chd = nod.children; let model = BackpackController.getInstance().getModel(); for (let i = 0; i < chd.length; i++) { let item = chd[i]; let mat = mats[i]; if( !mat || nx.dt.arrEmpty( mat ) ){ nx.gui.setActive( item, "", false ); continue; } nx.gui.setActive( item, "", true ); nx.bridge.setIconS( item, "icon", mat[0] ); let have = model.getItemNumByBid( mat[0] ); let str = mat[1]; let clr = ( have >= mat[1] ) ? cc.Color.WHITE : cc.Color.WHITE; nx.gui.setString( item, "txt", str ); nx.gui.setColor( item, "txt", clr ); } } }, freshSkill: function(){ let GS = GuildskillController.getInstance(); let model = GS.getModel(); this.skills = model.getCareerSkillInfo( this.career ); this.PVPSkills = model.getPvpskillInfoByCareer( this.career ); nx.dt.arrEmpty( this.PVPSkills.attr_formation) ? this.freshProps() : this.freshPvpAttr(); }, // 突破后顯示變化 取消pvp的鎖定狀態 freshUpGrade: function(){ let GS = GuildskillController.getInstance(); let model = GS.getModel(); this.PVPSkills = model.getPvpskillInfoByCareer( this.career ); nx.gui.setActive( this.nodInfo, "cnt/mat", false ); nx.gui.setActive( this.nodLock, "", false ); nx.gui.setActive( this.nodInfo, "cnt/ops/other/upgrade", false ); this.nodModel.togTo( 0 ); this.activeModel( GuildConst.guildAttrType.PVP ); }, onTouchLock: function(){ let afg = game.configs.guild_skill_data.data_const; let max = afg.max_lv.val; nx.tbox( nx.text.format( "GuildSkillPvpTip", max ) ); return; }, // 点击升级 onTouchUpLev: function(){ nx.dt.fnInvoke( this.cb ); }, // 突破 onTouchBreak: function(){ let GS = GuildskillController.getInstance(); if( GS ){ GS.send23706( this.career ); } }, // 重置 天赋属性 onTouchReset: function(){ let total_lev = 0; let GS = GuildskillController.getInstance(); let model = GS.getModel(); let is_first = model.isPvpFisrtReset(); let ress = []; let attr = this.PVPSkills.attr_formation[0]; let ak = attr.id + "_" + attr.lev; let sg = gdata( "guild_skill_data", "data_pvp_attr_info", ak ); for (let i = 0; i < sg.return_res.length; i++) { const it = nx.dt.objClone( sg.return_res[i] ); it[1] = 0; ress.push( it ); } this.PVPSkills.attr_formation.forEach( item => { if( item.lev > 0 ){ total_lev += item.lev; let key = item.id + "_" + item.lev; let sfg = gdata( "guild_skill_data", "data_pvp_attr_info", key ); let res = sfg.return_res; // console.log( item.id + "处理的属性数据" + JSON.stringify( sfg.return_res ) ); for (let i = 0; i < res.length; i++) { let item = res[i]; let ritem = ress[i]; if( item[0] == ritem[0] ){ ritem[1] += item[1]; // console.log(item[1] + "当前所有的属性数值相关累加sssss" + JSON.stringify( item[0] ) + "SSS" + ritem[1] ); } } } } ) // console.log( "当前所有的属性数值相关---->>>>" + JSON.stringify( ress ) ); let count = 0 if (is_first) { count = 300 let config = game.configs.guild_skill_data.data_const.pvp_first_reset_consume if (config) { count = config.val } }else{ let reset_consume_var1 = 500 let config = game.configs.guild_skill_data.data_const.reset_consume_var1 if (config) { reset_consume_var1 = config.val } let reset_consume_var2 = 15 let config2 = game.configs.guild_skill_data.data_const.reset_consume_var2 if (config2) { reset_consume_var2 = config.val } // --本系技能總等級 * 係數2 let cost_count = total_lev * reset_consume_var2 count = Math.max(reset_consume_var1, cost_count) } let key = this.career + "_" + this.PVPSkills.skill_lev; let sfg = gdata( "guild_skill_data", "data_pvp_skill_info", key ); let mfg = game.configs.guild_skill_data.data_const.first_reset_consume; for (let j = 0; j < sfg.return_res.length; j++) { let ss = sfg.return_res[j]; let ritem = ress[j]; if( ss[0] == ritem[0] ){ ritem[1] += ss[1]; } } let info = { first : is_first, tip: is_first ? nx.text.format( "tip_guildTalent_reset", mfg.val ) : nx.text.format( "tip_guildTalent_resetn", count ), res: ress, career: this.career, cb : ()=>{ let GS = GuildskillController.getInstance(); if( GS ){ GS.send23709( this.career ); } } } nx.bridge.createPanel( "WndGuildTalentReset", info ); }, // 點擊 pvp技能 彈出彈窗 onTouchSkillIcon: function(){ let info = { career : this.career, lev : this.PVPSkills, } nx.bridge.createPanel( "WndGuildTalentSkillUplev", info ); }, // 點擊 pvp天賦 onTouchPVPAttr: function( _index ){ let gsd = game.configs.guild_skill_data.data_const.pvp_max_lv; let max = gsd.val / 4; let attr_form = this.PVPSkills.attr_formation; let nod_s = nx.gui.find( this.nodInfo, "top" ); for (let i = 0; i < this.nodPvpAttr.length; i++) { nx.gui.setActive( this.nodPvpAttr[i], "focus", i == _index ); let dat = attr_form[i]; let key = dat.id + "_" + dat.lev; let cfg = gdata( "guild_skill_data", "data_pvp_attr_info", key ); let ressp = ""; let clr = ""; if( cfg ){ if( i == _index ){ this.select = _index; // clr = new cc.Color().fromHEX( "#030303" ); nx.bridge.attrs.setAttribute( this.nodPvpAttr[i], cfg.client_attr[0] ); if( dat.lev > 0 ){ clr = new cc.Color().fromHEX( "#030303" ); ressp = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/" + cfg.client_attr[0][0] ); }else{ clr = new cc.Color().fromHEX( "EAEDF2" ); ressp = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/w" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/w" + cfg.client_attr[0][0] ); } let ressps = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/" + cfg.client_attr[0][0] ); nx.bridge.attrs.setAttribute( nod_s, cfg.client_attr[0] ); nx.gui.setSpriteFrame( this.nodPvpAttr[i], "iconsp", ressp ); nx.gui.setSpriteFrame( nod_s, "iconsp", ressps ); nx.gui.setString( this.nodInfo, "top/name", cfg.desc + nx.text.format( "SLevel", cfg.lev ) ); nx.gui.setString( nod_s, "add/lev", nx.text.format( "LvNumber", cfg.lev ) ); nx.gui.setString( nod_s, "add/txt", cfg.lev + 1 ); nx.gui.setActive( this.nodInfo, "cnt/ops/other/uplevel", dat.lev != max ); this.freshMat( nx.gui.find( this.nodInfo, "cnt/mat" ), cfg.loss ); }else{ // clr = new cc.Color().fromHEX( "#EAEDF2" ); // let ressp = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/w" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/w" + cfg.client_attr[0][0] ); if( dat.lev > 0 ){ clr = new cc.Color().fromHEX( "#030303" ); ressp = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/" + cfg.client_attr[0][0] ); }else{ clr = new cc.Color().fromHEX( "EAEDF2" ); ressp = ( paths[dat.id] ) ? cc.path.join( "prefab/guild/icon/w" + paths[dat.id] ) : cc.path.join( "prefab/guild/icon/w" + cfg.client_attr[0][0] ); } nx.bridge.attrs.setAttribute( this.nodPvpAttr[i], [ cfg.client_attr[0][0], cfg.client_attr[0][1], i+1 ] ); nx.gui.setSpriteFrame( this.nodPvpAttr[i], "iconsp", ressp ); } nx.gui.setColor( this.nodPvpAttr[i], "level", clr ); } } this.cb = ()=>{ let GS = GuildskillController.getInstance(); GS.send23707( this.career, attr_form[_index].id ); } }, } );