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.
186 lines
7.4 KiB
186 lines
7.4 KiB
|
|
import { Singleton } from '../../mx/tools/Singleton';
|
|
import { TableNames } from '../game/ConfigTableData';
|
|
import { UIID } from '../game/ConfigRes';
|
|
import { OtherDataType } from '../game/GameData';
|
|
|
|
/**新功能类型 */
|
|
export enum NewFunType {
|
|
/**主页页签功能解锁 */
|
|
MainPageTab = 1,
|
|
/**武器解锁 */
|
|
Weapon = 2,
|
|
/**副本解锁 */
|
|
Replica = 3,
|
|
/**难度解锁 */
|
|
Difficulty = 4,
|
|
/**剧情解锁 */
|
|
Story = 6,
|
|
/**主页功能按钮解锁 */
|
|
MainPageBtn = 7,
|
|
/**倍速功能 */
|
|
SpeedUp = 8,
|
|
}
|
|
|
|
|
|
export class NewFun extends Singleton {
|
|
|
|
getNewFunDataList() {
|
|
return gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun);
|
|
}
|
|
|
|
/**根据新功能类型和功能ID获取配置 */
|
|
getNewFunData(newFunType: NewFunType, funId: number) {
|
|
let newFunData = gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun).find(x => x.type == newFunType && x.funId == funId);
|
|
return newFunData;
|
|
}
|
|
|
|
/**根据类型和功能id判断是否有设置过解锁状态 */
|
|
isSetUnLockNewFun(newFunType: NewFunType, funId: number) {
|
|
let statusStr = gg.data.getkeyKeyValue(OtherDataType.CompletedNewFunPop, newFunType + "&" + funId);
|
|
let isComplete = statusStr != '' ? true : false;
|
|
return isComplete;
|
|
}
|
|
|
|
/**根据类型和功能id设置解锁状态 */
|
|
setUnLockNewFun(newFunType: NewFunType, funId: number) {
|
|
gg.data.setkeyKeyValue(OtherDataType.CompletedNewFunPop, newFunType + "&" + funId, 1);
|
|
}
|
|
|
|
/**判断主页页签功能是否解锁 */
|
|
isUnLockMainPageTab(tabType: UIID) {
|
|
let newFunData = gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun).find(x => x.type == NewFunType.MainPageTab && x.funId == tabType);
|
|
let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false;
|
|
return isUnLock;
|
|
}
|
|
|
|
/**判断武器是否解锁 */
|
|
isUnLockWeapon(weaponId: number) {
|
|
let newFunData = gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun).find(x => x.type == NewFunType.Weapon && x.funId == weaponId);
|
|
let playerLevel = gg.data.getPlayerLevel();
|
|
let isUnLock = false;
|
|
if (newFunData.chapter > 0)
|
|
isUnLock = gg.data.doc.chapter > newFunData.chapter;
|
|
if (newFunData.roleLevel > 0)
|
|
isUnLock = playerLevel >= newFunData.roleLevel;
|
|
if (newFunData.item_unlock > 0) {
|
|
let weaponData = gg.data.project.getWeaponData(weaponId);
|
|
let num = gg.data.getItemNum(weaponData.scrapId);
|
|
isUnLock = num >= newFunData.item_unlock;
|
|
}
|
|
return isUnLock;
|
|
}
|
|
|
|
/**判断难度是否解锁 */
|
|
isUnLockDifficult(difficultId: number) {
|
|
let newFunData = gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun).find(x => x.type == NewFunType.Difficulty && x.funId == difficultId);
|
|
let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false;
|
|
return isUnLock;
|
|
}
|
|
|
|
/**判断副本是否解锁 */
|
|
isUnLockReplica(replicaId: number) {
|
|
let newFunData = gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun).find(x => x.type == NewFunType.Replica && x.funId == replicaId);
|
|
let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false;
|
|
return isUnLock;
|
|
}
|
|
|
|
/**是否有剧情解锁 */
|
|
isUnLockStory(storyId: number) {
|
|
let newFunData = gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun).find(x => x.type == NewFunType.Story && x.funId == storyId);
|
|
let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false;
|
|
return isUnLock;
|
|
}
|
|
|
|
/**判断主页功能按钮是否解锁 */
|
|
isUnLockMainPageBtn(btnId: number) {
|
|
let newFunData = gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun).find(x => x.type == NewFunType.MainPageBtn && x.funId == btnId);
|
|
let isUnLock = newFunData ? newFunData.chapter < gg.data.doc.chapter : false;
|
|
return isUnLock;
|
|
}
|
|
|
|
|
|
|
|
/**显示新功能弹窗 */
|
|
checkNewFunPop() {
|
|
let list = gg.data.table.getTableList<ITableNewFun>(TableNames.NewFun);
|
|
for (let i = 0; i < list.length; i++) {
|
|
let newFunData = list[i];
|
|
let funId = newFunData.funId;
|
|
let isUnLock = this.isSetUnLockNewFun(newFunData.type, funId);
|
|
if (isUnLock) {
|
|
continue;
|
|
}
|
|
|
|
if (newFunData.type == NewFunType.Replica) {
|
|
isUnLock = this.isUnLockReplica(funId);
|
|
if (isUnLock) {
|
|
this.popNewFun(newFunData);
|
|
}
|
|
}
|
|
else if (newFunData.type == NewFunType.Weapon) {
|
|
isUnLock = this.isUnLockWeapon(funId);
|
|
if (isUnLock) {
|
|
//武器奖励
|
|
let weaponData = gg.data.project.getWeaponData(newFunData.funId);
|
|
let isHaveWeapon = gg.data.project.isWeaponUnlocked(newFunData.funId);
|
|
if (isHaveWeapon) {
|
|
//有武器转为碎片数量
|
|
//武器属性
|
|
let itemData = gg.data.table.getItemData(weaponData.scrapId)
|
|
gg.data.addItemNum(weaponData.scrapId, itemData.transition);
|
|
} else {
|
|
//没有武器添加武器数据
|
|
gg.data.project.unlockWeapon(newFunData.funId);
|
|
if (newFunData.item_unlock > 0) {
|
|
gg.data.subItemNum(weaponData.scrapId, newFunData.item_unlock);
|
|
}
|
|
}
|
|
gg.data.saveLocal();
|
|
gg.data.saveToServer();
|
|
this.popNewFun(newFunData);
|
|
}
|
|
} else if (newFunData.type == NewFunType.MainPageTab) {
|
|
isUnLock = this.isUnLockMainPageTab(funId);
|
|
if (isUnLock && [201, 204].includes(funId)) {
|
|
this.popNewFun(newFunData);
|
|
}
|
|
}
|
|
else if (newFunData.type == NewFunType.MainPageBtn) {
|
|
isUnLock = this.isUnLockMainPageBtn(funId);
|
|
if (isUnLock) {
|
|
this.popNewFun(newFunData);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**显示新功能弹窗 */
|
|
popNewFun(newFunData: ITableNewFun) {
|
|
if (newFunData.pop == 0) return;
|
|
// 入队前同步标记已展示,避免同一帧内多次 checkNewFunPop 在弹窗 onInit 之前都通过 isSetUnLockNewFun(例如荧光棒连弹两次)
|
|
if (newFunData.type == NewFunType.Replica) {
|
|
this.setUnLockNewFun(NewFunType.Replica, newFunData.funId);
|
|
gg.ui.popPanel(UIID.GetNewModel, {
|
|
data: newFunData
|
|
});
|
|
} else if (newFunData.type == NewFunType.Weapon) {
|
|
this.setUnLockNewFun(NewFunType.Weapon, newFunData.funId);
|
|
gg.ui.popPanel(UIID.GetNewGoodid, {
|
|
data: newFunData.funId
|
|
});
|
|
} else if (newFunData.type == NewFunType.MainPageTab) {
|
|
this.setUnLockNewFun(NewFunType.MainPageTab, newFunData.funId);
|
|
gg.ui.popPanel(UIID.PopUnLockBtn, {
|
|
data: newFunData.funId
|
|
});
|
|
}else if (newFunData.type == NewFunType.MainPageBtn) {
|
|
this.setUnLockNewFun(NewFunType.MainPageBtn, newFunData.funId);
|
|
gg.ui.popPanel(UIID.GetNewFun, {
|
|
data: newFunData
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|