Fixed some issues with incorrectly reading varbit values

Fixed Dwarf Cannon quest
Improved varp/varbit interface and handling
This commit is contained in:
Ceikry
2023-06-06 09:31:16 +00:00
committed by Ryan
parent f613fb13cd
commit bd12800cca
163 changed files with 1006 additions and 1358 deletions
@@ -281,7 +281,7 @@ enum class EnchantedJewellery(
"assigned to kill ${getSlayerTaskName(player).lowercase(Locale.getDefault())}'s; " + "assigned to kill ${getSlayerTaskName(player).lowercase(Locale.getDefault())}'s; " +
"only ${getSlayerTaskKillsRemaining(player)} more to go.", core.game.dialogue.FacialExpression.FRIENDLY) "only ${getSlayerTaskKillsRemaining(player)} more to go.", core.game.dialogue.FacialExpression.FRIENDLY)
// Slayer tracker UI // Slayer tracker UI
setVarbit(player, 2502, 0, slayerManager.flags.taskFlags shr 4) setVarp(player, 2502, slayerManager.flags.taskFlags shr 4)
} }
private fun canTeleport(player: Player, item: Item): Boolean { private fun canTeleport(player: Player, item: Item): Boolean {
@@ -335,4 +335,4 @@ enum class EnchantedJewellery(
} }
} }
} }
} }
@@ -37,9 +37,9 @@ object DrillDemonUtils {
} }
fun changeSignsAndAssignTask(player: Player){ fun changeSignsAndAssignTask(player: Player){
player.varpManager.get(DD_SIGN_VARP).clearBitRange(0,31) setVarp(player, DD_SIGN_VARP, 0)
val tempList = arrayListOf(DD_SIGN_JOG, DD_SIGN_JUMP, DD_SIGN_PUSHUP, DD_SIGN_SITUP).shuffled().toMutableList() val tempList = arrayListOf(DD_SIGN_JOG, DD_SIGN_JUMP, DD_SIGN_PUSHUP, DD_SIGN_SITUP).shuffled().toMutableList()
val tempOffsetList = arrayListOf(0,2,4,6).shuffled().toMutableList() val tempOffsetList = arrayListOf(1335, 1336, 1337, 1338).shuffled().toMutableList()
val task = tempList.random() val task = tempList.random()
val taskOffset = tempOffsetList.random() val taskOffset = tempOffsetList.random()
@@ -48,9 +48,9 @@ object DrillDemonUtils {
tempList.remove(task) tempList.remove(task)
tempOffsetList.remove(taskOffset) tempOffsetList.remove(taskOffset)
player.varpManager.get(DD_SIGN_VARP).setVarbit(taskOffset,task).send(player) setVarbit(player, taskOffset, task)
for(i in 0 until tempList.size){ for(i in 0 until tempList.size){
player.varpManager.get(DD_SIGN_VARP).setVarbit(tempOffsetList[i],tempList[i]).send(player) setVarbit(player, tempOffsetList[i], tempList[i])
} }
player.dialogueInterpreter.sendDialogues(NPCs.SERGEANT_DAMIEN_2790, core.game.dialogue.FacialExpression.OLD_NORMAL,when(task){ player.dialogueInterpreter.sendDialogues(NPCs.SERGEANT_DAMIEN_2790, core.game.dialogue.FacialExpression.OLD_NORMAL,when(task){
@@ -63,18 +63,18 @@ object DrillDemonUtils {
player.unlock() player.unlock()
} }
fun getOffsetForID(id: Int): Int{ fun getVarbitForId(id: Int): Int{
return when(id){ return when(id){
10076 -> 0 10076 -> 1335
10077 -> 2 10077 -> 1336
10078 -> 4 10078 -> 1337
10079 -> 6 10079 -> 1338
else -> 0 else -> 0
} }
} }
fun getMatTask(id: Int, player: Player): Int{ fun getMatTask(id: Int, player: Player): Int{
return player.varpManager.get(DD_SIGN_VARP).getVarbitValue(getOffsetForID(id)) ?: 0 return getVarbit(player, getVarbitForId(id))
} }
fun cleanup(player: Player){ fun cleanup(player: Player){
@@ -117,4 +117,4 @@ object DrillDemonUtils {
GroundItemManager.create(reward,player) GroundItemManager.create(reward,player)
} }
} }
} }
@@ -41,8 +41,7 @@ class FairyRingInterface : InterfaceListener {
player.removeAttribute("fr:ring1") player.removeAttribute("fr:ring1")
player.removeAttribute("fr:ring2") player.removeAttribute("fr:ring2")
player.removeAttribute("fr:ring3") player.removeAttribute("fr:ring3")
clearVarp(player, 816) setVarp(player, 816, 0)
setVarbit(player, 816, 0, 0)
closeTabInterface(player) closeTabInterface(player)
return@onClose true return@onClose true
} }
@@ -76,7 +75,7 @@ class FairyRingInterface : InterfaceListener {
toSet = !toSet toSet = !toSet
player.setAttribute("fr:sortorder",toSet) player.setAttribute("fr:sortorder",toSet)
if(toSet) { if(toSet) {
setVarbit(player, 816, 0, ring1index) setVarp(player, 816, ring1index)
player.setAttribute("fr:ring2",0) player.setAttribute("fr:ring2",0)
player.setAttribute("fr:ring3",0) player.setAttribute("fr:ring3",0)
} }
@@ -1,5 +1,7 @@
package content.global.handlers.iface; package content.global.handlers.iface;
import static core.api.ContentAPIKt.*;
import core.game.component.Component; import core.game.component.Component;
import core.game.component.ComponentDefinition; import core.game.component.ComponentDefinition;
import core.game.component.ComponentPlugin; import core.game.component.ComponentPlugin;
@@ -78,7 +80,7 @@ public class SettingTabInterface extends ComponentPlugin {
break; break;
case 8:// house case 8:// house
p.getInterfaceManager().close(); p.getInterfaceManager().close();
p.getConfigManager().set(261, p.getConfigManager().get(261) & 0x1); setVarp(p, 261, getVarp(p, 261) & 0x1);
p.getInterfaceManager().openSingleTab(new Component(398)); p.getInterfaceManager().openSingleTab(new Component(398));
break; break;
} }
@@ -7,6 +7,8 @@ import core.game.node.entity.player.Player;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.plugin.Plugin; import core.plugin.Plugin;
import static core.api.ContentAPIKt.*;
/** /**
* Represents the plugin used for the skilling interface. * Represents the plugin used for the skilling interface.
* @author 'Vexia * @author 'Vexia
@@ -23,9 +25,8 @@ public final class SkillInterface extends ComponentPlugin {
@Override @Override
public boolean handle(Player player, Component component, int opcode, int button, int slot, int itemId) { public boolean handle(Player player, Component component, int opcode, int button, int slot, int itemId) {
player.varpManager.get(965) setVarbit(player, 3288, player.getAttribute("skillMenu", -1));
.setVarbit(0,player.getAttribute("skillMenu",-1)) setVarbit(player, 3289, button - 10);
.setVarbit(10, button - 10).send(player);
return true; return true;
} }
} }
@@ -10,6 +10,8 @@ import core.game.world.GameWorld;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.plugin.Plugin; import core.plugin.Plugin;
import static core.api.ContentAPIKt.*;
/** /**
* Represents the plugin used to handle the skilling tab. * Represents the plugin used to handle the skilling tab.
* @author Vexia * @author Vexia
@@ -35,12 +37,12 @@ public final class SkillTabInterface extends ComponentPlugin {
if (p.getAttribute("levelup:" + config.getSkillId(), false)) { if (p.getAttribute("levelup:" + config.getSkillId(), false)) {
p.removeAttribute("levelup:" + config.getSkillId()); p.removeAttribute("levelup:" + config.getSkillId());
LevelUp.sendFlashingIcons(p, -1); LevelUp.sendFlashingIcons(p, -1);
p.getConfigManager().set(1230, ADVANCE_CONFIGS[config.getSkillId()]); setVarp(p, 1230, ADVANCE_CONFIGS[config.getSkillId()]);
p.getInterfaceManager().open(new Component(741)); p.getInterfaceManager().open(new Component(741));
} else { } else {
p.getPulseManager().clear(); p.getPulseManager().clear();
p.getInterfaceManager().open(new Component(499)); p.getInterfaceManager().open(new Component(499));
p.getConfigManager().set(965, config.getConfig()); setVarp(p, 965, config.getConfig());
p.getAttributes().put("skillMenu", config.getConfig()); p.getAttributes().put("skillMenu", config.getConfig());
} }
} else { } else {
@@ -30,7 +30,7 @@ class StockMarket : InterfaceListener {
player.packetDispatch.sendInterfaceConfig(105, 193, true) player.packetDispatch.sendInterfaceConfig(105, 193, true)
player.packetDispatch.sendIfaceSettings(6, 211, 105, -1, -1) player.packetDispatch.sendIfaceSettings(6, 211, 105, -1, -1)
player.packetDispatch.sendIfaceSettings(6, 209, 105, -1, -1) player.packetDispatch.sendIfaceSettings(6, 209, 105, -1, -1)
player.varpManager.get(1112).setVarbit(0, -1).send(player) setVarp(player, 1112, -1)
return@onOpen true return@onOpen true
} }
@@ -187,13 +187,13 @@ class StockMarket : InterfaceListener {
fun updateOfferValue(player: Player, offer: GrandExchangeOffer, newAmt: Int) fun updateOfferValue(player: Player, offer: GrandExchangeOffer, newAmt: Int)
{ {
offer.offeredValue = newAmt offer.offeredValue = newAmt
player.varpManager.get(1111).setVarbit(0, newAmt).send(player) setVarp(player, 1111, newAmt)
} }
fun updateOfferAmount(player: Player, offer: GrandExchangeOffer, newAmt: Int) fun updateOfferAmount(player: Player, offer: GrandExchangeOffer, newAmt: Int)
{ {
offer.amount = newAmt offer.amount = newAmt
player.varpManager.get(1110).setVarbit(0, newAmt).send(player) setVarp(player, 1110, newAmt)
} }
fun abortOffer(player: Player, offer: GrandExchangeOffer?) fun abortOffer(player: Player, offer: GrandExchangeOffer?)
@@ -320,14 +320,14 @@ class StockMarket : InterfaceListener {
lowPrice = (recommendedPrice * 0.95).toInt() lowPrice = (recommendedPrice * 0.95).toInt()
highPrice = (recommendedPrice * 1.05).toInt() highPrice = (recommendedPrice * 1.05).toInt()
} }
player.varpManager.get(1109).setVarbit(0, offer?.itemID ?: -1).send(player) setVarp(player, 1109, offer?.itemID ?: -1)
player.varpManager.get(1110).setVarbit(0, offer?.amount ?: 0).send(player) setVarp(player, 1110, offer?.amount ?: 0)
player.varpManager.get(1111).setVarbit(0, offer?.offeredValue ?: 0).send(player) setVarp(player, 1111, offer?.offeredValue ?: 0)
player.varpManager.get(1112).setVarbit(0, index).send(player) setVarp(player, 1112, index)
player.varpManager.get(1113).setVarbit(0, if (isSale) 1 else 0).send(player) setVarp(player, 1113, if (isSale) 1 else 0)
player.varpManager.get(1114).setVarbit(0, recommendedPrice).send(player) setVarp(player, 1114, recommendedPrice)
player.varpManager.get(1115).setVarbit(0, lowPrice).send(player) setVarp(player, 1115, lowPrice)
player.varpManager.get(1116).setVarbit(0, highPrice).send(player) setVarp(player, 1116, highPrice)
if (offer != null) { if (offer != null) {
PacketRepository.send( PacketRepository.send(
ContainerPacket::class.java, ContainerPacket::class.java,
@@ -392,4 +392,4 @@ class StockMarket : InterfaceListener {
} }
} }
} }
@@ -23,6 +23,8 @@ import core.plugin.ClassScanner;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the dragonfire shield options. * Handles the dragonfire shield options.
* @author Emperor * @author Emperor
@@ -49,7 +51,7 @@ public final class DragonfireShieldPlugin extends OptionHandler {
boolean usingAttack = !player.getAttribute("dfs_spec", false); boolean usingAttack = !player.getAttribute("dfs_spec", false);
if (!usingAttack) { if (!usingAttack) {
if (!player.getSettings().isSpecialToggled()) { if (!player.getSettings().isSpecialToggled()) {
player.getConfigManager().set(301, 0); setVarp(player, 301, 0);
} }
player.removeAttribute("dfs_spec"); player.removeAttribute("dfs_spec");
player.getProperties().getCombatPulse().setTemporaryHandler(null); player.getProperties().getCombatPulse().setTemporaryHandler(null);
@@ -70,7 +72,7 @@ public final class DragonfireShieldPlugin extends OptionHandler {
player.getPacketDispatch().sendMessage("Your dragonfire shield is recharging."); player.getPacketDispatch().sendMessage("Your dragonfire shield is recharging.");
return true; return true;
} }
player.getConfigManager().set(301, 1); setVarp(player, 301, 1);
player.setAttribute("dfs_spec", true); player.setAttribute("dfs_spec", true);
SwitchAttack attack = new SwitchAttack(null, Animation.create(6696), Graphics.create(1165), new Graphics(1167, 96), Projectile.create(player, null, 1166, 36, 36, 80, 70, 0, 11)); SwitchAttack attack = new SwitchAttack(null, Animation.create(6696), Graphics.create(1165), new Graphics(1167, 96), Projectile.create(player, null, 1166, 36, 36, 80, 70, 0, 11));
DragonfireSwingHandler handler = new DragonfireSwingHandler(false, 26, attack, true) { DragonfireSwingHandler handler = new DragonfireSwingHandler(false, 26, attack, true) {
@@ -79,7 +81,7 @@ public final class DragonfireShieldPlugin extends OptionHandler {
if (entity instanceof Player) { if (entity instanceof Player) {
Player player = (Player) entity; Player player = (Player) entity;
if (!player.getSettings().isSpecialToggled()) { if (!player.getSettings().isSpecialToggled()) {
player.getConfigManager().set(301, 0); setVarp(player, 301, 0);
} }
player.removeAttribute("dfs_spec"); player.removeAttribute("dfs_spec");
Item shield = player.getEquipment().get(EquipmentContainer.SLOT_SHIELD); Item shield = player.getEquipment().get(EquipmentContainer.SLOT_SHIELD);
@@ -43,7 +43,7 @@ class EnchantedGemDialogue() : DialogueFile() {
} else { } else {
npcl(core.game.dialogue.FacialExpression.FRIENDLY, "You're currently assigned to kill ${getSlayerTaskName(player!!)}s; only ${getSlayerTaskKillsRemaining(player!!)} more to go.") npcl(core.game.dialogue.FacialExpression.FRIENDLY, "You're currently assigned to kill ${getSlayerTaskName(player!!)}s; only ${getSlayerTaskKillsRemaining(player!!)} more to go.")
} }
setVarbit(player!!, 2502, 0, getSlayerTaskFlags(player!!) shr 4) setVarp(player!!, 2502, getSlayerTaskFlags(player!!) shr 4)
stage = 1 stage = 1
} }
} }
@@ -63,4 +63,4 @@ class EnchantedGemDialogue() : DialogueFile() {
401 -> player(core.game.dialogue.FacialExpression.HAPPY, "Great, thanks!").also { stage = 1 } 401 -> player(core.game.dialogue.FacialExpression.HAPPY, "Great, thanks!").also { stage = 1 }
} }
} }
} }
@@ -8,6 +8,8 @@ import core.game.node.scenery.Scenery;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.plugin.Plugin; import core.plugin.Plugin;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the creating of an imp jar. * Handles the creating of an imp jar.
* @author Vexia * @author Vexia
@@ -62,12 +64,12 @@ public final class ImpJarCreatePlugin extends UseWithHandler {
* @param player the player. * @param player the player.
*/ */
private void fillOilStill(Player player, Item used) { private void fillOilStill(Player player, Item used) {
int configValue = player.getConfigManager().get(425); int configValue = getVarp(player, 425);
if (used.getId() == 11262 || used.getId() == 10012) { if (used.getId() == 11262 || used.getId() == 10012) {
if (configValue == 0 && used.getId() == 11262) { if (configValue == 0 && used.getId() == 11262) {
player.getInventory().replace(new Item(229), used.getSlot()); player.getInventory().replace(new Item(229), used.getSlot());
player.sendMessage("You refine some imp repellent."); player.sendMessage("You refine some imp repellent.");
player.getConfigManager().set(425, 64, true); setVarp(player, 425, 64, true);
return; return;
} else if (configValue == 32) { } else if (configValue == 32) {
player.sendMessage("There is already lamp oil in the still."); player.sendMessage("There is already lamp oil in the still.");
@@ -77,7 +79,7 @@ public final class ImpJarCreatePlugin extends UseWithHandler {
player.sendMessage("There is already imp repellent in the still."); player.sendMessage("There is already imp repellent in the still.");
} else { } else {
player.getInventory().replace(new Item(11260), used.getSlot()); player.getInventory().replace(new Item(11260), used.getSlot());
player.getConfigManager().set(425, 0, true); setVarp(player, 425, 0, true);
player.sendMessage("You turn the butterfly jar into an impling jar."); player.sendMessage("You turn the butterfly jar into an impling jar.");
} }
return; return;
@@ -95,7 +97,7 @@ public final class ImpJarCreatePlugin extends UseWithHandler {
} }
if (used.getId() == 1939) { if (used.getId() == 1939) {
if (player.getInventory().remove(new Item(1939))) { if (player.getInventory().remove(new Item(1939))) {
player.getConfigManager().set(425, 32, true); setVarp(player, 425, 32, true);
player.sendMessage("You refine some swamp tar into lamp oil."); player.sendMessage("You refine some swamp tar into lamp oil.");
} }
} else { } else {
@@ -105,7 +107,7 @@ public final class ImpJarCreatePlugin extends UseWithHandler {
if (player.getInventory().contains(4525, 1) || player.getInventory().contains(4535, 1) || player.getInventory().contains(4546, 1) || player.getInventory().contains(4700, 1)) { if (player.getInventory().contains(4525, 1) || player.getInventory().contains(4535, 1) || player.getInventory().contains(4546, 1) || player.getInventory().contains(4700, 1)) {
Item replace = new Item(used.getId() == 4525 ? 4522 : used.getId() == 4535 ? 4537 : used.getId() == 4546 ? 4548 : 4701); Item replace = new Item(used.getId() == 4525 ? 4522 : used.getId() == 4535 ? 4537 : used.getId() == 4546 ? 4548 : 4701);
player.getInventory().replace(replace, used.getSlot()); player.getInventory().replace(replace, used.getSlot());
player.getConfigManager().set(425, 0, true); setVarp(player, 425, 0, true);
player.sendMessage("You fill the item with oil."); player.sendMessage("You fill the item with oil.");
} }
} }
@@ -20,7 +20,7 @@ class GWDEntranceRopeListener : InteractionListener {
return@onUseWith false return@onUseWith false
} }
setVarbit(player,1048,0,1,true) setVarbit(player, 3932, 1, true)
return@onUseWith true return@onUseWith true
} }
@@ -15,6 +15,8 @@ import core.tools.StringUtils;
import content.global.skill.summoning.pet.IncubatorState; import content.global.skill.summoning.pet.IncubatorState;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the incubator. * Handles the incubator.
* @author Vexia * @author Vexia
@@ -46,7 +48,7 @@ public class IncubatorPlugin extends OptionHandler {
} }
{ {
String name = egg.getProduct().getName().toLowerCase(); String name = egg.getProduct().getName().toLowerCase();
player.varpManager.get(1160).setVarbit(4,0).send(player); setVarbit(player, 4277, 0);
player.sendMessage("You take your " + name + " out of the incubator."); player.sendMessage("You take your " + name + " out of the incubator.");
if(!player.getInventory().add(egg.getProduct())){ if(!player.getInventory().add(egg.getProduct())){
GroundItemManager.create(egg.getProduct(),player); GroundItemManager.create(egg.getProduct(),player);
@@ -58,7 +60,7 @@ public class IncubatorPlugin extends OptionHandler {
if (player.states.get("incubator") != null || inc != -1) { if (player.states.get("incubator") != null || inc != -1) {
IncubatorState p = (IncubatorState) player.states.get("incubator"); IncubatorState p = (IncubatorState) player.states.get("incubator");
if(p != null && p.getPulse() == null){ if(p != null && p.getPulse() == null){
player.varpManager.get(1160).setVarbit(4,0).send(player); setVarbit(player, 4277, 0);
return true; return true;
} }
String name = p == null ? IncubatorEgg.values()[inc].getProduct().getName().toLowerCase() : p.getEgg().getProduct().getName().toLowerCase(); String name = p == null ? IncubatorEgg.values()[inc].getProduct().getName().toLowerCase() : p.getEgg().getProduct().getName().toLowerCase();
@@ -10,6 +10,8 @@ import core.plugin.PluginManifest;
import core.plugin.PluginType; import core.plugin.PluginType;
import core.game.world.GameWorld; import core.game.world.GameWorld;
import static core.api.ContentAPIKt.setVarp;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
/** /**
@@ -60,7 +62,7 @@ public final class LoginValidationPlugin implements Plugin<Player> {
ActivityManager.start(player, "falconry", true); ActivityManager.start(player, "falconry", true);
} }
if (player.getSavedData().getQuestData().getDragonSlayerAttribute("repaired")) { if (player.getSavedData().getQuestData().getDragonSlayerAttribute("repaired")) {
player.getConfigManager().set(177, 1967876); setVarp(player, 177, 1967876); //lol?
} }
if (player.getSavedData().getGlobalData().getLootShareDelay() < System.currentTimeMillis() && player.getSavedData().getGlobalData().getLootShareDelay() != 0L) { if (player.getSavedData().getGlobalData().getLootShareDelay() < System.currentTimeMillis() && player.getSavedData().getGlobalData().getLootShareDelay() != 0L) {
player.getGlobalData().setLootSharePoints((int) (player.getGlobalData().getLootSharePoints() - player.getGlobalData().getLootSharePoints() * 0.10)); player.getGlobalData().setLootSharePoints((int) (player.getGlobalData().getLootSharePoints() - player.getGlobalData().getLootSharePoints() * 0.10));
@@ -65,7 +65,7 @@ class MillingListener : InteractionListener {
} }
} }
playAudio(player, SOUND) playAudio(player, SOUND)
setVarbit(player, VARP, 0, 1, true) setVarp(player, VARP, 1, true)
} }
private fun fillHopper(player: Player, used: Item) { private fun fillHopper(player: Player, used: Item) {
@@ -94,8 +94,8 @@ class MillingListener : InteractionListener {
sendMessage(player, if (player.getAttribute("milling:grain", 0) > 0) "You fill a pot with flour from the bin." else "You fill a pot with the last of the flour in the bin.") sendMessage(player, if (player.getAttribute("milling:grain", 0) > 0) "You fill a pot with flour from the bin." else "You fill a pot with the last of the flour in the bin.")
} }
if (getAttribute(player, "milling:sweetcorn", 0) + getAttribute(player, "milling:grain", 0) <= 0) { if (getAttribute(player, "milling:sweetcorn", 0) + getAttribute(player, "milling:grain", 0) <= 0) {
setVarbit(player, VARP, 0, 0, true) setVarp(player, VARP, 0, true)
} }
} }
} }
} }
@@ -27,6 +27,8 @@ import core.tools.RandomFunction;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the Brimhaven agility arena zone. * Handles the Brimhaven agility arena zone.
* *
@@ -77,7 +79,7 @@ public final class BrimhavenArena extends MapZone implements Plugin<Object> {
player.setAttribute("brim-tagcount", 0); player.setAttribute("brim-tagcount", 0);
} }
player.setAttribute("brim-tagged", false); player.setAttribute("brim-tagged", false);
player.getConfigManager().set(309, 0); setVarp(player, 309, 0);
int index = RandomFunction.randomize(DISPENSERS.length); int index = RandomFunction.randomize(DISPENSERS.length);
if (index == player.getAttribute("brim-tag", -1)) { if (index == player.getAttribute("brim-tag", -1)) {
index = (index + 1) % DISPENSERS.length; index = (index + 1) % DISPENSERS.length;
@@ -137,7 +139,7 @@ public final class BrimhavenArena extends MapZone implements Plugin<Object> {
player.setAttribute("brim-tagged", true); player.setAttribute("brim-tagged", true);
int tags = player.getAttribute("brim-tagcount", 0) + 1; int tags = player.getAttribute("brim-tagcount", 0) + 1;
player.setAttribute("brim-tagcount", tags); player.setAttribute("brim-tagcount", tags);
player.getConfigManager().set(309, 4); setVarp(player, 309, 4);
if (tags > 1) { if (tags > 1) {
int amount = 1; int amount = 1;
if (!player.getInventory().add(new Item(TICKET.getId(), amount))) { if (!player.getInventory().add(new Item(TICKET.getId(), amount))) {
@@ -19,6 +19,8 @@ import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Animation;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the agility pryamid course. * Handles the agility pryamid course.
* @author Vexia * @author Vexia
@@ -147,7 +149,7 @@ public final class AgilityPyramidCourse extends AgilityCourse {
case 10855: case 10855:
case 10856: case 10856:
addConfig(player, 10869, 0, true); addConfig(player, 10869, 0, true);
if (player.getConfigManager().get(640) == 505 || player.getConfigManager().get(640) == 515) { if (getVarp(player, 640) == 505 || getVarp(player, 640) == 515) {
player.getSkills().addExperience(Skills.AGILITY, 300, true); player.getSkills().addExperience(Skills.AGILITY, 300, true);
} }
player.getDialogueInterpreter().sendDialogue("You climb down the steep passage. It leads to the base of the", "pyramid."); player.getDialogueInterpreter().sendDialogue("You climb down the steep passage. It leads to the base of the", "pyramid.");
@@ -387,7 +389,7 @@ public final class AgilityPyramidCourse extends AgilityCourse {
@Override @Override
public boolean pulse() { public boolean pulse() {
player.getSkills().addExperience(Skills.AGILITY, 1000); player.getSkills().addExperience(Skills.AGILITY, 1000);
if (player.getConfigManager().get(640) == 505 || player.getConfigManager().get(640) == 515) { if (getVarp(player, 640) == 505 || getVarp(player, 640) == 515) {
player.getPacketDispatch().sendMessage("You find nothing on top of the pyramid."); player.getPacketDispatch().sendMessage("You find nothing on top of the pyramid.");
return true; return true;
} }
@@ -510,7 +512,7 @@ public final class AgilityPyramidCourse extends AgilityCourse {
final VarbitDefinition definition = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID()); final VarbitDefinition definition = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID());
final int oldVal = (definition.getValue(player) << definition.getStartBit()); final int oldVal = (definition.getValue(player) << definition.getStartBit());
final int newVal = (value << definition.getStartBit()); final int newVal = (value << definition.getStartBit());
player.getConfigManager().set(CONFIG_ID, (player.getConfigManager().get(CONFIG_ID) - oldVal) + newVal, save); setVarp(player, CONFIG_ID, (getVarp(player, CONFIG_ID) - oldVal) + newVal, save);
} }
/** /**
@@ -23,7 +23,7 @@ import core.tools.SystemLogger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import static core.api.ContentAPIKt.log; import static core.api.ContentAPIKt.*;
/** /**
* Utility class for building. * Utility class for building.
@@ -134,12 +134,12 @@ public final class BuildingUtils {
if (hasRequirements) { if (hasRequirements) {
c261Value += (1 << (menuIndex + 1)); c261Value += (1 << (menuIndex + 1));
} }
player.getConfigManager().set(1485 + menuIndex, hasRequirements || player.isStaff() ? 1 : 0); setVarp(player, 1485 + menuIndex, hasRequirements || player.isStaff() ? 1 : 0);
player.getPacketDispatch().sendString("Level " + decoration.getLevel(), 396, 140 + menuIndex); player.getPacketDispatch().sendString("Level " + decoration.getLevel(), 396, 140 + menuIndex);
//player.getPacketDispatch().sendItemZoomOnInterface(items[i].protocol(), 50000, 396, 49 + i); //player.getPacketDispatch().sendItemZoomOnInterface(items[i].protocol(), 50000, 396, 49 + i);
} }
player.getConfigManager().set(261, c261Value); setVarp(player, 261, c261Value);
PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 396, 132, 8, items, false)); PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 396, 132, 8, items, false));
} }
@@ -699,4 +699,4 @@ public final class BuildingUtils {
} }
return exits; return exits;
} }
} }
@@ -236,8 +236,8 @@ public final class HouseManager {
} }
private void updateVarbits(Player player, boolean build) { private void updateVarbits(Player player, boolean build) {
player.varpManager.get(261).setVarbit(0, build ? 1 : 0); setVarp(player, 261, build ? 1 : 0);
player.varpManager.get(262).setVarbit(0, getRoomAmount()); setVarp(player, 262, getRoomAmount());
} }
private void unlockMusicTrack(Player player) { private void unlockMusicTrack(Player player) {
@@ -162,8 +162,8 @@ class LecternPlugin : OptionHandler() {
val id = player.getAttribute("ttb:objectid", 0) val id = player.getAttribute("ttb:objectid", 0)
val deco = Decoration.forObjectId(id) val deco = Decoration.forObjectId(id)
val values = decorationVarps[deco] ?: Pair(0, 0) val values = decorationVarps[deco] ?: Pair(0, 0)
player.varpManager.get(261).setVarbit(0, values.first).send(player) setVarp(player, 261, values.first)
player.varpManager.get(262).setVarbit(0, values.second).send(player) setVarp(player, 262, values.second)
return@onOpen true return@onOpen true
} }
on(400) { player, _, _, buttonID, _, _ -> on(400) { player, _, _, buttonID, _, _ ->
@@ -118,19 +118,20 @@ class CompostBin(val player: Player, val bin: CompostBins) {
} }
fun updateBit(){ fun updateBit(){
player.varpManager.get(bin.varpIndex).clearBitRange(bin.varpOffest,bin.varpOffest + 7)
if(items.isNotEmpty()) { if(items.isNotEmpty()) {
if (isFinished) { if (isClosed) {
player.varpManager.get(bin.varpIndex).setVarbit(bin.varpOffest + 1, if(items.size == 15) 15 else 14) setVarbit(player, bin.varbit, 0x40)
if (isTomatoes) player.varpManager.get(bin.varpIndex).setVarbit(bin.varpOffest + 7, 1) } else if (isFinished) {
else if (isSuperCompost) player.varpManager.get(bin.varpIndex).setVarbit(bin.varpOffest + 5, 1) var finalValue = if (items.size == 15) 15 else 14
if (isTomatoes) finalValue += 0x80
else if (isSuperCompost) finalValue += 0x20
setVarbit(player, bin.varbit, finalValue)
} else { } else {
player.varpManager.get(bin.varpIndex).setVarbit(bin.varpOffest, items.size) var finalValue = items.size
if (isTomatoes) player.varpManager.get(bin.varpIndex).setVarbit(bin.varpOffest + 7, 1) if (isTomatoes) finalValue += 0x80
setVarbit(player, bin.varbit, finalValue)
} }
if (isClosed) player.varpManager.get(bin.varpIndex).setVarbit(bin.varpOffest + 6, 1) } else setVarbit(player, bin.varbit, 0)
}
player.varpManager.get(bin.varpIndex).send(player)
} }
fun save(root: JSONObject){ fun save(root: JSONObject){
@@ -176,4 +177,4 @@ class CompostBin(val player: Player, val bin: CompostBins) {
updateBit() updateBit()
} }
} }
} }
@@ -5,15 +5,15 @@ import core.cache.def.impl.VarbitDefinition
import core.game.node.scenery.Scenery import core.game.node.scenery.Scenery
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
enum class CompostBins(val varpIndex: Int, val varpOffest: Int) { enum class CompostBins(val varbit: Int) {
FALADOR_COMPOST(511,0), FALADOR_COMPOST(740),
CATHERBY_COMPOST(511,8), CATHERBY_COMPOST(741),
PORT_PHAS_COMPOST(511,16), PORT_PHAS_COMPOST(742),
ARDOUGNE_COMPOST(511,24); ARDOUGNE_COMPOST(743);
companion object { companion object {
@JvmField @JvmField
val bins = values().map { (it.varpIndex shl it.varpOffest) to it }.toMap() val bins = values().map { it.varbit to it }.toMap()
@JvmStatic @JvmStatic
fun forObject(obj: Scenery): CompostBins?{ fun forObject(obj: Scenery): CompostBins?{
@@ -23,8 +23,7 @@ enum class CompostBins(val varpIndex: Int, val varpOffest: Int) {
@JvmStatic @JvmStatic
fun forObjectID(id: Int): CompostBins?{ fun forObjectID(id: Int): CompostBins?{
val objDef = SceneryDefinition.forId(id) val objDef = SceneryDefinition.forId(id)
val def = VarbitDefinition.forObjectID(objDef.varbitID) return bins[objDef.varbitID]
return bins[def.varpId shl def.startBit]
} }
} }
@@ -36,4 +35,4 @@ enum class CompostBins(val varpIndex: Int, val varpOffest: Int) {
} else } else
state.getBin(this) state.getBin(this)
} }
} }
@@ -5,73 +5,73 @@ import core.cache.def.impl.VarbitDefinition
import core.game.node.scenery.Scenery import core.game.node.scenery.Scenery
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
enum class FarmingPatch(val varpIndex: Int, val varpOffset: Int, val type: PatchType) { enum class FarmingPatch(val varbit: Int, val type: PatchType) {
//Allotments //Allotments
S_FALADOR_ALLOTMENT_NW(504,0,PatchType.ALLOTMENT), S_FALADOR_ALLOTMENT_NW(708,PatchType.ALLOTMENT),
S_FALADOR_ALLOTMENT_SE(504,8,PatchType.ALLOTMENT), S_FALADOR_ALLOTMENT_SE(709,PatchType.ALLOTMENT),
CATHERBY_ALLOTMENT_N(504,16,PatchType.ALLOTMENT), CATHERBY_ALLOTMENT_N(710,PatchType.ALLOTMENT),
CATHERBY_ALLOTMENT_S(504,24,PatchType.ALLOTMENT), CATHERBY_ALLOTMENT_S(711,PatchType.ALLOTMENT),
ARDOUGNE_ALLOTMENT_S(505,8,PatchType.ALLOTMENT), ARDOUGNE_ALLOTMENT_S(713,PatchType.ALLOTMENT),
ARDOUGNE_ALLOTMENT_N(505,0,PatchType.ALLOTMENT), ARDOUGNE_ALLOTMENT_N(712,PatchType.ALLOTMENT),
PORT_PHAS_ALLOTMENT_NW(505,16,PatchType.ALLOTMENT), PORT_PHAS_ALLOTMENT_NW(714,PatchType.ALLOTMENT),
PORT_PHAS_ALLOTMENT_SE(505,24,PatchType.ALLOTMENT), PORT_PHAS_ALLOTMENT_SE(715,PatchType.ALLOTMENT),
HARMONY_ISLAND_ALLOTMENT(982,8,PatchType.ALLOTMENT), HARMONY_ISLAND_ALLOTMENT(3402,PatchType.ALLOTMENT),
//Herb //Herb
CATHERBY_HERB_CE(515,8,PatchType.HERB), CATHERBY_HERB_CE(781,PatchType.HERB),
S_FALADOR_HERB_NE(515,0,PatchType.HERB), S_FALADOR_HERB_NE(780,PatchType.HERB),
ARDOUGNE_HERB_CE(515,16,PatchType.HERB), ARDOUGNE_HERB_CE(782,PatchType.HERB),
PORT_PHAS_HERB_NE(515,24,PatchType.HERB), PORT_PHAS_HERB_NE(783,PatchType.HERB),
TROLL_STRONGHOLD_HERB(830,0,PatchType.HERB), TROLL_STRONGHOLD_HERB(2788,PatchType.HERB),
//Flower //Flower
S_FALADOR_FLOWER_C(508,0,PatchType.FLOWER), S_FALADOR_FLOWER_C(728,PatchType.FLOWER),
CATHERBY_FLOWER_C(508,8,PatchType.FLOWER), CATHERBY_FLOWER_C(729,PatchType.FLOWER),
ARDOUGNE_FLOWER_C(508,16,PatchType.FLOWER), ARDOUGNE_FLOWER_C(730,PatchType.FLOWER),
PORT_PHAS_FLOWER_C(508,24,PatchType.FLOWER), PORT_PHAS_FLOWER_C(731,PatchType.FLOWER),
WILDERNESS_FLOWER(1183,12,PatchType.FLOWER), WILDERNESS_FLOWER(5067,PatchType.FLOWER),
//Tree //Tree
N_FALADOR_TREE(502,8,PatchType.TREE), N_FALADOR_TREE(701,PatchType.TREE),
TAVERLY_TREE(502,0,PatchType.TREE), TAVERLY_TREE(700,PatchType.TREE),
GNOME_STRONGHOLD_TREE(830,11,PatchType.TREE), GNOME_STRONGHOLD_TREE(2953,PatchType.TREE),
LUMBRIDGE_TREE(502,24,PatchType.TREE), LUMBRIDGE_TREE(703,PatchType.TREE),
VARROCK_TREE(502,16,PatchType.TREE), VARROCK_TREE(702,PatchType.TREE),
//Fruit Tree //Fruit Tree
GNOME_STRONGHOLD_FRUIT_TREE(503,0,PatchType.FRUIT_TREE), GNOME_STRONGHOLD_FRUIT_TREE(704,PatchType.FRUIT_TREE),
CATHERBY_FRUIT_TREE(503,24,PatchType.FRUIT_TREE), CATHERBY_FRUIT_TREE(707,PatchType.FRUIT_TREE),
TREE_GNOME_VILLAGE_FRUIT_TREE(503,8,PatchType.FRUIT_TREE), TREE_GNOME_VILLAGE_FRUIT_TREE(705,PatchType.FRUIT_TREE),
BRIMHAVEN_FRUIT_TREE(503,16,PatchType.FRUIT_TREE), BRIMHAVEN_FRUIT_TREE(706,PatchType.FRUIT_TREE),
LLETYA_FRUIT_TREE(830,23,PatchType.FRUIT_TREE), LLETYA_FRUIT_TREE(4317,PatchType.FRUIT_TREE),
//Hops //Hops
ENTRANA_HOPS(506,8,PatchType.HOPS), ENTRANA_HOPS(717,PatchType.HOPS),
LUMBRIDGE_HOPS(506,16,PatchType.HOPS), LUMBRIDGE_HOPS(718,PatchType.HOPS),
MCGRUBOR_HOPS(506,24,PatchType.HOPS), MCGRUBOR_HOPS(719,PatchType.HOPS),
YANILLE_HOPS(506,0,PatchType.HOPS), YANILLE_HOPS(716,PatchType.HOPS),
//Bushes //Bushes
CHAMPIONS_GUILD_BUSH(509,0,PatchType.BUSH), CHAMPIONS_GUILD_BUSH(732,PatchType.BUSH),
RIMMINGTON_BUSH(509,8,PatchType.BUSH), RIMMINGTON_BUSH(733,PatchType.BUSH),
ARDOUGNE_BUSH(509,24,PatchType.BUSH), ARDOUGNE_BUSH(735,PatchType.BUSH),
ETCETERIA_BUSH(509,16,PatchType.BUSH), ETCETERIA_BUSH(734,PatchType.BUSH),
//Spirit Tree //Spirit Tree
ETCETERIA_SPIRIT_TREE(507,8,PatchType.SPIRIT_TREE), ETCETERIA_SPIRIT_TREE(722,PatchType.SPIRIT_TREE),
PORT_SARIM_SPIRIT_TREE(507,0,PatchType.SPIRIT_TREE), PORT_SARIM_SPIRIT_TREE(720,PatchType.SPIRIT_TREE),
KARAMJA_SPIRIT_TREE(507,16,PatchType.SPIRIT_TREE), KARAMJA_SPIRIT_TREE(724,PatchType.SPIRIT_TREE),
//Other //Other
DRAYNOR_BELLADONNA(512, 16, PatchType.BELLADONNA), DRAYNOR_BELLADONNA(748, PatchType.BELLADONNA),
CANIFIS_MUSHROOM(512, 8, PatchType.MUSHROOM), CANIFIS_MUSHROOM(746, PatchType.MUSHROOM),
ALKHARID_CACTUS(512, 0, PatchType.CACTUS), ALKHARID_CACTUS(744, PatchType.CACTUS),
EVIL_TURNIP(1171, 7, PatchType.EVIL_TURNIP); EVIL_TURNIP(4291, PatchType.EVIL_TURNIP);
companion object { companion object {
@JvmField @JvmField
val patches = FarmingPatch.values().map { (it.varpIndex shl it.varpOffset) to it }.toMap() val patches = FarmingPatch.values().map { it.varbit to it }.toMap()
@JvmStatic @JvmStatic
fun forObject(obj: Scenery): FarmingPatch?{ fun forObject(obj: Scenery): FarmingPatch?{
@@ -81,8 +81,7 @@ enum class FarmingPatch(val varpIndex: Int, val varpOffset: Int, val type: Patch
@JvmStatic @JvmStatic
fun forObjectID(id: Int): FarmingPatch?{ fun forObjectID(id: Int): FarmingPatch?{
val objDef = SceneryDefinition.forId(id) val objDef = SceneryDefinition.forId(id)
val def = VarbitDefinition.forObjectID(objDef.varbitID) return patches[objDef.varbitID]
return patches[def.varpId shl def.startBit]
} }
} }
@@ -38,9 +38,8 @@ class InspectionHandler : OptionHandler() {
val status3 = if(p.compost == CompostType.NONE) "This patch has not been treated." else "This patch has been treated with ${p.compost.name.toLowerCase()} compost." val status3 = if(p.compost == CompostType.NONE) "This patch has not been treated." else "This patch has been treated with ${p.compost.name.toLowerCase()} compost."
player.sendMessage("$status1 $status2") player.sendMessage("$status1 $status2")
player.sendMessage(status3) player.sendMessage(status3)
val varpValue = player.varpManager.get(patch.varpIndex).getBitRangeValue(patch.varpOffset,patch.varpOffset + 7)
} }
return true return true
} }
} }
@@ -1,6 +1,6 @@
package content.global.skill.farming package content.global.skill.farming
import core.api.log import core.api.*
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.tools.Log import core.tools.Log
import core.tools.RandomFunction import core.tools.RandomFunction
@@ -90,11 +90,11 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
} }
fun getCurrentState(): Int{ fun getCurrentState(): Int{
return player.varpManager.get(patch.varpIndex).getVarbitValue(patch.varpOffset) ?: 0 return getVarbit(player, patch.varbit)
} }
fun setCurrentState(state: Int){ fun setCurrentState(state: Int){
player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,state) setVarbit(player, patch.varbit, state)
updateBit() updateBit()
} }
@@ -109,58 +109,60 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
private fun updateBit(){ private fun updateBit(){
if(isCheckHealth){ if(isCheckHealth){
when(patch.type){ when(patch.type){
PatchType.FRUIT_TREE -> player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,plantable!!.value + plantable!!.stages + 20) PatchType.FRUIT_TREE -> setVarbit(player, patch.varbit, plantable!!.value + plantable!!.stages + 20)
PatchType.BUSH -> player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,250 + (plantable!!.ordinal - Plantable.REDBERRY_SEED.ordinal)) PatchType.BUSH -> setVarbit(player, patch.varbit, 250 + (plantable!!.ordinal - Plantable.REDBERRY_SEED.ordinal))
PatchType.CACTUS -> player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, 31) PatchType.CACTUS -> setVarbit(player, patch.varbit, 31)
else -> log(this::class.java, Log.WARN, "Invalid setting of isCheckHealth for patch type: " + patch.type.name) else -> log(this::class.java, Log.WARN, "Invalid setting of isCheckHealth for patch type: " + patch.type.name)
} }
} else { } else {
when(patch.type){ when(patch.type){
PatchType.ALLOTMENT,PatchType.FLOWER,PatchType.HOPS -> { PatchType.ALLOTMENT,PatchType.FLOWER,PatchType.HOPS -> {
player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset + 6, if (isWatered || isDead) 1 else 0) var state = getUnmodifiedValue()
player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset + 7, if (isDiseased) 1 else 0) if (isWatered || isDead) state = state or 0x40
if (isDiseased) state = state or 0x80
if (state != getVarbit(player, patch.varbit))
setVarbit(player, patch.varbit, state)
} }
PatchType.BUSH -> { PatchType.BUSH -> {
if(isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,getBushDeathValue()) if(isDead) setVarbit(player, patch.varbit, getBushDeathValue())
else if(isDiseased && !isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,getBushDiseaseValue()) else if(isDiseased && !isDead) setVarbit(player, patch.varbit, getBushDiseaseValue())
//else player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, (plantable?.value ?: 0) + currentGrowthStage)
} }
PatchType.TREE -> { PatchType.TREE -> {
if(isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset + 7,1) var state = getVarbit(player, patch.varbit)
else if(isDiseased && !isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset + 6, 1)
if (isDead) state = state or 0x80
else if (isDiseased) state = state or 0x40
if (state != getVarbit(player, patch.varbit))
setVarbit(player, patch.varbit, state)
} }
PatchType.FRUIT_TREE -> { PatchType.FRUIT_TREE -> {
if(isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,getFruitTreeDeathValue()) if(isDead) setVarbit(player, patch.varbit, getFruitTreeDeathValue())
else if(isDiseased && !isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, getFruitTreeDiseaseValue()) else if(isDiseased && !isDead) setVarbit(player, patch.varbit, getFruitTreeDiseaseValue())
} }
PatchType.BELLADONNA -> { PatchType.BELLADONNA -> {
if(isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, getBelladonnaDeathValue()) if(isDead) setVarbit(player, patch.varbit, getBelladonnaDeathValue())
else if(isDiseased && !isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, getBelladonnaDiseaseValue()) else if(isDiseased && !isDead) setVarbit(player, patch.varbit, getBelladonnaDiseaseValue())
else player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, (plantable?.value ?: 0) + currentGrowthStage) else setVarbit(player, patch.varbit, (plantable?.value ?: 0) + currentGrowthStage)
} }
PatchType.CACTUS -> { PatchType.CACTUS -> {
if(isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, getCactusDeathValue()) if(isDead) setVarbit(player, patch.varbit, getCactusDeathValue())
else if(isDiseased && !isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, getCactusDiseaseValue()) else if(isDiseased && !isDead) setVarbit(player, patch.varbit, getCactusDiseaseValue())
} }
PatchType.HERB -> { PatchType.HERB -> {
if(isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, getHerbDeathValue()) if(isDead) setVarbit(player, patch.varbit, getHerbDeathValue())
else if(isDiseased && !isDead) player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, getHerbDiseaseValue()) else if(isDiseased && !isDead) setVarbit(player, patch.varbit, getHerbDiseaseValue())
else player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, (plantable?.value ?: 0) + currentGrowthStage) else setVarbit(player, patch.varbit, (plantable?.value ?: 0) + currentGrowthStage)
} }
else -> {} else -> {}
} }
} }
player.varpManager.get(patch.varpIndex).send(player)
} }
fun cureDisease() { fun cureDisease() {
setVarbit(player, patch.varbit, (plantable?.value ?: 0) + currentGrowthStage)
isDiseased = false isDiseased = false
when(patch.type){
PatchType.BUSH,PatchType.FRUIT_TREE -> player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,(plantable?.value ?: 0) + currentGrowthStage)
PatchType.TREE -> player.varpManager.get(patch.varpIndex).clearBitRange(patch.varpOffset + 6, patch.varpOffset + 7)
PatchType.CACTUS -> player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, (plantable?.value ?: 0) + currentGrowthStage)
else -> {}
}
updateBit() updateBit()
} }
@@ -169,6 +171,10 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
updateBit() updateBit()
} }
private fun getUnmodifiedValue(): Int {
return (plantable?.value ?: 0) + currentGrowthStage
}
private fun getBushDiseaseValue(): Int{ private fun getBushDiseaseValue(): Int{
if(plantable == Plantable.POISON_IVY_SEED){ if(plantable == Plantable.POISON_IVY_SEED){
return (plantable?.value ?: 0) + currentGrowthStage + 12 return (plantable?.value ?: 0) + currentGrowthStage + 12
@@ -306,7 +312,7 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl
isDiseased = false isDiseased = false
isDead = false isDead = false
plantable = null plantable = null
player.varpManager.get(patch.varpIndex).clearBitRange(patch.varpOffset,patch.varpOffset + 7) setVarbit(player, patch.varbit, 0)
nextGrowth = 0L nextGrowth = 0L
currentGrowthStage = 3 currentGrowthStage = 3
setCurrentState(3) setCurrentState(3)
@@ -8,16 +8,13 @@ import org.rs09.consts.Components
import org.rs09.consts.Items import org.rs09.consts.Items
import core.game.interaction.InterfaceListener import core.game.interaction.InterfaceListener
private const val varp = 615
class ToolLeprechaunInterface : InterfaceListener { class ToolLeprechaunInterface : InterfaceListener {
private val FARMING_TOOLS = Components.FARMING_TOOLS_125 private val FARMING_TOOLS = Components.FARMING_TOOLS_125
private val TOOLS_SIDE = Components.FARMING_TOOLS_SIDE_126 private val TOOLS_SIDE = Components.FARMING_TOOLS_SIDE_126
override fun defineInterfaceListeners() { override fun defineInterfaceListeners() {
onOpen(FARMING_TOOLS){player, component -> onOpen(FARMING_TOOLS){player, component ->
player.varpManager?.flagSave(varp)
player.interfaceManager.openSingleTab(Component(TOOLS_SIDE)) player.interfaceManager.openSingleTab(Component(TOOLS_SIDE))
return@onOpen true return@onOpen true
} }
@@ -48,7 +45,6 @@ class ToolLeprechaunInterface : InterfaceListener {
40 -> doStackedWithdrawal(player,Items.COMPOST_6032,getAmount(opcode),::updateCompost,::getNumCompost) 40 -> doStackedWithdrawal(player,Items.COMPOST_6032,getAmount(opcode),::updateCompost,::getNumCompost)
41 -> doStackedWithdrawal(player,Items.SUPERCOMPOST_6034,getAmount(opcode),::updateSuperCompost,::getNumSuperCompost) 41 -> doStackedWithdrawal(player,Items.SUPERCOMPOST_6034,getAmount(opcode),::updateSuperCompost,::getNumSuperCompost)
} }
player.varpManager.get(varp).send(player)
return@on true return@on true
} }
@@ -90,7 +86,6 @@ class ToolLeprechaunInterface : InterfaceListener {
25 -> doStackedDeposit(player,Items.COMPOST_6032,getAmount(opcode),::updateCompost,::getNumCompost) 25 -> doStackedDeposit(player,Items.COMPOST_6032,getAmount(opcode),::updateCompost,::getNumCompost)
26 -> doStackedDeposit(player,Items.SUPERCOMPOST_6034,getAmount(opcode),::updateSuperCompost,::getNumSuperCompost) 26 -> doStackedDeposit(player,Items.SUPERCOMPOST_6034,getAmount(opcode),::updateSuperCompost,::getNumSuperCompost)
} }
player.varpManager.get(varp).send(player)
return@on true return@on true
} }
@@ -149,7 +144,6 @@ class ToolLeprechaunInterface : InterfaceListener {
} }
player.inventory.remove(Item(item,amt)) player.inventory.remove(Item(item,amt))
updateQuantityMethod.invoke(player,amt) updateQuantityMethod.invoke(player,amt)
player.varpManager.get(varp).send(player)
} }
return return
} }
@@ -200,7 +194,6 @@ class ToolLeprechaunInterface : InterfaceListener {
} else { } else {
player.inventory.add(Item(item, amt)) player.inventory.add(Item(item, amt))
updateQuantityMethod.invoke(player, -amt) updateQuantityMethod.invoke(player, -amt)
player.varpManager.get(varp).send(player)
} }
} }
return return
@@ -231,43 +224,43 @@ class ToolLeprechaunInterface : InterfaceListener {
} }
private fun hasRake(player: Player?): Boolean{ private fun hasRake(player: Player?): Boolean{
return checkBit(player,0) return getVarbit(player!!, 1435) == 1
} }
private fun setHasRake(player: Player?,hasRake: Boolean){ private fun setHasRake(player: Player?,hasRake: Boolean){
player?.varpManager?.get(varp)?.setVarbit(0,if(hasRake) 1 else 0) setVarbit(player!!, 1435, if (hasRake) 1 else 0, true)
} }
private fun hasDibber(player: Player?): Boolean{ private fun hasDibber(player: Player?): Boolean{
return checkBit(player,1) return getVarbit(player!!, 1436) == 1
} }
private fun setHasDibber(player: Player?,hasDibber: Boolean){ private fun setHasDibber(player: Player?,hasDibber: Boolean){
player?.varpManager?.get(varp)?.setVarbit(1,if(hasDibber) 1 else 0) setVarbit(player!!, 1436, if (hasDibber) 1 else 0, true)
} }
private fun hasSpade(player: Player?): Boolean{ private fun hasSpade(player: Player?): Boolean{
return checkBit(player,2) return getVarbit(player!!, 1437) == 1
} }
private fun setHasSpade(player: Player?,hasSpade: Boolean){ private fun setHasSpade(player: Player?,hasSpade: Boolean){
player?.varpManager?.get(varp)?.setVarbit(2,if(hasSpade) 1 else 0) setVarbit(player!!, 1437, if (hasSpade) 1 else 0, true)
} }
private fun hasSecateurs(player: Player?): Boolean{ private fun hasSecateurs(player: Player?): Boolean{
return checkBit(player,3) return getVarbit(player!!, 1438) == 1
} }
private fun setHasSecateurs(player: Player?,hasSecateurs: Boolean){ private fun setHasSecateurs(player: Player?,hasSecateurs: Boolean){
player?.varpManager?.get(varp)?.setVarbit(3,if(hasSecateurs) 1 else 0) setVarbit(player!!, 1438, if (hasSecateurs) 1 else 0, true)
} }
private fun hasWateringCan(player: Player?): Boolean{ private fun hasWateringCan(player: Player?): Boolean{
return checkBitRange(player,4,7) > 0 return getVarbit(player!!, 1439) > 0
} }
private fun getWateringCan(player: Player?): Int{ private fun getWateringCan(player: Player?): Int{
var can = checkBitRange(player,4,7) //Watering cans are stored in the Varp as a number between 1 and 9. Watering Can(0) is 1 and Watering Can(8) is 9 var can = getVarbit(player!!, 1439) //Watering cans are stored in the Varp as a number between 1 and 9. Watering Can(0) is 1 and Watering Can(8) is 9
if(can == 1) can = 0 if(can == 1) can = 0
return Items.WATERING_CAN_5331 + can return Items.WATERING_CAN_5331 + can
} }
@@ -285,61 +278,53 @@ class ToolLeprechaunInterface : InterfaceListener {
Items.WATERING_CAN8_5340 -> 9 Items.WATERING_CAN8_5340 -> 9
else -> 0 else -> 0
} }
player?.varpManager?.get(varp)?.setVarbit(4,can) setVarbit(player!!, 1439, can, true)
} }
private fun setNoWateringCan(player: Player?){ private fun setNoWateringCan(player: Player?){
player?.varpManager?.get(varp)?.setVarbit(4,0) setVarbit(player!!, 1439, 0, true)
} }
private fun hasGardeningTrowel(player: Player?): Boolean { private fun hasGardeningTrowel(player: Player?): Boolean {
return checkBit(player,8) return getVarbit(player!!, 1440) == 1
} }
private fun setHasGardeningTrowel(player: Player?,hasTrowel: Boolean){ private fun setHasGardeningTrowel(player: Player?,hasTrowel: Boolean){
player?.varpManager?.get(varp)?.setVarbit(8,if(hasTrowel) 1 else 0) setVarbit(player!!, 1440, if (hasTrowel) 1 else 0, true)
} }
private fun getNumBuckets(player: Player?): Int { private fun getNumBuckets(player: Player?): Int {
return checkBitRange(player,9,13) return getVarbit(player!!, 1441)
} }
private fun updateBuckets(player: Player?,amount: Int){ private fun updateBuckets(player: Player?,amount: Int){
player?.varpManager?.get(varp)?.setVarbit(9,getNumBuckets(player) + amount) setVarbit(player!!, 1441, getNumBuckets(player) + amount, true)
} }
private fun getNumCompost(player: Player?): Int { private fun getNumCompost(player: Player?): Int {
return checkBitRange(player,14,21) return getVarbit(player!!, 1442)
} }
private fun updateCompost(player: Player?,amount: Int){ private fun updateCompost(player: Player?,amount: Int){
player?.varpManager?.get(varp)?.setVarbit(14,getNumCompost(player) + amount) setVarbit(player!!, 1442, getNumCompost(player) + amount, true)
} }
private fun getNumSuperCompost(player: Player?): Int { private fun getNumSuperCompost(player: Player?): Int {
return checkBitRange(player,22,29) return getVarbit(player!!, 1443)
} }
private fun updateSuperCompost(player: Player?,amount: Int){ private fun updateSuperCompost(player: Player?,amount: Int){
player?.varpManager?.get(varp)?.setVarbit(22,getNumSuperCompost(player) + amount) setVarbit(player!!, 1443, getNumSuperCompost(player) + amount, true)
} }
private fun hasMagicSecateurs(player: Player?): Boolean { private fun hasMagicSecateurs(player: Player?): Boolean {
return checkBit(player,30) return getVarbit(player!!, 1848) == 1
} }
private fun setHasMagicSecateurs(player: Player?,hasMagic: Boolean){ private fun setHasMagicSecateurs(player: Player?,hasMagic: Boolean){
player?.varpManager?.get(varp)?.setVarbit(30,if(hasMagic) 1 else 0) setVarbit(player!!, 1848, if (hasMagic) 1 else 0, true)
} }
private fun checkBitRange(player: Player?,start: Int, end: Int): Int{
return (player?.varpManager?.get(varp)?.getBitRangeValue(start,end) ?: 0) ushr start
}
private fun checkBit(player: Player?,offset: Int): Boolean{
return player?.varpManager?.get(varp)?.getVarbitValue(offset) == 1
}
private fun getHighestCan(player: Player?): Item?{ private fun getHighestCan(player: Player?): Item?{
player ?: return null player ?: return null
var highestCan = Item(0) var highestCan = Item(0)
@@ -352,4 +337,4 @@ class ToolLeprechaunInterface : InterfaceListener {
return if(highestCan.id == 0) null else highestCan return if(highestCan.id == 0) null else highestCan
} }
} }
@@ -60,28 +60,28 @@ val HUNTER_REQS = hashMapOf(
"Sabre-toothed kyatt" to 55, "Sabre-toothed kyatt" to 55,
) )
//val pitVarpOffsets = hashMapOf( 19264 to 3, 19265 to 6, 19266 to 9, 19267 to 12, 19268 to 15,) //val pitVarpOffsets = hashMapOf( 19264 to 3, 19265 to 6, 19266 to 9, 19267 to 12, 19268 to 15,)
data class Pit(val varpId: Int, val varpOffset: Int, val horizontal: Boolean) data class Pit(val varbitId: Int, val horizontal: Boolean)
val pitVarps = hashMapOf( val pitVarps = hashMapOf(
// Larupia pits (the duplicate 24 is likely authentic) // Larupia pits (the duplicate 24 is likely authentic)
Location.create(2565,2888) to Pit(917, 27, true), Location.create(2565,2888) to Pit(2967, true),
Location.create(2573,2885) to Pit(918, 0, false), Location.create(2573,2885) to Pit(2968, false),
Location.create(2556,2893) to Pit(917, 18, false), Location.create(2556,2893) to Pit(2964, false),
Location.create(2552,2904) to Pit(917, 24, true), Location.create(2552,2904) to Pit(2966, true),
Location.create(2543,2908) to Pit(917, 21, false), Location.create(2543,2908) to Pit(2965, false),
Location.create(2538,2899) to Pit(917, 24, true), Location.create(2538,2899) to Pit(2966, true),
// Kyatt pits // Kyatt pits
Location.create(2700,3795) to Pit(917, 0, true), Location.create(2700,3795) to Pit(2958, true),
Location.create(2700,3785) to Pit(917, 3, false), Location.create(2700,3785) to Pit(2959, false),
Location.create(2706,3789) to Pit(917, 6, false), Location.create(2706,3789) to Pit(2960, false),
Location.create(2730,3791) to Pit(917, 9, true), Location.create(2730,3791) to Pit(2961, true),
Location.create(2737,3784) to Pit(917, 12, true), Location.create(2737,3784) to Pit(2962, true),
Location.create(2730,3780) to Pit(917, 15, false), Location.create(2730,3780) to Pit(2963, false),
// Graahk pits // Graahk pits
Location.create(2766,3010) to Pit(918, 3, false), Location.create(2766,3010) to Pit(2969, false),
Location.create(2762,3005) to Pit(918, 6, false), Location.create(2762,3005) to Pit(2970, false),
Location.create(2771,3004) to Pit(918, 9, true), Location.create(2771,3004) to Pit(2971, true),
Location.create(2777,3001) to Pit(918, 12, false), Location.create(2777,3001) to Pit(2972, false),
Location.create(2784,3001) to Pit(918, 15, true), Location.create(2784,3001) to Pit(2973, true),
) )
/*val pitJumpSpots = hashMapOf( /*val pitJumpSpots = hashMapOf(
Location.create(2766,3010) to hashMapOf( Location.create(2766,3010) to hashMapOf(
@@ -298,7 +298,7 @@ class PitfallListeners : InteractionListener {
fun setPitState(player: Player, loc: Location, state: Int) { fun setPitState(player: Player, loc: Location, state: Int) {
val pit = pitVarps[loc]!! val pit = pitVarps[loc]!!
player.varpManager.get(pit.varpId).setVarbit(pit.varpOffset, state).send(player) setVarbit(player, pit.varbitId, state)
} }
} }
@@ -14,22 +14,22 @@ class CommonKebbitEast : HunterTracking() {
init { init {
initialMap = hashMapOf( initialMap = hashMapOf(
19439 to arrayListOf( 19439 to arrayListOf(
TrailDefinition(0,TrailType.LINKING, false,Location.create(2354, 3595, 0),Location.create(2360, 3602, 0)), TrailDefinition(2974,TrailType.LINKING, false,Location.create(2354, 3595, 0),Location.create(2360, 3602, 0)),
TrailDefinition(3,TrailType.LINKING,false,Location.create(2354, 3595, 0),Location.create(2355, 3601, 0)), TrailDefinition(2975,TrailType.LINKING,false,Location.create(2354, 3595, 0),Location.create(2355, 3601, 0)),
TrailDefinition(6,TrailType.LINKING,false,Location.create(2354, 3594, 0),Location.create(2349, 3604, 0)) TrailDefinition(2976,TrailType.LINKING,false,Location.create(2354, 3594, 0),Location.create(2349, 3604, 0))
), ),
19440 to arrayListOf( 19440 to arrayListOf(
TrailDefinition(18,TrailType.LINKING,true,Location.create(2361, 3611, 0),Location.create(2360, 3602, 0)), TrailDefinition(2980,TrailType.LINKING,true,Location.create(2361, 3611, 0),Location.create(2360, 3602, 0)),
TrailDefinition(21,TrailType.LINKING,true,Location.create(2360, 3612, 0),Location.create(2357, 3607, 0)) TrailDefinition(2981,TrailType.LINKING,true,Location.create(2360, 3612, 0),Location.create(2357, 3607, 0))
) )
) )
linkingTrails = arrayListOf( linkingTrails = arrayListOf(
TrailDefinition(24,TrailType.LINKING,false,Location.create(2357, 3607, 0),Location.create(2354, 3609, 0),Location.create(2355, 3608, 0)), TrailDefinition(2982,TrailType.LINKING,false,Location.create(2357, 3607, 0),Location.create(2354, 3609, 0),Location.create(2355, 3608, 0)),
TrailDefinition(27,TrailType.LINKING,false,Location.create(2354, 3609, 0),Location.create(2349, 3604, 0),Location.create(2351, 3608, 0)), TrailDefinition(2983,TrailType.LINKING,false,Location.create(2354, 3609, 0),Location.create(2349, 3604, 0),Location.create(2351, 3608, 0)),
TrailDefinition(9,TrailType.LINKING,false ,Location.create(2360, 3602, 0),Location.create(2355, 3601, 0),Location.create(2358, 3599, 0)), TrailDefinition(2977,TrailType.LINKING,false ,Location.create(2360, 3602, 0),Location.create(2355, 3601, 0),Location.create(2358, 3599, 0)),
TrailDefinition(12,TrailType.LINKING,false,Location.create(2355, 3601, 0),Location.create(2349, 3604, 0),Location.create(2352, 3603, 0)), TrailDefinition(2978,TrailType.LINKING,false,Location.create(2355, 3601, 0),Location.create(2349, 3604, 0),Location.create(2352, 3603, 0)),
TrailDefinition(15,TrailType.LINKING,false,Location.create(2360, 3602, 0),Location.create(2357, 3607, 0),Location.create(2358, 3603, 0)) TrailDefinition(2979,TrailType.LINKING,false,Location.create(2360, 3602, 0),Location.create(2357, 3607, 0),Location.create(2358, 3603, 0))
) )
experience = 36.0 experience = 36.0
varp = 919 varp = 919
@@ -71,4 +71,4 @@ class CommonKebbitEast : HunterTracking() {
return this return this
} }
} }
@@ -1,6 +1,6 @@
package content.global.skill.hunter.tracking package content.global.skill.hunter.tracking
import core.api.log import core.api.*
import core.game.interaction.OptionHandler import core.game.interaction.OptionHandler
import core.game.node.Node import core.game.node.Node
import core.game.node.scenery.Scenery import core.game.node.scenery.Scenery
@@ -70,7 +70,7 @@ abstract class HunterTracking : OptionHandler(){
nextTrail ?: continue nextTrail ?: continue
var offsetUsed = false var offsetUsed = false
for(i in trail){ for(i in trail){
if(i.offset == nextTrail.offset){ offsetUsed = true; break } if(i.varbit == nextTrail.varbit){ offsetUsed = true; break }
} }
if(offsetUsed) continue if(offsetUsed) continue
if(nextTrail.type == TrailType.TUNNEL){ if(nextTrail.type == TrailType.TUNNEL){
@@ -94,7 +94,7 @@ abstract class HunterTracking : OptionHandler(){
val possibleTrails = ArrayList<TrailDefinition>() val possibleTrails = ArrayList<TrailDefinition>()
for(trail in linkingTrails){ for(trail in linkingTrails){
val invTrail = getTrailInverse(trail,false) val invTrail = getTrailInverse(trail,false)
if(invTrail.type == TrailType.TUNNEL && previousTrail.endLocation.withinDistance(invTrail.startLocation,5) && !previousTrail.endLocation.equals(invTrail.startLocation) && previousTrail.offset != trail.offset){ if(invTrail.type == TrailType.TUNNEL && previousTrail.endLocation.withinDistance(invTrail.startLocation,5) && !previousTrail.endLocation.equals(invTrail.startLocation) && previousTrail.varbit != trail.varbit){
possibleTrails.add(trail) possibleTrails.add(trail)
} }
} }
@@ -102,7 +102,7 @@ abstract class HunterTracking : OptionHandler(){
} }
val possibleTrails = ArrayList<TrailDefinition>() val possibleTrails = ArrayList<TrailDefinition>()
for(trail in linkingTrails){ for(trail in linkingTrails){
if(trail.startLocation.equals(previousTrail.endLocation) && previousTrail.offset != trail.offset){ if(trail.startLocation.equals(previousTrail.endLocation) && previousTrail.varbit != trail.varbit){
possibleTrails.add(trail) possibleTrails.add(trail)
} }
} }
@@ -116,8 +116,8 @@ abstract class HunterTracking : OptionHandler(){
*/ */
fun getTrailInverse(trail: TrailDefinition, swapLocations: Boolean): TrailDefinition{ fun getTrailInverse(trail: TrailDefinition, swapLocations: Boolean): TrailDefinition{
if(swapLocations) if(swapLocations)
return TrailDefinition(trail.offset,if(tunnelEntrances.contains(trail.startLocation)) TrailType.TUNNEL else TrailType.LINKING,!trail.inverted,trail.endLocation,trail.startLocation, trail.triggerObjectLocation) return TrailDefinition(trail.varbit,if(tunnelEntrances.contains(trail.startLocation)) TrailType.TUNNEL else TrailType.LINKING,!trail.inverted,trail.endLocation,trail.startLocation, trail.triggerObjectLocation)
return TrailDefinition(trail.offset, if(tunnelEntrances.contains(trail.startLocation)) TrailType.TUNNEL else TrailType.LINKING, !trail.inverted, trail.startLocation, trail.endLocation) return TrailDefinition(trail.varbit, if(tunnelEntrances.contains(trail.startLocation)) TrailType.TUNNEL else TrailType.LINKING, !trail.inverted, trail.startLocation, trail.endLocation)
} }
/** /**
@@ -145,8 +145,7 @@ abstract class HunterTracking : OptionHandler(){
fun clearTrail(player: Player){ fun clearTrail(player: Player){
player.removeAttribute(attribute) player.removeAttribute(attribute)
player.removeAttribute(indexAttribute) player.removeAttribute(indexAttribute)
player.varpManager.get(varp).clear() setVarp(player, varp, 0)
player.varpManager.get(varp).send(player)
} }
/** /**
@@ -191,10 +190,9 @@ abstract class HunterTracking : OptionHandler(){
val trailIndex = player.getAttribute(indexAttribute,0) val trailIndex = player.getAttribute(indexAttribute,0)
for(index in 0..trailIndex){ for(index in 0..trailIndex){
val trl = trail[index] val trl = trail[index]
player.varpManager.get(varp).setVarbit(trl.offset + 2,1) var current = getVarp(player, varp)
player.varpManager.get(varp).setVarbit(trl.offset,if(trl.inverted) 1 else 0) setVarbit(player, trl.varbit, (if (trl.inverted) 1 else 0) or (1 shl 2))
} }
player.varpManager.get(varp).send(player)
} }
/** /**
@@ -217,7 +215,7 @@ abstract class HunterTracking : OptionHandler(){
trail.get(currentIndex) trail.get(currentIndex)
} }
} else { } else {
TrailDefinition(0,TrailType.LINKING,false,Location(0,0,0),Location(0,0,0),Location(0,0,0)) return false
} }
when(option){ when(option){
@@ -264,4 +262,4 @@ abstract class HunterTracking : OptionHandler(){
fun hasNooseWand(player: Player) : Boolean{ fun hasNooseWand(player: Player) : Boolean{
return player.equipment.contains(Items.NOOSE_WAND_10150,1) || player.inventory.contains(Items.NOOSE_WAND_10150,1) return player.equipment.contains(Items.NOOSE_WAND_10150,1) || player.inventory.contains(Items.NOOSE_WAND_10150,1)
} }
} }
@@ -27,20 +27,20 @@ class PolarKebbitHunting : HunterTracking() {
) )
initialMap = hashMapOf( initialMap = hashMapOf(
19640 to arrayListOf( 19640 to arrayListOf(
TrailDefinition(24,TrailType.TUNNEL,false,Location.create(2712, 3831, 1),Location.create(2718, 3832, 1)), TrailDefinition(3061,TrailType.TUNNEL,false,Location.create(2712, 3831, 1),Location.create(2718, 3832, 1)),
TrailDefinition(21,TrailType.LINKING,true,Location.create(2712, 3831, 1),Location.create(2716, 3827, 1),Location.create(2713,3827,1)), TrailDefinition(3060,TrailType.LINKING,true,Location.create(2712, 3831, 1),Location.create(2716, 3827, 1),Location.create(2713,3827,1)),
TrailDefinition(12,TrailType.LINKING,false,Location.create(2712, 3831, 1),Location.create(2708, 3819, 1),Location.create(2708,3825,1)) TrailDefinition(3057,TrailType.LINKING,false,Location.create(2712, 3831, 1),Location.create(2708, 3819, 1),Location.create(2708,3825,1))
), ),
19641 to arrayListOf( 19641 to arrayListOf(
TrailDefinition(0,TrailType.LINKING,true,Location.create(2718, 3820, 1),Location.create(2708, 3819, 1),Location.create(2712,3815,1)), TrailDefinition(3053,TrailType.LINKING,true,Location.create(2718, 3820, 1),Location.create(2708, 3819, 1),Location.create(2712,3815,1)),
TrailDefinition(6,TrailType.TUNNEL,false, Location.create(2718, 3820, 1),Location.create(2715, 3820, 1)), TrailDefinition(3055,TrailType.TUNNEL,false, Location.create(2718, 3820, 1),Location.create(2715, 3820, 1)),
TrailDefinition(9,TrailType.TUNNEL,false,Location.create(2718, 3820, 1),Location.create(2721, 3827, 1)) TrailDefinition(3056,TrailType.TUNNEL,false,Location.create(2718, 3820, 1),Location.create(2721, 3827, 1))
) )
) )
linkingTrails = arrayListOf( linkingTrails = arrayListOf(
TrailDefinition(15,TrailType.LINKING,true,Location.create(2714,3821,1),Location.create(2716, 3827, 1)), TrailDefinition(3058,TrailType.LINKING,true,Location.create(2714,3821,1),Location.create(2716, 3827, 1)),
TrailDefinition(18,TrailType.TUNNEL,true,Location.create(2716, 3827, 1),Location.create(2718,3829,1)), TrailDefinition(3059,TrailType.TUNNEL,true,Location.create(2716, 3827, 1),Location.create(2718,3829,1)),
TrailDefinition(3,TrailType.TUNNEL,false,Location.create(2708, 3819, 1),Location.create(2711, 3819, 1)) TrailDefinition(3054,TrailType.TUNNEL,false,Location.create(2708, 3819, 1),Location.create(2711, 3819, 1))
) )
experience = 30.0 experience = 30.0
varp = 926 varp = 926
@@ -65,4 +65,4 @@ class PolarKebbitHunting : HunterTracking() {
SceneryDefinition.forId(19435).handlers["option:attack"] = this SceneryDefinition.forId(19435).handlers["option:attack"] = this
return this return this
} }
} }
@@ -2,13 +2,13 @@ package content.global.skill.hunter.tracking
import core.game.world.map.Location import core.game.world.map.Location
class TrailDefinition(val offset: Int, val type: TrailType, var inverted: Boolean, val startLocation: Location, val endLocation: Location, val triggerObjectLocation: Location = endLocation){ class TrailDefinition(val varbit: Int, val type: TrailType, var inverted: Boolean, val startLocation: Location, val endLocation: Location, val triggerObjectLocation: Location = endLocation){
override fun toString(): String { override fun toString(): String {
return "$startLocation $endLocation [offset: $offset] [${type.name}] [inverted: $inverted]" return "$startLocation $endLocation [varbit: $varbit] [${type.name}] [inverted: $inverted]"
} }
} }
enum class TrailType{ enum class TrailType{
LINKING, LINKING,
INITIAL, INITIAL,
TUNNEL TUNNEL
} }
@@ -1,5 +1,7 @@
package content.global.skill.runecrafting; package content.global.skill.runecrafting;
import static core.api.ContentAPIKt.*;
import core.cache.def.impl.VarbitDefinition; import core.cache.def.impl.VarbitDefinition;
import core.cache.def.impl.ItemDefinition; import core.cache.def.impl.ItemDefinition;
import core.cache.def.impl.SceneryDefinition; import core.cache.def.impl.SceneryDefinition;
@@ -38,27 +40,27 @@ public final class TiaraPlugin implements Plugin<Object> {
switch (identifier) { switch (identifier) {
case "equip": case "equip":
if (item.getName().contains("cape")) { if (item.getName().contains("cape")) {
player.getConfigManager().set(CONFIG, 6143); setVarp(player, CONFIG, 6143);
break; break;
} }
MysteriousRuin ruin = MysteriousRuin.forTalisman(Tiara.forItem(item).getTalisman()); MysteriousRuin ruin = MysteriousRuin.forTalisman(Tiara.forItem(item).getTalisman());
player.getConfigManager().set(CONFIG, 1 << VarbitDefinition.forObjectID(SceneryDefinition.forId(ruin.getObject()[0]).getVarbitID()).getStartBit(), true); setVarbit(player, SceneryDefinition.forId(ruin.getObject()[0]).getVarbitID(), 1, true);
break; break;
case "unequip": case "unequip":
final Item other = args.length == 2 ? null : (Item) args[2]; final Item other = args.length == 2 ? null : (Item) args[2];
if (other != null) { if (other != null) {
if (other.getName().toLowerCase().contains("cape")) { if (other.getName().toLowerCase().contains("cape")) {
player.getConfigManager().set(CONFIG, 6143); setVarp(player, CONFIG, 6143);
break; break;
} }
Tiara tiara = Tiara.forItem(other); Tiara tiara = Tiara.forItem(other);
if (tiara != null) { if (tiara != null) {
MysteriousRuin r = MysteriousRuin.forTalisman(tiara.getTalisman()); MysteriousRuin r = MysteriousRuin.forTalisman(tiara.getTalisman());
player.getConfigManager().set(CONFIG, 1 << VarbitDefinition.forObjectID(SceneryDefinition.forId(r.getObject()[0]).getVarbitID()).getStartBit(), true); setVarbit(player, SceneryDefinition.forId(r.getObject()[0]).getVarbitID(), 1, true);
break; break;
} }
} }
player.getConfigManager().set(CONFIG, 0); setVarp(player, CONFIG, 0);
break; break;
} }
return true; return true;
@@ -244,7 +244,7 @@ class AbyssPlugin : InteractionListener {
* Used to make sure the player lands by the blocked obstacle. * Used to make sure the player lands by the blocked obstacle.
*/ */
fun rotateObstacles(player: Player, abyssLoc: AbyssLoc) { fun rotateObstacles(player: Player, abyssLoc: AbyssLoc) {
setVarbit(player,VARP_SCENERY_ABYSS,ABYSS_OBSTACLES,abyssLoc.getSegment(),true) setVarbit(player, 625, abyssLoc.getSegment(), true)
} }
/** /**
@@ -266,7 +266,7 @@ class AbyssPlugin : InteractionListener {
3 -> return if (RandomFunction.random(100) < getStatLevel(player,skill) 3 -> return if (RandomFunction.random(100) < getStatLevel(player,skill)
) { ) {
sendMessage(player, colorize("%G${messages[1]}")) sendMessage(player, colorize("%G${messages[1]}"))
if(varbitVal != null) { setVarbit(player,VARP_SCENERY_ABYSS,ABYSS_OBSTACLES,varbitVal) } if(varbitVal != null) { setVarbit(player, 625, varbitVal) }
false false
} else { } else {
sendMessage(player, colorize("%R${messages[2]}")) sendMessage(player, colorize("%R${messages[2]}"))
@@ -274,7 +274,7 @@ class AbyssPlugin : InteractionListener {
true true
} }
5 -> { 5 -> {
if(varbitVal != null) { setVarbit(player,VARP_SCENERY_ABYSS,ABYSS_OBSTACLES,varbitVal or 1) } if(varbitVal != null) { setVarbit(player, 625, varbitVal or 1) }
} }
7 -> { 7 -> {
player.unlock() player.unlock()
@@ -6,6 +6,8 @@ import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.node.item.Item; import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the zamorak mages dialogue. * Handles the zamorak mages dialogue.
@@ -460,7 +462,7 @@ public final class ZamorakMageDialogue extends DialoguePlugin {
* @param stage the stage. * @param stage the stage.
*/ */
public void setStage(int stage) { public void setStage(int stage) {
player.getConfigManager().set(492, stage, true); setVarp(player, 492, stage, true);
} }
/** /**
@@ -468,6 +470,6 @@ public final class ZamorakMageDialogue extends DialoguePlugin {
* @return the stage. * @return the stage.
*/ */
public int getStage() { public int getStage() {
return player.getConfigManager().get(492); return getVarp(player, 492);
} }
} }
@@ -209,7 +209,7 @@ class SlayerManager(val player: Player? = null) : LoginListener, PersistPlayer,
fun decrementAmount(amount: Int) { fun decrementAmount(amount: Int) {
flags.decrementTaskAmount(amount) flags.decrementTaskAmount(amount)
player!!.varpManager.get(2502).setVarbit(0, flags.taskFlags shr 4).send(player) setVarp(player!!, 2502, flags.taskFlags shr 4)
} }
/** /**
@@ -10,6 +10,7 @@ import content.global.skill.slayer.Tasks
import core.tools.RandomFunction import core.tools.RandomFunction
import org.rs09.consts.Items import org.rs09.consts.Items
import java.util.ArrayList import java.util.ArrayList
import core.api.*
object SlayerUtils { object SlayerUtils {
fun generate(player: Player, master: Master): Tasks? fun generate(player: Player, master: Master): Tasks?
@@ -44,7 +45,7 @@ object SlayerUtils {
} else if (master == Master.VANNAKA) { } else if (master == Master.VANNAKA) {
player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 1, 14) player.achievementDiaryManager.finishTask(player, DiaryType.VARROCK, 1, 14)
} }
player.varpManager.get(2502).setVarbit(0, SlayerManager.getInstance(player).flags.taskFlags shr 4).send(player) setVarp(player, 2502, SlayerManager.getInstance(player).flags.taskFlags shr 4)
} }
@JvmStatic @JvmStatic
@@ -33,6 +33,8 @@ import core.net.packet.out.MinimapState;
import core.plugin.Plugin; import core.plugin.Plugin;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the summoning training room. * Handles the summoning training room.
* @author Emperor * @author Emperor
@@ -83,7 +85,7 @@ public final class SummoningTrainingRoom extends OptionHandler {
int questVal = quest.getStage(player) == 0 ? 0 : quest.getStage(player) > 0 && quest.getStage(player) < 100 ? 5 : 28893; int questVal = quest.getStage(player) == 0 ? 0 : quest.getStage(player) > 0 && quest.getStage(player) < 100 ? 5 : 28893;
switch (option) { switch (option) {
case "close": case "close":
player.getConfigManager().set(1178, questVal == 28893 ? 32989 : (1 << 11) + questVal); setVarp(player, 1178, questVal == 28893 ? 32989 : (1 << 11) + questVal);
return true; return true;
case "open": case "open":
if (quest.getStage(player) < 40) { if (quest.getStage(player) < 40) {
@@ -92,13 +94,13 @@ public final class SummoningTrainingRoom extends OptionHandler {
} else if (quest.getStage(player) == 40) { } else if (quest.getStage(player) == 40) {
if (player.getAttribute("has-key", false) || player.getInventory().remove(TRAPDOOR_KEY)) { if (player.getAttribute("has-key", false) || player.getInventory().remove(TRAPDOOR_KEY)) {
player.setAttribute("has-key", true); player.setAttribute("has-key", true);
player.getConfigManager().set(1178, (2 << 11) + questVal, true); setVarp(player, 1178, (2 << 11) + questVal, true);
} else { } else {
player.getPacketDispatch().sendMessage("The trapdoor is locked."); player.getPacketDispatch().sendMessage("The trapdoor is locked.");
return true; return true;
} }
} }
player.getConfigManager().set(1178, questVal == 28893 ? 28893 : (2 << 11) + questVal); setVarp(player, 1178, questVal == 28893 ? 28893 : (2 << 11) + questVal);
return true; return true;
case "climb-down": case "climb-down":
if (object.getId() == 28653) { if (object.getId() == 28653) {
@@ -34,7 +34,7 @@ import content.global.skill.summoning.SummoningPouch;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static core.api.ContentAPIKt.log; import static core.api.ContentAPIKt.*;
/** /**
* Represents a familiar. * Represents a familiar.
@@ -339,10 +339,8 @@ public abstract class Familiar extends NPC implements Plugin<Object> {
private void sendTimeRemaining() { private void sendTimeRemaining() {
int minutes = ticks / 100; int minutes = ticks / 100;
int centiminutes = ticks % 100; int centiminutes = ticks % 100;
owner.varpManager.get(1176) setVarbit(owner, 4534, minutes);
.setVarbit(7, minutes) setVarbit(owner, 4290, centiminutes > 49 ? 1 : 0);
.setVarbit(6, centiminutes > 49 ? 1 : 0)
.send(owner);
} }
/** /**
@@ -542,9 +540,9 @@ public abstract class Familiar extends NPC implements Plugin<Object> {
* Sends the familiar packets. * Sends the familiar packets.
*/ */
public void sendConfiguration() { public void sendConfiguration() {
owner.getConfigManager().set(448, getPouchId()); setVarp(owner, 448, getPouchId());
owner.getConfigManager().set(1174, getOriginalId()); setVarp(owner, 1174, getOriginalId());
owner.getConfigManager().set(1175, specialCost << 23); setVarp(owner, 1175, specialCost << 23);
sendTimeRemaining(); sendTimeRemaining();
updateSpecialPoints(0); updateSpecialPoints(0);
} }
@@ -605,10 +603,10 @@ public abstract class Familiar extends NPC implements Plugin<Object> {
getPulseManager().clear(); getPulseManager().clear();
owner.getInterfaceManager().removeTabs(7); owner.getInterfaceManager().removeTabs(7);
owner.getFamiliarManager().setFamiliar(null); owner.getFamiliarManager().setFamiliar(null);
owner.getConfigManager().set(448, -1); setVarp(owner, 448, -1);
owner.getConfigManager().set(1176, 0); setVarp(owner, 1176, 0);
owner.getConfigManager().set(1175, 182986); setVarp(owner, 1175, 182986);
owner.getConfigManager().set(1174, -1); setVarp(owner, 1174, -1);
if (owner.getSkullManager().isWilderness()) { if (owner.getSkullManager().isWilderness()) {
owner.getAppearance().sync(); owner.getAppearance().sync();
} }
@@ -624,7 +622,7 @@ public abstract class Familiar extends NPC implements Plugin<Object> {
if (specialPoints > 60) { if (specialPoints > 60) {
specialPoints = 60; specialPoints = 60;
} }
owner.getConfigManager().set(1177, specialPoints); setVarp(owner, 1177, specialPoints);
} }
@Override @Override
@@ -22,6 +22,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static core.api.ContentAPIKt.*;
/** /**
* Handles a player's familiar. * Handles a player's familiar.
* @author Emperor * @author Emperor
@@ -412,9 +414,9 @@ public final class FamiliarManager {
* @param value the value. * @param value the value.
*/ */
public void setConfig(int value) { public void setConfig(int value) {
int current = player.getConfigManager().get(1160); int current = getVarp(player, 1160);
int newVal = current + value; int newVal = current + value;
player.getConfigManager().set(1160, newVal); setVarp(player, 1160, newVal);
} }
/** /**
@@ -5,6 +5,7 @@ import core.game.node.entity.state.PlayerState
import core.game.node.entity.state.State import core.game.node.entity.state.State
import core.game.system.task.Pulse import core.game.system.task.Pulse
import org.json.simple.JSONObject import org.json.simple.JSONObject
import core.api.*
@PlayerState("incubator") @PlayerState("incubator")
class IncubatorState(player: Player? = null) : State(player) { class IncubatorState(player: Player? = null) : State(player) {
@@ -35,7 +36,7 @@ class IncubatorState(player: Player? = null) : State(player) {
override fun createPulse() { override fun createPulse() {
player ?: return player ?: return
egg ?: return egg ?: return
player.varpManager.get(1160).setVarbit(4,1).send(player) setVarbit(player, 4277, 1)
pulse = object : Pulse(){ pulse = object : Pulse(){
override fun pulse(): Boolean { override fun pulse(): Boolean {
if(ticksLeft-- <= 0){ if(ticksLeft-- <= 0){
@@ -49,4 +50,4 @@ class IncubatorState(player: Player? = null) : State(player) {
} }
} }
} }
@@ -4,6 +4,8 @@ import content.global.skill.summoning.familiar.Familiar;
import content.global.skill.summoning.familiar.FamiliarSpecial; import content.global.skill.summoning.familiar.FamiliarSpecial;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import static core.api.ContentAPIKt.*;
/** /**
* Represents a pet. * Represents a pet.
* @author Emperor * @author Emperor
@@ -48,9 +50,9 @@ public final class Pet extends Familiar {
@Override @Override
public void sendConfiguration() { public void sendConfiguration() {
owner.getConfigManager().set(1175, ((int) details.getGrowth() << 1) | ((int) details.getHunger() << 9)); setVarp(owner, 1175, ((int) details.getGrowth() << 1) | ((int) details.getHunger() << 9));
owner.getConfigManager().set(1174, getId()); setVarp(owner, 1174, getId());
owner.getConfigManager().set(448, itemId); setVarp(owner, 448, itemId);
} }
@Override @Override
@@ -69,7 +71,7 @@ public final class Pet extends Familiar {
if (hunger >= 100.0 && growthRate != 0 && pet.getFood().length != 0) { if (hunger >= 100.0 && growthRate != 0 && pet.getFood().length != 0) {
owner.getFamiliarManager().dismiss(false); owner.getFamiliarManager().dismiss(false);
owner.getFamiliarManager().setFamiliar(null); owner.getFamiliarManager().setFamiliar(null);
owner.getConfigManager().set(1175, 0); setVarp(owner, 1175, 0);
owner.sendMessage("<col=ff0000>Your pet has run away.</col>"); owner.sendMessage("<col=ff0000>Your pet has run away.</col>");
return; return;
} }
@@ -87,7 +89,7 @@ public final class Pet extends Familiar {
} else if (!getPulseManager().hasPulseRunning()) { } else if (!getPulseManager().hasPulseRunning()) {
startFollowing(); startFollowing();
} }
owner.getConfigManager().set(1175, ((int) details.getGrowth() << 1) | ((int) details.getHunger() << 9)); setVarp(owner, 1175, ((int) details.getGrowth() << 1) | ((int) details.getHunger() << 9));
} }
/** /**
@@ -2,6 +2,7 @@ package content.global.travel
import content.global.skill.magic.TeleportMethod import content.global.skill.magic.TeleportMethod
import core.game.event.TeleportEvent import core.game.event.TeleportEvent
import core.api.*
import core.api.lock import core.api.lock
import core.api.teleport import core.api.teleport
import core.api.unlock import core.api.unlock
@@ -142,7 +143,7 @@ object EssenceTeleport {
* @return the stage. * @return the stage.
*/ */
fun getStage(player: Player): Int { fun getStage(player: Player): Int {
return player.varpManager.get(492).getValue() return getVarp(player, 492)
} }
/** /**
@@ -49,7 +49,7 @@ class CanoeInterfaceListeners : InterfaceListener {
player.pulseManager.run(object : Pulse(3) { player.pulseManager.run(object : Pulse(3) {
override fun pulse(): Boolean { override fun pulse(): Boolean {
if (RandomFunction.random(if (canoe == Canoe.WAKA) 8 else 6) == 1) { if (RandomFunction.random(if (canoe == Canoe.WAKA) 8 else 6) == 1) {
player.varpManager.setVarbit(varbit, CanoeUtils.getCraftValue(canoe, false)) setVarbit(player,varbit, CanoeUtils.getCraftValue(canoe, false))
player.skills.addExperience(Skills.WOODCUTTING, canoe.experience) player.skills.addExperience(Skills.WOODCUTTING, canoe.experience)
player.unlock() player.unlock()
return true return true
@@ -128,7 +128,7 @@ class CanoeInterfaceListeners : InterfaceListener {
if(destIndex == 4){ if(destIndex == 4){
player.sendMessage("There are no trees nearby to make a new canoe. Guess you're walking.") player.sendMessage("There are no trees nearby to make a new canoe. Guess you're walking.")
} }
player.varpManager.setVarbit(varbit,0) setVarbit(player,varbit,0)
return true return true
} }
} }
@@ -138,4 +138,4 @@ class CanoeInterfaceListeners : InterfaceListener {
return@on true return@on true
} }
} }
} }
@@ -9,6 +9,8 @@ import org.rs09.consts.Components
import core.game.interaction.InteractionListener import core.game.interaction.InteractionListener
import core.game.interaction.IntType import core.game.interaction.IntType
import core.api.*
class CanoeStationListener : InteractionListener { class CanoeStationListener : InteractionListener {
private val STATION_IDs = intArrayOf(12140, 12141, 12142, 12143, 12144, 12145, 12146, 12147, 12148, 12151, 12152, 12153, 12154, 12155, 12156, 12157, 12158, 12149, 12150) private val STATION_IDs = intArrayOf(12140, 12141, 12142, 12143, 12144, 12145, 12146, 12147, 12148, 12151, 12152, 12153, 12154, 12155, 12156, 12157, 12158, 12149, 12150)
@@ -33,7 +35,7 @@ class CanoeStationListener : InteractionListener {
val axe: SkillingTool? = SkillingTool.getHatchet(player) val axe: SkillingTool? = SkillingTool.getHatchet(player)
val varbit = node.asScenery().definition.configFile val varbit = node.asScenery().definition.configFile
if(varbit.getValue(player) != 0){ if(varbit.getValue(player) != 0){
player.varpManager.setVarbit(varbit,0) setVarbit(player,varbit,0)
} }
if (axe == null) { if (axe == null) {
@@ -45,14 +47,14 @@ class CanoeStationListener : InteractionListener {
return@on true return@on true
} }
player.lock() player.lock()
player.varpManager.get(varbit.varpId).clearBitRange(0,31) setVarp(player, varbit.varpId, 0)
player.faceLocation(CanoeUtils.getFaceLocation(player.location)) player.faceLocation(CanoeUtils.getFaceLocation(player.location))
player.animate(axe.animation) player.animate(axe.animation)
player.varpManager.setVarbit(varbit,STAGE_TREE_NONINTERACTABLE) setVarbit(player,varbit,STAGE_TREE_NONINTERACTABLE)
player.pulseManager.run(object : Pulse(4){ player.pulseManager.run(object : Pulse(4){
override fun pulse(): Boolean { override fun pulse(): Boolean {
player.animator.stop() player.animator.stop()
player.varpManager.setVarbit(varbit,STAGE_LOG_CHOPPED) setVarbit(player,varbit,STAGE_LOG_CHOPPED)
player.packetDispatch.sendSceneryAnimation(node.asScenery().getChild(player), FALL, false) player.packetDispatch.sendSceneryAnimation(node.asScenery().getChild(player), FALL, false)
player.unlock() player.unlock()
return true return true
@@ -64,7 +66,7 @@ class CanoeStationListener : InteractionListener {
on(STATION_IDs, IntType.SCENERY, "shape-canoe"){ player, node -> on(STATION_IDs, IntType.SCENERY, "shape-canoe"){ player, node ->
val varbit = node.asScenery().definition.configFile val varbit = node.asScenery().definition.configFile
if(varbit.getValue(player) != STAGE_LOG_CHOPPED){ if(varbit.getValue(player) != STAGE_LOG_CHOPPED){
player.varpManager.setVarbit(varbit,0) setVarbit(player,varbit,0)
return@on true return@on true
} }
player.faceLocation(CanoeUtils.getFaceLocation(player.location)) player.faceLocation(CanoeUtils.getFaceLocation(player.location))
@@ -81,7 +83,7 @@ class CanoeStationListener : InteractionListener {
player.faceLocation(CanoeUtils.getFaceLocation(player.location)) player.faceLocation(CanoeUtils.getFaceLocation(player.location))
player.pulseManager.run(object : Pulse(){ player.pulseManager.run(object : Pulse(){
override fun pulse(): Boolean { override fun pulse(): Boolean {
player.varpManager.setVarbit(varbit, CanoeUtils.getCraftValue(canoe, true)) setVarbit(player,varbit, CanoeUtils.getCraftValue(canoe, true))
player.packetDispatch.sendSceneryAnimation(node.asScenery(), FLOAT, false) player.packetDispatch.sendSceneryAnimation(node.asScenery(), FLOAT, false)
player.unlock() player.unlock()
return true return true
@@ -95,4 +97,4 @@ class CanoeStationListener : InteractionListener {
return@on true return@on true
} }
} }
} }
@@ -11,6 +11,9 @@ import core.net.packet.context.MinimapStateContext;
import core.net.packet.out.CameraViewPacket; import core.net.packet.out.CameraViewPacket;
import core.net.packet.out.MinimapState; import core.net.packet.out.MinimapState;
import static core.api.ContentAPIKt.*;
/** /**
* Represents the pulse used for a glider. * Represents the pulse used for a glider.
* *
@@ -49,7 +52,7 @@ public final class GliderPulse extends Pulse {
public boolean pulse() { public boolean pulse() {
final boolean crash = glider == Gliders.LEMANTO_ADRA; final boolean crash = glider == Gliders.LEMANTO_ADRA;
if (count == 1) { if (count == 1) {
player.varpManager.get(153).setVarbit(0,glider.getConfig()).send(player); setVarp(player, 153, glider.getConfig());
PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 2)); PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 2));
} else if (count == 2 && crash) { } else if (count == 2 && crash) {
PacketRepository.send(CameraViewPacket.class, new CameraContext(player, CameraType.SHAKE, 4, 4, 1200, 4, 4)); PacketRepository.send(CameraViewPacket.class, new CameraContext(player, CameraType.SHAKE, 4, 4, 1200, 4, 4));
@@ -68,7 +71,7 @@ public final class GliderPulse extends Pulse {
player.getInterfaceManager().closeOverlay(); player.getInterfaceManager().closeOverlay();
player.getInterfaceManager().close(); player.getInterfaceManager().close();
PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 0)); PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 0));
player.varpManager.get(153).setVarbit(0,0).send(player); setVarp(player, 153, 0);
// Use the gnome glider to travel to Karamja // Use the gnome glider to travel to Karamja
if (!crash && glider == Gliders.GANDIUS) { if (!crash && glider == Gliders.GANDIUS) {
player.getAchievementDiaryManager().finishTask(player, DiaryType.KARAMJA, 1, 11); player.getAchievementDiaryManager().finishTask(player, DiaryType.KARAMJA, 1, 11);
@@ -4,6 +4,8 @@ import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.world.map.Location; import core.game.world.map.Location;
import static core.api.ContentAPIKt.setVarp;
/** /**
* Represents an enum of glider locations. * Represents an enum of glider locations.
* @author 'Vexia * @author 'Vexia
@@ -60,7 +62,7 @@ public enum Gliders {
if (g == null) { if (g == null) {
return; return;
} }
player.getConfigManager().set(153, g.getConfig()); setVarp(player, 153, g.getConfig());
} }
/** /**
@@ -8,6 +8,8 @@ import core.net.packet.PacketRepository;
import core.net.packet.context.MinimapStateContext; import core.net.packet.context.MinimapStateContext;
import core.net.packet.out.MinimapState; import core.net.packet.out.MinimapState;
import static core.api.ContentAPIKt.setVarp;
/** /**
* Represents a pulse used to travel a player to a location. * Represents a pulse used to travel a player to a location.
* @author Vexia * @author Vexia
@@ -65,7 +67,7 @@ public final class ShipTravelPulse extends Pulse {
*/ */
private void arrive() { private void arrive() {
player.unlock(); player.unlock();
player.getConfigManager().set(75, -1); setVarp(player, 75, 0);
player.getInterfaceManager().close(); player.getInterfaceManager().close();
PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 0)); PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 0));
if (!ship.getName().equals("Crandor")) { if (!ship.getName().equals("Crandor")) {
@@ -96,6 +98,6 @@ public final class ShipTravelPulse extends Pulse {
player.lock(ship.getDelay() + 1); player.lock(ship.getDelay() + 1);
player.getInterfaceManager().open(new Component(299)); player.getInterfaceManager().open(new Component(299));
PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 2)); PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 2));
player.getConfigManager().set(75, ship.getConfig()); setVarp(player, 75, ship.getConfig());
} }
} }
@@ -1,6 +1,6 @@
package content.minigame.allfiredup package content.minigame.allfiredup
import core.api.log import core.api.*
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.tools.SystemLogger import core.tools.SystemLogger
import core.game.world.map.Location import core.game.world.map.Location
@@ -10,21 +10,21 @@ import core.tools.Log
* Various data for beacons, such as varp and offset, required FM level, etc * Various data for beacons, such as varp and offset, required FM level, etc
* @author Ceikry * @author Ceikry
*/ */
enum class AFUBeacon(val title: String, val fmLevel: Int, val varpId: Int, val offset: Int, val location: Location, val experience: Double, val keeper: Int = 0) { enum class AFUBeacon(val title: String, val fmLevel: Int, val varbit: Int, val location: Location, val experience: Double, val keeper: Int = 0) {
RIVER_SALVE("",43,1283,0,Location.create(3396, 3464, 0),216.2,8065), RIVER_SALVE("",43,5146,Location.create(3396, 3464, 0),216.2,8065),
RAG_AND_BONE("",43,1283,3,Location.create(3343, 3510, 0),235.8,8066), RAG_AND_BONE("",43,5147,Location.create(3343, 3510, 0),235.8,8066),
JOLLY_BOAR("",48,1283,6,Location.create(3278, 3525, 0), 193.8,8067), JOLLY_BOAR("",48,5148,Location.create(3278, 3525, 0), 193.8,8067),
NORTH_VARROCK_CASTLE("",53,1283,9,Location.create(3236, 3527, 0),178.5,8068), NORTH_VARROCK_CASTLE("",53,5149,Location.create(3236, 3527, 0),178.5,8068),
GRAND_EXCHANGE("",59,1283,12,Location.create(3170, 3536, 0),194.3,8069), GRAND_EXCHANGE("",59,5150,Location.create(3170, 3536, 0),194.3,8069),
EDGEVILLE("",62,1283,15,Location.create(3087, 3516, 0),86.7,8070), EDGEVILLE("",62,5151,Location.create(3087, 3516, 0),86.7,8070),
MONASTERY("",68,1283,18,Location.create(3034, 3518, 0),224.4,8071), MONASTERY("",68,5152,Location.create(3034, 3518, 0),224.4,8071),
GOBLIN_VILLAGE("",72,1283,21,Location.create(2968, 3516, 0),194.8,8072), GOBLIN_VILLAGE("",72,5153,Location.create(2968, 3516, 0),194.8,8072),
BURTHORPE("",76,1283,24,Location.create(2940, 3565, 0),195.3,8073), BURTHORPE("",76,5154,Location.create(2940, 3565, 0),195.3,8073),
DEATH_PLATEAU("",79,1288,0,Location.create(2944, 3622, 0),249.9,8074), DEATH_PLATEAU("",79,5155,Location.create(2944, 3622, 0),249.9,8074),
TROLLHEIM("",83,1288,3,Location.create(2939, 3680, 0),201.0,8075), TROLLHEIM("",83,5156,Location.create(2939, 3680, 0),201.0,8075),
GWD("",87,1288,6,Location.create(2937, 3773, 0),255.0,8076), GWD("",87,5157,Location.create(2937, 3773, 0),255.0,8076),
TEMPLE("",89,1288,9,Location.create(2946, 3836, 0),198.9), TEMPLE("",89,5158,Location.create(2946, 3836, 0),198.9),
PLATEAU("",92,1288,12,Location.create(2964, 3931, 0),147.9); PLATEAU("",92,5159,Location.create(2964, 3931, 0),147.9);
companion object { companion object {
fun forLocation(location: Location): content.minigame.allfiredup.AFUBeacon { fun forLocation(location: Location): content.minigame.allfiredup.AFUBeacon {
@@ -36,33 +36,33 @@ enum class AFUBeacon(val title: String, val fmLevel: Int, val varpId: Int, val o
fun resetAllBeacons(player: Player){ fun resetAllBeacons(player: Player){
for(beacon in values()){ for(beacon in values()){
player.varpManager.get(beacon.varpId).setVarbit(beacon.offset,0).send(player) setVarbit(player, beacon.varbit, 0)
} }
} }
} }
fun light(player: Player){ fun light(player: Player){
player.varpManager.get(varpId).setVarbit(offset,2).send(player) setVarbit(player, varbit, 2)
} }
fun diminish(player: Player){ fun diminish(player: Player){
player.varpManager.get(varpId).setVarbit(offset,3).send(player) setVarbit(player, varbit, 3)
} }
fun extinguish(player: Player){ fun extinguish(player: Player){
player.varpManager.get(varpId).setVarbit(offset,0).send(player) setVarbit(player, varbit, 0)
} }
fun lightGnomish(player: Player){ fun lightGnomish(player: Player){
player.varpManager.get(varpId).setVarbit(offset,4).send(player) setVarbit(player, varbit, 4)
} }
fun fillWithLogs(player: Player){ fun fillWithLogs(player: Player){
player.varpManager.get(varpId).setVarbit(offset,1).send(player) setVarbit(player, varbit, 1, true)
} }
fun getState(player: Player): content.minigame.allfiredup.BeaconState { fun getState(player: Player): content.minigame.allfiredup.BeaconState {
return content.minigame.allfiredup.BeaconState.values()[player.varpManager.get(varpId).getVarbit(offset) ?: 0] return BeaconState.values()[getVarbit(player, varbit)]
} }
} }
@@ -72,4 +72,4 @@ enum class BeaconState{
LIT, LIT,
DYING, DYING,
WARNING WARNING
} }
@@ -106,7 +106,6 @@ class AFUBeaconListeners : InteractionListener {
if(questComplete){ if(questComplete){
session?.setLogs(beacon.ordinal,logs) session?.setLogs(beacon.ordinal,logs)
} }
player.varpManager.flagSave(beacon.varpId);
} }
2 -> player.unlock().also {player.animator.animate(Animation.RESET); return true } 2 -> player.unlock().also {player.animator.animate(Animation.RESET); return true }
} }
@@ -215,4 +214,4 @@ class AFUBeaconListeners : InteractionListener {
return inventory.containsItem(Item(Items.INFERNO_ADZE_13661)) || bank.containsItem(Item(Items.INFERNO_ADZE_13661)) || equipment.containsItem(Item(Items.INFERNO_ADZE_13661)) return inventory.containsItem(Item(Items.INFERNO_ADZE_13661)) || bank.containsItem(Item(Items.INFERNO_ADZE_13661)) || equipment.containsItem(Item(Items.INFERNO_ADZE_13661))
} }
} }
@@ -11,6 +11,7 @@ import core.game.world.update.flag.context.Animation
import org.rs09.consts.Items import org.rs09.consts.Items
import core.game.interaction.InteractionListener import core.game.interaction.InteractionListener
import core.game.interaction.IntType import core.game.interaction.IntType
import core.api.*
import java.util.* import java.util.*
/** /**
@@ -93,19 +94,18 @@ class AFURepairClimbHandler : InteractionListener {
} }
} }
player.varpManager.get(rco.varp).setVarbit(rco.offset,1).send(player) setVarbit(player, rco.varbit, 1, true)
player.varpManager.flagSave(rco.varp)
} }
private fun climb(player: Player, rco: RepairClimbObject, location: Location){ private fun climb(player: Player, rco: RepairClimbObject, location: Location){
ForceMovement.run(player,location,rco.getOtherLocation(player),rco.getAnimation(player),rco.getAnimation(player),rco.getDirection(player),20).endAnimation = Animation(-1) ForceMovement.run(player,location,rco.getOtherLocation(player),rco.getAnimation(player),rco.getAnimation(player),rco.getDirection(player),20).endAnimation = Animation(-1)
} }
private enum class RepairClimbObject(val varp: Int, val offset: Int, val destinationUp: Location?, val destinationDown: Location?, val levelRequirement: Pair<Int,Int>?){ private enum class RepairClimbObject(val varbit: Int, val destinationUp: Location?, val destinationDown: Location?, val levelRequirement: Pair<Int,Int>?){
DEATH_PLATEAU(1282,15,Location.create(2949, 3623, 0),Location.create(2954, 3623, 0), Pair(Skills.CONSTRUCTION,42)), DEATH_PLATEAU(5161,Location.create(2949, 3623, 0),Location.create(2954, 3623, 0), Pair(Skills.CONSTRUCTION,42)),
BURTHORPE(1282,14,Location.create(2941, 3563, 0),Location.create(2934, 3563, 0),Pair(Skills.SMITHING,56)), BURTHORPE(5160,Location.create(2941, 3563, 0),Location.create(2934, 3563, 0),Pair(Skills.SMITHING,56)),
GWD(1283,27,null,null,Pair(Skills.CRAFTING,60)), GWD(5163,null,null,Pair(Skills.CRAFTING,60)),
TEMPLE(1287,29,Location.create(2949, 3835, 0),Location.create(2956, 3835, 0),Pair(Skills.SMITHING,64)); TEMPLE(5164,Location.create(2949, 3835, 0),Location.create(2956, 3835, 0),Pair(Skills.SMITHING,64));
fun getOtherLocation(player: Player): Location?{ fun getOtherLocation(player: Player): Location?{
if(player.location == destinationDown) return destinationUp if(player.location == destinationDown) return destinationUp
@@ -124,7 +124,7 @@ class AFURepairClimbHandler : InteractionListener {
} }
fun isRepaired(player: Player): Boolean{ fun isRepaired(player: Player): Boolean{
return player.varpManager.get(varp).getVarbit(offset) == 1 return getVarbit(player, varbit) == 1
} }
} }
@@ -138,4 +138,4 @@ class AFURepairClimbHandler : InteractionListener {
} }
} }
} }
@@ -33,7 +33,7 @@ import core.tools.RandomFunction;
import core.game.world.GameWorld; import core.game.world.GameWorld;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import static core.api.ContentAPIKt.getWorldTicks; import static core.api.ContentAPIKt.*;
/** /**
* Handles the barrows activity plugin. * Handles the barrows activity plugin.
@@ -137,8 +137,8 @@ public final class BarrowsActivityPlugin extends ActivityPlugin {
} }
} }
Player player = (Player) e; Player player = (Player) e;
if ((player.getConfigManager().get(1270) == 1) != tunnel) { if ((getVarp(player, 1270) == 1) != tunnel) {
player.getConfigManager().set(1270, tunnel ? 3 : 0, true);//@emp: proper value seems to be 3, val of 1 makes corridors black setVarp(player, 1270, tunnel ? 3 : 0, true);
} }
} }
} }
@@ -149,8 +149,8 @@ public final class BarrowsActivityPlugin extends ActivityPlugin {
Player player = (Player) e; Player player = (Player) e;
PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 2)); PacketRepository.send(MinimapState.class, new MinimapStateContext(player, 2));
player.getInterfaceManager().openOverlay(OVERLAY); player.getInterfaceManager().openOverlay(OVERLAY);
player.getConfigManager().set(0, 1); setVarp(player, 0, 1);
if (player.getConfigManager().get(452) == 0) { if (getVarp(player, 452) == 0) {
shuffleCatacombs(player); shuffleCatacombs(player);
} }
sendConfiguration(player); sendConfiguration(player);
@@ -212,7 +212,7 @@ public final class BarrowsActivityPlugin extends ActivityPlugin {
public static void shuffleCatacombs(Player player) { public static void shuffleCatacombs(Player player) {
int value = TUNNEL_CONFIGS[RandomFunction.random(TUNNEL_CONFIGS.length)]; int value = TUNNEL_CONFIGS[RandomFunction.random(TUNNEL_CONFIGS.length)];
value |= 1 << (6 + RandomFunction.random(4)); value |= 1 << (6 + RandomFunction.random(4));
player.getConfigManager().set(452, value); setVarp(player, 452, value);
} }
@Override @Override
@@ -330,7 +330,7 @@ public final class BarrowsActivityPlugin extends ActivityPlugin {
if (player.getAttribute("barrow:opened_chest", false)) { if (player.getAttribute("barrow:opened_chest", false)) {
config |= 1 << 16; config |= 1 << 16;
} }
player.getConfigManager().set(453, config); setVarp(player, 453, config);
} }
@Override @Override
@@ -7,6 +7,8 @@ import core.game.world.map.Location;
import core.plugin.PluginManifest; import core.plugin.PluginManifest;
import core.plugin.PluginType; import core.plugin.PluginType;
import static core.api.ContentAPIKt.*;
/** /**
* The tunnel entrance dialogue handling plugin. * The tunnel entrance dialogue handling plugin.
* @author Emperor * @author Emperor
@@ -57,7 +59,7 @@ public final class TunnelEntranceDialogue extends DialoguePlugin {
case 1: case 1:
int offsetX = 0; int offsetX = 0;
int offsetY = 0; int offsetY = 0;
int configValue = player.getConfigManager().get(452); int configValue = getVarp(player, 452);
if ((configValue & (1 << 7)) != 0) { if ((configValue & (1 << 7)) != 0) {
offsetX = 34; offsetX = 34;
offsetY = 34; offsetY = 34;
@@ -145,7 +145,7 @@ object BlastFurnace {
var oreAmount = player.blastOre.itemCount() var oreAmount = player.blastOre.itemCount()
var totalAmount = barsAmount + oreAmount var totalAmount = barsAmount + oreAmount
if (barsHot) { if (barsHot) {
player.varpManager.get(543).setVarbit(8, 2).send(player) setVarbit(player, 936, 2)
}else if (makeBars && playerOre.isNotEmpty() && barsAmountFree > 0 && totalAmount < 56 && player.getAttribute("OreInPot",false) == true) { }else if (makeBars && playerOre.isNotEmpty() && barsAmountFree > 0 && totalAmount < 56 && player.getAttribute("OreInPot",false) == true) {
playerOre.forEach { oreID -> playerOre.forEach { oreID ->
playerCoal = player.blastCoal.getAmount(Items.COAL_453) playerCoal = player.blastCoal.getAmount(Items.COAL_453)
@@ -178,7 +178,7 @@ object BlastFurnace {
} }
} }
if(removed) { if(removed) {
player.varpManager.get(543).setVarbit(8, 1).send(player) setVarbit(player, 936, 1)
barsHot = true barsHot = true
player.blastBars.add(bar.product) player.blastBars.add(bar.product)
var experience = bar.experience var experience = bar.experience
@@ -207,11 +207,11 @@ object BlastFurnace {
} }
} }
if (coalToAdd < 0){ if (coalToAdd < 0){
player.varpManager.get(543).setVarbit(12, 0).send(player) setVarbit(player, 940, 0)
} else player.varpManager.get(543).setVarbit(12, coalToAdd).send(player) } else setVarbit(player, 940, coalToAdd)
} }
else if(playerOre.isEmpty()) { else if(playerOre.isEmpty()) {
player.varpManager.get(543).setVarbit(12,0).send(player) setVarbit(player, 940, 0)
} }
if(playerOre.isEmpty() && player.getAttribute("OreInPot",false)){ if(playerOre.isEmpty() && player.getAttribute("OreInPot",false)){
player.removeAttribute("OreInPot") player.removeAttribute("OreInPot")
@@ -306,56 +306,4 @@ object BlastFurnace {
replaceScenery(cogs2!!, 9104, -1) replaceScenery(cogs2!!, 9104, -1)
} }
} }
/**Hi kids!
* Do you like Varbits?
* Wanna see me stick Nine Binary Bytes, through each one of my eyelids?
* Wanna look at how many bars you have left inside the furnace???
fun interfaceManager() {
var playerBars = listOf<Item>()
var bronzeBit = 1
var ironBit = 1
var steelBit = 1
var mithrilBit = 1
var adamantiteBit = 1
var runiteBit = 1
var silverBit = 1
var goldBit = 1
var barTotal = 0
blastFurnacePlayerList.forEach { player ->
playerBars = player.blastBars.toArray().filterNotNull()
var barAmount = player.blastBars.toArray().filterNotNull().count()
var updateInterface = true
if (playerBars.isNotEmpty() && updateInterface) {
playerBars.forEach { barItem ->
when (barItem.id) {
Items.BRONZE_BAR_2349 -> player.varpManager.get(545).setVarbit(0, bronzeBit++).send(player)
Items.IRON_BAR_2351 -> player.varpManager.get(545).setVarbit(8, ironBit++).send(player)
Items.STEEL_BAR_2353 -> player.varpManager.get(545).setVarbit(16, steelBit++).send(player)
Items.MITHRIL_BAR_2359 -> player.varpManager.get(545).setVarbit(24, mithrilBit++).send(player)
Items.ADAMANTITE_BAR_2361 -> player.varpManager.get(546).setVarbit(0, adamantiteBit++).send(player)
Items.RUNITE_BAR_2363 -> player.varpManager.get(546).setVarbit(8, runiteBit++).send(player)
Items.SILVER_BAR_2355 -> player.varpManager.get(546).setVarbit(24, silverBit++).send(player)
Items.GOLD_BAR_2357 -> player.varpManager.get(546).setVarbit(16, goldBit++).send(player)
}
}
}
if (barTotal > barAmount) {
playerBars.forEach { barItem ->
when (barItem.id) {
Items.BRONZE_BAR_2349 -> player.varpManager.get(545).setVarbit(0, bronzeBit--).send(player)
Items.IRON_BAR_2351 -> player.varpManager.get(545).setVarbit(8, ironBit--).send(player)
Items.STEEL_BAR_2353 -> player.varpManager.get(545).setVarbit(16, steelBit--).send(player)
Items.MITHRIL_BAR_2359 -> player.varpManager.get(545).setVarbit(24, mithrilBit--).send(player)
Items.ADAMANTITE_BAR_2361 -> player.varpManager.get(546).setVarbit(0, adamantiteBit--).send(player)
Items.RUNITE_BAR_2363 -> player.varpManager.get(546).setVarbit(8, runiteBit--).send(player)
Items.SILVER_BAR_2355 -> player.varpManager.get(546).setVarbit(24, silverBit--).send(player)
Items.GOLD_BAR_2357 -> player.varpManager.get(546).setVarbit(16, goldBit--).send(player)
}
}
}
}
}
*/
} }
@@ -1,7 +1,6 @@
package content.minigame.blastfurnace package content.minigame.blastfurnace
import core.api.addItem import core.api.*
import core.api.freeSlots
import core.game.interaction.InterfaceListener import core.game.interaction.InterfaceListener
import core.game.node.item.Item import core.game.node.item.Item
import org.rs09.consts.Components import org.rs09.consts.Components
@@ -28,19 +27,32 @@ class BlastFurnaceInterfaceListener : InterfaceListener {
var silverBit = 1 var silverBit = 1
var goldBit = 1 var goldBit = 1
var barTotal = 0 var barTotal = 0
val barCounts = HashMap<Int, Int>()
if (playerBars.isEmpty()) { if (playerBars.isEmpty()) {
return@onOpen true return@onOpen true
} else { } else {
playerBars.forEach { barItem -> playerBars.forEach { barItem ->
when (barItem.id) { when (barItem.id) {
Items.BRONZE_BAR_2349 -> player.varpManager.get(545).setVarbit(0, bronzeBit++).send(player) Items.BRONZE_BAR_2349 -> barCounts[barItem.id] = bronzeBit++
Items.IRON_BAR_2351 -> player.varpManager.get(545).setVarbit(8, ironBit++).send(player) Items.IRON_BAR_2351 -> barCounts[barItem.id] = ironBit++
Items.STEEL_BAR_2353 -> player.varpManager.get(545).setVarbit(16, steelBit++).send(player) Items.STEEL_BAR_2353 -> barCounts[barItem.id] = steelBit++
Items.MITHRIL_BAR_2359 -> player.varpManager.get(545).setVarbit(24, mithrilBit++).send(player) Items.MITHRIL_BAR_2359 -> barCounts[barItem.id] = mithrilBit++
Items.ADAMANTITE_BAR_2361 -> player.varpManager.get(546).setVarbit(0, adamantiteBit++).send(player) Items.ADAMANTITE_BAR_2361 -> barCounts[barItem.id] = adamantiteBit++
Items.RUNITE_BAR_2363 -> player.varpManager.get(546).setVarbit(8, runiteBit++).send(player) Items.RUNITE_BAR_2363 -> barCounts[barItem.id] = runiteBit++
Items.SILVER_BAR_2355 -> player.varpManager.get(546).setVarbit(24, silverBit++).send(player) Items.SILVER_BAR_2355 -> barCounts[barItem.id] = silverBit++
Items.GOLD_BAR_2357 -> player.varpManager.get(546).setVarbit(16, goldBit++).send(player) Items.GOLD_BAR_2357 -> barCounts[barItem.id] = goldBit++
}
}
for ((id, amount) in barCounts) {
when (id) {
Items.BRONZE_BAR_2349 -> setVarbit(player, 941, amount)
Items.IRON_BAR_2351 -> setVarbit(player, 942, amount)
Items.STEEL_BAR_2353 -> setVarbit(player, 943, amount)
Items.MITHRIL_BAR_2359 -> setVarbit(player, 944, amount)
Items.ADAMANTITE_BAR_2361 -> setVarbit(player, 945, amount)
Items.RUNITE_BAR_2363 -> setVarbit(player, 946, amount)
Items.SILVER_BAR_2355 -> setVarbit(player, 948, amount)
Items.GOLD_BAR_2357 -> setVarbit(player, 947, amount)
} }
} }
return@onOpen true return@onOpen true
@@ -50,7 +62,7 @@ class BlastFurnaceInterfaceListener : InterfaceListener {
on(Components.BLAST_FURNACE_BAR_STOCK_28){ player, _, _, buttonID, _, _ -> on(Components.BLAST_FURNACE_BAR_STOCK_28){ player, _, _, buttonID, _, _ ->
val bar = BFBars.forId(buttonID) ?: return@on false val bar = BFBars.forId(buttonID) ?: return@on false
val isAll = buttonID == bar.allButtonId val isAll = buttonID == bar.allButtonId
val playerAmt = player.varpManager.get(bar.varpIndex).getVarbitValue(bar.offset) ?: 0 val playerAmt = getVarbit(player, bar.varbit)
if(playerAmt == 0) return@on true if(playerAmt == 0) return@on true
var amtToWithdraw = if(isAll) playerAmt else 1 var amtToWithdraw = if(isAll) playerAmt else 1
@@ -70,28 +82,28 @@ class BlastFurnaceInterfaceListener : InterfaceListener {
BFBars.GOLD -> Items.GOLD_BAR_2357 BFBars.GOLD -> Items.GOLD_BAR_2357
} }
player.varpManager.get(bar.varpIndex).setVarbit(bar.offset, playerAmt - amtToWithdraw).send(player) setVarbit(player, bar.varbit, playerAmt - amtToWithdraw)
while(amtToWithdraw > 0){ while(amtToWithdraw > 0){
if(addItem(player, barItemId, 1) && player.blastBars.remove(Item(barItemId))) { if(addItem(player, barItemId, 1) && player.blastBars.remove(Item(barItemId))) {
amtToWithdraw-- amtToWithdraw--
} else break } else break
} }
if(player.blastBars.isEmpty) player.varpManager.get(543).clear().send(player) if(player.blastBars.isEmpty)
setVarp(player, 543, 0)
return@on true return@on true
} }
} }
internal enum class BFBars(val buttonId: Int, val varpIndex: Int, val offset: Int, val allButtonId: Int = buttonId + 2){ internal enum class BFBars(val buttonId: Int, val varbit: Int, val allButtonId: Int = buttonId + 2){
BRONZE(43, 545, 0, 44), BRONZE(43, 941, 44),
IRON(40, 545, 8, 41), IRON(40, 942, 41),
STEEL(36, 545, 16), STEEL(36, 943),
MITHRIL(33, 545, 24), MITHRIL(33, 944),
ADAMANT(30, 546, 0), ADAMANT(30, 945),
RUNITE(27, 546, 8), RUNITE(27, 946),
SILVER(24, 546, 24), SILVER(24, 948),
GOLD(21, 546, 16); GOLD(21, 947);
companion object { companion object {
private val idMap = values().associateBy { it.buttonId } private val idMap = values().associateBy { it.buttonId }
@@ -102,4 +114,4 @@ class BlastFurnaceInterfaceListener : InterfaceListener {
} }
} }
} }
@@ -297,7 +297,7 @@ class BlastFurnaceListeners : InteractionListener {
/**This handles taking bars from the dispenser*/ /**This handles taking bars from the dispenser*/
on(dispenser,SCENERY,"search", "take"){ player, _ -> on(dispenser,SCENERY,"search", "take"){ player, _ ->
if(player.varpManager.get(543).getVarbitValue(8) == 0 || player.varpManager.get(543).getVarbitValue(8) == 3) { if (getVarbit(player, 936) == 0 || getVarbit(player, 936) == 3) {
player.interfaceManager.openComponent(28) player.interfaceManager.openComponent(28)
} }
return@on true return@on true
@@ -306,20 +306,20 @@ class BlastFurnaceListeners : InteractionListener {
/**Handles using a bucket of water on the bar dispenser*/ /**Handles using a bucket of water on the bar dispenser*/
onUseWith(SCENERY,Items.BUCKET_OF_WATER_1929,*dispenser){ player, _, _ -> onUseWith(SCENERY,Items.BUCKET_OF_WATER_1929,*dispenser){ player, _, _ ->
when { when (getVarbit(player, 936)) {
player.varpManager.get(543).getVarbitValue(8) == 2 -> { 2 -> {
removeItem(player,Items.BUCKET_OF_WATER_1929,Container.INVENTORY) removeItem(player,Items.BUCKET_OF_WATER_1929,Container.INVENTORY)
addItem(player,Items.BUCKET_1925) addItem(player,Items.BUCKET_1925)
BlastFurnace.barsHot = false BlastFurnace.barsHot = false
player.varpManager.get(543).setVarbit(8,3).send(player) setVarbit(player, 936, 3)
} }
player.varpManager.get(543).getVarbitValue(8) == 0 -> { 0 -> {
sendDialogue(player,"There's nothing to cool off!") sendDialogue(player,"There's nothing to cool off!")
} }
player.varpManager.get(543).getVarbitValue(8) == 1 -> { 1 -> {
sendDialogue(player,"I should wait until the machine is finished") sendDialogue(player,"I should wait until the machine is finished")
} }
player.varpManager.get(543).getVarbitValue(8) == 3 -> { 3 -> {
sendDialogue(player,"These bars have already cooled off!") sendDialogue(player,"These bars have already cooled off!")
} }
} }
@@ -1,5 +1,6 @@
package content.minigame.bountyhunter; package content.minigame.bountyhunter;
import core.api.*;
import core.game.component.Component; import core.game.component.Component;
import core.game.component.ComponentDefinition; import core.game.component.ComponentDefinition;
import core.game.component.ComponentPlugin; import core.game.component.ComponentPlugin;
@@ -33,6 +34,8 @@ import core.tools.RandomFunction;
import java.util.*; import java.util.*;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the Bounty hunter activity. * Handles the Bounty hunter activity.
* @author Emperor * @author Emperor
@@ -317,7 +320,7 @@ public final class BountyHunterActivity extends ActivityPlugin {
} else if (interfaceId == 271 && buttonId == 25) { } else if (interfaceId == 271 && buttonId == 25) {
if (player.getAttribute("exit_penalty", 0) > GameWorld.getTicks()) { if (player.getAttribute("exit_penalty", 0) > GameWorld.getTicks()) {
player.getPacketDispatch().sendMessage("You can't use the protect item prayer until your penalty has passed."); player.getPacketDispatch().sendMessage("You can't use the protect item prayer until your penalty has passed.");
player.getConfigManager().send(PrayerType.PROTECT_ITEMS.getConfig(), 0); setVarp(player, PrayerType.PROTECT_ITEMS.getConfig(), 0);
return true; return true;
} }
} }
@@ -1,4 +1,4 @@
import core.api.setVarbit import core.api.*
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
/** /**
@@ -8,7 +8,7 @@ import core.game.node.entity.player.Player
object CastleWarsOverlay { object CastleWarsOverlay {
@JvmStatic @JvmStatic
fun sendLobbyUpdate(player: Player, bothTeamsHavePlayers: Boolean, gameStartMinutes: Int) { fun sendLobbyUpdate(player: Player, bothTeamsHavePlayers: Boolean, gameStartMinutes: Int) {
player.varpManager.get(380).setVarbit(0, if (bothTeamsHavePlayers) gameStartMinutes else 0).send(player) setVarp(player, 380, if (bothTeamsHavePlayers) gameStartMinutes else 0)
} }
@JvmStatic @JvmStatic
@@ -15,7 +15,6 @@ import core.game.node.entity.Entity;
import core.game.node.entity.combat.CombatStyle; import core.game.node.entity.combat.CombatStyle;
import core.game.node.entity.impl.PulseManager; import core.game.node.entity.impl.PulseManager;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.ConfigurationManager.Configuration;
import core.game.node.scenery.Scenery; import core.game.node.scenery.Scenery;
import core.game.node.scenery.SceneryBuilder; import core.game.node.scenery.SceneryBuilder;
import core.game.system.communication.ClanEntry; import core.game.system.communication.ClanEntry;
@@ -34,6 +33,8 @@ import core.game.world.update.flag.context.Animation;
import core.plugin.Plugin; import core.plugin.Plugin;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the clan wars activity. * Handles the clan wars activity.
* @author Emperor * @author Emperor
@@ -239,7 +240,7 @@ public final class ClanWarsActivityPlugin extends ActivityPlugin {
if (pulse.getTicksPassed() < 200) { if (pulse.getTicksPassed() < 200) {
value |= (200 - pulse.getTicksPassed()) << 23; value |= (200 - pulse.getTicksPassed()) << 23;
} }
p.getConfigManager().set(Configuration.CLAN_WAR_DATA, value); setVarp(p, 1147, value);
p.getPacketDispatch().sendString(name, 265, 2); p.getPacketDispatch().sendString(name, 265, 2);
} }
@@ -4,6 +4,7 @@ import core.game.interaction.OptionHandler;
import core.game.node.Node; import core.game.node.Node;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.plugin.Plugin; import core.plugin.Plugin;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the challenge option for dueling. * Handles the challenge option for dueling.
@@ -32,7 +33,7 @@ public class ChallengeOptionPlugin extends OptionHandler {
player.getInterfaceManager().open(DuelArenaActivity.DUEL_TYPE_SELECT); player.getInterfaceManager().open(DuelArenaActivity.DUEL_TYPE_SELECT);
player.setAttribute("duel:staked", false); player.setAttribute("duel:staked", false);
player.setAttribute("duel:partner", other); player.setAttribute("duel:partner", other);
player.getConfigManager().set(283, 1 << 26); setVarp(player, 283, 1 << 26);
return true; return true;
} }
@@ -19,6 +19,8 @@ import core.plugin.Initializable;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the Duel Arena activity. * Handles the Duel Arena activity.
* @author Emperor * @author Emperor
@@ -76,7 +78,7 @@ public final class DuelArenaActivity extends ActivityPlugin {
Player player = (Player) e; Player player = (Player) e;
player.getInterfaceManager().openOverlay(OVERLAY); player.getInterfaceManager().openOverlay(OVERLAY);
player.getInteraction().set(CHALLENGE_OPTION); player.getInteraction().set(CHALLENGE_OPTION);
player.getConfigManager().set(286, 0); setVarp(player, 286, 0);
} }
return super.enter(e); return super.enter(e);
} }
@@ -7,6 +7,8 @@ import core.game.node.entity.player.Player;
import core.game.world.GameWorld; import core.game.world.GameWorld;
import core.plugin.Plugin; import core.plugin.Plugin;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the duel arena components. * Handles the duel arena components.
* @author Vexia * @author Vexia
@@ -60,7 +62,7 @@ public class DuelComponentPlugin extends ComponentPlugin {
return false; return false;
} }
player.setAttribute("duel:staked", staked); player.setAttribute("duel:staked", staked);
player.getConfigManager().set(283, (staked ? 2 : 1) << 26); setVarp(player, 283, (staked ? 2 : 1) << 26);
break; break;
} }
return true; return true;
@@ -230,7 +230,7 @@ public final class DuelSession extends ComponentPlugin {
* @param player The player. * @param player The player.
*/ */
private void openRules(Player player, Player opponent) { private void openRules(Player player, Player opponent) {
player.getConfigManager().set(286, 0); setVarp(player, 286, 0);
if (staked) { if (staked) {
StakeContainer container = new StakeContainer(player, this); StakeContainer container = new StakeContainer(player, this);
if (player == this.player) { if (player == this.player) {
@@ -249,7 +249,7 @@ public final class DuelSession extends ComponentPlugin {
player.getPacketDispatch().sendString(Integer.toString(opponent.getProperties().getCurrentCombatLevel()), 637, 18); player.getPacketDispatch().sendString(Integer.toString(opponent.getProperties().getCurrentCombatLevel()), 637, 18);
player.getPacketDispatch().sendString("", 637, 45); player.getPacketDispatch().sendString("", 637, 45);
} }
player.getConfigManager().set(286, 0); setVarp(player, 286, 0);
} }
/** /**
@@ -495,8 +495,8 @@ public final class DuelSession extends ComponentPlugin {
value |= 1 << rules[i].getConfigIndex(); value |= 1 << rules[i].getConfigIndex();
} }
} }
player.getConfigManager().set(286, value); setVarp(player, 286, value);
other.getConfigManager().set(286, value); setVarp(other, 286, value);
} }
/** /**
@@ -1024,4 +1024,4 @@ public final class DuelSession extends ComponentPlugin {
public void setFightState(int fightState) { public void setFightState(int fightState) {
this.fightState = fightState; this.fightState = fightState;
} }
} }
@@ -1,6 +1,7 @@
package content.minigame.fishingtrawler package content.minigame.fishingtrawler
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.api.*
private const val configIndex = 391 private const val configIndex = 391
private const val interfaceID = 366 private const val interfaceID = 366
@@ -17,10 +18,10 @@ private const val timeChild = 30
object FishingTrawlerOverlay { object FishingTrawlerOverlay {
@JvmStatic @JvmStatic
fun sendUpdate(player: Player, waterPercent: Int, NetRipped: Boolean, fishCaught: Int, timeLeft: Int){ fun sendUpdate(player: Player, waterPercent: Int, NetRipped: Boolean, fishCaught: Int, timeLeft: Int){
player.configManager.set(configIndex,waterPercent) setVarp(player, configIndex, waterPercent)
player.packetDispatch.sendInterfaceConfig(interfaceID,if(NetRipped) netRippedChild else netOkayChild, false) player.packetDispatch.sendInterfaceConfig(interfaceID,if(NetRipped) netRippedChild else netOkayChild, false)
player.packetDispatch.sendInterfaceConfig(interfaceID,if(NetRipped) netOkayChild else netRippedChild, true) player.packetDispatch.sendInterfaceConfig(interfaceID,if(NetRipped) netOkayChild else netRippedChild, true)
player.packetDispatch.sendString("${if(fishCaught > 0) fishCaught else "Nothing"}", interfaceID, fishChild) player.packetDispatch.sendString("${if(fishCaught > 0) fishCaught else "Nothing"}", interfaceID, fishChild)
player.packetDispatch.sendString("$timeLeft Minutes", interfaceID, timeChild) player.packetDispatch.sendString("$timeLeft Minutes", interfaceID, timeChild)
} }
} }
@@ -6,7 +6,6 @@ import core.game.component.Component;
import core.game.dialogue.FacialExpression; import core.game.dialogue.FacialExpression;
import core.game.node.entity.npc.NPC; import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.ConfigurationManager.Configuration;
import core.game.node.scenery.Scenery; import core.game.node.scenery.Scenery;
import core.game.world.map.Location; import core.game.world.map.Location;
import core.game.world.map.Point; import core.game.world.map.Point;
@@ -15,6 +14,7 @@ import core.game.world.map.build.DynamicRegion;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import static content.minigame.pestcontrol.PestControlActivityPlugin.MAX_TEAM_SIZE; import static content.minigame.pestcontrol.PestControlActivityPlugin.MAX_TEAM_SIZE;
import static core.api.ContentAPIKt.*;
/** /**
* Represents a pest control session. * Represents a pest control session.
@@ -166,7 +166,7 @@ public final class PestControlSession {
public void sendConfig(int value) { public void sendConfig(int value) {
for (Player p : region.getPlanes()[0].getPlayers()) { for (Player p : region.getPlanes()[0].getPlayers()) {
if (p.isActive()) { if (p.isActive()) {
p.getConfigManager().set(Configuration.PC_PORTALS, value); setVarp(p, 719, value);
} }
} }
} }
@@ -264,7 +264,7 @@ public final class PestControlSession {
Random r = RandomFunction.RANDOM; Random r = RandomFunction.RANDOM;
Location l = region.getBaseLocation(); Location l = region.getBaseLocation();
p.getProperties().setTeleportLocation(l.transform(32 + r.nextInt(4), 49 + r.nextInt(6), 0)); p.getProperties().setTeleportLocation(l.transform(32 + r.nextInt(4), 49 + r.nextInt(6), 0));
p.getConfigManager().set(Configuration.PC_PORTALS, 0); setVarp(p, 1147, 0);
p.getDialogueInterpreter().sendDialogues(3781, FacialExpression.FURIOUS, "You must defend the Void Knight while the portals are", "unsummoned. The ritual takes twenty minutes though,", "so you can help out by destroying them yourselves!", "Now GO GO GO!"); p.getDialogueInterpreter().sendDialogues(3781, FacialExpression.FURIOUS, "You must defend the Void Knight while the portals are", "unsummoned. The ritual takes twenty minutes though,", "so you can help out by destroying them yourselves!", "Now GO GO GO!");
} }
@@ -386,4 +386,4 @@ public final class PestControlSession {
return barricades; return barricades;
} }
} }
@@ -13,6 +13,8 @@ import core.plugin.ClassScanner;
import content.minigame.puropuro.ElnockInquisitorDialogue.ElnockExchangeInterfaceHandler.ElnockExchange; import content.minigame.puropuro.ElnockInquisitorDialogue.ElnockExchangeInterfaceHandler.ElnockExchange;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the elnock inquisitor dialogue. * Handles the elnock inquisitor dialogue.
* @author Vexia * @author Vexia
@@ -225,7 +227,7 @@ public final class ElnockInquisitorDialogue extends DialoguePlugin {
public boolean handle(Player player, Component component, int opcode, int button, int slot, int itemId) { public boolean handle(Player player, Component component, int opcode, int button, int slot, int itemId) {
ElnockExchange exchange = player.getAttribute("exchange", null); ElnockExchange exchange = player.getAttribute("exchange", null);
if (button == 34) { if (button == 34) {
player.getConfigManager().set(1018, 0); setVarp(player, 1018, 0);
if (exchange == null) { if (exchange == null) {
player.sendMessage("Making a selection before confirming."); player.sendMessage("Making a selection before confirming.");
return true; return true;
@@ -254,7 +256,7 @@ public final class ElnockInquisitorDialogue extends DialoguePlugin {
exchange = ElnockExchange.forButton(button); exchange = ElnockExchange.forButton(button);
if (exchange != null) { if (exchange != null) {
player.setAttribute("exchange", exchange); player.setAttribute("exchange", exchange);
player.getConfigManager().set(1018, exchange.getConfigValue()); setVarp(player, 1018, exchange.getConfigValue());
} }
return true; return true;
} }
@@ -144,13 +144,9 @@ object PlunderUtils {
fun resetObjectVarbits(player: Player) fun resetObjectVarbits(player: Player)
{ {
var varp = player.varpManager.get(821) setVarp(player, 821, 0)
varp.clear() setVarp(player, 820, 0)
varp.send(player) PlunderData.doorVarbits.forEach { setVarbit(player, it, 0) }
varp = player.varpManager.get(820)
varp.clear()
varp.send(player)
PlunderData.doorVarbits.forEach { player.varpManager.setVarbit(it, 0) }
} }
fun openOverlay(player: Player) fun openOverlay(player: Player)
@@ -161,14 +157,14 @@ object PlunderUtils {
fun updateOverlay(player: Player) fun updateOverlay(player: Player)
{ {
player.varpManager.setVarbit(2375, 500 - (PlunderData.timeLeft[player] ?: 0)) setVarbit(player, 2375, 500 - (PlunderData.timeLeft[player] ?: 0))
player.varpManager.setVarbit(2376, 11 + (getRoom(player)!!.room * 10)) setVarbit(player, 2376, 11 + (getRoom(player)!!.room * 10))
player.varpManager.setVarbit(2377, getRoom(player)!!.room) setVarbit(player, 2377, getRoom(player)!!.room)
} }
fun resetOverlay(player: Player) fun resetOverlay(player: Player)
{ {
player.varpManager.setVarbit(2375, 0) setVarbit(player, 2375, 0)
player.packetDispatch.resetInterface(Components.NTK_OVERLAY_428) player.packetDispatch.resetInterface(Components.NTK_OVERLAY_428)
player.interfaceManager.closeOverlay() player.interfaceManager.closeOverlay()
} }
@@ -304,4 +300,4 @@ object PlunderUtils {
val room = getRoom(player)!!.room val room = getRoom(player)!!.room
return RandomFunction.random(level) > (room * if(charmed) 2 else 4) return RandomFunction.random(level) > (room * if(charmed) 2 else 4)
} }
} }
@@ -124,7 +124,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener
sendMessage(player, "You successfully loot the urn.") sendMessage(player, "You successfully loot the urn.")
rewardXP(player, Skills.THIEVING, PlunderUtils.getUrnXp(player, false)) rewardXP(player, Skills.THIEVING, PlunderUtils.getUrnXp(player, false))
addItemOrDrop(player, PlunderUtils.rollArtifact(player, 1)) addItemOrDrop(player, PlunderUtils.rollArtifact(player, 1))
player.varpManager.setVarbit(node.asScenery().definition.varbitID, 1) setVarbit(player, node.asScenery().definition.varbitID, 1)
} }
} }
return@on true return@on true
@@ -137,7 +137,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener
lock(player, 1) lock(player, 1)
runTask(player, 1){ runTask(player, 1){
animate(player, URN_BIT) animate(player, URN_BIT)
player.varpManager.setVarbit(urn.definition.varbitID, 2) setVarbit(player, urn.definition.varbitID, 2)
animateScenery(urn, SNAKE_URN_ANIM) animateScenery(urn, SNAKE_URN_ANIM)
} }
return@on true return@on true
@@ -153,7 +153,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener
animate(player, CHARM_ANIM) animate(player, CHARM_ANIM)
runTask(player, 1) runTask(player, 1)
{ {
player.varpManager.setVarbit(node.asScenery().definition.varbitID, 3) setVarbit(player, node.asScenery().definition.varbitID, 3)
sendMessage(player, "You charm the snake with your music.") sendMessage(player, "You charm the snake with your music.")
} }
return@on true return@on true
@@ -176,7 +176,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener
sendMessage(player, "You successfully loot the urn.") sendMessage(player, "You successfully loot the urn.")
addItemOrDrop(player, PlunderUtils.rollArtifact(player, 1)) addItemOrDrop(player, PlunderUtils.rollArtifact(player, 1))
rewardXP(player, Skills.THIEVING, PlunderUtils.getUrnXp(player, false) * 0.66) rewardXP(player, Skills.THIEVING, PlunderUtils.getUrnXp(player, false) * 0.66)
player.varpManager.setVarbit(node.asScenery().definition.varbitID, 1) setVarbit(player, node.asScenery().definition.varbitID, 1)
} }
} }
return@on true return@on true
@@ -199,7 +199,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener
return false return false
animate(player, PUSH_LID_FINISH) animate(player, PUSH_LID_FINISH)
runTask(player, 3){ runTask(player, 3){
player.varpManager.setVarbit(node.asScenery().definition.varbitID, 1) setVarbit(player, node.asScenery().definition.varbitID, 1)
rewardXP(player, Skills.STRENGTH, PlunderUtils.getSarcophagusXp(player)) rewardXP(player, Skills.STRENGTH, PlunderUtils.getSarcophagusXp(player))
if(RandomFunction.roll(25)) if(RandomFunction.roll(25))
{ {
@@ -236,7 +236,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener
if(!PlunderUtils.rollSceptre(player)) if(!PlunderUtils.rollSceptre(player))
addItemOrDrop(player, PlunderUtils.rollArtifact(player, 3)) addItemOrDrop(player, PlunderUtils.rollArtifact(player, 3))
} }
player.varpManager.setVarbit(node.asScenery().definition.varbitID, 1) setVarbit(player, node.asScenery().definition.varbitID, 1)
} }
return@on true return@on true
} }
@@ -274,7 +274,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener
PlunderUtils.resetObjectVarbits(player) PlunderUtils.resetObjectVarbits(player)
} else { } else {
sendMessage(player, "The door leads to a dead end.") sendMessage(player, "The door leads to a dead end.")
player.varpManager.setVarbit(varbitId, 1) setVarbit(player, varbitId, 1)
} }
} }
else else
@@ -375,4 +375,4 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener
PlunderUtils.openOverlay(player) PlunderUtils.openOverlay(player)
} }
} }
} }
@@ -362,7 +362,7 @@ class Vinesweeper : InteractionListener, InterfaceListener, MapArea {
fun sendUpdatedPoints(player: Player) { fun sendUpdatedPoints(player: Player) {
val points = player.getAttribute("vinesweeper:points", 0); val points = player.getAttribute("vinesweeper:points", 0);
player.varpManager.get(1195).setVarbit(6, points).send(player) setVarbit(player, 4449, points)
} }
var SEED_LOCS: HashSet<Location> = HashSet() var SEED_LOCS: HashSet<Location> = HashSet()
@@ -26,6 +26,8 @@ import core.plugin.Plugin;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the Barrel room. * Handles the Barrel room.
* @author Emperor * @author Emperor
@@ -172,7 +174,7 @@ public final class BarrelRoom extends MapZone implements Plugin<Object> {
player.getEquipment().replace(null, EquipmentContainer.SLOT_HAT); player.getEquipment().replace(null, EquipmentContainer.SLOT_HAT);
player.getAppearance().setAnimations(); player.getAppearance().setAnimations();
player.getAppearance().sync(); player.getAppearance().sync();
player.getConfigManager().set(793, 0); setVarp(player, 793, 0);
} }
} }
@@ -34,6 +34,8 @@ import core.plugin.ClassScanner;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import static core.api.ContentAPIKt.setVarp;
/** /**
* The catapult room. * The catapult room.
* @author Emperor * @author Emperor
@@ -207,7 +209,7 @@ public final class CatapultRoom extends MapZone implements Plugin<Object> {
if (button >= 9 && button <= 12) { if (button >= 9 && button <= 12) {
CatapultAttack attack = CatapultAttack.values()[button - 9]; CatapultAttack attack = CatapultAttack.values()[button - 9];
player.setAttribute("catapult_def", attack); player.setAttribute("catapult_def", attack);
player.getConfigManager().set(788, (button - 8) % 4); setVarp(player, 788, (button - 8) % 4);
return true; return true;
} }
return false; return false;
@@ -21,6 +21,9 @@ import core.game.world.update.flag.context.Animation;
import core.plugin.Plugin; import core.plugin.Plugin;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import static core.api.ContentAPIKt.*;
/** /**
* Manages the droped party balloons. * Manages the droped party balloons.
* @author Vexia * @author Vexia
@@ -83,7 +86,7 @@ public final class BalloonManager extends OptionHandler {
public boolean pulse() { public boolean pulse() {
int realCount = --countdown - GameWorld.getTicks(); int realCount = --countdown - GameWorld.getTicks();
for (ChestViewer viewer : PartyRoomPlugin.getViewers().values()) { for (ChestViewer viewer : PartyRoomPlugin.getViewers().values()) {
viewer.getPlayer().getConfigManager().set(1135, realCount); setVarp(viewer.getPlayer(), 1135, realCount);
} }
if (--realCount - GameWorld.getTicks() <= 0) { if (--realCount - GameWorld.getTicks() <= 0) {
drop(); drop();
@@ -13,6 +13,9 @@ import core.net.packet.PacketRepository;
import core.net.packet.context.ContainerContext; import core.net.packet.context.ContainerContext;
import core.net.packet.out.ContainerPacket; import core.net.packet.out.ContainerPacket;
import static core.api.ContentAPIKt.*;
/** /**
* A chest viewer. * A chest viewer.
* @author Vexia * @author Vexia
@@ -69,7 +72,7 @@ public final class ChestViewer {
player.getPacketDispatch().sendRunScript(150, "IviiiIsssssssss", INV_OPTIONS); player.getPacketDispatch().sendRunScript(150, "IviiiIsssssssss", INV_OPTIONS);
player.getInterfaceManager().openSingleTab(new Component(648)); player.getInterfaceManager().openSingleTab(new Component(648));
player.getInterfaceManager().open(new Component(647).setCloseEvent(new ChestCloseEvent())); player.getInterfaceManager().open(new Component(647).setCloseEvent(new ChestCloseEvent()));
player.getConfigManager().set(1135, 0); setVarp(player, 1135, 0);
update(0, null); update(0, null);
update(1, null); update(1, null);
return this; return this;
@@ -27,6 +27,9 @@ import core.tools.RandomFunction;
import core.tools.StringUtils; import core.tools.StringUtils;
import core.game.dialogue.FacialExpression; import core.game.dialogue.FacialExpression;
import static core.api.ContentAPIKt.*;
/** /**
* Represents the goblin diplomacy cutscene plugin. * Represents the goblin diplomacy cutscene plugin.
* @author 'Vexia * @author 'Vexia
@@ -364,7 +367,7 @@ public final class GDiplomacyCutscene extends CutscenePlugin {
player.setAttribute("/save:tlt-goblin-emotes",true); player.setAttribute("/save:tlt-goblin-emotes",true);
player.getEmoteManager().unlock(Emotes.GOBLIN_BOW); player.getEmoteManager().unlock(Emotes.GOBLIN_BOW);
player.getEmoteManager().unlock(Emotes.GOBLIN_SALUTE); player.getEmoteManager().unlock(Emotes.GOBLIN_SALUTE);
player.varpManager.get(465).setVarbit(0,7).send(player); setVarbit(player, 532, 7, true);
player.getQuestRepository().getQuest("Lost Tribe").setStage(player,44); player.getQuestRepository().getQuest("Lost Tribe").setStage(player,44);
stage++; stage++;
break; break;
@@ -3,6 +3,8 @@ package content.region.asgarnia.goblinvillage.quest.goblindiplomacy;
import core.game.node.entity.player.Player; import core.game.node.entity.player.Player;
import core.game.node.item.Item; import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
/** /**
* Represents a grub foot. * Represents a grub foot.
* @author Vexia * @author Vexia
@@ -43,7 +45,7 @@ public enum GrubFoot {
* @return the grub foot. * @return the grub foot.
*/ */
public static GrubFoot forConfig(final Player player) { public static GrubFoot forConfig(final Player player) {
int config = player.getConfigManager().get(62); int config = getVarp(player, 62);
for (GrubFoot foot : values()) { for (GrubFoot foot : values()) {
if (foot.getValue() == config) { if (foot.getValue() == config) {
if (foot.ordinal() + 1 >= values().length) { if (foot.ordinal() + 1 >= values().length) {
@@ -60,7 +62,7 @@ public enum GrubFoot {
* @param player the player. * @param player the player.
*/ */
public void setConfig(Player player) { public void setConfig(Player player) {
player.getConfigManager().set(62, value); setVarp(player, 62, value);
} }
/** /**
@@ -75,7 +75,6 @@ public class WitchsPotion extends Quest {
@Override @Override
public void finish(Player player) { public void finish(Player player) {
super.finish(player); super.finish(player);
player.getConfigManager().set(101, player.getQuestRepository().getPoints());
player.getPacketDispatch().sendString("1 Quest Point", 277, 8 + 2); player.getPacketDispatch().sendString("1 Quest Point", 277, 8 + 2);
player.getPacketDispatch().sendString("325 Magic XP", 277, 9 + 2); player.getPacketDispatch().sendString("325 Magic XP", 277, 9 + 2);
player.getSkills().addExperience(Skills.MAGIC, 325); player.getSkills().addExperience(Skills.MAGIC, 325);
@@ -9,6 +9,8 @@ import core.game.node.entity.player.link.quest.Quest;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.game.node.item.Item; import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the PikkupstixDialogue dialogue. * Handles the PikkupstixDialogue dialogue.
* @author Vexia * @author Vexia
@@ -125,7 +127,7 @@ public final class PikkupstixDialogue extends DialoguePlugin {
continue; continue;
} }
if (!player.getInventory().containsItem(i) && !player.getBank().containsItem(i) && player.getAttribute("taken-summoning-supplies") == null) { if (!player.getInventory().containsItem(i) && !player.getBank().containsItem(i) && player.getAttribute("taken-summoning-supplies") == null) {
if (i.getId() == 12528 && player.getConfigManager().get(1178) == (2 << 11)) { if (i.getId() == 12528 && getVarp(player, 1178) == (2 << 11)) {
continue; continue;
} }
player.setAttribute("taken-summoning-supplies", true); player.setAttribute("taken-summoning-supplies", true);
@@ -6,6 +6,9 @@ import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.quest.Quest; import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.Item; import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
/** /**
* Represents the demon slayer quest. * Represents the demon slayer quest.
* @author 'Vexia * @author 'Vexia
@@ -75,7 +78,7 @@ public class WolfWhistle extends Quest {
@Override @Override
public int[] getConfig(Player player, int stage) { public int[] getConfig(Player player, int stage) {
int val = player.getConfigManager().get(1178); int val = getVarp(player, 1178);
boolean open = val >= 4096; boolean open = val >= 4096;
boolean closed = val == 2048; boolean closed = val == 2048;
if (stage == 100) { if (stage == 100) {
@@ -49,7 +49,6 @@ public class WitchsHouse extends Quest {
@Override @Override
public void finish(Player player) { public void finish(Player player) {
super.finish(player); super.finish(player);
player.getConfigManager().set(101, player.getQuestRepository().getPoints());
player.getPacketDispatch().sendString("4 Quest Points", 277, 8 + 2); player.getPacketDispatch().sendString("4 Quest Points", 277, 8 + 2);
player.getPacketDispatch().sendString("6325 Hitpoints XP", 277, 9 + 2); player.getPacketDispatch().sendString("6325 Hitpoints XP", 277, 9 + 2);
player.getSkills().addExperience(Skills.HITPOINTS, 6325); player.getSkills().addExperience(Skills.HITPOINTS, 6325);
@@ -11,6 +11,8 @@ import core.game.world.map.Location;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.plugin.Plugin; import core.plugin.Plugin;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the dying knight dialogue. * Handles the dying knight dialogue.
* @author Emperor * @author Emperor
@@ -64,7 +66,7 @@ public final class GWDKnightDialogue extends DialoguePlugin {
@Override @Override
public boolean open(Object... args) { public boolean open(Object... args) {
npc = (NPC) args[0]; npc = (NPC) args[0];
if ((player.getConfigManager().get(1048) & 16) != 0) { if ((getVarp(player, 1048) & 16) != 0) {
player.getPacketDispatch().sendMessage("The knight has already died."); player.getPacketDispatch().sendMessage("The knight has already died.");
return false; return false;
} }
@@ -91,7 +93,7 @@ public final class GWDKnightDialogue extends DialoguePlugin {
case 3: case 3:
if (player.getInventory().add(SCROLL)) { if (player.getInventory().add(SCROLL)) {
interpreter.sendItemMessage(11734, "The knight hands you a scroll."); interpreter.sendItemMessage(11734, "The knight hands you a scroll.");
player.varpManager.get(1048).setVarbit(4,1).send(player); setVarbit(player, 3936, 1, true);
stage = 5; stage = 5;
} else { } else {
stage = 4; stage = 4;
@@ -17,7 +17,7 @@ import core.game.world.map.RegionManager;
import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Animation;
import core.plugin.Plugin; import core.plugin.Plugin;
import static core.api.ContentAPIKt.hasRequirement; import static core.api.ContentAPIKt.*;
/** /**
* Handles the entrance hole to the godwars dungeon. * Handles the entrance hole to the godwars dungeon.
@@ -44,15 +44,14 @@ public final class GodwarsEntranceHandler extends OptionHandler {
player.getPacketDispatch().sendMessage("You don't have a rope to tie around the pillar."); player.getPacketDispatch().sendMessage("You don't have a rope to tie around the pillar.");
return true; return true;
} }
player.varpManager.get(1048).setVarbit(0,1).send(player); setVarbit(player, 3932, 1, true);
player.varpManager.flagSave(1048, false);
return true; return true;
case 26341: case 26341:
if (player.getSkills().getStaticLevel(Skills.AGILITY) < 15) { if (player.getSkills().getStaticLevel(Skills.AGILITY) < 15) {
player.getPacketDispatch().sendMessage("You need an Agility level of 15 to enter this."); player.getPacketDispatch().sendMessage("You need an Agility level of 15 to enter this.");
return true; return true;
} }
if (player.varpManager.get(1048).getVarbit(4) == 0) { if (getVarbit(player, 3936) == 0) {
player.getDialogueInterpreter().sendDialogues(6201, FacialExpression.HALF_GUILTY, "Cough... Hey, over here."); player.getDialogueInterpreter().sendDialogues(6201, FacialExpression.HALF_GUILTY, "Cough... Hey, over here.");
return true; return true;
} }
@@ -35,6 +35,7 @@ import core.plugin.Plugin;
import core.tools.StringUtils; import core.tools.StringUtils;
import core.game.node.entity.skill.Skills; import core.game.node.entity.skill.Skills;
import static core.api.ContentAPIKt.*;
import static core.api.ContentAPIKt.log; import static core.api.ContentAPIKt.log;
/** /**
@@ -89,7 +90,7 @@ public final class GodwarsMapzone extends MapZone implements Plugin<Object> {
* @param setting The setting. * @param setting The setting.
*/ */
public void setRopeSetting(Player player, int setting) { public void setRopeSetting(Player player, int setting) {
player.varpManager.get(1048).setVarbit(setting,1).send(player); setVarbit(player, setting == 1 ? 3933 : 3934, 1, true);
} }
/** /**
@@ -290,7 +290,7 @@ public final class RugMerchantDialogue extends DialoguePlugin {
*/ */
public void travel(final RugDestination current, final Player player) { public void travel(final RugDestination current, final Player player) {
player.lock(); player.lock();
player.getConfigManager().set(499, 0); setVarp(player, 499, 0);
player.getImpactHandler().setDisabledTicks(GameWorld.getTicks() + 200); player.getImpactHandler().setDisabledTicks(GameWorld.getTicks() + 200);
player.getInterfaceManager().removeTabs(0,1,2,3,4,5,6,7,8,9,10,11,12,13); player.getInterfaceManager().removeTabs(0,1,2,3,4,5,6,7,8,9,10,11,12,13);
player.getEquipment().replace(new Item(Items.MAGIC_CARPET_5614),EquipmentContainer.SLOT_WEAPON); player.getEquipment().replace(new Item(Items.MAGIC_CARPET_5614),EquipmentContainer.SLOT_WEAPON);
@@ -328,7 +328,7 @@ public final class RugMerchantDialogue extends DialoguePlugin {
player.faceLocation(getLocation()); player.faceLocation(getLocation());
break; break;
case 4: case 4:
player.getConfigManager().set(499, 1); setVarp(player, 499, 1);
break; break;
case 200: case 200:
break; break;
@@ -339,7 +339,7 @@ public final class RugMerchantDialogue extends DialoguePlugin {
player.getImpactHandler().setDisabledTicks(0); player.getImpactHandler().setDisabledTicks(0);
player.unlock(); player.unlock();
player.animate(new Animation(-1)); player.animate(new Animation(-1));
player.getConfigManager().set(499, 0); setVarp(player, 499, 0);
clearLogoutListener(player, "magic-carpet"); clearLogoutListener(player, "magic-carpet");
@@ -222,16 +222,14 @@ class TheGolemListeners : InteractionListener {
if(player.questRepository.getStage("The Golem") >= 100) { if(player.questRepository.getStage("The Golem") >= 100) {
clientStage = Math.max(clientStage, 10) clientStage = Math.max(clientStage, 10)
} }
player.varpManager.get(437) setVarbit(player, 346, clientStage)
.setVarbit(0, clientStage) setVarbit(player, 348, clayUsed)
.setVarbit(7, clayUsed) setVarbit(player, 354, gemsTaken)
.setVarbit(16, gemsTaken) setVarbit(player, 355, statuetteTaken)
.setVarbit(17, statuetteTaken) setVarbit(player, 349, rotation1)
.setVarbit(10, rotation1) setVarbit(player, 350, rotation2)
.setVarbit(11, rotation2) setVarbit(player, 351, rotation3)
.setVarbit(12, rotation3) setVarbit(player, 352, statuettePlaced * (rotation4 + 1))
.setVarbit(13, statuettePlaced * (rotation4 + 1))
.send(player)
} }
} }
@@ -13,6 +13,8 @@ import core.game.world.map.zone.ZoneBorders;
import core.plugin.Initializable; import core.plugin.Initializable;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import static core.api.ContentAPIKt.*;
/** /**
* The main type for the tourist trap quest. * The main type for the tourist trap quest.
* @author Aero * @author Aero
@@ -253,7 +255,7 @@ public final class TouristTrap extends Quest {
* @param player the player. * @param player the player.
*/ */
public static void addConfig(final Player player, final int value) { public static void addConfig(final Player player, final int value) {
player.getConfigManager().set(CONFIG_ID, value, true); setVarp(player, CONFIG_ID, value, true);
} }
/** /**
@@ -38,6 +38,8 @@ import core.tools.RandomFunction;
import content.region.desert.quest.thetouristrap.TouristTrapPlugin.AnnaCartHandler.AnnaCartCutscene; import content.region.desert.quest.thetouristrap.TouristTrapPlugin.AnnaCartHandler.AnnaCartCutscene;
import content.region.desert.quest.thetouristrap.TouristTrapPlugin.BedabinAnvilHandler.AnnaWinchHandler; import content.region.desert.quest.thetouristrap.TouristTrapPlugin.BedabinAnvilHandler.AnnaWinchHandler;
import static core.api.ContentAPIKt.*;
/** /**
* Represents the plugin used to handle interactions for tourist trap. * Represents the plugin used to handle interactions for tourist trap.
* *
@@ -429,7 +431,7 @@ public final class TouristTrapPlugin extends OptionHandler {
@Override @Override
public boolean pulse() { public boolean pulse() {
player.getPacketDispatch().sendMessage("You bend the bars back."); player.getPacketDispatch().sendMessage("You bend the bars back.");
player.getConfigManager().set(907, player.getConfigManager().get(907) + 1); setVarp(player, 907, getVarp(player, 907) + 1);
return true; return true;
} }
}); });
@@ -10,6 +10,8 @@ import kotlin.Unit;
import core.game.world.GameWorld; import core.game.world.GameWorld;
import core.game.world.map.Location; import core.game.world.map.Location;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the jarvald dialogue. * Handles the jarvald dialogue.
* @author Vexia * @author Vexia
@@ -131,7 +133,7 @@ public final class JarvaldDialogue extends DialoguePlugin {
stage++; stage++;
break; break;
case 31: case 31:
player.getConfigManager().set(520, 1 << 13, true); setVarp(player, 520, 1 << 13, true);
end(); end();
break; break;
case 32: case 32:
@@ -232,7 +234,7 @@ public final class JarvaldDialogue extends DialoguePlugin {
stage = 36; stage = 36;
return; return;
} }
if (player.getConfigManager().get(520) == 0) { if (getVarp(player, 520) == 0) {
npc("This should not concern you, outerlander.", "I am awaiting other Fremenniks to join me on an", "expedition to Waterbirth Island."); npc("This should not concern you, outerlander.", "I am awaiting other Fremenniks to join me on an", "expedition to Waterbirth Island.");
stage = 21; stage = 21;
} else { } else {
@@ -7,6 +7,7 @@ import core.game.world.map.zone.ZoneBorders
import core.game.world.map.zone.ZoneBuilder import core.game.world.map.zone.ZoneBuilder
import core.plugin.Initializable import core.plugin.Initializable
import core.plugin.Plugin import core.plugin.Plugin
import core.api.*
/** /**
* Handles the stone circle zone south of Ardougne. * Handles the stone circle zone south of Ardougne.
@@ -33,15 +34,15 @@ class StoneCircleZone : MapZone("stone circle", true), Plugin<Any> {
override fun enter(e: Entity): Boolean { override fun enter(e: Entity): Boolean {
if (e is Player) { if (e is Player) {
e.varpManager.get(1184).setVarbit(28, 1).send(e) setVarbit(e, 4833, 1)
} }
return super.enter(e) return super.enter(e)
} }
override fun leave(e: Entity, logout: Boolean): Boolean { override fun leave(e: Entity, logout: Boolean): Boolean {
if (!logout && e is Player) { if (!logout && e is Player) {
e.varpManager.get(1184).setVarbit(28, 0).send(e) setVarbit(e, 4833, 0)
} }
return super.leave(e, logout) return super.leave(e, logout)
} }
} }
@@ -5,6 +5,8 @@ import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.quest.Quest; import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.Item; import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
/** /**
* Handles captains lawgof dialogue. * Handles captains lawgof dialogue.
* @author Vexia * @author Vexia
@@ -95,7 +97,7 @@ public class CaptainLawgofDialogue extends DialoguePlugin {
case 10: case 10:
switch (stage) { switch (stage) {
case 0: case 0:
if (player.getConfigManager().get(1) == 2016) { if (DwarfCannon.allRailsFixed(player)) {
npc("Well done, trooper! The goblins seems to have stopped", "getting in. I think you've done the job!"); npc("Well done, trooper! The goblins seems to have stopped", "getting in. I think you've done the job!");
stage = 105; stage = 105;
break; break;
@@ -182,7 +184,7 @@ public class CaptainLawgofDialogue extends DialoguePlugin {
stage++; stage++;
break; break;
case 112: case 112:
player.getConfigManager().set(0, 3, true); setVarp(player, 0, 3, true);
quest.setStage(player, 20); quest.setStage(player, 20);
end(); end();
break; break;
@@ -236,7 +238,7 @@ public class CaptainLawgofDialogue extends DialoguePlugin {
break; break;
case 10: case 10:
end(); end();
player.getConfigManager().set(0, 5, true); setVarp(player, 0, 5, true);
player.getInventory().remove(DwarfCannon.DWARF_REMAINS); player.getInventory().remove(DwarfCannon.DWARF_REMAINS);
quest.setStage(player, 30); quest.setStage(player, 30);
break; break;
@@ -293,7 +295,7 @@ public class CaptainLawgofDialogue extends DialoguePlugin {
break; break;
case 8: case 8:
player.getInventory().add(DwarfCannon.TOOL_KIT, player); player.getInventory().add(DwarfCannon.TOOL_KIT, player);
player.getConfigManager().set(0, 7); setVarp(player, 0, 7);
quest.setStage(player, 50); quest.setStage(player, 50);
end(); end();
break; break;
@@ -393,7 +395,7 @@ public class CaptainLawgofDialogue extends DialoguePlugin {
case 13: case 13:
player.getInventory().remove(DwarfCannon.TOOL_KIT); player.getInventory().remove(DwarfCannon.TOOL_KIT);
player.sendMessage("You give the toolkit back to Captain Lawgof."); player.sendMessage("You give the toolkit back to Captain Lawgof.");
player.getConfigManager().set(0, 9, true); setVarp(player, 0, 9, true);
quest.setStage(player, 70); quest.setStage(player, 70);
end(); end();
break; break;
@@ -7,6 +7,8 @@ import core.plugin.Initializable;
import core.plugin.ClassScanner; import core.plugin.ClassScanner;
import core.game.node.entity.skill.Skills; import core.game.node.entity.skill.Skills;
import static core.api.ContentAPIKt.*;
/** /**
* Represents the dwarf cannon quest. * Represents the dwarf cannon quest.
* @author Vexia * @author Vexia
@@ -38,6 +40,7 @@ public class DwarfCannon extends Quest {
* The mould item. * The mould item.
*/ */
public static final Item MOULD = new Item(4); public static final Item MOULD = new Item(4);
public static int[] railVarbits = new int[] { 2240, 2241, 2242, 2243, 2244, 2245 };
/** /**
* Constructs a new {@Code DwarfCannon} {@Code Object} * Constructs a new {@Code DwarfCannon} {@Code Object}
@@ -64,7 +67,7 @@ public class DwarfCannon extends Quest {
line(player, "<blue>I can start this quest by speaking to <red>Lawgof the Dwarven<n><red>Captain of the Black Watch <blue>, he is defending an area<n><red>North-west of the Fishing Guild <blue>against <red>goblin <blue>attack.", 11); line(player, "<blue>I can start this quest by speaking to <red>Lawgof the Dwarven<n><red>Captain of the Black Watch <blue>, he is defending an area<n><red>North-west of the Fishing Guild <blue>against <red>goblin <blue>attack.", 11);
break; break;
case 10: case 10:
line(player, "<str>I have spoken to Captain Lawgof, he recruited me into the<n><str>Black Guard and asked me to help the dwarves.<n><n>" + (player.getConfigManager().get(1) == 2016 ? "<str>I have repaired all the broken railings,<n><blue>I should report back to <red>Captain Lawgof." : "<blue>My first task is to <red>fix the broken railings<n><blue>in the dwarves defensive perimeter."), 11); line(player, "<str>I have spoken to Captain Lawgof, he recruited me into the<n><str>Black Guard and asked me to help the dwarves.<n><n>" + (allRailsFixed(player) ? "<str>I have repaired all the broken railings,<n><blue>I should report back to <red>Captain Lawgof." : "<blue>My first task is to <red>fix the broken railings<n><blue>in the dwarves defensive perimeter."), 11);
break; break;
case 20: case 20:
line(player, "<str>I have spoken to Captain Lawgof, he recruited me into the<n><str>Black Guard and asked me to help the dwarves.<n><n>" + (player.hasItem(DWARF_REMAINS) ? "<str>I went to the watchtower where I found the remains of<n><str>Gilob.<n><blue>I should take them back to <red>Captain Lawgof." : "<str>I have repaired all the broken railings,<n><blue>Captain Lawgof has asked me to check up on his guards at<n><red>the watchtower <blue>to the South of this camp."), 11); line(player, "<str>I have spoken to Captain Lawgof, he recruited me into the<n><str>Black Guard and asked me to help the dwarves.<n><n>" + (player.hasItem(DWARF_REMAINS) ? "<str>I went to the watchtower where I found the remains of<n><str>Gilob.<n><blue>I should take them back to <red>Captain Lawgof." : "<str>I have repaired all the broken railings,<n><blue>Captain Lawgof has asked me to check up on his guards at<n><red>the watchtower <blue>to the South of this camp."), 11);
@@ -96,7 +99,7 @@ public class DwarfCannon extends Quest {
@Override @Override
public void start(Player player) { public void start(Player player) {
super.start(player); super.start(player);
player.getConfigManager().set(0, 1); setVarp(player, 0, 1);
} }
@Override @Override
@@ -117,9 +120,16 @@ public class DwarfCannon extends Quest {
if (stage >= 100) { if (stage >= 100) {
val = 11; val = 11;
} else if (stage > 0 && stage < 100) { } else if (stage > 0 && stage < 100) {
val = player.getConfigManager().get(0); val = getVarp(player, 0);
} }
return new int[] { 0, val }; return new int[] { 0, val };
} }
public static boolean allRailsFixed (Player player) {
for (int i = 0; i < 6; i++) {
if (getVarbit(player, railVarbits[i]) != 1)
return false;
}
return true;
}
} }
@@ -24,8 +24,9 @@ import core.game.world.map.Location;
import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Animation;
import core.plugin.Plugin; import core.plugin.Plugin;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import core.game.node.scenery.Scenery;
import static core.api.ContentAPIKt.log; import static core.api.ContentAPIKt.*;
/** /**
* Handles the dwarf cannon quest interactions. * Handles the dwarf cannon quest interactions.
@@ -65,8 +66,8 @@ public class DwarfCannonPlugin extends OptionHandler {
player.getDialogueInterpreter().sendDialogues(player, null, "This should work nicely now that I've fixed it."); player.getDialogueInterpreter().sendDialogues(player, null, "This should work nicely now that I've fixed it.");
return true; return true;
} }
player.getConfigManager().set(1, 2041, true); //setVarp(player, 1, 2041, true);
player.getConfigManager().set(0, 8, true); setVarp(player, 0, 8, true);
player.getQuestRepository().getQuest(DwarfCannon.NAME).setStage(player, 60); player.getQuestRepository().getQuest(DwarfCannon.NAME).setStage(player, 60);
player.sendMessage("Well done! You've fixed the cannon! Better go and tell Captain Lawgof."); player.sendMessage("Well done! You've fixed the cannon! Better go and tell Captain Lawgof.");
/* /*
@@ -123,6 +124,7 @@ public class DwarfCannonPlugin extends OptionHandler {
case 18: case 18:
case 19: case 19:
case 20: case 20:
int index = 15 - node.getId();
final int shift = 10 - (20 - node.getId()); final int shift = 10 - (20 - node.getId());
player.faceLocation(node.getLocation()); player.faceLocation(node.getLocation());
player.getDialogueInterpreter().sendDialogue("The railing is broken and needs to be replaced."); player.getDialogueInterpreter().sendDialogue("The railing is broken and needs to be replaced.");
@@ -167,8 +169,8 @@ public class DwarfCannonPlugin extends OptionHandler {
} }
player.getInventory().remove(new Item(14)); player.getInventory().remove(new Item(14));
player.sendMessage("The railing is now fixed."); player.sendMessage("The railing is now fixed.");
player.getConfigManager().set(1, player.getConfigManager().get(1) + (1 << shift), true); setVarbit(player, ((Scenery) node).getDefinition().getVarbitID(), 1, true);
if (player.getConfigManager().get(1) == 2016) { if (DwarfCannon.allRailsFixed(player)) {
player.getDialogueInterpreter().sendDialogues(player, null, "I've fixed all these railings now."); player.getDialogueInterpreter().sendDialogues(player, null, "I've fixed all these railings now.");
} }
return true; return true;
@@ -193,7 +195,7 @@ public class DwarfCannonPlugin extends OptionHandler {
if (!player.getInventory().hasSpaceFor(DwarfCannon.DWARF_REMAINS)) { if (!player.getInventory().hasSpaceFor(DwarfCannon.DWARF_REMAINS)) {
return; return;
} }
player.getConfigManager().set(0, 4); setVarp(player, 0, 4, true);
player.getInventory().add(DwarfCannon.DWARF_REMAINS); player.getInventory().add(DwarfCannon.DWARF_REMAINS);
} }
@@ -205,13 +207,14 @@ public class DwarfCannonPlugin extends OptionHandler {
return true; return true;
} }
quest.setStage(player, 40); quest.setStage(player, 40);
player.getConfigManager().set(0, 6, true); setVarp(player, 0, 6, true);
spawnLollk(player); spawnLollk(player);
break; break;
} }
return true; return true;
} }
/** /**
* Spawns the lollk npc. * Spawns the lollk npc.
* @param player the player. * @param player the player.
@@ -303,8 +306,9 @@ public class DwarfCannonPlugin extends OptionHandler {
part.interact(player, this.tool, toggled[part.ordinal()]); part.interact(player, this.tool, toggled[part.ordinal()]);
if (toggled[0] && toggled[1] && toggled[2]) { if (toggled[0] && toggled[1] && toggled[2]) {
player.lock(5); player.lock(5);
player.getConfigManager().set(1, 2041, true);
player.getConfigManager().set(0, 8, true); //setVarp(player, 1, 2041, true);
//setVarp(player, 0, 8, true);
player.getQuestRepository().getQuest(DwarfCannon.NAME).setStage(player, 60); player.getQuestRepository().getQuest(DwarfCannon.NAME).setStage(player, 60);
player.sendMessage("Well done! You've fixed the cannon! Better go and tell Captain Lawgof."); player.sendMessage("Well done! You've fixed the cannon! Better go and tell Captain Lawgof.");
GameWorld.getPulser().submit(new Pulse(5, player) { GameWorld.getPulser().submit(new Pulse(5, player) {
@@ -315,7 +319,7 @@ public class DwarfCannonPlugin extends OptionHandler {
} }
}); });
} }
player.sendMessage("Interacting with a part. Toggled=" + toggled[part.ordinal()] + ", configVal=" + player.getConfigManager().get(1) + "."); //player.sendMessage("Interacting with a part. Toggled=" + toggled[part.ordinal()] + ", configVal=" + player.getConfigManager().get(1) + ".");
return true; return true;
} }
@@ -358,7 +362,7 @@ public class DwarfCannonPlugin extends OptionHandler {
* @param player the player. * @param player the player.
*/ */
public Tool select(Player player) { public Tool select(Player player) {
player.getConfigManager().set(1, configValue); //setVarp(player, 1, configValue);
return this; return this;
} }
@@ -436,7 +440,7 @@ public class DwarfCannonPlugin extends OptionHandler {
* @param toggled if toggled on. * @param toggled if toggled on.
*/ */
public void interact(Player player, Tool tool, boolean toggled) { public void interact(Player player, Tool tool, boolean toggled) {
player.getConfigManager().set(1, toggled ? getConfigValue() : tool.getConfigValue()); //setVarp(player, 1, toggled ? getConfigValue() : tool.getConfigValue());
} }
/** /**
@@ -6,6 +6,8 @@ import core.game.node.entity.player.Player;
import core.game.node.entity.player.link.quest.Quest; import core.game.node.entity.player.link.quest.Quest;
import core.game.node.item.Item; import core.game.node.item.Item;
import static core.api.ContentAPIKt.*;
/** /**
* Handles captains lawgof dialogue. * Handles captains lawgof dialogue.
* @author Vexia * @author Vexia
@@ -93,7 +95,7 @@ public class NulodionDialogue extends DialoguePlugin {
stage++; stage++;
break; break;
case 7: case 7:
player.getConfigManager().set(0, 10); setVarp(player, 0, 10);
quest.setStage(player, 80); quest.setStage(player, 80);
player.sendMessage("The Cannon Engineer gives you some notes and a mould."); player.sendMessage("The Cannon Engineer gives you some notes and a mould.");
player.getInventory().add(DwarfCannon.NULODION_NOTES, player); player.getInventory().add(DwarfCannon.NULODION_NOTES, player);
@@ -62,7 +62,6 @@ public class WaterFall extends Quest {
public void finish(Player player) { public void finish(Player player) {
super.finish(player); super.finish(player);
player.getQuestRepository().syncronizeTab(player); player.getQuestRepository().syncronizeTab(player);
player.getConfigManager().set(101, player.getQuestRepository().getPoints());
player.getPacketDispatch().sendString("1 Quest Point", 277, 8+ 2); player.getPacketDispatch().sendString("1 Quest Point", 277, 8+ 2);
player.getPacketDispatch().sendString("13,750 Strength XP", 277, 9+ 2); player.getPacketDispatch().sendString("13,750 Strength XP", 277, 9+ 2);
@@ -34,6 +34,8 @@ import core.game.world.map.RegionManager;
import core.game.world.update.flag.context.Animation; import core.game.world.update.flag.context.Animation;
import core.plugin.Plugin; import core.plugin.Plugin;
import static core.api.ContentAPIKt.*;
/** /**
* Represents the plugin used for the ranging guild. * Represents the plugin used for the ranging guild.
* *
@@ -1115,9 +1117,9 @@ public final class RangingGuildPlugin extends OptionHandler {
private void showInterface(int points, int arrowsLeft, int target, String msg) { private void showInterface(int points, int arrowsLeft, int target, String msg) {
player.getInterfaceManager().openComponent(325); player.getInterfaceManager().openComponent(325);
player.getConfigManager().set(156, 11 - arrowsLeft); setVarp(player, 156, 11 - arrowsLeft);
player.getConfigManager().set(157, points); setVarp(player, 157, points);
player.getConfigManager().set(158, target); setVarp(player, 158, target);
player.getPacketDispatch().sendString(msg, 325, 32); player.getPacketDispatch().sendString(msg, 325, 32);
} }
@@ -334,7 +334,7 @@ class EWListeners : InteractionListener {
sendMessage(player, "You empty the lava into the furnace.") sendMessage(player, "You empty the lava into the furnace.")
} }
2 -> { 2 -> {
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, FURNACE_STATE, ENABLED, true) setVarbit(player, FURNACE_STATE, ENABLED, true)
sendMessage(player, "The furnace bursts to life.") sendMessage(player, "The furnace bursts to life.")
return true return true
} }
@@ -469,7 +469,7 @@ class EWListeners : InteractionListener {
sendMessage(player, "You turn the handle.") sendMessage(player, "You turn the handle.")
} }
3 -> { 3 -> {
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, offset, enabled, true) setVarbit(player, offset, enabled, true)
return true return true
} }
} }
@@ -491,8 +491,8 @@ class EWListeners : InteractionListener {
if (EWUtils.waterWheelEnabled(player)) { if (EWUtils.waterWheelEnabled(player)) {
playAudio(player, pullLeverDisabledSFX) playAudio(player, pullLeverDisabledSFX)
sendMessage(player, "You hear the sound of a water wheel coming to a standstill.") sendMessage(player, "You hear the sound of a water wheel coming to a standstill.")
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, WATER_WHEEL_STATE, DISABLED, true) setVarbit(player, WATER_WHEEL_STATE, DISABLED, true)
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, BELLOWS_STATE, DISABLED, true) setVarbit(player, BELLOWS_STATE, DISABLED, true)
return@on true return@on true
} }
@@ -500,15 +500,15 @@ class EWListeners : InteractionListener {
if (!EWUtils.leftWaterControlEnabled(player) || !EWUtils.rightWaterControlEnabled(player)) { if (!EWUtils.leftWaterControlEnabled(player) || !EWUtils.rightWaterControlEnabled(player)) {
playAudio(player, pullLeverResetGatesSFX) playAudio(player, pullLeverResetGatesSFX)
sendMessage(player, "You hear the sound of the flow gates resetting.") sendMessage(player, "You hear the sound of the flow gates resetting.")
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, LEFT_WATER_CONTROL_STATE, DISABLED, true) setVarbit(player, LEFT_WATER_CONTROL_STATE, DISABLED, true)
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, RIGHT_WATER_CONTROL_STATE, DISABLED, true) setVarbit(player, RIGHT_WATER_CONTROL_STATE, DISABLED, true)
return@on true return@on true
} }
// If both of the above are false, the water wheel can start running // If both of the above are false, the water wheel can start running
playAudio(player, pullLeverEnabledSFX) playAudio(player, pullLeverEnabledSFX)
sendMessage(player, "You hear the sound of a water wheel starting up.") sendMessage(player, "You hear the sound of a water wheel starting up.")
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, WATER_WHEEL_STATE, ENABLED, true) setVarbit(player, WATER_WHEEL_STATE, ENABLED, true)
return@on true return@on true
} }
@@ -573,13 +573,13 @@ class EWListeners : InteractionListener {
// Bellows lever "OFF" state // Bellows lever "OFF" state
if (EWUtils.bellowsEnabled(player)) { if (EWUtils.bellowsEnabled(player)) {
sendMessage(player, "The bellows stop pumping air.") sendMessage(player, "The bellows stop pumping air.")
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, BELLOWS_STATE, DISABLED, true) setVarbit(player, BELLOWS_STATE, DISABLED, true)
return@on true return@on true
} }
// Bellows lever "ON" state // Bellows lever "ON" state
sendMessage(player, "The bellows pump air down the pipe.") sendMessage(player, "The bellows pump air down the pipe.")
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, BELLOWS_STATE, ENABLED, true) setVarbit(player, BELLOWS_STATE, ENABLED, true)
return@on true return@on true
} }
} }
@@ -605,4 +605,4 @@ class EWListeners : InteractionListener {
} }
} }
} }
} }
@@ -3,9 +3,9 @@ package content.region.kandarin.seers.quest.elementalworkshop
import content.global.handlers.iface.BookLine import content.global.handlers.iface.BookLine
import content.global.handlers.iface.Page import content.global.handlers.iface.Page
import content.global.handlers.iface.PageSet import content.global.handlers.iface.PageSet
import core.api.getVarbitValue
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import org.rs09.consts.Vars import org.rs09.consts.Vars
import core.api.*
/** /**
* Utils for the Elemental Workshop I quest * Utils for the Elemental Workshop I quest
@@ -71,37 +71,37 @@ object EWUtils {
) )
/* OFFSETS */ /* OFFSETS */
const val LEFT_WATER_CONTROL_STATE = 3 const val LEFT_WATER_CONTROL_STATE = 2058
const val RIGHT_WATER_CONTROL_STATE = 4 const val RIGHT_WATER_CONTROL_STATE = 2059
const val WATER_WHEEL_STATE = 5 const val WATER_WHEEL_STATE = 2060
const val FURNACE_STATE = 7 const val FURNACE_STATE = 2062
const val BELLOWS_STATE = 9 const val BELLOWS_STATE = 2063
fun leftWaterControlBit(player: Player): Int { fun leftWaterControlBit(player: Player): Int {
return getVarbitValue(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, LEFT_WATER_CONTROL_STATE) return getVarbit(player, LEFT_WATER_CONTROL_STATE)
} }
fun rightWaterControlBit(player: Player): Int { fun rightWaterControlBit(player: Player): Int {
return getVarbitValue(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, RIGHT_WATER_CONTROL_STATE) return getVarbit(player, RIGHT_WATER_CONTROL_STATE)
} }
fun leftWaterControlEnabled(player: Player): Boolean { fun leftWaterControlEnabled(player: Player): Boolean {
return getVarbitValue(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, LEFT_WATER_CONTROL_STATE) == 1 return getVarbit(player, LEFT_WATER_CONTROL_STATE) == 1
} }
fun rightWaterControlEnabled(player: Player): Boolean { fun rightWaterControlEnabled(player: Player): Boolean {
return getVarbitValue(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, RIGHT_WATER_CONTROL_STATE) == 1 return getVarbit(player, RIGHT_WATER_CONTROL_STATE) == 1
} }
fun waterWheelEnabled(player: Player): Boolean { fun waterWheelEnabled(player: Player): Boolean {
return getVarbitValue(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, WATER_WHEEL_STATE) == 1 return getVarbit(player, WATER_WHEEL_STATE) == 1
} }
fun bellowsEnabled(player: Player): Boolean { fun bellowsEnabled(player: Player): Boolean {
return getVarbitValue(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, BELLOWS_STATE) == 1 return getVarbit(player, BELLOWS_STATE) == 1
} }
fun currentStage(player: Player): Int { fun currentStage(player: Player): Int {
return player.questRepository.getStage("Elemental Workshop I") return player.questRepository.getStage("Elemental Workshop I")
} }
} }
@@ -1,9 +1,6 @@
package content.region.kandarin.seers.quest.elementalworkshop package content.region.kandarin.seers.quest.elementalworkshop
import core.api.Commands import core.api.*
import core.api.addItem
import core.api.setAttribute
import core.api.setVarbit
import core.game.node.entity.player.Player import core.game.node.entity.player.Player
import core.game.node.entity.player.link.quest.Quest import core.game.node.entity.player.link.quest.Quest
import core.game.node.entity.skill.Skills import core.game.node.entity.skill.Skills
@@ -120,8 +117,7 @@ class ElementalWorkshopQuest : Quest("Elemental Workshop I", 52, 51, 1), Command
setAttribute(player, "/save:ew1:got_leather", false) setAttribute(player, "/save:ew1:got_leather", false)
setAttribute(player, "/save:ew1:bellows_fixed", false) setAttribute(player, "/save:ew1:bellows_fixed", false)
player.questRepository.setStageNonmonotonic(player.questRepository.forIndex(52), 0) player.questRepository.setStageNonmonotonic(player.questRepository.forIndex(52), 0)
player.varpManager.get(Vars.VARP_QUEST_ELEMENTAL_WORKSHOP).clearBitRange(0, 31) setVarp(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, 0)
player.varpManager.get(Vars.VARP_QUEST_ELEMENTAL_WORKSHOP).send(player)
player.teleport(Location.create(2715, 3481, 0)) player.teleport(Location.create(2715, 3481, 0))
player.inventory.clear() player.inventory.clear()
addItem(player, Items.KNIFE_946) addItem(player, Items.KNIFE_946)
@@ -138,11 +134,11 @@ class ElementalWorkshopQuest : Quest("Elemental Workshop I", 52, 51, 1), Command
setAttribute(player, "/save:ew1:got_leather", true) setAttribute(player, "/save:ew1:got_leather", true)
setAttribute(player, "/save:ew1:bellows_fixed", true) setAttribute(player, "/save:ew1:bellows_fixed", true)
player.questRepository.setStageNonmonotonic(player.questRepository.forIndex(52), 95) player.questRepository.setStageNonmonotonic(player.questRepository.forIndex(52), 95)
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, EWUtils.BELLOWS_STATE, enabled, true) setVarbit(player, EWUtils.BELLOWS_STATE, enabled, true)
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, EWUtils.FURNACE_STATE, enabled, true) setVarbit(player, EWUtils.FURNACE_STATE, enabled, true)
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, EWUtils.WATER_WHEEL_STATE, enabled, true) setVarbit(player, EWUtils.WATER_WHEEL_STATE, enabled, true)
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, EWUtils.RIGHT_WATER_CONTROL_STATE, enabled, true) setVarbit(player, EWUtils.RIGHT_WATER_CONTROL_STATE, enabled, true)
setVarbit(player, Vars.VARP_QUEST_ELEMENTAL_WORKSHOP, EWUtils.LEFT_WATER_CONTROL_STATE, enabled, true) setVarbit(player, EWUtils.LEFT_WATER_CONTROL_STATE, enabled, true)
} }
} }
} }
@@ -13,6 +13,8 @@ import core.plugin.ClassScanner;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import core.tools.StringUtils; import core.tools.StringUtils;
import static core.api.ContentAPIKt.*;
/** /**
* The main type or the jungle potion quest. * The main type or the jungle potion quest.
* @author Vexia * @author Vexia
@@ -77,8 +79,11 @@ public final class JunglePotion extends Quest {
player.getPacketDispatch().sendItemZoomOnInterface(Herbs.VOLENCIA_MOSS.getProduct().getId(), 235, 277, 3 + 2); player.getPacketDispatch().sendItemZoomOnInterface(Herbs.VOLENCIA_MOSS.getProduct().getId(), 235, 277, 3 + 2);
player.getSkills().addExperience(Skills.HERBLORE, 775); player.getSkills().addExperience(Skills.HERBLORE, 775);
player.getQuestRepository().syncronizeTab(player); 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); setVarbit(player, 897, 2);
player.varpManager.flagSave(534, false); setVarbit(player, 898, 2);
setVarbit(player, 899, 2);
setVarbit(player, 900, 2);
setVarbit(player, 896, 2, true);
} }
@Override @Override
@@ -31,6 +31,8 @@ import core.game.world.map.zone.ZoneBorders;
import core.game.world.map.zone.ZoneRestriction; import core.game.world.map.zone.ZoneRestriction;
import core.tools.RandomFunction; import core.tools.RandomFunction;
import static core.api.ContentAPIKt.*;
/** /**
* Handles the Tzhaar Fight pits. * Handles the Tzhaar Fight pits.
* @author Emperor * @author Emperor
@@ -353,7 +355,7 @@ public final class TzhaarFightPitsPlugin extends ActivityPlugin {
} }
int size = (LOBBY_PLAYERS.size() + WAR_PLAYERS.size()) - 1; int size = (LOBBY_PLAYERS.size() + WAR_PLAYERS.size()) - 1;
if (!WAR_PLAYERS.isEmpty()) { if (!WAR_PLAYERS.isEmpty()) {
WAR_PLAYERS.get(0).getConfigManager().set(560, size); setVarp(WAR_PLAYERS.get(0), 560, size);
} }
for (Iterator<Player> it = LOBBY_PLAYERS.iterator(); it.hasNext();) { for (Iterator<Player> it = LOBBY_PLAYERS.iterator(); it.hasNext();) {
Player p = it.next(); Player p = it.next();
@@ -365,7 +367,7 @@ public final class TzhaarFightPitsPlugin extends ActivityPlugin {
} }
p.getSkullManager().setSkullCheckDisabled(true); p.getSkullManager().setSkullCheckDisabled(true);
p.getSkullManager().setWilderness(true); p.getSkullManager().setWilderness(true);
p.getConfigManager().set(560, size); setVarp(p, 560, size);
p.getProperties().setTeleportLocation(getZoneDestination()); p.getProperties().setTeleportLocation(getZoneDestination());
p.getInteraction().set(Option._P_ATTACK); p.getInteraction().set(Option._P_ATTACK);
tokkulAmount += p.getProperties().getCurrentCombatLevel(); tokkulAmount += p.getProperties().getCurrentCombatLevel();
@@ -447,7 +449,7 @@ public final class TzhaarFightPitsPlugin extends ActivityPlugin {
*/ */
public static void sendPlayersRemaining(int value) { public static void sendPlayersRemaining(int value) {
for (Player p : WAR_PLAYERS) { for (Player p : WAR_PLAYERS) {
p.getConfigManager().set(560, value); setVarp(p, 560, value);
} }
} }
@@ -137,7 +137,7 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
40 -> { 40 -> {
setAttribute(player, "/save:tutorial:complete", true) setAttribute(player, "/save:tutorial:complete", true)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
teleport(player, Location.create(3233, 3230), TeleportManager.TeleportType.NORMAL) teleport(player, Location.create(3233, 3230), TeleportManager.TeleportType.NORMAL)
closeOverlay(player) closeOverlay(player)
@@ -202,4 +202,4 @@ class TutorialMagicTutorDialogue(player: Player? = null) : core.game.dialogue.Di
return intArrayOf(NPCs.MAGIC_INSTRUCTOR_946) return intArrayOf(NPCs.MAGIC_INSTRUCTOR_946)
} }
} }
@@ -67,7 +67,7 @@ class TutorialQuestGuideDialogue(player: Player? = null) : core.game.dialogue.Di
"" ""
) )
) )
setVarbit(player, 1021, 0, 3) setVarbit(player, 3756, 3)
player.interfaceManager.openTab(Component(Components.QUESTJOURNAL_V2_274)) player.interfaceManager.openTab(Component(Components.QUESTJOURNAL_V2_274))
} }
28 -> when(stage) 28 -> when(stage)
@@ -119,4 +119,4 @@ class TutorialQuestGuideDialogue(player: Player? = null) : core.game.dialogue.Di
return intArrayOf(NPCs.QUEST_GUIDE_949) return intArrayOf(NPCs.QUEST_GUIDE_949)
} }
} }
@@ -77,7 +77,7 @@ object TutorialStage {
1 -> { 1 -> {
hideTabs(player, login) hideTabs(player, login)
player.interfaceManager.openTab(Component(Components.OPTIONS_261)) player.interfaceManager.openTab(Component(Components.OPTIONS_261))
setVarbit(player, 1021, 0, 12) setVarbit(player, 3756, 12)
removeHintIcon(player) removeHintIcon(player)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -92,7 +92,7 @@ object TutorialStage {
} }
2 -> { 2 -> {
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
hideTabs(player, login) hideTabs(player, login)
registerHintIcon(player, Repository.findNPC(945)!!) registerHintIcon(player, Repository.findNPC(945)!!)
Component.setUnclosable( Component.setUnclosable(
@@ -144,7 +144,7 @@ object TutorialStage {
5 -> { 5 -> {
hideTabs(player, login) hideTabs(player, login)
player.interfaceManager.openTab(Component(Components.INVENTORY_149)) player.interfaceManager.openTab(Component(Components.INVENTORY_149))
setVarbit(player, 1021, 0, 4) setVarbit(player, 3756, 4)
removeHintIcon(player) removeHintIcon(player)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -160,7 +160,7 @@ object TutorialStage {
6 -> { 6 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 4)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendPlaneMessageWithBlueTitle( player.dialogueInterpreter.sendPlaneMessageWithBlueTitle(
@@ -219,7 +219,7 @@ object TutorialStage {
10 -> { 10 -> {
hideTabs(player, login) hideTabs(player, login)
player.interfaceManager.openTab(Component(Components.STATS_320)) player.interfaceManager.openTab(Component(Components.STATS_320))
setVarbit(player, 1021, 0, 2) setVarbit(player, 3756, 2)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendPlaneMessageWithBlueTitle( player.dialogueInterpreter.sendPlaneMessageWithBlueTitle(
@@ -234,7 +234,7 @@ object TutorialStage {
11 -> { 11 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 2)
registerHintIcon(player, Repository.findNPC(943)!!) registerHintIcon(player, Repository.findNPC(943)!!)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -250,7 +250,7 @@ object TutorialStage {
12 -> { 12 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 406, 0, 2) setVarp(player, 406, 2)
removeHintIcon(player) removeHintIcon(player)
registerHintIcon(player, Repository.findNPC(952)!!) registerHintIcon(player, Repository.findNPC(952)!!)
Component.setUnclosable( Component.setUnclosable(
@@ -402,7 +402,7 @@ object TutorialStage {
hideTabs(player, login) hideTabs(player, login)
removeHintIcon(player) removeHintIcon(player)
player.interfaceManager.openTab(Component(Components.MUSIC_V3_187)) player.interfaceManager.openTab(Component(Components.MUSIC_V3_187))
setVarbit(player, 1021, 0, 14) setVarbit(player, 3756, 14)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendScrollMessageWithBlueTitle( player.dialogueInterpreter.sendScrollMessageWithBlueTitle(
@@ -418,7 +418,7 @@ object TutorialStage {
22 -> { 22 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
registerHintIcon(player, Location.create(3072, 3090, 0), 125) registerHintIcon(player, Location.create(3072, 3090, 0), 125)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -435,7 +435,7 @@ object TutorialStage {
23 -> { 23 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 13) setVarbit(player, 3756, 13)
removeHintIcon(player) removeHintIcon(player)
player.interfaceManager.openTab(Component(Components.EMOTES_464)) player.interfaceManager.openTab(Component(Components.EMOTES_464))
stopWalk(player) stopWalk(player)
@@ -454,7 +454,7 @@ object TutorialStage {
24 -> { 24 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
player.locks.lockMovement(100000) player.locks.lockMovement(100000)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -517,7 +517,7 @@ object TutorialStage {
28 -> { 28 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendPlaneMessageWithBlueTitle( player.dialogueInterpreter.sendPlaneMessageWithBlueTitle(
@@ -533,7 +533,7 @@ object TutorialStage {
29 -> { 29 -> {
hideTabs(player, login) hideTabs(player, login)
removeHintIcon(player) removeHintIcon(player)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
registerHintIcon(player, Location.create(3088, 3119, 0), 15) registerHintIcon(player, Location.create(3088, 3119, 0), 15)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -550,7 +550,7 @@ object TutorialStage {
30 -> { 30 -> {
hideTabs(player, login) hideTabs(player, login)
removeHintIcon(player) removeHintIcon(player)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
registerHintIcon(player, Repository.findNPC(948)!!) registerHintIcon(player, Repository.findNPC(948)!!)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -794,7 +794,7 @@ object TutorialStage {
hideTabs(player, login) hideTabs(player, login)
removeHintIcon(player) removeHintIcon(player)
player.interfaceManager.openTab(Component(Components.WORNITEMS_387)) player.interfaceManager.openTab(Component(Components.WORNITEMS_387))
setVarbit(player, 1021, 0, 5) setVarbit(player, 3756, 5)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendPlaneMessageWithBlueTitle( player.dialogueInterpreter.sendPlaneMessageWithBlueTitle(
@@ -810,7 +810,7 @@ object TutorialStage {
46 -> { 46 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendPlaneMessageWithBlueTitle( player.dialogueInterpreter.sendPlaneMessageWithBlueTitle(
@@ -857,7 +857,7 @@ object TutorialStage {
49 -> { 49 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 1) setVarbit(player, 3756, 1)
var wepInter = player.getExtension<WeaponInterface>(WeaponInterface::class.java) var wepInter = player.getExtension<WeaponInterface>(WeaponInterface::class.java)
if(wepInter == null) if(wepInter == null)
{ {
@@ -879,7 +879,7 @@ object TutorialStage {
50 -> { 50 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
registerHintIcon(player, Location.create(3110,9518,0), 75) registerHintIcon(player, Location.create(3110,9518,0), 75)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -1053,7 +1053,7 @@ object TutorialStage {
hideTabs(player, login) hideTabs(player, login)
removeHintIcon(player) removeHintIcon(player)
player.interfaceManager.openTab(Component(Components.PRAYER_271)) player.interfaceManager.openTab(Component(Components.PRAYER_271))
setVarbit(player, 1021, 0, 6) setVarbit(player, 3756, 6)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendPlaneMessageWithBlueTitle( player.dialogueInterpreter.sendPlaneMessageWithBlueTitle(
@@ -1085,7 +1085,7 @@ object TutorialStage {
hideTabs(player, login) hideTabs(player, login)
removeHintIcon(player) removeHintIcon(player)
player.interfaceManager.openTab(Component(Components.FRIENDS2_550)) player.interfaceManager.openTab(Component(Components.FRIENDS2_550))
setVarbit(player, 1021, 0, 9) setVarbit(player, 3756, 9)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendPlaneMessageWithBlueTitle( player.dialogueInterpreter.sendPlaneMessageWithBlueTitle(
@@ -1100,7 +1100,7 @@ object TutorialStage {
64 -> { 64 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 10) setVarbit(player, 3756, 10)
player.interfaceManager.openTab(Component(Components.IGNORE2_551)) player.interfaceManager.openTab(Component(Components.IGNORE2_551))
player.interfaceManager.openTab(Component(Components.CLANJOIN_589)) player.interfaceManager.openTab(Component(Components.CLANJOIN_589))
Component.setUnclosable( Component.setUnclosable(
@@ -1117,7 +1117,7 @@ object TutorialStage {
65 -> { 65 -> {
hideTabs(player, login) hideTabs(player, login)
setVarbit(player, 1021, 0, 0) setVarbit(player, 3756, 0)
registerHintIcon(player, Repository.findNPC(945)!!) registerHintIcon(player, Repository.findNPC(945)!!)
Component.setUnclosable( Component.setUnclosable(
player, player,
@@ -1167,7 +1167,7 @@ object TutorialStage {
hideTabs(player, login) hideTabs(player, login)
removeHintIcon(player) removeHintIcon(player)
player.interfaceManager.openTab(Component(player.spellBookManager.spellBook)) player.interfaceManager.openTab(Component(player.spellBookManager.spellBook))
setVarbit(player, 1021, 0, 7) setVarbit(player, 3756, 7)
Component.setUnclosable( Component.setUnclosable(
player, player,
player.dialogueInterpreter.sendPlaneMessageWithBlueTitle( player.dialogueInterpreter.sendPlaneMessageWithBlueTitle(
@@ -1274,7 +1274,7 @@ object TutorialStage {
val stage = getAttribute(player, "tutorial:stage", 0) val stage = getAttribute(player, "tutorial:stage", 0)
val percent = if(stage == 0) 0 else ((stage.toDouble() / 71.0) * 100.0).toInt() val percent = if(stage == 0) 0 else ((stage.toDouble() / 71.0) * 100.0).toInt()
val barPercent = if(stage == 0) 0 else (((percent.toDouble() / 100.0) * 20.0).toInt() + 1) val barPercent = if(stage == 0) 0 else (((percent.toDouble() / 100.0) * 20.0).toInt() + 1)
setVarbit(player, 406, 0, barPercent) setVarp(player, 406, barPercent)
setInterfaceText(player, "$percent% Done", 371, 1) setInterfaceText(player, "$percent% Done", 371, 1)
} }
@@ -1296,4 +1296,4 @@ object TutorialStage {
{ {
setAttribute(player, "tutorial:hinticon", HintIconManager.registerHintIcon(player, location, 1, -1, player.hintIconManager.freeSlot(), height, 3)) setAttribute(player, "tutorial:hinticon", HintIconManager.registerHintIcon(player, location, 1, -1, player.hintIconManager.freeSlot(), height, 3))
} }
} }

Some files were not shown because too many files have changed in this diff Show More