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

611 lines
17 KiB

1 week ago
import { assetManager, Enum } from "cc";
import { JsonAsset } from "cc";
import { AssetManager } from "cc";
import { Singleton } from "../../mx/tools/Singleton";
/**
*
*/
export enum TableNames {
/**章节表 */
Chapter = "Chapter",
/**章节怪物表 */
Chapter_monster = "Chapter_monster",
/**章节怪物权重表 */
Chapter_weight = "Chapter_weight",
/**常量表 */
Const = "const",
/**道具表 */
Item = "Item",
/**转盘表 */
Lottery = "Lottery",
/**怪物表 */
Monster = "Monster",
/**怪物表2 */
Monster2 = "Monster2",
// /**武器表 */
// weapon = "Weapon",
/**武器表2 */
Weapon2 = "Weapon2",
Weapon3 = "Weapon3",
Weapon4 = "Weapon4",
/**武器等级表 */
Weapon_Level = "Weapon_Level",
/**技能表 */
Skill = "Skill",
Box = 'Box',
Shop = 'Shop',
Sign = 'sign',
Role = 'Role',
Character = 'Character',
CDK = 'CDK',
Task = 'Task',
TaskReward = 'TaskReward',
// /**抽卡花费 */
// Wheel_cost = 'Wheel_cost',
// /**抽卡权重 */
// Wheel_weight = 'Wheel_weight',
// /**支付表 */
// Pay = "Pay",
// /**商城直购表 */
// ShopBuy = "ShopBuy",
// /**连续礼包表 */
// ContinueBag = "ContinueBag",
// /**首充表 */
// FirstBag = "FirstBag",
// /**月卡表 */
// MonthCard = "MonthCard",
// /**基金表 */
// Fund = "Fund",
/**章节宝箱表 */
Chapter_chest = "Chapter_chest",
/**限制活动表 */
LimitActivity = "LimitActivity",
// /**新年签到表 */
// NewYearSign = "NewYearSign",
/**新功能表 */
NewFun = "NewFun",
//副本表
Replica = "Replica",
// //新机制表
// Playmode = "Playmode",
/**目标任务表 */
TargetTask = "TarTask",
// /**角色皮肤表 */
// RoleSkin = "Skin",
// /**地图障碍物表 */
// Obstacle = "Obstacle",
// /**章节剧情表 */
// StoryComic = "StoryComic",
// /**宠物表 */
// Pet = "Pet",
// /**宠物升级表 */
// PetUp = "PetUp",
// /**宠物升级属性表 */
// PetUpAttr = "PetUpAttr",
// /**宠物池抽奖表 */
// PetPool = "PetPool",
/**技能成本表 */
SkillCost = "Const_weight",
/**技能池 */
SkillPool = "Skill_pool",
/**技能池使用表 */
SkillPoolUse = "skill_pool_use",
// /** 丧尸工厂表 */
// zombieTab = "zombie",
// GreatGift = "Gift",
// Playmode = 'playMode',
/**俄罗斯方块方块表 */
BattleCube = 'BattleCube',
/**
* TetriWaveWeight
*/
TetriWaveWeight = 'TetriWaveWeight',
/**副本等级表 */
ReplicaLevel = 'ReplicaLevel', //副本等级表
}
/**
*
*/
export class ConfigTableData extends Singleton {
private _tableMap: Map<string, Map<string, any>> = new Map<string, Map<string, any>>();
private _loadTableCount = 0;
loadConfig(onprogress: Function, callback: Function) {
this._loadTableCount = 0;
let max = Object.keys(TableNames).length;
for (let k in TableNames) {
let v = TableNames[k];
this.loadTable(v, () => {
this._loadTableCount++;
//console.log(`load table ${v} success`);
if (onprogress) onprogress(this._loadTableCount, max);
if (this._loadTableCount == Object.keys(TableNames).length) {
if (callback) callback();
}
})
}
}
private loadTable(tableName: string, callback?: Function) {
let loadFun = (bundle: AssetManager.Bundle) => {
if (bundle == null) {
if (callback) callback();
} else {
let res = bundle.get("config/" + tableName, JsonAsset);
if (res) {
this.onTableLoaded(tableName, res.json);
if (callback) callback();
return;
}
bundle.load("config/" + tableName, JsonAsset, (err, asset) => {
if (err) {
console.log(`load table ${tableName} err:`, err);
} else if (asset?.json != null) {
this.onTableLoaded(tableName, asset.json);
} else {
console.log(`load table ${tableName} err: asset or json is null (remote 404?)`);
}
if (callback) callback();
})
}
}
let bundle = assetManager.getBundle("first");
if (bundle) {
loadFun(bundle);
} else {
assetManager.loadBundle("first", (err, bundle) => {
if (err) {
console.log(`load bundle first err:`, err);
loadFun(null);
} else {
loadFun(bundle);
}
})
}
}
private onTableLoaded(tableName, json) {
let data: Map<string, any> = new Map<string, any>();
for (let i = 0; i < json.length; i++) {
data.set(json[i].id + "", json[i]);
}
this._tableMap.set(tableName, data);
}
/**
* /Bin _tableMap
* TableNames bundle config id
*/
applyHotUpdateTables(tables: Record<string, any>) {
if (!tables || typeof tables !== 'object') return;
for (const tableName of Object.keys(tables)) {
const json = tables[tableName];
if (Array.isArray(json)) {
this.onTableLoaded(tableName, json);
}
}
}
/**获取表数据键值对(key为id)-通用 */
getTableMap(tableName: string) {
return this._tableMap.get(tableName);
}
/**获取表数据列表-通用 */
getTableList<T>(tableName: TableNames) {
return Array.from(this._tableMap.get(tableName).values()) as T[];
}
/**获取表数据(根据id获取一条数据) -通用*/
getTableData<T>(tableName: TableNames, id: number) {
let table = this._tableMap.get(tableName);
if (table) {
return table.get(id + "") as T;
}
return null;
}
/**获取配置的常量值(必须具有常量表const,否则会返回0) */
getConst(id: number) {
let d: ITableConst = this._tableMap.get(TableNames.Const)?.get(id + "");
if (d) {
let arr = (d.constValue + "").split("|");
return Number(arr[0]);
} else
return 0;
}
getConstArray(id: number) {
let d: ITableConst = this._tableMap.get(TableNames.Const)?.get(id + "");
if (d) {
return d.constgroup;
} else
return [];
}
getConstString(id: number) {
let d: ITableConst = this._tableMap.get(TableNames.Const)?.get(id + "");
if (d) {
return d.constString;
} else
return "";
}
/**获取常量配置 */
getConstData(id: number): ITableConst {
return this._tableMap.get(TableNames.Const)?.get(id + "");
}
/**获取技能常量配置 */
getSkillCostData(id: number): ITableConst_weight {
return this._tableMap.get(TableNames.SkillCost)?.get(id + "");
}
/**获取道具数据 */
getItemData(itemid: number): ITableItem {
return this._tableMap.get(TableNames.Item)?.get(itemid + "");
}
///在这里添加具体表数据的获取方法
// /**获取道具池数据 */
// getItemPoolData(id: number): ITableItemPool {
// return this._tableMap.get(TableNames.itemPool)?.get(id + "");
// }
// /**根据商店类型和池子类型获取道具池数据 */
// getItemPoolDataByType(shopType: number, poolType: number): ITableItemPool {
// let list = this.getTableList<ITableItemPool>(TableNames.itemPool);
// return list.find(x => x.shopType == shopType && x.poolType == poolType);
// }
// /**根据商店类型,池子类型和参数获取道具池数据 */
// getItemPoolDataByTypeAndPar(shopType: number, poolType: number, par: number): ITableItemPool {
// let list = this.getTableList<ITableItemPool>(TableNames.itemPool);
// return list.find(x => x.shopType == shopType && x.poolType == poolType && x.par == par);
// }
// /**根据商店类型和任务ID获取道具池数据 */
// getItemPoolDataByShopTypeAndTaskID(shopType: number, taskID: number): ITableItemPool {
// let list = this.getTableList<ITableItemPool>(TableNames.itemPool);
// return list.find(x => x.shopType == shopType && x.par == taskID);
// }
// /**获取道具池权重列表 */
// getItemPoolList(id: number) {
// let list: IItemPoolData[] = [];
// let data = this.getItemPoolData(id);
// let str = data.pool;
// let arr = str.split("-");
// for (let i = 0; i < arr.length; i++) {
// let [id, num, weight] = arr[i].split("|");
// list.push({ id: +id, num: +num, weight: +weight });
// }
// return list;
// }
}
/**道具池权重列表数据结构 */
export interface IItemPoolData {
/**编号 */
id: number;
/**数量 */
num: number;
/**权重 */
weight: number;
}
//
//宝箱等级表
export interface IBoxLevelData {
/**编号 */
id: number;
/**等级 */
level: number;
/**经验值 */
exp: number;
/**类型 */
type: number;
/**消耗 */
consume: number;
/**数量 */
amount: number;
/**碎片 */
fragment: string;
}
//签到表
export interface ISignData {
/**编号 */
id: number;
/**奖励 */
reward: string;
}
//商店物品表
export interface IShopItemData {
/**编号 */
id: number;
/**武器ID */
weapon_id: number;
/**碎片ID */
frag: number;
/**名称 */
name: string;
/**数量 */
quantity: number;
/**类型 */
type: number;
/**价格 */
price: number;
/**权重 */
weight: number;
}
export enum MsgType {
/**普通文字 */
text = 1,
/**心理思考 */
os = 2,
/**红包 */
redBag = 3,
/**领取红包 */
redBag2 = 4,
/**图片 */
img = 5,
/**选项 */
opt = 6,
/**选项回复 */
opt2 = 7,
}
/**
*
*/
export enum StoryStepType {
/**主动画播完结束本步骤 */
mainSpine = 1,
/**主音频播完结束本步骤 */
mainAudio = 2,
/**指定时间结束本步骤 */
time = 3,
/**点击按钮结束本步骤 */
btn = 4,
/**滑动组件结束本步骤 */
slide = 5,
/**拖拽类型 */
drag = 6,
/**自定义互动游戏类型 */
game = 9,
}
/**技能常量配置类型 */
export enum SkillCostType {
/**非主动刷新——障碍物/技能权重 */
skillCostType_1001 = 1001,
/**非主动刷新——刷新品质权重 */
skillCostType_1002 = 1002,
/**非主动刷新——2个紫色技能保底阈值 */
skillCostType_1003 = 1003,
/**非主动刷新——紫色权重最小值 */
skillCostType_1004 = 1004,
/**非主动刷新——紫色脸黑控制,X次开始加权,每次加权值y,保底值z */
skillCostType_1005 = 1005,
/**非主动刷新,每日首次登录增加权重,紫色增加,橙色增加 */
skillCostType_1006 = 1006,
/**非主动刷新——橙色权重最小值 */
skillCostType_1007 = 1007,
/**非主动刷新——橙色脸黑控制,X次开始加权,每次加权值y,保底值z */
skillCostType_1008 = 1008,
/**非主动刷新——连续失败增加权重 紫色,橙色 */
skillCostType_1009 = 1009,
/**非主动刷新——最小紫色出现间隔,橙色出现间隔 */
skillCostType_1010 = 1010,
/**非主动刷新——前2关品质额外加权 */
skillCostType_1011 = 1011,
/**非主动刷新——技能组对应时间 */
skillCostType_1021 = 1021,
/**武器下限检测 宝箱数量,技能数量|宝箱数量,技能数量 */
skillCostType_1031 = 1031,
/**武器上限检测 同武器技能数最多多少 */
skillCostType_1032 = 1032,
/**主动刷新——前X次必出紫 */
skillCostType_1100 = 1100,
/**主动刷新——障碍物/技能权重 */
skillCostType_1101 = 1101,
/**主动刷新——刷新品质权重 */
skillCostType_1102 = 1102,
/**主动刷新——2个紫色技能保底阈值 */
skillCostType_1103 = 1103,
/**主动刷新——紫色权重最小值 */
skillCostType_1104 = 1104,
/**主动刷新——紫色脸黑控制,X次开始加权,每次加权值y,保底值z */
skillCostType_1105 = 1105,
/**主动刷新,每日首次登录增加权重,紫色增加,橙色增加 */
skillCostType_1106 = 1106,
/**主动刷新——橙色权重最小值 */
skillCostType_1107 = 1107,
/**主动刷新——橙色脸黑控制,X次开始加权,每次加权值y,保底值z */
skillCostType_1108 = 1108,
/**主动刷新——连续失败增加权重 紫色,橙色 */
skillCostType_1109 = 1109,
/**主动刷新——最小紫色出现间隔,橙色出现间隔 */
skillCostType_1110 = 1110,
/**主动刷新——前2关品质额外加权 */
skillCostType_1111 = 1111,
/**主动刷新——技能组对应时间 */
skillCostType_1121 = 1121,
/**危险系数修正 0.5-2 */
skillCostType_1201 = 1201,
/**DPS修正系数(开方) */
skillCostType_1202 = 1202,
/**攻击单位少于X个不计算 */
skillCostType_1203 = 1203,
/**DPS计算时间(每15秒) */
skillCostType_1204 = 1204,
/**技能分T级范围 */
skillCostType_1205 = 1205,
/**开启宝箱消耗银币数组 */
skillCostType_1206 = 1206,
/**锤子银币消耗 */
skillCostType_1207 = 1207,
/**波次结算银币 */
skillCostType_1208 = 1208,
/*** 波次预警提前时间20s(第1关)*/
skillCostType_1209 = 1209,
/*** 波次预警提前时间15s(大于1关)*/
skillCostType_1210 = 1210,
/*** 抖音怪物血量系数*/
skillCostType_1211 = 1211,
/*** 微信怪物血量系数*/
skillCostType_1212 = 1212,
/*** boss波次结算银币*/
skillCostType_1213 = 1213,
/**波次预警提前时间(鸭鸭副本)*/
skillCostType_1214 = 1214,
/**前4关,重复挑战怪物血量系数 */
skillCostType_1215 = 1215,
}
//role
// {
// "id": 1,
// "stage": 1,
// "initial_att": 10,
// "initial_crt": 0,
// "initial_cd": 0,
// "coefficient_att": 1,
// "coefficient_crt": 20,
// "coefficient_cd": 50,
// "initial_coin1": 200,
// "initial_coin2": 200,
// "initial_coin3": 200,
// "coefficient_coin1": 75,
// "coefficient_coin2": 30,
// "coefficient_coin3": 30
// },
//玩家等级表
export interface IRoleLevelData {
/**编号 */
id: number;
/**等级 */
stage: number;
/**经验值 */
initial_att: number;
initial_crt: number;
initial_cd: number;
coefficient_att: number;
coefficient_crt: number;
coefficient_cd: number;
/**初始金币1 */
initial_coin1: number;
/**初始金币2 */
initial_coin2: number;
/**初始金币3 */
initial_coin3: number;
/**金币1系数 */
coefficient_coin1: number;
/**金币2系数 */
coefficient_coin2: number;
/**金币3系数 */
coefficient_coin3: number;
}
//角色升级奖励
export interface IRoleLevelUpData {
/**编号 */
id: number;
/**等级 */
level: number;
/**类型 */
type: number;
/**等级 */
rank: string;
/**道具ID */
prop_id: number;
/**数量 */
num: number;
}
export interface ICdkData {
/**编号 */
id: number;
/**CDK */
CDK: string;
/**奖励 */
reward: string;
}
export interface ITaskData {
/**编号 */
id: number;
/**描述 */
desc: string;
/**类型 */
type: number;
/**频率 */
freq: number;
/**参数 */
parameter: string;
/**奖励 */
reward: number;
/**位置 */
location: number;
}
export interface ITaskRewardData {
/**编号 */
id: number;
/**类型 */
type: number;
/**奖励 */
points: number;
/**名称 */
name: string;
/**道具ID */
Item_id: number;
/**数量 */
quantity: number;
}
/**技能乘区类型 */
export enum SkillMultiplyType {
/**暴击率 */
CritRate = 1,
/**暴击伤害 */
CritDamage = 2,
/**伤害 */
Damage = 3,
/**CD */
CD = 4,
/**范围 */
Range = 5,
/**数量 */
Number = 6,
/**连发 */
Fire = 7,
/**穿透 */
Penetration = 8,
/**伤害倍数1 */
DamageMultiple1 = 9,
/**伤害倍数2 */
DamageMultiple2 = 10,
/**伤害倍数3 */
DamageMultiple3 = 11,
}