implement shopMail giftPackage function

Co-authored-by: Kinesis <CCasusensa@users.noreply.github.com>
This commit is contained in:
xtaodada
2022-05-02 15:30:19 +08:00
committed by Melledy
parent 73fc9fe4cc
commit 7b591a2da0
8 changed files with 112 additions and 3 deletions

View File

@@ -58,6 +58,9 @@ public class GameItem {
// Relic
private int mainPropId;
private List<Integer> appendPropIdList;
// shopMailBox
private int rewardBoxId;
private int equipCharacter;
@Transient private int weaponEntityId;
@@ -90,7 +93,7 @@ public class GameItem {
// Equip data
if (getItemType() == ItemType.ITEM_WEAPON) {
this.level = this.count > 1 ? this.count : 1;
this.level = Math.max(this.count, 1);
this.affixes = new ArrayList<>(2);
if (getItemData().getSkillAffix() != null) {
for (int skillAffix : getItemData().getSkillAffix()) {
@@ -248,6 +251,14 @@ public class GameItem {
this.mainPropId = mainPropId;
}
public int getRewardBoxId() {
return rewardBoxId;
}
public void setRewardBoxId(int rewardBoxId) {
this.rewardBoxId = rewardBoxId;
}
public List<Integer> getAppendPropIdList() {
return appendPropIdList;
}

View File

@@ -7,11 +7,13 @@ import java.util.stream.Collectors;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.common.ItemParamData;
import emu.grasscutter.data.common.RewardBoxItemData;
import emu.grasscutter.data.custom.OpenConfigEntry;
import emu.grasscutter.data.custom.OpenConfigEntry.SkillPointModifier;
import emu.grasscutter.data.def.AvatarPromoteData;
import emu.grasscutter.data.def.AvatarSkillData;
import emu.grasscutter.data.def.AvatarSkillDepotData;
import emu.grasscutter.data.def.RewardBoxData;
import emu.grasscutter.data.def.WeaponPromoteData;
import emu.grasscutter.data.def.AvatarSkillDepotData.InherentProudSkillOpens;
import emu.grasscutter.data.def.AvatarTalentData;
@@ -21,6 +23,7 @@ import emu.grasscutter.game.inventory.GameItem;
import emu.grasscutter.game.inventory.ItemType;
import emu.grasscutter.game.inventory.MaterialType;
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.ActionReason;
import emu.grasscutter.net.proto.ItemParamOuterClass.ItemParam;
import emu.grasscutter.net.proto.MaterialInfoOuterClass.MaterialInfo;
import emu.grasscutter.server.game.GameServer;
@@ -897,6 +900,26 @@ public class InventoryManager {
player.sendPacket(new PacketDestroyMaterialRsp(returnMaterialMap));
}
private boolean handleRewardBox(Player player, GameItem useItem) {
List<RewardBoxData> rewardBoxDataList = GameData.getRewardBoxDataMap().values().stream().filter(x -> x.getId() == useItem.getRewardBoxId()).collect(Collectors.toList());
if (rewardBoxDataList.isEmpty()) {
return false;
}
List<GameItem> rewardItemList = new ArrayList<>();
for (RewardBoxItemData itemData : rewardBoxDataList.get(0).getRewardBoxItemList()) {
if (itemData.getItemId() == 0) {
continue;
}
String[] split = itemData.getItemCount().split(";");
int itemCount = Integer.parseInt(split[(int) (Math.random()* split.length)]);
rewardItemList.add(new GameItem(itemData.getItemId(), itemCount));
}
if (!rewardItemList.isEmpty()) {
player.getInventory().addItems(rewardItemList, ActionReason.Shop);
}
return true;
}
public GameItem useItem(Player player, long targetGuid, long itemGuid, int count) {
Avatar target = player.getAvatars().getAvatarByGuid(targetGuid);
GameItem useItem = player.getInventory().getItemByGuid(itemGuid);
@@ -918,6 +941,11 @@ public class InventoryManager {
used = player.getTeamManager().reviveAvatar(target) ? 1 : 0;
}
break;
case MATERIAL_CHEST:
if (useItem.getRewardBoxId() > 0) {
used = handleRewardBox(player, useItem) ? 1 : 0;
}
break;
default:
break;
}

View File

@@ -13,6 +13,7 @@ public class ShopInfo {
private List<ItemParamData> costItemList;
private int boughtNum = 0;
private int buyLimit = 0;
private int showId = 0;
private int beginTime = 0;
private int endTime = 1924992000;
private int minLevel = 0;
@@ -51,6 +52,7 @@ public class ShopInfo {
this.mcoin = sgd.getCostMcoin();
this.hcoin = sgd.getCostHcoin();
this.buyLimit = sgd.getBuyLimit();
this.showId = sgd.getShowId();
this.minLevel = sgd.getMinPlayerLevel();
this.maxLevel = sgd.getMaxPlayerLevel();
@@ -180,6 +182,14 @@ public class ShopInfo {
this.maxLevel = maxLevel;
}
public int getShowId() {
return showId;
}
public void setShowId(int showId) {
this.showId = showId;
}
public ShopRefreshType getShopRefreshType() {
if (refreshType == null)
return ShopRefreshType.NONE;