Commit 1586bab5 authored by Melledy's avatar Melledy
Browse files

Gacha banner tweaks

Removed min/maxItemType
Added configurable base weight values for banners
parent 1130138a
...@@ -16,8 +16,8 @@ public class GachaBanner { ...@@ -16,8 +16,8 @@ public class GachaBanner {
private int sortId; private int sortId;
private int[] rateUpItems1; private int[] rateUpItems1;
private int[] rateUpItems2; private int[] rateUpItems2;
private int minItemType = 1; private int baseYellowWeight = 60; // Max 10000
private int maxItemType = 2; private int basePurpleWeight = 510; // Max 10000
private int eventChance = 50; // Chance to win a featured event item private int eventChance = 50; // Chance to win a featured event item
private int softPity = 75; private int softPity = 75;
private int hardPity = 90; private int hardPity = 90;
...@@ -63,6 +63,14 @@ public class GachaBanner { ...@@ -63,6 +63,14 @@ public class GachaBanner {
return sortId; return sortId;
} }
public int getBaseYellowWeight() {
return baseYellowWeight;
}
public int getBasePurpleWeight() {
return basePurpleWeight;
}
public int[] getRateUpItems1() { public int[] getRateUpItems1() {
return rateUpItems1; return rateUpItems1;
} }
...@@ -70,14 +78,6 @@ public class GachaBanner { ...@@ -70,14 +78,6 @@ public class GachaBanner {
public int[] getRateUpItems2() { public int[] getRateUpItems2() {
return rateUpItems2; return rateUpItems2;
} }
public int getMinItemType() {
return minItemType;
}
public int getMaxItemType() {
return maxItemType;
}
public int getSoftPity() { public int getSoftPity() {
return softPity - 1; return softPity - 1;
......
...@@ -15,6 +15,7 @@ import emu.grasscutter.Grasscutter; ...@@ -15,6 +15,7 @@ import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData; import emu.grasscutter.data.GameData;
import emu.grasscutter.data.def.ItemData; import emu.grasscutter.data.def.ItemData;
import emu.grasscutter.game.avatar.Avatar; import emu.grasscutter.game.avatar.Avatar;
import emu.grasscutter.game.gacha.GachaBanner.BannerType;
import emu.grasscutter.game.inventory.GameItem; import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.inventory.ItemType; import emu.grasscutter.game.inventory.ItemType;
import emu.grasscutter.game.inventory.MaterialType; import emu.grasscutter.game.inventory.MaterialType;
...@@ -125,8 +126,8 @@ public class GachaManager { ...@@ -125,8 +126,8 @@ public class GachaManager {
int itemId = 0; int itemId = 0;
int bonusYellowChance = gachaInfo.getPity5() >= banner.getSoftPity() ? 100 * (gachaInfo.getPity5() - banner.getSoftPity() - 1): 0; int bonusYellowChance = gachaInfo.getPity5() >= banner.getSoftPity() ? 100 * (gachaInfo.getPity5() - banner.getSoftPity() - 1): 0;
int yellowChance = 60 + (int) Math.floor(100f * (gachaInfo.getPity5() / (banner.getSoftPity() - 1D))) + bonusYellowChance; int yellowChance = banner.getBaseYellowWeight() + (int) Math.floor(100f * (gachaInfo.getPity5() / (banner.getSoftPity() - 1D))) + bonusYellowChance;
int purpleChance = 10000 - (510 + (int) Math.floor(790f * (gachaInfo.getPity4() / 8f))); int purpleChance = 10000 - (banner.getBasePurpleWeight() + (int) Math.floor(790f * (gachaInfo.getPity4() / 8f)));
if (random <= yellowChance || gachaInfo.getPity5() >= banner.getHardPity()) { if (random <= yellowChance || gachaInfo.getPity5() >= banner.getHardPity()) {
if (banner.getRateUpItems1().length > 0) { if (banner.getRateUpItems1().length > 0) {
...@@ -142,7 +143,7 @@ public class GachaManager { ...@@ -142,7 +143,7 @@ public class GachaManager {
} }
if (itemId == 0) { if (itemId == 0) {
int typeChance = this.randomRange(banner.getMinItemType(), banner.getMaxItemType()); int typeChance = this.randomRange(banner.getBannerType() == BannerType.WEAPON ? 2 : 1, banner.getBannerType() == BannerType.EVENT ? 1 : 2);
if (typeChance == 1) { if (typeChance == 1) {
itemId = getRandom(this.yellowAvatars); itemId = getRandom(this.yellowAvatars);
} else { } else {
...@@ -163,7 +164,7 @@ public class GachaManager { ...@@ -163,7 +164,7 @@ public class GachaManager {
} }
if (itemId == 0) { if (itemId == 0) {
int typeChance = this.randomRange(banner.getMinItemType(), banner.getMaxItemType()); int typeChance = this.randomRange(banner.getBannerType() == BannerType.WEAPON ? 2 : 1, banner.getBannerType() == BannerType.EVENT ? 1 : 2);
if (typeChance == 1) { if (typeChance == 1) {
itemId = getRandom(this.purpleAvatars); itemId = getRandom(this.purpleAvatars);
} else { } else {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment