mirror of
https://github.com/Melledy/Grasscutter.git
synced 2024-11-29 17:48:52 +00:00
Custom costs for different gacha pulls
This commit is contained in:
parent
f83f13204e
commit
83c46cb9c8
@ -6,13 +6,18 @@ import emu.grasscutter.utils.Utils;
|
|||||||
|
|
||||||
import static emu.grasscutter.Configuration.*;
|
import static emu.grasscutter.Configuration.*;
|
||||||
|
|
||||||
|
import emu.grasscutter.data.common.ItemParamData;
|
||||||
|
|
||||||
public class GachaBanner {
|
public class GachaBanner {
|
||||||
private int gachaType;
|
private int gachaType;
|
||||||
private int scheduleId;
|
private int scheduleId;
|
||||||
private String prefabPath;
|
private String prefabPath;
|
||||||
private String previewPrefabPath;
|
private String previewPrefabPath;
|
||||||
private String titlePath;
|
private String titlePath;
|
||||||
private int costItem;
|
private int costItemId = 0;
|
||||||
|
private int costItemAmount = 1;
|
||||||
|
private int costItemId10 = 0;
|
||||||
|
private int costItemAmount10 = 10;
|
||||||
private int beginTime;
|
private int beginTime;
|
||||||
private int endTime;
|
private int endTime;
|
||||||
private int sortId;
|
private int sortId;
|
||||||
@ -36,11 +41,8 @@ public class GachaBanner {
|
|||||||
// Kinda wanna deprecate these but they're in people's configs
|
// Kinda wanna deprecate these but they're in people's configs
|
||||||
private int[] rateUpItems1 = {};
|
private int[] rateUpItems1 = {};
|
||||||
private int[] rateUpItems2 = {};
|
private int[] rateUpItems2 = {};
|
||||||
private int softPity = -1;
|
|
||||||
private int hardPity = -1;
|
|
||||||
private int eventChance = -1;
|
private int eventChance = -1;
|
||||||
private int baseYellowWeight = -1;
|
private int costItem = 0;
|
||||||
private int basePurpleWeight = -1;
|
|
||||||
|
|
||||||
public int getGachaType() {
|
public int getGachaType() {
|
||||||
return gachaType;
|
return gachaType;
|
||||||
@ -66,8 +68,15 @@ public class GachaBanner {
|
|||||||
return titlePath;
|
return titlePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemParamData getCost(int numRolls) {
|
||||||
|
return switch (numRolls) {
|
||||||
|
case 10 -> new ItemParamData((costItemId10 > 0) ? costItemId10 : getCostItem(), costItemAmount10);
|
||||||
|
default -> new ItemParamData(getCostItem(), costItemAmount * numRolls);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public int getCostItem() {
|
public int getCostItem() {
|
||||||
return costItem;
|
return (costItem > 0) ? costItem : costItemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getBeginTime() {
|
public int getBeginTime() {
|
||||||
@ -82,14 +91,6 @@ public class GachaBanner {
|
|||||||
return sortId;
|
return sortId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getBaseYellowWeight() {
|
|
||||||
return baseYellowWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getBasePurpleWeight() {
|
|
||||||
return basePurpleWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int[] getRateUpItems4() {
|
public int[] getRateUpItems4() {
|
||||||
return (rateUpItems2.length > 0) ? rateUpItems2 : rateUpItems4;
|
return (rateUpItems2.length > 0) ? rateUpItems2 : rateUpItems4;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import emu.grasscutter.database.DatabaseHelper;
|
|||||||
import emu.grasscutter.game.avatar.Avatar;
|
import emu.grasscutter.game.avatar.Avatar;
|
||||||
import emu.grasscutter.game.gacha.GachaBanner.BannerType;
|
import emu.grasscutter.game.gacha.GachaBanner.BannerType;
|
||||||
import emu.grasscutter.game.inventory.GameItem;
|
import emu.grasscutter.game.inventory.GameItem;
|
||||||
|
import emu.grasscutter.game.inventory.Inventory;
|
||||||
import emu.grasscutter.game.inventory.ItemType;
|
import emu.grasscutter.game.inventory.ItemType;
|
||||||
import emu.grasscutter.game.inventory.MaterialType;
|
import emu.grasscutter.game.inventory.MaterialType;
|
||||||
import emu.grasscutter.game.player.Player;
|
import emu.grasscutter.game.player.Player;
|
||||||
@ -233,7 +234,8 @@ public class GachaManager {
|
|||||||
if (times != 10 && times != 1) {
|
if (times != 10 && times != 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (player.getInventory().getInventoryTab(ItemType.ITEM_WEAPON).getSize() + times > player.getInventory().getInventoryTab(ItemType.ITEM_WEAPON).getMaxCapacity()) {
|
Inventory inventory = player.getInventory();
|
||||||
|
if (inventory.getInventoryTab(ItemType.ITEM_WEAPON).getSize() + times > inventory.getInventoryTab(ItemType.ITEM_WEAPON).getMaxCapacity()) {
|
||||||
player.sendPacket(new PacketDoGachaRsp());
|
player.sendPacket(new PacketDoGachaRsp());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -246,7 +248,8 @@ public class GachaManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Spend currency
|
// Spend currency
|
||||||
if (banner.getCostItem() > 0 && !player.getInventory().payItem(banner.getCostItem(), times)) {
|
ItemParamData cost = banner.getCost(times);
|
||||||
|
if (cost.getCount() > 0 && !inventory.payItem(cost)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,9 +307,9 @@ public class GachaManager {
|
|||||||
}
|
}
|
||||||
addStarglitter = (itemData.getRankLevel()==5)? 10 : 2;
|
addStarglitter = (itemData.getRankLevel()==5)? 10 : 2;
|
||||||
int constItemId = itemId + 100;
|
int constItemId = itemId + 100;
|
||||||
GameItem constItem = player.getInventory().getInventoryTab(ItemType.ITEM_MATERIAL).getItemById(constItemId);
|
GameItem constItem = inventory.getInventoryTab(ItemType.ITEM_MATERIAL).getItemById(constItemId);
|
||||||
gachaItem.addTransferItems(GachaTransferItem.newBuilder().setItem(ItemParam.newBuilder().setItemId(constItemId).setCount(1)).setIsTransferItemNew(constItem == null));
|
gachaItem.addTransferItems(GachaTransferItem.newBuilder().setItem(ItemParam.newBuilder().setItemId(constItemId).setCount(1)).setIsTransferItemNew(constItem == null));
|
||||||
player.getInventory().addItem(constItemId, 1);
|
inventory.addItem(constItemId, 1);
|
||||||
}
|
}
|
||||||
isTransferItem = true;
|
isTransferItem = true;
|
||||||
break;
|
break;
|
||||||
@ -315,7 +318,7 @@ public class GachaManager {
|
|||||||
// Create item
|
// Create item
|
||||||
GameItem item = new GameItem(itemData);
|
GameItem item = new GameItem(itemData);
|
||||||
gachaItem.setGachaItem(item.toItemParam());
|
gachaItem.setGachaItem(item.toItemParam());
|
||||||
player.getInventory().addItem(item);
|
inventory.addItem(item);
|
||||||
|
|
||||||
stardust += addStardust;
|
stardust += addStardust;
|
||||||
starglitter += addStarglitter;
|
starglitter += addStarglitter;
|
||||||
@ -336,10 +339,10 @@ public class GachaManager {
|
|||||||
|
|
||||||
// Add stardust/starglitter
|
// Add stardust/starglitter
|
||||||
if (stardust > 0) {
|
if (stardust > 0) {
|
||||||
player.getInventory().addItem(stardustId, stardust);
|
inventory.addItem(stardustId, stardust);
|
||||||
}
|
}
|
||||||
if (starglitter > 0) {
|
if (starglitter > 0) {
|
||||||
player.getInventory().addItem(starglitterId, starglitter);
|
inventory.addItem(starglitterId, starglitter);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Packets
|
// Packets
|
||||||
|
Loading…
Reference in New Issue
Block a user