战力,出生皮肤

This commit is contained in:
mamengke01
2020-12-22 14:07:43 +08:00
parent ba4f58509d
commit eec53b688f
17 changed files with 1173 additions and 314 deletions
@@ -43,11 +43,7 @@ export class EntryHandler {
if (!role) {
return resResult(STATUS.ROLE_NOT_FOUND);
}
// duplicate log in
if (!!sessionService.getByUid(role.roleId)) {
console.log('duplicate log in', role.roleId);
return resResult(STATUS.DUP_LOGIN);
}
sessionService.kick(role.roleId);//踢掉之前登录的账号code:1005
await session.abind(role.roleId);
session.set('uid', role.roleId);
session.set('roleId', role.roleId);
@@ -44,7 +44,7 @@ export class EquipHandler {
let targetGood = gameData.goods.get(gid);
if (!targetGood) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if (!targetGood) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let cost = new Array<ItemInter>();
if (targetGood.suitId > 0) { // 套装
@@ -172,13 +172,13 @@ export class EquipHandler {
// 是否成功精炼
let dicRefine = gameData.refine.get(refineLv + 1);
if (!dicRefine) {
return resResult(STATUS.ROLE_INFO_NOT_FOUND)
return resResult(STATUS.DIC_DATA_NOT_FOUND)
}
let { successRate } = dicRefine;
for (let { id, count } of material) {
let dicGoods = gameData.goods.get(id);
if (!dicGoods) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
if (!SPEICAL_ITEM.REFINE_ADD_RATE.includes(id)) {
return resResult(STATUS.ROLE_WRONG_ITEM)
}
@@ -264,7 +264,7 @@ export class EquipHandler {
}
let dicGoods = gameData.goods.get(id);
if (!dicGoods) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let { randomEffect } = dicGoods;
let pool = randomEffect.map(cur => gameData.randomEffectPool.get(cur));
@@ -354,12 +354,14 @@ export class EquipHandler {
let equip = await EquipModel.getEquip(eid);
let goodInfo = getGoodById(equip.id);
let obj = ITID.get(goodInfo.itid);
let ePlaceId = obj.type;
let id = obj.type;
let curEquips: Array<{ seqId: number, hid: number, ePlaceId: number }> = [];
let hero = await HeroModel.findByHidAndRole(hid, roleId);
if (!hero)
return resResult(STATUS.HERO_NOT_FIND);
if (type == 1) {
if (!!equip.hid)
return resResult(STATUS.EQUIP_IS_EQUIPED);
if (goodInfo.lvLimited > hero.lv)
return resResult(STATUS.EQUIP_LEVEL_LIMIT);
let { jobid } = gameData.hero.get(hid);
@@ -367,40 +369,26 @@ export class EquipHandler {
let { classId } = getHeroEquipByClassId(goodInfo.itid);
if (_.indexOf(classId, job_class) < 0)
return resResult(STATUS.EQUIP_NOT_EQUIPED_HERO);
if (!!equip.hid)
return resResult(STATUS.EQUIP_IS_EQUIPED);
let index = _.findIndex(hero.ePlace, { id: ePlaceId });
let index = _.findIndex(hero.ePlace, { id });
if (index < 0)
return resResult(STATUS.WRONG_PARMS);
let objectId = <string>hero.ePlace[index].equip;
if (!!objectId) {
let lastEquip = await EquipModel.updateEquipInfobyObjectId(objectId, { hid: 0, ePlaceId: 0 });
curEquips.push({
seqId: lastEquip.seqId,
hid: lastEquip.hid,
ePlaceId: lastEquip.ePlaceId
});
let {seqId, ePlaceId} = await EquipModel.updateEquipInfobyObjectId(objectId, { hid: 0, ePlaceId: 0 });
curEquips.push({ seqId, hid, ePlaceId });
}
await HeroModel.addEquip(roleId, hid, ePlaceId, equip._id);
curEquips.push({
seqId: eid,
hid: hid,
ePlaceId: ePlaceId
});
await HeroModel.addEquip(roleId, hid, id, equip._id);
curEquips.push({ seqId: eid, hid, ePlaceId:id});
} else if (type == 2) {
if (!equip.hid)
return resResult(STATUS.EQUIP_NOT_EQUIPED);
let index = _.findIndex(hero.ePlace, { id: ePlaceId });
let index = _.findIndex(hero.ePlace, { id });
if (index < 0)
return resResult(STATUS.WRONG_PARMS);
hero.ePlace[index].equip = null;
await HeroModel.updateHeroInfo(roleId, hid, { ePlace: hero.ePlace });
equip = await EquipModel.updateEquipInfo(eid, { hid: 0, ePlaceId: 0 });
curEquips.push({
seqId: equip.seqId,
hid: equip.hid,
ePlaceId: equip.ePlaceId
});
let {seqId, ePlaceId} = await EquipModel.updateEquipInfo(eid, { hid: 0, ePlaceId: 0 });
curEquips.push({ seqId, hid, ePlaceId });
}
return resResult(STATUS.SUCCESS, { curEquips: curEquips });
}
@@ -438,18 +426,29 @@ export class EquipHandler {
let roleId: string = session.get('roleId');
let sid: string = session.get('sid');
let consumes: Array<{ id: number, count: number }> = [];
let goods: Array<{ id: number, count: number }> = [];
let equip = await EquipModel.getEquip(eid);
let { itid } = getGoodById(equip.id);
let {equipJewel} = ITID.get(itid);
let jewelInfo = getGoodById(jewel);
if (jewelInfo.itid != equipJewel)
return resResult(STATUS.EQUIP_NOT_MATCH_JEWEL);
let index = _.findIndex(equip.holes, { id });
if (index > 0)
return resResult(STATUS.EQUIP_HOLE_NOT_FIND);
if (!equip.holes[index].isOpen)
return resResult(STATUS.EQUIP_HOLE_IS_NOT_DUG);
if (!!equip.holes[index].jewel)
goods.push({id: equip.holes[index].jewel, count:1});
consumes.push({ id: jewel, count: 1 });
let result = await handleCost(roleId, sid, consumes);
if (!result)
return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH);
equip.holes[index].jewel = jewel;
await EquipModel.updateEquipInfo(eid, { holes: equip.holes });
let roleName: string = session.get('roleName');
if (goods.length)
await addItems(roleId, roleName, sid, goods);
return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } });
}
@@ -67,14 +67,14 @@ export class HeroHandler {
if(hasHero) return resResult(STATUS.ROLE_HERO_EXISTS);
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
let dicHero = gameData.hero.get(hid);
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
let {pieceId, quality, initialStars: star, pieceCount, jobid: job, name: hName} = dicHero;
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let {pieceId, quality, initialStars: star, pieceCount, jobid: job, name: hName, initialSkin} = dicHero;
// 碎片数量是否足够
let costResult = await handleCost(roleId, sid, [{id: pieceId, count: pieceCount}]);
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
// createHero
let curHero = await HeroModel.createHero({
roleId, serverId, roleName, hid, hName, star, quality, job
roleId, serverId, roleName, hid, hName, star, quality, job, skins:[{id: initialSkin, enable: true}]
});
await calPlayerCeAndSave(sid, roleId, [curHero], HERO_SYSTEM_TYPE.STAR, getAllAttrStage());
return resResult(STATUS.SUCCESS, {curHero});
@@ -110,7 +110,7 @@ export class HeroHandler {
let material = new Array<RewardInter>();
for(let {id, count} of originalConsumes) {
let dicGoods = gameData.goods.get(id);
if(!dicGoods) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if(!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let _count = Math.ceil(needExp/dicGoods.value);
if(_count < count) {
material.push({id, count: _count});
@@ -149,7 +149,7 @@ export class HeroHandler {
let {hid, star, starStage} = msg;
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
let dicHero = gameData.hero.get(hid);
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let {pieceId} = dicHero;
let hero = await HeroModel.findByHidAndRole(hid, roleId);
@@ -164,7 +164,7 @@ export class HeroHandler {
}
// 根据dic_zyz_hero_star 计算需要花的碎片并检查碎片数量
const curDicHeroStar = getHeroStarByQuality(quality, oldStar);
if(!curDicHeroStar) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if(!curDicHeroStar) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let costResult = await handleCost(roleId, sid, [{id: pieceId, count: curDicHeroStar.advanceUpFragmentNum}]);
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
@@ -191,7 +191,7 @@ export class HeroHandler {
let {hid, quality} = msg;
let dicHero = gameData.hero.get(hid);
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
// 根据dic_hero 获得 碎片id
let {pieceId} = dicHero;
@@ -210,7 +210,7 @@ export class HeroHandler {
// 根据dic_zyz_hero_quality_up 获得需要的材料
const curDicHeroQualityUp = gameData.heroQualityUp.get(quality);
if(!curDicHeroQualityUp) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if(!curDicHeroQualityUp) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let {fragmentNum} = curDicHeroQualityUp;
let costResult = await handleCost(roleId, sid, [{id: pieceId, count: fragmentNum}]);
@@ -234,7 +234,7 @@ export class HeroHandler {
let {hid, colorStar, colorStarStage} = msg;
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
let dicHero = gameData.hero.get(hid);
if(!dicHero) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let {pieceId} = dicHero;
let hero = await HeroModel.findByHidAndRole(hid, roleId);
@@ -252,7 +252,7 @@ export class HeroHandler {
}
// 根据dic_zyz_hero_wake 计算需要花的碎片并检查碎片数量
const curDicHeroStar = getHeroWakeByQuality(dicHero.quality, oldColorStar)
if(!curDicHeroStar) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
if(!curDicHeroStar) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let {fragmentNum, consume} = curDicHeroStar;
@@ -39,7 +39,8 @@ export class RoleHandler {
quality: 1,
job: 1,
star: 0,
serverId: 1
serverId: 1,
skins:[{id: 41001, enable: true}]
}
await HeroModel.createHero(heroInfo);
}
+8 -2
View File
@@ -6,7 +6,7 @@ import { pinus } from 'pinus';
import { STATUS } from '../consts/statusCode';
import { resResult } from '../pubUtils/util';
import { calPlayerCeAndSave as pubCalPlayerCeAndSave } from '../pubUtils/playerCe';
import { calPlayerCeAndSave as pubCalPlayerCeAndSave, reCalAllHeroCe } from '../pubUtils/playerCe';
import { HeroType } from '../db/Hero';
const _ = require('underscore');
@@ -14,9 +14,15 @@ const _ = require('underscore');
//修改并下发战力
export async function calPlayerCeAndSave(sid: string, roleId: string, heros: Array<HeroType>, type?: number, args?: Array<number>) {
let {role, pushHeros} = await pubCalPlayerCeAndSave(roleId, heros, type, args);
//下发战力
let uids = [{ uid: roleId, sid }];
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: role.ce, heros: pushHeros, topFiveCe: 0 }), uids);
return heros;
}
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 }];
pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: ce, heros: pushHeros, topFiveCe: 0 }), uids);
return;
}
+6 -2
View File
@@ -4,6 +4,7 @@ import { resResult, parseReward } from '../pubUtils/util';
import { getGoodById } from '../pubUtils/gamedata';
import { RoleModel } from '../db/Role';
import { setAp } from './actionPointService';
import { calAllHeroCe } from './playerCeService';
import { ItemModel } from '../db/Item';
import { STATUS } from '../consts/statusCode';
import { pinus } from 'pinus';
@@ -139,21 +140,24 @@ export async function addItems(roleId: string, roleName: string, sid: string, go
showItems.push({id: item.id, count: item.count});
bagInfos.push(bagInfo);
}
//背包除去装备推送
if (!!bagInfos.length)
pinus.app.get('channelService').pushMessageByUids('onItemUpdate', resResult(STATUS.SUCCESS, {goods: bagInfos}), uids);
let skinInfos = [];
let addSkinIds = [];
for (let skinId of skins) {//皮肤推送
let result = await addSkins(roleId, skinId);
if (!!result) {
showItems.push({id: skinId, count: 1});
skinInfos.push(result);
addSkinIds.push(skinId);
}
}
if (!!skinInfos.length)
if (!!skinInfos.length) {
calAllHeroCe(sid, roleId, 1, addSkinIds)
pinus.app.get('channelService').pushMessageByUids('onHeroSkinChange', resResult(STATUS.SUCCESS, {skinInfos}), uids);
}
return showItems;
}