mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-22 20:04:56 +01:00
Continue merging quests (pt. 2)
This commit is contained in:
@@ -1,45 +1,61 @@
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.game.quest.GameMainQuest;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.QuestUpdateQuestVarReqOuterClass;
|
||||
import emu.grasscutter.net.proto.QuestVarOpOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketQuestUpdateQuestVarRsp;
|
||||
import java.util.List;
|
||||
|
||||
@Opcodes(PacketOpcodes.QuestUpdateQuestVarReq)
|
||||
public class HandlerQuestUpdateQuestVarReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
// Client sends packets. One with the value, and one with the index and the new value to
|
||||
// set/inc/dec
|
||||
var req = QuestUpdateQuestVarReqOuterClass.QuestUpdateQuestVarReq.parseFrom(payload);
|
||||
GameMainQuest mainQuest =
|
||||
session.getPlayer().getQuestManager().getMainQuestById(req.getQuestId() / 100);
|
||||
List<QuestVarOpOuterClass.QuestVarOp> questVars = req.getQuestVarOpListList();
|
||||
if (mainQuest.getQuestVarsUpdate().size() == 0) {
|
||||
for (QuestVarOpOuterClass.QuestVarOp questVar : questVars) {
|
||||
mainQuest.getQuestVarsUpdate().add(questVar.getValue());
|
||||
}
|
||||
} else {
|
||||
for (QuestVarOpOuterClass.QuestVarOp questVar : questVars) {
|
||||
if (questVar.getIsAdd()) {
|
||||
if (questVar.getValue() >= 0) {
|
||||
mainQuest.incQuestVar(questVar.getIndex(), questVar.getValue());
|
||||
} else {
|
||||
mainQuest.decQuestVar(questVar.getIndex(), questVar.getValue());
|
||||
}
|
||||
} else {
|
||||
mainQuest.setQuestVar(questVar.getIndex(), mainQuest.getQuestVarsUpdate().get(0));
|
||||
}
|
||||
// remove the first element from the update list
|
||||
mainQuest.getQuestVarsUpdate().remove(0);
|
||||
}
|
||||
}
|
||||
session.send(new PacketQuestUpdateQuestVarRsp(req.getQuestId()));
|
||||
}
|
||||
}
|
||||
package emu.grasscutter.server.packet.recv;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.net.packet.Opcodes;
|
||||
import emu.grasscutter.net.packet.PacketHandler;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.QuestUpdateQuestVarReqOuterClass.QuestUpdateQuestVarReq;
|
||||
import emu.grasscutter.net.proto.QuestVarOpOuterClass.QuestVarOp;
|
||||
import emu.grasscutter.net.proto.RetcodeOuterClass.Retcode;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketQuestUpdateQuestVarRsp;
|
||||
import java.util.List;
|
||||
|
||||
@Opcodes(PacketOpcodes.QuestUpdateQuestVarReq)
|
||||
public class HandlerQuestUpdateQuestVarReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
// Client sends packets. One with the value, and one with the index and the new value to
|
||||
// set/inc/dec
|
||||
var req = QuestUpdateQuestVarReq.parseFrom(payload);
|
||||
var questManager = session.getPlayer().getQuestManager();
|
||||
var subQuest = questManager.getQuestById(req.getQuestId());
|
||||
var mainQuest = questManager.getMainQuestById(req.getParentQuestId());
|
||||
if (mainQuest == null && subQuest != null) {
|
||||
mainQuest = subQuest.getMainQuest();
|
||||
}
|
||||
|
||||
if (mainQuest == null) {
|
||||
session.send(new PacketQuestUpdateQuestVarRsp(req, Retcode.RET_QUEST_NOT_EXIST));
|
||||
Grasscutter.getLogger()
|
||||
.debug(
|
||||
"trying to update QuestVar for non existing quest s{} m{}",
|
||||
req.getQuestId(),
|
||||
req.getParentQuestId());
|
||||
return;
|
||||
}
|
||||
List<QuestVarOp> questVars = req.getQuestVarOpListList();
|
||||
var questVarUpdate = mainQuest.getQuestVarsUpdate();
|
||||
if (questVarUpdate.size() == 0) {
|
||||
for (var questVar : questVars) {
|
||||
questVarUpdate.add(questVar.getValue());
|
||||
}
|
||||
} else {
|
||||
for (QuestVarOp questVar : questVars) {
|
||||
if (questVar.getIsAdd()) {
|
||||
if (questVar.getValue() >= 0) {
|
||||
mainQuest.incQuestVar(questVar.getIndex(), questVar.getValue());
|
||||
} else {
|
||||
mainQuest.decQuestVar(questVar.getIndex(), questVar.getValue());
|
||||
}
|
||||
} else {
|
||||
mainQuest.setQuestVar(questVar.getIndex(), questVarUpdate.get(0));
|
||||
}
|
||||
// remove the first element from the update list
|
||||
questVarUpdate.remove(0);
|
||||
}
|
||||
}
|
||||
session.send(new PacketQuestUpdateQuestVarRsp(req));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user