implement the activity system

This commit is contained in:
Akka
2022-06-25 11:27:45 +08:00
committed by Melledy
parent 5d35cb49b4
commit 977f1ca2ea
26 changed files with 702 additions and 10 deletions

View File

@@ -3,13 +3,20 @@ package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.proto.GetActivityInfoReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketGetActivityInfoRsp;
import java.util.HashSet;
@Opcodes(PacketOpcodes.GetActivityInfoReq)
public class HandlerGetActivityInfoReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
session.send(new PacketGetActivityInfoRsp());
var req = GetActivityInfoReqOuterClass.GetActivityInfoReq.parseFrom(payload);
session.send(new PacketGetActivityInfoRsp(
new HashSet<>(req.getActivityIdListList()),
session.getPlayer().getActivityManager()));
}
}

View File

@@ -0,0 +1,29 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.game.props.WatcherTriggerType;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameSettleReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketMusicGameSettleRsp;
@Opcodes(PacketOpcodes.MusicGameSettleReq)
public class HandlerMusicGameSettleReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameSettleReqOuterClass.MusicGameSettleReq.parseFrom(payload);
session.getPlayer().getActivityManager().triggerWatcher(
WatcherTriggerType.TRIGGER_FLEUR_FAIR_MUSIC_GAME_REACH_SCORE,
String.valueOf(req.getMusicBasicId()),
String.valueOf(req.getScore())
);
//session.send(new PacketMusicGameSettleRsp(req.getMusicBasicId()));
session.send(new PacketMusicGameSettleRsp(req.getMusicBasicId()));
}
}

View File

@@ -0,0 +1,20 @@
package emu.grasscutter.server.packet.recv;
import emu.grasscutter.net.packet.Opcodes;
import emu.grasscutter.net.packet.PacketHandler;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameStartReqOuterClass;
import emu.grasscutter.server.game.GameSession;
import emu.grasscutter.server.packet.send.PacketMusicGameStartRsp;
@Opcodes(PacketOpcodes.MusicGameStartReq)
public class HandlerMusicGameStartReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
var req = MusicGameStartReqOuterClass.MusicGameStartReq.parseFrom(payload);
session.send(new PacketMusicGameStartRsp(req.getMusicBasicId()));
}
}

View File

@@ -0,0 +1,19 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.ActivityInfoNotifyOuterClass;
import emu.grasscutter.net.proto.ActivityInfoOuterClass;
public class PacketActivityInfoNotify extends BasePacket {
public PacketActivityInfoNotify(ActivityInfoOuterClass.ActivityInfo activityInfo) {
super(PacketOpcodes.ActivityInfoNotify);
var proto = ActivityInfoNotifyOuterClass.ActivityInfoNotify.newBuilder();
proto.setActivityInfo(activityInfo);
this.setData(proto);
}
}

View File

@@ -0,0 +1,31 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.activity.ActivityConfigItem;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.ActivityScheduleInfoNotifyOuterClass;
import emu.grasscutter.net.proto.ActivityScheduleInfoOuterClass;
import emu.grasscutter.utils.DateHelper;
import java.util.Collection;
public class PacketActivityScheduleInfoNotify extends BasePacket {
public PacketActivityScheduleInfoNotify(Collection<ActivityConfigItem> activityConfigItemList) {
super(PacketOpcodes.ActivityScheduleInfoNotify);
var proto = ActivityScheduleInfoNotifyOuterClass.ActivityScheduleInfoNotify.newBuilder();
activityConfigItemList.forEach(item -> {
proto.addActivityScheduleList(ActivityScheduleInfoOuterClass.ActivityScheduleInfo.newBuilder()
.setActivityId(item.getActivityId())
.setScheduleId(item.getScheduleId())
.setIsOpen(true)
.setBeginTime(DateHelper.getUnixTime(item.getBeginTime()))
.setEndTime(DateHelper.getUnixTime(item.getEndTime()))
.build());
});
this.setData(proto);
}
}

View File

@@ -0,0 +1,20 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.activity.PlayerActivityData;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.ActivityUpdateWatcherNotifyOuterClass;
public class PacketActivityUpdateWatcherNotify extends BasePacket {
public PacketActivityUpdateWatcherNotify(int activityId, PlayerActivityData.WatcherInfo watcherInfo) {
super(PacketOpcodes.ActivityUpdateWatcherNotify);
var proto = ActivityUpdateWatcherNotifyOuterClass.ActivityUpdateWatcherNotify.newBuilder();
proto.setActivityId(activityId)
.setWatcherInfo(watcherInfo.toProto());
this.setData(proto);
}
}

View File

@@ -1,15 +1,22 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.game.activity.ActivityManager;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.GetActivityInfoRspOuterClass.GetActivityInfoRsp;
import java.util.Set;
public class PacketGetActivityInfoRsp extends BasePacket {
public PacketGetActivityInfoRsp() {
public PacketGetActivityInfoRsp(Set<Integer> activityIdList, ActivityManager activityManager) {
super(PacketOpcodes.GetActivityInfoRsp);
GetActivityInfoRsp proto = GetActivityInfoRsp.newBuilder().build();
var proto = GetActivityInfoRsp.newBuilder();
activityIdList.stream()
.map(activityManager::getInfoProto)
.forEach(proto::addActivityInfoList);
this.setData(proto);
}
}

View File

@@ -0,0 +1,19 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameSettleRspOuterClass;
public class PacketMusicGameSettleRsp extends BasePacket {
public PacketMusicGameSettleRsp(int musicBasicId) {
super(PacketOpcodes.MusicGameSettleRsp);
var proto = MusicGameSettleRspOuterClass.MusicGameSettleRsp.newBuilder();
proto.setMusicBasicId(musicBasicId)
.setIsNewRecord(true);
this.setData(proto);
}
}

View File

@@ -0,0 +1,18 @@
package emu.grasscutter.server.packet.send;
import emu.grasscutter.net.packet.BasePacket;
import emu.grasscutter.net.packet.PacketOpcodes;
import emu.grasscutter.net.proto.MusicGameStartRspOuterClass;
public class PacketMusicGameStartRsp extends BasePacket {
public PacketMusicGameStartRsp(int musicBasicId) {
super(PacketOpcodes.MusicGameStartRsp);
var proto = MusicGameStartRspOuterClass.MusicGameStartRsp.newBuilder();
proto.setMusicBasicId(musicBasicId);
this.setData(proto);
}
}