"use strict"; cc._RF.push(module, 'dc1262X+ydDR6DUfHs8N8G5', 'elfin_model'); // Scripts/mod/partner/wings/elfin_model.js "use strict"; var BridgeClass = require("bridge.class"); var ElfinEvent = require("elfin_event"); var ElfinConst = require("elfin_const"); var ElfinHatchVo = require("elfin_hatch_vo"); var HeroConst = require("hero_const"); var BackPackConst = require("backpack_const"); var BackpackController = require("backpack_controller"); var RoleController = require("role_controller"); var ElfinModel = cc.Class({ "extends": BridgeClass, ctor: function ctor() {}, initConfig: function initConfig() { this.elfin_hatch_list = []; // 孵化器數據 this.elfin_buy_info = {}; // 今日購買精靈蛋和砸蛋道具的物品數量 this.activated_elfin_list = {}; // 已激活的精靈id(用於圖鑒) this.elfin_red_list = {}; // 紅點數據 this.elfin_tree_data = {}; // 精靈古樹數據 this.tree_attr_change_data = {}; // 精靈古樹四個屬性值的變化緩存 if (game.configs.sprite_data) { this.hatch_cfg = game.configs.sprite_data.data_hatch_data; } this.schemes = []; }, // 設置今日購買數量信息 setElfinBuyInfo: function setElfinBuyInfo(data) { this.elfin_buy_info = data || {}; }, // 更新某一個物品今日購買信息 updateElfinBuyInfoByBid: function updateElfinBuyInfoByBid(bid, count) { var is_have = false; for (var k in this.elfin_buy_info) { var v = this.elfin_buy_info[k]; if (v.item_bid == bid) { is_have = true; v.buy_num = count; break; } } if (!is_have) { var info = {}; info.item_bid = bid; info.buy_num = count; this.elfin_buy_info[this.elfin_buy_info.length + 1] = info; // table.insert(this.elfin_buy_info, info) } }, // 根據bid獲取該物品今日購買數量 getElfinBuyCountByBid: function getElfinBuyCountByBid(bid) { var buy_num = 0; for (var k in this.elfin_buy_info) { var v = this.elfin_buy_info[k]; if (v.item_bid == bid) { buy_num = v.buy_num; break; } } return buy_num; }, // 設置已經激活的精靈圖鑒 setActivatedElfinList: function setActivatedElfinList(data) { this.activated_elfin_list = data || {}; }, // 根據精靈id判斷是否已經激活 checkElfinIsActivatedByBid: function checkElfinIsActivatedByBid(bid) { var is_activated = false; for (var k in this.activated_elfin_list) { var v = this.activated_elfin_list[k]; if (v.item_bid == bid) { is_activated = true; break; } } return is_activated; }, // 設置靈窩數據 setElfinHatchList: function setElfinHatchList(data_list) { this.elfin_hatch_list = []; for (var k in data_list) { var data = data_list[k]; var elfin_hatch_vo = new ElfinHatchVo(); elfin_hatch_vo.updateData(data); if (this.hatch_cfg && this.hatch_cfg[data.id]) { elfin_hatch_vo.sort = this.hatch_cfg[data.id].sort; } this.elfin_hatch_list.push(elfin_hatch_vo); } // 檢測是否有孵化完成的靈窩 this.calculateElfinHatchDoneRedStatus(); this.calculateElfinHatchLvupRedStatus(); this.calculateElfinHatchEggRedStatus(); }, // 更新靈窩數據 updateElfinHatchData: function updateElfinHatchData(data_list) { for (var k in data_list) { var data = data_list[k]; var is_have = false; for (var _k in this.elfin_hatch_list) { var elfin_hatch_vo = this.elfin_hatch_list[_k]; if (elfin_hatch_vo.id == data.id) { elfin_hatch_vo.updateData(data); is_have = true; break; } } if (!is_have) { var _elfin_hatch_vo = new ElfinHatchVo(); _elfin_hatch_vo.updateData(data); if (this.hatch_cfg && this.hatch_cfg[data.id]) { _elfin_hatch_vo.sort = this.hatch_cfg[data.id].sort; } this.elfin_hatch_list.push(_elfin_hatch_vo); } } // 檢測是否有孵化完成的靈窩 this.calculateElfinHatchDoneRedStatus(); this.calculateElfinHatchLvupRedStatus(); this.calculateElfinHatchEggRedStatus(); }, // 更新某一個靈窩的數據 updateOneElfinHatchData: function updateOneElfinHatchData(data) { for (var k in this.elfin_hatch_list) { var elfin_hatch_vo = this.elfin_hatch_list[k]; if (elfin_hatch_vo.id == data.id) { elfin_hatch_vo.updateData(data); break; } } this.calculateElfinHatchDoneRedStatus(); this.calculateElfinHatchLvupRedStatus(); this.calculateElfinHatchEggRedStatus(); }, // 獲取所有靈窩數據 getElfinHatchList: function getElfinHatchList() { this.elfin_hatch_list.sort(Utils.tableLowerSorter(["id"])); return this.elfin_hatch_list; }, // 根據靈窩id獲取數據 getElfinHatchVoById: function getElfinHatchVoById(id) { for (var k in this.elfin_hatch_list) { var elfin_hatch_vo = this.elfin_hatch_list[k]; if (elfin_hatch_vo.id == id) { return elfin_hatch_vo; } } }, // 精靈系統是否開啟 checkElfinIsOpen: function checkElfinIsOpen(not_tips) { var is_open = false; var role_vo = RoleController.getInstance().getRoleVo(); if (game.configs.sprite_data) { var open_cfg = game.configs.sprite_data.data_const["sprite_unlocked_lv"]; if (open_cfg && role_vo && open_cfg.val <= role_vo.lev) { is_open = true; } if (!is_open && open_cfg && !not_tips) { nx.tbox(open_cfg.desc); } } return is_open; }, // 設置精靈古樹數據 setElfinTreeData: function setElfinTreeData(_data) { var data = _data.data; // 記錄一下{"atk", "hp_max", "def", "speed"}四個屬性值的變化 this.tree_attr_change_data = {}; // 记录当前的上阵僚机信息以及在方案中的僚机信息 // this.formOn = []; //console.log( "服务端data " + JSON.stringify( data ) ); /***** * {"lev":83,"break_lev":4,"atk":33350,"def_p":0,"def_s":0, * "hp_max":133374,"speed":535,"hit_rate":9999,"dodge_rate":0,"crit_rate":2000, * "crit_ratio":1200,"hit_magic":0,"dodge_magic":0,"def":1070, * "sprites":[{"pos":4,"item_bid":0},{"pos":3,"item_bid":0},{"pos":2,"item_bid":0},{"pos":1,"item_bid":113407}],"power":159817} */ var defaults = this.getDedefaultElfinInfo(); if (this.elfin_tree_data && Utils.next(this.elfin_tree_data) != null) { var key_list = ["atk", "hp_max", "def", "speed"]; for (var i in key_list) { var attr_key = key_list[i]; var old_val = this.elfin_tree_data[attr_key]; var new_val = data[attr_key]; if (new_val > old_val) { this.tree_attr_change_data[attr_key] = new_val - old_val; } } // // 階級變化,彈出喚醒成功界面 // if (this.elfin_tree_data.break_lev < data.break_lev) { // ElfinController.getInstance().openElfinTreeRouseWindow(true, this.elfin_tree_data, data) // } } this.elfin_tree_data = data || {}; //記錄一下4咯位置對應 this.dic_elfin_item_pos = {}; var sprites = data.sprites || {}; for (var _i in data.sprites) { var v = data.sprites[_i]; this.dic_elfin_item_pos[v.pos] = v.item_bid; if (nx.dt.arrMember(this.schemes, v)) { this.schemes.splice(_i, 1); this.schemes.push(v); } // if( v.item_bid > 0 ){ // this.formOn.push( v.item_bid ); // } // "sprites":[{"pos":4,"item_bid":113408},{"pos":3,"item_bid":113407},{"pos":2,"item_bid":113406},{"pos":1,"item_bid":113405}] } // 記錄一下當前古樹升級、進階消耗的材料,用於監聽材料數量變化顯示紅點 this.tree_cost_list = {}; this.tree_step_lev = 0; var level_cfg = game.configs.sprite_data.data_tree_up_lv[data.lev]; var step_cfg = game.configs.sprite_data.data_tree_step[data.break_lev]; if (level_cfg && step_cfg) { if (data.lev >= step_cfg.lev_max) { // 進階 this.tree_cost_list = step_cfg.expend; var temp_list = step_cfg.step_cond; for (var k in temp_list) { var _v = temp_list[k]; if (_v[1] == "role_lev") { this.tree_step_lev = _v[2]; } } } else { // 升級 this.tree_cost_list = level_cfg.expend; } } // this.calculateTreeUplvRedStatus() // 是否有可放置的精靈 this.calculateTreePutElfinRedStatus(); // 上陣的精靈是否可以合成 this.calculateElfinCompoundRedStatus(); // 上陣精靈中是否有同類型更高級的精靈 this.calculateElfinHigherRedStatus(); }, getElfinTreeData: function getElfinTreeData() { return this.elfin_tree_data; }, // 獲取古樹的四個精靈bid(只有已經解鎖的精靈,解鎖未放置時bid為0) getElfinTreeElfinList: function getElfinTreeElfinList() { if (!this.elfin_tree_data) { return {}; } return this.elfin_tree_data.sprites || {}; }, //根據位置獲取精靈bid 如果 bid ==null 說明未解鎖 getElfinItemByPos: function getElfinItemByPos(pos) { if (this.dic_elfin_item_pos) { return this.dic_elfin_item_pos[pos]; } return null; }, freshDefaultScheme: function freshDefaultScheme(_scheme) { var scheme = this.getDedefaultElfinInfo(); if (scheme && !nx.dt.arrEmpty(scheme)) { scheme.sort(Utils.tableLowerSorter(["pos"])); } if (_scheme.team_list.length > 0) { var plan_id = _scheme.team_list[0].plan_id; if (plan_id == 0) { var plan = _scheme.team_list[0].sprites; plan.sort(Utils.tableLowerSorter(["pos"])); var sprites = this.elfin_tree_data.sprites; if (sprites && !nx.dt.arrEmpty(sprites)) { sprites.sort(Utils.tableLowerSorter(["pos"])); for (var i = 0; i < plan.length; i++) { var item = plan[i]; var sch = scheme[i]; var sprite = sprites[i]; if (item.pos == sprite.pos) { sprite.item_bid = item.item_bid; } } } } } }, //獲取一個缺省空的精靈數據 默认方案配置 getDedefaultElfinInfo: function getDedefaultElfinInfo() { this.defaultsprites = []; if (this.elfin_tree_data) { var sprites = []; var eflin_data = this.elfin_tree_data.sprites || {}; for (var i in eflin_data) { var data = {}; data.pos = eflin_data[i].pos; data.item_bid = eflin_data[i].item_bid || 0; // table.insert(sprites, data) sprites.push(data); } sprites.sort(Utils.tableLowerSorter(["pos"])); return sprites; } return []; }, getElfinTreeByBid: function getElfinTreeByBid(bid) { if (this.dic_elfin_item_pos && bid && bid != 0) { for (var pos in this.dic_elfin_item_pos) { if (this.dic_elfin_item_pos[pos] == bid) { return pos; } } } return null; }, getElfinTreeAttrChangeData: function getElfinTreeAttrChangeData() { return this.tree_attr_change_data; }, // 根據屬性名稱、突破等級計算出下一級的屬性值 getElfinTreeNextAttrVal: function getElfinTreeNextAttrVal(attr_key, lev, break_lev) { var attr_val = 0; var attr_base_cfg = game.configs.sprite_data.data_tree_attr[0]; var step_cfg = game.configs.sprite_data.data_tree_step[break_lev]; if (!attr_base_cfg || !step_cfg) { return attr_val; } var add_attr_key = "add_" + attr_key; // 成長屬性值 if (attr_key == "hp_max") { add_attr_key = "add_hp"; } var getStepAttrVal = function getStepAttrVal(key) { var val = 0; for (var k in step_cfg.all_attr) { var v = step_cfg.all_attr[k]; if (v[0] == key) { val = v[1] || 0; } } return val; }; var base_val = attr_base_cfg[attr_key] || 0; var step_val = getStepAttrVal(attr_key); var base_groud_val = attr_base_cfg[add_attr_key] || 0; var step_groud_val = step_cfg[add_attr_key] || 0; attr_val = base_val + step_val + lev * base_groud_val * step_groud_val / 1000000; return Math.round(attr_val); }, ////////////////////////////////////-@ 紅點相關 updateElfinRedStatus: function updateElfinRedStatus(bidV, statusV) { if (!this.checkElfinIsOpen(true)) { return; } this.elfin_red_list[bidV] = statusV; nx.mTip.openTip("partner.wing.assemble", this.elfin_red_list[HeroConst.RedPointType.eElfin_empty_pos]); nx.mTip.openTip("partner.wing.scientific", this.elfin_red_list[HeroConst.RedPointType.eElfin_hatch_egg] || this.elfin_red_list[HeroConst.RedPointType.eElfin_hatch_done] || this.elfin_red_list[HeroConst.RedPointType.eElfin_hatch_open]); gcore.GlobalEvent.fire(ElfinEvent.Update_Elfin_Red_Event, bidV, statusV); }, // 計算靈窩孵化完成的紅點 calculateElfinHatchDoneRedStatus: function calculateElfinHatchDoneRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var hatch_done_red = false; for (var k in this.elfin_hatch_list) { var hatch_vo = this.elfin_hatch_list[k]; if (hatch_vo.state == ElfinConst.Hatch_Status.Over) { hatch_done_red = true; break; } } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_hatch_done, hatch_done_red); }, // 計算靈窩升級的紅點 calculateElfinHatchLvupRedStatus: function calculateElfinHatchLvupRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; // let hatch_vo = this.elfin_hatch_list[1] // if ((! this.not_calculate_hatch_flag && hatch_vo && game.configs.sprite_data.data_hatch_lev[hatch_vo.lev+1]){ // let Utils.next_hatch_lev_cfg = game.configs.sprite_data.data_hatch_lev[hatch_vo.lev+1] // let role_vo = RoleController.getInstance().getRoleVo() // if (role_vo.vip_lev >= Utils.next_hatch_lev_cfg.limit_vip){ // red_status = true // for (let i,v in iUtils.next_hatch_lev_cfg.expend) { // let bid = v[1] // let need_num = v[2] // let have_num = BackpackController.getInstance().getModel().getItemNumByBid(bid) // if (have_num < need_num){ // red_status = false // break // } // } // } // } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_hatch_lvup, red_status); }, // 設置不再顯示靈窩升級的紅點標識 setNotCalculateHatchLvupRedFlag: function setNotCalculateHatchLvupRedFlag() { if (this.getElfinRedStatusByRedBid(HeroConst.RedPointType.eElfin_hatch_lvup)) { this.not_calculate_hatch_flag = true; } }, // 設置打開過精靈孵化界面 setOpenElfinHatchFlag: function setOpenElfinHatchFlag(flag) { this.open_hatch_flag = flag; }, // 計算是否有可孵化的靈窩和蛋 calculateElfinHatchEggRedStatus: function calculateElfinHatchEggRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; var have_empty_hatch = false; for (var k in this.elfin_hatch_list) { var hatch_vo = this.elfin_hatch_list[k]; if (hatch_vo.is_open == 1 && hatch_vo.state == ElfinConst.Hatch_Status.Open) { have_empty_hatch = true; break; } } if (have_empty_hatch) { var all_egg_list = BackpackController.getInstance().getModel().getBackPackItemListByType(BackPackConst.item_type.ELFIN_EGG); if (all_egg_list.length > 0) { red_status = true; } } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_hatch_egg, red_status); }, // 計算是否有可解鎖的靈窩 calculateElfinHatchOpenRedStatus: function calculateElfinHatchOpenRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; for (var k in this.elfin_hatch_list) { var hatch_vo = this.elfin_hatch_list[k]; if (hatch_vo.is_open == 2 && hatch_vo.state == ElfinConst.Hatch_Status.Open) { red_status = true; break; } } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_hatch_open, red_status); }, // 計算古樹紅點升級、進階紅點 calculateTreeUplvRedStatus: function calculateTreeUplvRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; if (this.tree_cost_list && Utils.next(this.tree_cost_list) != null) { red_status = true; for (var k in this.tree_cost_list) { var v = this.tree_cost_list[k]; var bid = v[1]; var need_num = v[2]; var have_num = BackpackController.getInstance().getModel().getItemNumByBid(bid); if (have_num < need_num) { red_status = false; break; } } if (red_status == true && this.tree_step_lev && this.tree_step_lev > 0) { var role_vo = RoleController.getInstance().getRoleVo(); if (role_vo && this.tree_step_lev > role_vo.lev) { red_status = false; } } } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_tree_lvup, red_status); }, // 獲取古樹當前升級或進階消耗的物品bid getElfinTreeCostBidList: function getElfinTreeCostBidList() { var cost_bid_list = {}; if (this.tree_cost_list && Utils.next(this.tree_cost_list) != null) { for (var k in this.tree_cost_list) { // table.insert(cost_bid_list, v[1]) cost_bid_list[k] = this.tree_cost_list[k][1]; } } return cost_bid_list; }, // 計算古樹當前是否有可放置精靈的位置的紅點 calculateTreePutElfinRedStatus: function calculateTreePutElfinRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; if (this.elfin_tree_data.sprites && Utils.next(this.elfin_tree_data.sprites) != null) { var is_have_pos = false; var have_type_list = {}; // 所有已經放置的精靈的類型 for (var k in this.elfin_tree_data.sprites) { var v = this.elfin_tree_data.sprites[k]; if (v.item_bid == 0) { is_have_pos = true; } else { var elfin_cfg = client.getDataKeyVal("sprite_data", "data_elfin_data", v.item_bid); //game.configs.sprite_data.data_elfin_data[v.item_bid] if (elfin_cfg && elfin_cfg.sprite_type) { // table.insert(have_type_list, elfin_cfg.sprite_type) have_type_list[k] = elfin_cfg.sprite_type; } } } if (is_have_pos == true) { // 有位置未放置精靈,還要判斷背包中是否有可放置的精靈 var all_elfin_data = BackpackController.getInstance().getModel().getAllBackPackArray(BackPackConst.item_sub_type.ELFIN) || {}; for (var _k2 in all_elfin_data) { var _v2 = all_elfin_data[_k2]; var _elfin_cfg = client.getDataKeyVal("sprite_data", "data_elfin_data", _v2.base_id); //game.configs.sprite_data.data_elfin_data[v.base_id] if (_elfin_cfg) { var is_same = false; for (var i in have_type_list) { var e_type = have_type_list[i]; if (_elfin_cfg.sprite_type == e_type) { is_same = true; break; } } // 有非同類型可放置的精靈 if (!is_same) { red_status = true; break; } } } } } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_empty_pos, red_status); }, // 計算上陣的精靈是否可合成 calculateElfinCompoundRedStatus: function calculateElfinCompoundRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; this.elfin_com_cost_list = {}; // 記錄一下上陣中的精靈合成所需材料 if (this.elfin_tree_data.sprites && Utils.next(this.elfin_tree_data.sprites) != null) { for (var k in this.elfin_tree_data.sprites) { var v = this.elfin_tree_data.sprites[k]; var elfin_com_cfg = game.configs.sprite_data.data_elfin_com[v.item_bid]; if (v.item_bid != 0 && elfin_com_cfg && elfin_com_cfg.expend && Utils.next(elfin_com_cfg.expend) != null) { var temp_status = true; for (var i in elfin_com_cfg.expend) { var info = elfin_com_cfg.expend[i]; // table.insert(this.elfin_com_cost_list, info) this.elfin_com_cost_list[i] = info; if (red_status == false) { var need_num = info[2]; var have_num = BackpackController.getInstance().getModel().getItemNumByBid(info[1]); if (have_num < need_num) { temp_status = false; } } } if (temp_status == true) { red_status = true; } } } } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_compound, red_status); }, // 獲取上陣的精靈合成消耗的物品bid getElfinCompoundCostBidList: function getElfinCompoundCostBidList() { var cost_bid_list = {}; if (this.elfin_com_cost_list && Utils.next(this.elfin_com_cost_list) != null) { for (var k in this.elfin_com_cost_list) { // table.insert(cost_bid_list, this.elfin_com_cost_list[k][1]) cost_bid_list[k] = this.elfin_com_cost_list[k][1]; } } return cost_bid_list; }, // 計算上陣精靈中是否有同類型更高級的精靈 calculateElfinHigherRedStatus: function calculateElfinHigherRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; if (this.elfin_tree_data.sprites && Utils.next(this.elfin_tree_data.sprites) != null) { var have_type_list = {}; // 所有已經放置的精靈的類型和階數 for (var k in this.elfin_tree_data.sprites) { var v = this.elfin_tree_data.sprites[k]; var elfin_cfg = client.getDataKeyVal("sprite_data", "data_elfin_data", v.item_bid); //game.configs.sprite_data.data_elfin_data[v.item_bid] if (v.item_bid != 0 && elfin_cfg) { var object = {}; object.step = elfin_cfg.step; object.s_type = elfin_cfg.sprite_type; // table.insert(have_type_list, object) have_type_list[k] = object; } } var all_elfin_data = BackpackController.getInstance().getModel().getAllBackPackArray(BackPackConst.item_sub_type.ELFIN) || {}; for (var _k3 in all_elfin_data) { var _v3 = all_elfin_data[_k3]; var _elfin_cfg2 = client.getDataKeyVal("sprite_data", "data_elfin_data", _v3.base_id); //game.configs.sprite_data.data_elfin_data[v.base_id] if (_elfin_cfg2) { for (var _k4 in have_type_list) { var _object = have_type_list[_k4]; if (_elfin_cfg2.sprite_type == _object.s_type && _elfin_cfg2.step > _object.step) { red_status = true; break; } } } if (red_status == true) { break; } } } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_higher_lv, red_status); }, // 計算圖鑒紅點 calculateElfinActivateRedStatus: function calculateElfinActivateRedStatus(activate_list) { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; // this.elfin_activate_red_data = this.elfin_activate_red_data || {} // for (let _,v in activate_list || {}) { // let elfin_cfg = game.configs.sprite_data.data_elfin_data(v.item_bid) // if (elfin_cfg){ // this.elfin_activate_red_data[elfin_cfg.step] = this.elfin_activate_red_data[elfin_cfg.step] || {} // table.insert(this.elfin_activate_red_data[elfin_cfg.step], v.item_bid) // } // } // for (let k,list in this.elfin_activate_red_data) { // if (#list > 0){ // red_status = true // break // } // } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_activate, red_status); }, checkActivateTabBtnRedStatus: function checkActivateTabBtnRedStatus(index) { if (this.elfin_activate_red_data && this.elfin_activate_red_data[index] && Utils.next(this.elfin_activate_red_data[index]) != null) { return true; } return false; }, clearActivateDataByIndex: function clearActivateDataByIndex(index) { if (this.elfin_activate_red_data) { this.elfin_activate_red_data[index] = {}; } this.calculateElfinActivateRedStatus(); }, clearActivateRedData: function clearActivateRedData() { this.elfin_activate_red_data = {}; this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_activate, false); }, clearActivateDataByBid: function clearActivateDataByBid(bid) { if (this.elfin_activate_red_data) { for (var i in this.elfin_activate_red_data) { var list = this.elfin_activate_red_data[i]; var is_have = false; for (var k in list) { var v = list[k]; if (v == bid) { list[k] = null; // table.remove(list, k) is_have = true; break; } } if (is_have) { break; } } } }, // 是否是新激活的精靈 checkIsNewActivateByBid: function checkIsNewActivateByBid(bid) { var is_new = false; for (var k in this.elfin_activate_red_data || {}) { var list = this.elfin_activate_red_data[k]; for (var i in list) { if (list[i] == bid) { is_new = true; break; } } if (is_new) { break; } } return is_new; }, getElfinRedStatus: function getElfinRedStatus() { var red_status = false; for (var bid in this.elfin_red_list) { if (this.elfin_red_list[bid] == true) { red_status = true; break; } } return red_status; }, // 獲取精靈紅點狀態 getElfinRedStatusByRedBid: function getElfinRedStatusByRedBid(bid) { return this.elfin_red_list[bid] || false; }, // 計算是否有免費召喚和未許願 calculateElfinSummonRedStatus: function calculateElfinSummonRedStatus() { if (!this.checkElfinIsOpen(true)) { return; } var red_status = false; var data = this.getElfinSummonData(); if (data) { var cur_time = client.socket.getTime(); if (data.free_time && data.free_time <= cur_time) { red_status = true; } if (red_status == false && data.lucky_ids && data.lucky_ids.length <= 0) { red_status = true; } if (red_status == false) { var award_config = game.configs.holiday_sprite_lottery_data.data_award[data.camp_id]; if (award_config) { for (var i in award_config) { var _un_enabled = false; for (var k in data.do_awards) { if (award_config[i].id == data.do_awards[k].award_id) { _un_enabled = true; break; } } if (_un_enabled == false && award_config[i].times <= data.times) { red_status = true; break; } } } } } this.updateElfinRedStatus(HeroConst.RedPointType.eElfin_summon, red_status); }, // 設置精靈召喚數據 setElfinSummonData: function setElfinSummonData(data) { this.elfin_summon_data = data; }, // 獲取精靈召喚數據 getElfinSummonData: function getElfinSummonData() { return this.elfin_summon_data; }, //精靈方案數據 setPlanData: function setPlanData(data) { if (!data) { return; } if (this.elfin_plan_data == null) { this.elfin_plan_data = {}; } /******** * [26559]:{"id":4,"name":"Scheme4","plan_sprites":[]} * [26556]:{"plan_list": * [{"id":7,"name":"Scheme7","plan_sprites":[]}, * {"id":6,"name":"Scheme6","plan_sprites":[]}, * {"id":5,"name":"Scheme5","plan_sprites":[]}, * {"id":4,"name":"Scheme4","plan_sprites":[]}, * {"id":1,"name":"4444","plan_sprites":[{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}, * {"id":2,"name":"grgrg","plan_sprites":[{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}, * {"id":3,"name":"Scheme3","plan_sprites":[{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}]} * [26556]:{"plan_list":[{"id":7,"name":"Scheme7","plan_sprites":[]}, * {"id":6,"name":"Scheme6","plan_sprites":[]}, * {"id":5,"name":"Scheme5","plan_sprites":[]}, * {"id":4,"name":"Scheme4","plan_sprites":[]}, * {"id":1,"name":"5555","plan_sprites":[{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}, * {"id":2,"name":"grgrg","plan_sprites":[{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}, * {"id":3,"name":"Scheme3","plan_sprites":[{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}]} * */ var defaultScheme = this.getDedefaultElfinInfo(); var sprites = []; for (var i = 0; i < defaultScheme.length; i++) { sprites.push(nx.dt.objClone(defaultScheme[i])); } // gcore.dt.deepClone( defaultScheme ); // "plan_sprites":[{"pos":1,"item_bid":113008},{"pos":2,"item_bid":113007}]} sprites.forEach(function (_sprite) { if (_sprite.item_bid > 0) { _sprite.item_bid = 0; } }); var plan_list = data.plan_list; if (plan_list) { if (data.plan_list.length == 1) { var sdata = plan_list[0]; var ids = []; this.schemes.forEach(function (_sche) { ids.push(_sche.id); }); if (nx.dt.arrMember(ids, sdata.id)) { for (var _i2 = 0; _i2 < this.schemes.length; _i2++) { var sche = this.schemes[_i2]; if (sche.id == sdata.id) { if (nx.dt.arrEmpty(sdata.plan_sprites)) { sdata.plan_sprites = sprites; } this.schemes.splice(_i2, 1); this.schemes.push(sdata); } } } else { this.schemes.push(sdata); } } else { this.schemes = []; for (var _i3 in data.plan_list) { var v = data.plan_list[_i3]; if (nx.dt.arrEmpty(v.plan_sprites)) { v.plan_sprites = sprites; } this.schemes.push(v); // if( !nx.dt.arrEmpty( v.plan_sprites ) ){ // for (let j = 0; j < v.plan_sprites.length; j++) { // let sitem = v.plan_sprites[j]; // if( sitem.item_bid > 0 ){ // this.formOn.push( sitem.item_bid ); // } // } // } if (this.elfin_plan_data[v.id] == null) { this.elfin_plan_data[v.id] = v; } else { for (var key in v) { this.elfin_plan_data[v.id][key] = v[key]; } } } } } this.schemes.sort(Utils.tableLowerSorter(["id"])); }, getPlanCount: function getPlanCount() { if (this.elfin_plan_data == null) { return 0; } var count = 0; for (var k in this.elfin_plan_data) { count = count + 1; } return count; }, // 获取所有的方案信息 getAllPlanData: function getAllPlanData() { var schemes = []; for (var i = 0; i < this.schemes.length; i++) { schemes.push(nx.dt.objClone(this.schemes[i])); } var plan_count = game.configs.sprite_data.data_elfin_plan_length; var schemeAdd = {}; schemeAdd.id = 9; schemeAdd.name = "新增"; schemeAdd.plan_sprites = [{ "pos": 5, "item_bid": 0 }]; if (schemes.length >= 3 && schemes.length < plan_count) { schemes.push(schemeAdd); schemes.sort(Utils.tableLowerSorter(["id"])); } return schemes; }, getPlanData: function getPlanData() { // let data = {} // for (let i=1,3 { // let d = {} // d.id = i // d.name = "測試"+i // d.plan_sprites = this.elfin_tree_data.sprites // table.insert(data, d) // } // return data return this.elfin_plan_data; }, // 存储当前的选择方案 方案id pos saveNowSelect: function saveNowSelect(_args) { this.choice = _args; }, // 存储当前的选择方案 方案id pos getNowSelect: function getNowSelect(_args) { return this.choice; }, // 处理当前选择的方案相关的配置,用于在对应的选择点上显示对应的僚机信息 setNowSelectScheme: function setNowSelectScheme(_args) { // let scheme = {}; // let defaultScheme = this.getDedefaultElfinInfo(); // scheme = gcore.dt.deepClone( defaultScheme ); }, getFormOn: function getFormOn() { return this.formOn; } }); // [26559]:{"id":5,"name":"Scheme5","plan_sprites":[]} /**[{"id":1,"name":"464646","plan_sprites":[{"pos":4,"item_bid":0},{"pos":3,"item_bid":0},{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}, * {"id":2,"name":"测试换名23","plan_sprites":[{"pos":4,"item_bid":0},{"pos":3,"item_bid":0},{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}, * {"id":3,"name":"3333","plan_sprites":[{"pos":4,"item_bid":0},{"pos":3,"item_bid":0},{"pos":2,"item_bid":0},{"pos":1,"item_bid":0}]}, * {"id":4,"name":"Scheme4","plan_sprites":[]}, * {"id":5,"name":"Scheme5","plan_sprites":[]}]**/ cc._RF.pop();