武将重生:完成接口

This commit is contained in:
luying
2022-02-28 15:15:00 +08:00
parent cf920c0c80
commit bf73985623
8 changed files with 141 additions and 24 deletions
+15 -14
View File
@@ -1,14 +1,11 @@
export const EQUIP = {
EQUIP_ONE_HOLE: '17043&1', // 装备孔1号位消耗
EQUIP_TWO_HOLE: '17043&2', // 装备孔2号位消耗
EQUIP_THREE_HOLE: '17043&4', // 装备孔3号位消耗
EQUIP_ONE_REFORGED: '17044&1', // 装备位洗练四条词条消耗
EQUIP_TWO_REFORGED: '17044&2', // 装备位洗练三条词条消耗
EQUIP_THREE_REFORGED: '17044&4', // 装备位洗练二条词条消耗
EQUIP_FOUR_REFORGED: '17044&8', // 装备位洗练一条词条消耗
EQUIP_ONE_LOCKED: '17045&1', // 装备锁定第一条词条锁消耗
EQUIP_TWO_LOCKED: '17045&2', // 装备锁定第二条词条锁消耗
EQUIP_THREE_LOCKED: '17045&4', // 装备锁定第三条词条锁消耗
EQUIP_ONE_REFORGED: '17044&1', // 天晶无锁定词条洗炼消耗
EQUIP_TWO_REFORGED: '17044&2', // 天晶锁定1条词条洗炼消耗
EQUIP_THREE_REFORGED: '17044&4', // 天晶锁定2条词条洗炼消耗
EQUIP_FOUR_REFORGED: '17044&8', // 天晶锁定3条词条洗炼消耗
EQUIP_ONE_LOCKED: '17045&1', // 天晶锁定第一条词条锁消耗
EQUIP_TWO_LOCKED: '17045&2', // 天晶锁定第二条词条锁消耗
EQUIP_THREE_LOCKED: '17045&4', // 天晶锁定第三条词条锁消耗
EQUIP_LEVEL_LOCKED: '1&1|2&1|3&20|4&41|5&61', // 装备养成功能玩家等级解锁限制
};
export const JOB = {
@@ -18,8 +15,8 @@ export const JOB = {
JOB_CLASS_4: '弓兵', // 大兵种名称
JOB_CLASS_5: '游侠', // 大兵种名称
JOB_CLASS_6: '策士', // 大兵种名称
JOB_CLASS_7: '道士', // 大兵种名称
JOB_CLASS_8: '医者', // 大兵种名称
JOB_CLASS_7: '医者', // 大兵种名称
JOB_CLASS_8: '道士', // 大兵种名称
};
export const SCHOOL = {
SCHOOL_POSITION: '1&1|2&1|3&1|4&0|5&0', // 百家学宫位置锁定
@@ -99,7 +96,7 @@ export const CHAT_SYSTEM = {
export const GUILDACTIVITY = {
GATEACTIVITY_CHALLENGE_TIMES: 1, // 蛮夷入侵每天可以挑战次的次数
GATEACTIVITY_HONOUR_RATIO: 0.5, // 功勋/积分的系数
GATEACTIVITY_ENEMYCE: 2000, // 蛮夷入侵敌军2000战力模板
GATEACTIVITY_ENEMYCE: 10000, // 敌军10000战力基础属性模板
GATEACTIVITY_ROUNDSTANDARD: 20, // 蛮夷入侵和基准战力相当的回合
CITYACTIVITY_CHALLENGE_CD: 300, // 诸侯混战每次战斗之后的cd间隔
CITYACTIVITY_CD_COST: 100, // 诸侯混战取消cd需要消耗的元宝数
@@ -110,11 +107,12 @@ export const GUILDACTIVITY = {
GATEACTIVITY_GATEHP: 2000000, // 城门血量
GATEACTIVITY_BOSS_DIFFICULT: '1&1.2|2&1.5', // boss类型&难度系数|boss类型&难度系数(1:小boss,2:大boss)
RACEACTIVITY_DURABILITY_REWARD: 2, // 每剩余1%耐久度给予X点功勋
RACEACTIVITY_NORMAL_ITEMS: '1&8&15|3&5&10|5&0&1', // 粮草先行普通道具
RACEACTIVITY_NORMAL_ITEMS: '1&50&5|3&70&10|5&100&15', // 粮草先行普通道具
RACEACTIVITY_EVENT_MEMBERCNT: 3, // 粮草先行随机道具获得人数
RACEACTIVITY_EVENT_ITEMS: '2&1|4&1|6&1', // 粮草先行根据事件随机人可获得道具
RACE_INIT_SPEED: 3, // 粮草先行军团初始速度
RACE_PER_SPEED: 0.1, // 粮草先行军团每人参加增速
GATEACTIVITY_GATEHP_N: 20, // 城门血量倍率
};
export const GUILD_AUCTION = {
DIVIDEND_RATE: 1, // 总金额分红比例,1表示总金额 100% 分红
@@ -254,3 +252,6 @@ export const BATTLE_SPEED = {
export const LINK = {
OUT_LINK: 'https://www.wjx.cn/vj/OSxaldE.aspx', // 外链
};
export const REBORN = {
REBORON_HERO: 500, // 武将重生元宝数量
};
+46 -3
View File
@@ -61,11 +61,11 @@ export async function calPlayerCeAndSave(type: number, roleId: string, originHer
}
//全局属性加成
export async function reCalAllHeroCe(type: number, roleId: string, update: RoleUpdate, args?: Array<number>) {
export async function reCalAllHeroCe(type: number, roleId: string, update: RoleUpdate, args?: Array<number>, params?: any) {
let role = await RoleModel.findByRoleId(roleId);
let heros = await HeroModel.findByRole(roleId);
let roleAttrs = await reCalRoleAttr(type, heros, role, update, args);
let roleAttrs = await reCalRoleAttr(type, heros, role, update, args, params);
if(!roleAttrs) return {role, pushHeros: [], ce: role.ce, topLineupCe: role.topLineupCe, serverId: role.serverId, heros }; // 无加成
let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>();
@@ -105,7 +105,7 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU
}
// 计算武将全局战力
async function reCalRoleAttr(type: number, heros: Array<HeroType>, role: RoleType, update: RoleUpdate, args: Array<number>) {
async function reCalRoleAttr(type: number, heros: Array<HeroType>, role: RoleType, update: RoleUpdate, args: Array<number>, params: any) {
let { attr: roleAttrs } = role;
switch (type) {
case HERO_SYSTEM_TYPE.ADD_SKIN:
@@ -131,6 +131,9 @@ async function reCalRoleAttr(type: number, heros: Array<HeroType>, role: RoleTyp
case HERO_SYSTEM_TYPE.TERAPH_UP:
roleAttrs = calTeraphAssistAttr(role, update, args[0]);
break;
case HERO_SYSTEM_TYPE.REBIRTH:
roleAttrs = await calHeroRebirth(role, params.originHero, params.heroUpdate);
break;
}
return roleAttrs;
@@ -1062,5 +1065,45 @@ function calTeraphAssistAttr(role: RoleType, update: RoleUpdate, id: number) {
let fixUp = (val - oldVal) * HERO_CE_RATIO;
updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } });
});
return roleAttrs;
}
async function calHeroRebirth(role: RoleType, originHero: HeroType, updateHero: HeroUpdate) {
let { roleId, attr: roleAttrs } = role;
// 1. 名将谱
let dicHero = gameData.hero.get(originHero.hid);
let dicHeroScroll = getScollByStar(dicHero.quality, updateHero.star, updateHero.quality, updateHero.colorStar);
let dicPreScroll = getScollByStar(dicHero.quality, originHero.star, originHero.quality, originHero.colorStar);
if(dicHeroScroll) {
for(let [attrId, value] of dicHeroScroll.ceAttr) {
updateRoleAttr(roleAttrs, attrId, { inc: { fixUp: value * HERO_CE_RATIO } });
}
}
if(dicPreScroll) {
for(let [attrId, value] of dicPreScroll.ceAttr) {
updateRoleAttr(roleAttrs, attrId, { inc: { fixUp: -value * HERO_CE_RATIO } });
}
}
// 2. 百家学宫
let school = await SchoolModel.findByHid(roleId, originHero.hid);
if(school) {
let dicSchool = gameData.school.get(school.schoolId);
let preRate = getSchoolRateByStar(originHero.star, originHero.colorStar, originHero.quality);
let curRate = getSchoolRateByStar(updateHero.star, updateHero.colorStar, updateHero.quality);
console.log('####', updateHero.star, updateHero.colorStar, updateHero.quality)
for (let attrId of dicSchool.upAttribute) {
if(ABI_TYPE_MAIN.includes(attrId)) { // 主属性
let ratioUp = (curRate?.mainAttrAPerent||0) - (preRate?.mainAttrAPerent||0);
updateRoleAttr(roleAttrs, attrId, { inc: { ratioUp } });
} else {
let fixUp = ((curRate?.assiAttrAddValue||0) - (preRate?.assiAttrAddValue||0)) * HERO_CE_RATIO;
updateRoleAttr(roleAttrs, attrId, { inc: { fixUp } });
}
}
}
return roleAttrs;
}