diff --git a/Server/data/configs/varbit_definitions.json b/Server/data/configs/varbit_definitions.json new file mode 100644 index 000000000..720b1676e --- /dev/null +++ b/Server/data/configs/varbit_definitions.json @@ -0,0 +1,19 @@ +[ + { + "description": "Bank insert mode", + + "varpId": "304", + "varbitId": "7000", + "startBit": "0", + "endBit": "0" + }, + + { + "description": "Bank note mode", + + "varpId": "115", + "varbitId": "7001", + "startBit": "0", + "endBit": "0" + } +] \ No newline at end of file diff --git a/Server/src/main/java/core/cache/def/impl/NPCDefinition.java b/Server/src/main/java/core/cache/def/impl/NPCDefinition.java index 20a6d3b20..013492a3c 100644 --- a/Server/src/main/java/core/cache/def/impl/NPCDefinition.java +++ b/Server/src/main/java/core/cache/def/impl/NPCDefinition.java @@ -915,20 +915,20 @@ public final class NPCDefinition extends Definition { */ public int getConfigId() { if(configFileId != -1) { - return VarbitDefinition.forNPCID(configFileId).getConfigId(); + return VarbitDefinition.forNPCID(configFileId).getVarpId(); } else return configFileId; } public int getVarbitOffset() { if(configFileId != -1){ - return VarbitDefinition.forNPCID(configFileId).getBitShift(); + return VarbitDefinition.forNPCID(configFileId).getStartBit(); } return -1; } public int getVarbitSize() { if(configFileId != -1){ - return VarbitDefinition.forNPCID(configFileId).getBitSize() - VarbitDefinition.forNPCID(configFileId).getBitShift(); + return VarbitDefinition.forNPCID(configFileId).getEndBit() - VarbitDefinition.forNPCID(configFileId).getStartBit(); } return -1; } diff --git a/Server/src/main/java/core/cache/def/impl/VarbitDefinition.java b/Server/src/main/java/core/cache/def/impl/VarbitDefinition.java index 861632381..10c20ae14 100644 --- a/Server/src/main/java/core/cache/def/impl/VarbitDefinition.java +++ b/Server/src/main/java/core/cache/def/impl/VarbitDefinition.java @@ -2,7 +2,6 @@ package core.cache.def.impl; import core.cache.Cache; import core.game.node.entity.player.Player; -import rs09.game.world.GameWorld; import java.nio.ByteBuffer; import java.util.HashMap; @@ -32,17 +31,17 @@ public final class VarbitDefinition { /** * The config id. */ - private int configId; + private int varpId; /** * The bit shift amount. */ - private int bitShift; + private int startBit; /** * The bit amount. */ - private int bitSize; + private int endBit; /** * Constructs a new {@code ConfigFileDefinition} {@code Object}. @@ -52,6 +51,14 @@ public final class VarbitDefinition { this.id = id; } + public VarbitDefinition(int varpId, int id, int startBit, int endBit) + { + this.varpId = varpId; + this.id = id; + this.startBit = startBit; + this.endBit = endBit; + } + /** * Initializes the bit flags. */ @@ -81,11 +88,11 @@ public final class VarbitDefinition { } public static VarbitDefinition forId(int id){ - /*VarbitDefinition def = MAPPING.get(id); + VarbitDefinition def = MAPPING.get(id); if (def != null) { return def; - }*/ - VarbitDefinition def; + } + def = new VarbitDefinition(id); byte[] bs = Cache.getIndexes()[22].getFileData(id >>> 10, id & 0x3ff); if (bs != null) { @@ -93,9 +100,9 @@ public final class VarbitDefinition { int opcode = 0; while ((opcode = buffer.get() & 0xFF) != 0) { if (opcode == 1) { - def.configId = buffer.getShort() & 0xFFFF; - def.bitShift = buffer.get() & 0xFF; - def.bitSize = buffer.get() & 0xFF; + def.varpId = buffer.getShort() & 0xFFFF; + def.startBit = buffer.get() & 0xFF; + def.endBit = buffer.get() & 0xFF; } } } @@ -103,14 +110,14 @@ public final class VarbitDefinition { return def; } - public static void main(String... args) throws Throwable { - GameWorld.prompt(false); - for (int i = 0; i < 15000; i++) { - VarbitDefinition def = forObjectID(i); - if (def != null && def.configId == 33) { - System.out.println("Config file [id=" + i + ", shift=" + def.bitShift + "]!"); - } - } + public static void create(int varpId, int varbitId, int startBit, int endBit){ + VarbitDefinition def = new VarbitDefinition( + varpId, + varbitId, + startBit, + endBit + ); + MAPPING.put(varbitId, def); } /** @@ -119,12 +126,12 @@ public final class VarbitDefinition { * @return The config value. */ public int getValue(Player player) { - int size = BITS[bitSize - bitShift]; - int bitValue = player.varpManager.get(getConfigId()).getBitRangeValue(getBitShift(), getBitShift() + (bitSize - bitShift)); + int size = BITS[endBit - startBit]; + int bitValue = player.varpManager.get(getVarpId()).getBitRangeValue(getStartBit(), getStartBit() + (endBit - startBit)); if(bitValue != 0){ - return size & (bitValue >>> bitShift); + return size & (bitValue >>> startBit); } - return size & (player.getConfigManager().get(configId) >>> bitShift); + return size & (player.getConfigManager().get(varpId) >>> startBit); } /** @@ -143,32 +150,20 @@ public final class VarbitDefinition { return id; } - /** - * Gets the configId. - * @return The configId. - */ - public int getConfigId() { - return configId; + public int getVarpId() { + return varpId; } - /** - * Gets the bitShift. - * @return The bitShift. - */ - public int getBitShift() { - return bitShift; + public int getStartBit() { + return startBit; } - /** - * Gets the bitSize. - * @return The bitSize. - */ - public int getBitSize() { - return bitSize; + public int getEndBit() { + return endBit; } @Override public String toString() { - return "ConfigFileDefinition [id=" + id + ", configId=" + configId + ", bitShift=" + bitShift + ", bitSize=" + bitSize + "]"; + return "ConfigFileDefinition [id=" + id + ", configId=" + varpId + ", bitShift=" + startBit + ", bitSize=" + endBit + "]"; } } \ No newline at end of file diff --git a/Server/src/main/java/core/game/container/impl/BankContainer.java b/Server/src/main/java/core/game/container/impl/BankContainer.java index 2dbacef83..ca3b3ceb2 100644 --- a/Server/src/main/java/core/game/container/impl/BankContainer.java +++ b/Server/src/main/java/core/game/container/impl/BankContainer.java @@ -1,6 +1,7 @@ package core.game.container.impl; import core.game.container.access.InterfaceContainer; +import org.rs09.consts.Vars; import rs09.ServerConstants; import core.game.component.Component; import core.game.container.*; @@ -42,11 +43,6 @@ public final class BankContainer extends Container { */ private final BankListener listener; - /** - * Set {@code true} to note items. - */ - private boolean noteItems; - /** * If the bank is open. */ @@ -67,11 +63,6 @@ public final class BankContainer extends Container { */ private final int[] tabStartSlot = new int[TAB_SIZE]; - /** - * If inserting items is enabled. - */ - private boolean insertItems; - /** * Construct a new {@code BankContainer} {@code Object}. * @param player The player reference. @@ -287,7 +278,7 @@ public final class BankContainer extends Container { } item = new Item(item.getId(), amount, item.getCharge()); int noteId = item.getDefinition().getNoteId(); - Item add = noteItems && noteId > 0 ? new Item(noteId, amount, item.getCharge()) : item; + Item add = isNoteItems() && noteId > 0 ? new Item(noteId, amount, item.getCharge()) : item; int maxCount = player.getInventory().getMaximumAdd(add); if (amount > maxCount) { item.setAmount(maxCount); @@ -297,7 +288,7 @@ public final class BankContainer extends Container { return; } } - if (noteItems && noteId < 0) { + if (isNoteItems() && noteId < 0) { player.getPacketDispatch().sendMessage("This item can't be withdrawn as a note."); add = item; } @@ -485,7 +476,7 @@ public final class BankContainer extends Container { * @return If items have to be noted {@code true}. */ public boolean isNoteItems() { - return noteItems; + return player.varpManager.getVarbit(Vars.VARBIT_IFACE_BANK_NOTE_MODE) == 1; } /** @@ -493,7 +484,8 @@ public final class BankContainer extends Container { * @param noteItems If items have to be noted {@code true}. */ public void setNoteItems(boolean noteItems) { - this.noteItems = noteItems; + player.varpManager.flagSave(Vars.VARBIT_IFACE_BANK_NOTE_MODE, true); + player.varpManager.setVarbit(Vars.VARBIT_IFACE_BANK_NOTE_MODE, noteItems ? 1 : 0); } /** @@ -532,7 +524,8 @@ public final class BankContainer extends Container { * @param insertItems The insert items value. */ public void setInsertItems(boolean insertItems) { - this.insertItems = insertItems; + player.varpManager.setVarbit(Vars.VARBIT_IFACE_BANK_INSERT_MODE, insertItems ? 1 : 0); + player.varpManager.flagSave(Vars.VARBIT_IFACE_BANK_INSERT_MODE, true); } /** @@ -540,7 +533,7 @@ public final class BankContainer extends Container { * @return {@code True} if inserting items mode is enabled. */ public boolean isInsertItems() { - return insertItems; + return player.varpManager.getVarbit(Vars.VARBIT_IFACE_BANK_INSERT_MODE) == 1; } /** diff --git a/Server/src/main/java/core/game/content/activity/gwd/GodwarsEntranceHandler.java b/Server/src/main/java/core/game/content/activity/gwd/GodwarsEntranceHandler.java index 41534ca4d..5253e618e 100644 --- a/Server/src/main/java/core/game/content/activity/gwd/GodwarsEntranceHandler.java +++ b/Server/src/main/java/core/game/content/activity/gwd/GodwarsEntranceHandler.java @@ -43,14 +43,14 @@ public final class GodwarsEntranceHandler extends OptionHandler { return true; } player.varpManager.get(1048).setVarbit(0,1).send(player); - player.varpManager.flagSave(1048); + player.varpManager.flagSave(1048, false); return true; case 26341: if (player.getSkills().getStaticLevel(Skills.AGILITY) < 15) { player.getPacketDispatch().sendMessage("You need an Agility level of 15 to enter this."); return true; } - if (player.varpManager.get(1048).getVarbit(4) == null) { + if (player.varpManager.get(1048).getVarbit(4) == 0) { player.getDialogueInterpreter().sendDialogues(6201, FacialExpression.HALF_GUILTY, "Cough... Hey, over here."); return true; } diff --git a/Server/src/main/java/core/game/content/quest/members/junglepotion/JunglePotion.java b/Server/src/main/java/core/game/content/quest/members/junglepotion/JunglePotion.java index 2c7d5c903..348038da8 100644 --- a/Server/src/main/java/core/game/content/quest/members/junglepotion/JunglePotion.java +++ b/Server/src/main/java/core/game/content/quest/members/junglepotion/JunglePotion.java @@ -80,7 +80,7 @@ public final class JunglePotion extends Quest { player.getSkills().addExperience(Skills.HERBLORE, 775); player.getQuestRepository().syncronizeTab(player); player.varpManager.get(534).setVarbit(15,2).setVarbit(18,2).setVarbit(21,2).setVarbit(24,2).setVarbit(12,2).send(player); - player.varpManager.flagSave(534); + player.varpManager.flagSave(534, false); } @Override diff --git a/Server/src/main/java/core/game/node/entity/player/link/ConfigurationManager.java b/Server/src/main/java/core/game/node/entity/player/link/ConfigurationManager.java index 2f75f4f4d..43fa76d7d 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/ConfigurationManager.java +++ b/Server/src/main/java/core/game/node/entity/player/link/ConfigurationManager.java @@ -143,7 +143,7 @@ public final class ConfigurationManager { public void set(int id, int value, boolean saved) { player.varpManager.get(id).setVarbit(0,value).send(player); if (saved) { - player.varpManager.flagSave(id); + player.varpManager.flagSave(id, false); } } diff --git a/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java b/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java index 9f966cb16..af10beebf 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java +++ b/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java @@ -73,7 +73,7 @@ public final class QuestRepository { for (Quest quest : QUESTS.values()) { config = quest.getConfig(player, getStage(quest)); player.varpManager.get(config[0]).setVarbit(0,config[1]).send(player); - player.varpManager.flagSave(config[0]); + player.varpManager.flagSave(config[0], false); player.setAttribute("/save:quest-varps-converted",true); // System.out.println(quest.getName() + " - > stage = " + getStage(quest) + " - configs = { " + config[0] + " " + config[1] + " }"); } diff --git a/Server/src/main/java/core/game/node/entity/skill/agility/pyramid/AgilityPyramidCourse.java b/Server/src/main/java/core/game/node/entity/skill/agility/pyramid/AgilityPyramidCourse.java index b61dc532d..d655d9393 100644 --- a/Server/src/main/java/core/game/node/entity/skill/agility/pyramid/AgilityPyramidCourse.java +++ b/Server/src/main/java/core/game/node/entity/skill/agility/pyramid/AgilityPyramidCourse.java @@ -497,8 +497,8 @@ public final class AgilityPyramidCourse extends AgilityCourse { */ public static void addConfig(final Player player, final int objectId, final int value, boolean save) { final VarbitDefinition definition = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID()); - final int oldVal = (definition.getValue(player) << definition.getBitShift()); - final int newVal = (value << definition.getBitShift()); + final int oldVal = (definition.getValue(player) << definition.getStartBit()); + final int newVal = (value << definition.getStartBit()); player.getConfigManager().set(CONFIG_ID, (player.getConfigManager().get(CONFIG_ID) - oldVal) + newVal, save); } diff --git a/Server/src/main/java/core/game/node/entity/skill/runecrafting/TiaraPlugin.java b/Server/src/main/java/core/game/node/entity/skill/runecrafting/TiaraPlugin.java index 53585a4bf..d4af182b9 100644 --- a/Server/src/main/java/core/game/node/entity/skill/runecrafting/TiaraPlugin.java +++ b/Server/src/main/java/core/game/node/entity/skill/runecrafting/TiaraPlugin.java @@ -42,7 +42,7 @@ public final class TiaraPlugin implements Plugin { break; } MysteriousRuin ruin = MysteriousRuin.forTalisman(Tiara.forItem(item).getTalisman()); - player.getConfigManager().set(CONFIG, 1 << VarbitDefinition.forObjectID(SceneryDefinition.forId(ruin.getObject()[0]).getVarbitID()).getBitShift(), true); + player.getConfigManager().set(CONFIG, 1 << VarbitDefinition.forObjectID(SceneryDefinition.forId(ruin.getObject()[0]).getVarbitID()).getStartBit(), true); break; case "unequip": final Item other = args.length == 2 ? null : (Item) args[2]; @@ -54,7 +54,7 @@ public final class TiaraPlugin implements Plugin { Tiara tiara = Tiara.forItem(other); if (tiara != null) { MysteriousRuin r = MysteriousRuin.forTalisman(tiara.getTalisman()); - player.getConfigManager().set(CONFIG, 1 << VarbitDefinition.forObjectID(SceneryDefinition.forId(r.getObject()[0]).getVarbitID()).getBitShift(), true); + player.getConfigManager().set(CONFIG, 1 << VarbitDefinition.forObjectID(SceneryDefinition.forId(r.getObject()[0]).getVarbitID()).getStartBit(), true); break; } } diff --git a/Server/src/main/java/core/game/node/scenery/Scenery.java b/Server/src/main/java/core/game/node/scenery/Scenery.java index c8c55b04b..4f38ac8bb 100644 --- a/Server/src/main/java/core/game/node/scenery/Scenery.java +++ b/Server/src/main/java/core/game/node/scenery/Scenery.java @@ -11,7 +11,6 @@ import core.game.system.task.Pulse; import core.game.world.map.Direction; import core.game.world.map.Location; import org.jetbrains.annotations.NotNull; -import rs09.game.system.SystemLogger; import java.util.ArrayList; import java.util.List; @@ -229,7 +228,7 @@ public class Scenery extends Node { if (def.getVarbitID() > -1) { VarbitDefinition config = def.getConfigFile(); if (config != null) { - player.varpManager.get(config.getConfigId()).setVarbit(config.getBitShift(),index).send(player); + player.varpManager.get(config.getVarpId()).setVarbit(config.getStartBit(),index).send(player); } } else if (def.getConfigId() > -1) { player.varpManager.get(def.getConfigId()).setVarbit(0,index); diff --git a/Server/src/main/java/core/net/packet/in/ExaminePacket.java b/Server/src/main/java/core/net/packet/in/ExaminePacket.java index 47e916146..8baa2d55b 100644 --- a/Server/src/main/java/core/net/packet/in/ExaminePacket.java +++ b/Server/src/main/java/core/net/packet/in/ExaminePacket.java @@ -31,7 +31,7 @@ public final class ExaminePacket implements IncomingPacket { name = d.getExamine(); //String coords = id + ", " + player.getLocation().getX() + ", " + player.getLocation().getY() + ", " + player.getLocation().getZ(); player.debug("Object id: " + id + ", models: " + (d.getModelIds() != null ? Arrays.toString(d.getModelIds()) : null) + ", anim: " + d.animationId + ", config: " + (d.getVarbitID() != -1 ? d.getVarbitID() + " (file)" : d.getConfigId()) + "."); - player.debug("Varp config index: " + VarbitDefinition.forObjectID(d.getVarbitID()).getConfigId()); + player.debug("Varp config index: " + VarbitDefinition.forObjectID(d.getVarbitID()).getVarpId()); player.getPacketDispatch().sendMessage(""+name+""); /*if { Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection("LandscapeParser.removeGameObject(new GameObject("+coords+"));//"+ d.getName() ), null); diff --git a/Server/src/main/java/core/net/packet/in/InteractionPacket.java b/Server/src/main/java/core/net/packet/in/InteractionPacket.java index d53139937..551b8e0d5 100644 --- a/Server/src/main/java/core/net/packet/in/InteractionPacket.java +++ b/Server/src/main/java/core/net/packet/in/InteractionPacket.java @@ -1,6 +1,5 @@ package core.net.packet.in; -import api.events.InteractionEvent; import core.cache.def.impl.SceneryDefinition; import core.cache.def.impl.VarbitDefinition; import core.game.content.quest.PluginInteractionManager; @@ -27,11 +26,8 @@ import rs09.game.interaction.InteractionListener; import rs09.game.interaction.InteractionListeners; import rs09.game.world.repository.Repository; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Locale; -import java.util.function.IntPredicate; /** * Handles the incoming interaction packets. @@ -284,7 +280,7 @@ public final class InteractionPacket implements IncomingPacket { player.debug(object + ", original=" + objectId + ", option=" + option.getName() + ""); player.debug("dir=" + object.getDirection()); VarbitDefinition def = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID()); - player.debug("Varp ID=" + def.getConfigId() + " Offset=" + def.getBitShift() + " Size=" + def.getBitSize()); + player.debug("Varp ID=" + def.getVarpId() + " Offset=" + def.getStartBit() + " Size=" + def.getEndBit()); player.debug("Varbit: " + def.getId()); if (option.getHandler() != null) { player.debug("Object handler: " + option.getHandler().getClass().getSimpleName()); diff --git a/Server/src/main/kotlin/api/events/Events.kt b/Server/src/main/kotlin/api/events/Events.kt index 12d673e8f..17e8d5471 100644 --- a/Server/src/main/kotlin/api/events/Events.kt +++ b/Server/src/main/kotlin/api/events/Events.kt @@ -18,4 +18,5 @@ data class SelfDeath(val killer: Entity) : Event data class TickEvent(val worldTicks: Int) : Event data class PickUpEvent(val itemId: Int) : Event data class InterfaceOpenEvent(val component: Component) : Event -data class InterfaceCloseEvent(val component: Component) : Event \ No newline at end of file +data class InterfaceCloseEvent(val component: Component) : Event +data class VarbitUpdateEvent(val offset: Int, val value: Int) : Event \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/Event.kt b/Server/src/main/kotlin/rs09/game/Event.kt index 62e1b3408..9e30a688c 100644 --- a/Server/src/main/kotlin/rs09/game/Event.kt +++ b/Server/src/main/kotlin/rs09/game/Event.kt @@ -15,4 +15,5 @@ object Event { @JvmStatic val PickedUp = PickUpEvent::class.java @JvmStatic val InterfaceOpened = InterfaceOpenEvent::class.java @JvmStatic val InterfaceClosed = InterfaceCloseEvent::class.java + @JvmStatic val VarbitUpdated = VarbitUpdateEvent::class.java } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/Varp.kt b/Server/src/main/kotlin/rs09/game/Varp.kt index 68d2cb195..0346cfb4e 100644 --- a/Server/src/main/kotlin/rs09/game/Varp.kt +++ b/Server/src/main/kotlin/rs09/game/Varp.kt @@ -23,7 +23,7 @@ class Varp(val index: Int) { return config } - fun getVarbit(offset: Int): Int?{ + fun getVarbit(offset: Int): Int { return getVarbitValue(offset) } diff --git a/Server/src/main/kotlin/rs09/game/VarpManager.kt b/Server/src/main/kotlin/rs09/game/VarpManager.kt index 718e75720..0cf5ba7d1 100644 --- a/Server/src/main/kotlin/rs09/game/VarpManager.kt +++ b/Server/src/main/kotlin/rs09/game/VarpManager.kt @@ -1,9 +1,8 @@ package rs09.game +import api.events.VarbitUpdateEvent import core.cache.def.impl.VarbitDefinition import core.game.node.entity.player.Player -import core.net.packet.PacketRepository -import core.net.packet.context.VarbitContext import org.json.simple.JSONArray import org.json.simple.JSONObject import rs09.game.node.entity.skill.farming.FarmingPatch @@ -31,26 +30,41 @@ class VarpManager(val player: Player) { } fun setVarbit(def: VarbitDefinition, value: Int){ - get(def.configId).setVarbit(def.bitShift,value).send(player) + get(def.varpId).setVarbit(def.startBit,value).send(player) + + player.dispatch(VarbitUpdateEvent(def.id, value)) } fun setVarbit(varbitIndex: Int, value: Int){ val def = VarbitDefinition.forId(varbitIndex) - get(def.configId).setVarbit(def.bitShift, value) - get(def.configId).send(player) + get(def.varpId).setVarbit(def.startBit, value) + get(def.varpId).send(player) + + player.dispatch(VarbitUpdateEvent(varbitIndex, value)) } - fun getVarbit(varbitIndex: Int){ + fun getVarbit(varbitIndex: Int): Int{ val def = VarbitDefinition.forId(varbitIndex) - get(def.configId).getVarbit(def.bitShift) + return get(def.varpId).getVarbit(def.startBit) } - fun flagSave(index: Int){ - get(index).save = true + fun flagSave(index: Int, isVarbit: Boolean = false){ + if (isVarbit) { + val def = VarbitDefinition.forId(index) + flagSave(def.varpId, false) + } else { + get(index).save = true + } } - fun unflagSave(index: Int){ - get(index).save = false + fun unflagSave(index: Int, isVarbit: Boolean = false){ + if (isVarbit) { + val def = VarbitDefinition.forId(index) + unflagSave(def.varpId, false) + } + else { + get(index).save = false + } } fun sendAllVarps(){ diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/canoestation/CanoeStationListener.kt b/Server/src/main/kotlin/rs09/game/interaction/object/canoestation/CanoeStationListener.kt index a752cae91..5c4f252d3 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/canoestation/CanoeStationListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/canoestation/CanoeStationListener.kt @@ -44,7 +44,7 @@ class CanoeStationListener : InteractionListener { return@on true } player.lock() - player.varpManager.get(varbit.configId).clearBitRange(0,31) + player.varpManager.get(varbit.varpId).clearBitRange(0,31) player.faceLocation(CanoeUtils.getFaceLocation(player.location)) player.animate(axe.animation) player.varpManager.setVarbit(varbit,STAGE_TREE_NONINTERACTABLE) diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/CompostBins.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/CompostBins.kt index e6d0f6a48..bd9b5431a 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/CompostBins.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/CompostBins.kt @@ -25,7 +25,7 @@ enum class CompostBins(val varpIndex: Int, val varpOffest: Int) { fun forObjectID(id: Int): CompostBins?{ val objDef = SceneryDefinition.forId(id) val def = VarbitDefinition.forObjectID(objDef.varbitID) - return bins[def.configId shl def.bitShift] + return bins[def.varpId shl def.startBit] } } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/FarmingPatch.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/FarmingPatch.kt index 35844271a..adfc2e2d7 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/FarmingPatch.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/FarmingPatch.kt @@ -83,7 +83,7 @@ enum class FarmingPatch(val varpIndex: Int, val varpOffset: Int, val type: Patch fun forObjectID(id: Int): FarmingPatch?{ val objDef = SceneryDefinition.forId(id) val def = VarbitDefinition.forObjectID(objDef.varbitID) - return patches[def.configId shl def.bitShift] + return patches[def.varpId shl def.startBit] } } diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt index 8f3147c93..ce88a3f49 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt @@ -156,9 +156,9 @@ class DevelopmentCommandSet : CommandSet(Privilege.ADMIN) { for(id in 0 until 10000) { val def = VarbitDefinition.forId(id) - if(def.configId == varp) + if(def.varpId == varp) { - sendMessage(player, "${def.id} -> [offset: ${def.bitShift}, upperBound: ${def.bitSize}]") + sendMessage(player, "${def.id} -> [offset: ${def.startBit}, upperBound: ${def.endBit}]") } } sendMessage(player, "=========================================") diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt index b4657dff7..ff1957f32 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt @@ -117,7 +117,7 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){ notify(player,"Region: [id=" + l.regionId + ", active=" + r.isActive + ", instanced=" + (r is DynamicRegion) + "], obj=" + RegionManager.getObject(l) + ".") notify(player, "Jagex: ${l.z}_${l.regionId shr 8}_${l.regionId and 0xFF}_${l.localX}_${l.localY}") notify(player,"Object: " + RegionManager.getObject(l).also{obj = it} + ".") - notify(player,"Object Varp: " + obj?.definition?.configFile?.configId + " offset: " + obj?.definition?.configFile?.bitShift + " size: " + (obj?.definition?.configFile?.bitShift?.minus(obj?.definition?.configFile?.bitShift!!))) + notify(player,"Object Varp: " + obj?.definition?.configFile?.varpId + " offset: " + obj?.definition?.configFile?.startBit + " size: " + (obj?.definition?.configFile?.startBit?.minus(obj?.definition?.configFile?.startBit!!))) SystemLogger.logInfo("Viewport: " + l.getSceneX(player.playerFlags.lastSceneGraph) + "," + l.getSceneY(player.playerFlags.lastSceneGraph)) val loc = "Location.create(" + l.x + ", " + l.y + ", " + l.z + ")" SystemLogger.logInfo(loc + "; " + player.playerFlags.lastSceneGraph + ", " + l.localX + ", " + l.localY) @@ -427,7 +427,7 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){ reject(player,"Syntax: ::getobjectvarp objectid") } val objectID = args[1].toInt() - notify(player, "${VarbitDefinition.forObjectID(SceneryDefinition.forId(objectID).varbitID).configId}") + notify(player, "${VarbitDefinition.forObjectID(SceneryDefinition.forId(objectID).varbitID).varpId}") } define("define_varbit", Privilege.ADMIN, "::define_varbit VARBIT ID", "Prints information about the given varbit."){ player, args -> diff --git a/Server/src/main/kotlin/rs09/game/system/config/ConfigParser.kt b/Server/src/main/kotlin/rs09/game/system/config/ConfigParser.kt index 508c84d4f..91031154a 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/ConfigParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/ConfigParser.kt @@ -26,6 +26,7 @@ class ConfigParser : Commands { GroundSpawnLoader().load() MusicConfigLoader().load() RangedConfigLoader().load() + CustomVarbitParser().load() } fun reloadConfigs(callback: () -> Unit) { diff --git a/Server/src/main/kotlin/rs09/game/system/config/CustomVarbitParser.kt b/Server/src/main/kotlin/rs09/game/system/config/CustomVarbitParser.kt new file mode 100644 index 000000000..3a8df32d3 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/system/config/CustomVarbitParser.kt @@ -0,0 +1,35 @@ +package rs09.game.system.config + +import core.cache.def.impl.VarbitDefinition +import org.json.simple.JSONArray +import org.json.simple.JSONObject +import org.json.simple.parser.JSONParser +import rs09.ServerConstants +import rs09.game.system.SystemLogger +import java.io.FileReader + +class CustomVarbitParser { + val parser = JSONParser() + var reader: FileReader? = null + + fun load() { + var count = 0 + + reader = FileReader(ServerConstants.CONFIG_PATH + "varbit_definitions.json") + val array = parser.parse(reader) as JSONArray + + for (jObject in array) { + val varbitDef = jObject as JSONObject + + val varpId = varbitDef["varpId"].toString().toInt() + val varbitId = varbitDef["varbitId"].toString().toInt() + val startBit = varbitDef["startBit"].toString().toInt() + val endBit = varbitDef["endBit"].toString().toInt() + + VarbitDefinition.create(varpId, varbitId, startBit, endBit) + count++ + } + + SystemLogger.logInfo("Parsed $count custom varbit definitions.") + } +} \ No newline at end of file