Basic implementation of character emblems

This commit is contained in:
Melledy
2025-11-16 10:16:07 -08:00
parent f2656903e5
commit 6b699d97ee
15 changed files with 739 additions and 19 deletions

View File

@@ -0,0 +1,35 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.CharGemEquipGem.CharGemEquipGemReq;
import emu.nebula.net.HandlerId;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.char_gem_equip_gem_req)
public class HandlerCharGemEquipGemReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = CharGemEquipGemReq.parseFrom(message);
// Get character
var character = session.getPlayer().getCharacters().getCharacterById(req.getCharId());
if (character == null) {
return session.encodeMsg(NetMsgId.char_gem_equip_gem_failed_ack);
}
// Equip gem
boolean success = character.equipGem(req.getPresetId(), req.getSlotId(), req.getGemIndex());
if (success == false) {
return session.encodeMsg(NetMsgId.char_gem_equip_gem_failed_ack);
}
// Encode and send
return session.encodeMsg(NetMsgId.char_gem_equip_gem_succeed_ack);
}
}

View File

@@ -0,0 +1,43 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.CharGemGenerate.CharGemGenerateReq;
import emu.nebula.proto.CharGemGenerate.CharGemGenerateResp;
import emu.nebula.net.HandlerId;
import emu.nebula.game.character.CharacterGem;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.char_gem_generate_req)
public class HandlerCharGemGenerateReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = CharGemGenerateReq.parseFrom(message);
// Get character
var character = session.getPlayer().getCharacters().getCharacterById(req.getCharId());
if (character == null) {
return session.encodeMsg(NetMsgId.char_gem_generate_failed_ack);
}
// Generate gem
var change = character.generateGem(req.getSlotId());
if (change == null) {
return session.encodeMsg(NetMsgId.char_gem_generate_failed_ack);
}
var gem = (CharacterGem) change.getExtraData();
// Build response
var rsp = CharGemGenerateResp.newInstance()
.setChangeInfo(change.toProto())
.setCharGem(gem.toProto());
// Encode and send
return session.encodeMsg(NetMsgId.char_gem_generate_succeed_ack, rsp);
}
}

View File

@@ -0,0 +1,35 @@
package emu.nebula.server.handlers;
import emu.nebula.net.NetHandler;
import emu.nebula.net.NetMsgId;
import emu.nebula.proto.CharGemUsePreset.CharGemUsePresetReq;
import emu.nebula.net.HandlerId;
import emu.nebula.net.GameSession;
@HandlerId(NetMsgId.char_gem_use_preset_req)
public class HandlerCharGemUsePresetReq extends NetHandler {
@Override
public byte[] handle(GameSession session, byte[] message) throws Exception {
// Parse request
var req = CharGemUsePresetReq.parseFrom(message);
// Get character
var character = session.getPlayer().getCharacters().getCharacterById(req.getCharId());
if (character == null) {
return session.encodeMsg(NetMsgId.char_gem_use_preset_failed_ack);
}
// Use preset
boolean success = character.setCurrentGemPreset(req.getPresetId());
if (success == false) {
return session.encodeMsg(NetMsgId.char_gem_use_preset_failed_ack);
}
// Encode and send
return session.encodeMsg(NetMsgId.char_gem_use_preset_succeed_ack);
}
}