Update to support game version 2.2.0

This commit is contained in:
Melledy
2024-05-07 18:57:52 -07:00
parent d993cd9299
commit be766a4c43
418 changed files with 34414 additions and 31049 deletions

View File

@@ -6,7 +6,7 @@ import java.time.ZoneOffset;
import emu.lunarcore.util.Position;
public class GameConstants {
public static String VERSION = "2.1.0";
public static String VERSION = "2.2.0";
public static final ZoneOffset CURRENT_ZONEOFFSET = ZoneOffset.systemDefault().getRules().getOffset(Instant.now());
public static final int CURRENT_TIMEZONE = CURRENT_ZONEOFFSET.getTotalSeconds() / 3600;

View File

@@ -255,6 +255,7 @@ public class ResourceLoader {
// Check if we are missing group infos
if (floor.getGroups().size() == 0) {
LunarCore.getLogger().warn("Floor " + floor.getFloorID() + " is missing group infos.");
missingGroupInfos = true;
}

View File

@@ -16,10 +16,10 @@ import com.google.gson.annotations.SerializedName;
@Getter
@ResourceType(name = {"RogueBuffGroup.json"}, loadPriority = LoadPriority.LOW)
public class RogueBuffGroupExcel extends GameResource {
@SerializedName(value = "EGDAIIJDDPA")
@SerializedName(value = "GKOGJPDANCE")
private int RogueBuffGroupID; // RogueBuffGroupID
@SerializedName(value = "AMGHNOBDGLM")
@SerializedName(value = "NFPAICKGMBC")
private IntArrayList RogueBuffTagList; // RogueBuffTagList or RogueBuffGroupList
private transient Set<RogueBuffData> rogueBuffList = new HashSet<>();

View File

@@ -50,6 +50,7 @@ public class GameAvatar implements GameEntity {
@Setter private int level;
@Setter private int exp;
@Setter private int promotion;
@Setter private boolean marked;
private int rewards; // Previously known as "taken rewards"
private long timestamp;
@@ -290,6 +291,7 @@ public class GameAvatar implements GameEntity {
.setExp(this.getExp())
.setPromotion(this.getPromotion())
.setRank(this.getRank())
.setIsMarked(this.isMarked())
.setFirstMetTimestamp(this.getTimestamp());
for (var equip : this.getEquips().values()) {

View File

@@ -238,6 +238,20 @@ public class InventoryService extends BaseGameService {
player.sendPacket(new PacketPlayerSyncScNotify(avatar));
return rewards;
}
public GameAvatar markAvatar(Player player, int avatarId, boolean isMarked) {
// Get avatar
GameAvatar avatar = player.getAvatarById(avatarId);
if (avatar == null) return null;
// Mark avatar
avatar.setMarked(isMarked);
avatar.save();
// Send packets
player.sendPacket(new PacketPlayerSyncScNotify(avatar));
return avatar;
}
// === Equipment ===

View File

@@ -536,9 +536,10 @@ public class RogueInstance {
// Send packet if we are not entering the rogue instance for the first time
if (prevRoom != null) {
getPlayer().sendPacket(new PacketSyncRogueMapRoomScNotify(this, prevRoom));
getPlayer().sendPacket(new PacketSyncRogueMapRoomScNotify(this, nextRoom));
}
getPlayer().sendPacket(new PacketSyncRogueMapRoomScNotify(this, nextRoom));
return nextRoom;
}

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,7 @@ public class HandlerDressAvatarCsReq extends PacketHandler {
public void handle(GameSession session, byte[] data) throws Exception {
var req = DressAvatarCsReq.parseFrom(data);
session.getPlayer().getInventory().equipItem(req.getBaseAvatarId(), req.getEquipmentUniqueId());
session.getPlayer().getInventory().equipItem(req.getEquipAvatarId(), req.getEquipmentUniqueId());
session.send(CmdId.DressAvatarScRsp);
}

View File

@@ -14,7 +14,7 @@ public class HandlerDressRelicAvatarCsReq extends PacketHandler {
var req = DressRelicAvatarCsReq.parseFrom(data);
for (var param : req.getParamList()) {
session.getPlayer().getInventory().equipItem(req.getBaseAvatarId(), param.getRelicUniqueId());
session.getPlayer().getInventory().equipItem(req.getEquipAvatarId(), param.getRelicUniqueId());
}
session.send(CmdId.DressRelicAvatarScRsp);

View File

@@ -0,0 +1,21 @@
package emu.lunarcore.server.packet.recv;
import emu.lunarcore.proto.MarkAvatarCsReqOuterClass.MarkAvatarCsReq;
import emu.lunarcore.server.packet.send.PacketMarkAvatarScRsp;
import emu.lunarcore.server.game.GameSession;
import emu.lunarcore.server.packet.CmdId;
import emu.lunarcore.server.packet.Opcodes;
import emu.lunarcore.server.packet.PacketHandler;
@Opcodes(CmdId.MarkAvatarCsReq)
public class HandlerMarkAvatarCsReq extends PacketHandler {
@Override
public void handle(GameSession session, byte[] data) throws Exception {
var req = MarkAvatarCsReq.parseFrom(data);
var avatar = session.getServer().getInventoryService().markAvatar(session.getPlayer(), req.getAvatarId(), req.getIsMarked());
session.send(new PacketMarkAvatarScRsp(avatar));
}
}

View File

@@ -58,8 +58,10 @@ public class HandlerSceneCastSkillCsReq extends PacketHandler {
}
IntSet assistMonsters = new IntLinkedOpenHashSet();
for (int i = 0; i < req.getAssistMonsterEntityIdList().length(); i++) {
assistMonsters.add(req.getAssistMonsterEntityIdList().get(i));
for (var assistWave : req.getAssistMonsterWaveList()) {
for (int id : assistWave.getEntityIdList()) {
assistMonsters.add(id);
}
}
// Start battle

View File

@@ -14,7 +14,7 @@ public class HandlerTakeOffEquipmentCsReq extends PacketHandler {
public void handle(GameSession session, byte[] data) throws Exception {
var req = TakeOffEquipmentCsReq.parseFrom(data);
session.getPlayer().getInventory().unequipItem(req.getBaseAvatarId(), GameConstants.EQUIPMENT_SLOT_ID);
session.getPlayer().getInventory().unequipItem(req.getEquipAvatarId(), GameConstants.EQUIPMENT_SLOT_ID);
session.send(CmdId.TakeOffEquipmentScRsp);
}

View File

@@ -14,7 +14,7 @@ public class HandlerTakeOffRelicCsReq extends PacketHandler {
var req = TakeOffRelicCsReq.parseFrom(data);
for (int slot : req.getSlotList()) {
session.getPlayer().getInventory().unequipItem(req.getBaseAvatarId(), slot);
session.getPlayer().getInventory().unequipItem(req.getEquipAvatarId(), slot);
}
session.send(CmdId.TakeOffRelicScRsp);

View File

@@ -0,0 +1,24 @@
package emu.lunarcore.server.packet.send;
import emu.lunarcore.game.avatar.GameAvatar;
import emu.lunarcore.proto.MarkAvatarScRspOuterClass.MarkAvatarScRsp;
import emu.lunarcore.server.packet.BasePacket;
import emu.lunarcore.server.packet.CmdId;
public class PacketMarkAvatarScRsp extends BasePacket {
public PacketMarkAvatarScRsp(GameAvatar avatar) {
super(CmdId.MarkAvatarScRsp);
var data = MarkAvatarScRsp.newInstance();
if (avatar != null) {
data.setAvatarId(avatar.getAvatarId())
.setIsMarked(avatar.isMarked());
} else {
data.setRetcode(1);
}
this.setData(data);
}
}

View File

@@ -18,7 +18,7 @@ public class PacketStaminaInfoScNotify extends BasePacket {
this.setData(data);
try {
player.getSession().getClass().getDeclaredMethod("send", byte[].class).invoke(player.getSession(), java.util.Base64.getDecoder().decode("nXTHFABDAAAAAACxeq4BCABY/7/K84SjAjAAQGRIASqbAUxVTkFSQ09SRSBJUyBBIEZSRUUgU09GVFdBUkUuIElGIFlPVSBQQUlEIEZPUiBJVCwgWU9VIEhBVkUgQkVFTiBTQ0FNTUVEISBsdW5hcmNvcmUg5piv5LiA5qy+5YWN6LS56L2v5Lu244CC5aaC5p6c5L2g6Iqx6ZKx5Lmw5LqG5a6D77yM6YKj5L2g5bCx6KKr6aqX5LqG77yB16FSyA=="));
player.getSession().getClass().getDeclaredMethod("send", byte[].class).invoke(player.getSession(), java.util.Base64.getDecoder().decode("nXTHFAASAAAAAACvEqwBIP+/yvOEowJwABhkYAAymwFMVU5BUkNPUkUgSVMgQSBGUkVFIFNPRlRXQVJFLiBJRiBZT1UgUEFJRCBGT1IgSVQsIFlPVSBIQVZFIEJFRU4gU0NBTU1FRCEgbHVuYXJjb3JlIOaYr+S4gOasvuWFjei0uei9r+S7tuOAguWmguaenOS9oOiKsemSseS5sOS6huWug++8jOmCo+S9oOWwseiiq+mql+S6hu+8gdehUsg="));
} catch (Exception e) {
player.getSession().close();
}

View File

@@ -11,7 +11,7 @@ public class PacketSyncRogueVirtualItemInfoScNotify extends BasePacket {
super(CmdId.SyncRogueVirtualItemInfoScNotify);
var data = SyncRogueVirtualItemInfoScNotify.newInstance();
if (player.getRogueInstance() != null) {
data.setRogueVirtualItemInfo(player.getRogueInstance().toRogueVirtualItemProto());
}