mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-05-11 22:45:54 +08:00
Merge pull request #173 from Yazawazi/development
Add player level reward
This commit is contained in:
commit
f6d717ab7f
@ -52,6 +52,7 @@ import emu.grasscutter.server.packet.send.PacketPlayerPropNotify;
|
|||||||
import emu.grasscutter.server.packet.send.PacketPlayerStoreNotify;
|
import emu.grasscutter.server.packet.send.PacketPlayerStoreNotify;
|
||||||
import emu.grasscutter.server.packet.send.PacketPrivateChatNotify;
|
import emu.grasscutter.server.packet.send.PacketPrivateChatNotify;
|
||||||
import emu.grasscutter.server.packet.send.PacketScenePlayerLocationNotify;
|
import emu.grasscutter.server.packet.send.PacketScenePlayerLocationNotify;
|
||||||
|
import emu.grasscutter.server.packet.send.PacketPlayerLevelRewardUpdateNotify;
|
||||||
import emu.grasscutter.server.packet.send.PacketSetNameCardRsp;
|
import emu.grasscutter.server.packet.send.PacketSetNameCardRsp;
|
||||||
import emu.grasscutter.server.packet.send.PacketStoreWeightLimitNotify;
|
import emu.grasscutter.server.packet.send.PacketStoreWeightLimitNotify;
|
||||||
import emu.grasscutter.server.packet.send.PacketUnlockNameCardNotify;
|
import emu.grasscutter.server.packet.send.PacketUnlockNameCardNotify;
|
||||||
@ -96,6 +97,7 @@ public class GenshinPlayer {
|
|||||||
private MpSettingType mpSetting = MpSettingType.MpSettingEnterAfterApply;
|
private MpSettingType mpSetting = MpSettingType.MpSettingEnterAfterApply;
|
||||||
private boolean showAvatar;
|
private boolean showAvatar;
|
||||||
private ArrayList<AvatarProfileData> shownAvatars;
|
private ArrayList<AvatarProfileData> shownAvatars;
|
||||||
|
private Set<Integer> rewardedLevels;
|
||||||
|
|
||||||
private int sceneId;
|
private int sceneId;
|
||||||
private int regionId;
|
private int regionId;
|
||||||
@ -143,6 +145,7 @@ public class GenshinPlayer {
|
|||||||
this.clientAbilityInitFinishHandler = new InvokeHandler(PacketClientAbilityInitFinishNotify.class);
|
this.clientAbilityInitFinishHandler = new InvokeHandler(PacketClientAbilityInitFinishNotify.class);
|
||||||
|
|
||||||
this.birthday = new PlayerBirthday();
|
this.birthday = new PlayerBirthday();
|
||||||
|
this.rewardedLevels = new HashSet<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// On player creation
|
// On player creation
|
||||||
@ -656,6 +659,14 @@ public class GenshinPlayer {
|
|||||||
this.updateProfile();
|
this.updateProfile();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Set<Integer> getRewardedLevels() {
|
||||||
|
return rewardedLevels;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRewardedLevels(Set<Integer> rewardedLevels) {
|
||||||
|
this.rewardedLevels = rewardedLevels;
|
||||||
|
}
|
||||||
|
|
||||||
public SocialDetail.Builder getSocialDetail() {
|
public SocialDetail.Builder getSocialDetail() {
|
||||||
SocialDetail.Builder social = SocialDetail.newBuilder()
|
SocialDetail.Builder social = SocialDetail.newBuilder()
|
||||||
.setUid(this.getUid())
|
.setUid(this.getUid())
|
||||||
@ -773,6 +784,7 @@ public class GenshinPlayer {
|
|||||||
session.send(new PacketAvatarDataNotify(this));
|
session.send(new PacketAvatarDataNotify(this));
|
||||||
|
|
||||||
session.send(new PacketPlayerEnterSceneNotify(this)); // Enter game world
|
session.send(new PacketPlayerEnterSceneNotify(this)); // Enter game world
|
||||||
|
session.send(new PacketPlayerLevelRewardUpdateNotify(rewardedLevels));
|
||||||
session.send(new PacketOpenStateUpdateNotify());
|
session.send(new PacketOpenStateUpdateNotify());
|
||||||
|
|
||||||
// First notify packets sent
|
// First notify packets sent
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
package emu.grasscutter.server.packet.recv;
|
||||||
|
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import emu.grasscutter.Grasscutter;
|
||||||
|
import emu.grasscutter.data.GenshinData;
|
||||||
|
import emu.grasscutter.data.common.RewardItemData;
|
||||||
|
import emu.grasscutter.game.inventory.GenshinItem;
|
||||||
|
import emu.grasscutter.game.props.ActionReason;
|
||||||
|
import emu.grasscutter.net.packet.Opcodes;
|
||||||
|
import emu.grasscutter.net.packet.PacketHandler;
|
||||||
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.TakePlayerLevelRewardReqOuterClass.TakePlayerLevelRewardReq;
|
||||||
|
import emu.grasscutter.server.game.GameSession;
|
||||||
|
import emu.grasscutter.server.packet.send.PacketItemAddHintNotify;
|
||||||
|
import emu.grasscutter.server.packet.send.PacketTakePlayerLevelRewardRsp;
|
||||||
|
|
||||||
|
@Opcodes(PacketOpcodes.TakePlayerLevelRewardReq)
|
||||||
|
public class HandlerTakePlayerLevelRewardReq extends PacketHandler {
|
||||||
|
@Override
|
||||||
|
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||||
|
TakePlayerLevelRewardReq req = TakePlayerLevelRewardReq.parseFrom(payload);
|
||||||
|
|
||||||
|
int level = req.getLevel();
|
||||||
|
int rewardId = GenshinData.getPlayerLevelDataMap().get(level).getRewardId();
|
||||||
|
|
||||||
|
if (rewardId != 0) {
|
||||||
|
List<RewardItemData> rewardItems = GenshinData.getRewardDataMap().get(rewardId).getRewardItemList();
|
||||||
|
List<GenshinItem> items = new LinkedList<>();
|
||||||
|
for (RewardItemData rewardItem : rewardItems) {
|
||||||
|
if (rewardItem != null) {
|
||||||
|
if (rewardItem.getItemId() != 0) {
|
||||||
|
items.add(new GenshinItem(rewardItem.getItemId(), rewardItem.getItemCount()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
session.getPlayer().getInventory().addItems(items);
|
||||||
|
session.getPlayer().sendPacket(new PacketItemAddHintNotify(items, ActionReason.PlayerUpgradeReward));
|
||||||
|
Set<Integer> rewardedLevels = session.getPlayer().getRewardedLevels();
|
||||||
|
rewardedLevels.add(level);
|
||||||
|
session.getPlayer().setRewardedLevels(rewardedLevels);
|
||||||
|
}
|
||||||
|
|
||||||
|
session.send(new PacketTakePlayerLevelRewardRsp(level, rewardId));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package emu.grasscutter.server.packet.send;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.PlayerLevelRewardUpdateNotifyOuterClass.PlayerLevelRewardUpdateNotify;
|
||||||
|
|
||||||
|
public class PacketPlayerLevelRewardUpdateNotify extends GenshinPacket {
|
||||||
|
|
||||||
|
public PacketPlayerLevelRewardUpdateNotify(Set<Integer> rewardedLevels) {
|
||||||
|
super(PacketOpcodes.PlayerLevelRewardUpdateNotify);
|
||||||
|
|
||||||
|
PlayerLevelRewardUpdateNotify.Builder proto = PlayerLevelRewardUpdateNotify.newBuilder();
|
||||||
|
|
||||||
|
for (Integer level : rewardedLevels) {
|
||||||
|
proto.addLevelList(level);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setData(proto.build());
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package emu.grasscutter.server.packet.send;
|
||||||
|
|
||||||
|
import emu.grasscutter.net.packet.GenshinPacket;
|
||||||
|
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||||
|
import emu.grasscutter.net.proto.TakePlayerLevelRewardRspOuterClass.TakePlayerLevelRewardRsp;
|
||||||
|
|
||||||
|
public class PacketTakePlayerLevelRewardRsp extends GenshinPacket {
|
||||||
|
|
||||||
|
public PacketTakePlayerLevelRewardRsp(int level, int rewardId) {
|
||||||
|
super(PacketOpcodes.TakePlayerLevelRewardRsp);
|
||||||
|
|
||||||
|
int retcode = 0;
|
||||||
|
|
||||||
|
if (rewardId == 0) {
|
||||||
|
retcode = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
TakePlayerLevelRewardRsp proto = TakePlayerLevelRewardRsp.newBuilder()
|
||||||
|
.setLevel(level)
|
||||||
|
.setRewardId(rewardId)
|
||||||
|
.setRetcode(retcode)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
this.setData(proto);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user