Merge branch 'master' of gitlab.trgame.cn:zyztech/zyz_server
This commit is contained in:
@@ -9,7 +9,7 @@ import Role from "../../../db/Role";
|
|||||||
import { calPlayerCeAndSave } from "../../../services/playerCeService";
|
import { calPlayerCeAndSave } from "../../../services/playerCeService";
|
||||||
import { getGoodById, gameData, getJewelById } from "../../../pubUtils/data";
|
import { getGoodById, gameData, getJewelById } from "../../../pubUtils/data";
|
||||||
import { EQUIP } from "../../../pubUtils/dicParam";
|
import { EQUIP } from "../../../pubUtils/dicParam";
|
||||||
import { ITID } from "../../../consts/constModules/itemConst";
|
import { ITID, SPEICAL_ITEM } from "../../../consts/constModules/itemConst";
|
||||||
|
|
||||||
const _ = require('underscore');
|
const _ = require('underscore');
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ export class EquipHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 合成装备
|
// test接口添加任意道具
|
||||||
public async addItem(msg: { id: number, count: number}, session: BackendSession) {
|
public async addItem(msg: { id: number, count: number}, session: BackendSession) {
|
||||||
let roleId: string = session.get('roleId');
|
let roleId: string = session.get('roleId');
|
||||||
let roleName: string = session.get('roleName');
|
let roleName: string = session.get('roleName');
|
||||||
@@ -53,7 +53,7 @@ export class EquipHandler {
|
|||||||
for(let {id, seqId} of equips) {
|
for(let {id, seqId} of equips) {
|
||||||
if(specialMaterial.ids.includes(id)) {
|
if(specialMaterial.ids.includes(id)) {
|
||||||
costCount++;
|
costCount++;
|
||||||
cost.push({id, seqId, count: 1, type: GOOD_TYPE.EQUIP });
|
cost.push({id, seqId, count: 1 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(specialMaterial.count > costCount) {
|
if(specialMaterial.count > costCount) {
|
||||||
@@ -69,7 +69,7 @@ export class EquipHandler {
|
|||||||
let result = await handleCost(roleId, sid, cost);
|
let result = await handleCost(roleId, sid, cost);
|
||||||
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
let items = [{type: GOOD_TYPE.EQUIP, id: gid, count: 1}];
|
let items = [{ id: gid, count: 1}];
|
||||||
let goods = await addItems(roleId, roleName, sid, items);
|
let goods = await addItems(roleId, roleName, sid, items);
|
||||||
return resResult(STATUS.SUCCESS, { goods });
|
return resResult(STATUS.SUCCESS, { goods });
|
||||||
}
|
}
|
||||||
@@ -101,6 +101,7 @@ export class EquipHandler {
|
|||||||
|
|
||||||
let {coin} = await Role.findByRoleId(roleId);
|
let {coin} = await Role.findByRoleId(roleId);
|
||||||
let maxLv = type == EQUIP_STRENGTHEN_TYPE.SINGLE?minLv + 1:playerLv;
|
let maxLv = type == EQUIP_STRENGTHEN_TYPE.SINGLE?minLv + 1:playerLv;
|
||||||
|
if(maxLv > playerLv) maxLv = playerLv;
|
||||||
if(minLv >= maxLv) {
|
if(minLv >= maxLv) {
|
||||||
return resResult(STATUS.ROLE_EQUIP_REACH_MAX);
|
return resResult(STATUS.ROLE_EQUIP_REACH_MAX);
|
||||||
}
|
}
|
||||||
@@ -172,25 +173,29 @@ export class EquipHandler {
|
|||||||
return resResult(STATUS.ROLE_INFO_NOT_FOUND)
|
return resResult(STATUS.ROLE_INFO_NOT_FOUND)
|
||||||
}
|
}
|
||||||
|
|
||||||
// let {successRate} = dicRefine;
|
let {successRate} = dicRefine;
|
||||||
// for(let {id, count} of material) {
|
for(let {id, count} of material) {
|
||||||
|
let dicGoods = gameData.goods.get(id);
|
||||||
|
if(!dicGoods) return resResult(STATUS.ROLE_INFO_NOT_FOUND);
|
||||||
|
if(!SPEICAL_ITEM.REFINE_ADD_RATE.includes(id)) {
|
||||||
|
return resResult(STATUS.ROLE_WRONG_ITEM)
|
||||||
|
}
|
||||||
|
successRate += count * dicGoods.value;
|
||||||
|
if(isNaN(successRate)) console.error(id, count, dicGoods.value);
|
||||||
|
}
|
||||||
|
|
||||||
// }
|
let ran = Math.floor(Math.random() * 100);
|
||||||
|
let isSuccess = ran <= successRate;
|
||||||
let ran = Math.floor(Math.random() * 100)
|
console.log(successRate, ran, isSuccess)
|
||||||
let isSuccess = ran <= dicRefine.successRate;
|
|
||||||
// 消耗道具提升成功率 每个道具提升10%成功率
|
// 消耗道具提升成功率 每个道具提升10%成功率
|
||||||
|
|
||||||
|
|
||||||
// 精炼
|
// 精炼
|
||||||
if(isSuccess) {
|
if(isSuccess) {
|
||||||
curEplace.refineLv++;
|
curEplace.refineLv++;
|
||||||
} else {
|
|
||||||
curEplace.refineCount++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 消耗
|
// 消耗
|
||||||
let cost = dicRefine.material;
|
let cost = dicRefine.material.concat(material);
|
||||||
let result = await handleCost(roleId, sid, cost);
|
let result = await handleCost(roleId, sid, cost);
|
||||||
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
@@ -218,8 +223,19 @@ export class EquipHandler {
|
|||||||
return resResult(STATUS.EQUIP_HAVE_NO_RANDSE);
|
return resResult(STATUS.EQUIP_HAVE_NO_RANDSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lock) { // 仅在上锁时消耗
|
if(lock) { // 仅在上锁时消耗,根据已有的锁的数量判断消耗
|
||||||
let result = await handleCost(roleId, sid, []);
|
let lockNum = randSe.filter(cur => cur.locked).length;
|
||||||
|
let consumes:Array<{id: number, count: number}> = [];
|
||||||
|
if (lockNum == 0) {
|
||||||
|
consumes = parseReward(EQUIP.EQUIP_ONE_LOCKED);
|
||||||
|
} else if (lockNum == 1) {
|
||||||
|
consumes = parseReward(EQUIP.EQUIP_TWO_LOCKED);
|
||||||
|
} else if (lockNum == 2) {
|
||||||
|
consumes = parseReward(EQUIP.EQUIP_THREE_LOCKED);
|
||||||
|
} else {
|
||||||
|
consumes = parseReward(EQUIP.EQUIP_FOUR_LOCKED);
|
||||||
|
}
|
||||||
|
let result = await handleCost(roleId, sid, consumes);
|
||||||
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,7 +247,7 @@ export class EquipHandler {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 装备洗炼,消耗TODO
|
// 装备洗炼
|
||||||
public async reStrengthen(msg: { eid: number }, session: BackendSession) {
|
public async reStrengthen(msg: { eid: number }, session: BackendSession) {
|
||||||
let roleId: string = session.get('roleId');
|
let roleId: string = session.get('roleId');
|
||||||
// let roleName: string = session.get('roleName');
|
// let roleName: string = session.get('roleName');
|
||||||
@@ -241,7 +257,7 @@ export class EquipHandler {
|
|||||||
let equip = await EquipModel.findbySeqId(eid);
|
let equip = await EquipModel.findbySeqId(eid);
|
||||||
if(!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
if(!equip) return resResult(STATUS.EQUIP_NOT_FIND);
|
||||||
|
|
||||||
let {id, randSe} = equip;
|
let {id, randSe, reStrengthenNum = 0} = equip;
|
||||||
if(!randSe || randSe.length <=0 ) {
|
if(!randSe || randSe.length <=0 ) {
|
||||||
return resResult(STATUS.EQUIP_HAVE_NO_RANDSE);
|
return resResult(STATUS.EQUIP_HAVE_NO_RANDSE);
|
||||||
}
|
}
|
||||||
@@ -271,16 +287,22 @@ export class EquipHandler {
|
|||||||
return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN);
|
return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 消耗
|
// 消耗
|
||||||
let cost = new Array<ItemInter>();
|
let consumes:Array<{id: number, count: number}> = [];
|
||||||
if(lockNum == 0) {
|
if (reStrengthenNum == 0) {
|
||||||
|
consumes = parseReward(EQUIP.EQUIP_ONE_REFORGED);
|
||||||
|
} else if (reStrengthenNum == 1) {
|
||||||
|
consumes = parseReward(EQUIP.EQUIP_TWO_REFORGED);
|
||||||
|
} else if (reStrengthenNum == 2) {
|
||||||
|
consumes = parseReward(EQUIP.EQUIP_THREE_REFORGED);
|
||||||
|
} else {
|
||||||
|
consumes = parseReward(EQUIP.EQUIP_FOUR_REFORGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = await handleCost(roleId, sid, cost);
|
let result = await handleCost(roleId, sid, consumes);
|
||||||
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
if(!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
||||||
|
|
||||||
let equipResult = await EquipModel.updateEquipInfo(eid, { randSe })
|
let equipResult = await EquipModel.updateEquipInfo(eid, { randSe, reStrengthenNum: reStrengthenNum + 1 })
|
||||||
let curEquip = {
|
let curEquip = {
|
||||||
seqId: equipResult.seqId,
|
seqId: equipResult.seqId,
|
||||||
id: equipResult.id,
|
id: equipResult.id,
|
||||||
|
|||||||
@@ -109,6 +109,11 @@ export const CURRENCY_TYPE = {
|
|||||||
FRIEND_POINT: "friendPoint"
|
FRIEND_POINT: "friendPoint"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export const SPEICAL_ITEM = {
|
||||||
|
REFINE_ADD_RATE: [17039]
|
||||||
|
};
|
||||||
|
|
||||||
const currencyArr = [
|
const currencyArr = [
|
||||||
{ "gid": 31001, "name": "铜钱", "type": CURRENCY_TYPE.COIN },
|
{ "gid": 31001, "name": "铜钱", "type": CURRENCY_TYPE.COIN },
|
||||||
{ "gid": 31002, "name": "元宝", "type": CURRENCY_TYPE.GOLD },
|
{ "gid": 31002, "name": "元宝", "type": CURRENCY_TYPE.GOLD },
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ export const STATUS = {
|
|||||||
ROLE_EQUIP_REACH_MAX: { code: 30404, simStr: '强化已达上限' },
|
ROLE_EQUIP_REACH_MAX: { code: 30404, simStr: '强化已达上限' },
|
||||||
ROLE_EQUIP_NOT_REACH_MAX: { code: 30405, simStr: '强化未达到上限' },
|
ROLE_EQUIP_NOT_REACH_MAX: { code: 30405, simStr: '强化未达到上限' },
|
||||||
ROLE_EQUIP_CANNOT_RESTRENGTHEN: { code: 30406, simStr: '无属性可以洗炼' },
|
ROLE_EQUIP_CANNOT_RESTRENGTHEN: { code: 30406, simStr: '无属性可以洗炼' },
|
||||||
|
ROLE_WRONG_ITEM: { code: 30407, simStr: '该道具不可用于该功能' },
|
||||||
|
|
||||||
EQUIP_NOT_FIND: {code: 30500, simStr: '装备不存在'},
|
EQUIP_NOT_FIND: {code: 30500, simStr: '装备不存在'},
|
||||||
EQUIP_IS_EQUIPED: {code: 30501, simStr: '装备已经穿戴'},
|
EQUIP_IS_EQUIPED: {code: 30501, simStr: '装备已经穿戴'},
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ interface equipUpdate {
|
|||||||
holes?:Array<Holes>;
|
holes?:Array<Holes>;
|
||||||
randSe?: Array<RandSe>;
|
randSe?: Array<RandSe>;
|
||||||
ePlaceId?:number;
|
ePlaceId?:number;
|
||||||
|
reStrengthenNum?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
@index({ roleId: 1, hid: 1, id: 1 })
|
@index({ roleId: 1, hid: 1, id: 1 })
|
||||||
@@ -68,6 +69,8 @@ export default class Equip extends BaseModel {
|
|||||||
randSe: RandSe[]; // 强化随机属性
|
randSe: RandSe[]; // 强化随机属性
|
||||||
@prop({ required: true, type: Holes, default: [] })
|
@prop({ required: true, type: Holes, default: [] })
|
||||||
holes: Holes[];
|
holes: Holes[];
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
reStrengthenNum: number; // 洗炼次数
|
||||||
|
|
||||||
public static async findbyRole(roleId: string, lean = true) {
|
public static async findbyRole(roleId: string, lean = true) {
|
||||||
const equips: EquipType[] = await EquipModel.find({ roleId }).lean(lean);
|
const equips: EquipType[] = await EquipModel.find({ roleId }).lean(lean);
|
||||||
|
|||||||
@@ -32,8 +32,6 @@ export class EPlace {
|
|||||||
lv: number;
|
lv: number;
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
refineLv: number;
|
refineLv: number;
|
||||||
@prop({ required: true })
|
|
||||||
refineCount: number;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化
|
// 初始化
|
||||||
@@ -45,7 +43,6 @@ function getInitialEplace() {
|
|||||||
p.equip = null;
|
p.equip = null;
|
||||||
p.lv = 0;
|
p.lv = 0;
|
||||||
p.refineLv = 0;
|
p.refineLv = 0;
|
||||||
p.refineCount = 0;
|
|
||||||
|
|
||||||
ePlace.push(p);
|
ePlace.push(p);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ let arr = JSON.parse(str);
|
|||||||
export const dicRefine = new Map<number, DicRefine>();
|
export const dicRefine = new Map<number, DicRefine>();
|
||||||
|
|
||||||
arr.forEach(o => {
|
arr.forEach(o => {
|
||||||
o.material = parseReward(o.gainvalue)
|
o.material = parseReward(o.material)
|
||||||
dicRefine.set(o.id, o);
|
dicRefine.set(o.id, o);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
arr = undefined;
|
||||||
Reference in New Issue
Block a user