// --------------------------------------------------------------------
// @author: shiraho@syg.com(必填, 创建模块的人员)
// @description:
// 用户输入框
//
Create: new Date().toISOString()
// --------------------------------------------------------------------
var PathTool = require("pathtool");
var MallController = require("mall_controller");
var RoleController = require("role_controller");
var CommonScrollView = require("common_scrollview");
var MallEvent = require("mall_event");
var MallConst = require("mall_const");
var MallItem = require("mall_item");
var TimeTool = require("timetool")
var BackpackController = require("backpack_controller")
var BackpackEvent = require("backpack_event")
var BackPackConst = require("backpack_const")
var CommonAlert = require("commonalert")
var MailWindow = cc.Class({
extends: CommonWindowTab,
ctor: function () {
this.model = MallController.getInstance().getModel()
this.ctrl = MallController.getInstance();
this.win_type = WinType.Full;
this.viewTag = SCENE_TAG.ui; //该窗体所属ui层级,全屏ui需要在ui层,非全屏ui在dialogue层,这个要注意
this.tab_info_list = [
{ label: gdata("exchange_data", "data_shop_list", 1).name, index: 1, status: true, notice: cc.js.formatStr("%s级开启", gdata("exchange_data", "data_shop_exchage_cost", "open_gold_lev").val), is_first: true },
{ label: gdata("exchange_data", "data_shop_list", 2).name, index: 2, status: true, notice: cc.js.formatStr("%s级开启", gdata("exchange_data", "data_shop_exchage_cost", "open_hero_soul_lev").val), is_first: true },
{ label: gdata("exchange_data", "data_shop_list", 3).name, index: 3, status: true, notice: cc.js.formatStr("%s级开启", gdata("exchange_data", "data_shop_exchage_cost", "open_point_lev").val), is_first: true },
{ label: gdata("exchange_data", "data_shop_list", MallConst.MallType.SkillShop).name ,index: 4, status: true, notice: cc.js.formatStr("%s级开启", gdata("exchange_data", "data_shop_exchage_cost", "open_skill_lev").val), is_first: true }
];
this.title_str = "商城";
this.tab_list = this.tab_info_list;
this.cur_tab = null;
this.cur_index = null;
this.first_index = null;
this.data_list = {};
this.role_vo = RoleController.getInstance().getRoleVo();
},
initPanel: function () {
if (this.mall_root_wnd == null) {
this.loadRes(PathTool.getPrefabPath("mall", "mall_window_2"), function (res_obj) {
var obj = res_obj;
this.createMallRootWnd(obj);
}.bind(this));
}
},
createMallRootWnd: function (view) {
this.mall_root_wnd = view;
this.mall_root_wnd.setParent(this.container);
this.mall_container = this.mall_root_wnd.getChildByName("container");
this.mall_scroll_con = this.mall_container.getChildByName("scrollCon");
this.btn = this.mall_container.getChildByName("btn");
this.btn.active = false;
this.btn_label = this.seekChild(this.btn, "Label", cc.Label);
this.btn_img = this.seekChild(this.btn, "img", cc.Sprite);
this.coin = this.mall_container.getChildByName("coin").getComponent(cc.Sprite);
this.count = this.mall_container.getChildByName("count").getComponent(cc.Label);
this.add_btn = this.mall_container.getChildByName("add_btn");
this.time_rt = this.mall_container.getChildByName("time").getComponent(cc.RichText)
this.time_down_text_rt = this.mall_container.getChildByName("time_down_text").getComponent(cc.RichText)
this.add_btn.active = false;
this.refresh_count = this.mall_container.getChildByName("refresh_count").getComponent(cc.Label);
this.tips_btn = this.mall_container.getChildByName("tips_btn");
this.tips_btn.active = false;
this.good_cons = this.mall_container.getChildByName("good_cons");
var scroll_view_size = cc.size(622, 705)
var setting = {
item_class: MallItem, // 单元类
start_x: 4, // 第一个单元的X起点
space_x: 0, // x方向的间隔
start_y: 3, // 第一个单元的Y起点
space_y: 2, // y方向的间隔
item_width: 306, // 单元的尺寸width
item_height: 143, // 单元的尺寸height
row: 0, // 行数,作用于水平滚动类型
col: 2, // 列数,作用于垂直滚动类型
need_dynamic: true
}
this.item_scrollview = new CommonScrollView()
this.item_scrollview.createScroll(this.mall_scroll_con, cc.v2(0, 0), ScrollViewDir.vertical, ScrollViewStartPos.top, scroll_view_size, setting, cc.v2(0.5, 0.5))
this.selectedTabCallBack(this.first_index);
this.registerEvent_1()
},
registerEvent_1: function () {
if (this.add_btn) {
this.add_btn.on(cc.Node.EventType.TOUCH_END, function () {
var item_bid = gdata("exchange_data", "data_shop_list", [this.cur_index]).item_bid;
var data = Utils.getItemConfig(item_bid);
require("backpack_controller").getInstance().openTipsSource(true,data)
}, this)
}
if (this.btn) {
this.btn.on(cc.Node.EventType.TOUCH_END, function () {
if (this.cur_index == 4 || this.cur_index == 2) {
let type = this.cur_index
let fun = function(){
this.ctrl.sender13405(type)
}.bind(this)
if(this.cur_index == 4){
type = MallConst.MallType.SkillShop
fun()
}else{
let asset_cfg = Config.exchange_data.data_shop_exchage_cost["soul_reset_cost"]
let bid,num
if(asset_cfg){
bid = asset_cfg.val[0][0]
num = asset_cfg.val[0][1]
}
let good_res_path = Utils.getItemConfig(bid).icon
let frame_arrays = [];
let good_path = PathTool.getIconPath("item", good_res_path);
frame_arrays.push(good_path);
let text = StringUtil.parseStr("是否消耗
%s
进行重置?").string
let str = cc.js.formatStr(text,good_res_path, num)
CommonAlert.show(str, Utils.TI18N("确定"), fun.bind(this), Utils.TI18N("取消"), null,null,null,{resArr: frame_arrays})
}
}
}, this)
}
//获取商品已购买次数(限于购买过的有限购的商品)
this.addGlobalEvent(MallEvent.Open_View_Event, function (data) {
if (this.cur_index != 4 && this.cur_index != 2) {
this.cur_tab.is_first = false;
var list = this.getConfig(this.cur_index, data);
this.data_list[this.cur_index] = Utils.deepCopy(list);
this.item_scrollview.setData(list, function (cell) {
this.ctrl.openMallBuyWindow(true, cell);
})
}
}.bind(this))
//获取神秘商店物品列表
this.addGlobalEvent(MallEvent.Get_Buy_list, function (data) {
if (this.cur_index == 4 || this.cur_index == 2) {
this.cur_tab.is_first = false;
var btn_str = Utils.TI18N("免费刷新");
if (this.cur_index == 2) { //神格
if (data.free_count <= 0) {
var asset_cfg = gdata("exchange_data", "data_shop_exchage_cost", "soul_reset_cost");
if (asset_cfg) {
var bid = asset_cfg.val[0][0];
var num = asset_cfg.val[0][1];
btn_str = cc.js.formatStr(Utils.TI18N("%s重置"), num)
this.loadRes(PathTool.getItemRes(Utils.getItemConfig(bid).icon), function (res_object) {
this.btn_img.spriteFrame = res_object;
}.bind(this))
}
}
}
this.btn_label.string = btn_str;
this.setResetCount(data)
for (var k in data.item_list) {
var v = data.item_list[k];
if(this.cur_index == 4){
v.shop_type = MallConst.MallType.SkillShop;
}else{
v.shop_type = this.cur_index;
}
}
this.data_list[this.cur_index] = Utils.deepCopy(data)
if(this.cur_index == 4){
this.setLessTime(this.data_list[this.cur_index].refresh_time - gcore.SmartSocket.getTime());
}
this.item_scrollview.setData(this.data_list[this.cur_index].item_list, function (cell) {
this.ctrl.openMallBuyWindow(true, cell);
}.bind(this))
}
}.bind(this))
if (this.role_vo) {
if (this.role_update_lev_event == null) {
this.role_update_lev_event = this.role_vo.bind(EventId.UPDATE_ROLE_ATTRIBUTE, function (key, value) {
if (this.cur_index == null || this.cur_index == MallConst.MallType.ScoreShop)
return
if (key == "lev") {
for (var k in this.tab_list) {
this.setTabBtnTouchStatus(this.checkBtnIsOpen(k), k);
}
} else if (key == "gold" || key == "arena_cent" || key == "guild" || key == "hero_soul" || key == "friend_point" || key == "red_gold") {
var config = gdata("exchange_data", "data_shop_list", [this.cur_index]);
if (config) {
var item_bid = config.item_bid;
if (item_bid == 15) { //钻石
this.count.string = Utils.getMoneyString(this.role_vo.gold);
} else {
if (gdata("item_data", "data_assets_id2label", [item_bid]) == key)
this.count.string = Utils.getMoneyString(this.role_vo[gdata("item_data", "data_assets_id2label", [item_bid])]);
}
}
// var item_res_path = PathTool.getItemRes(Utils.getItemConfig(item_bid).icon);
// if (item_res_path) {
// this.loadRes(item_res_path, function (res_object) {
// this.coin.spriteFrame = res_object;
// }.bind(this))
// }
}
}, this)
}
}
//到时候刷新了
this.addGlobalEvent(MallEvent.Frash_tips_event, function () {
if (this.cur_index == 4 || this.cur_index == 2) {
let _type = this.cur_index
if(this.cur_index == 4){
_type = MallConst.MallType.SkillShop
}
this.ctrl.sender13403(_type);
}
}.bind(this))
//除神秘神格商城以外的购买成功
this.addGlobalEvent(MallEvent.Buy_Success_Event, function (data) {
if (this.cur_index == null || this.data_list == null || this.data_list[this.cur_index] == null)
return
if (this.cur_index != 2 || this.cur_index != 4) {
for (var k in this.data_list[this.cur_index]) {
var v = this.data_list[this.cur_index][k];
if (v.id == data.eid && Utils.next(data.ext || {}) != null) {
v.has_buy = data.ext[0].val;
}
}
}
}.bind(this))
//神秘/神格商城购买成功
this.addGlobalEvent(MallEvent.Buy_One_Success, function (data) {
if (this.cur_index == null || this.data_list == null || this.data_list[this.cur_index] == null)
return
let _shop_type = this.cur_index
if(this.cur_index == 4){
_shop_type = MallConst.MallType.SkillShop
}
for (var k in this.data_list[this.cur_index].item_list) {
var v = this.data_list[this.cur_index].item_list[k];
if (v.shop_type == _shop_type && v.order && data.order == v.order)
v.has_buy = 1;
}
}.bind(this))
this.addGlobalEvent(BackpackEvent.DELETE_GOODS,function(bag_code,temp_list){
if(bag_code != BackPackConst.Bag_Code.EQUIPS){
let item_bid = Config.exchange_data.data_shop_list[MallConst.MallType.SkillShop].item_bid
for(let i in temp_list){
let item = temp_list[i]
if(item.base_id == item_bid){
this.updateIconInfo(item_bid)
break
}
}
}
}.bind(this))
this.addGlobalEvent(BackpackEvent.MODIFY_GOODS_NUM,function(bag_code,temp_list){
if(bag_code != BackPackConst.Bag_Code.EQUIPS){
let item_bid = Config.exchange_data.data_shop_list[MallConst.MallType.SkillShop].item_bid
for(let i in temp_list){
let item = temp_list[i]
if(item.base_id == item_bid){
this.updateIconInfo(item_bid)
break
}
}
}
}.bind(this))
this.addGlobalEvent(BackpackEvent.ADD_GOODS,function(bag_code,temp_list){
if(bag_code != BackPackConst.Bag_Code.EQUIPS){
let item_bid = Config.exchange_data.data_shop_list[MallConst.MallType.SkillShop].item_bid
for(let i in temp_list){
let item = temp_list[i]
if(item.base_id == item_bid){
this.updateIconInfo(item_bid)
break
}
}
}
}.bind(this))
this.tips_btn.on(cc.Node.EventType.TOUCH_END, function (event) {
var str = "";
if (this.cur_index == 2) {
var cfg = gdata("exchange_data", "data_shop_exchage_cost", "hero_soul_instruction");
if (cfg && cfg.desc)
str = cfg.desc;
} else if (this.cur_index == 4) {
var cfg = gdata("exchange_data", "data_shop_exchage_cost", "secret_instruction");
if (cfg && cfg.desc)
str = cfg.desc;
}
Utils.playButtonSound(1);
var pos = event.touch.getLocation();
require("tips_controller").getInstance().showCommonTips(str, pos);
}, this)
},
setLessTime: function (less_time) {
var self = this
if(!self.time_rt) return;
if(this.time_tichet){
gcore.Timer.del(this.time_tichet);
this.time_tichet = null;
}
this.time_rt.node.active = true;
this.time_down_text_rt.node.active = true;
if(less_time > 0){
self.setTimeFormatString(less_time)
if(this.time_tichet == null){
this.time_tichet = gcore.Timer.set(function(){
less_time--
if(less_time < 0){
gcore.Timer.del(this.time_tichet);
this.time_tichet = null;
if(self.cur_index == 4){
self.ctrl.sender13403(MallConst.MallType.SkillShop)
}
}else{
this.setTimeFormatString(less_time)
}
}.bind(this),1000,-1)
}
}else{
self.setTimeFormatString(less_time)
}
},
setTimeFormatString: function (time) {
if(time > 0){
this.time_rt.string = "免费刷新: " + TimeTool.getTimeFormat(time) + ""
}else{
this.time_rt.string = "免费刷新: 00:00:00"
}
},
updateIconInfo(item_bid){
if (item_bid == gdata("item_data", "data_assets_label2id", "gold")) {
this.count.string = Utils.getMoneyString(this.role_vo.gold);
} else {
this.count.string = Utils.getMoneyString(BackpackController.getInstance().getModel().getItemNumByBid(item_bid));
}
},
openRootWnd: function (index) {
index = index || 1;
let sub_index = index
if (index == MallConst.MallType.SkillShop){
sub_index = 4
}else if(index > 4){
let subtype = gdata("exchange_data", "data_shop_list", [3]).subtype
if(subtype.indexOf(index) != -1){
sub_index = 3
}
}else if(index == MallConst.MallType.ScoreShop){
index = 8;
}
//first_index 为选中 //所在类型
this.first_index = sub_index;
this.sub_type = index
this.ctrl.setFirstLogin(false);
this.setSelecteTab(sub_index);
},
closeCallBack: function () {
this.ctrl.openMallPanel(false);
if (this.item_scrollview) {
this.item_scrollview.DeleteMe();
this.item_scrollview = null;
}
if (this.son_panel){
this.son_panel.deleteMe();
}
if (this.role_update_lev_event) {
this.role_vo.unbind(this.role_update_lev_event);
this.role_update_lev_event = null
}
if(this.time_tichet){
gcore.Timer.del(this.time_tichet);
this.time_tichet = null;
}
this.role_vo = null;
this.son_panel = null;
var ActionController = require("action_controller")
if(ActionController.getInstance().getTreasureView()){
ActionController.getInstance().getTreasureView().setVisible(true)
}
},
//切换标签
selectedTabCallBack: function (index) {
if (this.cur_index == index)
return
if (this.mall_root_wnd == null)
return
this.first_index = index
let type
if(index == 3){
if(this.sub_type){
type = this.sub_type
this.sub_type = null
}else{
type = gdata("exchange_data", "data_shop_list", [index]).subtype[0]
}
}else{
this.sub_type = null
}
this.cur_index = index;
this.mall_scroll_con.active = index != 3;
this.cur_tab = this.tab_info_list[index - 1];
//容错旧版本一些跳转问题
if (this.cur_tab == null) {
index = 1;
this.cur_index = index;
this.cur_tab = this.tab_info_list[index - 1];
}
this.time_rt.node.active = false;
this.time_down_text_rt.node.active = false;
this.tips_btn.active = false;
if (this.hasSon(index)) {
this.btn.active = false;
this.good_cons.active = false;
if (!this.son_panel) {
var MallSonPanel = require("mall_son_panel");
this.son_panel = new MallSonPanel();
this.son_panel.show();
this.son_panel.setParent(this.mall_container);
} else {
this.son_panel.setVisibleStatus(true);
}
this.mall_scroll_con.active = false;
this.son_panel.setList(gdata("exchange_data", "data_shop_list", [index]).subtype);
this.son_panel.openById(type);
this.btn.active = false;
this.good_cons.active = false;
this.coin.node.active = false;
this.count.node.active = false;
this.refresh_count.label = "";
this.add_btn.active = false;
} else if (index <= 4) {
if (index != 4 && index != 2) {
this.btn.active = false;
this.coin.node.active = true;
this.count.node.active = true;
this.refresh_count.label = "";
this.add_btn.active = false;
if (this.cur_tab.is_first) {
this.ctrl.sender13401(index); //获取普通商店的限购次数
} else {
this.item_scrollview.setData(this.data_list[this.cur_index], function (cell) {
this.ctrl.openMallBuyWindow(true, cell);
})
}
} else {
this.btn.active = true;
this.coin.node.active = true;
this.count.node.active = true;
this.add_btn.active = false;
if(index == 2){
this.tips_btn.active = true;
}
if (this.cur_tab.is_first) {
let _type = index
if(_type == 4){
_type = MallConst.MallType.SkillShop
}
this.ctrl.sender13403(_type); //获取神秘/神格商店列表
} else {
if(index == 4){
let time = this.data_list[this.cur_index].refresh_time - gcore.SmartSocket.getTime()
if(time > 0){
this.setLessTime(time)
}else{
this.setTimeFormatString(0)
this.ctrl.sender13403(MallConst.MallType.SkillShop)
}
}
this.setResetCount(this.data_list[this.cur_index])
this.item_scrollview.setData(this.data_list[this.cur_index].item_list, function (cell) {
this.ctrl.openMallBuyWindow(true, cell);
}.bind(this))
}
}
var item_bid
if(index == 4){
item_bid = gdata("exchange_data", "data_shop_list", [MallConst.MallType.SkillShop]).item_bid;
}else{
item_bid = gdata("exchange_data", "data_shop_list", [index]).item_bid;
}
var item_res_path = PathTool.getItemRes(Utils.getItemConfig(item_bid).icon);
if (item_res_path) {
this.loadRes(item_res_path, function (res_object) {
this.coin.spriteFrame = res_object;
}.bind(this))
}
this.updateIconInfo(item_bid)
this.good_cons.active = true;
if (this.son_panel) {
this.son_panel.setVisibleStatus(false);
}
}
},
getConfig: function (index, data) {
var config = [];
var list = [];
if (index == 1) {
config = Utils.deepCopy(Config.exchange_data.data_shop_exchage_gold);
} else if (index == 2) {
}
var show_list = [];
if (index != 4 && index != 2) {
var list = Utils.deepCopy(data.item_list);
for (var a in config) {
var j = config[a];
if (j.type == this.cur_index) {
if (list && Utils.next(list)) { //已经买过的限购物品
for (var k in list) {
var v = list[k];
if (j.id == v.item_id) {
if (v.ext[0] && v.ext[0].val != null) { //不管是什么限购 赋值已购买次数就好了
j.has_buy = v.ext[0].val;
list.splice(k, 1);
}
break;
} else
j.has_buy = 0;
}
} else
j.has_buy = 0;
show_list.push(j)
}
}
}
return show_list;
},
//判断是否有子标签:{
hasSon: function (index) {
var sub_type = gdata("exchange_data", "data_shop_list", [index]).subtype;
return Utils.next(sub_type) != null
},
//判断是否开启按钮
checkBtnIsOpen: function (index) {
if (index == 1) { //钻石商城
if (this.role_vo.lev >= gdata("exchange_data", "data_shop_exchage_cost", "open_gold_lev").val)
return true
else
return false
} else if (index == 2) { //神格商店
if (this.role_vo.lev >= gdata("exchange_data", "data_shop_exchage_cost", "open_hero_soul_lev").val)
return true
else
return false
} else if (index == 3) { //积分
if (this.role_vo.lev >= gdata("exchange_data", "data_shop_exchage_cost", "open_point_lev").val)
return true
else
return false
} else if (index == 4) { //神秘商店
if (this.role_vo.lev >= gdata("exchange_data", "data_shop_exchage_cost", "open_secret_lev").val)
return true
else
return false
}
return true
},
setResetCount(data){
var self = this
if(!data)return ;
let free_count = data.free_count || 0
let btn_str = Utils.TI18N("免费刷新")
this.btn_img.node.active = false;
if(self.cur_index == 2){ //神格
if(free_count <= 0){
let asset_cfg = Config.exchange_data.data_shop_exchage_cost["soul_reset_cost"]
if (asset_cfg){
let bid = asset_cfg.val[0][0];
let num = asset_cfg.val[0][1];
btn_str = num + "重置";
this.btn_img.node.active = true;
this.loadRes(PathTool.getItemRes(Utils.getItemConfig(bid).icon),function(res){
this.btn_img.spriteFrame = res
}.bind(this))
}
}
}else if(self.cur_index == 4){ //技能
if(free_count <= 0){
let config = Config.exchange_data.data_shop_list[MallConst.MallType.SkillShop]
if(config){
let cost_list = config.cost_list;
let bid = cost_list[0][0];
let num = cost_list[0][1];
btn_str = num + "刷新";
this.btn_img.node.active = true;
this.loadRes(PathTool.getItemRes(Utils.getItemConfig(bid).icon),function(res){
this.btn_img.spriteFrame = res
}.bind(this))
}
}else{
let asset_cfg = Config.exchange_data.data_shop_exchage_cost["skill_refresh_free"]
if(asset_cfg){
btn_str = cc.js.formatStr("%s(%s/%s)",Utils.TI18N("免费刷新"),free_count,asset_cfg.val)
}
}
let config = Config.exchange_data.data_shop_exchage_cost.skill_refresh_number
let max_count = 0
if(config){
max_count = config.val
}
let count = data.count || 0
let text = cc.js.formatStr("%s:%s/%s",Utils.TI18N("刷新次数"), count, max_count)
self.time_down_text_rt.string = text;
}
self.btn_label.string = btn_str
},
setTabBtnTouchStatus: function (status, index) {
},
});
module.exports = MailWindow;