消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

151 lines
5.5 KiB

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<ITableLottery>(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
}
}