import User from "../../FrameWork/User/User"; import Common5 from "../../Platform/th/Common5"; import BagManager from "./BagManager"; import InterfaceManager from "./InterfaceManager"; import ShipuManager from "./ShipuManager"; import TanWeiManager from "./TanWeiManager"; enum PINGZHI { lock, gray, green, blue, purple, orange, color } type WUPINGGAILV = { level: number, tanwei: number, miandian: number, zhuzi: number, } type PINGZHIGAILV = { level: number, green: number, blue: number, purple: number, orange: number, color: number, } let wuPingGaiLv: WUPINGGAILV[] = [ { level: 100, tanwei: 30, miandian: 60, zhuzi: 10 }, { level: 200, tanwei: 30, miandian: 60, zhuzi: 10 }, { level: 300, tanwei: 30, miandian: 60, zhuzi: 10 }, { level: 600, tanwei: 30, miandian: 60, zhuzi: 10 }, { level: 900, tanwei: 30, miandian: 60, zhuzi: 10 }, { level: 1200, tanwei: 25, miandian: 65, zhuzi: 10 }, { level: 1500, tanwei: 20, miandian: 70, zhuzi: 10 }, ] let pingZhiGaiLv: PINGZHIGAILV[] = [ { level: 100, green: 80, blue: 20, purple: 0, orange: 0, color: 0 }, { level: 200, green: 70, blue: 20, purple: 10, orange: 0, color: 0 }, { level: 300, green: 60, blue: 30, purple: 10, orange: 0, color: 0 }, { level: 600, green: 60, blue: 20, purple: 10, orange: 10, color: 0 }, { level: 900, green: 50, blue: 10, purple: 20, orange: 10, color: 10 }, { level: 1200, green: 50, blue: 10, purple: 10, orange: 20, color: 10 }, ] let zhuzis = [3730, 3731, 3732, 3733, 3734, 3735, 3736] export default class DiaoLuoManager { public static getDiaoLuo() { //掉落(根据等级选择概率,先根据物品掉落概率随机物品,再根据品质概率随机物品的品质,检查自身当前品质,随机的物品品质必须必自身当前品质高,如果自身当前等级对应的物品品质都到顶了,就不再掉落) // let shiPuArray = User.getShiPuArray() // let tanWeiArray = User.getTanweiArray() // let otherArray = [3730, 3731, 3732, 3733, 3734, 3735, 3736] //珠子 let level = User.getMyLevel() //随机物品 if (level >= wuPingGaiLv[0].level) { let gailv = this.getWuPingGaiLvByMyLevel() let gailv_pingzhi = this.getPingZhiGaiLvByMyLevel() let wuping = this.getWuPingByGaiLv(gailv) let pingzhi = this.getPingZhiByGaiLv(gailv_pingzhi, wuping) return { wuping: wuping, pingzhi: pingzhi } } } public static getDiaoLuoArray(num) { //掉落(根据等级选择概率,先根据物品掉落概率随机物品,再根据品质概率随机物品的品质,检查自身当前品质,随机的物品品质必须必自身当前品质高,如果自身当前等级对应的物品品质都到顶了,就不再掉落) // let shiPuArray = User.getShiPuArray() // let tanWeiArray = User.getTanweiArray() // let otherArray = [3730, 3731, 3732, 3733, 3734, 3735, 3736] //珠子 let level = User.getMyLevel() //随机多个物品 let arr = [] let curRandom = 0 let maxRandom = 10 if (level >= wuPingGaiLv[0].level) { while (arr.length < num) { let diaoluo = this.getDiaoLuo() if (arr.length == 0) { arr.push(diaoluo) } else { let isHave = false for (let j = 0; j < arr.length; j++) { if (arr[j].wuping == diaoluo.wuping) { isHave = true break } } if (!isHave) { arr.push(diaoluo) } else { curRandom++ if (curRandom >= maxRandom) { break } } } } } for (let i = arr.length - 1; i >= 0; i--) { if (!arr[i].wuping || !arr[i].pingzhi) { arr.splice(i, 1); } } //第一次掉落,必定出一个橙色和珠子 if (User.getShouCiDiaoLuo() == 1) { User.setShouCiDiaoLuo(-1) let isHaveOrange = false let index1 let index2 for (let i = 0; i < arr.length; i++) { if (arr[i].wuping && arr[i].pingzhi) { if (typeof arr[i].wuping != "number") { if (arr[i].pingzhi >= PINGZHI.orange) { isHaveOrange = true index1 = i } else { index1 = i } } else { index2 = i } } } if (!isHaveOrange) { if (index1 != null && index1 != undefined) { arr[index1].pingzhi = PINGZHI.orange } } //第一个橙色物品不需要广告 arr[index1].isNotAd = true let isHaveZhuZi = false for (let i = 0; i < arr.length; i++) { if (arr[i].wuping && arr[i].pingzhi) { if (zhuzis.includes(arr[i].wuping)) { isHaveZhuZi = true break } } } if (!isHaveZhuZi) { if (index2 != null && index2 != undefined) { arr[index2].wuping = zhuzis[this.getRandomInt(0, zhuzis.length - 1)] arr[index2].pingzhi = this.getZhuZiPingZhi() }else{ arr[0].wuping = zhuzis[this.getRandomInt(0, zhuzis.length - 1)] arr[0].pingzhi = this.getZhuZiPingZhi() } } } return arr } public static getWuPingByGaiLv(_gailv: WUPINGGAILV) { let gailv = Common5.deepClone(_gailv) let shiPuArray = User.getShiPuArray() let tanWeiArray = User.getTanweiArray() let otherArray = zhuzis //珠子 let num = this.getRandomInt(1, 100) let gailv_pingzhi = this.getPingZhiGaiLvByMyLevel() let pingzhi = ["", "", "green", "blue", "purple", "orange", "color"] //已经解锁的面点并且等级 let shiPuUnlocks = [] let maxLevel = 6 for (let i = 0; i < shiPuArray.length; i++) { if (!shiPuArray[i].isLock && shiPuArray[i].level < maxLevel && gailv_pingzhi[pingzhi[shiPuArray[i].level + 1]] > 0) { shiPuUnlocks.push(shiPuArray[i]) } } //已经解锁的摊位 let tanWeiUnlocks = [] for (let i = 0; i < tanWeiArray.length; i++) { if (!tanWeiArray[i].isLock && tanWeiArray[i].level < maxLevel && gailv_pingzhi[pingzhi[tanWeiArray[i].level + 1]] > 0) { tanWeiUnlocks.push(tanWeiArray[i]) } } //动态调整概率,没有解锁的不参与 if (shiPuUnlocks.length == 0 && tanWeiUnlocks.length == 0) { let isFindAll = true for (let i = 0; i < zhuzis.length; i++) { if (BagManager.getBagGoodNums(zhuzis[i]) <= 0) { isFindAll = false break } } if (!isFindAll) { //必定出珠子 gailv.tanwei = 0 gailv.miandian = 0 gailv.zhuzi = 100 } else { gailv.tanwei = 0 gailv.miandian = 0 gailv.zhuzi = 0 } } else if (shiPuUnlocks.length == 0 && tanWeiUnlocks.length != 0) { gailv.tanwei += gailv.miandian gailv.miandian = 0 } else if (shiPuUnlocks.length != 0 && tanWeiUnlocks.length == 0) { gailv.miandian += gailv.tanwei gailv.tanwei = 0 } else { // gailv.miandian = gailv.tanwei + gailv.miandian // gailv.zhuzi = gailv.miandian + gailv.zhuzi } let wuping if (num > 0 && num <= gailv.tanwei) { wuping = tanWeiUnlocks[this.getRandomInt(0, tanWeiUnlocks.length - 1)] } else if (num > gailv.tanwei && num <= gailv.miandian) { wuping = shiPuUnlocks[this.getRandomInt(0, shiPuUnlocks.length - 1)] wuping.isShiPu = true } else if (num > gailv.miandian && num <= gailv.zhuzi) { wuping = otherArray[this.getRandomInt(0, otherArray.length - 1)] if (BagManager.getBagGoodNums(wuping) > 0) { wuping = null } } return wuping } public static getPingZhiByGaiLv(_gailv: PINGZHIGAILV, wuping) { let num = this.getRandomInt(1, 100) let gailv = Common5.deepClone(_gailv) let config if (typeof (wuping) == "number") { return this.getZhuZiPingZhi() } else { config = wuping // if (wuping.isShiPu) { // config = ShipuManager.getShipuConfigDate(wuping.id) // }else{ // config = TanWeiManager.getShipuConfigDate(wuping.id) // } let _green = gailv.green if (gailv.green != 0) { if (config && config.level >= PINGZHI.green) { gailv.green = 0 } } let _blue = gailv.blue if (gailv.blue != 0) { if (config && config.level >= PINGZHI.blue) { gailv.blue = 0 } else { gailv.blue = _green + gailv.blue } } let _purple = gailv.purple if (gailv.purple != 0) { if (config && config.level >= PINGZHI.purple) { gailv.purple = 0 } else { gailv.purple = _green + _blue + gailv.purple } } let _orange = gailv.orange if (gailv.orange != 0) { if (config && config.level >= PINGZHI.orange) { gailv.orange = 0 } else { gailv.orange = _green + _blue + _purple + gailv.purple } } let _color = gailv.color if (gailv.color != 0) { if (config && config.level >= PINGZHI.color) { gailv.color = 0 } else { gailv.color = _green + _blue + _purple + _orange + gailv.color } } let pingzhi if (num > 0 && num <= gailv.green) { pingzhi = PINGZHI.green } else if (num > gailv.green && num <= gailv.blue) { pingzhi = PINGZHI.blue } else if (num > gailv.blue && num <= gailv.purple) { pingzhi = PINGZHI.purple } else if (num > gailv.purple && num <= gailv.orange) { pingzhi = PINGZHI.orange } else if (num > gailv.orange && num <= gailv.color) { pingzhi = PINGZHI.color } return pingzhi } } public static getWuPingGaiLvByMyLevel() { let level = User.getMyLevel() let gailv for (let i = 0; i < wuPingGaiLv.length; i++) { if (level >= wuPingGaiLv[i].level) { gailv = wuPingGaiLv[i] } else { break } } return gailv } public static getPingZhiGaiLvByMyLevel() { let level = User.getMyLevel() let gailv for (let i = 0; i < pingZhiGaiLv.length; i++) { if (level >= pingZhiGaiLv[i].level) { gailv = pingZhiGaiLv[i] } else { break } } return gailv } public static getZhuZi() { return zhuzis[this.getRandomInt(0, zhuzis.length - 1)] } public static getZhuZiPingZhi() { return this.getRandomInt(1, 7) } /** * 随机数 * @param min 最小数 * @param max 最大数 * @returns */ public static getRandomInt(min: number, max: number): number { return Math.floor(Math.random() * (max - min + 1)) + min; } }