import { TableNames } from "../game/ConfigTableData"; import { BattleDataManager, type IBattleSkill } from "../ui/BattleGame/BattleDataManager"; import { SkillQuality } from "./SkillDataManager"; /**转盘奖励类型 */ export enum TurnTableAwardType { /**金币 */ Coin = 1, /**技能 */ Skill = 2, /**特殊技能 */ SpecialSkill = 3, /**紫色以上技能 */ PurpleSkill = 4, } export class LotteryItem { /**奖励id */ id: number /**奖励类型 */ awardType: TurnTableAwardType /**奖励品质 */ awardQuality: SkillQuality /**奖励技能数据 */ awardSkillConfig: IBattleSkill /**奖励数量 */ awardNum: number } /**转盘表数据管理 */ export class TurnTableDataManager { /**获取转盘配表数据 */ public static getAllTurnTableList() { let list = gg.data.table.getTableList(TableNames.Lottery); // console.log('allList===',list) return list } /** * 通过id获取转盘数据 * @param id 转盘id */ public static getTurnTableDataById(id) { let allList = this.getAllTurnTableList() let config: ITableLottery = allList.find(x => x.id == id) // console.log('获取特定转盘的配表数据==id,config=',id,config) return config } /**当前可用转盘id数组 */ public static availableTurnTableIdArr: number[] = [] /**获取当前可用转盘id数组 */ public static getAvailableTurnTableIdArr() { return this.availableTurnTableIdArr } /**初始化可用转盘id数组 */ public static initAvailableTurnTableIdArr() { this.availableTurnTableIdArr = [] let allList = this.getAllTurnTableList() for (let i = 0; i < allList.length; i++) { let config: ITableLottery = allList[i] this.availableTurnTableIdArr.push(config.id) } } /**删除不可用转盘id */ public static removeUnavailableTurnTableId(idArr: number[]) { for (let i = 0; i < idArr.length; i++) { let id = idArr[i] let index = this.availableTurnTableIdArr.indexOf(id) if (index != -1) { this.availableTurnTableIdArr.splice(index, 1) } } } /**获取所有转盘奖品 */ public static getAllTurnTableAwardList(index: number) { let allList = this.getAllTurnTableList() //先统计所有技能类型,一次性随机出技能结果 let turnTableSkillTypeArr: TurnTableAwardType[] = [] let curentType = "type"; if (index == 0) curentType = "type1"; if (index == 1) curentType = "type2"; if (index == 2) curentType = "type"; for (let i = 0; i < allList.length; i++) { let config: ITableLottery = allList[i] if (config[curentType] == TurnTableAwardType.Skill || config[curentType] == TurnTableAwardType.SpecialSkill || config[curentType] == TurnTableAwardType.PurpleSkill) { turnTableSkillTypeArr.push(config[curentType]) } } //技能结果 let skillList = BattleDataManager.getTurnTableRogueSkill(turnTableSkillTypeArr) let awardList: LotteryItem[] = [] for (let i = 0; i < allList.length; i++) { let config: ITableLottery = allList[i] let item = new LotteryItem() item.id = config.id item.awardType = config[curentType] if (config[curentType] == TurnTableAwardType.Coin) { item.awardNum = config.coin item.awardQuality = config.quality } else if (config[curentType] == TurnTableAwardType.Skill || config[curentType] == TurnTableAwardType.SpecialSkill||config[curentType] == TurnTableAwardType.PurpleSkill) { item.awardNum = 1 item.awardSkillConfig = skillList.shift() } awardList.push(item) } return awardList } /** * 根据权重获取两个随机奖品 * @param isFirst 是否是第一次获取 */ public static getTwoRandomAwardByWeight(roundNum: number) { let idArr = this.getAvailableTurnTableIdArr() let allWeight = 0 for (let i = 0; i < idArr.length; i++) { let config: ITableLottery = this.getTurnTableDataById(idArr[i]) let index = roundNum - 1 if (index >= config.weight.split(',').length) { index = config.weight.split(',').length - 1 } let weight = config.weight.split(',')[index] allWeight += Number(weight) } let num = 0 let resultIdArr: number[] = [] while (num < 2) { let r = Math.random() * allWeight let curWeight = 0 let id = 0 for (let i = 0; i < idArr.length; i++) { let config: ITableLottery = this.getTurnTableDataById(idArr[i]) let index = roundNum - 1 if (index >= config.weight.split(',').length) { index = config.weight.split(',').length - 1 } let weight = config.weight.split(',')[index] if (r >= curWeight && r < curWeight + Number(weight)) { id = i break } curWeight += Number(weight) } if (resultIdArr.indexOf(idArr[id]) == -1) { resultIdArr.push(idArr[id]) num++ } } return resultIdArr } }