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.
348 lines
12 KiB
348 lines
12 KiB
|
|
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;
|
|
}
|
|
}
|
|
|