626 lines
18 KiB
JavaScript
626 lines
18 KiB
JavaScript
"use strict";
|
|
cc._RF.push(module, 'c276axKG/1J5IQX6dP0+o6H', 'cmp.partner.upstar');
|
|
// Scripts/mod/partner/cmps/upstar/cmp.partner.upstar.js
|
|
|
|
"use strict";
|
|
|
|
/******************************************************************
|
|
*
|
|
* 伙伴信息页 --- 升星
|
|
*
|
|
******************************************************************/
|
|
|
|
var BridgeComponent = require("bridge.component");
|
|
var HeroEvent = require("hero_event");
|
|
var HeroControl = require("hero_controller");
|
|
var BackpackController = require("backpack_controller");
|
|
var BackPackConst = require("backpack_const");
|
|
var RoleController = require("role_controller");
|
|
cc.Class({
|
|
"extends": BridgeComponent,
|
|
properties: {
|
|
lstInfo: {
|
|
"default": null,
|
|
type: cc.Node
|
|
},
|
|
lstNeed: {
|
|
"default": null,
|
|
type: cc.Node
|
|
},
|
|
nodSpecial: {
|
|
"default": null,
|
|
type: cc.Node
|
|
},
|
|
nodOps: {
|
|
"default": null,
|
|
type: cc.Node
|
|
}
|
|
},
|
|
// 显示
|
|
onEnable: function onEnable() {
|
|
// 变量
|
|
this.ptneeds = [];
|
|
this.selects = [];
|
|
|
|
// 视图监听
|
|
this.vbind([["ShowPartner", this.onPartnerChanged.bind(this)]]);
|
|
|
|
// 事件监听
|
|
this.bindGEvent(HeroEvent.Hero_Data_Update, this.onPartnerUpdate.bind(this));
|
|
},
|
|
// 隐藏
|
|
onDisable: function onDisable() {
|
|
// 视图监听解除
|
|
this.vunbind();
|
|
|
|
// 事件监听解除
|
|
this.unbindGEvents();
|
|
},
|
|
// 有伙伴数据更新
|
|
onPartnerUpdate: function onPartnerUpdate(_vo) {
|
|
if (_vo && this.partner && _vo.partner_id == this.partner.partner_id) {
|
|
this.onPartnerChanged(_vo);
|
|
nx.bridge.vset("ShowPartner", _vo);
|
|
}
|
|
},
|
|
// 伙伴更新
|
|
onPartnerChanged: function onPartnerChanged(_partner) {
|
|
this.partner = _partner;
|
|
this.selects = [];
|
|
this.arr0 = [];
|
|
this.arr1 = [];
|
|
this.arr2 = [];
|
|
// 判空
|
|
if (nx.dt.objEmpty(this.partner)) {
|
|
this.setEmpty();
|
|
return;
|
|
}
|
|
|
|
// 配置获取
|
|
var ckey = this.partner.bid + "_" + this.partner.star;
|
|
var nkey = this.partner.bid + "_" + (this.partner.star + 1);
|
|
this.ccfgs = gdata("partner_data", "data_partner_star", ckey);
|
|
this.ncfgs = gdata("partner_data", "data_partner_star", nkey);
|
|
var mfg = game.configs.partner_data.data_partner_star[nkey];
|
|
if (nx.dt.objEmpty(this.ccfgs)) {
|
|
nx.error("无效伙伴升星配置:", ckey);
|
|
this.setEmpty();
|
|
return;
|
|
}
|
|
// 是否满级
|
|
if (!mfg) {
|
|
nx.gui.setActive(this, "max", true);
|
|
nx.gui.setActive(this, "nor", false);
|
|
return;
|
|
}
|
|
|
|
// 升星刷新
|
|
nx.gui.setActive(this, "max", false);
|
|
nx.gui.setActive(this, "nor", true);
|
|
this.freshUpStar();
|
|
},
|
|
// 置空
|
|
setEmpty: function setEmpty() {
|
|
nx.gui.setActive(this, "max", false);
|
|
nx.gui.setActive(this, "nor", true);
|
|
nx.gui.setActive(this.lstInfo, "", false);
|
|
nx.gui.setActive(this.lstNeed, "", false);
|
|
nx.gui.setActive(this.nodOps, "", false);
|
|
nx.gui.setActive(this.nodSpecial, "", false);
|
|
},
|
|
// 升星刷新
|
|
freshUpStar: function freshUpStar() {
|
|
// 星级
|
|
nx.gui.setActive(this.lstInfo, "", true);
|
|
var cico = cc.path.join("coms/images", "star" + this.ccfgs.star);
|
|
var nico = cc.path.join("coms/images", "star" + this.ncfgs.star);
|
|
nx.gui.setSpriteFrame(this.lstInfo, "stars/from", cico);
|
|
nx.gui.setSpriteFrame(this.lstInfo, "stars/to", nico);
|
|
|
|
// 三条提升
|
|
var atts = this.ncfgs.attr_show || [];
|
|
for (var i = 0; i < 3; ++i) {
|
|
var node = nx.gui.find(this.lstInfo, "t" + (i + 1));
|
|
var attr = atts[i];
|
|
if (nx.dt.arrEmpty(attr)) {
|
|
node.active = false;
|
|
continue;
|
|
}
|
|
node.active = true;
|
|
// 三元素:描述/老值/新值
|
|
if (attr.length == 3) {
|
|
nx.gui.setString(node, "from/tip", nx.text.getKey(attr[0]));
|
|
nx.gui.setString(node, "from/txt", nx.text.getKey(attr[1]));
|
|
nx.gui.setString(node, "to", nx.text.getKey(attr[2]));
|
|
nx.gui.setActive(node, "arrow", true);
|
|
}
|
|
// 单元素:描述
|
|
else {
|
|
nx.gui.setString(node, "from/tip", nx.text.getKey(attr[0]));
|
|
nx.gui.setString(node, "from/txt", "");
|
|
nx.gui.setString(node, "to", "");
|
|
nx.gui.setActive(node, "arrow", false);
|
|
}
|
|
}
|
|
|
|
// 单技能提升
|
|
nx.gui.setActive(this.lstInfo, "skill", false);
|
|
var csks = this.ccfgs.skills;
|
|
var nsks = this.ncfgs.skills;
|
|
if (nx.dt.arrNEmpty(csks) && nx.dt.arrNEmpty(nsks)) {
|
|
var ids = [];
|
|
for (var _i = 0; _i < nsks.length; ++_i) {
|
|
if (csks[_i][1] != nsks[_i][1]) {
|
|
ids.push([csks[_i][1], nsks[_i][1]]);
|
|
}
|
|
}
|
|
|
|
// 只有一个技能提升时需要展示
|
|
if (ids.length == 1) {
|
|
var ifo = ids[0];
|
|
var _node = nx.gui.find(this.lstInfo, "skill");
|
|
var from = nx.gui.getComponent(_node, "from", "cmp.skill.base");
|
|
var to = nx.gui.getComponent(_node, "to", "cmp.skill.base");
|
|
if (from && to) {
|
|
_node.active = true;
|
|
from.setData(ifo[0]);
|
|
to.setData(ifo[1]);
|
|
}
|
|
}
|
|
}
|
|
var showUpstar = true;
|
|
if (this.partner.star == 10 || this.partner.star == 11 || this.partner.star == 12) {
|
|
var cfg = game.configs.partner_data.data_partner_const;
|
|
var can = HeroControl.getInstance().getModel().checkHighStarCondition(this.partner.star);
|
|
var descs = HeroControl.getInstance().getModel().getDescs();
|
|
nx.gui.setSpriteFrame(this.nodSpecial, "needs/conditions/star", cc.path.join("coms/images/star" + (this.partner.star + 1)));
|
|
nx.gui.gocChildren(this.nodSpecial, "needs/desc/view/content", descs.length);
|
|
var chd = nx.gui.find(this.nodSpecial, "needs/desc/view/content").children;
|
|
for (var d = 0; d < descs.length; d++) {
|
|
var desc = descs[d];
|
|
nx.gui.setString(chd[d], "desc", desc);
|
|
}
|
|
var show = 0;
|
|
can.forEach(function (_c) {
|
|
if (_c == true) {
|
|
show++;
|
|
}
|
|
});
|
|
nx.gui.setActive(this.nodSpecial, "", show == 0);
|
|
nx.gui.setActive(this.lstNeed.parent, "", show != 0);
|
|
} else {
|
|
nx.gui.setActive(this.nodSpecial, "", false);
|
|
|
|
// 材料刷新
|
|
nx.gui.setActive(this.lstNeed, "", true);
|
|
}
|
|
this.computeNeeds();
|
|
this.freshNeeds();
|
|
|
|
// 刷新操作
|
|
nx.gui.setActive(this.nodOps, "", true);
|
|
},
|
|
// 统计材料
|
|
computeNeeds: function computeNeeds() {
|
|
var _this = this;
|
|
// expend1本体卡,expend2指定卡,expend3阵营卡,other_expend额外需要
|
|
// 随机的{1,4,2} : 1 表示阵营 4: 表示星级 2表示数量
|
|
// 指定的{10402,4,1} : 10402: 表示bid, 4: 表示星级 1:表示数量
|
|
|
|
var HC = HeroControl.getInstance();
|
|
var HM = HC.getModel();
|
|
|
|
// 需求重置
|
|
this.ptneeds = []; // 卡需求
|
|
this.mtneeds = []; // 道具需求
|
|
|
|
this.partnerHun = []; // 英魂材料
|
|
|
|
var items = BackpackController.getInstance().getModel().getAllBackPackArray(2);
|
|
var add = function add(arr, items) {
|
|
if (items.quantity > 0) {
|
|
for (var i = 0; i < items.quantity; ++i) {
|
|
items.partner_id = items.bid;
|
|
arr.push(items);
|
|
}
|
|
}
|
|
return arr;
|
|
};
|
|
items.forEach(function (_item) {
|
|
if (_item.type == BackPackConst.item_type.HERO_HUN) {
|
|
_item.sortid = 0;
|
|
add(_this.partnerHun, _item);
|
|
}
|
|
});
|
|
|
|
// 统计expend2指定卡
|
|
var lst = this.ncfgs.expend2 || [];
|
|
lst.forEach(function (t) {
|
|
var pcfgs = game.configs.partner_data.data_partner_base[t[0]];
|
|
var tcfgs = pcfgs ? Utils.getItemConfig(pcfgs.item_id) : null;
|
|
if (!pcfgs || !tcfgs) {
|
|
nx.error("升星材料配置缺失:", t[0]);
|
|
return;
|
|
}
|
|
_this.ptneeds.push({
|
|
bid: t[0],
|
|
camp: pcfgs.camp_type || tcfgs.camp_type,
|
|
name: pcfgs.name || tcfgs.name,
|
|
qa: pcfgs.quality || tcfgs.quality,
|
|
icon: tcfgs.icon,
|
|
need_stars: t[1],
|
|
need_count: t[2],
|
|
selects: [],
|
|
tip: false
|
|
});
|
|
});
|
|
|
|
// 统计expend3阵营卡
|
|
lst = this.ncfgs.expend3 || [];
|
|
lst.forEach(function (t) {
|
|
_this.ptneeds.push({
|
|
bid: 0,
|
|
camp: t[0],
|
|
name: "AnyNameCamp" + t[0],
|
|
qa: t[1] - 1,
|
|
icon: 29982,
|
|
need_stars: t[1],
|
|
need_count: t[2],
|
|
selects: [],
|
|
tip: false
|
|
});
|
|
});
|
|
|
|
// other_expend扩展道具需求
|
|
lst = this.ncfgs.other_expend || [];
|
|
lst.forEach(function (t) {
|
|
var tcfgs = Utils.getItemConfig(t[0]);
|
|
if (!tcfgs) {
|
|
nx.error("升星材料配置缺失:", t[0]);
|
|
return;
|
|
}
|
|
_this.mtneeds.push({
|
|
bid: t[0],
|
|
icon: tcfgs.icon,
|
|
need_count: t[1]
|
|
});
|
|
});
|
|
|
|
// 提示检测
|
|
this.freshRedTips();
|
|
},
|
|
// 提示检测
|
|
freshRedTips: function freshRedTips() {
|
|
// 卡片充足检测
|
|
if (nx.dt.arrNEmpty(this.ptneeds)) {
|
|
var HC = HeroControl.getInstance();
|
|
var HM = HC.getModel();
|
|
var ARR = HM.getAllHeroArray();
|
|
this.selects = this.arr0.concat(this.arr1.concat(this.arr2));
|
|
for (var i = 0; i < this.ptneeds.length; ++i) {
|
|
// 充足不提示
|
|
var need = this.ptneeds[i];
|
|
if (need.need_count <= need.selects.length) {
|
|
need.tip = false;
|
|
continue;
|
|
}
|
|
|
|
// 指定
|
|
if (need.bid != 0) {
|
|
var cnt = 0;
|
|
for (var k in ARR) {
|
|
var p = ARR[k];
|
|
if (p.partner_id != this.partner.partner_id && p.bid == need.bid &&
|
|
// 非锁定英雄
|
|
nx.dt.objEmpty(p.dic_locks) && p.is_lock == 0 && p.star == need.need_stars && p.is_in_form == 0 && !nx.dt.arrMember(this.selects, p)) {
|
|
cnt++;
|
|
}
|
|
if (cnt >= need.need_count) {
|
|
break;
|
|
}
|
|
}
|
|
need.tip = cnt >= need.need_count;
|
|
continue;
|
|
}
|
|
// 同系
|
|
else {
|
|
var _cnt = 0;
|
|
for (var _k in ARR) {
|
|
var _p2 = ARR[_k];
|
|
// 任意阵营的高星材料
|
|
if (need.camp == 0) {
|
|
if (nx.dt.arrNEmpty(this.partnerHun)) {
|
|
var _p3 = this.partnerHun[_k];
|
|
if (_p3 && !nx.dt.arrMember(this.selects, _p3) && _p3.config.eqm_jie == need.need_stars) {
|
|
_cnt++;
|
|
}
|
|
continue;
|
|
}
|
|
if (_p2.partner_id != this.partner.partner_id && _p2.star == need.need_stars && _p2.is_in_form == 0 && !nx.dt.arrMember(this.selects, _p2)) {
|
|
_cnt++;
|
|
}
|
|
} else {
|
|
//|| ( p && !nx.dt.arrMember( this.selects, p ) && p.config.camp_type == 0 && p.config.eqm_jie == need.need_stars )
|
|
|
|
if (nx.dt.arrNEmpty(this.partnerHun)) {
|
|
var _p4 = this.partnerHun[_k];
|
|
if (_p4 && !nx.dt.arrMember(this.selects, _p4) && _p4.config.camp_type == need.camp && _p4.config.eqm_jie == need.need_stars) {
|
|
_cnt++;
|
|
}
|
|
// continue;
|
|
}
|
|
|
|
if (_p2.partner_id != this.partner.partner_id && _p2.camp_type == need.camp && _p2.star == need.need_stars && _p2.is_in_form == 0 && !nx.dt.arrMember(this.selects, _p2)) {
|
|
_cnt++;
|
|
}
|
|
}
|
|
if (_cnt >= need.need_count) {
|
|
break;
|
|
}
|
|
}
|
|
need.tip = _cnt >= need.need_count;
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
},
|
|
// 刷新材料
|
|
freshNeeds: function freshNeeds(_init) {
|
|
if (_init === void 0) {
|
|
_init = true;
|
|
}
|
|
// 卡片需求
|
|
var cards = nx.gui.setActive(this.lstNeed, "partners", nx.dt.arrNEmpty(this.ptneeds));
|
|
if (cards && cards.active) {
|
|
var chds = cards.children;
|
|
for (var i = 0; i < chds.length; ++i) {
|
|
var node = chds[i];
|
|
var need = this.ptneeds[i];
|
|
if (nx.dt.objEmpty(need)) {
|
|
node.active = false;
|
|
continue;
|
|
}
|
|
node.active = true;
|
|
var icon = node.getComponent("cmp.item.base");
|
|
if (icon) {
|
|
if (_init) {
|
|
icon.setEmpty();
|
|
icon.setQuality(need.qa);
|
|
icon.setIcon(need.icon);
|
|
icon.setName(need.name);
|
|
icon.setStars(need.need_stars);
|
|
icon.setIcon(need.icon);
|
|
icon.setCamp(need.camp);
|
|
}
|
|
nx.gui.setString(icon, "count/txt", need.selects.length + '/' + need.need_count);
|
|
nx.gui.setActive(icon, 'bg/tip', need.tip);
|
|
}
|
|
}
|
|
|
|
// 微调间距
|
|
var len = this.ptneeds.length;
|
|
if (len >= 2 && len <= 4) {
|
|
var space = [40, 40, 5];
|
|
var layout = nx.gui.getComponent(this.lstNeed, "partners", cc.Layout);
|
|
layout.spacingX = space[len - 2];
|
|
}
|
|
}
|
|
|
|
// 材料需求
|
|
var model = BackpackController.getInstance().getModel();
|
|
var mats = nx.gui.setActive(this.lstNeed, "mats", nx.dt.arrNEmpty(this.mtneeds));
|
|
if (mats && mats.active) {
|
|
var _chds = mats.children;
|
|
for (var _i2 = 0; _i2 < _chds.length; ++_i2) {
|
|
var _node2 = _chds[_i2];
|
|
var _need = this.mtneeds[_i2];
|
|
if (nx.dt.objEmpty(_need)) {
|
|
_node2.active = false;
|
|
continue;
|
|
}
|
|
_node2.active = true;
|
|
nx.bridge.setIconS(_node2, "icon", _need.icon);
|
|
var have = model.getItemNumByBid(_need.bid);
|
|
var str = cc.js.formatStr("%s/%s", Utils.getMoneyString(have), Utils.getMoneyString(_need.need_count));
|
|
nx.gui.setString(_node2, "txt", str);
|
|
this.mtneeds.have = have;
|
|
}
|
|
}
|
|
},
|
|
// 点击材料
|
|
onTouchPartnerIcon: function onTouchPartnerIcon(_index) {
|
|
var _this2 = this;
|
|
var index = parseInt(_index);
|
|
if (!nx.dt.numGood(index)) {
|
|
return;
|
|
}
|
|
var HC = HeroControl.getInstance();
|
|
var pts = [];
|
|
var need = this.ptneeds[_index];
|
|
var excluds = [this.partner];
|
|
for (var i = 0; i < this.ptneeds.length; ++i) {
|
|
if (i == _index) continue;
|
|
var _pts = this.ptneeds[i];
|
|
excluds = excluds.concat(_pts.selects);
|
|
}
|
|
|
|
// 伙伴筛选
|
|
var all = HC.getModel().getAllHeroArray();
|
|
// 获取道具 特殊道具 90900 可以替代任意的九星伙伴材料
|
|
|
|
all.forEach(function (_p) {
|
|
// 非指定英雄
|
|
if (need.bid > 0 && (_p.bid != need.bid || _p.star != need.need_stars)) {
|
|
return;
|
|
}
|
|
if (need.camp != 0) {
|
|
// 非派系英雄
|
|
if (need.bid <= 0 && (_p.camp_type != need.camp || _p.star != need.need_stars)) {
|
|
return;
|
|
}
|
|
}
|
|
if (need.camp == 0) {
|
|
// 非派系英雄
|
|
if (_p.star != need.need_stars) {
|
|
return;
|
|
}
|
|
}
|
|
|
|
// 非锁定英雄
|
|
if (_p.is_in_form != 0 || nx.dt.objNEmpty(_p.dic_locks) || _p.is_lock != 0) {
|
|
return;
|
|
}
|
|
|
|
// 非排除英雄
|
|
if (nx.dt.arrMember(excluds, null, function (_m) {
|
|
return _m.partner_id == _p.partner_id;
|
|
})) {
|
|
return;
|
|
}
|
|
;
|
|
_p.sortid = _p.bid;
|
|
pts.push(_p);
|
|
});
|
|
|
|
// 排序
|
|
var sort_func = Utils.tableLowerSorter(["camp_type", "star", "bid"]);
|
|
pts.sort(sort_func);
|
|
if (nx.dt.arrNEmpty(this.partnerHun) && need.bid == 0) {
|
|
if (need.camp == 0) {
|
|
this.partnerHun.forEach(function (_item) {
|
|
if (_item.config.eqm_jie == need.need_stars) {
|
|
pts.push(_item);
|
|
}
|
|
});
|
|
} else {
|
|
//|| ( _item.config.eqm_jie == need.need_stars && _item.config.camp_type == 0 )
|
|
this.partnerHun.forEach(function (_item) {
|
|
if (_item.config.eqm_jie == need.need_stars && need.camp == _item.config.camp_type) {
|
|
pts.push(_item);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
pts.sort(Utils.tableLowerSorter(["sortid"]));
|
|
var args = {
|
|
partners: pts,
|
|
count: need.need_count,
|
|
selects: need.selects,
|
|
flag: {
|
|
type: need.name,
|
|
star: need.need_stars
|
|
}
|
|
};
|
|
// console.log( "所有的伙伴相关" + JSON.stringify( pts ) );
|
|
|
|
// 弹窗
|
|
HC.openPartnerSelector(true, args, function (_selects) {
|
|
_this2.ptneeds[_index].selects = _selects || [];
|
|
_this2.saveNowSelects(index, _selects);
|
|
_this2.freshRedTips();
|
|
_this2.freshNeeds(false);
|
|
HC.openPartnerSelector(false);
|
|
});
|
|
},
|
|
saveNowSelects: function saveNowSelects(_index, _count) {
|
|
var dealData = function dealData(_arr) {
|
|
if (_count.length > 0) {
|
|
if (nx.dt.arrNEmpty(_arr)) {
|
|
_arr = [];
|
|
}
|
|
_count.forEach(function (_item) {
|
|
_arr.push(_item);
|
|
});
|
|
} else {
|
|
_arr = [];
|
|
}
|
|
return _arr;
|
|
};
|
|
if (_index == 0) {
|
|
this.arr0 = dealData(this.arr0);
|
|
}
|
|
if (_index == 1) {
|
|
this.arr1 = dealData(this.arr1);
|
|
}
|
|
if (_index == 2) {
|
|
this.arr2 = dealData(this.arr2);
|
|
}
|
|
},
|
|
// 点击升星
|
|
onTouchUpStar: function onTouchUpStar() {
|
|
// 卡片材料检查
|
|
var enough = true;
|
|
var tiptxt = "";
|
|
for (var i in this.ptneeds) {
|
|
var pt = this.ptneeds[i];
|
|
if (pt.need_count > pt.selects.length) {
|
|
enough = false;
|
|
tiptxt = "tip_noEnoughMaterial";
|
|
break;
|
|
}
|
|
}
|
|
;
|
|
|
|
// 额外耗材
|
|
if (enough && nx.dt.arrNEmpty(this.mtneeds)) {
|
|
for (var _i3 in this.mtneeds) {
|
|
var mt = this.mtneeds;
|
|
if (mt.have < mt.need_count) {
|
|
enough = false;
|
|
tiptxt = "tip_noEnoughMaterial";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 不足
|
|
if (!enough) {
|
|
nx.tbox(tiptxt);
|
|
return;
|
|
}
|
|
|
|
// 参数归纳
|
|
var args1 = [];
|
|
var args2 = [];
|
|
var args3 = [];
|
|
for (var _i4 = 0; _i4 < this.ptneeds.length; ++_i4) {
|
|
var _pt = this.ptneeds[_i4];
|
|
for (var k = 0; k < _pt.selects.length; ++k) {
|
|
var tm = _pt.selects[k];
|
|
// console.log("伙伴需求数据" + JSON.stringify( tm ) );
|
|
if (_pt.bid > 0) {
|
|
args1.push({
|
|
"partner_id": tm.partner_id
|
|
});
|
|
} else {
|
|
if (tm.base_id) {
|
|
args3.push({
|
|
"item_id": tm.base_id,
|
|
"num": 1
|
|
});
|
|
} else {
|
|
args2.push({
|
|
"partner_id": tm.partner_id
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
var HC = HeroControl.getInstance();
|
|
HC.sender11005(this.partner.partner_id, args1, args2, args3);
|
|
},
|
|
// 点击改造室
|
|
onTouchTransformRoom: function onTouchTransformRoom() {
|
|
var HC = HeroControl.getInstance();
|
|
HC.openHeroReformWindow(true, this.partner);
|
|
this.scheduleOnce(function () {
|
|
HC.openHeroMainInfoWindow(false);
|
|
HC.openHeroBagWindow(false);
|
|
}, 0.1);
|
|
},
|
|
onTouchTip: function onTouchTip() {
|
|
nx.tbox("UpStarsNotEnoughTip");
|
|
}
|
|
});
|
|
|
|
cc._RF.pop(); |