Merge branch 'feature/equips'
This commit is contained in:
@@ -131,7 +131,7 @@ export const GUILD_ROUTE_OPERATE = [
|
||||
{ route: 'guild.donateHandler.donate', operate: GUILD_OPERATE.DONATE, type: GUILD_AUTH_CHECK_TYPE.CHECK_SELF },
|
||||
{ route: 'guild.donateHandler.receiveBox', operate: GUILD_OPERATE.DONATE, type: GUILD_AUTH_CHECK_TYPE.CHECK_SELF },
|
||||
{ route: 'guild.guildRefineHandler.getRefine', operate: GUILD_OPERATE.REFINE, type: GUILD_AUTH_CHECK_TYPE.CHECK_SELF },
|
||||
{ route: 'guild.guildRefineHandler.refineEquip', operate: GUILD_OPERATE.REFINE, type: GUILD_AUTH_CHECK_TYPE.CHECK_SELF },
|
||||
{ route: 'guild.guildRefineHandler.refine', operate: GUILD_OPERATE.REFINE, type: GUILD_AUTH_CHECK_TYPE.CHECK_SELF },
|
||||
{ route: 'guild.guildRefineHandler.assistRefine', operate: GUILD_OPERATE.ASSIST_REFINE, type: GUILD_AUTH_CHECK_TYPE.CHECK_SELF },
|
||||
{ route: 'guild.guildTrainHandler.getTrainInstance', operate: GUILD_OPERATE.TRAIN, type: GUILD_AUTH_CHECK_TYPE.CHECK_SELF },
|
||||
{ route: 'guild.guildTrainHandler.getTrainReports', operate: GUILD_OPERATE.TRAIN, type: GUILD_AUTH_CHECK_TYPE.CHECK_SELF },
|
||||
|
||||
@@ -21,6 +21,14 @@ export enum HERO_SYSTEM_TYPE {
|
||||
TITLE = 18, // 爵位
|
||||
TERAPH = 19, // 神像强化
|
||||
TERAPH_UP = 20, // 神像升级
|
||||
COMPOSE_EQUIP = 21, // 合成装备
|
||||
EQUIP_STRENGTH = 22, // 装备强化
|
||||
EQUIP_QUALITY = 23, // 装备升品
|
||||
EQUIP_STAR = 24, // 装备升星
|
||||
EQUIP_JEWEL = 25, // 装备装上or卸下天晶石
|
||||
EQUIP_STONE = 26, // 装备装上or卸下地玉石
|
||||
JEWEL_RESET_RANDSE = 27, // 天晶石洗练
|
||||
JEWEL_QUENCH = 28, // 天晶石淬炼
|
||||
};
|
||||
|
||||
// 武将上限
|
||||
|
||||
@@ -36,6 +36,7 @@ export const CONSUME_TYPE = {
|
||||
GIFT_PACKAGE: 14, // 礼包
|
||||
AP: 15, // 回复体力道具
|
||||
DICE: 16, // 骰子
|
||||
DRAWING: 17, // 图纸
|
||||
};
|
||||
|
||||
export enum ROLE_TERAPH {
|
||||
@@ -92,16 +93,17 @@ export const ITEM_TABLE = {
|
||||
ITEM: 'item',
|
||||
ROLE: 'role',
|
||||
HERO: 'hero',
|
||||
SKIN: 'skin'
|
||||
SKIN: 'skin',
|
||||
JEWEL: 'jewel',
|
||||
}
|
||||
|
||||
const itid_array = [
|
||||
{ id: 1, name: '神兵', table: 'equip', type: EQUIP_TYPE.WEAPON, equipJewel: JEWEL_TYPE.WEAPON },
|
||||
{ id: 2, name: '宝甲', table: 'equip', type: EQUIP_TYPE.CLOTHES, equipJewel: JEWEL_TYPE.CLOTHES },
|
||||
{ id: 3, name: '冠冕', table: 'equip', type: EQUIP_TYPE.SHOES, equipJewel: JEWEL_TYPE.CAP },
|
||||
{ id: 4, name: '行具', table: 'equip', type: EQUIP_TYPE.CAP, equipJewel: JEWEL_TYPE.SHOES },
|
||||
{ id: 5, name: '典籍', table: 'equip', type: EQUIP_TYPE.BOOK, equipJewel: JEWEL_TYPE.BOOK },
|
||||
{ id: 6, name: '饰品', table: 'equip', type: EQUIP_TYPE.ACCESSORY, equipJewel: JEWEL_TYPE.ACCESSORY },
|
||||
{ id: 1, name: '神兵', table: 'equip', type: EQUIP_TYPE.WEAPON, equipJewel: JEWEL_TYPE.WEAPON }, //
|
||||
{ id: 2, name: '宝甲', table: 'equip', type: EQUIP_TYPE.CLOTHES, equipJewel: JEWEL_TYPE.CLOTHES }, //
|
||||
{ id: 3, name: '冠冕', table: 'equip', type: EQUIP_TYPE.SHOES, equipJewel: JEWEL_TYPE.CAP }, //
|
||||
{ id: 4, name: '行具', table: 'equip', type: EQUIP_TYPE.CAP, equipJewel: JEWEL_TYPE.SHOES }, //
|
||||
{ id: 5, name: '典籍', table: 'equip', type: EQUIP_TYPE.BOOK, equipJewel: JEWEL_TYPE.BOOK }, //
|
||||
{ id: 6, name: '饰品', table: 'equip', type: EQUIP_TYPE.ACCESSORY, equipJewel: JEWEL_TYPE.ACCESSORY }, //
|
||||
|
||||
{ id: 24, name: '消耗品', table: 'item', type: CONSUME_TYPE.CONSUME },
|
||||
|
||||
@@ -117,22 +119,22 @@ const itid_array = [
|
||||
{ id: 27, name: '货币', table: 'role', isCurrency: true },
|
||||
{ id: 28, name: '藏宝图', table: 'item', type: CONSUME_TYPE.BLUEPRT },
|
||||
|
||||
{ id: 29, name: '礼器', table: 'equip', type: EQUIP_TYPE.ACCESSORY },
|
||||
{ id: 30, name: '宝甲', table: 'equip', type: EQUIP_TYPE.CLOTHES },
|
||||
{ id: 31, name: '名驹', table: 'equip', type: EQUIP_TYPE.SHOES },
|
||||
{ id: 32, name: '典籍', table: 'equip', type: EQUIP_TYPE.BOOK },
|
||||
{ id: 33, name: '神兵', table: 'equip', type: EQUIP_TYPE.WEAPON },
|
||||
{ id: 29, name: '礼器', table: 'equip', type: EQUIP_TYPE.ACCESSORY }, //
|
||||
{ id: 30, name: '宝甲', table: 'equip', type: EQUIP_TYPE.CLOTHES }, //
|
||||
{ id: 31, name: '名驹', table: 'equip', type: EQUIP_TYPE.SHOES }, //
|
||||
{ id: 32, name: '典籍', table: 'equip', type: EQUIP_TYPE.BOOK }, //
|
||||
{ id: 33, name: '神兵', table: 'equip', type: EQUIP_TYPE.WEAPON }, //
|
||||
{ id: 34, name: '代币', table: 'item', type: CONSUME_TYPE.POINT },
|
||||
{ id: 53, name: '武将招募券', table: 'item', type: CONSUME_TYPE.POINT },
|
||||
{ id: 39, name: '时装', table: 'skin', type: CONSUME_TYPE.SKIN },
|
||||
{ id: 40, name: '装备碎片', table: 'item', type: CONSUME_TYPE.PIECE },
|
||||
{ id: 41, name: '图纸', table: 'item', type: CONSUME_TYPE.CONSUME },
|
||||
{ id: 41, name: '图纸', table: 'item', type: CONSUME_TYPE.DRAWING },
|
||||
{ id: 42, name: '神兵宝石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 43, name: '宝甲宝石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 44, name: '免冠宝石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 45, name: '足具宝石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 46, name: '礼器宝石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 47, name: '典籍宝石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 46, name: '礼器宝石', table: 'item', type: CONSUME_TYPE.JEWEL }, //
|
||||
{ id: 47, name: '典籍宝石', table: 'item', type: CONSUME_TYPE.JEWEL }, //
|
||||
{ id: 48, name: '灵玄石', table: 'item', type: CONSUME_TYPE.JEWEL },
|
||||
{ id: 49, name: '玩家好感道具', table: 'item', type: CONSUME_TYPE.FRIEND_FAVOUR },
|
||||
{ id: 50, name: '形象', table: 'role', type: CONSUME_TYPE.HEAD },
|
||||
@@ -141,6 +143,10 @@ const itid_array = [
|
||||
{ id: 55, name: '回复体力道具', table: 'item', type: CONSUME_TYPE.AP },
|
||||
{ id: 56, name: '骰子', table: 'item', type: CONSUME_TYPE.DICE },
|
||||
{ id: 58, name: '主公经验', table: 'role' },
|
||||
{ id: 59, name: '武器天晶石', table: 'jewel' },
|
||||
{ id: 60, name: '衣服天晶石', table: 'jewel' },
|
||||
{ id: 61, name: '头饰天晶石', table: 'jewel' },
|
||||
{ id: 62, name: '行具天晶石', table: 'jewel' },
|
||||
];
|
||||
|
||||
export const ITID = new Map<number, { id: number, name: string, table: string, type?: number, isCurrency?: boolean, equipJewel?: number }>();
|
||||
@@ -205,15 +211,6 @@ export enum QUALITY_TYPE {
|
||||
export const GOOD_QUALITY = [QUALITY_TYPE.BLUE, QUALITY_TYPE.PURPLE, QUALITY_TYPE.ORANGE, QUALITY_TYPE.RED, QUALITY_TYPE.GOLD];
|
||||
export const COM_BTL_QUALITY = [QUALITY_TYPE.BLUE, QUALITY_TYPE.PURPLE, QUALITY_TYPE.ORANGE, QUALITY_TYPE.RED];
|
||||
|
||||
// 各品质随机属性条数 quality => number
|
||||
export const RANDOM_SE_COUNT = new Map<number, number>([
|
||||
[QUALITY_TYPE.BLUE, 0],
|
||||
[QUALITY_TYPE.PURPLE, 1],
|
||||
[QUALITY_TYPE.ORANGE, 2],
|
||||
[QUALITY_TYPE.RED, 3],
|
||||
[QUALITY_TYPE.GOLD, 4]
|
||||
]);
|
||||
|
||||
|
||||
export enum HERO_QUALITY_TYPE {
|
||||
BLUE = 1, // 蓝将
|
||||
|
||||
@@ -49,4 +49,4 @@ export enum FRIEND_SHIP_SELECT {
|
||||
GET_FRIEND_VALUE = 'friendValue friendLv'
|
||||
}
|
||||
|
||||
export const ENTERY_ROLE_PICK = ['roleId', 'roleName', 'serverId', 'ce', 'topLineupCe', 'coin', 'lv', 'exp', 'vLv', 'gold', 'heros', 'equips', 'consumeGoods', 'title', 'teraphs', 'showLineup', 'heads', 'head', 'frames', 'frame', 'spines', 'spine', 'hasGuild', 'guildCode', 'todayZeroPoint', 'apJson', 'skins', 'totalPay', 'guide', 'hasInit', 'renameCnt', 'totalCost', 'guildName'];
|
||||
export const ENTERY_ROLE_PICK = ['roleId', 'roleName', 'serverId', 'ce', 'topLineupCe', 'coin', 'lv', 'exp', 'vLv', 'gold', 'heros', 'jewels', 'consumeGoods', 'title', 'teraphs', 'showLineup', 'heads', 'head', 'frames', 'frame', 'spines', 'spine', 'hasGuild', 'guildCode', 'todayZeroPoint', 'apJson', 'skins', 'totalPay', 'guide', 'hasInit', 'renameCnt', 'totalCost', 'guildName'];
|
||||
@@ -38,6 +38,7 @@ export const COUNTER = {
|
||||
GM_GROUP: { name: 'gmgroup', def: 1 },
|
||||
HID: { name: 'hid', def: 10000 },
|
||||
EID: { name: 'eid', def: 1 },
|
||||
JEWEL_ID: { name: 'jid', def: 1 },
|
||||
ROLE: { name: 'role', def: 1 },
|
||||
ACTIVITY: { name: 'aid', def: 1 },
|
||||
ACTIVITY_GROUP: { name: 'agid', def: 1 },
|
||||
@@ -485,6 +486,15 @@ export const FILENAME = {
|
||||
DIC_GUILD_WISH_REWARD: 'dic_army_wishReward',
|
||||
DIC_API: 'dic_api',
|
||||
DIC_SERVER_CONST: 'server_const',
|
||||
DIC_EQUIP: 'dic_zyz_equip',
|
||||
DIC_EQUIP_SUIT: 'dic_zyz_equipSuit',
|
||||
DIC_EQUIP_STRENGTH: 'dic_zyz_equipStrength',
|
||||
DIC_EQUIP_QUALITY: 'dic_zyz_equipQuality',
|
||||
DIC_EQUIP_STAR: 'dic_zyz_equipStar',
|
||||
DIC_EQUIP_QUALITY_EXTRA: 'dic_zyz_equipQuality_extra',
|
||||
DIC_JEWEL: 'dic_zyz_jewel',
|
||||
DIC_STONE: 'dic_zyz_stone',
|
||||
DIC_JEWEL_CONDITION: 'dic_zyz_jewel_condition',
|
||||
}
|
||||
|
||||
export const WAR_RELATE_TABLES = [
|
||||
@@ -699,10 +709,10 @@ export const GACHA_TO_FLOOR = new Map([
|
||||
export enum GACHA_CONTENT_TYPE {
|
||||
HERO = 1, // 武将 param为武将品质
|
||||
HERO_PIECE = 2, // 武将碎片 武将品质
|
||||
BLUEPRT = 3, // 藏宝图 藏宝图品质
|
||||
// BLUEPRT = 3, // 藏宝图 藏宝图品质
|
||||
JEWEL = 4, // 宝石 宝石等级
|
||||
TERAPH_MATERIAL = 5, // 强化神像用的材料 材料物品id
|
||||
SUIT_PAPER = 6, // 套装图纸
|
||||
// SUIT_PAPER = 6, // 套装图纸
|
||||
}
|
||||
|
||||
export const GACHA_OCCUPY_HID = 9999; // 抽卡里占位的武将
|
||||
@@ -925,6 +935,9 @@ export enum ITEM_CHANGE_REASON {
|
||||
GET_HERO_UNLOCK_SKIN = 134, // 获得武将解锁皮肤
|
||||
AP_RECOVERY = 135, // 自然恢复体力
|
||||
LV_UP = 136, // 升级恢复
|
||||
EQUIP_QUALITYUP = 137, // 装备升品
|
||||
EQUIP_STARUP = 138, // 装备升星
|
||||
COMPOSE_STONE = 139, // 合成地玉石
|
||||
}
|
||||
|
||||
export enum TA_EVENT {
|
||||
|
||||
@@ -194,6 +194,7 @@ export const STATUS = {
|
||||
GUILD_PAY_CONDITION: { code: 20932, simStr: '充值金额不足' },
|
||||
GUILD_USER_IS_LEADER: { code: 20933, simStr: '该成员已经是团长' },
|
||||
GUILD_DONATE_LV_NOT_ENOUGH: { code: 20934, simStr: '捐献所等级不足' },
|
||||
GUILD_EQUIP_PRODUCE_LV_NOT_ENOUGH: { code: 20935, simStr: '炼器堂等级不足' },
|
||||
|
||||
GUILD_SCRIPT_IS_OPENED_TODAY: { code: 20950, simStr: '今日已开启过演武场' },
|
||||
GUILD_SCRIPT_NOT_OPENED: { code: 20951, simStr: '演武场未开启' },
|
||||
@@ -208,7 +209,7 @@ export const STATUS = {
|
||||
GUILD_TRAIN_LEVEL_IS_COMPLETE: { code: 20960, simStr: '试炼已经进阶' },
|
||||
GUILD_BUY_TRAIN_COUNT_REACH_MAX: { code: 20961, simStr: '训练场购买挑战次数以达到上线' },
|
||||
GUILD_TRAIN_IS_RESETED: { code: 20962, simStr: '军团训练场已经重置' },
|
||||
GUILD_NOT_REFINE_THE_EQUIP: { code: 20963, simStr: '军团不能研发次装备' },
|
||||
GUILD_CANNOT_REFINE_THIS: { code: 20963, simStr: '军团不能兑换此图纸' },
|
||||
GUILD_LIGHT_UP_THE_SCIENCETREE: { code: 20964, simStr: '军团已经点亮此科技' },
|
||||
GUILD_SCIENCETREE_IS_RUNNING: { code: 20965, simStr: '军团正在进行研发,不能点亮' },
|
||||
GUILD_IS_ASSISTED_SCIENCETREE: { code: 20966, simStr: '玩家已经协助过该科技树' },
|
||||
@@ -221,6 +222,7 @@ export const STATUS = {
|
||||
GUILD_TRAIN_BOX_IS_GOT: { code: 20973, simStr: '玩家已经领取该试炼宝箱' },
|
||||
GUILD_SCRIPT_ENCOURGE_NOT_ENOUGH: { code: 20974, simStr: '鼓舞次数达到上限' },
|
||||
GUILD_CANNOT_INVITE: { code: 20975, simStr: '该玩家已经加入军团或该玩家不同服' },
|
||||
GUILD_REFINE_CNT_MAX: { code: 20976, simStr: '兑换此图纸品质达到上限' },
|
||||
|
||||
GUILD_LOT_NOT_FOUND: { code: 21001, simStr: '拍品未找到' },
|
||||
LOT_OFFER_SERIAL: { code: 21002, simStr: '不能连续出价' },
|
||||
@@ -300,16 +302,36 @@ export const STATUS = {
|
||||
EQUIP_HOLE_NOT_FIND: { code: 30504, simStr: '装备孔不存在' },
|
||||
EQUIP_HOLE_IS_DUG: { code: 30505, simStr: '装备已经打过孔' },
|
||||
EQUIP_HOLE_IS_NOT_DUG: { code: 30506, simStr: '装备未打过孔' },
|
||||
JEWEL_IS_NOT_FIND: { code: 30507, simStr: '宝石不存在' },
|
||||
JEWEL_IS_NOT_FIND: { code: 30507, simStr: '天晶石不存在' },
|
||||
EQUIP_NOT_FILL_HOLE: { code: 30508, simStr: '未穿戴宝石' },
|
||||
EQUIP_NOT_EQUIPED_HERO: { code: 30509, simStr: '装备不能被该武将穿戴' },
|
||||
EQUIP_LEVEL_LIMIT: { code: 30510, simStr: '装备穿戴等级限制' },
|
||||
EQUIP_NOT_MATCH_JEWEL: { code: 30511, simStr: '装备不能镶嵌该宝石' },
|
||||
EQUIP_NOT_MATCH_JEWEL: { code: 30511, simStr: '装备不能镶嵌该天晶石' },
|
||||
EQUIP_QUENCH_ERR: { code: 30512, simStr: '该装备不能再淬火或材料不足' },
|
||||
EQUIP_REFINE_ERR: { code: 30513, simStr: '该装备等级不足或材料不足' },
|
||||
EQUIP_RESTRENGTHEN_NOT_PREVIEW: { code: 30514, simStr: '该装备未预览洗练值' },
|
||||
EQUIP_QUENCH_MAX: { code: 30515, simStr: '该装备不能再淬火' },
|
||||
EQUIP_DECOMPOSE_IS_UPLIMIT: { code: 30516, simStr: '装备分解数量已达上限' },
|
||||
EQUIP_DECOMPOSE_IS_UPLIMIT: { code: 30516, simStr: '分解数量已达上限' },
|
||||
EQUIP_HAS_COMPOSE: { code: 30517, simStr: '该装备已合成' },
|
||||
EQUIP_QUALITY_MAX: { code: 30518, simStr: '该装备已升品到最高' },
|
||||
EQUIP_STAR_MAX: { code: 30519, simStr: '该装备已升星到最高' },
|
||||
EQUIP_QUALITY_NOT_ENOUGH: { code: 30520, simStr: '该装备品质不足' },
|
||||
EQUIP_QUALITYSTAGE_IS_MAX: { code: 30521, simStr: '该装备已到该品质下最高,请升品' },
|
||||
EQUIP_STARSTAGE_IS_MAX: { code: 30522, simStr: '该装备已到该星级下最高,请升星' },
|
||||
JEWEL_HAS_SUIT: { code: 30523, simStr: '该装备已镶嵌该天晶石了' },
|
||||
JEWEL_NOT_SUIT: { code: 30524, simStr: '该装备未镶嵌天晶石' },
|
||||
STONE_HAS_SUIT: { code: 30525, simStr: '该装备该槽已镶嵌相同的地玉石了' },
|
||||
STONE_NOT_SUIT: { code: 30526, simStr: '该装备该槽未镶嵌地玉石' },
|
||||
STONE_CANNOT_SUIT: { code: 30527, simStr: '该装备不可装备该地玉石' },
|
||||
JEWEL_NOT_FOUND: { code: 30528, simStr: '未找到该天晶石' },
|
||||
JEWEL_HAVE_NO_RANDSE: { code: 30529, simStr: '天晶石上无随机属性' },
|
||||
JEWEL_DUPLICATE_LOCK: { code: 30530, simStr: '随机属性不可重复锁定' },
|
||||
JEWEL_NOT_PREVIEW: { code: 30531, simStr: '该天晶石未预览洗练值' },
|
||||
JEWEL_HAS_CHOOSEN_QUENCH: { code: 30532, simStr: '每个天晶石只能选择一个词条淬炼' },
|
||||
JEWEL_NOT_CHOOSEN_QUENCH: { code: 30533, simStr: '请选择一个淬炼词条' },
|
||||
JEWEL_HAVE_NO_CUR_RANDSE: { code: 30534, simStr: '该天晶石上未找到该属性' },
|
||||
JEWEL_IS_EQUIPED: { code: 30535, simStr: '该天晶石被装备中无法分解' },
|
||||
|
||||
//全局养成30600-30699
|
||||
ROLE_REACH_MAX_TITLE_LEVEL: { code: 30600, simStr: '玩家已达到最高的爵位' },
|
||||
ROLE_TERAPH_NOT_STRENGTHEN: { code: 30601, simStr: '材料不足或玩家神像不能强化' },
|
||||
|
||||
@@ -143,9 +143,9 @@ export default class ComBattleTeam extends BaseModel {
|
||||
@prop({ required: true })
|
||||
blueprtId: number;
|
||||
|
||||
// 藏宝图品质
|
||||
// 藏宝图品阶,用来匹配
|
||||
@prop({ required: true })
|
||||
quality: number;
|
||||
lv: number;
|
||||
|
||||
// 战斗状态 0:未开始,1:已开始,2:胜利,3:失败
|
||||
@prop({ required: true, default: 0 })
|
||||
@@ -166,10 +166,6 @@ export default class ComBattleTeam extends BaseModel {
|
||||
@prop({ required: true, default: 1 })
|
||||
roleCnt: number;
|
||||
|
||||
// 藏宝图等级所处范围,用来匹配
|
||||
@prop({ required: true, default: 1 })
|
||||
lvRange: number;
|
||||
|
||||
// 单个 boss 血量状态
|
||||
@prop({ required: false, type: BossHp, default: [] })
|
||||
bossHpArr: BossHp[];
|
||||
@@ -293,9 +289,9 @@ export default class ComBattleTeam extends BaseModel {
|
||||
return team;
|
||||
}
|
||||
|
||||
public static async getOtherTeamByQualityAndSt(roleId: string, qualityArr: number[], status: number, lvRange: number, ce = 0, pub = true, cntLmt = 2, lean = true) {
|
||||
public static async getOtherTeamByLvAndSt(roleId: string, lv: number, status: number, ce = 0, pub = true, cntLmt = 2, lean = true) {
|
||||
const curTime = new Date(Date.now() - 10 * 60 * 1000); // 10分钟之前
|
||||
const team: ComBattleTeamType[] = await ComBattleTeamModel.find({quality: {$in: qualityArr}, status, lvRange, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean);
|
||||
const team: ComBattleTeamType[] = await ComBattleTeamModel.find({ lv, status, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean);
|
||||
return team;
|
||||
}
|
||||
|
||||
@@ -314,11 +310,8 @@ export default class ComBattleTeam extends BaseModel {
|
||||
return teams;
|
||||
}
|
||||
|
||||
public static async getAssistTeamsByTime(roleId: string, qualityArr?: number[], time?: Date, isAssist?: boolean, lean = true) {
|
||||
public static async getAssistTeamsByTime(roleId: string, time?: Date, isAssist?: boolean, lean = true) {
|
||||
let query = {roleIds: roleId, status: {$in: [0, 1, 2]}}; // 失败不计入助战
|
||||
if (qualityArr) {
|
||||
query = Object.assign(query, {quality: {$in: qualityArr}});
|
||||
}
|
||||
if (time) {
|
||||
query = Object.assign(query, {createdAt: {$gte: time}});
|
||||
}
|
||||
|
||||
@@ -1,234 +0,0 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
|
||||
import { COUNTER } from '../consts';
|
||||
import { CounterModel } from './Counter';
|
||||
import { HeroModel } from './Hero';
|
||||
import { RoleModel } from './Role';
|
||||
import { SearchEquipParam } from '../domain/backEndField/search';
|
||||
|
||||
export class RandSe {
|
||||
@prop({ required: true })
|
||||
id: number; // 随机属性位置id
|
||||
@prop({ required: true })
|
||||
seid: number; // 随机属性池id
|
||||
@prop({ required: true })
|
||||
rand: number; // 随机属性内需要随机的值
|
||||
@prop({ required: true })
|
||||
locked: boolean; // 洗炼是否锁定
|
||||
}
|
||||
|
||||
export class Holes {
|
||||
@prop({ required: true })
|
||||
id: number; // 孔的id
|
||||
@prop({ required: true })
|
||||
isOpen: boolean; // 是否开孔
|
||||
@prop({ required: true })
|
||||
jewel: number; // 装备的宝石id
|
||||
}
|
||||
|
||||
export class RandMain {
|
||||
@prop({ required: true })
|
||||
id: number; // 随机属性位置id
|
||||
@prop({ required: true })
|
||||
rand: number; // 随机属性内需要随机的值,扩大100倍
|
||||
}
|
||||
|
||||
@index({ roleId: 1, hid: 1, id: 1 })
|
||||
@index({ seqId: 1 })
|
||||
@modelOptions({ schemaOptions: { id: false } })
|
||||
export default class Equip extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
roleId: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
roleName: string; // 角色名称
|
||||
|
||||
@prop({ required: true })
|
||||
seqId: number; // 装备表自增 id
|
||||
@prop({ required: true })
|
||||
id: number; // 装备 id
|
||||
@prop({ required: true })
|
||||
name: string; // 装备名称
|
||||
@prop({ required: false, default: 0 })
|
||||
hid: number; // 装备此装备的武将 id
|
||||
@prop({ required: false, default: 0 })
|
||||
ePlaceId: number; // 武将装备的部位
|
||||
@prop({ required: false, default: 1 })
|
||||
count: number; // 装备数量
|
||||
|
||||
@prop({ required: true, default: 1 })
|
||||
quality: number; // 品质
|
||||
@prop({ required: true, default: 0 })
|
||||
suitId: number; // 套装id
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
randRange: number; // 固定属性随机值 // TODO 废弃字段,客户端改完之前暂时保留
|
||||
@prop({ required: false, type: RandMain, default: [], _id: false })
|
||||
randMain: RandMain[]; // 主属性随机
|
||||
@prop({ required: true, default: 0 })
|
||||
grade: number; // 品相等级
|
||||
@prop({ required: false, type: RandSe, default: [], _id: false })
|
||||
randSe: RandSe[]; // 强化随机属性
|
||||
@prop({ required: true, type: Holes, default: [], _id: false })
|
||||
holes: Holes[];
|
||||
@prop({ required: false, type: RandSe, default: [], _id: false })
|
||||
previewRandSe: RandSe[]; // 强化随机属性预览
|
||||
|
||||
|
||||
public static async findbyRole(roleId: string, lean = true) {
|
||||
const equips: EquipType[] = await EquipModel.find({ roleId }).lean(lean);
|
||||
return equips;
|
||||
}
|
||||
|
||||
public static async findbySeqId(seqId: number, select?: string ) {
|
||||
const equip: EquipType = await EquipModel.findOne({ seqId }).select(select).lean();
|
||||
return equip;
|
||||
}
|
||||
|
||||
public static async createEquip(equipInfo: equipUpdate, lean = true) {
|
||||
const seqId = await CounterModel.getNewCounter(COUNTER.EID);
|
||||
|
||||
const doc = new EquipModel();
|
||||
const update = Object.assign(doc.toJSON(), seqId, equipInfo);
|
||||
const equip: EquipType = await EquipModel.findOneAndUpdate({ seqId }, update, { upsert: true, new: true }).lean(lean);
|
||||
if (equipInfo.hid > 0) {
|
||||
await HeroModel.findOneAndUpdate(
|
||||
{ roleId: equipInfo.roleId, hid: equipInfo.hid, 'ePlace.id': equipInfo.ePlaceId },
|
||||
{ $set: { 'ePlace.$.equip': equip._id } },
|
||||
{ new: true }).lean(lean);
|
||||
}
|
||||
return equip;
|
||||
}
|
||||
|
||||
public static async createEquips(roleId: string, equipInfos: equipUpdate[]) {
|
||||
let result: EquipType[] = [];
|
||||
for(let equipInfo of equipInfos) {
|
||||
let equip = await this.createEquip(equipInfo);
|
||||
result.push(equip);
|
||||
}
|
||||
await RoleModel.increaseEquip(roleId, result.length);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async putOnOrOff(equipId: string, hid: number, lean = true) {
|
||||
const equip: EquipType = await EquipModel.findOneAndUpdate({ _id: equipId }, { hid }, { new: true }).lean(lean);
|
||||
return equip;
|
||||
}
|
||||
|
||||
|
||||
public static async findNotWearEquips(roleId: string) {
|
||||
const equips: EquipType[] = await EquipModel.find({ roleId, hid: 0 }).lean();
|
||||
return equips;
|
||||
}
|
||||
|
||||
public static async deleteAccount(roleId: string) {
|
||||
let result = await EquipModel.deleteMany({ roleId });
|
||||
return result;
|
||||
}
|
||||
public static async deleteEquips(roleId: string, ids: Array<number>) {
|
||||
let equips = await EquipModel.getEquips(roleId, ids);
|
||||
await EquipModel.deleteMany({ roleId, seqId: { $in: ids } });
|
||||
await RoleModel.findOneAndUpdate({ roleId }, { $inc: { equipCount: -1 * ids.length } }, { new: true });
|
||||
return equips;
|
||||
}
|
||||
|
||||
public static async getEquipsByID(ids: Array<string>) {
|
||||
let result = await EquipModel.find({ _id: { $in: ids } });
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async getEquips(roleId: string, ids: Array<number>) {
|
||||
let result: EquipType[] = await EquipModel.find({ roleId, seqId: { $in: ids } });
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async getEquip(seqId: number) {
|
||||
let equip: EquipType = await EquipModel.findOne({ seqId });
|
||||
return equip;
|
||||
}
|
||||
|
||||
public static async updateEquipInfo(seqId: number, equipUpdate: equipUpdate, lean = true) {
|
||||
delete equipUpdate._id;
|
||||
let result: EquipType = await EquipModel.findOneAndUpdate({ seqId }, { $set: equipUpdate }, { new: true }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async lock(roleId: string, seqId: number, id: number, lock: boolean) {
|
||||
let result: EquipType = await EquipModel.findOneAndUpdate({ roleId, seqId, 'randSe.id': id }, { $set: { 'randSe.$.locked': lock } }, { new: true, upsert: false }).select('seqId id randSe').lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateEquipInfobyObjectId(_id: string, equipUpdate: equipUpdate, lean = true) {
|
||||
delete equipUpdate._id;
|
||||
let result: EquipType = await EquipModel.findOneAndUpdate({ _id }, { $set: equipUpdate }, { new: true }).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async getEquipByObjectId(_id: string) {
|
||||
let equip: EquipType = await EquipModel.findOne({ _id });
|
||||
return equip;
|
||||
}
|
||||
|
||||
|
||||
public static async findByField(field: string, value?: number | string, select?: string) {
|
||||
let searchObj = {};
|
||||
if (field != 'all') {
|
||||
if (field == 'roleName') {
|
||||
searchObj['roleName'] = { $regex: new RegExp(value.toString(), 'i') }
|
||||
} else {
|
||||
searchObj[field] = value;
|
||||
}
|
||||
}
|
||||
//.select('uid tel username')
|
||||
const user: EquipType[] = await EquipModel.find(searchObj).select(select).lean();
|
||||
return user;
|
||||
}
|
||||
|
||||
public static async findListByHidAndRole(roleId: string, hid: number, select?: string) {
|
||||
let result: EquipType[] = await EquipModel.find({ roleId, hid }).select(select).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async getEquipsByIds(roleId: string, ids: Array<number>) {
|
||||
let result = await EquipModel.find({ roleId, id: { $in: ids } });
|
||||
return result;
|
||||
}
|
||||
|
||||
private static getSearchObj(form: SearchEquipParam) {
|
||||
let searchObj = {};
|
||||
if(form.roleId) searchObj['roleId'] = form.roleId;
|
||||
if(form.roleName) searchObj['roleName'] = { $regex: new RegExp(form.roleName.toString(), 'i') };
|
||||
if(form.id) searchObj['id'] = form.id;
|
||||
return searchObj
|
||||
}
|
||||
|
||||
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: SearchEquipParam = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
let sort = {};
|
||||
if(sortField && sortOrder) {
|
||||
if(sortOrder == 'ascend') {
|
||||
sort[sortField] = 1;
|
||||
} else if (sortOrder == 'descend') {
|
||||
sort[sortField] = -1;
|
||||
}
|
||||
}
|
||||
const result: EquipType[] = await EquipModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static async countByCondition(form: SearchEquipParam = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
const result = await EquipModel.count(searchObj);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const EquipModel = getModelForClass(Equip);
|
||||
|
||||
export interface EquipType extends Pick<DocumentType<Equip>, keyof Equip> {
|
||||
id: number;
|
||||
};
|
||||
export type equipUpdate = Partial<EquipType>; // 将所有字段变成可选项
|
||||
+1
-1
@@ -7,7 +7,7 @@ import { reduceCe } from '../pubUtils/util';
|
||||
import { gameData } from '../pubUtils/data';
|
||||
import { SearchGuildParam } from '../domain/backEndField/search';
|
||||
|
||||
class Structure {
|
||||
export class Structure {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
@prop({ required: true })
|
||||
|
||||
@@ -3,7 +3,7 @@ import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoos
|
||||
|
||||
export class ScienceTree {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
id: number;
|
||||
@prop({ required: true })
|
||||
endTime: number;//科技树研发成功结束事件,时间戳,小于当前时间,说明开发完成
|
||||
@prop({ required: true, default: [], type: String, _id: false})
|
||||
|
||||
+41
-25
@@ -1,8 +1,8 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, Ref, mongoose, DocumentType } from '@typegoose/typegoose';
|
||||
import Equip, { } from './Equip';
|
||||
// import Equip, { } from './Equip';
|
||||
import { CounterModel } from './Counter';
|
||||
import { COUNTER, EQUIP_TYPE, HERO_CE_RATIO } from '../consts';
|
||||
import { COUNTER, HERO_CE_RATIO } from '../consts';
|
||||
import { reduceCe } from '../pubUtils/util';
|
||||
import Skin from './Skin';
|
||||
import { SearchHeroParam } from '../domain/backEndField/search';
|
||||
@@ -71,30 +71,46 @@ export class HeroSkin {
|
||||
enable: boolean;
|
||||
}
|
||||
|
||||
export class Stone {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
@prop({ required: true })
|
||||
stone: number;
|
||||
}
|
||||
|
||||
export class EPlace {
|
||||
@prop({ required: true })
|
||||
id: number;
|
||||
@prop({ ref: Equip, type: mongoose.Schema.Types.ObjectId })
|
||||
equip: Ref<Equip>;
|
||||
@prop({ required: true })
|
||||
lv: number;
|
||||
equipId: number;
|
||||
@prop({ required: true })
|
||||
refineLv: number;
|
||||
}
|
||||
lv: number = 1;
|
||||
@prop({ required: true })
|
||||
quality: number = 1;
|
||||
@prop({ required: true })
|
||||
qualityStage: number = 0;
|
||||
@prop({ required: true })
|
||||
star: number = 0;
|
||||
@prop({ required: true })
|
||||
starStage: number = 0;
|
||||
@prop({ required: true, type: Stone, _id: false })
|
||||
stones: Stone[];
|
||||
@prop({ required: true })
|
||||
jewel: number = 0;
|
||||
|
||||
// 初始化
|
||||
function getInitialEplace() {
|
||||
let ePlace = new Array<EPlace>();
|
||||
for (let i = EQUIP_TYPE.START; i <= EQUIP_TYPE.END; i++) {
|
||||
let p = new EPlace();
|
||||
p.id = i;
|
||||
p.equip = null;
|
||||
p.lv = 0;
|
||||
p.refineLv = 1;
|
||||
|
||||
ePlace.push(p);
|
||||
getInitialStone? () {
|
||||
let result: Stone[] = [];
|
||||
for(let id = 1; id <= 3; id++) {
|
||||
result.push({ id, stone: 0 });
|
||||
}
|
||||
return result;
|
||||
}
|
||||
return ePlace;
|
||||
|
||||
constructor(id: number, equipId: number) {
|
||||
this.id = id;
|
||||
this.equipId = equipId;
|
||||
this.stones = this.getInitialStone();
|
||||
}
|
||||
}
|
||||
|
||||
@index({ roleId: 1, hid: 1 })
|
||||
@@ -167,7 +183,7 @@ export default class Hero extends BaseModel {
|
||||
@prop({ required: true, type: HeroSkin, default: [], _id: false })
|
||||
skins: HeroSkin[]; // 皮肤
|
||||
|
||||
@prop({ required: true, type: EPlace, default: getInitialEplace(), _id: false })
|
||||
@prop({ required: true, type: EPlace, default: [], _id: false })
|
||||
ePlace: EPlace[]; // 武将装备引用数组
|
||||
|
||||
public static async findByRole(roleId: string, sort: { field: string, sortBy: number }[] = [], select?: string, getters = false) {
|
||||
@@ -189,6 +205,11 @@ export default class Hero extends BaseModel {
|
||||
return hero;
|
||||
}
|
||||
|
||||
public static async checkEquipByQuality(roleId: string, quality: number) {
|
||||
const result = await HeroModel.exists({ roleId, 'ePlace.quality': { $gte: quality } });
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findMapByHidRange(hids: Array<number>, roleId: string, select?: string, getters = false) {
|
||||
const hero = await HeroModel.findByHidRange(hids, roleId, select, getters);
|
||||
let map = new Map<number, HeroType>();
|
||||
@@ -207,11 +228,6 @@ export default class Hero extends BaseModel {
|
||||
return hero;
|
||||
}
|
||||
|
||||
public static async findByHidAndRoleWithEquip(hid: number, roleId: string, lean = true) {
|
||||
const hero: HeroType = await HeroModel.findOne({ hid, roleId }).populate('ePlace.equip').lean(lean);
|
||||
return hero;
|
||||
}
|
||||
|
||||
public static async addEquip(roleId: string, hid: number, ePlaceId: number, equipId: string) {
|
||||
const hero: HeroType = await HeroModel.findOneAndUpdate(
|
||||
{ roleId, hid, 'ePlace.id': ePlaceId },
|
||||
|
||||
@@ -45,6 +45,11 @@ export default class Item extends BaseModel {
|
||||
return items;
|
||||
}
|
||||
|
||||
public static async findbyRoleAndGid(roleId: string, id: number, lean = true) {
|
||||
const items: ItemType = await ItemModel.findOne({ roleId, id }).select('id count type').lean(lean);
|
||||
return items;
|
||||
}
|
||||
|
||||
public static async increaseItem(roleId: string, id: number, count: number, itemInfo: { roleId: string, roleName: string, id: number, itemName: string, type: number, hid?: number }) {
|
||||
const doc = new ItemModel();
|
||||
const setOnInsert = Object.assign(doc.toJSON(), itemInfo);
|
||||
|
||||
@@ -0,0 +1,193 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType, modelOptions } from '@typegoose/typegoose';
|
||||
// import { COUNTER } from '../consts';
|
||||
// import { CounterModel } from './Counter';
|
||||
import { SearchJewelParam } from '../domain/backEndField/search';
|
||||
import { RoleModel } from './Role';
|
||||
import { CounterModel } from './Counter';
|
||||
import { COUNTER } from '../consts';
|
||||
import { HeroModel } from './Hero';
|
||||
|
||||
export class RandSe {
|
||||
@prop({ required: true })
|
||||
id: number; // 随机属性位置id
|
||||
@prop({ required: true })
|
||||
seid: number; // 随机属性池id
|
||||
@prop({ required: true })
|
||||
rand: number; // 随机属性内需要随机的值
|
||||
@prop({ required: true })
|
||||
locked: boolean = false; // 洗炼是否锁定
|
||||
|
||||
@prop({ required: false, default: false })
|
||||
quenched: boolean = false; // 是否淬炼了
|
||||
@prop({ required: false, default: 0 })
|
||||
quenchCnt: number = 0; // 淬炼次数
|
||||
|
||||
constructor(id: number, seid: number, rand: number) {
|
||||
this.id = id;
|
||||
this.seid = seid;
|
||||
this.rand = rand;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@index({ roleId: 1, hid: 1, id: 1 })
|
||||
@index({ seqId: 1 })
|
||||
@modelOptions({ schemaOptions: { id: false } })
|
||||
export default class Jewel extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
roleId: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
roleName: string; // 角色名称
|
||||
|
||||
@prop({ required: true })
|
||||
seqId: number; // 装备表自增 id
|
||||
@prop({ required: true })
|
||||
id: number; // 装备 id
|
||||
@prop({ required: true })
|
||||
name: string; // 装备名称
|
||||
@prop({ required: false, default: 0 })
|
||||
hid: number; // 装备此装备的武将 id
|
||||
@prop({ required: false, default: 0 })
|
||||
ePlaceId: number; // 武将装备的部位
|
||||
|
||||
@prop({ required: false, type: RandSe, default: [], _id: false })
|
||||
randSe: RandSe[]; // 强化随机属性
|
||||
@prop({ required: false, type: RandSe, default: [], _id: false })
|
||||
previewRandSe: RandSe[]; // 强化随机属性预览
|
||||
|
||||
public static async findbyRole(roleId: string, lean = true) {
|
||||
const jewels: JewelType[] = await JewelModel.find({ roleId }).lean(lean);
|
||||
return jewels;
|
||||
}
|
||||
|
||||
public static async findbyRoleAndHids(roleId: string, hids: number[]) {
|
||||
const jewels: JewelType[] = await JewelModel.find({ roleId, hid: { $in: hids } }).lean();
|
||||
return jewels;
|
||||
}
|
||||
|
||||
public static async findMapbyRoleAndHids(roleId: string, hids: number[]) {
|
||||
const jewels = await JewelModel.findbyRoleAndHids(roleId, hids);
|
||||
let map = new Map<number, JewelType>();
|
||||
for(let jewel of jewels) {
|
||||
map.set(jewel.seqId, jewel);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
public static async findbySeqId(seqId: number, select?: string ) {
|
||||
const jewel: JewelType = await JewelModel.findOne({ seqId }).select(select).lean();
|
||||
return jewel;
|
||||
}
|
||||
|
||||
public static async findbySeqIds(seqIds: number[], select?: string ) {
|
||||
const jewel: JewelType[] = await JewelModel.find({ seqId: { $in: seqIds } }).select(select).lean();
|
||||
return jewel;
|
||||
}
|
||||
|
||||
public static async createJewel(jewelInfo: jewelUpdate) {
|
||||
const seqId = await CounterModel.getNewCounter(COUNTER.JEWEL_ID);
|
||||
|
||||
const doc = new JewelModel();
|
||||
const update = Object.assign(doc.toJSON(), seqId, jewelInfo);
|
||||
const jewel: JewelType = await JewelModel.findOneAndUpdate({ seqId }, update, { upsert: true, new: true }).lean();
|
||||
if (jewelInfo.hid > 0) {
|
||||
await HeroModel.findOneAndUpdate(
|
||||
{ roleId: jewelInfo.roleId, hid: jewelInfo.hid, 'ePlace.id': jewelInfo.ePlaceId },
|
||||
{ $set: { 'ePlace.$.jewel': seqId } },
|
||||
{ new: true }).lean();
|
||||
}
|
||||
return jewel;
|
||||
}
|
||||
|
||||
public static async createJewels(roleId: string, jewelInfos: jewelUpdate[]) {
|
||||
let result: JewelType[] = [];
|
||||
for(let jewelInfo of jewelInfos) {
|
||||
let jewel = await this.createJewel(jewelInfo);
|
||||
result.push(jewel);
|
||||
}
|
||||
await RoleModel.increaseJewel(roleId, result.length);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async putOnOrOff(seqId: number, hid: number, ePlaceId: number) {
|
||||
let rec: JewelType = await JewelModel.findOneAndUpdate({ seqId }, { $set: { hid, ePlaceId } }, { new: true }).lean();
|
||||
return rec;
|
||||
}
|
||||
|
||||
public static async lock(seqId: number, id: number, lock: boolean) {
|
||||
let result: JewelType = await JewelModel.findOneAndUpdate({ seqId, 'randSe.id': id }, { $set: { 'randSe.$.locked': lock } }, { new: true }).select('seqId id randSe').lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async chooseQuench(seqId: number, id: number) {
|
||||
let result: JewelType = await JewelModel.findOneAndUpdate({ seqId, 'randSe.id': id }, { $set: { 'randSe.$.quenched': true } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async quench(seqId: number, isSuccess: boolean, rand: number) {
|
||||
if(isSuccess) {
|
||||
let result: JewelType = await JewelModel.findOneAndUpdate({ seqId, 'randSe.quenched': true }, { $set: { 'randSe.$.rand': rand } }, { new: true }).lean();
|
||||
return result;
|
||||
} else {
|
||||
let result: JewelType = await JewelModel.findOneAndUpdate({ seqId, 'randSe.quenched': true }, { $inc: { 'randSe.$.quenchCnt': 1 } }, { new: true }).lean();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public static async updateInfo(seqId: number, update: jewelUpdate) {
|
||||
let result: JewelType = await JewelModel.findOneAndUpdate({ seqId }, { $set: update }, {new: true}).lean();
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async deleteBySeqIds(roleId: string, seqIds: number[]) {
|
||||
let jewels = await JewelModel.findbySeqIds(seqIds);
|
||||
await JewelModel.deleteMany({ roleId, seqId: { $in: seqIds } });
|
||||
await RoleModel.increaseJewel(roleId, -1 * seqIds.length);
|
||||
return jewels;
|
||||
}
|
||||
|
||||
public static async deleteAccount(roleId: string) {
|
||||
let result = await JewelModel.deleteMany({ roleId });
|
||||
return result;
|
||||
}
|
||||
|
||||
private static getSearchObj(form: SearchJewelParam) {
|
||||
let searchObj = {};
|
||||
if(form.roleId) searchObj['roleId'] = form.roleId;
|
||||
if(form.roleName) searchObj['roleName'] = { $regex: new RegExp(form.roleName.toString(), 'i') };
|
||||
if(form.id) searchObj['id'] = form.id;
|
||||
return searchObj
|
||||
}
|
||||
|
||||
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: SearchJewelParam = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
let sort = {};
|
||||
if(sortField && sortOrder) {
|
||||
if(sortOrder == 'ascend') {
|
||||
sort[sortField] = 1;
|
||||
} else if (sortOrder == 'descend') {
|
||||
sort[sortField] = -1;
|
||||
}
|
||||
}
|
||||
const result: JewelType[] = await JewelModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static async countByCondition(form: SearchJewelParam = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
const result = await JewelModel.count(searchObj);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const JewelModel = getModelForClass(Jewel);
|
||||
|
||||
export interface JewelType extends Pick<DocumentType<Jewel>, keyof Jewel> {
|
||||
id: number;
|
||||
};
|
||||
export type jewelUpdate = Partial<JewelType>; // 将所有字段变成可选项
|
||||
+3
-4
@@ -215,7 +215,7 @@ export default class Role extends BaseModel {
|
||||
@prop({ required: true, default: [] })
|
||||
payRecord: PayRecord[]; // 支付记录
|
||||
@prop({ required: true, default: 0 })
|
||||
equipCount: number; // 装备数量
|
||||
jewelCount: number; // 装备数量
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
coin: number; // 总铜钱
|
||||
@@ -710,12 +710,11 @@ export default class Role extends BaseModel {
|
||||
}
|
||||
|
||||
// 装备上限
|
||||
public static async increaseEquip(roleId: string, count: number) {
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { equipCount: count } }, { new: true }).lean();
|
||||
public static async increaseJewel(roleId: string, count: number) {
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { jewelCount: count } }, { new: true }).lean();
|
||||
return role;
|
||||
}
|
||||
|
||||
|
||||
// 支付记录
|
||||
public static async increaseTotalPay(roleId: string, price: number) {
|
||||
const role: RoleType = await RoleModel.findOneAndUpdate({ roleId }, { $inc: { totalPay: price } }, { new: true }).lean();
|
||||
|
||||
+16
-2
@@ -28,6 +28,12 @@ class WishGood {
|
||||
donateNames: string[];
|
||||
}
|
||||
|
||||
class RefineRecord {
|
||||
@prop({ required: true })
|
||||
quality: number;
|
||||
@prop({ required: true })
|
||||
count: number;
|
||||
}
|
||||
|
||||
@index({ roleId: 1 })
|
||||
export default class UserGuild extends BaseModel {
|
||||
@@ -64,7 +70,7 @@ export default class UserGuild extends BaseModel {
|
||||
@prop({ required: true, type: Number, default: [] })
|
||||
receivedActive: number[];
|
||||
|
||||
@prop({ required: true, default: new Date(), select: false })
|
||||
@prop({ required: true, select: false })
|
||||
refTimeDaily: Date;
|
||||
//练兵场
|
||||
@prop({ required: true, default: 0 })
|
||||
@@ -94,7 +100,8 @@ export default class UserGuild extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
wishDntCnt: number;//今天许愿池捐献次数
|
||||
|
||||
@prop({ required: true, default: new Date() })
|
||||
// 演武台
|
||||
@prop({ required: true })
|
||||
refBossTime: Date;
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
@@ -103,6 +110,13 @@ export default class UserGuild extends BaseModel {
|
||||
@prop({ required: true, default: 0 })
|
||||
bossChallengeCnt: number;//今天挑战演舞台次数
|
||||
|
||||
// 炼器堂
|
||||
@prop({ required: true, type: RefineRecord })
|
||||
refineCnt: RefineRecord[];
|
||||
|
||||
@prop({ required: true })
|
||||
refRefineTime: Date;
|
||||
|
||||
public static async getMyGuild(roleId: string, select?: string) {
|
||||
|
||||
const myGuild: UserGuildType = await UserGuildModel.findOne({ roleId, status: USER_GUILD_STATUS.ON })
|
||||
|
||||
@@ -24,6 +24,12 @@ export interface SearchEquipParam {
|
||||
id?: number;
|
||||
}
|
||||
|
||||
export interface SearchJewelParam {
|
||||
roleId?: string;
|
||||
roleName?: string;
|
||||
id?: number;
|
||||
}
|
||||
|
||||
export interface SearchItemParam {
|
||||
roleId?: string;
|
||||
roleName?: string;
|
||||
|
||||
@@ -1,2 +1,29 @@
|
||||
import { ComBattleTeamParam } from './../../db/ComBattleTeam';
|
||||
export type MemComBtlTeam = ComBattleTeamParam & { bossCurHp: number; curRnd: number; bossHp: number };
|
||||
import { COM_TEAM_STATUS } from '../../consts';
|
||||
import { getBossHpByBlueprtId, getDicBlueprtById } from '../../pubUtils/data';
|
||||
import { transBossHpArr } from '../../services/battleService';
|
||||
import ComBattleTeam from './../../db/ComBattleTeam';
|
||||
export class MemComBtlTeam extends ComBattleTeam {
|
||||
bossCurHp: number;
|
||||
curRnd: number;
|
||||
bossHp: number;
|
||||
|
||||
constructor(teamCode: string, pub: boolean, blueprtId: number, capId: string, ceLimit: number) {
|
||||
super();
|
||||
const { lv } = getDicBlueprtById(blueprtId);
|
||||
this.lv = lv;
|
||||
const { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId);
|
||||
this.bossHpArr = transBossHpArr(bossHpArr);
|
||||
this.teamCode = teamCode;
|
||||
this.pub = pub;
|
||||
this.blueprtId = blueprtId;
|
||||
this.status = COM_TEAM_STATUS.DEFAULT;
|
||||
this.capId = capId;
|
||||
this.ceLimit = ceLimit;
|
||||
this.curRnd = 0;
|
||||
this.roleCnt = 1;
|
||||
this.timeout = false;
|
||||
this.bossCurHp = bossHpSum;
|
||||
this.bossHp = bossHpSum;
|
||||
this.blacklist = [];
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2,6 +2,9 @@ import { RoleType } from "../../db/Role";
|
||||
import { FriendShipType } from "../../db/FriendShip";
|
||||
import * as friendUtil from '../../pubUtils/friendUtil'
|
||||
import { FRIEND_RELATION_TYPE } from "../../consts";
|
||||
import { EPlace, HeroType, Stone } from "../../db/Hero";
|
||||
import { JewelType, RandSe } from "../../db/Jewel";
|
||||
import { reduceCe } from "../../pubUtils/util";
|
||||
|
||||
export class FriendParams {
|
||||
roleId: string;
|
||||
@@ -118,4 +121,102 @@ export class BlackListParam extends FriendParams {
|
||||
setOnline(isOnline: boolean) {
|
||||
this.isOnline = isOnline;
|
||||
}
|
||||
}
|
||||
|
||||
export class HeroDetailJewelRandSeParam {
|
||||
id: number;
|
||||
seid: number;
|
||||
rand: number;
|
||||
|
||||
constructor(randSe: RandSe) {
|
||||
this.id = randSe.id;
|
||||
this.seid = randSe.seid;
|
||||
this.rand = randSe.rand;
|
||||
}
|
||||
}
|
||||
|
||||
export class HeroDetailJewelParam {
|
||||
seqId: number;
|
||||
id: number;
|
||||
randSe: HeroDetailJewelRandSeParam[] = [];
|
||||
|
||||
constructor(jewel: JewelType) {
|
||||
this.seqId = jewel.seqId;
|
||||
this.id = jewel.id;
|
||||
for(let randSe of jewel.randSe) {
|
||||
this.randSe.push(new HeroDetailJewelRandSeParam(randSe));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class HeroDetailEplaceParam {
|
||||
id: number;
|
||||
equipId: number;
|
||||
lv: number;
|
||||
quality: number;
|
||||
star: number;
|
||||
stone: Stone[];
|
||||
jewelId: number;
|
||||
jewel: HeroDetailJewelParam = null;
|
||||
|
||||
constructor(equip: EPlace) {
|
||||
this.id = equip.id;
|
||||
this.equipId = equip.equipId;
|
||||
this.lv = equip.lv;
|
||||
this.quality = equip.quality;
|
||||
this.star = equip.star;
|
||||
this.stone = equip.stones;
|
||||
this.jewelId = equip.jewel;
|
||||
}
|
||||
|
||||
setJewel(jewel: JewelType) {
|
||||
this.jewel = new HeroDetailJewelParam(jewel);
|
||||
}
|
||||
}
|
||||
|
||||
export class HeroDetailParam {
|
||||
roleId: string;
|
||||
hid: number;
|
||||
ce: number;
|
||||
lv: number;
|
||||
star: number;
|
||||
colorStar: number;
|
||||
quality: number;
|
||||
job: number;
|
||||
skinId: number;
|
||||
ePlace: HeroDetailEplaceParam[] = [];
|
||||
attributes: {
|
||||
hp: number;
|
||||
atk: number;
|
||||
def: number;
|
||||
mdef: number;
|
||||
}
|
||||
|
||||
constructor(hero: HeroType) {
|
||||
this.roleId = hero.roleId;
|
||||
this.hid = hero.hid;
|
||||
this.ce = reduceCe(hero.ce);
|
||||
this.lv = hero.lv;
|
||||
this.star = hero.star;
|
||||
this.colorStar = hero.colorStar;
|
||||
this.quality = hero.quality;
|
||||
this.job = hero.job;
|
||||
this.skinId = hero.skinId;
|
||||
for(let equip of hero.ePlace) {
|
||||
this.ePlace.push(new HeroDetailEplaceParam(equip));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
setAttributes(attributes: {hp: number, atk: number, def: number, mdef: number}) {
|
||||
this.attributes = attributes;
|
||||
}
|
||||
|
||||
setJewels(jewels: Map<number, JewelType>) {
|
||||
for(let eplaceParam of this.ePlace) {
|
||||
if(jewels.has(eplaceParam.jewelId)) {
|
||||
eplaceParam.setJewel(jewels.get(eplaceParam.jewelId));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+120
-115
@@ -1,12 +1,9 @@
|
||||
import { dicHero, dicMyHeroes, loadHero } from "./dictionary/DicHero";
|
||||
import { dicGoods, blueprtWithQuality, blueprtWithQualityAndStar, dicJewel, figureCondition, loadGoods } from "./dictionary/DicGoods";
|
||||
import { dicBlueprtCompose, loadBlueprtCompose } from "./dictionary/DicBlueprtCompose";
|
||||
import { dicBlueprtPossibility, loadBlueprtPossibility } from "./dictionary/DicBlueprtPossibility";
|
||||
import { dicHero, loadHero } from "./dictionary/DicHero";
|
||||
import { dicGoods, figureCondition, loadGoods } from "./dictionary/DicGoods";
|
||||
import { dicDaily, loadDaily } from "./dictionary/DicDaily";
|
||||
import { dicEvent, dicEventList, loadEvent } from "./dictionary/DicEvent";
|
||||
import { dicExpedition, DicExpedition, loadExpedition } from "./dictionary/DicExpedition";
|
||||
import { dicExpeditionPoint, loadExpeditionPoint } from "./dictionary/DicExpeditionPoint";
|
||||
import { dicFuncSwitch, loadFuncSwitch } from "./dictionary/DicFuncSwitch";
|
||||
import { dicHeroSkill, loadHeroSkill } from "./dictionary/DicHeroSkill";
|
||||
import { dicJob, jobClassAndgrades, jobClassMaxGrades, loadJob } from "./dictionary/DicJob";
|
||||
import { dicKingExp, maxPlayerLv, loadKingExp } from "./dictionary/DicKingExp";
|
||||
@@ -18,7 +15,7 @@ import { dicTowerTask, loadTowerTask } from "./dictionary/DicTowerTask";
|
||||
import { dicWar, dicWarPvp, dicDailyWarByType, loadWar } from "./dictionary/DicWar";
|
||||
import { dicWarJson, loadWarJson } from "./dictionary/DicWarJson";
|
||||
import { dicXunbao, loadXunbao } from "./dictionary/DicXunbao";
|
||||
import { AUCTION_TIME, CONSUME_TYPE, ITID, SPECIAL_ATTR } from "../consts";
|
||||
import { AUCTION_TIME } from "../consts";
|
||||
import { dicFashions, dicFashionsByHeroId, loadFashions } from "./dictionary/DicFashions";
|
||||
import { friendShips, friendShipHidAandIds, loadFriendShip } from "./dictionary/DicFriendShip";
|
||||
import { maxFriendShipLv, dicFriendShipLevelMap, loadFriendShipLevel } from "./dictionary/DicFriendShipLevel";
|
||||
@@ -26,10 +23,6 @@ import { dicHeroQualityUp, loadHeroQualityUp } from "./dictionary/DicHeroQuality
|
||||
import { dicHeroStar, loadHeroStar } from "./dictionary/DicHeroStar";
|
||||
import { dicHeroWake, loadHeroWake } from "./dictionary/DicHeroWake";
|
||||
import { dicRandomEffectPool, loadRandomEffectPool } from './dictionary/DicRandomEffectPool';
|
||||
import { dicStrengthenCost, loadStrengthenCost } from './dictionary/DicStrengthenCost';
|
||||
import { dicRefine, loadRefine } from './dictionary/DicRefine';
|
||||
import { dicHeroEquip, loadHeroEquip } from './dictionary/DicHeroEquip';
|
||||
import { dicSuit, dicSuitByTypeAndLv, loadSuit } from './dictionary/DicSuit';
|
||||
import { dicTitle, loadTitle } from './dictionary/DicTitle';
|
||||
import { dicTeraph, loadTeraph } from './dictionary/DicTeraph';
|
||||
import { dicSchool, loadSchool } from './dictionary/DicSchool';
|
||||
@@ -87,8 +80,6 @@ import { dicServerName, loadServerName } from "./dictionary/DicServerName";
|
||||
import { dicAp, loadAp, dicApMaxLevel } from './dictionary/DicAp';
|
||||
import { dicApBuy, dicApMaxBuyTimes, loadApBuy } from "./dictionary/DicApBuy";
|
||||
import { dicKingExpRatio, loadKingExpRatio } from './dictionary/DicKingExpRatio';
|
||||
import { dicQuenchByQuality, dicQuenchRangeByQuality, dicQuenchRangeByQualityAndGrade, loadQuenchQuality } from './dictionary/DicQuenchQuality';
|
||||
import { dicQuenchConsume, loadQuenchConsume } from './dictionary/DicQuenchConsume';
|
||||
import { dicHoliday, loadHoliday } from './dictionary/DicHoliday';
|
||||
import { dicExpeditionSubAttr, loadExpeditionSubAttr } from './dictionary/DicExpeditionSubAttr';
|
||||
import { dicAuctionPool, loadAuctionReward } from './dictionary/DicAuctionReward';
|
||||
@@ -100,16 +91,22 @@ import { dicApiById, dicApiByUrl, loadApi } from './dictionary/DicApi';
|
||||
import { dicServerConst, loadServerConst } from './dictionary/DicServerConst';
|
||||
import { pick } from "underscore";
|
||||
import _ = require("underscore");
|
||||
import { dicEquipById, dicEquipIdByJobClassAndEplace, loadEquip } from "./dictionary/DicEquip";
|
||||
import { dicBlueprt, dicBlueprtByLv, dicJewel, loadJewel } from "./dictionary/DicJewel";
|
||||
import { dicStone, loadStone } from './dictionary/DicStone';
|
||||
import { dicEquipStrength, loadEquipStrength } from "./dictionary/DicEquipStrength";
|
||||
import { dicEquipQuality, dicEquipQualityIdByEquipIdAndPoint, loadEquipQuality } from "./dictionary/DicEquipQuality";
|
||||
import { dicEquipStar, dicEquipStarIdByEquipId, loadEquipStar } from './dictionary/DicEquipStar';
|
||||
import { dicEquipQualityExtra, loadEquipQualityExtra } from './dictionary/DicEquipQualityExtra';
|
||||
import { dicEquipSuit, dicEquipSuitByJobClass, loadEquipSuit } from "./dictionary/DicEquipSuit";
|
||||
import { dicJewelCondition, loadJewelCondition } from './dictionary/DicJewelCondition';
|
||||
|
||||
export const gameData = {
|
||||
blurprtCompose: dicBlueprtCompose,
|
||||
blueprtPossibility: dicBlueprtPossibility,
|
||||
daily: dicDaily,
|
||||
event: dicEvent,
|
||||
eventList: dicEventList,
|
||||
expedition: dicExpedition,
|
||||
expeditionPoint: dicExpeditionPoint,
|
||||
funcsSwitch: dicFuncSwitch,
|
||||
goods: dicGoods,
|
||||
hero: dicHero,
|
||||
heroQualityUp: dicHeroQualityUp,
|
||||
@@ -132,9 +129,6 @@ export const gameData = {
|
||||
xunbao: dicXunbao,
|
||||
btlBossHpSum: new Map<number, number>(),
|
||||
btlBossHp: new Map<number, Array<{ dataId: number, hp: number, actorId: number }>>(),
|
||||
blueprtToWar: new Map<number, number>(),
|
||||
blueprt: blueprtWithQuality,
|
||||
blueprtWithQualityAndStar: blueprtWithQualityAndStar,
|
||||
fashion: dicFashions,
|
||||
fashionBySkinId: dicFashionsByHeroId,
|
||||
friendShips: friendShips,
|
||||
@@ -142,12 +136,6 @@ export const gameData = {
|
||||
maxFriendShipLv: maxFriendShipLv,
|
||||
friendShipLevelMap: dicFriendShipLevelMap,
|
||||
randomEffectPool: dicRandomEffectPool,
|
||||
strengthenCost: dicStrengthenCost,
|
||||
refine: dicRefine,
|
||||
jewels: dicJewel,
|
||||
dicHeroEquip: dicHeroEquip,
|
||||
suit: dicSuit,
|
||||
suitByTypeAndLv: dicSuitByTypeAndLv,
|
||||
title: dicTitle,
|
||||
teraphs: dicTeraph,
|
||||
school: dicSchool,
|
||||
@@ -204,7 +192,6 @@ export const gameData = {
|
||||
shop: dicShop,
|
||||
shopItem: dicShopItem,
|
||||
shopList: dicShopList,
|
||||
dicMyHeroes: dicMyHeroes,
|
||||
rank: dicRank,
|
||||
generalRankReward: dicRankReward,
|
||||
taskType: dicTaskType,
|
||||
@@ -234,10 +221,6 @@ export const gameData = {
|
||||
apBuy: dicApBuy,
|
||||
apMaxBuyTimes: dicApMaxBuyTimes,
|
||||
kingExpRaio: dicKingExpRatio,
|
||||
quenchRangeByQuality: dicQuenchRangeByQuality,
|
||||
quenchRangeByQualityAndGrade: dicQuenchRangeByQualityAndGrade,
|
||||
quenchConsume: dicQuenchConsume,
|
||||
quenchByQuality: dicQuenchByQuality,
|
||||
equipAttributeRatio: new Map<number, number>(),
|
||||
ceRatio: new Array<{type: number, val: number}>(),
|
||||
holiday: dicHoliday,
|
||||
@@ -249,6 +232,21 @@ export const gameData = {
|
||||
apiById: dicApiById,
|
||||
apiByUrl: dicApiByUrl,
|
||||
serverConst: dicServerConst,
|
||||
equipById: dicEquipById,
|
||||
equipIdByJobAndEPlace: dicEquipIdByJobClassAndEplace,
|
||||
jewel: dicJewel,
|
||||
stone: dicStone,
|
||||
equipStrengthenCost: dicEquipStrength,
|
||||
equipQuality: dicEquipQuality,
|
||||
equipQualityIdByEquipIdAndPoint: dicEquipQualityIdByEquipIdAndPoint,
|
||||
equipStar: dicEquipStar,
|
||||
equipStarIdByEquipId: dicEquipStarIdByEquipId,
|
||||
equipQualityExtra: dicEquipQualityExtra,
|
||||
equipSuit: dicEquipSuit,
|
||||
equipSuitByJobClass: dicEquipSuitByJobClass,
|
||||
jewelCondition: dicJewelCondition,
|
||||
blueprt: dicBlueprt,
|
||||
blueprtByLv: dicBlueprtByLv,
|
||||
};
|
||||
|
||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||
@@ -341,21 +339,6 @@ export function getBossHpByWarId(warId: number) {
|
||||
return { bossHpSum, bossHpArr };
|
||||
}
|
||||
|
||||
|
||||
export function getWarIdByBlueprtId(blueprtId: number) {
|
||||
let warId = gameData.blueprtToWar.get(blueprtId);
|
||||
if (!warId) {
|
||||
let blueprt = gameData.goods.get(blueprtId);
|
||||
if (blueprt) {
|
||||
const { specialAttr } = blueprt;
|
||||
warId = specialAttr.get(SPECIAL_ATTR.WAR_ID);
|
||||
if (warId)
|
||||
gameData.blueprtToWar.set(blueprtId, warId);
|
||||
}
|
||||
}
|
||||
return warId;
|
||||
}
|
||||
|
||||
export function getBossHpByBlueprtId(blueprtId: number) {
|
||||
let { dispatchJsonId } = getWarByBlueprtId(blueprtId);
|
||||
let bossHpInfo = getBossHpByWarId(dispatchJsonId);
|
||||
@@ -363,8 +346,8 @@ export function getBossHpByBlueprtId(blueprtId: number) {
|
||||
}
|
||||
|
||||
export function getWarByBlueprtId(blueprtId: number) {
|
||||
let warId = getWarIdByBlueprtId(blueprtId);
|
||||
return gameData.war.get(warId);
|
||||
let dicBlueprt = getDicBlueprtById(blueprtId);
|
||||
return gameData.war.get(dicBlueprt.gkId);
|
||||
}
|
||||
|
||||
export function getRewardByBlueprtId(blueprtId: number) {
|
||||
@@ -380,7 +363,7 @@ function parseComBtlLvRange() {
|
||||
}
|
||||
|
||||
export function comBtlRanges() {
|
||||
return Array.from(gameData.comBtlLvRange.keys());
|
||||
return Array.from(gameData.blueprtByLv.keys());
|
||||
}
|
||||
|
||||
|
||||
@@ -409,14 +392,6 @@ export function getGoodById(gid: number) {
|
||||
return gameData.goods.get(gid);
|
||||
}
|
||||
|
||||
export function getJewelById(gid: number) {
|
||||
return gameData.jewels.get(gid);
|
||||
}
|
||||
|
||||
export function getHeroEquipByClassId(classId: number) {
|
||||
return gameData.dicHeroEquip.get(classId);
|
||||
}
|
||||
|
||||
export function getHeroJob(jobId: number) {
|
||||
const job = gameData.job.get(jobId);
|
||||
return job;
|
||||
@@ -442,16 +417,6 @@ export function getScollByStar(quality: number, star: number, curQuality: number
|
||||
return heroScroll;
|
||||
}
|
||||
|
||||
export function getSuit(id: number) {
|
||||
const suitInfo = gameData.suit.get(id);
|
||||
return suitInfo;
|
||||
}
|
||||
|
||||
export function getFuncsSwitch(id: number) {
|
||||
const funcInfo = gameData.funcsSwitch.get(id);
|
||||
return funcInfo;
|
||||
}
|
||||
|
||||
export function getPLvByScore(score: number) {
|
||||
let lv = 0;
|
||||
for (let { teamLv, topLineupMin, topLineupMax } of gameData.pvpTeamLevel) {
|
||||
@@ -749,50 +714,10 @@ export function getDicApByLv(level: number) {
|
||||
}
|
||||
}
|
||||
|
||||
export function getDicSuitByTypeAndLv(suitType: number, starLevel: number) {
|
||||
return gameData.suitByTypeAndLv.get(`${suitType}_${starLevel}`);
|
||||
}
|
||||
|
||||
export function getQuenchGradeByValue(quality: number, value: number) {
|
||||
|
||||
let dicQuench = gameData.quenchByQuality.get(quality)||[];
|
||||
let grade = 0;
|
||||
for(let [_grade, { singleRatioMin, singleRatioMax }] of dicQuench) {
|
||||
if((value >= singleRatioMin && value < singleRatioMax) || (value == singleRatioMin && value == singleRatioMax) ) {
|
||||
grade = _grade;
|
||||
}
|
||||
}
|
||||
return grade;
|
||||
}
|
||||
|
||||
export function getWishPoolReward(id: number) {
|
||||
let dicGoods = gameData.goods.get(id);
|
||||
if(!dicGoods) return false;
|
||||
let dicItid = ITID.get(dicGoods.itid);
|
||||
let starLevel = 0;
|
||||
if(dicItid.type == CONSUME_TYPE.PIECE) {
|
||||
starLevel = dicGoods.equipLvl;
|
||||
}
|
||||
// console.log('*****', dicGoods.itid, starLevel, dicGoods.quality)
|
||||
return gameData.guildWishReward.get(`${dicGoods.itid}_${starLevel}_${dicGoods.quality}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根绝品质和品相获得上下限,当grade为0,获取该品质下全阶的上下限
|
||||
* @param quality 品质
|
||||
* @param grade 品相
|
||||
* @returns {{ min: number, max: number }}
|
||||
*/
|
||||
export function getQuenchByQualityAndGrade(quality: number, grade: number) {
|
||||
if(grade == 0) { // 这个品质的上下限
|
||||
return gameData.quenchRangeByQuality.get(quality);
|
||||
} else { // 该品质该品相的上下限
|
||||
return gameData.quenchRangeByQualityAndGrade.get(`${quality}_${grade}`);
|
||||
}
|
||||
}
|
||||
|
||||
export function getQuenchConsume(lvLimited: number, quality: number) {
|
||||
return gameData.quenchConsume.get(`${lvLimited}_${quality}`);
|
||||
return gameData.guildWishReward.get(`${dicGoods.itid}_${dicGoods.quality}`);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -834,6 +759,86 @@ function splitTime(str: string) {
|
||||
return { hour: parseInt(arr[0]), minute: parseInt(arr[1]), seconds: parseInt(arr[2]) }
|
||||
}
|
||||
|
||||
export function getEquipByJobClassAndEPlace(jobClass: number, ePlaceId: number) {
|
||||
let equipId = gameData.equipIdByJobAndEPlace.get(`${jobClass}_${ePlaceId}`);
|
||||
return gameData.equipById.get(equipId);
|
||||
}
|
||||
|
||||
export function getEquipQualityIdByEquipIdAndPoint(equipId: number, quality: number, point: number) {
|
||||
let equipQualityId = gameData.equipQualityIdByEquipIdAndPoint.get(`${equipId}_${quality}_${point}`);
|
||||
return equipQualityId?gameData.equipQuality.get(equipQualityId): null;
|
||||
}
|
||||
|
||||
export function getNextEquipQuality(equipId: number, quality: number, point: number) {
|
||||
let equipQuality = getEquipQualityIdByEquipIdAndPoint(equipId, quality, point);
|
||||
if(equipQuality) {
|
||||
let nextId = equipQuality.id + 1;
|
||||
let nextEquipQuality = gameData.equipQuality.get(nextId);
|
||||
if(nextEquipQuality && nextEquipQuality.equipId == equipQuality.equipId) {
|
||||
return nextEquipQuality
|
||||
}
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export function getEquipStarIdByEquipId(equipId: number, star: number) {
|
||||
let equipStarId = gameData.equipStarIdByEquipId.get(`${equipId}_${star}`);
|
||||
return equipStarId?gameData.equipStar.get(equipStarId): null;
|
||||
}
|
||||
|
||||
export function getNextEquipStar(equipId: number, star: number) {
|
||||
let equipStar = getEquipStarIdByEquipId(equipId, star);
|
||||
if(equipStar) {
|
||||
let nextId = equipStar.id + 1;
|
||||
let nextEquipStar = gameData.equipStar.get(nextId);
|
||||
if(nextEquipStar && nextEquipStar.equipId == equipStar.equipId) {
|
||||
return nextEquipStar;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getPreEquipStar(equipId: number, star: number) {
|
||||
let equipStar = getEquipStarIdByEquipId(equipId, star);
|
||||
if(equipStar) {
|
||||
let nextId = equipStar.id - 1;
|
||||
let nextEquipStar = gameData.equipStar.get(nextId);
|
||||
if(nextEquipStar && nextEquipStar.equipId == equipStar.equipId) {
|
||||
return nextEquipStar;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
export function getEquipStarMainAttrByStage(equipId: number, star: number, starStage: number) {
|
||||
if(starStage == 0) {
|
||||
let preEquipStar = getPreEquipStar(equipId, star);
|
||||
if(!preEquipStar || preEquipStar.equipId != equipId) {
|
||||
return [];
|
||||
} else {
|
||||
return preEquipStar.mainAttr.get(preEquipStar.count);
|
||||
}
|
||||
} else {
|
||||
let equipStar = getEquipStarIdByEquipId(equipId, star);
|
||||
return equipStar.mainAttr.get(starStage);
|
||||
}
|
||||
}
|
||||
|
||||
export function getEquipSuitByHero(hid: number) {
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
let equipSuitId = gameData.equipSuitByJobClass.get(dicHero.jobClass);
|
||||
return gameData.equipSuit.get(equipSuitId);
|
||||
}
|
||||
|
||||
export function getJewelConditionByLvAndSeId(lv: number, randSeId: number) {
|
||||
return gameData.jewelCondition.get(`${lv}_${randSeId}`);
|
||||
}
|
||||
|
||||
export function getDicBlueprtById(id: number) {
|
||||
let jewel = gameData.blueprt.get(id);
|
||||
return gameData.jewel.get(jewel);
|
||||
}
|
||||
|
||||
// 初始加载
|
||||
function initDatas() {
|
||||
parseDicParam();
|
||||
@@ -907,13 +912,10 @@ function treatTaskGroup() {
|
||||
function loadDatas() {
|
||||
loadHero();
|
||||
loadGoods();
|
||||
loadBlueprtCompose();
|
||||
loadBlueprtPossibility();
|
||||
loadDaily();
|
||||
loadEvent();
|
||||
loadExpedition();
|
||||
loadExpeditionPoint();
|
||||
loadFuncSwitch();
|
||||
loadHeroSkill();
|
||||
loadJob();
|
||||
loadKingExp();
|
||||
@@ -932,10 +934,6 @@ function loadDatas() {
|
||||
loadHeroStar();
|
||||
loadHeroWake();
|
||||
loadRandomEffectPool();
|
||||
loadStrengthenCost();
|
||||
loadRefine();
|
||||
loadHeroEquip();
|
||||
loadSuit();
|
||||
loadTitle();
|
||||
loadTeraph();
|
||||
loadSchool();
|
||||
@@ -986,8 +984,6 @@ function loadDatas() {
|
||||
loadAp();
|
||||
loadApBuy();
|
||||
loadKingExpRatio();
|
||||
loadQuenchQuality();
|
||||
loadQuenchConsume();
|
||||
loadEquipAttributeRatio();
|
||||
loadHoliday();
|
||||
loadExpeditionSubAttr();
|
||||
@@ -999,6 +995,15 @@ function loadDatas() {
|
||||
loadGuildWishReward();
|
||||
loadApi();
|
||||
loadServerConst();
|
||||
loadEquip();
|
||||
loadEquipStrength();
|
||||
loadEquipQuality();
|
||||
loadEquipStar();
|
||||
loadEquipSuit();
|
||||
loadEquipQualityExtra();
|
||||
loadJewel();
|
||||
loadStone();
|
||||
loadJewelCondition();
|
||||
}
|
||||
|
||||
// 重载dicParam
|
||||
|
||||
@@ -66,7 +66,8 @@ export const ARMY = {
|
||||
export const TREASURE = {
|
||||
CAPTAIN_DROP: 5, // 普通套装图纸队长必掉落次数
|
||||
TEAMMATE_DROP: 10, // 普通套装图纸队员必掉落次数
|
||||
TREASURE_ASSIST_LIMITED: '1&1&999|2&21&999|3&41&999|4&61&999|5&81&999|6&100&999', // 协助寻宝星级开启玩家等级限制
|
||||
TREASURE_ASSIST_LIMITED: '1&1&999|2&20&999|3&30&999|4&40&999|5&50&999|6&60&999|7&70&999|8&80&999|9&90&999', // 协助寻宝星级开启玩家等级限制
|
||||
TREASURE_ASSIST_TIME: 6, // 协助寻宝总次数
|
||||
};
|
||||
export const FRIEND = {
|
||||
FRIEND_CLOSEPOINT_ADD: 5, // 每赠送/领取一次增加的亲密度
|
||||
|
||||
@@ -5,22 +5,30 @@ import { RewardInter } from '../interface';
|
||||
const _ = require('lodash');
|
||||
|
||||
export interface DicArmyDevelopConsume {
|
||||
|
||||
// 科技树唯一id
|
||||
readonly id: number;
|
||||
// 目标品质
|
||||
readonly quality: number;
|
||||
readonly starLevel: number;
|
||||
readonly prePositions: Array<number>;
|
||||
readonly honourConsume: Array<RewardInter>;
|
||||
// 相同品质下细分等级
|
||||
readonly qualityLevel: number;
|
||||
// 前置点需求
|
||||
readonly prePositions: number[];
|
||||
// 图纸最多张数
|
||||
readonly max: number;
|
||||
// 需要的功勋
|
||||
readonly honourConsume: RewardInter[];
|
||||
// 研发需要的资金
|
||||
readonly fundConsume: number;
|
||||
// 研发需要的时间
|
||||
readonly timeConsume: number;
|
||||
}
|
||||
|
||||
const DicArmyDevelopConsumeKeys: KeysEnum<DicArmyDevelopConsume> = {
|
||||
id: true,
|
||||
quality: true,
|
||||
starLevel: true,
|
||||
qualityLevel: true,
|
||||
prePositions: true,
|
||||
max: true,
|
||||
honourConsume: true,
|
||||
fundConsume: true,
|
||||
timeConsume: true
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
// 藏宝图合成表
|
||||
import { readFileAndParse, parseGoodStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicBlueprtCompose {
|
||||
|
||||
// 品质
|
||||
readonly quality: number;
|
||||
// 消耗的寻宝币数量
|
||||
readonly coinNum: RewardInter[];
|
||||
// 消耗的藏宝图的数量
|
||||
readonly blueprtNum: number;
|
||||
// 目标品质
|
||||
readonly targetQuality: number;
|
||||
|
||||
}
|
||||
|
||||
export const dicBlueprtCompose = new Map<number, DicBlueprtCompose>();
|
||||
export function loadBlueprtCompose() {
|
||||
dicBlueprtCompose.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_BLUEPRT_COMPOSE);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.coinNum = parseGoodStr(o.coinNum);
|
||||
dicBlueprtCompose.set(o.quality, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
// 藏宝图掉落率
|
||||
import { decodeArrayListStr, readFileAndParse } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicBlueprtPossibility {
|
||||
|
||||
// 君主等级下限
|
||||
readonly min: number;
|
||||
// 君主等级上限
|
||||
readonly max: number;
|
||||
// 掉落概率
|
||||
readonly possibility: Array<{id: number, weight: number}>;
|
||||
|
||||
}
|
||||
|
||||
export const dicBlueprtPossibility = new Array<DicBlueprtPossibility>();
|
||||
export function loadBlueprtPossibility() {
|
||||
dicBlueprtPossibility.splice(0, dicBlueprtPossibility.length);
|
||||
let arr = readFileAndParse(FILENAME.DIC_BLUEPRT_POSSIBILITY);
|
||||
arr.forEach(o => {
|
||||
o.possibility = parsePossibility(o.possibility);
|
||||
dicBlueprtPossibility.push(o);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function parsePossibility(str: string) {
|
||||
let result = new Array<{id: number, weight: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [id, weight] of decodeArr) {
|
||||
if(isNaN(parseInt(id)) || isNaN(parseInt(weight))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({id: parseInt(id), weight: parseInt(weight)});
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
// 装备表
|
||||
import { readFileAndParse, decodeArrayListStr, parseGoodStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicEquip {
|
||||
// (key) 装备的id
|
||||
readonly id: number;
|
||||
// 装备的位置(武器、衣甲、帽冠、行具)
|
||||
readonly eplaceId: number;
|
||||
// 装备名
|
||||
readonly name: string;
|
||||
// 匹配的武将的职业的大类
|
||||
readonly jobClass: number;
|
||||
// 套装id
|
||||
readonly suitId: number;
|
||||
// 属性提升
|
||||
readonly attribute: {id: number, num: number}[];
|
||||
// 属性成长加成提升
|
||||
readonly attributeUp: {id: number, num: number}[];
|
||||
// 合成消耗
|
||||
readonly composeMaterial: RewardInter[];
|
||||
|
||||
}
|
||||
|
||||
export const dicEquipById = new Map<number, DicEquip>();
|
||||
export const dicEquipIdByJobClassAndEplace = new Map<string, number>();
|
||||
export function loadEquip() {
|
||||
dicEquipById.clear();
|
||||
dicEquipIdByJobClassAndEplace.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.attribute = parseAttr(o.attribute);
|
||||
o.attributeUp = parseAttr(o.attributeUp);
|
||||
o.composeMaterial = parseGoodStr(o.composeMaterial);
|
||||
dicEquipById.set(o.id, o);
|
||||
dicEquipIdByJobClassAndEplace.set(`${o.jobClass}_${o.eplaceId}`, o.id);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseAttr(str: string) {
|
||||
let result = new Array<{id: number, num: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [id, num] of decodeArr) {
|
||||
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({id: parseInt(id), num: parseInt(num)});
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
// 装备升品表
|
||||
import { readFileAndParse, parseGoodStr, decodeArrayListStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicEquipQuality {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 装备id
|
||||
readonly equipId: number;
|
||||
// 装备品质
|
||||
readonly quality: number;
|
||||
// 装备的武将职业大类
|
||||
readonly jobClass: number;
|
||||
// 装备栏id
|
||||
readonly eplaceId: number;
|
||||
// 升星的点
|
||||
readonly point: number;
|
||||
// 一共有多少点
|
||||
readonly count: number;
|
||||
// 消耗
|
||||
readonly consume: RewardInter[];
|
||||
// 属性提升
|
||||
readonly attribute: {id: number, num: number}[];
|
||||
|
||||
}
|
||||
|
||||
export const dicEquipQuality = new Map<number, DicEquipQuality>();
|
||||
export const dicEquipQualityIdByEquipIdAndPoint = new Map<string, number>(); // equipId&point => id
|
||||
|
||||
export function loadEquipQuality() {
|
||||
dicEquipQuality.clear();
|
||||
dicEquipQualityIdByEquipIdAndPoint.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_QUALITY);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.consume = parseGoodStr(o.consume);
|
||||
o.attribute = parseAttr(o.attribute);
|
||||
dicEquipQualityIdByEquipIdAndPoint.set(`${o.equipId}_${o.quality}_${o.point}`, o.id);
|
||||
dicEquipQuality.set(o.id, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseAttr(str: string) {
|
||||
let result = new Array<{id: number, num: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [id, num] of decodeArr) {
|
||||
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({id: parseInt(id), num: parseInt(num)});
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// 装备升品表
|
||||
import { readFileAndParse } from '../util'
|
||||
import { FILENAME } from '../../consts';
|
||||
|
||||
export interface DicEquipQualityExtra {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 品质
|
||||
readonly quality: number;
|
||||
// 限制星级
|
||||
readonly star: number;
|
||||
// 天晶石
|
||||
readonly jewelCnt: number;
|
||||
// 地玉石
|
||||
readonly stoneCnt: number;
|
||||
|
||||
}
|
||||
|
||||
export const dicEquipQualityExtra = new Map<number, DicEquipQualityExtra>();
|
||||
|
||||
export function loadEquipQualityExtra() {
|
||||
dicEquipQualityExtra.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_QUALITY_EXTRA);
|
||||
|
||||
arr.forEach(o => {
|
||||
dicEquipQualityExtra.set(o.quality, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
// 装备升品表
|
||||
import { readFileAndParse, parseGoodStr, decodeArrayListStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicEquipStar {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 装备id
|
||||
readonly equipId: number;
|
||||
// 装备星级
|
||||
readonly star: number;
|
||||
// 装备的武将职业大类
|
||||
readonly jobClass: number;
|
||||
// 装备栏id
|
||||
readonly eplaceId: number;
|
||||
// 一共有多少点
|
||||
readonly count: number;
|
||||
// 主属性
|
||||
readonly mainAttr: Map<number, {id: number, num: number}[]>;
|
||||
// 次级属性
|
||||
readonly subAttr: {id: number, num: number}[];
|
||||
// 一次升点消耗
|
||||
readonly mainConsume: RewardInter[];
|
||||
// 升星消耗
|
||||
readonly subConsume: RewardInter[];
|
||||
|
||||
}
|
||||
|
||||
export const dicEquipStar = new Map<number, DicEquipStar>();
|
||||
export const dicEquipStarIdByEquipId = new Map<string, number>(); // equipId&point => id
|
||||
|
||||
export function loadEquipStar() {
|
||||
dicEquipStar.clear();
|
||||
dicEquipStarIdByEquipId.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_STAR);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.mainConsume = parseGoodStr(o.mainConsume);
|
||||
o.subConsume = parseGoodStr(o.subConsume);
|
||||
o.mainAttr = parseAttrMap(o.mainAttr);
|
||||
o.subAttr = parseAttr(o.subAttr);
|
||||
dicEquipStarIdByEquipId.set(`${o.equipId}_${o.star}`, o.id);
|
||||
dicEquipStar.set(o.id, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseAttrMap(str: string) {
|
||||
let result = new Map<number, {id: number, num: number}[]>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let i = 0; i < decodeArr.length; i++) {
|
||||
let [id, num] = decodeArr[i];
|
||||
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.set(i + 1, [{id: parseInt(id), num: parseInt(num)}]);
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
function parseAttr(str: string) {
|
||||
let result = new Array<{id: number, num: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [id, num] of decodeArr) {
|
||||
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({id: parseInt(id), num: parseInt(num)});
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
// 装备强化表
|
||||
import { readFileAndParse, parseGoodStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicEquipStrength {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级,1级升2级,读2级数据
|
||||
readonly lv: number;
|
||||
// 消耗
|
||||
readonly consume: RewardInter[];
|
||||
|
||||
}
|
||||
|
||||
export const dicEquipStrength = new Map<number, DicEquipStrength>();
|
||||
export function loadEquipStrength() {
|
||||
dicEquipStrength.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_STRENGTH);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.consume = parseGoodStr(o.consume);
|
||||
dicEquipStrength.set(o.lv, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
// 装备套装表
|
||||
import { readFileAndParse, parseNumberList, decodeArrayListStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicEquipSuit {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 匹配的武将的职业的大类
|
||||
readonly jobClass: number;
|
||||
// 套装内含的装备编号
|
||||
readonly equips: number[];
|
||||
// 按星级可解锁的属性
|
||||
readonly effect: { star: number, seid: number }[];
|
||||
}
|
||||
|
||||
export const dicEquipSuit = new Map<number, DicEquipSuit>();
|
||||
export const dicEquipSuitByJobClass = new Map<number, number>();
|
||||
export function loadEquipSuit() {
|
||||
dicEquipSuit.clear();
|
||||
dicEquipSuitByJobClass.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_EQUIP_SUIT);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.equips = parseNumberList(o.equips);
|
||||
o.effect = parseEffect(o.effect);
|
||||
dicEquipSuit.set(o.id, o);
|
||||
dicEquipSuitByJobClass.set(o.jobClass, o.id);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseEffect(str: string) {
|
||||
let result = new Array<{star: number, seid: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [star, seid] of decodeArr) {
|
||||
if(isNaN(parseInt(star)) || isNaN(parseInt(seid))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({star: parseInt(star), seid: parseInt(seid)});
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
// 开启功能表
|
||||
import { readFileAndParse } from '../util';
|
||||
import { FILENAME } from '../../consts';
|
||||
|
||||
export interface DicFuncSwitch {
|
||||
// 功能id
|
||||
readonly id: number;
|
||||
// 描述
|
||||
readonly desc: string;
|
||||
// 条件
|
||||
readonly conditionType: number;
|
||||
// 参数
|
||||
readonly param: number;
|
||||
// 客户端指令
|
||||
readonly script: string;
|
||||
|
||||
}
|
||||
|
||||
export const dicFuncSwitch = new Map<number, DicFuncSwitch>();
|
||||
export function loadFuncSwitch() {
|
||||
dicFuncSwitch.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_FUNC_SWITCH);
|
||||
|
||||
arr.forEach(o => {
|
||||
dicFuncSwitch.set(o.id, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -1,69 +1,31 @@
|
||||
// 物品表
|
||||
import { decodeArrayListStr, readFileAndParse, parseGoodStr, parseNumberList, decodeArrayStr } from '../util'
|
||||
import { FILENAME, IT_TYPE, ABI_TYPE, GOOD_TYPE } from '../../consts'
|
||||
import { decodeArrayListStr, readFileAndParse, parseGoodStr, } from '../util'
|
||||
import { FILENAME, } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
const _ = require('lodash');
|
||||
import { findWhere } from 'underscore';
|
||||
|
||||
export interface SpecialMaterial {
|
||||
readonly ids: number[];
|
||||
readonly count: number;
|
||||
}
|
||||
|
||||
export interface DicGoods {
|
||||
// 物品id
|
||||
readonly good_id: number;
|
||||
// 物品名
|
||||
readonly name: string;
|
||||
// 等级限制
|
||||
readonly lvLimited: number;
|
||||
// 星级
|
||||
readonly equipLvl: number;
|
||||
// 职业限制
|
||||
readonly jobLimited: number[];
|
||||
// 武将限制
|
||||
readonly charLimited: number[];
|
||||
// 合成装备需要的碎片数
|
||||
readonly pieces: number;
|
||||
// 对应的碎片id
|
||||
readonly pieceId: number;
|
||||
// 合成材料
|
||||
readonly composeMaterial: Array<RewardInter>;
|
||||
// 特殊材料
|
||||
readonly specialMaterial: SpecialMaterial;
|
||||
// 分解所得
|
||||
readonly decomposeItem: Array<RewardInter>;
|
||||
// 物品品质
|
||||
readonly quality: number;
|
||||
// 洞数
|
||||
readonly hole: number;
|
||||
// 随机属性范围
|
||||
readonly randomEffect: Array<number>;
|
||||
|
||||
// 类型id
|
||||
readonly itid: number;
|
||||
// 物品类型
|
||||
readonly goodType: number;
|
||||
|
||||
// 分解所得
|
||||
readonly decomposeItem: Array<RewardInter>;
|
||||
// 将魂对应武将id
|
||||
readonly hid: number;
|
||||
// 属性
|
||||
readonly goodsAbility: Map<number, number>;
|
||||
// 强化属性
|
||||
readonly goodsAbilityUp: Map<number, number>;
|
||||
// 套装id
|
||||
readonly suitId: number;
|
||||
// 特殊属性
|
||||
readonly specialAttr: Map<number, number>;
|
||||
// 属性外加的值,经验,好感
|
||||
readonly value: number;
|
||||
|
||||
readonly count?: number;
|
||||
|
||||
readonly nextJewelId?: number;
|
||||
readonly specialCount?: number;
|
||||
readonly nextSpecialId?: number;
|
||||
// 对应的装备id
|
||||
readonly equipId?: number;
|
||||
// 解锁条件
|
||||
readonly condition: { id: number, type: number, params: number[] }[];
|
||||
// 时间限制
|
||||
@@ -78,65 +40,30 @@ type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||
const DicGoodsKeys: KeysEnum<DicGoods> = {
|
||||
good_id: true,
|
||||
name: true,
|
||||
lvLimited: true,
|
||||
pieces: true,
|
||||
composeMaterial: true,
|
||||
specialMaterial: true,
|
||||
decomposeItem: true,
|
||||
quality: true,
|
||||
hole: true,
|
||||
randomEffect: true,
|
||||
itid: true,
|
||||
goodType: true,
|
||||
hid: true,
|
||||
goodsAbility: true,
|
||||
goodsAbilityUp: true,
|
||||
suitId: true,
|
||||
specialAttr: true,
|
||||
value: true,
|
||||
pieceId: true,
|
||||
count: true,
|
||||
nextJewelId: true,
|
||||
specialCount: true,
|
||||
nextSpecialId: true,
|
||||
equipId: true,
|
||||
condition: true,
|
||||
timeLimit: true,
|
||||
image_id: true,
|
||||
gift: true,
|
||||
jobLimited: true,
|
||||
charLimited: true,
|
||||
equipLvl: true
|
||||
}
|
||||
export const dicJewel = new Map<number, DicGoods>();
|
||||
export const dicGoods = new Map<number, DicGoods>();
|
||||
export const blueprtWithQuality = new Map<number, Array<number>>();
|
||||
export const blueprtWithQualityAndStar = new Map<string, Array<number>>();
|
||||
export const figureCondition = new Map<number, { params: number[], id: number, gid: number }[]>(); // type => {params, id, gid}
|
||||
|
||||
export function loadGoods() {
|
||||
dicJewel.clear();
|
||||
dicGoods.clear();
|
||||
blueprtWithQuality.clear();
|
||||
blueprtWithQualityAndStar.clear();
|
||||
figureCondition.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_GOODS);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.goodsAbility = parseAbility(o);
|
||||
o.goodsAbilityUp = parseAbilityUp(o);
|
||||
o.composeMaterial = parseGoodStr(o.composeMaterial);
|
||||
o.decomposeItem = parseGoodStr(o.decomposeItem);
|
||||
o.specialAttr = parseSpecialAttr(o.specialAttr);
|
||||
o.specialMaterial = parseSpecialMaterial(o.specialMaterial);
|
||||
o.randomEffect = parseNumberList(o.randomEffect);
|
||||
o.timeLimit = o.timelimit;
|
||||
if (o.goodType == IT_TYPE.EQUIP_PIECE) {
|
||||
let good = findWhere(arr, { pieceId: o.good_id });
|
||||
if (!!good)
|
||||
o.equipId = good.good_id;
|
||||
}
|
||||
let condition = parseConditionStr(o.condition);
|
||||
for (let { id, type, params } of condition) {
|
||||
let mapArr = figureCondition.get(type) || new Array<{ params: number[], id: number, gid: number }>();
|
||||
@@ -144,93 +71,12 @@ export function loadGoods() {
|
||||
figureCondition.set(type, mapArr);
|
||||
}
|
||||
o.condition = condition;
|
||||
o.jobLimited = parseNumberList(o.jobLimited);
|
||||
o.charLimited = parseNumberList(o.charLimited);
|
||||
dicGoods.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys)));
|
||||
|
||||
if (o.itid == IT_TYPE.BLUEPRT) {
|
||||
let arr = blueprtWithQualityAndStar.get(`${o.quality}_${o.equipLvl}`) || new Array<number>();
|
||||
arr.push(o.good_id);
|
||||
blueprtWithQualityAndStar.set(`${o.quality}_${o.equipLvl}`, arr);
|
||||
let arr2 = blueprtWithQuality.get(o.quality) || new Array<number>();
|
||||
arr.push(o.good_id);
|
||||
blueprtWithQuality.set(o.quality, arr2);
|
||||
} else if (o.goodType == GOOD_TYPE.JEWEL) {
|
||||
let material = o.composeMaterial[0];
|
||||
if (!!material && !!material.id) {
|
||||
let lastJewel = findWhere(arr, { good_id: material.id });
|
||||
if (!!lastJewel) {
|
||||
lastJewel.count = material.count;
|
||||
lastJewel.nextJewelId = o.good_id;
|
||||
if (!!o.specialMaterial.ids[0]) {
|
||||
lastJewel.specialCount = o.specialMaterial.count;
|
||||
lastJewel.nextSpecialId = o.specialMaterial.ids[0];
|
||||
}
|
||||
dicJewel.set(lastJewel.good_id, _.pick(lastJewel, Object.keys(DicGoodsKeys)));
|
||||
}
|
||||
} else {
|
||||
dicJewel.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys)));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseSpecialAttr(str: string) {
|
||||
let specialAttr = new Map<number, number>();
|
||||
if (str) {
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for (let [type, count] of decodeArr) {
|
||||
if (isNaN(parseInt(type)) || isNaN(parseInt(count))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
|
||||
specialAttr.set(parseInt(type), parseInt(count));
|
||||
}
|
||||
}
|
||||
return specialAttr;
|
||||
}
|
||||
|
||||
function parseAbility(json) {
|
||||
let map = new Map<number, number>();
|
||||
map.set(ABI_TYPE.ABI_HP, json.hp || 0);
|
||||
map.set(ABI_TYPE.ABI_ATK, json.atk || 0);
|
||||
map.set(ABI_TYPE.ABI_DEF, json.def || 0);
|
||||
map.set(ABI_TYPE.ABI_MDEF, json.mdef || 0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease || 0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease || 0);
|
||||
map.set(ABI_TYPE.ABI_PHYSICAL_DAMAGE_DECREASE, json.atkDecrease || 0);
|
||||
map.set(ABI_TYPE.ABI_MAGIC_DAMAGE_DECREASE, json.matkDecrease || 0);
|
||||
return map
|
||||
}
|
||||
|
||||
function parseAbilityUp(json) {
|
||||
let map = new Map<number, number>();
|
||||
map.set(ABI_TYPE.ABI_HP, json.hp_up || 0);
|
||||
map.set(ABI_TYPE.ABI_ATK, json.atk_up || 0);
|
||||
map.set(ABI_TYPE.ABI_DEF, json.def_up || 0);
|
||||
map.set(ABI_TYPE.ABI_MDEF, json.mdef_up || 0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease_up || 0);
|
||||
map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease_up || 0);
|
||||
return map
|
||||
}
|
||||
|
||||
function parseSpecialMaterial(str: string) {
|
||||
let specialAttr = { ids: new Array<number>(), count: 0 }
|
||||
if (!str) return specialAttr;
|
||||
|
||||
let decodeArr = decodeArrayStr(str);
|
||||
if (decodeArr.length >= 2) {
|
||||
let ids = parseNumberList(decodeArr[0]);
|
||||
let count = parseInt(decodeArr[1]);
|
||||
if (isNaN(count)) return specialAttr;
|
||||
specialAttr.ids = ids;
|
||||
specialAttr.count = count;
|
||||
}
|
||||
return specialAttr;
|
||||
}
|
||||
|
||||
// 解析物品 {"type": number, "param": number} 格式
|
||||
export function parseConditionStr(str: string) {
|
||||
let result = new Array<{ id: number, type: number, params: number[] }>();
|
||||
|
||||
@@ -8,8 +8,6 @@ export interface DicGuildWishReward {
|
||||
readonly id: number;
|
||||
// itid
|
||||
readonly itid: number;
|
||||
// 装备星级
|
||||
readonly starLevel: number;
|
||||
// 品质
|
||||
readonly quality: number;
|
||||
// 功勋奖励
|
||||
@@ -24,7 +22,7 @@ export function loadGuildWishReward() {
|
||||
|
||||
arr.forEach(o => {
|
||||
if(o.starLevel == '&') o.starLevel = 0;
|
||||
dicGuildWishReward.set(`${o.itid}_${o.starLevel}_${o.quality}`, o);
|
||||
dicGuildWishReward.set(`${o.itid}_${o.quality}`, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -37,17 +37,12 @@ export interface DicHero {
|
||||
|
||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||
const DicHeroKeys: KeysEnum<DicHero> = {heroId: true, name: true, quality: true, camp: true, jobClass: true, jobid: true, skill: true, pieceId: true, initialStars: true, pieceCount: true, baseAbilityArr: true, baseAbilityUpArr: true, initialSkin: true, recruit: true, face_id: true};
|
||||
export const dicMyHeroes = new Array<number>();
|
||||
export const dicHero = new Map<number, DicHero>();
|
||||
export function loadHero() {
|
||||
dicMyHeroes.splice(0, dicMyHeroes.length);
|
||||
dicHero.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_HERO);
|
||||
arr.forEach(o => {
|
||||
if(o.heroId > 0 && o.heroId <= 300) {
|
||||
dicMyHeroes.push(o.heroId);
|
||||
}
|
||||
o.baseAbilityArr = parseBaseAbilityArr(o);
|
||||
o.baseAbilityUpArr = parseBaseAbilityUpArr(o);
|
||||
o.recruit = parseInt(o.recruit) == 1;
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
// 藏宝图合成表
|
||||
import { readFileAndParse, parseNumberList } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
const _ = require('lodash');
|
||||
|
||||
export interface DicHeroEquip {
|
||||
readonly itId: number;
|
||||
readonly classId: Array<number>;
|
||||
}
|
||||
|
||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||
const DicHeroEquipKeys: KeysEnum<DicHeroEquip> = {
|
||||
itId: true,
|
||||
classId: true
|
||||
}
|
||||
export const dicHeroEquip = new Map<number, DicHeroEquip>();
|
||||
export function loadHeroEquip() {
|
||||
dicHeroEquip.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_HERO_EQUIP);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.classId = parseNumberList(o.classId);
|
||||
dicHeroEquip.set(o.itId, _.pick(o, Object.keys(DicHeroEquipKeys)));
|
||||
});
|
||||
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
// 天晶石表
|
||||
import { readFileAndParse, parseGoodStr, parseNumberList } from '../util'
|
||||
import { FILENAME } from '../../consts';
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicJewel {
|
||||
// 物品id
|
||||
readonly good_id: number;
|
||||
// 天晶石名
|
||||
readonly name: string;
|
||||
// 装备栏id
|
||||
readonly eplaceId: number;
|
||||
// itid
|
||||
readonly itid: number;
|
||||
// 天晶石阶
|
||||
readonly lv: number;
|
||||
// 天晶石品质
|
||||
readonly quality: number;
|
||||
// 天晶石属性条数
|
||||
readonly effectCount: number;
|
||||
// 套装效果
|
||||
readonly randomEffect: number[];
|
||||
// 对应藏宝图id
|
||||
readonly mapGoodId: number;
|
||||
// 淬炼消耗
|
||||
readonly quenchConsume: RewardInter[];
|
||||
// 寻宝关卡id
|
||||
readonly gkId: number;
|
||||
}
|
||||
|
||||
export const dicJewel = new Map<number, DicJewel>();
|
||||
export const dicBlueprt = new Map<number, number>();
|
||||
export const dicBlueprtByLv = new Map<number, number[]>();
|
||||
export function loadJewel() {
|
||||
dicJewel.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_JEWEL);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.randomEffect = parseNumberList(o.randomEffect);
|
||||
o.quenchConsume = parseGoodStr(o.quenchConsume);
|
||||
dicJewel.set(o.good_id, o);
|
||||
dicBlueprt.set(o.mapGoodId, o.good_id);
|
||||
if(!dicBlueprtByLv.has(o.lv)) {
|
||||
dicBlueprtByLv.set(o.lv, []);
|
||||
}
|
||||
dicBlueprtByLv.get(o.lv).push(o.mapGoodId);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
// 天晶石表
|
||||
import { readFileAndParse } from '../util'
|
||||
import { FILENAME } from '../../consts';
|
||||
|
||||
export interface DicJewelCondition {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 天晶石品质
|
||||
readonly jewelLv: number;
|
||||
// 属性词条id
|
||||
readonly randSeId: number;
|
||||
// 需要的地玉石的数量
|
||||
readonly stoneCnt: number;
|
||||
// 需要的地玉石的品质之和
|
||||
readonly stoneLv: number;
|
||||
}
|
||||
|
||||
|
||||
export const dicJewelCondition = new Map<string, DicJewelCondition>();
|
||||
export function loadJewelCondition() {
|
||||
dicJewelCondition.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_JEWEL_CONDITION);
|
||||
|
||||
arr.forEach(o => {
|
||||
dicJewelCondition.set(`${o.jewelLv}_${o.randSeId}`, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
import { readFileAndParse, parseGoodStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicQuenchConsume {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly equipLvl: number;
|
||||
// 品质
|
||||
readonly quality: number;
|
||||
// 淬火一次的消耗
|
||||
readonly unitConsume: RewardInter[];
|
||||
}
|
||||
|
||||
export const dicQuenchConsume = new Map<string, RewardInter[]>(); // equipLvl&quality => dic
|
||||
export function loadQuenchConsume() {
|
||||
dicQuenchConsume.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_QUENCH_CONSUME);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.unitConsume = parseGoodStr(o.unitconsume);
|
||||
dicQuenchConsume.set(`${o.equipLvl}_${o.quality}`, o.unitConsume);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
import { readFileAndParse } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicQuenchQuality {
|
||||
// id
|
||||
readonly id: number;
|
||||
// 装备品质
|
||||
readonly quality: number;
|
||||
// 品相
|
||||
readonly grade: number;
|
||||
// 单属性最小值
|
||||
readonly singleRatioMin: number;
|
||||
// 单属性最大值
|
||||
readonly singleRatioMax: number;
|
||||
// 初始是否可以随机出
|
||||
readonly initialAvailable: number;
|
||||
// 暴击率
|
||||
readonly critProbability: number;
|
||||
// 暴击效果
|
||||
readonly critEffect: number;
|
||||
}
|
||||
|
||||
export const dicQuenchRangeByQualityAndGrade = new Map<string, { min: number, max: number, randMin: number, randMax: number }>();
|
||||
export const dicQuenchRangeByQuality = new Map<number, { min: number, max: number, randMin: number, randMax: number }>(); // quality => {}
|
||||
export const dicQuenchByQuality = new Map<number, Map<number, DicQuenchQuality>>(); // quality => grade => dic
|
||||
export function loadQuenchQuality() {
|
||||
dicQuenchByQuality.clear();
|
||||
dicQuenchRangeByQuality.clear();
|
||||
dicQuenchRangeByQualityAndGrade.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_QUENCH_QUALITY);
|
||||
|
||||
arr.forEach(o => {
|
||||
if(o.initialAvailable == 1) {
|
||||
}
|
||||
|
||||
|
||||
if(!dicQuenchRangeByQuality.has(o.quality)) {
|
||||
dicQuenchRangeByQuality.set(o.quality, { min: o.singleRatioMin, max: o.singleRatioMax, randMin: o.singleRatioMin, randMax: o.singleRatioMax });
|
||||
} else {
|
||||
if(o.singleRatioMin < dicQuenchRangeByQuality.get(o.quality).min) {
|
||||
dicQuenchRangeByQuality.get(o.quality).min = o.singleRatioMin;
|
||||
}
|
||||
if(o.singleRatioMax > dicQuenchRangeByQuality.get(o.quality).max) {
|
||||
dicQuenchRangeByQuality.get(o.quality).max = o.singleRatioMax;
|
||||
}
|
||||
if(o.singleRatioMin < dicQuenchRangeByQuality.get(o.quality).randMin && o.initialAvailable == 1) {
|
||||
dicQuenchRangeByQuality.get(o.quality).randMin = o.singleRatioMin;
|
||||
}
|
||||
if(o.singleRatioMax > dicQuenchRangeByQuality.get(o.quality).randMax && o.initialAvailable == 1) {
|
||||
dicQuenchRangeByQuality.get(o.quality).randMax = o.singleRatioMax;
|
||||
}
|
||||
|
||||
}
|
||||
dicQuenchRangeByQualityAndGrade.set(`${o.quality}_${o.grade}`, { min: o.singleRatioMin, max: o.singleRatioMax, randMin: o.singleRatioMin, randMax: o.singleRatioMax });
|
||||
|
||||
|
||||
if(!dicQuenchByQuality.has(o.quality)) {
|
||||
dicQuenchByQuality.set(o.quality, new Map<number, DicQuenchQuality>());
|
||||
}
|
||||
dicQuenchByQuality.get(o.quality).set(o.grade, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
// 武将特技表
|
||||
import { readFileAndParse, parseNumberList } from '../util'
|
||||
import { readFileAndParse, decodeArrayListStr, parseNumberList } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicRandomEffectPool {
|
||||
@@ -16,6 +16,10 @@ export interface DicRandomEffectPool {
|
||||
readonly Min: number;
|
||||
// 随机最大值
|
||||
readonly Max: number;
|
||||
// 分割
|
||||
readonly gap: number;
|
||||
// 分割
|
||||
readonly rate: {min: number, max: number, weight: number}[];
|
||||
|
||||
}
|
||||
|
||||
@@ -26,8 +30,23 @@ export function loadRandomEffectPool() {
|
||||
let arr = readFileAndParse(FILENAME.DIC_RANDOM_EFFECT_POOL);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.gainValueArr = parseNumberList(o.gainValue)
|
||||
o.rate = parseRate(o.count);
|
||||
o.gainValueArr = parseNumberList(o.gainvalue);
|
||||
dicRandomEffectPool.set(o.id, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseRate(str: string) {
|
||||
|
||||
let result: {min: number, max: number, weight: number}[] = [];
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [min, max, weight] of decodeArr) {
|
||||
if(isNaN(parseInt(min)) || isNaN(parseInt(max)) || isNaN(parseInt(weight))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({min: parseInt(min), max: parseInt(max), weight: parseInt(weight) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
// 武将特技表
|
||||
import { readFileAndParse, parseGoodStr } from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicRefine {
|
||||
|
||||
// 精炼id
|
||||
readonly id: number;
|
||||
// 精炼等级
|
||||
readonly level: number;
|
||||
// 精炼次数
|
||||
readonly count: number;
|
||||
// 等级限制
|
||||
readonly levelLimited: number;
|
||||
// 提高属性百分比
|
||||
readonly upPercent: number;
|
||||
// 材料
|
||||
readonly consume: Array<RewardInter>;
|
||||
}
|
||||
|
||||
export const dicRefine = new Map<number, DicRefine>();
|
||||
export function loadRefine() {
|
||||
dicRefine.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_REFINE);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.consume = parseGoodStr(o.consume)
|
||||
dicRefine.set(o.id, o);
|
||||
});
|
||||
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
// 地玉石表
|
||||
import { readFileAndParse, parseGoodStr, decodeArrayListStr } from '../util'
|
||||
import { FILENAME } from '../../consts';
|
||||
import { RewardInter } from '../interface';
|
||||
|
||||
export interface DicStone {
|
||||
// 物品id
|
||||
readonly good_id: number;
|
||||
// 地玉石名
|
||||
readonly name: string;
|
||||
// 装备栏id
|
||||
readonly eplaceId: number;
|
||||
// itid
|
||||
readonly itid: number;
|
||||
// 地玉石阶
|
||||
readonly lv: number;
|
||||
// 地玉石品质
|
||||
readonly quality: number;
|
||||
// 合成消耗
|
||||
readonly composeMaterial: RewardInter[];
|
||||
// 属性提升
|
||||
readonly attribute: {id: number, num: number}[];
|
||||
}
|
||||
|
||||
|
||||
export const dicStone = new Map<number, DicStone>();
|
||||
export function loadStone() {
|
||||
dicStone.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_STONE);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.composeMaterial = parseGoodStr(o.composeMaterial);
|
||||
o.attribute = parseAttr(o.attribute);
|
||||
dicStone.set(o.good_id, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseAttr(str: string) {
|
||||
let result = new Array<{id: number, num: number}>();
|
||||
if(!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for(let [id, num] of decodeArr) {
|
||||
if(isNaN(parseInt(id)) || isNaN(parseInt(num))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({id: parseInt(id), num: parseInt(num)});
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
// 强化消耗表
|
||||
import {readFileAndParse} from '../util'
|
||||
import { FILENAME } from '../../consts'
|
||||
|
||||
export interface DicStrengthenCost {
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// 消耗铜钱
|
||||
readonly costCoin: number;
|
||||
}
|
||||
|
||||
export const dicStrengthenCost = new Map<number, number>();
|
||||
export function loadStrengthenCost() {
|
||||
dicStrengthenCost.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_STRENGTHEN_COST);
|
||||
|
||||
arr.forEach(o => {
|
||||
dicStrengthenCost.set(o.level, o.costCoin);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
@@ -30,17 +30,17 @@ export interface DicEquipProduceBase {
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
// 可以研发的品质
|
||||
readonly quality: number;
|
||||
// 开启炼器及研发等级
|
||||
readonly levelProduce: number;
|
||||
// 可研发的碎片的品质
|
||||
readonly qualityProduce: number[];
|
||||
readonly levelProduce: number[];
|
||||
}
|
||||
|
||||
const DicEquipProduceKeys: KeysEnum<DicEquipProduceBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
quality: true,
|
||||
levelProduce: true,
|
||||
qualityProduce: true
|
||||
};
|
||||
|
||||
// 演武台
|
||||
@@ -130,7 +130,7 @@ export interface DicWishPoolBase {
|
||||
readonly id: number;
|
||||
// 等级
|
||||
readonly level: number;
|
||||
readonly wishGoodsEquips: Array<{quality: number, count: number}>;
|
||||
readonly wishgoodsDrawings: Array<{quality: number, count: number}>;
|
||||
readonly wishGoodsHeros: Array<{quality: number, count: number}>;
|
||||
readonly consume: number;
|
||||
}
|
||||
@@ -138,7 +138,7 @@ export interface DicWishPoolBase {
|
||||
const DicWishPoolKeys: KeysEnum<DicWishPoolBase> = {
|
||||
id: true,
|
||||
level: true,
|
||||
wishGoodsEquips: true,
|
||||
wishgoodsDrawings: true,
|
||||
wishGoodsHeros: true,
|
||||
consume: true,
|
||||
};
|
||||
@@ -194,7 +194,7 @@ export function loadStructure() {
|
||||
let arrEquip = readFileAndParse(FILENAME.DIC_GUILD_EQUIP_PRODUCE_BASE);
|
||||
arrEquip.forEach(o => {
|
||||
setStructureConsume(o);
|
||||
o.qualityProduce = parseNumberList(o.qualityProduce);
|
||||
o.levelProduce = parseNumberList(o.levelProduce);
|
||||
dicEquipPriduceBase.set(o.level, _.pick(o, Object.keys(DicEquipProduceKeys)));
|
||||
});
|
||||
arrEquip = undefined;
|
||||
@@ -239,9 +239,9 @@ export function loadStructure() {
|
||||
let arrWishPool = readFileAndParse(FILENAME.DIC_GUILD_WISH_POOL_BASE);
|
||||
arrWishPool.forEach(o => {
|
||||
setStructureConsume(o);
|
||||
o.wishGoodsEquips = o.wishgoodsEquip.split('|').map(wishGoodsEquip=>{
|
||||
let wishGoodsEquips = wishGoodsEquip.split('&');
|
||||
return {quality: parseInt(wishGoodsEquips[0]), count: parseInt(wishGoodsEquips[1])};
|
||||
o.wishgoodsDrawings = o.wishgoodsDrawing.split('|').map(wishgoodsDrawing=>{
|
||||
let wishgoodsDrawings = wishgoodsDrawing.split('&');
|
||||
return {quality: parseInt(wishgoodsDrawings[0]), count: parseInt(wishgoodsDrawings[1])};
|
||||
});
|
||||
o.wishGoodsHeros = o.wishgoodsHero.split('|').map(wishGoodsHero=>{
|
||||
let wishGoodsHeros = wishGoodsHero.split('&');
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
// 镇念塔表
|
||||
import { decodeArrayListStr, readFileAndParse, parseNumberList } from '../util'
|
||||
import { FILENAME } from '../../consts';
|
||||
|
||||
export interface DicSuit {
|
||||
// 套装id
|
||||
readonly id: number;
|
||||
// 套装类型,相同suitType效果可跨级用
|
||||
readonly suitType: number;
|
||||
// 星级,相同suitType starLevel较高的套装可覆盖较低的效果
|
||||
readonly starLevel: number;
|
||||
// 包含关卡
|
||||
readonly name: string;
|
||||
// 总件数
|
||||
readonly totalCount: number;
|
||||
// 套装效果
|
||||
readonly effect: Array<{ count: number, seid: number }>;
|
||||
readonly tireInfo: Array<number>;
|
||||
}
|
||||
|
||||
|
||||
export const dicSuit = new Map<number, DicSuit>();
|
||||
export const dicSuitByTypeAndLv = new Map<string, DicSuit>();
|
||||
export function loadSuit() {
|
||||
dicSuit.clear();
|
||||
dicSuitByTypeAndLv.clear();
|
||||
|
||||
let arr = readFileAndParse(FILENAME.DIC_SUIT);
|
||||
|
||||
arr.forEach(o => {
|
||||
o.effect = parseSuitEffect(o.effect);
|
||||
o.tireInfo = parseNumberList(o.tireInfo);
|
||||
dicSuit.set(o.id, o);
|
||||
dicSuitByTypeAndLv.set(`${o.suitType}_${o.starLevel}`, o);
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
|
||||
function parseSuitEffect(str: string) {
|
||||
let result = new Array<{ count: number, seid: number }>();
|
||||
if (!str) return result;
|
||||
let decodeArr = decodeArrayListStr(str);
|
||||
for (let [count, seid] of decodeArr) {
|
||||
if (isNaN(parseInt(count)) || isNaN(parseFloat(seid))) {
|
||||
throw new Error('data table format wrong');
|
||||
}
|
||||
result.push({ count: parseInt(count), seid: parseFloat(seid) });
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -2,20 +2,19 @@
|
||||
|
||||
import { HeroModel, HeroType, } from '../db/Hero';
|
||||
import { ItemModel } from '../db/Item';
|
||||
import { EquipModel, RandSe, Holes, RandMain, equipUpdate } from './../db/Equip';
|
||||
import { gameData, getQuenchByQualityAndGrade, getQuenchGradeByValue } from './data';
|
||||
import { RANDOM_SE_COUNT, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE, HERO_SYSTEM_TYPE, TASK_TYPE, ITEM_CHANGE_REASON } from '../consts';
|
||||
import { getRandValueByMinMax, getRandEelm } from './util';
|
||||
import { gameData } from './data';
|
||||
import { ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON } from '../consts';
|
||||
import { getRandValueByMinMax, getRandEelm, getRandEelmWithWeight, getDecimalCnt } from './util';
|
||||
|
||||
import { findWhere } from 'underscore';
|
||||
import { RoleModel, RoleType, } from '../db/Role';
|
||||
import { Figure } from '../domain/dbGeneral';
|
||||
import { getTimeFun } from './timeUtil';
|
||||
import { reCalAllHeroCe } from './playerCe';
|
||||
import { checkTaskWithEquip } from './taskUtil';
|
||||
// import { checkTask, checkTaskWithHeroes, checkTaskWithEquip, accomplishTask } from './taskUtil';
|
||||
import { SkinModel, } from '../db/Skin';
|
||||
import { TaskListReturn } from '../domain/roleField/task';
|
||||
import { JewelModel, jewelUpdate, RandSe, } from '../db/Jewel';
|
||||
|
||||
/**
|
||||
* 只插入皮肤,不管那么多的
|
||||
@@ -80,76 +79,60 @@ export async function addBag(roleId: string, roleName: string, data: { id: numbe
|
||||
}
|
||||
|
||||
|
||||
export async function addEquips(roleId: string, roleName: string, weapons: { id: number, hid?: number }[], reason: number) {
|
||||
let equipInfos: equipUpdate[] = [];
|
||||
for(let weapon of weapons) {
|
||||
let info = await getAddEquipInfo(roleId, roleName, weapon);
|
||||
equipInfos.push(info);
|
||||
export async function addJewels(roleId: string, roleName: string, jewels: { id: number, }[], reason: number) {
|
||||
let jewelInfo: jewelUpdate[] = [];
|
||||
for(let jewel of jewels) {
|
||||
let info = await getAddJewelInfo(roleId, roleName, jewel);
|
||||
jewelInfo.push(info);
|
||||
}
|
||||
|
||||
const equips = await EquipModel.createEquips(roleId, equipInfos);
|
||||
const jewelResult = await JewelModel.createJewels(roleId, jewelInfo);
|
||||
let pushMessages: TaskListReturn[] = [];
|
||||
// 任务
|
||||
for(let equip of equips) {
|
||||
let pushMessage = await checkTaskWithEquip(roleId, TASK_TYPE.EQUIP_SUIT, equip);
|
||||
if(reason == ITEM_CHANGE_REASON.EQUIP_COMPOSE) {
|
||||
let pm = await checkTaskWithEquip(roleId, TASK_TYPE.EQUIP_COMPOSE_SUIT, equip);
|
||||
pushMessages.push(...pm);
|
||||
}
|
||||
pushMessages.push(...pushMessage);
|
||||
}
|
||||
// TODO 修改任务
|
||||
// for(let equip of jewelResult) {
|
||||
// let pushMessage = await checkTaskWithEquip(roleId, TASK_TYPE.EQUIP_SUIT, equip);
|
||||
// if(reason == ITEM_CHANGE_REASON.EQUIP_COMPOSE) {
|
||||
// let pm = await checkTaskWithEquip(roleId, TASK_TYPE.EQUIP_COMPOSE_SUIT, equip);
|
||||
// pushMessages.push(...pm);
|
||||
// }
|
||||
// pushMessages.push(...pushMessage);
|
||||
// }
|
||||
|
||||
return { equips: equips.map(equip => {
|
||||
return { ...equip, inc: 1, reason }
|
||||
return { jewels: jewelResult.map(jewel => {
|
||||
return { ...jewel, count: 1, inc: 1, reason }
|
||||
}), pushMessages }
|
||||
}
|
||||
|
||||
export async function getAddEquipInfo(roleId: string, roleName: string, weapon: { id: number, hid?: number }) {
|
||||
let { id, hid = 0 } = weapon;
|
||||
let { name, quality, suitId, hole, randomEffect, itid, goodsAbility } = gameData.goods.get(id);
|
||||
let { type } = ITID.get(itid);
|
||||
export async function getAddJewelInfo(roleId: string, roleName: string, jewel: { id: number, }) {
|
||||
let { id, } = jewel;
|
||||
let { name, randomEffect, effectCount } = gameData.jewel.get(id);
|
||||
|
||||
// 随机属性
|
||||
let randomNum = RANDOM_SE_COUNT.get(quality);
|
||||
let randomResult: number[] = getRandEelm(randomEffect, randomNum);
|
||||
let randomResult: number[] = getRandEelm(randomEffect, effectCount);
|
||||
|
||||
let randSe: Array<RandSe> = randomResult.map((id: number, i: number) => {
|
||||
let random = gameData.randomEffectPool.get(id)
|
||||
let rand = 0;
|
||||
if (random.id > 0) rand = getRandValueByMinMax(random.Min, random.Max, 0);
|
||||
return {
|
||||
id: i + 1,
|
||||
seid: random.id,
|
||||
rand,
|
||||
locked: false
|
||||
};
|
||||
let randSe: Array<RandSe> = randomResult.map((id: number, index: number) => {
|
||||
return getJewelRandSe(index + 1, id);
|
||||
});
|
||||
|
||||
let randRange = 0;
|
||||
return { roleId, roleName, id, name, randSe };
|
||||
}
|
||||
|
||||
// 淬火品相
|
||||
let randMain: RandMain[] = [];
|
||||
let grade = 0;
|
||||
for(let [ attrId, attrValue ] of goodsAbility) {
|
||||
if(attrValue > 0) {
|
||||
let { randMin, randMax } = getQuenchByQualityAndGrade(quality, grade);
|
||||
let rand = getRandValueByMinMax(randMin, randMax, 0);
|
||||
// console.log(quality, grade, rand)
|
||||
grade = getQuenchGradeByValue(quality, rand);
|
||||
randMain.push({
|
||||
id: attrId,
|
||||
rand
|
||||
});
|
||||
}
|
||||
/**
|
||||
* 天晶石已知词条随机值
|
||||
* @param id 词条位置,第几条
|
||||
* @param seid 词条id
|
||||
* @returns
|
||||
*/
|
||||
export function getJewelRandSe(id: number, seid: number) {
|
||||
let dicRandom = gameData.randomEffectPool.get(seid)
|
||||
let rand = 0;
|
||||
if (dicRandom.id > 0) {
|
||||
let randRange = getRandEelmWithWeight(dicRandom.rate);
|
||||
let randResult = getRandValueByMinMax(randRange.dic.min, randRange.dic.max, getDecimalCnt(dicRandom.gap));
|
||||
let n = Math.floor((randResult - dicRandom.Min)/dicRandom.gap);
|
||||
rand = dicRandom.Min + n * dicRandom.gap;
|
||||
}
|
||||
|
||||
|
||||
let holes = new Array<Holes>();
|
||||
for (let i = 0; i < hole; i++) {
|
||||
holes.push({ id: i + 1, isOpen: false, jewel: 0 });
|
||||
}
|
||||
|
||||
return { roleId, roleName, id, name, quality, suitId, randRange, ePlaceId: type, randSe, holes, hid, grade, randMain };
|
||||
return new RandSe(id, dicRandom.id, rand);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+182
-210
@@ -5,13 +5,12 @@
|
||||
import { HERO_SYSTEM_TYPE, ABI_TYPE, HERO_CE_RATIO, LINEUP_NUM } from '../consts';
|
||||
|
||||
import { cal, deepCopy, getAllAttrStage, reduceCe } from './util';
|
||||
import { HeroModel, HeroType, HeroUpdate, CeAttrData } from '../db/Hero';
|
||||
import { HeroModel, HeroType, HeroUpdate, CeAttrData, EPlace, Stone } from '../db/Hero';
|
||||
import { RoleModel, RoleType, RoleUpdate, CeAttrDataRole } from '../db/Role';
|
||||
import { AttributeCal } from '../domain/roleField/attribute';
|
||||
import { ABI_STAGE, SEID_TYPE } from '../consts';
|
||||
import { gameData, getJobByGradeAndClass, getHeroWakeByQuality, getHeroStarByQuality, getFriendShipById, getSchoolRateByStar, getScollByStar, getTeraph, getDicSuitByTypeAndLv } from './data';
|
||||
import { gameData, getJobByGradeAndClass, getHeroWakeByQuality, getHeroStarByQuality, getFriendShipById, getSchoolRateByStar, getScollByStar, getTeraph, getEquipQualityIdByEquipIdAndPoint, getEquipStarIdByEquipId, getEquipSuitByHero, getEquipStarMainAttrByStage, getJewelConditionByLvAndSeId } from './data';
|
||||
import { DicSe } from './dictionary/DicSe';
|
||||
import { EquipType } from '../db/Equip';
|
||||
import { DicRandomEffectPool } from './dictionary/DicRandomEffectPool';
|
||||
import { SchoolModel } from '../db/School';
|
||||
import { ABI_TYPE_MAIN, ABI_JOB_STAGE, ABI_STAGE_TO_TYPE } from '../consts/constModules/abilityConst'
|
||||
@@ -19,16 +18,16 @@ import { PvpDefenseModel } from '../db/PvpDefense';
|
||||
import { findIndex } from 'underscore';
|
||||
import { GuildModel } from '../db/Guild';
|
||||
import { DicJob } from './dictionary/DicJob';
|
||||
import { DicSuit } from './dictionary/DicSuit';
|
||||
import { saveCeChangeLog } from './logUtil';
|
||||
import { JewelType } from '../db/Jewel';
|
||||
|
||||
// 修改并下发战力
|
||||
export async function calPlayerCeAndSave(type: number, roleId: string, originHero: HeroType, update: HeroUpdate, args?: Array<number>) {
|
||||
export async function calPlayerCeAndSave(type: number, roleId: string, originHero: HeroType, update: HeroUpdate, args?: Array<number>, params?: any) {
|
||||
let role = await RoleModel.findByRoleId(roleId);
|
||||
|
||||
let { attr: roleAttrs = [], serverId } = role;
|
||||
|
||||
let heroAttrs = calPlayerCe(originHero, update, type, args); // 根据操作计算attr的增加
|
||||
let heroAttrs = await calPlayerCe(originHero, update, type, args, params); // 根据操作计算attr的增加
|
||||
|
||||
let newAttr = new AttributeCal();
|
||||
newAttr.setLv(update.lv||originHero.lv);
|
||||
@@ -138,7 +137,7 @@ async function reCalRoleAttr(type: number, heros: Array<HeroType>, role: RoleTyp
|
||||
}
|
||||
|
||||
// 计算单个武将战力
|
||||
export function calPlayerCe(hero: HeroType, update: HeroUpdate, type: number, args: Array<number> = []) {
|
||||
export async function calPlayerCe(hero: HeroType, update: HeroUpdate, type: number, args: Array<number> = [], params) {
|
||||
let heroAttrs: CeAttrData[] = []; // {"hp": {"base": number, "fixUp": number, "ratioUp": number}}
|
||||
|
||||
let addSeidList = new Array<number>();
|
||||
@@ -166,20 +165,27 @@ export function calPlayerCe(hero: HeroType, update: HeroUpdate, type: number, ar
|
||||
case HERO_SYSTEM_TYPE.CONNECT:
|
||||
heroAttrs = calHeroConectIncAttr(hero, update, args[0]);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.EQUIP:
|
||||
heroAttrs = calEquipPutOnOffIncAttr(hero, args, addSeidList, removeSeidList);
|
||||
case HERO_SYSTEM_TYPE.COMPOSE_EQUIP:
|
||||
heroAttrs = calComposeEquipIncAttr(hero, update, args[0]);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.EQUIP_BASE:
|
||||
heroAttrs = calHeroEquipIncAttr(hero);
|
||||
case HERO_SYSTEM_TYPE.EQUIP_STRENGTH:
|
||||
heroAttrs = calEquipStrengthIncAttr(hero, update, args);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.RESTRENGTHEN:
|
||||
heroAttrs = calRestrengthenIncAttr(hero, args.shift(), args, addSeidList, removeSeidList);
|
||||
case HERO_SYSTEM_TYPE.EQUIP_QUALITY:
|
||||
heroAttrs = calEquipQualityIncAttr(hero, update, args);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.JEWEL_ON:
|
||||
heroAttrs = calHeroCeWhenJewelOnOrOff(hero, args[0], args[1]);
|
||||
case HERO_SYSTEM_TYPE.EQUIP_STAR:
|
||||
heroAttrs = calEquipStarIncAttr(hero, update, args, addSeidList, removeSeidList);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.JEWEL_OFF:
|
||||
heroAttrs = calHeroCeWhenJewelOnOrOff(hero, 0, args[0]);
|
||||
case HERO_SYSTEM_TYPE.EQUIP_JEWEL:
|
||||
heroAttrs = calEquipPutOnOrOffJewelIncAttr(hero, update, args, params, addSeidList, removeSeidList);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.EQUIP_STONE:
|
||||
heroAttrs = calEquipPutOnOrOffStoneIncAttr(hero, update, args, params, addSeidList, removeSeidList);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE:
|
||||
case HERO_SYSTEM_TYPE.JEWEL_QUENCH:
|
||||
heroAttrs = calJewelResetRandSeIncAttr(hero, args, params, addSeidList, removeSeidList);
|
||||
break;
|
||||
case HERO_SYSTEM_TYPE.SCROLL:
|
||||
heroAttrs = calHeroCeScrollIncAttr(hero, update);
|
||||
@@ -603,183 +609,175 @@ export function calHeroFavourUpIncAttr(originHero: HeroType, update: HeroUpdate)
|
||||
return heroAttrs;
|
||||
}
|
||||
|
||||
/**
|
||||
* 穿脱, removeSeidList原来身上穿着的所有装备的seid,包括套装的
|
||||
* @param {HeroType} hero 武将
|
||||
* @param {number[]} seids args 原来穿着的装备的seid
|
||||
* @param {number[]} addSeidList 用于更新被动
|
||||
* @param {number[]} removeSeidList 用于更新被动
|
||||
*/
|
||||
export function calEquipPutOnOffIncAttr(hero: HeroType, seids: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
|
||||
// 计算身上所有装备的战力值(特技相关以外)
|
||||
let heroAttrs = calHeroEquipIncAttr(hero);
|
||||
|
||||
// 计算被动技能
|
||||
let resultSeid = calEquipSeids(hero);
|
||||
for(let seid of resultSeid) {
|
||||
addSeidList.push(seid);
|
||||
}
|
||||
|
||||
for (let seid of seids) {
|
||||
removeSeidList.push(seid)
|
||||
}
|
||||
|
||||
return heroAttrs
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算一个武将身上的所有被动seid
|
||||
* @param {HeroType} hero 武将,equip需要populate
|
||||
*/
|
||||
export function calEquipSeids(hero: HeroType) {
|
||||
let seids: number[] = [];
|
||||
// 计算被动技能
|
||||
let { ePlace } = hero;
|
||||
let suits = new Map<number, Map<number, { dic: DicSuit, count: number }>>(); // suitType => starLevel => DicSuit
|
||||
|
||||
for (let { equip } of ePlace) {
|
||||
if (equip) {
|
||||
let e = <EquipType>equip;
|
||||
if (!!e.randSe) {
|
||||
for (let { seid, rand } of e.randSe) {
|
||||
seids.push(seid, rand);
|
||||
}
|
||||
}
|
||||
if (e.suitId > 0) {
|
||||
let { suitType, starLevel } = gameData.suit.get(e.suitId);
|
||||
if (!suits.has(suitType)) {
|
||||
suits.set(suitType, new Map<number, { dic: DicSuit, count: number }>());
|
||||
}
|
||||
for(let lv = 1; lv <= starLevel; lv++) {
|
||||
let dicSuit = getDicSuitByTypeAndLv(suitType, lv); // 计算同type的低阶套装
|
||||
if(dicSuit) {
|
||||
if(!suits.get(suitType).has(lv)) {
|
||||
suits.get(suitType).set(lv, { dic: dicSuit, count: 0 });
|
||||
}
|
||||
suits.get(suitType).get(lv).count ++;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
export function calComposeEquipIncAttr(hero: HeroType, update: HeroUpdate, eplaceId: number) {
|
||||
let { attr: heroAttrs } = hero;
|
||||
let newEquip = update.ePlace.find(cur => cur.id == eplaceId);
|
||||
if(newEquip) {
|
||||
let dicEquip = gameData.equipById.get(newEquip.equipId);
|
||||
for(let attr of dicEquip.attribute) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
}
|
||||
|
||||
for(let [ _suitType, map ] of suits) {
|
||||
let effectSeid = new Map<number, { starLevel: number, seid: number }>(); // count => { starLevel, seid }
|
||||
for(let [ starLevel, { dic: { effect }, count } ] of map) {
|
||||
for(let { count: effectCount, seid} of effect) {
|
||||
if(count >= effectCount ) { // 生效
|
||||
if(!effectSeid.has(effectCount) || effectSeid.get(effectCount).starLevel < starLevel) { // 没有同数量效果
|
||||
effectSeid.set(effectCount, { starLevel, seid });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for(let [_count, { seid }] of effectSeid) {
|
||||
seids.push(seid, 0);
|
||||
}
|
||||
}
|
||||
return seids;
|
||||
}
|
||||
|
||||
/**
|
||||
* 装备,装备栏升级,装备精炼等涉及到值的
|
||||
* @param {HeroType} hero 装备更新过的武将
|
||||
*/
|
||||
export function calHeroEquipIncAttr(hero: HeroType) {
|
||||
let { ePlace, attr: heroAttrs } = hero;
|
||||
|
||||
let setMap = new Map<number, number>();
|
||||
for (let { equip, lv, refineLv } of ePlace) {
|
||||
if (equip) {
|
||||
let e = <EquipType>equip;
|
||||
let dicGoods = gameData.goods.get(e.id);
|
||||
let { goodsAbility, goodsAbilityUp } = dicGoods;
|
||||
let dicRefine = gameData.refine.get(refineLv);
|
||||
|
||||
let jewel = new Map<number, number>();
|
||||
for (let { jewel: jewelId } of e.holes) {
|
||||
if (jewelId > 0) {
|
||||
let g = gameData.goods.get(jewelId);
|
||||
if (g) {
|
||||
let jGoods = g.goodsAbility;
|
||||
jGoods.forEach((value, key) => {
|
||||
if (!jewel.has(key)) {
|
||||
jewel.set(key, value);
|
||||
} else {
|
||||
jewel.set(key, jewel.get(key) + value);
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let randMainMap = new Map<number, number>();
|
||||
for(let {id, rand} of (e.randMain||[])) {
|
||||
randMainMap.set(id, rand);
|
||||
}
|
||||
for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
|
||||
// console.log('***', i);
|
||||
let value1 = goodsAbility.get(i) || 0 * (HERO_CE_RATIO + e.randRange);
|
||||
// console.log('基础值', value1);
|
||||
let valueup = goodsAbilityUp.get(i) || 0;
|
||||
// console.log('成长', lv, valueup);
|
||||
let valueRefine = dicRefine ? dicRefine.upPercent : 0;
|
||||
// console.log('精炼', dicRefine?dicRefine.upPercent:0 );
|
||||
let valueJewel = jewel.get(i) || 0;
|
||||
// console.log('宝石', valueJewel);
|
||||
let valueGrade = randMainMap.get(i)||0;
|
||||
// console.log('品相', valueGrade)
|
||||
let attr = (value1 + lv * valueup) * valueGrade * (HERO_CE_RATIO + valueRefine) + valueJewel * HERO_CE_RATIO * HERO_CE_RATIO;
|
||||
|
||||
if(attr >= 0) {
|
||||
// console.log('装备战力:', i, attr);
|
||||
if(setMap.has(i)) {
|
||||
setMap.set(i, setMap.get(i) + Math.floor(attr / HERO_CE_RATIO));
|
||||
} else {
|
||||
setMap.set(i, Math.floor(attr / HERO_CE_RATIO));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
|
||||
let attr = setMap.get(i)||0;
|
||||
updateHeroAttr(heroAttrs, i, { set: { equipUp: attr } })
|
||||
}
|
||||
|
||||
hero.attr = heroAttrs;
|
||||
return heroAttrs;
|
||||
}
|
||||
|
||||
/**
|
||||
* 洗炼
|
||||
* @param {HeroType} hero 更新过的武将
|
||||
* @param {number} ePaceId 更新的栏位id
|
||||
* @param {number[]} seids 移除的seid
|
||||
* @param {number[]} addSeidList 用于更新被动
|
||||
* @param {number[]} removeSeidList 用于更新被动
|
||||
*/
|
||||
export function calRestrengthenIncAttr(hero: HeroType, ePaceId: number, seids: Array<number>, addSeidList: Array<number>, removeSeidList: Array<number>) {
|
||||
export function calEquipStrengthIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[]) {
|
||||
let { attr: heroAttrs, ePlace: oldEplace } = hero;
|
||||
let { ePlace: newEplace } = update;
|
||||
for(let eplaceId of eplaceIds) {
|
||||
let oldEquip = oldEplace.find(cur => cur.id == eplaceId);
|
||||
let newEquip = newEplace.find(cur => cur.id == eplaceId);
|
||||
if(newEquip && oldEquip) {
|
||||
let dicEquip = gameData.equipById.get(oldEquip.equipId);
|
||||
for(let attr of dicEquip.attributeUp) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * (newEquip.lv - oldEquip.lv) * HERO_CE_RATIO } });
|
||||
}
|
||||
}
|
||||
}
|
||||
return heroAttrs
|
||||
}
|
||||
|
||||
let { attr: heroAttrs } = hero;
|
||||
let { ePlace } = hero;
|
||||
export function calEquipQualityIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[]) {
|
||||
let { attr: heroAttrs, ePlace: oldEplace } = hero;
|
||||
let { ePlace: newEplace } = update;
|
||||
for(let eplaceId of eplaceIds) {
|
||||
let oldEquip = oldEplace.find(cur => cur.id == eplaceId);
|
||||
let newEquip = newEplace.find(cur => cur.id == eplaceId);
|
||||
if(newEquip && oldEquip) {
|
||||
let dicOldEquipQuality = getEquipQualityIdByEquipIdAndPoint(oldEquip.equipId, oldEquip.quality, oldEquip.qualityStage);
|
||||
let dicNewEquipQuality = getEquipQualityIdByEquipIdAndPoint(newEquip.equipId, newEquip.quality, newEquip.qualityStage);
|
||||
for(let attr of dicOldEquipQuality.attribute) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
for(let attr of dicNewEquipQuality.attribute) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
}
|
||||
}
|
||||
return heroAttrs
|
||||
}
|
||||
|
||||
let curPlace = ePlace.find(cur => cur.id == ePaceId);
|
||||
if (curPlace && curPlace.equip) {
|
||||
let e = <EquipType>curPlace.equip;
|
||||
for (let { seid, rand } of e.randSe) {
|
||||
addSeidList.push(seid, rand);
|
||||
|
||||
export function calEquipStarIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], addSeidList: number[], removeSeidList: number[]) {
|
||||
// 升星本身的属性加成
|
||||
let { hid, attr: heroAttrs, ePlace: oldEplace } = hero;
|
||||
let { ePlace: newEplace } = update;
|
||||
for(let eplaceId of eplaceIds) {
|
||||
let oldEquip = oldEplace.find(cur => cur.id == eplaceId);
|
||||
let newEquip = newEplace.find(cur => cur.id == eplaceId);
|
||||
if(newEquip && oldEquip) {
|
||||
let dicOldEquipStar = getEquipStarIdByEquipId(oldEquip.equipId, oldEquip.star);
|
||||
let dicNewEquipStar = getEquipStarIdByEquipId(newEquip.equipId, newEquip.star);
|
||||
// 主属性
|
||||
for(let attr of getEquipStarMainAttrByStage(oldEquip.equipId, oldEquip.star, oldEquip.starStage)) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
for(let attr of getEquipStarMainAttrByStage(newEquip.equipId, newEquip.star, newEquip.starStage)) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
for(let attr of dicOldEquipStar.subAttr) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: -1 * attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
for(let attr of dicNewEquipStar.subAttr) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (let seid of seids) {
|
||||
removeSeidList.push(seid)
|
||||
// 套装属性
|
||||
calEquipSuitIncAttr(hid, oldEplace, newEplace, addSeidList, removeSeidList);
|
||||
return heroAttrs;
|
||||
}
|
||||
|
||||
function calEquipSuitIncAttr(hid: number, oldEplace: EPlace[], newEplace: EPlace[], addSeidList: number[], removeSeidList: number[]) {
|
||||
let dicEquipSuit = getEquipSuitByHero(hid);
|
||||
let oldSuitStars: number[] = [], newSuitStars: number[] = [];
|
||||
for(let equipId of dicEquipSuit.equips) {
|
||||
let oldEquip = oldEplace.find(cur => cur.equipId == equipId);
|
||||
oldSuitStars.push(oldEquip? oldEquip.star: 0);
|
||||
let newEquip = newEplace.find(cur => cur.equipId == equipId);
|
||||
newSuitStars.push(newEquip? newEquip.star: 0);
|
||||
}
|
||||
let oldStar = Math.min(...oldSuitStars);
|
||||
let newStar = Math.min(...newSuitStars);
|
||||
|
||||
for(let { star, seid } of dicEquipSuit.effect) {
|
||||
if(oldStar >= star) removeSeidList.push(seid);
|
||||
if(newStar >= star) addSeidList.push(seid, 0);
|
||||
}
|
||||
}
|
||||
|
||||
export function calEquipPutOnOrOffJewelIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], params: { oldJewel: JewelType, newJewel: JewelType }, addSeidList: number[], removeSeidList: number[]) {
|
||||
let { attr: heroAttrs, ePlace: oldEplace } = hero;
|
||||
let { ePlace: newEplace } = update;
|
||||
for(let eplaceId of eplaceIds) {
|
||||
let oldEquip = oldEplace.find(cur => cur.id == eplaceId);
|
||||
setRandSeToSeidList(params.oldJewel, oldEquip, removeSeidList);
|
||||
let newEquip = newEplace.find(cur => cur.id == eplaceId);
|
||||
setRandSeToSeidList(params.newJewel, newEquip, addSeidList);
|
||||
}
|
||||
|
||||
return heroAttrs
|
||||
return heroAttrs;
|
||||
}
|
||||
|
||||
function setRandSeToSeidList(jewel: JewelType, equip: EPlace, list: number[]) {
|
||||
if(equip && jewel) {
|
||||
for(let { id, seid, rand } of jewel.randSe) {
|
||||
if(isRandSeUnLock(jewel.id, id, equip.stones)) {
|
||||
list.push(seid, rand);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function isRandSeUnLock(jewelId: number, randSeId: number, stones: Stone[]) {
|
||||
let dicJewel = gameData.jewel.get(jewelId);
|
||||
let dicJewelCondition = getJewelConditionByLvAndSeId(dicJewel.lv, randSeId);
|
||||
let stoneCnt = 0, stoneLv = 0;
|
||||
for(let { stone } of stones) {
|
||||
let dicStone = gameData.stone.get(stone);
|
||||
if(dicStone) {
|
||||
stoneCnt++;
|
||||
stoneLv += dicStone.lv;
|
||||
}
|
||||
}
|
||||
return stoneCnt >= dicJewelCondition.stoneCnt && stoneLv >= dicJewelCondition.stoneLv;
|
||||
}
|
||||
|
||||
export function calEquipPutOnOrOffStoneIncAttr(hero: HeroType, update: HeroUpdate, eplaceIds: number[], params: { jewel: JewelType }, addSeidList: number[], removeSeidList: number[]) {
|
||||
let { attr: heroAttrs, ePlace: oldEplace } = hero;
|
||||
let { ePlace: newEplace } = update;
|
||||
for(let eplaceId of eplaceIds) {
|
||||
let oldEquip = oldEplace.find(cur => cur.id == eplaceId);
|
||||
updateHeroAttrOfStone(heroAttrs, oldEquip, -1);
|
||||
setRandSeToSeidList(params.jewel, oldEquip, removeSeidList);
|
||||
let newEquip = newEplace.find(cur => cur.id == eplaceId);
|
||||
updateHeroAttrOfStone(heroAttrs, newEquip, 1);
|
||||
setRandSeToSeidList(params.jewel, newEquip, addSeidList); // 地玉石阶数变化可能导致属性词条解锁变化
|
||||
}
|
||||
return heroAttrs;
|
||||
}
|
||||
|
||||
function updateHeroAttrOfStone(heroAttrs: CeAttrData[], equip: EPlace, ratio: number) {
|
||||
for(let { stone } of equip.stones) {
|
||||
let dicStone = gameData.stone.get(stone);
|
||||
if(dicStone) {
|
||||
for(let attr of dicStone.attribute) {
|
||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp: ratio * attr.num * HERO_CE_RATIO } });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export function calJewelResetRandSeIncAttr(hero: HeroType, eplaceIds: number[], params: { oldJewel: JewelType, newJewel: JewelType }, addSeidList: number[], removeSeidList: number[]) {
|
||||
let { attr: heroAttrs, ePlace } = hero;
|
||||
for(let eplaceId of eplaceIds) {
|
||||
let equip = ePlace.find(cur => cur.id == eplaceId);
|
||||
setRandSeToSeidList(params.oldJewel, equip, removeSeidList);
|
||||
setRandSeToSeidList(params.newJewel, equip, addSeidList);
|
||||
}
|
||||
return heroAttrs;
|
||||
}
|
||||
|
||||
// 添加技能增加的被动属性
|
||||
@@ -824,6 +822,7 @@ function addSeidEffect(heroAttrs: CeAttrData[], addSeidList: Array<number>, remo
|
||||
|
||||
// 获取dic_zyz_se内容
|
||||
function addSeid(effectList: Array<any>, seidId: number, rand: number, seidValue = new Array<number>()) {
|
||||
console.log('##### addSeid', effectList, seidId, rand, seidValue)
|
||||
let curSeid: DicSe | DicRandomEffectPool = gameData.se.get(seidId);
|
||||
if (!curSeid) curSeid = gameData.randomEffectPool.get(seidId);
|
||||
if (!curSeid) { console.log("seidId not found:" + seidId); return; }
|
||||
@@ -836,40 +835,13 @@ function addSeid(effectList: Array<any>, seidId: number, rand: number, seidValue
|
||||
return;
|
||||
}
|
||||
let seid: DicSe | DicRandomEffectPool = deepCopy(curSeid);
|
||||
console.log('#####', seid)
|
||||
if (curSeid.index > 0) {
|
||||
seid.gainValueArr[curSeid.index - 1] = rand;
|
||||
}
|
||||
effectList.push(seid);
|
||||
}
|
||||
|
||||
/**
|
||||
* 带上宝石
|
||||
* @param {HeroType} hero 武将数据
|
||||
* @param {number} id 带上的宝石
|
||||
* @param {number} oldId 脱下的宝石
|
||||
*/
|
||||
function calHeroCeWhenJewelOnOrOff(hero: HeroType, id: number, oldId: number) {
|
||||
let { attr: heroAttrs } = hero;
|
||||
let { goodsAbility } = gameData.goods.get(id)||{ goodsAbility: new Map<number, number>() };
|
||||
let { goodsAbility: oldGoodsAbility } = gameData.goods.get(oldId)||{ goodsAbility: new Map<number, number>() };
|
||||
|
||||
let allIds: number[] = [];
|
||||
for(let [ id ] of goodsAbility) {
|
||||
allIds.push(id);
|
||||
}
|
||||
for(let [ id ] of oldGoodsAbility) {
|
||||
if(allIds.indexOf(id) == -1) allIds.push(id);
|
||||
}
|
||||
for(let id of allIds) {
|
||||
let value = goodsAbility.get(id)||0;
|
||||
let oldValue = oldGoodsAbility.get(id)||0;
|
||||
updateHeroAttr(heroAttrs, id, { inc: { equipUp: (value - oldValue) * HERO_CE_RATIO } })
|
||||
}
|
||||
|
||||
hero.attr = heroAttrs;
|
||||
return heroAttrs;
|
||||
}
|
||||
|
||||
/**
|
||||
* 全局加成,百家学宫
|
||||
* @param role 角色
|
||||
|
||||
@@ -15,7 +15,6 @@ import { reduceCe, resResult } from "./util";
|
||||
import { calculatetopLineup, } from "./playerCe";
|
||||
import { GuildModel, GuildType } from "../db/Guild";
|
||||
import { PvpDefenseModel } from "../db/PvpDefense";
|
||||
import { EquipModel } from '../db/Equip';
|
||||
import { ActionPointModel } from '../db/ActionPoint';
|
||||
import { BattleDropModel } from '../db/BattleDrop';
|
||||
import { BattleRecordModel } from '../db/BattleRecord';
|
||||
@@ -101,6 +100,7 @@ import { HeroShowParam } from '../domain/roleField/hero';
|
||||
import { saveCeChangeLog } from "./logUtil";
|
||||
import { ActivityInRemote } from "../domain/activityField/activityField";
|
||||
import { AttributeCal } from "../domain/roleField/attribute";
|
||||
import { JewelModel } from "../db/Jewel";
|
||||
|
||||
// 储存在内存中的初始数据
|
||||
export function getInitRoleInfo() {
|
||||
@@ -418,7 +418,7 @@ export async function deletRole(roleId: string) {
|
||||
await ChatInfoModel.updateMany({ 'recentPrivateChats.targetRoleId': roleId }, { $pull: { recentPrivateChats: { targetRoleId: roleId } } });
|
||||
await DailyRecordModel.deleteMany({ roleId });
|
||||
await DungeonFirstModel.deleteMany({ roleId });
|
||||
await EquipModel.deleteMany({ roleId });
|
||||
await JewelModel.deleteMany({ roleId });
|
||||
await EquipPrintDropModel.deleteMany({ roleId });
|
||||
await EventRecordModel.deleteMany({ roleId });
|
||||
await ExpeditionPointModel.deleteMany({ roleId });
|
||||
|
||||
+71
-72
@@ -6,7 +6,6 @@ import { RoleType, RoleModel } from '../db/Role';
|
||||
import { TaskParam, TaskListReturn } from '../domain/roleField/task';
|
||||
import { getZeroPoint } from './timeUtil';
|
||||
import { HeroType } from '../db/Hero';
|
||||
import { EquipType, EquipModel } from '../db/Equip';
|
||||
import { ItemInter } from './interface';
|
||||
import { DailyChallengesData } from '../domain/activityField/dailyChallengesField';
|
||||
import { splitString } from './util';
|
||||
@@ -130,10 +129,10 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero:
|
||||
pushMessage = await checkTask(roleId, taskType, 1, true, { favourLv: hero.favourLv, oldLv: args[0] })
|
||||
}
|
||||
else if (taskType == TASK_TYPE.EQUIP_BY_HERO) {
|
||||
// arg[0] 1:穿上 -1:脱下
|
||||
let { ePlace } = hero;
|
||||
let count = ePlace.filter(cur => cur.equip).length;
|
||||
pushMessage = await checkTask(roleId, taskType, args[0], true, { count, isPutOn: args[0], oldCount: args[1] });
|
||||
// // arg[0] 1:穿上 -1:脱下
|
||||
// let { ePlace } = hero;
|
||||
// let count = ePlace.filter(cur => cur.equip).length;
|
||||
// pushMessage = await checkTask(roleId, taskType, args[0], true, { count, isPutOn: args[0], oldCount: args[1] });
|
||||
}
|
||||
else if (taskType == TASK_TYPE.EQUIP_STRENGTHEN) {
|
||||
// args: 依次为原先的装备的强化等级
|
||||
@@ -149,61 +148,61 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero:
|
||||
}
|
||||
|
||||
|
||||
export async function checkTaskWithEquip(roleId: string, taskType: number, equip: EquipType, args: number[] = []) {
|
||||
let pushMessage = new Array<TaskListReturn>();
|
||||
if (taskType == TASK_TYPE.EQUIP_QUALITY) {
|
||||
// args[0] 1:装上 -1:脱下
|
||||
let dicGood = gameData.goods.get(equip.id);
|
||||
pushMessage = await checkTask(roleId, taskType, args[0], true, { quality: dicGood.quality })
|
||||
}
|
||||
else if (taskType == TASK_TYPE.EQUIP_JEWEL) {
|
||||
// args[0] 原来镶嵌了多少宝石
|
||||
let { holes } = equip;
|
||||
let jewelCount = holes.filter(cur => cur.jewel > 0).length;
|
||||
if (jewelCount > 0 && args[0] <= 0) { // 原来没有,镶嵌上了
|
||||
pushMessage = await checkTask(roleId, taskType, 1, true, {});
|
||||
} else if (jewelCount <= 0 && args[0] > 0) { // 原来镶嵌着,现在没了
|
||||
pushMessage = await checkTask(roleId, taskType, -1, true, {});
|
||||
}
|
||||
}
|
||||
else if (taskType == TASK_TYPE.EQUIP_COMPOSE_SUIT) {
|
||||
let dicGood = gameData.goods.get(equip.id);
|
||||
if (dicGood.suitId) {
|
||||
pushMessage = await checkTask(roleId, taskType, 1, true, {});
|
||||
}
|
||||
}
|
||||
else if (taskType == TASK_TYPE.EQUIP_SUIT) {
|
||||
let dicGood = gameData.goods.get(equip.id);
|
||||
if (dicGood.suitId) {
|
||||
let suit = gameData.suit.get(dicGood.suitId);
|
||||
let equips = await EquipModel.getEquipsByIds(roleId, suit.tireInfo);
|
||||
let everyEquip = new Map<number, number>();
|
||||
for (let equip of equips) {
|
||||
if (everyEquip.has(equip.id)) {
|
||||
everyEquip.set(equip.id, everyEquip.get(equip.id) + 1);
|
||||
} else {
|
||||
everyEquip.set(equip.id, 1);
|
||||
}
|
||||
}
|
||||
let minCount = 0, curCount = 0;
|
||||
for (let id of suit.tireInfo) {
|
||||
let count = everyEquip.get(id) || 0;
|
||||
if (minCount > count) minCount = count;
|
||||
if (id == equip.id) curCount = count;
|
||||
}
|
||||
if (curCount == minCount) {
|
||||
pushMessage = await checkTask(roleId, taskType, 1, true, {});
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (taskType == TASK_TYPE.EQUIP_JEWEL_SUM) {
|
||||
// args[0] 原来镶嵌了多少宝石
|
||||
let { holes } = equip;
|
||||
let jewelCount = holes.filter(cur => cur.jewel > 0).length;
|
||||
pushMessage = await checkTask(roleId, taskType, jewelCount - args[0], true, {});
|
||||
}
|
||||
return pushMessage
|
||||
}
|
||||
// export async function checkTaskWithEquip(roleId: string, taskType: number, equip: EquipType, args: number[] = []) {
|
||||
// let pushMessage = new Array<TaskListReturn>();
|
||||
// if (taskType == TASK_TYPE.EQUIP_QUALITY) {
|
||||
// // args[0] 1:装上 -1:脱下
|
||||
// let dicGood = gameData.goods.get(equip.id);
|
||||
// pushMessage = await checkTask(roleId, taskType, args[0], true, { quality: dicGood.quality })
|
||||
// }
|
||||
// else if (taskType == TASK_TYPE.EQUIP_JEWEL) {
|
||||
// // args[0] 原来镶嵌了多少宝石
|
||||
// let { holes } = equip;
|
||||
// let jewelCount = holes.filter(cur => cur.jewel > 0).length;
|
||||
// if (jewelCount > 0 && args[0] <= 0) { // 原来没有,镶嵌上了
|
||||
// pushMessage = await checkTask(roleId, taskType, 1, true, {});
|
||||
// } else if (jewelCount <= 0 && args[0] > 0) { // 原来镶嵌着,现在没了
|
||||
// pushMessage = await checkTask(roleId, taskType, -1, true, {});
|
||||
// }
|
||||
// }
|
||||
// else if (taskType == TASK_TYPE.EQUIP_COMPOSE_SUIT) {
|
||||
// let dicGood = gameData.goods.get(equip.id);
|
||||
// if (dicGood.suitId) {
|
||||
// pushMessage = await checkTask(roleId, taskType, 1, true, {});
|
||||
// }
|
||||
// }
|
||||
// else if (taskType == TASK_TYPE.EQUIP_SUIT) {
|
||||
// let dicGood = gameData.goods.get(equip.id);
|
||||
// if (dicGood.suitId) {
|
||||
// let suit = gameData.suit.get(dicGood.suitId);
|
||||
// let equips = await EquipModel.getEquipsByIds(roleId, suit.tireInfo);
|
||||
// let everyEquip = new Map<number, number>();
|
||||
// for (let equip of equips) {
|
||||
// if (everyEquip.has(equip.id)) {
|
||||
// everyEquip.set(equip.id, everyEquip.get(equip.id) + 1);
|
||||
// } else {
|
||||
// everyEquip.set(equip.id, 1);
|
||||
// }
|
||||
// }
|
||||
// let minCount = 0, curCount = 0;
|
||||
// for (let id of suit.tireInfo) {
|
||||
// let count = everyEquip.get(id) || 0;
|
||||
// if (minCount > count) minCount = count;
|
||||
// if (id == equip.id) curCount = count;
|
||||
// }
|
||||
// if (curCount == minCount) {
|
||||
// pushMessage = await checkTask(roleId, taskType, 1, true, {});
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else if (taskType == TASK_TYPE.EQUIP_JEWEL_SUM) {
|
||||
// // args[0] 原来镶嵌了多少宝石
|
||||
// let { holes } = equip;
|
||||
// let jewelCount = holes.filter(cur => cur.jewel > 0).length;
|
||||
// pushMessage = await checkTask(roleId, taskType, jewelCount - args[0], true, {});
|
||||
// }
|
||||
// return pushMessage
|
||||
// }
|
||||
|
||||
export async function checkTaskWithArgs(roleId: string, taskType: number, args: number[]) {
|
||||
let pushMessage = new Array<TaskListReturn>();
|
||||
@@ -217,18 +216,18 @@ export async function checkTaskWithArgs(roleId: string, taskType: number, args:
|
||||
}
|
||||
}
|
||||
else if (taskType == TASK_TYPE.EQUIP_JEWEL_STAGE) {
|
||||
// args 装上的, 卸下的
|
||||
let [putOnJewel, putOffJewel] = args;
|
||||
if (putOnJewel > 0) {
|
||||
let dicGood = gameData.goods.get(putOnJewel);
|
||||
let push = await checkTask(roleId, taskType, 1, true, { stage: dicGood.lvLimited });
|
||||
pushMessage.push(...push);
|
||||
}
|
||||
if (putOffJewel > 0) {
|
||||
let dicGood = gameData.goods.get(putOffJewel);
|
||||
let push = await checkTask(roleId, taskType, -1, true, { stage: dicGood.lvLimited });
|
||||
pushMessage.push(...push);
|
||||
}
|
||||
// // args 装上的, 卸下的
|
||||
// let [putOnJewel, putOffJewel] = args;
|
||||
// if (putOnJewel > 0) {
|
||||
// let dicGood = gameData.goods.get(putOnJewel);
|
||||
// let push = await checkTask(roleId, taskType, 1, true, { stage: dicGood.lvLimited });
|
||||
// pushMessage.push(...push);
|
||||
// }
|
||||
// if (putOffJewel > 0) {
|
||||
// let dicGood = gameData.goods.get(putOffJewel);
|
||||
// let push = await checkTask(roleId, taskType, -1, true, { stage: dicGood.lvLimited });
|
||||
// pushMessage.push(...push);
|
||||
// }
|
||||
}
|
||||
else if (taskType == TASK_TYPE.CHAT) {
|
||||
// args[0] 聊天type 1-系统 2-世界 3-军团 4-组队 5-私聊
|
||||
|
||||
@@ -180,7 +180,7 @@ export function shouldRefreshWeek(preTime: Date, now: Date, day: number = 1, hou
|
||||
*/
|
||||
export function getRandEelm<T>(source: Array<T> = [], cnt = 1): Array<T> {
|
||||
if (cnt == 0) return [];
|
||||
if (cnt >= source.length) return source;
|
||||
if (cnt >= source.length) return sortArrRandom(source);
|
||||
let idxs = new Set();
|
||||
|
||||
while (1) {
|
||||
@@ -337,6 +337,11 @@ export const cal = {
|
||||
}
|
||||
};
|
||||
|
||||
export function getDecimalCnt(num: number) {
|
||||
let str = num.toString();
|
||||
return str.split('.')[1]? str.split('.')[1].length: 0;
|
||||
}
|
||||
|
||||
//计算公式
|
||||
// export function calculateNum(ratio: { A: number, B: number }, params: { num: number }, defaultVal = 0) {
|
||||
// // result = a * num + b
|
||||
|
||||
@@ -2,265 +2,151 @@
|
||||
{
|
||||
"id": 1,
|
||||
"quality": 1,
|
||||
"starLevel": 1,
|
||||
"levelMin": 1,
|
||||
"levelMax": 20,
|
||||
"qualityLevel": 1,
|
||||
"preposition": "&",
|
||||
"honourConsume": "40005&40",
|
||||
"max": 1,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 0,
|
||||
"timeConsume": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"quality": 2,
|
||||
"starLevel": 1,
|
||||
"levelMin": 1,
|
||||
"levelMax": 20,
|
||||
"preposition": "&",
|
||||
"quality": 1,
|
||||
"qualityLevel": 2,
|
||||
"preposition": "1&",
|
||||
"max": 2,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 19000,
|
||||
"timeConsume": 1200
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"quality": 3,
|
||||
"starLevel": 1,
|
||||
"levelMin": 1,
|
||||
"levelMax": 20,
|
||||
"preposition": "2&",
|
||||
"honourConsume": "40005&100",
|
||||
"quality": 1,
|
||||
"qualityLevel": 3,
|
||||
"preposition": "2&3",
|
||||
"max": 3,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 27000,
|
||||
"timeConsume": 1800
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"quality": 4,
|
||||
"starLevel": 1,
|
||||
"levelMin": 1,
|
||||
"levelMax": 20,
|
||||
"preposition": "3&",
|
||||
"honourConsume": "40005&140",
|
||||
"quality": 2,
|
||||
"qualityLevel": 1,
|
||||
"preposition": "1&",
|
||||
"max": 1,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 40000,
|
||||
"timeConsume": 2700
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"quality": 1,
|
||||
"starLevel": 2,
|
||||
"levelMin": 21,
|
||||
"levelMax": 40,
|
||||
"preposition": "&",
|
||||
"quality": 2,
|
||||
"qualityLevel": 2,
|
||||
"preposition": "2&4",
|
||||
"max": 2,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 0,
|
||||
"timeConsume": 0
|
||||
"fundConsume": 40000,
|
||||
"timeConsume": 2700
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"quality": 2,
|
||||
"starLevel": 2,
|
||||
"levelMin": 21,
|
||||
"levelMax": 40,
|
||||
"preposition": "2&",
|
||||
"honourConsume": "40005&110",
|
||||
"qualityLevel": 3,
|
||||
"preposition": "3&5",
|
||||
"max": 3,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 31000,
|
||||
"timeConsume": 2700
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"quality": 3,
|
||||
"starLevel": 2,
|
||||
"levelMin": 21,
|
||||
"levelMax": 40,
|
||||
"preposition": "3&6",
|
||||
"honourConsume": "40005&160",
|
||||
"qualityLevel": 1,
|
||||
"preposition": "4&",
|
||||
"max": 1,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 45000,
|
||||
"timeConsume": 4800
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"quality": 4,
|
||||
"starLevel": 2,
|
||||
"levelMin": 21,
|
||||
"levelMax": 40,
|
||||
"preposition": "4&7",
|
||||
"honourConsume": "40005&210",
|
||||
"quality": 3,
|
||||
"qualityLevel": 2,
|
||||
"preposition": "5&7",
|
||||
"max": 2,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 60000,
|
||||
"timeConsume": 7200
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"quality": 1,
|
||||
"starLevel": 3,
|
||||
"levelMin": 41,
|
||||
"levelMax": 60,
|
||||
"preposition": "&",
|
||||
"honourConsume": "40005&100",
|
||||
"fundConsume": 0,
|
||||
"timeConsume": 0
|
||||
"quality": 3,
|
||||
"qualityLevel": 3,
|
||||
"preposition": "6&8",
|
||||
"max": 3,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 40000,
|
||||
"timeConsume": 2700
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"quality": 2,
|
||||
"starLevel": 3,
|
||||
"levelMin": 41,
|
||||
"levelMax": 60,
|
||||
"preposition": "6&",
|
||||
"honourConsume": "40005&170",
|
||||
"quality": 4,
|
||||
"qualityLevel": 1,
|
||||
"preposition": "7&",
|
||||
"max": 1,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 48000,
|
||||
"timeConsume": 5400
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"quality": 3,
|
||||
"starLevel": 3,
|
||||
"levelMin": 41,
|
||||
"levelMax": 60,
|
||||
"preposition": "7&10",
|
||||
"honourConsume": "40005&230",
|
||||
"quality": 4,
|
||||
"qualityLevel": 2,
|
||||
"preposition": "8&10",
|
||||
"max": 2,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 66000,
|
||||
"timeConsume": 8400
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"quality": 4,
|
||||
"starLevel": 3,
|
||||
"levelMin": 41,
|
||||
"levelMax": 60,
|
||||
"preposition": "8&11",
|
||||
"honourConsume": "40005&300",
|
||||
"qualityLevel": 3,
|
||||
"preposition": "9&11",
|
||||
"max": 3,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 86000,
|
||||
"timeConsume": 10800
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"quality": 1,
|
||||
"starLevel": 4,
|
||||
"levelMin": 61,
|
||||
"levelMax": 80,
|
||||
"preposition": "&",
|
||||
"honourConsume": "40005&170",
|
||||
"fundConsume": 0,
|
||||
"timeConsume": 0
|
||||
"quality": 5,
|
||||
"qualityLevel": 1,
|
||||
"preposition": "10&",
|
||||
"max": 1,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 40000,
|
||||
"timeConsume": 2700
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"quality": 2,
|
||||
"starLevel": 4,
|
||||
"levelMin": 61,
|
||||
"levelMax": 80,
|
||||
"preposition": "10&",
|
||||
"honourConsume": "40005&280",
|
||||
"quality": 5,
|
||||
"qualityLevel": 2,
|
||||
"preposition": "11&13",
|
||||
"max": 2,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 84000,
|
||||
"timeConsume": 10800
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"quality": 3,
|
||||
"starLevel": 4,
|
||||
"levelMin": 61,
|
||||
"levelMax": 80,
|
||||
"preposition": "11&14",
|
||||
"honourConsume": "40005&400",
|
||||
"quality": 5,
|
||||
"qualityLevel": 3,
|
||||
"preposition": "12&14",
|
||||
"max": 3,
|
||||
"honourConsume": "40005&70",
|
||||
"fundConsume": 115000,
|
||||
"timeConsume": 16800
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"quality": 4,
|
||||
"starLevel": 4,
|
||||
"levelMin": 61,
|
||||
"levelMax": 80,
|
||||
"preposition": "12&15",
|
||||
"honourConsume": "40005&540",
|
||||
"fundConsume": 150000,
|
||||
"timeConsume": 25200
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"quality": 1,
|
||||
"starLevel": 5,
|
||||
"levelMin": 81,
|
||||
"levelMax": 99,
|
||||
"preposition": "&",
|
||||
"honourConsume": "40005&270",
|
||||
"fundConsume": 0,
|
||||
"timeConsume": 0
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"quality": 2,
|
||||
"starLevel": 5,
|
||||
"levelMin": 81,
|
||||
"levelMax": 99,
|
||||
"preposition": "14&",
|
||||
"honourConsume": "40005&450",
|
||||
"fundConsume": 130000,
|
||||
"timeConsume": 18000
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"quality": 3,
|
||||
"starLevel": 5,
|
||||
"levelMin": 81,
|
||||
"levelMax": 99,
|
||||
"preposition": "15&18",
|
||||
"honourConsume": "40005&600",
|
||||
"fundConsume": 184000,
|
||||
"timeConsume": 28800
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"quality": 4,
|
||||
"starLevel": 5,
|
||||
"levelMin": 81,
|
||||
"levelMax": 99,
|
||||
"preposition": "16&19",
|
||||
"honourConsume": "40005&900",
|
||||
"fundConsume": 240000,
|
||||
"timeConsume": 36000
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"quality": 1,
|
||||
"starLevel": 6,
|
||||
"levelMin": 100,
|
||||
"levelMax": 100,
|
||||
"preposition": "&",
|
||||
"honourConsume": "40005&400",
|
||||
"fundConsume": 0,
|
||||
"timeConsume": 0
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"quality": 2,
|
||||
"starLevel": 6,
|
||||
"levelMin": 100,
|
||||
"levelMax": 100,
|
||||
"preposition": "18&",
|
||||
"honourConsume": "40005&700",
|
||||
"fundConsume": 190000,
|
||||
"timeConsume": 32400
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"quality": 3,
|
||||
"starLevel": 6,
|
||||
"levelMin": 100,
|
||||
"levelMax": 100,
|
||||
"preposition": "19&22",
|
||||
"honourConsume": "40005&1000",
|
||||
"fundConsume": 280000,
|
||||
"timeConsume": 46800
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"quality": 4,
|
||||
"starLevel": 6,
|
||||
"levelMin": 100,
|
||||
"levelMax": 100,
|
||||
"preposition": "20&23",
|
||||
"honourConsume": "40005&1350",
|
||||
"fundConsume": 380000,
|
||||
"timeConsume": 64800
|
||||
}
|
||||
]
|
||||
Executable → Regular
+20
-30
@@ -3,9 +3,8 @@
|
||||
"id": 1,
|
||||
"structureId": 2,
|
||||
"level": 1,
|
||||
"starProduce": 1,
|
||||
"levelProduce": 19,
|
||||
"qualityProduce": "1&2&3&4",
|
||||
"quality": 1,
|
||||
"levelProduce": "1&2&3",
|
||||
"consume": 50000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -14,9 +13,8 @@
|
||||
"id": 2,
|
||||
"structureId": 2,
|
||||
"level": 2,
|
||||
"starProduce": 2,
|
||||
"levelProduce": 19,
|
||||
"qualityProduce": "1&2&3&4",
|
||||
"quality": 2,
|
||||
"levelProduce": "1&2",
|
||||
"consume": 125000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -25,9 +23,8 @@
|
||||
"id": 3,
|
||||
"structureId": 2,
|
||||
"level": 3,
|
||||
"starProduce": 3,
|
||||
"levelProduce": 39,
|
||||
"qualityProduce": "1&2",
|
||||
"quality": 2,
|
||||
"levelProduce": "1&2&3",
|
||||
"consume": 350000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -36,9 +33,8 @@
|
||||
"id": 4,
|
||||
"structureId": 2,
|
||||
"level": 4,
|
||||
"starProduce": 3,
|
||||
"levelProduce": 39,
|
||||
"qualityProduce": "3&4",
|
||||
"quality": 3,
|
||||
"levelProduce": "1&2",
|
||||
"consume": 800000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -47,9 +43,8 @@
|
||||
"id": 5,
|
||||
"structureId": 2,
|
||||
"level": 5,
|
||||
"starProduce": 4,
|
||||
"levelProduce": 59,
|
||||
"qualityProduce": "1&2",
|
||||
"quality": 3,
|
||||
"levelProduce": "1&2&3",
|
||||
"consume": 1700000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -58,9 +53,8 @@
|
||||
"id": 6,
|
||||
"structureId": 2,
|
||||
"level": 6,
|
||||
"starProduce": 4,
|
||||
"levelProduce": 59,
|
||||
"qualityProduce": "3&4",
|
||||
"quality": 4,
|
||||
"levelProduce": "1&2",
|
||||
"consume": 3500000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -69,9 +63,8 @@
|
||||
"id": 7,
|
||||
"structureId": 2,
|
||||
"level": 7,
|
||||
"starProduce": 5,
|
||||
"levelProduce": 79,
|
||||
"qualityProduce": "1&2",
|
||||
"quality": 4,
|
||||
"levelProduce": "1&2&3",
|
||||
"consume": 6125000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -80,9 +73,8 @@
|
||||
"id": 8,
|
||||
"structureId": 2,
|
||||
"level": 8,
|
||||
"starProduce": 5,
|
||||
"levelProduce": 79,
|
||||
"qualityProduce": "3&4",
|
||||
"quality": 5,
|
||||
"levelProduce": "1&",
|
||||
"consume": 9125000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -91,9 +83,8 @@
|
||||
"id": 9,
|
||||
"structureId": 2,
|
||||
"level": 9,
|
||||
"starProduce": 6,
|
||||
"levelProduce": 99,
|
||||
"qualityProduce": "1&2",
|
||||
"quality": 5,
|
||||
"levelProduce": "2&",
|
||||
"consume": 13625000,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
@@ -102,9 +93,8 @@
|
||||
"id": 10,
|
||||
"structureId": 2,
|
||||
"level": 10,
|
||||
"starProduce": 6,
|
||||
"levelProduce": 100,
|
||||
"qualityProduce": "3&4",
|
||||
"quality": 5,
|
||||
"levelProduce": "3&",
|
||||
"consume": 99999999,
|
||||
"buildWords": "&",
|
||||
"imageName": "jttubiao_2"
|
||||
|
||||
Executable → Regular
+20
-40
@@ -3,120 +3,100 @@
|
||||
"id": 1,
|
||||
"structureId": 5,
|
||||
"level": 1,
|
||||
"wishgoodsEquip": "2&2",
|
||||
"wishgoodsDrawing": "2&2",
|
||||
"wishgoodsHero": "&",
|
||||
"consume": 50000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"structureId": 5,
|
||||
"level": 2,
|
||||
"wishgoodsEquip": "2&2|3&2",
|
||||
"wishgoodsDrawing": "2&2|3&2",
|
||||
"wishgoodsHero": "&",
|
||||
"consume": 125000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"structureId": 5,
|
||||
"level": 3,
|
||||
"wishgoodsEquip": "2&2|3&2",
|
||||
"wishgoodsDrawing": "2&2|3&2",
|
||||
"wishgoodsHero": "&",
|
||||
"consume": 350000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"structureId": 5,
|
||||
"level": 4,
|
||||
"wishgoodsEquip": "2&2|3&2",
|
||||
"wishgoodsDrawing": "2&2|3&2",
|
||||
"wishgoodsHero": "1&2",
|
||||
"consume": 800000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"structureId": 5,
|
||||
"level": 5,
|
||||
"wishgoodsEquip": "2&2|3&2|4&1",
|
||||
"wishgoodsDrawing": "2&2|3&2|4&1",
|
||||
"wishgoodsHero": "1&2",
|
||||
"consume": 1700000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"structureId": 5,
|
||||
"level": 6,
|
||||
"wishgoodsEquip": "2&2|3&2|4&2",
|
||||
"wishgoodsDrawing": "2&2|3&2|4&2",
|
||||
"wishgoodsHero": "1&2|2&1",
|
||||
"consume": 3500000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"structureId": 5,
|
||||
"level": 7,
|
||||
"wishgoodsEquip": "2&4|3&2|4&2",
|
||||
"wishgoodsDrawing": "2&4|3&2|4&2",
|
||||
"wishgoodsHero": "1&2|2&1",
|
||||
"consume": 6125000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"structureId": 5,
|
||||
"level": 8,
|
||||
"wishgoodsEquip": "2&8|3&2|4&2",
|
||||
"wishgoodsDrawing": "2&8|3&2|4&2",
|
||||
"wishgoodsHero": "1&2|2&1",
|
||||
"consume": 9125000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"structureId": 5,
|
||||
"level": 9,
|
||||
"wishgoodsEquip": "2&8|3&4|4&2",
|
||||
"wishgoodsDrawing": "2&8|3&4|4&2",
|
||||
"wishgoodsHero": "1&3|2&1|3&1",
|
||||
"consume": 13625000,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"structureId": 5,
|
||||
"level": 10,
|
||||
"wishgoodsEquip": "2&8|3&4|4&4",
|
||||
"wishgoodsDrawing": "2&8|3&4|4&4",
|
||||
"wishgoodsHero": "1&3|2&1|3&1",
|
||||
"consume": 99999999,
|
||||
"buildWords": "&",
|
||||
"imageID": "jttubiao_5",
|
||||
"__EMPTY": 0,
|
||||
"__EMPTY_1": 0
|
||||
"imageID": "jttubiao_5"
|
||||
}
|
||||
]
|
||||
@@ -2,7 +2,6 @@
|
||||
{
|
||||
"id": 1,
|
||||
"itid": 25,
|
||||
"starLevel": "&",
|
||||
"quality": 1,
|
||||
"honourReward": 40,
|
||||
"__EMPTY": 0,
|
||||
@@ -13,7 +12,6 @@
|
||||
{
|
||||
"id": 2,
|
||||
"itid": 25,
|
||||
"starLevel": "&",
|
||||
"quality": 2,
|
||||
"honourReward": 80,
|
||||
"__EMPTY": 0,
|
||||
@@ -24,7 +22,6 @@
|
||||
{
|
||||
"id": 3,
|
||||
"itid": 25,
|
||||
"starLevel": "&",
|
||||
"quality": 3,
|
||||
"honourReward": 200,
|
||||
"__EMPTY": 0,
|
||||
@@ -34,8 +31,7 @@
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"itid": 40,
|
||||
"starLevel": 1,
|
||||
"itid": 41,
|
||||
"quality": 1,
|
||||
"honourReward": 20,
|
||||
"__EMPTY": 0,
|
||||
@@ -45,8 +41,7 @@
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"itid": 40,
|
||||
"starLevel": 1,
|
||||
"itid": 41,
|
||||
"quality": 2,
|
||||
"honourReward": 50,
|
||||
"__EMPTY": 0,
|
||||
@@ -56,8 +51,7 @@
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"itid": 40,
|
||||
"starLevel": 1,
|
||||
"itid": 41,
|
||||
"quality": 3,
|
||||
"honourReward": 70,
|
||||
"__EMPTY": 0,
|
||||
@@ -67,8 +61,7 @@
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"itid": 40,
|
||||
"starLevel": 1,
|
||||
"itid": 41,
|
||||
"quality": 4,
|
||||
"honourReward": 80,
|
||||
"__EMPTY": 0,
|
||||
@@ -78,8 +71,7 @@
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"itid": 40,
|
||||
"starLevel": 2,
|
||||
"itid": 41,
|
||||
"quality": 1,
|
||||
"honourReward": 40,
|
||||
"__EMPTY": 0,
|
||||
@@ -89,8 +81,7 @@
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"itid": 40,
|
||||
"starLevel": 2,
|
||||
"itid": 41,
|
||||
"quality": 2,
|
||||
"honourReward": 80,
|
||||
"__EMPTY": 0,
|
||||
@@ -100,8 +91,7 @@
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"itid": 40,
|
||||
"starLevel": 2,
|
||||
"itid": 41,
|
||||
"quality": 3,
|
||||
"honourReward": 90,
|
||||
"__EMPTY": 0,
|
||||
@@ -111,8 +101,7 @@
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"itid": 40,
|
||||
"starLevel": 2,
|
||||
"itid": 41,
|
||||
"quality": 4,
|
||||
"honourReward": 110,
|
||||
"__EMPTY": 0,
|
||||
@@ -122,8 +111,7 @@
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"itid": 40,
|
||||
"starLevel": 3,
|
||||
"itid": 41,
|
||||
"quality": 1,
|
||||
"honourReward": 70,
|
||||
"__EMPTY": 0,
|
||||
@@ -133,8 +121,7 @@
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"itid": 40,
|
||||
"starLevel": 3,
|
||||
"itid": 41,
|
||||
"quality": 2,
|
||||
"honourReward": 100,
|
||||
"__EMPTY": 0,
|
||||
@@ -144,8 +131,7 @@
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"itid": 40,
|
||||
"starLevel": 3,
|
||||
"itid": 41,
|
||||
"quality": 3,
|
||||
"honourReward": 130,
|
||||
"__EMPTY": 0,
|
||||
@@ -155,8 +141,7 @@
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"itid": 40,
|
||||
"starLevel": 3,
|
||||
"itid": 41,
|
||||
"quality": 4,
|
||||
"honourReward": 140,
|
||||
"__EMPTY": 0,
|
||||
@@ -166,8 +151,7 @@
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"itid": 40,
|
||||
"starLevel": 4,
|
||||
"itid": 41,
|
||||
"quality": 1,
|
||||
"honourReward": 120,
|
||||
"__EMPTY": 0,
|
||||
@@ -177,8 +161,7 @@
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"itid": 40,
|
||||
"starLevel": 4,
|
||||
"itid": 41,
|
||||
"quality": 2,
|
||||
"honourReward": 160,
|
||||
"__EMPTY": 0,
|
||||
@@ -188,8 +171,7 @@
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"itid": 40,
|
||||
"starLevel": 4,
|
||||
"itid": 41,
|
||||
"quality": 3,
|
||||
"honourReward": 190,
|
||||
"__EMPTY": 0,
|
||||
@@ -199,8 +181,7 @@
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"itid": 40,
|
||||
"starLevel": 4,
|
||||
"itid": 41,
|
||||
"quality": 4,
|
||||
"honourReward": 210,
|
||||
"__EMPTY": 0,
|
||||
@@ -210,8 +191,7 @@
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"itid": 40,
|
||||
"starLevel": 5,
|
||||
"itid": 41,
|
||||
"quality": 1,
|
||||
"honourReward": 150,
|
||||
"__EMPTY": 0,
|
||||
@@ -221,8 +201,7 @@
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"itid": 40,
|
||||
"starLevel": 5,
|
||||
"itid": 41,
|
||||
"quality": 2,
|
||||
"honourReward": 200,
|
||||
"__EMPTY": 0,
|
||||
@@ -232,8 +211,7 @@
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"itid": 40,
|
||||
"starLevel": 5,
|
||||
"itid": 41,
|
||||
"quality": 3,
|
||||
"honourReward": 220,
|
||||
"__EMPTY": 0,
|
||||
@@ -243,8 +221,7 @@
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"itid": 40,
|
||||
"starLevel": 5,
|
||||
"itid": 41,
|
||||
"quality": 4,
|
||||
"honourReward": 240,
|
||||
"__EMPTY": 0,
|
||||
@@ -254,8 +231,7 @@
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"itid": 40,
|
||||
"starLevel": 6,
|
||||
"itid": 41,
|
||||
"quality": 1,
|
||||
"honourReward": 170,
|
||||
"__EMPTY": 0,
|
||||
@@ -265,8 +241,7 @@
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"itid": 40,
|
||||
"starLevel": 6,
|
||||
"itid": 41,
|
||||
"quality": 2,
|
||||
"honourReward": 230,
|
||||
"__EMPTY": 0,
|
||||
@@ -276,8 +251,7 @@
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"itid": 40,
|
||||
"starLevel": 6,
|
||||
"itid": 41,
|
||||
"quality": 3,
|
||||
"honourReward": 260,
|
||||
"__EMPTY": 0,
|
||||
@@ -287,8 +261,7 @@
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"itid": 40,
|
||||
"starLevel": 6,
|
||||
"itid": 41,
|
||||
"quality": 4,
|
||||
"honourReward": 330,
|
||||
"__EMPTY": 0,
|
||||
|
||||
+881
-47689
File diff suppressed because it is too large
Load Diff
@@ -1,99 +1,31 @@
|
||||
[
|
||||
{
|
||||
"itid": 1,
|
||||
"info": "短刀(神兵)"
|
||||
"info": "神兵"
|
||||
},
|
||||
{
|
||||
"itid": 2,
|
||||
"info": "长兵(神兵)"
|
||||
"info": "宝甲"
|
||||
},
|
||||
{
|
||||
"itid": 3,
|
||||
"info": "奇门(神兵)"
|
||||
"info": "冠冕"
|
||||
},
|
||||
{
|
||||
"itid": 4,
|
||||
"info": "弓弩(神兵)"
|
||||
"info": "行具"
|
||||
},
|
||||
{
|
||||
"itid": 5,
|
||||
"info": "剑(神兵)"
|
||||
"info": "典籍"
|
||||
},
|
||||
{
|
||||
"itid": 6,
|
||||
"info": "法器(神兵)"
|
||||
},
|
||||
{
|
||||
"itid": 7,
|
||||
"info": "备用(神兵)"
|
||||
},
|
||||
{
|
||||
"itid": 8,
|
||||
"info": "备用(神兵)"
|
||||
},
|
||||
{
|
||||
"itid": 9,
|
||||
"info": "头盔(冠冕)"
|
||||
},
|
||||
{
|
||||
"itid": 10,
|
||||
"info": "发冠(冠冕)"
|
||||
},
|
||||
{
|
||||
"itid": 11,
|
||||
"info": "头巾(冠冕)"
|
||||
},
|
||||
{
|
||||
"itid": 12,
|
||||
"info": "重铠(宝甲)"
|
||||
},
|
||||
{
|
||||
"itid": 13,
|
||||
"info": "轻甲(宝甲)"
|
||||
},
|
||||
{
|
||||
"itid": 14,
|
||||
"info": "布衣(宝甲)"
|
||||
},
|
||||
{
|
||||
"itid": 15,
|
||||
"info": "兵书(典籍)"
|
||||
},
|
||||
{
|
||||
"itid": 16,
|
||||
"info": "杂记(典籍)"
|
||||
},
|
||||
{
|
||||
"itid": 17,
|
||||
"info": "经典(典籍)"
|
||||
},
|
||||
{
|
||||
"itid": 18,
|
||||
"info": "马(行具)"
|
||||
},
|
||||
{
|
||||
"itid": 19,
|
||||
"info": "鞋(行具)"
|
||||
},
|
||||
{
|
||||
"itid": 20,
|
||||
"info": "车(行具)"
|
||||
},
|
||||
{
|
||||
"itid": 21,
|
||||
"info": "佩饰(礼器)"
|
||||
},
|
||||
{
|
||||
"itid": 22,
|
||||
"info": "钟鼎(礼器)"
|
||||
},
|
||||
{
|
||||
"itid": 23,
|
||||
"info": "印章(礼器)"
|
||||
"info": "饰品"
|
||||
},
|
||||
{
|
||||
"itid": 24,
|
||||
"info": "使用类物品(如宝箱)"
|
||||
"info": "礼包"
|
||||
},
|
||||
{
|
||||
"itid": 25,
|
||||
@@ -111,41 +43,21 @@
|
||||
"itid": 28,
|
||||
"info": "藏宝图"
|
||||
},
|
||||
{
|
||||
"itid": 29,
|
||||
"info": "礼器"
|
||||
},
|
||||
{
|
||||
"itid": 30,
|
||||
"info": "宝甲"
|
||||
},
|
||||
{
|
||||
"itid": 31,
|
||||
"info": "名驹"
|
||||
},
|
||||
{
|
||||
"itid": 32,
|
||||
"info": "典籍"
|
||||
},
|
||||
{
|
||||
"itid": 33,
|
||||
"info": "神兵"
|
||||
},
|
||||
{
|
||||
"itid": 34,
|
||||
"info": "代币"
|
||||
},
|
||||
{
|
||||
"itid": 35,
|
||||
"info": "消耗类物品(经验书)"
|
||||
"info": "经验书"
|
||||
},
|
||||
{
|
||||
"itid": 36,
|
||||
"info": "消耗类物品(好感道具)"
|
||||
"info": "名望道具"
|
||||
},
|
||||
{
|
||||
"itid": 38,
|
||||
"info": "消耗类物品(材料类)"
|
||||
"info": "材料"
|
||||
},
|
||||
{
|
||||
"itid": 39,
|
||||
@@ -157,7 +69,7 @@
|
||||
},
|
||||
{
|
||||
"itid": 41,
|
||||
"info": "图纸"
|
||||
"info": "套装图纸"
|
||||
},
|
||||
{
|
||||
"itid": 42,
|
||||
@@ -177,27 +89,23 @@
|
||||
},
|
||||
{
|
||||
"itid": 46,
|
||||
"info": "礼器宝石"
|
||||
"info": "饰品宝石"
|
||||
},
|
||||
{
|
||||
"itid": 47,
|
||||
"info": "典籍宝石"
|
||||
},
|
||||
{
|
||||
"itid": 48,
|
||||
"info": "灵玄石"
|
||||
},
|
||||
{
|
||||
"itid": 49,
|
||||
"info": "玩家好感道具"
|
||||
"info": "好感道具"
|
||||
},
|
||||
{
|
||||
"itid": 50,
|
||||
"info": "形象"
|
||||
"info": "头像"
|
||||
},
|
||||
{
|
||||
"itid": 51,
|
||||
"info": "形象框"
|
||||
"info": "头像框"
|
||||
},
|
||||
{
|
||||
"itid": 52,
|
||||
@@ -205,26 +113,34 @@
|
||||
},
|
||||
{
|
||||
"itid": 53,
|
||||
"info": "武将招募令"
|
||||
},
|
||||
{
|
||||
"itid": 54,
|
||||
"info": "礼包"
|
||||
"info": "招募令"
|
||||
},
|
||||
{
|
||||
"itid": 55,
|
||||
"info": "烧肉(体力道具)"
|
||||
"info": "体力道具"
|
||||
},
|
||||
{
|
||||
"itid": 56,
|
||||
"info": "普通骰子"
|
||||
},
|
||||
{
|
||||
"itid": 57,
|
||||
"info": "天机骰子"
|
||||
"info": "活动道具"
|
||||
},
|
||||
{
|
||||
"itid": 58,
|
||||
"info": "实体化经验"
|
||||
},
|
||||
{
|
||||
"itid": 59,
|
||||
"info": "武器天晶"
|
||||
},
|
||||
{
|
||||
"itid": 60,
|
||||
"info": "衣甲天晶"
|
||||
},
|
||||
{
|
||||
"itid": 61,
|
||||
"info": "冠冕天晶"
|
||||
},
|
||||
{
|
||||
"itid": 62,
|
||||
"info": "行具天晶"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,310 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"name": "步兵武器",
|
||||
"jobClass": 1,
|
||||
"eplaceId": 1,
|
||||
"suitId": 1,
|
||||
"attribute": "2&10",
|
||||
"attributeUp": "2&10",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "步兵衣甲",
|
||||
"jobClass": 1,
|
||||
"eplaceId": 2,
|
||||
"suitId": 1,
|
||||
"attribute": "4&20",
|
||||
"attributeUp": "4&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "步兵冠冕",
|
||||
"jobClass": 1,
|
||||
"eplaceId": 3,
|
||||
"suitId": 1,
|
||||
"attribute": "5&20",
|
||||
"attributeUp": "5&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "步兵行具",
|
||||
"jobClass": 1,
|
||||
"eplaceId": 4,
|
||||
"suitId": 1,
|
||||
"attribute": "1&50",
|
||||
"attributeUp": "1&50",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "枪兵武器",
|
||||
"jobClass": 2,
|
||||
"eplaceId": 1,
|
||||
"suitId": 2,
|
||||
"attribute": "2&10",
|
||||
"attributeUp": "2&10",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "枪兵衣甲",
|
||||
"jobClass": 2,
|
||||
"eplaceId": 2,
|
||||
"suitId": 2,
|
||||
"attribute": "4&20",
|
||||
"attributeUp": "4&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "枪兵冠冕",
|
||||
"jobClass": 2,
|
||||
"eplaceId": 3,
|
||||
"suitId": 2,
|
||||
"attribute": "5&20",
|
||||
"attributeUp": "5&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "枪兵行具",
|
||||
"jobClass": 2,
|
||||
"eplaceId": 4,
|
||||
"suitId": 2,
|
||||
"attribute": "1&50",
|
||||
"attributeUp": "1&50",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "骑兵武器",
|
||||
"jobClass": 3,
|
||||
"eplaceId": 1,
|
||||
"suitId": 3,
|
||||
"attribute": "2&10",
|
||||
"attributeUp": "2&10",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "骑兵衣甲",
|
||||
"jobClass": 3,
|
||||
"eplaceId": 2,
|
||||
"suitId": 3,
|
||||
"attribute": "4&20",
|
||||
"attributeUp": "4&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "骑兵冠冕",
|
||||
"jobClass": 3,
|
||||
"eplaceId": 3,
|
||||
"suitId": 3,
|
||||
"attribute": "5&20",
|
||||
"attributeUp": "5&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "骑兵行具",
|
||||
"jobClass": 3,
|
||||
"eplaceId": 4,
|
||||
"suitId": 3,
|
||||
"attribute": "1&50",
|
||||
"attributeUp": "1&50",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "弓兵武器",
|
||||
"jobClass": 4,
|
||||
"eplaceId": 1,
|
||||
"suitId": 4,
|
||||
"attribute": "2&10",
|
||||
"attributeUp": "2&10",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "弓兵衣甲",
|
||||
"jobClass": 4,
|
||||
"eplaceId": 2,
|
||||
"suitId": 4,
|
||||
"attribute": "4&20",
|
||||
"attributeUp": "4&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"name": "弓兵冠冕",
|
||||
"jobClass": 4,
|
||||
"eplaceId": 3,
|
||||
"suitId": 4,
|
||||
"attribute": "5&20",
|
||||
"attributeUp": "5&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"name": "弓兵行具",
|
||||
"jobClass": 4,
|
||||
"eplaceId": 4,
|
||||
"suitId": 4,
|
||||
"attribute": "1&50",
|
||||
"attributeUp": "1&50",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"name": "游侠武器",
|
||||
"jobClass": 5,
|
||||
"eplaceId": 1,
|
||||
"suitId": 5,
|
||||
"attribute": "2&10",
|
||||
"attributeUp": "2&10",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"name": "游侠衣甲",
|
||||
"jobClass": 5,
|
||||
"eplaceId": 2,
|
||||
"suitId": 5,
|
||||
"attribute": "4&20",
|
||||
"attributeUp": "4&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"name": "游侠冠冕",
|
||||
"jobClass": 5,
|
||||
"eplaceId": 3,
|
||||
"suitId": 5,
|
||||
"attribute": "5&20",
|
||||
"attributeUp": "5&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"name": "游侠行具",
|
||||
"jobClass": 5,
|
||||
"eplaceId": 4,
|
||||
"suitId": 5,
|
||||
"attribute": "1&50",
|
||||
"attributeUp": "1&50",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"name": "策士武器",
|
||||
"jobClass": 6,
|
||||
"eplaceId": 1,
|
||||
"suitId": 6,
|
||||
"attribute": "2&10",
|
||||
"attributeUp": "2&10",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"name": "策士衣甲",
|
||||
"jobClass": 6,
|
||||
"eplaceId": 2,
|
||||
"suitId": 6,
|
||||
"attribute": "4&20",
|
||||
"attributeUp": "4&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"name": "策士冠冕",
|
||||
"jobClass": 6,
|
||||
"eplaceId": 3,
|
||||
"suitId": 6,
|
||||
"attribute": "5&20",
|
||||
"attributeUp": "5&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"name": "策士行具",
|
||||
"jobClass": 6,
|
||||
"eplaceId": 4,
|
||||
"suitId": 6,
|
||||
"attribute": "1&50",
|
||||
"attributeUp": "1&50",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"name": "医者武器",
|
||||
"jobClass": 7,
|
||||
"eplaceId": 1,
|
||||
"suitId": 7,
|
||||
"attribute": "2&10",
|
||||
"attributeUp": "2&10",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"name": "医者衣甲",
|
||||
"jobClass": 7,
|
||||
"eplaceId": 2,
|
||||
"suitId": 7,
|
||||
"attribute": "4&20",
|
||||
"attributeUp": "4&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"name": "医者冠冕",
|
||||
"jobClass": 7,
|
||||
"eplaceId": 3,
|
||||
"suitId": 7,
|
||||
"attribute": "5&20",
|
||||
"attributeUp": "5&20",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"name": "医者行具",
|
||||
"jobClass": 7,
|
||||
"eplaceId": 4,
|
||||
"suitId": 7,
|
||||
"attribute": "1&50",
|
||||
"attributeUp": "1&50",
|
||||
"composeMaterial": "31002&200",
|
||||
"imageId": "qingtongjian&bintiejian&wenshijian&jinggangjian&songwenjian"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"quality": 1,
|
||||
"star": 2,
|
||||
"jewelCnt": 0,
|
||||
"stoneCnt": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"quality": 2,
|
||||
"star": 4,
|
||||
"jewelCnt": 1,
|
||||
"stoneCnt": 0
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"quality": 3,
|
||||
"star": 6,
|
||||
"jewelCnt": 1,
|
||||
"stoneCnt": 1
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"quality": 4,
|
||||
"star": 8,
|
||||
"jewelCnt": 1,
|
||||
"stoneCnt": 2
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"quality": 5,
|
||||
"star": 12,
|
||||
"jewelCnt": 1,
|
||||
"stoneCnt": 3
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,502 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"lv": 1,
|
||||
"consume": "&"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"lv": 2,
|
||||
"consume": "31002&4000"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"lv": 3,
|
||||
"consume": "31002&6000"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"lv": 4,
|
||||
"consume": "31002&8000"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"lv": 5,
|
||||
"consume": "31002&10000"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"lv": 6,
|
||||
"consume": "31002&12000"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"lv": 7,
|
||||
"consume": "31002&14000"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"lv": 8,
|
||||
"consume": "31002&16000"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"lv": 9,
|
||||
"consume": "31002&18000"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"lv": 10,
|
||||
"consume": "31002&20000"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"lv": 11,
|
||||
"consume": "31002&22000"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"lv": 12,
|
||||
"consume": "31002&24000"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"lv": 13,
|
||||
"consume": "31002&26000"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"lv": 14,
|
||||
"consume": "31002&28000"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"lv": 15,
|
||||
"consume": "31002&30000"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"lv": 16,
|
||||
"consume": "31002&32000"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"lv": 17,
|
||||
"consume": "31002&34000"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"lv": 18,
|
||||
"consume": "31002&36000"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"lv": 19,
|
||||
"consume": "31002&38000"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"lv": 20,
|
||||
"consume": "31002&40000"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"lv": 21,
|
||||
"consume": "31002&42000"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"lv": 22,
|
||||
"consume": "31002&44000"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"lv": 23,
|
||||
"consume": "31002&46000"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"lv": 24,
|
||||
"consume": "31002&48000"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"lv": 25,
|
||||
"consume": "31002&50000"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"lv": 26,
|
||||
"consume": "31002&52000"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"lv": 27,
|
||||
"consume": "31002&54000"
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"lv": 28,
|
||||
"consume": "31002&56000"
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"lv": 29,
|
||||
"consume": "31002&58000"
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"lv": 30,
|
||||
"consume": "31002&60000"
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"lv": 31,
|
||||
"consume": "31002&62000"
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"lv": 32,
|
||||
"consume": "31002&64000"
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"lv": 33,
|
||||
"consume": "31002&66000"
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"lv": 34,
|
||||
"consume": "31002&68000"
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"lv": 35,
|
||||
"consume": "31002&70000"
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"lv": 36,
|
||||
"consume": "31002&72000"
|
||||
},
|
||||
{
|
||||
"id": 37,
|
||||
"lv": 37,
|
||||
"consume": "31002&74000"
|
||||
},
|
||||
{
|
||||
"id": 38,
|
||||
"lv": 38,
|
||||
"consume": "31002&76000"
|
||||
},
|
||||
{
|
||||
"id": 39,
|
||||
"lv": 39,
|
||||
"consume": "31002&78000"
|
||||
},
|
||||
{
|
||||
"id": 40,
|
||||
"lv": 40,
|
||||
"consume": "31002&80000"
|
||||
},
|
||||
{
|
||||
"id": 41,
|
||||
"lv": 41,
|
||||
"consume": "31002&82000"
|
||||
},
|
||||
{
|
||||
"id": 42,
|
||||
"lv": 42,
|
||||
"consume": "31002&84000"
|
||||
},
|
||||
{
|
||||
"id": 43,
|
||||
"lv": 43,
|
||||
"consume": "31002&86000"
|
||||
},
|
||||
{
|
||||
"id": 44,
|
||||
"lv": 44,
|
||||
"consume": "31002&88000"
|
||||
},
|
||||
{
|
||||
"id": 45,
|
||||
"lv": 45,
|
||||
"consume": "31002&90000"
|
||||
},
|
||||
{
|
||||
"id": 46,
|
||||
"lv": 46,
|
||||
"consume": "31002&92000"
|
||||
},
|
||||
{
|
||||
"id": 47,
|
||||
"lv": 47,
|
||||
"consume": "31002&94000"
|
||||
},
|
||||
{
|
||||
"id": 48,
|
||||
"lv": 48,
|
||||
"consume": "31002&96000"
|
||||
},
|
||||
{
|
||||
"id": 49,
|
||||
"lv": 49,
|
||||
"consume": "31002&98000"
|
||||
},
|
||||
{
|
||||
"id": 50,
|
||||
"lv": 50,
|
||||
"consume": "31002&100000"
|
||||
},
|
||||
{
|
||||
"id": 51,
|
||||
"lv": 51,
|
||||
"consume": "31002&102000"
|
||||
},
|
||||
{
|
||||
"id": 52,
|
||||
"lv": 52,
|
||||
"consume": "31002&104000"
|
||||
},
|
||||
{
|
||||
"id": 53,
|
||||
"lv": 53,
|
||||
"consume": "31002&106000"
|
||||
},
|
||||
{
|
||||
"id": 54,
|
||||
"lv": 54,
|
||||
"consume": "31002&108000"
|
||||
},
|
||||
{
|
||||
"id": 55,
|
||||
"lv": 55,
|
||||
"consume": "31002&110000"
|
||||
},
|
||||
{
|
||||
"id": 56,
|
||||
"lv": 56,
|
||||
"consume": "31002&112000"
|
||||
},
|
||||
{
|
||||
"id": 57,
|
||||
"lv": 57,
|
||||
"consume": "31002&114000"
|
||||
},
|
||||
{
|
||||
"id": 58,
|
||||
"lv": 58,
|
||||
"consume": "31002&116000"
|
||||
},
|
||||
{
|
||||
"id": 59,
|
||||
"lv": 59,
|
||||
"consume": "31002&118000"
|
||||
},
|
||||
{
|
||||
"id": 60,
|
||||
"lv": 60,
|
||||
"consume": "31002&120000"
|
||||
},
|
||||
{
|
||||
"id": 61,
|
||||
"lv": 61,
|
||||
"consume": "31002&122000"
|
||||
},
|
||||
{
|
||||
"id": 62,
|
||||
"lv": 62,
|
||||
"consume": "31002&124000"
|
||||
},
|
||||
{
|
||||
"id": 63,
|
||||
"lv": 63,
|
||||
"consume": "31002&126000"
|
||||
},
|
||||
{
|
||||
"id": 64,
|
||||
"lv": 64,
|
||||
"consume": "31002&128000"
|
||||
},
|
||||
{
|
||||
"id": 65,
|
||||
"lv": 65,
|
||||
"consume": "31002&130000"
|
||||
},
|
||||
{
|
||||
"id": 66,
|
||||
"lv": 66,
|
||||
"consume": "31002&132000"
|
||||
},
|
||||
{
|
||||
"id": 67,
|
||||
"lv": 67,
|
||||
"consume": "31002&134000"
|
||||
},
|
||||
{
|
||||
"id": 68,
|
||||
"lv": 68,
|
||||
"consume": "31002&136000"
|
||||
},
|
||||
{
|
||||
"id": 69,
|
||||
"lv": 69,
|
||||
"consume": "31002&138000"
|
||||
},
|
||||
{
|
||||
"id": 70,
|
||||
"lv": 70,
|
||||
"consume": "31002&140000"
|
||||
},
|
||||
{
|
||||
"id": 71,
|
||||
"lv": 71,
|
||||
"consume": "31002&142000"
|
||||
},
|
||||
{
|
||||
"id": 72,
|
||||
"lv": 72,
|
||||
"consume": "31002&144000"
|
||||
},
|
||||
{
|
||||
"id": 73,
|
||||
"lv": 73,
|
||||
"consume": "31002&146000"
|
||||
},
|
||||
{
|
||||
"id": 74,
|
||||
"lv": 74,
|
||||
"consume": "31002&148000"
|
||||
},
|
||||
{
|
||||
"id": 75,
|
||||
"lv": 75,
|
||||
"consume": "31002&150000"
|
||||
},
|
||||
{
|
||||
"id": 76,
|
||||
"lv": 76,
|
||||
"consume": "31002&152000"
|
||||
},
|
||||
{
|
||||
"id": 77,
|
||||
"lv": 77,
|
||||
"consume": "31002&154000"
|
||||
},
|
||||
{
|
||||
"id": 78,
|
||||
"lv": 78,
|
||||
"consume": "31002&156000"
|
||||
},
|
||||
{
|
||||
"id": 79,
|
||||
"lv": 79,
|
||||
"consume": "31002&158000"
|
||||
},
|
||||
{
|
||||
"id": 80,
|
||||
"lv": 80,
|
||||
"consume": "31002&160000"
|
||||
},
|
||||
{
|
||||
"id": 81,
|
||||
"lv": 81,
|
||||
"consume": "31002&162000"
|
||||
},
|
||||
{
|
||||
"id": 82,
|
||||
"lv": 82,
|
||||
"consume": "31002&164000"
|
||||
},
|
||||
{
|
||||
"id": 83,
|
||||
"lv": 83,
|
||||
"consume": "31002&166000"
|
||||
},
|
||||
{
|
||||
"id": 84,
|
||||
"lv": 84,
|
||||
"consume": "31002&168000"
|
||||
},
|
||||
{
|
||||
"id": 85,
|
||||
"lv": 85,
|
||||
"consume": "31002&170000"
|
||||
},
|
||||
{
|
||||
"id": 86,
|
||||
"lv": 86,
|
||||
"consume": "31002&172000"
|
||||
},
|
||||
{
|
||||
"id": 87,
|
||||
"lv": 87,
|
||||
"consume": "31002&174000"
|
||||
},
|
||||
{
|
||||
"id": 88,
|
||||
"lv": 88,
|
||||
"consume": "31002&176000"
|
||||
},
|
||||
{
|
||||
"id": 89,
|
||||
"lv": 89,
|
||||
"consume": "31002&178000"
|
||||
},
|
||||
{
|
||||
"id": 90,
|
||||
"lv": 90,
|
||||
"consume": "31002&180000"
|
||||
},
|
||||
{
|
||||
"id": 91,
|
||||
"lv": 91,
|
||||
"consume": "31002&182000"
|
||||
},
|
||||
{
|
||||
"id": 92,
|
||||
"lv": 92,
|
||||
"consume": "31002&184000"
|
||||
},
|
||||
{
|
||||
"id": 93,
|
||||
"lv": 93,
|
||||
"consume": "31002&186000"
|
||||
},
|
||||
{
|
||||
"id": 94,
|
||||
"lv": 94,
|
||||
"consume": "31002&188000"
|
||||
},
|
||||
{
|
||||
"id": 95,
|
||||
"lv": 95,
|
||||
"consume": "31002&190000"
|
||||
},
|
||||
{
|
||||
"id": 96,
|
||||
"lv": 96,
|
||||
"consume": "31002&192000"
|
||||
},
|
||||
{
|
||||
"id": 97,
|
||||
"lv": 97,
|
||||
"consume": "31002&194000"
|
||||
},
|
||||
{
|
||||
"id": 98,
|
||||
"lv": 98,
|
||||
"consume": "31002&196000"
|
||||
},
|
||||
{
|
||||
"id": 99,
|
||||
"lv": 99,
|
||||
"consume": "31002&198000"
|
||||
},
|
||||
{
|
||||
"id": 100,
|
||||
"lv": 100,
|
||||
"consume": "31002&200000"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,44 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"jobClass": 1,
|
||||
"equips": "1&2&3&4",
|
||||
"effect": "4&10011|8&10013|12&80003"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"jobClass": 2,
|
||||
"equips": "5&6&7&8",
|
||||
"effect": "4&20011|8&10012|12&80023"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"jobClass": 3,
|
||||
"equips": "9&10&11&12",
|
||||
"effect": "4&60032|8&60034|12&80002"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"jobClass": 4,
|
||||
"equips": "13&14&15&16",
|
||||
"effect": "4&10011|8&10013|12&80003"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"jobClass": 5,
|
||||
"equips": "17&18&19&20",
|
||||
"effect": "4&20011|8&10012|12&80023"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"jobClass": 6,
|
||||
"equips": "21&22&23&24",
|
||||
"effect": "4&60032|8&60034|12&80002"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"jobClass": 7,
|
||||
"equips": "25&26&27&28",
|
||||
"effect": "4&60032|8&60034|12&80002"
|
||||
}
|
||||
]
|
||||
@@ -25,7 +25,7 @@
|
||||
"count": "1&5",
|
||||
"free": "1&1",
|
||||
"cost": "22002&1",
|
||||
"percent": "4&5|5&15|6&15|7&10|8&10|9&15|10&10|13&5|14&10|15&5",
|
||||
"percent": "4&5|5&15|6&15|7&15|8&15|9&15|10&10|11&10",
|
||||
"floorReward": 1,
|
||||
"indirectId": 2
|
||||
},
|
||||
|
||||
@@ -0,0 +1,542 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"good_id": 80001,
|
||||
"name": "一阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 1,
|
||||
"quality": 1,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33001,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6001
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"good_id": 80002,
|
||||
"name": "二阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 2,
|
||||
"quality": 1,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33002,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6002
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"good_id": 80003,
|
||||
"name": "三阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 3,
|
||||
"quality": 2,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33003,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6003
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"good_id": 80004,
|
||||
"name": "四阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 4,
|
||||
"quality": 2,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33004,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6004
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"good_id": 80005,
|
||||
"name": "五阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 5,
|
||||
"quality": 3,
|
||||
"effectCount": 3,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33005,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6005
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"good_id": 80006,
|
||||
"name": "六阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 6,
|
||||
"quality": 3,
|
||||
"effectCount": 3,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33006,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6006
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"good_id": 80007,
|
||||
"name": "七阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 7,
|
||||
"quality": 4,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33007,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6007
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"good_id": 80008,
|
||||
"name": "八阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 8,
|
||||
"quality": 4,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33008,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6008
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"good_id": 80009,
|
||||
"name": "九阶武器天晶",
|
||||
"eplaceId": 1,
|
||||
"itId": 59,
|
||||
"lv": 9,
|
||||
"quality": 5,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||
"mapGoodId": 33009,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6009
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"good_id": 80011,
|
||||
"name": "一阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 1,
|
||||
"quality": 1,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33010,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6010
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"good_id": 80012,
|
||||
"name": "二阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 2,
|
||||
"quality": 1,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33011,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6011
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"good_id": 80013,
|
||||
"name": "三阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 3,
|
||||
"quality": 2,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33012,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6012
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"good_id": 80014,
|
||||
"name": "四阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 4,
|
||||
"quality": 2,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33013,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6013
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"good_id": 80015,
|
||||
"name": "五阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 5,
|
||||
"quality": 3,
|
||||
"effectCount": 3,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33014,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6014
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"good_id": 80016,
|
||||
"name": "六阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 6,
|
||||
"quality": 3,
|
||||
"effectCount": 3,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33015,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6015
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"good_id": 80017,
|
||||
"name": "七阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 7,
|
||||
"quality": 4,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33016,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6016
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"good_id": 80018,
|
||||
"name": "八阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 8,
|
||||
"quality": 4,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33017,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6017
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"good_id": 80019,
|
||||
"name": "九阶衣甲天晶",
|
||||
"eplaceId": 2,
|
||||
"itId": 60,
|
||||
"lv": 9,
|
||||
"quality": 5,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||
"mapGoodId": 33018,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6018
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"good_id": 80021,
|
||||
"name": "一阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 1,
|
||||
"quality": 1,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33019,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6019
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"good_id": 80022,
|
||||
"name": "二阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 2,
|
||||
"quality": 1,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33020,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6020
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"good_id": 80023,
|
||||
"name": "三阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 3,
|
||||
"quality": 2,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33021,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6021
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"good_id": 80024,
|
||||
"name": "四阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 4,
|
||||
"quality": 2,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33022,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6022
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"good_id": 80025,
|
||||
"name": "五阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 5,
|
||||
"quality": 3,
|
||||
"effectCount": 3,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33023,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6023
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"good_id": 80026,
|
||||
"name": "六阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 6,
|
||||
"quality": 3,
|
||||
"effectCount": 3,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33024,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6024
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"good_id": 80027,
|
||||
"name": "七阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 7,
|
||||
"quality": 4,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33025,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6025
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"good_id": 80028,
|
||||
"name": "八阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 8,
|
||||
"quality": 4,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33026,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6026
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"good_id": 80029,
|
||||
"name": "九阶冠冕天晶",
|
||||
"eplaceId": 3,
|
||||
"itId": 61,
|
||||
"lv": 9,
|
||||
"quality": 5,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||
"mapGoodId": 33027,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6027
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"good_id": 80031,
|
||||
"name": "一阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 1,
|
||||
"quality": 1,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33028,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6028
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"good_id": 80032,
|
||||
"name": "二阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 2,
|
||||
"quality": 1,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33029,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6029
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"good_id": 80033,
|
||||
"name": "三阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 3,
|
||||
"quality": 2,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33030,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6030
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"good_id": 80034,
|
||||
"name": "四阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 4,
|
||||
"quality": 2,
|
||||
"effectCount": 2,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33031,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6031
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"good_id": 80035,
|
||||
"name": "五阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 5,
|
||||
"quality": 3,
|
||||
"effectCount": 3,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33032,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6032
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"good_id": 80036,
|
||||
"name": "六阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 6,
|
||||
"quality": 3,
|
||||
"effectCount": 3,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33033,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6033
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"good_id": 80037,
|
||||
"name": "七阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 7,
|
||||
"quality": 4,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33034,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6034
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"good_id": 80038,
|
||||
"name": "八阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 8,
|
||||
"quality": 4,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33035,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6035
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"good_id": 80039,
|
||||
"name": "九阶行具天晶",
|
||||
"eplaceId": 4,
|
||||
"itId": 62,
|
||||
"lv": 9,
|
||||
"quality": 5,
|
||||
"effectCount": 4,
|
||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||
"mapGoodId": 33036,
|
||||
"quenchConsume": "31001&500",
|
||||
"successConsume": "17057&100",
|
||||
"gkId": 6036
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,184 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"jewelLv": 1,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"jewelLv": 1,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 1
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"jewelLv": 2,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"jewelLv": 2,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 2
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"jewelLv": 3,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"jewelLv": 3,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 3
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"jewelLv": 4,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"jewelLv": 4,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 4
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"jewelLv": 5,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"jewelLv": 5,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 5
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"jewelLv": 5,
|
||||
"randSeId": 3,
|
||||
"stoneCnt": 2,
|
||||
"stoneLv": 10
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"jewelLv": 6,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"jewelLv": 6,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 6
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"jewelLv": 6,
|
||||
"randSeId": 3,
|
||||
"stoneCnt": 2,
|
||||
"stoneLv": 12
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"jewelLv": 7,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"jewelLv": 7,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 7
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"jewelLv": 7,
|
||||
"randSeId": 3,
|
||||
"stoneCnt": 2,
|
||||
"stoneLv": 14
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"jewelLv": 7,
|
||||
"randSeId": 4,
|
||||
"stoneCnt": 3,
|
||||
"stoneLv": 21
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"jewelLv": 8,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"jewelLv": 8,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 8
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"jewelLv": 8,
|
||||
"randSeId": 3,
|
||||
"stoneCnt": 2,
|
||||
"stoneLv": 16
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"jewelLv": 8,
|
||||
"randSeId": 4,
|
||||
"stoneCnt": 3,
|
||||
"stoneLv": 24
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"jewelLv": 9,
|
||||
"randSeId": 1,
|
||||
"stoneCnt": 0,
|
||||
"stoneLv": 0
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"jewelLv": 9,
|
||||
"randSeId": 2,
|
||||
"stoneCnt": 1,
|
||||
"stoneLv": 9
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"jewelLv": 9,
|
||||
"randSeId": 3,
|
||||
"stoneCnt": 2,
|
||||
"stoneLv": 18
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"jewelLv": 9,
|
||||
"randSeId": 4,
|
||||
"stoneCnt": 3,
|
||||
"stoneLv": 27
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -29,83 +29,48 @@
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "适用等级蓝色藏宝图",
|
||||
"type": 3,
|
||||
"name": "随机一阶地玉",
|
||||
"type": 4,
|
||||
"param": "1&",
|
||||
"count": 4
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "适用等级紫色藏宝图",
|
||||
"type": 3,
|
||||
"name": "随机二级地玉",
|
||||
"type": 4,
|
||||
"param": "2&",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"name": "适用等级橙色藏宝图",
|
||||
"type": 3,
|
||||
"name": "随机三级地玉",
|
||||
"type": 4,
|
||||
"param": "3&",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "适用等级红色藏宝图",
|
||||
"type": 3,
|
||||
"name": "随机四级地玉",
|
||||
"type": 4,
|
||||
"param": "4&",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "随机一级宝石",
|
||||
"type": 4,
|
||||
"param": "1&",
|
||||
"count": 4
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "随机二级宝石",
|
||||
"type": 4,
|
||||
"param": "2&",
|
||||
"count": 3
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"name": "随机三级宝石",
|
||||
"type": 4,
|
||||
"param": "3&",
|
||||
"count": 2
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"name": "随机四级宝石",
|
||||
"type": 4,
|
||||
"param": "4&",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"name": "适用等级的套装图纸",
|
||||
"type": 6,
|
||||
"param": "&",
|
||||
"count": 1
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"name": "武将碎片 * 5",
|
||||
"type": 2,
|
||||
"param": "0&",
|
||||
"count": 5
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"id": 10,
|
||||
"name": "武将碎片 *10",
|
||||
"type": 2,
|
||||
"param": "0&",
|
||||
"count": 10
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"id": 11,
|
||||
"name": "强化神像素材",
|
||||
"type": 5,
|
||||
"param": "17054&",
|
||||
|
||||
@@ -0,0 +1,398 @@
|
||||
[
|
||||
{
|
||||
"id": 1,
|
||||
"good_id": 60001,
|
||||
"name": "一阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 1,
|
||||
"quality": 1,
|
||||
"composeMaterial": "&",
|
||||
"attribute": "2&100"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"good_id": 60002,
|
||||
"name": "二阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 2,
|
||||
"quality": 1,
|
||||
"composeMaterial": "60001&3",
|
||||
"attribute": "2&400"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"good_id": 60003,
|
||||
"name": "三阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 3,
|
||||
"quality": 2,
|
||||
"composeMaterial": "60002&3",
|
||||
"attribute": "2&900"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"good_id": 60004,
|
||||
"name": "四阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 4,
|
||||
"quality": 2,
|
||||
"composeMaterial": "60003&3",
|
||||
"attribute": "2&1600"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"good_id": 60005,
|
||||
"name": "五阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 5,
|
||||
"quality": 3,
|
||||
"composeMaterial": "60004&3",
|
||||
"attribute": "2&2500"
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"good_id": 60006,
|
||||
"name": "六阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 6,
|
||||
"quality": 3,
|
||||
"composeMaterial": "60005&3",
|
||||
"attribute": "2&3600"
|
||||
},
|
||||
{
|
||||
"id": 7,
|
||||
"good_id": 60007,
|
||||
"name": "七阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 7,
|
||||
"quality": 4,
|
||||
"composeMaterial": "60006&3|17056&9",
|
||||
"attribute": "2&4900"
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"good_id": 60008,
|
||||
"name": "八阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 8,
|
||||
"quality": 4,
|
||||
"composeMaterial": "60007&3|17056&9",
|
||||
"attribute": "2&6400"
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"good_id": 60009,
|
||||
"name": "九阶赤焰钻",
|
||||
"eplaceId": 1,
|
||||
"itId": 42,
|
||||
"lv": 9,
|
||||
"quality": 5,
|
||||
"composeMaterial": "60008&3|17056&9",
|
||||
"attribute": "2&8000"
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"good_id": 60011,
|
||||
"name": "一阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 1,
|
||||
"quality": 1,
|
||||
"composeMaterial": "&",
|
||||
"attribute": "4&60"
|
||||
},
|
||||
{
|
||||
"id": 11,
|
||||
"good_id": 60012,
|
||||
"name": "二阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 2,
|
||||
"quality": 1,
|
||||
"composeMaterial": "60011&3",
|
||||
"attribute": "4&240"
|
||||
},
|
||||
{
|
||||
"id": 12,
|
||||
"good_id": 60013,
|
||||
"name": "三阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 3,
|
||||
"quality": 2,
|
||||
"composeMaterial": "60012&3",
|
||||
"attribute": "4&540"
|
||||
},
|
||||
{
|
||||
"id": 13,
|
||||
"good_id": 60014,
|
||||
"name": "四阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 4,
|
||||
"quality": 2,
|
||||
"composeMaterial": "60013&3",
|
||||
"attribute": "4&960"
|
||||
},
|
||||
{
|
||||
"id": 14,
|
||||
"good_id": 60015,
|
||||
"name": "五阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 5,
|
||||
"quality": 3,
|
||||
"composeMaterial": "60014&3",
|
||||
"attribute": "4&1500"
|
||||
},
|
||||
{
|
||||
"id": 15,
|
||||
"good_id": 60016,
|
||||
"name": "六阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 6,
|
||||
"quality": 3,
|
||||
"composeMaterial": "60015&3",
|
||||
"attribute": "4&2160"
|
||||
},
|
||||
{
|
||||
"id": 16,
|
||||
"good_id": 60017,
|
||||
"name": "七阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 7,
|
||||
"quality": 4,
|
||||
"composeMaterial": "60016&3|17056&9",
|
||||
"attribute": "4&2940"
|
||||
},
|
||||
{
|
||||
"id": 17,
|
||||
"good_id": 60018,
|
||||
"name": "八阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 8,
|
||||
"quality": 4,
|
||||
"composeMaterial": "60017&3|17056&9",
|
||||
"attribute": "4&3840"
|
||||
},
|
||||
{
|
||||
"id": 18,
|
||||
"good_id": 60019,
|
||||
"name": "九阶暗芒皓",
|
||||
"eplaceId": 2,
|
||||
"itId": 43,
|
||||
"lv": 9,
|
||||
"quality": 5,
|
||||
"composeMaterial": "60018&3|17056&9",
|
||||
"attribute": "4&4800"
|
||||
},
|
||||
{
|
||||
"id": 19,
|
||||
"good_id": 60021,
|
||||
"name": "一阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 1,
|
||||
"quality": 1,
|
||||
"composeMaterial": "&",
|
||||
"attribute": "5&60"
|
||||
},
|
||||
{
|
||||
"id": 20,
|
||||
"good_id": 60022,
|
||||
"name": "二阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 2,
|
||||
"quality": 1,
|
||||
"composeMaterial": "60021&3",
|
||||
"attribute": "5&240"
|
||||
},
|
||||
{
|
||||
"id": 21,
|
||||
"good_id": 60023,
|
||||
"name": "三阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 3,
|
||||
"quality": 2,
|
||||
"composeMaterial": "60022&3",
|
||||
"attribute": "5&540"
|
||||
},
|
||||
{
|
||||
"id": 22,
|
||||
"good_id": 60024,
|
||||
"name": "四阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 4,
|
||||
"quality": 2,
|
||||
"composeMaterial": "60023&3",
|
||||
"attribute": "5&960"
|
||||
},
|
||||
{
|
||||
"id": 23,
|
||||
"good_id": 60025,
|
||||
"name": "五阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 5,
|
||||
"quality": 3,
|
||||
"composeMaterial": "60024&3",
|
||||
"attribute": "5&1500"
|
||||
},
|
||||
{
|
||||
"id": 24,
|
||||
"good_id": 60026,
|
||||
"name": "六阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 6,
|
||||
"quality": 3,
|
||||
"composeMaterial": "60025&3",
|
||||
"attribute": "5&2160"
|
||||
},
|
||||
{
|
||||
"id": 25,
|
||||
"good_id": 60027,
|
||||
"name": "七阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 7,
|
||||
"quality": 4,
|
||||
"composeMaterial": "60026&3|17056&9",
|
||||
"attribute": "5&2940"
|
||||
},
|
||||
{
|
||||
"id": 26,
|
||||
"good_id": 60028,
|
||||
"name": "八阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 8,
|
||||
"quality": 4,
|
||||
"composeMaterial": "60027&3|17056&9",
|
||||
"attribute": "5&3840"
|
||||
},
|
||||
{
|
||||
"id": 27,
|
||||
"good_id": 60029,
|
||||
"name": "九阶昆仑玉",
|
||||
"eplaceId": 3,
|
||||
"itId": 44,
|
||||
"lv": 9,
|
||||
"quality": 5,
|
||||
"composeMaterial": "60028&3|17056&9",
|
||||
"attribute": "5&4800"
|
||||
},
|
||||
{
|
||||
"id": 28,
|
||||
"good_id": 60031,
|
||||
"name": "一阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 1,
|
||||
"quality": 1,
|
||||
"composeMaterial": "&",
|
||||
"attribute": "1&200"
|
||||
},
|
||||
{
|
||||
"id": 29,
|
||||
"good_id": 60032,
|
||||
"name": "二阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 2,
|
||||
"quality": 1,
|
||||
"composeMaterial": "60031&3",
|
||||
"attribute": "1&800"
|
||||
},
|
||||
{
|
||||
"id": 30,
|
||||
"good_id": 60033,
|
||||
"name": "三阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 3,
|
||||
"quality": 2,
|
||||
"composeMaterial": "60032&3",
|
||||
"attribute": "1&1800"
|
||||
},
|
||||
{
|
||||
"id": 31,
|
||||
"good_id": 60034,
|
||||
"name": "四阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 4,
|
||||
"quality": 2,
|
||||
"composeMaterial": "60033&3",
|
||||
"attribute": "1&3200"
|
||||
},
|
||||
{
|
||||
"id": 32,
|
||||
"good_id": 60035,
|
||||
"name": "五阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 5,
|
||||
"quality": 3,
|
||||
"composeMaterial": "60034&3",
|
||||
"attribute": "1&5000"
|
||||
},
|
||||
{
|
||||
"id": 33,
|
||||
"good_id": 60036,
|
||||
"name": "六阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 6,
|
||||
"quality": 3,
|
||||
"composeMaterial": "60035&3",
|
||||
"attribute": "1&7200"
|
||||
},
|
||||
{
|
||||
"id": 34,
|
||||
"good_id": 60037,
|
||||
"name": "七阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 7,
|
||||
"quality": 4,
|
||||
"composeMaterial": "60036&3|17056&9",
|
||||
"attribute": "1&9800"
|
||||
},
|
||||
{
|
||||
"id": 35,
|
||||
"good_id": 60038,
|
||||
"name": "八阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 8,
|
||||
"quality": 4,
|
||||
"composeMaterial": "60037&3|17056&9",
|
||||
"attribute": "1&12800"
|
||||
},
|
||||
{
|
||||
"id": 36,
|
||||
"good_id": 60039,
|
||||
"name": "九阶风灵石",
|
||||
"eplaceId": 4,
|
||||
"itId": 45,
|
||||
"lv": 9,
|
||||
"quality": 5,
|
||||
"composeMaterial": "60038&3|17056&9",
|
||||
"attribute": "1&16000"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user