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
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;
|
|
} |