import SKLogger from "../gear/SKLogger"; import PlayerMgr from "../object/PlayerMgr"; import GameUtil from "./GameUtil"; import ItemUtil from "./ItemUtil"; import SKDataUtil from "../gear/SKDataUtil"; import SKCxfUtil from "../gear/SKCxfUtil"; import {Operate} from "../role/EEnum"; export default class BoxMgr { static shared = new BoxMgr(); boxs: any; init() { let conf = GameUtil.game_conf.boxs; this.boxs = {}; for (let key in conf) { let item = conf[key]; let box_id = item.box_id; if (this.boxs[box_id] == null) { this.boxs[box_id] = []; } this.boxs[box_id].push(item); } } canUseItem(data: any): boolean { let player = PlayerMgr.shared.getPlayerByRoleId(data.roleid); if (player == null) { return false; } let itemData = ItemUtil.getItemData(data.itemid); if (itemData == null) { return false; } console.log("itemData:",itemData) let boxData = null; let keyData = null; if (itemData.type == 13) { // 如果是宝箱 console.log("宝箱!!!!!!!!!!!!!!!") boxData = itemData; console.log("itemData:",itemData.num) keyData = ItemUtil.getItemData(itemData.num); console.log("keyData:",keyData) if (keyData) { console.log("id:",keyData.id) let keyCount = ItemUtil.getBagItemCount(player, keyData.id); console.log("keyCount:",keyCount) if (keyCount < 1) { player.send('s2c_notice', { strRichText: `您需要至少一把[color=#0fffff][${keyData.name}][/color]才能打开[color=#0fffff][${keyData.name}][/color]!` }); return false; } } } else if (itemData.type == 14) { // 如果是钥匙 boxData = ItemUtil.getItemData(itemData.num); keyData = itemData; if (boxData) { let boxCount = ItemUtil.getBagItemCount(player, boxData.id); if (boxCount < 1) { player.send('s2c_notice', { strRichText: `您需要至少一个[color=#0fffff][${boxData.name}][/color]才能使用[color=#0fffff][${keyData.name}][/color]!` }); return false; } } else { return false; } } else { return false; } if (boxData == null) { return false; } SKLogger.debug(`玩家[${player.name}(${player.roleid})]使用宝箱[${boxData.name}]`); let select = this.randomSelect(boxData.id); if (select.item_id == 0) { if ((player.getBagItemAllKindNum() + select.item.length) >= player.bagKindNum) { player.send('s2c_notice', { strRichText: `背包空间不足,无法打开[color=#0fffff][${boxData.name}][/color]` }); return false; } this.openGoods(player, boxData, keyData, select.item) } else { if (select.box_id != 50013 && select.box_id != 50033) { if ((player.getBagItemAllKindNum() + select.count) >= player.bagKindNum) { player.send('s2c_notice', { strRichText: `背包空间不足,无法打开[color=#0fffff][${boxData.name}][/color]` }); return false; } } console.log("变身卡执行:",boxData, keyData, select) this.openBox(player, boxData, keyData, select); } return true; } // 打开宝箱 openBox(player:any, boxData: any,keyData: any, select: any){ let rewardData = ItemUtil.getItemData(select.item_id); console.log("rewardData:",rewardData) SKLogger.debug(`玩家[${player.name}(${player.roleid})]打开宝箱[${boxData.name}]得到[${rewardData.name}]${select.count}个`); player.addItem(boxData.id, -1, false, "打开宝箱"); if (keyData) { player.addItem(keyData.id, -1, false, `消耗钥匙`); player.send('s2c_notice', { strRichText: `你使用一把[color=#0fffff][${keyData.name}][/color]打开了[color=#0fffff][${boxData.name}][/color],里面有[color=#0fffff][${rewardData.name}][/color]${select.count}个` }); } else { player.send('s2c_notice', { strRichText: `你打开了[color=#0fffff][${boxData.name}][/color],里面有[color=#0fffff][${rewardData.name}][/color]${select.count}个` }); } player.addItem(rewardData.id, select.count, true); if(player) { SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.ITEM, operateDepict: "打开宝箱", operateResSerial: rewardData.id, operateResName: rewardData.name, operateContent: SKDataUtil.toJson(player.bag_list, "{}") }) } } // 打开礼包 openGoods(player:any, boxData: any,keyData: any, item: any) { player.addItem(boxData.id, -1, false, "打开礼包"); for (let i = 0; i < item.length; i++) { let data = item[i]; let rewardData = ItemUtil.getItemData(data.item_id); player.addItem(rewardData.id, data.count, false); } player.send('s2c_notice', { strRichText: `你打开了[color=#009F3C]${boxData.name}[/color],[color=#0fffff] ${SKDataUtil.beautySub(boxData.description,25)}` }); if(player){ SKCxfUtil.getCxfRecordOperate({ roleId: player.roleid, roleName: player.name, operateType: Operate.ITEM, operateDepict: "打开礼包", operateResSerial: boxData.id, operateResName: boxData.name, operateContent: SKDataUtil.toJson(player.bag_list, "{}") }) } } randomSelect(id: number): any { let total = 0; let list = this.boxs[id]; for (let item of list) { total += item.rate; } let temp = GameUtil.random(0, total); for (let i = 0; i < list.length; i++) { let item = list[i]; temp -= item.rate; if (temp <= 0) return item; } return null; } }