diff --git a/game-server/app/servers/activity/handler/firstGiftHandler.ts b/game-server/app/servers/activity/handler/firstGiftHandler.ts index f2eb11595..7d1072e20 100644 --- a/game-server/app/servers/activity/handler/firstGiftHandler.ts +++ b/game-server/app/servers/activity/handler/firstGiftHandler.ts @@ -3,7 +3,7 @@ import { resResult } from '../../../pubUtils/util'; import { FIRST_GIFT_STATE, STATUS } from '../../../consts'; import { getPlayerFirstGiftData } from '../../../services/firstGiftService'; import { RoleModel } from '../../../db/Role'; -import { addReward, stringToRewardParam, useGiftPackage } from '../../../services/giftPackageService'; +import { addReward, stringToRewardParam } from '../../../services/giftPackageService'; import { ActivityFirstGiftModel } from '../../../db/ActivityFirstGift'; export default function (app: Application) { diff --git a/game-server/app/servers/activity/handler/limitPackageHandler.ts b/game-server/app/servers/activity/handler/limitPackageHandler.ts index 79a6571b6..c3077570a 100644 --- a/game-server/app/servers/activity/handler/limitPackageHandler.ts +++ b/game-server/app/servers/activity/handler/limitPackageHandler.ts @@ -1,8 +1,8 @@ import { Application, BackendSession } from 'pinus'; -import { deltaDays, resResult } from '../../../pubUtils/util'; -import { ACTIVITY_TYPE, FIRST_GIFT_STATE, SERVER_OPEN_TIME, STATUS } from '../../../consts'; -import { newPlayerLimitPackageActivity, getPlayerLimitPackageData, limitPackageActivity } from '../../../services/limitPackageService'; -import { addReward, stringToConsumeParam, stringToRewardParam, useGiftPackage } from '../../../services/giftPackageService'; +import { resResult } from '../../../pubUtils/util'; +import { ACTIVITY_TYPE, STATUS } from '../../../consts'; +import { newPlayerLimitPackageActivity, getPlayerLimitPackageData } from '../../../services/limitPackageService'; +import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/giftPackageService'; import { ActivityShopModel } from '../../../db/ActivityShop'; import moment = require('moment'); import { RoleModel } from '../../../db/Role'; diff --git a/game-server/app/servers/role/handler/itemHandler.ts b/game-server/app/servers/role/handler/itemHandler.ts new file mode 100644 index 000000000..8a4df660b --- /dev/null +++ b/game-server/app/servers/role/handler/itemHandler.ts @@ -0,0 +1,50 @@ +import { Application, BackendSession } 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 } from "../../../consts"; +import { ItemInter } from "../../../pubUtils/interface"; + +import { resResult, parseGoodStr, getRandValueByMinMax, getRandEelm } from "../../../pubUtils/util"; +import { addItems, handleCost, decreaseItems } from "../../../services/rewardService"; +import Equip, { EquipModel, EquipType } from "../../../db/Equip"; +import { HeroModel, EPlace } from "../../../db/Hero"; +import Role from "../../../db/Role"; +import { calPlayerCeAndSave } from "../../../services/playerCeService"; +import { getHeroJob, getGoodById, gameData, getHeroEquipByClassId } from "../../../pubUtils/data"; +import { EQUIP } from "../../../pubUtils/dicParam"; +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/giftPackageService"; + +export default function (app: Application) { + return new ItemHandler(app); +} + +export class ItemHandler { + + constructor(private app: Application) { + } + + + // 道具的使用 + public async useItem(msg: { id: number, selected: Array }, session: BackendSession) { + let { id, selected } = msg; + const roleId = session.get('roleId'); + const serverId = session.get('serverId'); + const sid = session.get('sid'); + const roleName = session.get('roleName'); + const funcs = session.get('funcs'); + + let consumeResult = await handleCost(roleId, sid, [{ id: id, count: 1 }]); + if (!consumeResult) return resResult(STATUS.ACTIVITY_RES_NOT_ENOUGH); + + let dicGoods = gameData.goods.get(id); + let giftID = dicGoods.gift; + let result = await useGiftPackage(roleId, roleName, sid, serverId, funcs, giftID, selected) + + return resResult(STATUS.SUCCESS, result); + } + +} \ No newline at end of file diff --git a/game-server/app/services/giftPackageService.ts b/game-server/app/services/giftPackageService.ts index 27e5e2038..0c2db1b0e 100644 --- a/game-server/app/services/giftPackageService.ts +++ b/game-server/app/services/giftPackageService.ts @@ -17,6 +17,7 @@ import { decodeArrayListStr } from '../pubUtils/util'; * @param sid */ export async function useGiftPackage(roleId: string, roleName: string, sid: string, serverId: number, funcs: number[], giftID: number, selected: Array = []) { + console.log("bbbbbbbb", giftID, selected) let result = { goods: [], addHeros: [] } let giftPackageData = gameData.giftPackage.get(giftID); if (!giftPackageData) { diff --git a/shared/pubUtils/dictionary/DicGoods.ts b/shared/pubUtils/dictionary/DicGoods.ts index ee289a71f..050eb6884 100644 --- a/shared/pubUtils/dictionary/DicGoods.ts +++ b/shared/pubUtils/dictionary/DicGoods.ts @@ -1,12 +1,12 @@ // 物品表 -import {decodeArrayListStr, readFileAndParse, parseGoodStr, parseNumberList, decodeArrayStr} from '../util' -import { FILENAME, IT_TYPE, ABI_TYPE , GOOD_TYPE} from '../../consts' +import { decodeArrayListStr, readFileAndParse, parseGoodStr, parseNumberList, decodeArrayStr } from '../util' +import { FILENAME, IT_TYPE, ABI_TYPE, GOOD_TYPE } from '../../consts' import { RewardInter } from '../interface'; const _ = require('lodash'); import { findWhere } from 'underscore'; export interface SpecialMaterial { - readonly ids: number[]; + readonly ids: number[]; readonly count: number; } @@ -41,9 +41,9 @@ export interface DicGoods { // 将魂对应武将id readonly hid: number; // 属性 - readonly goodsAbility:Map; + readonly goodsAbility: Map; // 强化属性 - readonly goodsAbilityUp:Map; + readonly goodsAbilityUp: Map; // 套装id readonly suitId: number; // 特殊属性 @@ -52,39 +52,41 @@ export interface DicGoods { readonly value: number; readonly count?: number; - + readonly nextJewelId?: number; readonly specialCount?: number; readonly nextSpecialId?: number; // 对应的装备id readonly equipId?: number; // 解锁条件 - readonly condition: {id: number, type: number, params: number[]}[]; + readonly condition: { id: number, type: number, params: number[] }[]; // 时间限制 readonly timeLimit: number; // 图片 readonly image_id: number; + // 礼包id + readonly gift: number; } type KeysEnum = { [P in keyof Required]: true }; const DicGoodsKeys: KeysEnum = { - good_id: true, - name: true, - lvLimited: true, - pieces: true, + good_id: true, + name: true, + lvLimited: true, + pieces: true, composeMaterial: true, - specialMaterial: true, - decomposeItem: true, - quality: true, - hole: true, + specialMaterial: true, + decomposeItem: true, + quality: true, + hole: true, randomEffect: true, - itid: true, + itid: true, goodType: true, - hid: true, - goodsAbility: true, - goodsAbilityUp: true, - suitId: true, - specialAttr: true, + hid: true, + goodsAbility: true, + goodsAbilityUp: true, + suitId: true, + specialAttr: true, value: true, pieceId: true, count: true, @@ -94,16 +96,17 @@ const DicGoodsKeys: KeysEnum = { equipId: true, condition: true, timeLimit: true, - image_id: true + image_id: true, + gift: true } export const dicJewel = new Map(); export const dicGoods = new Map(); export const blueprt = new Map>(); -export const figureCondition = new Map(); // type => {params, id, gid} +export const figureCondition = new Map(); // type => {params, id, gid} export function loadGoods() { let arr = readFileAndParse(FILENAME.DIC_GOODS); - + arr.forEach(o => { o.goodsAbility = parseAbility(o); o.goodsAbilityUp = parseAbilityUp(o); @@ -119,22 +122,22 @@ export function loadGoods() { o.equipId = good.good_id; } let condition = parseConditionStr(o.condition); - for(let {id, type, params} of condition) { - let mapArr = figureCondition.get(type)||new Array<{params: number[], id: number, gid: number}>(); - mapArr.push({ params, id: id, gid: o.good_id}); + for (let { id, type, params } of condition) { + let mapArr = figureCondition.get(type) || new Array<{ params: number[], id: number, gid: number }>(); + mapArr.push({ params, id: id, gid: o.good_id }); figureCondition.set(type, mapArr); } o.condition = condition; dicGoods.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys))); - + if (o.itid == IT_TYPE.BLUEPRT) { - let arr = blueprt.get(o.quality)||new Array(); + let arr = blueprt.get(o.quality) || new Array(); arr.push(o.good_id); blueprt.set(o.quality, arr); } else if (o.goodType == GOOD_TYPE.JEWEL) { let material = o.composeMaterial[0]; if (!!material && !!material.id) { - let lastJewel = findWhere(arr,{good_id:material.id}); + let lastJewel = findWhere(arr, { good_id: material.id }); if (!!lastJewel) { lastJewel.count = material.count; lastJewel.nextJewelId = o.good_id; @@ -149,56 +152,56 @@ export function loadGoods() { } } }); - + arr = undefined; } function parseSpecialAttr(str: string) { let specialAttr = new Map(); - if(str) { + if (str) { let decodeArr = decodeArrayListStr(str); - for(let [type, count] of decodeArr) { - if(isNaN(parseInt(type)) || isNaN(parseInt(count))) { + for (let [type, count] of decodeArr) { + if (isNaN(parseInt(type)) || isNaN(parseInt(count))) { throw new Error('data table format wrong'); } - + specialAttr.set(parseInt(type), parseInt(count)); - } + } } return specialAttr; } function parseAbility(json) { let map = new Map(); - map.set(ABI_TYPE.ABI_HP, json.hp||0); - map.set(ABI_TYPE.ABI_ATK, json.atk||0); - map.set(ABI_TYPE.ABI_DEF, json.def||0); - map.set(ABI_TYPE.ABI_MDEF, json.mdef||0); - map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease||0); - map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease||0); + map.set(ABI_TYPE.ABI_HP, json.hp || 0); + map.set(ABI_TYPE.ABI_ATK, json.atk || 0); + map.set(ABI_TYPE.ABI_DEF, json.def || 0); + map.set(ABI_TYPE.ABI_MDEF, json.mdef || 0); + map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease || 0); + map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease || 0); return map } function parseAbilityUp(json) { let map = new Map(); - map.set(ABI_TYPE.ABI_HP, json.hp_up||0); - map.set(ABI_TYPE.ABI_ATK, json.atk_up||0); - map.set(ABI_TYPE.ABI_DEF, json.def_up||0); - map.set(ABI_TYPE.ABI_MDEF, json.mdef_up||0); - map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease_up||0); - map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease_up||0); + map.set(ABI_TYPE.ABI_HP, json.hp_up || 0); + map.set(ABI_TYPE.ABI_ATK, json.atk_up || 0); + map.set(ABI_TYPE.ABI_DEF, json.def_up || 0); + map.set(ABI_TYPE.ABI_MDEF, json.mdef_up || 0); + map.set(ABI_TYPE.ABI_DAMAGE_INCREASE, json.damageIncrease_up || 0); + map.set(ABI_TYPE.ABI_DAMAGE_DECREASE, json.damageDecrease_up || 0); return map } function parseSpecialMaterial(str: string) { - let specialAttr = {ids: new Array(), count: 0} - if(!str) return specialAttr; + let specialAttr = { ids: new Array(), count: 0 } + if (!str) return specialAttr; let decodeArr = decodeArrayStr(str); - if(decodeArr.length >= 2) { + if (decodeArr.length >= 2) { let ids = parseNumberList(decodeArr[0]); let count = parseInt(decodeArr[1]); - if(isNaN(count)) return specialAttr; + if (isNaN(count)) return specialAttr; specialAttr.ids = ids; specialAttr.count = count; } @@ -217,7 +220,7 @@ export function parseConditionStr(str: string) { throw new Error('data table format wrong'); } let parsedParam = new Array(); - for(let param of params) { + for (let param of params) { if (isNaN(parseInt(param))) { throw new Error('data table format wrong'); }