咸鱼的反击
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.
 
 
 
xianyudefanji/assets/Scripts/Manager/DiaoLuoManager.ts

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;
}
}