mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-18 18:05:05 +01:00
Refactor support for codex(aka archive) animal, weapon, reliquary
This commit is contained in:
@@ -0,0 +1,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.QueryCodexMonsterBeKilledNumReqOuterClass;
|
||||
import emu.grasscutter.net.proto.QueryCodexMonsterBeKilledNumReqOuterClass.QueryCodexMonsterBeKilledNumReq;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
import emu.grasscutter.server.packet.send.PacketQueryCodexMonsterBeKilledNumRsp;
|
||||
|
||||
@Opcodes(PacketOpcodes.QueryCodexMonsterBeKilledNumReq)
|
||||
public class HandlerQueryCodexMonsterBeKilledNumReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
QueryCodexMonsterBeKilledNumReq req = QueryCodexMonsterBeKilledNumReq.parseFrom(payload);
|
||||
session.send(new PacketQueryCodexMonsterBeKilledNumRsp(session.getPlayer(), req.getCodexIdListList()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,17 +1,13 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.CodexDataFullNotifyOuterClass.CodexDataFullNotify;
|
||||
import emu.grasscutter.net.proto.CodexTypeDataOuterClass.CodexTypeData;
|
||||
import emu.grasscutter.net.proto.CodexTypeOuterClass;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
public class PacketCodexDataFullNotify extends BasePacket {
|
||||
public PacketCodexDataFullNotify(Player player) {
|
||||
@@ -21,6 +17,22 @@ public class PacketCodexDataFullNotify extends BasePacket {
|
||||
CodexTypeData.Builder questTypeData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(1);
|
||||
|
||||
//Weapons
|
||||
CodexTypeData.Builder weaponTypeData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(2);
|
||||
|
||||
//Animals
|
||||
CodexTypeData.Builder animalTypeData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(3);
|
||||
|
||||
//Materials
|
||||
CodexTypeData.Builder materialTypeData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(4);
|
||||
|
||||
//Books
|
||||
CodexTypeData.Builder bookTypeData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(5);
|
||||
|
||||
//Tips
|
||||
CodexTypeData.Builder pushTipsTypeData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(6);
|
||||
@@ -29,25 +41,53 @@ public class PacketCodexDataFullNotify extends BasePacket {
|
||||
CodexTypeData.Builder viewTypeData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(7);
|
||||
|
||||
//Weapons
|
||||
CodexTypeData.Builder weaponTypeData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(2);
|
||||
|
||||
//Reliquary
|
||||
CodexTypeData.Builder reliquaryData = CodexTypeData.newBuilder()
|
||||
.setTypeValue(8);
|
||||
|
||||
player.getQuestManager().forEachMainQuest(mainQuest -> {
|
||||
if(mainQuest.isFinished()){
|
||||
var codexQuest = GameData.getCodexQuestIdMap().get(mainQuest.getParentQuestId());
|
||||
var codexQuest = GameData.getCodexQuestDataIdMap().get(mainQuest.getParentQuestId());
|
||||
if(codexQuest != null){
|
||||
questTypeData.addCodexIdList(codexQuest.getId()).addAllHaveViewedList(Collections.singleton(true));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
player.getCodex().getUnlockedWeapon().forEach(weapon -> {
|
||||
var codexWeapon = GameData.getCodexWeaponDataIdMap().get(weapon);
|
||||
if(codexWeapon != null){
|
||||
weaponTypeData.addCodexIdList(codexWeapon.getId()).addAllHaveViewedList(Collections.singleton(true));
|
||||
}
|
||||
});
|
||||
|
||||
player.getCodex().getUnlockedAnimal().forEach((animal, amount) -> {
|
||||
var codexAnimal = GameData.getCodexAnimalDataMap().get(animal);
|
||||
if(codexAnimal != null){
|
||||
animalTypeData.addCodexIdList(codexAnimal.getId()).addAllHaveViewedList(Collections.singleton(true));
|
||||
}
|
||||
});
|
||||
|
||||
player.getCodex().getUnlockedMaterial().forEach(material -> {
|
||||
var codexMaterial = GameData.getCodexMaterialDataIdMap().get(material);
|
||||
if(codexMaterial != null){
|
||||
materialTypeData.addCodexIdList(codexMaterial.getId()).addAllHaveViewedList(Collections.singleton(true));
|
||||
}
|
||||
});
|
||||
|
||||
player.getCodex().getUnlockedReliquarySuitCodex().forEach(reliquarySuit -> {
|
||||
reliquaryData.addCodexIdList(reliquarySuit).addAllHaveViewedList(Collections.singleton(true));
|
||||
});
|
||||
|
||||
CodexDataFullNotify.Builder proto = CodexDataFullNotify.newBuilder()
|
||||
.addTypeDataList(questTypeData.build())
|
||||
.addTypeDataList(weaponTypeData)
|
||||
.addTypeDataList(animalTypeData)
|
||||
.addTypeDataList(materialTypeData)
|
||||
.addTypeDataList(bookTypeData)
|
||||
.addTypeDataList(pushTipsTypeData.build())
|
||||
.addTypeDataList(viewTypeData.build())
|
||||
.addTypeDataList(weaponTypeData);
|
||||
.addTypeDataList(reliquaryData);
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
@@ -1,21 +1,15 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import emu.grasscutter.data.GameData;
|
||||
import emu.grasscutter.game.player.Player;
|
||||
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.CodexDataUpdateNotifyOuterClass.CodexDataUpdateNotify;
|
||||
import emu.grasscutter.server.game.GameSession;
|
||||
|
||||
public class PacketCodexDataUpdateNotify extends BasePacket {
|
||||
public PacketCodexDataUpdateNotify(GameMainQuest quest) {
|
||||
super(PacketOpcodes.CodexDataUpdateNotify, true);
|
||||
var codexQuest = GameData.getCodexQuestIdMap().get(quest.getParentQuestId());
|
||||
var codexQuest = GameData.getCodexQuestDataIdMap().get(quest.getParentQuestId());
|
||||
if(codexQuest != null){
|
||||
CodexDataUpdateNotify proto = CodexDataUpdateNotify.newBuilder()
|
||||
.setTypeValue(1)
|
||||
@@ -24,4 +18,13 @@ public class PacketCodexDataUpdateNotify extends BasePacket {
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
public PacketCodexDataUpdateNotify(int typeValue, int codexId){
|
||||
super(PacketOpcodes.CodexDataUpdateNotify, true);
|
||||
CodexDataUpdateNotify proto = CodexDataUpdateNotify.newBuilder()
|
||||
.setTypeValue(typeValue)
|
||||
.setId(codexId)
|
||||
.build();
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package emu.grasscutter.server.packet.send;
|
||||
|
||||
import emu.grasscutter.game.player.Player;
|
||||
import emu.grasscutter.net.packet.BasePacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
import emu.grasscutter.net.proto.QueryCodexMonsterBeKilledNumRspOuterClass.QueryCodexMonsterBeKilledNumRsp;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class PacketQueryCodexMonsterBeKilledNumRsp extends BasePacket {
|
||||
|
||||
public PacketQueryCodexMonsterBeKilledNumRsp(Player player, List<Integer> codexList) {
|
||||
super(PacketOpcodes.QueryCodexMonsterBeKilledNumRsp);
|
||||
QueryCodexMonsterBeKilledNumRsp.Builder proto = QueryCodexMonsterBeKilledNumRsp.newBuilder();
|
||||
|
||||
codexList.forEach(animal -> {
|
||||
if(player.getCodex().getUnlockedAnimal().containsKey(animal)){
|
||||
proto.addCodexIdList(animal)
|
||||
.addBeKilledNumList(player.getCodex().getUnlockedAnimal().get(animal))
|
||||
.addBeKilledNumEmptyList(0);
|
||||
}
|
||||
});
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
@@ -12,13 +12,15 @@ public class PacketServerCondMeetQuestListUpdateNotify extends BasePacket {
|
||||
super(PacketOpcodes.ServerCondMeetQuestListUpdateNotify);
|
||||
|
||||
ServerCondMeetQuestListUpdateNotify.Builder proto = ServerCondMeetQuestListUpdateNotify.newBuilder();
|
||||
|
||||
|
||||
/*
|
||||
player.getQuestManager().forEachQuest(quest -> {
|
||||
if (quest.getState().getValue() <= 2) {
|
||||
proto.addAddQuestIdList(quest.getQuestId());
|
||||
}
|
||||
});
|
||||
|
||||
*/
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
|
||||
@@ -26,9 +28,9 @@ public class PacketServerCondMeetQuestListUpdateNotify extends BasePacket {
|
||||
super(PacketOpcodes.ServerCondMeetQuestListUpdateNotify);
|
||||
|
||||
ServerCondMeetQuestListUpdateNotify proto = ServerCondMeetQuestListUpdateNotify.newBuilder()
|
||||
.addAddQuestIdList(quest.getQuestId())
|
||||
//.addAddQuestIdList(quest.getQuestId())
|
||||
.build();
|
||||
|
||||
|
||||
this.setData(proto);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user