mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-19 02:15:45 +01:00
quest fix & personal line impl
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.AddQuestContentProgressReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketAddQuestContentProgressRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.AddQuestContentProgressReq)
|
||||
public class HandlerAddQuestContentProgressReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = AddQuestContentProgressReqOuterClass.AddQuestContentProgressReq.parseFrom(payload);
|
||||
|
||||
session.getPlayer().getQuestManager().triggerEvent(QuestTrigger.getContentTriggerByValue(req.getContentType()), req.getParam());
|
||||
|
||||
session.send(new PacketAddQuestContentProgressRsp(req.getContentType()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.ChangeGameTimeReqOuterClass.ChangeGameTimeReq;
|
||||
@@ -9,12 +10,15 @@ import emu.grasscutter.server.packet.send.PacketChangeGameTimeRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.ChangeGameTimeReq)
|
||||
public class HandlerChangeGameTimeReq extends PacketHandler {
|
||||
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
ChangeGameTimeReq req = ChangeGameTimeReq.parseFrom(payload);
|
||||
|
||||
|
||||
session.getPlayer().getScene().changeTime(req.getGameTime());
|
||||
session.getPlayer().getQuestManager().triggerEvent(QuestTrigger.QUEST_CONTENT_GAME_TIME_TICK,
|
||||
req.getGameTime() / 60 , // hours
|
||||
req.getExtraDays()); //days
|
||||
session.getPlayer().sendPacket(new PacketChangeGameTimeRsp(session.getPlayer()));
|
||||
}
|
||||
|
||||
|
||||
@@ -32,6 +32,12 @@ public class HandlerEnterSceneDoneReq extends PacketHandler {
|
||||
|
||||
// spawn NPC
|
||||
session.getPlayer().getScene().loadNpcForPlayerEnter(session.getPlayer());
|
||||
|
||||
// notify client to load the npc for quest
|
||||
var questGroupSuites = session.getPlayer().getQuestManager().getSceneGroupSuite(session.getPlayer().getSceneId());
|
||||
session.getPlayer().getScene().loadGroupForQuest(questGroupSuites);
|
||||
session.send(new PacketGroupSuiteNotify(questGroupSuites));
|
||||
|
||||
// Reset timer for sending player locations
|
||||
session.getPlayer().resetSendPlayerLocTime();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
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.EvtEntityRenderersChangedNotifyOuterClass;
|
||||
import emu.grasscutter.net.proto.ForwardTypeOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketEvtEntityRenderersChangedNotify;
|
||||
import emu.grasscutter.server.packet.send.PacketWorldPlayerLocationNotify;
|
||||
|
||||
@Opcodes(PacketOpcodes.EvtEntityRenderersChangedNotify)
|
||||
public class HandlerEvtEntityRenderersChangedNotify extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = EvtEntityRenderersChangedNotifyOuterClass.EvtEntityRenderersChangedNotify.parseFrom(payload);
|
||||
|
||||
switch (req.getForwardType()) {
|
||||
case FORWARD_TYPE_TO_ALL ->
|
||||
session.getPlayer().getScene().broadcastPacket(new PacketEvtEntityRenderersChangedNotify(req));
|
||||
case FORWARD_TYPE_TO_ALL_EXCEPT_CUR ->
|
||||
session.getPlayer().getScene().broadcastPacketToOthers(session.getPlayer(), new PacketEvtEntityRenderersChangedNotify(req));
|
||||
case FORWARD_TYPE_TO_HOST ->
|
||||
session.getPlayer().getScene().getWorld().getHost().sendPacket(new PacketEvtEntityRenderersChangedNotify(req));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.GadgetInteractReqOuterClass.GadgetInteractReq;
|
||||
@@ -8,11 +9,12 @@ import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
@Opcodes(PacketOpcodes.GadgetInteractReq)
|
||||
public class HandlerGadgetInteractReq extends PacketHandler {
|
||||
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
GadgetInteractReq req = GadgetInteractReq.parseFrom(payload);
|
||||
|
||||
|
||||
session.getPlayer().getQuestManager().triggerEvent(QuestTrigger.QUEST_CONTENT_INTERACT_GADGET, req.getGadgetId());
|
||||
session.getPlayer().interactWith(req.getGadgetEntityId(), req);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
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.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketPersonalLineAllDataRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.PersonalLineAllDataReq)
|
||||
public class HandlerPersonalLineAllDataReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
session.send(new PacketPersonalLineAllDataRsp(session.getPlayer().getQuestManager().getQuests().values()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.props.SceneType;
|
||||
import emu.grasscutter.game.quest.enums.QuestTrigger;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
@@ -8,9 +10,13 @@ import emu.grasscutter.server.packet.send.PacketPostEnterSceneRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.PostEnterSceneReq)
|
||||
public class HandlerPostEnterSceneReq extends PacketHandler {
|
||||
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
if(session.getPlayer().getScene().getSceneType() == SceneType.SCENE_ROOM){
|
||||
session.getPlayer().getQuestManager().triggerEvent(QuestTrigger.QUEST_CONTENT_ENTER_ROOM, session.getPlayer().getSceneId());
|
||||
}
|
||||
|
||||
session.send(new PacketPostEnterSceneRsp(session.getPlayer()));
|
||||
}
|
||||
|
||||
|
||||
@@ -3,14 +3,21 @@ 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.QueryPathReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketQueryPathRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.QueryPathReq)
|
||||
public class HandlerQueryPathReq extends PacketHandler {
|
||||
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
// Auto template
|
||||
var req = QueryPathReqOuterClass.QueryPathReq.parseFrom(payload);
|
||||
|
||||
/**
|
||||
* It is not the actual work
|
||||
*/
|
||||
session.send(new PacketQueryPathRsp(req));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.UnlockPersonalLineReqOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketUnlockPersonalLineRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.UnlockPersonalLineReq)
|
||||
public class HandlerUnlockPersonalLineReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
var req = UnlockPersonalLineReqOuterClass.UnlockPersonalLineReq.parseFrom(payload);
|
||||
var data = GameData.getPersonalLineDataMap().get(req.getPersonalLineId());
|
||||
if(data == null){
|
||||
return;
|
||||
}
|
||||
|
||||
session.getPlayer().getQuestManager().addQuest(data.getStartQuestId());
|
||||
session.getPlayer().useLegendaryKey(1);
|
||||
|
||||
session.send(new PacketUnlockPersonalLineRsp(data.getId(), 1, data.getChapterId()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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.AddQuestContentProgressRspOuterClass;
|
||||
|
||||
public class PacketAddQuestContentProgressRsp extends BasePacket {
|
||||
|
||||
public PacketAddQuestContentProgressRsp(int contentType) {
|
||||
super(PacketOpcodes.AddQuestContentProgressRsp);
|
||||
|
||||
var proto = AddQuestContentProgressRspOuterClass.AddQuestContentProgressRsp.newBuilder();
|
||||
|
||||
proto.setContentType(contentType);
|
||||
|
||||
this.setData(proto);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.ChapterStateNotifyOuterClass;
|
||||
import emu.grasscutter.net.proto.ChapterStateOuterClass;
|
||||
|
||||
public class PacketChapterStateNotify extends BasePacket {
|
||||
|
||||
public PacketChapterStateNotify(int id, ChapterStateOuterClass.ChapterState state) {
|
||||
super(PacketOpcodes.ChapterStateNotify);
|
||||
|
||||
var proto = ChapterStateNotifyOuterClass.ChapterStateNotify.newBuilder();
|
||||
|
||||
proto.setChapterId(id)
|
||||
.setChapterState(state);
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.EvtEntityRenderersChangedNotifyOuterClass;
|
||||
|
||||
public class PacketEvtEntityRenderersChangedNotify extends BasePacket {
|
||||
|
||||
public PacketEvtEntityRenderersChangedNotify(EvtEntityRenderersChangedNotifyOuterClass.EvtEntityRenderersChangedNotify req) {
|
||||
super(PacketOpcodes.EvtEntityRenderersChangedNotify, true);
|
||||
|
||||
this.setData(req);
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,12 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.data.binout.SceneNpcBornEntry;
|
||||
import emu.grasscutter.game.quest.QuestGroupSuite;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.GroupSuiteNotifyOuterClass;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class PacketGroupSuiteNotify extends BasePacket {
|
||||
@@ -27,4 +29,24 @@ public class PacketGroupSuiteNotify extends BasePacket {
|
||||
this.setData(proto);
|
||||
|
||||
}
|
||||
|
||||
public PacketGroupSuiteNotify(int groupId, int suiteId) {
|
||||
super(PacketOpcodes.GroupSuiteNotify);
|
||||
|
||||
var proto = GroupSuiteNotifyOuterClass.GroupSuiteNotify.newBuilder();
|
||||
|
||||
proto.putGroupMap(groupId, suiteId);
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
public PacketGroupSuiteNotify(Collection<QuestGroupSuite> questGroupSuites) {
|
||||
super(PacketOpcodes.GroupSuiteNotify);
|
||||
|
||||
var proto = GroupSuiteNotifyOuterClass.GroupSuiteNotify.newBuilder();
|
||||
|
||||
questGroupSuites.forEach(i -> proto.putGroupMap(i.getGroup(), i.getSuite()));
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.game.quest.GameMainQuest;
|
||||
import emu.grasscutter.game.quest.GameQuest;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.PersonalLineAllDataRspOuterClass;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PacketPersonalLineAllDataRsp extends BasePacket {
|
||||
|
||||
public PacketPersonalLineAllDataRsp(Collection<GameMainQuest> gameMainQuestList) {
|
||||
super(PacketOpcodes.PersonalLineAllDataRsp);
|
||||
|
||||
var proto = PersonalLineAllDataRspOuterClass.PersonalLineAllDataRsp.newBuilder();
|
||||
|
||||
var questList = gameMainQuestList.stream()
|
||||
.map(GameMainQuest::getChildQuests)
|
||||
.map(Map::values)
|
||||
.flatMap(Collection::stream)
|
||||
.map(GameQuest::getQuestId)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
GameData.getPersonalLineDataMap().values().stream()
|
||||
.filter(i -> !questList.contains(i.getStartQuestId()))
|
||||
.forEach(i -> proto.addCanBeUnlockedPersonalLineList(i.getId()));
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.QueryPathReqOuterClass;
|
||||
import emu.grasscutter.net.proto.QueryPathRspOuterClass;
|
||||
|
||||
public class PacketQueryPathRsp extends BasePacket {
|
||||
|
||||
public PacketQueryPathRsp(QueryPathReqOuterClass.QueryPathReq req) {
|
||||
super(PacketOpcodes.QueryPathRsp);
|
||||
|
||||
var proto = QueryPathRspOuterClass.QueryPathRsp.newBuilder();
|
||||
|
||||
proto.addCorners(req.getSourcePos())
|
||||
.addCorners(req.getDestinationPos(0))
|
||||
.setQueryId(req.getQueryId())
|
||||
.setQueryStatus(QueryPathRspOuterClass.QueryPathRsp.PathStatusType.PATH_STATUS_TYPE_SUCC);
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.UnlockPersonalLineRspOuterClass;
|
||||
|
||||
public class PacketUnlockPersonalLineRsp extends BasePacket {
|
||||
|
||||
public PacketUnlockPersonalLineRsp(int id, int level, int chapterId) {
|
||||
super(PacketOpcodes.UnlockPersonalLineRsp);
|
||||
|
||||
var proto = UnlockPersonalLineRspOuterClass.UnlockPersonalLineRsp.newBuilder();
|
||||
|
||||
proto.setPersonalLineId(id)
|
||||
.setLevel(level)
|
||||
.setChapterId(chapterId);
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user