//********************* // 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(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; }