import { GOOD_TYPE } from './../consts/consts'; import { EquipModel } from './../db/Equip'; import { ItemModel } from './../db/Item'; import { ScriptItemModel } from './../db/ScriptItem'; import { HeroSoulModel } from './../db/HeroSoul'; import { CounterModel } from './../db/Counter'; import { decodeStr } from '../pubUtils/util'; import { getGoodById, getHeroInfoById } from '../pubUtils/gamedata'; export async function handleFixedReward(roleId: string, roleName: string, rewardStr: string, multi: number) { let reward = decodeStr('fixReward', rewardStr); let rewards = []; for(let obj of reward) rewards.push({ ...obj, count: obj.count * multi}); const result = await handleReward(roleId, roleName, reward); return result; } export async function handleReward(roleId: string, roleName: string, rewards: Array<{type: number, gid: number, count: number, times: number}>) { let returnGoods = new Array(); for(let goods of rewards) { let goodInfo = getGoodById(goods.gid); let result = new Array() if(goodInfo.goodType == GOOD_TYPE.EQUIP) { // 装备 result = await rewardWeapons(roleId, roleName, goodInfo, {id: goods.gid, cnt: goods.count }); } else if(goodInfo.goodType == GOOD_TYPE.ITEM) { // 消耗品 result = await rewardItems(roleId, roleName, goodInfo, {id: goods.gid, cnt: goods.count }); } else if(goodInfo.goodType == GOOD_TYPE.SCRIPT_ITEM) { // 剧情物品 result = await rewardScriptItems(roleId, roleName, goodInfo, {id: goods.gid, cnt: goods.count }); } else if (goodInfo.goodType == GOOD_TYPE.HERO_SOUL) { // 武将碎片 result = await rewardHeroSouls(roleId, roleName, goodInfo, {id: goods.gid, cnt: goods.count }); } else { // 货币 } for(let obj of result) { returnGoods.push({dropType: goods.type, times: goods.times, ...obj}) } } return returnGoods; } async function rewardWeapons (roleId: string, roleName: string, dicGood: any, weapon: {id:number,cnt:number }) { let weaponsData = []; let cnt = weapon.cnt; while (cnt > 0) { const seqId = await CounterModel.getNewCounter('eid'); const equipInfo = { roleId, roleName, eid: weapon.id, eName: dicGood.name, seqId, quality: dicGood.lv, type: dicGood.goodType } const equip = await EquipModel.createEquip(equipInfo); cnt -= 1; weaponsData.push(equip); } return weaponsData; } // 消耗品 async function rewardItems (roleId: string, roleName: string, dicGood: any, data: {id:number,cnt:number }) { let goods = new Array(); let itemcount = data.cnt; let itemid = data.id; let item = await ItemModel.findbyItemid(itemid, roleId); if(item) { let result = await ItemModel.changeItemCount(item.seqId, itemcount); goods.push(result); } else { const seqId = await CounterModel.getNewCounter('itemid')||-1; const itemInfo = { roleId, roleName: roleName, itemid, itemName: dicGood.name, seqId, count: itemcount, type: dicGood.goodType } let result = await ItemModel.createItem(itemInfo); goods.push(result); } return goods; } // 剧情道具 async function rewardScriptItems (roleId: string, roleName: string, dicGood: any, data: {id:number,cnt:number }) { let goods = []; let itemcount = data.cnt; let itemid = data.id; let item = await ScriptItemModel.findbyItemid(itemid, roleId); if(item) { let result = await ScriptItemModel.changeItemCount(item.seqId, itemcount); goods.push(result); } else { const seqId = await CounterModel.getNewCounter('scriptitemid')||-1; const itemInfo = { roleId, roleName: roleName, itemid, itemName: dicGood.name, seqId, count: itemcount, type: dicGood.goodType } let result = await ScriptItemModel.createItem(itemInfo); goods.push(result); } return goods; } // 剧情道具 async function rewardHeroSouls (roleId: string, roleName: string, dicGood: any, data: {id:number,cnt:number }) { let goods = []; let soulcount = data.cnt; let soulid = data.id; let item = await HeroSoulModel.findbyItemid(soulid, roleId); if(item) { let result = await HeroSoulModel.changeItemCount(item.seqId, soulcount); goods.push(result); } else { const dicHero = getHeroInfoById(dicGood.hid); const seqId = await CounterModel.getNewCounter('scriptitemid')||-1; const itemInfo = { roleId, roleName: roleName, soulid, soulName: dicGood.name, hid: dicGood.hid, hName: dicHero.name, seqId, count: soulcount, type: dicGood.goodType } let result = await HeroSoulModel.createItem(itemInfo); goods.push(result); } return goods; }