Removed binary saving system

Fixed some dialogue for Fremennik Trials
This commit is contained in:
Woah 2021-03-09 22:17:27 -05:00
parent f4576ff3d3
commit 955d04c09e
55 changed files with 135 additions and 1710 deletions

2
.gitignore vendored
View file

@ -36,3 +36,5 @@ docker
gradle
.idea
.idea/
Server/worldprops/
Management-Server/managementprops/

View file

@ -2,7 +2,7 @@ package core.game.content.ame;
import core.game.content.activity.ActivityPlugin;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.item.Item;
import core.game.world.map.Location;
import core.game.world.map.zone.ZoneRestriction;
@ -12,7 +12,7 @@ import core.tools.RandomFunction;
* Handles an anti-macro event.
* @author Emperor
*/
public abstract class AntiMacroEvent extends ActivityPlugin implements SavingModule {
public abstract class AntiMacroEvent extends ActivityPlugin {
/**
* The random locations to teleport to if unresponsive.

View file

@ -6,7 +6,7 @@ import core.game.world.map.zone.impl.WildernessZone;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.world.GameWorld;
import core.game.world.map.zone.ZoneRestriction;
import core.tools.RandomFunction;
@ -20,7 +20,7 @@ import java.util.Map;
* @author Emperor
* @author ceik
*/
public final class AntiMacroHandler implements SavingModule {
public final class AntiMacroHandler {
/**
* The delay between periods in which it attempts to spawn a random event.
@ -76,42 +76,6 @@ public final class AntiMacroHandler implements SavingModule {
return hasEvent() && event.isSaveRequired();
}
@Override
public void save(ByteBuffer buffer) {
if (hasEvent()) {
buffer.put((byte) 1);
ByteBufferUtils.putString(event.getName(), buffer);
buffer.put((byte) 0);
int index = buffer.position();
event.save(buffer);
buffer.put(index - 1, (byte) (buffer.position() - index));
}
buffer.put((byte) 0);
}
@Override
public void parse(ByteBuffer buffer) {
event = null;
while (true) {
switch (buffer.get() & 0xFF) {
case 0:
return;
case 1:
event = EVENTS.get(ByteBufferUtils.getString(buffer));
int length = buffer.get() & 0xFF;
ByteBuffer buf = ByteBuffer.allocate(length);
for (int i = 0; i < length; i++) {
buf.put(buffer.get());
}
buf.flip();
if (event != null) {
(event = event.create(player)).parse(buf);
}
break;
}
}
}
/**
* Gets called every game pulse.
*/

View file

@ -13,8 +13,6 @@ import java.nio.ByteBuffer
@Initializable
class SandwichLadyEvent : AntiMacroEvent("Sandwich Lady",false,false, 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23){
override fun parse(buffer: ByteBuffer?) {
}
override fun start(player: Player?, login: Boolean, vararg args: Any?): Boolean {
super.init(player)
@ -26,9 +24,6 @@ class SandwichLadyEvent : AntiMacroEvent("Sandwich Lady",false,false, 0,1,2,3,4,
return true
}
override fun save(buffer: ByteBuffer?) {
}
override fun configure() {
}

View file

@ -36,16 +36,6 @@ public final class DrillDemonEvent extends AntiMacroEvent {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
if (login) {

View file

@ -32,16 +32,6 @@ public final class DrunkDwarfEvent extends AntiMacroEvent {
super(NAME, true, false);
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
final DrunkenDwarfNPC dwarf = new DrunkenDwarfNPC(956, player.getLocation(), this, player);

View file

@ -76,14 +76,4 @@ public final class EvilChickenRandomEvent extends AntiMacroEvent {
PluginManager.definePlugin(new EvilChickenNPC());
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
}

View file

@ -461,31 +461,6 @@ public final class EvilTwinRandomEvent extends AntiMacroEvent {
return 3892 + (hash & 0xFF) + (((hash >> 16) & 0xFF) * TwinClothColor.values().length);
}
@Override
public void save(ByteBuffer buffer) {
int offset = player.getAttribute("ame:evil_twin", 0);
buffer.put((byte) (offset & 0xFF));
buffer.put((byte) ((offset >> 16) & 0xFF));
buffer.put((byte) (player.getLocation().getX() - region.getBaseLocation().getX()));
buffer.put((byte) (player.getLocation().getY() - region.getBaseLocation().getY()));
buffer.put((byte) tries);
Location loc = player.getAttribute("ame:location", ServerConstants.HOME_LOCATION);
buffer.putShort((short) loc.getX());
buffer.putShort((short) loc.getY());
buffer.put((byte) loc.getZ());
buffer.put((byte) (success ? 1 : 0));
}
@Override
public void parse(ByteBuffer buffer) {
player.setAttribute("ame:evil_twin", (buffer.get() & 0xFF) | ((buffer.get() & 0xFF) << 16));
offsetX = buffer.get() & 0xFF;
offsetY = buffer.get() & 0xFF;
tries = buffer.get() & 0xFF;
player.setAttribute("ame:location", Location.create(buffer.getShort(), buffer.getShort(), buffer.get()));
success = (buffer.get() & 0xFF) == 1;
}
@Override
public AntiMacroEvent create(Player player) {
return new EvilTwinRandomEvent(player);

View file

@ -30,14 +30,6 @@ public final class GenieRandomEvent extends AntiMacroEvent {
super("Genie", true, false);
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
if (player.hasItem(new Item(2528))) {

View file

@ -182,29 +182,4 @@ public final class LostFoundRandomEvent extends AntiMacroEvent {
}
});
}
@Override
public void save(ByteBuffer buffer) {
Location l = player.getAttribute("l&f_dest", player.getLocation());
buffer.putShort((short) l.getX()).putShort((short) l.getY()).put((byte) l.getZ());
Item[] runes = player.getAttribute("teleport:items", new Item[0]);
buffer.put((byte) runes.length);
for (int i = 0; i < runes.length; i++) {
buffer.putShort((short) runes[i].getId());
buffer.put((byte) runes[i].getAmount());
}
}
@Override
public void parse(ByteBuffer buffer) {
player.setAttribute("l&f_dest", Location.create(buffer.getShort(), buffer.getShort(), buffer.get()));
Item[] runes = new Item[buffer.get() & 0xFF];
for (int i = 0; i < runes.length; i++) {
runes[i] = new Item(buffer.getShort() & 0xFFFF, buffer.get() & 0xFF);
}
if (runes.length > 0) {
player.setAttribute("teleport:items", runes);
}
}
}

View file

@ -34,16 +34,6 @@ public final class CapnHandEvent extends AntiMacroEvent {
super(NAME, true, false);
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
final CapnHandNPC capn = new CapnHandNPC(2539, player.getLocation(), this, player);

View file

@ -45,34 +45,6 @@ public final class QuizMasterEvent extends AntiMacroEvent {
super("quiz master", true, true);
}
@Override
public void save(ByteBuffer buffer) {
SavedData.save(buffer, score, 1);
SavedData.save(buffer, startedQuiz, 2);
buffer.put((byte) 3);
Location l = player.getAttribute("ame:location", ServerConstants.HOME_LOCATION);
l.save(buffer);
buffer.put((byte) 0);
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
score = buffer.get();
break;
case 2:
startedQuiz = SavedData.getBoolean(buffer.get());
break;
case 3:
player.setAttribute("ame:location", Location.parse(buffer));
break;
}
}
}
@Override
public boolean enter(Entity entity) {
/*

View file

@ -34,16 +34,6 @@ public final class RickTurpentineEvent extends AntiMacroEvent {
super(NAME, true, false);
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
final RickTurpentineNPC npc = new RickTurpentineNPC(2476, player.getLocation(), this, player);

View file

@ -22,16 +22,6 @@ public final class RiverTrollEvent extends AntiMacroEvent {
super("river troll", true, false, Skills.FISHING);
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
final RiverTrollNPC troll = new RiverTrollNPC(getId(player), player.getLocation(), this, player);

View file

@ -22,16 +22,6 @@ public final class ShadeEvent extends AntiMacroEvent {
super("shade", true, false, Skills.PRAYER);
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
final ShadeNPC shade = new ShadeNPC(getId(player), player.getLocation(), this, player);

View file

@ -22,16 +22,6 @@ public final class TreeSpiritEvent extends AntiMacroEvent {
super("tree spirit", true, false, Skills.WOODCUTTING);
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
final TreeSpiritRandomNPC spirit = new TreeSpiritRandomNPC(getId(player), player.getLocation(), this, player);

View file

@ -22,16 +22,6 @@ public final class ZombieEvent extends AntiMacroEvent {
super("zombie", true, false, Skills.PRAYER);
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
@Override
public boolean start(Player player, boolean login, Object... args) {
final ZombieAmeNPC zombie = new ZombieAmeNPC(getId(player), player.getLocation(), this, player);

View file

@ -6,7 +6,7 @@ import core.plugin.Initializable
import core.game.content.dialogue.DialoguePlugin
@Initializable
class ChieftanBrundt(player: Player? = Player(PlayerDetails("",""))) : DialoguePlugin(player){
class ChieftanBrundt(player: Player? = null) : DialoguePlugin(player){
override fun open(vararg args: Any?): Boolean {
if(player?.questRepository?.getStage("Fremennik Trials")!! == 0) {
npc("Greetings outlander!")

View file

@ -7,7 +7,7 @@ import core.plugin.Initializable
import core.game.content.dialogue.DialoguePlugin
@Initializable
class CouncilWorkerDialogue(player: Player? = Player(PlayerDetails("",""))) : DialoguePlugin(player){
class CouncilWorkerDialogue(player: Player? = null) : DialoguePlugin(player){
override fun open(vararg args: Any?): Boolean {
if(args.size > 1){
npc("Ta very much like. That'll hit the spot nicely.. Here,","You can have this. I picked it up as a souvenir on me","last holz")

View file

@ -3,10 +3,10 @@ package core.game.content.quest.fremtrials
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.quest.Quest
import core.plugin.InitializablePlugin
import core.game.node.entity.skill.Skills
import core.plugin.Initializable
@InitializablePlugin
@Initializable
class FremennikTrials : Quest("Fremennik Trials",64,63,3,347,0,1,10){
class SkillRequirement(val skill: Int?, val level: Int?)

View file

@ -14,7 +14,7 @@ import core.game.content.dialogue.DialoguePlugin
import core.game.content.dialogue.FacialExpression
@Initializable
class ManniDialogue(player: Player? = Player(PlayerDetails("",""))) : DialoguePlugin(player){
class ManniDialogue(player: Player? = null) : DialoguePlugin(player){
var curNPC: NPC? = NPC(0,Location(0,0,0))
override fun open(vararg args: Any?): Boolean {
curNPC = args[0] as? NPC

View file

@ -6,7 +6,7 @@ import core.plugin.Initializable
import core.game.content.dialogue.DialoguePlugin
@Initializable
class OlafTheBard(player: Player? = Player(PlayerDetails("",""))) : DialoguePlugin(player){
class OlafTheBard(player: Player? = null) : DialoguePlugin(player){
override fun open(vararg args: Any?): Boolean {
if(player?.getAttribute("fremtrials:olaf-accepted",false)!!){
npc("I can't wait to see your performance.")

View file

@ -1,30 +1,41 @@
package core.game.content.quest.members.thefremenniktrials
import core.game.content.dialogue.DialoguePlugin
import core.game.node.entity.player.Player
import core.game.node.entity.player.info.PlayerDetails
import core.game.node.item.Item
import core.plugin.Initializable
import core.game.content.dialogue.DialoguePlugin
import core.tools.END_DIALOGUE
import core.tools.START_DIALOGUE
@Initializable
class PoisonSalesman(player: Player? = Player(PlayerDetails("",""))) : DialoguePlugin(player){
class PoisonSalesman(player: Player? = null) : DialoguePlugin(player) {
override fun open(vararg args: Any?): Boolean {
options("Talk about the Murder Mystery Quest","Talk about the Fremennik Trials")
stage = 0
stage = START_DIALOGUE
return true
}
override fun handle(interfaceId: Int, buttonId: Int): Boolean {
val fremStage = player?.questRepository?.getStage("Fremennik Trials") ?: 0
//val murderMysteryStage = player.questRepository.isComplete("Murder Mystery")
val fremennikTrialsStage = player.questRepository.getStage("Fremennik Trials")
when (stage) {
0 -> when(buttonId){
1 -> {player("Err... nevermind");stage = 1000}
START_DIALOGUE -> when (buttonId) {
1 -> { player("Err... nevermind"); stage = END_DIALOGUE }
2 -> { player("Hello."); stage = 10 }
}
//Fremennik Trials
10 -> if(fremStage == 0){ npc("Come see me if you ever need low-alcohol beer!"); stage = 1000}
else if(fremStage > 30){npc("Thanks for buying out all that low-alcohol beer!"); stage = 1000}
else if(fremStage > 0){npc("Howdy! You seem like someone with discerning taste!","Howsabout you try my brand new range of alcohol?");stage++;}
10 -> {
when (fremennikTrialsStage) {
0 -> { npc("Come see me if you ever need low-alcohol beer!"); stage = END_DIALOGUE }
}
}
// if (fremennikTrialsStage == 0)
// else if(fremennikTrialsStage > 30) { npc("Thanks for buying out all that low-alcohol beer!"); stage = END_DIALOGUE }
// else if(fremennikTrialsStage > 0) { npc("Howdy! You seem like someone with discerning taste!","Howsabout you try my brand new range of alcohol?"); stage++ }
11 -> { player("Didn't you used to sell poison?"); stage++ }
12 -> { npc("That I did indeed! Peter Potter's Patented","Multipurpose poison! A miracle of modern apothecarys!","My exclusive concoction has been test on..."); stage++ }
13 -> { player("Uh, yeah. I've already heard the sales pitch."); stage++ }
@ -59,22 +70,22 @@ class PoisonSalesman(player: Player? = Player(PlayerDetails("",""))) : DialogueP
42 -> { options("Yes","No"); stage++ }
43 -> when(buttonId){
1 -> { player("Yes please!"); stage++ }
2 -> {player("No, thanks.");stage = 1000}
2 -> { player("No, thanks."); stage = END_DIALOGUE }
}
//Yes
44 -> if(player?.inventory?.containsItem(Item(995,250)) == true){
player?.inventory?.remove(Item(995,250))
player?.inventory?.add(Item(3712))
npc("Here you go.")
stage = 1000
stage = END_DIALOGUE
} else {
player("I don't seem to have enough.")
stage++
}
45 -> {npc("Well come back when you do!");stage = 1000}
45 -> { npc("Well come back when you do!"); stage = END_DIALOGUE }
1000 -> end()
END_DIALOGUE -> end()
}
return true
}

View file

@ -7,7 +7,7 @@ import core.plugin.Initializable
import core.game.content.dialogue.DialoguePlugin
@Initializable
class SigliTheHuntsman(player: Player? = Player(PlayerDetails("",""))) : DialoguePlugin(player){
class SigliTheHuntsman(player: Player? = null) : DialoguePlugin(player){
override fun open(vararg args: Any?): Boolean {
if(player?.getAttribute("fremtrials:sigli-vote",false)!!){
npc("You have my vote!")

View file

@ -6,7 +6,7 @@ import core.plugin.Initializable
import core.game.content.dialogue.DialoguePlugin
@Initializable
class SwensenTheNavigator(player: Player? = Player(PlayerDetails("",""))) : DialoguePlugin(player){
class SwensenTheNavigator(player: Player? = null) : DialoguePlugin(player){
override fun open(vararg args: Any?): Boolean {
if(player?.getAttribute("fremtrials:maze-complete",false) == true){
npc("Outerlander! You have finished my maze!","I am genuinely impressed!")

View file

@ -2,7 +2,7 @@ package core.game.content.quest.miniquest.barcrawl;
import core.game.component.Component;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.item.Item;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@ -13,7 +13,7 @@ import java.nio.ByteBuffer;
* Manages the players barcrawl quest.
* @author 'Vexia
*/
public final class BarcrawlManager implements SavingModule {
public final class BarcrawlManager {
/**
* The barcrawl card.
@ -53,20 +53,6 @@ public final class BarcrawlManager implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
if (started) {
buffer.put((byte) 1);
}
for (int i = 0; i < bars.length; i++) {
if (bars[i]) {
buffer.put((byte) 2);
buffer.put((byte) i);
}
}
buffer.put((byte) 0);
}
public void parse(JSONObject data){
started = (boolean) data.get("started");
JSONArray barsVisisted = (JSONArray) data.get("bars");
@ -75,21 +61,6 @@ public final class BarcrawlManager implements SavingModule {
}
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get() & 0xFF) != 0) {
switch (opcode) {
case 1:
started = true;
break;
case 2:
bars[buffer.get()] = true;
break;
}
}
}
/**
* Method used to read the card.
*/

View file

@ -1,7 +1,7 @@
package core.game.content.ttrail;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.tools.RandomFunction;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@ -12,7 +12,7 @@ import java.nio.ByteBuffer;
* Handles the treasure trail of a player.
* @author Vexia
*/
public final class TreasureTrailManager implements SavingModule {
public final class TreasureTrailManager {
/**
* The ids of the clues.
@ -58,23 +58,6 @@ public final class TreasureTrailManager implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
if (hasTrail()) {
buffer.put((byte) 1);
buffer.putInt(clueId << 16 | trailLength);
buffer.put((byte) 2);
buffer.putInt(trailStage);
}
if (completedClues[0] != 0 || completedClues[1] != 0 || completedClues[2] != 0) {
buffer.put((byte) 4);
for (int i = 0; i < completedClues.length; i++) {
buffer.putInt(completedClues[i]);
}
}
buffer.put((byte) 0);
}
public void parse(JSONObject data){
JSONArray cc = (JSONArray) data.get("completedClues");
for(int i = 0; i < cc.size(); i++){
@ -89,35 +72,6 @@ public final class TreasureTrailManager implements SavingModule {
}
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get() & 0xFFFF) != 0) {
switch (opcode) {
case 1:
int hash = buffer.getInt();
clueId = hash >> 16 & 0xFFFF;
trailLength = hash & 0xFFFF;
ClueScrollPlugin p = ClueScrollPlugin.getClueScrolls().get(clueId);
if (p != null) {
level = p.getLevel();
}
break;
case 2:
trailStage = buffer.getInt();
break;
case 3:
buffer.getInt();// old
break;
case 4:
for (int i = 0; i < completedClues.length; i++) {
completedClues[i] = buffer.getInt();
}
break;
}
}
}
/**
* Starts a treasure trail.
* @param clue the clue.

View file

@ -8,7 +8,6 @@ import core.game.container.ContainerEvent
import core.game.container.ContainerListener
import core.game.container.access.InterfaceContainer
import core.game.node.entity.player.Player
import core.game.node.entity.player.info.login.SavingModule
import core.game.node.entity.player.link.audio.Audio
import core.game.node.item.Item
import core.game.system.monitor.PlayerMonitor
@ -41,7 +40,7 @@ import core.tools.Components
* @author Angle
*/
class PlayerGrandExchange(private val player: Player) : SavingModule {
class PlayerGrandExchange(private val player: Player) {
var history = arrayOfNulls<GrandExchangeOffer>(5)
@ -227,11 +226,6 @@ class PlayerGrandExchange(private val player: Player) : SavingModule {
openedIndex = -1
}
override fun save(buffer: ByteBuffer?) {
TODO("Not yet implemented. NOT Ever implemented. Saving a bytebuffer is dumb")
}
fun parse(geData: JSONObject) {
val offersRaw = geData["offers"]
@ -266,26 +260,6 @@ class PlayerGrandExchange(private val player: Player) : SavingModule {
}
}
override fun parse(buffer: ByteBuffer) {
var index = -1
while (buffer.get().also { index = it.toInt() }.toInt() != -1) {
val key = buffer.long
OfferManager.setIndex(key, index)
}
for (i in history.indices) {
val s = buffer.get().toInt()
if (s == -1) {
continue
}
var o = GrandExchangeOffer()
o.itemID = buffer.short.toInt()
o.sell = true
o.totalCoinExchange = buffer.int
o.completedAmount = buffer.int
history[i] = o
}
}
/**
* Initializes the grand exchange.
*/

View file

@ -2,7 +2,7 @@ package core.game.interaction.item.brawling_gloves;
import core.cache.def.impl.ItemDefinition;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.item.Item;
import java.nio.ByteBuffer;
@ -13,7 +13,7 @@ import java.util.Objects;
* Manages brawling gloves for a player
* @author ceik
*/
public class BrawlingGlovesManager implements SavingModule {
public class BrawlingGlovesManager {
final Player player;
public HashMap<Integer, Integer> GloveCharges = new HashMap<Integer,Integer>();
@ -28,27 +28,6 @@ public class BrawlingGlovesManager implements SavingModule {
public BrawlingGlovesManager(Player player){this.player = player;}
@Override
public void save(ByteBuffer buffer) {
if(!GloveCharges.isEmpty()){
GloveCharges.forEach((key,value) -> {
buffer.putInt(BrawlingGloves.forId(key).getIndicator());
buffer.putInt(value);
});
}
buffer.put((byte) 0);
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
int charges;
while ((opcode = buffer.get() & 0xFF) != 0){
charges = buffer.getInt();
registerGlove(BrawlingGloves.forIndicator((byte)opcode).getId(),charges);
}
}
public boolean updateCharges(int glove, int charges){
if(GloveCharges.get(glove) != null){
if(GloveCharges.get(glove) - charges <= 0) {

View file

@ -1,22 +0,0 @@
package core.game.node.entity.player.info.login;
import java.nio.ByteBuffer;
/**
* Represents a saving module.
* @author Emperor
*/
public interface SavingModule {
/**
* Writes data on the byte buffer.
* @param buffer The byte buffer.
*/
void save(ByteBuffer buffer);
/**
* Parses data from the byte buffer.
* @param buffer The byte buffer.
*/
void parse(ByteBuffer buffer);
}

View file

@ -1,6 +1,6 @@
package core.game.node.entity.player.link;
import core.game.node.entity.player.info.login.SavingModule;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@ -10,7 +10,7 @@ import java.nio.ByteBuffer;
* Represents a managing class of activity related information.
* @author 'Vexia
*/
public final class ActivityData implements SavingModule {
public final class ActivityData {
/**
* Represents the pest points gained from pest control.
@ -126,52 +126,6 @@ public final class ActivityData implements SavingModule {
*/
}
@Override
public void save(ByteBuffer buffer) {
if (pestPoints > 0) {
SavedData.save(buffer, pestPoints, 1);
}
if (warriorGuildTokens > 0) {
SavedData.save(buffer, warriorGuildTokens, 2);
}
if (bountyHunterRate > 0) {
SavedData.save(buffer, bountyHunterRate, 3);
}
if (bountyRogueRate > 0) {
SavedData.save(buffer, bountyRogueRate, 4);
}
if (barrowKills > 0) {
SavedData.save(buffer, (short) barrowKills, 5);
}
SavedData.save(buffer, barrowBrothers, 6);
if (barrowTunnelIndex > 0) {
SavedData.save(buffer, (byte) barrowTunnelIndex, 7);
}
SavedData.save(buffer, kolodionStage, 9);
buffer.put((byte) 10);
for (int i = 0; i < godCasts.length; i++) {
buffer.putInt(godCasts[i]);
}
SavedData.save(buffer, kolodionBoss, 11);
SavedData.save(buffer, elnockSupplies, 12);
SavedData.save(buffer, getLastBorkBattle(), 13);
SavedData.save(buffer, startedMta, 14);
SavedData.save(buffer, lostCannon, 15);
buffer.put((byte) 16);
buffer.put((byte) pizazzPoints.length);
for (int i = 0; i < pizazzPoints.length; i++) {
buffer.putInt(pizazzPoints[i]);
}
SavedData.save(buffer, bonesToPeaches, 17);
SavedData.save(buffer, solvedMazes, 18);
SavedData.save(buffer, fogRating, 19);
SavedData.save(buffer, borkKills, 20);
SavedData.save(buffer, hardcoreDeath, 21);
SavedData.save(buffer, topGrabbed, 22);
buffer.put((byte) 0);
}
public void parse(JSONObject data){
pestPoints = Integer.parseInt( data.get("pestPoints").toString());
warriorGuildTokens = Integer.parseInt( data.get("warriorGuildTokens").toString());
@ -205,88 +159,6 @@ public final class ActivityData implements SavingModule {
topGrabbed = (boolean) data.get("topGrabbed");
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
pestPoints = buffer.getInt();
break;
case 2:
warriorGuildTokens = buffer.getInt();
break;
case 3:
bountyHunterRate = buffer.getInt();
break;
case 4:
bountyRogueRate = buffer.getInt();
break;
case 5:
barrowKills = buffer.getShort() & 0xFFFF;
break;
case 6:
for (int i = 0; i < barrowBrothers.length; i++) {
barrowBrothers[i] = SavedData.getBoolean(buffer.get());
}
break;
case 7:
barrowTunnelIndex = buffer.get() & 0xFF;
break;
case 8:
buffer.get(); // Barrow config index.
break;
case 9:
kolodionStage = buffer.getInt();
break;
case 10:
for (int i = 0; i < godCasts.length; i++) {
godCasts[i] = buffer.getInt();
}
break;
case 11:
kolodionBoss = buffer.getInt();
break;
case 12:
elnockSupplies = SavedData.getBoolean(buffer);
break;
case 13:
setLastBorkBattle(buffer.getLong());
break;
case 14:
startedMta = SavedData.getBoolean(buffer);
break;
case 15:
lostCannon = SavedData.getBoolean(buffer);
break;
case 16:
int size = buffer.get();
for (int i = 0; i < size; i++) {
pizazzPoints[i] = buffer.getInt();
}
break;
case 17:
bonesToPeaches = SavedData.getBoolean(buffer);
break;
case 18:
solvedMazes = buffer.getInt();
break;
case 19:
fogRating = buffer.getInt();
break;
case 20:
borkKills = buffer.get();
break;
case 21:
hardcoreDeath = SavedData.getBoolean(buffer);
break;
case 22:
topGrabbed = SavedData.getBoolean(buffer);
break;
}
}
}
/**
* Gets the elnockSupplies.
* @return The elnockSupplies.

View file

@ -4,7 +4,7 @@ import core.cache.misc.buffer.ByteBufferUtils;
import core.game.component.CloseEvent;
import core.game.component.Component;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.world.GameWorld;
import core.net.packet.PacketRepository;
import core.net.packet.context.ChildPositionContext;
@ -26,7 +26,7 @@ import java.util.concurrent.TimeUnit;
* @author Vexia
* @author Emperor
*/
public class BankPinManager implements SavingModule {
public class BankPinManager {
/**
* THe setting messages to display on default.
@ -113,24 +113,6 @@ public class BankPinManager implements SavingModule {
}
}
@Override
public void save(ByteBuffer buffer) {
if (hasPin()) {
ByteBufferUtils.putString(pin, buffer.put((byte) 1));
}
buffer.put((byte) 2).put((byte) (longRecovery ? 1 : 0));
if (status.ordinal() != 0) {
buffer.put((byte) 3).put(((byte) status.ordinal()));
}
if (pendingDelay != -1 && pendingDelay > System.currentTimeMillis()) {
buffer.put((byte) 4).putLong(pendingDelay);
}
if (tryDelay > System.currentTimeMillis()) {
buffer.put((byte) 5).putLong(tryDelay);
}
buffer.put((byte) 0);
}
public void parse(JSONObject data){
if(data.containsKey("pin")) {
pin = data.get("pin").toString();
@ -148,30 +130,6 @@ public class BankPinManager implements SavingModule {
longRecovery = (boolean) data.get("longRecovery");
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
pin = ByteBufferUtils.getString(buffer);
break;
case 2:
longRecovery = buffer.get() == 1;
break;
case 3:
status = PinStatus.values()[buffer.get()];
break;
case 4:
pendingDelay = buffer.getLong();
break;
case 5:
tryDelay = buffer.getLong();
break;
}
}
}
/**
* Opens the settings.
*/

View file

@ -1,7 +1,7 @@
package core.game.node.entity.player.link;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.system.task.Pulse;
import core.game.world.GameWorld;
import core.net.packet.PacketRepository;
@ -15,7 +15,7 @@ import java.nio.ByteBuffer;
* @author Emperor
*/
@Deprecated
public final class ConfigurationManager implements SavingModule {
public final class ConfigurationManager {
/**
* The amount of configurations.
@ -45,26 +45,6 @@ public final class ConfigurationManager implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
for (int index = 0; index < savedConfigurations.length; index++) {
int value = savedConfigurations[index];
if (value != 0) {
buffer.putShort((short) index);
buffer.putInt(value);
}
}
buffer.putShort((short) -1);
}
@Override
public void parse(ByteBuffer buffer) {
int index = 0;
while ((index = buffer.getShort()) != -1) {
savedConfigurations[index] = buffer.getInt();
}
}
/**
* Initializes the configurations.
*/

View file

@ -1,7 +1,7 @@
package core.game.node.entity.player.link;
import core.game.content.global.GodBook;
import core.game.node.entity.player.info.login.SavingModule;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@ -11,7 +11,7 @@ import java.nio.ByteBuffer;
* Represents the quest data to save.
* @author 'Vexia
*/
public final class GlobalData implements SavingModule {
public final class GlobalData {
/**
* Represents the tutorial stage.
@ -309,99 +309,6 @@ public final class GlobalData implements SavingModule {
*/
private boolean macroDisabled = false;
@Override
public void save(ByteBuffer buffer) {
SavedData.save(buffer, tutorialStage, 1);
SavedData.save(buffer, homeTeleportDelay, 2);
SavedData.save(buffer, lumbridgeRope, 3);
SavedData.save(buffer, apprentice, 4);
SavedData.save(buffer, assistTime, 6);
SavedData.save(buffer, assistExperience, 7);
SavedData.save(buffer, strongHoldRewards, 8);
SavedData.save(buffer, chatPing, 9);
SavedData.save(buffer, tutorClaim, 10);
SavedData.save(buffer, luthasTask, 11);
SavedData.save(buffer, (byte) karamjaBananas, 12);
SavedData.save(buffer, silkSteal, 13);
SavedData.save(buffer, (byte) zafAmount, 14);
SavedData.save(buffer, zafTime, 15);
SavedData.save(buffer, fritzGlass, 16);
SavedData.save(buffer, wydinEmployee, 17);
SavedData.save(buffer, draynorRecording, 18);
SavedData.save(buffer, geTutorial, 19);
SavedData.save(buffer, essenceTeleporter, 20);
if (recoilDamage != 40) {
SavedData.save(buffer, (byte) recoilDamage, 21);
}
SavedData.save(buffer, doubleExpDelay, 22);
SavedData.save(buffer, joinedMonastery, 23);
SavedData.save(buffer, readPlaques, 25);
SavedData.save(buffer, forgingUses, 26);
SavedData.save(buffer, getEctoCharges(), 27);
// SavedData.save(buffer, xpLock, 28);
SavedData.save(buffer, braceletClayUses, 29);
SavedData.save(buffer, dropDelay, 30);
buffer.put((byte) 31);
buffer.put((byte) abyssData.length);
for (int i = 0; i < abyssData.length; i++) {
buffer.put((byte) (abyssData[i] ? 1 : 0));
}
buffer.put((byte) 32);
for (int i = 0; i < rcDecays.length; i++) {
buffer.put((byte) rcDecays[i]);
}
SavedData.save(buffer, disableDeathScreen, 33);
SavedData.save(buffer, playerTestStage, 34);
SavedData.save(buffer, charmingDelay, 35);
buffer.put((byte) 36);
buffer.put(((byte) travelLogs.length));
for (int i = 0; i < travelLogs.length; i++) {
buffer.put((byte) (travelLogs[i] ? 1 : 0));
}
buffer.put((byte) 37);
buffer.put((byte) godBooks.length);
for (int i = 0; i < godBooks.length; i++) {
buffer.put(((byte) (godBooks[i] ? 1 : 0)));
}
if (godBook != -1) {
buffer.put((byte) 38).putInt(godBook);
}
SavedData.save(buffer, disableNews, 39);
if (!godPages.equals(new boolean[4])) {
buffer.put((byte) 40);
for (int i = 0; i < 4; i++) {
buffer.put((byte) (godPages[i] ? 1 : 0));
}
}
SavedData.save(buffer, overChargeDelay, 41);
SavedData.save(buffer, bossCounters, 42);
SavedData.save(buffer, barrowsLoots, 43);
SavedData.save(buffer, lootSharePoints, 44);
SavedData.save(buffer, lootShareDelay, 45);
SavedData.save(buffer, doubleExp, 46);
SavedData.save(buffer, avasDevice, 47);
SavedData.save(buffer, globalTeleporterDelay, 48);
SavedData.save(buffer, starSpriteDelay, 49);
SavedData.save(buffer, runReplenishDelay, 50);
SavedData.save(buffer, runReplenishCharges, 51);
SavedData.save(buffer, lowAlchemyCharges, 52);
SavedData.save(buffer, lowAlchemyDelay, 53);
SavedData.save(buffer, enableBoneCrusher, 54);
SavedData.save(buffer, enableCoinMachine, 55);
SavedData.save(buffer, magicSkillCapeDelay, 56);
SavedData.save(buffer, hunterCapeDelay, 57);
SavedData.save(buffer, hunterCapeCharges, 58);
SavedData.save(buffer, enableCharmCollector, 59);
SavedData.save(buffer, minigameTeleportDelay, 60);
SavedData.save(buffer, getSavedX(), 61);
SavedData.save(buffer, getSavedY(), 62);
SavedData.save(buffer, getSavedH(), 63);
SavedData.save(buffer, getTaskAmount(), 64);
SavedData.save(buffer, getTaskPoints(), 65);
SavedData.save(buffer, macroDisabled,66);
buffer.put((byte) 0);
}
public void parse(JSONObject data){
tutorialStage = Integer.parseInt( data.get("tutorialStage").toString());
homeTeleportDelay = Long.parseLong(data.get("homeTeleportDelay").toString());
@ -487,242 +394,6 @@ public final class GlobalData implements SavingModule {
macroDisabled = (boolean) data.get("macroDisabled");
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
int size;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
tutorialStage = buffer.getInt();
break;
case 2:
homeTeleportDelay = buffer.getLong();
break;
case 3:
lumbridgeRope = SavedData.getBoolean(buffer.get());
break;
case 4:
apprentice = SavedData.getBoolean(buffer.get());
break;
case 5:
buffer.getLong(); // Used to be skull time.
break;
case 6:
assistTime = buffer.getLong();
break;
case 7:
for (int i = 0; i < assistExperience.length; i++) {
assistExperience[i] = buffer.getDouble();
}
break;
case 8:
for (byte i = 0; i < strongHoldRewards.length; i++) {
strongHoldRewards[i] = SavedData.getBoolean(buffer.get());
}
break;
case 9:
chatPing = buffer.getLong();
break;
case 10:
tutorClaim = buffer.getLong();
break;
case 11:
luthasTask = SavedData.getBoolean(buffer.get());
break;
case 12:
karamjaBananas = buffer.get();
break;
case 13:
silkSteal = buffer.getLong();
break;
case 14:
zafAmount = buffer.get();
;
break;
case 15:
zafTime = buffer.getLong();
break;
case 16:
fritzGlass = SavedData.getBoolean(buffer.get());
break;
case 17:
wydinEmployee = SavedData.getBoolean(buffer.get());
break;
case 18:
draynorRecording = SavedData.getBoolean(buffer.get());
break;
case 19:
geTutorial = SavedData.getBoolean(buffer.get());
break;
case 20:
essenceTeleporter = buffer.getInt();
break;
case 21:
recoilDamage = buffer.get();
break;
case 22:
doubleExpDelay = buffer.getLong();
break;
case 23:
SavedData.getBoolean(buffer.get());
break;
case 24:// tyler fuckup.
for (int i = 0; i < 7; i++) {
buffer.get();
}
break;
case 25:
for (int i = 0; i < readPlaques.length; i++) {
readPlaques[i] = buffer.get() == 1;
}
break;
case 26:
forgingUses = buffer.getInt();
break;
case 27:
setEctoCharges(buffer.getInt());
break;
case 28:
// xpLock = SavedData.getBoolean(buffer);
SavedData.getBoolean(buffer);
break;
case 29:
braceletClayUses = buffer.getInt();
break;
case 30:
dropDelay = buffer.getLong();
break;
case 31:
size = buffer.get();
for (int i = 0; i < size; i++) {
abyssData[i] = buffer.get() == 1;
}
break;
case 32:
for (int i = 0; i < rcDecays.length; i++) {
rcDecays[i] = buffer.get();
}
break;
case 33:
disableDeathScreen = SavedData.getBoolean(buffer);
break;
case 34:
playerTestStage = buffer.getInt();
break;
case 35:
charmingDelay = buffer.getLong();
break;
case 36:
byte size1 = buffer.get();
for (int i = 0; i < size1; i++) {
travelLogs[i] = buffer.get() == 1;
}
break;
case 37:
size = buffer.get();
for (int i = 0; i < size; i++) {
godBooks[i] = buffer.get() == 1;
}
break;
case 38:
godBook = buffer.getInt();
break;
case 39:
disableNews = SavedData.getBoolean(buffer);
break;
case 40:
for (int i = 0; i < 4; i++) {
godPages[i] = buffer.get() == 1;
}
break;
case 41:
overChargeDelay = buffer.getLong();
break;
case 42:
for (int i = 0; i < bossCounters.length; i++) {
bossCounters[i] = buffer.getInt();
if (bossCounters[i] < 0) {
bossCounters[i] = 127 + (bossCounters[i] * -1);
}
}
break;
case 43:
barrowsLoots = buffer.getInt();
break;
case 44:
lootSharePoints = buffer.getInt();
break;
case 45:
lootShareDelay = buffer.getLong();
break;
case 46:
doubleExp = buffer.getLong();
break;
case 47:
avasDevice = SavedData.getBoolean(buffer);
break;
case 48:
globalTeleporterDelay = buffer.getLong();
break;
case 49:
starSpriteDelay = buffer.getLong();
break;
case 50:
runReplenishDelay = buffer.getLong();
break;
case 51:
runReplenishCharges = buffer.getInt();
break;
case 52:
lowAlchemyCharges = buffer.getInt();
break;
case 53:
lowAlchemyDelay = buffer.getLong();
break;
case 54:
enableBoneCrusher = SavedData.getBoolean(buffer);
break;
case 55:
enableCoinMachine = SavedData.getBoolean(buffer);
break;
case 56:
magicSkillCapeDelay = buffer.getLong();
break;
case 57:
hunterCapeDelay = buffer.getLong();
break;
case 58:
hunterCapeCharges = buffer.getInt();
break;
case 59:
enableCharmCollector = SavedData.getBoolean(buffer);
break;
case 60:
minigameTeleportDelay = buffer.getLong();
break;
case 61:
setSavedX(buffer.getInt());
break;
case 62:
setSavedY(buffer.getInt());
break;
case 63:
setSavedH(buffer.getInt());
break;
case 64:
setTaskAmount(buffer.getInt());
break;
case 65:
setTaskPoints(buffer.getInt());
break;
case 66:
macroDisabled = SavedData.getBoolean(buffer);
break;
}
}
}
public void setSavedLocation(int x, int y, int z) {
setSavedX(x);
setSavedY(y);

View file

@ -1,7 +1,7 @@
package core.game.node.entity.player.link;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import java.nio.ByteBuffer;
@ -10,7 +10,7 @@ import java.nio.ByteBuffer;
* @author Vexia
*
*/
public class IronmanManager implements SavingModule {
public class IronmanManager {
/**
* The player instance.
@ -30,29 +30,6 @@ public class IronmanManager implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
if (mode != IronmanMode.NONE) {
buffer.put((byte) 1);
buffer.put((byte) mode.ordinal());
}
buffer.put((byte) 0);
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
mode = IronmanMode.values()[buffer.get()];
break;
case 2: //Indicates permanent.
break;
}
}
}
/**
* Checks the restriction.
* @return {@code True} if so.

View file

@ -1,6 +1,6 @@
package core.game.node.entity.player.link;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.item.Item;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@ -12,7 +12,7 @@ import java.util.Arrays;
* Represents the quest data to save.
* @author 'Vexia
*/
public final class QuestData implements SavingModule {
public final class QuestData {
/**
* Represents the cooks assist attribute array.
@ -68,21 +68,6 @@ public final class QuestData implements SavingModule {
populateDesertTreasureNode();
}
@Override
public void save(ByteBuffer buffer) {
SavedData.save(buffer, draynorLever, 1);
SavedData.save(buffer, dragonSlayer, 2);
SavedData.save(buffer, (byte) dragonSlayerPlanks, 3);
SavedData.save(buffer, demonSlayer, 4);
SavedData.save(buffer, cooksAssistant, 5);
SavedData.save(buffer, gardenerAttack, 6);
SavedData.save(buffer, talkedDrezel, 7);
saveDesertTreasureNode(buffer);
SavedData.save(buffer, witchsExperimentStage, 9);
SavedData.save(buffer, witchsExperimentKilled, 10);
buffer.put((byte) 0);
}
public void parse(JSONObject data){
JSONArray dl = (JSONArray) data.get("draynorLever");
for(int i = 0; i < dl.size(); i++){
@ -112,55 +97,6 @@ public final class QuestData implements SavingModule {
witchsExperimentStage = Integer.parseInt( data.get("witchsExperimentStage").toString());
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
for (int i = 0; i < draynorLever.length; i++) {
draynorLever[i] = SavedData.getBoolean(buffer.get());
}
break;
case 2:
for (int i = 0; i < dragonSlayer.length; i++) {
dragonSlayer[i] = SavedData.getBoolean(buffer.get());
}
break;
case 3:
dragonSlayerPlanks = buffer.get();
break;
case 4:
for (int i = 0; i < demonSlayer.length; i++) {
demonSlayer[i] = SavedData.getBoolean(buffer.get());
}
break;
case 5:
for (int i = 0; i < cooksAssistant.length; i++) {
cooksAssistant[i] = SavedData.getBoolean(buffer.get());
}
break;
case 6:
gardenerAttack = SavedData.getBoolean(buffer.get());
break;
case 7:
talkedDrezel = SavedData.getBoolean(buffer.get());
break;
case 8:
for (int i = 0; i < desertTreasure.length; i++) {
desertTreasure[i] = new Item(buffer.getShort(), buffer.get());
}
break;
case 9:
witchsExperimentStage = buffer.getInt();
break;
case 10:
witchsExperimentKilled = SavedData.getBoolean(buffer.get());
break;
}
}
}
/**
* Saves the desert treasure node.
* @param buffer The buffer.

View file

@ -1,7 +1,7 @@
package core.game.node.entity.player.link;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.entity.player.link.spawn.SpawnData;
import core.game.system.SystemLogger;
@ -12,7 +12,7 @@ import java.nio.ByteBuffer;
* such as questing data, npc talking data, etc.
* @author 'Vexia
*/
public class SavedData implements SavingModule {
public class SavedData {
/**
* Represents the global data to save.
@ -47,67 +47,6 @@ public class SavedData implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
buffer.put((byte) 1);
activityData.save(buffer);
buffer.put((byte) 2);
questData.save(buffer);
buffer.put((byte) 3);
globalData.save(buffer);
buffer.put((byte) 5);
spawnData.save(buffer);
buffer.put((byte) 0);
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
activityData.parse(buffer);
break;
case 2:
questData.parse(buffer);
break;
case 3:
globalData.parse(buffer);
break;
case 4:
int opcode1;
while ((opcode1 = buffer.get()) != 0) {
switch (opcode1) {
case 1:
buffer.getInt();
break;
case 2:
buffer.getInt();
break;
case 3:
buffer.getInt();
break;
case 4:
buffer.getInt();
break;
case 5:
buffer.getInt();
break;
case 6:
buffer.getInt();
break;
}
}
break;
case 5:
spawnData.parse(buffer);
break;
default:
break;
}
}
}
/**
* Method used to save an activity var that isn't valued at default.
* @param buffer the buffer.

View file

@ -3,7 +3,7 @@ package core.game.node.entity.player.link;
import core.game.component.Component;
import core.game.node.entity.skill.magic.MagicSpell;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import java.nio.ByteBuffer;
import java.util.HashMap;
@ -13,7 +13,7 @@ import java.util.Map;
* Represents a managing class of a players spell book.
* @author Vexia
*/
public final class SpellBookManager implements SavingModule {
public final class SpellBookManager {
/**
* Represents the current interface if of the spellbook.
@ -29,18 +29,6 @@ public final class SpellBookManager implements SavingModule {
*/
}
@Override
public void save(ByteBuffer buffer) {
buffer.putInt(spellBook);
}
@Override
public void parse(ByteBuffer buffer) {
if (buffer.hasRemaining()) {
setSpellBook(SpellBook.forInterface(buffer.getInt()));
}
}
/**
* Sets the spell book.
* @param book

View file

@ -2,7 +2,7 @@ package core.game.node.entity.player.link;
import core.game.component.Component;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import java.nio.ByteBuffer;
import java.util.ArrayList;
@ -12,7 +12,7 @@ import java.util.List;
* Handles the warning messages of a player.
* @author Vexia
*/
public final class WarningMessages implements SavingModule {
public final class WarningMessages {
/**
* Represents the config id.
@ -24,16 +24,6 @@ public final class WarningMessages implements SavingModule {
*/
private final List<WarningMessage> messages = new ArrayList<>();
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
/**
* Method used to open the warning messages.
* @param player the player.
@ -79,7 +69,7 @@ public final class WarningMessages implements SavingModule {
* Represents a warning message.
* @author 'Vexia
*/
public final class WarningMessage implements SavingModule {
public final class WarningMessage {
/**
* Represents the button index.
@ -94,16 +84,6 @@ public final class WarningMessages implements SavingModule {
this.index = index;
}
@Override
public void save(ByteBuffer buffer) {
}
@Override
public void parse(ByteBuffer buffer) {
}
/**
* Method used to toggle this warning message.
* @param player the player.

View file

@ -6,7 +6,7 @@ import core.game.container.impl.EquipmentContainer;
import core.game.node.entity.combat.equipment.WeaponInterface;
import core.game.node.entity.impl.Animator.Priority;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.item.Item;
import core.game.system.config.ItemConfigParser;
import core.game.world.update.flag.context.Animation;
@ -21,7 +21,7 @@ import java.nio.ByteBuffer;
* @author Emperor
* @author Vexia
*/
public final class Appearance implements SavingModule {
public final class Appearance {
/**
* Represents the player instance.
@ -76,14 +76,6 @@ public final class Appearance implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
buffer.put(gender.toByte());
for (int i = 0; i < appearanceCache.length; i++) {
appearanceCache[i].save(buffer);
}
}
public void parse(JSONObject appearance){
gender = gender.asByte(Byte.parseByte(appearance.get("gender").toString()));
JSONArray appCache = (JSONArray) appearance.get("appearance_cache");
@ -92,14 +84,6 @@ public final class Appearance implements SavingModule {
}
}
@Override
public void parse(ByteBuffer buffer) {
gender = gender.asByte(buffer.get());
for (int i = 0; i < appearanceCache.length; i++) {
appearanceCache[i].parse(buffer);
}
}
/**
* Transforms the player into an NPC.
* @param id The NPC id.

View file

@ -1,6 +1,6 @@
package core.game.node.entity.player.link.appearance;
import core.game.node.entity.player.info.login.SavingModule;
import org.json.simple.JSONObject;
import java.nio.ByteBuffer;
@ -9,7 +9,7 @@ import java.nio.ByteBuffer;
* Represents a body part of a player encapsulating the type and color.
* @author 'Vexia
*/
public final class BodyPart implements SavingModule {
public final class BodyPart {
/**
* Represents the look value of the part.
@ -48,23 +48,11 @@ public final class BodyPart implements SavingModule {
this(look, 0);
}
@Override
public void save(ByteBuffer buffer) {
buffer.putInt(look);
buffer.putInt(color);
}
public void parse(JSONObject part){
changeLook(Integer.parseInt( part.get("look").toString()));
changeColor(Integer.parseInt( part.get("color").toString()));
}
@Override
public void parse(ByteBuffer buffer) {
changeLook(buffer.getInt());
changeColor(buffer.getInt());
}
/**
* Method used to change the look value.
* @param look the look value.

View file

@ -3,7 +3,7 @@ package core.game.node.entity.player.link.diary;
import core.cache.def.impl.NPCDefinition;
import core.game.component.Component;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@ -14,7 +14,7 @@ import java.util.ArrayList;
* Represents an achievement diary.
* @author Vexia
*/
public class AchievementDiary implements SavingModule {
public class AchievementDiary {
/**
* The component id of the diary.
@ -132,26 +132,6 @@ public class AchievementDiary implements SavingModule {
}
}
@Override
public void save(ByteBuffer buffer) {
buffer.put((byte) 1);
for (int i = 0; i < 3; i++) {
buffer.put((byte) (levelStarted[i] ? 1 : 0));
}
buffer.put((byte) 2).put((byte) taskCompleted.length);
for (int i = 0; i < taskCompleted.length; i++) {
buffer.put((byte) type.getAchievements(i).length);
for (int x = 0; x < type.getAchievements(i).length; x++) {
buffer.put((byte) (taskCompleted[i][x] ? 1 : 0));
}
}
buffer.put((byte) 3).put((byte) levelRewarded.length);
for (int i = 0; i < levelRewarded.length; i++) {
buffer.put((byte) (levelRewarded[i] ? 1 : 0));
}
buffer.put((byte) 0);
}
public void parse(JSONObject data){
JSONArray startedArray = (JSONArray) data.get("startedLevels");
for(int i = 0; i < startedArray.size(); i++){
@ -173,35 +153,6 @@ public class AchievementDiary implements SavingModule {
}
}
@Override
public void parse(ByteBuffer buffer) {
int opcode, size;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
for (int i = 0; i < 3; i++) {
levelStarted[i] = buffer.get() == 1;
}
break;
case 2:
size = buffer.get() & 0xFF;
for (int i = 0; i < size; i++) {
int size_ = buffer.get() & 0xFF;
for (int x = 0; x < size_; x++) {
taskCompleted[i][x] = buffer.get() == 1;
}
}
break;
case 3:
size = buffer.get() & 0xFF;
for (int i = 0; i < size; i++) {
levelRewarded[i] = buffer.get() == 1;
}
break;
}
}
}
/**
* Draws the status of the diary.
* @param player the player.

View file

@ -7,7 +7,7 @@ import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import core.game.node.entity.skill.smithing.smelting.Bar;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.item.Item;
import java.nio.ByteBuffer;
@ -16,7 +16,7 @@ import java.nio.ByteBuffer;
* Manages the achievement diary of a player.
* @author Vexia
*/
public class AchievementDiaryManager implements SavingModule {
public class AchievementDiaryManager {
/**
* The achievement diarys.
@ -43,15 +43,6 @@ public class AchievementDiaryManager implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
buffer.put((byte) 1).put(((byte) diarys.length));
for (AchievementDiary diary : diarys) {
diary.save(buffer);
}
buffer.put((byte) 0);
}
public void parse(JSONArray data){
for(int i = 0; i < data.size(); i++){
JSONObject diary = (JSONObject) data.get(i);
@ -65,21 +56,6 @@ public class AchievementDiaryManager implements SavingModule {
}
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
int length = buffer.get() & 0xFF;
for (int i = 0; i < length; i++) {
diarys[i].parse(buffer);
}
break;
}
}
}
/**
* Opens the achievement diary tab.
*/

View file

@ -1,7 +1,7 @@
package core.game.node.entity.player.link.emote;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import java.nio.ByteBuffer;
import java.util.ArrayList;
@ -12,7 +12,7 @@ import java.util.List;
* @author Vexia
*
*/
public class EmoteManager implements SavingModule {
public class EmoteManager {
/**
* The list of unlocked emotes.
@ -35,26 +35,6 @@ public class EmoteManager implements SavingModule {
}
}
@Override
public void save(ByteBuffer buffer) {
buffer.put((byte) emotes.size());
for (int i = 0; i < emotes.size(); i++) {
buffer.put((byte) emotes.get(i).ordinal());
}
}
@Override
public void parse(ByteBuffer buffer) {
int size = buffer.get();
Emotes emote = null;
for (int i = 0; i < size; i++) {
emote = Emotes.values()[buffer.get()];
if (!emotes.contains(emote)) {
emotes.add(emote);
}
}
}
/**
* Refreshes the emote tab.
*/

View file

@ -4,7 +4,7 @@ import core.game.node.entity.npc.AbstractNPC;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.Rights;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.entity.player.link.HintIconManager;
import core.game.node.entity.player.link.prayer.PrayerType;
import core.game.node.item.GroundItem;
@ -19,7 +19,7 @@ import java.util.Map;
* Manages the players grave stone.
* @author Vexia
*/
public class GraveManager implements SavingModule {
public class GraveManager {
/**
* The current grave stones in the world.
@ -49,18 +49,6 @@ public class GraveManager implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
buffer.putInt(type.ordinal());
}
@Override
public void parse(ByteBuffer buffer) {
if (buffer.hasRemaining()) {
type = GraveType.values()[buffer.getInt()];
}
}
/**
* Creates a grave.
* @param ticks the ticks.

View file

@ -1,7 +1,7 @@
package core.game.node.entity.player.link.music;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.entity.player.link.emote.Emotes;
import core.game.world.GameWorld;
import core.net.packet.PacketRepository;
@ -19,7 +19,7 @@ import java.util.Random;
* Handles a music playing for a player.
* @author Emperor
*/
public final class MusicPlayer implements SavingModule {
public final class MusicPlayer {
/**
* The tutorial island music.
@ -70,37 +70,6 @@ public final class MusicPlayer implements SavingModule {
this.unlocked = new HashMap<>();
}
@Override
public void save(ByteBuffer buffer) {
if (!unlocked.isEmpty()) {
buffer.put((byte) 1);
buffer.putShort((short) unlocked.size());
for (MusicEntry entry : unlocked.values()) {
buffer.putShort((short) entry.getId());
}
}
buffer.put((byte) 0); // EOF
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch (opcode) {
case 1:
int size = buffer.getShort() & 0xFFFF;
for (int i = 0; i < size; i++) {
int musicId = buffer.getShort() & 0xFFFF;
MusicEntry entry = MusicEntry.forId(musicId);
if (entry != null) {
unlocked.put(entry.getIndex(), entry);
}
}
break;
}
}
}
/**
* Initializes the music player.
*/

View file

@ -1,7 +1,7 @@
package core.game.node.entity.player.link.quest;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.system.SystemLogger;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@ -16,7 +16,7 @@ import java.util.Map.Entry;
*
* @author Vexia
*/
public final class QuestRepository implements SavingModule {
public final class QuestRepository {
/**
* The static mapping of instanced quests.
@ -50,23 +50,6 @@ public final class QuestRepository implements SavingModule {
}
}
@Override
public void save(ByteBuffer buffer) {
if (points != 0) {
buffer.put((byte) 1).putInt(points);
}
for (Entry<Integer, Integer> entry : quests.entrySet()) {
buffer.put((byte) 4).putInt(entry.getKey()).put((byte) ((int) entry.getValue()));
}
Map<Integer, Integer> backup = player.getAttribute("quest-backup", null);
if (backup != null) {
for (Entry<Integer, Integer> entry : backup.entrySet()) {
buffer.put((byte) 4).putInt(entry.getKey()).put((byte) ((int) entry.getValue()));
}
}
buffer.put((byte) 0);
}
public void parse(JSONObject questData){
points = Integer.parseInt( questData.get("points").toString());
JSONArray questArray = (JSONArray) questData.get("questStages");
@ -77,46 +60,6 @@ public final class QuestRepository implements SavingModule {
syncPoints();
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
int stage = 0;
int index = 0;
while ((opcode = buffer.get() & 0xFF) != 0) {
switch (opcode) {
case 1:
points = buffer.getInt();
break;
case 3:
index = buffer.getInt();
stage = buffer.getInt();
buffer.getInt();//state
if (forIndex(index) == null) {
//SystemLogger.error("[Quest Repository] parsed quest index -> " + index + " no quest found!");
break;
}
quests.put(index, stage);
break;
case 4://new parsing.
index = buffer.getInt();
stage = buffer.get();
if (forIndex(index) == null) {
Map<Integer, Integer> backup = player.getAttribute("quest-backup", new HashMap<Integer, Integer>());
backup.put(index, stage);
player.setAttribute("quest-backup", backup);
// SystemLogger.error("[Quest Repository] parsed quest index -> " + index + " no quest found! Stored in quest data backup for reparse.");
break;
}
if (!quests.containsKey(index)) {//YOU FORGOT YOUR ! DAMMIT
break;
}
quests.put(index, stage);
break;
}
}
syncPoints();
}
/**
* Synchronizes the quest tab.
*

View file

@ -3,7 +3,7 @@ package core.game.node.entity.player.link.spawn;
import core.game.component.Component;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.entity.player.link.SavedData;
import core.game.node.entity.player.link.SpellBookManager;
import core.game.world.GameWorld;
@ -20,7 +20,7 @@ import java.text.DecimalFormat;
* @author Vexia
*
*/
public class SpawnData implements SavingModule {
public class SpawnData {
/**
* The kill streak messages.
@ -68,51 +68,6 @@ public class SpawnData implements SavingModule {
*/
}
@Override
public void save(ByteBuffer buffer) {
SavedData.save(buffer, tutorialStage, 1);
SavedData.save(buffer, pkPoints, 2);
SavedData.save(buffer, kills, 3);
SavedData.save(buffer, deaths, 4);
SavedData.save(buffer, killStreak, 5);
SavedData.save(buffer, title.ordinal(), 6);
SavedData.save(buffer, purchased, 7);
buffer.put((byte) 0);
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get()) != 0) {
switch(opcode) {
case 1:
tutorialStage = buffer.getInt();
break;
case 2:
pkPoints = buffer.getInt();
break;
case 3:
kills = buffer.getInt();
break;
case 4:
deaths = buffer.getInt();
break;
case 5:
killStreak = buffer.getInt();
break;
case 6:
title = PKTitle.values()[buffer.getInt()];
break;
case 7:
for (int i = 0; i < PKPackage.values().length; i++) {
purchased = PKPackage.values()[i].ordinal();
System.out.println("SpawnData: " + PKPackage.values()[i].ordinal());
}
break;
}
}
}
/**
* Draws the stats tab.
* @param player the player.

View file

@ -10,7 +10,7 @@ import org.json.simple.JSONObject;
import core.game.content.dialogue.FacialExpression;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.entity.player.link.audio.Audio;
import core.game.node.object.GameObject;
import core.game.system.task.Pulse;
@ -29,7 +29,7 @@ import java.nio.ByteBuffer;
* @author Emperor
*
*/
public final class HouseManager implements SavingModule {
public final class HouseManager {
/**
* The current region.

View file

@ -7,7 +7,7 @@ import org.json.simple.JSONObject;
import core.game.node.entity.skill.Skills;
import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.entity.player.link.diary.DiaryType;
import core.tools.RandomFunction;
@ -21,7 +21,7 @@ import java.util.List;
* @author Vexia
*
*/
public final class SlayerManager implements SavingModule {
public final class SlayerManager {
/**
* The player instance.
@ -107,105 +107,6 @@ public final class SlayerManager implements SavingModule {
canEarnPoints = (boolean) slayerData.get("canEarnPoints");
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get() & 0xFF) != 0) {
switch (opcode) {
case 1:
master = Master.forId(buffer.getInt());
break;
case 2:
int taskId = buffer.getInt();
if (taskId > Tasks.values().length -1) {
SystemLogger.logErr("Invalid task i for " + player.getUsername() + " taskId = " + taskId);
break;
}
task = Tasks.values()[taskId];
break;
case 3:
amount = buffer.getInt();
break;
case 4:
slayerPoints = buffer.getInt();
break;
case 5:
taskCount = buffer.getInt();
break;
case 6:
int size = buffer.get();
for (int i = 0; i < size; i++) {
learned[i] = buffer.get() == 1;
}
break;
case 7:
size = buffer.get();
for (int i = 0; i < size; i++) {
removed.add(Tasks.values()[buffer.getInt()]);
}
break;
case 8:
taskTotal = buffer.getInt();
break;
case 9:
int pointsEarnable = buffer.getInt();
if(pointsEarnable == 1){
canEarnPoints = true;
}
break;
default:
SystemLogger.logErr("Error parsing Slayer Manager opcode = " + opcode);
break;
}
}
}
@Override
public void save(ByteBuffer buffer) {
if (master != null) {
buffer.put((byte) 1);
buffer.putInt(master.getNpc());
}
if (task != null) {
buffer.put((byte) 2);
buffer.putInt(task.ordinal());
}
if (task != null) {
buffer.put((byte) 3);
buffer.putInt(getAmount());
}
if (slayerPoints != 0) {
buffer.put((byte) 4).putInt(slayerPoints);
}
if (taskCount != 0) {
buffer.put((byte) 5).putInt(taskCount);
}
for (int i = 0; i < learned.length; i++) {
if (learned[i] != false) {
buffer.put((byte) 6).put((byte) learned.length);
for (int k = 0; k < learned.length; k++) {
buffer.put((byte) (learned[k] ? 1 : 0));
}
break;
}
}
if (!removed.isEmpty()) {
buffer.put((byte) 7).put((byte) removed.size());
for (Tasks task : removed) {
buffer.putInt(task.ordinal());
}
}
if (taskTotal != 0){
buffer.put((byte) 8);
buffer.putInt(taskTotal);
}
if(canEarnPoints){
buffer.put((byte) 9);
buffer.putInt(1);
}
buffer.put((byte) 0);
}
/**
* Called when a hunted creature dies.
* @param player The player.

View file

@ -13,7 +13,7 @@ import core.game.node.entity.skill.summoning.pet.PetDetails;
import core.game.node.entity.skill.summoning.pet.Pets;
import core.game.node.entity.combat.BattleState;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import core.game.node.item.Item;
import core.game.world.map.Location;
import core.game.world.map.zone.ZoneRestriction;
@ -30,7 +30,7 @@ import java.util.Map.Entry;
* Handles a player's familiar.
* @author Emperor
*/
public final class FamiliarManager implements SavingModule {
public final class FamiliarManager {
/**
* The familiars mapping.
@ -75,36 +75,6 @@ public final class FamiliarManager implements SavingModule {
this.player = player;
}
@Override
public void save(ByteBuffer buffer) {
for (Entry<Integer, PetDetails> entry : petDetails.entrySet()) {
buffer.put((byte) 3);
buffer.putInt(entry.getKey());
entry.getValue().save(buffer);
}
if (hasPet()) {
buffer.put((byte) 4);
buffer.putInt(((Pet) familiar).getPet().getBabyItemId());
} else if (hasFamiliar()) {
buffer.put((byte) 1);
buffer.putShort((short) familiar.getOriginalId());
buffer.putShort((short) familiar.ticks);
buffer.put((byte) familiar.specialPoints);
if (familiar.isBurdenBeast() && !((BurdenBeast) familiar).getContainer().isEmpty()) {
((BurdenBeast) familiar).getContainer().save(buffer.put((byte) 2));
}
buffer.put((byte) 5).putInt(familiar.getSkills().getLifepoints());
}
if (insuredPets.size() > 0) {
buffer.put((byte) 6);
buffer.put((byte) insuredPets.size());
for (Pets pet : insuredPets) {
buffer.putInt(pet.getBabyItemId());
}
}
buffer.put((byte) 0);
}
public final void parse(JSONObject familiarData){
JSONArray petDetails = (JSONArray) familiarData.get("petDetails");
for(int i = 0 ; i < petDetails.size(); i++){
@ -139,62 +109,6 @@ public final class FamiliarManager implements SavingModule {
}
}
@Override
public final void parse(ByteBuffer buffer) {
int opcode;
PetDetails details;
while ((opcode = buffer.get() & 0xFF) != 0) {
switch (opcode) {
case 1:
int npcId = buffer.getShort() & 0xFFFF;
familiar = FAMILIARS.get(npcId).construct(player, npcId);
familiar.ticks = buffer.getShort() & 0xFFFF;
familiar.specialPoints = buffer.get() & 0xFF;
break;
case 2:
if (familiar == null || !familiar.isBurdenBeast()) {
SystemLogger.logErr("Error parsing BoB container!");
new Container(30).parse(buffer);
continue;
}
((BurdenBeast) familiar).getContainer().parse(buffer);
break;
case 3:
int baseItem = buffer.getInt();
details = new PetDetails(0);
details.parse(buffer);
petDetails.put(baseItem, details);
break;
case 4:
int itemId = buffer.getInt();
details = petDetails.get(itemId);
Pets pets = Pets.forId(itemId);
if (details == null) {
details = new PetDetails(pets.getGrowthRate() == 0.0 ? 100.0 : 0.0);
petDetails.put(itemId, details);
}
familiar = new Pet(player, details, itemId, pets.getNpcId(details.getStage()));
break;
case 5:
int hp = buffer.getInt();
if (familiar != null) {
familiar.setAttribute("hp", hp);
}
break;
case 6:
int size = buffer.get();
Pets pet;
for (int i = 0; i < size; i++) {
pet = Pets.forId(buffer.getInt());
if (pet != null) {
insuredPets.add(pet);
}
}
break;
}
}
}
/**
* Called when the player logs in.
*/

View file

@ -1,6 +1,6 @@
package core.game.node.entity.skill.summoning.pet;
import core.game.node.entity.player.info.login.SavingModule;
import java.nio.ByteBuffer;
@ -8,7 +8,7 @@ import java.nio.ByteBuffer;
* A class containing pet details for a certain pet.
* @author Emperor
*/
public final class PetDetails implements SavingModule {
public final class PetDetails {
/**
* The hunger rate.
@ -33,20 +33,6 @@ public final class PetDetails implements SavingModule {
this.growth = growth;
}
@Override
public void save(ByteBuffer buffer) {
buffer.putDouble(hunger);
buffer.putDouble(growth);
buffer.put((byte) stage);
}
@Override
public void parse(ByteBuffer buffer) {
hunger = buffer.getDouble();
growth = buffer.getDouble();
stage = buffer.get();
}
/**
* Increases the hunger value by the given amount.
* @param amount The amount.

View file

@ -1,7 +1,7 @@
package core.game.node.entity.state;
import core.game.node.entity.Entity;
import core.game.node.entity.player.info.login.SavingModule;
import java.nio.ByteBuffer;
import java.util.HashMap;
@ -11,7 +11,7 @@ import java.util.Map;
* Handles an entity's status (eg. poisoned, stunned, frozen, skulled, ...)
* @author Emperor
*/
public final class StateManager implements SavingModule {
public final class StateManager {
/**
* The entity.
@ -31,35 +31,6 @@ public final class StateManager implements SavingModule {
this.entity = entity;
}
@Override
public void save(ByteBuffer buffer) {
for (EntityState state : states.keySet()) {
StatePulse pulse = states.get(state);
if (pulse == null) {
System.out.println("Pulse for state " + state + " is null!");
continue;
}
if (pulse.isSaveRequired()) {
buffer.put((byte) state.ordinal());
pulse.save(buffer);
}
}
buffer.put((byte) -1);
}
@Override
public void parse(ByteBuffer buffer) {
int ordinal = 0;
while ((ordinal = buffer.get()) != -1) {
EntityState state = EntityState.values()[ordinal];
StatePulse pulse = state.getPulse().parse(entity, buffer);
if (pulse == null) {
System.out.println("Pulse for state " + state + " is null!");
}
states.put(state, pulse);
}
}
/**
* Initializes the pulses.
*/

View file

@ -2,7 +2,7 @@ package core.game.system.monitor;
import core.cache.misc.buffer.ByteBufferUtils;
import core.game.node.entity.player.Player;
import core.game.node.entity.player.info.login.SavingModule;
import java.nio.ByteBuffer;
@ -10,7 +10,7 @@ import java.nio.ByteBuffer;
* Handles the player monitoring.
* @author Emperor
*/
public final class PlayerMonitor implements SavingModule {
public final class PlayerMonitor {
/**
* The public chat log.
@ -96,44 +96,6 @@ public final class PlayerMonitor implements SavingModule {
logs[DUEL_LOG] = new MessageLog(200);
}
@Override
public void save(ByteBuffer buffer) {
if (duplicationLog != null && duplicationLog.getFlag() != 0) {
buffer.put((byte) 1).put((byte) duplicationLog.getFlag());
}
if (macroFlag != 0) {
buffer.put((byte) 2).put((byte) macroFlag);
}
if (duplicationLog != null && duplicationLog.isLoggingFlagged()) {
buffer.put((byte) 4).putLong(duplicationLog.getLastIncreaseFlag());
}
buffer.put((byte) 0); // EOF
}
@Override
public void parse(ByteBuffer buffer) {
int opcode;
while ((opcode = buffer.get() & 0xFF) != 0) {
switch (opcode) {
case 1:
getDuplicationLog().flag(buffer.get() & 0xFF);
break;
case 2:
macroFlag = buffer.get() & 0xFF;
break;
case 3:
int size = buffer.get() & 0xFF;
for (int i = 0; i < size; i++) {
ByteBufferUtils.getString(buffer);
}
break;
case 4:
getDuplicationLog().setLastIncreaseFlag(buffer.getLong());
break;
}
}
}
/**
* Clears the logs.
*/

View file

@ -0,0 +1,4 @@
package core.tools
const val START_DIALOGUE = 0
const val END_DIALOGUE = 1000000