Added ability to define custom varbits via JSON
Fixed the bank note/unnote and insert/swap toggle buttons not persisting between logins
This commit is contained in:
@@ -0,0 +1,19 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"description": "Bank insert mode",
|
||||||
|
|
||||||
|
"varpId": "304",
|
||||||
|
"varbitId": "7000",
|
||||||
|
"startBit": "0",
|
||||||
|
"endBit": "0"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"description": "Bank note mode",
|
||||||
|
|
||||||
|
"varpId": "115",
|
||||||
|
"varbitId": "7001",
|
||||||
|
"startBit": "0",
|
||||||
|
"endBit": "0"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -915,20 +915,20 @@ public final class NPCDefinition extends Definition<NPC> {
|
|||||||
*/
|
*/
|
||||||
public int getConfigId() {
|
public int getConfigId() {
|
||||||
if(configFileId != -1) {
|
if(configFileId != -1) {
|
||||||
return VarbitDefinition.forNPCID(configFileId).getConfigId();
|
return VarbitDefinition.forNPCID(configFileId).getVarpId();
|
||||||
} else return configFileId;
|
} else return configFileId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getVarbitOffset() {
|
public int getVarbitOffset() {
|
||||||
if(configFileId != -1){
|
if(configFileId != -1){
|
||||||
return VarbitDefinition.forNPCID(configFileId).getBitShift();
|
return VarbitDefinition.forNPCID(configFileId).getStartBit();
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getVarbitSize() {
|
public int getVarbitSize() {
|
||||||
if(configFileId != -1){
|
if(configFileId != -1){
|
||||||
return VarbitDefinition.forNPCID(configFileId).getBitSize() - VarbitDefinition.forNPCID(configFileId).getBitShift();
|
return VarbitDefinition.forNPCID(configFileId).getEndBit() - VarbitDefinition.forNPCID(configFileId).getStartBit();
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|||||||
+36
-41
@@ -2,7 +2,6 @@ package core.cache.def.impl;
|
|||||||
|
|
||||||
import core.cache.Cache;
|
import core.cache.Cache;
|
||||||
import core.game.node.entity.player.Player;
|
import core.game.node.entity.player.Player;
|
||||||
import rs09.game.world.GameWorld;
|
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -32,17 +31,17 @@ public final class VarbitDefinition {
|
|||||||
/**
|
/**
|
||||||
* The config id.
|
* The config id.
|
||||||
*/
|
*/
|
||||||
private int configId;
|
private int varpId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The bit shift amount.
|
* The bit shift amount.
|
||||||
*/
|
*/
|
||||||
private int bitShift;
|
private int startBit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The bit amount.
|
* The bit amount.
|
||||||
*/
|
*/
|
||||||
private int bitSize;
|
private int endBit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs a new {@code ConfigFileDefinition} {@code Object}.
|
* Constructs a new {@code ConfigFileDefinition} {@code Object}.
|
||||||
@@ -52,6 +51,14 @@ public final class VarbitDefinition {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VarbitDefinition(int varpId, int id, int startBit, int endBit)
|
||||||
|
{
|
||||||
|
this.varpId = varpId;
|
||||||
|
this.id = id;
|
||||||
|
this.startBit = startBit;
|
||||||
|
this.endBit = endBit;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the bit flags.
|
* Initializes the bit flags.
|
||||||
*/
|
*/
|
||||||
@@ -81,11 +88,11 @@ public final class VarbitDefinition {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static VarbitDefinition forId(int id){
|
public static VarbitDefinition forId(int id){
|
||||||
/*VarbitDefinition def = MAPPING.get(id);
|
VarbitDefinition def = MAPPING.get(id);
|
||||||
if (def != null) {
|
if (def != null) {
|
||||||
return def;
|
return def;
|
||||||
}*/
|
}
|
||||||
VarbitDefinition def;
|
|
||||||
def = new VarbitDefinition(id);
|
def = new VarbitDefinition(id);
|
||||||
byte[] bs = Cache.getIndexes()[22].getFileData(id >>> 10, id & 0x3ff);
|
byte[] bs = Cache.getIndexes()[22].getFileData(id >>> 10, id & 0x3ff);
|
||||||
if (bs != null) {
|
if (bs != null) {
|
||||||
@@ -93,9 +100,9 @@ public final class VarbitDefinition {
|
|||||||
int opcode = 0;
|
int opcode = 0;
|
||||||
while ((opcode = buffer.get() & 0xFF) != 0) {
|
while ((opcode = buffer.get() & 0xFF) != 0) {
|
||||||
if (opcode == 1) {
|
if (opcode == 1) {
|
||||||
def.configId = buffer.getShort() & 0xFFFF;
|
def.varpId = buffer.getShort() & 0xFFFF;
|
||||||
def.bitShift = buffer.get() & 0xFF;
|
def.startBit = buffer.get() & 0xFF;
|
||||||
def.bitSize = buffer.get() & 0xFF;
|
def.endBit = buffer.get() & 0xFF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,14 +110,14 @@ public final class VarbitDefinition {
|
|||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String... args) throws Throwable {
|
public static void create(int varpId, int varbitId, int startBit, int endBit){
|
||||||
GameWorld.prompt(false);
|
VarbitDefinition def = new VarbitDefinition(
|
||||||
for (int i = 0; i < 15000; i++) {
|
varpId,
|
||||||
VarbitDefinition def = forObjectID(i);
|
varbitId,
|
||||||
if (def != null && def.configId == 33) {
|
startBit,
|
||||||
System.out.println("Config file [id=" + i + ", shift=" + def.bitShift + "]!");
|
endBit
|
||||||
}
|
);
|
||||||
}
|
MAPPING.put(varbitId, def);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -119,12 +126,12 @@ public final class VarbitDefinition {
|
|||||||
* @return The config value.
|
* @return The config value.
|
||||||
*/
|
*/
|
||||||
public int getValue(Player player) {
|
public int getValue(Player player) {
|
||||||
int size = BITS[bitSize - bitShift];
|
int size = BITS[endBit - startBit];
|
||||||
int bitValue = player.varpManager.get(getConfigId()).getBitRangeValue(getBitShift(), getBitShift() + (bitSize - bitShift));
|
int bitValue = player.varpManager.get(getVarpId()).getBitRangeValue(getStartBit(), getStartBit() + (endBit - startBit));
|
||||||
if(bitValue != 0){
|
if(bitValue != 0){
|
||||||
return size & (bitValue >>> bitShift);
|
return size & (bitValue >>> startBit);
|
||||||
}
|
}
|
||||||
return size & (player.getConfigManager().get(configId) >>> bitShift);
|
return size & (player.getConfigManager().get(varpId) >>> startBit);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -143,32 +150,20 @@ public final class VarbitDefinition {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public int getVarpId() {
|
||||||
* Gets the configId.
|
return varpId;
|
||||||
* @return The configId.
|
|
||||||
*/
|
|
||||||
public int getConfigId() {
|
|
||||||
return configId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public int getStartBit() {
|
||||||
* Gets the bitShift.
|
return startBit;
|
||||||
* @return The bitShift.
|
|
||||||
*/
|
|
||||||
public int getBitShift() {
|
|
||||||
return bitShift;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public int getEndBit() {
|
||||||
* Gets the bitSize.
|
return endBit;
|
||||||
* @return The bitSize.
|
|
||||||
*/
|
|
||||||
public int getBitSize() {
|
|
||||||
return bitSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ConfigFileDefinition [id=" + id + ", configId=" + configId + ", bitShift=" + bitShift + ", bitSize=" + bitSize + "]";
|
return "ConfigFileDefinition [id=" + id + ", configId=" + varpId + ", bitShift=" + startBit + ", bitSize=" + endBit + "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package core.game.container.impl;
|
package core.game.container.impl;
|
||||||
|
|
||||||
import core.game.container.access.InterfaceContainer;
|
import core.game.container.access.InterfaceContainer;
|
||||||
|
import org.rs09.consts.Vars;
|
||||||
import rs09.ServerConstants;
|
import rs09.ServerConstants;
|
||||||
import core.game.component.Component;
|
import core.game.component.Component;
|
||||||
import core.game.container.*;
|
import core.game.container.*;
|
||||||
@@ -42,11 +43,6 @@ public final class BankContainer extends Container {
|
|||||||
*/
|
*/
|
||||||
private final BankListener listener;
|
private final BankListener listener;
|
||||||
|
|
||||||
/**
|
|
||||||
* Set {@code true} to note items.
|
|
||||||
*/
|
|
||||||
private boolean noteItems;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the bank is open.
|
* If the bank is open.
|
||||||
*/
|
*/
|
||||||
@@ -67,11 +63,6 @@ public final class BankContainer extends Container {
|
|||||||
*/
|
*/
|
||||||
private final int[] tabStartSlot = new int[TAB_SIZE];
|
private final int[] tabStartSlot = new int[TAB_SIZE];
|
||||||
|
|
||||||
/**
|
|
||||||
* If inserting items is enabled.
|
|
||||||
*/
|
|
||||||
private boolean insertItems;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct a new {@code BankContainer} {@code Object}.
|
* Construct a new {@code BankContainer} {@code Object}.
|
||||||
* @param player The player reference.
|
* @param player The player reference.
|
||||||
@@ -287,7 +278,7 @@ public final class BankContainer extends Container {
|
|||||||
}
|
}
|
||||||
item = new Item(item.getId(), amount, item.getCharge());
|
item = new Item(item.getId(), amount, item.getCharge());
|
||||||
int noteId = item.getDefinition().getNoteId();
|
int noteId = item.getDefinition().getNoteId();
|
||||||
Item add = noteItems && noteId > 0 ? new Item(noteId, amount, item.getCharge()) : item;
|
Item add = isNoteItems() && noteId > 0 ? new Item(noteId, amount, item.getCharge()) : item;
|
||||||
int maxCount = player.getInventory().getMaximumAdd(add);
|
int maxCount = player.getInventory().getMaximumAdd(add);
|
||||||
if (amount > maxCount) {
|
if (amount > maxCount) {
|
||||||
item.setAmount(maxCount);
|
item.setAmount(maxCount);
|
||||||
@@ -297,7 +288,7 @@ public final class BankContainer extends Container {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (noteItems && noteId < 0) {
|
if (isNoteItems() && noteId < 0) {
|
||||||
player.getPacketDispatch().sendMessage("This item can't be withdrawn as a note.");
|
player.getPacketDispatch().sendMessage("This item can't be withdrawn as a note.");
|
||||||
add = item;
|
add = item;
|
||||||
}
|
}
|
||||||
@@ -485,7 +476,7 @@ public final class BankContainer extends Container {
|
|||||||
* @return If items have to be noted {@code true}.
|
* @return If items have to be noted {@code true}.
|
||||||
*/
|
*/
|
||||||
public boolean isNoteItems() {
|
public boolean isNoteItems() {
|
||||||
return noteItems;
|
return player.varpManager.getVarbit(Vars.VARBIT_IFACE_BANK_NOTE_MODE) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -493,7 +484,8 @@ public final class BankContainer extends Container {
|
|||||||
* @param noteItems If items have to be noted {@code true}.
|
* @param noteItems If items have to be noted {@code true}.
|
||||||
*/
|
*/
|
||||||
public void setNoteItems(boolean noteItems) {
|
public void setNoteItems(boolean noteItems) {
|
||||||
this.noteItems = noteItems;
|
player.varpManager.flagSave(Vars.VARBIT_IFACE_BANK_NOTE_MODE, true);
|
||||||
|
player.varpManager.setVarbit(Vars.VARBIT_IFACE_BANK_NOTE_MODE, noteItems ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -532,7 +524,8 @@ public final class BankContainer extends Container {
|
|||||||
* @param insertItems The insert items value.
|
* @param insertItems The insert items value.
|
||||||
*/
|
*/
|
||||||
public void setInsertItems(boolean insertItems) {
|
public void setInsertItems(boolean insertItems) {
|
||||||
this.insertItems = insertItems;
|
player.varpManager.setVarbit(Vars.VARBIT_IFACE_BANK_INSERT_MODE, insertItems ? 1 : 0);
|
||||||
|
player.varpManager.flagSave(Vars.VARBIT_IFACE_BANK_INSERT_MODE, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -540,7 +533,7 @@ public final class BankContainer extends Container {
|
|||||||
* @return {@code True} if inserting items mode is enabled.
|
* @return {@code True} if inserting items mode is enabled.
|
||||||
*/
|
*/
|
||||||
public boolean isInsertItems() {
|
public boolean isInsertItems() {
|
||||||
return insertItems;
|
return player.varpManager.getVarbit(Vars.VARBIT_IFACE_BANK_INSERT_MODE) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -43,14 +43,14 @@ public final class GodwarsEntranceHandler extends OptionHandler {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
player.varpManager.get(1048).setVarbit(0,1).send(player);
|
player.varpManager.get(1048).setVarbit(0,1).send(player);
|
||||||
player.varpManager.flagSave(1048);
|
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) == null) {
|
if (player.varpManager.get(1048).getVarbit(4) == 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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public final class JunglePotion extends Quest {
|
|||||||
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);
|
player.varpManager.get(534).setVarbit(15,2).setVarbit(18,2).setVarbit(21,2).setVarbit(24,2).setVarbit(12,2).send(player);
|
||||||
player.varpManager.flagSave(534);
|
player.varpManager.flagSave(534, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ public final class ConfigurationManager {
|
|||||||
public void set(int id, int value, boolean saved) {
|
public void set(int id, int value, boolean saved) {
|
||||||
player.varpManager.get(id).setVarbit(0,value).send(player);
|
player.varpManager.get(id).setVarbit(0,value).send(player);
|
||||||
if (saved) {
|
if (saved) {
|
||||||
player.varpManager.flagSave(id);
|
player.varpManager.flagSave(id, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public final class QuestRepository {
|
|||||||
for (Quest quest : QUESTS.values()) {
|
for (Quest quest : QUESTS.values()) {
|
||||||
config = quest.getConfig(player, getStage(quest));
|
config = quest.getConfig(player, getStage(quest));
|
||||||
player.varpManager.get(config[0]).setVarbit(0,config[1]).send(player);
|
player.varpManager.get(config[0]).setVarbit(0,config[1]).send(player);
|
||||||
player.varpManager.flagSave(config[0]);
|
player.varpManager.flagSave(config[0], false);
|
||||||
player.setAttribute("/save:quest-varps-converted",true);
|
player.setAttribute("/save:quest-varps-converted",true);
|
||||||
// System.out.println(quest.getName() + " - > stage = " + getStage(quest) + " - configs = { " + config[0] + " " + config[1] + " }");
|
// System.out.println(quest.getName() + " - > stage = " + getStage(quest) + " - configs = { " + config[0] + " " + config[1] + " }");
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -497,8 +497,8 @@ public final class AgilityPyramidCourse extends AgilityCourse {
|
|||||||
*/
|
*/
|
||||||
public static void addConfig(final Player player, final int objectId, final int value, boolean save) {
|
public static void addConfig(final Player player, final int objectId, final int value, boolean save) {
|
||||||
final VarbitDefinition definition = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID());
|
final VarbitDefinition definition = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID());
|
||||||
final int oldVal = (definition.getValue(player) << definition.getBitShift());
|
final int oldVal = (definition.getValue(player) << definition.getStartBit());
|
||||||
final int newVal = (value << definition.getBitShift());
|
final int newVal = (value << definition.getStartBit());
|
||||||
player.getConfigManager().set(CONFIG_ID, (player.getConfigManager().get(CONFIG_ID) - oldVal) + newVal, save);
|
player.getConfigManager().set(CONFIG_ID, (player.getConfigManager().get(CONFIG_ID) - oldVal) + newVal, save);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public final class TiaraPlugin implements Plugin<Object> {
|
|||||||
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()).getBitShift(), true);
|
player.getConfigManager().set(CONFIG, 1 << VarbitDefinition.forObjectID(SceneryDefinition.forId(ruin.getObject()[0]).getVarbitID()).getStartBit(), 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];
|
||||||
@@ -54,7 +54,7 @@ public final class TiaraPlugin implements Plugin<Object> {
|
|||||||
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()).getBitShift(), true);
|
player.getConfigManager().set(CONFIG, 1 << VarbitDefinition.forObjectID(SceneryDefinition.forId(r.getObject()[0]).getVarbitID()).getStartBit(), true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import core.game.system.task.Pulse;
|
|||||||
import core.game.world.map.Direction;
|
import core.game.world.map.Direction;
|
||||||
import core.game.world.map.Location;
|
import core.game.world.map.Location;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import rs09.game.system.SystemLogger;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -229,7 +228,7 @@ public class Scenery extends Node {
|
|||||||
if (def.getVarbitID() > -1) {
|
if (def.getVarbitID() > -1) {
|
||||||
VarbitDefinition config = def.getConfigFile();
|
VarbitDefinition config = def.getConfigFile();
|
||||||
if (config != null) {
|
if (config != null) {
|
||||||
player.varpManager.get(config.getConfigId()).setVarbit(config.getBitShift(),index).send(player);
|
player.varpManager.get(config.getVarpId()).setVarbit(config.getStartBit(),index).send(player);
|
||||||
}
|
}
|
||||||
} else if (def.getConfigId() > -1) {
|
} else if (def.getConfigId() > -1) {
|
||||||
player.varpManager.get(def.getConfigId()).setVarbit(0,index);
|
player.varpManager.get(def.getConfigId()).setVarbit(0,index);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ public final class ExaminePacket implements IncomingPacket {
|
|||||||
name = d.getExamine();
|
name = d.getExamine();
|
||||||
//String coords = id + ", " + player.getLocation().getX() + ", " + player.getLocation().getY() + ", " + player.getLocation().getZ();
|
//String coords = id + ", " + player.getLocation().getX() + ", " + player.getLocation().getY() + ", " + player.getLocation().getZ();
|
||||||
player.debug("Object id: " + id + ", models: " + (d.getModelIds() != null ? Arrays.toString(d.getModelIds()) : null) + ", anim: " + d.animationId + ", config: " + (d.getVarbitID() != -1 ? d.getVarbitID() + " (file)" : d.getConfigId()) + ".");
|
player.debug("Object id: " + id + ", models: " + (d.getModelIds() != null ? Arrays.toString(d.getModelIds()) : null) + ", anim: " + d.animationId + ", config: " + (d.getVarbitID() != -1 ? d.getVarbitID() + " (file)" : d.getConfigId()) + ".");
|
||||||
player.debug("Varp config index: " + VarbitDefinition.forObjectID(d.getVarbitID()).getConfigId());
|
player.debug("Varp config index: " + VarbitDefinition.forObjectID(d.getVarbitID()).getVarpId());
|
||||||
player.getPacketDispatch().sendMessage(""+name+"");
|
player.getPacketDispatch().sendMessage(""+name+"");
|
||||||
/*if {
|
/*if {
|
||||||
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection("LandscapeParser.removeGameObject(new GameObject("+coords+"));//"+ d.getName() ), null);
|
Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection("LandscapeParser.removeGameObject(new GameObject("+coords+"));//"+ d.getName() ), null);
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package core.net.packet.in;
|
package core.net.packet.in;
|
||||||
|
|
||||||
import api.events.InteractionEvent;
|
|
||||||
import core.cache.def.impl.SceneryDefinition;
|
import core.cache.def.impl.SceneryDefinition;
|
||||||
import core.cache.def.impl.VarbitDefinition;
|
import core.cache.def.impl.VarbitDefinition;
|
||||||
import core.game.content.quest.PluginInteractionManager;
|
import core.game.content.quest.PluginInteractionManager;
|
||||||
@@ -27,11 +26,8 @@ import rs09.game.interaction.InteractionListener;
|
|||||||
import rs09.game.interaction.InteractionListeners;
|
import rs09.game.interaction.InteractionListeners;
|
||||||
import rs09.game.world.repository.Repository;
|
import rs09.game.world.repository.Repository;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.function.IntPredicate;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles the incoming interaction packets.
|
* Handles the incoming interaction packets.
|
||||||
@@ -284,7 +280,7 @@ public final class InteractionPacket implements IncomingPacket {
|
|||||||
player.debug(object + ", original=" + objectId + ", option=" + option.getName() + "");
|
player.debug(object + ", original=" + objectId + ", option=" + option.getName() + "");
|
||||||
player.debug("dir=" + object.getDirection());
|
player.debug("dir=" + object.getDirection());
|
||||||
VarbitDefinition def = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID());
|
VarbitDefinition def = VarbitDefinition.forObjectID(SceneryDefinition.forId(objectId).getVarbitID());
|
||||||
player.debug("Varp ID=" + def.getConfigId() + " Offset=" + def.getBitShift() + " Size=" + def.getBitSize());
|
player.debug("Varp ID=" + def.getVarpId() + " Offset=" + def.getStartBit() + " Size=" + def.getEndBit());
|
||||||
player.debug("Varbit: " + def.getId());
|
player.debug("Varbit: " + def.getId());
|
||||||
if (option.getHandler() != null) {
|
if (option.getHandler() != null) {
|
||||||
player.debug("Object handler: " + option.getHandler().getClass().getSimpleName());
|
player.debug("Object handler: " + option.getHandler().getClass().getSimpleName());
|
||||||
|
|||||||
@@ -19,3 +19,4 @@ data class TickEvent(val worldTicks: Int) : Event
|
|||||||
data class PickUpEvent(val itemId: Int) : Event
|
data class PickUpEvent(val itemId: Int) : Event
|
||||||
data class InterfaceOpenEvent(val component: Component) : Event
|
data class InterfaceOpenEvent(val component: Component) : Event
|
||||||
data class InterfaceCloseEvent(val component: Component) : Event
|
data class InterfaceCloseEvent(val component: Component) : Event
|
||||||
|
data class VarbitUpdateEvent(val offset: Int, val value: Int) : Event
|
||||||
@@ -15,4 +15,5 @@ object Event {
|
|||||||
@JvmStatic val PickedUp = PickUpEvent::class.java
|
@JvmStatic val PickedUp = PickUpEvent::class.java
|
||||||
@JvmStatic val InterfaceOpened = InterfaceOpenEvent::class.java
|
@JvmStatic val InterfaceOpened = InterfaceOpenEvent::class.java
|
||||||
@JvmStatic val InterfaceClosed = InterfaceCloseEvent::class.java
|
@JvmStatic val InterfaceClosed = InterfaceCloseEvent::class.java
|
||||||
|
@JvmStatic val VarbitUpdated = VarbitUpdateEvent::class.java
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@ class Varp(val index: Int) {
|
|||||||
return config
|
return config
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getVarbit(offset: Int): Int?{
|
fun getVarbit(offset: Int): Int {
|
||||||
return getVarbitValue(offset)
|
return getVarbitValue(offset)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
package rs09.game
|
package rs09.game
|
||||||
|
|
||||||
|
import api.events.VarbitUpdateEvent
|
||||||
import core.cache.def.impl.VarbitDefinition
|
import core.cache.def.impl.VarbitDefinition
|
||||||
import core.game.node.entity.player.Player
|
import core.game.node.entity.player.Player
|
||||||
import core.net.packet.PacketRepository
|
|
||||||
import core.net.packet.context.VarbitContext
|
|
||||||
import org.json.simple.JSONArray
|
import org.json.simple.JSONArray
|
||||||
import org.json.simple.JSONObject
|
import org.json.simple.JSONObject
|
||||||
import rs09.game.node.entity.skill.farming.FarmingPatch
|
import rs09.game.node.entity.skill.farming.FarmingPatch
|
||||||
@@ -31,26 +30,41 @@ class VarpManager(val player: Player) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun setVarbit(def: VarbitDefinition, value: Int){
|
fun setVarbit(def: VarbitDefinition, value: Int){
|
||||||
get(def.configId).setVarbit(def.bitShift,value).send(player)
|
get(def.varpId).setVarbit(def.startBit,value).send(player)
|
||||||
|
|
||||||
|
player.dispatch(VarbitUpdateEvent(def.id, value))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setVarbit(varbitIndex: Int, value: Int){
|
fun setVarbit(varbitIndex: Int, value: Int){
|
||||||
val def = VarbitDefinition.forId(varbitIndex)
|
val def = VarbitDefinition.forId(varbitIndex)
|
||||||
get(def.configId).setVarbit(def.bitShift, value)
|
get(def.varpId).setVarbit(def.startBit, value)
|
||||||
get(def.configId).send(player)
|
get(def.varpId).send(player)
|
||||||
|
|
||||||
|
player.dispatch(VarbitUpdateEvent(varbitIndex, value))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getVarbit(varbitIndex: Int){
|
fun getVarbit(varbitIndex: Int): Int{
|
||||||
val def = VarbitDefinition.forId(varbitIndex)
|
val def = VarbitDefinition.forId(varbitIndex)
|
||||||
get(def.configId).getVarbit(def.bitShift)
|
return get(def.varpId).getVarbit(def.startBit)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun flagSave(index: Int){
|
fun flagSave(index: Int, isVarbit: Boolean = false){
|
||||||
get(index).save = true
|
if (isVarbit) {
|
||||||
|
val def = VarbitDefinition.forId(index)
|
||||||
|
flagSave(def.varpId, false)
|
||||||
|
} else {
|
||||||
|
get(index).save = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun unflagSave(index: Int){
|
fun unflagSave(index: Int, isVarbit: Boolean = false){
|
||||||
get(index).save = false
|
if (isVarbit) {
|
||||||
|
val def = VarbitDefinition.forId(index)
|
||||||
|
unflagSave(def.varpId, false)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
get(index).save = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun sendAllVarps(){
|
fun sendAllVarps(){
|
||||||
|
|||||||
+1
-1
@@ -44,7 +44,7 @@ class CanoeStationListener : InteractionListener {
|
|||||||
return@on true
|
return@on true
|
||||||
}
|
}
|
||||||
player.lock()
|
player.lock()
|
||||||
player.varpManager.get(varbit.configId).clearBitRange(0,31)
|
player.varpManager.get(varbit.varpId).clearBitRange(0,31)
|
||||||
player.faceLocation(CanoeUtils.getFaceLocation(player.location))
|
player.faceLocation(CanoeUtils.getFaceLocation(player.location))
|
||||||
player.animate(axe.animation)
|
player.animate(axe.animation)
|
||||||
player.varpManager.setVarbit(varbit,STAGE_TREE_NONINTERACTABLE)
|
player.varpManager.setVarbit(varbit,STAGE_TREE_NONINTERACTABLE)
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ enum class CompostBins(val varpIndex: Int, val varpOffest: Int) {
|
|||||||
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)
|
val def = VarbitDefinition.forObjectID(objDef.varbitID)
|
||||||
return bins[def.configId shl def.bitShift]
|
return bins[def.varpId shl def.startBit]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ enum class FarmingPatch(val varpIndex: Int, val varpOffset: Int, val type: Patch
|
|||||||
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)
|
val def = VarbitDefinition.forObjectID(objDef.varbitID)
|
||||||
return patches[def.configId shl def.bitShift]
|
return patches[def.varpId shl def.startBit]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -156,9 +156,9 @@ class DevelopmentCommandSet : CommandSet(Privilege.ADMIN) {
|
|||||||
for(id in 0 until 10000)
|
for(id in 0 until 10000)
|
||||||
{
|
{
|
||||||
val def = VarbitDefinition.forId(id)
|
val def = VarbitDefinition.forId(id)
|
||||||
if(def.configId == varp)
|
if(def.varpId == varp)
|
||||||
{
|
{
|
||||||
sendMessage(player, "${def.id} -> [offset: ${def.bitShift}, upperBound: ${def.bitSize}]")
|
sendMessage(player, "${def.id} -> [offset: ${def.startBit}, upperBound: ${def.endBit}]")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sendMessage(player, "=========================================")
|
sendMessage(player, "=========================================")
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
|
|||||||
notify(player,"Region: [id=" + l.regionId + ", active=" + r.isActive + ", instanced=" + (r is DynamicRegion) + "], obj=" + RegionManager.getObject(l) + ".")
|
notify(player,"Region: [id=" + l.regionId + ", active=" + r.isActive + ", instanced=" + (r is DynamicRegion) + "], obj=" + RegionManager.getObject(l) + ".")
|
||||||
notify(player, "Jagex: ${l.z}_${l.regionId shr 8}_${l.regionId and 0xFF}_${l.localX}_${l.localY}")
|
notify(player, "Jagex: ${l.z}_${l.regionId shr 8}_${l.regionId and 0xFF}_${l.localX}_${l.localY}")
|
||||||
notify(player,"Object: " + RegionManager.getObject(l).also{obj = it} + ".")
|
notify(player,"Object: " + RegionManager.getObject(l).also{obj = it} + ".")
|
||||||
notify(player,"Object Varp: " + obj?.definition?.configFile?.configId + " offset: " + obj?.definition?.configFile?.bitShift + " size: " + (obj?.definition?.configFile?.bitShift?.minus(obj?.definition?.configFile?.bitShift!!)))
|
notify(player,"Object Varp: " + obj?.definition?.configFile?.varpId + " offset: " + obj?.definition?.configFile?.startBit + " size: " + (obj?.definition?.configFile?.startBit?.minus(obj?.definition?.configFile?.startBit!!)))
|
||||||
SystemLogger.logInfo("Viewport: " + l.getSceneX(player.playerFlags.lastSceneGraph) + "," + l.getSceneY(player.playerFlags.lastSceneGraph))
|
SystemLogger.logInfo("Viewport: " + l.getSceneX(player.playerFlags.lastSceneGraph) + "," + l.getSceneY(player.playerFlags.lastSceneGraph))
|
||||||
val loc = "Location.create(" + l.x + ", " + l.y + ", " + l.z + ")"
|
val loc = "Location.create(" + l.x + ", " + l.y + ", " + l.z + ")"
|
||||||
SystemLogger.logInfo(loc + "; " + player.playerFlags.lastSceneGraph + ", " + l.localX + ", " + l.localY)
|
SystemLogger.logInfo(loc + "; " + player.playerFlags.lastSceneGraph + ", " + l.localX + ", " + l.localY)
|
||||||
@@ -427,7 +427,7 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
|
|||||||
reject(player,"Syntax: ::getobjectvarp objectid")
|
reject(player,"Syntax: ::getobjectvarp objectid")
|
||||||
}
|
}
|
||||||
val objectID = args[1].toInt()
|
val objectID = args[1].toInt()
|
||||||
notify(player, "${VarbitDefinition.forObjectID(SceneryDefinition.forId(objectID).varbitID).configId}")
|
notify(player, "${VarbitDefinition.forObjectID(SceneryDefinition.forId(objectID).varbitID).varpId}")
|
||||||
}
|
}
|
||||||
|
|
||||||
define("define_varbit", Privilege.ADMIN, "::define_varbit <lt>VARBIT ID<gt>", "Prints information about the given varbit."){ player, args ->
|
define("define_varbit", Privilege.ADMIN, "::define_varbit <lt>VARBIT ID<gt>", "Prints information about the given varbit."){ player, args ->
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ class ConfigParser : Commands {
|
|||||||
GroundSpawnLoader().load()
|
GroundSpawnLoader().load()
|
||||||
MusicConfigLoader().load()
|
MusicConfigLoader().load()
|
||||||
RangedConfigLoader().load()
|
RangedConfigLoader().load()
|
||||||
|
CustomVarbitParser().load()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun reloadConfigs(callback: () -> Unit) {
|
fun reloadConfigs(callback: () -> Unit) {
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package rs09.game.system.config
|
||||||
|
|
||||||
|
import core.cache.def.impl.VarbitDefinition
|
||||||
|
import org.json.simple.JSONArray
|
||||||
|
import org.json.simple.JSONObject
|
||||||
|
import org.json.simple.parser.JSONParser
|
||||||
|
import rs09.ServerConstants
|
||||||
|
import rs09.game.system.SystemLogger
|
||||||
|
import java.io.FileReader
|
||||||
|
|
||||||
|
class CustomVarbitParser {
|
||||||
|
val parser = JSONParser()
|
||||||
|
var reader: FileReader? = null
|
||||||
|
|
||||||
|
fun load() {
|
||||||
|
var count = 0
|
||||||
|
|
||||||
|
reader = FileReader(ServerConstants.CONFIG_PATH + "varbit_definitions.json")
|
||||||
|
val array = parser.parse(reader) as JSONArray
|
||||||
|
|
||||||
|
for (jObject in array) {
|
||||||
|
val varbitDef = jObject as JSONObject
|
||||||
|
|
||||||
|
val varpId = varbitDef["varpId"].toString().toInt()
|
||||||
|
val varbitId = varbitDef["varbitId"].toString().toInt()
|
||||||
|
val startBit = varbitDef["startBit"].toString().toInt()
|
||||||
|
val endBit = varbitDef["endBit"].toString().toInt()
|
||||||
|
|
||||||
|
VarbitDefinition.create(varpId, varbitId, startBit, endBit)
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
|
||||||
|
SystemLogger.logInfo("Parsed $count custom varbit definitions.")
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user