消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

295 lines
11 KiB

//*********************
// create by 流云
// time: Mon Nov 10 2025
// desc:
//*********************
import { _decorator, Component, Node, find, Label } from 'cc';
import { Auto_sign7Day } from './Auto_sign7Day';
import { ISignData, TableNames } from '../../game/ConfigTableData';
import { itemPic } from '../../com/itemPic';
import { OtherDataType } from '../../game/GameData';
import { ItemData } from '../../game/ConfigProjectData';
import { UIID } from '../../game/ConfigRes';
import MTools from 'db://assets/mx/tools/MTools';
const { ccclass, property } = _decorator;
@ccclass('UIsign7Day')
export class UIsign7Day extends Auto_sign7Day {
//配置
signArray: ISignData[] = []
rewardArray: RewardData[][] = []
signData = ''
ishaveLingqu = false
onLoad(): void {
super.onLoad();
}
onEnable(): void {
super.onEnable();
this.ui_center.on(Node.EventType.TOUCH_END, this.click_centerBtnNode, this);
}
onDisable(): void {
super.onDisable();
this.ui_center.off(Node.EventType.TOUCH_END, this.click_centerBtnNode, this);
}
onInit(): void {
this.signData = gg.data.getStringData(OtherDataType.SignData)
if (this.signData == '') {
//当前签到天数, 签到奖励状态0表示未签到,1表示已签到, 签到奖励状态1表示可以领取(每天重置)
gg.data.setStringData(OtherDataType.SignData, '0&0&1')
this.signData = '0&0&1'
}
this.showOpenCenterEff()
this.showOpenMaskEff(2);
this.signArray = []
this.signArray = gg.data.table.getTableList<ISignData>(TableNames.Sign);
for (let i = 0; i < this.signArray.length; i++) {
let item = this.signArray[i]
let rewardStr = item.reward.split('|');
let arr = [];
for (let j = 0; j < rewardStr.length; j++) {
let [type, prop_id, num] = rewardStr[j].split(',');
let rewardData = new RewardData();
rewardData.type = Number(type);
rewardData.prop_id = Number(prop_id);
rewardData.num = Number(num);
arr.push(rewardData);
}
this.rewardArray.push(arr);
}
this.refreshView()
}
click_centerBtnNode() {
gg.audio.playEffect({ name: "点击音效" });
this.close(2)
}
click_btnGet(): void {
gg.audio.playEffect({ name: "点击音效" });
let curSign = Number(this.signData.split('&')[0]);
this.getReward(curSign);
}
click_btnVideo(): void {
gg.audio.playEffect({ name: "点击音效" });
gg.sdk.showVideoAd((res) => {
if (res) {
gg.sdk.reportDY("inLevel", `签到-AD-签到`);
let curSign = Number(this.signData.split('&')[0]);
this.getReward(curSign);
} else {
gg.ui.showToast("观看视频失败")
}
})
}
refreshView() {
let itemStr = "ui_itemNode"
let curSign = Number(this.signData.split('&')[0])
let curSignStatus = Number(this.signData.split('&')[1]);
this.btnGet.active = curSignStatus == 0;
this.btnVideo.active = curSignStatus == 1;
for (let i = 0; i < this.rewardArray.length; i++) {
let item = this.rewardArray[i][0];
// console.log('item', item);
let itemNode = find(itemStr + (i + 1), this.ui_Days);
if (itemNode) {
let lb = itemNode.getChildByName("dayDesc").getComponent(Label);
let gou = itemNode.getChildByName("gou");
let lightdown = itemNode.getChildByName("lightdown");
let curChoose_w = itemNode.getChildByName("curChoose_w");
let curChoose_b = itemNode.getChildByName("curChoose_b");
let lbNum = itemNode.getChildByName("nums")?.getComponent(Label);
let lbNum2 = itemNode.getChildByName("nums2")?.getComponent(Label);
let lbNum3 = itemNode.getChildByName("nums3")?.getComponent(Label);
let comp = itemNode.getComponent(itemPic);
lb.string = gg.lang.get('第{1}天',[i+1])//`第${i + 1}天`;
lbNum.string = item.num.toString()
if (this.rewardArray[i].length > 1 && lbNum2)
lbNum2.string = this.rewardArray[i][1].num.toString()
if (this.rewardArray[i].length > 2 && lbNum3)
lbNum3.string = this.rewardArray[i][2].num.toString()
gou.active = i < curSign || (i == curSign && curSignStatus >= 1);
lightdown.children[0].active = i <= curSign;
curChoose_w.active = i == curSign && curSignStatus == 0;
if (item.type == 1) {
let itemConf = gg.data.table.getItemData(item.prop_id);
if( itemConf.type == 5){
let itemid = gg.role.getSkinItemIdFromReward(item.prop_id);
if(itemid){
item.prop_id = itemid;
}
}
comp.setGoodId(item.prop_id, this.rewardArray[i], 1)
} else {
let conf = gg.data.project.getWeaponData(item.prop_id);
let goodId = conf.scrapId
comp.setGoodId(goodId, this.rewardArray[i], 1)
}
itemNode.attr({ signIndex: i })
//注册点击事件
itemNode.on(Node.EventType.TOUCH_END, this.signItemClick, this)
}
}
}
signItemClick(event) {
gg.audio.playEffect({ name: "点击音效" });
// 子节点被点时 target 是子节点,没有 signIndex;监听挂在 itemNode 上应用 currentTarget
const target = event.currentTarget as Node;
const index = (target as any).signIndex;
if (index == null || index < 0 || index >= this.rewardArray.length) {
return;
}
const row = this.rewardArray[index];
if (!row || row.length === 0) {
return;
}
let curSign = Number(this.signData.split('&')[0])
let curSignStatus = Number(this.signData.split('&')[1])
let chooseData = row[0];
// 仅道具类奖励才有物品表;武器等走 getWeaponData,getItemData 会为空
if (chooseData.type == 1) {
let itemConfig = gg.data.table.getItemData(chooseData.prop_id);
if (itemConfig && itemConfig.type == 5) {
let itemid = gg.role.getSkinItemIdFromReward(chooseData.prop_id);
if (itemid) {
chooseData.prop_id = itemid;
}
}
}
if (Number(index) == curSign && curSignStatus == 0) {
this.getReward(index);
} else {
//
//展示详情框
console.log("不能签到")
if (chooseData.type == 1) {
let item = new ItemData(chooseData.prop_id, chooseData.num)
gg.ui.openPanel(UIID.ItemDetailBox2, {
data: item
})
} else {
//let shipuid = WeaponDataManager.getWeaponFlagId(chooseData.prop_id)
let item = new ItemData(chooseData.prop_id, chooseData.num)
item.isFragment = true
gg.ui.openPanel(UIID.ItemDetailBox2, {
data: item
})
}
}
}
getReward(index: number) {
let curSign = Number(this.signData.split('&')[0])
let curSignStatus = Number(this.signData.split('&')[1])
let signRewards = this.rewardArray[curSign]
if (Number(index) == curSign && curSignStatus <= 1 && !this.ishaveLingqu) {
//签到成功
this.ishaveLingqu = true
curSignStatus++;
//更新签到数据
this.signData = curSign.toString() + '&' + curSignStatus.toString()
gg.data.setStringData(OtherDataType.SignData, this.signData)
this.refreshView()
//直接增加
let itemsArray = [];
for (let i = 0; i < signRewards.length; i++) {
let signReward = signRewards[i]
if (signReward.type == 1) {
let itemData = gg.data.table.getItemData(signReward.prop_id);
if (itemData.type == 4) {
//增加碎片,相当于开了个宝箱一样给对应数量的碎片
let boxRewardArray = gg.data.getFragmentNumArray(signReward.prop_id + ',' + signReward.num)
let statsArray = MTools.mergeToStatsArray(boxRewardArray)
for (let i = 0; i < statsArray.length; i++) {
let array = statsArray[i].split('|')
let item = new ItemData(Number(array[0]), Number(array[1]))
item.num = Number(array[1])
item.id = Number(array[0])
itemsArray.push(item);
}
}
else {
if(itemData.type == 5){
let itemid = gg.role.getSkinItemIdFromReward(signReward.prop_id);
if(itemid){
signReward.prop_id = itemid;
}
}
let id = signReward.prop_id
let item = new ItemData(id, signReward.num)
item.num = signReward.num;
item.id = id
itemsArray.push(item)
}
} else {
//给个武器
let id = signReward.prop_id
let item = new ItemData(id, signReward.num)
item.num = signReward.num
item.id = id
item.isFragment = true
itemsArray.push(item)
}
}
gg.ui.openPanel(UIID.GetReward, {
data: itemsArray,
onClose:()=>{
this.ishaveLingqu = false
}
});
if (curSignStatus > 1) {
this.scheduleOnce(() => {
this.close(2)
}, 0.1)
} else {
this.refreshView();
}
}
}
}
export class RewardData {
/**奖励类型 */
type: number;
/**奖励ID */
prop_id: number;
/**数量 */
num: number;
/**品质 */
quantity: number;
}