Implement battle pass triggers/rewards

This commit is contained in:
Melledy
2022-06-24 01:12:52 -07:00
Unverified
parent 34f7c6e780
commit 5eb1d34b14
32 changed files with 1079 additions and 197 deletions
@@ -1,39 +1,33 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.Grasscutter;
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.excels.BattlePassMissionExcelConfigData;
import java.util.Collection;
import emu.grasscutter.game.battlepass.BattlePassMission;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.BattlePassMissionOuterClass;
import emu.grasscutter.net.proto.BattlePassMissionUpdateNotifyOuterClass;
import emu.grasscutter.server.game.GameSession;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import java.util.List;
import java.util.Map;
import emu.grasscutter.net.proto.BattlePassMissionUpdateNotifyOuterClass.BattlePassMissionUpdateNotify;
public class PacketBattlePassMissionUpdateNotify extends BasePacket {
public PacketBattlePassMissionUpdateNotify(List<Integer> missionIdList , GameSession session) {
public PacketBattlePassMissionUpdateNotify(BattlePassMission mission) {
super(PacketOpcodes.BattlePassMissionUpdateNotify);
var proto
= BattlePassMissionUpdateNotifyOuterClass.BattlePassMissionUpdateNotify.newBuilder();
var proto = BattlePassMissionUpdateNotify.newBuilder()
.addMissionList(mission.toProto())
.build();
Map<Integer, BattlePassMissionExcelConfigData> missionMap
= GameData.getBattlePassMissionExcelConfigDataMap();
this.setData(proto);
}
public PacketBattlePassMissionUpdateNotify(Collection<BattlePassMission> missions) {
super(PacketOpcodes.BattlePassMissionUpdateNotify);
missionIdList.forEach(missionId -> proto.addMissionList
(BattlePassMissionOuterClass.BattlePassMission.newBuilder().setMissionId(missionId).setMissionStatus
(BattlePassMissionOuterClass.BattlePassMission.MissionStatus.MISSION_STATUS_POINT_TAKEN)
.setTotalProgress(missionMap.get(missionId).getProgress()).setRewardBattlePassPoint(missionMap.get(missionId).getAddPoint()).build()));
var point = session.getPlayer().getBattlePassManager().getPoint();
missionIdList.forEach(missionId
-> session.getPlayer().getBattlePassManager().addPoint(missionMap.get(missionId).getAddPoint()));
Grasscutter.getLogger().info("[PacketBattlePassMissionUpdateNotify] addPoint: {}", session.getPlayer().getBattlePassManager().getPoint() - point);
var proto = BattlePassMissionUpdateNotify.newBuilder();
missions.forEach(mission -> {
proto.addMissionList(mission.toProto());
});
this.setData(proto.build());
}