mirror of
https://github.com/2006-Scape/2006Scape.git
synced 2026-07-03 00:31:51 +00:00
cad090d8fe
* Added more client settings for winter and hide roofs * Removed unnecessary local var and added Javadoc comment * Fixed dark wizards casting magic in melee range * Added AttackType enum * Removed extra asterisk * Removed attackType magic numbers * Enabled snow toggles by default * Combined snow month into one variable * Added option for fixes without custom settings Added option for fixes (and QoL tab) without overriding specific features. * Added more main args * Fixed typo * Added player sound saving We have it for music, so why not for sounds too? * Fixed typos * Added closed client exception to ignores * Fixed NPC definitions not loading * Replaced NPC definitions XML with JSON * Replaced NPCDefinition Array with HashMap * Use err for early exit output * Fixed KQ death causing client crash It had the wrong anims. * Added zoom level to debug info * Added zoom level messages option * Added fire breath attack type enum * Replaced remaining fire breath attack types * Fixed client lag This should technically not be necessary, but it's more of a workaround due to server inefficiencies (if you kill a bunch of cows, your client will start to lag and you will even stack hits, I suspect it's due to the ground items) until we fix the server inefficiencies. There's not really any downsides in changing this from 5 to 100, so it's a good change for now. * Make definitions private * Fixed dark wizards not attacking back * Improved comments * Removed extra giant mole spawns * Added mole lair rope action * Only send yes chat head when talking to NPC * Fixed removing item does not reset autocast * Fixed picking up stackable items with full inv * Fixed lvl 7 dark wizard anims * Added confirm param to xprate command and fixed players command * Removed usages of Misc.println This hides which file the println is actually called from, so it's actually better to remove this helper. * Don't move player when clicking on barrows check This is both unauthentic and unnecessary. * Removed unnecessary commented out code We don't even need it commented out tbh. * Fixed incorrect barrows NPC attack anims * Improved slayer points message * Fixed slayer task message cut off * Might as well make this naming consistent * Fixed typo * Fixed stronghold slayer dungeon getting stuck in wall * Require control key for zooming It's too easy to accidentally zoom in/out with the scroll wheel, so let's make it so you need the control key held to scroll wheel zoom in/out. * Added option for control key zooming This way, it's off by default so it works the way it always did by default. * Added alias for control key zoom * Fixed quest interface not emptying out completely * Updated slayer point dialogue to be more accurate * Fixed compile error * Fixed formatting * More formatting fixes * Added 5th click object handling (fixes pick-lock crash) * Fixed lower level NPCs always hitting 0 * Fixed NPCs having incorrect max hit Chickens were hitting 3's, ouch... * Fixed NPCs still hitting 0s This is much better now. Combat feels good. * Fixed boss max hits * Fixed al-kharid gate talking option * Copied over max hits from spawns.json to npcDefinitions.json This fixes a lot of NPCs. Many NPCs already seem to be correct. * Added workaround preventing players stuck in level 28 wildy * Changed comment to TODO * Added control key zoom toggle * Extracted config option to ClientSettings * added message for control key zooming
138 lines
2.6 KiB
Java
138 lines
2.6 KiB
Java
package com.rs2.game.npcs;
|
|
|
|
import java.io.FileInputStream;
|
|
import java.io.IOException;
|
|
import java.lang.reflect.Type;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Paths;
|
|
import java.util.*;
|
|
import java.io.*;
|
|
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.GsonBuilder;
|
|
import com.google.gson.reflect.TypeToken;
|
|
import com.rs2.util.XStreamUtil;
|
|
|
|
public class NPCDefinition {
|
|
|
|
private static HashMap<Integer, NPCDefinition> definitions = new HashMap<>();
|
|
|
|
public static void init() throws IOException {
|
|
Gson gson = new Gson();
|
|
Type type = new TypeToken<List<NPCDefinition>>(){}.getType();
|
|
List<NPCDefinition> defs;
|
|
try (FileReader reader = new FileReader("data/cfg/npcDefinitions.json")) {
|
|
defs = gson.fromJson(reader, type);
|
|
}
|
|
for (NPCDefinition def : defs) {
|
|
definitions.put(def.getId(), def);
|
|
}
|
|
}
|
|
|
|
public static NPCDefinition forId(int id) {
|
|
NPCDefinition d = definitions.get(id);
|
|
if (d == null) {
|
|
d = produceDefinition(id);
|
|
}
|
|
return d;
|
|
}
|
|
|
|
private int id;
|
|
private String name, examine;
|
|
private int respawn = 0, combat = 0, hitpoints = 1, maxHit = 0, size = 1, attackSpeed = 4000, attackAnim = 422, defenceAnim = 404, deathAnim = 2304, attackBonus = 20, defenceMelee = 20, defenceRange = 20, defenceMage = 20;
|
|
|
|
private boolean attackable = false;
|
|
private boolean aggressive = false;
|
|
private boolean retreats = false;
|
|
private boolean poisonous = false;
|
|
|
|
public int getId() {
|
|
return id;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
public String getExamine() {
|
|
return examine;
|
|
}
|
|
|
|
public int getRespawn() {
|
|
return respawn;
|
|
}
|
|
|
|
public int getCombat() {
|
|
return combat;
|
|
}
|
|
|
|
public int getHitpoints() {
|
|
return hitpoints;
|
|
}
|
|
|
|
public int getMaxHit() {
|
|
return maxHit;
|
|
}
|
|
|
|
public int getSize() {
|
|
return size;
|
|
}
|
|
|
|
public boolean isAggressive() {
|
|
return aggressive;
|
|
}
|
|
|
|
public boolean retreats() {
|
|
return retreats;
|
|
}
|
|
|
|
public boolean isPoisonous() {
|
|
return poisonous;
|
|
}
|
|
|
|
public static NPCDefinition produceDefinition(int id) {
|
|
NPCDefinition def = new NPCDefinition();
|
|
def.id = id;
|
|
def.name = "NPC #" + def.id;
|
|
def.examine = "It's an NPC.";
|
|
return def;
|
|
}
|
|
|
|
public int getAttackSpeed() {
|
|
return attackSpeed;
|
|
}
|
|
|
|
public int getAttackAnimation() {
|
|
return attackAnim;
|
|
}
|
|
|
|
public int getDefenceAnimation() {
|
|
return defenceAnim;
|
|
}
|
|
|
|
public int getDeathAnimation() {
|
|
return deathAnim;
|
|
}
|
|
|
|
public boolean isAttackable() {
|
|
return attackable;
|
|
}
|
|
|
|
public int getAttackBonus() {
|
|
return attackBonus;
|
|
}
|
|
|
|
public int getDefenceRange() {
|
|
return defenceRange;
|
|
}
|
|
|
|
public int getDefenceMelee() {
|
|
return defenceMelee;
|
|
}
|
|
|
|
public int getDefenceMage() {
|
|
return defenceMage;
|
|
}
|
|
|
|
}
|