战力:修复战力
This commit is contained in:
@@ -51,23 +51,23 @@ export class RoleHandler {
|
|||||||
hid, lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0
|
hid, lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
let heroes = await createHeroes(roleId, roleName, sid, serverId, funcs, heroInfos);
|
await createHeroes(roleId, roleName, sid, serverId, funcs, heroInfos);
|
||||||
session.set('roleName', roleName);
|
session.set('roleName', roleName);
|
||||||
session.push('roleName', () => { });
|
session.push('roleName', () => { });
|
||||||
|
|
||||||
let items = [].concat(DEFAULT_ITEMS, DEFAULT_EQUIPS, [getGoldObject(DEFAULT_GOLD)], [getCoinObject(DEFAULT_COIN)]);
|
let items = [].concat(DEFAULT_ITEMS, DEFAULT_EQUIPS, [getGoldObject(DEFAULT_GOLD)], [getCoinObject(DEFAULT_COIN)]);
|
||||||
await addItems(roleId, roleName, sid, items);
|
await addItems(roleId, roleName, sid, items);
|
||||||
|
|
||||||
role = await RoleModel.updateRoleInfo(roleId, { hasInit: true, roleName }, true)
|
let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.INIT, sid, roleId, { hasInit: true, roleName });
|
||||||
|
|
||||||
let battleId = SCRIPT.SCRIPT_BATTLE_ID;
|
let battleId = SCRIPT.SCRIPT_BATTLE_ID;
|
||||||
let warInfo = gameData.war.get(battleId);
|
let warInfo = gameData.war.get(battleId);
|
||||||
await RScriptRecordModel.setScript(roleId, battleId, warInfo.warType, 2, SCRIPT.SCRIPT_NAME);
|
await RScriptRecordModel.setScript(roleId, battleId, warInfo.warType, 2, SCRIPT.SCRIPT_NAME);
|
||||||
|
|
||||||
await checkPvp(role);
|
await checkPvp(calResult.role);
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, {
|
return resResult(STATUS.SUCCESS, {
|
||||||
roleId, roleName, ...heroes
|
roleId, roleName, heroes: calResult.heros
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,14 +98,14 @@ export class RoleHandler {
|
|||||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
|
||||||
let update = { title: title + 1 }
|
let update = { title: title + 1 }
|
||||||
role = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update);
|
let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update);
|
||||||
|
|
||||||
// 任务
|
// 任务
|
||||||
await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TITLE, 1, false, { title });
|
await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TITLE, 1, false, { title });
|
||||||
//成长任务
|
//成长任务
|
||||||
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.ROLE_TITLE, update.title)
|
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.ROLE_TITLE, update.title)
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { roleId, title: role.title });
|
return resResult(STATUS.SUCCESS, { roleId: calResult.role, title: role.title });
|
||||||
}
|
}
|
||||||
|
|
||||||
//神像强化
|
//神像强化
|
||||||
@@ -143,12 +143,12 @@ export class RoleHandler {
|
|||||||
if (!result)
|
if (!result)
|
||||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
|
||||||
role = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]);
|
let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]);
|
||||||
|
|
||||||
// 任务
|
// 任务
|
||||||
await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, count, true, {});
|
await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, count, true, {});
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs });
|
return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs });
|
||||||
}
|
}
|
||||||
|
|
||||||
//神像进阶
|
//神像进阶
|
||||||
@@ -187,12 +187,12 @@ export class RoleHandler {
|
|||||||
if (!result)
|
if (!result)
|
||||||
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
|
||||||
|
|
||||||
role = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH_UP, sid, roleId, { teraphs }, [id]);
|
let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH_UP, sid, roleId, { teraphs }, [id]);
|
||||||
|
|
||||||
// 神像进阶,进阶一次就触发一次礼包弹框
|
// 神像进阶,进阶一次就触发一次礼包弹框
|
||||||
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.ROLE_TERAPH_STAGE_UP, 1)
|
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.ROLE_TERAPH_STAGE_UP, 1)
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs });
|
return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs });
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获得百家学宫
|
// 获得百家学宫
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ interface calPlayerReturn {
|
|||||||
guild?: GuildType;
|
guild?: GuildType;
|
||||||
hero?: HeroType;
|
hero?: HeroType;
|
||||||
pushHeros: {hid: number, ce: number, incHeroCe: number}[];
|
pushHeros: {hid: number, ce: number, incHeroCe: number}[];
|
||||||
topLineupCe: number
|
topLineupCe: number;
|
||||||
|
heros?: HeroType[]
|
||||||
}
|
}
|
||||||
|
|
||||||
//修改并下发战力
|
//修改并下发战力
|
||||||
@@ -53,7 +54,7 @@ export async function calAllHeroCe(type:number, sid: string, roleId: string, upd
|
|||||||
if(result.pushHeros.length > 0) {
|
if(result.pushHeros.length > 0) {
|
||||||
return await pushCalAllHeroCe(roleId, sid, result);
|
return await pushCalAllHeroCe(roleId, sid, result);
|
||||||
} else {
|
} else {
|
||||||
return result.role;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,7 +69,7 @@ export async function pushCalAllHeroCe(roleId: string, sid: string, calResult: c
|
|||||||
}
|
}
|
||||||
updateRank(roleId, serverId, topLineupCe, role, pushHeros);
|
updateRank(roleId, serverId, topLineupCe, role, pushHeros);
|
||||||
|
|
||||||
return role;
|
return calResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import BaseModel from './BaseModel';
|
|||||||
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
|
import { index, getModelForClass, prop, DocumentType, Ref, mongoose } from '@typegoose/typegoose';
|
||||||
import User from './User';
|
import User from './User';
|
||||||
import { shouldRefresh, reduceCe } from '../pubUtils/util';
|
import { shouldRefresh, reduceCe } from '../pubUtils/util';
|
||||||
import { initRoleAtrr } from '../pubUtils/playerCe';
|
|
||||||
import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil';
|
import { nowSeconds, getTimeFunD } from '../pubUtils/timeUtil';
|
||||||
import { Figure } from '../domain/dbGeneral';
|
import { Figure } from '../domain/dbGeneral';
|
||||||
import { BAG, EXTERIOR } from '../pubUtils/dicParam';
|
import { BAG, EXTERIOR } from '../pubUtils/dicParam';
|
||||||
@@ -330,7 +329,6 @@ export default class Role extends BaseModel {
|
|||||||
const doc = new RoleModel();
|
const doc = new RoleModel();
|
||||||
const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId });
|
const update = Object.assign(doc.toJSON(), roleInfo, { userInfo: user, serverType: user.serverType, serverId });
|
||||||
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean);
|
const role: RoleType = await RoleModel.findOneAndUpdate({ 'userInfo.uid': uid, serverId }, update, { upsert: true, new: true }).lean(lean);
|
||||||
initRoleAtrr(role);
|
|
||||||
return role;
|
return role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ function parseCeAttr(maxStage: number, str: string) {
|
|||||||
if (!str) return result;
|
if (!str) return result;
|
||||||
let decodeArr = decodeArrayListStr(str);
|
let decodeArr = decodeArrayListStr(str);
|
||||||
for (let i = 1; i <= maxStage; i++) {
|
for (let i = 1; i <= maxStage; i++) {
|
||||||
let [id, attr] = decodeArr[i]||[i.toString(), "0"];
|
let [id, attr] = decodeArr[i - 1]||[i.toString(), "0"];
|
||||||
if (isNaN(parseInt(id)) || isNaN(parseInt(attr))) {
|
if (isNaN(parseInt(id)) || isNaN(parseInt(attr))) {
|
||||||
throw new Error('data table format wrong');
|
throw new Error('data table format wrong');
|
||||||
}
|
}
|
||||||
|
|||||||
+35
-25
@@ -62,7 +62,7 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU
|
|||||||
let heros = await HeroModel.findByRole(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);
|
||||||
if(!roleAttrs) return {role, pushHeros: [], ce: role.ce, topLineupCe: role.topLineupCe, serverId: role.serverId}; // 无加成
|
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 }>();
|
let pushHeros = new Array<{ hid: number, ce: number, incHeroCe: number }>();
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ export async function reCalAllHeroCe(type: number, roleId: string, update: RoleU
|
|||||||
role = await RoleModel.updateRoleInfo(roleId, update);
|
role = await RoleModel.updateRoleInfo(roleId, update);
|
||||||
|
|
||||||
let guild = await GuildModel.updateCe(roleId, allIncCe); // 公会更新战力
|
let guild = await GuildModel.updateCe(roleId, allIncCe); // 公会更新战力
|
||||||
return { role, pushHeros, ce: role.ce, topLineupCe: role.topLineupCe, guild, serverId: role.serverId }
|
return { role, pushHeros, ce: role.ce, topLineupCe: role.topLineupCe, guild, serverId: role.serverId, heros }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,6 +100,9 @@ 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>) {
|
||||||
let { attr: roleAttrs } = role;
|
let { attr: roleAttrs } = role;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
case HERO_SYSTEM_TYPE.INIT:
|
||||||
|
roleAttrs = calRoleInit(role);
|
||||||
|
break;
|
||||||
case HERO_SYSTEM_TYPE.ADD_SKIN:
|
case HERO_SYSTEM_TYPE.ADD_SKIN:
|
||||||
roleAttrs = calHeroAddSkin(role, args);
|
roleAttrs = calHeroAddSkin(role, args);
|
||||||
break;
|
break;
|
||||||
@@ -253,6 +256,22 @@ export function calHeroInitIncAttr(hero: HeroType, addSeidList: Array<number>, r
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始全局加成
|
||||||
|
* @param args
|
||||||
|
* @param ceAttr
|
||||||
|
*/
|
||||||
|
function calRoleInit(role: RoleType) {
|
||||||
|
let { attr: roleAttrs, teraphs } = role;
|
||||||
|
delete role._id;
|
||||||
|
roleAttrs = calTitle({...role, title: 0}, role); // 计算初始爵位带来的全局
|
||||||
|
for(let {id} of teraphs) {
|
||||||
|
roleAttrs = calTeraphMainAttr({ ...role, teraphs: [] }, role, id);
|
||||||
|
}
|
||||||
|
role.attr = roleAttrs;
|
||||||
|
return roleAttrs;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加皮肤全局加成
|
* 添加皮肤全局加成
|
||||||
* @param args
|
* @param args
|
||||||
@@ -617,6 +636,7 @@ export function calHeroFavourUpIncAttr(originHero: HeroType, update: HeroUpdate)
|
|||||||
let { favourLv: oldFavourLv, attr: heroAttrs } = originHero;
|
let { favourLv: oldFavourLv, attr: heroAttrs } = originHero;
|
||||||
let { favourLv = oldFavourLv } = update;
|
let { favourLv = oldFavourLv } = update;
|
||||||
|
|
||||||
|
|
||||||
let currentFiendShipLevel = gameData.friendShipLevelMap.get(favourLv);
|
let currentFiendShipLevel = gameData.friendShipLevelMap.get(favourLv);
|
||||||
let difAdd = currentFiendShipLevel.add;
|
let difAdd = currentFiendShipLevel.add;
|
||||||
if (oldFavourLv && oldFavourLv > 0) { // 减上一级好感
|
if (oldFavourLv && oldFavourLv > 0) { // 减上一级好感
|
||||||
@@ -627,7 +647,7 @@ export function calHeroFavourUpIncAttr(originHero: HeroType, update: HeroUpdate)
|
|||||||
for (let {shipId, level} of originHero.connections) {
|
for (let {shipId, level} of originHero.connections) {
|
||||||
let dicHeroFriendShip = getFriendShipById(shipId, level);
|
let dicHeroFriendShip = getFriendShipById(shipId, level);
|
||||||
for (let attr of dicHeroFriendShip.attributes) {
|
for (let attr of dicHeroFriendShip.attributes) {
|
||||||
let fixUp = attr.number * (HERO_CE_RATIO + difAdd);
|
let fixUp = (attr.number + difAdd ) * HERO_CE_RATIO;
|
||||||
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } });
|
updateHeroAttr(heroAttrs, attr.id, { inc: { fixUp } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1050,22 +1070,21 @@ function calTitle(role: RoleType, update: RoleUpdate) {
|
|||||||
let { title: oldTitle, attr: roleAttrs } = role;
|
let { title: oldTitle, attr: roleAttrs } = role;
|
||||||
let { title: newTitle = oldTitle } = update;
|
let { title: newTitle = oldTitle } = update;
|
||||||
|
|
||||||
for(let title = oldTitle; title <= newTitle; title++) {
|
let dicOldTitle = gameData.title.get(oldTitle)||{ mainAttrValue: new Map(), assiAttrValue: new Map() };
|
||||||
let dicTitle = gameData.title.get(title);
|
let dicNewTitle = gameData.title.get(newTitle);
|
||||||
if(!dicTitle) break;
|
console.log('***** oldTitle, newTitle', oldTitle, newTitle);
|
||||||
|
|
||||||
for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
|
for (let i = ABI_TYPE.ABI_HP; i < ABI_TYPE.ABI_MAX; i++) {
|
||||||
if(dicTitle.mainAttrValue.has(i)) {
|
if (dicNewTitle.mainAttrValue.has(i) || dicOldTitle.mainAttrValue.has(i)) {
|
||||||
let fixUp = dicTitle.mainAttrValue.get(i) * HERO_CE_RATIO;
|
console.log()
|
||||||
updateRoleAttr(roleAttrs, i, { inc: { fixUp }});
|
let fixUp = ((dicNewTitle.mainAttrValue.get(i) || 0) - (dicOldTitle.mainAttrValue.get(i) || 0)) * HERO_CE_RATIO;
|
||||||
}
|
updateRoleAttr(roleAttrs, i, { inc: { fixUp } });
|
||||||
if(dicTitle.assiAttrValue.has(i)) {
|
}
|
||||||
let fixUp = dicTitle.assiAttrValue.get(i) * HERO_CE_RATIO;
|
if (dicNewTitle.assiAttrValue.has(i) || dicOldTitle.mainAttrValue.has(i)) {
|
||||||
updateRoleAttr(roleAttrs, i, { inc: { fixUp }});
|
let fixUp = ((dicNewTitle.assiAttrValue.get(i) || 0) - (dicOldTitle.assiAttrValue.get(i) || 0)) * HERO_CE_RATIO;
|
||||||
}
|
updateRoleAttr(roleAttrs, i, { inc: { fixUp } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return roleAttrs;
|
return roleAttrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1125,12 +1144,3 @@ function calTeraphAssistAttr(role: RoleType, update: RoleUpdate, id: number) {
|
|||||||
});
|
});
|
||||||
return roleAttrs;
|
return roleAttrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 全局加成初始化
|
|
||||||
* @param role
|
|
||||||
*/
|
|
||||||
export function initRoleAtrr(role: RoleType) {
|
|
||||||
delete role._id;
|
|
||||||
calTitle({...role, title: 0}, role); // 计算初始爵位带来的全局
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user