This commit is contained in:
mamengke01
2020-12-28 09:49:53 +08:00
parent 3b6b8a7d01
commit 66a9bf7809
9 changed files with 148 additions and 72 deletions
@@ -4,16 +4,15 @@ import { ItemInter } from "../../../pubUtils/interface";
import { resResult, parseGoodStr, getRandomByLen, deepCopy, mergeSameGoods, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util";
import { addItems, handleCost, decreaseItems } from "../../../services/rewardService";
import { checkMaterialEnough } from "../../../services/equipService";
import { EquipModel, RandSe } from "../../../db/Equip";
import { EquipModel, RandSe, EquipType } from "../../../db/Equip";
import { HeroModel, EPlace } from "../../../db/Hero";
import { ItemModel } from "../../../db/Item";
import Role from "../../../db/Role";
import { calPlayerCeAndSave } from "../../../services/playerCeService";
import { getHeroJob, getGoodById, gameData, getJewelById, getHeroEquipByClassId } from "../../../pubUtils/data";
import { getHeroJob, getGoodById, gameData, getSuit, getHeroEquipByClassId } from "../../../pubUtils/data";
import { EQUIP } from "../../../pubUtils/dicParam";
import { ITID, SPEICAL_ITEM, RANDOM_SE_COUNT } from "../../../consts/constModules/itemConst";
import { changeEquip } from "../../../services/equipService";
import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerCe } from "../../../services/equipService";
const _ = require('underscore');
@@ -423,7 +422,7 @@ export class EquipHandler {
let obj = ITID.get(goodInfo.itid);
let id = obj.type;
let curEquips: Array<{ seqId: number, hid: number}> = [];
let hero = await HeroModel.findByHidAndRole(hid, roleId);
let hero = await HeroModel.getHeroEquip(roleId, hid);
if (!hero)
return resResult(STATUS.HERO_NOT_FIND);
if (type == 1) {
@@ -439,23 +438,18 @@ export class EquipHandler {
let index = _.findIndex(hero.ePlace, { id });
if (index < 0)
return resResult(STATUS.WRONG_PARMS);
let objectId = <string>hero.ePlace[index].equip;
let curEquip = await changeEquip(roleId, sid, objectId, equip.hid, id, eid);
let equipOffInfo = <EquipType>hero.ePlace[index].equip;
let curEquip = await changeEquip(roleId, sid, equipOffInfo, equip.hid, id, eid);
if (!!curEquip)
curEquips.push(curEquip);
curEquip = await dressEquip(roleId, sid, hero, equip);
if (!!curEquip)
curEquips.push(curEquip);
hero = await HeroModel.addEquip(roleId, hid, id, equip._id);
await calPlayerCeAndSave(sid, roleId, [hero]);
curEquips.push({ seqId: eid, hid });
} else if (type == 2) {
if (!equip.hid)
return resResult(STATUS.EQUIP_NOT_EQUIPED);
let index = _.findIndex(hero.ePlace, { id });
if (index < 0)
return resResult(STATUS.WRONG_PARMS);
hero.ePlace[index].equip = null;
let {seqId} = await EquipModel.updateEquipInfo(eid, { hid: 0 });
await calPlayerCeAndSave(sid, roleId, [hero]);
curEquips.push({ seqId, hid:0 });
let curEquip = await takeOffEquipAndCalPlayerCe(roleId, sid, equip.seqId, hero, id)
curEquips.push(curEquip);
}
return resResult(STATUS.SUCCESS, { curEquips: curEquips });
}
@@ -622,6 +616,7 @@ export class EquipHandler {
let goodInfo = getGoodById(jewel);
let good = ITID.get(goodInfo.itid);
let needUpdate = false;
let oldJewel;
let consumes: Array<{id: number, count: number, ratio?: number}> = [];
if (good.type != CONSUME_TYPE.JEWEL)
return resResult(STATUS.WRONG_PARMS);
@@ -630,6 +625,7 @@ export class EquipHandler {
equip = await EquipModel.getEquip(eid);
let index = _.findIndex(equip.holes,{id});
if (!!equip.holes[index] && equip.holes[index].jewel == goodInfo.composeMaterial[0].id) {
oldJewel = equip.holes[index].jewel;
equip.holes[index].jewel = jewel;
needUpdate = true;
consumes.push({id: goodInfo.composeMaterial[0].id, count: 1, ratio: 1});
@@ -645,6 +641,10 @@ export class EquipHandler {
let result = {};
if (needUpdate) {
await EquipModel.updateEquipInfo(eid, { holes: equip.holes });
if (!!equip.hid) {
let hero = await HeroModel.findByHidAndRole(equip.hid, roleId);
await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.JEWEL_ON, [jewel, oldJewel]);
}
return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } });
} else {
result = await addItems(roleId, roleName, sid, [{ id: jewel, count: count }]);
@@ -6,13 +6,12 @@ import {Application, BackendSession} from 'pinus';
import { handleCost } from '../../../services/rewardService';
import { getTitle, getTeraph, gameData } from '../../../pubUtils/data';
import { SCHOOL, SCROLL } from '../../../pubUtils/dicParam';
import { getTeraphAttr } from '../../../consts/constModules/abilityConst'
import { getTeraphAttr, getAtrrNameById } from '../../../consts/constModules/abilityConst'
const _ = require('underscore');
import { SclResultInter, SclPosInter } from '../../../pubUtils/interface';
import { SchoolModel } from '../../../db/School';
import { TERAPH_RANDOM } from '../../../consts/consts';
import { checkMaterialEnough } from '../../../services/roleService'
import { calPlayerCeAndSave } from '../../../services/playerCeService';
import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService';
import { HERO_SYSTEM_TYPE } from '../../../consts';
export default function(app: Application) {
@@ -121,11 +120,13 @@ export class RoleHandler {
let {attr, consumes} = checkMaterialEnough(type, attrs, teraphInfo, teraph);
for (let key in attr) {
teraph[key] += attr[key];
role.globalCeAttr[key].fixUp += attr[key];
}
let result = await handleCost(roleId, sid, consumes);
if (!result)
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
await RoleModel.updateRoleInfo(roleId, { teraphs: role.teraphs });
await RoleModel.updateRoleInfo(roleId, { teraphs: role.teraphs, globalCeAttr: role.globalCeAttr});
await calAllHeroCe( sid, roleId);
return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs });
}
@@ -148,13 +149,19 @@ export class RoleHandler {
teraph[attrName] = 0;
}
teraph.grade++;
if (!getTeraph(id, teraph.grade))
let nextTeraphInfo = getTeraph(id, teraph.grade)
if (!nextTeraphInfo)
return resResult(STATUS.DIC_DATA_NOT_FOUND)
let consumes = teraphInfo.upGradeMaterial;
let result = await handleCost(roleId, sid, consumes);
if (!result)
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
await RoleModel.updateRoleInfo(roleId, { teraphs: role.teraphs });
for (let {id, number} of nextTeraphInfo.assiAttrValue) {
let attrName = getAtrrNameById(id);
role.globalCeAttr[attrName].ratioUp += number;
}
await RoleModel.updateRoleInfo(roleId, { teraphs: role.teraphs, globalCeAttr: role.globalCeAttr});
await calAllHeroCe(sid, roleId);
return resResult(STATUS.SUCCESS, { roleId, teraphs: role.teraphs });
}
+35 -32
View File
@@ -1,12 +1,13 @@
import { mergeSameGoods } from '../pubUtils/util';
import { EquipModel } from "../db/Equip";
import { HeroModel, EPlace } from "../db/Hero";
import { HeroModel, EPlace, HeroType } from "../db/Hero";
import { ITID } from "../consts/constModules/itemConst";
import { getHeroJob, getGoodById, gameData, getJewelById, getHeroEquipByClassId } from "../pubUtils/data";
import { calPlayerCeAndSave } from "./playerCeService";
import { HERO_SYSTEM_TYPE } from "../consts";
import { EquipType } from "../db/Equip";
import { calEquipSeids } from '../pubUtils/playerCe';
const _ = require('underscore');
export function checkMaterialEnough(consumes:Array<{id: number, count: number}>, jewel: number, jewelCount: number) {
let comJewelMap = {};
consumes = mergeSameGoods(consumes);
@@ -38,46 +39,48 @@ export function checkMaterialEnough(consumes:Array<{id: number, count: number}>,
return needConsumes;
}
export async function changeEquip(roleId: string, sid: string, objectId: string, hid: number, id: number, seqId: number) {
export async function changeEquip(roleId: string, sid: string, equip: EquipType, hid: number, id: number, seqId: number) {
let hero;
if (!!hid)
if (!!hid) //需要卸下或者替换的武将
hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!!objectId) {
let equip = await EquipModel.getEquipByObjectId(objectId);
if (!!hero) {
if (!!equip) {//需要卸下的装备
if (!!hero) {//判断是否替换装备
let goodInfo = getGoodById(equip.id);
let obj = ITID.get(goodInfo.itid);
let ePlaceId = obj.type;
if (goodInfo.lvLimited > hero.lv)
return takeOffEquip(objectId);
if (goodInfo.lvLimited > hero.lv)
return takeOffEquip(equip.seqId);
let { jobid } = gameData.hero.get(hid);
let { job_class } = getHeroJob(jobid);
let { classId } = getHeroEquipByClassId(goodInfo.itid);
if (_.indexOf(classId, job_class) < 0)
return takeOffEquip(objectId);
hero = await HeroModel.addEquip(roleId, hero.hid, ePlaceId, objectId);
// await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.EQUIP, []);
if (!!hero) {
await calPlayerCeAndSave(sid, roleId, [hero]);
let ePlaces = <EPlace>hero.ePlace;
let ePlace= _.findWhere(ePlaces,{ id: ePlaceId });
return { seqId: ePlace.equip.seqId, hid };
}
if (_.indexOf(classId, job_class) < 0)
return takeOffEquip(equip.seqId);
return dressEquip(roleId, sid, hero, equip);
} else {
return takeOffEquip(objectId);
return takeOffEquip(equip.seqId);
}
}
if (!!hero) {
let index = _.findIndex(hero.ePlace, { id });
if (index < 0)
return;
hero.ePlace[index].equip = null;
await EquipModel.updateEquipInfo(seqId, { hid: 0 });
await calPlayerCeAndSave(sid, roleId, [hero]);
} else if (!!hero) {//从穿戴装备的武将上卸下装备
await takeOffEquipAndCalPlayerCe(roleId, sid, seqId, hero, id);//卸下装备并重算战力
}
}
async function takeOffEquip(objectId: string) {
let { seqId } = await EquipModel.updateEquipInfobyObjectId(objectId, { hid: 0 });
export async function takeOffEquipAndCalPlayerCe(roleId: string, sid: string, seqId: number, hero:HeroType, id: number ) {
let index = _.findIndex(hero.ePlace, { id });
if (index < 0)
return;
await EquipModel.updateEquipInfo(seqId, { hid: 0 });
hero.ePlace[index].equip = null;
let args = calEquipSeids(hero);
await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.EQUIP, args);
return { seqId, hid: 0};
}
export async function dressEquip(roleId: string, sid: string, hero:HeroType, equip: EquipType) {
hero = await HeroModel.addEquip(roleId, hero.hid, equip.ePlaceId, equip._id);
let args = calEquipSeids(hero);
await calPlayerCeAndSave(sid, roleId, [hero], HERO_SYSTEM_TYPE.EQUIP, args);
return { seqId: equip.seqId, hid: hero.hid };
}
async function takeOffEquip(seqId: number) {
await EquipModel.updateEquipInfo(seqId, { hid: 0 });
return { seqId, hid: 0};
}
+13 -1
View File
@@ -5,7 +5,11 @@
import { pinus } from 'pinus';
import { STATUS } from '../consts/statusCode';
<<<<<<< HEAD
import { resResult, reduceCe } from '../pubUtils/util';
=======
import { resResult, reduceCe } from '../pubUtils/util';
>>>>>>> cb1f9ea...
import { calPlayerCeAndSave as pubCalPlayerCeAndSave, reCalAllHeroCe } from '../pubUtils/playerCe';
import { HeroType } from '../db/Hero';
const _ = require('underscore');
@@ -16,19 +20,27 @@ export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Arr
let {role, pushHeros} = await pubCalPlayerCeAndSave(roleId, heros, type, args);
//下发战力
let uids = [{ uid: roleId, sid }];
<<<<<<< HEAD
let pushHerosReduced = pushHeros.map(cur => {
return { hid: cur.hid, ce: reduceCe(cur.ce), incHeroCe: reduceCe(cur.incHeroCe) }
});
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: pushHerosReduced, topFiveCe: 0 }), uids);
=======
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce), heros: pushHeros, topFiveCe: 0 }), uids);
>>>>>>> cb1f9ea...
return heros;
}
export async function calAllHeroCe(sid: string, roleId: string, type:number, args:Array<number>) {
export async function calAllHeroCe(sid: string, roleId: string, type?:number, args?:Array<number>) {
let {ce, pushHeros}= await reCalAllHeroCe(roleId,type, args);
let uids = [{ uid: roleId, sid }];
<<<<<<< HEAD
let pushHerosReduced = pushHeros.map(cur => {
return { hid: cur.hid, ce: reduceCe(cur.ce), incHeroCe: reduceCe(cur.incHeroCe) }
});
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(ce), heros: pushHerosReduced, topFiveCe: 0 }), uids);
=======
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(ce), heros: pushHeros, topFiveCe: 0 }), uids);
>>>>>>> cb1f9ea...
return;
}