Added support for varying log levels configurable in the server config (see log_level in default.conf)

Error logs now properly print to stderr when possible
Colour-coded logs
Addressed a scenario in which outgoing packet writes could get hung up
Fixed interface incorrect definition message on server startup
This commit is contained in:
Ceikry
2023-03-01 08:01:14 +00:00
committed by Ryan
parent e1faa64af7
commit 88a2f354b4
171 changed files with 723 additions and 475 deletions
@@ -1,12 +1,15 @@
package core.game.activity;
import core.game.node.entity.player.Player;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.world.GameWorld;
import java.util.HashMap;
import java.util.Map;
import static core.api.ContentAPIKt.log;
/**
* Manages the activities.
* @author Emperor
@@ -50,7 +53,7 @@ public final class ActivityManager {
ActivityPlugin plugin = ACTIVITIES.get(name);
if (plugin == null) {
if (GameWorld.getSettings().isDevMode()) {
SystemLogger.logErr(ActivityManager.class, "Unhandled activity - " + name + "!");
log(ActivityManager.class, Log.ERR, "Unhandled activity - " + name + "!");
}
return false;
}
@@ -25,6 +25,7 @@ import core.api.Event
import core.api.utils.PlayerCamera
import core.tools.SystemLogger
import core.game.world.GameWorld
import core.tools.Log
/**
* A utility class for making cutscenes.
@@ -259,7 +260,7 @@ abstract class Cutscene(val player: Player) {
try {
endActions?.invoke()
} catch (e: Exception) {
SystemLogger.logErr(this::class.java, "There's some bad nasty code in ${this::class.java.simpleName} end actions!")
log(this::class.java, Log.ERR, "There's some bad nasty code in ${this::class.java.simpleName} end actions!")
e.printStackTrace()
}
return true
@@ -347,7 +348,7 @@ abstract class Cutscene(val player: Player) {
fun logCutscene(message: String)
{
if(ServerConstants.LOG_CUTSCENE)
SystemLogger.logInfo(this::class.java, "$message")
log(this::class.java, Log.FINE, "$message")
}
fun clearNPCs() {
+8 -8
View File
@@ -217,7 +217,7 @@ public class AIPlayer extends Player {
}
}
} catch (FileNotFoundException e) {
System.out.println("Missing " + fileName);
e.printStackTrace();
}
}
@@ -349,7 +349,7 @@ public class AIPlayer extends Player {
int meX = this.getLocation().getX();
int meY = this.getLocation().getY();
//int meX2 = this.getLocation().getX();
//System.out.println("local " + meX + " real x? " + meX2 );
ArrayList<Node> nodes = new ArrayList<Node>();
for (NPC npc : RegionManager.getLocalNpcs(this, range)) {
if (entrys.contains(npc.getId()))
@@ -381,7 +381,7 @@ public class AIPlayer extends Player {
public Node getClosestNodeWithEntryAndDirection(int range, int entry, Direction direction) {
ArrayList<Node> nodeList = getNodeInRange(range, entry);
if (nodeList.isEmpty()) {
//System.out.println("nodelist empty");
return null;
}
Node node = getClosestNodeinNodeListWithDirection(nodeList, direction);
@@ -391,7 +391,7 @@ public class AIPlayer extends Player {
public Node getClosestNodeWithEntry(int range, int entry) {
ArrayList<Node> nodeList = getNodeInRange(range, entry);
if (nodeList.isEmpty()) {
//System.out.println("nodelist empty");
return null;
}
Node node = getClosestNodeinNodeList(nodeList);
@@ -401,7 +401,7 @@ public class AIPlayer extends Player {
public Node getClosestNodeWithEntry(int range, List<Integer> entrys) {
ArrayList<Node> nodeList = getNodeInRange(range, entrys);
if (nodeList.isEmpty()) {
//System.out.println("nodelist empty");
return null;
}
Node node = getClosestNodeinNodeList(nodeList);
@@ -453,7 +453,7 @@ public class AIPlayer extends Player {
private Node getClosestNodeinNodeListWithDirection(ArrayList<Node> nodes, Direction direction) {
if (nodes.isEmpty()) {
//System.out.println("nodelist empty");
return null;
}
@@ -471,7 +471,7 @@ public class AIPlayer extends Player {
private Node getClosestNodeinNodeList(ArrayList<Node> nodes) {
if (nodes.isEmpty()) {
//System.out.println("nodelist empty");
return null;
}
@@ -528,7 +528,7 @@ public class AIPlayer extends Player {
Repository.getPlayers().remove(player);
return;
}
//SystemLogger.logErr(this.getClass(), "Could not deregister AIP#" + uid + ": UID not added to the mapping!");
//log(this.getClass(), Log.ERR, "Could not deregister AIP#" + uid + ": UID not added to the mapping!");
}
@Override
+2 -2
View File
@@ -42,6 +42,7 @@ import core.tools.SystemLogger
import core.game.system.config.ItemConfigParser
import core.game.world.GameWorld
import core.game.world.repository.Repository
import core.tools.Log
import core.tools.colorize
import java.util.*
import java.util.concurrent.CountDownLatch
@@ -78,7 +79,7 @@ class ScriptAPI(private val bot: Player) {
val opt: Option? = node.interaction.options.filter {it != null && it.name.equals(option, true) }.firstOrNull()
if(opt == null){
SystemLogger.logWarn(this::class.java, "Invalid option name provided: $option")
log(this::class.java, Log.WARN, "Invalid option name provided: $option")
return
}
@@ -491,7 +492,6 @@ class ScriptAPI(private val bot: Player) {
}
val canSell = GrandExchange.addBotOffer(actualId, itemAmt)
if (canSell && saleIsBigNews(actualId, itemAmt)) {
SystemLogger.logAI(this::class.java, "Offered $itemAmt of $actualId on the GE.")
Repository.sendNews(SERVER_GE_NAME + " just offered " + itemAmt + " " + ItemDefinition.forId(actualId).name.toLowerCase() + " on the GE.")
}
bot.bank.remove(Item(id, itemAmt))
@@ -7,11 +7,13 @@ import core.game.node.entity.player.Player;
import core.plugin.Plugin;
import core.plugin.PluginManifest;
import core.plugin.PluginType;
import core.tools.Log;
import core.tools.SystemLogger;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import static core.api.ContentAPIKt.log;
import static core.api.DialUtilsKt.splitLines;
import static core.tools.DialogueConstKt.DIALOGUE_INITIAL_OPTIONS_HANDLE;
import static core.tools.DialogueConstKt.START_DIALOGUE;
@@ -197,7 +199,7 @@ public abstract class DialoguePlugin implements Plugin<Player> {
}
if (npc == null) {
SystemLogger.logWarn(this.getClass(),
log(this.getClass(), Log.WARN,
args[0].getClass().getSimpleName() +
"Is not assigning an NPC. Whoever did that should fix it."
);
@@ -11,6 +11,7 @@ import core.game.system.command.Privilege
import core.game.system.config.ItemConfigParser
import core.game.world.GameWorld
import core.game.world.repository.Repository
import core.tools.Log
import core.tools.colorize
import java.lang.Integer.max
import java.util.concurrent.LinkedBlockingDeque
@@ -218,7 +219,7 @@ class GrandExchange : StartupListener, Commands {
if ( offer.offerState != OfferState.PENDING || offer.uid != 0L )
{
SystemLogger.logWarn(this::class.java, "[GE] DISPATCH FAILURE: ${offer.offerState.name}, UID: ${offer.uid}")
log(this::class.java, Log.WARN, "[GE] DISPATCH FAILURE: ${offer.offerState.name}, UID: ${offer.uid}")
return false
}
@@ -3,6 +3,7 @@ package core.game.global.action;
import core.game.node.entity.player.Player;
import core.game.system.communication.CommunicationInfo;
import content.global.handlers.item.SpadeDigListener;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.system.task.Pulse;
import core.game.world.GameWorld;
@@ -12,6 +13,8 @@ import core.game.world.update.flag.context.Animation;
import java.util.HashMap;
import java.util.Map;
import static core.api.ContentAPIKt.log;
/**
* Handles digging with a spade.
* @author Emperor
@@ -63,7 +66,7 @@ public final class DigSpadeHandler {
*/
public static boolean register(Location location, DigAction action) {
if (ACTIONS.containsKey(location)) {
SystemLogger.logErr(CommunicationInfo.class, "Already contained dig reward for location " + location + ".");
log(CommunicationInfo.class, Log.ERR, "Already contained dig reward for location " + location + ".");
return false;
}
ACTIONS.put(location, action);
@@ -39,7 +39,6 @@ object PickupHandler {
return true
}
if (player.getAttribute("droppedItem:" + item.id, 0) > GameWorld.ticks) { //Splinter
SystemLogger.logAlert(this::class.java, "$player tried to do the drop & quick pick-up Ground Item dupe.")
return true
}
if (item !is GroundSpawnLoader.GroundSpawn && item.isRemainPrivate && !item.droppedBy(player)) {
@@ -115,7 +115,7 @@ public class DestinationFlag {
if (dir != null) {
return getDestination(mover, object, sizeX, sizeY, dir, 3);
}
// System.out.println(dir);
return getDestination(mover, object, sizeX, sizeY, Direction.getLogicalDirection(object.getLocation(), mover.getLocation()), 0);
}
@@ -13,9 +13,12 @@ import core.game.world.update.flag.player.FaceLocationFlag;
import core.net.packet.PacketRepository;
import core.net.packet.context.InteractionOptionContext;
import core.net.packet.out.InteractionOption;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.world.GameWorld;
import static core.api.ContentAPIKt.log;
/**
* Handles interaction between nodes.
* @author Emperor
@@ -85,7 +88,7 @@ public class InteractPlugin {
player.dispatch(new InteractionEvent(node, option.getName().toLowerCase()));
} catch (Exception e){
e.printStackTrace();
SystemLogger.logErr(this.getClass(), this.getClass().getName() + e.getMessage());
log(this.getClass(), Log.ERR, this.getClass().getName() + e.getMessage());
}
}
@@ -118,7 +121,7 @@ public class InteractPlugin {
}
} catch (Exception e){
e.printStackTrace();
SystemLogger.logErr(this.getClass(), this.getClass().getName() + e.getMessage());
log(this.getClass(), Log.ERR, this.getClass().getName() + e.getMessage());
}
return true;
}
@@ -149,7 +152,7 @@ public class InteractPlugin {
player.getPacketDispatch().sendMessage("Nothing interesting happens.");
} catch (Exception e){
e.printStackTrace();
SystemLogger.logErr(this.getClass(), this.getClass().getName() + e.getMessage());
log(this.getClass(), Log.ERR, this.getClass().getName() + e.getMessage());
}
return true;
}
@@ -187,7 +190,7 @@ public class InteractPlugin {
}
} catch (Exception e){
e.printStackTrace();
SystemLogger.logErr(this.getClass(), this.getClass().getName() + e.getMessage());
log(this.getClass(), Log.ERR, this.getClass().getName() + e.getMessage());
}
return true;
}
@@ -233,9 +233,6 @@ public abstract class MovementPulse extends Pulse {
return;
}
if(destination.getLocation() == null){
SystemLogger.logAlert(this.getClass(), destination.getId() + " < ID");
SystemLogger.logAlert(this.getClass(), destination.getName() + " < NAME");
SystemLogger.logAlert(this.getClass(), "ASDAD");
return;
}
boolean inside = isInsideEntity(mover.getLocation());
@@ -88,7 +88,7 @@ public final class Option {
if (node instanceof Item) {
return ItemDefinition.getOptionHandler(nodeId, name);
}
System.out.println("Unhandled node type " + node + "!");
return null;
}
@@ -3,6 +3,7 @@ package core.game.interaction;
import core.cache.def.impl.SceneryDefinition;
import core.game.node.Node;
import core.game.node.entity.player.Player;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.world.map.Location;
import core.plugin.Plugin;
@@ -10,6 +11,8 @@ import core.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
import static core.api.ContentAPIKt.log;
/**
* Handles an interaction option.
* @author Emperor
@@ -71,7 +74,7 @@ public abstract class OptionHandler implements Plugin<Object> {
final SceneryDefinition definition = SceneryDefinition.forId(wrapper);
final List<Integer> list = new ArrayList<>(20);
if (definition.getChildrenIds() == null) {
SystemLogger.logErr(this.getClass(), "Null child wrapper in option handler wrapperId=" + wrapper);
log(this.getClass(), Log.ERR, "Null child wrapper in option handler wrapperId=" + wrapper);
return new int[] { wrapper };
}
for (int child : definition.getChildrenIds()) {
@@ -10,6 +10,7 @@ import core.game.node.scenery.Scenery
import core.game.world.GameWorld
import core.game.world.map.Location
import core.game.world.map.path.Pathfinder
import core.tools.Log
import core.tools.SystemLogger
import java.lang.Integer.max
@@ -150,7 +151,7 @@ class ScriptProcessor(val entity: Entity) {
continue
if (entity !is Player) {
toRemove.add(script)
SystemLogger.logErr(this::class.java, "Tried to queue an item UseWith interaction for a non-player!")
log(this::class.java, Log.ERR, "Tried to queue an item UseWith interaction for a non-player!")
continue
}
if (script.nextExecution > GameWorld.ticks)
@@ -273,7 +274,7 @@ class ScriptProcessor(val entity: Entity) {
fun addToQueue(script: Script<*>, strength: QueueStrength) {
if (script !is QueuedScript && script !is QueuedUseWith) {
SystemLogger.logErr(this::class.java, "Tried to queue ${script::class.java.simpleName} as a queueable script but it's not!")
log(this::class.java, Log.ERR, "Tried to queue ${script::class.java.simpleName} as a queueable script but it's not!")
return
}
if (strength == QueueStrength.STRONG && entity is Player) {
@@ -8,6 +8,7 @@ import core.game.node.entity.npc.NPC;
import core.game.node.entity.player.Player;
import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.system.task.Pulse;
import core.game.world.map.Location;
@@ -19,6 +20,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static core.api.ContentAPIKt.log;
/**
* Handles the "use {@code node a} with {@code node b}" option.
*
@@ -210,7 +213,7 @@ public abstract class UseWithHandler implements Plugin<Object> {
final SceneryDefinition definition = SceneryDefinition.forId(wrapper);
final List<Integer> list = new ArrayList<>(20);
if (definition.getChildrenIds() == null) {
SystemLogger.logErr(this.getClass(), "Null child wrapper in option handler wrapperId=" + wrapper);
log(this.getClass(), Log.ERR, "Null child wrapper in option handler wrapperId=" + wrapper);
return new int[]{wrapper};
}
for (int child : definition.getChildrenIds()) {
@@ -11,6 +11,7 @@ import core.game.node.entity.player.link.audio.Audio
import core.game.node.entity.player.link.prayer.PrayerType
import core.game.node.entity.skill.Skills
import content.global.skill.summoning.familiar.Familiar
import core.api.log
import core.game.world.map.Direction
import core.game.world.map.Location
import core.game.world.map.RegionManager
@@ -21,6 +22,7 @@ import core.game.world.update.flag.context.Animation
import core.tools.RandomFunction
import core.tools.SystemLogger
import core.game.system.config.ItemConfigParser
import core.tools.Log
import java.util.*
import kotlin.math.floor
@@ -187,7 +189,7 @@ abstract class CombatSwingHandler(var type: CombatStyle?) {
val block = floor(101 - ratio)
val acc = Math.random() * accuracy
val def = Math.random() * block
return (acc > def).also { if(entity?.username?.toLowerCase() == "test10") SystemLogger.logInfo(this::class.java, "Should hit: $it") }
return (acc > def).also { if(entity?.username?.toLowerCase() == "test10") log(this::class.java, Log.FINE, "Should hit: $it") }
}
/**
@@ -597,7 +599,7 @@ abstract class CombatSwingHandler(var type: CombatStyle?) {
specialHandlers = HashMap()
}
if (specialHandlers!!.containsKey(itemId)) {
SystemLogger.logErr(this::class.java, "Already contained special attack handler for item " + itemId + " - [old=" + specialHandlers!![itemId]!!::class.java.simpleName + ", new=" + handler.javaClass.simpleName + "].")
log(this::class.java, Log.ERR, "Already contained special attack handler for item " + itemId + " - [old=" + specialHandlers!![itemId]!!::class.java.simpleName + ", new=" + handler.javaClass.simpleName + "].")
return false
}
return specialHandlers!!.put(itemId, handler) == null
@@ -211,7 +211,7 @@ open class MeleeSwingHandler
override fun getSetMultiplier(e: Entity?, skillId: Int): Double {
if (e!!.properties.armourSet === ArmourSet.DHAROK && skillId == Skills.STRENGTH) {
// System.out.println("Fiist number -> " + 1.0 + ((e.getSkills().getMaximumLifepoints() - e.getSkills().getLifepoints()) * 0.01));
return 1.0 + (e!!.skills.maximumLifepoints - e.skills.lifepoints) * 0.01
}
if(e is Player && e.isWearingVoid(CombatStyle.MELEE) && (skillId == Skills.ATTACK || skillId == Skills.STRENGTH)) {
@@ -1,6 +1,7 @@
package core.game.node.entity.combat
import content.global.skill.skillcapeperks.SkillcapePerks
import core.api.log
import core.game.container.impl.EquipmentContainer
import core.game.node.entity.Entity
import core.game.node.entity.combat.equipment.*
@@ -20,6 +21,7 @@ import core.game.world.update.flag.context.Graphics
import core.tools.RandomFunction
import core.tools.SystemLogger
import core.game.world.GameWorld
import core.tools.Log
import java.util.*
import kotlin.math.ceil
import kotlin.math.floor
@@ -75,7 +77,7 @@ open class RangeSwingHandler
}
var hit = 0
if (isAccurateImpact(entity, victim, CombatStyle.RANGE)) {
val max = calculateHit(entity, victim, 1.0).also { if(entity?.name?.toLowerCase() == "test10") SystemLogger.logInfo(this::class.java, "Damage: $it") }
val max = calculateHit(entity, victim, 1.0).also { if(entity?.name?.toLowerCase() == "test10") log(this::class.java, Log.FINE, "Damage: $it") }
state.maximumHit = max
hit = RandomFunction.random(max + 1)
}
@@ -106,7 +108,7 @@ open class RangeSwingHandler
if (entity is Player) {
val rw = RangeWeapon.get(entity.equipment.getNew(3).id)
if (rw == null) {
SystemLogger.logErr(this::class.java, "Unhandled range weapon used - [item id=" + entity.equipment.getNew(3).id + "].")
log(this::class.java, Log.ERR, "Unhandled range weapon used - [item id=" + entity.equipment.getNew(3).id + "].")
return
}
w = Weapon(entity.equipment[3], rw.ammunitionSlot, entity.equipment.getNew(rw.ammunitionSlot))
@@ -95,7 +95,7 @@ public final class RangeWeapon {
return false;
}
NodeList nodeList = doc.getDocumentElement().getChildNodes();
System.out.println("Loading range weapon info...");
for (short i = 1; i < nodeList.getLength(); i += 2) {
Node n = nodeList.item(i);
if (n != null) {
@@ -131,7 +131,7 @@ public final class RangeWeapon {
}
}
}
System.out.println("Loaded " + RANGE_WEAPONS.size() + " range weapon definitions.");
return true;
}
@@ -107,10 +107,10 @@ public enum SpellType {
BARRAGE(1.4) {
@Override
public int getImpactAmount(Entity e, Entity victim, int base) {
System.out.println("Attacker - >" + e.getName());
System.out.println("Victim - >" + victim.getName());
System.out.println("Accuracy Mod -> " + getAccuracyMod());
System.out.println("Base Mod -> " + base);
return 26 + base;
}
},
@@ -8,11 +8,14 @@ import core.game.world.map.Direction;
import core.game.world.map.Location;
import core.game.world.map.Point;
import core.game.world.map.RegionManager;
import core.tools.Log;
import core.tools.SystemLogger;
import java.util.Deque;
import java.util.LinkedList;
import static core.api.ContentAPIKt.log;
/**
* The walking queue.
* @author Emperor
@@ -375,7 +378,7 @@ public final class WalkingQueue {
Location loc = entity.getLocation();
if (loc == null) {
SystemLogger.logErr(this.getClass(),
log(this.getClass(), Log.ERR,
"The entity location provided was null."
+ "Are you sure anything down the stack trace isn't providing an NPC with a null location?"
);
@@ -1,5 +1,6 @@
package core.game.node.entity.npc;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.world.map.Location;
import core.plugin.Plugin;
@@ -7,6 +8,8 @@ import core.plugin.Plugin;
import java.util.HashMap;
import java.util.Map;
import static core.api.ContentAPIKt.log;
/**
* Used as superclass for "special NPC" plugins.
* @author Emperor
@@ -63,7 +66,7 @@ public abstract class AbstractNPC extends NPC implements Plugin<Object> {
if (mapping.containsKey(id)) {
String name = mapping.get(id).getClass().getSimpleName();
if (name != getClass().getSimpleName()) {
SystemLogger.logErr(this.getClass(), "[" + getClass().getSimpleName() + "] - Warning: Mapping already contained NPC id " + id + "! (" + name + ")");
log(this.getClass(), Log.ERR, "[" + getClass().getSimpleName() + "] - Warning: Mapping already contained NPC id " + id + "! (" + name + ")");
continue;
}
}
@@ -56,9 +56,7 @@ import core.net.packet.context.SkillContext;
import core.net.packet.out.BuildDynamicScene;
import core.net.packet.out.SkillLevel;
import core.net.packet.out.UpdateSceneGraph;
import core.tools.RandomFunction;
import core.tools.StringUtils;
import core.tools.TickUtilsKt;
import core.tools.*;
import kotlin.Unit;
import kotlin.jvm.functions.Function1;
import org.rs09.consts.Items;
@@ -73,7 +71,6 @@ import core.game.node.entity.combat.graves.GraveController;
import core.game.node.entity.player.info.login.PlayerSaver;
import core.game.node.entity.state.State;
import core.game.node.entity.state.StateRepository;
import core.tools.SystemLogger;
import core.game.world.GameWorld;
import core.game.world.repository.Repository;
import core.game.world.update.MapChunkRenderer;
@@ -318,6 +315,8 @@ public class Player extends Entity {
private int archeryTotal = 0;
public byte[] opCounts = new byte[255];
/**
* Constructs a new {@code Player} {@code Object}.
* @param details The player's details.
@@ -333,7 +332,7 @@ public class Player extends Entity {
@Override
public void init() {
if(!artificial)
SystemLogger.logInfo(this.getClass(), getUsername() + " initialising...");
log(this.getClass(), Log.INFO, getUsername() + " initialising...");
if (!artificial) {
getProperties().setSpawnLocation(ServerConstants.HOME_LOCATION);
getDetails().getSession().setObject(this);
@@ -528,6 +527,7 @@ public class Player extends Entity {
PlayerParser.saveImmediately(this);
removeAttribute("flagged-for-save");
}
Arrays.fill(opCounts, (byte) 0);
}
@Override
@@ -8,6 +8,7 @@ import core.integrations.discord.Discord
import kotlinx.coroutines.*
import org.sqlite.SQLiteDataSource
import core.ServerConstants
import core.tools.Log
import core.tools.SystemLogger
import java.io.File
import java.sql.Connection
@@ -138,7 +139,7 @@ object PlayerMonitor {
}
@JvmStatic fun flushRemainingEventsImmediately() {
SystemLogger.logInfo(this::class.java, "Flushing player log events...")
core.api.log(this::class.java, Log.FINE, "Flushing player log events...")
val path = ServerConstants.LOGS_PATH + "playerlogs.db"
if (!File(path).exists()) {
createSqliteDatabase(path)
@@ -14,6 +14,7 @@ import core.plugin.Plugin;
import core.ServerConstants;
import core.game.interaction.InteractionListeners;
import content.global.handlers.iface.RulesAndInfo;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.world.GameWorld;
import core.game.world.repository.Repository;
@@ -26,6 +27,8 @@ import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.stream.IntStream;
import static core.api.ContentAPIKt.log;
/**
* Sends the login configuration packets.
@@ -209,7 +212,7 @@ public final class LoginConfiguration {
*/
public static final void config(final Player player) {
if(!player.isArtificial())
SystemLogger.logInfo(LoginConfiguration.class, "configuring player " + player.getUsername());
log(LoginConfiguration.class, Log.INFO, "configuring player " + player.getUsername());
player.getInventory().refresh();
player.getEquipment().refresh();
player.getSkills().refresh();
@@ -226,7 +229,7 @@ public final class LoginConfiguration {
player.getEmoteManager().refresh();
player.getInterfaceManager().openInfoBars();
if(!player.isArtificial())
SystemLogger.logInfo(LoginConfiguration.class, "finished configuring player " + player.getUsername());
log(LoginConfiguration.class, Log.INFO, "finished configuring player " + player.getUsername());
}
/**
@@ -2,10 +2,13 @@ package core.game.node.entity.player.info.login;
import core.game.node.entity.player.Player;
import core.ServerConstants;
import core.tools.Log;
import core.tools.SystemLogger;
import java.io.*;
import static core.api.ContentAPIKt.log;
/**
* Class used to abstract the process of loading a player save.
* @author Ceikry
@@ -61,7 +64,7 @@ public final class PlayerParser {
assert os != null;
os.close();
} catch (Exception f){
SystemLogger.logWarn(PlayerParser.class, "Unable to close file copiers in PlayerParser.java line 216.");
log(PlayerParser.class, Log.ERR, "Unable to close file copiers in PlayerParser.java line 216.");
f.printStackTrace();
}
}
@@ -14,10 +14,12 @@ import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
import core.ServerConstants
import core.api.log
import core.game.node.entity.combat.graves.GraveController
import core.game.node.entity.combat.graves.GraveType
import core.tools.SystemLogger
import core.game.world.GameWorld
import core.tools.Log
import java.io.File
import java.io.FileReader
import java.util.*
@@ -45,7 +47,7 @@ class PlayerSaveParser(val player: Player) {
{
reader = FileReader(JSON)
}
reader ?: SystemLogger.logWarn(this::class.java, "Couldn't find save file for ${player.name}, or save is corrupted.").also { read = false }
reader ?: log(this::class.java, Log.WARN, "Couldn't find save file for ${player.name}, or save is corrupted.").also { read = false }
if (read) {
saveFile = parser.parse(reader) as JSONObject
}
@@ -120,7 +122,7 @@ class PlayerSaveParser(val player: Player) {
"long" -> attr["value"].toString().toLong()
"bool" -> attr["value"] as Boolean
"byte" -> Base64.getDecoder().decode(attr["value"].toString())[0]
else -> null.also { SystemLogger.logWarn(this::class.java, "Invalid data type for key: $key in PlayerSaveParser.kt Line 115") }
else -> null.also { log(this::class.java, Log.WARN, "Invalid data type for key: $key in PlayerSaveParser.kt Line 115") }
})
}
} else {
@@ -179,7 +181,6 @@ class PlayerSaveParser(val player: Player) {
fun parseStates() {
player.states.clear()
SystemLogger.logErr(this::class.java, "Parsing states")
if (saveFile!!.containsKey("states")) {
val states: JSONArray = saveFile!!["states"] as JSONArray
for (state in states) {
@@ -1,17 +1,20 @@
package core.game.node.entity.player.info.login
import content.global.skill.summoning.familiar.BurdenBeast
import content.global.skill.summoning.pet.Pet
import core.ServerConstants
import core.api.PersistPlayer
import core.api.log
import core.game.container.Container
import core.game.node.entity.player.Player
import core.game.node.entity.player.link.IronmanMode
import core.game.node.entity.skill.Skills
import content.global.skill.summoning.familiar.BurdenBeast
import content.global.skill.summoning.pet.Pet
import core.tools.Log
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import org.json.simple.JSONArray
import org.json.simple.JSONObject
import core.ServerConstants
import core.tools.SystemLogger
import java.io.File
import java.io.FileWriter
import java.io.IOException
@@ -59,24 +62,31 @@ class PlayerSaver (val player: Player){
}
fun save() = runBlocking {
if (!player.details.saveParsed) return@runBlocking
val manager = ScriptEngineManager()
val scriptEngine = manager.getEngineByName("JavaScript")
if (scriptEngine == null) {
SystemLogger.logErr(this::class.java, "Cannot save: Failed to load ScriptEngineManager, this is a known issue on non Java-11 versions. Set your Java version to 11 to avoid further bugs!")
return@runBlocking
}
scriptEngine.put("jsonString", populate().toJSONString())
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)")
val prettyPrintedJson = scriptEngine["result"] as String
val json: String
if (ServerConstants.JAVA_VERSION < 11) {
val manager = ScriptEngineManager()
val scriptEngine = manager.getEngineByName("JavaScript")
if (scriptEngine == null) {
log(this::class.java, Log.ERR, "Cannot save: Failed to load ScriptEngineManager, this is a known issue on non Java-11 versions. Set your Java version to 11 to avoid further bugs!")
return@runBlocking
}
scriptEngine.put("jsonString", populate().toJSONString())
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)")
json = scriptEngine["result"] as String
} else json = populate().toJSONString()
try {
if(!File("${ServerConstants.PLAYER_SAVE_PATH}${player.name}.json").exists()){
File("${ServerConstants.PLAYER_SAVE_PATH}").mkdirs()
File("${ServerConstants.PLAYER_SAVE_PATH}${player.name}.json").createNewFile()
withContext(Dispatchers.IO) {
File("${ServerConstants.PLAYER_SAVE_PATH}${player.name}.json").createNewFile()
}
}
FileWriter("${ServerConstants.PLAYER_SAVE_PATH}${player.name}.json").use { file ->
file.write(prettyPrintedJson)
file.flush()
withContext(Dispatchers.IO) {
FileWriter("${ServerConstants.PLAYER_SAVE_PATH}${player.name}.json").use { file ->
file.write(json)
file.flush()
}
}
} catch (e: IOException) {
e.printStackTrace()
@@ -106,7 +116,7 @@ class PlayerSaver (val player: Player){
is Short -> "short"
is String -> "str"
is Byte -> "byte"
else -> "null".also { SystemLogger.logWarn(this::class.java, "Invalid attribute type for key: $key in PlayerSaver.kt Line 115") }
else -> "null".also { log(this::class.java, Log.WARN, "Invalid attribute type for key: $key in PlayerSaver.kt Line 115") }
}
attr.put("type",type)
attr.put("key",key)
@@ -12,10 +12,12 @@ import core.net.packet.context.WindowsPaneContext;
import core.net.packet.out.CloseInterface;
import core.net.packet.out.Interface;
import core.net.packet.out.WindowsPane;
import core.tools.Log;
import org.rs09.consts.Components;
import content.region.misc.tutisland.handlers.TutorialStage;
import core.tools.SystemLogger;
import static core.api.ContentAPIKt.log;
/**
@@ -124,7 +126,7 @@ public final class InterfaceManager {
public Component openWindowsPane(Component windowsPane, boolean overlap) {
this.windowsPane = windowsPane;
if (windowsPane.getDefinition().getType() != InterfaceType.WINDOW_PANE) {
SystemLogger.logErr(this.getClass(), "Set interface type to WINDOW_PANE for component " + windowsPane.getId() + ", definition requires updating!");
log(this.getClass(), Log.WARN, "Set interface type to WINDOW_PANE for component " + windowsPane.getId() + ", definition requires updating!");
windowsPane.getDefinition().setType(InterfaceType.WINDOW_PANE);
}
@@ -140,7 +142,7 @@ public final class InterfaceManager {
public void openWindowsPane(Component windowsPane, int type) {
this.windowsPane = windowsPane;
if (windowsPane.getDefinition().getType() != InterfaceType.WINDOW_PANE) {
SystemLogger.logErr(this.getClass(), "Set interface type to WINDOW_PANE for component " + windowsPane.getId() + ", definition requires updating!");
log(this.getClass(), Log.WARN, "Set interface type to WINDOW_PANE for component " + windowsPane.getId() + ", definition requires updating!");
windowsPane.getDefinition().setType(InterfaceType.SINGLE_TAB);
}
@@ -268,7 +270,7 @@ public final class InterfaceManager {
*/
public Component openSingleTab(Component component) {
if (component.getDefinition().getType() != InterfaceType.SINGLE_TAB) {
SystemLogger.logErr(this.getClass(), "Set interface type to SINGLE_TAB for component " + component.getId() + ", definition requires updating!");
log(this.getClass(), Log.WARN, "Set interface type to SINGLE_TAB for component " + component.getId() + ", definition requires updating!");
component.getDefinition().setType(InterfaceType.SINGLE_TAB);
}
component.open(player);
@@ -453,11 +455,11 @@ public final class InterfaceManager {
throw new IllegalStateException("Attack tab can only be instanced as " + WeaponInterface.class.getCanonicalName() + "!");
}
if (component.getDefinition().getTabIndex() != slot) {
SystemLogger.logErr(this.getClass(), "Set tab index to " + slot + " for component " + component.getId() + ", definition requires updating!");
log(this.getClass(), Log.WARN, "Set tab index to " + slot + " for component " + component.getId() + ", definition requires updating!");
component.getDefinition().setTabIndex(slot);
}
if (component.getDefinition().getType() != InterfaceType.TAB) {
SystemLogger.logErr(this.getClass(), "Set interface type to TAB for component " + component.getId() + ", definition requires updating!");
log(this.getClass(), Log.WARN, "Set interface type to TAB for component " + component.getId() + ", definition requires updating!");
component.getDefinition().setType(InterfaceType.TAB);
}
component.open(player);
@@ -470,7 +472,7 @@ public final class InterfaceManager {
*/
public void openTab(Component component) {
if (component.getDefinition().getTabIndex() < 0) {
SystemLogger.logErr(this.getClass(), "No component definitions found for tab " + component.getId() + "!");
log(this.getClass(), Log.WARN, "No component definitions found for tab " + component.getId() + "!");
return;
}
openTab(component.getDefinition().getTabIndex(), component);
@@ -500,7 +502,7 @@ public final class InterfaceManager {
} else {
chatbox = component;
if (chatbox.getDefinition().getType() != InterfaceType.DIALOGUE && chatbox.getDefinition().getType() != InterfaceType.CHATBOX && chatbox.getDefinition().getType() != InterfaceType.CS_CHATBOX) {
SystemLogger.logErr(this.getClass(), "Set interface type to CHATBOX for component " + component.getId() + ", definition requires updating!");
log(this.getClass(), Log.WARN, "Set interface type to CHATBOX for component " + component.getId() + ", definition requires updating!");
chatbox.getDefinition().setType(InterfaceType.DIALOGUE);
}
chatbox.open(player);
@@ -606,7 +608,7 @@ public final class InterfaceManager {
}
overlay = component;
if (overlay.getDefinition().getType() != InterfaceType.OVERLAY) {
SystemLogger.logErr(this.getClass(), "Set interface type to OVERLAY for component " + component.getId() + ", definition requires updating!");
log(this.getClass(), Log.WARN, "Set interface type to OVERLAY for component " + component.getId() + ", definition requires updating!");
overlay.getDefinition().setType(InterfaceType.OVERLAY);
overlay.getDefinition().setWalkable(true);
}
@@ -623,7 +625,7 @@ public final class InterfaceManager {
}
wildyOverlay = component;
if (wildyOverlay.getDefinition().getType() != InterfaceType.WILDERNESS_OVERLAY) {
SystemLogger.logErr(this.getClass(), "Set interface type to WILDERNESS_OVERLAY for component " + component.getId() + ", definition requires updating!");
log(this.getClass(), Log.WARN, "Set interface type to WILDERNESS_OVERLAY for component " + component.getId() + ", definition requires updating!");
wildyOverlay.getDefinition().setType(InterfaceType.WILDERNESS_OVERLAY);
wildyOverlay.getDefinition().setWalkable(true);
}
@@ -3,6 +3,7 @@ package core.game.node.entity.player.link;
import core.game.node.entity.player.Varp;
import core.game.node.entity.player.Player;
import core.game.node.scenery.Scenery;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.system.task.Pulse;
import core.game.world.GameWorld;
@@ -18,6 +19,8 @@ import core.net.packet.context.*;
import core.net.packet.context.DisplayModelContext.ModelType;
import core.net.packet.out.*;
import static core.api.ContentAPIKt.log;
/**
* Represents the class used to dispatching packets.
* @author Emperor
@@ -64,7 +67,7 @@ public final class PacketDispatch {
return;
}
if (message.length() > 255) {
SystemLogger.logErr(this.getClass(), "Message length out of bounds (" + message + ")!");
log(this.getClass(), Log.ERR, "Message length out of bounds (" + message + ")!");
message = message.substring(0, 255);
}
PacketRepository.send(GameMessage.class, new GameMessageContext(player, message));
@@ -131,7 +131,7 @@ public final class MusicPlayer {
int listIndex = entry.getIndex();
int index = (listIndex + 1) / 32;
if (index >= CONFIG_IDS.length) {
System.out.println("Index out of range [index=" + index + ", list=" + listIndex + ", id=" + entry.getId() + ", name=" + entry.getName() + "].");
continue;
}
values[index] |= 1 << (listIndex - (index * 32));
@@ -188,7 +188,7 @@ public final class MusicPlayer {
public void unlock(int id, boolean play) {
MusicEntry entry = MusicEntry.forId(id);
if (entry == null) {
// System.out.println("Could not find music entry for id " + id + "!");
return;
}
if (!unlocked.containsKey(entry.getIndex())) {
@@ -2,6 +2,7 @@ package core.game.node.entity.player.link.quest;
import core.game.node.entity.player.Player;
import core.tools.Log;
import core.tools.SystemLogger;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
@@ -10,6 +11,8 @@ import java.util.HashMap;
import java.util.TreeMap;
import java.util.Map;
import static core.api.ContentAPIKt.log;
/**
* Manages the systems/players quest repository.
*
@@ -73,7 +76,7 @@ public final class QuestRepository {
player.varpManager.get(config[0]).setVarbit(0,config[1]).send(player);
player.varpManager.flagSave(config[0], false);
player.setAttribute("/save:quest-varps-converted",true);
// System.out.println(quest.getName() + " - > stage = " + getStage(quest) + " - configs = { " + config[0] + " " + config[1] + " }");
}
} else {
for(Quest quest : QUESTS.values()){
@@ -98,7 +101,7 @@ public final class QuestRepository {
if(oldStage < stage) {
quests.put(quest.getIndex(), stage);
} else {
SystemLogger.logWarn(this.getClass(), String.format("Nonmonotonic QuestRepository.setStage call for player \"%s\", quest \"%s\", old stage %d, new stage %d", player.getName(), quest.getName(), oldStage, stage));
log(this.getClass(), Log.WARN, String.format("Nonmonotonic QuestRepository.setStage call for player \"%s\", quest \"%s\", old stage %d, new stage %d", player.getName(), quest.getName(), oldStage, stage));
}
}
@@ -202,7 +205,7 @@ public final class QuestRepository {
public boolean isComplete(String name) {
Quest quest = getQuest(name);
if (quest == null) {
SystemLogger.logErr(this.getClass(), "Error can't check if quest is complete for " + name);
log(this.getClass(), Log.ERR, "Error can't check if quest is complete for " + name);
return false;
}
return quest.getStage(player) >= 100;
@@ -217,7 +220,7 @@ public final class QuestRepository {
public boolean hasStarted(String name) {
Quest quest = getQuest(name);
if (quest == null) {
SystemLogger.logErr(this.getClass(), "Error can't check if quest is complete for " + name);
log(this.getClass(), Log.ERR, "Error can't check if quest is complete for " + name);
return false;
}
return quest.getStage(player) > 0;
@@ -650,7 +650,7 @@ public final class Skills {
Player assister = assist.getPlayer();
int index = assist.getSkillIndex(slot);
if (index != -1 && !assist.isRestricted()) {
// System.out.println(index + ", " +
// assist.getSkills()[index] + ", " + SKILL_NAME[slot]);
if (assist.getSkills()[index]) {
int assistLevel = assister.getSkills().getLevel(slot);
@@ -2,6 +2,7 @@ package core.game.node.scenery;
import core.game.node.item.GroundItem;
import core.game.node.item.GroundItemManager;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.system.task.Pulse;
import core.game.world.GameWorld;
@@ -10,6 +11,8 @@ import core.game.world.map.RegionManager;
import core.game.world.map.build.LandscapeParser;
import core.game.world.update.flag.chunk.ObjectUpdateFlag;
import static core.api.ContentAPIKt.log;
/**
* An aiding class for object constructing/removing.
*
@@ -44,7 +47,7 @@ public final class SceneryBuilder {
Scenery current = LandscapeParser.removeScenery(remove);
if (current == null) {
if (GameWorld.getSettings().isDevMode()) {
SystemLogger.logErr(SceneryBuilder.class, "Object could not be replaced - object to remove is invalid.");
log(SceneryBuilder.class, Log.ERR, "Object could not be replaced - object to remove is invalid.");
}
return false;
}
@@ -119,7 +122,7 @@ public final class SceneryBuilder {
Scenery current = LandscapeParser.removeScenery(remove);
if (current == null) {
if (GameWorld.getSettings().isDevMode()) {
SystemLogger.logErr(SceneryBuilder.class, "Object could not be replaced - object to remove is invalid.");
log(SceneryBuilder.class, Log.ERR, "Object could not be replaced - object to remove is invalid.");
}
return false;
}
+3 -2
View File
@@ -17,6 +17,7 @@ import core.game.interaction.InterfaceListener
import core.tools.SystemLogger
import core.game.system.command.Privilege
import core.tools.END_DIALOGUE
import core.tools.Log
import java.io.FileReader
/**
@@ -41,7 +42,7 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe
fun logShop(msg: String)
{
SystemLogger.logInfo(this::class.java, "[SHOPS] $msg")
log(this::class.java, Log.FINE, "[SHOPS] $msg")
}
fun parseStock(stock: String, id: Int): ArrayList<ShopItem>{
@@ -57,7 +58,7 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe
amount = "-1"
val item = tokens[0].toInt()
if(idsInStock[item] != null) {
SystemLogger.logWarn(this::class.java, "[SHOPS] MALFORMED STOCK IN SHOP ID $id FOR ITEM $item")
log(this::class.java, Log.WARN, "[SHOPS] MALFORMED STOCK IN SHOP ID $id FOR ITEM $item")
items.forEach { if(it.itemId == item) {
it.amount += amount.toInt()
return@map
@@ -1,7 +1,10 @@
package core.game.system;
import core.tools.Log;
import core.tools.SystemLogger;
import static core.api.ContentAPIKt.log;
/**
* Handles the shutdown hook.
* @author Emperor
@@ -13,7 +16,7 @@ public final class SystemShutdownHook implements Runnable {
if (SystemManager.isTerminated()) {
return;
}
SystemLogger.logInfo(this.getClass(), "[SystemShutdownHook] Terminating...");
log(this.getClass(), Log.INFO, "Terminating...");
SystemManager.flag(SystemState.TERMINATED);
}
}
@@ -8,6 +8,7 @@ import core.ServerConstants;
import core.ServerStore;
import core.game.bots.AIRepository;
import core.game.node.entity.player.info.PlayerMonitor;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.world.GameWorld;
import core.game.world.repository.Repository;
@@ -15,6 +16,8 @@ import core.game.world.repository.Repository;
import java.io.File;
import java.util.Iterator;
import static core.api.ContentAPIKt.log;
/**
* Handles the terminating of the system.
* @author Emperor
@@ -35,14 +38,14 @@ public final class SystemTermination {
* Terminates the system safely.
*/
public void terminate() {
SystemLogger.logInfo(this.getClass(), "Initializing termination sequence - do not shutdown!");
log(this.getClass(), Log.INFO, "Initializing termination sequence - do not shutdown!");
try {
SystemLogger.logInfo(this.getClass(), "Shutting down networking...");
log(this.getClass(), Log.INFO, "Shutting down networking...");
Server.setRunning(false);
SystemLogger.logInfo(this.getClass(), "Stopping all bots...");
log(this.getClass(), Log.INFO, "Stopping all bots...");
AIRepository.clearAllBots();
Server.getReactor().terminate();
SystemLogger.logInfo(this.getClass(), "Stopping all pulses...");
log(this.getClass(), Log.INFO, "Stopping all pulses...");
GameWorld.getMajorUpdateWorker().stop();
for (Iterator<Player> it = Repository.getPlayers().iterator(); it.hasNext();) {
try {
@@ -72,7 +75,7 @@ public final class SystemTermination {
} catch (Throwable e) {
e.printStackTrace();
}
SystemLogger.logInfo(this.getClass(), "Server successfully terminated!");
log(this.getClass(), Log.INFO, "Server successfully terminated!");
}
/**
@@ -81,7 +84,7 @@ public final class SystemTermination {
*/
public void save(String directory) {
File file = new File(directory);
SystemLogger.logInfo(this.getClass(), "Saving data [dir="+ file.getAbsolutePath() + "]...");
log(this.getClass(), Log.INFO, "Saving data [dir="+ file.getAbsolutePath() + "]...");
if (!file.isDirectory()) {
file.mkdirs();
}
@@ -94,7 +97,6 @@ public final class SystemTermination {
} catch (Exception ignored) {}
}
Repository.getDisconnectionQueue().update();
SystemLogger.flushLogs();
Repository.getDisconnectionQueue().clear();
}
}
@@ -57,7 +57,7 @@ public final class SystemUpdate extends Pulse {
*/
public void notifyPlayers() {
try {
System.out.println("BEGINNING UPDATE SEQUENCE - TIME TIL UPDATE " + getDelay() + " TICKS");
int time = getDelay() + (createBackup ? BACKUP_TICK : 0);
for (Iterator<Player> it = Repository.getPlayers().iterator(); it.hasNext();) {
Player p = it.next();
@@ -36,7 +36,6 @@ class RottenPotatoOptionHandler : OptionHandler() {
if(player.rights != Rights.ADMINISTRATOR)
{
removeItem(player, Items.ROTTEN_POTATO_5733)
SystemLogger.logAlert(this::class.java, "Player ${player.username} had a rotten potato. It has been removed.")
return false
}
@@ -2,6 +2,7 @@ package core.game.system.command.sets
import content.global.activity.jobs.JobManager
import content.global.skill.slayer.Master
import core.api.log
import core.api.removeAttribute
import core.api.getItemName
import core.api.sendMessage
@@ -27,6 +28,7 @@ import java.io.BufferedWriter
import java.io.File
import java.io.FileWriter
import core.net.packet.PacketWriteQueue
import core.tools.Log
@Initializable
class DevelopmentCommandSet : CommandSet(Privilege.ADMIN) {
@@ -85,14 +87,14 @@ class DevelopmentCommandSet : CommandSet(Privilege.ADMIN) {
val mapId = args[1].toIntOrNull() ?: return@define
val def = Struct.get(mapId)
SystemLogger.logInfo(this::class.java, def.toString())
log(this::class.java, Log.FINE, def.toString())
}
define("datamap") {player, args ->
val mapId = args[1].toIntOrNull() ?: return@define
val def = DataMap.get(mapId)
SystemLogger.logInfo(this::class.java, def.toString())
log(this::class.java, Log.FINE, def.toString())
}
define("dumpstructs", Privilege.ADMIN, "", "Dumps all the cache structs to structs.txt") {player, _ ->
@@ -33,6 +33,7 @@ import core.tools.SystemLogger
import core.game.system.command.CommandMapping
import core.game.system.command.Privilege
import core.game.world.repository.Repository
import core.tools.Log
import core.tools.colorize
import java.awt.HeadlessException
import java.awt.Toolkit
@@ -118,9 +119,9 @@ class MiscCommandSet : CommandSet(Privilege.ADMIN){
notify(player, "Jagex: ${l.z}_${l.regionId shr 8}_${l.regionId and 0xFF}_${l.localX}_${l.localY}")
notify(player,"Object: " + RegionManager.getObject(l).also{obj = it} + ".")
notify(player,"Object Varp: " + obj?.definition?.configFile?.varpId + " offset: " + obj?.definition?.configFile?.startBit + " size: " + (obj?.definition?.configFile?.startBit?.minus(obj?.definition?.configFile?.startBit!!)))
SystemLogger.logInfo(this::class.java, "Viewport: " + l.getSceneX(player.playerFlags.lastSceneGraph) + "," + l.getSceneY(player.playerFlags.lastSceneGraph))
log(this::class.java, Log.FINE, "Viewport: " + l.getSceneX(player.playerFlags.lastSceneGraph) + "," + l.getSceneY(player.playerFlags.lastSceneGraph))
val loc = "Location.create(" + l.x + ", " + l.y + ", " + l.z + ")"
SystemLogger.logInfo(this::class.java, loc + "; " + player.playerFlags.lastSceneGraph + ", " + l.localX + ", " + l.localY)
log(this::class.java, Log.FINE, loc + "; " + player.playerFlags.lastSceneGraph + ", " + l.localX + ", " + l.localY)
try {
val stringSelection = StringSelection(loc)
val clpbrd = Toolkit.getDefaultToolkit().systemClipboard
@@ -1,5 +1,6 @@
package core.game.system.command.sets
import core.api.log
import core.cache.Cache
import core.game.node.scenery.Scenery
import core.game.node.scenery.SceneryBuilder
@@ -9,6 +10,7 @@ import core.tools.SystemLogger
import core.game.system.command.CommandPlugin
import core.plugin.Initializable
import core.game.system.command.Privilege
import core.tools.Log
import java.awt.Toolkit
import java.awt.datatransfer.StringSelection
@@ -68,7 +70,7 @@ class SpawnCommandSet : CommandSet(Privilege.ADMIN){
}
val `object` = if (args.size > 3) Scenery(CommandPlugin.toInteger(args[1]!!), player!!.location, CommandPlugin.toInteger(args[2]!!), CommandPlugin.toInteger(args[3]!!)) else if (args.size == 3) Scenery(CommandPlugin.toInteger(args[1]!!), player!!.location, CommandPlugin.toInteger(args[2]!!)) else Scenery(CommandPlugin.toInteger(args[1]!!), player!!.location)
SceneryBuilder.add(`object`)
SystemLogger.logInfo(this::class.java, "object = $`object`")
log(this::class.java, Log.FINE, "object = $`object`")
}
define("objectgrid") { player, args ->
@@ -43,7 +43,6 @@ class SystemCommandSet : CommandSet(Privilege.ADMIN) {
define("resetpassword", Privilege.STANDARD, "", "WARNING: Case insensitive due to dialogue limitations.") { player, args ->
sendInputDialogue(player, InputType.STRING_SHORT, "Enter Current Password:"){value ->
val pass = value.toString()
SystemLogger.logInfo(this::class.java, pass)
runTask(player) {
if (GameWorld.authenticator.checkPassword(player, pass)) {
sendInputDialogue(player, InputType.STRING_SHORT, "Enter New Password:") { value2 ->
@@ -2,6 +2,7 @@ package core.game.system.communication;
import core.cache.misc.buffer.ByteBufferUtils;
import core.game.node.entity.player.Player;
import core.tools.Log;
import org.jetbrains.annotations.NotNull;
import proto.management.PrivateMessage;
import core.auth.UserAccountInfo;
@@ -22,6 +23,8 @@ import java.nio.ByteBuffer;
import java.util.*;
import java.util.Map.Entry;
import static core.api.ContentAPIKt.log;
/**
* Holds communication information.
* @author Emperor
@@ -351,7 +354,7 @@ public final class CommunicationInfo {
CommunicationInfo info = player.getDetails().getCommunication();
Contact c = info.contacts.get(contact);
if (c == null) {
SystemLogger.logErr(CommunicationInfo.class, "Could not find contact " + contact + " to update clan rank!");
log(CommunicationInfo.class, Log.ERR, "Could not find contact " + contact + " to update clan rank!");
return;
}
c.setRank(clanRank);
@@ -5,6 +5,8 @@ import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
import core.ServerConstants
import core.api.log
import core.tools.Log
import core.tools.SystemLogger
import java.io.FileReader
@@ -30,6 +32,6 @@ class CustomVarbitParser {
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count custom varbit definitions.")
log(this::class.java, Log.FINE, "Parsed $count custom varbit definitions.")
}
}
@@ -1,6 +1,8 @@
package core.game.system.config
import core.ServerConstants
import core.api.log
import core.tools.Log
import core.tools.SystemLogger
import org.json.simple.JSONArray
import org.json.simple.JSONObject
@@ -31,7 +33,7 @@ class DoorConfigLoader {
DOORS[door.id] = door
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count door configs.")
log(this::class.java, Log.FINE, "Parsed $count door configs.")
}
@@ -5,8 +5,10 @@ import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
import core.ServerConstants
import core.api.log
import core.api.utils.NPCDropTable
import core.api.utils.WeightedItem
import core.tools.Log
import core.tools.SystemLogger
import java.io.FileReader
@@ -29,7 +31,7 @@ class DropTableParser {
count++
}
}
SystemLogger.logInfo(this::class.java, "Parsed $count drop tables.")
log(this::class.java, Log.FINE, "Parsed $count drop tables.")
}
private fun parseTable(data: JSONArray, destTable: NPCDropTable, isAlways: Boolean, isCharms: Boolean = false) {
@@ -9,9 +9,11 @@ import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
import core.ServerConstants
import core.api.log
import core.tools.SystemLogger
import core.game.world.GameWorld
import core.game.world.repository.Repository
import core.tools.Log
import java.io.FileReader
import java.nio.ByteBuffer
@@ -34,7 +36,7 @@ class GroundSpawnLoader {
count++
}
}
SystemLogger.logInfo(this::class.java, "Initialized $count ground items.")
log(this::class.java, Log.FINE, "Initialized $count ground items.")
}
class GroundSpawn
/**
@@ -1,7 +1,9 @@
package core.game.system.config
import core.ServerConstants
import core.api.log
import core.game.component.ComponentDefinition
import core.tools.Log
import core.tools.SystemLogger
import org.json.simple.JSONArray
import org.json.simple.JSONObject
@@ -24,6 +26,6 @@ class InterfaceConfigParser{
ComponentDefinition.getDefinitions()[id] = ComponentDefinition().parse(e["interfaceType"].toString(),e["walkable"].toString(),e["tabIndex"].toString())
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count interface configs.")
log(this::class.java, Log.FINE, "Parsed $count interface configs.")
}
}
@@ -8,6 +8,8 @@ import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
import core.ServerConstants
import core.api.log
import core.tools.Log
import core.tools.SystemLogger
import java.io.FileReader
@@ -295,6 +297,6 @@ class ItemConfigParser {
}
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count item configs.")
log(this::class.java, Log.FINE, "Parsed $count item configs.")
}
}
@@ -2,11 +2,13 @@ package core.game.system.config
import core.cache.def.impl.DataMap
import core.ServerConstants
import core.api.log
import core.game.node.entity.player.link.music.MusicEntry
import core.game.node.entity.player.link.music.MusicZone
import core.tools.SystemLogger
import core.game.world.map.RegionManager
import core.game.world.map.zone.ZoneBorders
import core.tools.Log
import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
@@ -67,6 +69,6 @@ class MusicConfigLoader {
}
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count music configs.")
log(this::class.java, Log.FINE, "Parsed $count music configs.")
}
}
@@ -3,10 +3,12 @@ package core.game.system.config
import core.ServerConstants
import core.cache.def.impl.NPCDefinition
import content.global.activity.ttrail.ClueLevel
import core.api.log
import core.game.node.entity.combat.CombatStyle
import core.game.node.entity.impl.Animator
import core.tools.SystemLogger
import core.game.world.update.flag.context.Animation
import core.tools.Log
import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
@@ -259,12 +261,12 @@ NPCConfigParser {
"facing_booth",
"can_tolerate",
"water_npc"-> configs.put(it.key.toString(), it.value.toString().toBoolean())
else -> SystemLogger.logWarn(this::class.java, "Unhandled key for npc config: ${it.key.toString()}")
else -> log(this::class.java, Log.WARN, "Unhandled key for npc config: ${it.key.toString()}")
}
}
}
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count NPC configurations")
log(this::class.java, Log.FINE, "Parsed $count NPC configurations")
}
}
@@ -1,10 +1,12 @@
package core.game.system.config
import core.ServerConstants
import core.api.log
import core.game.node.entity.npc.NPC
import core.tools.SystemLogger
import core.game.world.map.Direction
import core.game.world.map.Location
import core.tools.Log
import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
@@ -38,6 +40,6 @@ class NPCSpawner {
count++
}
}
SystemLogger.logInfo(this::class.java, "Spawned $count NPCs")
log(this::class.java, Log.FINE, "Spawned $count NPCs")
}
}
@@ -1,7 +1,9 @@
package core.game.system.config
import core.ServerConstants
import core.api.log
import core.cache.def.impl.SceneryDefinition
import core.tools.Log
import core.tools.SystemLogger
import org.json.simple.JSONArray
import org.json.simple.JSONObject
@@ -35,7 +37,7 @@ class ObjectConfigParser {
count++
}
}
SystemLogger.logInfo(this::class.java, "Parsed $count object configs.")
log(this::class.java, Log.FINE, "Parsed $count object configs.")
}
}
@@ -1,6 +1,7 @@
package core.game.system.config
import core.ServerConstants
import core.api.log
import core.cache.def.impl.ItemDefinition
import core.game.node.entity.combat.equipment.Ammunition
import core.game.node.entity.combat.equipment.BoltEffect
@@ -11,6 +12,7 @@ import core.tools.SystemLogger
import core.game.world.map.Location
import core.game.world.update.flag.context.Animation
import core.game.world.update.flag.context.Graphics
import core.tools.Log
import org.json.simple.JSONArray
import org.json.simple.JSONObject
import org.json.simple.parser.JSONParser
@@ -55,7 +57,7 @@ class RangedConfigLoader {
Ammunition.getAmmunition().put(Integer.parseInt(e["itemId"].toString()),ammo)
count++
}
SystemLogger.logWarn(this::class.java, "Parsed $count ammo configs...")
log(this::class.java, Log.FINE, "Parsed $count ammo configs...")
count = 0
reader = FileReader(ServerConstants.CONFIG_PATH + "ranged_weapon_configs.json")
@@ -75,6 +77,6 @@ class RangedConfigLoader {
RangeWeapon.getRangeWeapons().putIfAbsent(weapon.itemId,weapon)
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count ranged weapon configs...")
log(this::class.java, Log.FINE, "Parsed $count ranged weapon configs...")
}
}
@@ -4,9 +4,13 @@ import com.moandjiezana.toml.Toml
import core.game.world.map.Location
import core.tools.mysql.Database
import core.ServerConstants
import core.api.log
import core.api.parseEnumEntry
import core.tools.SystemLogger
import core.game.world.GameSettings
import core.game.world.GameWorld
import core.tools.Log
import core.tools.LogLevel
import java.io.File
import java.net.URL
import kotlin.system.exitProcess
@@ -32,17 +36,25 @@ object ServerConfigParser {
private fun parseFromFile(confFile: File?) {
if(!confFile!!.canonicalFile.exists()){
SystemLogger.logErr(this::class.java, "${confFile.canonicalFile} does not exist.")
log(this::class.java, Log.ERR, "${confFile.canonicalFile} does not exist.")
exitProcess(0)
} else {
try {
tomlData = Toml().read(confFile)
parseServerSettings()
parseGameSettings()
val jvmString = System.getProperty("java.version")
if (jvmString.startsWith("1.")) {
ServerConstants.JAVA_VERSION = jvmString.substring(2,3).toInt()
} else if (!jvmString.startsWith("1.")) {
ServerConstants.JAVA_VERSION = jvmString.substring(0,2).toInt()
} else if (!jvmString.contains(".")) {
ServerConstants.JAVA_VERSION = jvmString.toInt()
}
log(this::class.java, Log.FINE, "It seems we are in a Java ${ServerConstants.JAVA_VERSION} environment.")
} catch (e: java.lang.IllegalStateException) {
SystemLogger.logErr(this::class.java, "Passed config file is not a TOML file. Path: ${confFile.canonicalPath}")
SystemLogger.logErr(this::class.java, "Exception received: $e")
SystemLogger.logAlert(this::class.java, "Shutting down...")
log(this::class.java, Log.ERR, "Passed config file is not a TOML file. Path: ${confFile.canonicalPath}")
log(this::class.java, Log.ERR, "Exception received: $e")
exitProcess(0)
}
}
@@ -134,6 +146,9 @@ object ServerConfigParser {
ServerConstants.NOAUTH_DEFAULT_ADMIN = data.getBoolean("server.noauth_default_admin", false)
ServerConstants.DRAGON_AXE_USE_OSRS_SPEC = data.getBoolean("world.dragon_axe_use_osrs_spec", false)
ServerConstants.ENABLE_GLOBALCHAT = data.getBoolean("world.enable_globalchat", true)
val logLevel = data.getString("server.log_level", "VERBOSE").uppercase()
ServerConstants.LOG_LEVEL = parseEnumEntry<LogLevel>(logLevel) ?: LogLevel.VERBOSE
}
@@ -141,7 +156,7 @@ object ServerConfigParser {
try {
return parsePath(getString(key).replace("@data", ServerConstants.DATA_PATH!!))
} catch (e: Exception){
SystemLogger.logErr(this::class.java, "Error parsing key: $key")
log(this::class.java, Log.ERR, "Error parsing key: $key")
exitProcess(0)
}
}
@@ -4,6 +4,8 @@ import core.game.node.entity.player.Player
import org.json.simple.JSONArray
import org.json.simple.parser.JSONParser
import core.ServerConstants
import core.api.log
import core.tools.Log
import core.tools.SystemLogger
import java.io.FileReader
@@ -29,6 +31,6 @@ class ShopParser{
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count shops.")
log(this::class.java, Log.FINE, "Parsed $count shops.")
}
}
@@ -1,6 +1,8 @@
package core.game.system.config
import core.ServerConstants
import core.api.log
import core.tools.Log
import core.tools.SystemLogger
import org.json.simple.JSONArray
import org.json.simple.JSONObject
@@ -13,9 +15,9 @@ class XteaParser {
val REGION_XTEA = HashMap<Int,IntArray>()
val DEFAULT_REGION_KEYS = intArrayOf(14881828, -6662814, 58238456, 146761213)
fun getRegionXTEA(regionId: Int): IntArray? { //Uses the xtea's from the sql to unlock regions
// System.out.println("USING SQL REGION KEYS");//Confirms we have unlocked those regions
return REGION_XTEA[regionId]
?: // System.out.println("USING DEFAULT REGION KEYS FOR REGION " + regionId);//Used to check for missing regions
return DEFAULT_REGION_KEYS //This one grabs the keys from the SQL
// return DEFAULT_REGION_KEYS;//This one only uses the default keys at the top,{ 14881828, -6662814, 58238456, 146761213 }. Unsure why they chose these numbers.
}
@@ -36,6 +38,6 @@ class XteaParser {
REGION_XTEA[id] = intArrayOf(keys[0],keys[1],keys[2],keys[3])
count++
}
SystemLogger.logInfo(this::class.java, "Parsed $count region keys.")
log(this::class.java, Log.FINE, "Parsed $count region keys.")
}
}
@@ -19,15 +19,15 @@ public class EncryptionManager {
String pass = "lugi";
String salt = BCrypt.gensalt(workload);
System.out.println("pw=" + SystemManager.getEncryption().hashPassword(pass, salt)); System.out.println("Salt=" + salt);
// System.out.println(BCrypt.checkpw("yes",
// "$2a$12$N3jCPMPEZTisbMf7PG9O7ePgTQEJjhNXGHOJ9zvovT8ibY3Uk.Xlm"));
String hash = "$2a$12$N3jCPMPEZTisbMf7PG9O7ePgTQEJjhNXGHOJ9zvovT8ibY3Uk.Xlm";
salt = hash.substring(0, 29);
System.out.println("salt=" + salt);
String hsh = hash.substring(29, hash.length());
System.out.println("hash=" + hsh);
}
/**
@@ -105,8 +105,8 @@ public class EncryptionManager {
* </code> <p> To check whether a plaintext password matches one that has
* been hashed previously, use the checkpw method: <p> <code> if
* (BCrypt.checkpw(candidate_password, stored_hash))<br />
* &nbsp;&nbsp;&nbsp;&nbsp;System.out.println("It matches");<br /> else<br
* /> &nbsp;&nbsp;&nbsp;&nbsp;System.out.println("It does not match");<br />
* </code> <p> The gensalt() method takes an optional parameter (log_rounds)
* that determines the computational complexity of the hashing: <p> <code>
* String strong_salt = BCrypt.gensalt(10)<br /> String stronger_salt =
@@ -1,5 +1,7 @@
package core.game.world
import core.api.log
import core.tools.Log
import core.tools.SystemLogger
import java.lang.management.ManagementFactory
@@ -17,9 +19,9 @@ class DeadlockDetector : Runnable {
if (threadInfo != null) {
for (thread in Thread.getAllStackTraces().keys) {
if (thread.id == threadInfo.threadId) {
SystemLogger.logErr(this::class.java, threadInfo.toString().trim())
log(this::class.java, Log.ERR, threadInfo.toString().trim())
for (ste in thread.stackTrace) {
SystemLogger.logErr(this::class.java, "\t" + ste.toString().trim { it <= ' ' })
log(this::class.java, Log.ERR, "\t" + ste.toString().trim { it <= ' ' })
}
}
}
+2 -4
View File
@@ -17,12 +17,11 @@ import core.ServerConstants
import core.ServerStore
import core.auth.AuthProvider
import core.auth.Auth
import core.tools.SystemLogger
import core.tools.SystemLogger.logInfo
import core.game.system.config.ConfigParser
import core.game.world.repository.Repository
import core.plugin.ClassScanner
import core.storage.AccountStorageProvider
import core.tools.Log
import core.worker.MajorUpdateWorker
import java.text.SimpleDateFormat
import java.util.*
@@ -163,7 +162,7 @@ object GameWorld {
*/
@Throws(Throwable::class)
fun prompt(run: Boolean, directory: String?){
logInfo(GameWorld::class.java, "Prompting ${settings?.name} Game World...")
log(GameWorld::class.java, Log.FINE, "Prompting ${settings?.name} Game World...")
Cache.init(ServerConstants.CACHE_PATH)
//go overboard with checks to make sure dev mode authenticator never triggers on live
Auth.configure()
@@ -187,7 +186,6 @@ object GameWorld {
}
System.gc()
SystemLogger.initTradeLogger()
}
/**
@@ -1,7 +1,9 @@
package core.game.world
import core.api.log
import core.game.system.task.Pulse
import core.game.bots.GeneralBotCreator
import core.tools.Log
import core.tools.SystemLogger
import java.util.concurrent.LinkedBlockingQueue
@@ -26,7 +28,7 @@ class PulseRunner {
pulses.add(pulse)
}
} catch (e: Exception) {
SystemLogger.logErr(this::class.java, "Pulse execution error. Stack trace below.")
log(this::class.java, Log.ERR, "Pulse execution error. Stack trace below.")
e.printStackTrace()
}
}
@@ -46,15 +48,15 @@ class PulseRunner {
private fun notifyIfTooLong(pulse: Pulse, elapsedTime: Long) {
if (elapsedTime >= 100) {
if (pulse is GeneralBotCreator.BotScriptPulse) {
SystemLogger.logWarn(this::class.java, "CRITICALLY long bot-script tick - ${pulse.botScript.javaClass.name} took $elapsedTime ms")
log(this::class.java, Log.WARN, "CRITICALLY long bot-script tick - ${pulse.botScript.javaClass.name} took $elapsedTime ms")
} else {
SystemLogger.logWarn(this::class.java, "CRITICALLY long running pulse - ${pulse.javaClass.name} took $elapsedTime ms")
log(this::class.java, Log.WARN, "CRITICALLY long running pulse - ${pulse.javaClass.name} took $elapsedTime ms")
}
} else if (elapsedTime >= 30) {
if (pulse is GeneralBotCreator.BotScriptPulse) {
SystemLogger.logWarn(this::class.java, "Long bot-script tick - ${pulse.botScript.javaClass.name} took $elapsedTime ms")
log(this::class.java, Log.WARN, "Long bot-script tick - ${pulse.botScript.javaClass.name} took $elapsedTime ms")
} else {
SystemLogger.logWarn(this::class.java, "Long running pulse - ${pulse.javaClass.name} took $elapsedTime ms")
log(this::class.java, Log.WARN, "Long running pulse - ${pulse.javaClass.name} took $elapsedTime ms")
}
}
}
@@ -6,6 +6,7 @@ import core.game.node.item.GroundItem;
import core.game.node.item.Item;
import core.game.node.scenery.Constructed;
import core.game.node.scenery.Scenery;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.world.map.build.LandscapeParser;
import core.net.packet.IoBuffer;
@@ -13,6 +14,8 @@ import core.net.packet.out.ClearScenery;
import core.net.packet.out.ConstructGroundItem;
import core.net.packet.out.ConstructScenery;
import static core.api.ContentAPIKt.log;
import java.util.Arrays;
/**
@@ -89,7 +92,7 @@ public class BuildRegionChunk extends RegionChunk {
@Override
public void rotate(Direction direction) {
if (rotation != 0) {
SystemLogger.logErr(this.getClass(), "Region chunk was already rotated!");
log(this.getClass(), Log.ERR, "Region chunk was already rotated!");
return;
}
Scenery[][][] copy = new Scenery[ARRAY_SIZE][SIZE][SIZE];
@@ -258,7 +261,7 @@ public class BuildRegionChunk extends RegionChunk {
System.err.print(", ");
}
}
SystemLogger.logErr(this.getClass(), "]!");
log(this.getClass(), Log.ERR, "]!");
throw new IllegalStateException("Insufficient array length for storing all objects! ");
}
@@ -10,6 +10,7 @@ import core.game.world.map.build.DynamicRegion;
import core.game.world.map.build.LandscapeParser;
import core.game.world.map.build.MapscapeParser;
import core.game.world.map.zone.RegionZone;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.system.config.XteaParser;
import core.game.world.GameWorld;
@@ -21,6 +22,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import static core.api.ContentAPIKt.log;
/**
* Represents a region.
*
@@ -344,13 +347,13 @@ public class Region {
*/
private static boolean unload(Region r) {
if (r.isViewed()) {
SystemLogger.logErr(CommunicationInfo.class, "Players viewing region!");
log(CommunicationInfo.class, Log.ERR, "Players viewing region!");
r.flagActive();
return false;
}
for (RegionPlane p : r.planes) {
if (!p.getPlayers().isEmpty()) {
SystemLogger.logErr(CommunicationInfo.class, "Players still in region!");
log(CommunicationInfo.class, Log.ERR, "Players still in region!");
r.flagActive();
return false;
}
@@ -393,7 +396,7 @@ public class Region {
public int decrementViewAmount() {
synchronized (this) {
if (viewAmount < 1) {
//SystemLogger.logErr(this.getClass(), "View amount is " + (viewAmount - 1));
//log(this.getClass(), Log.ERR, "View amount is " + (viewAmount - 1));
viewAmount++;
}
return --viewAmount;
@@ -4,6 +4,7 @@ import core.game.node.entity.player.Player;
import core.game.node.item.GroundItem;
import core.game.node.item.Item;
import core.game.node.scenery.Scenery;
import core.tools.Log;
import core.tools.SystemLogger;
import core.game.world.map.build.DynamicRegion;
import core.game.world.map.build.LandscapeParser;
@@ -17,6 +18,8 @@ import core.net.packet.out.UpdateAreaPosition;
import java.util.ArrayList;
import java.util.List;
import static core.api.ContentAPIKt.log;
/**
* Represents a region chunk.
* @author Emperor
@@ -182,7 +185,7 @@ public class RegionChunk {
*/
public void rotate(Direction direction) {
if (rotation != 0) {
SystemLogger.logErr(this.getClass(), "Region chunk was already rotated!");
log(this.getClass(), Log.ERR, "Region chunk was already rotated!");
return;
}
Scenery[][] copy = new Scenery[SIZE][SIZE];
@@ -1,11 +1,13 @@
package core.game.world.map
import core.api.log
import core.game.node.Node
import core.game.node.entity.Entity
import core.game.node.entity.npc.NPC
import core.game.node.entity.player.Player
import core.game.node.scenery.Scenery
import core.game.world.map.zone.ZoneBorders
import core.tools.Log
import core.tools.RandomFunction
import core.tools.SystemLogger
import java.util.*
@@ -43,7 +45,7 @@ object RegionManager {
LOCK.unlock()
return REGION_CACHE[regionId]!!
}
SystemLogger.logErr(this::class.java, "UNABLE TO OBTAIN LOCK WHEN GETTING REGION BY ID. RETURNING BLANK REGION.")
log(this::class.java, Log.ERR, "UNABLE TO OBTAIN LOCK WHEN GETTING REGION BY ID. RETURNING BLANK REGION.")
return Region(0,0)
}
@@ -47,7 +47,7 @@ public final class LandscapeParser {
int z = location >> 12;
r.setObjectCount(r.getObjectCount() + 1);
if (x < 0 || y < 0 || x >= 64 || y >= 64) {
System.out.println("Object out of bounds: " + objectId + " - " + x + ", " + y + ", " + z);
} else {
if ((mapscape[1][x][y] & 0x2) == 2) {
z--;
@@ -19,7 +19,7 @@ public class ObjectParser implements StartupListener {
if(ServerConstants.OBJECT_PARSER_PATH == null) return;
File f = new File(ServerConstants.OBJECT_PARSER_PATH);
if(!f.exists()){
System.out.println("[ObjectParser]: Can't find file " + ServerConstants.OBJECT_PARSER_PATH);
return;
}
@@ -30,7 +30,7 @@ public class ObjectParser implements StartupListener {
NodeList parseList = doc.getElementsByTagName("ObjectAction");
System.out.println("Parsing " + parseList.getLength() + " object modifications.");
for(int i = 0; i < parseList.getLength(); i++){
Node parseNode = parseList.item(i);
@@ -1,10 +1,12 @@
package core.game.world.repository
import core.api.log
import core.game.node.entity.player.Player
import core.game.node.entity.player.info.login.PlayerParser
import core.game.system.task.TaskExecutor
import core.tools.SystemLogger
import core.game.world.GameWorld
import core.tools.Log
import java.util.*
import java.util.concurrent.ConcurrentHashMap
@@ -50,11 +52,11 @@ class DisconnectionQueue {
return false
}
if (entry.isClear) {
SystemLogger.logInfo(this::class.java, "Clearing player...")
log(this::class.java, Log.FINE, "Clearing player...")
player.clear()
}
Repository.removePlayer(player)
SystemLogger.logInfo(this::class.java, "Player cleared. Removed ${player.details.username}")
log(this::class.java, Log.INFO, "Player cleared. Removed ${player.details.username}")
try {
if(player.communication.clan != null)
player.communication.clan.leave(player, false)
@@ -5,6 +5,7 @@ import core.plugin.Plugin
import org.json.simple.JSONObject
import core.ServerStore
import core.plugin.ClassScanner
import core.tools.Log
import java.util.*
/**
@@ -42,7 +43,7 @@ open class WorldEvent(var name: String) {
* Used to log world event messages in a standard and organized way.
*/
fun log(message: String){
SystemLogger.logInfo(this::class.java, "[World Events($name)] $message")
core.api.log(this::class.java, Log.FINE, "[World Events($name)] $message")
}
/**