装备:精炼

This commit is contained in:
luying
2021-07-29 18:50:26 +08:00
parent 365f89acfa
commit 3c4f45bcd0
10 changed files with 71 additions and 79 deletions
@@ -2,7 +2,7 @@ import { Application, BackendSession, HandlerService, } from "pinus";
import { STATUS, EQUIP_STRENGTHEN_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SYSTEM_TYPE, CONSUME_TYPE, HERO_GROW_MAX, MSG_SOURCE, JEWEL_PUSH_LV, TASK_TYPE, HERO_CE_RATIO } from "../../../consts"; import { STATUS, EQUIP_STRENGTHEN_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SYSTEM_TYPE, CONSUME_TYPE, HERO_GROW_MAX, MSG_SOURCE, JEWEL_PUSH_LV, TASK_TYPE, HERO_CE_RATIO } from "../../../consts";
import { ItemInter } from "../../../pubUtils/interface"; import { ItemInter } from "../../../pubUtils/interface";
import { resResult, parseGoodStr, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util"; import { resResult, parseGoodStr } from "../../../pubUtils/util";
import { addItems, handleCost, decreaseItems } from "../../../services/rewardService"; import { addItems, handleCost, decreaseItems } from "../../../services/rewardService";
import { EquipModel, EquipType } from "../../../db/Equip"; import { EquipModel, EquipType } from "../../../db/Equip";
import { HeroModel, EPlace } from "../../../db/Hero"; import { HeroModel, EPlace } from "../../../db/Hero";
@@ -10,8 +10,8 @@ import Role from "../../../db/Role";
import { calPlayerCeAndSave } from "../../../services/playerCeService"; import { calPlayerCeAndSave } from "../../../services/playerCeService";
import { getGoodById, gameData } from "../../../pubUtils/data"; import { getGoodById, gameData } from "../../../pubUtils/data";
import { EQUIP } from "../../../pubUtils/dicParam"; import { EQUIP } from "../../../pubUtils/dicParam";
import { ITID, SPEICAL_ITEM, QUALITY_TYPE, equipTypeToSortAttr, IT_TYPE, QUENCH_TYPE } from "../../../consts"; import { ITID, QUALITY_TYPE, equipTypeToSortAttr, IT_TYPE, QUENCH_TYPE, REFINE_TYPE } from "../../../consts";
import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerCe, checkEquipCanPut, quenchOnce, checkQuenchMaxByQualityAndGrade, getRandSeResult } from "../../../services/equipService"; import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerCe, checkEquipCanPut, quenchOnce, checkQuenchMaxByQualityAndGrade, getRandSeResult, refineOnce, checkRefineReachNextLv } from "../../../services/equipService";
import { findIndex } from 'underscore'; import { findIndex } from 'underscore';
import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService"; import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService";
@@ -268,14 +268,14 @@ export class EquipHandler {
} }
// 装备栏精炼 // 装备栏精炼
public async refine(msg: { hid: number, ePlaceId: number, material: { id: number, count: number }[] }, session: BackendSession) { public async refine(msg: { hid: number, ePlaceId: number, type: REFINE_TYPE }, 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');
let serverId = session.get('serverId'); let serverId = session.get('serverId');
let sid: string = session.get('sid'); let sid: string = session.get('sid');
let funcs: number[] = session.get('funcs'); let funcs: number[] = session.get('funcs');
let { hid, ePlaceId, material } = msg; let { hid, ePlaceId, type } = msg;
let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId); let hero = await HeroModel.findByHidAndRoleWithEquip(hid, roleId);
if (!hero) return resResult(STATUS.HERO_NOT_FIND); if (!hero) return resResult(STATUS.HERO_NOT_FIND);
@@ -285,45 +285,25 @@ export class EquipHandler {
if (!curEplace) { if (!curEplace) {
return resResult(STATUS.ROLE_EQUIP_PLACE_NOT_ENOUGH); return resResult(STATUS.ROLE_EQUIP_PLACE_NOT_ENOUGH);
} }
let { lv, refineLv, equip } = curEplace; // 强化等级,精炼等级,精炼次数 let { lv, refineLv: oldRefineLv, equip } = curEplace; // 强化等级,精炼等级,精炼次数
if (lv < HERO_GROW_MAX.EQUIP_STRENGTHEN) { let refineLv = oldRefineLv, times = 0;
return resResult(STATUS.ROLE_EQUIP_NOT_REACH_MAX); while(
(type == REFINE_TYPE.ONCE && times == 0) ||
(type == REFINE_TYPE.ONE_LEVEL && !checkRefineReachNextLv(oldRefineLv, refineLv) )
) {
let result = await refineOnce(roleId, sid, lv, refineLv);
console.log('*******', result);
if(!result) break;
refineLv = result;
times ++;
} }
if (refineLv >= HERO_GROW_MAX.EQUIP_REFINE) { if(times == 0) {
return resResult(STATUS.ROLE_EQUIP_REACH_MAX); return resResult(STATUS.EQUIP_REFINE_ERR);
} }
curEplace.refineLv = refineLv;
// 是否成功精炼
let dicRefine = gameData.refine.get(refineLv + 1);
if (!dicRefine) {
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.DIC_DATA_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;
// 消耗道具提升成功率 每个道具提升10%成功率
// 精炼
if (isSuccess) {
curEplace.refineLv++;
}
// 消耗
let cost = dicRefine.material.concat(material);
let result = await handleCost(roleId, sid, cost);
if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_BASE, sid, roleId, hero, { ePlace }); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_BASE, sid, roleId, hero, { ePlace });
@@ -332,13 +312,11 @@ export class EquipHandler {
ePlace: [curEplace] ePlace: [curEplace]
} }
if (isSuccess) { let curEquip = <EquipType>equip;
let curEquip = <EquipType>equip; pushEquipRefineSucMsg(roleId, roleName, serverId, curEplace, curEquip ? curEquip.quality : 0);
pushEquipRefineSucMsg(roleId, roleName, serverId, curEplace, curEquip ? curEquip.quality : 0); await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_REFINE, times, true, {});
await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_REFINE, 1, true, {}); await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_REFINE_LV, times, { lv: curEplace.refineLv });
await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_REFINE_LV, 1, { lv: curEplace.refineLv }); return resResult(STATUS.SUCCESS, { curHero });
}
return resResult(STATUS.SUCCESS, { isSuccess, curHero });
} }
// 装备洗炼锁定 // 装备洗炼锁定
@@ -431,7 +409,6 @@ export class EquipHandler {
let { lockNum, removeSeidList } = randSe.reduce((pre, cur) => { let { lockNum, removeSeidList } = randSe.reduce((pre, cur) => {
return { lockNum: cur.locked?pre.lockNum+1: pre.lockNum, removeSeidList: [...pre.removeSeidList, cur.seid] } return { lockNum: cur.locked?pre.lockNum+1: pre.lockNum, removeSeidList: [...pre.removeSeidList, cur.seid] }
}, { lockNum: 0, removeSeidList: new Array<number>() }); }, { lockNum: 0, removeSeidList: new Array<number>() });
console.log('##########', lockNum, removeSeidList);
if (lockNum >= randSe.length) { if (lockNum >= randSe.length) {
return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN); return resResult(STATUS.ROLE_EQUIP_CANNOT_RESTRENGTHEN);
@@ -1,21 +1,12 @@
import { Application, BackendSession, HandlerService, } from "pinus"; import { Application, BackendSession, HandlerService, } from "pinus";
import { STATUS, EQUIP_STRENGTHEN_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, HERO_SYSTEM_TYPE, CONSUME_TYPE, HERO_GROW_MAX, MSG_SOURCE, JEWEL_PUSH_LV, TASK_TYPE, DEBUG_MAGIC_WORD } from "../../../consts"; import { STATUS, CONSUME_TYPE, DEBUG_MAGIC_WORD } from "../../../consts";
import { ItemInter, RewardInter } from "../../../pubUtils/interface"; import { RewardInter } from "../../../pubUtils/interface";
import { resResult, parseGoodStr, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util"; import { resResult } from "../../../pubUtils/util";
import { addItems, handleCost, decreaseItems } from "../../../services/rewardService"; import { addItems, handleCost } from "../../../services/rewardService";
import Equip, { EquipModel, EquipType } from "../../../db/Equip"; import { RoleModel } from "../../../db/Role";
import { HeroModel, EPlace } from "../../../db/Hero";
import Role, { RoleModel } from "../../../db/Role";
import { calPlayerCeAndSave } from "../../../services/playerCeService";
import { gameData } from "../../../pubUtils/data"; import { gameData } from "../../../pubUtils/data";
import { EQUIP } from "../../../pubUtils/dicParam"; import { ITID } from "../../../consts/constModules/itemConst";
import { ITID, SPEICAL_ITEM, QUALITY_TYPE } from "../../../consts/constModules/itemConst";
import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerCe } from "../../../services/equipService";
import { indexOf, findIndex } from 'underscore';
import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService";
import { checkTaskWithHero, checkTaskWithEquip, checkTask, checkTaskWithArgs, checkTaskConditionEquipSuitJewelStage, checkActivityTask } from "../../../services/taskService";
import { useGiftPackage } from "../../../services/activity/giftPackageService"; import { useGiftPackage } from "../../../services/activity/giftPackageService";
import { getAp, setAp, setApBuyTimes } from "../../../services/actionPointService"; import { getAp, setAp, setApBuyTimes } from "../../../services/actionPointService";
import { ActionPointModel } from "../../../db/ActionPoint"; import { ActionPointModel } from "../../../db/ActionPoint";
+23
View File
@@ -240,4 +240,27 @@ export function getRandSeResult(id: number, randSe: RandSe[]) {
} }
} }
return randSe return randSe
}
export async function refineOnce(roleId: string, sid: string, lv: number, refineLv: number) {
let dicRefine = gameData.refine.get(refineLv + 1);
if (!dicRefine) return false;
if(lv < dicRefine.levelLimited) return false;
// 消耗
let result = await handleCost(roleId, sid, dicRefine.consume);
if (!result) return false;
return refineLv + 1;
}
export function checkRefineReachNextLv(oldRefineLv: number, refineLv: number) {
let oldDic = gameData.refine.get(oldRefineLv);
let dic = gameData.refine.get(refineLv);
if(!oldDic || !dic) return true;
console.log('*******', dic.level, oldDic.level)
return dic.level > oldDic.level;
} }
+1 -3
View File
@@ -27,9 +27,7 @@ export enum HERO_SYSTEM_TYPE {
export const HERO_GROW_MAX = { export const HERO_GROW_MAX = {
STAR: 6, STAR: 6,
COLORSTAR: 6, COLORSTAR: 6,
QUALITY: 3, QUALITY: 3
EQUIP_STRENGTHEN: 100,
EQUIP_REFINE: 15
} }
export const JOB_TYPE = { export const JOB_TYPE = {
+6 -5
View File
@@ -164,11 +164,6 @@ export const CURRENCY_TYPE = {
KING_EXP: 'kingExp' KING_EXP: 'kingExp'
} }
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 },
@@ -279,4 +274,10 @@ export const SPECIAL_ATTR = {
export enum QUENCH_TYPE { export enum QUENCH_TYPE {
ONCE = 1, // 升一级 ONCE = 1, // 升一级
ONE_GRADE = 2, // 升一品 ONE_GRADE = 2, // 升一品
}
// 精炼类型
export enum REFINE_TYPE {
ONCE = 1, // 精炼一次
ONE_LEVEL = 2, // 精炼一级
} }
+1
View File
@@ -278,6 +278,7 @@ export const STATUS = {
EQUIP_LEVEL_LIMIT: { code: 30510, simStr: '装备穿戴等级限制' }, EQUIP_LEVEL_LIMIT: { code: 30510, simStr: '装备穿戴等级限制' },
EQUIP_NOT_MATCH_JEWEL: { code: 30511, simStr: '装备不能镶嵌该宝石' }, EQUIP_NOT_MATCH_JEWEL: { code: 30511, simStr: '装备不能镶嵌该宝石' },
EQUIP_QUENCH_ERR: { code: 30512, simStr: '该装备不能再淬火或材料不足' }, EQUIP_QUENCH_ERR: { code: 30512, simStr: '该装备不能再淬火或材料不足' },
EQUIP_REFINE_ERR: { code: 30512, simStr: '该装备等级不足或材料不足' },
//全局养成30600-30699 //全局养成30600-30699
ROLE_REACH_MAX_TITLE_LEVEL: { code: 30600, simStr: '玩家已达到最高的爵位' }, ROLE_REACH_MAX_TITLE_LEVEL: { code: 30600, simStr: '玩家已达到最高的爵位' },
ROLE_TERAPH_NOT_STRENGTHEN: { code: 30601, simStr: '玩家神像不能强化' }, ROLE_TERAPH_NOT_STRENGTHEN: { code: 30601, simStr: '玩家神像不能强化' },
+1 -1
View File
@@ -62,7 +62,7 @@ function getInitialEplace() {
p.id = i; p.id = i;
p.equip = null; p.equip = null;
p.lv = 0; p.lv = 0;
p.refineLv = 0; p.refineLv = 1;
ePlace.push(p); ePlace.push(p);
} }
@@ -1,4 +1,4 @@
import { readFileAndParse, parseGoodStr } from '../util' import { readFileAndParse } from '../util'
import { FILENAME } from '../../consts' import { FILENAME } from '../../consts'
export interface DicQuenchQuality { export interface DicQuenchQuality {
+7 -6
View File
@@ -9,13 +9,14 @@ export interface DicRefine {
readonly id: number; readonly id: number;
// 精炼等级 // 精炼等级
readonly level: number; readonly level: number;
// 精炼次数
readonly count: number;
// 等级限制
readonly levelLimited: number;
// 提高属性百分比 // 提高属性百分比
readonly upPercent: number; readonly upPercent: number;
// 材料 // 材料
readonly material: Array<RewardInter>; readonly consume: Array<RewardInter>;
// 成功率
readonly successRate: number;
} }
export const dicRefine = new Map<number, DicRefine>(); export const dicRefine = new Map<number, DicRefine>();
@@ -24,8 +25,8 @@ export function loadRefine() {
let arr = readFileAndParse(FILENAME.DIC_REFINE); let arr = readFileAndParse(FILENAME.DIC_REFINE);
arr.forEach(o => { arr.forEach(o => {
o.material = parseGoodStr(o.material) o.consume = parseGoodStr(o.consume)
dicRefine.set(o.level, o); dicRefine.set(o.id, o);
}); });
arr = undefined; arr = undefined;
+1 -1
View File
@@ -5,7 +5,7 @@ import { ItemModel } from '../db/Item';
import { EquipModel, RandSe, Holes, RandMain } from './../db/Equip'; import { EquipModel, RandSe, Holes, RandMain } from './../db/Equip';
import { BagInter, EquipInter } from './interface'; import { BagInter, EquipInter } from './interface';
import { gameData, getQuenchByQualityAndGrade, getQuenchGradeByValue } from './data'; import { gameData, getQuenchByQualityAndGrade, getQuenchGradeByValue } from './data';
import { RANDOM_SE_COUNT, FIX_ATTRIBUTES_RAN, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE, HERO_SYSTEM_TYPE, TASK_TYPE } from '../consts'; import { RANDOM_SE_COUNT, ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE, HERO_SYSTEM_TYPE, TASK_TYPE } from '../consts';
import { getRandValueByMinMax, getRandEelm } from './util'; import { getRandValueByMinMax, getRandEelm } from './util';
import { findWhere } from 'underscore'; import { findWhere } from 'underscore';