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, DEBUG_MAGIC_WORD } from "../../../consts"; import { ItemInter, RewardInter } 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, { RoleModel } 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/activity/giftPackageService"; import { getAp, setAp, setApBuyTimes } from "../../../services/actionPointService"; import { ActionPointModel } from "../../../db/ActionPoint"; export default function (app: Application) { return new ItemHandler(app); } export class ItemHandler { constructor(private app: Application) { } // 道具的使用 public async useItem(msg: { id: number, selected: Array, count: number }, session: BackendSession) { let { id, selected, count } = 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'); if (count > 0) { let consumeResult = await handleCost(roleId, sid, [{ id: id, count: count }]); if (!consumeResult) return resResult(STATUS.ACTIVITY_RES_NOT_ENOUGH); let dicGoods = gameData.goods.get(id); if (!dicGoods) { return resResult(STATUS.ACTIVITY_DATA_ERROR); } let dicItid = ITID.get(dicGoods.itid); if (!dicItid) return resResult(STATUS.DIC_DATA_NOT_FOUND); if (dicItid.type != CONSUME_TYPE.GIFT_PACKAGE) { return resResult(STATUS.NOT_CONSUME_GOODS); } let giftID = dicGoods.gift; if (!giftID) { return resResult(STATUS.NOT_GIFTPACKAGE); } let result = await useGiftPackage(roleId, roleName, sid, serverId, funcs, giftID, selected, count) return resResult(STATUS.SUCCESS, result); } return resResult(STATUS.WRONG_PARMS); } // 使用体力道具 public async useApItem(msg: { id: number, count: number }, session: BackendSession) { let { id, count } = msg; const roleId = session.get('roleId'); const sid = session.get('sid'); const funcs = session.get('funcs'); if (count > 0) { let dicGoods = gameData.goods.get(id); if (!dicGoods) { return resResult(STATUS.DIC_DATA_NOT_FOUND); } let dicItid = ITID.get(dicGoods.itid); if (!dicItid) return resResult(STATUS.DIC_DATA_NOT_FOUND); if (dicItid.type != CONSUME_TYPE.AP) { return resResult(STATUS.ROLE_METERIAL_ERROR); } let role = await RoleModel.findByRoleId(roleId, 'lv'); let { isOver } = await getAp(roleId, role.lv); if(isOver) return resResult(STATUS.AP_IS_FULL); let consumeResult = await handleCost(roleId, sid, [{ id: id, count: count }]); if (!consumeResult) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let apJson = await setAp(roleId, role.lv, dicGoods.value * count, sid, funcs); return resResult(STATUS.SUCCESS, { apJson }); } return resResult(STATUS.WRONG_PARMS); } // 购买体力道具 public async buyApItem(msg: { id: number, count: number }, session: BackendSession) { let { id, count } = msg; const roleId: string = session.get('roleId'); const roleName: string = session.get('roleName'); const sid: string = session.get('sid'); if(count <= 0) return resResult(STATUS.WRONG_PARMS); let dicGoods = gameData.goods.get(id); if (!dicGoods) { return resResult(STATUS.DIC_DATA_NOT_FOUND); } let dicItid = ITID.get(dicGoods.itid); if (!dicItid) return resResult(STATUS.DIC_DATA_NOT_FOUND); if (dicItid.type != CONSUME_TYPE.AP) { return resResult(STATUS.ROLE_METERIAL_ERROR); } let role = await RoleModel.findByRoleId(roleId, 'lv'); let { buyTimes = 0 } = await getAp(roleId, role.lv); if(buyTimes + count > gameData.apMaxBuyTimes.max) return resResult(STATUS.AP_BUY_TIMES_LACK); let cost: RewardInter[] = []; for(let i = 0; i < count; i++) { let curCost = gameData.apBuy.get(++buyTimes); if(curCost) cost = cost.concat(curCost); } let consumeResult = await handleCost(roleId, sid, cost); if (!consumeResult) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); let goods = await addItems(roleId, roleName, sid, [{id, count}]); let apJson = await setApBuyTimes(roleId, role.lv, sid, count); return resResult(STATUS.SUCCESS, { goods, apJson }); } public async debugIncAp(msg: { magicWord: string, ap: number }, session: BackendSession) { const { magicWord } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } const roleId = session.get('roleId'); const sid = session.get('sid'); const funcs = session.get('funcs'); let role = await RoleModel.findByRoleId(roleId, 'lv'); let apJson = await setAp(roleId, role.lv, msg.ap, sid, funcs); if(!apJson) return resResult(STATUS.BATTLE_ACTION_POINT_LACK) return resResult(STATUS.SUCCESS, { apJson }); } public async debugGetAp(msg: { magicWord: string }, session: BackendSession) { const { magicWord } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } let roleId = session.get('roleId'); let role = await RoleModel.findByRoleId(roleId, 'lv'); let apJson = await getAp(roleId, role.lv); return resResult(STATUS.SUCCESS, { apJson }); } public async debugResetBuyTimes(msg: { magicWord: string }, session: BackendSession) { const { magicWord } = msg; if (magicWord !== DEBUG_MAGIC_WORD) { return resResult(STATUS.TOKEN_ERR); } let roleId = session.get('roleId'); let role = await RoleModel.findByRoleId(roleId, 'lv'); await ActionPointModel.resetBuyTimes(roleId); let apJson = await getAp(roleId, role.lv); return resResult(STATUS.SUCCESS, { apJson }); } }