消消方块阵换皮表情
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

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