forked from MagicBane/Server
MagicBot
8 months ago
4 changed files with 164 additions and 131 deletions
@ -0,0 +1,157 @@ |
|||||||
|
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
|
||||||
|
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
|
||||||
|
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
|
||||||
|
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
|
||||||
|
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
|
||||||
|
// Magicbane Emulator Project © 2013 - 2022
|
||||||
|
// www.magicbane.com
|
||||||
|
|
||||||
|
package engine.net.client.handlers; |
||||||
|
|
||||||
|
import engine.exception.MsgSendException; |
||||||
|
import engine.net.Dispatch; |
||||||
|
import engine.net.DispatchMessage; |
||||||
|
import engine.net.client.ClientConnection; |
||||||
|
import engine.net.client.msg.ClientNetMsg; |
||||||
|
import engine.net.client.msg.RefineMsg; |
||||||
|
import engine.net.client.msg.RefinerScreenMsg; |
||||||
|
import engine.objects.*; |
||||||
|
import engine.server.MBServerStatics; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.concurrent.ConcurrentHashMap; |
||||||
|
|
||||||
|
public class RefineMsgHandler extends AbstractClientMsgHandler { |
||||||
|
|
||||||
|
public RefineMsgHandler() { |
||||||
|
super(RefineMsg.class); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected boolean _handleNetMsg(ClientNetMsg baseMsg, ClientConnection origin) throws MsgSendException { |
||||||
|
|
||||||
|
PlayerCharacter playerCharacter = origin.getPlayerCharacter(); |
||||||
|
|
||||||
|
// Member variable declaration
|
||||||
|
|
||||||
|
RefineMsg msg; |
||||||
|
|
||||||
|
// Member variable assignment
|
||||||
|
|
||||||
|
msg = (RefineMsg) baseMsg; |
||||||
|
|
||||||
|
NPC npc = NPC.getFromCache(msg.npcID); |
||||||
|
|
||||||
|
if (npc == null) |
||||||
|
return true; |
||||||
|
|
||||||
|
int type = msg.type; |
||||||
|
int token = msg.token; |
||||||
|
boolean worked = false; |
||||||
|
boolean skillPower = true; |
||||||
|
|
||||||
|
if (type == 0) { //refine skill
|
||||||
|
worked = refineSkill(origin, playerCharacter, token, msg); |
||||||
|
} else if (type == 1) { //refine power
|
||||||
|
worked = refinePower(origin, playerCharacter, token, msg); |
||||||
|
} else if (type == 2) { //refine stat
|
||||||
|
worked = refineStat(origin, playerCharacter, token, msg); |
||||||
|
skillPower = false; |
||||||
|
} |
||||||
|
|
||||||
|
if (worked) { |
||||||
|
|
||||||
|
//update player
|
||||||
|
playerCharacter.applyBonuses(); |
||||||
|
playerCharacter.charItemManager.RemoveEquipmentFromLackOfSkill(playerCharacter, true); |
||||||
|
|
||||||
|
//echo refine message back
|
||||||
|
|
||||||
|
Dispatch dispatch = Dispatch.borrow(playerCharacter, msg); |
||||||
|
DispatchMessage.dispatchMsgDispatch(dispatch, engine.Enum.DispatchChannel.SECONDARY); |
||||||
|
|
||||||
|
// if (type == 0 && token == 1488335491){
|
||||||
|
// dispatch = Dispatch.borrow(pc, msg);
|
||||||
|
// DispatchMessage.dispatchMsgDispatch(dispatch, engine.Enum.DispatchChannel.SECONDARY);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//resend refine screen
|
||||||
|
|
||||||
|
RefinerScreenMsg refinerScreenMsg = new RefinerScreenMsg(skillPower, npc.getSellPercent(playerCharacter)); //TODO set npc cost
|
||||||
|
dispatch = Dispatch.borrow(playerCharacter, refinerScreenMsg); |
||||||
|
DispatchMessage.dispatchMsgDispatch(dispatch, engine.Enum.DispatchChannel.SECONDARY); |
||||||
|
playerCharacter.recalculate(); |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean refineSkill(ClientConnection origin, PlayerCharacter pc, int token, RefineMsg msg) { |
||||||
|
CharacterSkill skill = null; |
||||||
|
ConcurrentHashMap<String, CharacterSkill> skills = pc.getSkills(); |
||||||
|
for (CharacterSkill sk : skills.values()) { |
||||||
|
if (sk == null) |
||||||
|
continue; |
||||||
|
SkillsBase sb = sk.getSkillsBase(); |
||||||
|
if (sb == null) |
||||||
|
continue; |
||||||
|
if (sb.getToken() == token) |
||||||
|
skill = sk; |
||||||
|
} |
||||||
|
//check if player has skill to refine
|
||||||
|
if (skill == null) |
||||||
|
return false; |
||||||
|
//check there's a train to refine
|
||||||
|
if (skill.getNumTrains() < 1) |
||||||
|
return false; |
||||||
|
|
||||||
|
//TODO verify if any skills have this as prereq
|
||||||
|
|
||||||
|
//TODO verify if any powers have this as a prereq
|
||||||
|
//get all players powers
|
||||||
|
for (CharacterPower power : pc.getPowers().values()) { |
||||||
|
ArrayList<PowerReq> reqs = PowerReq.getPowerReqsForRune(power.getPowerID()); |
||||||
|
for (PowerReq req : reqs) { |
||||||
|
ConcurrentHashMap<String, CharacterSkill> playerSkills = pc.getSkills(); |
||||||
|
CharacterSkill playerSkill = playerSkills.get(token); |
||||||
|
int currentSkillLevel = playerSkill.getTotalSkillPercet(); |
||||||
|
if (token == req.getToken() && req.getLevel() == currentSkillLevel) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//refine skill
|
||||||
|
return skill.refine(pc); |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean refinePower(ClientConnection origin, PlayerCharacter pc, int token, RefineMsg msg) { |
||||||
|
CharacterPower power = null; |
||||||
|
ConcurrentHashMap<Integer, CharacterPower> powers = pc.getPowers(); |
||||||
|
if (!powers.containsKey(token)) |
||||||
|
return false; |
||||||
|
power = powers.get(token); |
||||||
|
if (power == null) |
||||||
|
return false; |
||||||
|
if (power.getTrains() < 1) |
||||||
|
return false; |
||||||
|
|
||||||
|
//TODO verify if any powers have this as a prereq
|
||||||
|
|
||||||
|
return power.refine(pc); |
||||||
|
} |
||||||
|
|
||||||
|
public static boolean refineStat(ClientConnection origin, PlayerCharacter pc, int token, RefineMsg msg) { |
||||||
|
if (token == MBServerStatics.STAT_STR_ID) |
||||||
|
return pc.refineStr(); |
||||||
|
if (token == MBServerStatics.STAT_DEX_ID) |
||||||
|
return pc.refineDex(); |
||||||
|
if (token == MBServerStatics.STAT_CON_ID) |
||||||
|
return pc.refineCon(); |
||||||
|
if (token == MBServerStatics.STAT_INT_ID) |
||||||
|
return pc.refineInt(msg); |
||||||
|
if (token == MBServerStatics.STAT_SPI_ID) |
||||||
|
return pc.refineSpi(); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue