mirror of
https://github.com/Melledy/Nebula.git
synced 2025-12-16 14:24:57 +01:00
Implement commissions
This commit is contained in:
@@ -2,6 +2,9 @@ package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.AgentApply.AgentApplyReq;
|
||||
import emu.nebula.proto.AgentApply.AgentApplyResp;
|
||||
import emu.nebula.proto.AgentApply.AgentRespInfo;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@@ -10,7 +13,36 @@ public class HandlerAgentApplyReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
return session.encodeMsg(NetMsgId.agent_apply_failed_ack);
|
||||
// Parse request
|
||||
var req = AgentApplyReq.parseFrom(message);
|
||||
|
||||
// Build response
|
||||
var rsp = AgentApplyResp.newInstance();
|
||||
|
||||
// Apply for commissions
|
||||
for (var apply : req.getApply()) {
|
||||
// Apply
|
||||
var agent = session.getPlayer().getAgentManager().apply(
|
||||
apply.getId(),
|
||||
apply.getProcessTime(),
|
||||
apply.getCharIds()
|
||||
);
|
||||
|
||||
// Serialize to proto
|
||||
var info = AgentRespInfo.newInstance()
|
||||
.setId(agent.getId())
|
||||
.setBeginTime(agent.getStart());
|
||||
|
||||
rsp.addInfos(info);
|
||||
}
|
||||
|
||||
// Save
|
||||
if (rsp.getInfos().length() > 0) {
|
||||
session.getPlayer().getAgentManager().save();
|
||||
}
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.agent_apply_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.AgentGiveUp.AgentGiveUpReq;
|
||||
import emu.nebula.proto.AgentGiveUp.AgentGiveUpResp;
|
||||
import emu.nebula.net.HandlerId;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.agent_give_up_req)
|
||||
public class HandlerAgentGiveUpReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = AgentGiveUpReq.parseFrom(message);
|
||||
|
||||
// Give up
|
||||
var agent = session.getPlayer().getAgentManager().giveUp(req.getId());
|
||||
|
||||
if (agent == null) {
|
||||
return session.encodeMsg(NetMsgId.agent_give_up_failed_ack);
|
||||
}
|
||||
|
||||
// Build response
|
||||
var rsp = AgentGiveUpResp.newInstance()
|
||||
.addAllCharIds(agent.getCharIds());
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.agent_give_up_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package emu.nebula.server.handlers;
|
||||
|
||||
import emu.nebula.net.NetHandler;
|
||||
import emu.nebula.net.NetMsgId;
|
||||
import emu.nebula.proto.AgentRewardReceive.AgentRewardReceiveReq;
|
||||
import emu.nebula.proto.AgentRewardReceive.AgentRewardReceiveResp;
|
||||
import emu.nebula.proto.AgentRewardReceive.AgentRewardShow;
|
||||
import emu.nebula.net.HandlerId;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import emu.nebula.game.agent.AgentResult;
|
||||
import emu.nebula.net.GameSession;
|
||||
|
||||
@HandlerId(NetMsgId.agent_reward_receive_req)
|
||||
public class HandlerAgentRewardReceiveReq extends NetHandler {
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public byte[] handle(GameSession session, byte[] message) throws Exception {
|
||||
// Parse request
|
||||
var req = AgentRewardReceiveReq.parseFrom(message);
|
||||
|
||||
// Claim
|
||||
var change = session.getPlayer().getAgentManager().claim(req.getId());
|
||||
|
||||
if (change == null) {
|
||||
return session.encodeMsg(NetMsgId.agent_reward_receive_failed_ack);
|
||||
}
|
||||
|
||||
// Build response
|
||||
var rsp = AgentRewardReceiveResp.newInstance()
|
||||
.setChange(change.toProto());
|
||||
|
||||
// Handle results
|
||||
var results = (ArrayList<AgentResult>) change.getExtraData();
|
||||
|
||||
for (var result : results) {
|
||||
// Add char ids
|
||||
rsp.addAllCharIds(result.getAgent().getCharIds());
|
||||
|
||||
// Agent rewards proto
|
||||
var show = AgentRewardShow.newInstance()
|
||||
.setId(result.getAgent().getId());
|
||||
|
||||
result.getRewards().toItemTemplateStream().forEach(show::addRewards);
|
||||
result.getBonus().toItemTemplateStream().forEach(show::addBonus);
|
||||
|
||||
rsp.addRewardShows(show);
|
||||
}
|
||||
|
||||
// Encode and send
|
||||
return session.encodeMsg(NetMsgId.agent_reward_receive_succeed_ack, rsp);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user