mirror of
https://github.com/Melledy/LunarCore.git
synced 2026-03-25 00:12:29 +01:00
Update to support game version 2.2.0
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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<>();
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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 ===
|
||||
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user