diff --git a/Management-Server/.mvn/wrapper/maven-wrapper.jar b/Management-Server/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index bf82ff01c..000000000 Binary files a/Management-Server/.mvn/wrapper/maven-wrapper.jar and /dev/null differ diff --git a/Management-Server/.mvn/wrapper/maven-wrapper.properties b/Management-Server/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 84b111fb2..000000000 --- a/Management-Server/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,18 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar diff --git a/Management-Server/.run/Run MS.run.xml b/Management-Server/.run/Run MS.run.xml deleted file mode 100644 index 4a760c0df..000000000 --- a/Management-Server/.run/Run MS.run.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - \ No newline at end of file diff --git a/Management-Server/.run/[Windows] Run MS.run.xml b/Management-Server/.run/[Windows] Run MS.run.xml deleted file mode 100644 index adcafe596..000000000 --- a/Management-Server/.run/[Windows] Run MS.run.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - \ No newline at end of file diff --git a/Management-Server/managementprops/properties.json b/Management-Server/managementprops/properties.json deleted file mode 100644 index e081156a1..000000000 --- a/Management-Server/managementprops/properties.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "DatabaseInformation": { - "database_name": "global", - "database_username": "root", - "database_password": "", - "database_host": "127.0.0.1", - "database_port": "3306" - }, - - "WorldTechnicalInformation": { - "world_limit": "10", - "worldhop_delay": "20000" - }, - "secret_key": "2009scape_development" -} \ No newline at end of file diff --git a/Management-Server/mvnw b/Management-Server/mvnw deleted file mode 100755 index b7f064624..000000000 --- a/Management-Server/mvnw +++ /dev/null @@ -1,287 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Apache Maven Wrapper startup batch script, version 3.1.1 -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /usr/local/etc/mavenrc ] ; then - . /usr/local/etc/mavenrc - fi - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - JAVA_HOME="`/usr/libexec/java_home`"; export JAVA_HOME - else - JAVA_HOME="/Library/Java/Home"; export JAVA_HOME - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`\\unset -f command; \\command -v java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - printf '%s' "$(cd "$basedir"; pwd)" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=$(find_maven_basedir "$(dirname $0)") -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" - else - wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) wrapperUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $wrapperUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - QUIET="--quiet" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - QUIET="" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" - else - wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" - fi - [ $? -eq 0 ] || rm -f "$wrapperJarPath" - elif command -v curl > /dev/null; then - QUIET="--silent" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - QUIET="" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L - else - curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L - fi - [ $? -eq 0 ] || rm -f "$wrapperJarPath" - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaSource="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaSource=`cygpath --path --windows "$javaSource"` - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaSource" ]; then - if [ ! -e "$javaClass" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaSource") - fi - if [ -e "$javaClass" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - $MAVEN_DEBUG_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/Management-Server/mvnw.cmd b/Management-Server/mvnw.cmd deleted file mode 100644 index 474c9d6b7..000000000 --- a/Management-Server/mvnw.cmd +++ /dev/null @@ -1,187 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Apache Maven Wrapper startup batch script, version 3.1.1 -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* -if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" - -FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.1/maven-wrapper-3.1.1.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %WRAPPER_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% ^ - %JVM_CONFIG_MAVEN_PROPS% ^ - %MAVEN_OPTS% ^ - %MAVEN_DEBUG_OPTS% ^ - -classpath %WRAPPER_JAR% ^ - "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ - %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" -if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%"=="on" pause - -if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% - -cmd /C exit /B %ERROR_CODE% diff --git a/Management-Server/pom.xml b/Management-Server/pom.xml deleted file mode 100644 index 2993573b7..000000000 --- a/Management-Server/pom.xml +++ /dev/null @@ -1,153 +0,0 @@ - - - 4.0.0 - org.rs09 - managementserver - 1.0.0 - - ms.Management - true - 1.6.21 - 1.6 - 5.7.0 - 11 - 11 - - - - org.jetbrains.kotlin - kotlin-stdlib-jdk8 - ${kotlin.version} - compile - - - com.googlecode.json-simple - json-simple - 1.1.1 - compile - - - com.github.ajalt.mordant - mordant-jvm - 2.0.0-beta6 - compile - - - mysql - mysql-connector-java - 8.0.21 - compile - - - org.junit.jupiter - junit-jupiter-api - ${junit.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - test - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.1 - - - - jar-with-dependencies - - - ${project.mainClassName} - - - - - - make-assembly - package - - single - - - - - - - org.jetbrains.kotlin - kotlin-maven-plugin - ${kotlin.version} - - - compile - - compile - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/main/java - - - - - test-compile - test-compile - - - ${project.basedir}/src/test/kotlin - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - false - - - - - default-compile - none - - - - default-testCompile - none - - - java-compile - compile - - compile - - - - java-test-compile - test-compile - - testCompile - - - - - - maven-surefire-plugin - 2.22.0 - - - maven-failsafe-plugin - 2.22.0 - - - - diff --git a/Management-Server/src/main/java/ms/Management.java b/Management-Server/src/main/java/ms/Management.java deleted file mode 100644 index 5d44a4e37..000000000 --- a/Management-Server/src/main/java/ms/Management.java +++ /dev/null @@ -1,197 +0,0 @@ -package ms; - -import ms.net.NioReactor; -import ms.net.packet.IoBuffer; -import ms.net.packet.PacketHeader; -import ms.net.packet.WorldPacketRepository; -import ms.system.ShutdownSequence; -import ms.system.mysql.SQLManager; -import ms.system.util.Command; -import ms.system.util.ManagementConfigParser; -import ms.world.GameServer; -import ms.world.PlayerSession; -import ms.world.WorldDatabase; - -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.nio.charset.StandardCharsets; -import java.util.Scanner; - -/** - * The main class. - * @author Emperor - * - */ -public final class Management { - - /** - * If the shutdown hook is active. - */ - public static boolean active = true; - - /** - * The commands. - */ - private static final Command[] COMMANDS = { - new Command("-commands", "Print a list of all commands.") { - @Override - public void run(String...args) { - for (Command c : COMMANDS) { - System.out.println("Command " + c.getName() + ": " + c.getInfo()); - } - } - }, - new Command("-s", "Safely shuts down the server.") { - @Override - public void run(String...args) { - System.out.println("Shutting down Management server..."); - ShutdownSequence.shutdown(); - } - }, - new Command("-debug", "Debug world info.") { - @Override - public void run(String...args) { - System.out.println("---------------------------------------------"); - for (GameServer server : WorldDatabase.getWorlds()) { - if (server != null) { - System.out.println("World [id=" + server.getInfo().getWorldId() + ", IP=" + server.getInfo().getAddress() + ", country=" + server.getInfo().getCountry() + ", members=" + server.getInfo().isMembers() + ", players=" + server.getPlayers().size() + ", active=" + server.isActive() + "]."); - } - } - } - }, - new Command("-pinfo", "Debugs player information (usage: -pinfo emperor).") { - @Override - public void run(String...args) { - String name = args[1]; - PlayerSession player = WorldDatabase.getPlayer(name); - if (player == null) { - System.out.println("Player " + name + " was not registered!"); - return; - } - System.out.println("Player [name=" + name + ", world=" + player.getWorldId() + ", active=" + player.isActive() + "]."); - } - }, - new Command("-update", "Calls an update on all the game servers (-update -1 to cancel).") { - @Override - public void run(String...args) { - int ticks = Integer.parseInt(args[1]); - for (GameServer server : WorldDatabase.getWorlds()) { - if (server != null && server.isActive()) { - WorldPacketRepository.sendUpdate(server, ticks); - } - } - } - }, - new Command("-reloadconfig", "Reloads the configurations of all worlds.") { - - @Override - public void run(String... args) { - for (GameServer server : WorldDatabase.getWorlds()) { - if(server == null) { - continue; - } - WorldPacketRepository.sendConfigReload(server); - } - } - }, - - new Command("-rlcache", "Reloads launcher/client resource cache") { - @Override - public void run(String... args) { - System.out.println("Reloaded resource cache!"); - } - }, - - new Command("-kick", "Kicks a player from the MS (not ingame).") { - @Override - public void run(String... args) { - String name = args[1]; - PlayerSession player = WorldDatabase.getPlayer(name); - if (player == null) { - System.out.println("Player " + name + " was not registered!"); - return; - } - player.getWorld().getPlayers().remove(name); - player.setWorldId(0); - System.out.println("Kicked player " + name + "!"); - } - }, - - new Command("-say", "Send a message to all worlds") { - @Override - public void run(String... args) { - String message = String.join(" ", args); - message = message.substring(4); - for(GameServer server : WorldDatabase.getWorlds()){ - if(server == null) continue; - String finalMessage = message; - server.getPlayers().forEach((String uname, PlayerSession p) -> { - IoBuffer buffer = new IoBuffer(5, PacketHeader.BYTE); - buffer.putString(p.getUsername()); - buffer.putString("Server"); - buffer.put(2); - buffer.put(2); - buffer.putString(finalMessage); - p.getWorld().getSession().write(buffer); - }); - } - } - } - }; - - /** - * The main method. - * @param args The arguments cast on runtime. - * @throws Throwable When an exception occurs. - */ - public static void main(String...args) throws Throwable { - if (!isLocallyHosted(ServerConstants.HOST_ADDRESS)) { - System.err.println("WARNING: Configure host address in server constants!"); - } - System.out.println("-------- 530 Management server --------"); - System.out.println("Starting up..."); - new ManagementConfigParser("managementprops" + File.separator + "properties.json"); - SQLManager.init(); - //NioReactor.configure(ServerConstants.PORT).start(); - NioReactor.configure(5555).start(); - Runtime.getRuntime().addShutdownHook(new ShutdownSequence()); - System.out.println("Status: ready."); - System.out.println("Use -commands for a list of commands!"); - Scanner s = new Scanner(new InputStreamReader(System.in, StandardCharsets.UTF_8)); - while (s.hasNext()) { - try { - String command = s.nextLine(); - if (!command.startsWith("-")) { - continue; - } - String[] arguments = command.split(" "); - command = arguments[0]; - for (Command c : COMMANDS) { - if (c.getName().equals(command)) { - System.out.println("Handling command \"" + command + "\"!"); - c.run(arguments); - } - } - } catch (Throwable t) { - t.printStackTrace(); - } - } - s.close(); - } - - /** - * Checks if the Management server is locally hosted. - * @return {@code True} if so. - * @throws IOException When an I/O exception occurs. - */ - private static boolean isLocallyHosted(String ip) throws IOException { - InetAddress address = InetAddress.getByName(ip); - if (address.isAnyLocalAddress() || address.isLoopbackAddress()) { - return true; - } - return NetworkInterface.getByInetAddress(address) != null; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/ServerConstants.java b/Management-Server/src/main/java/ms/ServerConstants.java deleted file mode 100644 index 60d4af36d..000000000 --- a/Management-Server/src/main/java/ms/ServerConstants.java +++ /dev/null @@ -1,52 +0,0 @@ -package ms; - -import ms.system.OperatingSystem; - -/** - * Holds constants for the management server. - * @author v4rg - * - */ -public final class ServerConstants { - - /** - * The maximum amount of worlds. - */ - public static final int WORLD_LIMIT = 10; - - /** - * The world switching delay in milliseconds. - */ - public static final long WORLD_SWITCH_DELAY = 20_000L; - - /** - * The address of the Management server. - */ - public static final String HOST_ADDRESS = "127.0.0.1"; - - /** - * The operating system of the management server - */ - public static final OperatingSystem OS = System.getProperty("os.name").toUpperCase().contains("WIN") ? OperatingSystem.WINDOWS : OperatingSystem.UNIX; - - /** - * Stops from instantiating. - */ - private ServerConstants() { - /* - * empty. - */ - } - - /** - * Fixes a path to a specified operating system - * @param operatingSystem The os type. - * @param path The path. - * @return The fixed path. - */ - public static String fixPath(OperatingSystem operatingSystem, String path) { - if (operatingSystem == null) - operatingSystem = OS; - return operatingSystem == OperatingSystem.WINDOWS ? path.replace("/","\\") : path.replace("\\","/"); - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/EventProducer.java b/Management-Server/src/main/java/ms/net/EventProducer.java deleted file mode 100644 index 9f3093c1c..000000000 --- a/Management-Server/src/main/java/ms/net/EventProducer.java +++ /dev/null @@ -1,28 +0,0 @@ -package ms.net; - -import java.nio.ByteBuffer; - -/** - * Used for producing I/O events. - * @author Emperor - * - */ -public interface EventProducer { - - /** - * Produces a new read event. - * @param session The session. - * @param buffer The buffer to read. - * @return The read event handler. - */ - IoReadEvent produceReader(IoSession session, ByteBuffer buffer); - - /** - * Produces a new writing event. - * @param session The session. - * @param context The context. - * @return The write event handler. - */ - IoWriteEvent produceWriter(IoSession session, Object context); - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/IoEventHandler.java b/Management-Server/src/main/java/ms/net/IoEventHandler.java deleted file mode 100644 index 1971fffa7..000000000 --- a/Management-Server/src/main/java/ms/net/IoEventHandler.java +++ /dev/null @@ -1,119 +0,0 @@ -package ms.net; - -import ms.world.WorldDatabase; -import ms09.MSLogger; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.ClosedChannelException; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; -import java.nio.channels.ServerSocketChannel; -import java.nio.channels.SocketChannel; -import java.util.Arrays; -import java.util.concurrent.ExecutorService; - -/** - * I/O event handling. - * @author Emperor - * - */ -public final class IoEventHandler { - - /** - * The executor service. - */ - private final ExecutorService service; - - /** - * Constructs a new {@code IoEventHandler}. - * @param service The executor service used for handling events. - */ - public IoEventHandler(ExecutorService service) { - this.service = service; - } - - /** - * Called when making a new connection. - * @param key The selection key. - */ - public void connect(SelectionKey key) { - /* - * empty. - */ - } - - /** - * Used for accepting a new connection. - * @param key The selection key. - * @param selector The selector. - * @throws IOException When an I/O exception occurs. - */ - public void accept(SelectionKey key, Selector selector) throws IOException { - SocketChannel sc = ((ServerSocketChannel) key.channel()).accept(); - sc.configureBlocking(false); - sc.socket().setTcpNoDelay(true); - sc.register(selector, SelectionKey.OP_READ); - } - - /** - * Reads the incoming packet data. - * @param key The selection key. - * @throws IOException When an I/O exception occurs. - */ - public void read(SelectionKey key) throws IOException { - ReadableByteChannel channel = (ReadableByteChannel) key.channel(); - ByteBuffer buffer = ByteBuffer.allocate(100_000); - IoSession session = (IoSession) key.attachment(); - if (channel.read(buffer) == -1) { - if(session == null){ - key.cancel(); - return; - } - if(session.getGameServer() != null){ - WorldDatabase.unRegister(session.getGameServer()); - } - session.disconnect(); - key.cancel(); - return; - } - buffer.flip(); - if (session == null) { - key.attach(session = new IoSession(key, service)); - } - service.execute(session.getProducer().produceReader(session, buffer)); - } - - /** - * Writes the outgoing packet data. - * @param key The selection key. - */ - public void write(SelectionKey key) { - IoSession session = (IoSession) key.attachment(); - if(session != null) { - key.interestOps(key.interestOps() & ~SelectionKey.OP_WRITE); - session.write(); - } - } - - /** - * Disconnects a connection. - * @param key The selection key. - * @param t The occurred exception (if any). - */ - public void disconnect(SelectionKey key, Throwable t) { - try { - IoSession session = (IoSession) key.attachment(); - String cause = "" + t; - if (t != null && !(t instanceof ClosedChannelException || cause.contains("De externe host") || cause.contains("De software op uw") || cause.contains("An established connection was aborted") || cause.contains("An existing connection") || cause.contains("AsynchronousClose"))) { - t.printStackTrace(); - } - if (session != null) { - session.disconnect(); - } - } catch (Throwable e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/IoReadEvent.java b/Management-Server/src/main/java/ms/net/IoReadEvent.java deleted file mode 100644 index 74de5d5bd..000000000 --- a/Management-Server/src/main/java/ms/net/IoReadEvent.java +++ /dev/null @@ -1,73 +0,0 @@ -package ms.net; - -import java.nio.ByteBuffer; - -/** - * Handles a reading event. - * @author Emperor - * - */ -public abstract class IoReadEvent implements Runnable { - - /** - * The I/O session. - */ - private final IoSession session; - - /** - * The buffer. - */ - private ByteBuffer buffer; - - /** - * If the queued reading buffer was used (debugging purposes). - */ - protected boolean usedQueuedBuffer; - - /** - * Constructs a new {@code IoReadEvent}. - * @param session The session. - * @param buffer The buffer to read from. - */ - public IoReadEvent(IoSession session, ByteBuffer buffer) { - this.session = session; - this.buffer = buffer; - } - - @Override - public void run() { - try { - if (session.getReadingQueue() != null) { - buffer = session.getReadingQueue().put(buffer); - buffer.flip(); - session.setReadingQueue(null); - usedQueuedBuffer = true; - } - read(session, buffer); - } catch (Throwable t) { - t.printStackTrace(); - session.disconnect(); - } - } - - /** - * Queues the buffer until more data has been received. - * @param data The data that has been read already. - */ - public void queueBuffer(int...data) { - ByteBuffer queue = ByteBuffer.allocate(data.length + buffer.remaining() + 100_000); - for (int value : data) { - queue.put((byte) value); - } - queue.put(buffer); - session.setReadingQueue(queue); - } - - /** - * Reads the data from the buffer. - * @param session The session. - * @param buffer The buffer to read from. - */ - public abstract void read(IoSession session, ByteBuffer buffer); - -} diff --git a/Management-Server/src/main/java/ms/net/IoSession.java b/Management-Server/src/main/java/ms/net/IoSession.java deleted file mode 100644 index c14a4a641..000000000 --- a/Management-Server/src/main/java/ms/net/IoSession.java +++ /dev/null @@ -1,354 +0,0 @@ -package ms.net; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.SelectionKey; -import java.nio.channels.SocketChannel; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import ms.ServerConstants; -import ms.net.producer.HSEventProducer; -import ms.world.GameServer; - -/** - * Represents a connected I/O session. - * @author Emperor - * - */ -public class IoSession { - - /** - * The handshake event producer. - */ - private static final EventProducer HANDSHAKE_PRODUCER = new HSEventProducer(); - - /** - * The selection key. - */ - private final SelectionKey key; - - /** - * The executor service. - */ - private final ExecutorService service; - - /** - * The event producer. - */ - private EventProducer producer = HANDSHAKE_PRODUCER; - - /** - * The currently queued writing data. - */ - private List writingQueue = new ArrayList<>(20); - - /** - * The currently queued reading data. - */ - private ByteBuffer readingQueue; - - /** - * The writing lock. - */ - private final Lock writingLock = new ReentrantLock(); - - /** - * The name hash. - */ - private int nameHash; - - /** - * The server key. - */ - private long serverKey; - - /** - * The JS-5 encryption value. - */ - private int js5Encryption; - - /** - * If the session is active. - */ - private boolean active = true; - - /** - * The last ping time stamp. - */ - private long lastPing; - - /** - * The address. - */ - private final String address; - - /** - * The game server object for this session. - */ - private GameServer gameServer; - - /** - * Constructs a new {@code IoSession}. - * @param key The selection key. - * @param service The executor service. - */ - public IoSession(SelectionKey key, ExecutorService service) { - this.key = key; - this.service = service; - String address = getRemoteAddress().replaceAll("/", "").split(":")[0]; - if (address.equals("127.0.0.1")) { - address = ServerConstants.HOST_ADDRESS; - } - this.address = address; - } - - /** - * Fires a write event created using the current event producer. - * @param context The event context. - */ - public void write(Object context) { - write(context, false); - } - - /** - * Fires a write event created using the current event producer. - * @param context The event context. - * @param instant If the event should be instantly executed on this thread. - */ - public void write(Object context, boolean instant) { - if (context == null) { - throw new IllegalStateException("Invalid writing context!"); - } - if (instant) { - producer.produceWriter(this, context).run(); - return; - } - service.execute(producer.produceWriter(this, context)); - } - - /** - * Sends the packet data (without write event encoding). - * @param buffer The buffer. - */ - public void queue(ByteBuffer buffer) { - try { - if(writingLock.tryLock(1000L, TimeUnit.MILLISECONDS)){ - writingQueue.add(buffer); - writingLock.unlock(); - write(); - } - } catch (Exception e){ - e.printStackTrace(); - writingLock.unlock(); - } - } - - /** - * Handles the writing of all buffers in the queue. - */ - public void write() { - - if (!key.isValid()) { - disconnect(); - return; - } - writingLock.lock(); - SocketChannel channel = (SocketChannel) key.channel(); - try { - while (!writingQueue.isEmpty()) { - ByteBuffer buffer = writingQueue.get(0); - channel.write(buffer); - if (buffer.hasRemaining()) { - key.interestOps(key.interestOps() | SelectionKey.OP_WRITE); - break; - } - writingQueue.remove(0); - } - } catch (IOException e) { - e.printStackTrace(); - disconnect(); - } finally { - writingLock.unlock(); - } - } - - /** - * Disconnects the session. - */ - public void disconnect() { - try { - if (!active) { - return; - } - active = false; - key.cancel(); - SocketChannel channel = (SocketChannel) key.channel(); - channel.socket().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - /** - * Gets the IP-address (without the port). - * @return The address. - */ - public String getAddress() { - return address; - } - - /** - * Gets the remote address of this session. - * @return The remote address, as a String. - */ - public String getRemoteAddress() { - try { - return ((SocketChannel) key.channel()).getRemoteAddress().toString(); - } catch (IOException e) { - throw new IllegalStateException(e); - } - } - - /** - * Gets the current event producer. - * @return The producer. - */ - public EventProducer getProducer() { - return producer; - } - - /** - * Sets the event producer. - * @param producer The producer to set. - */ - public void setProducer(EventProducer producer) { - this.producer = producer; - } - - /** - * Gets the queued reading data. - * @return The readingQueue. - */ - public ByteBuffer getReadingQueue() { - synchronized (this) { - return readingQueue; - } - } - - /** - * Queues reading data. - * @param readingQueue The readingQueue to set. - */ - public void setReadingQueue(ByteBuffer readingQueue) { - synchronized (this) { - this.readingQueue = readingQueue; - } - } - - /** - * Gets the writing lock. - * @return The writing lock. - */ - public Lock getWritingLock() { - return writingLock; - } - - /** - * Gets the selection key. - * @return The selection key. - */ - public SelectionKey getKey() { - return key; - } - - /** - * @return The active. - */ - public boolean isActive() { - return active; - } - - /** - * @return The js5Encryption. - */ - public int getJs5Encryption() { - return js5Encryption; - } - - /** - * @param js5Encryption The js5Encryption to set. - */ - public void setJs5Encryption(int js5Encryption) { - this.js5Encryption = js5Encryption; - } - - /** - * Gets the lastPing. - * @return The lastPing. - */ - public long getLastPing() { - return lastPing; - } - - /** - * Sets the lastPing. - * @param lastPing The lastPing to set. - */ - public void setLastPing(long lastPing) { - this.lastPing = lastPing; - } - - /** - * Gets the nameHash. - * @return The nameHash. - */ - public int getNameHash() { - return nameHash; - } - - /** - * Sets the nameHash. - * @param nameHash The nameHash to set. - */ - public void setNameHash(int nameHash) { - this.nameHash = nameHash; - } - - /** - * Gets the serverKey. - * @return The serverKey. - */ - public long getServerKey() { - return serverKey; - } - - /** - * Sets the serverKey. - * @param serverKey The serverKey to set. - */ - public void setServerKey(long serverKey) { - this.serverKey = serverKey; - } - - /** - * Gets the gameServer value. - * @return The gameServer. - */ - public GameServer getGameServer() { - return gameServer; - } - - /** - * Sets the gameServer value. - * @param gameServer The gameServer to set. - */ - public void setGameServer(GameServer gameServer) { - this.gameServer = gameServer; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/IoWriteEvent.java b/Management-Server/src/main/java/ms/net/IoWriteEvent.java deleted file mode 100644 index 5ed73d653..000000000 --- a/Management-Server/src/main/java/ms/net/IoWriteEvent.java +++ /dev/null @@ -1,50 +0,0 @@ -package ms.net; - -import java.nio.channels.CancelledKeyException; - -/** - * Handles a writing event. - * @author Emperor - */ -public abstract class IoWriteEvent implements Runnable { - - /** - * The I/O session. - */ - private final IoSession session; - - /** - * The buffer. - */ - private final Object context; - - /** - * Constructs a new {@code IoWriteEvent}. - * @param session The session. - * @param context The write event context. - */ - public IoWriteEvent(IoSession session, Object context) { - this.session = session; - this.context = context; - } - - @Override - public void run() { - try { - write(session, context); - } catch (Throwable t) { - if (!(t instanceof CancelledKeyException)) { - t.printStackTrace(); - } - session.disconnect(); - } - } - - /** - * Writes the data. - * @param session The session. - * @param context The write event context. - */ - public abstract void write(IoSession session, Object context); - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/NioReactor.java b/Management-Server/src/main/java/ms/net/NioReactor.java deleted file mode 100644 index 21a17ec65..000000000 --- a/Management-Server/src/main/java/ms/net/NioReactor.java +++ /dev/null @@ -1,134 +0,0 @@ -package ms.net; - -import ms.Management; - -import java.io.IOException; -import java.net.InetSocketAddress; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; -import java.nio.channels.ServerSocketChannel; -import java.util.Iterator; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -/** - * Handles (NIO-based) networking events using the reactor pattern. - * @author Emperor - */ -public final class NioReactor implements Runnable { - - /** - * The executor service. - */ - private final ExecutorService service; - - /** - * The selector - */ - private Selector selector; - - /** - * The socket channel. - */ - private ServerSocketChannel channel; - - /** - * The I/O event handling instance. - */ - private final IoEventHandler eventHandler; - - /** - * If the reactor is running. - */ - private boolean running; - - /** - * Constructs a new {@code NioReactor}. - * @param poolSize The pool size. - */ - private NioReactor(int poolSize) { - this.service = Executors.newSingleThreadScheduledExecutor(); - this.eventHandler = new IoEventHandler(Executors.newFixedThreadPool(poolSize)); - } - - /** - * Creates and configures a new {@code NioReactor} with a pool size of 1. - * @param port The port. - * @return The {@code NioReactor} {@code Object}. - * @throws IOException When an I/O exception occurs. - */ - public static NioReactor configure(int port) throws IOException { - return configure(port, 1); - } - - /** - * Creates and configures a new {@code NioReactor}. - * @param port The port. - * @param poolSize The amount of threads in the thread pool. - * @return The {@code NioReactor} {@code Object}. - * @throws IOException When an I/O exception occurs. - */ - public static NioReactor configure(int port, int poolSize) throws IOException { - NioReactor reactor = new NioReactor(poolSize); - reactor.channel = ServerSocketChannel.open(); - reactor.selector = Selector.open(); - reactor.channel.bind(new InetSocketAddress(port)); - reactor.channel.configureBlocking(false); - reactor.channel.register(reactor.selector, SelectionKey.OP_ACCEPT); - return reactor; - } - - /** - * Starts the reactor. - */ - public void start() { - running = true; - service.execute(this); - } - - @Override - public void run() { - while (running && Management.active) { - try { - if(selector.select() > 0){ - Iterator keys = selector.selectedKeys().iterator(); - while (keys.hasNext()) { - SelectionKey key = keys.next(); - keys.remove(); - try { - if(key == null) continue; - if (!key.isValid() || !key.channel().isOpen()) { - key.cancel(); - continue; - } - if (key.isAcceptable()) { - eventHandler.accept(key, selector); - } - if (key.isReadable()) { - eventHandler.read(key); - } - else if (key.isWritable()) { - eventHandler.write(key); - } - } catch (Throwable t) { - eventHandler.disconnect(key, t); - } - } - } else { - System.out.println("SLEEPING"); - Thread.sleep(200); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - /** - * Terminates the reactor (once it's done processing current I/O events). - */ - public void terminate() { - running = false; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/event/HSReadEvent.java b/Management-Server/src/main/java/ms/net/event/HSReadEvent.java deleted file mode 100644 index 9a76cca2a..000000000 --- a/Management-Server/src/main/java/ms/net/event/HSReadEvent.java +++ /dev/null @@ -1,128 +0,0 @@ -package ms.net.event; - -import java.nio.ByteBuffer; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.Locale; - -import ms.Management; -import ms.net.IoReadEvent; -import ms.net.IoSession; -import ms.net.packet.IoBuffer; -import ms.system.mysql.SQLManager; -import ms.system.util.ManagementConstants; -import ms.world.PlayerSession; -import ms.world.WorldDatabase; -import ms.system.util.ByteBufferUtils; - -/** - * Handles handshake read events. - * @author Emperor - */ -public final class HSReadEvent extends IoReadEvent { - - /** - * Constructs a new {@code HSReadEvent}. - * @param session The session. - * @param buffer The buffer. - */ - public HSReadEvent(IoSession session, ByteBuffer buffer) { - super(session, buffer); - } - - @Override - public void read(IoSession session, ByteBuffer buffer) { - int opcode = buffer.get() & 0xFF; - switch (opcode) { - case 88: - String password = ByteBufferUtils.getString(buffer); - if (!password.equals(ManagementConstants.getSECRET_KEY())) { - System.out.println("Password mismatch (attempt=" + password + ")!"); - session.disconnect(); - break; - } - session.write(opcode); - break; - case 255: // World list - int updateStamp = buffer.getInt(); - WorldDatabase.sendUpdate(session, updateStamp); - break; - case 35: - IoBuffer buf = new IoBuffer(); - String username = ByteBufferUtils.getString(buffer).toLowerCase(); - password = ByteBufferUtils.getString(buffer); - if (!password.equals(ManagementConstants.getSECRET_KEY())){ - System.out.println("Password mismatch (attempt=" + password + ")!"); - buf.put(1); - ByteBuffer buff = buf.toByteBuffer(); - buff.flip(); - session.queue(buff); - return; - } - - PlayerSession player = WorldDatabase.getPlayer(username); - if (player == null) { - System.out.println("Player " + username + " was not registered!"); - buf.put(2); - ByteBuffer buff = buf.toByteBuffer(); - buff.flip(); - session.queue(buff); - return; - } - buf.put(0); - ByteBuffer buff = buf.toByteBuffer(); - buff.flip(); - session.queue(buff); - player.getWorld().getPlayers().remove(username); - player.setWorldId(0); - break; - case 36: - buf = new IoBuffer(); - username = ByteBufferUtils.getString(buffer).toLowerCase(); - password = ByteBufferUtils.getString(buffer); - int credits = buffer.getInt(); - if (!password.equals(ManagementConstants.getSECRET_KEY())){ - System.out.println("Password mismatch (attempt=" + password + ")!"); - buf.put(1); - buff = buf.toByteBuffer(); - buff.flip(); - session.queue(buff); - return; - } - try (Connection con = SQLManager.getConnection()) { - Statement stmt = con.createStatement(); - ResultSet rs = stmt.executeQuery("SELECT credits FROM members WHERE username = \"" + username + "\";"); - int original; - if (rs.next()) original = rs.getInt(1); - else { - buf.put(2); - buff = buf.toByteBuffer(); - buff.flip(); - session.queue(buff); - return; - } - stmt.execute("UPDATE members SET credits = " + (original + credits) + " WHERE username = \"" + username + "\";"); - buf.put(0); - buf.putInt(original + credits); - buff = buf.toByteBuffer(); - buff.flip(); - session.queue(buff); - } catch (Exception e) { - buf.put(3); - buf.putString(e.toString()); - buff = buf.toByteBuffer(); - buff.flip(); - session.queue(buff); - e.printStackTrace(); - } - break; - - default: - System.err.println("Unhandled handshake opcode: " + opcode + "."); - session.disconnect(); - break; - } - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/event/HSWriteEvent.java b/Management-Server/src/main/java/ms/net/event/HSWriteEvent.java deleted file mode 100644 index 2376b2a90..000000000 --- a/Management-Server/src/main/java/ms/net/event/HSWriteEvent.java +++ /dev/null @@ -1,38 +0,0 @@ -package ms.net.event; - -import java.nio.ByteBuffer; - -import ms.net.IoSession; -import ms.net.IoWriteEvent; -import ms.net.producer.RegistryEventProducer; - -/** - * Handles Handshake write events. - * @author Emperor - */ -public final class HSWriteEvent extends IoWriteEvent { - - /** - * The login event producer. - */ - private static final RegistryEventProducer REGISTRY_PRODUCER = new RegistryEventProducer(); - - /** - * Constructs a new {@code HSWriteEvent} {@code Object}. - * @param session The session. - * @param context The context. - */ - public HSWriteEvent(IoSession session, Object context) { - super(session, context); - } - - @Override - public void write(IoSession session, Object context) { - ByteBuffer buffer = ByteBuffer.allocate(9); - buffer.put((byte) 14); - session.setProducer( REGISTRY_PRODUCER); - buffer.flip(); - session.queue(buffer); - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/event/PacketReadEvent.java b/Management-Server/src/main/java/ms/net/event/PacketReadEvent.java deleted file mode 100644 index 227751b2f..000000000 --- a/Management-Server/src/main/java/ms/net/event/PacketReadEvent.java +++ /dev/null @@ -1,101 +0,0 @@ -package ms.net.event; - -import java.nio.ByteBuffer; - -import ms.net.IoReadEvent; -import ms.net.IoSession; -import ms.net.packet.WorldPacketRepository; - -/** - * Handles world packet reading events. - * @author Emperor - * - */ -public final class PacketReadEvent extends IoReadEvent { - - /** - * The packet sizes. - */ - private static final int[] PACKET_SIZE = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 - }; - - /** - * Constructs a new {@code PacketReadEvent} {@code Object}. - * @param session The I/O session. - * @param buffer The buffer to read from. - */ - public PacketReadEvent(IoSession session, ByteBuffer buffer) { - super(session, buffer); - } - - @Override - public void read(IoSession session, ByteBuffer buffer) { - int last = -1; - while (buffer.hasRemaining()) { - int opcode = buffer.get() & 0xFF; - if (opcode >= PACKET_SIZE.length) { - break; - } - int header = PACKET_SIZE[opcode]; - int size = header; - if (header < 0) { - size = getPacketSize(buffer, opcode, header, last); - } - if (size == -1) { - break; - } - if (buffer.remaining() < size) { - switch (header) { - case -2: - queueBuffer(opcode, size >> 8, size); - break; - case -1: - queueBuffer(opcode, size); - break; - default: - queueBuffer(opcode); - break; - } - break; - } - byte[] data = new byte[size]; - buffer.get(data); - last = opcode; - try { - WorldPacketRepository.handleIncoming(session, opcode, ByteBuffer.wrap(data)); - } catch (Throwable t) { - t.printStackTrace(); - } - } - } - - /** - * Gets the packet size for the given opcode. - * @param buffer The buffer. - * @param opcode The opcode. - * @param header The packet header. - * @param last The last opcode. - * @return The packet size. - */ - private int getPacketSize(ByteBuffer buffer, int opcode, int header, int last) { - if (header == -1) { - if (buffer.remaining() < 1) { - queueBuffer(opcode); - return -1; - } - return buffer.get() & 0xFF; - } - if (header == -2) { - if (buffer.remaining() < 2) { - queueBuffer(opcode); - return -1; - } - return buffer.getShort() & 0xFFFF; - } - System.err.println("Invalid packet [opcode=" + opcode + ", last=" + last + ", queued=" + usedQueuedBuffer + "]!"); - return -1; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/event/PacketWriteEvent.java b/Management-Server/src/main/java/ms/net/event/PacketWriteEvent.java deleted file mode 100644 index 3ffdeb32f..000000000 --- a/Management-Server/src/main/java/ms/net/event/PacketWriteEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -package ms.net.event; - -import java.nio.ByteBuffer; - -import ms.net.IoSession; -import ms.net.IoWriteEvent; -import ms.net.packet.IoBuffer; - -/** - * Handles world packet writing events. - * @author Emperor - * - */ -public final class PacketWriteEvent extends IoWriteEvent { - - - /** - * Constructs a new {@code PacketWriteEvent} {@code Object}. - * @param session The I/O session. - * @param context The packet context. - */ - public PacketWriteEvent(IoSession session, Object context) { - super(session, context); - } - - @Override - public void write(IoSession session, Object context) { - IoBuffer b = (IoBuffer) context; - int size = b.toByteBuffer().position(); - ByteBuffer buffer = ByteBuffer.allocate(1 + size + b.getHeader().ordinal()); - buffer.put((byte) b.opcode()); - switch (b.getHeader()) { - case NORMAL: - break; - case BYTE: - buffer.put((byte) size); - break; - case SHORT: - buffer.putShort((short) size); - break; - } - buffer.put((ByteBuffer) b.toByteBuffer().flip()); - session.queue((ByteBuffer) buffer.flip()); - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/event/RegistryReadEvent.java b/Management-Server/src/main/java/ms/net/event/RegistryReadEvent.java deleted file mode 100644 index f906ab213..000000000 --- a/Management-Server/src/main/java/ms/net/event/RegistryReadEvent.java +++ /dev/null @@ -1,74 +0,0 @@ -package ms.net.event; - -import java.nio.ByteBuffer; - -import ms.ServerConstants; -import ms.net.IoReadEvent; -import ms.net.IoSession; -import ms.world.WorldDatabase; -import ms.system.util.ByteBufferUtils; -import ms.world.info.CountryFlag; -import ms.world.info.WorldInfo; - -/** - * Handles world registry read events. - * @author Emperor - * - */ -public final class RegistryReadEvent extends IoReadEvent { - - /** - * The string check. - */ - private static final String CHECK = "12x4578f5g45hrdjiofed59898"; - //kratos = 666x14x88x28shhhwpwwb&h - //12x4578f5g45hrdjiofed59898 - - /** - * Constructs a new {@code RegistryReadEvent} {@code Object}. - * @param session The session. - * @param buffer The buffer to read. - */ - public RegistryReadEvent(IoSession session, ByteBuffer buffer) { - super(session, buffer); - } - - @Override - public void read(IoSession session, ByteBuffer buffer) { - int worldId = buffer.get() & 0xFF; - if (buffer.remaining() < 2) { - queueBuffer(worldId); - return; - } - int revision = buffer.getInt(); - int country = buffer.get() & 0xFF; - boolean members = buffer.get() == 1; - boolean pvp = buffer.get() == 1; - boolean quickChat = buffer.get() == 1; - boolean lootshare = buffer.get() == 1; - String activity = ByteBufferUtils.getString(buffer); - for (int i = 0; i < CHECK.length(); i++) { - if ((char) buffer.get() != CHECK.charAt(i)) { - session.write(3); - return; - } - } - if (worldId >= ServerConstants.WORLD_LIMIT) { - session.write(0); - return; - } - if (WorldDatabase.isActive(worldId)) { - session.write(2); - return; - } - try { - WorldInfo info = new WorldInfo(worldId, session.getAddress(), revision, CountryFlag.values()[country], activity, members, pvp, quickChat, lootshare); - WorldDatabase.register(info).configure(session); - session.write(1); - } catch (Throwable t) { - t.printStackTrace(); - session.write(3); - } - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/event/RegistryWriteEvent.java b/Management-Server/src/main/java/ms/net/event/RegistryWriteEvent.java deleted file mode 100644 index 0e75aea91..000000000 --- a/Management-Server/src/main/java/ms/net/event/RegistryWriteEvent.java +++ /dev/null @@ -1,43 +0,0 @@ -package ms.net.event; - -import java.nio.ByteBuffer; - -import ms.net.EventProducer; -import ms.net.IoSession; -import ms.net.IoWriteEvent; -import ms.net.producer.PacketEventProducer; - -/** - * Handles game world registry writing events. - * @author Emperor - * - */ -public final class RegistryWriteEvent extends IoWriteEvent { - - /** - * The event producer. - */ - public static final EventProducer PRODUCER = new PacketEventProducer(); - - /** - * Constructs a new {@code RegistryWriteEvent} {@code Object}. - * @param session The I/O session. - * @param context The writing context. - */ - public RegistryWriteEvent(IoSession session, Object context) { - super(session, context); - } - - @Override - public void write(IoSession session, Object context) { - ByteBuffer buffer = ByteBuffer.allocate(1); - int opcode = (int) context; - buffer.put((byte) opcode); - buffer.flip(); - if (opcode == 1) { - session.setProducer(PRODUCER); - } - session.queue(buffer); - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/packet/IoBuffer.java b/Management-Server/src/main/java/ms/net/packet/IoBuffer.java deleted file mode 100644 index c35fb5ab6..000000000 --- a/Management-Server/src/main/java/ms/net/packet/IoBuffer.java +++ /dev/null @@ -1,666 +0,0 @@ -package ms.net.packet; - -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; - -import ms.system.util.ByteBufferUtils; - -/** - * Represents the buffer used for reading/writing packets. - * @author Emperor - * - */ -public class IoBuffer { - - /** - * The bit masks. - */ - private static final int[] BIT_MASK = new int[32]; - - /** - * The packet size. - */ - private int packetSize; - - /** - * The opcode. - */ - private final int opcode; - - /** - * The packet header. - */ - private final PacketHeader header; - - /** - * The byte buffer. - */ - private ByteBuffer buf; - - /** - * The bit position. - */ - private int bitPosition = 0; - - /** - * Constructs a new {@code IoBuffer} {@code Object}. - */ - public IoBuffer() { - this(-1, PacketHeader.NORMAL, ByteBuffer.allocate(2048)); - } - - /** - * Constructs a new {@code IoBuffer} {@code Object}. - * @param opcode The opcode. - */ - public IoBuffer(int opcode) { - this(opcode, PacketHeader.NORMAL, ByteBuffer.allocate(2048)); - } - - /** - * Constructs a new {@code IoBuffer} {@code Object}. - * @param opcode The opcode. - * @param header The packet header. - */ - public IoBuffer(int opcode, PacketHeader header) { - this(opcode, header, ByteBuffer.allocate((1 << 16) + 1)); - } - - /** - * Constructs a new {@code IoBuffer} {@code Object}. - * @param opcode The opcode. - * @param header The packet header. - * @param buf The byte buffer. - */ - public IoBuffer(int opcode, PacketHeader header, ByteBuffer buf) { - this.opcode = opcode; - this.header = header; - this.buf = buf; - } - - static { - for (int i = 0; i < 32; i++) { - BIT_MASK[i] = (1 << i) - 1; - } - } - - /** - * - * @return - */ - public IoBuffer clear() { - buf.clear(); - bitPosition = 0; - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer put(int val) { - buf.put((byte) val); - return this; - } - - /** - * - * @param datas - * @param offset - * @param len - * @return - */ - public IoBuffer putBytes(byte[] datas, int offset, int len) { - for (int i = offset; i < len; i++) { - put(datas[i]); - } - return this; - } - - public final void getBytes(byte data[], int off, int len) { - for (int k = off; k < len + off; k++) { - data[k] = data[off++]; - } - } - - /** - * - * @param val - * @return - */ - public IoBuffer putA(int val) { - buf.put((byte) (val + 128)); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putC(int val) { - buf.put((byte) -val); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putS(int val) { - buf.put((byte) (128 - val)); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putTri(int val) { - buf.put((byte) (val >> 16)); - buf.put((byte) (val >> 8)); - buf.put((byte) val); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putShort(int val) { - buf.putShort((short) val); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putLEShort(int val) { - buf.put((byte) val); - buf.put((byte) (val >> 8)); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putShortA(int val) { - buf.put((byte) (val >> 8)); - buf.put((byte) (val + 128)); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putLEShortA(int val) { - buf.put((byte) (val + 128)); - buf.put((byte) (val >> 8)); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putInt(int val) { - buf.putInt(val); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putLEInt(int val) { - buf.put((byte) val); - buf.put((byte) (val >> 8)); - buf.put((byte) (val >> 16)); - buf.put((byte) (val >> 24)); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putIntA(int val) { - buf.put((byte) (val >> 8)); - buf.put((byte) val); - buf.put((byte) (val >> 24)); - buf.put((byte) (val >> 16)); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putIntB(int val) { - buf.put((byte) (val >> 16)); - buf.put((byte) (val >> 24)); - buf.put((byte) val); - buf.put((byte) (val >> 8)); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putLong(long val) { - buf.putLong(val); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putSmart(int val) { - if (val > Byte.MAX_VALUE) { - buf.putShort((short) (val + 32768)); - } else { - buf.put((byte) val); - } - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putIntSmart(int val) { - if (val > Short.MAX_VALUE) { - buf.putInt(val + 32768); - } else { - buf.putShort((short) val); - } - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putString(String val) { - buf.put(val.getBytes(StandardCharsets.UTF_8)); - buf.put((byte) 0); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putJagString(String val) { - buf.put((byte) 0); - buf.put(val.getBytes(StandardCharsets.UTF_8)); - buf.put((byte) 0); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer putJagString2(String val) { - byte[] packed = new byte[256]; - int length = ByteBufferUtils.packGJString2(0, packed, val); - buf.put((byte) 0).put(packed, 0, length).put((byte) 0); - return this; - } - - /** - * - * @param val - * @return - */ - public IoBuffer put(byte[] val) { - buf.put(val); - return this; - } - - /** - * Puts a byte array as byte A in reverse. - * @param data The data to put. - * @param start The start index. - * @param offset The offset. - */ - public void putReverseA(byte[] data, int start, int offset) { - for (int i = offset + start; i >= start; i--) { - putA(data[i]); - } - } - - /** - * - * @param numBits - * @param value - * @return - */ - public IoBuffer putBits(int numBits, int value) { - int bytePos = getBitPosition() >> 3; - int bitOffset = 8 - (getBitPosition() & 7); - bitPosition += numBits; - for (; numBits > bitOffset; bitOffset = 8) { - byte b = buf.get(bytePos); - buf.put(bytePos, b &= ~BIT_MASK[bitOffset]); - buf.put(bytePos++, b |= value >> numBits - bitOffset & BIT_MASK[bitOffset]); - numBits -= bitOffset; - } - byte b = buf.get(bytePos); - if (numBits == bitOffset) { - buf.put(bytePos, b &= ~BIT_MASK[bitOffset]); - buf.put(bytePos, b |= value & BIT_MASK[bitOffset]); - } else { - buf.put(bytePos, b &= ~(BIT_MASK[numBits] << bitOffset - numBits)); - buf.put(bytePos, b |= (value & BIT_MASK[numBits]) << bitOffset - numBits); - } - return this; - } - - /** - * - * @param buffer - * @return - */ - public IoBuffer put(IoBuffer buffer) { - buffer.toByteBuffer().flip(); - buf.put(buffer.toByteBuffer()); - return this; - } - - /** - * - * @param buffer - * @return - */ - public IoBuffer putA(IoBuffer buffer) { - buffer.toByteBuffer().flip(); - while (buffer.toByteBuffer().hasRemaining()) { - putA(buffer.toByteBuffer().get()); - } - return this; - } - - /** - * - * @param buffer - * @return - */ - public IoBuffer put(ByteBuffer buffer) { - buf.put(buffer); - return this; - } - - /** - * - * @return - */ - public IoBuffer setBitAccess() { - bitPosition = buf.position() * 8; - return this; - } - - /** - * - * @return - */ - public IoBuffer setByteAccess() { - buf.position((getBitPosition() + 7) / 8); - return this; - } - - /** - * - * @return - */ - public int get() { - return buf.get(); - } - - /** - * - * @return - */ - public int getA() { - return (buf.get() & 0xFF) - 128; - } - - /** - * - * @return - */ - public int getC() { - return -buf.get(); - } - - /** - * - * @return - */ - public int getS() { - return 128 - buf.get(); - } - - /** - * - * @return - */ - public int getTri() { - return ((buf.get() << 16) & 0xFF) | ((buf.get() << 8) & 0xFF) | (buf.get() & 0xFF); - } - - /** - * - * @return - */ - public int getShort() { - return buf.getShort(); - } - - /** - * - * @return - */ - public int getLEShort() { - return (buf.get() & 0xFF) | ((buf.get() & 0xFF) << 8); - } - - /** - * - * @return - */ - public int getShortA() { - return ((buf.get() & 0xFF) << 8) | (buf.get() - 128 & 0xFF); - } - - /** - * - * @return - */ - public int getLEShortA() { - return (buf.get() - 128 & 0xFF) | ((buf.get() & 0xFF) << 8); - } - - /** - * - * @return - */ - public int getInt() { - return buf.getInt(); - } - - /** - * - * @return - */ - public int getLEInt() { - return (buf.get() & 0xFF) + ((buf.get() & 0xFF) << 8) - + ((buf.get() & 0xFF) << 16) + ((buf.get() & 0xFF) << 24); - } - - /** - * - * @return - */ - public int getIntA() { - return ((buf.get() & 0xFF) << 8) + (buf.get() & 0xFF)+ ((buf.get() & 0xFF) << 24) + ((buf.get() & 0xFF) << 16); - } - - /** - * - * @return - */ - public int getIntB() { - return ((buf.get() & 0xFF) << 16) + ((buf.get() & 0xFF) << 24) - + (buf.get() & 0xFF) + ((buf.get() & 0xFF) << 8); - } - - /** - * - * @return - */ - public long getLongL() { - long first = getIntB(); - long second = getIntB(); - if (second < 0) - second = second & 0xffffffffL; - return (first << 32) + second; - } - - /** - * - * @return - */ - public long getLong() { - return buf.getLong(); - } - - /** - * - * @return - */ - public int getIntSmart() { - int peek = buf.getShort(buf.position()); - if (peek <= Short.MAX_VALUE) { - return buf.getShort() & 0xFFFF; - } - return buf.getInt() - 32768; - } - - /** - * - * @return - */ - public String getString() { - return ByteBufferUtils.getString(buf); - } - - /** - * - * @return - */ - public String getJagString() { - buf.get(); - return ByteBufferUtils.getString(buf); - } - - /** - * - * @param is - * @param offset - * @param length - * @return - */ - public IoBuffer getReverseA(byte[] is, int offset, int length) { - for (int i = (offset + length - 1); i >= offset; i--) { - is[i] = (byte) (buf.get() - 128); - } - return this; - } - - /** - * - * @return - */ - public ByteBuffer toByteBuffer() { - return buf; - } - - /** - * - * @return - */ - public int opcode() { - return opcode; - } - - /** - * - * @return - */ - public int readableBytes() { - return buf.capacity() - buf.remaining(); - } - - /** - * - * @return - */ - public PacketHeader getHeader() { - return header; - } - - /** - * - * @return - */ - public byte[] array() { - return buf.array(); - } - - /** - * @return the packetSize. - */ - public int getPacketSize() { - return packetSize; - } - - /** - * @param packetSize the packetSize to set. - */ - public void setPacketSize(int packetSize) { - this.packetSize = packetSize; - } - - /** - * Gets the bitPosition. - * @return The bitPosition. - */ - public int getBitPosition() { - return bitPosition; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/packet/PacketHeader.kt b/Management-Server/src/main/java/ms/net/packet/PacketHeader.kt deleted file mode 100644 index ef293f9dc..000000000 --- a/Management-Server/src/main/java/ms/net/packet/PacketHeader.kt +++ /dev/null @@ -1,23 +0,0 @@ -package ms.net.packet - -/** - * Represents the types of packet headers. - * @author Emperor - */ -enum class PacketHeader { - - /** - * The normal packet header. - */ - NORMAL, - - /** - * The byte packet header. - */ - BYTE, - - /** - * The short packet header. - */ - SHORT -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/packet/WorldPacketRepository.kt b/Management-Server/src/main/java/ms/net/packet/WorldPacketRepository.kt deleted file mode 100644 index b72f731e1..000000000 --- a/Management-Server/src/main/java/ms/net/packet/WorldPacketRepository.kt +++ /dev/null @@ -1,555 +0,0 @@ -package ms.net.packet - -import ms.net.IoSession -import ms.system.PunishmentStorage -import ms.system.communication.ClanRank -import ms.system.communication.ClanRepository -import ms.system.communication.CommunicationInfo -import ms.system.util.ManagementConstants.WORLD_HOP_DELAY -import ms.world.GameServer -import ms.world.PlayerSession -import ms.world.WorldDatabase -import ms.world.info.Response -import ms.world.info.UIDInfo -import java.nio.ByteBuffer - -/** - * Repository class for world packets. - * @author Emperor - */ -object WorldPacketRepository { - /** - * Sends the player registry response. - * @param server The game server. - * @param player The player session. - * @param response The registry response. - */ - @JvmStatic - fun sendRegistryResponse(server: GameServer, player: PlayerSession, response: Response) { - val buffer = IoBuffer(0, PacketHeader.BYTE) - buffer.putString(player.username) - buffer.put(response.opcode())//byte - if (response == Response.MOVING_WORLD) { - val delay: Long = WORLD_HOP_DELAY - (System.currentTimeMillis() - player.disconnectionTime) - buffer.put((delay / 1000).toInt()) - } - server.session.write(buffer) - } - - /** - * Sends a message to the player. - * @param player The player. - * @param message The message to send. - */ - @JvmStatic - fun sendPlayerMessage(player: PlayerSession?, message: String) { - if (player == null) { - return - } - val buffer = IoBuffer(2, PacketHeader.BYTE) - buffer.putString(player.username) - buffer.putString(message) - player.world.session.write(buffer) - } - - fun sendPlayerMessage(player: PlayerSession?, messages: Array) { - if (player == null) { - return - } - for (message in messages) sendPlayerMessage(player, message) - } - - /** - * Sends the contact information. - * @param player The player. - */ - fun sendContactInformation(player: PlayerSession) { - val info = player.communication - val buffer = IoBuffer(3, PacketHeader.SHORT) - buffer.putString(player.username) - buffer.put(info.contacts.size) - for (contact in info.contacts.keys) { - buffer.putString(contact) - buffer.put(info.getRank(contact).ordinal) - buffer.put(CommunicationInfo.getWorldId(player, contact)) - } - buffer.put(info.blocked.size) - for (contact in info.blocked) { - buffer.putString(contact) - } - if (info.currentClan == null) { - buffer.put(0) - } else { - buffer.put(1) - buffer.putString(info.currentClan) - } - player.world.session.write(buffer) - } - - /** - * Sends a contact update. - * @param player The player who's contacts we're changing. - * @param contact The contact to update. - * @param block If we're updating the blocked list. - * @param remove If the contact should be removed. - * @param worldId The world id of the contact. - * @param rank The clan rank. - */ - @JvmStatic - fun sendContactUpdate( - player: PlayerSession, - contact: String, - block: Boolean, - remove: Boolean, - worldId: Int, - rank: ClanRank? - ) { - val buffer = IoBuffer(4, PacketHeader.BYTE) - buffer.putString(player.username) - buffer.putString(contact) - buffer.put((if (block) 1 else 0)) - if (rank != null) { - buffer.put((2 + rank.ordinal)) - } else { - buffer.put((if (remove) 1 else 0)) - if (!block && !remove) { - buffer.put(worldId) - } - } - player.world.session.write(buffer) - } - - /** - * Sends a clan message. - * @param player The player to send the message to. - * @param p The player sending the message. - * @param message The message to send. - * @param type The message type. - */ - @JvmStatic - fun sendMessage(player: PlayerSession, p: PlayerSession, type: Int, message: String) { - val buffer = IoBuffer(5, PacketHeader.BYTE) - buffer.putString(player.username) - buffer.putString(p.username) - buffer.put(type) - buffer.put(p.chatIcon) - buffer.putString(message) - println("Send Message: ${player.username} -> ${p.username} T: $type ICO: ${p.chatIcon} $message") - player.world.session.write(buffer) - } - - /** - * Sends clan information to the server. - * @param server The server. - * @param clan The clan. - */ - @JvmStatic - fun sendClanInformation(server: GameServer, clan: ClanRepository) { - val buffer = IoBuffer(6, PacketHeader.SHORT) - buffer.putString(clan.owner.username) - buffer.putString(clan.name) - var length = clan.players.size - if (length > ClanRepository.MAX_MEMBERS) { - length = ClanRepository.MAX_MEMBERS - } - buffer.put(length) - for (i in 0 until length) { - val player = clan.players[i] - buffer.putString(player.username) - buffer.put(player.worldId) - buffer.put(clan.getRank(player).ordinal) - } - buffer.put(clan.joinRequirement.ordinal) - buffer.put(clan.kickRequirement.ordinal) - buffer.put(clan.messageRequirement.ordinal) - buffer.put(clan.lootRequirement.ordinal) - server.session.write(buffer) - } - - /** - * Sends the leave clan packet. - * @param player The player leaving the clan. - */ - @JvmStatic - fun sendLeaveClan(player: PlayerSession) { - val buffer = IoBuffer(7, PacketHeader.BYTE) - buffer.putString(player.username) - player.world.session.write(buffer) - } - - /** - * Sends the player login notification. - * @param server The server. - * @param player The player logging in. - * @param names The names. - */ - @JvmStatic - fun notifyPlayers(server: GameServer, player: PlayerSession, names: List) { - val buffer = IoBuffer(8, PacketHeader.SHORT) - buffer.putString(player.username) - buffer.put(player.worldId) - buffer.put(names.size) - for (name in names) { - buffer.putString(name) - } - server.session.write(buffer) - } - - /** - * Notifies the game server a player logged out. - * @param server The game server to notify. - * @param player The player logging out. - */ - @JvmStatic - fun notifyLogout(server: GameServer, player: PlayerSession) { - val buffer = IoBuffer(9, PacketHeader.BYTE) - buffer.putString(player.username) - server.session.write(buffer) - } - - /** - * Sends the update countdown to the server. - * @param server The server. - * @param ticks The amount of ticks left. - */ - @JvmStatic - fun sendUpdate(server: GameServer, ticks: Int) { - val buffer = IoBuffer(10) - buffer.putInt(ticks) - server.session.write(buffer) - } - - /** - * Sends the punishment update packet. - * @param world The world to send the packet to. - * @param key The punishment key. - * @param type The punishment type. - * @param duration The duration of the punishment. - */ - @JvmStatic - fun sendPunishUpdate(world: GameServer, key: String, type: Int, duration: Long) { - val buffer = IoBuffer(11, PacketHeader.BYTE) - buffer.putString(key) - buffer.put(type) - buffer.putLong(duration) - world.session.write(buffer) - } - - /** - * Sends a configuration reload. - * @param world the world. - */ - @JvmStatic - fun sendConfigReload(world: GameServer) { - world.session.write(IoBuffer(15, PacketHeader.BYTE)) - } - - /** - * Handles incoming world packets. - * @param session The I/O session. - * @param opcode The opcode. - * @param b The buffer to read from. - */ - @JvmStatic - fun handleIncoming(session: IoSession, opcode: Int, b: ByteBuffer) { - val buffer = IoBuffer(opcode, PacketHeader.NORMAL, b) - val server = session.gameServer - when (opcode) { - 0 -> handlePlayerRegistration(server, buffer) - 1 -> handlePlayerRemoval(server, buffer) - 2 -> handlePunishment(server, buffer) - 3 -> handleCommunicationRequest(server, buffer) - 4, 5 -> handleContactUpdate(server, buffer, opcode == 5) - 6 -> handleJoinClan(server, buffer) - 7 -> handleClanRename(server, buffer) - 8 -> handleClanSetting(server, buffer) - 9 -> handleClanKick(server, buffer) - 10 -> handleClanMessage(server, buffer) - 11 -> handlePrivateMessage(server, buffer) - 12 -> handleClanInfoRequest(server, buffer) - 13 -> handleChatSetting(server, buffer) - 14 -> handleInfoUpdate(server, buffer) - else -> System.err.println("Handling incoming packet [opcode=" + opcode + ", size=" + b.limit() + "].") - } - } - - /** - * Handles the info of a player update. - * @param server the server. - * @param buffer the buffer. - */ - private fun handleInfoUpdate(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val player = server.players[username] - if (player != null) { - player.chatIcon = buffer.get() - } - } - - /** - * Handles a player registration. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handlePlayerRegistration(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val password = buffer.string - val ipAddress = buffer.string - val macAddress = buffer.string - val compName = buffer.string - val serial = buffer.string - val rights = buffer.int - val chatIcon = buffer.get() - val uid = UIDInfo(ipAddress, compName, macAddress, serial) - val player = PlayerSession(username, password, UIDInfo(ipAddress, compName, macAddress, serial)) - if (WorldDatabase.isActivePlayer(username)) { - sendRegistryResponse(server, player, Response.ALREADY_ONLINE) - return - } - player.uid = uid - player.rights = rights - player.chatIcon = chatIcon - if (PunishmentStorage.isSystemBanned(uid)) { - sendRegistryResponse(server, player, Response.BANNED) - return - } - player.parse() - if (player.isBanned) { - sendRegistryResponse(server, player, Response.ACCOUNT_DISABLED) - return - } - if (player.lastWorld != server.info.worldId && player.hasMovedWorld()) { - sendRegistryResponse(server, player, Response.MOVING_WORLD) - return - } - server.register(player) - } - - /** - * Handles the removal of a player. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handlePlayerRemoval(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val session = server.players[username] - if (session != null) { - session.isActive = false - val player = server.players.remove(username) - if (player != null) { - session.remove() - } - session.worldId = 0 - } - } - - /** - * Handles a player registration. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handlePunishment(server: GameServer, buffer: IoBuffer) { - val type = buffer.get() and 0xFF - val target = buffer.string - val duration = buffer.long - val staff = buffer.string - PunishmentStorage.handlePunishment(staff, target, type, duration) - } - - /** - * Handles the communication info request packet. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handleCommunicationRequest(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val player = server.players[username] ?: return - sendContactInformation(player) - } - - /** - * Handles a contact update packet. - * @param server The server. - * @param buffer The buffer to read from. - * @param block If the list is for blocked players. - */ - private fun handleContactUpdate(server: GameServer, buffer: IoBuffer, block: Boolean) { - val username = buffer.string - val player = server.players[username] ?: return - val contact = buffer.string - when (buffer.get()) { - 0 -> { - if (block) { - player.communication.block(contact) - } - player.communication.add(contact) - } - 1 -> player.communication.remove(contact, block) - 2 -> player.communication.updateClanRank(contact, ClanRank.values()[buffer.get()]) - } - } - - /** - * Handles a clan related packet. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handleJoinClan(server: GameServer, buffer: IoBuffer) { - val name = buffer.string - val clanName = buffer.string - val player = server.players[name] - if (player == null || !player.isActive) { - System.err.println("Invalid player specified in clan packet!") - return - } - if (player.clan != null) { - player.clan.leave(player, true) - return - } - if (clanName.length < 1) { - sendLeaveClan(player) - return - } - val clan = ClanRepository.get(server, clanName) - if (clan == null) { - sendPlayerMessage( - player, - arrayOf( - "The channel you tried to join does not exist.", - "Try joining the main clan named '2009Scape'.:clan:" - ) - ) - return - } - clan.enter(player) - } - - /** - * Handles renaming a clan. - * @param server The server. - * @param buffer The buffer. - */ - private fun handleClanRename(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val name = buffer.string - val player = server.players[username] - if (player == null || !player.isActive) { - return - } - val clan = ClanRepository.getClans()[username] - player.communication.clanName = name - if (clan != null) { - if (name.isEmpty()) { - clan.clean(true) - } else { - clan.rename(name) - } - } - } - - /** - * Handles changing clan settings packet. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handleClanSetting(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val type = buffer.get() - val rank = if (type < 4) ClanRank.values()[buffer.get() and 0xFF] else null - val player = server.players[username] - if (player == null || !player.isActive) { - return - } - val clan = ClanRepository.get(server, username) - when (type) { - 0 -> { - player.communication.joinRequirement = rank - clan?.clean(false) - } - 1 -> player.communication.messageRequirement = rank - 2 -> { - player.communication.kickRequirement = rank - clan?.update() - } - 3 -> player.communication.lootRequirement = rank - } - } - - /** - * Handles kicking a player from the clan. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handleClanKick(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val playerName = buffer.string - val player = server.players[username] - if (player == null || !player.isActive || player.clan == null) { - return - } - val target = WorldDatabase.getPlayer(playerName) - if (target == null || !target.isActive) { - return - } - player.clan.kick(player, target) - } - - /** - * Handles a clan message. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handleClanMessage(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val message = buffer.string - val player = server.players[username] - if (player == null || !player.isActive || player.clan == null) { - return - } - player.clan.message(player, message) - } - - /** - * Handles a clan message. - * @param server The game server. - * @param buffer The buffer. - */ - private fun handlePrivateMessage(server: GameServer, buffer: IoBuffer) { - val username = buffer.string - val receiver = buffer.string - val message = buffer.string - val player = server.players[username] - if (player == null || !player.isActive) { - return - } - player.communication.sendMessage(receiver, message) - } - - /** - * Handles a clan information request packet. - * @param server The server. - * @param buffer The buffer. - */ - private fun handleClanInfoRequest(server: GameServer, buffer: IoBuffer) { - val name = buffer.string - val clan = ClanRepository.get(server, name) ?: return - sendClanInformation(server, clan) - } - - /** - * Handles a chat setting update packet. - * @param server The server. - * @param buffer The buffer. - */ - private fun handleChatSetting(server: GameServer, buffer: IoBuffer) { - val name = buffer.string - val publicSetting = buffer.get() - val privateSetting = buffer.get() - val tradeSetting = buffer.get() - val player = server.players[name] - if (player == null || !player.isActive) { - return - } - player.communication.updateSettings(publicSetting, privateSetting, tradeSetting) - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/producer/HSEventProducer.java b/Management-Server/src/main/java/ms/net/producer/HSEventProducer.java deleted file mode 100644 index 40936a72d..000000000 --- a/Management-Server/src/main/java/ms/net/producer/HSEventProducer.java +++ /dev/null @@ -1,29 +0,0 @@ -package ms.net.producer; - -import java.nio.ByteBuffer; - -import ms.net.EventProducer; -import ms.net.IoReadEvent; -import ms.net.IoSession; -import ms.net.IoWriteEvent; -import ms.net.event.HSReadEvent; -import ms.net.event.HSWriteEvent; - -/** - * Produces I/O events for the handshake protocol. - * @author Emperor - * - */ -public final class HSEventProducer implements EventProducer { - - @Override - public IoReadEvent produceReader(IoSession session, ByteBuffer buffer) { - return new HSReadEvent(session, buffer); - } - - @Override - public IoWriteEvent produceWriter(IoSession session, Object context) { - return new HSWriteEvent(session, context); - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/producer/PacketEventProducer.java b/Management-Server/src/main/java/ms/net/producer/PacketEventProducer.java deleted file mode 100644 index 091fcf5d7..000000000 --- a/Management-Server/src/main/java/ms/net/producer/PacketEventProducer.java +++ /dev/null @@ -1,29 +0,0 @@ -package ms.net.producer; - -import java.nio.ByteBuffer; - -import ms.net.EventProducer; -import ms.net.IoReadEvent; -import ms.net.IoSession; -import ms.net.IoWriteEvent; -import ms.net.event.PacketReadEvent; -import ms.net.event.PacketWriteEvent; - -/** - * The packet event producer. - * @author Emperor - * - */ -public final class PacketEventProducer implements EventProducer { - - @Override - public IoReadEvent produceReader(IoSession session, ByteBuffer buffer) { - return new PacketReadEvent(session, buffer); - } - - @Override - public IoWriteEvent produceWriter(IoSession session, Object context) { - return new PacketWriteEvent(session, context); - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/net/producer/RegistryEventProducer.java b/Management-Server/src/main/java/ms/net/producer/RegistryEventProducer.java deleted file mode 100644 index 25db4d265..000000000 --- a/Management-Server/src/main/java/ms/net/producer/RegistryEventProducer.java +++ /dev/null @@ -1,29 +0,0 @@ -package ms.net.producer; - -import java.nio.ByteBuffer; - -import ms.net.EventProducer; -import ms.net.IoReadEvent; -import ms.net.IoSession; -import ms.net.IoWriteEvent; -import ms.net.event.RegistryReadEvent; -import ms.net.event.RegistryWriteEvent; - -/** - * Handles world server registry. - * @author Emperor - * - */ -public final class RegistryEventProducer implements EventProducer { - - @Override - public IoReadEvent produceReader(IoSession session, ByteBuffer buffer) { - return new RegistryReadEvent(session, buffer); - } - - @Override - public IoWriteEvent produceWriter(IoSession session, Object context) { - return new RegistryWriteEvent(session, context); - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/OperatingSystem.kt b/Management-Server/src/main/java/ms/system/OperatingSystem.kt deleted file mode 100644 index 267cc9cc5..000000000 --- a/Management-Server/src/main/java/ms/system/OperatingSystem.kt +++ /dev/null @@ -1,9 +0,0 @@ -package ms.system - -/** - * The operating systems - * @author Clayton Williams - */ -enum class OperatingSystem { - UNIX, WINDOWS -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/PunishmentStorage.java b/Management-Server/src/main/java/ms/system/PunishmentStorage.java deleted file mode 100644 index 3fd0b00a5..000000000 --- a/Management-Server/src/main/java/ms/system/PunishmentStorage.java +++ /dev/null @@ -1,267 +0,0 @@ -package ms.system; - -import ms.net.packet.WorldPacketRepository; -import ms.system.mysql.SQLManager; -import ms.world.GameServer; -import ms.world.PlayerSession; -import ms.world.WorldDatabase; -import ms.world.info.UIDInfo; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -/** - * Used for storing and handling punishment data. - * @author Emperor - * @author Vexia - * - */ -public final class PunishmentStorage { - - /** - * The type ids for IP, MAC and SERIAL bans. - */ - public static final int IP = 2, MAC = 3, SERIAL = 4; - - /** - * Constructs a new {@code PunishmentStorage} {@code Object}. - */ - public PunishmentStorage() { - /* - * empty. - */ - } - - /** - * Handles a punishment. - * @param staff The name of the staff member dealing the punishment. - * @param target The target. - * @param type The punishment type. - * @param duration The duration of the punishment (in milliseconds). - */ - public static void handlePunishment(String name, String target, int type, long duration) { - PlayerSession staff = WorldDatabase.getPlayer(name); - PlayerSession player = WorldDatabase.getPlayer(target, true); - if (player == null) { - WorldPacketRepository.sendPlayerMessage(staff, "Player " + target + " is invalid!"); - return; - } - long end = Long.MAX_VALUE; - if (duration != -1L && duration != 0L) { - end = System.currentTimeMillis() + duration; - } else if (duration == 0L) { - end = 0L; - } - String key = "null"; - switch (type) { - case 0: //Mute - case 1: //Ban - if (type == 1 && end == 0L) { - unban(player.getIpAddress()); - unban(player.getMacAddress()); - unban(player.getSerialKey()); - } - if (player.isActive()) { - WorldPacketRepository.sendPunishUpdate(player.getWorld(), player.getUsername(), type, end); - } - notify(staff, type == 0 ? "mute" : "ban", target, end); - Connection connection = SQLManager.getConnection(); - if (connection == null) { - return; - } - PreparedStatement statement; - try { - statement = connection.prepareStatement("UPDATE members SET " + (type == 0 ? "muteTime" : "banTime") + "='" + end + "' WHERE username ='" + target + "'"); - statement.executeUpdate(); - } catch (SQLException e) { - e.printStackTrace(); - SQLManager.close(connection); - return; - } finally { - SQLManager.close(connection); - } - return; - case 2: - ban(player.getIpAddress(), type); - notify(staff, "IP-ban", target, end); - notifyServers(key = player.getIpAddress(), type, end); - break; - case 3: - ban(player.getMacAddress(), type); - notify(staff, "MAC-ban", target, end); - notifyServers(key = player.getMacAddress(), type, end); - break; - case 4: - ban(player.getSerialKey(), type); - notify(staff, "UID-ban", target, end); - notifyServers(key = player.getSerialKey(), type, end); - break; - case 5: - ban(player.getIpAddress(), 2); - notifyServers(key = player.getIpAddress(), 2, end); - ban(player.getMacAddress(), 3); - notifyServers(key = player.getMacAddress(), 3, end); - ban(player.getSerialKey(), 4); - notifyServers(key = player.getSerialKey(), 4, end); - notify(staff, "full ban", target, end); - return; - case 6: //Kick - if (player.isActive()) { - WorldPacketRepository.sendPunishUpdate(player.getWorld(), player.getUsername(), 6, end); - WorldPacketRepository.sendPlayerMessage(staff, "Successfully kicked player " + target + " from world " + player.getWorldId() + "."); - } else { - WorldPacketRepository.sendPlayerMessage(staff, "Player " + target + " was already inactive."); - } - break; - case 7: //Request info - WorldPacketRepository.sendPlayerMessage(staff, "[----------Player info----------]"); - WorldPacketRepository.sendPlayerMessage(staff, "Name: " + player.getUsername()); - WorldPacketRepository.sendPlayerMessage(staff, "IP address: " + player.getIpAddress()); - WorldPacketRepository.sendPlayerMessage(staff, "MAC address: " + player.getMacAddress()); - WorldPacketRepository.sendPlayerMessage(staff, "Serial key: " + player.getSerialKey()); - WorldPacketRepository.sendPlayerMessage(staff, "Computer name: " + player.getComputerName()); - WorldPacketRepository.sendPlayerMessage(staff, "[-------------------------------]"); - return; - } - notifyServers(key, type, end); - } - - /** - * Bans an address. - * @param address the address. - * @return {@code True} if banned. - */ - public static boolean ban(String address, int type) { - if (address == null || address.length() == 0 || address.equals("To be filled by O.E.M.") || address.equals("To be filled by O.E.M") || address.equals("Base Board Serial Number")) { - System.out.println("Error! Can't ban address " + address + " type = " + type + "!"); - return false; - } - if (isBanned(address)) { - return false; - } - Connection connection = SQLManager.getConnection(); - if (connection == null) { - return false; - } - PreparedStatement statement; - try { - statement = connection.prepareStatement("INSERT INTO punishments VALUES('" + address + "','" + type + "')"); - statement.executeUpdate(); - } catch (SQLException e) { - e.printStackTrace(); - SQLManager.close(connection); - return false; - } finally { - SQLManager.close(connection); - } - return true; - } - - /** - * Unbans an address. - * @param address the address. - * @return {@code True} if unbanned. - */ - public static boolean unban(String address) { - Connection connection = SQLManager.getConnection(); - if (connection == null) { - return false; - } - PreparedStatement statement; - try { - statement = connection.prepareStatement("DELETE from punishments WHERE address ='" + address + "'"); - statement.executeUpdate(); - } catch (SQLException e) { - e.printStackTrace(); - SQLManager.close(connection); - return false; - } finally { - SQLManager.close(connection); - } - return true; - } - - /** - * Notifies the punishing player of success. - * @param staff The punishing player. - * @param type The punishment type. - * @param target The target name. - * @param end The end time stamp of the punishment. - */ - private static void notify(PlayerSession staff, String type, String target, long end) { - if (end <= System.currentTimeMillis()) { - WorldPacketRepository.sendPlayerMessage(staff, "Successfully removed punishment [type=" + type + ", player=" + target + "]."); - return; - } - WorldPacketRepository.sendPlayerMessage(staff, "Successfully punished player " + target + " [type=" + type + ", duration=" + getDuration(end) + "]."); - } - - /** - * Notifies the game servers of a punishment update. - * @param key The punishment key. - * @param type The type. - * @param duration The duration. - */ - public static void notifyServers(String key, int type, long duration) { - for (GameServer server : WorldDatabase.getWorlds()) { - if (server != null && server.isActive()) { - WorldPacketRepository.sendPunishUpdate(server, key, type, duration); - } - } - } - - /** - * Checks if the UID Info is banned. - * @param info the info. - * @return {@code True} if banned. - */ - public static boolean isSystemBanned(UIDInfo info) { - return isBanned(info.getIp()) || isBanned(info.getMac()) || isBanned(info.getSerial()); - } - - /** - * Checked if an address is banned. - * @param address the address. - * @param type the type. - * @return {@code True} if so. - */ - public static boolean isBanned(String address) { - Connection connection = SQLManager.getConnection(); - if (connection == null) { - return false; - } - try { - ResultSet set = connection.createStatement().executeQuery("SELECT * FROM punishments WHERE address ='" + address +"'"); - if (set == null || !set.next()) { - SQLManager.close(connection); - return false; - } - } catch (SQLException e) { - e.printStackTrace(); - SQLManager.close(connection); - return false; - } finally { - SQLManager.close(connection); - } - return true; - } - - /** - * Gets the duration string representation. - * @param end The end time. - * @return The string. - */ - private static String getDuration(long end) { - String time = "indefinite time"; - if (end != Long.MAX_VALUE) { - int days = (int) ((System.currentTimeMillis()) / (24 * 60 * 60_000)); - int hours = (int) (((24L * days * 60 * 60_000)) / (60 * 60_000)); - int minutes = (int) (((hours * (60 * 60_000))) / 60_000); - time = days + "d, " + hours + "h, " + minutes + "m"; - } - return time; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/ShutdownSequence.java b/Management-Server/src/main/java/ms/system/ShutdownSequence.java deleted file mode 100644 index 9d137923d..000000000 --- a/Management-Server/src/main/java/ms/system/ShutdownSequence.java +++ /dev/null @@ -1,27 +0,0 @@ -package ms.system; - - -import ms.Management; - -/** - * The shutdown sequence used for safely turning off the Management server. - * @author Emperor - * - */ -public final class ShutdownSequence extends Thread { - - @Override - public void run() { - if (Management.active) { - shutdown(); - } - } - - /** - * Safely shuts down the Management server. - */ - public static void shutdown() { - System.out.println("Management server successfully shut down!"); - Management.active = false; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/communication/ClanRank.java b/Management-Server/src/main/java/ms/system/communication/ClanRank.java deleted file mode 100644 index f13aa7212..000000000 --- a/Management-Server/src/main/java/ms/system/communication/ClanRank.java +++ /dev/null @@ -1,54 +0,0 @@ -package ms.system.communication; - -/** - * Represents the rank of a clan member. - * @author Emperor - */ -public enum ClanRank { - NONE(-1, "Anyone"), - FRIEND(0, "Any friends"), - RECRUIT(1, "Recruit+"), - CORPORAL(2, "Corporal+"), - SERGEANT(3, "Sergeant+"), - LIEUTENANT(4, "Lieutenant+"), - CAPTAIN(5, "Captain+"), - GENERAL(6, "General+"), - OWNER(7, "Only me"), - ADMINISTRATOR(127, "No-one"); - - /** - * The value of the rank. - */ - private final int value; - - /** - * The requirement info. - */ - private final String info; - - /** - * Constructs a new {@code ClanRank} {@code Object}. - * @param value The rank value. - * @param info The requirement info. - */ - private ClanRank(int value, String info) { - this.value = value; - this.info = info; - } - - /** - * Gets the value. - * @return The value. - */ - public int getValue() { - return value; - } - - /** - * Gets the info. - * @return The info. - */ - public String getInfo() { - return info; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/communication/ClanRepository.java b/Management-Server/src/main/java/ms/system/communication/ClanRepository.java deleted file mode 100644 index bfe96cbd4..000000000 --- a/Management-Server/src/main/java/ms/system/communication/ClanRepository.java +++ /dev/null @@ -1,337 +0,0 @@ -package ms.system.communication; - -import ms.net.packet.WorldPacketRepository; -import ms.system.util.StringUtils; -import ms.world.GameServer; -import ms.world.PlayerSession; -import ms.world.WorldDatabase; -import ms.world.info.UIDInfo; - -import java.util.*; - -/** - * Holds clan related information. - * @author Emperor - * - */ -public final class ClanRepository { - - /** - * The mapping of active clans. - */ - private static final Map CLANS = new HashMap<>(); - - /** - * The maximum amount of members to be in a clan chat. - */ - public static final int MAX_MEMBERS = 100; - - /** - * The owner's details. - */ - private PlayerSession owner; - - /** - * The list of players currently in the chat. - */ - private final List players = new ArrayList<>(MAX_MEMBERS); - - /** - * The banned players. - */ - private final Map banned = new HashMap<>(); - - /** - * Constructs a new {@code ClanRepository} {@code Object}. - */ - private ClanRepository() { - /* - * empty. - */ - } - - /** - * Gets the clan repository for the given username. - * @param ownerName The clan owner's name. - * @return The clan repository. - */ - public static ClanRepository get(GameServer server, String ownerName) { - ClanRepository clan = CLANS.get(ownerName); - if (clan != null) { - return clan; - } - PlayerSession owner = WorldDatabase.getPlayer(ownerName); - if (owner == null) { - owner = new PlayerSession(ownerName, ownerName, new UIDInfo()); - owner.parse(); - } - if (owner.getCommunication().getClanName().equals("")) { - return null; - } - clan = new ClanRepository(); - clan.owner = owner; - CLANS.put(ownerName, clan); - return clan; - } - - /** - * Enters the clan chat. - * @param player The player. - */ - public void enter(PlayerSession player) { - if (players.size() >= MAX_MEMBERS && !owner.getUsername().equals("2009scape")) { - WorldPacketRepository.sendPlayerMessage(player, "The channel you tried to join is full.:clan:"); - return; - } - if (player != owner && player.getRights() != 2) { - if (isBanned(player.getUsername()) || owner.getCommunication().getBlocked().contains(player.getUsername())) { - WorldPacketRepository.sendPlayerMessage(player, "You are temporarily banned from this clan channel.:clan:"); - return; - } - ClanRank rank = getRank(player); - if (rank.ordinal() < getJoinRequirement().ordinal()) { - WorldPacketRepository.sendPlayerMessage(player, "You do not have a high enough rank to join this clan channel.:clan:"); - return; - } - } - if (!players.contains(player)) { - players.add(player); - } - WorldPacketRepository.sendPlayerMessage(player, "Now talking in clan channel " + owner.getCommunication().getClanName() + ".:clan:"); - WorldPacketRepository.sendPlayerMessage(player, "To talk, start each line of chat with the / symbol.:clan:"); - player.getCommunication().setCurrentClan(owner.getUsername()); - player.setClan(this); - update(); - } - - /** - * Leaves the clan chat. - * @param player The player to leave. - * @param remove If the player should be removed from the list. - */ - public void leave(PlayerSession player, boolean remove) { - if (remove) { - players.remove(player); - update(); - if (players.size() < 1) { - banned.clear(); - } - } - WorldPacketRepository.sendPlayerMessage(player, "You have left the channel.:clan:"); - player.setClan(null); - player.getCommunication().setCurrentClan(null); - if (player.isActive()) { - WorldPacketRepository.sendLeaveClan(player); - } - } - - /** - * Sends a message to all players in the chat. - * @param player The player sending the message. - * @param message The message to send. - */ - public void message(PlayerSession player, String message) { - if (player != owner && player.getRights() != 2) { - ClanRank rank = getRank(player); - if (rank.ordinal() < getMessageRequirement().ordinal()) { - WorldPacketRepository.sendPlayerMessage(player, "You do not have a high enough rank to talk in this clan channel.:clan:"); - return; - } - } - for (Iterator it = players.iterator(); it.hasNext();) { - PlayerSession p = it.next(); - if (p != null) { - WorldPacketRepository.sendMessage(p, player, 2, message); - } - } - } - - /** - * Updates the clan chat. - */ - public void update() { - for (GameServer server : WorldDatabase.getWorlds()) { - if (server != null && server.isActive()) { - WorldPacketRepository.sendClanInformation(server, this); - } - } - } - - /** - * Kicks a player from the clan chat. - * @param player The player. - */ - public void kick(PlayerSession player, PlayerSession target) { - ClanRank rank = getRank(target); - if (target.getRights() == 2) { - WorldPacketRepository.sendPlayerMessage(player, "You can't kick an administrator.:clan:"); - return; - } - System.out.println(rank + ", " + player.getUsername()); - if (player.getRights() < 1/*!= 2 && rank.ordinal() < getKickRequirement().ordinal()*/) { - WorldPacketRepository.sendPlayerMessage(player, "You do not have a high enough rank to kick in this clan channel.:clan:"); - return; - } - if (target == owner) { - WorldPacketRepository.sendPlayerMessage(player, "You can't kick the owner of this clan channel.:clan:"); - return; - } - if (target == player) { - WorldPacketRepository.sendPlayerMessage(player, "You can't kick yourself.:clan:"); - return; - } - for (PlayerSession p : players) { - WorldPacketRepository.sendMessage(p, player, 2, "[Attempting to kick/ban " + StringUtils.formatDisplayName(target.getUsername()) + " from this Clan Chat.]"); - } - leave(target, true); - banned.put(target.getUsername(), System.currentTimeMillis() + (3_600_000)); - WorldPacketRepository.sendPlayerMessage(target, "You have been kicked from the channel.:clan:"); - } - - /** - * Gets the rank for the given player. - * @param player The player. - * @return The rank. - */ - public ClanRank getRank(PlayerSession player) { - ClanRank rank = owner.getCommunication().getContacts().get(player.getUsername()); - if (player.getRights() == 2 && player != owner) { - return ClanRank.ADMINISTRATOR; - } - if (rank == null) { - if (player == owner) { - return ClanRank.OWNER; - } - return ClanRank.NONE; - } - return rank; - } - - /** - * Checks if the player is banned. - * @param username The username of the player. - * @return {@code True} if so. - */ - private boolean isBanned(String username) { - Long time = banned.get(username); - if (time == null) { - return false; - } - if (time < System.currentTimeMillis()) { - banned.remove(username); - return false; - } - return true; - } - - /** - * Clears the clan chat. - * @param disable If the clan chat is getting disabled. - */ - public void clean(boolean disable) { - for (Iterator it = players.iterator(); it.hasNext();) { - PlayerSession player = it.next(); - boolean remove = disable; - if (!remove) { - remove = getRank(player).ordinal() < getJoinRequirement().getValue(); - } - if (remove) { - leave(player, false); - it.remove(); - } - } - if (players.isEmpty()) { - banned.clear(); - } - update(); - } - - /** - * Renames the clan chat. - * @param name The new clan name. - */ - public void rename(String name) { - owner.getCommunication().setClanName(name); - update(); - } - - /** - * Gets the clan name. - * @return The clan name. - */ - public String getName() { - return owner.getCommunication().getClanName(); - } - - /** - * Gets the owner value. - * @return The owner. - */ - public PlayerSession getOwner() { - return owner; - } - - /** - * Sets the owner value. - * @param owner The owner to set. - */ - public void setOwner(PlayerSession owner) { - this.owner = owner; - } - - /** - * Gets the players value. - * @return The players. - */ - public List getPlayers() { - return players; - } - - /** - * Gets the clans value. - * @return The clans. - */ - public static Map getClans() { - return CLANS; - } - - /** - * Gets the joinRequirement value. - * @return The joinRequirement. - */ - public ClanRank getJoinRequirement() { - return owner.getCommunication().getJoinRequirement(); - } - - /** - * Gets the messageRequirement value. - * @return The messageRequirement. - */ - public ClanRank getMessageRequirement() { - return owner.getCommunication().getMessageRequirement(); - } - - /** - * Gets the kickRequirement value. - * @return The kickRequirement. - */ - public ClanRank getKickRequirement() { - return owner.getCommunication().getKickRequirement(); - } - - /** - * Gets the lootRequirement value. - * @return The lootRequirement. - */ - public ClanRank getLootRequirement() { - return owner.getCommunication().getLootRequirement(); - } - - /** - * Gets the banned value. - * @return The banned. - */ - public Map getBanned() { - return banned; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/communication/CommunicationInfo.java b/Management-Server/src/main/java/ms/system/communication/CommunicationInfo.java deleted file mode 100644 index 86afae5ec..000000000 --- a/Management-Server/src/main/java/ms/system/communication/CommunicationInfo.java +++ /dev/null @@ -1,656 +0,0 @@ -package ms.system.communication; - -import ms.ServerConstants; -import ms.net.packet.WorldPacketRepository; -import ms.system.util.ByteBufferUtils; -import ms.system.util.StringUtils; -import ms.world.GameServer; -import ms.world.PlayerSession; -import ms.world.WorldDatabase; - -import java.nio.ByteBuffer; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; -import java.util.Map.Entry; - -/** - * Holds communication information. - * @author Emperor - * - */ -public final class CommunicationInfo { - - /** - * The maximum list size. - */ - public static final int MAX_LIST_SIZE = 200; - - /** - * The clan ranks. - */ - private final Map contacts = new HashMap<>(); - - /** - * The list of blocked players. - */ - private final List blocked = new ArrayList<>(20); - - /** - * The player's clan name. - */ - private String clanName = ""; - - /** - * The current clan this player is in. - */ - private String currentClan = "2009scape"; - - /** - * The rank required for joining. - */ - private ClanRank joinRequirement = ClanRank.FRIEND; - - /** - * The rank required for messaging. - */ - private ClanRank messageRequirement = ClanRank.NONE; - - /** - * The rank required for kicking members. - */ - private ClanRank kickRequirement = ClanRank.OWNER; - - /** - * The rank required for loot-share. - */ - private ClanRank lootRequirement = ClanRank.ADMINISTRATOR; - - /** - * The public chat setting. - */ - private int publicChatSetting = 0; - - /** - * The private chat setting. - */ - private int privateChatSetting = 0; - - /** - * The trade setting. - */ - private int tradeSetting = 0; - - /** - * The player session. - */ - private PlayerSession player; - - /** - * Constructs a new {@code CommunicationInfo} {@code Object}. - * @param player The player. - */ - public CommunicationInfo(PlayerSession player) { - this.setPlayer(player); - } - - /** - * Called when the player logs in. - */ - public void sync() { - if (privateChatSetting != 2) { - for (GameServer server : WorldDatabase.getWorlds()) { - if (server != null && server.isActive()) { - List names = new ArrayList<>(20); - for (PlayerSession p : server.getPlayers().values()) { - if (p.isActive() && p.getCommunication().contacts.containsKey(player.getUsername())) { - if (privateChatSetting == 0 || contacts.containsKey(p.getUsername())) { - names.add(p.getUsername()); - } - } - } - WorldPacketRepository.notifyPlayers(server, player, names); - } - } - } - } - - /** - * Called when the player logs out. - */ - public void clear() { - for (GameServer server : WorldDatabase.getWorlds()) { - if (server != null && server.isActive()) { - WorldPacketRepository.notifyLogout(server, player); - } - } - if (player.getClan() != null) { - player.getClan().leave(player, true); - } - } - - /** - * Saves the communication info. - * @param statement The buffer. - * @throws SQLException The exception if thrown. - */ - public void save(PreparedStatement statement) throws SQLException { - String contacts = ""; - String blocked = ""; - StringBuilder blockedBuilder = new StringBuilder(); - for (int i = 0; i < this.blocked.size(); i++) { - String blockline = (i == 0 ? "" : ",") + this.blocked.get(i); - blockedBuilder.append(blockline); - } - blocked = blockedBuilder.toString(); - int count = 0; - StringBuilder contactBuilder = new StringBuilder(); - for (Entry entry : this.contacts.entrySet()) { - String contactLine = "{" + entry.getKey() + "," + entry.getValue().ordinal() + "}" + (count == this.contacts.size() - 1 ? "" : "~"); - contactBuilder.append(contactLine); - count++; - } - contacts = contactBuilder.toString(); - statement.setString(3, contacts); - statement.setString(4, blocked); - statement.setString(5, clanName); - statement.setString(6, currentClan); - statement.setString(7, joinRequirement.ordinal() + "," + messageRequirement.ordinal() + "," + kickRequirement.ordinal() + "," + lootRequirement.ordinal()); - statement.setString(8, publicChatSetting + "," + privateChatSetting + "," + tradeSetting); - } - - /** - * Parses the communication info from the database. - * @param set The result set. - * @throws SQLException The exception if thrown. - */ - public void parse(ResultSet set) throws SQLException { - String contacts = set.getString("contacts"); - String[] tokens; - if (contacts != null && !contacts.isEmpty()) { - String[] datas = contacts.split("~"); - for (String d : datas) { - tokens = d.replace("{", "").replace("}", "").split(","); - if (tokens.length < 2) { - continue; - } - this.contacts.put(tokens[0], ClanRank.values()[Integer.parseInt(tokens[1])]); - } - } - String bl = set.getString("blocked"); - if (bl != null && !bl.isEmpty()) { - tokens = bl.split(","); - blocked.addAll(Arrays.asList(tokens)); - } - clanName = set.getString("clanName"); - currentClan = set.getString("currentClan"); - String clanReqs = set.getString("clanReqs"); - if (!clanReqs.isEmpty()) { - tokens = clanReqs.split(","); - ClanRank rank = null; - int ordinal = 0; - for (int i = 0; i < tokens.length; i++) { - ordinal = Integer.parseInt(tokens[i]); - if (ordinal < 0 || ordinal > ClanRank.values().length -1) { - continue; - } - rank = ClanRank.values()[ordinal]; - switch (i) { - case 0: - joinRequirement = rank; - break; - case 1: - messageRequirement = rank; - break; - case 2: - if (ordinal < 3 || ordinal > 8) { - break; - } - kickRequirement = rank; - break; - case 3: - lootRequirement = rank; - break; - default: - break; - } - } - } - String chatSettings = set.getString("chatSettings"); - if (!chatSettings.isEmpty()) { - tokens = chatSettings.split(","); - for (int i = 0; i < tokens.length; i++) { - switch (i) { - case 0: - publicChatSetting = Integer.parseInt(tokens[0]); - break; - case 1: - privateChatSetting = Integer.parseInt(tokens[1]); - break; - case 2: - tradeSetting = Integer.parseInt(tokens[2]); - break; - default: - System.out.println("Illegal arg count in chatsetting string: " + chatSettings); - break; - } - } - } - } - - /** - * Saves the communication info. - * @param buffer The buffer. - */ - public void save(ByteBuffer buffer) { - buffer.put((byte) contacts.size()); - for(Entry contact : contacts.entrySet()){ - ByteBufferUtils.putString(contact.getKey(), buffer); - buffer.put((byte) contact.getValue().ordinal()); - } - buffer.put((byte) blocked.size()); - for (String name : blocked) { - ByteBufferUtils.putString(name, buffer); - } - ByteBufferUtils.putString(clanName, buffer); - if (currentClan != null) { - ByteBufferUtils.putString(currentClan, buffer.put((byte) 1)); - } else { - buffer.put((byte) 0); - } - buffer.put((byte) joinRequirement.ordinal()); - buffer.put((byte) messageRequirement.ordinal()); - buffer.put((byte) kickRequirement.ordinal()); - buffer.put((byte) lootRequirement.ordinal()); - buffer.put((byte) publicChatSetting); - buffer.put((byte) privateChatSetting); - buffer.put((byte) tradeSetting); - } - - /** - * Parses the communication info from the buffer. - * @param buffer The buffer. - */ - public void parse(ByteBuffer buffer) { - int length = buffer.get() & 0xFF; - for (int i = 0; i < length; i++) { - contacts.put(ByteBufferUtils.getString(buffer), ClanRank.values()[buffer.get() & 0xFF]); - } - length = buffer.get() & 0xFF; - for (int i = 0; i < length; i++) { - blocked.add(ByteBufferUtils.getString(buffer)); - } - clanName = ByteBufferUtils.getString(buffer); - if (buffer.get() == 1) { - currentClan = ByteBufferUtils.getString(buffer); - } - joinRequirement = ClanRank.values()[buffer.get()]; - messageRequirement = ClanRank.values()[buffer.get()]; - kickRequirement = ClanRank.values()[buffer.get()]; - lootRequirement = ClanRank.values()[buffer.get()]; - publicChatSetting = buffer.get(); - privateChatSetting = buffer.get(); - tradeSetting = buffer.get(); - } - - /** - * Sends a message to the target. - * @param target The target. - * @param message The message to send. - */ - public void sendMessage(String target, String message) { - PlayerSession receiver = WorldDatabase.getPlayer(target); - if (receiver == null || !receiver.isActive()) { - WorldPacketRepository.sendPlayerMessage(player, "That player is currently offline."); - return; - } - WorldPacketRepository.sendMessage(player, receiver, 0, message); - WorldPacketRepository.sendMessage(receiver, player, 1, message); - } - - /** - * Adds a contact. - * @param contact The contact to add. - */ - public void add(String contact) { - if (contacts.size() >= MAX_LIST_SIZE) { - WorldPacketRepository.sendPlayerMessage(player, "Your friend list is full."); - return; - } - if (blocked.contains(contact)) { - WorldPacketRepository.sendPlayerMessage(player, "Please remove " + StringUtils.formatDisplayName(contact) + " from your ignored list first."); - return; - } - if (contacts.containsKey(contact)) { - WorldPacketRepository.sendPlayerMessage(player, StringUtils.formatDisplayName(contact) + " is already on your friend list."); - return; - } - contacts.put(contact, ClanRank.FRIEND); - WorldPacketRepository.sendContactUpdate(player, contact, false, false, getWorldId(player, contact), null); - ClanRepository clan = ClanRepository.getClans().get(player.getUsername()); - if (clan != null) { - clan.update(); - } - if (privateChatSetting == 1) { - PlayerSession other = WorldDatabase.getPlayer(contact); - if (other != null && other.isActive() && other.getCommunication().getContacts().containsKey(player.getUsername())) { - WorldPacketRepository.sendContactUpdate(other, player.getUsername(), false, false, getWorldId(other, player.getUsername()), null); - } - } - } - - /** - * Gets the world id for the given contact. - * @param player The player. - * @param contact The contact. - * @return The world id to display. - */ - public static int getWorldId(PlayerSession player, String contact) { - PlayerSession p = WorldDatabase.getPlayer(contact); - if (p == null || !p.isActive() || p.getCommunication().getPrivateChatSetting() == 2) { - return 0; - } - if (p.getCommunication().getBlocked().contains(player.getUsername())) { - return 0; - } - if (p.getCommunication().getPrivateChatSetting() == 1) { - if (p.getCommunication().getContacts().containsKey(player.getUsername())) { - return p.getWorldId(); - } - return 0; - } - return p.getWorldId(); - } - - /** - * Removes a contact. - * @param contact The contact to remove. - * @param block If the contact should be removed from the block list. - */ - public void remove(String contact, boolean block) { - PlayerSession other = WorldDatabase.getPlayer(contact); - if (block) { - blocked.remove(contact); - if (other != null && other.isActive() && other.getCommunication().getContacts().containsKey(player.getUsername())) { - WorldPacketRepository.sendContactUpdate(other, player.getUsername(), false, false, getWorldId(other, player.getUsername()), null); - } - } else { - contacts.remove(contact); - ClanRepository clan = ClanRepository.getClans().get(player.getUsername()); - if (clan != null) { - clan.update(); - } - if (privateChatSetting == 1 && other != null && other.isActive() && other.getCommunication().getContacts().containsKey(player.getUsername())) { - WorldPacketRepository.sendContactUpdate(other, player.getUsername(), false, false, getWorldId(other, player.getUsername()), null); - } - } - WorldPacketRepository.sendContactUpdate(player, contact, block, true, 0, null); - } - - - /** - * Adds a blocked contact. - * @param contact The contact to block. - */ - public void block(String contact) { - if (blocked.size() >= MAX_LIST_SIZE) { - WorldPacketRepository.sendPlayerMessage(player, "Your ignore list is full."); - return; - } - if (contacts.containsKey(contact)) { - WorldPacketRepository.sendPlayerMessage(player, "Please remove " + StringUtils.formatDisplayName(contact) + " from your friends list first."); - return; - } - if (blocked.contains(contact)) { - WorldPacketRepository.sendPlayerMessage(player, StringUtils.formatDisplayName(contact) + " is already on your friend list."); - return; - } - blocked.add(contact); - WorldPacketRepository.sendContactUpdate(player, contact, true, false, 0, null); - PlayerSession other = WorldDatabase.getPlayer(contact); - if (other != null && other.isActive() && other.getCommunication().getContacts().containsKey(player.getUsername())) { - WorldPacketRepository.sendContactUpdate(other, player.getUsername(), false, false, 0, null); - } - } - - /** - * Updates the clan rank of a certain contact. - * @param contact The contact. - * @param clanRank The clan rank to set. - */ - public void updateClanRank(String contact, ClanRank clanRank) { - if (!contacts.containsKey(contact)) { - System.err.println("Could not find contact " + contact + " to update clan rank!"); - return; - } - contacts.put(contact, clanRank); - ClanRepository clan = ClanRepository.getClans().get(player.getUsername()); - if (clan != null) { - clan.update(); - } - - WorldPacketRepository.sendContactUpdate(player, contact, false, false, 0, clanRank); - } - - /** - * Updates the settings. - * @param publicSetting The public chat setting. - * @param privateSetting The private chat setting. - * @param tradeSetting The trade setting. - */ - public void updateSettings(int publicSetting, int privateSetting, int tradeSetting) { - this.publicChatSetting = publicSetting; - this.tradeSetting = tradeSetting; - if (this.privateChatSetting != privateSetting) { - updatePrivateSetting(privateSetting); - } - } - - /** - * Updates the private chat setting. - * @param privateSetting The private chat setting. - */ - private void updatePrivateSetting(int privateSetting) { - this.privateChatSetting = privateSetting; - for (GameServer server : WorldDatabase.getWorlds()) { - if (server != null && server.isActive()) { - if (privateSetting == 2) { - WorldPacketRepository.notifyLogout(server, player); - continue; - } - for (PlayerSession p : server.getPlayers().values()) { - if (p.isActive() && p.getCommunication().contacts.containsKey(player.getUsername())) { - WorldPacketRepository.sendContactUpdate(p, player.getUsername(), false, false, getWorldId(p, player.getUsername()), null); - } - } - } - } - } - - /** - * Gets the contacts value. - * @return The contacts. - */ - public Map getContacts() { - return contacts; - } - - /** - * Gets the clan rank for the given contact. - * @param contact The contact. - * @return The rank. - */ - public ClanRank getRank(String contact) { - return contacts.get(contact); - } - - /** - * Gets the blocked value. - * @return The blocked. - */ - public List getBlocked() { - return blocked; - } - - /** - * Gets the clanName value. - * @return The clanName. - */ - public String getClanName() { - return clanName; - } - - /** - * Sets the clanName value. - * @param clanName The clanName to set. - */ - public void setClanName(String clanName) { - this.clanName = clanName; - } - - /** - * Gets the currentClan value. - * @return The currentClan. - */ - public String getCurrentClan() { - return currentClan; - } - - /** - * Sets the currentClan value. - * @param currentClan The currentClan to set. - */ - public void setCurrentClan(String currentClan) { - this.currentClan = currentClan; - } - - /** - * Gets the player value. - * @return The player. - */ - public PlayerSession getPlayer() { - return player; - } - - /** - * Sets the player value. - * @param player The player to set. - */ - public void setPlayer(PlayerSession player) { - this.player = player; - } - - /** - * Gets the joinRequirement value. - * @return The joinRequirement. - */ - public ClanRank getJoinRequirement() { - return joinRequirement; - } - - /** - * Sets the joinRequirement value. - * @param joinRequirement The joinRequirement to set. - */ - public void setJoinRequirement(ClanRank joinRequirement) { - this.joinRequirement = joinRequirement; - } - - /** - * Gets the messageRequirement value. - * @return The messageRequirement. - */ - public ClanRank getMessageRequirement() { - return messageRequirement; - } - - /** - * Sets the messageRequirement value. - * @param messageRequirement The messageRequirement to set. - */ - public void setMessageRequirement(ClanRank messageRequirement) { - this.messageRequirement = messageRequirement; - } - - /** - * Gets the kickRequirement value. - * @return The kickRequirement. - */ - public ClanRank getKickRequirement() { - return kickRequirement; - } - - /** - * Sets the kickRequirement value. - * @param kickRequirement The kickRequirement to set. - */ - public void setKickRequirement(ClanRank kickRequirement) { - this.kickRequirement = kickRequirement; - } - - /** - * Gets the lootRequirement value. - * @return The lootRequirement. - */ - public ClanRank getLootRequirement() { - return lootRequirement; - } - - /** - * Sets the lootRequirement value. - * @param lootRequirement The lootRequirement to set. - */ - public void setLootRequirement(ClanRank lootRequirement) { - this.lootRequirement = lootRequirement; - } - - /** - * Gets the publicChatSetting value. - * @return The publicChatSetting. - */ - public int getPublicChatSetting() { - return publicChatSetting; - } - - /** - * Sets the publicChatSetting value. - * @param publicChatSetting The publicChatSetting to set. - */ - public void setPublicChatSetting(int publicChatSetting) { - this.publicChatSetting = publicChatSetting; - } - - /** - * Gets the privateChatSetting value. - * @return The privateChatSetting. - */ - public int getPrivateChatSetting() { - return privateChatSetting; - } - - /** - * Sets the privateChatSetting value. - * @param privateChatSetting The privateChatSetting to set. - */ - public void setPrivateChatSetting(int privateChatSetting) { - this.privateChatSetting = privateChatSetting; - } - - /** - * Gets the tradeSetting value. - * @return The tradeSetting. - */ - public int getTradeSetting() { - return tradeSetting; - } - - /** - * Sets the tradeSetting value. - * @param tradeSetting The tradeSetting to set. - */ - public void setTradeSetting(int tradeSetting) { - this.tradeSetting = tradeSetting; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/mysql/SQLColumn.java b/Management-Server/src/main/java/ms/system/mysql/SQLColumn.java deleted file mode 100644 index 727c3075f..000000000 --- a/Management-Server/src/main/java/ms/system/mysql/SQLColumn.java +++ /dev/null @@ -1,121 +0,0 @@ -package ms.system.mysql; - -/** - * Represents a column used in an SQL table. - * @author Emperor - * - */ -public final class SQLColumn { - - /** - * The name. - */ - private final String name; - - /** - * The data type. - */ - private final Class type; - - /** - * If this column should never be updated in the database. - */ - private final boolean neverUpdate; - - /** - * The value. - */ - private Object value; - - /** - * If the column value changed. - */ - private boolean changed; - - /** - * Constructs a new {@code SQLColumn} {@code Object}. - * @param name The column name. - * @param type The data type. - */ - public SQLColumn(String name, Class type) { - this(name, type, false); - } - - /** - * Constructs a new {@code SQLColumn} {@code Object}. - * @param name The column name. - * @param type The data type. - * @param neverUpdate If this column should never be updated in the database. - */ - public SQLColumn(String name, Class type, boolean neverUpdate) { - this.name = name; - this.type = type; - this.neverUpdate = neverUpdate; - } - - /** - * Gets the name. - * @return The name. - */ - public String getName() { - return name; - } - - /** - * Updates the value. - * @param value The value. - */ - public void updateValue(Object value) { - this.changed = value != this.value; - this.value = value; - } - - /** - * Gets the value. - * @return The value. - */ - public Object getValue() { - return value; - } - - /** - * Sets the value. - * @param value The value to set. - */ - public void setValue(Object value) { - this.value = value; - this.changed = false; - } - - /** - * Gets the changed. - * @return The changed. - */ - public boolean isChanged() { - return changed; - } - - /** - * Sets the changed. - * @param changed The changed to set. - */ - public void setChanged(boolean changed) { - this.changed = changed; - } - - /** - * Gets the type. - * @return The type. - */ - public Class getType() { - return type; - } - - /** - * Gets the neverUpdate. - * @return The neverUpdate. - */ - public boolean isNeverUpdate() { - return neverUpdate; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/mysql/SQLEntryHandler.java b/Management-Server/src/main/java/ms/system/mysql/SQLEntryHandler.java deleted file mode 100644 index 94ee8b5c2..000000000 --- a/Management-Server/src/main/java/ms/system/mysql/SQLEntryHandler.java +++ /dev/null @@ -1,202 +0,0 @@ -package ms.system.mysql; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -/** - * Handles an SQL entry. - * @author Emperor - * @param The entry type. - */ -public abstract class SQLEntryHandler { - - /** - * The connection. - */ - protected Connection connection; - - /** - * The entry. - */ - protected T entry; - - /** - * The result set. - */ - protected ResultSet result; - - /** - * The table name. - */ - protected String table; - - /** - * The column name. - */ - private String column; - - /** - * The value to use. - */ - protected String value; - - /** - * Constructs a new {@code SQLEntryHandler} {@code Object}. - * @param entry The entry. - * @param table The table name. - * @param column column name. - * @param value The column value. - */ - public SQLEntryHandler(T entry, String table, String column, String value) { - this.entry = entry; - this.table = table; - this.column = column; - this.value = value; - } - - /** - * Reads the SQL entry. - * @param entry The entry. - */ - public static void read(SQLEntryHandler entry) { - entry.connection = entry.getConnection(); - if (entry.connection == null) { - //System.err.println("Could not read SQL data: connection is null!"); - return; - } - try { - entry.read(); - if (entry.result == null || !entry.result.next()) { - entry.create(); - } else { - entry.parse(); - } - } catch (SQLException e) { - e.printStackTrace(); - } - SQLManager.close(entry.connection); - entry.connection = null; - } - - /** - * Writes the entry data on the SQL database. - * @param entry The entry. - */ - public static void write(SQLEntryHandler entry) { - write(entry, entry.getConnection(), true); - } - - /** - * Reads the SQL entry. - * @param entry The entry. - */ - public static void write(SQLEntryHandler entry, Connection connection, boolean commit) { - if (connection == null) { - //System.err.println("Could not write SQL data: connection is null!"); - return; - } - entry.connection = connection; - try { - if (!commit) { - entry.connection.setAutoCommit(false); - } - entry.save(); - } catch (SQLException e) { - e.printStackTrace(); - } - if (commit) { - SQLManager.close(entry.connection); - } - entry.connection = null; - } - - /** - * Reads the table from the SQL database. - * @throws SQLException When an SQL exception occurs. - */ - public void read() throws SQLException { - PreparedStatement statement = connection.prepareStatement("SELECT " + getReadSelection() + " FROM " + table + " WHERE " + column + " = ?"); - statement.setString(1, value); - result = statement.executeQuery(); - } - - /** - * Gets the result. - * @return the result. - */ - public ResultSet getResult() { - return result; - } - - /** - * Gets the selection. - * @return The selection. - */ - public String getReadSelection() { - return "*"; - } - - /** - * Gets the writing statement. - * @param create If we are creating a new row. - * @param columns The columns to update. - */ - public PreparedStatement getWritingStatement(boolean create, String...columns) { - PreparedStatement statement = null; - try { - StringBuilder sb = new StringBuilder(); - if (create) { - sb.append("INSERT INTO ").append(table).append(" (").append(column); - for (String name : columns) { - sb.append(",").append(name); - } - sb.append(") VALUES (?"); - for (int i = 0; i < columns.length; i++) { - sb.append(",?"); - } - sb.append(")"); - } else { - sb.append("UPDATE ").append(table).append(" SET "); - for (int i = 0; i < columns.length; i++) { - sb.append(columns[i]).append("=?"); - if (i < columns.length - 1) { - sb.append(","); - } - } - sb.append(" WHERE ").append(column).append("=?"); - } - statement = connection.prepareStatement(sb.toString()); - statement.setString(create ? 1 : columns.length + 1, value); - } catch (SQLException e) { - e.printStackTrace(); - } - return statement; - } - - /** - * Parses the entry. - * @throws SQLException When an SQL exception occurs. - */ - public abstract void parse() throws SQLException; - - /** - * Creates a new row in the database. - * @throws SQLException When an SQL exception occurs. - */ - public abstract void create() throws SQLException; - - /** - * Saves the entry. - * @throws SQLException When an SQL exception occurs. - */ - public abstract void save() throws SQLException; - - /** - * Gets the connection. - * @return The connection. - */ - public abstract Connection getConnection(); - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/mysql/SQLManager.kt b/Management-Server/src/main/java/ms/system/mysql/SQLManager.kt deleted file mode 100644 index 05affcacc..000000000 --- a/Management-Server/src/main/java/ms/system/mysql/SQLManager.kt +++ /dev/null @@ -1,64 +0,0 @@ -package ms.system.mysql - -import ms.system.util.ManagementConstants -import ms.system.util.ManagementConstants.DATABASE_HOST_ADDRESS -import ms.system.util.ManagementConstants.DATABASE_NAME -import ms.system.util.ManagementConstants.DATABASE_PASSWORD -import ms.system.util.ManagementConstants.DATABASE_PORT -import ms.system.util.ManagementConstants.DATABASE_USERNAME -import java.sql.Connection -import java.sql.DriverManager -import java.sql.SQLException - -/** - * Manages the sql connections. - * @author Vexia - */ -object SQLManager { - - /** - * IF the sql manager is initialized. - */ - var isInitialized = false - - /** - * Initializes the sql manager. - */ - @JvmStatic - fun init() { - isInitialized = true - WorldListSQLHandler.clearWorldList() - } - - /** - * Gets a connection from the pool. - * @return The connection. - */ - @JvmStatic - val connection: Connection? - get() { - try { - return DriverManager.getConnection( - "jdbc:mysql://$DATABASE_HOST_ADDRESS:$DATABASE_PORT/$DATABASE_NAME?useTimezone=true&serverTimezone=UTC", - DATABASE_USERNAME, - DATABASE_PASSWORD - ) - } catch (e: SQLException) { - println("Error: Mysql error message=" + e.message + ".") - } - return null - } - - /** - * Releases the connection so it's available for usage. - * @param connection The connection. - */ - @JvmStatic - fun close(connection: Connection) { - try { - connection.close() - } catch (e: SQLException) { - e.printStackTrace() - } - } -} diff --git a/Management-Server/src/main/java/ms/system/mysql/SQLTable.java b/Management-Server/src/main/java/ms/system/mysql/SQLTable.java deleted file mode 100644 index 3447edb23..000000000 --- a/Management-Server/src/main/java/ms/system/mysql/SQLTable.java +++ /dev/null @@ -1,55 +0,0 @@ -package ms.system.mysql; - -import java.util.ArrayList; -import java.util.List; - -/** - * Represents an SQL table. - * @author Emperor - * - */ -public final class SQLTable { - - /** - * The columns. - */ - private final SQLColumn[] columns; - - /** - * Constructs a new {@code SQLTable} {@code Object}. - * @param columns The columns. - */ - public SQLTable(SQLColumn...columns) { - this.columns = columns; - } - - /** - * Gets the column for the given name. - * @param name The column name. - * @return The column. - */ - public SQLColumn getColumn(String name) { - for (SQLColumn column : columns) { - if (column.getName().equals(name)) { - return column; - } - } - return null; - } - - /** - * Gets the changed columns. - * @return The columns. - */ - public List getChanged() { - List updated = new ArrayList<>(20); - for (int i = 0; i < columns.length; i++) { - SQLColumn column = columns[i]; - if (column.isChanged()) { - updated.add(column); - } - } - return updated; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/mysql/WorldListSQLHandler.java b/Management-Server/src/main/java/ms/system/mysql/WorldListSQLHandler.java deleted file mode 100644 index cf5eb4674..000000000 --- a/Management-Server/src/main/java/ms/system/mysql/WorldListSQLHandler.java +++ /dev/null @@ -1,84 +0,0 @@ -package ms.system.mysql; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - -import ms.world.GameServer; -import ms.world.info.WorldInfo; - -/** - * Handles the world list SQL database. - * @author Emperor - * - */ -public final class WorldListSQLHandler extends SQLEntryHandler { - - /** - * The table for this sql entry. - */ - private static final String TABLE = "worlds"; - - /** - * Constructs a new {@code WorldListSQLHandler} {@code Object}. - * @param entry The game server entry. - */ - public WorldListSQLHandler(GameServer entry) { - super(entry, TABLE, "world", "" + entry.getInfo().getWorldId()); - } - - /** - * Clears the world list. - */ - public static void clearWorldList() { - Connection connection = SQLManager.getConnection(); - if(connection == null) return; - try { - PreparedStatement statement = connection.prepareStatement("DELETE FROM " + TABLE); - statement.executeUpdate(); - } catch (Exception e) { - e.printStackTrace(); - SQLManager.close(connection); - } finally { - SQLManager.close(connection); - } - } - - @Override - public void parse() throws SQLException { - - } - - @Override - public void create() throws SQLException { - PreparedStatement statement = connection.prepareStatement("INSERT "+ table + "(world, ip, players, country, member, revision) VALUES('" + value + "', '" + entry.getInfo().getAddress() + "', '" + entry.getPlayerAmount() + "', '" + entry.getInfo().getCountry().getId() + "', '" + (entry.getInfo().isMembers() ? 1 : 0) + "', '" + entry.getInfo().getRevision() + "')"); - statement.executeUpdate(); - SQLManager.close(statement.getConnection()); - } - - @Override - public void save() throws SQLException { - super.read(); - if (result == null || !result.next()) { - create(); - return; - } - int players = entry.getPlayerAmount(); - WorldInfo info = entry.getInfo(); - if (!entry.isActive()) { - players = -1; - } - if (players <= 0) { - PreparedStatement statement = connection.prepareStatement("UPDATE members SET online='0' WHERE lastWorld='" + value + "'"); - statement.executeUpdate(); - } - PreparedStatement statement = connection.prepareStatement("UPDATE " + table + " SET players='" + players + "', ip='" + info.getAddress() + "', country='" + info.getCountry().getId() + "', member='" + (info.isMembers() ? 1 : 0) + "', revision='" + info.getRevision() + "' WHERE world='" + value + "'"); - statement.executeUpdate(); - SQLManager.close(statement.getConnection()); - } - - @Override - public Connection getConnection() { - return SQLManager.getConnection(); - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/util/ByteBufferUtils.java b/Management-Server/src/main/java/ms/system/util/ByteBufferUtils.java deleted file mode 100644 index e60e3b2eb..000000000 --- a/Management-Server/src/main/java/ms/system/util/ByteBufferUtils.java +++ /dev/null @@ -1,154 +0,0 @@ -package ms.system.util; - -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; - - -/** - * Holds utility methods for reading/writing a byte buffer. - * @author Emperor - * - */ -public final class ByteBufferUtils { - - /** - * Gets a string from the byte buffer. - * @param buffer The byte buffer. - * @return The string. - */ - public static String getString(ByteBuffer buffer) { - StringBuilder sb = new StringBuilder(); - byte b; - while ((b = buffer.get()) != 0) { - sb.append((char) b); - } - return sb.toString(); - } - - /** - * Puts a string on the byte buffer. - * @param s The string to put. - * @param buffer The byte buffer. - */ - public static void putString(String s, ByteBuffer buffer) { - buffer.put(s.getBytes(StandardCharsets.UTF_8)).put((byte) 0); - } - - /** - * Gets a string from the byte buffer. - * @param s The string. - * @param buffer The byte buffer. - * @return The string. - */ - public static ByteBuffer putGJ2String(String s, ByteBuffer buffer) { - byte[] packed = new byte[256]; - int length = packGJString2(0, packed, s); - return buffer.put((byte) 0).put(packed, 0, length).put((byte) 0); - } - - /** - * Decodes the XTEA encryption. - * @param keys The keys. - * @param start The start index. - * @param end The end index. - * @param buffer The byte buffer. - */ - public static void decodeXTEA(int[] keys, int start, int end, ByteBuffer buffer) { - int l = buffer.position(); - buffer.position(start); - int length = (end - start) / 8; - for (int i = 0; i < length; i++) { - int firstInt = buffer.getInt(); - int secondInt = buffer.getInt(); - int sum = 0xc6ef3720; - int delta = 0x9e3779b9; - for (int j = 32; j-- > 0;) { - secondInt -= keys[(sum & 0x1c84) >>> 11] + sum ^ (firstInt >>> 5 ^ firstInt << 4) + firstInt; - sum -= delta; - firstInt -= (secondInt >>> 5 ^ secondInt << 4) + secondInt ^ keys[sum & 3] + sum; - } - buffer.position(buffer.position() - 8); - buffer.putInt(firstInt); - buffer.putInt(secondInt); - } - buffer.position(l); - } - - /** - * Converts a String to an Integer? - * - * @param position - * The position. - * @param buffer - * The buffer used. - * @param string - * The String to convert. - * @return The Integer. - */ - public static int packGJString2(int position, byte[] buffer, String string) { - int length = string.length(); - int offset = position; - for (int i = 0; length > i; i++) { - int character = string.charAt(i); - if (character > 127) { - if (character > 2047) { - buffer[offset++] = (byte) ((character | 919275) >> 12); - buffer[offset++] = (byte) (128 | ((character >> 6) & 63)); - buffer[offset++] = (byte) (128 | (character & 63)); - } else { - buffer[offset++] = (byte) ((character | 12309) >> 6); - buffer[offset++] = (byte) (128 | (character & 63)); - } - } else - buffer[offset++] = (byte) character; - } - return offset - position; - } - - /** - * Gets a tri-byte from the buffer. - * @param buffer The buffer. - * @return The value. - */ - public static int getTriByte(ByteBuffer buffer) { - return ((buffer.get() & 0xFF) << 16) + ((buffer.get() & 0xFF) << 8) + (buffer.get() & 0xFF); - } - - /** - * Gets a smart from the buffer. - * @param buffer The buffer. - * @return The value. - */ - public static int getSmart(ByteBuffer buffer) { - int peek = buffer.get() & 0xFF; - if (peek <= Byte.MAX_VALUE) { - return peek; - } - return ((peek << 8) | (buffer.get() & 0xFF)) - 32768; - } - - /** - * Gets a smart from the buffer. - * @param buffer The buffer. - * @return The value. - */ - public static int getBigSmart(ByteBuffer buffer) { - int value = 0; - int current = getSmart(buffer); - while (current == 32767) { - current = getSmart(buffer); - value += 32767; - } - value += current; - return value; - } - - /** - * Constructs a new {@code ByteBufferUtils} {@code Object}. - */ - private ByteBufferUtils() { - /* - * empty. - */ - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/util/Command.java b/Management-Server/src/main/java/ms/system/util/Command.java deleted file mode 100644 index fbfe0da09..000000000 --- a/Management-Server/src/main/java/ms/system/util/Command.java +++ /dev/null @@ -1,52 +0,0 @@ -package ms.system.util; - -/** - * Represents a command. - * @author Emperor - * - */ -public abstract class Command { - - /** - * The command name. - */ - private final String name; - - /** - * The command info. - */ - private final String info; - - /** - * Constructs a new {@code Command} {@code Object}. - * @param name The command name. - * @param info The command info. - */ - public Command(String name, String info) { - this.name = name; - this.info = info; - } - - /** - * Runs the command. - * @param args The arguments. - */ - public abstract void run(String...args); - - /** - * Gets the name value. - * @return The name. - */ - public String getName() { - return name; - } - - /** - * Gets the info value. - * @return The info. - */ - public String getInfo() { - return info; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/util/EncryptionManager.java b/Management-Server/src/main/java/ms/system/util/EncryptionManager.java deleted file mode 100644 index f5ee249c0..000000000 --- a/Management-Server/src/main/java/ms/system/util/EncryptionManager.java +++ /dev/null @@ -1,815 +0,0 @@ -package ms.system.util; - -import java.io.UnsupportedEncodingException; -import java.security.SecureRandom; - -/** - * Represents the class of simple encryption functions. - * @author Unknown - */ -public class EncryptionManager { - - // Define the BCrypt workload to use when generating password hashes. 10-31 is a valid value. - private static int workload = 12; - - /** - * Singleton instance. - */ - private static final EncryptionManager INSTANCE = new EncryptionManager(); - - /** - * Constructs a new {@code EncryptionManager} {@code Object}. - */ - private EncryptionManager() { - //empty. - } - - /** - * This method can be used to generate a string representing an account password - * suitable for storing in a database. It will be an OpenBSD-style crypt(3) formatted - * hash string of length=60 - * The bcrypt workload is specified in the above static variable, a value from 10 to 31. - * A workload of 12 is a very reasonable safe default as of 2013. - * This automatically handles secure 128-bit salt generation and storage within the hash. - * @param password_plaintext The account's plaintext password as provided during account creation, - * or when changing an account's password. - * @return String - a string of length 60 that is the bcrypt hashed password in crypt(3) format. - */ - public String hashPassword(String password_plaintext) { - String salt = BCrypt.gensalt(workload); - String hashed_password = BCrypt.hashpw(password_plaintext, salt); - return(hashed_password); - } - - /** - * This method can be used to verify a computed hash from a plaintext (e.g. during a login - * request) with that of a stored hash from a database. The password hash from the database - * must be passed as the second variable. - * @param password_plaintext The account's plaintext password, as provided during a login request - * @param stored_hash The account's stored password hash, retrieved from the authorization database - * @return boolean - true if the password matches the password of the stored hash, false otherwise - */ - public boolean checkPassword(String password_plaintext, String stored_hash) { - boolean password_verified = false; - if(null == stored_hash || !stored_hash.startsWith("$2a$")) - throw new java.lang.IllegalArgumentException("Invalid hash provided for comparison"); - password_verified = BCrypt.checkpw(password_plaintext, stored_hash); - return(password_verified); - } - - // Copyright (c) 2006 Damien Miller - // - // Permission to use, copy, modify, and distribute this software for any - // purpose with or without fee is hereby granted, provided that the above - // copyright notice and this permission notice appear in all copies. - // - // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - /** - * Gets the instance value. - * @return The instance. - */ - public static EncryptionManager getInstance() { - return INSTANCE; - } - - /** - * BCrypt implements OpenBSD-style Blowfish password hashing using - * the scheme described in "A Future-Adaptable Password Scheme" by - * Niels Provos and David Mazieres. - *

- * This password hashing system tries to thwart off-line password - * cracking using a computationally-intensive hashing algorithm, - * based on Bruce Schneier's Blowfish cipher. The work factor of - * the algorithm is parameterised, so it can be increased as - * computers get faster. - *

- * Usage is really simple. To hash a password for the first time, - * call the hashpw method with a random salt, like this: - *

- * - * String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());
- *
- *

- * To check whether a plaintext password matches one that has been - * hashed previously, use the checkpw method: - *

- * - * if (BCrypt.checkpw(candidate_password, stored_hash))
- *     System.out.println("It matches");
- * else
- *     System.out.println("It does not match");
- *
- *

- * The gensalt() method takes an optional parameter (log_rounds) - * that determines the computational complexity of the hashing: - *

- * - * String strong_salt = BCrypt.gensalt(10)
- * String stronger_salt = BCrypt.gensalt(12)
- *
- *

- * The amount of work increases exponentially (2**log_rounds), so - * each increment is twice as much work. The default log_rounds is - * 10, and the valid range is 4 to 31. - * - * @author Damien Miller - * @version 0.2 - */ - public static class BCrypt { - // BCrypt parameters - private static final int GENSALT_DEFAULT_LOG2_ROUNDS = 10; - private static final int BCRYPT_SALT_LEN = 16; - - // Blowfish parameters - private static final int BLOWFISH_NUM_ROUNDS = 16; - - // Initial contents of key schedule - private static final int P_orig[] = { - 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, - 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, - 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, - 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, - 0x9216d5d9, 0x8979fb1b - }; - private static final int S_orig[] = { - 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, - 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, - 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, - 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, - 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, - 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, - 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, - 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, - 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, - 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, - 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, - 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, - 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, - 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, - 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, - 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, - 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, - 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, - 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, - 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, - 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, - 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, - 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, - 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, - 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, - 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, - 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, - 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, - 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, - 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, - 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, - 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, - 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, - 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, - 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, - 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, - 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, - 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, - 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, - 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, - 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, - 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, - 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, - 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, - 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, - 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, - 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, - 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, - 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, - 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, - 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, - 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, - 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, - 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, - 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, - 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, - 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, - 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, - 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, - 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, - 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, - 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, - 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, - 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, - 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, - 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, - 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, - 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, - 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, - 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, - 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, - 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, - 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, - 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, - 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, - 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, - 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, - 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, - 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, - 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, - 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, - 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, - 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, - 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, - 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, - 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, - 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, - 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, - 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, - 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, - 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, - 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, - 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, - 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, - 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, - 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, - 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, - 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, - 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, - 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, - 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, - 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, - 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, - 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, - 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, - 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, - 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, - 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, - 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, - 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, - 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, - 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, - 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, - 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, - 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, - 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, - 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, - 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, - 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, - 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, - 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, - 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, - 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, - 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, - 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, - 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, - 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, - 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, - 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, - 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, - 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, - 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, - 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, - 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, - 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, - 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, - 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, - 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, - 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, - 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, - 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, - 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, - 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, - 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, - 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, - 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, - 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, - 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, - 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, - 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, - 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, - 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, - 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, - 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, - 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, - 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, - 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, - 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, - 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, - 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, - 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, - 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, - 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, - 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, - 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, - 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, - 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, - 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, - 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, - 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, - 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, - 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, - 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, - 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, - 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, - 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, - 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, - 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, - 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, - 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, - 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, - 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, - 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, - 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, - 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, - 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, - 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, - 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, - 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, - 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, - 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, - 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, - 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, - 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, - 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, - 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, - 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, - 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, - 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, - 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, - 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, - 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, - 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, - 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, - 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, - 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, - 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, - 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, - 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, - 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, - 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, - 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, - 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, - 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, - 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, - 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, - 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, - 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, - 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, - 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, - 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, - 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, - 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, - 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, - 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, - 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, - 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, - 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, - 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, - 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, - 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, - 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, - 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, - 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, - 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, - 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, - 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, - 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, - 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, - 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, - 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, - 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, - 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, - 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, - 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, - 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, - 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, - 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, - 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, - 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, - 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, - 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, - 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, - 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, - 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, - 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6 - }; - - // bcrypt IV: "OrpheanBeholderScryDoubt" - static private final int bf_crypt_ciphertext[] = { - 0x4f727068, 0x65616e42, 0x65686f6c, - 0x64657253, 0x63727944, 0x6f756274 - }; - - // Table for Base64 encoding - static private final char base64_code[] = { - '.', '/', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', - 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', - 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', - 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', - 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', - '6', '7', '8', '9' - }; - - // Table for Base64 decoding - static private final byte index_64[] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 0, 1, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, - -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, - -1, -1, -1, -1, -1, -1, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 53, -1, -1, -1, -1, -1 - }; - - // Expanded Blowfish key - private int P[]; - private int S[]; - - /** - * Encode a byte array using bcrypt's slightly-modified base64 - * encoding scheme. Note that this is *not* compatible with - * the standard MIME-base64 encoding. - * - * @param d the byte array to encode - * @param len the number of bytes to encode - * @return base64-encoded string - * @exception IllegalArgumentException if the length is invalid - */ - private static String encode_base64(byte d[], int len) - throws IllegalArgumentException { - int off = 0; - StringBuffer rs = new StringBuffer(); - int c1, c2; - - if (len <= 0 || len > d.length) - throw new IllegalArgumentException ("Invalid len"); - - while (off < len) { - c1 = d[off++] & 0xff; - rs.append(base64_code[(c1 >> 2) & 0x3f]); - c1 = (c1 & 0x03) << 4; - if (off >= len) { - rs.append(base64_code[c1 & 0x3f]); - break; - } - c2 = d[off++] & 0xff; - c1 |= (c2 >> 4) & 0x0f; - rs.append(base64_code[c1 & 0x3f]); - c1 = (c2 & 0x0f) << 2; - if (off >= len) { - rs.append(base64_code[c1 & 0x3f]); - break; - } - c2 = d[off++] & 0xff; - c1 |= (c2 >> 6) & 0x03; - rs.append(base64_code[c1 & 0x3f]); - rs.append(base64_code[c2 & 0x3f]); - } - return rs.toString(); - } - - /** - * Look up the 3 bits base64-encoded by the specified character, - * range-checking againt conversion table - * @param x the base64-encoded value - * @return the decoded value of x - */ - private static byte char64(char x) { - if ((int)x > index_64.length) - return -1; - return index_64[(int)x]; - } - - /** - * Decode a string encoded using bcrypt's base64 scheme to a - * byte array. Note that this is *not* compatible with - * the standard MIME-base64 encoding. - * @param s the string to decode - * @param maxolen the maximum number of bytes to decode - * @return an array containing the decoded bytes - * @throws IllegalArgumentException if maxolen is invalid - */ - private static byte[] decode_base64(String s, int maxolen) - throws IllegalArgumentException { - StringBuffer rs = new StringBuffer(); - int off = 0, slen = s.length(), olen = 0; - byte ret[]; - byte c1, c2, c3, c4, o; - - if (maxolen <= 0) - throw new IllegalArgumentException ("Invalid maxolen"); - - while (off < slen - 1 && olen < maxolen) { - c1 = char64(s.charAt(off++)); - c2 = char64(s.charAt(off++)); - if (c1 == -1 || c2 == -1) - break; - o = (byte)(c1 << 2); - o |= (c2 & 0x30) >> 4; - rs.append((char)o); - if (++olen >= maxolen || off >= slen) - break; - c3 = char64(s.charAt(off++)); - if (c3 == -1) - break; - o = (byte)((c2 & 0x0f) << 4); - o |= (c3 & 0x3c) >> 2; - rs.append((char)o); - if (++olen >= maxolen || off >= slen) - break; - c4 = char64(s.charAt(off++)); - o = (byte)((c3 & 0x03) << 6); - o |= c4; - rs.append((char)o); - ++olen; - } - - ret = new byte[olen]; - for (off = 0; off < olen; off++) - ret[off] = (byte)rs.charAt(off); - return ret; - } - - /** - * Blowfish encipher a single 64-bit block encoded as - * two 32-bit halves - * @param lr an array containing the two 32-bit half blocks - * @param off the position in the array of the blocks - */ - private final void encipher(int lr[], int off) { - int i, n, l = lr[off], r = lr[off + 1]; - - l ^= P[0]; - for (i = 0; i <= BLOWFISH_NUM_ROUNDS - 2;) { - // Feistel substitution on left word - n = S[(l >> 24) & 0xff]; - n += S[0x100 | ((l >> 16) & 0xff)]; - n ^= S[0x200 | ((l >> 8) & 0xff)]; - n += S[0x300 | (l & 0xff)]; - r ^= n ^ P[++i]; - - // Feistel substitution on right word - n = S[(r >> 24) & 0xff]; - n += S[0x100 | ((r >> 16) & 0xff)]; - n ^= S[0x200 | ((r >> 8) & 0xff)]; - n += S[0x300 | (r & 0xff)]; - l ^= n ^ P[++i]; - } - lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1]; - lr[off + 1] = l; - } - - /** - * Cycically extract a word of key material - * @param data the string to extract the data from - * @param offp a "pointer" (as a one-entry array) to the - * current offset into data - * @return the next word of material from data - */ - private static int streamtoword(byte data[], int offp[]) { - int i; - int word = 0; - int off = offp[0]; - - for (i = 0; i < 4; i++) { - word = (word << 8) | (data[off] & 0xff); - off = (off + 1) % data.length; - } - - offp[0] = off; - return word; - } - - /** - * Initialise the Blowfish key schedule - */ - private void init_key() { - P = (int[])P_orig.clone(); - S = (int[])S_orig.clone(); - } - - /** - * Key the Blowfish cipher - * @param key an array containing the key - */ - private void key(byte key[]) { - int i; - int koffp[] = { 0 }; - int lr[] = { 0, 0 }; - int plen = P.length, slen = S.length; - - for (i = 0; i < plen; i++) - P[i] = P[i] ^ streamtoword(key, koffp); - - for (i = 0; i < plen; i += 2) { - encipher(lr, 0); - P[i] = lr[0]; - P[i + 1] = lr[1]; - } - - for (i = 0; i < slen; i += 2) { - encipher(lr, 0); - S[i] = lr[0]; - S[i + 1] = lr[1]; - } - } - - /** - * Perform the "enhanced key schedule" step described by - * Provos and Mazieres in "A Future-Adaptable Password Scheme" - * http://www.openbsd.org/papers/bcrypt-paper.ps - * @param data salt information - * @param key password information - */ - private void ekskey(byte data[], byte key[]) { - int i; - int koffp[] = { 0 }, doffp[] = { 0 }; - int lr[] = { 0, 0 }; - int plen = P.length, slen = S.length; - - for (i = 0; i < plen; i++) - P[i] = P[i] ^ streamtoword(key, koffp); - - for (i = 0; i < plen; i += 2) { - lr[0] ^= streamtoword(data, doffp); - lr[1] ^= streamtoword(data, doffp); - encipher(lr, 0); - P[i] = lr[0]; - P[i + 1] = lr[1]; - } - - for (i = 0; i < slen; i += 2) { - lr[0] ^= streamtoword(data, doffp); - lr[1] ^= streamtoword(data, doffp); - encipher(lr, 0); - S[i] = lr[0]; - S[i + 1] = lr[1]; - } - } - - /** - * Perform the central password hashing step in the - * bcrypt scheme - * @param password the password to hash - * @param salt the binary salt to hash with the password - * @param log_rounds the binary logarithm of the number - * of rounds of hashing to apply - * @return an array containing the binary hashed password - */ - private byte[] crypt_raw(byte password[], byte salt[], int log_rounds) { - int rounds, i, j; - int cdata[] = (int[])bf_crypt_ciphertext.clone(); - int clen = cdata.length; - byte ret[]; - - if (log_rounds < 4 || log_rounds > 31) - throw new IllegalArgumentException ("Bad number of rounds"); - rounds = 1 << log_rounds; - if (salt.length != BCRYPT_SALT_LEN) - throw new IllegalArgumentException ("Bad salt length"); - - init_key(); - ekskey(salt, password); - for (i = 0; i < rounds; i++) { - key(password); - key(salt); - } - - for (i = 0; i < 64; i++) { - for (j = 0; j < (clen >> 1); j++) - encipher(cdata, j << 1); - } - - ret = new byte[clen * 4]; - for (i = 0, j = 0; i < clen; i++) { - ret[j++] = (byte)((cdata[i] >> 24) & 0xff); - ret[j++] = (byte)((cdata[i] >> 16) & 0xff); - ret[j++] = (byte)((cdata[i] >> 8) & 0xff); - ret[j++] = (byte)(cdata[i] & 0xff); - } - return ret; - } - - /** - * Hash a password using the OpenBSD bcrypt scheme - * @param password the password to hash - * @param salt the salt to hash with (perhaps generated - * using BCrypt.gensalt) - * @return the hashed password - */ - public static String hashpw(String password, String salt) { - BCrypt B; - String real_salt; - byte passwordb[], saltb[], hashed[]; - char minor = (char)0; - int rounds, off = 0; - StringBuffer rs = new StringBuffer(); - - if (salt.charAt(0) != '$' || salt.charAt(1) != '2') - throw new IllegalArgumentException ("Invalid salt version"); - if (salt.charAt(2) == '$') - off = 3; - else { - minor = salt.charAt(2); - if (minor != 'a' || salt.charAt(3) != '$') - throw new IllegalArgumentException ("Invalid salt revision"); - off = 4; - } - - // Extract number of rounds - if (salt.charAt(off + 2) > '$') - throw new IllegalArgumentException ("Missing salt rounds"); - rounds = Integer.parseInt(salt.substring(off, off + 2)); - - real_salt = salt.substring(off + 3, off + 25); - try { - passwordb = (password + (minor >= 'a' ? "\000" : "")).getBytes("UTF-8"); - } catch (UnsupportedEncodingException uee) { - throw new AssertionError("UTF-8 is not supported"); - } - - saltb = decode_base64(real_salt, BCRYPT_SALT_LEN); - - B = new BCrypt(); - hashed = B.crypt_raw(passwordb, saltb, rounds); - - rs.append("$2"); - if (minor >= 'a') - rs.append(minor); - rs.append("$"); - if (rounds < 10) - rs.append("0"); - rs.append(Integer.toString(rounds)); - rs.append("$"); - rs.append(encode_base64(saltb, saltb.length)); - rs.append(encode_base64(hashed, - bf_crypt_ciphertext.length * 4 - 1)); - return rs.toString(); - } - - /** - * Generate a salt for use with the BCrypt.hashpw() method - * @param log_rounds the log2 of the number of rounds of - * hashing to apply - the work factor therefore increases as - * 2**log_rounds. - * @param random an instance of SecureRandom to use - * @return an encoded salt value - */ - public static String gensalt(int log_rounds, SecureRandom random) { - StringBuffer rs = new StringBuffer(); - byte rnd[] = new byte[BCRYPT_SALT_LEN]; - - random.nextBytes(rnd); - - rs.append("$2a$"); - if (log_rounds < 10) - rs.append("0"); - rs.append(Integer.toString(log_rounds)); - rs.append("$"); - rs.append(encode_base64(rnd, rnd.length)); - return rs.toString(); - } - - /** - * Generate a salt for use with the BCrypt.hashpw() method - * @param log_rounds the log2 of the number of rounds of - * hashing to apply - the work factor therefore increases as - * 2**log_rounds. - * @return an encoded salt value - */ - public static String gensalt(int log_rounds) { - return gensalt(log_rounds, new SecureRandom()); - } - - /** - * Generate a salt for use with the BCrypt.hashpw() method, - * selecting a reasonable default for the number of hashing - * rounds to apply - * @return an encoded salt value - */ - public static String gensalt() { - return gensalt(GENSALT_DEFAULT_LOG2_ROUNDS); - } - - /** - * Check that a plaintext password matches a previously hashed - * one - * @param plaintext the plaintext password to verify - * @param hashed the previously-hashed password - * @return true if the passwords match, false otherwise - */ - public static boolean checkpw(String plaintext, String hashed) { - return (hashed.compareTo(hashpw(plaintext, hashed)) == 0); - } - } - -} diff --git a/Management-Server/src/main/java/ms/system/util/ManagementConfigParser.kt b/Management-Server/src/main/java/ms/system/util/ManagementConfigParser.kt deleted file mode 100644 index 90c0ce80f..000000000 --- a/Management-Server/src/main/java/ms/system/util/ManagementConfigParser.kt +++ /dev/null @@ -1,71 +0,0 @@ -package ms.system.util - -import org.json.simple.JSONObject -import org.json.simple.parser.JSONParser -import java.io.File -import java.io.FileReader -import kotlin.system.exitProcess - -/** - * Class for parsing the server config, I.E default.conf - * @param path the path to the JSON file to parse. - * @author Ceikry - */ -class ManagementConfigParser(path: String) { - val pathTo = parsePath(path) - val confFile = File(pathTo) - val parser = JSONParser() - var reader: FileReader? = null - var data: JSONObject? = null - - init { - if(!confFile.canonicalFile.exists()){ - println("Could not find ${confFile.canonicalFile} - Double check your working directory!") - exitProcess(0) - } else if(!pathTo.contains(".json")) { - println("Config file MUST be a JSON file!!") - println("(Got $pathTo)") - } else { - reader = FileReader(pathTo) - data = parser.parse(reader) as JSONObject - parseDatabaseInformation() - parseWorldTechnicalSettings() - ManagementConstants.SECRET_KEY = data!!["secret_key"].toString() - } - } - - private fun parseDatabaseInformation(){ - data ?: return - val dbData = data!!["DatabaseInformation"] as JSONObject - ManagementConstants.parseDBProp(dbData) - } - - private fun parseWorldTechnicalSettings(){ - data ?: return - val wtiData = data!!["WorldTechnicalInformation"] as JSONObject - ManagementConstants.parseWTIProp(wtiData) - } - - /** - * Parses a path string - * @author Ceikry - * @param pathString The string to parse - * @return a String with the proper file separators for the current OS. - */ - fun parsePath(pathString: String): String { - var pathTokens: List? = null - if(pathString.contains("/")) - pathTokens = pathString.split("/") - else if(pathString.contains("\\")) - pathTokens = pathString.split("\\") - - pathTokens ?: return pathString //return the initial pathString if path does not contain file separators. - var pathProduct = "" - for(token in pathTokens){ - if(token != "") - pathProduct += "$token${File.separator}" - } - - return pathProduct - } -} diff --git a/Management-Server/src/main/java/ms/system/util/ManagementConstants.kt b/Management-Server/src/main/java/ms/system/util/ManagementConstants.kt deleted file mode 100644 index 01d40fb5a..000000000 --- a/Management-Server/src/main/java/ms/system/util/ManagementConstants.kt +++ /dev/null @@ -1,44 +0,0 @@ -package ms.system.util - -import org.json.simple.JSONObject - -object ManagementConstants { - - //MySQL main database name - var DATABASE_NAME: String = "global" - - //MySQL database username - var DATABASE_USERNAME: String = "root" - - //MySQL database password - var DATABASE_PASSWORD: String = "" - - //MySQL host - var DATABASE_HOST_ADDRESS: String = "127.0.0.1" - - //MySQL port - var DATABASE_PORT: Int = 3306 - - //Max amount of worlds supported on the world list - var MAX_WORLD_AMOUNT: Int = 10 - - //User world hop delay in seconds - var WORLD_HOP_DELAY: Long = 20_000L - - @JvmStatic - var SECRET_KEY: String = "" - - fun parseDBProp(data: JSONObject) { - DATABASE_NAME = data["database_name"].toString() - DATABASE_USERNAME = data["database_username"].toString() - DATABASE_PASSWORD = data["database_password"].toString() - DATABASE_HOST_ADDRESS = data["database_host"].toString() - DATABASE_PORT = data["database_port"].toString().toInt() - } - - fun parseWTIProp(data: JSONObject) { - MAX_WORLD_AMOUNT = data["world_limit"].toString().toInt() - WORLD_HOP_DELAY = data["worldhop_delay"].toString().toLong() - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/util/PlayerDatabaseGen.java b/Management-Server/src/main/java/ms/system/util/PlayerDatabaseGen.java deleted file mode 100644 index e4187f7ee..000000000 --- a/Management-Server/src/main/java/ms/system/util/PlayerDatabaseGen.java +++ /dev/null @@ -1,19 +0,0 @@ -package ms.system.util; - -/** - * Handles generating a player database. - * @author Emperor - * - */ -public final class PlayerDatabaseGen { - - /** - * The main method. - * @param args The arguments. - */ - public static void main(String[] args) { - // TODO Auto-generated method stub - - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/system/util/StringUtils.java b/Management-Server/src/main/java/ms/system/util/StringUtils.java deleted file mode 100644 index 2a85aea8f..000000000 --- a/Management-Server/src/main/java/ms/system/util/StringUtils.java +++ /dev/null @@ -1,640 +0,0 @@ -package ms.system.util; - -import java.text.DecimalFormat; - -import ms.net.packet.IoBuffer; - -/** - * The string utils. - * @author Emperor - * - */ -public final class StringUtils { - - /** - * The valid characters to be used in names/messages/... - */ - private static final char[] VALID_CHARS = { - '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', - 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', - 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' - }; - /** - * The an int array241. - */ - private final static int[] anIntArray241 = { 215, 203, 83, 158, 104, 101, 93, 84, - 107, 103, 109, 95, 94, 98, 89, 86, 70, 41, 32, 27, 24, 23, -1, -2, - 26, -3, -4, 31, 30, -5, -6, -7, 37, 38, 36, -8, -9, -10, 40, -11, - -12, 55, 48, 46, 47, -13, -14, -15, 52, 51, -16, -17, 54, -18, -19, - 63, 60, 59, -20, -21, 62, -22, -23, 67, 66, -24, -25, 69, -26, -27, - 199, 132, 80, 77, 76, -28, -29, 79, -30, -31, 87, 85, -32, -33, - -34, -35, -36, 197, -37, 91, -38, 134, -39, -40, -41, 97, -42, -43, - 133, 106, -44, 117, -45, -46, 139, -47, -48, 110, -49, -50, 114, - 113, -51, -52, 116, -53, -54, 135, 138, 136, 129, 125, 124, -55, - -56, 130, 128, -57, -58, -59, 183, -60, -61, -62, -63, -64, 148, - -65, -66, 153, 149, 145, 144, -67, -68, 147, -69, -70, -71, 152, - 154, -72, -73, -74, 157, 171, -75, -76, 207, 184, 174, 167, 166, - 165, -77, -78, -79, 172, 170, -80, -81, -82, 178, -83, 177, 182, - -84, -85, 187, 181, -86, -87, -88, -89, 206, 221, -90, 189, -91, - 198, 254, 262, 195, 196, -92, -93, -94, -95, -96, 252, 255, 250, - -97, 211, 209, -98, -99, 212, -100, 213, -101, -102, -103, 224, - -104, 232, 227, 220, 226, -105, -106, 246, 236, -107, 243, -108, - -109, 231, 237, 235, -110, -111, 239, 238, -112, -113, -114, -115, - -116, 241, -117, 244, -118, -119, 248, -120, 249, -121, -122, -123, - 253, -124, -125, -126, -127, 259, 258, -128, -129, 261, -130, -131, - 390, 327, 296, 281, 274, 271, 270, -132, -133, 273, -134, -135, - 278, 277, -136, -137, 280, -138, -139, 289, 286, 285, -140, -141, - 288, -142, -143, 293, 292, -144, -145, 295, -146, -147, 312, 305, - 302, 301, -148, -149, 304, -150, -151, 309, 308, -152, -153, 311, - -154, -155, 320, 317, 316, -156, -157, 319, -158, -159, 324, 323, - -160, -161, 326, -162, -163, 359, 344, 337, 334, 333, -164, -165, - 336, -166, -167, 341, 340, -168, -169, 343, -170, -171, 352, 349, - 348, -172, -173, 351, -174, -175, 356, 355, -176, -177, 358, -178, - -179, 375, 368, 365, 364, -180, -181, 367, -182, -183, 372, 371, - -184, -185, 374, -186, -187, 383, 380, 379, -188, -189, 382, -190, - -191, 387, 386, -192, -193, 389, -194, -195, 454, 423, 408, 401, - 398, 397, -196, -197, 400, -198, -199, 405, 404, -200, -201, 407, - -202, -203, 416, 413, 412, -204, -205, 415, -206, -207, 420, 419, - -208, -209, 422, -210, -211, 439, 432, 429, 428, -212, -213, 431, - -214, -215, 436, 435, -216, -217, 438, -218, -219, 447, 444, 443, - -220, -221, 446, -222, -223, 451, 450, -224, -225, 453, -226, -227, - 486, 471, 464, 461, 460, -228, -229, 463, -230, -231, 468, 467, - -232, -233, 470, -234, -235, 479, 476, 475, -236, -237, 478, -238, - -239, 483, 482, -240, -241, 485, -242, -243, 499, 495, 492, 491, - -244, -245, 494, -246, -247, 497, -248, 502, -249, 506, 503, -250, - -251, 505, -252, -253, 508, -254, 510, -255, -256, 0 }; - - /** - * Constructs a new {@code StringUtils.java} {@code Object}. - */ - public StringUtils() { - /** - * empty. - */ - } - /** - * Method used to get the formatted number as a string from the integer inputed. - * @param amount the ammount. - * @return the string value. - */ - public static String getFormattedNumber(int amount) { - return new DecimalFormat("#,###,##0").format(amount).toString(); - } - /** - * Checks if the string contains an invalid character. - * @param nameThe string. - * @return {@code True} if so. - */ - public static boolean containsInvalidCharacter(String name) { - for (char c : name.toCharArray()) { - boolean pass = false; - for (char vc : VALID_CHARS) - if (vc == c) { - pass = true; - break; - } - if (!pass) - return true; - } - return false; - } - /** - * If a word starts with a e i o u h for grammar = a + n. - * @param word The word. - * @return If the a should have +n {@code true}. - */ - public static boolean isPlusN(String word) { - if (word == null) - return false; - String s = word.toLowerCase(); - return s.charAt(0) == 'a' || s.charAt(0) == 'e' || s.charAt(0) == 'i' - || s.charAt(0) == 'o' || s.charAt(0) == 'u' - || (s.charAt(0) == 'h' && s.length() > 1 && s.charAt(1) != 'e'); - } - /** - * Method used to get the player name as a long. - * @param s the string. - * @return the long. - */ - public static long getPlayerNameLong(String s) { - long l = 0L; - for(int i = 0; i < s.length() && i < 12; i++) { - char c = s.charAt(i); - l *= 37L; - if(c >= 'A' && c <= 'Z') l += (1 + c) - 65; - else if(c >= 'a' && c <= 'z') l += (1 + c) - 97; - else if(c >= '0' && c <= '9') l += (27 + c) - 48; - } - while(l % 37L == 0L && l != 0L) l /= 37L; - return l; - } - - /** - * Method used to convert the string to a long. - * @param s the string. - * @return the long. - */ - public static long convertStringToLong(String s) { - if (s.length() > 20) { - throw new IllegalArgumentException("String is too long: " + s); - } - long out = 0L; - for (int i = 0; i < s.length(); ++i) { - long m = reducedMapping(s.codePointAt(i)); - if (m == -1) { - throw new IllegalArgumentException("Unmapped Character in String: " + s); - } - m <<= ((9 - i) * 6) + 4; - out |= m; - } - return out; - } - - /** - * Formats the string as display name. - * @param name The string to format. - * @return The formatted name. - */ - public static String formatDisplayName(String name) { - name = name.replaceAll("_", " "); - name = name.toLowerCase(); - StringBuilder newName = new StringBuilder(); - boolean wasSpace = true; - for (int i = 0; i < name.length(); i++) { - if (wasSpace) { - newName.append(("" + name.charAt(i)).toUpperCase()); - wasSpace = false; - } else { - newName.append(name.charAt(i)); - } - if (name.charAt(i) == ' ') { - wasSpace = true; - } - } - return newName.toString(); - } - - /** - * Gets the byte for the character. - * @param c The character. - * @return The byte. - */ - private static final byte getByte(char c) { - byte charByte; - if (c > 0 && c < '\200' || c >= '\240' && c <= '\377') - charByte = (byte) c; - else if (c != '\u20AC') { - if (c != '\u201A') { - if (c != '\u0192') { - if (c == '\u201E') - charByte = -124; - else if (c != '\u2026') { - if (c != '\u2020') { - if (c == '\u2021') - charByte = -121; - else if (c == '\u02C6') - charByte = -120; - else if (c == '\u2030') - charByte = -119; - else if (c == '\u0160') - charByte = -118; - else if (c == '\u2039') - charByte = -117; - else if (c == '\u0152') - charByte = -116; - else if (c != '\u017D') { - if (c == '\u2018') - charByte = -111; - else if (c != '\u2019') { - if (c != '\u201C') { - if (c == '\u201D') - charByte = -108; - else if (c != '\u2022') { - if (c == '\u2013') - charByte = -106; - else if (c == '\u2014') - charByte = -105; - else if (c == '\u02DC') - charByte = -104; - else if (c == '\u2122') - charByte = -103; - else if (c != '\u0161') { - if (c == '\u203A') - charByte = -101; - else if (c != '\u0153') { - if (c == '\u017E') - charByte = -98; - else if (c != '\u0178') - charByte = 63; - else - charByte = -97; - } else - charByte = -100; - } else - charByte = -102; - } else - charByte = -107; - } else - charByte = -109; - } else - charByte = -110; - } else - charByte = -114; - } else - charByte = -122; - } else - charByte = -123; - } else - charByte = -125; - } else - charByte = -126; - } else - charByte = -128; - return charByte; - } - /** - * Gets the double value of this string - * @param s The string. - * @return The double value. - */ - public static double getDouble(String s) { - s = s.replaceAll(", ", "").replaceAll(",", ""); - StringBuilder sb = new StringBuilder(); - char c; - boolean foundStart = false; - for (int i = 0; i < s.length(); i++) { - c = s.charAt(i); - if (Character.isDigit(c) || c == '-' || c == '.') { - sb.append(c); - foundStart = true; - } else if (foundStart) - break; - } - try { - double amount = Double.parseDouble(sb.toString()); - return amount; - } catch (NumberFormatException e) { - return 0.0; - } - } - /** - * Gets the hash for the string. - * @param str The string. - * @return The hash. - */ - public static final int getNameHash(String str) { - str = str.toLowerCase(); - int hash = 0; - for (int index = 0; index < str.length(); index++) - hash = getByte(str.charAt(index)) + ((hash << 5) - hash); - return hash; - } - /** - * Gets the string value of this string (all html/... removed). - * @param s The string. - * @return The string value. - */ - public static String getString(String s) { - return s.replaceAll("\\<.*?>", "").replaceAll(" ", "") - .replaceAll("Discontinued Item:", ""); - } - /** - * Characters used to convert a String to a Long. - */ - public static char[] validChars = { - '_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', - 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', - 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', - '3', '4', '5', '6', '7', '8', '9' - }; - private final static int[] anIntArray233 = { - 0, 1024, 2048, 3072, 4096, 5120, - 6144, 8192, 9216, 12288, 10240, 11264, 16384, 18432, 17408, 20480, - 21504, 22528, 23552, 24576, 25600, 26624, 27648, 28672, 29696, - 30720, 31744, 32768, 33792, 34816, 35840, 36864, 536870912, - 16777216, 37888, 65536, 38912, 131072, 196608, 33554432, 524288, - 1048576, 1572864, 262144, 67108864, 4194304, 134217728, 327680, - 8388608, 2097152, 12582912, 13631488, 14680064, 15728640, - 100663296, 101187584, 101711872, 101974016, 102760448, 102236160, - 40960, 393216, 229376, 117440512, 104857600, 109051904, 201326592, - 205520896, 209715200, 213909504, 106954752, 218103808, 226492416, - 234881024, 222298112, 224395264, 268435456, 272629760, 276824064, - 285212672, 289406976, 223346688, 293601280, 301989888, 318767104, - 297795584, 298844160, 310378496, 102498304, 335544320, 299892736, - 300941312, 301006848, 300974080, 39936, 301465600, 49152, - 1073741824, 369098752, 402653184, 1342177280, 1610612736, - 469762048, 1476395008, -2147483648, -1879048192, 352321536, - 1543503872, -2013265920, -1610612736, -1342177280, -1073741824, - -1543503872, 356515840, -1476395008, -805306368, -536870912, - -268435456, 1577058304, -134217728, 360710144, -67108864, - 364904448, 51200, 57344, 52224, 301203456, 53248, 54272, 55296, - 56320, 301072384, 301073408, 301074432, 301075456, 301076480, - 301077504, 301078528, 301079552, 301080576, 301081600, 301082624, - 301083648, 301084672, 301085696, 301086720, 301087744, 301088768, - 301089792, 301090816, 301091840, 301092864, 301093888, 301094912, - 301095936, 301096960, 301097984, 301099008, 301100032, 301101056, - 301102080, 301103104, 301104128, 301105152, 301106176, 301107200, - 301108224, 301109248, 301110272, 301111296, 301112320, 301113344, - 301114368, 301115392, 301116416, 301117440, 301118464, 301119488, - 301120512, 301121536, 301122560, 301123584, 301124608, 301125632, - 301126656, 301127680, 301128704, 301129728, 301130752, 301131776, - 301132800, 301133824, 301134848, 301135872, 301136896, 301137920, - 301138944, 301139968, 301140992, 301142016, 301143040, 301144064, - 301145088, 301146112, 301147136, 301148160, 301149184, 301150208, - 301151232, 301152256, 301153280, 301154304, 301155328, 301156352, - 301157376, 301158400, 301159424, 301160448, 301161472, 301162496, - 301163520, 301164544, 301165568, 301166592, 301167616, 301168640, - 301169664, 301170688, 301171712, 301172736, 301173760, 301174784, - 301175808, 301176832, 301177856, 301178880, 301179904, 301180928, - 301181952, 301182976, 301184000, 301185024, 301186048, 301187072, - 301188096, 301189120, 301190144, 301191168, 301193216, 301195264, - 301194240, 301197312, 301198336, 301199360, 301201408, 301202432 - }; - private final static byte[] aByteArray235 = { - 22, 22, 22, 22, 22, 22, 21, 22, 22, - 20, 22, 22, 22, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 3, 8, 22, 16, 22, 16, 17, 7, 13, 13, 13, - 16, 7, 10, 6, 16, 10, 11, 12, 12, 12, 12, 13, 13, 14, 14, 11, 14, - 19, 15, 17, 8, 11, 9, 10, 10, 10, 10, 11, 10, 9, 7, 12, 11, 10, 10, - 9, 10, 10, 12, 10, 9, 8, 12, 12, 9, 14, 8, 12, 17, 16, 17, 22, 13, - 21, 4, 7, 6, 5, 3, 6, 6, 5, 4, 10, 7, 5, 6, 4, 4, 6, 10, 5, 4, 4, - 5, 7, 6, 10, 6, 10, 22, 19, 22, 14, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 21, 22, 21, 22, 22, 22, 21, - 22, 22 - }; - /** - * Encrypt a string for the client. - */ - public static int encryptPlayerChat(byte[] is, int i_25_, int i_26_, int i_27_, byte[] is_28_) { - try { - i_27_ += i_25_; - int i_29_ = 0; - int i_30_ = i_26_ << 3; - for (; i_27_ > i_25_; i_25_++) { - int i_31_ = 0xff & is_28_[i_25_]; - int i_32_ = anIntArray233[i_31_]; - int i_33_ = aByteArray235[i_31_]; - int i_34_ = i_30_ >> 3; - int i_35_ = i_30_ & 0x7; - i_29_ &= (-i_35_ >> 31); - i_30_ += i_33_; - int i_36_ = ((-1 + (i_35_ - -i_33_)) >> 3) + i_34_; - i_35_ += 24; - is[i_34_] = (byte) (i_29_ = (i_29_ | (i_32_ >>> i_35_))); - if ((i_36_ ^ 0xffffffff) < (i_34_ ^ 0xffffffff)) { - i_34_++; - i_35_ -= 8; - is[i_34_] = (byte) (i_29_ = i_32_ >>> i_35_); - if (i_36_ > i_34_) { - i_34_++; - i_35_ -= 8; - is[i_34_] = (byte) (i_29_ = i_32_ >>> i_35_); - if (i_36_ > i_34_) { - i_35_ -= 8; - i_34_++; - is[i_34_] = (byte) (i_29_ = i_32_ >>> i_35_); - if (i_34_ < i_36_) { - i_35_ -= 8; - i_34_++; - is[i_34_] = (byte) (i_29_ = i_32_ << -i_35_); - } - } - } - } - } - return -i_26_ + ((7 + i_30_) >> 3); - } catch (RuntimeException runtimeexception) { - runtimeexception.printStackTrace(); - } - return 0; - } - /** - * Gets an integer value from a string. - * @param s the string. - * @return The value; - */ - public static int getValue(String s) { - s = s.replaceAll(", ", "").replaceAll(",", ""); - StringBuilder sb = new StringBuilder(); - char c; - boolean foundStart = false; - for (int i = 0; i < s.length(); i++) { - c = s.charAt(i); - if (Character.isDigit(c) || c == '-') { - sb.append(c); - foundStart = true; - } else if (foundStart) - break; - } - try { - int amount = Integer.parseInt(sb.toString()); - return amount; - } catch (NumberFormatException e) { - return 0; - } - } - /** - * Checks if the account name is valid. - * @param name The account name. - * @return {@code True} if the account name is invalid. - */ - public static boolean invalidAccountName(String name) { - return name.length() < 2 || name.length() > 12 || name.startsWith("_")|| name.endsWith("_") || name.contains("__") || containsInvalidCharacter(name); - } - - /** - * Converts a long to a string. - * @param l The long. - * @return The string. - */ - public static String longToString(long l) { - int i = 0; - char ac[] = new char[32]; - while (l != 0L) { - long l1 = l; - l /= 37L; - ac[11 - i++] = VALID_CHARS[(int) (l1 - l * 37L)]; - } - return new String(ac, 12 - i, i); - } - - /** - * Packs a GJ2-String. - * @param position The position to start. - * @param buffer The byte-array. - * @param str The string. - * @return The size of the string. - */ - public static final int packGJString2(int position, byte[] buffer, - String str) { - int length = str.length(); - int offset = position; - for (int index = 0; length > index; index++) { - int character = str.charAt(index); - if (character > 127) { - if (character > 2047) { - buffer[offset++] = (byte) ((character | 919275) >> 12); - buffer[offset++] = (byte) (128 | ((character >> 6) & 63)); - buffer[offset++] = (byte) (128 | (character & 63)); - } else { - buffer[offset++] = (byte) ((character | 12309) >> 6); - buffer[offset++] = (byte) (128 | (character & 63)); - } - } else - buffer[offset++] = (byte) character; - } - return offset - position; - } - /** - * Method used to... - * @param x idk, - * @return the idk. - */ - public static long reducedMapping(int x) { - long out = -1; - if (x >= 97 && x <= 122) - out = x - 96; - else if (x >= 65 && x <= 90) - out = x - 37; - else if (x >= 48 && x <= 57) - out = x - +5; - else if (x == 32) - out = 63L; - return out; - } - /** - * Converts a string to a long. - * @param s The string. - * @return The long. - */ - public static long stringToLong(String s) { - long l = 0L; - for (int i = 0; i < s.length() && i < 12; i++) { - char c = s.charAt(i); - l *= 37L; - if (c >= 'A' && c <= 'Z') - l += (1 + c) - 65; - else if (c >= 'a' && c <= 'z') - l += (1 + c) - 97; - else if (c >= '0' && c <= '9') - l += (27 + c) - 48; - } - while (l % 37L == 0L && l != 0L) - l /= 37L; - return l; - } - /** - * Decrypt player chat. - * - * @param buffer - * The buffer - * @param totalChars - * The total chars - * @return The string - */ - public static String decryptPlayerChat(IoBuffer buffer, int totalChars) { - try { - if (totalChars == 0) - return ""; - int charsDecoded = 0; - int i_4_ = 0; - String s = ""; - for (;;) { - byte i_7_ = (byte) buffer.get(); - if (i_7_ >= 0) - i_4_++; - else - i_4_ = anIntArray241[i_4_]; - int i_8_; - if ((i_8_ = anIntArray241[i_4_]) < 0) { - s += (char) (byte) (i_8_ ^ 0xffffffff); - if (totalChars <= ++charsDecoded) - break; - i_4_ = 0; - } - if (((i_7_ & 0x40) ^ 0xffffffff) != -1) - i_4_ = anIntArray241[i_4_]; - else - i_4_++; - if ((i_8_ = anIntArray241[i_4_]) < 0) { - s += (char) (byte) (i_8_ ^ 0xffffffff); - if (++charsDecoded >= totalChars) - break; - i_4_ = 0; - } - if ((0x20 & i_7_) == 0) - i_4_++; - else - i_4_ = anIntArray241[i_4_]; - if ((i_8_ = anIntArray241[i_4_]) < 0) { - s += (char) (byte) (i_8_ ^ 0xffffffff); - if (totalChars <= ++charsDecoded) - break; - i_4_ = 0; - } - if (((0x10 & i_7_) ^ 0xffffffff) == -1) - i_4_++; - else - i_4_ = anIntArray241[i_4_]; - if ((i_8_ = anIntArray241[i_4_]) < 0) { - s += (char) (byte) (i_8_ ^ 0xffffffff); - if (totalChars <= ++charsDecoded) - break; - - i_4_ = 0; - } - if (((0x8 & i_7_) ^ 0xffffffff) != -1) - i_4_ = anIntArray241[i_4_]; - else - i_4_++; - if ((i_8_ = anIntArray241[i_4_]) < 0) { - s += (char) (byte) (i_8_ ^ 0xffffffff); - if (++charsDecoded >= totalChars) - break; - i_4_ = 0; - } - if ((0x4 & i_7_) == 0) - i_4_++; - else - i_4_ = anIntArray241[i_4_]; - if ((i_8_ = anIntArray241[i_4_]) < 0) { - s += (char) (byte) (i_8_ ^ 0xffffffff); - if (totalChars <= ++charsDecoded) - break; - i_4_ = 0; - } - if (((i_7_ & 0x2) ^ 0xffffffff) != -1) - i_4_ = anIntArray241[i_4_]; - else - i_4_++; - if ((i_8_ = anIntArray241[i_4_]) < 0) { - s += (char) (byte) (i_8_ ^ 0xffffffff); - if (totalChars <= ++charsDecoded) - break; - i_4_ = 0; - } - if (((i_7_ & 0x1) ^ 0xffffffff) != -1) - i_4_ = anIntArray241[i_4_]; - else - i_4_++; - if ((i_8_ = anIntArray241[i_4_]) < 0) { - s += (char) (byte) (i_8_ ^ 0xffffffff); - if (++charsDecoded >= totalChars) - break; - i_4_ = 0; - } - } - return s; - } catch (RuntimeException runtimeexception) { - runtimeexception.printStackTrace(); - } - return ""; - } -} diff --git a/Management-Server/src/main/java/ms/system/util/TaskExecutor.java b/Management-Server/src/main/java/ms/system/util/TaskExecutor.java deleted file mode 100644 index e2b3c886b..000000000 --- a/Management-Server/src/main/java/ms/system/util/TaskExecutor.java +++ /dev/null @@ -1,55 +0,0 @@ -package ms.system.util; - -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; - -/** - * A class holding methods to execute tasks. - * @author Emperor - * - */ -public final class TaskExecutor { - - /** - * The executor to use. - */ - private static final ScheduledExecutorService EXECUTOR = Executors.newSingleThreadScheduledExecutor(); - - /** - * The SQL task executor. - */ - private static final ScheduledExecutorService SQL_EXECUTOR = Executors.newSingleThreadScheduledExecutor(); - - /** - * Constructs a new {@code TaskExecutor} {@code Object}. - */ - private TaskExecutor() { - /* - * empty. - */ - } - - /** - * Executes an SQL handling task. - * @param task The task. - */ - public static void executeSQL(Runnable task) { - SQL_EXECUTOR.execute(task); - } - - /** - * Executes the task. - * @param task The task to execute. - */ - public static void execute(Runnable task) { - EXECUTOR.execute(task); - } - - /** - * Gets the executor. - * @return The executor. - */ - public static ScheduledExecutorService getExecutor() { - return EXECUTOR; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/world/GameServer.java b/Management-Server/src/main/java/ms/world/GameServer.java deleted file mode 100644 index fed3069b7..000000000 --- a/Management-Server/src/main/java/ms/world/GameServer.java +++ /dev/null @@ -1,124 +0,0 @@ -package ms.world; - -import ms.net.IoSession; -import ms.net.packet.WorldPacketRepository; -import ms.system.mysql.SQLEntryHandler; -import ms.system.mysql.WorldListSQLHandler; -import ms.system.util.TaskExecutor; -import ms.world.info.Response; -import ms.world.info.WorldInfo; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - -/** - * Represents a game world. - * @author Emperor - * - */ -public final class GameServer { - - /** - * The world info. - */ - private final WorldInfo info; - - /** - * The I/O session. - */ - private IoSession session; - - /** - * The players active on the game server. - */ - private final Map players = new HashMap<>(); - - /** - * The scheduled future for the updating task. - */ - private ScheduledFuture future; - - /** - * constructs a new {@code GameServer} {@code Object}. - * @param info The world info. - */ - public GameServer(WorldInfo info) { - this.info = info; - } - - /** - * Configures the game server. - * @param session The I/O session. - */ - public void configure(IoSession session) { - this.session = session; - session.setGameServer(this); - future = TaskExecutor.getExecutor().scheduleAtFixedRate(() -> { - SQLEntryHandler.write(new WorldListSQLHandler(GameServer.this)); - if (!isActive()) { - future.cancel(false); - future = null; - } - }, 0, 10, TimeUnit.SECONDS); - } - - /** - * Registers a player. - * @param player The player. - */ - public void register(PlayerSession player) { - players.put(player.getUsername(), player); - player.setWorld(this); - player.setActive(true); - player.setWorldId(info.getWorldId()); - player.configure(); - WorldPacketRepository.sendRegistryResponse(this, player, Response.SUCCESSFUL); - player.getCommunication().sync(); - } - - /** - * Checks if the game server is active. - * @return {@code True} if so. - */ - public boolean isActive() { - return session.isActive(); - } - - /** - * @return the playerAmount - */ - public int getPlayerAmount() { - return players.size(); - } - - /** - * @return the info - */ - public WorldInfo getInfo() { - return info; - } - - /** - * @return the session - */ - public IoSession getSession() { - return session; - } - - /** - * @param session the session to set - */ - public void setSession(IoSession session) { - this.session = session; - } - - /** - * Gets the players value. - * @return The players. - */ - public Map getPlayers() { - return players; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/world/PlayerSession.java b/Management-Server/src/main/java/ms/world/PlayerSession.java deleted file mode 100644 index 09c4682d5..000000000 --- a/Management-Server/src/main/java/ms/world/PlayerSession.java +++ /dev/null @@ -1,475 +0,0 @@ -package ms.world; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -import ms.ServerConstants; -import ms.system.communication.ClanRepository; -import ms.system.communication.CommunicationInfo; -import ms.system.mysql.SQLManager; -import ms.world.info.UIDInfo; - -/** - * Represents a player session. - * @author Emperor - * - */ -public final class PlayerSession { - - /** - * The player's communication info. - */ - private CommunicationInfo communication = new CommunicationInfo(this); - - /** - * The game server the player is currently in. - */ - private GameServer world; - - /** - * The current clan. - */ - private ClanRepository clan; - - /** - * The player's UID info. - */ - private UIDInfo uid; - - /** - * The username. - */ - private final String username; - - /** - * The password. - */ - private String password; - - /** - * The player's rights. - */ - private int rights; - - /** - * The world id. - */ - private int worldId; - - /** - * If the player session is active. - */ - private boolean active; - - /** - * The time stamp of last disconnection. - */ - private long disconnectionTime = 0L; - - /** - * How long the player is banned for. - */ - private long banTime; - - /** - * How long the player is muted for. - */ - private long muteTime; - - /** - * The last world the player logged in. - */ - private int lastWorld = -1; - - /** - * The chat icon. - */ - private int chatIcon; - - /** - * Constructs a new {@code PlayerSession} {@code Object}. - * @param username The username. - * @param password The password. - * @param ipAddress The ip address. - * @param macAddress The mac address. - * @param computerName The computer name. - * @param serial The motherboard serial key. - */ - public PlayerSession(String username, String password, UIDInfo uid) { - this.username = username; - this.password = password; - this.uid = uid; - } - - /** - * Parses the session's data from the database. - * @return {@code True} if parsed. - */ - public boolean parse() { - Connection connection = SQLManager.getConnection(); - if (connection == null) { - return false; - } - ResultSet result = null; - PreparedStatement statement; - try { - statement = connection.prepareStatement("SELECT * FROM " + "members" + " WHERE " + "" + "username" + "='" + username.toLowerCase() + "' LIMIT 1"); - result = statement.executeQuery(); - if (result == null || !result.next()) { - SQLManager.close(connection); - return false; - } - rights = result.getInt("rights"); - disconnectionTime = result.getLong("disconnectTime"); - lastWorld = result.getInt("lastWorld"); - banTime = result.getLong("banTime"); - communication.parse(result); - uid.parse(result); - SQLManager.close(connection); - } catch (SQLException ex) { - ex.printStackTrace(); - SQLManager.close(connection); - return false; - } finally { - SQLManager.close(connection); - } - return true; - } - - /** - * Called when a session is removed. - */ - public void remove() { - if (world != null && world.getInfo().getRevision() == 498) { - return; - } - Connection connection = SQLManager.getConnection(); - if (connection == null) { - return; - } - PreparedStatement statement; - try { - statement = connection.prepareStatement("UPDATE members SET disconnectTime = ?, lastWorld = ?, contacts = ?, blocked = ?, clanName = ?, currentClan = ?, clanReqs = ?, chatSettings = ?, online= ? WHERE username = ?"); - statement.setLong(1, System.currentTimeMillis()); - statement.setInt(2, worldId); - communication.save(statement); - statement.setBoolean(9, false); - statement.setString(10, username); - statement.executeUpdate(); - SQLManager.close(connection); - } catch (SQLException e) { - e.printStackTrace(); - SQLManager.close(connection); - } finally { - SQLManager.close(connection); - } - communication.clear(); - } - - /** - * Gets a player session. - * @param username the username. - * @return the player session. - */ - public static PlayerSession get(String username) { - PlayerSession session = new PlayerSession(username, "", new UIDInfo()); - if (!session.parse()) { - return null; - } - return session; - } - - /** - * Configures the player session. - */ - public void configure() { - ClanRepository clan = ClanRepository.getClans().get(username); - if (clan != null) { - clan.setOwner(this); - } - Connection connection = SQLManager.getConnection(); - if (connection == null) { - return; - } - PreparedStatement statement; - try { - statement = connection.prepareStatement("UPDATE members SET online = ?, lastWorld = ?, lastLogin = ? WHERE username = ?"); - statement.setBoolean(1, true); - statement.setInt(2, worldId); - statement.setLong(3, System.currentTimeMillis()); - statement.setString(4, username); - statement.execute(); - SQLManager.close(connection); - } catch (SQLException e) { - e.printStackTrace(); - SQLManager.close(connection); - } finally { - SQLManager.close(connection); - } - } - - /** - * Checks if the player has just moved worlds. - * @return {@code True} if so. - */ - public boolean hasMovedWorld() { - if (rights == 2) { - return false; - } - return System.currentTimeMillis() - disconnectionTime < ServerConstants.WORLD_SWITCH_DELAY; - } - - /** - * Gets the username value. - * @return The username. - */ - public String getUsername() { - return username; - } - - /** - * Gets the password value. - * @return The password. - */ - public String getPassword() { - return password; - } - - /** - * Gets the chat icon. - * @return The chat icon. - */ - public int getChatIcon() { - return chatIcon; - } - - /** - * Gets the ipAddress value. - * @return The ipAddress. - */ - public String getIpAddress() { - return uid.getIp(); - } - - /** - * Gets the macAddress value. - * @return The macAddress. - */ - public String getMacAddress() { - return uid.getMac(); - } - - /** - * Gets the computerName value. - * @return The computerName. - */ - public String getComputerName() { - return uid.getCompName(); - } - - /** - * Gets the worldId value. - * @return The worldId. - */ - public int getWorldId() { - return worldId; - } - - /** - * Sets the worldId value. - * @param worldId The worldId to set. - */ - public void setWorldId(int worldId) { - this.worldId = worldId; - } - - /** - * Gets the active value. - * @return The active. - */ - public boolean isActive() { - return active; - } - - /** - * Sets the active value. - * @param active The active to set. - */ - public void setActive(boolean active) { - this.active = active; - } - - /** - * Gets the serialKey value. - * @return The serialKey. - */ - public String getSerialKey() { - return uid.getSerial(); - } - - /** - * Gets the rights value. - * @return The rights. - */ - public int getRights() { - return rights; - } - - /** - * Sets the rights value. - * @param rights The rights to set. - */ - public void setRights(int rights) { - this.rights = rights; - } - - /** - * If the player is banned. - * @return {@code true} if so. - */ - public boolean isBanned() { - return banTime > System.currentTimeMillis(); - } - - /** - * Gets the banTime value. - * @return The banTime. - */ - public long getBanTime() { - return banTime; - } - - /** - * Gets the muteTime. - * @return the muteTime. - */ - public long getMuteTime() { - return muteTime; - } - - - /** - * Sets the muteTime. - * @param muteTime the muteTime to set - */ - public void setMuteTime(long muteTime) { - this.muteTime = muteTime; - } - - - /** - * Gets the disconnectionTime value. - * @return The disconnectionTime. - */ - public long getDisconnectionTime() { - return disconnectionTime; - } - - /** - * Gets the lastWorld value. - * @return The lastWorld. - */ - public int getLastWorld() { - return lastWorld; - } - - /** - * Sets the lastWorld value. - * @param lastWorld The lastWorld to set. - */ - public void setLastWorld(int lastWorld) { - this.lastWorld = lastWorld; - } - - /** - * Gets the communication value. - * @return The communication. - */ - public CommunicationInfo getCommunication() { - return communication; - } - - /** - * Sets the communication value. - * @param communication The communication to set. - */ - public void setCommunication(CommunicationInfo communication) { - this.communication = communication; - } - - /** - * Gets the world value. - * @return The world. - */ - public GameServer getWorld() { - return world; - } - - /** - * Sets the world value. - * @param world The world to set. - */ - public void setWorld(GameServer world) { - this.world = world; - } - - /** - * Gets the clan value. - * @return The clan. - */ - public ClanRepository getClan() { - return clan; - } - - /** - * Sets the clan value. - * @param clan The clan to set. - */ - public void setClan(ClanRepository clan) { - this.clan = clan; - } - - /** - * Sets the chat icon. - * @param chatIcon - */ - public void setChatIcon(int chatIcon) { - this.chatIcon = chatIcon; - } - - /** - * Gets the uid. - * @return the uid. - */ - public UIDInfo getUid() { - return uid; - } - - /** - * Sets the uid. - * @param uid the uid to set - */ - public void setUid(UIDInfo uid) { - this.uid = uid; - } - - /** - * Sets the disconnect time. - * @param time the time. - */ - public void setDisconnectTime(long time) { - this.disconnectionTime = time; - } - - public boolean equalsSession(PlayerSession o){ - return username.equals(o.username); - } - - @Override - public String toString() { - return "player [name=" + username + ", pass=" + password + ", ip=" + uid.getIp() + ", mac=" + uid.getMac() + ", comp=" + uid.getCompName() + ", msk=" + uid.getSerial() + "]"; - } - -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/world/WorldDatabase.java b/Management-Server/src/main/java/ms/world/WorldDatabase.java deleted file mode 100644 index e23e17f17..000000000 --- a/Management-Server/src/main/java/ms/world/WorldDatabase.java +++ /dev/null @@ -1,275 +0,0 @@ -package ms.world; - -import java.nio.ByteBuffer; - -import ms.ServerConstants; -import ms.net.IoSession; -import ms.net.packet.IoBuffer; -import ms.world.info.CountryFlag; -import ms.world.info.WorldInfo; -import ms09.MSLogger; - -/** - * Holds all the world servers. - * @author Emperor - * - */ -public class WorldDatabase { - - /** - * The game servers. - */ - private static final GameServer[] DATABASE = new GameServer[ServerConstants.WORLD_LIMIT]; - - /** - * The update time stamp. - */ - private static long updateStamp = System.currentTimeMillis(); - - /** - * Used to prevent {@code WorldDatabase} from getting instantiated. - */ - private WorldDatabase() { - /* - * empty. - */ - } - - /** - * Gets the packet to update the world list in the lobby. - * @param player The player. - * @param worldConfiguration If the configuration should be added. - * @param worldStatus If the status should be added. - * @return The {@code OutgoingPacket} to write. - */ - public static void sendUpdate(IoSession session, int updateStamp) { - ByteBuffer buf = ByteBuffer.allocate(1024); - buf.put((byte) 0); - buf.putShort((short) 0); - buf.put((byte) 1); - IoBuffer buffer = new IoBuffer(); - if (updateStamp == (int) WorldDatabase.updateStamp) { - buf.put((byte) 0); - } else { - buf.put((byte) 1); // Indicates an update occured. - putWorldListinfo(buffer); - } - putPlayerInfo(buffer); - if (buffer.toByteBuffer().position() > 0) { - buf.put((ByteBuffer) buffer.toByteBuffer().flip()); - } - buf.putShort(1, (short) (buf.position() - 3)); - session.queue((ByteBuffer) buf.flip()); - } - - /** - * Adds the world status on the packet. - * @param buffer The current packet. - */ - private static void putPlayerInfo(IoBuffer buffer) { - for (GameServer server : DATABASE) { - if (server != null) { - WorldInfo w = server.getInfo(); - buffer.putSmart(w.getWorldId()); - buffer.putShort(server.isActive() ? server.getPlayerAmount() : -1); - } - } - } - - /** - * Sets the countries for each world. - * @param buffer The current packet. - */ - private static void putCountryInfo(IoBuffer buffer) { - for (CountryFlag country : CountryFlag.values()) { - buffer.putSmart(country.getId()); - buffer.putJagString(capitalize(country.name().toLowerCase())); - } - } - - /** - * Converts a string to a capitalized string - * @param name - * @return - */ - private static String capitalize(String name) { - if (name == null || name.length() == 0) { - return name; - } else { - char[] chars = name.toCharArray(); - chars[0] = Character.toUpperCase(chars[0]); - return new String(chars); - } - } - - /** - * Adds the world configuration on the packet. - * @param buffer The current packet. - */ - private static void putWorldListinfo(IoBuffer buffer) { - buffer.putSmart(CountryFlag.values().length); - putCountryInfo(buffer); - buffer.putSmart(0); - buffer.putSmart(DATABASE.length); - buffer.putSmart(getRegisteredAmount()); - for (GameServer server : DATABASE) { - if (server != null) { - WorldInfo w = server.getInfo(); - buffer.putSmart(w.getWorldId()); - buffer.put(w.getCountry().ordinal()); - buffer.putInt(w.getSettings()); - buffer.putJagString(w.getActivity()); - buffer.putJagString(w.getAddress()); - } - } - buffer.putInt((int) updateStamp); - } - - /** - * Gets the amount of worlds registered. - * @return The amount of worlds registered. - */ - public static int getRegisteredAmount() { - int count = 0; - for (GameServer server : DATABASE) { - if (server != null) { - count++; - } - } - return count; - } - - /** - * Registers a game server. - * @param info The game world info. - */ - public static GameServer register(WorldInfo info) { - GameServer server = DATABASE[info.getWorldId()]; - if (server != null && server.getSession().isActive() && !server.getSession().getAddress().equals(info.getAddress())) { - throw new IllegalStateException("World " + info.getWorldId() + " is already registered!"); - } - flagUpdate(); - MSLogger.logInfo("Registered world - [id=" + info.getWorldId() + ", ip=" + info.getAddress() + ", country=" + info.getCountry().name().toLowerCase() + ", revision=" + info.getRevision() + "]!"); - return DATABASE[info.getWorldId()] = new GameServer(info); - } - - public static void unRegister(GameServer server){ - int index = -1; - for(int i = 0; i < DATABASE.length; i++){ - GameServer s = DATABASE[i]; - if(s == server){ - index = i; - break; - } - } - if(index != -1){ - DATABASE[index] = null; - WorldInfo info = server.getInfo(); - MSLogger.logInfo("Unregistered world - [id=" + info.getWorldId() + ", ip=" + info.getAddress() + ", country=" + info.getCountry().name().toLowerCase() + ", revision=" + info.getRevision() + "]!"); - } - } - - /** - * Gets the world id of the player. - * @param username The username of the player. - * @return The world id. - */ - public static int getWorldId(String username) { - return getWorldId(getPlayer(username)); - } - - /** - * Gets the world id of the player. - * @param player The player. - * @return The world id. - */ - public static int getWorldId(PlayerSession player) { - if (player == null || !player.isActive()) { - return 0; - } - return player.getWorldId(); - } - - /** - * Checks if the game world is active. - * @param worldId The world id. - * @return {@code True} if so. - */ - public static boolean isActive(int worldId) { - GameServer server = get(worldId); - return server != null && server.isActive(); - } - - /** - * Checks if the player session for the given name is active. - * @param username The player's username. - * @return {@code True} if so. - */ - public static boolean isActivePlayer(String username) { - PlayerSession session = getPlayer(username); - return session != null && session.isActive(); - } - - /** - * Gets the player session for the given name. - * @param username The player's username. - * @return The player session. - */ - public static PlayerSession getPlayer(String username) { - return getPlayer(username, false); - } - - /** - * Gets the player session for the given name. - * @param username The player's username. - * @param load If we load the users data. - * @return The player session. - */ - public static PlayerSession getPlayer(String username, boolean load) { - for (GameServer server : DATABASE) { - if (server != null && server.isActive()) { - PlayerSession player = server.getPlayers().get(username); - if (player != null) { - return player; - } - } - } - if (load) { - return PlayerSession.get(username); - } - return null; - } - - /** - * Gets the game server for the given world id. - * @param worldId The world id. - * @return The game server. - */ - public static GameServer get(int worldId) { - return DATABASE[worldId]; - } - - /** - * Gets all the game servers. - * @return The list of game servers. - */ - public static GameServer[] getWorlds() { - return DATABASE; - } - - /** - * Gets the updateStamp. - * @return the updateStamp - */ - public static long getUpdateStamp() { - return updateStamp; - } - - /** - * Sets the updateStamp. - * @param updateStamp the updateStamp to set. - */ - public static void flagUpdate() { - WorldDatabase.updateStamp = System.currentTimeMillis(); - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/world/info/CountryFlag.java b/Management-Server/src/main/java/ms/world/info/CountryFlag.java deleted file mode 100644 index f59a31a26..000000000 --- a/Management-Server/src/main/java/ms/world/info/CountryFlag.java +++ /dev/null @@ -1,96 +0,0 @@ -package ms.world.info; - -/** - * The country flags. - * @author Emperor - * - */ -public enum CountryFlag { - - /** - * Belgium - */ - BELGIUM(22), - - /** - * Canada. - */ - CANADA(38), - - /** - * The united kingdom. - */ - UNITED_KINGDOM(77), - - /** - * Netherlands - */ - NETHERLANDS(161), - - /** - * Sweden - */ - SWEDEN(191), - - /** - * Finland - */ - FINLAND(69), - - /** - * Australia. - */ - AUSTRALIA(16), - - /** - * America (USA) - */ - UNITED_STATES_OF_AMERICA(225), - - /** - * Norway - */ - NORWAY(162), - - /** - * Ireland - */ - IRELAND(101), - - /** - * DENMARK - */ - DENMARK(58), - - /** - * Brazil - */ - BRAZIL(31), - - /** - * Mexico - */ - MEXICO(152), - - ; - - /** - * The flag id. - */ - private final int id; - - /** - * Constructs a new {@code CountryFlag} {@code Object}. - * @param id The flag id. - */ - private CountryFlag(int id) { - this.id = id; - } - - /** - * @return the id - */ - public int getId() { - return id; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/world/info/Response.java b/Management-Server/src/main/java/ms/world/info/Response.java deleted file mode 100644 index 7d8ae0c73..000000000 --- a/Management-Server/src/main/java/ms/world/info/Response.java +++ /dev/null @@ -1,144 +0,0 @@ -package ms.world.info; - -/** - * Holds the response codes during the attempt to login. - * @author Emperor - */ -public enum Response { - - /** - * An unexpected server response occurred. - */ - UNEXPECTED_RESPONSE(0), - - /** - * Could not display advertisement video, logging in in x seconds. - */ - COULD_NOT_DISPLAY_AD(1), - - /** - * A successful login. - */ - SUCCESSFUL(2), - - /** - * Invalid username or password has been entered. - */ - INVALID_CREDENTIALS(3), - - /** - * This account is banned. - */ - ACCOUNT_DISABLED(4), - - /** - * This account is already logged in. - */ - ALREADY_ONLINE(5), - - /** - * We have updated and client needs to be reloaded. - */ - UPDATED(6), - - /** - * The world is full. - */ - FULL_WORLD(7), - - /** - * Login server is offline. - */ - LOGIN_SERVER_OFFLINE(8), - - /** - * The login limit has been exceeded. - */ - LOGIN_LIMIT_EXCEEDED(9), - - /** - * The session key was invalid. - */ - BAD_SESSION_ID(10), - - /** - * The password is too weak, and should be improved. - */ - WEAK_PASSWORD(11), - - /** - * When trying to connect to a members world while being f2p. - */ - MEMBERS_WORLD(12), - - /** - * Could not login. - */ - COULD_NOT_LOGIN(13), - - /** - * The server is currently updating. - */ - UPDATING(14), - - /** - * Too many incorrect login attempts from your address. - */ - TOO_MANY_INCORRECT_LOGINS(16), - - /** - * When logging on a free world while standing in members area. - */ - STANDING_IN_MEMBER(17), - - /** - * This account is locked as it might have been stolen. - */ - LOCKED(18), - - /** - * Closed beta going on. - */ - CLOSED_BETA(19), - - /** - * The login server connected to is invalid. - */ - INVALID_LOGIN_SERVER(20), - - /** - * Moving from another world... - */ - MOVING_WORLD(21), - - /** - * When the player's saved file exists, but is unable to be loaded. - */ - ERROR_LOADING_PROFILE(24), - - /** - * This computer address is disabled as it was used to break our rules. - */ - BANNED(26); - - /** - * The buffer. - */ - private final int opcode; - - /** - * Constructs a new {@code Response} {@code Object}. - * @param opcode The login response opcode. - */ - Response(int opcode) { - this.opcode = opcode; - } - - /** - * Gets the opcode. - * @return The opcode. - */ - public int opcode() { - return opcode; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/java/ms/world/info/UIDInfo.java b/Management-Server/src/main/java/ms/world/info/UIDInfo.java deleted file mode 100644 index 3bcf2d9d6..000000000 --- a/Management-Server/src/main/java/ms/world/info/UIDInfo.java +++ /dev/null @@ -1,224 +0,0 @@ -package ms.world.info; - -import java.nio.ByteBuffer; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.StringTokenizer; - -import ms.system.util.ByteBufferUtils; - -/** - * The unique info of a player. - * @author Vexia - * - */ -public class UIDInfo { - - /** - * The ip address. - */ - private String ip; - - /** - * The computer name. - */ - private String compName; - - /** - * The mac-address. - */ - private String mac; - - /** - * The motherboard serial of the user. - */ - private String serial; - - - /** - * Constructs a new {@code UIDInfo} {@code Object} - */ - public UIDInfo() { - /* - * empty. - */ - } - - /** - * Constructs a new {@code UIDInfo} {@code Object} - * @param ip the ip. - * @param compName the computer name. - * @param mac the mac. - * @param serial the serial. - */ - public UIDInfo(String ip, String compName, String mac, String serial) { - this.ip = ip; - this.compName = compName; - this.mac = mac; - this.serial = serial; - } - - /** - * Parses the data from a prepared statement. - * @param set The result set - * @throws SQLException The exception if thrown. - */ - public void parse(ResultSet set) throws SQLException { - setIp(parseFormat(set.getString("ip"))); - setCompName(parseFormat(set.getString("computerName"))); - setMac(parseFormat(set.getString("mac"))); - setSerial(parseFormat(set.getString("serial"))); - } - - /** - * Saves the UID data on the buffer. - * @param buffer The buffer. - */ - public void save(ByteBuffer buffer) { - save(buffer, ip, 1); - save(buffer, compName, 2); - save(buffer, mac, 3); - save(buffer, serial, 4); - buffer.put((byte) 0); - } - - /** - * Parses the UID data from the buffer. - * @param buffer The buffer. - */ - public void parse(ByteBuffer buffer) { - int opcode; - while ((opcode = buffer.get()) != 0) { - switch (opcode) { - case 1: - ip = ByteBufferUtils.getString(buffer); - break; - case 2: - compName = ByteBufferUtils.getString(buffer); - break; - case 3: - mac = ByteBufferUtils.getString(buffer); - break; - case 4: - serial = ByteBufferUtils.getString(buffer); - break; - default: - break; - } - } - } - - /** - * Parses a string with a certain format. - * @param string the string. - * @return the string. - */ - private String parseFormat(String string) { - if (string == null || string.equals("")) { - return null; - } - StringTokenizer token = new StringTokenizer(string, "|"); - String s = ""; - int t = token.countTokens(); - for (int i = 0; i < t; i++) { - s = token.nextToken(); - } - return s; - } - - /** - * Saves a string value to the buffer. - * @param buffer the buffer. - * @param value the value. - * @param opcode the opcode. - */ - private void save(ByteBuffer buffer, String value, int opcode) { - if (value == null) { - return; - } - ByteBufferUtils.putString(value, buffer.put((byte) opcode)); - } - - /** - * Converts a to string in format mode for an admin or mod. - * @param admin the admin. - * @return the string. - */ - public String toString(boolean admin) { - String format = toString(); - if (!admin) {//formats for non-admins - String[] tokens = format.split("serial="); - format = format.replace("serial=", "uid=").replace(tokens[tokens.length - 1], "*****"); - } - return format; - } - - /** - * Gets the compName. - * @return the compName - */ - public String getCompName() { - return compName; - } - - /** - * Gets the ip. - * @return the ip - */ - public String getIp() { - return ip; - } - - /** - * Gets the mac. - * @return the mac - */ - public String getMac() { - return mac; - } - - /** - * Gets the serial. - * @return the serial - */ - public String getSerial() { - return serial; - } - - /** - * Sets the ip. - * @param ip the ip to set. - */ - public void setIp(String ip) { - this.ip = ip; - } - - /** - * Sets the compName. - * @param compName the compName to set. - */ - public void setCompName(String compName) { - this.compName = compName; - } - - /** - * Sets the mac. - * @param mac the mac to set. - */ - public void setMac(String mac) { - this.mac = mac; - } - - /** - * Sets the serial. - * @param serial the serial to set. - */ - public void setSerial(String serial) { - this.serial = serial; - } - - @Override - public String toString() { - return "[ip=" + ip + ", compName=" + compName + ", mac=" + mac + ", serial=" + serial + "]"; - } -} diff --git a/Management-Server/src/main/java/ms/world/info/WorldInfo.java b/Management-Server/src/main/java/ms/world/info/WorldInfo.java deleted file mode 100644 index 74c4d743d..000000000 --- a/Management-Server/src/main/java/ms/world/info/WorldInfo.java +++ /dev/null @@ -1,163 +0,0 @@ -package ms.world.info; - -/** - * Holds the info of a world server. - * @author Emperor - * - */ -public final class WorldInfo { - - /** - * The world id. - */ - private final int worldId; - - /** - * The IP-address. - */ - private final String address; - - /** - * The revision of the world. - */ - private final int revision; - - /** - * The country this world is located in. - */ - private final CountryFlag country; - - /** - * The world activity. - */ - private final String activity; - - /** - * If the world is members only. - */ - private final boolean members; - - /** - * If the world is a PvP world. - */ - private final boolean pvp; - - /** - * If the world is a quick chat only world. - */ - private final boolean quickChat; - - /** - * If the world has lootshare option enabled. - */ - private final boolean lootshare; - - /** - * Constructs a new {@code WorldInfo} {@code Object}. - * @param id The world id. - * @param address The address. - * @param country The country flag. - * @param members If the world is members only. - */ - public WorldInfo(int id, String address, int revision, CountryFlag country, String activity, boolean members, boolean pvp, boolean quickChat, boolean lootshare) { - this.worldId = id; - this.address = address; - this.revision = revision; - this.country = country; - this.activity = activity; - this.members = members; - this.pvp = pvp; - this.quickChat = quickChat; - this.lootshare = lootshare; - } - - /** - * Gets the settings hash. - * @return The settings hash. - */ - public int getSettings() { - int settings = 0; - if (members) { - settings |= 0x1; - } - if (quickChat) { - settings |= 0x2; - } - if (pvp) { - settings |= 0x4; - } - if (lootshare) { - settings |= 0x8; - } - return settings; - } - - /** - * @return the worldId - */ - public int getWorldId() { - return worldId; - } - - /** - * @return the address - */ - public String getAddress() { - return address; - } - - /** - * @return the country - */ - public CountryFlag getCountry() { - return country; - } - - /** - * Gets the members value. - * @return The members. - */ - public boolean isMembers() { - return members; - } - - /** - * Gets the activity value. - * @return The activity. - */ - public String getActivity() { - return activity; - } - - /** - * Gets the pvp value. - * @return The pvp. - */ - public boolean isPvp() { - return pvp; - } - - /** - * Gets the quickChat value. - * @return The quickChat. - */ - public boolean isQuickChat() { - return quickChat; - } - - /** - * Gets the lootshare value. - * @return The lootshare. - */ - public boolean isLootshare() { - return lootshare; - } - - /** - * Gets the revision. - * @return the revision. - */ - public int getRevision() { - return revision; - } -} \ No newline at end of file diff --git a/Management-Server/src/main/kotlin/ms09/MSLogger.kt b/Management-Server/src/main/kotlin/ms09/MSLogger.kt deleted file mode 100644 index 5bd7a7b7f..000000000 --- a/Management-Server/src/main/kotlin/ms09/MSLogger.kt +++ /dev/null @@ -1,37 +0,0 @@ -package ms09 - -import com.github.ajalt.mordant.rendering.TextColors -import com.github.ajalt.mordant.terminal.Terminal -import java.io.BufferedWriter -import java.io.Writer -import java.text.SimpleDateFormat -import java.util.* - -object MSLogger { - val t = Terminal() - var tradeLog: Writer? = null - var tradeLogWriter: BufferedWriter? = null - - - fun getTime(): String{ - val formatter = SimpleDateFormat("HH:mm:ss") - return "[" + formatter.format(Date(System.currentTimeMillis())) +"]" - } - - @JvmStatic - fun logInfo(vararg messages: String){ - for(m in messages){ - if(m.isNotBlank()) t.println("${getTime()}: [INFO] $m") - } - } - - @JvmStatic - fun logErr(message: String){ - if(message.isNotBlank()) t.println("${getTime()}: ${TextColors.brightRed("[ ERR] $message")}") - } - - @JvmStatic - fun logWarn(message: String){ - if(message.isNotBlank()) t.println("${getTime()}: ${TextColors.yellow("[WARN] $message")}") - } -} \ No newline at end of file diff --git a/Server/pom.xml b/Server/pom.xml index fa45ae164..188230d74 100644 --- a/Server/pom.xml +++ b/Server/pom.xml @@ -242,6 +242,10 @@ maven-surefire-plugin + + false + false + 2.22.0 diff --git a/Server/src/main/java/core/cache/Cache.java b/Server/src/main/java/core/cache/Cache.java index 0194eb874..d4733986d 100644 --- a/Server/src/main/java/core/cache/Cache.java +++ b/Server/src/main/java/core/cache/Cache.java @@ -48,7 +48,7 @@ public final class Cache { * @throws Throwable When an exception occurs. */ public static void init(String path) throws Throwable { - SystemLogger.logInfo("Initializing cache..."); + SystemLogger.logInfo(Cache.class, "Initializing cache..."); byte[] cacheFileBuffer = new byte[520]; RandomAccessFile containersInformFile = new RandomAccessFile(path + File.separator + "main_file_cache.idx255", "r"); RandomAccessFile dataFile = new RandomAccessFile(path + File.separator + "main_file_cache.dat2", "r"); @@ -61,7 +61,7 @@ public final class Cache { CacheFile cacheFile = new CacheFile(i, new RandomAccessFile(f, "r"), dataFile, 1000000, cacheFileBuffer); cacheFileManagers[i] = new CacheFileManager(cacheFile, true); if (cacheFileManagers[i].getInformation() == null) { - SystemLogger.logErr("Error loading cache index " + i + ": no information."); + SystemLogger.logErr(Cache.class, "Error loading cache index " + i + ": no information."); cacheFileManagers[i] = null; } } @@ -93,7 +93,7 @@ public final class Cache { public static ByteBuffer getArchiveData(int index, int archive, boolean priority, int encryptionValue) { byte[] data = index == 255 ? referenceFile.getContainerData(archive) : cacheFileManagers[index].getCacheFile().getContainerData(archive); if (data == null || data.length < 1) { - SystemLogger.logErr("Invalid JS-5 request - " + index + ", " + archive + ", " + priority + ", " + encryptionValue + "!"); + SystemLogger.logErr(Cache.class, "Invalid JS-5 request - " + index + ", " + archive + ", " + priority + ", " + encryptionValue + "!"); return null; } int compression = data[0] & 0xff; diff --git a/Server/src/main/java/core/cache/def/impl/DataMap.java b/Server/src/main/java/core/cache/def/impl/DataMap.java index f00e921d2..40fe2694c 100644 --- a/Server/src/main/java/core/cache/def/impl/DataMap.java +++ b/Server/src/main/java/core/cache/def/impl/DataMap.java @@ -40,7 +40,7 @@ public class DataMap { public int getInt(int key){ if(!dataStore.containsKey(key)){ - SystemLogger.logErr("Invalid value passed for key: " + key + " map: " + id); + SystemLogger.logErr(this.getClass(), "Invalid value passed for key: " + key + " map: " + id); return -1; } return (int) dataStore.get(key); diff --git a/Server/src/main/java/core/cache/def/impl/ItemDefinition.java b/Server/src/main/java/core/cache/def/impl/ItemDefinition.java index 4958dfaa5..72a7ac3da 100644 --- a/Server/src/main/java/core/cache/def/impl/ItemDefinition.java +++ b/Server/src/main/java/core/cache/def/impl/ItemDefinition.java @@ -294,7 +294,7 @@ public class ItemDefinition extends Definition { } ItemDefinition def = ItemDefinition.parseDefinition(itemId, ByteBuffer.wrap(data)); if (def == null) { - SystemLogger.logErr("Could not load item definitions for id " + itemId + " - no definitions found!"); + SystemLogger.logErr(ItemDefinition.class, "Could not load item definitions for id " + itemId + " - no definitions found!"); return ; } if(itemId == 14958) @@ -1530,7 +1530,7 @@ public class ItemDefinition extends Definition { ItemDefinition def = forId(nodeId); if (def == null) { if (nodeId == 22937) - SystemLogger.logErr("[ItemDefinition] No definition for item id " + nodeId + "!"); + SystemLogger.logErr(ItemDefinition.class, "[ItemDefinition] No definition for item id " + nodeId + "!"); return null; } OptionHandler handler = def.getConfiguration("option:" + name); diff --git a/Server/src/main/java/core/cache/def/impl/RenderAnimationDefinition.java b/Server/src/main/java/core/cache/def/impl/RenderAnimationDefinition.java index 08d1c97bc..d9f9363a5 100644 --- a/Server/src/main/java/core/cache/def/impl/RenderAnimationDefinition.java +++ b/Server/src/main/java/core/cache/def/impl/RenderAnimationDefinition.java @@ -72,7 +72,7 @@ public class RenderAnimationDefinition { if (data != null) { defs.parse(ByteBuffer.wrap(data)); } else { - SystemLogger.logErr("No definitions found for render animation " + animId + ", size=" + Cache.getIndexes()[2].getFilesSize(32) + "!"); + SystemLogger.logErr(RenderAnimationDefinition.class, "No definitions found for render animation " + animId + ", size=" + Cache.getIndexes()[2].getFilesSize(32) + "!"); } return defs; } diff --git a/Server/src/main/java/core/cache/def/impl/SceneryDefinition.java b/Server/src/main/java/core/cache/def/impl/SceneryDefinition.java index 26f05fd90..77838d2db 100644 --- a/Server/src/main/java/core/cache/def/impl/SceneryDefinition.java +++ b/Server/src/main/java/core/cache/def/impl/SceneryDefinition.java @@ -615,7 +615,7 @@ public class SceneryDefinition extends Definition { // SystemLogger.logErr("----------------------------------------------------\n\n\n"); while (true) { if (!buffer.hasRemaining()) { - SystemLogger.logErr("[ObjectDefinition] Buffer empty for " + objectId); + SystemLogger.logErr(SceneryDefinition.class, "Buffer empty for " + objectId); break; } int opcode = buffer.get() & 0xFF; @@ -801,7 +801,7 @@ public class SceneryDefinition extends Definition { } } else { if (opcode != 0) { - SystemLogger.logErr("Unhandled object definition opcode: " + opcode); + SystemLogger.logErr(SceneryDefinition.class, "Unhandled object definition opcode: " + opcode); } break; } diff --git a/Server/src/main/java/core/cache/def/impl/Struct.java b/Server/src/main/java/core/cache/def/impl/Struct.java index 968cb5e19..06a0bfeb6 100644 --- a/Server/src/main/java/core/cache/def/impl/Struct.java +++ b/Server/src/main/java/core/cache/def/impl/Struct.java @@ -30,7 +30,7 @@ public class Struct { public int getInt(int key){ if(!dataStore.containsKey(key)){ - SystemLogger.logErr("Invalid value passed for key: " + key + " struct: " + id); + SystemLogger.logErr(this.getClass(), "Invalid value passed for key: " + key + " struct: " + id); return -1; } return (int) dataStore.get(key); diff --git a/Server/src/main/java/core/game/component/AccessMaskBuilder.java b/Server/src/main/java/core/game/component/AccessMaskBuilder.java deleted file mode 100644 index a3ce053e4..000000000 --- a/Server/src/main/java/core/game/component/AccessMaskBuilder.java +++ /dev/null @@ -1,104 +0,0 @@ -package core.game.component; - -/** - * Used to generate component option settings. - * @author Mangis - */ -public final class AccessMaskBuilder { - - /** - * Contains the value which should be sent in access mask packet. - */ - private int value; - - /** - * Sets default option setting. - * @param allowed If the packet for the default option should be sent to the - * server. - */ - public void allowDefaultOption(boolean allowed) { - value &= ~(0x1); - if (allowed) { - value |= 0x1; - } - } - - /** - * Sets right click option settings. If specified option is not allowed, it - * will not appear in right click menu and the packet will not be send to - * server when clicked. - * @param optionId The option index. - * @param show If the option is allowed. - */ - public void showMenuOption(int optionId, boolean show) { - if (optionId < 0 || optionId > 9) { - throw new IllegalArgumentException("Option index must be 0-9."); - } - value &= ~(0x1 << (optionId + 1)); - if (show) { - value |= (0x1 << (optionId + 1)); - } - } - - /** - * Sets use on option settings. If nothing is allowed then 'use' option will - * not appear in right click menu. - */ - public void setUseOnSettings(boolean groundItems, boolean npcs, boolean objects, boolean otherPlayer, boolean selfPlayer, boolean component) { - int useFlag = 0; - if (groundItems) { - useFlag |= 0x1; - } - if (npcs) { - useFlag |= 0x2; - } - if (objects) { - useFlag |= 0x4; - } - if (otherPlayer) { - useFlag |= 0x8; - } - if (selfPlayer) { - useFlag |= 0x10; - } - if (component) { - useFlag |= 0x20; - } - value &= ~(127 << 7); // disable - value |= useFlag << 7; - } - - /** - * Sets interface events depth. For example, we have inventory interface - * which is opened on gameframe interface (548) If depth is 1, then the - * clicks in inventory will also invoke click event handler scripts on - * gameframe interface. - * @param depth The depth value. - */ - public void setInterfaceEventsDepth(int depth) { - if (depth < 0 || depth > 7) { - throw new IllegalArgumentException("depth must be 0-7."); - } - value &= ~(0x7 << 18); - value |= (depth << 18); - } - - /** - * Flags other component options being allowed to be used on this component. - * @param allow If an option can be used on this component. - */ - public void allowUsage(boolean allow) { - value &= ~(1 << 22); - if (allow) { - value |= (1 << 22); - } - } - - /** - * Gets the current value. - * @return The value. - */ - public int getValue() { - return value; - } -} \ No newline at end of file diff --git a/Server/src/main/java/core/game/container/access/BitregisterAssembler.java b/Server/src/main/java/core/game/container/access/BitregisterAssembler.java deleted file mode 100644 index a16a79440..000000000 --- a/Server/src/main/java/core/game/container/access/BitregisterAssembler.java +++ /dev/null @@ -1,124 +0,0 @@ -package core.game.container.access; - -import core.game.node.entity.player.Player; - -/** - * Contains the mask value methods. The 'access mask' is actually just a bit - * register that contains permissions for a specific interface (@Peterbjornx) - * @date 5/02/2013 - * @author Stacx - * @author Emperor - * @deprecated This is a really bad way of doing what this class needs to do. Please use {@link api.IfaceSettingsBuilder}. - */ -@Deprecated() -public final class BitregisterAssembler { - - /** - * The register size. - */ - public static final int SIZE = 32 - 1; - - /** - * Examine option. - */ - public static final int EXAMINE_OPT = 9; - - /** - * Allow dragging. - */ - public static final int DRAGABLE = 17; - - /** - * Allow switching item slots. - */ - public static final int SLOT_SWITCH = 20; - - /** - * The flags. - */ - private boolean[] permissions = new boolean[SIZE]; - - /** - * Constructs a new {@code BitregisterAssembler} {@code Object}. - * @param permissions The permissions. - */ - public BitregisterAssembler(int... permissions) { - for (int i : permissions) { - this.permissions[i] = true; - } - } - - /** - * Constructs a new {@code BitregisterAssembler} {@code Object}. - */ - public BitregisterAssembler(String[] options) { - enableOptions(options); - } - - /** - * Enables the given options ({@code null} options will remain disabled). - * @param options The options. - */ - public void enableOptions(String...options) { - if (options.length > 9) { - throw new IllegalStateException("Too many options specified - maximum 9 allowed!"); - } - for (int i = 0; i < options.length; i++) { - if (options[i] != null && !options[i].equals("null")) { - permissions[i] = true; - } - } - } - - /** - * Enables the examine option. - */ - public void enableExamineOption() { - permissions[EXAMINE_OPT] = true; - } - - /** - * Enables items being dragged. - */ - public void enableDragging() { - permissions[DRAGABLE] = true; - } - - /** - * Enables item switching slots (& dragging). - */ - public void enableSlotSwitch() { - enableDragging(); - permissions[SLOT_SWITCH] = true; - } - - /** - * Send and assemble a bit register for our - * @param player , the player instance - * @param interfaceIndex , the interface index - * @param childIndex , the child index for our interface - * @param offset , the offset for the loop in client - * @param length , the length of our loop - */ - public static void send(Player player, int interfaceIndex, int childIndex, int offset, int length, BitregisterAssembler assembler) { - if (offset >= length) { - throw new RuntimeException("Offset cannot excess length. length = " + length); - } - player.getPacketDispatch().sendIfaceSettings(assembler.calculateRegister(), childIndex, interfaceIndex, offset, length); - } - - /** - * Calculates the register. - * @return The value. - */ - public int calculateRegister() { - int value = 0; - for (int i = 0; i < SIZE; i++) { - if (permissions[i]) { - value |= 2 << i; - } - } - return value; - } - -} diff --git a/Server/src/main/java/core/game/container/access/InterfaceContainer.java b/Server/src/main/java/core/game/container/access/InterfaceContainer.java index 713b72eda..1a17e7a63 100644 --- a/Server/src/main/java/core/game/container/access/InterfaceContainer.java +++ b/Server/src/main/java/core/game/container/access/InterfaceContainer.java @@ -1,5 +1,6 @@ package core.game.container.access; +import api.IfaceSettingsBuilder; import core.game.node.entity.player.Player; import core.game.node.item.Item; import core.net.packet.PacketRepository; @@ -37,14 +38,16 @@ public class InterfaceContainer { private static int generate(Player player, Item[] itemArray, String[] options, int interfaceIndex, int childIndex, int x, int y, int key) { Object[] clientScript = new Object[options.length + 7]; player.getPacketDispatch().sendRunScript(CLIENT_SCRIPT_INDEX, generateScriptArguments(options.length), populateScript(clientScript, options, interfaceIndex << 16 | childIndex, x, y, key)); - BitregisterAssembler.send(player, interfaceIndex, childIndex, 0, itemArray.length, new BitregisterAssembler(options)); + int settings = new IfaceSettingsBuilder().enableAllOptions().build(); + player.getPacketDispatch().sendIfaceSettings(settings, childIndex, interfaceIndex, 0, itemArray.length); PacketRepository.send(ContainerPacket.class, new ContainerContext(player, -1, -2, key, itemArray, itemArray.length, false)); return increment(); } public static int generateOptions(Player player, String[] options, int interfaceIndex, int childIndex, int x, int y, int key){ player.getPacketDispatch().sendRunScript(CLIENT_SCRIPT_INDEX, generateScriptArguments(options.length), populateScript(new Object[options.length + 7],options,interfaceIndex << 16 | childIndex, x, y, key)); - BitregisterAssembler.send(player,interfaceIndex,childIndex,0,28,new BitregisterAssembler(options)); + int settings = new IfaceSettingsBuilder().enableAllOptions().build(); + player.getPacketDispatch().sendIfaceSettings(settings, childIndex, interfaceIndex, 0, 28); return increment(); } @@ -76,7 +79,8 @@ public class InterfaceContainer { int key = increment(); Object[] clientScript = new Object[options.length + 7]; player.getPacketDispatch().sendRunScript(CLIENT_SCRIPT_INDEX, generateScriptArguments(options.length), populateScript(clientScript, options, interfaceId << 16 | childId, x, y, key)); - BitregisterAssembler.send(player, interfaceId, childId, 0, itemLength, new BitregisterAssembler(options)); + int settings = new IfaceSettingsBuilder().enableAllOptions().build(); + player.getPacketDispatch().sendIfaceSettings(settings, childId, interfaceId, 0, itemLength); return key; } @@ -125,7 +129,6 @@ public class InterfaceContainer { /** * Default method to generate and send an item array for the client. * @return The container key. - * @see {@link InterfaceContainer.generate} */ public static int generateItems(Player player, Item[] itemArray, String[] options, int interfaceIndex, int childIndex) { return generateItems(player, itemArray, options, interfaceIndex, childIndex, 7, 3, increment()); @@ -134,7 +137,6 @@ public class InterfaceContainer { /** * Default method to generate and send an item array for the client. * @return The container key. - * @see {@link InterfaceContainer.generate} */ public static int generateItems(Player player, Item[] itemArray, String[] options, int interfaceIndex, int childIndex, int key) { return generateItems(player, itemArray, options, interfaceIndex, childIndex, 7, 3, key); diff --git a/Server/src/main/java/core/game/container/impl/BankContainer.java b/Server/src/main/java/core/game/container/impl/BankContainer.java index ca3b3ceb2..0ee28da7b 100644 --- a/Server/src/main/java/core/game/container/impl/BankContainer.java +++ b/Server/src/main/java/core/game/container/impl/BankContainer.java @@ -1,11 +1,12 @@ package core.game.container.impl; +import api.IfaceSettingsBuilder; import core.game.container.access.InterfaceContainer; +import kotlin.ranges.IntRange; import org.rs09.consts.Vars; import rs09.ServerConstants; import core.game.component.Component; import core.game.container.*; -import core.game.container.access.BitregisterAssembler; import core.game.node.entity.player.Player; import core.game.node.entity.player.link.IronmanMode; import core.game.node.item.Item; @@ -128,10 +129,8 @@ public final class BankContainer extends Container { player.getInventory().getListeners().add(listener); player.getInventory().refresh(); player.varpManager.get(1249).setVarbit(0,lastAmountX).send(player); - BitregisterAssembler assembly = new BitregisterAssembler(0, 1, 2, 3, 4, 5); - assembly.enableExamineOption(); - assembly.enableSlotSwitch(); - player.getPacketDispatch().sendIfaceSettings(assembly.calculateRegister(), 0, 763, 0, 27); + int settings = new IfaceSettingsBuilder().enableOptions(new IntRange(0, 5)).enableExamine().enableSlotSwitch().build(); + player.getPacketDispatch().sendIfaceSettings(settings, 0, 763, 0, 27); player.getPacketDispatch().sendRunScript(1451, ""); open = true; setTabConfigurations(); @@ -159,10 +158,8 @@ public final class BankContainer extends Container { player.getInventory().refresh(); player.varpManager.get(1249).setVarbit(0,lastAmountX).send(player); player.getPacketDispatch().sendIfaceSettings(1278, 73, 762, 0, SIZE); - BitregisterAssembler assembly = new BitregisterAssembler(0, 1, 2, 3, 4, 5); - assembly.enableExamineOption(); - assembly.enableSlotSwitch(); - player.getPacketDispatch().sendIfaceSettings(assembly.calculateRegister(), 0, 763, 0, 27); + int settings = new IfaceSettingsBuilder().enableOptions(new IntRange(0,5)).enableExamine().enableSlotSwitch().build(); + player.getPacketDispatch().sendIfaceSettings(settings, 0, 763, 0, 27); player.getPacketDispatch().sendRunScript(1451, ""); open = true; this.player.getBank().setTabConfigurations(player); diff --git a/Server/src/main/java/core/game/content/activity/ActivityManager.java b/Server/src/main/java/core/game/content/activity/ActivityManager.java index 700a369d8..402764870 100644 --- a/Server/src/main/java/core/game/content/activity/ActivityManager.java +++ b/Server/src/main/java/core/game/content/activity/ActivityManager.java @@ -50,7 +50,7 @@ public final class ActivityManager { ActivityPlugin plugin = ACTIVITIES.get(name); if (plugin == null) { if (GameWorld.getSettings().isDevMode()) { - SystemLogger.logErr("Unhandled activity - " + name + "!"); + SystemLogger.logErr(ActivityManager.class, "Unhandled activity - " + name + "!"); } return false; } diff --git a/Server/src/main/java/core/game/content/activity/gwd/GodwarsMapzone.java b/Server/src/main/java/core/game/content/activity/gwd/GodwarsMapzone.java index 3997c896c..5052a1e52 100644 --- a/Server/src/main/java/core/game/content/activity/gwd/GodwarsMapzone.java +++ b/Server/src/main/java/core/game/content/activity/gwd/GodwarsMapzone.java @@ -368,7 +368,7 @@ public final class GodwarsMapzone extends MapZone implements Plugin { } if (DoorActionHandler.handleAutowalkDoor(player, object)) { - SystemLogger.logInfo(player.getUsername() + " entered " + faction.name() + " gwd boss room"); + SystemLogger.logInfo(this.getClass(), player.getUsername() + " entered " + faction.name() + " gwd boss room"); increaseKillcount(player, faction, -required); } return true; diff --git a/Server/src/main/java/core/game/content/activity/stronghold/playersafety/GuardDialoguePlugin.java b/Server/src/main/java/core/game/content/activity/stronghold/playersafety/GuardDialoguePlugin.java index 5035c3731..da210b400 100644 --- a/Server/src/main/java/core/game/content/activity/stronghold/playersafety/GuardDialoguePlugin.java +++ b/Server/src/main/java/core/game/content/activity/stronghold/playersafety/GuardDialoguePlugin.java @@ -128,7 +128,7 @@ public class GuardDialoguePlugin extends DialoguePlugin { stage = -1; break; default: - SystemLogger.logErr("Unhandled dialogue stage=" + stage); + SystemLogger.logErr(this.getClass(), "Unhandled dialogue stage=" + stage); } return false; } diff --git a/Server/src/main/java/core/game/content/dialogue/DialoguePlugin.java b/Server/src/main/java/core/game/content/dialogue/DialoguePlugin.java index 4401326b8..85a5eff59 100644 --- a/Server/src/main/java/core/game/content/dialogue/DialoguePlugin.java +++ b/Server/src/main/java/core/game/content/dialogue/DialoguePlugin.java @@ -200,7 +200,7 @@ public abstract class DialoguePlugin implements Plugin { } if (npc == null) { - SystemLogger.logWarn( + SystemLogger.logWarn(this.getClass(), args[0].getClass().getSimpleName() + "Is not assigning an NPC. Whoever did that should fix it." ); diff --git a/Server/src/main/java/core/game/content/global/action/DigSpadeHandler.java b/Server/src/main/java/core/game/content/global/action/DigSpadeHandler.java index 4ea41bdd3..e206f7ee9 100644 --- a/Server/src/main/java/core/game/content/global/action/DigSpadeHandler.java +++ b/Server/src/main/java/core/game/content/global/action/DigSpadeHandler.java @@ -1,6 +1,7 @@ package core.game.content.global.action; import core.game.node.entity.player.Player; +import core.game.system.communication.CommunicationInfo; import rs09.game.interaction.SpadeDigListener; import rs09.game.system.SystemLogger; import core.game.system.task.Pulse; @@ -62,7 +63,7 @@ public final class DigSpadeHandler { */ public static boolean register(Location location, DigAction action) { if (ACTIONS.containsKey(location)) { - SystemLogger.logErr("Already contained dig reward for location " + location + "."); + SystemLogger.logErr(CommunicationInfo.class, "Already contained dig reward for location " + location + "."); return false; } ACTIONS.put(location, action); diff --git a/Server/src/main/java/core/game/content/global/action/DropItemHandler.java b/Server/src/main/java/core/game/content/global/action/DropItemHandler.java index 918d78fd8..469309d3f 100644 --- a/Server/src/main/java/core/game/content/global/action/DropItemHandler.java +++ b/Server/src/main/java/core/game/content/global/action/DropItemHandler.java @@ -49,7 +49,7 @@ public final class DropItemHandler { return false; } if (player.getAttribute("equipLock:" + item.getId(), 0) > GameWorld.getTicks()) { - SystemLogger.logAlert(player + ", tried to do the drop & equip dupe."); + SystemLogger.logAlert(DropItemHandler.class, player + ", tried to do the drop & equip dupe."); return true; } if (player.getInventory().replace(null, item.getSlot()) == item) { diff --git a/Server/src/main/java/core/game/content/holiday/HolidayEvent.java b/Server/src/main/java/core/game/content/holiday/HolidayEvent.java index b04f53ee2..9985a579f 100644 --- a/Server/src/main/java/core/game/content/holiday/HolidayEvent.java +++ b/Server/src/main/java/core/game/content/holiday/HolidayEvent.java @@ -119,7 +119,7 @@ public abstract class HolidayEvent extends MapZone implements Plugin { if (isActive()) { setCurrent(this); ZoneBuilder.configure(this); - SystemLogger.logInfo("Holiday event active [type=" + type + "]!"); + SystemLogger.logInfo(this.getClass(), "Holiday event active [type=" + type + "]!"); } EVENTS.add(this); return this; diff --git a/Server/src/main/java/core/game/content/quest/free/therestlessghost/FatherAereckDialogue.java b/Server/src/main/java/core/game/content/quest/free/therestlessghost/FatherAereckDialogue.java index 481dced4a..bcfb2ff38 100644 --- a/Server/src/main/java/core/game/content/quest/free/therestlessghost/FatherAereckDialogue.java +++ b/Server/src/main/java/core/game/content/quest/free/therestlessghost/FatherAereckDialogue.java @@ -1,7 +1,6 @@ package core.game.content.quest.free.therestlessghost; import core.game.component.Component; -import core.game.container.access.BitregisterAssembler; import core.game.node.entity.npc.NPC; import core.game.node.entity.player.link.diary.DiaryType; import core.plugin.Initializable; diff --git a/Server/src/main/java/core/game/content/quest/members/dwarfcannon/DwarfCannonPlugin.java b/Server/src/main/java/core/game/content/quest/members/dwarfcannon/DwarfCannonPlugin.java index 6a9646129..264e75ffc 100644 --- a/Server/src/main/java/core/game/content/quest/members/dwarfcannon/DwarfCannonPlugin.java +++ b/Server/src/main/java/core/game/content/quest/members/dwarfcannon/DwarfCannonPlugin.java @@ -289,7 +289,7 @@ public class DwarfCannonPlugin extends OptionHandler { } Part part = Part.forId(button); if (part == null) { - SystemLogger.logErr("Unhandled part id - " + button + "!"); + SystemLogger.logErr(this.getClass(), "Unhandled part id - " + button + "!"); return true; } if (this.tool.getPart() != part) { diff --git a/Server/src/main/java/core/game/content/ttrail/ClueScrollPlugin.java b/Server/src/main/java/core/game/content/ttrail/ClueScrollPlugin.java index 5c63b9ba5..f6127ff5d 100644 --- a/Server/src/main/java/core/game/content/ttrail/ClueScrollPlugin.java +++ b/Server/src/main/java/core/game/content/ttrail/ClueScrollPlugin.java @@ -138,7 +138,7 @@ public abstract class ClueScrollPlugin extends MapZone implements Plugin if(clue.getClueId() == 2681) return; if (CLUE_SCROLLS.containsKey(clue.getClueId())) { - SystemLogger.logErr("Error! Plugin already registered with clue id - " + clue.getClueId() + ", trying to register " + clue.getClass().getCanonicalName() + " the real plugin using the id is " + CLUE_SCROLLS.get(clue.getClueId()).getClass().getCanonicalName() + "!"); + SystemLogger.logErr(this.getClass(), "Error! Plugin already registered with clue id - " + clue.getClueId() + ", trying to register " + clue.getClass().getCanonicalName() + " the real plugin using the id is " + CLUE_SCROLLS.get(clue.getClueId()).getClass().getCanonicalName() + "!"); return; } List organized = (List) ORGANIZED.get(clue.getLevel()); @@ -169,7 +169,7 @@ public abstract class ClueScrollPlugin extends MapZone implements Plugin public static Item getClue(ClueLevel clueLevel) { List clues = ORGANIZED.get(clueLevel); if (clues == null) { - SystemLogger.logErr("Error! There are no clues for level " + clueLevel + "!"); + SystemLogger.logErr(ClueScrollPlugin.class, "Error! There are no clues for level " + clueLevel + "!"); return null; } ClueScrollPlugin clue = clues.get(RandomFunction.random(clues.size())); diff --git a/Server/src/main/java/core/game/ge/BuyingLimitation.java b/Server/src/main/java/core/game/ge/BuyingLimitation.java deleted file mode 100644 index 9a059d16b..000000000 --- a/Server/src/main/java/core/game/ge/BuyingLimitation.java +++ /dev/null @@ -1,89 +0,0 @@ -package core.game.ge; - -import core.cache.def.impl.ItemDefinition; -import rs09.game.system.config.ItemConfigParser; - -import java.util.HashMap; -import java.util.Map; - -/** - * Handles the buying limitations. - * @author Emperor - */ -public final class BuyingLimitation { - - /** - * Mapping holding buying amounts per player for every item id. - */ - private static final Map> CACHE = new HashMap<>(); - - /** - * Constructs a new {@code BuyingLimitation} {@code Object}. - */ - private BuyingLimitation() { - /* - * empty. - */ - } - - /** - * Gets the maximum amount the player can buy of this item. - * @param itemId The item id. - * @param playerUID The player UID. - * @return The maximum amount to buy. - */ - public static int getMaximumBuy(int itemId, int playerUID) { - Map data = CACHE.get(itemId); - Integer current = 0; - if (data != null) { - current = data.get(playerUID); - } - if (current == null) { - current = 0; - } - return ItemDefinition.forId(itemId).getConfiguration(ItemConfigParser.GE_LIMIT, 25000) - current; - } - - /** - * Updates the currently bought amount. - * @param itemId The item id. - * @param playerUID The player UID. - * @param amount The amount. - */ - public static void updateBoughtAmount(int itemId, int playerUID, int amount) { - Map data = CACHE.get(itemId); - if (data == null) { - CACHE.put(itemId, data = new HashMap<>()); - } - Integer current = data.get(playerUID); - if (current == null) { - current = 0; - } - current += amount; - data.put(playerUID, current); - } - - /** - * Checks if the offer is limited. - * @return {@code True} if so. - */ - public static boolean isLimited(int itemId, int playerUID) { - Map data = CACHE.get(itemId); - if (data == null) { - return false; - } - Integer current = data.get(playerUID); - if (current == null) { - return false; - } - int max = ItemDefinition.forId(itemId).getConfiguration(ItemConfigParser.GE_LIMIT, 25000); - return current >= max; - } - - /** - * Clears the cached data. - */ - public static void clear() { - CACHE.clear(); - } -} \ No newline at end of file diff --git a/Server/src/main/java/core/game/ge/GrandExchangeEntry.java b/Server/src/main/java/core/game/ge/GrandExchangeEntry.java deleted file mode 100644 index fa0119f8f..000000000 --- a/Server/src/main/java/core/game/ge/GrandExchangeEntry.java +++ /dev/null @@ -1,219 +0,0 @@ -package core.game.ge; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - -/** - * Represents a grand exchange entry, which contains the item id, current price - * and previous prices. - * @author Emperor - */ -public final class GrandExchangeEntry { - - /** - * The item id. - */ - private final int itemId; - - /** - * The item value. - */ - private int value; - - /** - * The value log. - */ - private int[] valueLog = new int[256]; - - /** - * The log length. - */ - private int logLength; - - /** - * The amount of unique trades completed. - */ - private int uniqueTrades; - - /** - * The total value amount of each the unique trades.
This is used to - * calculate the average price, so we know whether or not to update price. - */ - private long totalValue; - - /** - * The last update time stamp. - */ - private long lastUpdate; - - /** - * The mapping of completed buying offers. - */ - private Map boughtMap = new HashMap<>(); - - /** - * Constructs a new {@code GrandExchangeEntry} {@code Object}. - * @param itemId The item id. - */ - public GrandExchangeEntry(int itemId) { - this.itemId = itemId; - } - - /** - * Updates the item value. - * @param value The new item value to set. - */ - public void updateValue(int value) { - int[] newValueLog = new int[256]; - System.arraycopy(valueLog, 0, newValueLog, 1, logLength); - newValueLog[0] = this.value; - this.valueLog = newValueLog; - this.value = value; - this.uniqueTrades = 0; - this.totalValue = 0; - if (++logLength > 255) { - logLength = 255; - } - } - - /** - * Influences the price of this item. - * @param value The value offered in the exchange. - */ - public void influenceValue(int value) { - if (value < this.value * 0.5) { // Makes sure the player can't influence - // too much - value = (int) (this.value * 0.5); - } else if (value > this.value * 1.5) { - value = (int) (this.value * 1.5); - } - uniqueTrades++; - totalValue += value; - } - - /** - * Gets the itemId. - * @return The itemId. - */ - public int getItemId() { - return itemId; - } - - /** - * Gets the value. - * @return The value. - */ - public int getValue() { - return value; - } - - /** - * Sets the value. - * @param value The value to set. - */ - public void setValue(int value) { - this.value = value; - } - - /** - * Gets the valueLog. - * @return The valueLog. - */ - public int[] getValueLog() { - return valueLog; - } - - /** - * Sets the valueLog. - * @param valueLog The valueLog to set. - */ - public void setValueLog(int[] valueLog) { - this.valueLog = valueLog; - } - - /** - * Gets the uniqueTrades. - * @return The uniqueTrades. - */ - public int getUniqueTrades() { - return uniqueTrades; - } - - /** - * Sets the uniqueTrades. - * @param uniqueTrades The uniqueTrades to set. - */ - public void setUniqueTrades(int uniqueTrades) { - this.uniqueTrades = uniqueTrades; - } - - /** - * Gets the totalValue. - * @return The totalValue. - */ - public long getTotalValue() { - return totalValue; - } - - /** - * Sets the totalValue. - * @param totalValue The totalValue to set. - */ - public void setTotalValue(long totalValue) { - this.totalValue = totalValue; - } - - /** - * Gets the lastUpdate. - * @return The lastUpdate. - */ - public long getLastUpdate() { - return lastUpdate; - } - - /** - * Sets the lastUpdate. - * @param lastUpdate The lastUpdate to set. - */ - public void setLastUpdate(long lastUpdate) { - this.lastUpdate = lastUpdate; - } - - /** - * Gets the logLength. - * @return The logLength. - */ - public int getLogLength() { - return logLength; - } - - /** - * Sets the logLength. - * @param logLength The logLength to set. - */ - public void setLogLength(int logLength) { - this.logLength = logLength; - } - - /** - * Gets the boughtMap. - * @return The boughtMap. - */ - public Map getBoughtMap() { - return boughtMap; - } - - /** - * Sets the boughtMap. - * @param boughtMap The boughtMap to set. - */ - public void setBoughtMap(Map boughtMap) { - this.boughtMap = boughtMap; - } - - @Override - public String toString() { - return "GrandExchangeEntry [itemId=" + itemId + ", value=" + value + ", valueLog=" + Arrays.toString(valueLog) + ", logLength=" + logLength + ", uniqueTrades=" + uniqueTrades + ", totalValue=" + totalValue + ", lastUpdate=" + lastUpdate + ", boughtMap=" + boughtMap + "]"; - } -} \ No newline at end of file diff --git a/Server/src/main/java/core/game/interaction/Interaction.java b/Server/src/main/java/core/game/interaction/Interaction.java index f7d210ea9..f7da75f8a 100644 --- a/Server/src/main/java/core/game/interaction/Interaction.java +++ b/Server/src/main/java/core/game/interaction/Interaction.java @@ -13,6 +13,7 @@ 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 rs09.game.interaction.IntType; import rs09.game.interaction.InteractionListeners; import rs09.game.system.SystemLogger; import rs09.game.world.GameWorld; @@ -86,7 +87,7 @@ public class Interaction { player.dispatch(new InteractionEvent(node, option.getName().toLowerCase())); } catch (Exception e){ e.printStackTrace(); - SystemLogger.logErr(this.getClass().getName() + e.getMessage()); + SystemLogger.logErr(this.getClass(), this.getClass().getName() + e.getMessage()); } } @@ -108,7 +109,7 @@ public class Interaction { if (player.getLocks().isInteractionLocked() || player.getZoneMonitor().interact(node, option)) { return true; } - if(InteractionListeners.run(node.getId(),0,option.getName(),player,node)){ + if(InteractionListeners.run(node.getId(), IntType.ITEM, option.getName(),player,node)){ return true; } if (option.getHandler() == null || !option.getHandler().handle(player, node, option.getName().toLowerCase())) { @@ -119,7 +120,7 @@ public class Interaction { } } catch (Exception e){ e.printStackTrace(); - SystemLogger.logErr(this.getClass().getName() + e.getMessage()); + SystemLogger.logErr(this.getClass(), this.getClass().getName() + e.getMessage()); } return true; } @@ -150,7 +151,7 @@ public class Interaction { player.getPacketDispatch().sendMessage("Nothing interesting happens."); } catch (Exception e){ e.printStackTrace(); - SystemLogger.logErr(this.getClass().getName() + e.getMessage()); + SystemLogger.logErr(this.getClass(), this.getClass().getName() + e.getMessage()); } return true; } @@ -188,7 +189,7 @@ public class Interaction { } } catch (Exception e){ e.printStackTrace(); - SystemLogger.logErr(this.getClass().getName() + e.getMessage()); + SystemLogger.logErr(this.getClass(), this.getClass().getName() + e.getMessage()); } return true; } diff --git a/Server/src/main/java/core/game/interaction/MovementPulse.java b/Server/src/main/java/core/game/interaction/MovementPulse.java index a48b8009b..da462af5f 100644 --- a/Server/src/main/java/core/game/interaction/MovementPulse.java +++ b/Server/src/main/java/core/game/interaction/MovementPulse.java @@ -233,9 +233,9 @@ public abstract class MovementPulse extends Pulse { return; } if(destination.getLocation() == null){ - SystemLogger.logAlert(destination.getId() + " < ID"); - SystemLogger.logAlert(destination.getName() + " < NAME"); - SystemLogger.logAlert("ASDAD"); + 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()); diff --git a/Server/src/main/java/core/game/interaction/OptionHandler.java b/Server/src/main/java/core/game/interaction/OptionHandler.java index 467464958..168b7ae1b 100644 --- a/Server/src/main/java/core/game/interaction/OptionHandler.java +++ b/Server/src/main/java/core/game/interaction/OptionHandler.java @@ -71,7 +71,7 @@ public abstract class OptionHandler implements Plugin { final SceneryDefinition definition = SceneryDefinition.forId(wrapper); final List list = new ArrayList<>(20); if (definition.getChildrenIds() == null) { - SystemLogger.logErr("Null child wrapper in option handler wrapperId=" + wrapper); + SystemLogger.logErr(this.getClass(), "Null child wrapper in option handler wrapperId=" + wrapper); return new int[] { wrapper }; } for (int child : definition.getChildrenIds()) { diff --git a/Server/src/main/java/core/game/interaction/UseWithHandler.java b/Server/src/main/java/core/game/interaction/UseWithHandler.java index 66a2a11d0..dc79cf200 100644 --- a/Server/src/main/java/core/game/interaction/UseWithHandler.java +++ b/Server/src/main/java/core/game/interaction/UseWithHandler.java @@ -210,7 +210,7 @@ public abstract class UseWithHandler implements Plugin { final SceneryDefinition definition = SceneryDefinition.forId(wrapper); final List list = new ArrayList<>(20); if (definition.getChildrenIds() == null) { - SystemLogger.logErr("Null child wrapper in option handler wrapperId=" + wrapper); + SystemLogger.logErr(this.getClass(), "Null child wrapper in option handler wrapperId=" + wrapper); return new int[]{wrapper}; } for (int child : definition.getChildrenIds()) { diff --git a/Server/src/main/java/core/game/interaction/inter/EquipmentInterface.java b/Server/src/main/java/core/game/interaction/inter/EquipmentInterface.java index 8cc9c95d3..daa9796f9 100644 --- a/Server/src/main/java/core/game/interaction/inter/EquipmentInterface.java +++ b/Server/src/main/java/core/game/interaction/inter/EquipmentInterface.java @@ -7,7 +7,6 @@ import core.game.component.ComponentPlugin; import core.game.container.Container; import core.game.container.ContainerEvent; import core.game.container.ContainerListener; -import core.game.container.access.BitregisterAssembler; import core.game.container.access.InterfaceContainer; import core.game.container.impl.EquipmentContainer; import core.game.interaction.OptionHandler; @@ -22,6 +21,7 @@ import core.net.packet.out.ContainerPacket; import core.plugin.Initializable; import core.plugin.Plugin; import rs09.game.content.global.action.EquipHandler; +import rs09.game.interaction.IntType; import rs09.game.interaction.InteractionListeners; import rs09.game.world.GameWorld; @@ -82,7 +82,7 @@ public final class EquipmentInterface extends ComponentPlugin { @Override public boolean pulse() { if (item == null) return true; - InteractionListeners.run(item.getId(),0,"equip",p, item); + InteractionListeners.run(item.getId(), IntType.ITEM,"equip",p, item); return true; } }); @@ -164,10 +164,6 @@ public final class EquipmentInterface extends ComponentPlugin { EquipmentContainer.update(p); p.getInterfaceManager().openSingleTab(new Component(670)); InterfaceContainer.generateItems(p, p.getInventory().toArray(), new String[] { "Equip" }, 670, 0, 7, 4, 93); - BitregisterAssembler assembly = new BitregisterAssembler(new String[] { "Equip" }); - assembly.enableExamineOption(); - assembly.enableSlotSwitch(); - p.getPacketDispatch().sendIfaceSettings(assembly.calculateRegister(), 0, 670, 0, 27); p.getInventory().getListeners().add(listener); p.getInventory().refresh(); ItemDefinition.statsUpdate(p); @@ -192,7 +188,7 @@ public final class EquipmentInterface extends ComponentPlugin { if (item == null) { return; } - if(InteractionListeners.run(item.getId(),0,"operate",player,item)){ + if(InteractionListeners.run(item.getId(),IntType.ITEM,"operate",player,item)){ return; } OptionHandler handler = item.getOperateHandler(); diff --git a/Server/src/main/java/core/game/interaction/inter/WorldMapInterface.java b/Server/src/main/java/core/game/interaction/inter/WorldMapInterface.java index eed52ad10..b7f8f6759 100644 --- a/Server/src/main/java/core/game/interaction/inter/WorldMapInterface.java +++ b/Server/src/main/java/core/game/interaction/inter/WorldMapInterface.java @@ -31,7 +31,7 @@ public final class WorldMapInterface extends ComponentPlugin { player.updateSceneGraph(true); return true; default: - //SystemLogger.logErr("World map: buttonid: " + button + ", opcode: " + opcode + ", slot: " + slot); + //SystemLogger.logErr(this.getClass(), "World map: buttonid: " + button + ", opcode: " + opcode + ", slot: " + slot); return true; } } diff --git a/Server/src/main/java/core/game/interaction/item/ExplorersRingPlugin.kt b/Server/src/main/java/core/game/interaction/item/ExplorersRingPlugin.kt index 5b0c3cdd7..a0d326f77 100644 --- a/Server/src/main/java/core/game/interaction/item/ExplorersRingPlugin.kt +++ b/Server/src/main/java/core/game/interaction/item/ExplorersRingPlugin.kt @@ -1,24 +1,19 @@ package core.game.interaction.item -import api.* -import core.Util -import core.cache.def.impl.ItemDefinition -import core.plugin.Initializable -import core.game.interaction.OptionHandler -import core.plugin.Plugin -import core.game.node.entity.skill.Skills -import core.game.interaction.item.ExplorersRingPlugin -import core.game.node.Node +import api.hasLevelStat +import api.sendMessage +import api.teleport +import api.visualize import core.game.node.entity.player.Player import core.game.node.entity.player.link.TeleportManager.TeleportType +import core.game.node.entity.skill.Skills import core.game.world.map.Location -import core.game.world.update.flag.context.Animation -import core.game.world.update.flag.context.Graphics import org.json.simple.JSONObject import org.rs09.consts.Items import rs09.ServerStore import rs09.ServerStore.Companion.getBoolean import rs09.ServerStore.Companion.getInt +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListener /** @@ -33,7 +28,7 @@ class ExplorersRingPlugin : InteractionListener { override fun defineListeners() { - on(RINGS, ITEM, "run-replenish"){player, node -> + on(RINGS, IntType.ITEM, "run-replenish"){player, node -> val charges = getStoreFile().getInt(player.username.toLowerCase() + ":run") if (charges >= getRingLevel(node.id)) { sendMessage(player,"You have used all the charges you can for one day.") @@ -49,7 +44,7 @@ class ExplorersRingPlugin : InteractionListener { return@on true } - on(RINGS, ITEM, "low-alchemy"){player, _ -> + on(RINGS, IntType.ITEM, "low-alchemy"){player, _ -> if (!hasLevelStat(player, Skills.MAGIC, 21)) { sendMessage(player,"You need a Magic level of 21 in order to do that.") return@on true @@ -65,12 +60,12 @@ class ExplorersRingPlugin : InteractionListener { return@on true } - on(RINGS, ITEM, "cabbage-port"){player, node -> + on(RINGS, IntType.ITEM, "cabbage-port"){player, node -> teleport(player) return@on true } - on(RINGS, ITEM, "operate", "rub"){player, node -> + on(RINGS, IntType.ITEM, "operate", "rub"){player, node -> if(getRingLevel(node.id) < 3){ sendMessage(player, "This item can not be operated.") return@on true diff --git a/Server/src/main/java/core/game/interaction/object/CulinoChestListener.kt b/Server/src/main/java/core/game/interaction/object/CulinoChestListener.kt index 4a65f8191..50c575485 100644 --- a/Server/src/main/java/core/game/interaction/object/CulinoChestListener.kt +++ b/Server/src/main/java/core/game/interaction/object/CulinoChestListener.kt @@ -5,6 +5,7 @@ import api.openBankAccount import core.game.content.global.shop.CulinomancerShop import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles the culino chest options. @@ -16,12 +17,12 @@ class CulinoChestListener : InteractionListener { } override fun defineListeners() { - on(CULINO_CHEST, SCENERY, "buy-items", "buy-food"){player, _ -> + on(CULINO_CHEST, IntType.SCENERY, "buy-items", "buy-food"){player, _ -> CulinomancerShop.openShop(player, food = getUsedOption(player).lowercase() == "buy-food") return@on true } - on(CULINO_CHEST, SCENERY, "bank"){player, _ -> + on(CULINO_CHEST, IntType.SCENERY, "bank"){player, _ -> openBankAccount(player) return@on true } diff --git a/Server/src/main/java/core/game/interaction/object/sorceress/GardenObjectsPlugin.kt b/Server/src/main/java/core/game/interaction/object/sorceress/GardenObjectsPlugin.kt index e69566e99..733e7dbb5 100644 --- a/Server/src/main/java/core/game/interaction/object/sorceress/GardenObjectsPlugin.kt +++ b/Server/src/main/java/core/game/interaction/object/sorceress/GardenObjectsPlugin.kt @@ -22,6 +22,7 @@ import core.net.packet.context.MinimapStateContext import core.net.packet.out.MinimapState import core.tools.RandomFunction import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld import rs09.plugin.ClassScanner @@ -39,7 +40,7 @@ class GardenObjectsPlugin : InteractionListener { SqirkMakingDialogue().init() ClassScanner.definePlugin(SorceressGardenObject()) - on(SQIRK_TREES, SCENERY, "pick-fruit"){player, node -> + on(SQIRK_TREES, IntType.SCENERY, "pick-fruit"){player, node -> val def = SeasonDefinitions.forTreeId(node.id) if (def != null) { player.lock() @@ -73,7 +74,7 @@ class GardenObjectsPlugin : InteractionListener { } - on(FOUNTAIN, SCENERY, "drink-from"){player, _ -> + on(FOUNTAIN, IntType.SCENERY, "drink-from"){player, _ -> player.lock() GameWorld.Pulser.submit(object : Pulse(1, player) { var counter = 0 @@ -101,7 +102,7 @@ class GardenObjectsPlugin : InteractionListener { return@on true } - on(SHELVES, SCENERY, "search"){player, node -> + on(SHELVES, IntType.SCENERY, "search"){player, node -> if (player.inventory.freeSlots() < 1) { player.sendMessage("You don't have enough space in your inventory to take a beer glass.") } else { @@ -112,7 +113,7 @@ class GardenObjectsPlugin : InteractionListener { return@on true } - on(HERBS, SCENERY, "pick"){player, node -> + on(HERBS, IntType.SCENERY, "pick"){player, node -> val herbDef = HerbDefinition.forId(node.getId()) if (herbDef != null) { handleElementalGarden(player, node.asScenery(), herbDef) diff --git a/Server/src/main/java/core/game/node/entity/npc/AbstractNPC.java b/Server/src/main/java/core/game/node/entity/npc/AbstractNPC.java index 402f2fce5..7605a60f5 100644 --- a/Server/src/main/java/core/game/node/entity/npc/AbstractNPC.java +++ b/Server/src/main/java/core/game/node/entity/npc/AbstractNPC.java @@ -63,7 +63,7 @@ public abstract class AbstractNPC extends NPC implements Plugin { if (mapping.containsKey(id)) { String name = mapping.get(id).getClass().getSimpleName(); if (name != getClass().getSimpleName()) { - SystemLogger.logErr("[" + getClass().getSimpleName() + "] - Warning: Mapping already contained NPC id " + id + "! (" + name + ")"); + SystemLogger.logErr(this.getClass(), "[" + getClass().getSimpleName() + "] - Warning: Mapping already contained NPC id " + id + "! (" + name + ")"); continue; } } diff --git a/Server/src/main/java/core/game/node/entity/npc/drop/CELEMinorTable.java b/Server/src/main/java/core/game/node/entity/npc/drop/CELEMinorTable.java index b913fdf70..5364d3b74 100644 --- a/Server/src/main/java/core/game/node/entity/npc/drop/CELEMinorTable.java +++ b/Server/src/main/java/core/game/node/entity/npc/drop/CELEMinorTable.java @@ -57,11 +57,11 @@ public final class CELEMinorTable implements StartupListener { @Override public void startup() { if(ServerConstants.CELEDT_DATA_PATH != null && !new File(ServerConstants.CELEDT_DATA_PATH).exists()){ - SystemLogger.logErr("Can't locate CELEDT file at " + ServerConstants.CELEDT_DATA_PATH); + SystemLogger.logErr(this.getClass(), "Can't locate CELEDT file at " + ServerConstants.CELEDT_DATA_PATH); return; } parse(ServerConstants.CELEDT_DATA_PATH); - logInfo("Loaded up Chaos Elemental drop table from " + ServerConstants.CELEDT_DATA_PATH); + logInfo(this.getClass(), "Loaded up Chaos Elemental drop table from " + ServerConstants.CELEDT_DATA_PATH); } /** diff --git a/Server/src/main/java/core/game/node/entity/npc/drop/RareDropTable.java b/Server/src/main/java/core/game/node/entity/npc/drop/RareDropTable.java index 8649e6443..c0bbe3742 100644 --- a/Server/src/main/java/core/game/node/entity/npc/drop/RareDropTable.java +++ b/Server/src/main/java/core/game/node/entity/npc/drop/RareDropTable.java @@ -57,11 +57,11 @@ public final class RareDropTable implements StartupListener { @Override public void startup() { if(ServerConstants.RDT_DATA_PATH != null && !new File(ServerConstants.RDT_DATA_PATH).exists()){ - SystemLogger.logErr("Can't locate RDT file at " + ServerConstants.RDT_DATA_PATH); + SystemLogger.logErr(this.getClass(), "Can't locate RDT file at " + ServerConstants.RDT_DATA_PATH); return; } parse(ServerConstants.RDT_DATA_PATH); - logInfo("Initialized Rare Drop Table from " + ServerConstants.RDT_DATA_PATH); + logInfo(this.getClass(), "Initialized Rare Drop Table from " + ServerConstants.RDT_DATA_PATH); } /** diff --git a/Server/src/main/java/core/game/node/entity/player/Player.java b/Server/src/main/java/core/game/node/entity/player/Player.java index ff4ce7be1..2a6ccd87a 100644 --- a/Server/src/main/java/core/game/node/entity/player/Player.java +++ b/Server/src/main/java/core/game/node/entity/player/Player.java @@ -341,7 +341,7 @@ public class Player extends Entity { @Override public void init() { if(!artificial) - SystemLogger.logInfo(getUsername() + " initialising..."); + SystemLogger.logInfo(this.getClass(), getUsername() + " initialising..."); if (!artificial) { getProperties().setSpawnLocation(ServerConstants.HOME_LOCATION); getDetails().getSession().setObject(this); diff --git a/Server/src/main/java/core/game/node/entity/player/info/login/LoginConfiguration.java b/Server/src/main/java/core/game/node/entity/player/info/login/LoginConfiguration.java index d5a134252..5664bf910 100644 --- a/Server/src/main/java/core/game/node/entity/player/info/login/LoginConfiguration.java +++ b/Server/src/main/java/core/game/node/entity/player/info/login/LoginConfiguration.java @@ -210,7 +210,7 @@ public final class LoginConfiguration { */ public static final void config(final Player player) { if(!player.isArtificial()) - SystemLogger.logInfo("configuring player " + player.getUsername()); + SystemLogger.logInfo(LoginConfiguration.class, "configuring player " + player.getUsername()); player.getInventory().refresh(); player.getEquipment().refresh(); player.getSkills().refresh(); @@ -227,7 +227,7 @@ public final class LoginConfiguration { player.getEmoteManager().refresh(); player.getInterfaceManager().openInfoBars(); if(!player.isArtificial()) - SystemLogger.logInfo("finished configuring player " + player.getUsername()); + SystemLogger.logInfo(LoginConfiguration.class, "finished configuring player " + player.getUsername()); } /** diff --git a/Server/src/main/java/core/game/node/entity/player/info/login/PlayerParser.java b/Server/src/main/java/core/game/node/entity/player/info/login/PlayerParser.java index adf4c770c..1d94a4ce2 100644 --- a/Server/src/main/java/core/game/node/entity/player/info/login/PlayerParser.java +++ b/Server/src/main/java/core/game/node/entity/player/info/login/PlayerParser.java @@ -60,7 +60,7 @@ public final class PlayerParser { assert os != null; os.close(); } catch (Exception f){ - SystemLogger.logWarn("Unable to close file copiers in PlayerParser.java line 216."); + SystemLogger.logWarn(PlayerParser.class, "Unable to close file copiers in PlayerParser.java line 216."); f.printStackTrace(); } } diff --git a/Server/src/main/java/core/game/node/entity/player/link/InterfaceManager.java b/Server/src/main/java/core/game/node/entity/player/link/InterfaceManager.java index 6e3a7cde2..660cc1eb9 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/InterfaceManager.java +++ b/Server/src/main/java/core/game/node/entity/player/link/InterfaceManager.java @@ -124,7 +124,7 @@ public final class InterfaceManager { public Component openWindowsPane(Component windowsPane, boolean overlap) { this.windowsPane = windowsPane; if (windowsPane.getDefinition().getType() != InterfaceType.WINDOW_PANE) { - SystemLogger.logErr("Set interface type to WINDOW_PANE for component " + windowsPane.getId() + ", definition requires updating!"); + SystemLogger.logErr(this.getClass(), "Set interface type to WINDOW_PANE for component " + windowsPane.getId() + ", definition requires updating!"); windowsPane.getDefinition().setType(InterfaceType.WINDOW_PANE); } @@ -140,7 +140,7 @@ public final class InterfaceManager { public void openWindowsPane(Component windowsPane, int type) { this.windowsPane = windowsPane; if (windowsPane.getDefinition().getType() != InterfaceType.WINDOW_PANE) { - SystemLogger.logErr("Set interface type to WINDOW_PANE for component " + windowsPane.getId() + ", definition requires updating!"); + SystemLogger.logErr(this.getClass(), "Set interface type to WINDOW_PANE for component " + windowsPane.getId() + ", definition requires updating!"); windowsPane.getDefinition().setType(InterfaceType.SINGLE_TAB); } @@ -268,7 +268,7 @@ public final class InterfaceManager { */ public Component openSingleTab(Component component) { if (component.getDefinition().getType() != InterfaceType.SINGLE_TAB) { - SystemLogger.logErr("Set interface type to SINGLE_TAB for component " + component.getId() + ", definition requires updating!"); + SystemLogger.logErr(this.getClass(), "Set interface type to SINGLE_TAB for component " + component.getId() + ", definition requires updating!"); component.getDefinition().setType(InterfaceType.SINGLE_TAB); } component.open(player); @@ -453,11 +453,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("Set tab index to " + slot + " for component " + component.getId() + ", definition requires updating!"); + SystemLogger.logErr(this.getClass(), "Set tab index to " + slot + " for component " + component.getId() + ", definition requires updating!"); component.getDefinition().setTabIndex(slot); } if (component.getDefinition().getType() != InterfaceType.TAB) { - SystemLogger.logErr("Set interface type to TAB for component " + component.getId() + ", definition requires updating!"); + SystemLogger.logErr(this.getClass(), "Set interface type to TAB for component " + component.getId() + ", definition requires updating!"); component.getDefinition().setType(InterfaceType.TAB); } component.open(player); @@ -470,7 +470,7 @@ public final class InterfaceManager { */ public void openTab(Component component) { if (component.getDefinition().getTabIndex() < 0) { - SystemLogger.logErr("No component definitions found for tab " + component.getId() + "!"); + SystemLogger.logErr(this.getClass(), "No component definitions found for tab " + component.getId() + "!"); return; } openTab(component.getDefinition().getTabIndex(), component); @@ -500,7 +500,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("Set interface type to CHATBOX for component " + component.getId() + ", definition requires updating!"); + SystemLogger.logErr(this.getClass(), "Set interface type to CHATBOX for component " + component.getId() + ", definition requires updating!"); chatbox.getDefinition().setType(InterfaceType.DIALOGUE); } chatbox.open(player); @@ -606,7 +606,7 @@ public final class InterfaceManager { } overlay = component; if (overlay.getDefinition().getType() != InterfaceType.OVERLAY) { - SystemLogger.logErr("Set interface type to OVERLAY for component " + component.getId() + ", definition requires updating!"); + SystemLogger.logErr(this.getClass(), "Set interface type to OVERLAY for component " + component.getId() + ", definition requires updating!"); overlay.getDefinition().setType(InterfaceType.OVERLAY); overlay.getDefinition().setWalkable(true); } @@ -623,7 +623,7 @@ public final class InterfaceManager { } wildyOverlay = component; if (wildyOverlay.getDefinition().getType() != InterfaceType.WILDERNESS_OVERLAY) { - SystemLogger.logErr("Set interface type to WILDERNESS_OVERLAY for component " + component.getId() + ", definition requires updating!"); + SystemLogger.logErr(this.getClass(), "Set interface type to WILDERNESS_OVERLAY for component " + component.getId() + ", definition requires updating!"); wildyOverlay.getDefinition().setType(InterfaceType.WILDERNESS_OVERLAY); wildyOverlay.getDefinition().setWalkable(true); } diff --git a/Server/src/main/java/core/game/node/entity/player/link/PacketDispatch.java b/Server/src/main/java/core/game/node/entity/player/link/PacketDispatch.java index 08bdf7217..678c8099a 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/PacketDispatch.java +++ b/Server/src/main/java/core/game/node/entity/player/link/PacketDispatch.java @@ -64,7 +64,7 @@ public final class PacketDispatch { return; } if (message.length() > 255) { - SystemLogger.logErr("Message length out of bounds (" + message + ")!"); + SystemLogger.logErr(this.getClass(), "Message length out of bounds (" + message + ")!"); message = message.substring(0, 255); } PacketRepository.send(GameMessage.class, new GameMessageContext(player, message)); diff --git a/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java b/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java index e7f8737c3..903ea7060 100644 --- a/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java +++ b/Server/src/main/java/core/game/node/entity/player/link/quest/QuestRepository.java @@ -100,7 +100,7 @@ public final class QuestRepository { if(oldStage < stage) { quests.put(quest.getIndex(), stage); } else { - SystemLogger.logWarn(String.format("Nonmonotonic QuestRepository.setStage call for player \"%s\", quest \"%s\", old stage %d, new stage %d", player.getName(), quest.getName(), oldStage, stage)); + 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)); } } @@ -204,7 +204,7 @@ public final class QuestRepository { public boolean isComplete(String name) { Quest quest = getQuest(name); if (quest == null) { - SystemLogger.logErr("Error can't check if quest is complete for " + name); + SystemLogger.logErr(this.getClass(), "Error can't check if quest is complete for " + name); return false; } return quest.getStage(player) >= 100; @@ -219,7 +219,7 @@ public final class QuestRepository { public boolean hasStarted(String name) { Quest quest = getQuest(name); if (quest == null) { - SystemLogger.logErr("Error can't check if quest is complete for " + name); + SystemLogger.logErr(this.getClass(), "Error can't check if quest is complete for " + name); return false; } return quest.getStage(player) > 0; diff --git a/Server/src/main/java/core/game/node/entity/skill/construction/BuildOptionPlugin.java b/Server/src/main/java/core/game/node/entity/skill/construction/BuildOptionPlugin.java index 370a5db96..904d5e39b 100644 --- a/Server/src/main/java/core/game/node/entity/skill/construction/BuildOptionPlugin.java +++ b/Server/src/main/java/core/game/node/entity/skill/construction/BuildOptionPlugin.java @@ -65,7 +65,7 @@ public final class BuildOptionPlugin extends OptionHandler { Hotspot hotspot = player.getHouseManager().getHotspot(object); if (hotspot == null || !isBuildable(player, object, hotspot)) { System.out.println(hotspot == null); - SystemLogger.logErr("Construction (building): " + hotspot + " : " + object + " chunkX = " + object.getLocation().getChunkX() + ", chunkY = " + object.getLocation().getChunkY()); + SystemLogger.logErr(this.getClass(), "Construction (building): " + hotspot + " : " + object + " chunkX = " + object.getLocation().getChunkX() + ", chunkY = " + object.getLocation().getChunkY()); return true; } diff --git a/Server/src/main/java/core/game/node/entity/skill/construction/BuildingUtils.java b/Server/src/main/java/core/game/node/entity/skill/construction/BuildingUtils.java index 672896d53..12ca0ed35 100644 --- a/Server/src/main/java/core/game/node/entity/skill/construction/BuildingUtils.java +++ b/Server/src/main/java/core/game/node/entity/skill/construction/BuildingUtils.java @@ -289,7 +289,7 @@ public final class BuildingUtils { } } } else { - SystemLogger.logErr("Couldn't find stairs! " + plane); + SystemLogger.logErr(BuildingUtils.class, "Couldn't find stairs! " + plane); } } } @@ -409,7 +409,7 @@ public final class BuildingUtils { } } } else { - SystemLogger.logErr("Couldn't find stairs! " + plane); + SystemLogger.logErr(BuildingUtils.class, "Couldn't find stairs! " + plane); } } } @@ -632,8 +632,8 @@ public final class BuildingUtils { Direction[] directions = new Direction[4]; boolean[] exit = Arrays.copyOf(exits, exits.length); //(0=east, 1=south, 2=west, 3=north) int[] info = getExitRequirements(player, z, roomX, roomY);//(0=west, 1=north, 2=east, 3=south) - // SystemLogger.logErr("Available exits - [east=" + exit[0] + ", south=" + exit[1] + ", west=" + exit[2] + ", north=" + exit[3] + "]!"); - // SystemLogger.logErr("Required exits - [east=" + info[0] + ", south=" + info[1] + ", west=" + info[2] + ", north=" + info[3] + "]!"); + // SystemLogger.logErr(BuildingUtils.class, "Available exits - [east=" + exit[0] + ", south=" + exit[1] + ", west=" + exit[2] + ", north=" + exit[3] + "]!"); + // SystemLogger.logErr(BuildingUtils.class, "Required exits - [east=" + info[0] + ", south=" + info[1] + ", west=" + info[2] + ", north=" + info[3] + "]!"); for (int i = 0; i < 4; i++) { boolean success = true; for (int j = 0; j < 4; j++) { diff --git a/Server/src/main/java/core/game/node/entity/skill/construction/ConstructionInterface.java b/Server/src/main/java/core/game/node/entity/skill/construction/ConstructionInterface.java index 33ee06a11..14ce91b8c 100644 --- a/Server/src/main/java/core/game/node/entity/skill/construction/ConstructionInterface.java +++ b/Server/src/main/java/core/game/node/entity/skill/construction/ConstructionInterface.java @@ -39,12 +39,12 @@ public final class ConstructionInterface extends ComponentPlugin { Hotspot hotspot = player.getAttribute("con:hotspot"); Scenery object = player.getAttribute("con:hsobject"); if (hotspot == null || object == null) { - SystemLogger.logErr("Failed building decoration " + hotspot + " : " + object); + SystemLogger.logErr(this.getClass(), "Failed building decoration " + hotspot + " : " + object); break; } slot = ((slot % 2 != 0) ? 4 : 0) + (slot >> 1); if (slot >= hotspot.getHotspot().getDecorations().length) { - SystemLogger.logErr("Failed building decoration " + slot + "/" + hotspot.getHotspot().getDecorations().length); + SystemLogger.logErr(this.getClass(), "Failed building decoration " + slot + "/" + hotspot.getHotspot().getDecorations().length); break; } boolean debug = player.isStaff(); @@ -105,7 +105,7 @@ public final class ConstructionInterface extends ComponentPlugin { break; case 402: int index = button - 160; - SystemLogger.logErr("BuildRoom Interface Index: " + index); + SystemLogger.logErr(this.getClass(), "BuildRoom Interface Index: " + index); if (index > -1 && index < RoomProperties.values().length) { player.getDialogueInterpreter().open("con:room", RoomProperties.values()[index]); return true; diff --git a/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java b/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java index a5bf99e30..0e1d8ea55 100644 --- a/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java +++ b/Server/src/main/java/core/game/node/entity/skill/construction/HouseManager.java @@ -323,7 +323,7 @@ public final class HouseManager { */ public Location getEnterLocation() { if (houseRegion == null) { - SystemLogger.logErr("House wasn't constructed yet!"); + SystemLogger.logErr(this.getClass(), "House wasn't constructed yet!"); return null; } for (int x = 0; x < 8; x++) { diff --git a/Server/src/main/java/core/game/node/entity/skill/construction/RoomBuilder.java b/Server/src/main/java/core/game/node/entity/skill/construction/RoomBuilder.java deleted file mode 100644 index abc555a25..000000000 --- a/Server/src/main/java/core/game/node/entity/skill/construction/RoomBuilder.java +++ /dev/null @@ -1,312 +0,0 @@ -package core.game.node.entity.skill.construction; - -import core.cache.def.impl.SceneryDefinition; -import core.game.component.Component; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.game.node.scenery.Scenery; -import core.game.node.scenery.SceneryBuilder; -import core.game.world.map.BuildRegionChunk; -import core.game.world.map.Direction; -import core.game.world.map.Location; -import core.net.packet.PacketRepository; -import core.net.packet.context.ContainerContext; -import core.net.packet.out.ContainerPacket; -import rs09.game.node.entity.skill.construction.Hotspot; -import rs09.game.system.SystemLogger; - -import java.util.Arrays; - -/** - * Used for building a room. - * @author Emperor - * - */ -public final class RoomBuilder { - - /** - * The directions array. - */ - public static final Direction[] DIRECTIONS = { - Direction.NORTH, Direction.EAST, Direction.SOUTH, Direction.WEST - }; - - /** - * Opens the building furniture interface. - * @param player The player. - * @param hotspot The hotspot. - */ - public static void openBuildInterface(Player player, BuildHotspot hotspot) { - player.getInterfaceManager().open(new Component(396)); - Item[] items = new Item[7]; - int value = 1; - for (int i = 0; i < 7; i++) { - int offset = i * 5; - if (i >= hotspot.getDecorations().length) { - for (int j = 97; j < 102; j++) { - player.getPacketDispatch().sendString("", 396, j + offset); - } - player.getPacketDispatch().sendString("", 396, 140 + i); - value |= 1 << (i + 1); - continue; - } - Decoration decoration = hotspot.getDecorations()[i]; - if (i < 4) { - items[i * 2] = new Item(decoration.getInterfaceItem()); - } else { - items[1 + ((i - 4) * 2)] = new Item(decoration.getInterfaceItem()); - } - player.getPacketDispatch().sendString(SceneryDefinition.forId(decoration.getObjectId()).getName(), 396, 97 + offset); - boolean hasRequirements = true; - for (int j = 0; j < 4; j++) { - if (j >= decoration.getItems().length) { - player.getPacketDispatch().sendString("", 396, 98 + offset + j); - } else { - Item item = decoration.getItems()[j]; - if (!player.getInventory().containsItem(item)) { - hasRequirements = false; - } - player.getPacketDispatch().sendString(item.getName() + ": " + item.getAmount(), 396, 98 + offset + j); - } - } - player.getPacketDispatch().sendString("Lvl " + decoration.getLevel(), 396, 140 + i); - if (hasRequirements) { - value |= 1 << (i + 1); - } - } - player.getConfigManager().set(261, value); - PacketRepository.send(ContainerPacket.class, new ContainerContext(player, 396, 132, 91, items, false)); - } - - /** - * Builds a decoration object. - * @param player The player. - * @param deco The decoration. - * @param object The object. - */ - public static void buildDecoration(Player player, BuildHotspot hotspot, Decoration deco, Scenery object) { - if(!player.isAdmin()){ - if (!player.getInventory().containsItems(deco.getItems())) { - player.getPacketDispatch().sendMessage("You don't have the required items to build this."); - return; - } - player.getInventory().remove(deco.getItems()); - } - Location l = object.getLocation(); - Room room = player.getHouseManager().getRooms()[l.getZ()][l.getLocalX() >> 3][l.getLocalY() >> 3]; - Hotspot h = room.getHotspot(hotspot, l.getX(), l.getY()); - if (h != null) { - switch(h.getHotspot().getType()) { - case INDIVIDUAL: - SceneryBuilder.replace(object, object.transform(deco.getObjectId())); - h.setDecorationIndex(hotspot.getDecorationIndex(deco)); - break; - case RECURSIVE: - room.setAllDecorationIndex(hotspot.getDecorationIndex(deco), h.getHotspot()); - Scenery[][] objects = player.getHouseManager().getHouseRegion().getPlanes()[l.getZ()].getChunks()[l.getLocalX() >> 3][l.getLocalY() >> 3].getObjects(); - for (int j = 0; j < objects.length; j++) { - for (int k = 0; k < objects[j].length; k++) { - Scenery go = objects[j][k]; - if (go != null && go.getId() == object.getId()) { - SceneryBuilder.replace(go, go.transform(deco.getObjectId())); - } - } - } - break; - case LINKED: - BuildHotspot[] linkedHotspots = BuildHotspot.getLinkedHotspots(h.getHotspot()); - BuildRegionChunk chunk = (BuildRegionChunk) player.getHouseManager().getHouseRegion().getPlanes()[l.getZ()].getChunks()[l.getLocalX() >> 3][l.getLocalY() >> 3]; - for (int x = 0; x < 8; x++) { - for (int y = 0; y < 8; y++) { - for(BuildHotspot bh : linkedHotspots) { - int index = chunk.getIndex(x, y, bh.getObjectId()); - Scenery o = chunk.get(x, y, index); - if (o != null && bh.getObjectId() == o.getId()) { - SceneryBuilder.replace(o, o.transform(bh.getDecorations()[0].getObjectId())); - room.setAllDecorationIndex(0, bh); - } - } - } - } - break; - } - } - } - - /** - * Remove the decoration - * @param player the player - * @param object the object to remove - */ - public static void removeDecoration(Player player, Scenery object) { - Location l = object.getLocation(); - Room room = player.getHouseManager().getRooms()[l.getZ()][l.getLocalX() >> 3][l.getLocalY() >> 3]; - for (int i = 0; i < room.getHotspots().length; i++) { - Hotspot hotspot = room.getHotspots()[i]; - if (hotspot.getChunkX() == l.getChunkOffsetX() && hotspot.getChunkY() == l.getChunkOffsetY()) { - switch (hotspot.getHotspot().getType()) { - case INDIVIDUAL: - SceneryBuilder.replace(object, object.transform(hotspot.getHotspot().getObjectId())); - hotspot.setDecorationIndex(-1); - return; - case RECURSIVE: - room.setAllDecorationIndex(-1, hotspot.getHotspot()); - Scenery[][] objects = player.getHouseManager().getHouseRegion().getPlanes()[l.getZ()].getChunks()[l.getLocalX() >> 3][l.getLocalY() >> 3].getObjects(); - for (int j = 0; j < objects.length; j++) { - for (int k = 0; k < objects[j].length; k++) { - Scenery go = objects[j][k]; - if (go != null && go.getId() == object.getId()) { - SceneryBuilder.replace(go, go.transform(hotspot.getHotspot().getObjectId())); - } - } - } - return; - case LINKED: - //TODO - return; - } - } - } - } - - /** - * Builds a room. - * @param player The player. - * @param room The room to build. - */ - public static void buildRoom(Player player, Room room, int z, int x, int y) { - SystemLogger.logErr("Building direction = " + room.getRotation().name()); - if(room.getRotation() != Direction.NORTH){ - room.setRotation(Direction.NORTH); - player.getDialogueInterpreter().sendDialogue("Room rotation is currently disabled."); - } - player.getHouseManager().getRooms()[z][x][y] = room; - player.getPacketDispatch().sendMessage("Building room " + room.getProperties() + "."); - player.getHouseManager().reload(player, true); - } - - /** - * Checks of a room exists - * @param player the player - * @param door the door hotspot the player is trying to build at - * @return true if the room is built already - */ - public static boolean roomExists(Player player, Scenery door) { - int[] location = getRoomPosition(door); - return player.getHouseManager().getRooms()[player.getLocation().getZ()][location[0]][location[1]] != null; - } - - /** - * Gets the room offset. - * @param door The door. - * @return The room offset [x, y]. - */ - public static int[] getRoomPosition(Scenery door) { - Location l = door.getLocation(); - switch (door.getRotation()) { - case 0: //West - return new int[] { (l.getLocalX() >> 3) - 1, l.getLocalY() >> 3 }; - case 1: //North - return new int[] { l.getLocalX() >> 3, (l.getLocalY() >> 3) + 1}; - case 2: //East - return new int[] { (l.getLocalX() >> 3) + 1, l.getLocalY() >> 3 }; - case 3: //South - return new int[] { l.getLocalX() >> 3, (l.getLocalY() >> 3) - 1}; - } - return null; - } - - /** - * Gets the available rotations of the room to build. - * @param exits The exits of the room. - * @param door The door hotspot used. - * @param roomX The room x-coordinate. - * @param roomY The room y-coordinate. - * @return The available rotations for the room [NORTH, EAST, SOUTH, WEST]. - */ - public static Direction[] getAvailableRotations(Player player, boolean[] exits, Scenery door, int roomX, int roomY) { - Direction[] directions = new Direction[4]; - //Exits go to: (0=east, 1=south, 2=west, 3=north) - boolean[] exit = Arrays.copyOf(exits, exits.length); - //Door goes to: (0=west, 1=north, 2=east, 3=south) - int[] info = getExitRequirements(player, door.getLocation().getZ(), roomX, roomY); - for (int i = 0; i < 4; i++) { - boolean success = true; - for (int j = 0; j < 4; j++) { - if (info[j] == 1 && !exit[j]) { - success = false; - break; - } - if (info[j] == -1 && exit[j]) { - success = false; - break; - } - } - if (success) { - directions[i] = Direction.NORTH; - } - System.out.println(i + ": " + Arrays.toString(exit) + " - " + Arrays.toString(info)); - boolean b = exit[0]; - for (int j = 0; j < exit.length - 1; j++) { - exit[j] = exit[j + 1]; - } - exit[exit.length - 1] = b; - } - Direction dir = directions[0]; - directions[0] = directions[2]; - directions[2] = dir; - dir = directions[1]; - directions[1] = directions[3]; - directions[3] = dir; - return directions; - } - - /** - * Gets the exit requirements for the given room. - * @param roomX The room x-coordinate. - * @param roomY The room y-coordinate. - * @return The disabled exit indexes. - */ - private static int[] getExitRequirements(Player player, int z, int roomX, int roomY) { - //1 2 3 0 - //0=east, 1=south, 2=west, 3=north). - int[] exits = new int[4]; - if (roomX == 0) { - exits[2] = -1; - } - else if (player.getHouseManager().hasExit(z, roomX - 1, roomY, Direction.EAST)) { - exits[2] = 1; - } - else if (player.getHouseManager().getRooms()[z][roomX - 1][roomY] != null) { - exits[2] = -1; - } - if (roomY == 7) { - exits[1] = -1; - } - else if (player.getHouseManager().hasExit(z, roomX, roomY + 1, Direction.SOUTH)) { - exits[1] = 1; - } - else if (player.getHouseManager().getRooms()[z][roomX][roomY + 1] != null) { - exits[1] = -1; - } - if (roomX == 7) { - exits[0] = -1; - } - else if (player.getHouseManager().hasExit(z, roomX + 1, roomY, Direction.WEST)) { - exits[0] = 1; - } - else if (player.getHouseManager().getRooms()[z][roomX + 1][roomY] != null) { - exits[0] = -1; - } - if (roomY == 0) { - exits[3] = -1; - } - else if (player.getHouseManager().hasExit(z, roomX, roomY - 1, Direction.NORTH)) { - exits[3] = 1; - } - else if (player.getHouseManager().getRooms()[z][roomX][roomY - 1] != null) { - exits[3] = -1; - } - return exits; - } -} \ No newline at end of file diff --git a/Server/src/main/java/core/game/node/entity/skill/cooking/CookingRewrite.kt b/Server/src/main/java/core/game/node/entity/skill/cooking/CookingRewrite.kt index fc6415333..8331f582a 100644 --- a/Server/src/main/java/core/game/node/entity/skill/cooking/CookingRewrite.kt +++ b/Server/src/main/java/core/game/node/entity/skill/cooking/CookingRewrite.kt @@ -11,6 +11,7 @@ import org.rs09.consts.Items.RAW_BEEF_2132 import org.rs09.consts.Items.SEAWEED_401 import org.rs09.consts.Items.UNCOOKED_CAKE_1889 import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.node.entity.skill.cooking.CookingDialogue /** @@ -32,7 +33,7 @@ class CookingRewrite : InteractionListener { override fun defineListeners() { - onUseWith(SCENERY,RAW_FOODS, *COOKING_OBJs){ player, used, with -> + onUseWith(IntType.SCENERY,RAW_FOODS, *COOKING_OBJs){ player, used, with -> val item = used.asItem() val obj = with.asScenery() val range = obj.name.toLowerCase().contains("range") diff --git a/Server/src/main/java/core/game/node/entity/skill/firemaking/FireMakingOptionPlugin.kt b/Server/src/main/java/core/game/node/entity/skill/firemaking/FireMakingOptionPlugin.kt index e54e9d16c..d2b56d38c 100644 --- a/Server/src/main/java/core/game/node/entity/skill/firemaking/FireMakingOptionPlugin.kt +++ b/Server/src/main/java/core/game/node/entity/skill/firemaking/FireMakingOptionPlugin.kt @@ -2,13 +2,14 @@ package core.game.node.entity.skill.firemaking import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class FiremakingListener : InteractionListener { - val logs = intArrayOf(1511, 1521, 1513, 1515, 1517, 1519, 1521, 2862, 3438, 3440, 3442, 3444, 3446, 3448, 6211, 6213, 6332, 6333, 7404, 7405, 7406, 8934, 9067, 10328, 10329, 10808, 10810, 10812, 11035, 12581, 12583, 3125) + val logs = intArrayOf(1511, 1521, 1513, 1515, 1517, 1519, 2862, 3438, 3440, 3442, 3444, 3446, 3448, 6211, 6213, 6332, 6333, 7404, 7405, 7406, 8934, 9067, 10328, 10329, 10808, 10810, 10812, 11035, 12581, 12583, 3125) override fun defineListeners() { - onUseWith(ITEM, Items.TINDERBOX_590, *logs) { player, _, with -> + onUseWith(IntType.ITEM, Items.TINDERBOX_590, *logs) { player, _, with -> player.pulseManager.run(FireMakingPulse(player, with.asItem(), null)) return@onUseWith true } diff --git a/Server/src/main/java/core/game/node/entity/skill/gather/SkillingResource.java b/Server/src/main/java/core/game/node/entity/skill/gather/SkillingResource.java index 5ba227009..100c18ec9 100644 --- a/Server/src/main/java/core/game/node/entity/skill/gather/SkillingResource.java +++ b/Server/src/main/java/core/game/node/entity/skill/gather/SkillingResource.java @@ -645,7 +645,7 @@ public enum SkillingResource { static { for (SkillingResource resource : SkillingResource.values()) { if (RESOURCES.containsKey(resource.id)) { - SystemLogger.logErr("Already contained resource " + resource.getId() + " - " + resource.name()); + SystemLogger.logErr(SkillingResource.class, "Already contained resource " + resource.getId() + " - " + resource.name()); } RESOURCES.put(resource.id, resource); } diff --git a/Server/src/main/java/core/game/node/entity/skill/hunter/Traps.java b/Server/src/main/java/core/game/node/entity/skill/hunter/Traps.java index 4824de5ed..9d0fa0290 100644 --- a/Server/src/main/java/core/game/node/entity/skill/hunter/Traps.java +++ b/Server/src/main/java/core/game/node/entity/skill/hunter/Traps.java @@ -101,7 +101,7 @@ public enum Traps { return; } if (instance.getWrapper(object) == null) { - SystemLogger.logErr("NO WRAPPER (HUNTER DISMANTLE)"); + SystemLogger.logErr(this.getClass(), "NO WRAPPER (HUNTER DISMANTLE)"); return; } player.faceLocation(object.getLocation()); diff --git a/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/Familiar.java b/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/Familiar.java index 9ceb0fd09..6f811f6c8 100644 --- a/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/Familiar.java +++ b/Server/src/main/java/core/game/node/entity/skill/summoning/familiar/Familiar.java @@ -579,7 +579,7 @@ public abstract class Familiar extends NPC implements Plugin { face(owner); } if (!isRenderable() && owner.isActive()) { - // SystemLogger.logErr("Familiar in inactive region!"); + // SystemLogger.logErr(this.getClass(), "Familiar in inactive region!"); getWalkingQueue().update(); getUpdateMasks().prepare(this); } @@ -628,7 +628,7 @@ public abstract class Familiar extends NPC implements Plugin { public Plugin newInstance(Object arg) throws Throwable { for (int id : getIds()) { if (FamiliarManager.getFamiliars().containsKey(id)) { - SystemLogger.logErr("Familiar " + id + " was already registered!"); + SystemLogger.logErr(this.getClass(), "Familiar " + id + " was already registered!"); return null; } FamiliarManager.getFamiliars().put(id, this); diff --git a/Server/src/main/java/core/game/node/scenery/SceneryBuilder.java b/Server/src/main/java/core/game/node/scenery/SceneryBuilder.java index eb97c1ab6..082ad6403 100644 --- a/Server/src/main/java/core/game/node/scenery/SceneryBuilder.java +++ b/Server/src/main/java/core/game/node/scenery/SceneryBuilder.java @@ -44,7 +44,7 @@ public final class SceneryBuilder { Scenery current = LandscapeParser.removeScenery(remove); if (current == null) { if (GameWorld.getSettings().isDevMode()) { - SystemLogger.logErr("Object could not be replaced - object to remove is invalid."); + SystemLogger.logErr(SceneryBuilder.class, "Object could not be replaced - object to remove is invalid."); } return false; } @@ -119,7 +119,7 @@ public final class SceneryBuilder { Scenery current = LandscapeParser.removeScenery(remove); if (current == null) { if (GameWorld.getSettings().isDevMode()) { - SystemLogger.logErr("Object could not be replaced - object to remove is invalid."); + SystemLogger.logErr(SceneryBuilder.class, "Object could not be replaced - object to remove is invalid."); } return false; } diff --git a/Server/src/main/java/core/game/system/SystemShutdownHook.java b/Server/src/main/java/core/game/system/SystemShutdownHook.java index f0ec27a1e..8546e2e0f 100644 --- a/Server/src/main/java/core/game/system/SystemShutdownHook.java +++ b/Server/src/main/java/core/game/system/SystemShutdownHook.java @@ -13,7 +13,7 @@ public final class SystemShutdownHook implements Runnable { if (SystemManager.isTerminated()) { return; } - SystemLogger.logInfo("[SystemShutdownHook] Terminating..."); + SystemLogger.logInfo(this.getClass(), "[SystemShutdownHook] Terminating..."); SystemManager.flag(SystemState.TERMINATED); } } \ No newline at end of file diff --git a/Server/src/main/java/core/game/system/SystemTermination.java b/Server/src/main/java/core/game/system/SystemTermination.java index 96c37ac17..6be390c35 100644 --- a/Server/src/main/java/core/game/system/SystemTermination.java +++ b/Server/src/main/java/core/game/system/SystemTermination.java @@ -34,14 +34,14 @@ public final class SystemTermination { * Terminates the system safely. */ public void terminate() { - SystemLogger.logInfo("[SystemTerminator] Initializing termination sequence - do not shutdown!"); + SystemLogger.logInfo(this.getClass(), "Initializing termination sequence - do not shutdown!"); try { - SystemLogger.logInfo("[SystemTerminator] Stopping all bots..."); + SystemLogger.logInfo(this.getClass(), "Stopping all bots..."); AIRepository.clearAllBots(); - SystemLogger.logInfo("[SystemTerminator] Shutting down networking..."); + SystemLogger.logInfo(this.getClass(), "Shutting down networking..."); Server.setRunning(false); Server.getReactor().terminate(); - SystemLogger.logInfo("[SystemTerminator] Stopping all pulses..."); + SystemLogger.logInfo(this.getClass(), "Stopping all pulses..."); GameWorld.getMajorUpdateWorker().stop(); for (Iterator it = Repository.getPlayers().iterator(); it.hasNext();) { try { @@ -70,7 +70,7 @@ public final class SystemTermination { } catch (Throwable e) { e.printStackTrace(); } - SystemLogger.logInfo("[SystemTerminator] Server successfully terminated!"); + SystemLogger.logInfo(this.getClass(), "Server successfully terminated!"); } /** @@ -79,7 +79,7 @@ public final class SystemTermination { */ public void save(String directory) { File file = new File(directory); - SystemLogger.logInfo("[SystemTerminator] Saving data [dir=" + file.getAbsolutePath() + "]..."); + SystemLogger.logInfo(this.getClass(), "Saving data [dir="+ file.getAbsolutePath() + "]..."); if (!file.isDirectory()) { file.mkdirs(); } diff --git a/Server/src/main/java/core/game/system/communication/CommunicationInfo.java b/Server/src/main/java/core/game/system/communication/CommunicationInfo.java index 84bb800b3..59097694a 100644 --- a/Server/src/main/java/core/game/system/communication/CommunicationInfo.java +++ b/Server/src/main/java/core/game/system/communication/CommunicationInfo.java @@ -354,7 +354,7 @@ public final class CommunicationInfo { CommunicationInfo info = player.getDetails().getCommunication(); Contact c = info.contacts.get(contact); if (c == null) { - SystemLogger.logErr("Could not find contact " + contact + " to update clan rank!"); + SystemLogger.logErr(CommunicationInfo.class, "Could not find contact " + contact + " to update clan rank!"); return; } c.setRank(clanRank); diff --git a/Server/src/main/java/core/game/system/mysql/SQLManager.java b/Server/src/main/java/core/game/system/mysql/SQLManager.java deleted file mode 100644 index 6a39723f1..000000000 --- a/Server/src/main/java/core/game/system/mysql/SQLManager.java +++ /dev/null @@ -1,107 +0,0 @@ -package core.game.system.mysql; - -import rs09.ServerConstants; -import rs09.game.system.SystemLogger; -import core.game.system.SystemManager; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -/** - * Manages the SQL connections. - * @author Vexia - * - */ -public final class SQLManager { - - /** - * If the sql manager is locally hosted. Generally you never should change this. Ignore this. - */ - public static final boolean LOCAL = false; - - /** - * The database URL. - */ - public static String DATABASE_URL; - - /** - * IF the sql manager is initialized. - */ - private static boolean initialized; - - /** - * Constructs a new {@code SQLManager} {@code Object} - */ - public SQLManager() { - /** - * empty. - */ - } - - /** - * Initializes the sql manager. - */ - public static void init() { - initialized = true; - SystemManager.getSystemConfig().parse(); - } - - /** - * Pre-plugin parsing. - */ - public static void prePlugin() { - //new NPCConfigSQLHandler().parse(); - - } - - /** - * Parses data from the database for the server post plugin loading. - */ - public static void postPlugin() { - - } - - /** - * Gets a connection. - * @return The connection. - */ - public static Connection getConnection() { - DATABASE_URL = ServerConstants.DATABASE_ADDRESS + ":" + ServerConstants.DATABASE_PORT + "/" + ServerConstants.DATABASE_NAME + "?useTimezone=true&serverTimezone=UTC"; - try { - return DriverManager.getConnection("jdbc:mysql://" + DATABASE_URL, ServerConstants.DATABASE_USER, ServerConstants.DATABASE_PASS); - } catch (SQLException e) { - SystemLogger.logErr("Mysql error message=" + e.getMessage() + "."); - } - return null; - } - - /** - * Releases the connection so it's available for usage. - * @param connection The connection. - */ - public static void close(Connection connection) { - try { - connection.close(); - } catch (SQLException e) { - e.printStackTrace(); - } - } - - /** - * Gets the initialized. - * @return the initialized - */ - public static boolean isInitialized() { - return initialized; - } - - /** - * Sets the bainitialized. - * @param initialized the initialized to set. - */ - public static void setInitialized(boolean initialized) { - SQLManager.initialized = initialized; - } - -} diff --git a/Server/src/main/java/core/game/world/GameType.java b/Server/src/main/java/core/game/world/GameType.java deleted file mode 100644 index 6cf13425e..000000000 --- a/Server/src/main/java/core/game/world/GameType.java +++ /dev/null @@ -1,34 +0,0 @@ -package core.game.world; - - -/** - * Represents the game type. - * @author Vexia - * - */ -public enum GameType { - ECONOMY, - SPAWN; - - /** - * Parses the game type. - * @param string the string. - * @return {@code GameType} the type. - */ - public static GameType parse(String string) { - return Boolean.parseBoolean(string) ? ECONOMY : SPAWN; - } - - /** - * Gets a game type for the name. - * @param property the property. - * @return the type. - */ - public static GameType forName(String property) { - if (property == null) { - return null; - } - return property.equals("economy") ? ECONOMY : property.equals("spawn") ? SPAWN : null; - } - -} \ No newline at end of file diff --git a/Server/src/main/java/core/game/world/map/BuildRegionChunk.java b/Server/src/main/java/core/game/world/map/BuildRegionChunk.java index f5dc52fe5..bec3d460b 100644 --- a/Server/src/main/java/core/game/world/map/BuildRegionChunk.java +++ b/Server/src/main/java/core/game/world/map/BuildRegionChunk.java @@ -83,7 +83,7 @@ public class BuildRegionChunk extends RegionChunk { @Override public void rotate(Direction direction) { if (rotation != 0) { - SystemLogger.logErr("Region chunk was already rotated!"); + SystemLogger.logErr(this.getClass(), "Region chunk was already rotated!"); return; } Scenery[][][] copy = new Scenery[ARRAY_SIZE][SIZE][SIZE]; @@ -236,7 +236,7 @@ public class BuildRegionChunk extends RegionChunk { System.err.print(", "); } } - SystemLogger.logErr("]!"); + SystemLogger.logErr(this.getClass(), "]!"); throw new IllegalStateException("Insufficient array length for storing all objects! "); } diff --git a/Server/src/main/java/core/game/world/map/Region.java b/Server/src/main/java/core/game/world/map/Region.java index f482be6fc..aa35b00a7 100644 --- a/Server/src/main/java/core/game/world/map/Region.java +++ b/Server/src/main/java/core/game/world/map/Region.java @@ -6,6 +6,7 @@ import core.game.node.entity.player.Player; import core.game.node.entity.player.link.music.MusicZone; import core.game.node.scenery.Scenery; import core.game.node.scenery.SceneryBuilder; +import core.game.system.communication.CommunicationInfo; import core.game.system.task.Pulse; import core.game.world.map.build.DynamicRegion; import core.game.world.map.build.LandscapeParser; @@ -339,13 +340,13 @@ public class Region { */ private static boolean unload(Region r) { if (r.isViewed()) { - SystemLogger.logErr("Players viewing region!"); + SystemLogger.logErr(CommunicationInfo.class, "Players viewing region!"); r.flagActive(); return false; } for (RegionPlane p : r.planes) { if (!p.getPlayers().isEmpty()) { - SystemLogger.logErr("Players still in region!"); + SystemLogger.logErr(CommunicationInfo.class, "Players still in region!"); r.flagActive(); return false; } @@ -388,7 +389,7 @@ public class Region { public int decrementViewAmount() { synchronized (this) { if (viewAmount < 1) { - //SystemLogger.logErr("View amount is " + (viewAmount - 1)); + //SystemLogger.logErr(this.getClass(), "View amount is " + (viewAmount - 1)); viewAmount++; } return --viewAmount; diff --git a/Server/src/main/java/core/game/world/map/RegionChunk.java b/Server/src/main/java/core/game/world/map/RegionChunk.java index 0d8a6beb7..ad069f3d7 100644 --- a/Server/src/main/java/core/game/world/map/RegionChunk.java +++ b/Server/src/main/java/core/game/world/map/RegionChunk.java @@ -182,7 +182,7 @@ public class RegionChunk { */ public void rotate(Direction direction) { if (rotation != 0) { - SystemLogger.logErr("Region chunk was already rotated!"); + SystemLogger.logErr(this.getClass(), "Region chunk was already rotated!"); return; } Scenery[][] copy = new Scenery[SIZE][SIZE]; diff --git a/Server/src/main/java/core/game/world/map/RegionManager.kt b/Server/src/main/java/core/game/world/map/RegionManager.kt index 7e68b1772..2727af5f6 100644 --- a/Server/src/main/java/core/game/world/map/RegionManager.kt +++ b/Server/src/main/java/core/game/world/map/RegionManager.kt @@ -43,7 +43,7 @@ object RegionManager { LOCK.unlock() return REGION_CACHE[regionId]!! } - SystemLogger.logErr("UNABLE TO OBTAIN LOCK WHEN GETTING REGION BY ID. RETURNING BLANK REGION.") + SystemLogger.logErr(this::class.java, "UNABLE TO OBTAIN LOCK WHEN GETTING REGION BY ID. RETURNING BLANK REGION.") return Region(0,0) } diff --git a/Server/src/main/java/core/gui/ConsoleFrame.java b/Server/src/main/java/core/gui/ConsoleFrame.java deleted file mode 100644 index e4d1210de..000000000 --- a/Server/src/main/java/core/gui/ConsoleFrame.java +++ /dev/null @@ -1,168 +0,0 @@ -package core.gui; - - -import core.gui.tab.GrandExchangeTab; -import core.gui.tab.PlayerTab; -import core.gui.tab.StatisticsTab; -import core.gui.tab.UtilityTab; - -import javax.swing.*; -import java.awt.*; - -/** - * The console frame tool. - * - * @author Vexia - */ -public class ConsoleFrame extends JFrame { - - /** - * The console frame instance. - */ - public static final ConsoleFrame INSTANCE = new ConsoleFrame(); - - /** - * The serail UID. - */ - private static final long serialVersionUID = 6368064564449356833L; - - /** - * The size of the frame. - */ - private static final Dimension SIZE = new Dimension(1074, 664); - - /** - * The tabbed pane. - */ - private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); - - /** - * The statistics tab. - */ - private final StatisticsTab statisticsTab = StatisticsTab.INSTANCE.init(); - - /** - * The player tab. - */ - private final PlayerTab playerTab = new PlayerTab(); - - /** - * The grand exchange tab. - */ - private final GrandExchangeTab grandExchangeTab = new GrandExchangeTab(); - - /** - * The utility tab. - */ - private final UtilityTab utilityTab = UtilityTab.getInstance(); - - /** - * Constructs a new {@Code consoleFrame} {@Code Object} - */ - private ConsoleFrame() { - super("Console"); - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e) { - e.printStackTrace(); - } - } - - /** - * Initializes the console frame. - * - * @return the frame. - */ - public ConsoleFrame init() { - setLocationRelativeTo(null); - setSize(SIZE); - getContentPane().setLayout(null); - tabbedPane.setBounds(0, 0, 1068, 636); - Dimension dim = Toolkit.getDefaultToolkit().getScreenSize(); - setLocation(dim.width / 2 - this.getSize().width / 2, dim.height / 2 - this.getSize().height / 2); - getContentPane().add(tabbedPane); - addTabs(statisticsTab, utilityTab, playerTab, grandExchangeTab); - setResizable(false); - setVisible(true); - return this; - } - - public static void main(String... args) { - INSTANCE.init(); - } - - /** - * Adds tabs. - * - * @param tabs the tabs. - */ - public void addTabs(ConsoleTab... tabs) { - for (ConsoleTab tab : tabs) { - addTab(tab); - } - } - - /** - * Adds a tab to the tabbed pane. - * - * @param tab the tab. - */ - public void addTab(ConsoleTab tab) { - tabbedPane.add(tab.getName(), tab); - } - - /** - * Gets the statisticsTab. - * - * @return the statisticsTab - */ - public StatisticsTab getStatisticsTab() { - return statisticsTab; - } - - /** - * Gets the tabbedPane. - * - * @return the tabbedPane - */ - public JTabbedPane getTabbedPane() { - return tabbedPane; - } - - /** - * Gets the playerTab. - * - * @return the playerTab - */ - public PlayerTab getPlayerTab() { - return playerTab; - } - - /** - * Gets the utilityTab. - * - * @return the utilityTab - */ - public UtilityTab getUtilityTab() { - return utilityTab; - } - - /** - * Gets the instance. - * - * @return the instance. - */ - public static ConsoleFrame getInstance() { - return INSTANCE; - } - - /** - * Gets the grandExchangeTab. - * - * @return the grandExchangeTab - */ - public GrandExchangeTab getGrandExchangeTab() { - return grandExchangeTab; - } - -} diff --git a/Server/src/main/java/core/gui/ConsoleTab.java b/Server/src/main/java/core/gui/ConsoleTab.java deleted file mode 100644 index daf37deb4..000000000 --- a/Server/src/main/java/core/gui/ConsoleTab.java +++ /dev/null @@ -1,44 +0,0 @@ -package core.gui; - -import javax.swing.*; -import java.awt.*; - -/** - * The console tab. - * - * @author Vexia - */ -public class ConsoleTab extends JPanel { - - /** - * The serial UID. - */ - private static final long serialVersionUID = 2899642836866716523L; - - /** - * The name of the console tab. - */ - private final String name; - - /** - * Constructs a new {@Code consoleTab} {@Code Object} - * - * @param name the name. - */ - public ConsoleTab(String name) { - super(); - this.name = name; - setLayout(null); - setBounds(new Rectangle(0, 0, 1068, 663)); - } - - /** - * Gets the name. - * - * @return the name - */ - public String getName() { - return name; - } - -} diff --git a/Server/src/main/java/core/gui/component/ConsoleLogger.java b/Server/src/main/java/core/gui/component/ConsoleLogger.java deleted file mode 100644 index 48f98e1a4..000000000 --- a/Server/src/main/java/core/gui/component/ConsoleLogger.java +++ /dev/null @@ -1,68 +0,0 @@ -package core.gui.component; - - -import core.gui.ConsoleFrame; - -import java.io.PrintStream; - -/** - * Loggs output to the gui console. - * - * @author Vexia - */ -public class ConsoleLogger extends PrintStream { - - /** - * Constructs a new {@code WorkLogger} {@code Object} - * - * @param stream the stream. - */ - public ConsoleLogger(PrintStream stream) { - super(stream); - } - - @Override - public void println(String message) { - log(message); - } - - @Override - public PrintStream printf(String message, Object... objects) { - return null; - } - - @Override - public void println(boolean message) { - log(String.valueOf(message)); - } - - @Override - public void println(int message) { - log(String.valueOf(message)); - } - - @Override - public void println(double message) { - log(String.valueOf(message)); - } - - @Override - public void println(char message) { - log("" + message); - } - - @Override - public void println(long message) { - log("" + message); - } - - /** - * Method used to log the message. - * - * @param message the message. - */ - public void log(final String message) { - ConsoleFrame.getInstance().getStatisticsTab().log(message); - } - -} diff --git a/Server/src/main/java/core/gui/component/PlayerViewer.java b/Server/src/main/java/core/gui/component/PlayerViewer.java deleted file mode 100644 index 671e3efb6..000000000 --- a/Server/src/main/java/core/gui/component/PlayerViewer.java +++ /dev/null @@ -1,270 +0,0 @@ -package core.gui.component; - - -import core.game.container.Container; -import core.game.node.entity.player.Player; -import core.game.node.entity.player.info.PlayerDetails; -import core.game.node.item.Item; -import rs09.game.world.GameWorld; -import rs09.game.world.repository.Repository; -import core.gui.ConsoleFrame; -import core.tools.PlayerLoader; -import core.tools.StringUtils; - -import javax.swing.*; -import javax.swing.border.TitledBorder; -import java.awt.*; -import java.awt.event.ActionListener; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; - -/** - * Views a players details. - * - * @author Vexia - */ -public class PlayerViewer extends JPanel { - - /** - * The serail UID. - */ - private static final long serialVersionUID = 1589056461884384398L; - - /** - * The name of the viewer. - */ - private final String name; - - /** - * The player details. - */ - private PlayerDetails details; - - /** - * The player file. - */ - private Player player; - - /** - * Constructs a new {@Code PlayerViewer} {@Code Object} - * - * @param name the name. - */ - public PlayerViewer(String name) { - super(); - this.name = name; - this.details = PlayerLoader.getPlayerDetailFile(name); - if (Repository.getPlayerByName(name) != null) { - setPlayer(Repository.getPlayerByName(name)); - } else { - if (GameWorld.getMajorUpdateWorker().getStarted()) { - setPlayer(PlayerLoader.getPlayerFile(name)); - } - } - setBounds(new Rectangle(0, 0, 755, 539)); - setLayout(null); - JButton btnClose = new JButton("Close"); - btnClose.addActionListener(e -> ConsoleFrame.getInstance().getPlayerTab().closeViewer(PlayerViewer.this)); - btnClose.setBounds(6, 6, 117, 29); - add(btnClose); - - JPanel panel = new JPanel(); - panel.setBorder(new TitledBorder(null, "Info", TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panel.setBounds(6, 35, 286, 428); - add(panel); - panel.setLayout(null); - - JLabel lblName = new JLabel("Username: " + details.getUsername()); - lblName.setBounds(6, 16, 224, 16); - panel.add(lblName); - - JLabel lblIp = new JLabel("IP: " + details.getInfo().getIp()); - lblIp.setBounds(6, 96, 190, 16); - panel.add(lblIp); - - JLabel lblMac = new JLabel("Mac: " + details.getInfo().getMac()); - lblMac.setBounds(6, 124, 224, 16); - panel.add(lblMac); - - JLabel lblCompName = new JLabel("Comp name: " + details.getInfo().getCompName()); - lblCompName.setBounds(6, 208, 236, 16); - panel.add(lblCompName); - - JLabel lblLastLogin = new JLabel("Last login: " + new Date(details.getLastLogin())); - lblLastLogin.setBounds(6, 152, 274, 16); - panel.add(lblLastLogin); - - JLabel lblStatus = new JLabel("Status: " + getStatus()); - lblStatus.setBounds(6, 236, 149, 16); - panel.add(lblStatus); - -// JLabel lblCredits = new JLabel("Credits: " + details.getShop().getCredits()); -// lblCredits.setBounds(6, 180, 139, 16); -// panel.add(lblCredits); - - JLabel lblRights = new JLabel("Rights: " + StringUtils.formatDisplayName(details.getRights().toString())); - lblRights.setBounds(6, 68, 176, 16); - panel.add(lblRights); - -// JLabel lblDisplayName = new JLabel("Display name: " + details.getUsername()); -// lblDisplayName.setBounds(6, 40, 213, 16); -// panel.add(lblDisplayName); - - JLabel lblNetworth = new JLabel("Networth:"); - lblNetworth.setBounds(6, 264, 165, 16); - panel.add(lblNetworth); - - JLabel lblBanned = new JLabel("Banned: " + (details.getBanTime() > 0)); - lblBanned.setBounds(6, 292, 149, 16); - panel.add(lblBanned); - - JLabel lblMuted = new JLabel("Muted: " + (details.getMuteTime() > 0)); - lblMuted.setBounds(6, 317, 149, 16); - panel.add(lblMuted); - - JLabel lblActive = new JLabel("Active: " + checkActive()); - lblActive.setBounds(6, 342, 165, 16); - panel.add(lblActive); - if (player != null) { - lblNetworth.setText("Networth: " + player.getMonitor().getNetworth() + ""); - } - - JButton btnRefresh = new JButton("Refresh"); - btnRefresh.setBounds(124, 6, 117, 29); - add(btnRefresh); - - JButton btnViewContainer = new JButton("View Container"); - btnViewContainer.addActionListener(e -> { - if (player == null) { - return; - } - viewContainer(); - }); - btnViewContainer.setBounds(365, 6, 144, 29); - add(btnViewContainer); - - JButton btnDelete = new JButton("Delete"); - btnDelete.addActionListener(e -> { - int result = JOptionPane.showConfirmDialog(null, "Are you sure you want to delete this account!?"); - if (result == 0) { - ConsoleFrame.getInstance().getUtilityTab().delete(details); - ConsoleFrame.getInstance().getPlayerTab().closeViewer(PlayerViewer.this); - } - }); - btnDelete.setBounds(244, 6, 117, 29); - add(btnDelete); - } - - /** - * Opens the view containermanager. - */ - public void viewContainer() { - JPanel panel = new JPanel(new GridLayout(0, 1)); - ActionListener listener = e -> { - String name1 = e.getActionCommand(); - Container container = null; - switch (name1) { - case "Inventory": - container = player.getInventory(); - break; - case "Equipment": - container = player.getEquipment(); - break; - case "Bank": - container = player.getBank(); - break; - } - if (container != null) { - showContainer(container, name1); - } - }; - JButton invy = new JButton("Inventory"); - panel.add(invy); - invy.addActionListener(listener); - JButton equip = new JButton("Equipment"); - panel.add(equip); - equip.addActionListener(listener); - JButton bank = new JButton("Bank"); - bank.addActionListener(listener); - panel.add(bank); - JOptionPane.showConfirmDialog(null, panel, "View Container", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); - } - - /** - * Shows a container. - * - * @param container the container. - * @param name the name. - */ - public void showContainer(core.game.container.Container container, String name) { - JPanel panel = new JPanel(new GridLayout(0, 1)); - JScrollPane pane = new JScrollPane(); - DefaultListModel model = new DefaultListModel<>(); - JList list = new JList<>(); - for (Item i : container.toArray()) { - if (i == null) { - continue; - } - model.addElement(i.toString()); - } - list.setModel(model); - pane.setViewportView(list); - panel.add(pane); - JOptionPane.showConfirmDialog(null, panel, name, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); - } - - /** - * Checks if the player is active. - * - * @return {@code True} if so. - */ - public String checkActive() { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - Date cutOff = null; - long mili = 0; - try { - cutOff = sdf.parse("2014-6-10"); - mili = cutOff.getTime(); - } catch (ParseException e) { - e.printStackTrace(); - } - return ((details.getLastLogin() < mili) ? "Not " : "") + "Active"; - } - - /** - * Checks active status. - * - * @return the status. - */ - public String getStatus() { - return Repository.getPlayerByName(name) != null ? "Online" : "Offline"; - } - - /** - * Gets the name. - * - * @return the name - */ - public String getName() { - return name; - } - - /** - * Gets the player. - * - * @return the player - */ - public Player getPlayer() { - return player; - } - - /** - * Sets the baplayer. - * - * @param player the player to set. - */ - public void setPlayer(Player player) { - this.player = player; - } -} diff --git a/Server/src/main/java/core/gui/tab/GrandExchangeTab.java b/Server/src/main/java/core/gui/tab/GrandExchangeTab.java deleted file mode 100644 index b0eeb6290..000000000 --- a/Server/src/main/java/core/gui/tab/GrandExchangeTab.java +++ /dev/null @@ -1,190 +0,0 @@ -package core.gui.tab; - - -import core.game.node.entity.player.Player; -import core.gui.ConsoleFrame; -import core.gui.ConsoleTab; -import rs09.game.ge.GrandExchangeOffer; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; - -/** - * A tab used to view the grand exchange. - * - * @author Vexia - */ -public class GrandExchangeTab extends ConsoleTab { - - /** - * The serial UID. - */ - private static final long serialVersionUID = -1619650762760289798L; - - /** - * The search field. - */ - private JTextField searchField; - - /** - * The jlist. - */ - private final JList list = new JList(); - - /** - * The model. - */ - private final DefaultListModel model = new DefaultListModel(); - - /** - * The id search field. - */ - private JTextField idSearchField; - - /** - * Constructs a new {@Code GrandExchangeTab} {@Code Object} - */ - @SuppressWarnings("serial") - public GrandExchangeTab() { - super("Grand Exchange"); - list.setCellRenderer(new DefaultListCellRenderer() { - - @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - GrandExchangeOffer offer = (GrandExchangeOffer) value; - if (offer == null) { - return label; - } - Player player = null; - for (Player p : ConsoleFrame.getInstance().getUtilityTab().getPlayers()) { - if (p == null) { - continue; - } - if (p.getDetails().getUid() == offer.getUid()) { - player = p; - break; - } - } - label.setText((player == null ? "" : player.getName() + " - ") + offer.toString()); - return label; - } - - }); - list.setModel(model); - JLabel lblSearch = new JLabel("Search player:"); - lblSearch.setBounds(24, 20, 95, 16); - add(lblSearch); - - searchField = new JTextField(); - searchField.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - searchPlayer(); - } - }); - searchField.setBounds(119, 14, 185, 28); - add(searchField); - searchField.setColumns(10); - - JPanel panel = new JPanel(); - panel.setBounds(24, 78, 1015, 518); - add(panel); - panel.setLayout(null); - - JScrollPane scrollPane = new JScrollPane(); - scrollPane.setBounds(6, 6, 375, 517); - panel.add(scrollPane); - scrollPane.setViewportView(list); - - JButton btnDisplayDatabase = new JButton("Display Database"); - btnDisplayDatabase.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - displayDatabase(); - } - }); - btnDisplayDatabase.setBounds(316, 15, 173, 29); - add(btnDisplayDatabase); - - JLabel lblNewLabel = new JLabel("Search id:"); - lblNewLabel.setBounds(24, 48, 61, 16); - add(lblNewLabel); - - idSearchField = new JTextField(); - idSearchField.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - searchId(); - } - }); - idSearchField.setColumns(10); - idSearchField.setBounds(119, 48, 185, 28); - add(idSearchField); - - JButton btnNewButton = new JButton("Load"); - btnNewButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - ConsoleFrame.getInstance().getUtilityTab().populateList(); - } - }); - btnNewButton.setBounds(316, 43, 173, 29); - add(btnNewButton); - } - - /** - * Searches the player. - */ - private void searchPlayer() { - model.clear(); - Player player = ConsoleFrame.getInstance().getUtilityTab().getPlayer(searchField.getText()); - if (player == null) { - JOptionPane.showMessageDialog(null, "Error! No player found."); - return; - } -/* for (GrandExchangeOffer o : player.getPlayerGrandExchange().getOfferRecords()) { - if (o == null) { - continue; - } - addOffer(o); - }*/ - } - - /** - * Searches the id. - */ - private void searchId() { - model.clear(); - int itemId = 0; - try { - itemId = Integer.parseInt(idSearchField.getText()); - } catch (NumberFormatException e) { - - } -/* for (GrandExchangeOffer o : OfferManager.getOffersForItem(itemId)) { - if (o == null) { - continue; - } - addOffer(o); - }*/ - } - - /** - * Adds a g.e offer. - */ - private void addOffer(GrandExchangeOffer offer) { - model.addElement(offer); - } - - /** - * Displays a database. - */ - private void displayDatabase() { - if (ConsoleFrame.getInstance().getUtilityTab().getPlayers().size() == 0) { - JOptionPane.showMessageDialog(null, "Error! No data in DB yet. Press load."); - return; - } -/* for (GrandExchangeOffer offer : OfferManager.getOFFER_MAPPING().values()) { - model.addElement(offer); - }*/ - } -} diff --git a/Server/src/main/java/core/gui/tab/PlayerTab.java b/Server/src/main/java/core/gui/tab/PlayerTab.java deleted file mode 100644 index 165220f93..000000000 --- a/Server/src/main/java/core/gui/tab/PlayerTab.java +++ /dev/null @@ -1,187 +0,0 @@ -package core.gui.tab; - - -import rs09.ServerConstants; -import core.gui.ConsoleTab; -import core.gui.component.PlayerViewer; - -import javax.swing.*; -import javax.swing.border.BevelBorder; -import javax.swing.border.SoftBevelBorder; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.File; -import java.util.*; - -/** - * The player tab. - * - * @author Vexia - */ -public class PlayerTab extends ConsoleTab { - - /** - * The serial UID. - */ - private static final long serialVersionUID = 8865322670299347942L; - - /** - * The list of player names to search through. - */ - private final List playerNames = new ArrayList<>(20); - - /** - * The player name text field. - */ - private JTextField textField; - - /** - * The default model. - */ - private final DefaultListModel model = new DefaultListModel(); - - /** - * The tabbed panes. - */ - private final JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); - - /** - * The mapping of open player viewers. - */ - private final Map viewers = new HashMap<>(); - - /** - * Constructs a new {@Code PlayerTab} {@Code Object} - */ - public PlayerTab() { - super("Players"); - - JScrollPane scrollPane = new JScrollPane(); - scrollPane.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null)); - scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); - scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); - scrollPane.setBounds(6, 43, 260, 539); - add(scrollPane); - - final JList list = new JList(); - list.addListSelectionListener(e -> { - if (list.getSelectedValue() != null) { - openViewer(list.getSelectedValue()); - } - }); - list.setModel(model); - scrollPane.setViewportView(list); - - JLabel lblSearchForPlayer = new JLabel("Search for player:"); - lblSearchForPlayer.setBounds(6, 15, 143, 16); - add(lblSearchForPlayer); - - textField = new JTextField(); - textField.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - model.clear(); - if (textField.getText() == null || textField.getText().length() < 1) { - populatePlayerSearch(); - return; - } - for (String name : playerNames) { - if (name.toLowerCase().contains(textField.getText())) { - model.addElement(name); - } - } - } - }); - textField.setBounds(117, 9, 149, 28); - add(textField); - textField.setColumns(10); - - tabbedPane.setBounds(278, 43, 755, 539); - add(tabbedPane); - - JButton btnRepopulate = new JButton("Repopulate"); - btnRepopulate.addActionListener(e -> populatePlayerSearch()); - btnRepopulate.setBounds(278, 10, 117, 29); - add(btnRepopulate); - populatePlayerSearch(); - } - - /** - * Opens a viewer for a player. - * - * @param name the name. - * @return {@code True} if opened. - */ - public boolean openViewer(String name) { - if (viewers.containsKey(name)) { - return false; - } - PlayerViewer viewer = new PlayerViewer(name); - viewers.put(name, viewer); - tabbedPane.add(viewer.getName(), viewer); - return true; - } - - /** - * Closes a viewer. - * - * @param viewer the viewer. - * @return {@code True} if closed. - */ - public boolean closeViewer(PlayerViewer viewer) { - if (!viewers.containsValue(viewer)) { - JOptionPane.showMessageDialog(null, "Error! Viewer wasn't open."); - return false; - } - viewers.remove(viewer.getName()); - tabbedPane.remove(viewer); - return true; - } - - /** - * Populates the searchable names. - */ - public void populatePlayerSearch() { - playerNames.clear(); - model.clear(); - if(ServerConstants.PLAYER_SAVE_PATH == null) return; - File f = new File(ServerConstants.PLAYER_SAVE_PATH); - if (f.listFiles() == null) { - System.out.println("Player directory was null!"); - return; - } - for (File file : Objects.requireNonNull(f.listFiles())) { - String fileName = file.getName(); - if (!fileName.contains(".save")) continue; - String playerName = fileName.replace(".save", "").trim(); - playerNames.add(playerName); - model.addElement(playerName); - } - } - - /** - * Adds a searchable name to the list. - * - * @param name the name. - */ - public void addSearchableName(String name) { - playerNames.add(name); - } - - /** - * Gets the playerNames. - * - * @return the playerNames - */ - public List getPlayerNames() { - return playerNames; - } - - /** - * Gets the viewers. - * - * @return the viewers - */ - public Map getViewers() { - return viewers; - } -} diff --git a/Server/src/main/java/core/gui/tab/StatisticsTab.java b/Server/src/main/java/core/gui/tab/StatisticsTab.java deleted file mode 100644 index 67a065b5f..000000000 --- a/Server/src/main/java/core/gui/tab/StatisticsTab.java +++ /dev/null @@ -1,669 +0,0 @@ -package core.gui.tab; - - -import core.game.node.item.GroundItemManager; -import core.game.system.SystemManager; -import core.game.system.SystemState; -import core.game.world.map.RegionManager; -import core.gui.ConsoleTab; -import rs09.Server; -import rs09.ServerConstants; -import rs09.game.world.GameWorld; -import rs09.game.world.repository.Repository; - -import javax.swing.*; -import javax.swing.border.TitledBorder; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.net.URL; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.StandardOpenOption; - -/** - * Handles server info tab. - * - * @author Emperor - */ -public class StatisticsTab extends ConsoleTab { - - /** - * The serial UID. - */ - private static final long serialVersionUID = 6164020580271944550L; - - /** - * The queue size. - */ - public static final int QUEUE_SIZE = 1 << 16; - - /** - * The performance data queue. - */ - private static short[] performanceQueue = new short[QUEUE_SIZE]; - - /** - * The memory data queue. - */ - private static short[] memoryQueue = new short[QUEUE_SIZE]; - - /** - * The current index of the performance queue. - */ - private static int queueIndex = 0; - - /** - * The current statistics zoom. - */ - private static int statisticsZoom = 5; - - /** - * The singleton. - */ - public static final StatisticsTab INSTANCE = new StatisticsTab(); - - /** - * The statistics mouse coordinates. - */ - private Point statisticMousePoint = null; - - /** - * The zoom in button. - */ - private JButton zoomIn; - - /** - * The zoom out button. - */ - private JButton zoomOut; - - /** - * The reset button. - */ - private JButton resetButton; - - /** - * The save log button. - */ - private JButton saveLogButton; - - /** - * The shutdown button. - */ - private JButton shutdown; - - /** - * The file chooser instance. - */ - private JFileChooser fileChooser; - - /** - * If the tool tip is currently opened. - */ - private boolean toolTipOpened; - - /** - * The world statistics text pane. - */ - private StatsTextPane worldStatistics; - - /** - * The thread statistics text pane. - */ - private StatsTextPane threadStatistics; - - /** - * The working time of the main thread. - */ - private static long workingTime; - - /** - * The maximum amount of players being active at the same time. - */ - private static int maximumPlayers; - - /** - * The text area. - */ - private final JTextArea console = new JTextArea(); - - /** - * Constructs a new {@Code StatisticsTab} {@Code Object} - */ - public StatisticsTab() { - super("Statistics"); - setLayout(null); - - JScrollPane scrollPane = new JScrollPane(); - scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); - scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); - scrollPane.setBackground(UIManager.getColor("Button.background")); - scrollPane.setBounds(6, 403, 1042, 189); - scrollPane.setBorder(new TitledBorder(null, "Console", TitledBorder.LEADING, TitledBorder.TOP, null, null)); - add(scrollPane); - - console.setLineWrap(true); - console.setBackground(UIManager.getColor("CheckBox.background")); - console.setEditable(false); - scrollPane.setViewportView(console); - - JLabel label = new JLabel(); - label.setBounds(450, 345, 163, 16); - add(label); - } - - @Override - public String getToolTipText(MouseEvent e) { - if (e.getX() > getWidth() / 2 && e.getX() < getWidth() - && e.getY() > 2 && e.getY() < getHeight() / 2) { - int max = (getWidth() / 2) / statisticsZoom; - int index = queueIndex - (max - (e.getX() - (getWidth() / 2)) / statisticsZoom); - toolTipOpened = true; - if (index < 0) { - return "Tick: null, time: null."; - } - return new StringBuilder("Tick: ").append(index).append(", time: ").append(performanceQueue[index] + 600).append(".").toString(); - } - toolTipOpened = false; - return null; - } - - @Override - public Point getToolTipLocation(MouseEvent e) { - if (e.getX() > getWidth() / 2 && e.getX() < getWidth() - && e.getY() > 2 && e.getY() < getHeight() / 2) { - return new Point(e.getX() + 15, e.getY() + 10); - } - return null; - } - - @Override - public void paint(Graphics g) { - super.paint(g); - drawPerformanceStatistics(this, g); - } - - /** - * Positions the components. - */ - public void positionComponents() { - int init = 90; - int diff = 5; - zoomIn.setLocation(getWidth() / 2 - (zoomIn.getWidth() / 2) - diff, 5 + init); - zoomOut.setLocation(getWidth() / 2 - (zoomOut.getWidth() / 2) - diff, 30 + init); - resetButton.setLocation(getWidth() / 2 - (resetButton.getWidth() / 2) - diff, 55 + init); - saveLogButton.setLocation(getWidth() / 2 - (saveLogButton.getWidth() / 2) - diff, 80 + init); - shutdown.setLocation(getWidth() / 2 - (shutdown.getWidth() / 2), 310); - worldStatistics.setLocation(55, 310); - threadStatistics.setLocation(shutdown.getX() + shutdown.getWidth() + 35, 310); - } - - /** - * Initializes the server info tab. - * - * @return This instance. - */ - public StatisticsTab init() { - initMaximumPlayers(); - fileChooser = new JFileChooser("./"); - zoomIn = new JButton("+"); - zoomIn.setLayout(null); - zoomIn.setVisible(true); - zoomIn.setSize(50, 20); - zoomIn.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - zoomOut.setEnabled(true); - if (++statisticsZoom > 20) { - statisticsZoom = 20; - zoomIn.setEnabled(false); - return; - } - drawPerformanceStatistics(StatisticsTab.this, getGraphics()); - } - }); - zoomOut = new JButton("-"); - zoomOut.setLayout(null); - zoomOut.setVisible(true); - zoomOut.setSize(50, 20); - zoomOut.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - zoomIn.setEnabled(true); - if (--statisticsZoom < 2) { - statisticsZoom = 2; - zoomOut.setEnabled(false); - return; - } - drawPerformanceStatistics(StatisticsTab.this, getGraphics()); - } - }); - resetButton = new JButton("x"); - resetButton.setLayout(null); - resetButton.setVisible(true); - resetButton.setSize(50, 20); - resetButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - queueIndex = 0; - } - }); - saveLogButton = new JButton("", createImageIcon("Save16.gif")); - saveLogButton.setLayout(null); - saveLogButton.setVisible(true); - saveLogButton.setSize(50, 20); - saveLogButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - int returnVal = fileChooser.showSaveDialog(StatisticsTab.this); - if (returnVal == JFileChooser.APPROVE_OPTION) { - File file = fileChooser.getSelectedFile(); - if (!file.getName().contains(".")) { - file = new File(file.getPath() + ".txt"); - } - logQueues(file); - } - } - }); - add(resetButton); - add(zoomIn); - add(zoomOut); - add(saveLogButton); - shutdown = new JButton("Shutdown"); - shutdown.setLayout(null); - shutdown.setVisible(true); - shutdown.setSize(100, 20); - shutdown.addActionListener(e -> SystemManager.flag(SystemState.TERMINATED)); - add(shutdown); - worldStatistics = new StatsTextPane().init(); - worldStatistics.setSize(390, 90); - add(worldStatistics); - updateWorldText(); - threadStatistics = new StatsTextPane().init(); - threadStatistics.setSize(390, 90); - add(threadStatistics); - updateThreadText(); - setLayout(null); - setVisible(true); - ToolTipManager.sharedInstance().setInitialDelay(0); - positionComponents(); - return this; - } - - /** - * Initializes the maximum players count. - */ - private static void initMaximumPlayers() { - setMaximumPlayers(0); - } - - /** - * Sets the maximum amount of players. - * - * @param maximum The maximum. - */ - private static void setMaximumPlayers(int maximum) { - maximumPlayers = maximum; - } - - /** - * Logs the queues. - * - * @param file The file to log to. - */ - protected static void logQueues(File file) { - try (BufferedWriter bw = Files.newBufferedWriter(file.toPath(), StandardCharsets.UTF_8, StandardOpenOption.APPEND)) { - bw.append("/////////////////////////////////////////////////////////////////////////"); - bw.newLine(); - bw.append("/////////////////////////////////////////////////////////////////////////"); - bw.newLine(); - // bw.append("// " + CalenderDate.getFormattedDate() + " performance log results:"); - bw.newLine(); - bw.append("/////////////////////////////////////////////////////////////////////////"); - bw.newLine(); - for (int i = 0; i < queueIndex; i++) { - bw.append(new StringBuilder("performance_report:memory_usage-[tick=").append(i).append(", mem=").append(memoryQueue[i]).append("mb].")); - bw.newLine(); - } - for (int i = 0; i < queueIndex; i++) { - int value = 600 + performanceQueue[i]; - bw.append(new StringBuilder("performance_report:clock_speed-[tick=").append(i).append(", time=").append(value).append(", status=").append(value < 601 ? "NORMAL]." : "DELAYED].")); - bw.newLine(); - } - bw.append("/////////////////////////////////////////////////////////////////////////"); - bw.newLine(); - bw.flush(); - bw.close(); - } catch (Throwable t) { - t.printStackTrace(); - } - } - - /** - * Creates an image icon. - * - * @param path The path of the image file. - * @return The image icon. - */ - private static ImageIcon createImageIcon(String path) { - URL imgURL = StatisticsTab.class.getResource(path); - if (imgURL != null) { - return new ImageIcon(imgURL); - } - return null; - } - - /** - * Reports the performance value. - * - * @param value The value. - */ - public static void reportPerformance(int value) { - if (value >= Short.MAX_VALUE) { - value = Short.MAX_VALUE - 1; - } - secureQueues(); - performanceQueue[queueIndex] = (short) value; - memoryQueue[queueIndex++] = (short) ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1_000_000); - INSTANCE.repaint(); - workingTime += (600 + value); - if (INSTANCE.threadStatistics != null) { - INSTANCE.updateThreadText(); - if ((GameWorld.getTicks() % 10) == 0) { - INSTANCE.updateWorldText(); - } - } - } - - /** - * Updates the thread statistics text. - */ - public void updateThreadText() { - StringBuilder sb = new StringBuilder(); - long runtime = System.currentTimeMillis() - Server.startTime; - double percentage = workingTime / (runtime * 0.01); - long hours = runtime / 3600000; - runtime -= hours * 3600000; - long minutes = runtime / 60000; - runtime -= minutes * 60000; - long seconds = runtime / 1000; - sb.append("Runtime: ").append(hours).append("h ").append(minutes).append("m ").append(seconds).append("s").append(" - ").append(GameWorld.getTicks()).append(" ticks").append("\n"); - sb.append("Working time: ").append(workingTime).append("ms").append(" - ").append(String.format("%.2f", percentage)).append("%").append("\n"); - sb.append("Average cycle: ").append(String.format("%.1f", (double) workingTime / GameWorld.getTicks())).append("ms").append("\n"); - threadStatistics.setText(sb.toString()); - } - - /** - * Updates the world statistics text. - */ - public void updateWorldText() { - int players = Repository.getPlayers().size(); - if (players > getMaximumPlayers()) { - setMaximumPlayers(players); - } - StringBuilder sb = new StringBuilder(); - sb.append("Players: ").append(players).append(", max: ").append(getMaximumPlayers()).append("\n"); - sb.append("NPCs: ").append(Repository.getNpcs().size()).append("\n"); - sb.append("Regions: ").append(RegionManager.getRegionCache().size()).append("\n"); - sb.append("Ground items: ").append(GroundItemManager.getItems().size()).append("\n"); - worldStatistics.setText(sb.toString()); - } - - /** - * Draws the performance statistics. - * - * @param c The component. - * @param g The graphics. - */ - private static void drawPerformanceStatistics(Component c, Graphics g) { - int x = c.getWidth() / 2 + 48; - int y = c.getHeight() / 2; - - Point zero = new Point(x, y / 2); - g.setColor(Color.LIGHT_GRAY); - - //Fill the background rectangle. - g.fillRect(x, 5, c.getWidth() - 4 - x, y - 5); - g.setColor(Color.GRAY); - - int count = 0; - for (int i = 0; i < c.getWidth() - 4 - x; i += statisticsZoom) { - g.drawLine((int) (zero.getX() + i), 5, - (int) (zero.getX() + i), y - 1); - count++; - } - - int space = (y / 2 - 10) / 4; - g.setFont(new Font(null, Font.PLAIN, 9)); - for (int i = 0; i < 5; i++) { - g.setColor(i == 0 ? Color.BLACK : Color.GRAY); - g.drawLine(x, (int) zero.getY() - (space * i), c.getWidth() - 5, (int) zero.getY() - (space * i)); - g.drawLine(x, (int) zero.getY() + (space * i), c.getWidth() - 5, (int) zero.getY() + (space * i)); - g.setColor(Color.BLACK); - g.drawString("" + (i * 150), x - 18, (int) zero.getY() - (space * i) + 2); - if (i != 0) { - g.drawString("-" + (i * 150), x - 20, (int) zero.getY() + (space * i) + 2); - } - } - g.setColor(Color.GREEN); - for (int i = 1; i < count; i++) { - int index = queueIndex - i; - if (index < 1) { - break; - } - int fromPoint = performanceQueue[index]; - int fromX = (count - i) * statisticsZoom; - int fromY = (int) (-fromPoint / (600D / (space * 4))); - int toPoint = index == 0 ? 0 : performanceQueue[index - 1]; - int toX = (count - i - 1) * statisticsZoom; - int toY = (int) (-toPoint / (600D / (space * 4))); - if (fromY < 0) { - g.setColor(Color.RED); - } - g.drawLine((int) (zero.getX() + fromX), (int) (zero.getY() + fromY), - (int) (zero.getX() + toX), (int) (zero.getY() + toY)); - if (fromY >= 0) { - g.setColor(Color.GREEN); - } - } - g.setColor(Color.BLACK); - //Draw vertical line. - g.drawLine(x, y + 4, x, 1); - Point p = ((StatisticsTab) c).statisticMousePoint; - if (p != null) { - g.setColor(new Color(251, 230, 130)); - g.fillRoundRect((int) (p.getX() + 10), (int) (p.getY() - 10), 100, 50, 10, 10); - } - if (((StatisticsTab) c).toolTipOpened) { - ((StatisticsTab) c).setToolTipText("test"); - } - drawMemoryStatistics(c, g); - } - - /** - * Draws the performance statistics. - * - * @param c The component. - * @param g The graphics. - */ - private static void drawMemoryStatistics(Component c, Graphics g) { - int x = 5; - int y = c.getHeight() / 2; - int endX = (c.getWidth() / 2) - 48; - - Point zero = new Point(x + 18, y); - g.setColor(Color.LIGHT_GRAY); - - //Fill the background rectangle. - g.fillRect((int) zero.getX(), 5, endX - x, y - 5); - g.setColor(Color.GRAY); - - int count = 0; - for (int i = 0; i < endX - x; i += statisticsZoom) { - g.drawLine((int) (zero.getX() + i), 5, - (int) (zero.getX() + i), y - 1); - count++; - } - - int space = (y) / 10; - g.setFont(new Font(null, Font.PLAIN, 9)); - for (int i = 0; i < 10; i++) { - g.setColor(Color.GRAY); - g.drawLine((int) zero.getX() - 2, (int) zero.getY() - (space * i), endX + 17, (int) zero.getY() - (space * i)); - g.setColor(Color.BLACK); - g.drawString("" + (i * 100), 2, (int) zero.getY() - (space * i) + 2); - } - g.setColor(Color.BLUE); - for (int i = 1; i < count; i++) { - int index = queueIndex - i; - if (index < 1) { - break; - } - int fromPoint = memoryQueue[index]; - int fromX = (count - i) * statisticsZoom; - int fromY = (int) (fromPoint / (900D / (space * 10))); - int toPoint = index == 0 ? 0 : memoryQueue[index - 1]; - int toX = (count - i - 1) * statisticsZoom; - int toY = (int) (toPoint / (900D / (space * 10))); - if (fromY < 0) { - g.setColor(Color.RED); - } - g.drawLine((int) (zero.getX() + fromX), (int) (zero.getY() - fromY), - (int) (zero.getX() + toX), (int) (zero.getY() - toY)); - if (fromY < 0) { - g.setColor(Color.GREEN); - } - } - g.setColor(Color.BLACK); - //Draw horizontal line. - g.drawLine((int) (zero.getX() - 4), (int) zero.getY(), endX + 21, (int) zero.getY()); - //Draw vertical line. - g.drawLine((int) zero.getX(), (int) zero.getY() + 4, (int) zero.getX(), 1); - Point p = ((StatisticsTab) c).statisticMousePoint; - if (p != null) { - g.setColor(new Color(251, 230, 130)); - g.fillRoundRect((int) (p.getX() + 10), (int) (p.getY() - 10), 100, 50, 10, 10); - } - if (((StatisticsTab) c).toolTipOpened) { - ((StatisticsTab) c).setToolTipText("test"); - } - } - - /** - * Secures the queues. - */ - private static void secureQueues() { - if (queueIndex >= QUEUE_SIZE) { - int lagSpikes = 0; - int memoryUsageSpikes = 0; - @SuppressWarnings("unused") - int totalMemory = 0; - @SuppressWarnings("unused") - int totalCycleTime = 0; - //Start at tick 500, the JVM has to "warm up" first. - for (int i = 500; i < QUEUE_SIZE; i++) { - if (performanceQueue[i] > 0) { //Anything above 0 (-600 + 600) = lag - lagSpikes++; - } - if (memoryQueue[i] > 700) { //Over 700Mb - memoryUsageSpikes++; - } - totalMemory += memoryQueue[i]; - totalCycleTime += performanceQueue[i]; - } - if (lagSpikes > 350 || memoryUsageSpikes > 350) { - logQueues(new File(ServerConstants.LOGS_PATH + "/system/Performance-log.txt")); - } - //System.out.println("Average cycle time: " + (600 + (totalCycleTime / (QUEUE_SIZE - 500))) + "ms."); - //System.out.println("Average memory usage: " + (totalMemory / (QUEUE_SIZE - 500)) + "Mb."); - queueIndex = 0; - } - } - - /** - * Logs a message to the console. - * - * @param message the message. - */ - public void log(String message) { - console.append(message + "\n"); - console.setCaretPosition(console.getDocument().getLength()); - } - - /** - * Sets the statistics zoom. - * - * @param pixels The amount of pixels. - */ - public static void setStatisticsZoom(int pixels) { - statisticsZoom = pixels; - } - - /** - * Gets the workingTime. - * - * @return The workingTime. - */ - public static long getWorkingTime() { - return workingTime; - } - - /** - * Sets the workingTime. - * - * @param workingTime The workingTime to set. - */ - public static void setWorkingTime(long workingTime) { - StatisticsTab.workingTime = workingTime; - } - - /** - * Gets the maximumPlayers. - * - * @return The maximumPlayers. - */ - public static int getMaximumPlayers() { - return maximumPlayers; - } - - /** - * Handles the statistics tab text pane. - * - * @author Emperor - */ - public final class StatsTextPane extends JTextPane { - - /** - * The serial UID. - */ - private static final long serialVersionUID = 664276151176087663L; - - /** - * Constructs a new {@code StatsTextPane} {@code Object}. - */ - public StatsTextPane() { - super(); - } - - /** - * Initializes the stats text pane. - * - * @return The stats text pane. - */ - public StatsTextPane init() { - setEditable(false); - setLayout(null); - Font font = new Font("Monospaced", Font.PLAIN, 12); - setFont(font); - super.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); - super.setVisible(true); - return this; - } - - } -} diff --git a/Server/src/main/java/core/gui/tab/UtilityTab.java b/Server/src/main/java/core/gui/tab/UtilityTab.java deleted file mode 100644 index d2c07a0b8..000000000 --- a/Server/src/main/java/core/gui/tab/UtilityTab.java +++ /dev/null @@ -1,600 +0,0 @@ -package core.gui.tab; - - -import core.game.node.entity.player.Player; -import core.game.node.entity.player.info.PlayerDetails; -import core.game.node.entity.player.info.Rights; -import core.game.node.item.Item; -import core.game.system.task.TaskExecutor; -import core.gui.ConsoleFrame; -import core.gui.ConsoleTab; -import core.tools.PlayerLoader; -import core.tools.StringUtils; -import kotlin.Unit; - -import javax.swing.*; -import javax.swing.border.EtchedBorder; -import javax.swing.border.TitledBorder; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.text.NumberFormat; -import java.util.*; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Handles the utility programs. - * - * @author Vexia - */ -public final class UtilityTab extends ConsoleTab { - /** - * The {@link Logger} instance. - */ - private static final Logger logger = Logger.getLogger(UtilityTab.class.getName()); - /** - * The utility tab. - */ - private static final UtilityTab INSTANCE = new UtilityTab(); - - /** - * The serial UID. - */ - private static final long serialVersionUID = -4962790192758757624L; - - /** - * The list of players. - */ - private final List players = new ArrayList<>(20); - - /** - * The mapping of ips & their users. - */ - private final Map> IPS = new HashMap<>(); - - /** - * The mapping of macs & their users. - */ - private final Map> MACS = new HashMap<>(); - - /** - * The mapping of comp names & their users. - */ - private final Map> COMPS = new HashMap<>(); - - /** - * The players loaded list. - */ - private final JLabel lblPlayersLoaded = new JLabel("Players loaded: "); - - /** - * If the map is being populated. - */ - private boolean populating; - - /** - * Constructs a new {@Code UtilityTab} {@Code Object} - */ - public UtilityTab() { - super("Utilities"); - - JPanel panel = new JPanel(); - panel.setBorder(new TitledBorder(null, "Resolvers & Trackers", TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panel.setBackground(UIManager.getColor("Button.background")); - panel.setBounds(18, 98, 152, 219); - add(panel); - panel.setLayout(null); - JButton btnResolveIp = new JButton("Resolve Ip"); - btnResolveIp.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - resolve(IPS); - } - }); - btnResolveIp.setBounds(17, 28, 117, 29); - panel.add(btnResolveIp); - - JButton btnResolveMac = new JButton("Resolve Mac"); - btnResolveMac.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - resolve(MACS); - } - }); - btnResolveMac.setBounds(17, 69, 117, 29); - panel.add(btnResolveMac); - - JButton btnResolveCompName = new JButton("Resolve Comp"); - btnResolveCompName.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - resolve(COMPS); - } - }); - btnResolveCompName.setBounds(17, 110, 117, 29); - panel.add(btnResolveCompName); - - JButton btnPopulateMaps = new JButton("Populate Maps"); - btnPopulateMaps.addActionListener(e -> { - populateList(); - JOptionPane.showMessageDialog(null, "Finished populating maps!"); - }); - btnPopulateMaps.setBounds(405, 32, 236, 29); - add(btnPopulateMaps); - - JLabel lblMustBeDone = new JLabel("MUST BE DONE BEFORE RUNNING TOOLS"); - lblMustBeDone.setBounds(390, 6, 379, 16); - add(lblMustBeDone); - - lblPlayersLoaded.setBounds(460, 61, 157, 16); - add(lblPlayersLoaded); - - JPanel panel_1 = new JPanel(); - panel_1.setLayout(null); - panel_1.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Wealth & Items", TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panel_1.setBackground(UIManager.getColor("Button.background")); - panel_1.setBounds(182, 98, 145, 219); - add(panel_1); - - JButton btnWealthScanner = new JButton("Wealth Scanner"); - btnWealthScanner.addActionListener(e -> wealthScanner()); - btnWealthScanner.setBounds(6, 29, 129, 29); - panel_1.add(btnWealthScanner); - - JButton btnItemScanner = new JButton("Item Scanner"); - btnItemScanner.addActionListener(e -> itemScanner()); - btnItemScanner.setBounds(6, 69, 129, 29); - panel_1.add(btnItemScanner); - - JPanel panel_2 = new JPanel(); - panel_2.setLayout(null); - panel_2.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Player Utils", TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panel_2.setBackground(UIManager.getColor("Button.background")); - panel_2.setBounds(345, 98, 145, 219); - add(panel_2); - - JButton btnStaffChecker = new JButton("Staff Scanner"); - btnStaffChecker.addActionListener(e -> staffScanner()); - btnStaffChecker.setBounds(6, 29, 129, 29); - panel_2.add(btnStaffChecker); - - JPanel panel_3 = new JPanel(); - panel_3.setLayout(null); - panel_3.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Security", TitledBorder.LEADING, TitledBorder.TOP, null, null)); - panel_3.setBackground(UIManager.getColor("Button.background")); - panel_3.setBounds(502, 98, 145, 219); - add(panel_3); - - JButton btnMacViewer = new JButton("Mac Viewer"); - btnMacViewer.addActionListener(e -> viewMacs()); - btnMacViewer.setBounds(6, 29, 129, 29); - panel_3.add(btnMacViewer); - - JButton btnMacRemover = new JButton("Mac Remover"); - btnMacRemover.addActionListener(e -> removeMac()); - btnMacRemover.setBounds(6, 64, 129, 29); - panel_3.add(btnMacRemover); - } - - /** - * Removes a mac. - */ - public void removeMac() { - String mac = JOptionPane.showInputDialog("Enter address:"); - if (mac == null || mac.length() <= 1) { - JOptionPane.showMessageDialog(null, "Error! Nothing entered."); - return; - } -// if (SystemManager.getSecurity().isBanned(mac)) { -// SystemManager.getSecurity().remove(mac); -// JOptionPane.showMessageDialog(null, "Removed the mac - " + mac + "!"); -// } else { -// JOptionPane.showMessageDialog(null, "Error! Couldn't find mac in system manager."); -// } - } - - /** - * Views the banned macs. - */ - public void viewMacs() { - JPanel panel = new JPanel(new GridLayout(0, 1)); - JScrollPane pane = new JScrollPane(); - DefaultListModel model = new DefaultListModel(); - JList list = new JList(); -// for (String i : SystemManager.getSecurity().getBannedAddresses()) { -// if (i == null) { -// continue; -// } -// model.addElement(i.toString()); -// } - list.setModel(model); - pane.setViewportView(list); - panel.add(pane); - JOptionPane.showConfirmDialog(null, panel, "Banned Addresses", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); - } - - /** - * Wealth scanner. - */ - public void wealthScanner() { - String args = JOptionPane.showInputDialog("Enter item id:"); - int id = -1; - if (args != null && args.length() > 0) { - try { - id = Integer.parseInt(args); - } catch (NumberFormatException e) { - id = -1; - logger.log(Level.WARNING, "Error in wealth scanner, number exception!"); - } - } - List data = wealthScanner(id); - JPanel panel = new JPanel(new GridLayout(0, 1)); - JScrollPane pane = new JScrollPane(); - DefaultListModel model = new DefaultListModel(); - JList list = new JList(); - for (String i : data) { - if (i == null) { - continue; - } - model.addElement(i.toString()); - } - list.setModel(model); - pane.setViewportView(list); - panel.add(pane); - JOptionPane.showConfirmDialog(null, panel, "Wealth Scanner", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); - - } - - /** - * Wealth scanner. - */ - public List wealthScanner(int itemId) { - Item item = null; - if (itemId != -1) { - item = new Item(itemId); - } - Object[][] mostWealthy = new Object[50][2]; - int player = 0; - long count = 0; - for (Player p : players) { - if (p.getDetails().getRights() == Rights.PLAYER_MODERATOR) { - continue; - } - if (item != null) { - long old = count; - count += p.getInventory().getAmount(item); - count += p.getEquipment().getAmount(item); - count += p.getBank().getAmount(item); - if (old != count) { - player++; - } - } - for (int i = 0; i < mostWealthy.length; i++) { - Long value = (Long) mostWealthy[i][0]; - if (value == null || value < p.getMonitor().getNetworth()) { - for (int j = mostWealthy.length - 1; j > i; j--) { - mostWealthy[j] = mostWealthy[j - 1]; - } - mostWealthy[i] = new Object[2]; - mostWealthy[i][0] = p.getMonitor().getNetworth(); - mostWealthy[i][1] = p.getName(); - break; - } - } - } - List formats = new ArrayList<>(20); - for (int i = mostWealthy.length - 1; i >= 0; i--) { - Object[] info = mostWealthy[i]; - if (info != null && info[0] != null) { - formats.add(i + ": " + info[1] + " - " + NumberFormat.getNumberInstance(Locale.US).format((Long) info[0]) + " coins."); - } - } - if (item != null) { - formats.add(NumberFormat.getNumberInstance(Locale.US).format(count) + " occurrences of item " + item.getName() + " (id=" + item.getId() + ") by " + player + " players!"); - } - return formats; - } - - /** - * The item scanner. - */ - public void itemScanner() { - String args = JOptionPane.showInputDialog("Enter item id:"); - Item item = new Item(11694); - if (args != null && args.length() > 0) { - try { - item = new Item(Integer.parseInt(args)); - } catch (NumberFormatException e) { - item = new Item(11694); - logger.log(Level.WARNING, "Error in wealth scanner, number exception!"); - } - } - List formats = itemScanner(item); - JPanel panel = new JPanel(new GridLayout(0, 1)); - JScrollPane pane = new JScrollPane(); - DefaultListModel model = new DefaultListModel(); - JList list = new JList(); - for (String i : formats) { - if (i == null) { - continue; - } - model.addElement(i.toString()); - } - list.setModel(model); - pane.setViewportView(list); - panel.add(pane); - JOptionPane.showConfirmDialog(null, panel, "Item Scanner", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); - } - - /** - * Scans for items in the eco. - */ - public List itemScanner(Item item) { - Map map = new HashMap<>(); - for (Player p : players) { - List containers = new ArrayList<>(20); - containers.add(p.getInventory()); - containers.add(p.getBank()); - containers.add(p.getEquipment()); - int amount = 0; - for (core.game.container.Container container : containers) { - Item i = container.getItem(item); - if (i != null) { - amount += i.getAmount(); - } - } - if (amount > 0) { - map.put(p.getName(), amount); - } - } - List formats = new ArrayList<>(20); - for (Map.Entry entry : map.entrySet()) { - formats.add("Player name=" + entry.getKey() + ", contained a total of " + entry.getValue() + " " + item.getName() + "."); - } - if (formats.size() == 0) { - formats.add("There were no occurrences of " + item + "."); - } - return formats; - } - - /** - * Resolves the address. - * - * @param map the map. - */ - public void resolve(Map> map) { - String address = JOptionPane.showInputDialog("Enter the address."); - List names = resolve(map, address, false); - String string = "No names found registered with that address!"; - if (names == null) { - JOptionPane.showMessageDialog(null, string); - } else { - string = "Names:" + Arrays.toString(names.toArray()); - JOptionPane.showMessageDialog(null, string); - } - } - - /** - * Resolves & tracks an adddress. - * - * @param map the map. - * @param value the value. - * @param name if the name or not. - * @return the names resolved. - */ - public List resolve(Map> map, String value, boolean name) { - List names = null; - String address = !name ? value : ""; - if (name) { - for (Map.Entry> entry : map.entrySet()) { - for (String s : entry.getValue()) { - if (s.equals(value)) { - address = entry.getKey(); - break; - } - } - } - } - names = map.get(address); - return names; - } - - /** - * Gets the mapping. - * - * @param id the id. - * @return the map. - */ - public Map> getMap(int id) { - return id == 1 ? IPS : id == 2 ? MACS : COMPS; - } - - /** - * Populates the lists. - */ - public void populateList() { - if (populating) { - return; - } - populating = true; - players.clear(); - TaskExecutor.execute(() -> { - Thread.currentThread().setName("Utility Tab"); - ConsoleFrame.getInstance().getPlayerTab().getPlayerNames().clear(); - ConsoleFrame.getInstance().getPlayerTab().populatePlayerSearch(); - for (String name : ConsoleFrame.getInstance().getPlayerTab().getPlayerNames()) { - Player player = PlayerLoader.getPlayerFile(name); - if (player == null) { - continue; - } - PlayerDetails details = player.getDetails(); - if (details != null) { - addAddressToMap(name, details.getIpAddress(), IPS); - addAddressToMap(name, details.getMacAddress(), MACS); - addAddressToMap(name, details.getCompName(), COMPS); - players.add(player); - } - } - populating = false; - System.gc(); - lblPlayersLoaded.setText("Players loaded: " + players.size()); - return Unit.INSTANCE; - }); - } - - /** - * Checks the staff. - */ - public void staffScanner() { - List staff = new ArrayList<>(20); - for (Player player : players) { - if (player.getDetails().getRights() != Rights.REGULAR_PLAYER) { - staff.add(player.getName() + " - " + StringUtils.formatDisplayName(player.getDetails().getRights().toString())); - } - } - JPanel panel = new JPanel(new GridLayout(0, 1)); - JScrollPane pane = new JScrollPane(); - DefaultListModel model = new DefaultListModel(); - JList list = new JList(); - for (String i : staff) { - if (i == null) { - continue; - } - model.addElement(i.toString()); - } - list.setModel(model); - pane.setViewportView(list); - panel.add(pane); - JOptionPane.showConfirmDialog(null, panel, "Staff Scanner", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE); - } - - /** - * Adds an address with its names to the map. - * - * @param name the name. - * @param address the address. - * @param map the map. - */ - public void addAddressToMap(String name, String address, Map> map) { - if (address == null) { - return; - } - List names = map.get(address); - if (names == null) { - names = new ArrayList(); - } - names.add(name); - map.put(address, names); - } - - /** - * Deletes a player. - * - * @param details the details. - */ - public void delete(PlayerDetails details) { - if (details.getRights() == Rights.PLAYER_MODERATOR) { - return; - } - // TODO -// Connection connection = SQLManager.getConnection(); -// PreparedStatement statement; -// try { -// statement = connection.prepareStatement("DELETE FROM " + "playerdata" + " WHERE " + "" + "username" + "='" + details.getUsername().toLowerCase() + "'"); -// statement.execute(); -// statement = connection.prepareStatement("DELETE FROM " + "highscores" + " WHERE " + "" + "username" + "='" + details.getUsername().toLowerCase() + "'"); -// statement.execute(); -// } catch (SQLException e) { -// e.printStackTrace(); -// } -// -// File detailFile = new File(GameConstants.getPlayerDetailsPath() + "/" + details.getUsername() + ".store"); -// File playerFile = new File(GameConstants.getPlayerSavePath() + "/" + details.getUsername() + ".store"); -// detailFile.delete(); -// playerFile.delete(); -// SQLManager.close(connection); -// ConsoleFrame.getInstance().getPlayerTab().getPlayerNames().remove(details.getUsername()); - - } - - /** - * Gets the player. - * - * @param name the name. - * @return the player. - */ - public Player getPlayer(String name) { - if (players.size() == 0) { - populateList(); - return null; - } - for (Player p : players) { - if (p.getName().equals(name)) { - return p; - } - } - return null; - } - - /** - * Gets the ips. - * - * @return the ips. - */ - public Map> getIps() { - return IPS; - } - - /** - * Gets the macs. - * - * @return the macs. - */ - public Map> getMacs() { - return MACS; - } - - /** - * Gets the comps. - * - * @return the comps. - */ - public Map> getComps() { - return COMPS; - } - - /** - * Gets the players. - * - * @return the players. - */ - public List getPlayers() { - return players; - } - - /** - * Gets the populating. - * - * @return the populating - */ - public boolean isPopulating() { - return populating; - } - - /** - * Sets the bapopulating. - * - * @param populating the populating to set. - */ - public void setPopulating(boolean populating) { - this.populating = populating; - } - - /** - * Gets the instance. - * - * @return the instance - */ - public static UtilityTab getInstance() { - return INSTANCE; - } -} diff --git a/Server/src/main/java/core/net/amsc/MSEventHandler.java b/Server/src/main/java/core/net/amsc/MSEventHandler.java index 074efa367..3950c048e 100644 --- a/Server/src/main/java/core/net/amsc/MSEventHandler.java +++ b/Server/src/main/java/core/net/amsc/MSEventHandler.java @@ -38,7 +38,7 @@ public final class MSEventHandler extends IoEventHandler { } catch (Throwable t) { t.printStackTrace(); } - SystemLogger.logErr("Failed connecting to Management Server!"); + SystemLogger.logErr(this.getClass(), "Failed connecting to Management Server!"); WorldCommunicator.terminate(); } diff --git a/Server/src/main/java/core/net/amsc/WorldCommunicator.java b/Server/src/main/java/core/net/amsc/WorldCommunicator.java index cffb96b04..1a471aefc 100644 --- a/Server/src/main/java/core/net/amsc/WorldCommunicator.java +++ b/Server/src/main/java/core/net/amsc/WorldCommunicator.java @@ -72,7 +72,7 @@ public final class WorldCommunicator { */ public static void connect() { try { - SystemLogger.logInfo("Attempting to connect to management server..."); + SystemLogger.logInfo(WorldCommunicator.class, "Attempting to connect to management server..."); setState(ManagementServerState.CONNECTING); /*if (isLocallyHosted()) { SystemLogger.log("Management server is hosted on local machine!"); @@ -82,7 +82,7 @@ public final class WorldCommunicator { //} reactor.start(); } catch (Throwable e) { - SystemLogger.logErr("Unable to connect to management server"); + SystemLogger.logErr(WorldCommunicator.class, "Unable to connect to management server"); e.printStackTrace(); terminate(); } @@ -192,7 +192,7 @@ public final class WorldCommunicator { if (WorldCommunicator.state != state) { WorldCommunicator.state = state; state.set(); - SystemLogger.logInfo("Management server status: " + state + "."); + SystemLogger.logInfo(WorldCommunicator.class, "Management server status: " + state + "."); } } diff --git a/Server/src/main/java/core/net/event/GameReadEvent.java b/Server/src/main/java/core/net/event/GameReadEvent.java index 577b140dc..753647d9a 100644 --- a/Server/src/main/java/core/net/event/GameReadEvent.java +++ b/Server/src/main/java/core/net/event/GameReadEvent.java @@ -97,9 +97,9 @@ public final class GameReadEvent extends IoReadEvent { IncomingPacket packet = PacketRepository.getIncoming(opcode); session.setLastPing(System.currentTimeMillis()); if (packet == null) { - SystemLogger.logErr("Unhandled packet [opcode=" + opcode + ", previous=" + last + ", size=" + size + ", header=" + header + "]"); + SystemLogger.logErr(this.getClass(), "Unhandled packet [opcode=" + opcode + ", previous=" + last + ", size=" + size + ", header=" + header + "]"); if (GameWorld.getSettings().isDevMode()) { - SystemLogger.logErr("Unhandled packet [opcode=" + opcode + ", previous=" + last + ", size=" + size + ", header=" + header + "]"); + SystemLogger.logErr(this.getClass(), "Unhandled packet [opcode=" + opcode + ", previous=" + last + ", size=" + size + ", header=" + header + "]"); } continue; } @@ -139,7 +139,7 @@ public final class GameReadEvent extends IoReadEvent { if(header == -3){ System.out.println(buffer.remaining()); } - SystemLogger.logErr("Invalid packet [opcode=" + opcode + ", last=" + last + ", queued=" + usedQueuedBuffer + "], header=" + header+"!"); + SystemLogger.logErr(this.getClass(), "Invalid packet [opcode=" + opcode + ", last=" + last + ", queued=" + usedQueuedBuffer + "], header=" + header+"!"); return -1; } diff --git a/Server/src/main/java/core/net/event/HSReadEvent.java b/Server/src/main/java/core/net/event/HSReadEvent.java index e1108c829..8a94f4476 100644 --- a/Server/src/main/java/core/net/event/HSReadEvent.java +++ b/Server/src/main/java/core/net/event/HSReadEvent.java @@ -65,7 +65,7 @@ public final class HSReadEvent extends IoReadEvent { WorldList.sendUpdate(session, updateStamp); break; default: - SystemLogger.logInfo("PKT " + opcode); + SystemLogger.logInfo(this.getClass(), "PKT " + opcode); session.disconnect(); break; } diff --git a/Server/src/main/java/core/net/event/MSReadEvent.java b/Server/src/main/java/core/net/event/MSReadEvent.java index fb6794327..ea065cb23 100644 --- a/Server/src/main/java/core/net/event/MSReadEvent.java +++ b/Server/src/main/java/core/net/event/MSReadEvent.java @@ -86,7 +86,7 @@ public final class MSReadEvent extends IoReadEvent { } return buffer.getShort() & 0xFFFF; } - SystemLogger.logErr("Invalid packet [opcode=" + opcode + ", last=" + last + ", queued=" + usedQueuedBuffer + "]!"); + SystemLogger.logErr(this.getClass(), "Invalid packet [opcode=" + opcode + ", last=" + last + ", queued=" + usedQueuedBuffer + "]!"); return -1; } diff --git a/Server/src/main/java/core/net/event/RegistryReadEvent.java b/Server/src/main/java/core/net/event/RegistryReadEvent.java index 2d3d4a4d1..aacddefca 100644 --- a/Server/src/main/java/core/net/event/RegistryReadEvent.java +++ b/Server/src/main/java/core/net/event/RegistryReadEvent.java @@ -36,20 +36,20 @@ public final class RegistryReadEvent extends IoReadEvent { switch (opcode) { case 0: WorldCommunicator.setState(ManagementServerState.NOT_AVAILABLE); - SystemLogger.logErr("Failed registering world to AMS - [id=" + GameWorld.getSettings().getWorldId() + ", cause=World id out of bounds]!"); + SystemLogger.logErr(this.getClass(), "Failed registering world to AMS - [id=" + GameWorld.getSettings().getWorldId() + ", cause=World id out of bounds]!"); break; case 1: session.setProducer(PRODUCER); WorldCommunicator.setState(ManagementServerState.AVAILABLE); - SystemLogger.logInfo("Successfully registered world to AMS - [id=" + GameWorld.getSettings().getWorldId() + "]!"); + SystemLogger.logInfo(this.getClass(), "Successfully registered world to AMS - [id=" + GameWorld.getSettings().getWorldId() + "]!"); break; case 2: WorldCommunicator.setState(ManagementServerState.NOT_AVAILABLE); - SystemLogger.logErr("Failed registering world to AMS - [id=" + GameWorld.getSettings().getWorldId() + ", cause=World id already in use]!"); + SystemLogger.logErr(this.getClass(), "Failed registering world to AMS - [id=" + GameWorld.getSettings().getWorldId() + ", cause=World id already in use]!"); break; case 3: WorldCommunicator.setState(ManagementServerState.NOT_AVAILABLE); - SystemLogger.logErr("Failed registering world to AMS - [id=" + GameWorld.getSettings().getWorldId() + ", cause=Exception in AMS]!"); + SystemLogger.logErr(this.getClass(), "Failed registering world to AMS - [id=" + GameWorld.getSettings().getWorldId() + ", cause=Exception in AMS]!"); break; default: System.out.println("??" + opcode); diff --git a/Server/src/main/java/core/net/packet/PacketRepository.java b/Server/src/main/java/core/net/packet/PacketRepository.java index db4ea3a29..09f89287e 100644 --- a/Server/src/main/java/core/net/packet/PacketRepository.java +++ b/Server/src/main/java/core/net/packet/PacketRepository.java @@ -191,7 +191,7 @@ public final class PacketRepository { if(context.getPlayer().getSession() == null) return; OutgoingPacket p = OUTGOING_PACKETS.get(clazz); if (p == null) { - SystemLogger.logErr("Invalid outgoing packet [handler=" + clazz + ", context=" + context + "]."); + SystemLogger.logErr(PacketRepository.class, "Invalid outgoing packet [handler=" + clazz + ", context=" + context + "]."); return; } if(!context.getPlayer().isArtificial()) { diff --git a/Server/src/main/java/core/net/packet/in/DummyPacket.java b/Server/src/main/java/core/net/packet/in/DummyPacket.java index 8798bf414..9a22e0c26 100644 --- a/Server/src/main/java/core/net/packet/in/DummyPacket.java +++ b/Server/src/main/java/core/net/packet/in/DummyPacket.java @@ -8,6 +8,6 @@ import core.net.packet.IoBuffer; public class DummyPacket implements IncomingPacket { @Override public void decode(Player player, int opcode, IoBuffer buffer) { - SystemLogger.logInfo("Received opcode " + opcode + " packet."); + SystemLogger.logInfo(this.getClass(), "Received opcode " + opcode + " packet."); } } diff --git a/Server/src/main/java/core/net/packet/in/InteractionPacket.java b/Server/src/main/java/core/net/packet/in/InteractionPacket.java index 19adc90fe..083d955da 100644 --- a/Server/src/main/java/core/net/packet/in/InteractionPacket.java +++ b/Server/src/main/java/core/net/packet/in/InteractionPacket.java @@ -23,6 +23,7 @@ import core.net.packet.context.PlayerContext; import core.net.packet.out.ClearMinimapFlag; import rs09.ServerConstants; import rs09.game.ai.AIPlayer; +import rs09.game.interaction.IntType; import rs09.game.interaction.InteractionListener; import rs09.game.interaction.InteractionListeners; import rs09.game.world.repository.Repository; @@ -196,7 +197,7 @@ public final class InteractionPacket implements IncomingPacket { player.debug("spawn=" + npc.getProperties().getSpawnLocation() + "."); player.debug("Varp ID= " + npc.getDefinition().getConfigId() + " Offset=" + npc.getDefinition().getVarbitOffset() + " Size=" + npc.getDefinition().getVarbitSize()); handleAIPLegion(player, 0, optionIndex, index); - if(InteractionListeners.run(shown.getId(),2, option.getName(),player,npc)){ + if(InteractionListeners.run(shown.getId(),IntType.NPC, option.getName(),player,npc)){ return; } if(PluginInteractionManager.handle(player,shown,option)){ @@ -288,7 +289,7 @@ public final class InteractionPacket implements IncomingPacket { } handleAIPLegion(player, 1, optionIndex, x, y, objectId); - if(InteractionListeners.run(object.getId(),1, option.getName(),player,object)){ + if(InteractionListeners.run(object.getId(), IntType.SCENERY, option.getName(),player,object)){ return; } if(PluginInteractionManager.handle(player,object)){ @@ -320,7 +321,7 @@ public final class InteractionPacket implements IncomingPacket { return; } - if (!InteractionListeners.run(-1, InteractionListener.Companion.getPLAYER(), option.getName().toLowerCase(), player, target)) { + if (!InteractionListeners.run(-1, IntType.PLAYER, option.getName().toLowerCase(), player, target)) { handleAIPLegion(player, 2, optionIndex, index); target.getInteraction().handle(player, option); } @@ -357,10 +358,10 @@ public final class InteractionPacket implements IncomingPacket { player.debug("Handled by quest interaction manager."); return; } - if(InteractionListeners.run(item.getId(), InteractionListener.Companion.getGROUNDITEM(), option.getName(), player, item)) { + if(InteractionListeners.run(item.getId(), IntType.GROUNDITEM, option.getName(), player, item)) { return; } - if(InteractionListeners.run(item.getId(), InteractionListener.Companion.getITEM(), option.getName(), player, item)) { + if(InteractionListeners.run(item.getId(), IntType.ITEM, option.getName(), player, item)) { return; } item.getInteraction().handle(player, option); diff --git a/Server/src/main/java/core/net/packet/in/ItemActionPacket.java b/Server/src/main/java/core/net/packet/in/ItemActionPacket.java index 81a891e73..5649de98b 100644 --- a/Server/src/main/java/core/net/packet/in/ItemActionPacket.java +++ b/Server/src/main/java/core/net/packet/in/ItemActionPacket.java @@ -16,6 +16,7 @@ import core.net.packet.PacketRepository; import core.net.packet.context.PlayerContext; import core.net.packet.out.ClearMinimapFlag; import org.rs09.consts.Items; +import rs09.game.interaction.IntType; import rs09.game.interaction.InteractionListeners; import rs09.game.node.entity.skill.farming.CompostBins; import rs09.game.node.entity.skill.farming.FarmingPatch; @@ -69,7 +70,7 @@ public class ItemActionPacket implements IncomingPacket { if(PluginInteractionManager.handle(player,event)){ return; } - if(InteractionListeners.run(item,npc,2,player)){ + if(InteractionListeners.run(item,npc,IntType.NPC,player)){ return; } if(player.getZoneMonitor().useWith(used,npc)){ @@ -100,7 +101,7 @@ public class ItemActionPacket implements IncomingPacket { if(PluginInteractionManager.handle(player,event)){ return; } - if(InteractionListeners.run(item, target, 4, player)){ + if(InteractionListeners.run(item, target, IntType.PLAYER, player)){ return; } if(player.getZoneMonitor().useWith(used,player)){ @@ -137,7 +138,7 @@ public class ItemActionPacket implements IncomingPacket { RottenPotatoUseWithHandler.handle(used,player); return; } - if(InteractionListeners.run(used,with,0,player)){ + if(InteractionListeners.run(used,with,IntType.ITEM,player)){ return; } if(player.getZoneMonitor().useWith(used,with)){ @@ -185,10 +186,10 @@ public class ItemActionPacket implements IncomingPacket { RottenPotatoUseWithHandler.handle(object,player); return; } - if(InteractionListeners.run(used,child,1,player)){ + if(InteractionListeners.run(used,child,IntType.SCENERY,player)){ return; } - if(InteractionListeners.run(used,object,1,player)){ + if(InteractionListeners.run(used,object,IntType.SCENERY,player)){ return; } if(player.getZoneMonitor().useWith(used,object)){ @@ -239,7 +240,7 @@ public class ItemActionPacket implements IncomingPacket { } return; default: - SystemLogger.logErr("Error in Item Action Packet! Unhandled opcode = " + buffer.opcode()); + SystemLogger.logErr(this.getClass(), "Error in Item Action Packet! Unhandled opcode = " + buffer.opcode()); return; } } diff --git a/Server/src/main/java/core/net/registry/AccountRegister.java b/Server/src/main/java/core/net/registry/AccountRegister.java index 4497da838..4d69a7c7b 100644 --- a/Server/src/main/java/core/net/registry/AccountRegister.java +++ b/Server/src/main/java/core/net/registry/AccountRegister.java @@ -63,11 +63,11 @@ public class AccountRegister { response(session, RegistryResponse.SUCCESS); break; case 36://Register details - SystemLogger.logInfo("Made it to final stage"); + SystemLogger.logInfo(AccountRegister.class, "Made it to final stage"); buffer.get(); //Useless size being written that is already written in the RSA block buffer = Login.decryptRSABuffer(buffer, ServerConstants.EXPONENT, ServerConstants.MODULUS); if(buffer.get() != 10){ //RSA header (aka did this decrypt properly) - SystemLogger.logInfo("Decryption failed during registration :("); + SystemLogger.logInfo(AccountRegister.class, "Decryption failed during registration :("); response(session, RegistryResponse.CANNOT_CREATE); break; } @@ -116,7 +116,7 @@ public class AccountRegister { }); break; default: - SystemLogger.logErr("Unhandled account registry opcode = " + opcode); + SystemLogger.logErr(AccountRegister.class, "Unhandled account registry opcode = " + opcode); break; } } diff --git a/Server/src/main/java/core/worker/MajorUpdateWorker.java b/Server/src/main/java/core/worker/MajorUpdateWorker.java deleted file mode 100644 index 28c719f08..000000000 --- a/Server/src/main/java/core/worker/MajorUpdateWorker.java +++ /dev/null @@ -1,133 +0,0 @@ -/* -package core.worker; - -import java.util.concurrent.Executor; -import java.util.concurrent.Executors; - -import core.game.system.SystemManager; -import rs09.game.world.GameWorld; -import rs09.game.world.repository.Repository; -import core.game.world.update.UpdateSequence; -import core.gui.tab.StatisticsTab; -import core.plugin.CorePluginTypes.Managers; - -*/ -/** - * The major update worker, this handles the game updating etc. - * @author Emperor - *//* - -public final class MajorUpdateWorker implements Runnable { - - */ -/** - * The updating sequence to use. - *//* - - private final UpdateSequence sequence = new UpdateSequence(); - - */ -/** - * The executor. - *//* - - private final Executor EXECUTOR = Executors.newSingleThreadExecutor(); - - */ -/** - * The start time of a cycle. - *//* - - private long start; - - */ -/** - * If the major update worker has started. - *//* - - private boolean started; - - */ -/** - * Constructs a new {@code MajorUpdateWorker} {@code Object}. - *//* - - public MajorUpdateWorker() { - */ -/* - * Empty. - *//* - - } - - */ -/** - * Starts the update worker. - *//* - - public void start() { - if (started) { - return; - } - started = true; - EXECUTOR.execute(MajorUpdateWorker.this); - } - - @Override - public void run() { - while (SystemManager.isActive()) { - try { - start = System.currentTimeMillis(); - sequence.start(); - sequence.run(); - sequence.end(); - //GameWorld.threadPool. - GameWorld.pulse(); - Repository.getDisconnectionQueue().update(); - Managers.tick(); - sleep(); - } catch (Throwable t) { - t.printStackTrace(); - } - } - started = false; - } - - */ -/** - * Lets the current thread sleep. - * @throws InterruptedException When the thread is interrupted. - *//* - - private void sleep() throws InterruptedException { - // How many ticks off we are - final int TICK_SPEED = (int) (600 / 1); //Allows you to make server ticks faster than normal - StatisticsTab.reportPerformance((int) (System.currentTimeMillis() - start)); - long duration = TICK_SPEED - ((System.currentTimeMillis() - start) % TICK_SPEED); - if (duration > 0) { - Thread.sleep(duration); - } else { - SystemLogger.logErr("Updating cycle duration took " + -duration + "ms too long!"); - } - } - - */ -/** - * Gets the started. - * @return The started. - *//* - - public boolean isStarted() { - return started; - } - - */ -/** - * Sets the started. - * @param started The started to set. - *//* - - public void setStarted(boolean started) { - this.started = started; - } -}*/ diff --git a/Server/src/main/java/plugin/drops/DropPlugin.java b/Server/src/main/java/plugin/drops/DropPlugin.java deleted file mode 100644 index 0ec6df372..000000000 --- a/Server/src/main/java/plugin/drops/DropPlugin.java +++ /dev/null @@ -1,26 +0,0 @@ -package plugin.drops; - -import core.game.node.item.Item; -import core.plugin.Plugin; - -import java.util.List; - -public abstract class DropPlugin implements Plugin { - - //the list of NPCs this plugin can effect, if left blank it effects all NPCs. - public int[] accepted_npcs; - - //allows a super constructor to define the npcs - public DropPlugin(int... accepted_npcs){ - this.accepted_npcs = accepted_npcs; - } - - //necessary for the plugin framework, doesnt need to be changed ever. - @Override - public Object fireEvent(String identifier, Object... args) { - return null; - } - - //defines an abstract method all drop plugins must implement - public abstract List handle(); -} diff --git a/Server/src/main/java/plugin/drops/DropPlugins.java b/Server/src/main/java/plugin/drops/DropPlugins.java deleted file mode 100644 index 8eeddb0ce..000000000 --- a/Server/src/main/java/plugin/drops/DropPlugins.java +++ /dev/null @@ -1,42 +0,0 @@ -package plugin.drops; - -import core.game.node.item.Item; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; - -public class DropPlugins { - public static HashMap> plugins = new HashMap<>(); - public static List globalPlugins = new ArrayList<>(20); - public static List getDrops(int npc_id){ - List drops = new ArrayList<>(20); - List toHandle = plugins.get(npc_id); - if(toHandle != null) { - for (DropPlugin plugin : toHandle) { - drops.addAll(plugin.handle()); - } - } - if(!globalPlugins.isEmpty()) { - for (DropPlugin plugin : globalPlugins) { - drops.addAll(plugin.handle()); - } - } - return drops; - } - - public static void register(DropPlugin plugin){ - if(plugin.accepted_npcs.length > 0) { - Arrays.stream(plugin.accepted_npcs).forEach(id -> { - if (plugins.get(id) == null) { - List newlist = new ArrayList<>(20); - plugins.putIfAbsent(id, newlist); - } - plugins.get(id).add(plugin); - }); - } else { - globalPlugins.add(plugin); - } - } -} diff --git a/Server/src/main/java/plugin/drops/mystery_box/MysteryBoxDropper.java b/Server/src/main/java/plugin/drops/mystery_box/MysteryBoxDropper.java deleted file mode 100644 index a5e57000b..000000000 --- a/Server/src/main/java/plugin/drops/mystery_box/MysteryBoxDropper.java +++ /dev/null @@ -1,45 +0,0 @@ -package plugin.drops.mystery_box; - -import core.game.node.item.Item; -import core.plugin.Initializable; -import core.plugin.Plugin; -import core.plugin.PluginManifest; -import org.rs09.consts.Items; -import core.tools.RandomFunction; -import plugin.drops.DropPlugin; -import plugin.drops.DropPlugins; - -import java.util.ArrayList; -import java.util.List; - -@Initializable -@PluginManifest(name="MysteryBox") -public class MysteryBoxDropper extends DropPlugin { - - //percentage chance of it dropping, between 1 and 100. - private int chance = 15; - List drops = new ArrayList<>(20); //the list of dropped items - - //standard way to initialize a drop plugin - @Override - public Plugin newInstance(Object arg) throws Throwable { - DropPlugins.register(this); - return this; - } - - //default constructor used, called when the plugin manager initializes this plugin. - //super() for a drop plugin simply means all NPCs can use this drop - public MysteryBoxDropper(){ - super(); - } - - @Override - public List handle() { - boolean willDrop = RandomFunction.random(chance) == RandomFunction.random(chance); - drops.clear(); - if(willDrop){ - drops.add(new Item(Items.MYSTERY_BOX_6199)); - } - return drops; - } -} diff --git a/Server/src/main/java/plugin/package-info.java b/Server/src/main/java/plugin/package-info.java deleted file mode 100644 index 546341052..000000000 --- a/Server/src/main/java/plugin/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Holds all the plugin classes. - * - * @author Emperor - */ -package plugin; \ No newline at end of file diff --git a/Server/src/main/java/rs09/game/ai/AIPControlDialogue.java b/Server/src/main/java/rs09/game/ai/AIPControlDialogue.java deleted file mode 100644 index 32c69e852..000000000 --- a/Server/src/main/java/rs09/game/ai/AIPControlDialogue.java +++ /dev/null @@ -1,107 +0,0 @@ -package rs09.game.ai; - -import core.game.content.dialogue.DialoguePlugin; -import core.game.node.entity.player.Player; -import core.game.node.entity.player.info.Rights; - -/** - * Handles artificial intelligent player controls. - * @author Emperor - */ -public final class AIPControlDialogue extends DialoguePlugin { - - /** - * The AIP to control. - */ - private AIPlayer aip; - - /** - * Constructs a new {@code AIPControlDialogue} {@code Object}. - */ - public AIPControlDialogue() { - /* - * empty. - */ - } - - /** - * Constructs a new {@code AIPControlDialogue} {@code Object}. - * @param player The player. - */ - public AIPControlDialogue(Player player) { - super(player); - } - - @Override - public DialoguePlugin newInstance(Player player) { - return new AIPControlDialogue(player); - } - - @Override - public boolean open(Object... args) { - if (player.getDetails().getRights() != Rights.ADMINISTRATOR) { - return false; - } - aip = (AIPlayer) args[0]; - String select = "Select"; - if (player.getAttribute("aip_select") == aip) { - select = "Deselect"; - } - interpreter.sendOptions("AIP#" + aip.getUid() + " controls", select, "Settings", "Follow", "Stand-by", "Clear"); - return true; - } - - @Override - public boolean handle(int interfaceId, int buttonId) { - switch (interfaceId) { - case 234: - switch (buttonId) { - case 1: - if (player.getAttribute("aip_select") == aip) { - player.removeAttribute("aip_select"); - break; - } - player.setAttribute("aip_select", aip); - break; - case 2: - interpreter.sendOptions("AIP#" + aip.getUid() + " settings", "Toggle run", "Toggle retaliate", "Toggle special attack"); - return true; - case 3: - aip.follow(player); - player.removeAttribute("aip_select"); - break; - case 4: - aip.getPulseManager().clear(); - player.removeAttribute("aip_select"); - break; - case 5: - AIPlayer.deregister(aip.getUid()); - player.removeAttribute("aip_select"); - break; - } - close(); - return true; - case 230: - switch (buttonId) { - case 1: - aip.getSettings().toggleRun(); - break; - case 2: - aip.getSettings().toggleRetaliating(); - break; - case 3: - aip.getSettings().toggleSpecialBar(); - break; - } - close(); - return true; - } - return false; - } - - @Override - public int[] getIds() { - return new int[0]; - } - -} \ No newline at end of file diff --git a/Server/src/main/java/rs09/game/ai/AIPlayer.java b/Server/src/main/java/rs09/game/ai/AIPlayer.java index c6dc99243..b4e0e8319 100644 --- a/Server/src/main/java/rs09/game/ai/AIPlayer.java +++ b/Server/src/main/java/rs09/game/ai/AIPlayer.java @@ -52,11 +52,6 @@ public class AIPlayer extends Player { */ private static final Map botMapping = new HashMap<>(); - /** - * The aip control dialogue. - */ - private static final AIPControlDialogue CONTROL_DIAL = new AIPControlDialogue(); - /** * A line of data from namesandarmor.txt that will be used to generate the appearance * Data in format: @@ -252,27 +247,6 @@ public class AIPlayer extends Player { super.init(); getSettings().setRunToggled(true); CharacterDesign.randomize(this, false); - getInteraction().set(new Option("Control", 7).setHandler(new OptionHandler() { - @Override - public Plugin newInstance(Object arg) throws Throwable { - return null; - } - - @Override - public boolean handle(Player p, Node node, String option) { - DialoguePlugin dial = CONTROL_DIAL.newInstance(p); - if (dial != null && dial.open(AIPlayer.this)) { - p.getDialogueInterpreter().setDialogue(dial); - } - return true; - } - - @Override - public boolean isWalk() { - return false; - } - - })); getPlayerFlags().setLastSceneGraph(location); } @@ -559,7 +533,7 @@ public class AIPlayer extends Player { Repository.getPlayers().remove(player); return; } - //SystemLogger.logErr("Could not deregister AIP#" + uid + ": UID not added to the mapping!"); + //SystemLogger.logErr(this.getClass(), "Could not deregister AIP#" + uid + ": UID not added to the mapping!"); } @Override diff --git a/Server/src/main/java/rs09/game/ai/lumbridge/DeadIdler.java b/Server/src/main/java/rs09/game/ai/lumbridge/DeadIdler.java deleted file mode 100644 index 8d80279ee..000000000 --- a/Server/src/main/java/rs09/game/ai/lumbridge/DeadIdler.java +++ /dev/null @@ -1,34 +0,0 @@ -package rs09.game.ai.lumbridge; - -import rs09.game.ai.AIPlayer; -import core.game.world.map.Location; -import core.game.world.map.zone.ZoneBorders; -import core.tools.RandomFunction; - -public class DeadIdler extends AIPlayer { - //Recreation of players I saw in w417 who seemed to have quit their computer after dying. - - private int tick = RandomFunction.random(500); - - public DeadIdler() - { - super(getRandomRespawnLoc()); - this.setCustomState("Lumbridge Bot"); - } - - @Override - public void tick() - { - super.tick(); - if (this.tick > 0) - { - tick --; - } else { - AIPlayer.deregister(this.getUid()); - } - } - - private static Location getRandomRespawnLoc() { - return new ZoneBorders(3219, 3218, 3223, 3219).getRandomLoc(); - } -} diff --git a/Server/src/main/java/rs09/game/ai/lumbridge/LumbridgeBotHandler.java b/Server/src/main/java/rs09/game/ai/lumbridge/LumbridgeBotHandler.java deleted file mode 100644 index f49a543d4..000000000 --- a/Server/src/main/java/rs09/game/ai/lumbridge/LumbridgeBotHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package rs09.game.ai.lumbridge; - -import rs09.game.world.GameWorld; -import core.tools.RandomFunction; - -import java.util.concurrent.Executors; - -/** - * Creates a few random bots around Lumbridge area. - * Code by Red Bracket - */ -public class LumbridgeBotHandler { - public static void immersiveLumbridge() - { - //Generate a few random bots here and there - System.out.println("[" + GameWorld.getSettings().getName() + "]: LumbridgeBotHandler: Initialized dead idlers."); - generateDeadIdlers(); - } - - private static void generateDeadIdlers() { - Executors.newSingleThreadExecutor().execute(() -> { - while (true) //Would probably be better if this could be "while game is running" - { - new DeadIdler(); - try { - Thread.sleep(RandomFunction.random(300_000)); - } catch (InterruptedException e) { - System.out.println("LumbridgeBotHandler can't sleep!!?"); - } - } - }); - } -} diff --git a/Server/src/main/java/rs09/game/ai/pvmbots/DragonKiller.java b/Server/src/main/java/rs09/game/ai/pvmbots/DragonKiller.java deleted file mode 100644 index ef4ee0478..000000000 --- a/Server/src/main/java/rs09/game/ai/pvmbots/DragonKiller.java +++ /dev/null @@ -1,66 +0,0 @@ -package rs09.game.ai.pvmbots; - -import core.game.node.entity.skill.Skills; -import rs09.game.ai.AIPlayer; -import core.game.node.entity.player.link.prayer.*; -import core.game.world.map.Location; -import core.game.world.map.zone.impl.WildernessZone; - -public class DragonKiller extends PvMBots{ - - private int tick = 0; - - public DragonKiller(Location l) { - super(l); - // TODO Auto-generated constructor stub - } - - @Override - public void tick() - { - super.tick(); - - //Despawn - if (this.getSkills().getLifepoints() == 0 || this.getLocation().equals(new Location(0, 0))) - //this.teleport(new Location(500, 500)); - //Despawning not being delayed causes 3 errors in the console - AIPlayer.deregister(this.getUid()); - - if (this.checkVictimIsPlayer()) - { - tryEscape(); - } - - //Npc Combat - if (tick == 0) - { - if (!this.inCombat()) - AttackNpcsInRadius(this, 15); - this.tick = 10; - } - else - this.tick--; - - this.eat(379); - this.getSkills().setLevel(Skills.PRAYER, 99); - this.getSkills().setStaticLevel(Skills.PRAYER, 99); - if (!(this.getPrayer().getActive().contains(PrayerType.PROTECT_FROM_MELEE))) - this.getPrayer().toggle(PrayerType.PROTECT_FROM_MELEE); - //this.getPrayer().toggle() - } - - public void tryEscape() - { - if (this.isTeleBlocked() == false) - { - if (WildernessZone.getWilderness(this) <= 20) - { - System.out.println("not Teleblocked"); - this.teleport(new Location(0, 0)); - } - } - else - return; - //run away - } -} diff --git a/Server/src/main/java/rs09/game/ai/pvmbots/GiantMoleBot.java b/Server/src/main/java/rs09/game/ai/pvmbots/GiantMoleBot.java deleted file mode 100644 index 16d6865e8..000000000 --- a/Server/src/main/java/rs09/game/ai/pvmbots/GiantMoleBot.java +++ /dev/null @@ -1,68 +0,0 @@ -package rs09.game.ai.pvmbots; - -import rs09.game.ai.AIPlayer; -import core.game.node.entity.player.link.prayer.PrayerType; -import core.game.node.item.Item; -import core.game.world.map.Location; - -public class GiantMoleBot extends PvMBots{ - - public GiantMoleBot(Location l) { - super(l); - // TODO Auto-generated constructor stub - } - - int tick = 0; - int movetimer = 5; - - private void checkLightSource() - { - if (!this.getInventory().containItems(33)) - { - if (this.getInventory().containItems(36)) - this.getInventory().remove(new Item(36)); - this.getInventory().add(new Item(33)); - } - } - - @Override - public void tick() - { - checkLightSource(); - super.tick(); - PrayerType type[] = {PrayerType.PROTECT_FROM_MELEE, PrayerType.PIETY}; - this.CheckPrayer(type); - - //Despawn - if (this.getSkills().getLifepoints() == 0) - //this.teleport(new Location(500, 500)); - //Despawning not being delayed causes 3 errors in the console - AIPlayer.deregister(this.getUid()); - - //Npc Combat - if (this.tick == 0) - { - if (!this.inCombat()) - AttackNpcsInRadius(this, 50); - this.tick = 5; - } - - else - this.tick--; - - /*if (this.movetimer == 0) - { - if (!this.inCombat()) - { - this.randomWalk(10, 10); - } - this.movetimer = 4; - } - else - this.movetimer--;*/ - //if (this.getSkills().getLifepoints() > 1) - //this.eat(); - //this.getPrayer().toggle() - } - -} diff --git a/Server/src/main/java/rs09/game/ai/pvmbots/LowestBot.java b/Server/src/main/java/rs09/game/ai/pvmbots/LowestBot.java deleted file mode 100644 index 3a3f3c342..000000000 --- a/Server/src/main/java/rs09/game/ai/pvmbots/LowestBot.java +++ /dev/null @@ -1,38 +0,0 @@ -package rs09.game.ai.pvmbots; - -import rs09.game.ai.AIPlayer; -import core.game.world.map.Location; - -public class LowestBot extends PvMBots{ - - public LowestBot(Location l) { - super(l); - } - - private int tick = 0; - - @Override - public void tick(){ - super.tick(); - - this.tick++; - - //Despawn - if (this.getSkills().getLifepoints() == 0) - //this.teleport(new Location(500, 500)); - //Despawning not being delayed causes 3 errors in the console - AIPlayer.deregister(this.getUid()); - - //Npc Combat - if (this.tick % 10 == 0) { - if (!this.inCombat()) - AttackNpcsInRadius(this, 5); - } - - if (this.tick == 100) this.tick = 0; - - this.eat(329); - //this.getPrayer().toggle() - } - -} diff --git a/Server/src/main/java/rs09/game/ai/pvmbots/NoobBot.java b/Server/src/main/java/rs09/game/ai/pvmbots/NoobBot.java deleted file mode 100644 index 556e57eff..000000000 --- a/Server/src/main/java/rs09/game/ai/pvmbots/NoobBot.java +++ /dev/null @@ -1,54 +0,0 @@ -package rs09.game.ai.pvmbots; - -import rs09.game.ai.AIPlayer; -import core.game.world.map.Location; - -public class NoobBot extends PvMBots{ - - private int tick = 0; - private int movetimer = 0; - - public NoobBot(Location l) { - super(l); - // TODO Auto-generated constructor stub - } - - @Override - public void tick() - { - super.tick(); - - //Despawn - if (this.getSkills().getLifepoints() == 0) - //this.teleport(new Location(500, 500)); - //Despawning not being delayed causes 3 errors in the console - AIPlayer.deregister(this.getUid()); - - //Npc Combat - if (tick == 0) - { - if (!this.inCombat()) - AttackNpcsInRadius(this, 5); - this.tick = 5; - } - else - this.tick--; - - this.eat(329); - //this.getPrayer().toggle() - //System.out.println(this.getPulseManager().getCurrent()); - - if (!this.inCombat()) - { - if (movetimer == 0) - { - if (this.FindTargets(this, 5) == null) - this.randomWalk(5, 5); - this.movetimer = 10; - } - else - movetimer --; - } - } - -} diff --git a/Server/src/main/java/rs09/game/ai/pvp/PVPAIPActions.java b/Server/src/main/java/rs09/game/ai/pvp/PVPAIPActions.java deleted file mode 100644 index 25b6f6830..000000000 --- a/Server/src/main/java/rs09/game/ai/pvp/PVPAIPActions.java +++ /dev/null @@ -1,196 +0,0 @@ -package rs09.game.ai.pvp; - -import java.util.List; - -import core.game.container.impl.EquipmentContainer; -import core.game.content.consumable.Consumable; -import core.game.content.consumable.Consumables; -import core.game.content.consumable.Food; -import core.game.content.consumable.effects.HealingEffect; -import core.game.node.entity.skill.Skills; -import core.game.node.entity.player.Player; -import rs09.game.ai.AIPlayer; -import core.game.node.item.Item; -import core.game.system.task.Pulse; -import rs09.game.world.GameWorld; -import core.game.world.map.path.Pathfinder; -import core.game.world.update.flag.context.ChatMessage; -import core.game.world.update.flag.player.ChatFlag; -import core.tools.RandomFunction; - -public class PVPAIPActions { - - public static List pvp_players = null; - - private static final String[] trashMessages = { - "I'll do your bloody nan in m8", - "Your sister smells like a tuna sandwich", - "You suck at bridding bro lmao", - "Gf your bank :)", - "Just delete your cache ur bad", - "FFS mate get wrekt", - "Dylan is a better pkr than u, kid..l0l" - - - }; - - private static final String[] safeMessages = { - "Safe up n00b", - "No safe", - "Get rekt m8", - "Stop fkin eating scrub", - "Dw, you're gunna die anyhow.. :)", - "Either ur eating shrimps or I'm hitting high asf", - "Once i kill u wanna rematch?", - - }; - - public static void syncBotThread(final Player player) { - if (pvp_players == null || pvp_players.size() == 0) { - return; - } - for (int aip_index = 0; aip_index < pvp_players.size(); aip_index++) { - final AIPlayer bot = pvp_players.get(aip_index); - final AIPlayer[] target = { - pvp_players.get(RandomFunction.getRandom(pvp_players.size() - 1)) - }; - bot.getProperties().setRetaliating(true); - bot.setAttribute("dead", false); - GameWorld.getPulser().submit(new Pulse(1, bot) { - int ticks; - @Override - public boolean pulse() { - if (bot.getAttribute("dead", true)) { - AIPlayer.deregister(bot.getUid()); - pvp_players.remove(bot); - return true; - } - if (!bot.getInventory().contains(385, 1)) { - flee(bot); - return true; - } - //Inactivity logout timer. - if (ticks++ == 5000 && !bot.getProperties().getCombatPulse().isInCombat() && !bot.getProperties().getCombatPulse().isAttacking() && bot.getWalkingQueue().getQueue().isEmpty()) { - AIPlayer.deregister(bot.getUid()); - pvp_players.remove(bot); - return true; - } - if (!pvp_players.contains(target[0]) || !Pathfinder.find(bot, target[0]).isSuccessful() || !canAttack(bot, target[0])) { - target[0] = pvp_players.get(RandomFunction.getRandom(pvp_players.size() - 1)); - } - attackTarget(player, bot, target[0]); - //prayer(bot, target[0]); - eat(bot, target[0]); - return false; - } - }); - } - } - - - private static void attackTarget(Player player, AIPlayer bot, AIPlayer target) { - //If bots target is not himself we continue. - if (bot != target) { - //If they are in combat or attacking: - if (bot.getProperties().getCombatPulse().isInCombat() || bot.getProperties().getCombatPulse().isAttacking()) { - //TODO: Pray - Item weapon = bot.getEquipment().get(EquipmentContainer.SLOT_WEAPON); - if (RandomFunction.getRandom(25) == 1) { - if(bot.getSettings().getSpecialEnergy() == 100) { //TODO: Change 100 to their weielded weapons spec max amount - bot.getSettings().toggleSpecialBar(); - } - } - } else { - if (RandomFunction.getRandom(25) == 1) { - bot.attack(player); - } else { - //If a 1/50 chance is true, the attacker screams his opponents name hoping his team will dogpile him. - int chatRandom = RandomFunction.getRandom(50); - switch(chatRandom) { - case 1: - String target_name = target.getName().substring(0, 1).toUpperCase() + target.getName().substring(1); - bot.getUpdateMasks().register(new ChatFlag(new ChatMessage(bot, target_name, 0, 0))); - break; - case 2: - bot.getUpdateMasks().register(new ChatFlag(new ChatMessage(bot, trashMessages[RandomFunction.getRandom(trashMessages.length - 1)], 0, 0))); - break; - } - bot.attack(target); - } - } - } - } - - /** - * A basic flee method to run them to another part of the wilderness. - * @param bot - * TODO: Possibly make them run away and hop the ditch (I did not do this because we have no other actions than pking at the moment). - */ - private static void flee(final AIPlayer bot) { - bot.sendChat("Outta food m8! Off!"); - bot.sendChat("Ahh!"); - bot.sendChat("GTFO M8"); - bot.sendChat("Someone spec him!"); - GameWorld.getPulser().submit(new Pulse(1, bot) { - int ticks; - @Override - public boolean pulse() { - switch(ticks++) { - case 1: - bot.getProperties().getCombatPulse().stop(); - bot.getProperties().getCombatPulse().setNextAttack(RandomFunction.getRandom(10)); - Pathfinder.find(bot, bot.getLocation().transform(RandomFunction.random(-100, 100), RandomFunction.random(-100, 100), 0), false, Pathfinder.SMART).walk(bot); - break; - case 500: - AIPlayer.deregister(bot.getUid()); - pvp_players.remove(bot); - return true; - } - if (bot.getAttribute("dead", true)) { - AIPlayer.deregister(bot.getUid()); - pvp_players.remove(bot); - return true; - } - return false; - } - }); - } - - /** - * Handles the eating of the AI player bots. - * @param bot - * TODO: Possibly add more food choices. - */ - private static void eat(Player bot, AIPlayer target) { - Item shark = new Item(385); - //385 is shark, you can add more from there easier. - if((bot.getSkills().getStaticLevel(Skills.HITPOINTS) > bot.getSkills().getLifepoints() * 3) && bot.getInventory().containsItem(shark)) { - bot.lock(3); - Item food = bot.getInventory().getItem(shark); - Consumable consumable = Consumables.getConsumableById(food.getId()); - if (consumable == null) { - consumable = new Food(new int[] {food.getId()}, new HealingEffect(1)); - } - consumable.consume(food, bot); - bot.getProperties().getCombatPulse().delayNextAttack(3); - int chatRandom = RandomFunction.getRandom(50); - if (chatRandom == 1) { - bot.getUpdateMasks().register(new ChatFlag(new ChatMessage(bot, safeMessages[RandomFunction.getRandom(safeMessages.length - 1)], 0, 0))); - } - } - } - - private static boolean canAttack(Player p, Player t) { - int level = p.getSkullManager().getLevel(); - if (t.getSkullManager().getLevel() < level) { - level = t.getSkullManager().getLevel(); - } - int combat = p.getProperties().getCombatLevel(); - int targetCombat = t.getProperties().getCombatLevel(); - if (combat - level > targetCombat || combat + level < targetCombat) { - return false; - } - return true; - } - -} diff --git a/Server/src/main/java/rs09/game/ai/pvp/PVPAIPBuilderUtils.java b/Server/src/main/java/rs09/game/ai/pvp/PVPAIPBuilderUtils.java deleted file mode 100644 index e7a63b14f..000000000 --- a/Server/src/main/java/rs09/game/ai/pvp/PVPAIPBuilderUtils.java +++ /dev/null @@ -1,2795 +0,0 @@ -package rs09.game.ai.pvp; - -import core.game.container.impl.EquipmentContainer; -import core.game.node.entity.skill.Skills; -import core.game.node.entity.combat.CombatSpell; -import rs09.game.ai.AIPlayer; -import core.game.node.entity.player.link.SpellBookManager; -import core.game.node.item.Item; -import core.tools.RandomFunction; - -public class PVPAIPBuilderUtils { - - public static void generateClass(AIPlayer p) { - int combatType = RandomFunction.getRandom(2); - switch(combatType) { - case 0: - buildArcherStats(p); - buildArcherEquipment(p); - break; - case 1: - buildMeleeStats(p); - buildMeleeEquipment(p); - break; - case 2: - //todo: magic - setupWizard(p); - buildWizardStats(p); - buildWizardEquipment(p); - break; - case 3: - //max rune - buildMaxMeleeStats(p); - buildMaxMeleeEquipment(p); - break; - } - p.getInventory().add(new Item(385, 20)); - p.getProperties().setCombatLevel(126); - - p.getSkills().setLevel(Skills.PRAYER, 98); - p.getSkills().setStaticLevel(Skills.PRAYER, 98); - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - correctHitpointsStat(p); - } - - private static void buildWizardEquipment(AIPlayer p) { - int[] weapons = { - 1381, - 4675, - }; - int hat = -1; - int platebody = -1; - int platelegs = -1; - int gloves = -1; - int boots = -1; - int set = RandomFunction.getRandom(2); - switch(set) { - //Blue set - case 0: - hat = 4089; - platebody = 4091; - platelegs = 4093; - gloves = RandomFunction.getRandom(10) == 1 ? generateGloves() : 4095; - boots = RandomFunction.getRandom(10) == 1 ? generateBoots() : 4097; - break; - //Red set - case 1: - hat = 4099; - platebody = 4101; - platelegs = 4103; - gloves = RandomFunction.getRandom(10) == 1 ? generateGloves() : 4105; - boots = RandomFunction.getRandom(10) == 1 ? generateBoots() : 4107; - break; - //White set - case 2: - hat = 4109; - platebody = 4111; - platelegs = 4113; - gloves = RandomFunction.getRandom(10) == 1 ? generateGloves() : 4115; - boots = RandomFunction.getRandom(10) == 1 ? generateBoots() : 4117; - break; - case 3: - hat = 4708; - platebody = 4712; - platelegs = 44714; - gloves = RandomFunction.getRandom(10) == 1 ? generateGloves() : 4095; - boots = RandomFunction.getRandom(10) == 1 ? generateBoots() : 4097; - break; - } - p.getEquipment().replace(new Item(hat), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(platebody), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(platelegs), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(weapons[RandomFunction.random(weapons.length)]), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(generateNecklace()), EquipmentContainer.SLOT_AMULET); - p.getEquipment().replace(new Item(boots), EquipmentContainer.SLOT_FEET); - p.getEquipment().replace(new Item(generateCape()), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(gloves), EquipmentContainer.SLOT_HANDS); - System.out.println("WE ARE WEARING " + p.getEquipment().format() + " FOR " + p.getName()); - } - - private static void setupWizard(AIPlayer p) { - //final int SPELL_IDS[] = new int[] {1, 4, 6, 8, 10, 14, 17, 20, 24, 27, 33, 38, 45, 48, 52, 55 }; - p.getProperties().setAutocastSpell(((CombatSpell) SpellBookManager.SpellBook.MODERN.getSpell(55))); - p.getInventory().add(new Item(554, 1000)); //Fire runes - p.getInventory().add(new Item(555, 1000)); //Water runes - p.getInventory().add(new Item(556, 1000)); //Air runes - p.getInventory().add(new Item(557, 1000)); //Earth runes - p.getInventory().add(new Item(558, 1000)); //Mind runes - p.getInventory().add(new Item(559, 1000)); //Body runes - p.getInventory().add(new Item(560, 1000)); //Death runes - p.getInventory().add(new Item(561, 1000)); //Nature runes - p.getInventory().add(new Item(562, 1000)); //Chaos runes - p.getInventory().add(new Item(563, 1000)); //Law runes - } - - private static void buildWizardStats(AIPlayer p) { - int magicLevel = RandomFunction.random(80, 98); - int defenceLevel = RandomFunction.random(80, 98); - - p.getSkills().setLevel(Skills.MAGIC, magicLevel); - p.getSkills().setStaticLevel(Skills.MAGIC, magicLevel); - p.getSkills().setLevel(Skills.DEFENCE, defenceLevel); - p.getSkills().setStaticLevel(Skills.DEFENCE, defenceLevel); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - correctHitpointsStat(p); - } - - - private static void buildMeleeStats(AIPlayer p) { - int attackLevel = RandomFunction.random(80, 98); - int strengthLevel = RandomFunction.random(attackLevel - 10, attackLevel + 10); - int defenceLevel = RandomFunction.random(60, 98); - - p.getSkills().setLevel(Skills.ATTACK, attackLevel); - p.getSkills().setStaticLevel(Skills.ATTACK, attackLevel); - p.getSkills().setLevel(Skills.STRENGTH, strengthLevel); - p.getSkills().setStaticLevel(Skills.STRENGTH, strengthLevel); - p.getSkills().setLevel(Skills.DEFENCE, defenceLevel); - p.getSkills().setStaticLevel(Skills.DEFENCE, defenceLevel); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - correctHitpointsStat(p); - } - - private static void buildMeleeEquipment(AIPlayer p) { - int[] helms = { - 1163, //Rune Full Helm - 3751, //Berserker Helm - 3753, //Warrior Helm - 10828, - 1038, - 4753, - //TODO: No helm - }; - int[] shield = { - 1185, //Rune sq shield - 1201, //Rune kiteshield - 6524, //Obsidian shield - 8850, //Rune defender - 11283, //dragonfire shield - 14767, //dragon defender - }; - int[] platebody = { - 1113, //Rune chainmail. - 1127, //Rune platebody. - 10551, - 4757, - 11724, - 4720, - }; - int[] platelegs = { - 1079, //Rune platelegs. - 4759, - 11726, - 1075, - }; - p.getEquipment().replace(new Item(helms[RandomFunction.random(helms.length)]), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(shield[RandomFunction.random(shield.length)]), EquipmentContainer.SLOT_SHIELD); - p.getEquipment().replace(new Item(platebody[RandomFunction.random(platebody.length)]), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(platelegs[RandomFunction.random(platelegs.length)]), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(weapons[RandomFunction.random(weapons.length)]), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(generateNecklace()), EquipmentContainer.SLOT_AMULET); - p.getEquipment().replace(new Item(generateBoots()), EquipmentContainer.SLOT_FEET); - p.getEquipment().replace(new Item(generateCape()), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(generateGloves()), EquipmentContainer.SLOT_HANDS); - } - - public static final int[] weapons = { - 4151, //Whip - 4587, //Dragon Scimitar - - }; - - - private static void buildMaxMeleeStats(AIPlayer p) { - - p.getSkills().setLevel(Skills.ATTACK, 99); - p.getSkills().setStaticLevel(Skills.ATTACK, 99); - p.getSkills().setLevel(Skills.STRENGTH, 99); - p.getSkills().setStaticLevel(Skills.STRENGTH, 99); - p.getSkills().setLevel(Skills.DEFENCE, 99); - p.getSkills().setStaticLevel(Skills.DEFENCE, 99); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - correctHitpointsStat(p); - } - - private static void buildMaxMeleeEquipment(AIPlayer p) { - int[] helms = { - 3751, //Berserker Helm - }; - int[] shield = { - 14767, //Dragon defender - }; - int[] platebody = { - 11724, //Bandos chainmail. - }; - int[] platelegs = { - 11726, //Bandos Tassets. - }; - int[] amulets = { - 6585, //fury - }; - int[] boots = { - 3105, //Climbing boots. - }; - int[] cape = { - 6570, //Fire cape. - }; - int[] gloves = { - 7462, //Barrows Gloves. - }; - p.getEquipment().replace(new Item(helms[RandomFunction.random(helms.length)]), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(shield[RandomFunction.random(shield.length)]), EquipmentContainer.SLOT_SHIELD); - p.getEquipment().replace(new Item(platebody[RandomFunction.random(platebody.length)]), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(platelegs[RandomFunction.random(platelegs.length)]), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(weapons2[RandomFunction.random(weapons2.length)]), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(amulets[RandomFunction.random(amulets.length)]), EquipmentContainer.SLOT_AMULET); - p.getEquipment().replace(new Item(boots[RandomFunction.random(boots.length)]), EquipmentContainer.SLOT_FEET); - p.getEquipment().replace(new Item(cape[RandomFunction.random(cape.length)]), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(gloves[RandomFunction.random(gloves.length)]), EquipmentContainer.SLOT_HANDS); - } - - public static final int[] weapons2 = { - 4151, //Whip - }; - - private static void buildArcherStats(AIPlayer p) { - int rangedLevel = RandomFunction.random(80, 98); - int defenceLevel = RandomFunction.random(60, 98); - - p.getSkills().setLevel(Skills.RANGE, rangedLevel); - p.getSkills().setStaticLevel(Skills.RANGE, rangedLevel); - p.getSkills().setLevel(Skills.DEFENCE, defenceLevel); - p.getSkills().setStaticLevel(Skills.DEFENCE, defenceLevel); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - correctHitpointsStat(p); - } - - private static void buildArcherEquipment(AIPlayer p) { - int[] helms = { - 3749, //Archer helm - 2581, - 10828, - }; - int[] weapons = { - 857, //Yew shortbow - 855, //Yew longbow - 861, //Magic shortbow - 859, //Magic longbow - 11235, - }; - int[] arrows = { - 892, //Rune arrow - 11212, - }; - int platebody = -1; - int platelegs = -1; - int gloves = -1; - int set = RandomFunction.getRandom(2); - switch(set) { - //Blue set - case 0: - platebody = 2499; - platelegs = 2493; - gloves = RandomFunction.getRandom(10) == 1 ? generateGloves() : 2487; - break; - //Red set - case 1: - platebody = 2501; - platelegs = 2495; - gloves = RandomFunction.getRandom(10) == 1 ? generateGloves() : 2489; - break; - //Black set - case 2: - platebody = 2503; - platelegs = 2497; - gloves = RandomFunction.getRandom(10) == 1 ? generateGloves() : 2491; - break; - } - p.getEquipment().replace(new Item(helms[RandomFunction.random(helms.length)]), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(platebody), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(platelegs), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(weapons[RandomFunction.random(weapons.length)]), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(generateNecklace()), EquipmentContainer.SLOT_AMULET); - p.getEquipment().replace(new Item(generateBoots()), EquipmentContainer.SLOT_FEET); - p.getEquipment().replace(new Item(generateCape()), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(gloves), EquipmentContainer.SLOT_HANDS); - p.getEquipment().replace(new Item(arrows[RandomFunction.random(arrows.length)], 1000), EquipmentContainer.SLOT_ARROWS); - } - - private static int generateCape() { - int[] capes = { - 1007, //Red Cape - 1023, //Yellow Cape - 1019, //Black cape - 1021, //Blue cape - 1027, //Green cape - 1052, //Legends Cape - 2412, //Saradomin Cape - 2413, //Guthix Cape - 2414, //Zamorak Cape - 6570, - }; - return capes[RandomFunction.random(capes.length)]; - } - - private static int generateNecklace() { - int[] amulets = { - 1712, //Glory - 1725, //Strength ammy - 1727, //Amulet of magic - 1729, //Amulet of defence - 1478, //Amulet of accuracy - 6585, - }; - return amulets[RandomFunction.random(amulets.length)]; - } - - private static int generateGloves() { - int[] gloves = { - 1059, - 7462 - }; - return gloves[RandomFunction.random(gloves.length)]; - } - - private static int generateBoots() { - int[] boots = { - 1061, //Leather boots. - 1837, //Desert boots. - 3105, //Climbing boots. - 3791, //Fremmy boots. - 11732, - }; - return boots[RandomFunction.random(boots.length)]; - } - - private static void correctHitpointsStat(AIPlayer player) { - player.getSkills().setLevel(Skills.HITPOINTS, 10); - player.getSkills().setStaticLevel(Skills.HITPOINTS, 10); - player.getSkills().updateCombatLevel(); - int rangedLevel = RandomFunction.random(80, 98); - int defenceLevel = RandomFunction.random(80, 98); - - player.getSkills().setLevel(Skills.HITPOINTS, rangedLevel); - player.getSkills().setStaticLevel(Skills.HITPOINTS, rangedLevel); - player.getSkills().setLevel(Skills.HITPOINTS, defenceLevel); - player.getSkills().setStaticLevel(Skills.HITPOINTS, defenceLevel); - - player.getSkills().updateCombatLevel(); - player.getAppearance().sync(); - } - - public static final String[] names = { - "karamellioole123", - "sillyninja20", - "darkonecut0", - "mars_noob", - "volvovr0", - "gagton23", - "inkheart", - "sock_flavour", - "sophie72", - "reaper_4me", - "bessiedog", - "brknsprk22", - "whyuhackme", - "rayvano55", - "rayvano98", - "zaborgttm", - "warrior", - "madsbang123", - "christensen", - "theboz87", - "iqoigu2d", - "f4ll3n0n3", - "xbox360123", - "stijnkessel", - "kessel1996", - "genderoni", - "lolimawesome", - "amac109", - "downhill", - "citricabyss", - "ceesis", - "terry1000666", - "bink2468", - "roman1248", - "abcdefghijk", - "superchunklz", - "lizzie9", - "fast_reflexx", - "asherasher", - "rebagon", - "44b19n1v", - "staylow", - "nismo360", - "tornoc109", - "thunder20", - "crosby_8127", - "silhouette", - "moltenore3", - "lavabomb", - "feedu_arrows", - "soccer28", - "mindkampfers", - "notsogood", - "ashbacher7", - "tppcrpg7", - "michaelsyer", - "cue2hug", - "drewno58", - "j_p_13", - "111robinson", - "heyitstrea", - "mccain", - "doc_control", - "fartmaster", - "neonarg", - "b9501175", - "snorlax4", - "jasonchou", - "xgameboy95", - "craig9596", - "ojaste296lku123", - "sheltzor", - "karateboy11", - "makkiestone", - "billymon", - "blackspidder", - "sn1perh34ded", - "jerzeythugz2", - "trueset", - "pure_x_400askaa1234", - "mr_sgytkonyn", - "twoitem", - "1archerhbk", - "assinass", - "tharifica1", - "apgart00", - "fildherbn", - "freeze112", - "kno_way", - "loloklol", - "supermacho1", - "09101991", - "raptor8721", - "justindb", - "jolo5001", - "catfish", - "spiker991", - "qpwoeiruty", - "seasonsdawn", - "seasonsend", - "jartt2", - "jartt1", - "uber3pic", - "doodoo12345", - "rio1927ieman11", - "angered_nubackers", - "user_zim", - "zacharyh1", - "cool_kevin50", - "4194ka", - "freitty", - "gamecube", - "silver_knig0", - "yourmom1", - "beanroid", - "smoke47149", - "flitch289", - "nooder000", - "amazing_cake", - "iridium", - "aliffridzuan", - "ridzuan2000", - "bartez4", - "k4eo9ssi7", - "juxikeederast", - "d_man_5567", - "mod_richard", - "q1w2e1r2", - "be_kingless", - "hardflip", - "yami671", - "fbr114", - "rowelselidio", - "gagoako", - "haggishanger", - "football1", - "z_4_t_1_o_n", - "sxngaming123", - "simbojimbo", - "digeryd00", - "noob_10010", - "dragonoid798", - "qwerty798", - "2016", - "pk4lifefoo", - "logieboi", - "wichking", - "kyros60r0bl33mfzo", - "charlto1", - "fmgh2145mvplesjack", - "hiei179", - "shadowx123", - "seamus10990", - "danward", - "crusher16619", - "doremember", - "master15125", - "ninjas11", - "zarkotics", - "saphira123", - "skyler_is_on", - "lolbobjo", - "daniboom", - "12345dani", - "do_mhamai", - "eoin3646", - "rikuislove23", - "denver23", - "patacorow", - "globalfun", - "killer_ox08", - "scott08", - "persian_bossreston22", - "gold_runmoon", - "123456q", - "nosweet15", - "jefferson123 ", - "applecore17", - "mjc1997", - "sayin68", - "joshua123", - "gray258ancakes", - "somnus53", - "antant123", - "odysseu5", - "gccdu58txs", - "white1_ghost", - "0622842800", - "warriorasas", - "bordtennis", - "call911fro0b", - "232323hi", - "i_4_sp3c_k0", - "anning12", - "dante_dark3ossu44", - "nifeman20", - "fujifilm", - "&pika_power08", - "skiller2010", - "quharas", - "gogos123", - "keatson", - "dodgers5", - "karils_starilgd001", - "mjordan145", - "02092006", - "koth4356", - "1989919899", - "viperwind72", - "3iderct1", - "faeldora81", - "naruto816", - "colt_thunder", - "tc1215", - "bayat4life", - "ali1234567", - "daniel323a", - "kxb69qjx", - "1_rang3_pwns", - "hwdpkonrad", - "o1xaddicted", - "abc123", - "adam402", - "498750", - "gimberly8", - "mrcoolio", - "baister88", - "meatball", - "goodguard5", - "29a11b96", - "josh12508", - "j39256", - "bozzzerzzz", - "nmwhuzrc", - "volcomskate", - "volcom", - "jonny_ere_7", - "ince78989", - "pk_kinkyeachs", - "vlad867", - "vladstorm12", - "justinhigg", - "suilui62", - "beastblade12", - "hobbsey", - "sticklysnipe", - "bayview1", - "snake_1464", - "metalgear", - "parklane79laystation", - "ghtyrupekj", - "jackryan", - "hewitje", - "halloroan", - "pupucachu5", - "spencer4123", - "8bloodhollow", - "ilovejesus", - "hunting_slea", - "h3llfire5", - "dds_o_w_n_s", - "9933230", - "mankikned22", - "kikulita", - "skaleris3", - "skaleriukas", - "bluejay303", - "codrocks", - "bloodhalo11", - "11272000", - "maxsheld", - "91330451", - "jd4gray", - "johnny12", - "krisi129", - "langbestur", - "zadashi", - "gearsfan", - "jollyspace", - "451901", - "quekchose111", - "5bp9mg", - "maxsheld", - "91330451", - "frog1421", - "tomatos1", - "drk34695", - "chimpanze243", - "undead0wner", - "talald2", - "86251234", - "radicalluke", - "kelly55", - "lakertein", - "metheman", - "krissu127", - "hyundai1", - "jmannon00b1", - "cheese1", - "swirkstas", - "rainislopas1", - "gnarwaster1", - "qrhvoq549", - "loveburito", - "carter22", - "tiglasutru", - "t1o2y3o4t5", - "fangedbabyokemon1", - "pijuitshorty", - "marakasaya", - "mr_funky_121", - "joker45", - "g_man", - "william", - "vexraill", - "austin123", - "pbcharger_85", - "radilla1", - "thepureryan", - "121489ine", - "lukasky", - "lukecool", - "dinbolir", - "remember1", - "swe_nintendo", - "lew492car", - "cody52368", - "fr0nt1er", - "xxandoxx2552", - "liverpool1", - "i_aduka_i", - "lolowned", - "downlar", - "jjasjjas", - "harrrocksrisonbreak", - "cookies_ohh", - "noseboy", - "nickspie", - "semmy12", - "u_rock123412", - "themind", - "hi_im_tom9ooloop", - "keatermy", - "thomas98", - "exemped", - "ikbenyufei", - "sum1udontno9", - "kr0iznt0", - "dark_rune195", - "theoldnite", - "savagelump", - "kilosteak4", - "lakwit17", - "93444900", - "pl0xables", - "lemonade1", - "leeboy262", - "niniwee", - "benosigmaaperisima", - "kazokas7", - "lopas123", - "demonza1", - "will00115", - "lavaminer4", - "meandme138", - "twinkseypeshill5", - "idrinkshakes", - "rfyhyj6", - "johnymuffin", - "casey88", - "rempicool", - "admiraal1", - "celayer", - "bhboca2009", - "seflarious", - "teslatron", - "artedhghtun", - "freeze112", - "pur3k0911", - "footlong", - "cooldude_x5", - "toprak123", - "cartoon_101", - "kfauynoob", - "okas5", - "sittur", - "el_sudado", - "sudadera", - "joeymaster93", - "cookiej1", - "thedrewboy12", - "123123ha", - "savior_4_u", - "slutbomb", - "jiwonbae1", - "flameblaze", - "xjordankr96x", - "goodboy99", - "solomon1103", - "09102000", - "omfgitsemo", - "tr4p34", - "marsh450rototype", - "pellikanelliper", - "messidonasef", - "yoyododo", - "selesan", - "kovalev27", - "n0_def_own_u", - "hv650cou", - "swarnes", - "sntioi004", - "snakeboy756", - "0014702211", - "seaviper101", - "willow8520", - "bradd1808", - "smokey1808", - "quintanamore", - "momcatakers", - "ahmarman", - "doggydoodoo", - "war4more", - "stephens", - "m3ntal_sh0ck", - "nosam123", - "tinybird02", - "m1l1tary", - "kill_guys", - "jugheadellenn", - "janieboy2", - "kakhoofd123", - "koedijk1", - "lolliepop", - "uhh_dead_k", - "lehrman", - "36dragon20", - "izzi29040", - "spuddman17", - "nearhood", - "ironedsockoleystr1", - "hotviper6", - "applesnakes6", - "tyber3796", - "nintendo1", - "putther", - "g9768241", - "ynot_money", - "superdude10", - "pl0x____die", - "c1tyw1ns", - "rob1tooby1", - "awesomeman2", - "rsrownage", - "welcome01", - "smail154", - "economie", - "actualglory", - "hello123", - "x_gril8", - "timmed1", - "north1085", - "jjn2008", - "maximus_ivo", - "1210729", - "robzicles", - "sk8ordie", - "semanttinen", - "koipallo", - "zink22100", - "toshiba1", - "frylok_lol", - "baseballftw", - "flux_wolf", - "glowx111", - "haddon70", - "jamaican13", - "clivet_goth", - "lol1lol1", - "celsius91", - "jonkka123", - "kacj321", - "9hjgyt83", - "puzzlled456", - "4elderwand", - "moonbear98", - "regitllij", - "worsinksteeg", - "logisung35", - "kingescape22", - "7dejulio", - "sanka181", - "campbell", - "chikn_kikkr", - "dinkdink", - "zachdamaniak", - "godzilla", - "pk_mpskiller", - "309251270", - "pukkajoep", - "sk1ttl35", - "edparks10", - "firemonkey4", - "sasarrus", - "superman1", - "900_monster", - "tealcrowd8", - "sonicboom367", - "wreckem", - "burnt_c", - "shadow123", - "lv_egils", - "qwerty12345", - "thorodd", - "zgergo", - "hieveryone21", - "snakesnakeoitsas", - "neo34rd", - "yl2bfbml", - "tobi5q", - "fredzio0", - "qwerty2k3_n2", - "allister3", - "james13975", - "movingon", - "im_adored", - "99str", - "magicpinga12", - "freminik", - "chirinako", - "miraculousmuppet", - "joshj304", - "m0t0r5h0w", - "valor226", - "empire2", - "elliott9900", - "meggie26", - "kiteofdark", - "ralph321", - "kyrzani", - "wsl63069", - "0nly_4t_he4d", - "marcao18", - "kernivore", - "born2bewild", - "1_jeterfan", - "goatmilk", - "killer_gomez", - "0007779", - "sto__joni", - "miljoona1", - "kittehgod", - "familyguy5", - "airman521", - "qwerty521", - "draskiller", - "123579jf", - "good_guy2222", - "jsl1983", - "macauqe", - "kabbible", - "the_magius", - "steven86", - "a007lex1", - "shadow581000", - "fearless264", - "61694jjl", - "trevor600000", - "trevorlee", - "leimz", - "konnad123", - "mblais5", - "nida17", - "r_0_b_1annkook123", - "hheadstrong", - "tremayne", - "goyzman", - "jennifer123", - "xleet_ninjax", - "zachyb11", - "adamdude333", - "adam1997", - "saat_pataa", - "cra2f52z", - "crazyidiot70", - "jellybean", - "plasma_guy4", - "maxpower", - "taohealin", - "insane1992", - "uhh_omg_obby", - "llop6123", - "edrash1", - "alenho", - "kent688", - "fghjkl46", - "123erer0", - "rustydog23", - "monstrs23", - "roblox123", - "soldbuffalo", - "benxharris", - "coen42", - "mh2agewi", - "specialguy16megama", - "jo0_my_b33ch", - "volcanic1", - "stany35", - "220198th", - "motas23", - "keese123", - "swordblood3", - "moomoo3", - "davyandicall", - "shakira", - "paivmonster", - "seven77", - "sharpair", - "a51thetruth", - "gabo2oo4m", - "demon_ftwz", - "chicken1252", - "goodguard4", - "29a11b96", - "phonix260", - "dragon123", - "bencebence1", - "19960227", - "trainsgomoo4", - "killhill", - "lightness178", - "xdpowerxd", - "magican_owns", - "0204492600", - "sly_155", - "dragonballz", - "ssj4gogeta95", - "eggnogg871", - "kerfoogle", - "football09", - "mattfrank7", - "1azsxdcfvgb", - "invaliid3", - "maolenmunn", - "arkanoid0", - "ftred432", - "anonoumous1", - "00100101", - "i_have_wingz", - "thibeault", - "wolf_of_warr", - "hurricane", - "rauan78", - "mental223", - "kay_0wned", - "9971282", - "marththemage", - "ssbmrules", - "hcberryblitz", - "uzumaki", - "beast_rage9", - "carbine666", - "deadlydude46", - "aardf1993", - "sharper_arro", - "imawesome1", - "unholy1zero", - "1w3e4r5", - "i_pkernoob_i", - "kirkyisko", - "stift8", - "jaapstam200", - "takeda_iesyu", - "h0lmg4rd", - "im_to_low", - "england123", - "viniciusrub", - "1224abb08e", - "harris_0066", - "james0066", - "daretorparn", - "volvo245", - "didzydang", - "hduerw", - "idskillet", - "ilovehalo1", - "cows_moo34", - "bigbang6", - "el_brento9", - "nightwing", - "fireshot_co2", - "bestest", - "king5646uppylove", - "max2531oepchinees", - "kain581", - "iecsf3hm", - "heffman_13", - "jl19605", - "peep310", - "ilovesanta", - "agentds7okerface77", - "kurithia", - "readytodie", - "ozzy_496", - "shebagirl", - "evilpk999", - "hidalgo", - "joker67tny", - "demilover", - "putles5", - "lacina100", - "redstone177", - "bb123bb", - "1hit1kill567", - "1456327", - "whiplashfan", - "suzukits50", - "vyndirya", - "sjzipje96", - "soapthrail", - "killzs11", - "i_hang_kids", - "circaman1", - "jason9918", - "jasonw11", - "austinz611", - "azorn611", - "zumerock", - "kirara45", - "abyssalite", - "un1versal", - "hellfire33k", - "j067946409", - "iron_vs_maul", - "notrated7", - "deadly_ghoul", - "chad1990", - "samie497", - "walkersv", - "sir_st77", - "94387747pablitoz", - "spijderkat", - "vissen24", - "blikbiermine", - "medion123", - "trixdig", - "nixon995", - "dragonwar729", - "dragonwar123", - "sc0rch1n_2h", - "jagvet66", - "apex_jrkspypk1", - "leynell", - "tresz134", - "blocky_ownz", - "ryan006", - "king_batty_s", - "godzilla", - "very_bigfoot", - "freded", - "slyestcat", - "zared45", - "loko3610", - "lucozade12", - "edwarrior317", - "thunderbolt17", - "quietatrange", - "alec123", - "0_0_0wned_00", - "doumdoum11", - "jaxnarb", - "darkness1", - "achilles0009", - "nathanok", - "r4ngepr0fi", - "leidinger", - "torbjorn6", - "google25me25", - "42_to_doom", - "leeong05", - "jammer8009", - "babybear", - "standi96", - "schakal1", - "sucuraboii27", - "ducks66", - "15_years_now", - "bleachfan", - "xuan_yu31", - "dcvhhvcd123", - "jazabar", - "772892ex", - "arch_4_dutch", - "zwart123", - "dizzy_loot", - "14racing", - "grimmm125", - "budgie88", - "chrisj144", - "chrisj92298", - "sir_arfa", - "arfaiscoolio", - "pvp_rangers2", - "skaiciuokle", - "aka_t_rex", - "kingdomkey0", - "uncletom96", - "cheese96", - "matrix_men33", - "matukka", - "haleyboy1", - "charlie21", - "roooooosa", - "kakajunn4444", - "sacniv_zzzokemonas", - "sint_gabriel", - "iamsogoodnow", - "nightwolf06", - "thelandshark", - "sirsparkles1elling123", - "sergioshm", - "wsaq3214", - "sxe_ickis", - "32210t86p", - "sterling1717", - "calvin1", - "dwarfman666", - "mynameis", - "romeo_beller", - "jess987", - "bandion", - "elhipfop", - "adam_josiah", - "vultures", - "bloodydruid3oopklol", - "majin125", - "q78j2rps", - "averykc", - "woodshirt", - "chemical711", - "linkhero", - "lord_fis0", - "hejhejhej", - "xvim999", - "tazsucks", - "colinmacray", - "cool123", - "zs102", - "funkytown27", - "croston10", - "jacob7767", - "2669331", - "charlto1", - "fmgh2145mvplesjack", - "&adam_c73", - "bamboozled", - "thegoge", - "hot123qw", - "puzzlled456", - "4elderwand", - "jrtiger297", - "zekerdog1", - "damexican99", - "1124phc92", - "tonganboyz1", - "ironman54", - "molson_1903", - "y8h9i20j", - "ketchupp9", - "mustard", - "shongo3258", - "thunderbolt", - "zammorak202", - "54126635", - "sword395", - "link_707", - "joshua12397", - "phenns", - "robots100", - "lucc666aspoort16", - "luukielakke", - "feyenoord", - "rangeown1123", - "joshienewtro", - "fennell100", - "bobdylan", - "junitre1", - "hidare22", - "slasher954", - "budflip12", - "depredad0r", - "656565", - "shadowzrs", - "narut0123", - "grimmick15", - "gowrangaownz", - "ultima_9899", - "1337master", - "dominzdrac", - "xxrunxx34", - "sinduko", - "baltimore", - "machoman275", - "y4ou21", - "ahmedspy", - "ahmed1992", - "ronnie19l", - "gilplatt97", - "evil_miedo", - "88nst0rm", - "ejaeger99", - "lilmanas", - "oozaru66", - "sanctuary", - "dima638arool123", - "nija646", - "luke1998", - "ditto110", - "catdog97", - "ebfft", - "ekonesone", - "morten_aj", - "sootyimpy11", - "money_boy688rton100", - "happyheelas", - "schema36", - "samyett", - "flapula123", - "tony634ash12", - "thedog77", - "pascals123mgomgomg", - "ikrissu", - "eestimaa", - "patrsa", - "4po2sj", - "morten_aj", - "sootyimpy11", - "danorah", - "coolcat60", - "crazywiteboi", - "g5x74m8ss", - "element11123", - "25193469", - "sawyer443swd1994", - "pomojoona", - "seliseli99", - "yanumba1boi1", - "43gb2im4", - "that_guy503", - "whatsdoin", - "glennneke123", - "cool123", - "revolution04", - "330330", - "ryanl809", - "asshass1", - "gh0stsnyper", - "chopper7", - "pyro_fyro_0rinceton", - "onilink992", - "skyrim1234", - "emsixteen", - "19890910", - "taeed24", - "assassin12", - "vi3t0wnage", - "wolfpack450", - "swarnes", - "sntioi004", - "lppalscore", - "thebob55", - "dhuurfa", - "roflitsme", - "astizzz", - "58912b50", - "manta566", - "koirahullu", - "robin5290", - "jameswalker", - "setiar1", - "jesus123", - "hej", - "abbcab", - "smegomeister", - "sammson98", - "dee_alster", - "mynameisbob", - "schadoxx", - "hell4hell", - "pk_mauzeris", - "12211995", - "sheepeater9", - "knauer12345", - "kartunez", - "143256a", - "machado123", - "jayhay22", - "jakee_bum", - "4445poop", - "smurfturf248", - "jzadams", - "arr0wpl0x", - "wiirules1", - "ryan01234", - "donald21", - "juoppoeki", - "asami789", - "dante_dark3ossu44", - "joseph999159", - "shadow1", - "rubini98", - "nutella1998", - "lazyfaith", - "qgy2o6", - "mrwreckedem", - "soccer1", - "ty_the_ninja", - "icychill", - "blackeye446", - "simonv3", - "logiemac11", - "maceachern1", - "short_tastic", - "blink182", - "pops_mahone", - "whitebtii", - "war_eagle47", - "mischief", - "qazross", - "dread46", - "13wesley13", - "warfight", - "hellz_rader", - "landman", - "dakatt13", - "nickname", - "poop_o_nator", - "0901257", - "nummy_flame9", - "magemage", - "ads784", - "bellonfire", - "werslty", - "tyler923", - "bowslinger_9", - "789987455", - "chainmall", - "jackson12398", - "gurglesprainennydrop1", - "legyplegyverboard99", - "junkyboy55", - "bindoosd", - "gaomaster", - "xuanhan", - "danielmedvec", - "123spill", - "oddly_alive", - "newyork", - "babababoe", - "runskape", - "bigdunk69", - "soccer13", - "cat_prince25", - "rockman", - "paxton269", - "22drp88", - "uchihazen", - "ihateyou111", - "expo136", - "alexpass", - "peliset", - "jfas97gv", - "sords_4_life", - "1011657", - "krazy_kat575", - "tigerflame", - "aligindahose", - "killforfood", - "impzoren", - "enter123", - "dylan00117", - "hotdog10", - "bisinji", - "rustysam", - "tangle_golen", - "02061996", - "jijdwaas", - "theelord", - "varduka", - "apina19", - "chinadarkelf", - "morrowind", - "kickball83", - "ilovekayla", - "bradwoodward", - "brad5420", - "kriznar56", - "machupichu56", - "dezzilisk", - "coldocean", - "jorieboy3", - "lwn13jk", - "joneliux458", - "5jega55", - "celayer", - "bhboca2009", - "will753357liver4793", - "gpunks3", - "gmschool", - "therayman940", - "buddyboy", - "schulpy", - "chelsea1", - "madfrk2222", - "mmrabb1", - "mattiege", - "buster98", - "monsterdany", - "fs7312kp", - "eldden", - "252 625 26", - "xbl33s_pk3rxortugal", - "grotsnik4", - "skulltaker", - "peaceweazer", - "sta10stik", - "jordanator2", - "maddydog1", - "indomezu", - "indasunay8", - "chainlink66ieisgood11", - "xchichimanx", - "babychich", - "rugissement", - "glen123", - "slayer78110", - "calcetin", - "drakeaumann", - "eminem45", - "voxyvax8563", - "konvict", - "niklasvegas", - "videohai72", - "elliotorin", - "dadcabsxxx", - "cw_range", - "clanwars", - "saynoob", - "holland5", - "fattyman_12", - "77vettee", - "tryharder4me", - "lolatmyname", - "native_ta_50", - "blood4life", - "xchichimanx", - "babychich", - "medevil_troy", - "bobbobster6", - "aolh8i", - "wildboy1888", - "9118747", - "macacox", - "12touchsuperett", - "sonny585", - "77vettee", - "theprorspker", - "1a2s3d4f5", - "The Old Nite", - "94cm442modrak96", - "north_omaha", - "southomaha", - "ruindungeon", - "fearoth", - "gpgard15", - "homies01", - "kaz123kaz123", - "bieniak0048", - "bartez4", - "k4eo9ssi7", - "myroyalwings", - "compact1157", - "godawgs08", - "dco14", - "baddiekins", - "gtrhro511", - "devilman651", - "georgekk9", - "zain_winters", - "158491122", - "vovakova", - "551879321", - "mr0sharkie", - "136qwerty136", - "tylerrockis1", - "yoyobaby", - "bbmonke1honglu1", - "armadylz_x", - "wtfyounoob", - "fille809", - "0763595260", - "mansonroks1", - "manson1", - "dubstepparty", - "lmmikjki", - "uniwide", - "darkmage", - "mandude65", - "manduderules", - "don_dalton", - "bobutberg", - "biscoito77", - "15181996", - "munkki345", - "dfzrbrm7", - "zarocks2", - "henry6679", - "nikdx", - "99long", - "smilly48", - "blackout22", - "im_not_afish", - "1wiiwii", - "javiercmh", - "teno8181", - "ancient_ttam", - "shooter12", - "str_poiss10", - "k2tlin", - "segraps", - "12qwaszx", - "nephew31", - "hubbabubba", - "guthix2569zzyjosh1234", - "rulxman", - "singapore", - "frozenax7955", - "noodles", - "terumpk1", - "hello101", - "xyameax", - "bert1127", - "scottstimo", - "sabop8", - "destructo361", - "13461618", - "nikdx", - "99long", - "khanpop1", - "khan2662", - "lilboibryan", - "dragon123", - "benjo171", - "spireite1", - "king___joel", - "monkey33", - "kukko12", - "kukkeli12", - "swanepoel101", - "luke081295", - "mobuis_three", - "mommys4", - "zorzacken", - "hookedon", - "feetsoup", - "forrest11", - "lilsaint343", - "0akwood", - "krisalix", - "karadic", - "saisseh", - "miskaman123", - "eckbulldog", - "ecknick2510", - "cruel_guy2", - "coolguy2", - "jawad1144", - "soldier123", - "sebber43", - "kiwiiscape", - "darkshiv", - "wert0980", - "sp3c_m4ul3r", - "covcov21", - "rhinaboy", - "dragon465", - "crazy_nut45", - "9687241", - "trx_despair", - "thethethe123", - "x1atcha", - "anthony", - "mr_nart", - "epicfail", - "marti1101", - "redfaction", - "paulohare", - "superman1", - "m4_0wns", - "juska123", - "coopershaw14", - "13scooter14", - "viper_snake", - "superfluous", - "fender_love", - "devoncallme", - "thorax777", - "stilton1", - "reese55rinter0", - "flyflip", - "jarrod123", - "blackeye446", - "simonv3", - "sircoolio", - "stillsnoopanddre", - "zimza_toes", - "leonard9", - "raza838", - "deadlove", - "jamsinkereewee50", - "jatanoma", - "lolnoobs1", - "starcat2002", - "i6560344", - "tarapita", - "ud2hnx6q", - "xcowboys", - "cowboys458", - "elgaro12", - "83ed04374", - "logrono23", - "logman23", - "grundledib", - "m3ath00ks", - "ballum2mega123", - "1w1ll0wna", - "thebrazil", - "patacorow", - "globalfun", - "savtej89", - "elkgrove", - "darth_nome", - "5ofclubs", - "tiili10", - "07010701", - "u_said_stick", - "ibanez28", - "lolxman123", - "qwerty123", - "rebel_goon", - "chrome18", - "shaunth3pur3", - "whatthe", - "ruagamer1212", - "nothing1", - "strownedyou6", - "lolnoob", - "willroley", - "hdw77k69", - "shortd00d", - "d1014d", - "mr_dark720artypooper", - "copadon", - "girordot", - "converse_con", - "bunny123", - "shallowspace", - "tums9182", - "xxlpad", - "arnis1996", - "camo124501", - "abcdefghijk", - "i_druelennythug", - "bonebreakerrikksuger", - "karma_rebornpaassss", - "katastrophi4", - "wrighton5", - "s_n_x_w", - "thatiscool", - "brusio", - "516967853", - "snakeboy756", - "0014702211", - "audiomonk", - "drumstick", - "sidekik123", - "liban123", - "nguyen374", - "nguyen1996", - "i_agsu_i", - "jsjugb69", - "jlventre", - "denmarka4", - "porto410ote1212", - "carltyler1", - "megadeth", - "batzo", - "qwerty88", - "crystalfang3", - "devin113", - "lvl50_attack", - "cherrim012", - "kristaps288", - "9792218", - "rockyroller3", - "harrytate2", - "karrashimo", - "never122", - "necrovolt", - "solovino1", - "addpoke", - "hpcdrt45", - "hotsauce4299", - "a1b2c3d4", - "elblelbl", - "djscratch", - "spiderman_o", - "kabsa23g", - "grenade18", - "goofygoober", - "blueguy8989", - "digimon8989", - "dusty_granny", - "naikyaone", - "ffs_i_say_no", - "erik123", - "my_str_maax", - "lukinhas", - "tankbuster97", - "tanksmash2", - "eemuman", - "nakkipate", - "pk_zorbes", - "mor1990", - "dgfriend5", - "456789abc", - "twisternick6", - "jason22", - "alan22589", - "gotmoney1", - "noob_karil3", - "ee11ee11", - "elmo909", - "focus123", - "swordfury40", - "stonecold9", - "rey_rey_6116", - "metsss11", - "rebagon", - "44b19n1v", - "lava_viper_6", - "lavaviper78", - "taryn_blue1", - "taryn71", - "pluralgarths", - "frederic123", - "skeloperch", - "zombieperch", - "verrrtigo", - "karolekas", - "fuhq247", - "6423694rocky", - "bnarney", - "clicker882", - "newbie882", - "str_bonage", - "minemunni135", - "brsnip3rlapster10", - "orangie_boi", - "jamesd23", - "legendy3", - "ubernozle1", - "maulz_w_t_f2", - "lilzoee", - "flyman821", - "tomtiger647", - "fishizle", - "hellomoto", - "sir_hepuli1", - "j0n10nh0t0rn0t", - "knight_alam", - "tors66", - "stavar111", - "ausdaniel", - "bulldogs1", - "o_he_shot_me", - "fuckhead", - "dan_10567", - "dragzxasqw", - "jeze666", - "minarell1", - "the_a97", - "romeydog", - "thegringo44", - "smdsmd44", - "dale_89", - "2215077", - "chrisroscher", - "jagex13245", - "rabye_str", - "hopk1t02", - "killangel0", - "cheatx101", - "grunt628", - "asshole1", - "wolf_boy247", - "blompee123", - "p_k_e_r_1_0", - "mustang1", - "99killerbull", - "fireman", - "jbird197", - "jistheman12", - "f__t__f", - "hahamines66", - "lkjhgfdsa420", - "charlie1", - "ilovehighlvl", - "sedef4", - "napplesauce", - "tony1243", - "biowarrior11", - "jmaj6722", - "klansman5", - "young10", - "dawnodarknes", - "redalert", - "negglesolbones22", - "garrdrenn1", - "gd2005", - "draognzboy", - "zippmeup", - "oseart55", - "starwars501", - "xfrightknite", - "jlidd8990", - "master_pk260skar123", - "3meister", - "dragon13", - "madevillemon", - "20111993", - "cupit11", - "harinton7", - "xrapidclawx", - "jordie4", - "aurocks14", - "310051552", - "dombomagexd", - "midweek", - "falconfan_24", - "battlehero96", - "charkrit019", - "apple1901", - "duongmaster", - "johnny07", - "recon783", - "eraserface", - "faxxx1", - "nightfall64", - "mrjiggles25", - "7415001", - "zarm3000", - "xzsawq67", - "final_pure_g", - "zammy88", - "redfox280attrock", - "rodrigo_g_m", - "daynnight", - "mag3_kill4s", - "magepwnsu", - "prime_maggot", - "almost1", - "elkalibre", - "b0n3cl1nkz", - "radi100", - "kamalkamal1", - "i_newarcher", - "nakniki1", - "lord_shunoby", - "2615948", - "stinkerror", - "dragondz", - "crusher16619", - "doremember", - "3_run_range", - "11011997", - "robo1rocks", - "rocco1998", - "tomcat975", - "hermano123", - "sarlon7", - "irish001", - "aznballer66", - "9312025", - "killers455", - "matthewmjk", - "desparo2222", - "yoelmejor", - "md650epa1", - "gonzalez", - "inferno368", - "rectamos", - "aced52", - "iwashere321", - "goblin5530hjok123", - "h4x_pl0xz0r", - "suzukirm85", - "jessinator18", - "hamedarash", - "uzi_of_doom", - "8401397", - "sotired", - "tootfart64", - "alphazone123", - "ankouisme123", - "daewoo45", - "joshowns", - "gundymonster", - "meow111", - "acidacre", - "kappa100", - "boeman75", - "ethsaq2", - "yorotomaru", - "qwopzxnm7913", - "im_not_afish", - "1wiiwii", - "2rubbish", - "muslim786", - "boomikiller", - "daco2023", - "knight_988", - "wearefamily", - "corbo999", - "whiterat", - "yaranzo5", - "keller18", - "nick4998", - "jnrc3271", - "rizeline55", - "hradhrad", - "lsufreak9", - "lsutigers1", - "lost_pker222", - "facebookrule", - "napplesauce", - "tony1243", - "13wesley13", - "warfight", - "chirinako", - "miraculousmuppet", - "tanked_you_l", - "qazwsx123", - "spence587", - "spencer", - "crabs_magee", - "reaperr7", - "kingspell", - "969896250", - "bewareof_me", - "200102494g", - "grundith", - "jadranovo05", - "numeris14", - "goblinn8", - "theepicscout", - "sonic44", - "&phat_dood5", - "briansucks", - "momrocker", - "nutmeg60", - "sp_i_r_i_t", - "1heehtam2", - "one_secret", - "firedoor56", - "wizcoltt", - "merlinnus", - "archebowz", - "bn0du7cs", - "outoftimewon", - "snapple12", - "gavistire", - "098665chaz", - "k_o_sorry", - "cristianor7", - "masta395", - "indy340", - "alvaroscary", - "killa94", - "mr_gandolff", - "1968camero", - "wizkidvic", - "uk3dbg", - "dgenx21388", - "wwefan1994", - "printingman", - "kopieer", - "humper123479", - "mikey97", - "davydude2", - "92thesnack92", - "pure0292", - "king1234", - "1_h8_n3rdz", - "bedtime", - "caveman422", - "ilikepie87", - "emosocks1", - "5496931", - "g2uypie", - "enok210", - "workrange_o", - "latefriday", - "surplus99", - "shabahang", - "jonnathan002", - "jonny002", - "132kickflip", - "heelflip", - "andrewfly89", - "roland123", - "&snypermatt69", - "canucks2012", - "youdie111", - "1moretime", - "dannyhxdman8", - "theend1", - "g__f__d", - "2fast4you", - "grundledib", - "m3ath00ks", - "zalvose", - "assassins", - "gangstabros8", - "master13", - "supanight", - "leonard12317", - "thefurrymage", - "hotrod1994", - "tim_but_dim", - "1994tyrer", - "woferiukas", - "deividas", - "failedgull", - "goupia123", - "inferno_1060", - "vtech1060", - "junk_king33", - "junkguy", - "racer_jaret", - "callofduty4", - "westorz", - "741825963", - "zenachue", - "bomber357", - "r4ngepr0fi", - "leidinger", - "kiryu36", - "leo8lion", - "monk_fights", - "4991diddly", - "boggom_8097", - "garret1998", - "svensktsnus", - "asdaasda123", - "ruudinho10", - "hans19953109", - "eltacolad", - "bartlett", - "esrb5", - "junk_king33", - "junkguy", - "vanquishwolf", - "hubertas", - "w_3_s_c_0_t", - "dogtown4life", - "10hp_clans", - "zinedine", - "vader11567", - "thunder1", - "rempicool", - "admiraal1", - "5cripter", - "roverdog123", - "stallion918", - "5489621", - "zeroz_pure", - "buster77owned123", - "north_omaha", - "southomaha", - "alexwars400", - "starwars4", - "pureskill714", - "raheem600", - "molson_1903", - "y8h9i20j", - "arromin", - "scarm4a1", - "ravenangel1", - "lancaster", - "willheath20", - "canuyo2", - "smokadadank", - "5433285", - "blkchocobo", - "shalico101", - "envious_soul", - "setcapmoc6", - "shepowndu", - "sll41ygi", - "shoot_here2", - "triops1029", - "bananaboy441", - "mieszawski", - "pur3iwillbe", - "monkeystew", - "toddy_the_pk", - "brosis09", - "logrono", - "gorillazfgi", - "b1itz3d", - "samsung90", - "blakkwizard", - "mythodea", - "toke223", - "hamster223", - "guyman123890", - "donkeykong", - "riduan34", - "lekurde", - "desiver2", - "throw80", - "silver_gunn", - "masteravery", - "darkhawk744", - "cocoman6", - "c0c0nutmilkeatrick0", - "&dragon_j86", - "1234567890a", - "steriili_pk", - "arsk4", - "c_robert_t", - "monster1234", - "sirpericlesmfgwtf", - "kiill42", - "your1zax", - "goliathsnail", - "illidan", - "balcattaboy", - "corbin94", - "vereza", - "d3susama", - "&fort_40", - "moonlight7", - "bobsmith909", - "kellyrocks", - "idirim", - "rennmaus358", - "latirem", - "muthsera", - "pur3man_v10", - "duckcow1", - "kanpar2", - "vinimi", - "slomdapom", - "k8s2e7g4", - "hi_on_420", - "dillweed", - "zellanisixy3000", - "tozzel", - "toypaj", - "triblouge", - "carsa100", - "texasdingoasswd123", - "donkie90", - "nicolas123", - "mag3_pur3_ko", - "hayesbonin", - "zedukas_x", - "eligijus", - "cbuity", - "code515396", - "wardmathias", - "ritabob", - "dubert4", - "rooney11", - "throwchance", - "chance5", - "karamellioole123", - "sillyninja20", - "darkonecut0", - "mars_noob", - "volvovr0", - "gagton23", - "inkheart", - "sock_flavour", - "sophie72", - "reaper_4me", - "bessiedog", - "brknsprk22", - "whyuhackme", - "rayvano55", - "rayvano98", - "zaborgttm", - "warrior", - "madsbang123", - "christensen", - "theboz87", - "iqoigu2d", - "f4ll3n0n3", - "xbox360123", - "stijnkessel", - "kessel1996", - "genderoni", - "lolimawesome", - "amac109", - "downhill", - "citricabyss", - "ceesis", - "terry1000666", - "bink2468", - "roman1248", - "abcdefghijk", - "superchunklz", - "lizzie9", - "fast_reflexx", - "asherasher", - "rebagon", - "44b19n1v", - "staylow", - "nismo360", - "tornoc109", - "thunder20", - "crosby_8127", - "silhouette", - "moltenore3", - "lavabomb", - "feedu_arrows", - "soccer28", - "mindkampfers", - "notsogood", - "ashbacher7", - "tppcrpg7", - "michaelsyer", - "cue2hug", - "drewno58", - "j_p_13", - "111robinson", - "heyitstrea", - "mccain", - "doc_control", - "fartmaster", - "neonarg", - "b9501175", - "snorlax4", - "jasonchou", - "xgameboy95", - "craig9596", - "ojaste296lku123", - "sheltzor", - "karateboy11", - "makkiestone", - "billymon", - "blackspidder", - "sn1perh34ded", - "jerzeythugz2", - "trueset", - "pure_x_400askaa1234", - "mr_sgytkonyn", - "twoitem", - "1archerhbk", - "assinass", - "tharifica1", - "apgart00", - "fildherbn", - "freeze112", - "kno_way", - "loloklol", - "supermacho1", - "09101991", - "raptor8721", - "justindb", - "jolo5001", - "catfish", - "spiker991", - "qpwoeiruty", - "seasonsdawn", - "seasonsend", - "jartt2", - "jartt1", - "uber3pic", - "doodoo12345", - "rio1927ieman11", - "angered_nubackers", - "user_zim", - "zacharyh1", - "cool_kevin50", - "4194ka", - "freitty", - "gamecube", - "silver_knig0", - "yourmom1", - "beanroid", - "smoke47149", - "flitch289", - "nooder000", - "amazing_cake", - "iridium", - "aliffridzuan", - "ridzuan2000", - "bartez4", - "k4eo9ssi7", - "juxikeederast", - "d_man_5567", - "q1w2e1r2", - "be_kingless", - "hardflip", - "yami671", - "fbr114", - "rowelselidio", - "gagoako", - "haggishanger", - "football1", - "sonderby", - "banjomus", - "sagar448", - "heroes12", - "windkid62595", - "lilly117", - "kacj321", - "9hjgyt83", - "sly_ninja80", - "waynegod13", - "discombobu99", - "rocky34", - "zorontu", - "xtaylorx", - "zezimaki", - "ilovelordi", - "joey7x", - "kaleb8598", - "kruiness", - "daisymay21", - "paul77777izzapizza1", - "cow_hearder", - "kingdrag", - "lama_007", - "trojans1", - "helslayer11", - "roblox11", - "knifebloody", - "1092310923", - "dansendeaap", - "uiensoep", - "pure_exz", - "29038995scotland", - "theysconator", - "ysbrandve1", - "chrissy_booy", - "egghead", - "supreme1511", - "landis1511", - "tharujusassword123", - "jdablada", - "ugotskills", - "kewl_kid", - "killer99", - "nicknack60", - "choffee12", - "a007lex1", - "shadow581000", - "ecmxflawless", - "twenty8", - "roguewolf33", - "firefox101", - "kaare83_2", - "korsvegen", - "da_king1295", - "xemnas1", - "airwalk285", - "archman", - "sir_kieran12", - "spiderpig08", - "fasterthanyu", - "asdflkj", - "lihtsaber2", - "joe00224", - "fortress170", - "centurion", - "youmeyou4", - "laxworld", - "xxmrfixitxx", - "killer55", - "morags", - "ericolde", - "e_a_r_l_y_k0liverkerr", - "benno_rules", - "lotrftw5", - "embrach", - "meier007", - "xxlpad", - "arnis1996", - "spike8342", - "knuckles", - "spit_fire469", - "tuesday23", - "jonahmonk", - "blackma9ic", - "manmage247", - "kingcoke", - "ourkornalmer64", - "paulypauly22", - "chickenpoo", - "kis_a_legend", - "samtr0n", - "amigos39", - "blackhole", - "abc12pee", - "zman1123", - "mr_frost22", - "bubby5522", - "lauren_maher", - "foamy1992", - "robertwb69", - "rwb691169187", - "blackhart74", - "sambone", - "janreypogi1", - "kakilala", - "hairy_marry", - "brucie123", - "gaming_gypsy", - "qwewqwewqwe", - "pros_only", - "killer29043", - "night_raid89", - "hershey", - "dragan_man62", - "sordman", - "vaizakhter1", - "19692000", - "rob1tooby1", - "awesomeman2", - "papagal7", - "cartof33", - "lil_0ctog0n", - "hi12", - "matthew_1001", - "elliemay", - "krilitor", - "charlesk", - "rileymango", - "882psauq", - "wutknochen", - "12muschel78", - "ravincal", - "warchief1", - "joloplex", - "scrubs93", - "kelly_koehn", - "goldrush", - "0k_im_sorry", - "david123", - "zack494", - "lima7277", - "killermac234", - "spartan", - "sharmen24", - "bigballs", - "ricarddragon", - "123123s", - "illepappeft", - "mapet123", - "josh6621", - "dragon6621", - "p__0__0__n3", - "bringmetolife", - "silentblue5", - "hardflip96", - "cbosk8er", - "getbuff", - "steelbeast97", - "ironbeast", - "zarkima", - "idioteque8", - "goselink1989", - "janlul123", - "rocky1247", - "rocklobster9", - "supapwnage", - "holden123", - "vietboihao", - "vietboi", - "cutvision", - "internet", - "stinkerror", - "dragondz", - "robert_magic", - "darlene2", - "min_ko7", - "kristian1998", - "adami888", - "tetramins", - "godssent2", - "shadow14", - "sawingmotion", - "drag00n", - "devincm", - "harder64", - "mrcrowley676", - "stevefry", - "canadian_nrg", - "elvens11", - "dbl_m", - "mattrox3", - "redgoblin352", - "beunard", - "sonderby", - "banjomus", - "sagar448", - "heroes12", - "windkid62595", - "lilly117", - "kacj321", - "9hjgyt83", - "sly_ninja80", - "waynegod13", - "discombobu99", - "rocky34", - "zorontu", - "xtaylorx", - "zezimaki", - "ilovelordi", - "joey7x", - "kaleb8598", - "kruiness", - "daisymay21", - "paul77777izzapizza1", - "cow_hearder", - "kingdrag", - "lama_007", - "trojans1", - "helslayer11", - "roblox11", - "knifebloody", - "1092310923", - "dansendeaap", - "uiensoep", - "pure_exz", - "29038995scotland", - "theysconator", - "ysbrandve1", - "chrissy_booy", - "egghead", - "supreme1511", - "landis1511", - "tharujusassword123", - "jdablada", - "ugotskills", - "kewl_kid", - "killer99", - "nicknack60", - "choffee12", - "a007lex1", - "shadow581000", - "ecmxflawless", - "twenty8", - "roguewolf33", - "firefox101", - "kaare83_2", - "korsvegen", - "da_king1295", - "xemnas1", - "airwalk285", - "archman", - "sir_kieran12", - "spiderpig08", - "fasterthanyu", - "asdflkj", - "lihtsaber2", - "joe00224", - "fortress170", - "centurion", - "youmeyou4", - "laxworld", - "xxmrfixitxx", - "killer55", - "morags", - "ericolde", - "e_a_r_l_y_k0liverkerr", - "benno_rules", - "lotrftw5", - "embrach", - "meier007", - "xxlpad", - "arnis1996", - "spike8342", - "knuckles", - "spit_fire469", - "tuesday23", - "jonahmonk", - "blackma9ic", - "manmage247", - "kingcoke", - "ourkornalmer64", - "paulypauly22", - "chickenpoo", - "kis_a_legend", - "samtr0n", - "amigos39", - "blackhole", - "abc12pee", - "zman1123", - "mr_frost22", - "bubby5522", - "lauren_maher", - "foamy1992", - "robertwb69", - "rwb691169187", - "blackhart74", - "sambone", - "janreypogi1", - "kakilala", - "hairy_marry", - "brucie123", - "gaming_gypsy", - "qwewqwewqwe", - "pros_only", - "killer29043", - "night_raid89", - "hershey", - "dragan_man62", - "sordman", - "vaizakhter1", - "19692000", - "rob1tooby1", - "awesomeman2", - "papagal7", - "cartof33", - "lil_0ctog0n", - "hi12", - "matthew_1001", - "elliemay", - "krilitor", - "charlesk", - "rileymango", - "882psauq", - "wutknochen", - "12muschel78", - "ravincal", - "warchief1", - "joloplex", - "scrubs93", - "kelly_koehn", - "goldrush", - "0k_im_sorry", - "david123", - "zack494", - "lima7277", - "killermac234", - "spartan", - "sharmen24", - "bigballs", - "ricarddragon", - "123123s", - "illepappeft", - "mapet123", - "josh6621", - "dragon6621", - "p__0__0__n3", - "bringmetolife", - "silentblue5", - "hardflip96", - "cbosk8er", - "getbuff", - "steelbeast97", - "ironbeast", - "zarkima", - "idioteque8", - "goselink1989", - "janlul123", - "rocky1247", - "rocklobster9", - "supapwnage", - "holden123", - "vietboihao", - "vietboi", - "cutvision", - "internet", - "stinkerror", - "dragondz", - "robert_magic", - "darlene2", - "min_ko7", - "kristian1998", - "adami888", - "tetramins", - "godssent2", - "shadow14", - "sawingmotion", - "drag00n", - "devincm", - "harder64", - "mrcrowley676", - "stevefry", - "canadian_nrg", - "elvens11", - "dbl_m", - "mattrox3", - "redgoblin352", - "beunard" - }; - -} diff --git a/Server/src/main/java/rs09/game/ai/resource/ResourceAIPActions.java b/Server/src/main/java/rs09/game/ai/resource/ResourceAIPActions.java deleted file mode 100644 index 7999b49e9..000000000 --- a/Server/src/main/java/rs09/game/ai/resource/ResourceAIPActions.java +++ /dev/null @@ -1,71 +0,0 @@ -package rs09.game.ai.resource; - -import core.game.node.entity.skill.gather.SkillingResource; -import core.game.node.entity.player.Player; -import rs09.game.ai.AIPlayer; -import core.game.system.task.Pulse; -import rs09.game.world.GameWorld; -import rs09.game.world.repository.Repository; - -import java.util.List; - -public class ResourceAIPActions { - - public static List resource_players = null; - - protected SkillingResource resource; - - public static void syncBotThread(final Player player) { - if (resource_players == null || resource_players.size() == 0) { - return; - } - for (int aip_index = 0; aip_index < resource_players.size(); aip_index++) { - final AIPlayer bot = resource_players.get(aip_index); - GameWorld.getPulser().submit(new Pulse(1, bot) { - int ticks; - int ov; - @Override - public boolean pulse() { - /*if (bot.getInventory().freeSlots() < 1) { - //flee(bot); - return true; - }*/ - //Inactivity logout timer. - if (ticks++ == 5000/* && bot.getWalkingQueue().getQueue().isEmpty()*/) { - AIPlayer.deregister(bot.getUid()); - resource_players.remove(bot); - return true; - } - if (ov++ >= 3) { - chopTree(bot); - ov = 0; - } -// ov = 0; - System.out.println("ResourceAIPActions" + ov); - return false; - } - }); - } - } - - private static boolean chopTree(final AIPlayer bot) { - /*for (GameObject[] o : RegionManager.forId(bot.getLocation().getRegionId()).getPlanes()[0].getObjects()) { - for (GameObject obj : o) { - if (obj != null) { - for (SkillingResource r : SkillingResource.values()) { - if (obj.getId() == r.getId()) { - Pathfinder.find(bot, obj).walk(bot); - bot.sendChat("WE CHOPPIN"); - } - } - } - } - }*/ - bot.attack(Repository.getNpcs().get(106)); - -// Pulse pulse = new GatheringSkillPulse(bot, node); -// bot.getPulseManager().run(new GatheringSkillPulse(bot, node)); -// pulse.start(); - return true; - } -} diff --git a/Server/src/main/java/rs09/game/ai/resource/ResourceAIPManager.java b/Server/src/main/java/rs09/game/ai/resource/ResourceAIPManager.java deleted file mode 100644 index 0b62143ad..000000000 --- a/Server/src/main/java/rs09/game/ai/resource/ResourceAIPManager.java +++ /dev/null @@ -1,152 +0,0 @@ -package rs09.game.ai.resource; - -import core.game.node.entity.player.Player; -import rs09.game.ai.resource.task.ResourceTask; -import rs09.game.ai.resource.task.ResourceTasks; -import core.game.system.task.Pulse; -import rs09.game.world.GameWorld; - -import java.sql.ResultSet; -import java.sql.Statement; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - - -/** - * Package -> org.keldagrim.game.node.entity.player.ai.resource - * Created on -> 9/13/2016 @12:42 PM for 530 - * - * @author Ethan Kyle Millard - */ -public class ResourceAIPManager { - - private long time = 0; - - private Player player; - - private static Map TASKS = new HashMap<>(); - - public ResourceAIPManager init() { - getTasks().put(ResourceTasks.WOODCUTTING.getResourceTask(), 0L); - return this; - } - - public ResourceAIPManager runTask(Player player, String taskName) { - for (Map.Entry entry : getTasks().entrySet()) { - if (entry.getKey().getTaskName().equalsIgnoreCase(taskName)) { - if (entry.getValue() != 0) { - message(player, "You have extended the task " + taskName + "."); - } else { - message(player, "You have activated the task " + taskName + "."); - } - } - entry.getKey().setTaskName(taskName); - entry.setValue(entry.getValue() + 70); - this.player = player; - } - return this; - } - - public void reActivate(String name, long time) { - for (Map.Entry entry : TASKS.entrySet()) { - if (entry.getKey().getTaskName().equalsIgnoreCase(name)) { - entry.setValue(time); - } - } - } - - public ResourceAIPManager load(Player player) { - return this; - } - - public ResourceAIPManager save(Player player) { - /*if (GameWorld.getDatabaseManager().update("global", "DELETE FROM `members` WHERE worldid='" + GameWorld.getSettings().getWorldId() + "'") < 0) - return this;*/ - System.out.println("Saving..."); - Iterator> iterator = getTasks().entrySet().iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - if (entry.getValue() <= 0) - continue; - StringBuilder query = new StringBuilder(); - query.append("UPDATE `members` SET `taskName`='" + entry.getKey().getTaskName() + "',`taskTime`='" + entry.getValue() + "' WHERE `username`='" + player.getUsername() + "'"); - System.out.println("ResourceAIPManager: " + query.toString()); - - } - return this; - } - - public void pulse(Player player) { - GameWorld.getPulser().submit(new Pulse(1) { - @Override - public boolean pulse() { - - time++; - - Iterator> iterator = getTasks().entrySet().iterator(); - - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - if (entry.getValue() > 0) { - entry.setValue(entry.getValue() - 1); - if (entry.getValue() == 50) - message(player, "You have 30 minutes before " + entry.getKey().getTaskName() + " task ends."); - if (entry.getValue() <= 0) { - entry.getKey().setTime(0); - entry.getKey().reward(player, entry.getKey().getTaskName()); - message(player, "The task " + entry.getKey().getTaskName() + " has now ended."); - save(player); - } - if (time == 50) { - entry.getKey().setTime(0); - save(player); - } - } - } - return false; - } - }); - } - - public ResourceAIPManager message(Player player, String message) { - return message(player, message, true, ""); - } - - public ResourceAIPManager message(Player player, String message, boolean tag) { - return message(player, message, tag, ""); - } - - public ResourceAIPManager notify(Player player, String message) { - return message(player, message, true, ""); - } - - public ResourceAIPManager notify(Player player, String message, boolean tag) { - return message(player, message, tag, ""); - } - - - public ResourceAIPManager message(Player player, String message, boolean tag, String color) { - player.getPacketDispatch().sendMessage(color + (tag ? "[Resource Manager] - " : "") + message); - return this; - - } - - public static Map getTasks() { - return TASKS; - } - - private static ResourceAIPManager INSTANCE = new ResourceAIPManager(); - - public static ResourceAIPManager get() { - return INSTANCE; - } - - public Player getPlayer() { - return player; - } - - public void setPlayer(Player player) { - this.player = player; - } -} diff --git a/Server/src/main/java/rs09/game/ai/resource/task/ResourceTask.java b/Server/src/main/java/rs09/game/ai/resource/task/ResourceTask.java deleted file mode 100644 index 7e3e979fa..000000000 --- a/Server/src/main/java/rs09/game/ai/resource/task/ResourceTask.java +++ /dev/null @@ -1,39 +0,0 @@ -package rs09.game.ai.resource.task; - -import core.game.node.entity.player.Player; - -/** - * Package -> org.keldagrim.game.node.entity.player.ai.resource.task - * Created on -> 9/13/2016 @12:44 PM for 530 - * - * @author Ethan Kyle Millard - */ -public abstract class ResourceTask { - - - private String taskName; - private long time; - - public ResourceTask(String taskName, long time) { - this.taskName = taskName; - this.time = time; - } - - public abstract void reward(Player player, String eventName); - - public long getTime() { - return time; - } - - public void setTime(long time) { - this.time = time; - } - - public String getTaskName() { - return taskName; - } - - public void setTaskName(String taskName) { - this.taskName = taskName; - } -} diff --git a/Server/src/main/java/rs09/game/ai/resource/task/ResourceTasks.java b/Server/src/main/java/rs09/game/ai/resource/task/ResourceTasks.java deleted file mode 100644 index cd55e19bd..000000000 --- a/Server/src/main/java/rs09/game/ai/resource/task/ResourceTasks.java +++ /dev/null @@ -1,46 +0,0 @@ -package rs09.game.ai.resource.task; - -import core.game.node.entity.skill.Skills; -import core.game.node.entity.player.Player; -import core.game.node.item.Item; -import core.tools.RandomFunction; - -/** - * Package -> org.keldagrim.game.node.entity.player.ai.resource.task - * Created on -> 9/13/2016 @12:43 PM for 530 - * - * @author Ethan Kyle Millard - */ -public enum ResourceTasks { - - WOODCUTTING(new ResourceTask("Willow Logs", 6000) { - - @Override - public void reward(Player player, String eventName) { - if (player.getSkills().getLevel(Skills.WOODCUTTING) < 30) { - player.sendMessage(reqirementMessage()); - return; - } - if (getTime() == 0) { - player.getBank().add(new Item(1519, RandomFunction.random(700, 1000))); - player.getSkills().addExperience(Skills.WOODCUTTING, RandomFunction.random(100000, 150000)); - } - } - }); - - private final ResourceTask resourceTask; - - - ResourceTasks(ResourceTask resourceTask) { - this.resourceTask = resourceTask; - } - - public ResourceTask getResourceTask() { - return resourceTask; - } - - - private static String reqirementMessage() { - return "You do not meet the requirements for this task."; - } -} diff --git a/Server/src/main/java/rs09/game/ai/skillingbot/SkillingBot.java b/Server/src/main/java/rs09/game/ai/skillingbot/SkillingBot.java deleted file mode 100644 index 44e930e9f..000000000 --- a/Server/src/main/java/rs09/game/ai/skillingbot/SkillingBot.java +++ /dev/null @@ -1,128 +0,0 @@ -package rs09.game.ai.skillingbot; - -import core.game.world.map.Location; - -import java.util.ArrayList; - -import core.game.node.entity.skill.Skills; -import core.game.interaction.Option; -import core.game.node.Node; -import rs09.game.ai.AIPlayer; -import core.game.node.item.Item; -import core.net.packet.in.InteractionPacket; - -public class SkillingBot extends AIPlayer { - - private int tick = 5; - private ArrayList interactNodeIds; - private int fromWhereDoIdrop; - private int skill; - private int interactionRange; - - public SkillingBot(Location l) - { - super(l); - this.fromWhereDoIdrop = 0; - this.interactionRange = 15; - } - - public SkillingBot(Location l, int skill, ArrayList entrys) - { - super(l); - this.skill = skill; - this.fromWhereDoIdrop = 0; - this.interactNodeIds = entrys; - this.interactionRange = 15; - - switch (this.skill) - { - case Skills.MINING: - default: - break; - } - } - - @Override - public void tick() - { - super.tick(); - - //Despawn - if (this.getSkills().getLifepoints() == 0) - AIPlayer.deregister(this.getUid()); - - //Interact with object - if (this.tick <= 0) - { - this.tick = 5; - if (this.skill == Skills.FISHING) - this.tick = 20; - - // Node test = getClosestNodeWithEntry(15, 15503); - Node node; - if (this.skill != Skills.FISHING) - { - node = getClosestNodeWithEntry(interactionRange, interactNodeIds); - } - else - { - node = getClosesCreature(interactionRange, interactNodeIds); -// if (test != null) -// System.out.println("interact with " + test.getName()); - } - - if (node == null) { - System.out.println("SkillingBot.java: Object not found " + this.skill); - return; - } - - //System.out.println("free slots " + this.getInventory().freeSlots()); - - if (this.getInventory().isFull()) - { -// System.out.println(this.getName() + " starts droping from " + fromWhereDoIdrop); - for (int i = fromWhereDoIdrop; i < 28; i++) - { - Item drop = this.getInventory().get(i); - final Option option = drop.getInteraction().get(4); - drop.getInteraction().handleItemOption(this, option, this.getInventory()); -// System.out.println("drop item " + i); - } - } - - int x = node.getLocation().getX(); - int y = node.getLocation().getY(); - if (this.skill != Skills.FISHING) - { - InteractionPacket.handleObjectInteraction(this, 0, x, y, node.getId()); - } - else - { - InteractionPacket.handleNPCInteraction(this, 0, node.getIndex()); - } - } - else - this.tick--; - } - - public int getSkill() - { - return this.skill; - } - - public int getFromWhereToDrop() - { - return this.fromWhereDoIdrop; - } - - public void setFromWhereDoIdrop(int id) - { - this.fromWhereDoIdrop = id; - } - - public void setInteractionRange(int range) - { - this.interactionRange = range; - } - -} diff --git a/Server/src/main/java/rs09/game/ai/skillingbot/SkillingBotsBuilder.java b/Server/src/main/java/rs09/game/ai/skillingbot/SkillingBotsBuilder.java deleted file mode 100644 index 9ce76c2d0..000000000 --- a/Server/src/main/java/rs09/game/ai/skillingbot/SkillingBotsBuilder.java +++ /dev/null @@ -1,209 +0,0 @@ -package rs09.game.ai.skillingbot; - -import java.util.ArrayList; - -import core.game.container.impl.EquipmentContainer; -import core.game.content.quest.tutorials.tutorialisland.CharacterDesign; -import core.game.node.entity.skill.Skills; -import rs09.game.ai.AIPlayer; -import core.game.node.entity.player.link.appearance.Gender; -import core.game.node.item.Item; -import core.game.world.map.Location; -import core.tools.RandomFunction; - -public final class SkillingBotsBuilder extends AIPlayer { - - public SkillingBotsBuilder(Location l) { - super(l); - // TODO Auto-generated constructor stub - } - - private static SkillingBot generateMiningBot(Location loc, ArrayList entrys) - { - SkillingBot bot = new SkillingBot(loc, Skills.MINING, entrys); - bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE); - - - bot.getEquipment().replace(new Item(1265), EquipmentContainer.SLOT_WEAPON); - return bot; - } - - private static SkillingBot generateWoodcuttingBot(Location loc, ArrayList entrys) - { - SkillingBot bot = new SkillingBot(loc, Skills.WOODCUTTING, entrys); - bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE); - - - bot.getEquipment().replace(new Item(1351), EquipmentContainer.SLOT_WEAPON); - return bot; - } - - private static SkillingBot generateFishingBot(Location loc, ArrayList entrys) - { - SkillingBot bot = new SkillingBot(loc, Skills.FISHING, entrys); - bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE); - CharacterDesign.randomize(bot, false); - - - return bot; - } - - public static void spawnClayBotVarrock(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(15503); - entrys.add(15505); - - SkillingBot bot = generateMiningBot(loc, entrys); - - bot.getSkills().setLevel(Skills.MINING, 10); - } - - public static void spawnIronBotVarrock(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(11954); - entrys.add(11955); - entrys.add(11956); - - SkillingBot bot = generateMiningBot(loc, entrys); - - bot.getSkills().setLevel(Skills.MINING, 25); - } - - public static void spawnSilverBotVarrock(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(11948); - entrys.add(11949); - entrys.add(11950); - - SkillingBot bot = generateMiningBot(loc, entrys); - - bot.getSkills().setLevel(Skills.MINING, 30); - } - - public static void spawnTinBotVarrock(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(11957); - entrys.add(11959); - entrys.add(11958); - - SkillingBot bot = generateMiningBot(loc, entrys); - - bot.getSkills().setLevel(Skills.MINING, 5); - } - - public static void spawnTinBotLumbridge(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(11933); - entrys.add(11934); - entrys.add(11935); - - SkillingBot bot = generateMiningBot(loc, entrys); - - bot.getSkills().setLevel(Skills.MINING, 5); - } - - public static void spawnCopperBotLumbridge(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(11936); - entrys.add(11937); - entrys.add(11938); - - SkillingBot bot = generateMiningBot(loc, entrys); - - bot.getSkills().setLevel(Skills.MINING, 5); - } - - public static void spawnOakTreeBotLumbridge(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(1281); - entrys.add(1278); - entrys.add(1276); - - SkillingBot bot = generateWoodcuttingBot(loc, entrys); - - bot.getSkills().setLevel(Skills.WOODCUTTING, 25); - bot.setInteractionRange(25); - } - - public static void spawnDeadTreeBotLumbridge(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(1282); - entrys.add(1286); - - SkillingBot bot = generateWoodcuttingBot(loc, entrys); - - bot.getSkills().setLevel(Skills.WOODCUTTING, 25); - bot.setInteractionRange(15); - } - - public static void spawnShrimpFisherLumbridge(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(323); - entrys.add(326); - - SkillingBot bot = generateFishingBot(loc, entrys); - - bot.getInventory().add(new Item(303)); - // don't drop net - bot.setFromWhereDoIdrop(1); - - bot.getSkills().setLevel(Skills.FISHING, 25); - bot.setInteractionRange(25); - } - - public static void spawnTroutLumbridge(Location loc) - { - ArrayList entrys = new ArrayList(); - entrys.add(310); - - SkillingBot bot = generateFishingBot(loc, entrys); - - bot.getInventory().add(new Item(309)); - bot.getInventory().add(new Item(314, 20000)); - // don't drop net - bot.setFromWhereDoIdrop(2); - - bot.getSkills().setLevel(Skills.FISHING, 25); - bot.setInteractionRange(25); - } - - //These bots are disabled because they somehow break pets - public static void immersiveSpawnsSkillingBots() - { - // Varrock Mine - SkillingBotsBuilder.spawnClayBotVarrock(new Location(3181, 3368)); - SkillingBotsBuilder.spawnSilverBotVarrock(new Location(3181, 3368)); - SkillingBotsBuilder.spawnIronBotVarrock(new Location(3181, 3368)); - SkillingBotsBuilder.spawnTinBotVarrock(new Location(3181, 3368)); - - // Lumbridge woodcutting - spawnOakTreeBotLumbridge(new Location(3227, 3243)); - spawnOakTreeBotLumbridge(new Location(3186, 3251)); - spawnOakTreeBotLumbridge(new Location(3188, 3223)); - spawnOakTreeBotLumbridge(new Location(3162, 3222)); - spawnOakTreeBotLumbridge(new Location(3162, 3219)); - spawnOakTreeBotLumbridge(new Location(3152, 3228)); - spawnOakTreeBotLumbridge(new Location(3146, 3244)); - spawnDeadTreeBotLumbridge(new Location(3247, 3240)); - - // Lumbridge mining - spawnTinBotLumbridge(new Location(3224, 3147)); - spawnCopperBotLumbridge(new Location(3224, 3147)); - - // Lumbridge Fishing - spawnShrimpFisherLumbridge(new Location(3242, 3151)); - spawnShrimpFisherLumbridge(new Location(3238, 3148)); - spawnShrimpFisherLumbridge(new Location(3245, 3161)); - spawnTroutLumbridge(new Location(3241, 3242)); - } - -} diff --git a/Server/src/main/java/rs09/game/ai/system/GlobalAIManager.java b/Server/src/main/java/rs09/game/ai/system/GlobalAIManager.java deleted file mode 100644 index 7c94487fa..000000000 --- a/Server/src/main/java/rs09/game/ai/system/GlobalAIManager.java +++ /dev/null @@ -1,32 +0,0 @@ -package rs09.game.ai.system; - - -import rs09.game.ai.AIPlayer; - -import java.util.HashMap; -import java.util.Map; - -public class GlobalAIManager { - - - /** - * The active Artificial intelligent players mapping. - */ - private static final Map BOT_MAPPING = new HashMap<>(); - - - /** - * Constructs a new {@code GlobalAIManager} {@code Object}. - */ - public GlobalAIManager() { - - } - - public static void addBot(int uid, AIPlayer player) { - BOT_MAPPING.put(uid, player); - } - - public static AIPlayer getBot(int uid) { - return BOT_MAPPING.get(uid); - } -} diff --git a/Server/src/main/java/rs09/game/ai/system/android/CombatDroid.java b/Server/src/main/java/rs09/game/ai/system/android/CombatDroid.java deleted file mode 100644 index 5b0cd0533..000000000 --- a/Server/src/main/java/rs09/game/ai/system/android/CombatDroid.java +++ /dev/null @@ -1,4 +0,0 @@ -package rs09.game.ai.system.android; - -public class CombatDroid { -} diff --git a/Server/src/main/java/rs09/game/ai/system/android/GatheringDroid.java b/Server/src/main/java/rs09/game/ai/system/android/GatheringDroid.java deleted file mode 100644 index 10de24031..000000000 --- a/Server/src/main/java/rs09/game/ai/system/android/GatheringDroid.java +++ /dev/null @@ -1,4 +0,0 @@ -package rs09.game.ai.system.android; - -public class GatheringDroid { -} diff --git a/Server/src/main/java/rs09/game/ai/system/predicate/Predicate.java b/Server/src/main/java/rs09/game/ai/system/predicate/Predicate.java deleted file mode 100644 index 5f1377b5c..000000000 --- a/Server/src/main/java/rs09/game/ai/system/predicate/Predicate.java +++ /dev/null @@ -1,102 +0,0 @@ -package rs09.game.ai.system.predicate; - -import javax.security.auth.Destroyable; - -import rs09.game.ai.system.GlobalAIManager; - -/** - * An android predicate. - * - * @author Viper - * @version 1.0 - 13/07/2016 - */ -public abstract class Predicate implements Cloneable, Runnable, Destroyable { - - protected GlobalAIManager bot; - - /** - * Predicate started. - */ - private boolean started; - - /** - * The predicate priority factor. - */ - private byte priority; - - /** - * The predicate type. - */ - public abstract PredicateType getType(); - - /** - * Constructs a new {@link Predicate} {@code Object}. - * - * @param priority - * The priority of this predicate. - */ - public Predicate(int priority) { - this.priority = (byte) priority; - } - - public Predicate clone() { - final Predicate pred = this; - return new Predicate(priority) { - - @Override - public void run() { - pred.run(); - } - - @Override - public PredicateType getType() { - return pred.getType(); - } - }.setStarted(pred.started); - } - - /** - * @return the priority - */ - public byte getPriority() { - return priority; - } - - /** - * @param priority the priority to set - */ - public void setPriority(byte priority) { - this.priority = priority; - } - - /** - * @return the bot - */ - public GlobalAIManager getBot() { - return bot; - } - - /** - * @param bot the bot to set - */ - public Predicate setBot(GlobalAIManager bot) { - this.bot = bot; - return this; - } - - /** - * @return the started - */ - public boolean hasStarted() { - return started; - } - - /** - * @param started the started to set - */ - public Predicate setStarted(boolean started) { - this.started = started; - return this; - } - -} \ No newline at end of file diff --git a/Server/src/main/java/rs09/game/ai/system/predicate/PredicateType.java b/Server/src/main/java/rs09/game/ai/system/predicate/PredicateType.java deleted file mode 100644 index 18629092c..000000000 --- a/Server/src/main/java/rs09/game/ai/system/predicate/PredicateType.java +++ /dev/null @@ -1,13 +0,0 @@ -package rs09.game.ai.system.predicate; - -/** - * Types of predicates. - * - * @author Viper - * @version 1.0 - 13/07/2016 - */ -public enum PredicateType { - - BOOT, TRANSCENDING, PARSING, TRIVIAL; - -} \ No newline at end of file diff --git a/Server/src/main/java/rs09/game/ai/system/predicate/impl/AppearancePredicate.java b/Server/src/main/java/rs09/game/ai/system/predicate/impl/AppearancePredicate.java deleted file mode 100644 index fe1ffc58e..000000000 --- a/Server/src/main/java/rs09/game/ai/system/predicate/impl/AppearancePredicate.java +++ /dev/null @@ -1,60 +0,0 @@ -package rs09.game.ai.system.predicate.impl; - - -import rs09.game.ai.system.predicate.Predicate; -import rs09.game.ai.system.predicate.PredicateType; - -/** - * Generates random appearance for the droid. - * - * @author Viper - * @version 1.0 - 13/07/2016 - */ -public class AppearancePredicate extends Predicate { - - /** - * If the bot is a male. - */ - private boolean male; - - /** - * Constructs a new appearance predicate. - */ - public AppearancePredicate(boolean male) { - super(-1); - this.male = male; - } - - @Override - public PredicateType getType() { - return PredicateType.PARSING; - } - - @Override - public void run() { - if (isMale()) { - /*bot.getAppearence().getBodyStyle()[0] = Utility.random(0, 8); - bot.getAppearence().getBodyStyle()[1] = Utility.random(10, 17); - bot.getAppearence().getBodyStyle()[2] = Utility.random(18, 25); - bot.getAppearence().getBodyStyle()[3] = Utility.random(26, 32); - bot.getAppearence().getBodyStyle()[4] = Utility.random(33, 34); - bot.getAppearence().getBodyStyle()[5] = Utility.random(36, 41); - bot.getAppearence().getBodyStyle()[6] = Utility.random(42, 44); - - bot.getAppearence().getBodyColors()[2] = (byte) Utility.random(0, 127); - bot.getAppearence().getBodyColors()[1] = (byte) Utility.random(0, 127); - bot.getAppearence().getBodyColors()[0] = (byte) Utility.random(0, 24);*/ - } else { - - } -// bot.getAppearence().generateAppearenceData(); - } - - /** - * @return the male - */ - public boolean isMale() { - return male; - } - -} \ No newline at end of file diff --git a/Server/src/main/java/rs09/game/ai/wilderness/PvPBotsBuilder.java b/Server/src/main/java/rs09/game/ai/wilderness/PvPBotsBuilder.java deleted file mode 100644 index fdaa7a5cb..000000000 --- a/Server/src/main/java/rs09/game/ai/wilderness/PvPBotsBuilder.java +++ /dev/null @@ -1,541 +0,0 @@ -package rs09.game.ai.wilderness; - -import java.util.ArrayList; - -import core.game.container.impl.EquipmentContainer; -import core.game.node.entity.skill.Skills; -import core.game.node.entity.combat.CombatSpell; -import rs09.game.ai.AIPlayer; -import rs09.game.ai.pvmbots.DragonKiller; -import rs09.game.ai.pvmbots.NoobBot; -import rs09.game.ai.pvmbots.PvMBots; -import core.game.node.entity.player.link.SpellBookManager; -import core.game.node.entity.player.link.appearance.Gender; -import core.game.node.item.Item; -import core.game.world.map.Location; -import core.tools.RandomFunction; - -public final class PvPBotsBuilder{ - - public static WildernessBot create(Location l) - { - return new WildernessBot(l); - } - - public static void generateClass(WildernessBot p) { - int combatType = RandomFunction.getRandom(1); - switch(combatType) { - case 0: - buildMeleeStats(p); - buildMeleeEquipment(p); - correctHitpointsStat(p); - break; - case 1: - //max rune - buildMaxMeleeStats(p); - buildMaxMeleeEquipment(p); - correctHitpointsStat(p); - break; - } - p.getInventory().add(new Item(385, 20)); - p.getProperties().setCombatLevel(126); - - p.getSkills().setLevel(Skills.PRAYER, 98); - p.getSkills().setStaticLevel(Skills.PRAYER, 98); - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - - private static void buildMeleeStats(WildernessBot p) { - int attackLevel = RandomFunction.random(80, 98); - int strengthLevel = RandomFunction.random(attackLevel - 10, attackLevel + 10); - int defenceLevel = RandomFunction.random(60, 98); - - p.getSkills().setLevel(Skills.ATTACK, attackLevel); - p.getSkills().setStaticLevel(Skills.ATTACK, attackLevel); - p.getSkills().setLevel(Skills.STRENGTH, strengthLevel); - p.getSkills().setStaticLevel(Skills.STRENGTH, strengthLevel); - p.getSkills().setLevel(Skills.DEFENCE, defenceLevel); - p.getSkills().setStaticLevel(Skills.DEFENCE, defenceLevel); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - private static void buildMeleeEquipment(WildernessBot p) { - int[] helms = { - 1163, //Rune Full Helm - 3751, //Berserker Helm - 3753, //Warrior Helm - 10828, - 1038, - 4753, - }; - int[] shield = { - 1185, //Rune sq shield - 1201, //Rune kiteshield - 6524, //Obsidian shield - 8850, //Rune defender - 11286, - 14767, - }; - int[] platebody = { - 1113, //Rune chainmail. - 1127, //Rune platebody. - 10551, - 4757, - 11724, - 4720, - }; - int[] platelegs = { - 1079, //Rune platelegs. - 4759, - 11726, - 1075, - }; - - p.getEquipment().replace(new Item(helms[RandomFunction.random(helms.length)]), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(shield[RandomFunction.random(shield.length)]), EquipmentContainer.SLOT_SHIELD); - p.getEquipment().replace(new Item(platebody[RandomFunction.random(platebody.length)]), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(platelegs[RandomFunction.random(platelegs.length)]), EquipmentContainer.SLOT_LEGS); - - Item weapon = new Item(weapons[RandomFunction.random(weapons.length)]); - p.setMainWeapon(weapon.getId()); - p.getEquipment().replace(weapon, EquipmentContainer.SLOT_WEAPON); - - p.getEquipment().replace(new Item(generateNecklace()), EquipmentContainer.SLOT_AMULET); - p.getEquipment().replace(new Item(generateBoots()), EquipmentContainer.SLOT_FEET); - p.getEquipment().replace(new Item(generateCape()), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(generateGloves()), EquipmentContainer.SLOT_HANDS); - } - - public static final int[] weapons = { - 4151, //Whip - 4587, //Dragon Scimitar - - }; - - - private static void buildMaxMeleeStats(AIPlayer p) - { - p.getSkills().setLevel(Skills.ATTACK, 99); - p.getSkills().setStaticLevel(Skills.ATTACK, 99); - p.getSkills().setLevel(Skills.STRENGTH, 99); - p.getSkills().setStaticLevel(Skills.STRENGTH, 99); - p.getSkills().setLevel(Skills.DEFENCE, 99); - p.getSkills().setStaticLevel(Skills.DEFENCE, 99); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - private static void buildMaxMeleeEquipment(AIPlayer p) { - int[] helms = { - 3751, //Berserker Helm - }; - int[] shield = { - 14767, //Dragon defender - }; - int[] platebody = { - 11724, //Bandos chainmail. - }; - int[] platelegs = { - 11726, //Bandos Tassets. - }; - int[] amulets = { - 6585, //fury - }; - int[] boots = { - 3105, //Climbing boots. - }; - int[] cape = { - 6570, //Fire cape. - }; - int[] gloves = { - 7462, //Barrows Gloves. - }; - p.getEquipment().replace(new Item(helms[RandomFunction.random(helms.length)]), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(shield[RandomFunction.random(shield.length)]), EquipmentContainer.SLOT_SHIELD); - p.getEquipment().replace(new Item(platebody[RandomFunction.random(platebody.length)]), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(platelegs[RandomFunction.random(platelegs.length)]), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(weapons2[RandomFunction.random(weapons2.length)]), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(amulets[RandomFunction.random(amulets.length)]), EquipmentContainer.SLOT_AMULET); - p.getEquipment().replace(new Item(boots[RandomFunction.random(boots.length)]), EquipmentContainer.SLOT_FEET); - p.getEquipment().replace(new Item(cape[RandomFunction.random(cape.length)]), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(gloves[RandomFunction.random(gloves.length)]), EquipmentContainer.SLOT_HANDS); - } - - public static final int[] weapons2 = { - 4151, //Whip - }; - - private static int generateCape() { - int[] capes = { - 1052, //Legends Cape - 6570, //Fire cape - }; - return capes[RandomFunction.random(capes.length)]; - } - - private static int generateNecklace() { - int[] amulets = { - 1712, //Glory - 1725, //Strength ammy - 6585, //fury - }; - return amulets[RandomFunction.random(amulets.length)]; - } - - private static int generateGloves() { - int[] gloves = { - 1059, - 7462 - }; - return gloves[RandomFunction.random(gloves.length)]; - } - - private static int generateBoots() { - int[] boots = { - 1061, //Leather boots. - 1837, //Desert boots. - 3105, //Climbing boots. - 3791, //Fremmy boots. - 11732, - }; - return boots[RandomFunction.random(boots.length)]; - } - - public static void generateMinLevels(PvMBots p) - { - //Slayer so they can attack alls monsters - p.getSkills().setLevel(Skills.SLAYER, 99); - p.getSkills().setStaticLevel(Skills.SLAYER, 99); - int combatType = RandomFunction.getRandom(2); - p.getSkills().setLevel(Skills.HITPOINTS, 15); - p.getSkills().setStaticLevel(Skills.HITPOINTS, 15); - p.getInventory().add(new Item(329, 5)); - switch(combatType) - { - case 0: - { - buildArcherStats(p); - buildArcherEquipment(p); - break; - } - case 1: - { - buildMeleeStats(p); - buildMeleeEquipment(p); - break; - } - case 2: - { - buildMageStats(p); - buildMagicEquipment(p); - setupWizard(p); - break; - } - default: - { - buildMeleeStats(p); - buildMeleeEquipment(p); - break; - } - - } - } - - public static void createDragonKiller(DragonKiller p) - { - p.getSkills().setLevel(Skills.SLAYER, 99); - p.getSkills().setStaticLevel(Skills.SLAYER, 99); - int combatType = RandomFunction.getRandom(2); - p.getSkills().setLevel(Skills.HITPOINTS, 55); - p.getSkills().setStaticLevel(Skills.HITPOINTS, 55); - switch(combatType) - { - case 0: - { - buildDragonArcherStats(p); - buildDragonArcherEquipment(p); - break; - } - case 1: - { - buildDragonMeleeStats(p); - buildDragonMeleeEquipment(p); - break; - } - default: - { - buildDragonMeleeStats(p); - buildDragonMeleeEquipment(p); - break; - } - } - } - - public static void createNoob(NoobBot p) - { - p.getSkills().setLevel(Skills.SLAYER, 99); - p.getSkills().setStaticLevel(Skills.SLAYER, 99); - int combatType = RandomFunction.getRandom(3); - p.getSkills().setLevel(Skills.HITPOINTS, 10 + RandomFunction.getRandom(10)); - p.getSkills().setStaticLevel(Skills.HITPOINTS, 10 + RandomFunction.getRandom(10)); - p.getSkills().setLevel(Skills.DEFENCE, 1 + RandomFunction.getRandom(9)); - p.getSkills().setStaticLevel(Skills.DEFENCE, 1 + RandomFunction.getRandom(9)); - p.getInventory().add(new Item(329, 5)); - switch(combatType) - { - case 0: - { - buildNoobArcherStats(p); - buildNoobArcherEquipment(p); - break; - } - case 1: - { - buildNoobMeleeStats(p); - buildNoobMeleeEquipment(p); - break; - } - case 2: - { - buildNoobMageStats(p); - buildNoobMagicEquipment(p); - setupWizard(p); - } - default: - { - buildNoobMeleeStats(p); - buildNoobMeleeEquipment(p); - break; - } - } - } - - private static void buildArcherStats(PvMBots p) - { - p.getSkills().setLevel(Skills.RANGE, 10); - p.getSkills().setStaticLevel(Skills.RANGE, 10); - p.getSkills().setLevel(Skills.DEFENCE, 10); - p.getSkills().setStaticLevel(Skills.DEFENCE, 10); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - private static void buildDragonArcherStats(DragonKiller p) - { - p.getSkills().setLevel(Skills.RANGE, 55); - p.getSkills().setStaticLevel(Skills.RANGE, 55); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - private static void buildNoobArcherStats(NoobBot p) - { - p.getSkills().setLevel(Skills.RANGE, 1 + RandomFunction.getRandom(10)); - p.getSkills().setStaticLevel(Skills.RANGE, 1 + RandomFunction.getRandom(10)); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - public static void buildMeleeStats(PvMBots p) - { - p.getSkills().setLevel(Skills.ATTACK, 10); - p.getSkills().setStaticLevel(Skills.ATTACK, 10); - p.getSkills().setLevel(Skills.STRENGTH, 10); - p.getSkills().setStaticLevel(Skills.STRENGTH, 10); - p.getSkills().setLevel(Skills.DEFENCE, 10); - p.getSkills().setStaticLevel(Skills.DEFENCE, 10); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - public static void buildDragonMeleeStats(DragonKiller p) - { - p.getSkills().setLevel(Skills.ATTACK, 55); - p.getSkills().setStaticLevel(Skills.ATTACK, 55); - p.getSkills().setLevel(Skills.STRENGTH, 55); - p.getSkills().setStaticLevel(Skills.STRENGTH, 55); - p.getSkills().setLevel(Skills.DEFENCE, 45); - p.getSkills().setStaticLevel(Skills.DEFENCE, 45); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - private static void buildNoobMeleeStats(NoobBot p) - { - p.getSkills().setLevel(Skills.ATTACK, 1 + RandomFunction.getRandom(10)); - p.getSkills().setStaticLevel(Skills.ATTACK, 1 + RandomFunction.getRandom(10)); - p.getSkills().setLevel(Skills.STRENGTH, 1 + RandomFunction.getRandom(10)); - p.getSkills().setStaticLevel(Skills.STRENGTH, 1 + RandomFunction.getRandom(10)); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - private static void buildMageStats(PvMBots p) - { - p.getSkills().setLevel(Skills.MAGIC, 10); - p.getSkills().setStaticLevel(Skills.MAGIC, 10); - p.getSkills().setLevel(Skills.DEFENCE, 10); - p.getSkills().setStaticLevel(Skills.DEFENCE, 10); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - private static void buildNoobMageStats(NoobBot p) - { - p.getSkills().setLevel(Skills.MAGIC, 1 + RandomFunction.getRandom(10)); - p.getSkills().setStaticLevel(Skills.MAGIC, 1 + RandomFunction.getRandom(10)); - - p.getSkills().updateCombatLevel(); - p.getAppearance().sync(); - } - - private static void setupWizard(PvMBots p) - { - //final int SPELL_IDS[] = new int[] {1, 4, 6, 8, 10, 14, 17, 20, 24, 27, 33, 38, 45, 48, 52, 55 }; - p.getProperties().setAutocastSpell(((CombatSpell) SpellBookManager.SpellBook.MODERN.getSpell(1))); - p.getInventory().add(new Item(556, 1000)); //Air runes - p.getInventory().add(new Item(558, 1000)); //Mind runes - } - - private static void buildArcherEquipment(PvMBots p) - { - p.getEquipment().replace(new Item(1169), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(1129), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(1095), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(841), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(884, 5000), EquipmentContainer.SLOT_ARROWS); - p.getEquipment().replace(new Item(1007), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(1478), EquipmentContainer.SLOT_AMULET); - } - - private static void buildDragonArcherEquipment(DragonKiller p) - { - p.getEquipment().replace(new Item(1169), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(13483), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(1099), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(9185), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(1540), EquipmentContainer.SLOT_SHIELD); - p.getEquipment().replace(new Item(9140, 500), EquipmentContainer.SLOT_ARROWS); - p.getEquipment().replace(new Item(10498), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(1478), EquipmentContainer.SLOT_AMULET); - } - - private static void buildNoobArcherEquipment(PvMBots p) - { - int hats[] = {1169, 1169, 1139, 1137, 1153, 579}; - int legs[] = {1095, 7366, 1075, 1087, 1095}; - int chest[] = {1129, 1103, 1101, 1129, 1117, 577}; - - p.getEquipment().replace(new Item(hats[RandomFunction.getRandom(hats.length - 1)]), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(chest[RandomFunction.getRandom(chest.length - 1)]), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(legs[RandomFunction.getRandom(legs.length - 1)]), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(841), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(884, 5000), EquipmentContainer.SLOT_ARROWS); - p.getEquipment().replace(new Item(1007), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(1478), EquipmentContainer.SLOT_AMULET); - } - - private static void buildMeleeEquipment(PvMBots p) - { - p.getEquipment().replace(new Item(1153), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(1115), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(1067), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(1309), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(884), EquipmentContainer.SLOT_ARROWS); - p.getEquipment().replace(new Item(1007), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(1725), EquipmentContainer.SLOT_AMULET); - } - - private static void buildDragonMeleeEquipment(DragonKiller p) - { - p.getEquipment().replace(new Item(1163), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(1127), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(1079), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(1333), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(1540), EquipmentContainer.SLOT_SHIELD); - p.getEquipment().replace(new Item(1007), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(1725), EquipmentContainer.SLOT_AMULET); - } - - private static void buildNoobMeleeEquipment(PvMBots p) - { - int hats[] = {1169, 1169, 1139, 1137, 1153, 579}; - int legs[] = {1095, 7366, 1075, 1087, 1095}; - int chest[] = {1129, 1103, 1101, 1129, 1117, 577}; - int weapons[] = {1307, 1321, 1375, 1203, 1239, 1267, 1293, 1323, 1335}; - - p.getEquipment().replace(new Item(hats[RandomFunction.getRandom(hats.length - 1)]), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(chest[RandomFunction.getRandom(chest.length - 1)]), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(legs[RandomFunction.getRandom(legs.length - 1)]), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(weapons[RandomFunction.getRandom(weapons.length - 1)]), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(884), EquipmentContainer.SLOT_ARROWS); - p.getEquipment().replace(new Item(1007), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(1725), EquipmentContainer.SLOT_AMULET); - } - - private static void buildMagicEquipment(PvMBots p) - { - p.getEquipment().replace(new Item(579), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(577), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(1011), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(1389), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(884), EquipmentContainer.SLOT_ARROWS); - p.getEquipment().replace(new Item(1007), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(1727), EquipmentContainer.SLOT_AMULET); - } - - private static void buildNoobMagicEquipment(PvMBots p) - { - int hats[] = {1169, 1169, 1139, 1137, 1153, 579}; - int legs[] = {1095, 7366, 1075, 1087, 1095}; - int chest[] = {1129, 1103, 1101, 1129, 1117, 577}; - int weapons[] = {1379, 1383, 1385, 1387, 1389}; - - p.getEquipment().replace(new Item(hats[RandomFunction.getRandom(hats.length - 1)]), EquipmentContainer.SLOT_HAT); - p.getEquipment().replace(new Item(chest[RandomFunction.getRandom(chest.length - 1)]), EquipmentContainer.SLOT_CHEST); - p.getEquipment().replace(new Item(legs[RandomFunction.getRandom(legs.length - 1)]), EquipmentContainer.SLOT_LEGS); - p.getEquipment().replace(new Item(weapons[RandomFunction.getRandom(weapons.length - 1)]), EquipmentContainer.SLOT_WEAPON); - p.getEquipment().replace(new Item(884), EquipmentContainer.SLOT_ARROWS); - p.getEquipment().replace(new Item(1007), EquipmentContainer.SLOT_CAPE); - p.getEquipment().replace(new Item(1727), EquipmentContainer.SLOT_AMULET); - } - - public static void spawn(Location loc) - { - final WildernessBot bot = PvPBotsBuilder.create(new Location(0, 0)); - bot.teleport(loc); - bot.getAppearance().setGender(RandomFunction.random(3) == 1 ? Gender.FEMALE : Gender.MALE); - - generateClass(bot); - - } - - private static void correctHitpointsStat(AIPlayer player) { - player.getSkills().setLevel(Skills.HITPOINTS, 10); - player.getSkills().setStaticLevel(Skills.HITPOINTS, 10); - player.getSkills().updateCombatLevel(); - int rangedLevel = RandomFunction.random(80, 98); - int defenceLevel = RandomFunction.random(80, 98); - - player.getSkills().setLevel(Skills.HITPOINTS, rangedLevel); - player.getSkills().setStaticLevel(Skills.HITPOINTS, rangedLevel); - player.getSkills().setLevel(Skills.HITPOINTS, defenceLevel); - player.getSkills().setStaticLevel(Skills.HITPOINTS, defenceLevel); - - player.getSkills().updateCombatLevel(); - player.getAppearance().sync(); - } - -} diff --git a/Server/src/main/java/rs09/game/ai/wilderness/WildernessBot.java b/Server/src/main/java/rs09/game/ai/wilderness/WildernessBot.java deleted file mode 100644 index d73ce95b2..000000000 --- a/Server/src/main/java/rs09/game/ai/wilderness/WildernessBot.java +++ /dev/null @@ -1,281 +0,0 @@ -package rs09.game.ai.wilderness; - -import java.util.ArrayList; -import java.util.List; - -import core.game.container.impl.EquipmentContainer; -import core.game.content.consumable.Consumable; -import core.game.content.consumable.Consumables; -import core.game.content.consumable.Food; -import core.game.content.consumable.effects.HealingEffect; -import core.game.node.entity.skill.Skills; -import core.game.interaction.Option; -import core.game.node.entity.Entity; -import core.game.node.entity.player.Player; -import rs09.game.ai.AIPlayer; -import core.game.node.entity.player.link.prayer.PrayerType; -import core.game.node.item.Item; -import core.game.world.map.Location; -import core.game.world.map.RegionManager; -import core.tools.RandomFunction; - -public class WildernessBot extends AIPlayer { - - public WildernessBot(Location l) { - super(l); - this.specWeapon = 1215; - this.normalWeapon = 4151; - this.getInventory().add(new Item(specWeapon)); - // TODO Auto-generated constructor stub - } - - public WildernessBot(Location l, int normalWeaponId, int specWeaponId) { - super(l); - this.specWeapon = specWeaponId; - this.normalWeapon = normalWeaponId; - this.getInventory().add(new Item(specWeaponId)); - } - - int tick = 0; - int movetimer = 0; - int agressiveTimer = 2; - int eatdelay = 2; - boolean fleeing = false; - boolean riskIt = false; - int specWeapon;// = new Item(1215); - int normalWeapon;// = new Item(4151); - - Item chest = this.getEquipment().get(EquipmentContainer.SLOT_CHEST); - Item legs = this.getEquipment().get(EquipmentContainer.SLOT_LEGS); - Item helmet = this.getEquipment().get(EquipmentContainer.SLOT_HAT); - Item weapon = this.getEquipment().get(EquipmentContainer.SLOT_WEAPON); - Item shield = this.getEquipment().get(EquipmentContainer.SLOT_SHIELD); - - - public List FindTargets(Entity entity, int radius) { - List targets = new ArrayList<>(20); - for (Player player : RegionManager.getLocalPlayers(entity, radius)) { { - if (checkValidTargets(player)) - targets.add(player); - } - } - if (targets.size() == 0) - return null; - return targets; - } - - public boolean checkValidTargets(Player target){ - if (!target.isActive()) - { - return false; - } - if (!target.getProperties().isMultiZone() && target.inCombat()) { - return false; - } - if (target.inCombat()) - { - return false; - } - return true; - } - - public void AttackPlayersInRadius(Player bot, int radius) - { - if (bot.inCombat()) - return; - List players = FindTargets(bot, radius); - if (players == null) - { - return; - } - if (!(players.isEmpty())) - { - if (agressiveTimer <= 0) - bot.attack(players.get(RandomFunction.getRandom((players.size() - 1)))); - return; - } - } - - private Entity getTarget() - { - return this.getProperties().getCombatPulse().getVictim(); - } - - private void checkSpecialAttack() - { - Entity target = getTarget(); - if (target == null) - return; - - if (target.getSkills().getLifepoints() <= 75 && this.getSettings().getSpecialEnergy() >= 25) - { - //System.out.println("try special"); - Item weapon = this.getItemById(specWeapon); - if (weapon != null) - { - //System.out.println("found weapon " + weapon.getName()); - final Option option = weapon.getInteraction().get(1); - if (option == null) - { - System.out.println("Option not found"); - return; - } - weapon.getInteraction().handleItemOption(this, option, this.getInventory()); - this.getSettings().setSpecialToggled(true); - this.attack(target); - } - if (!this.getSettings().isSpecialToggled()) - { - //System.out.println("toggle special"); - this.getSettings().setSpecialToggled(true); - this.attack(target); - } - } - else - { - //System.out.println("try normal again"); - Item weapon = this.getItemById(normalWeapon); - if (weapon != null) - { - //System.out.println("found weapon " + weapon.getName()); - final Option option = weapon.getInteraction().get(1); - if (option == null) - { - System.out.println("Option not found"); - return; - } - weapon.getInteraction().handleItemOption(this, option, this.getInventory()); - this.getSettings().setSpecialToggled(false); - this.attack(target); - } - } - } - - private void checkBarrowsSwitch() - { - System.out.println("WildernessBot: " + this.getSkills().getLifepoints()); - Entity target = getTarget(); - if (target == null) - return; - - if (this.getSkills().getLifepoints() <= 35 && target.isPlayer() && target.getSkills().getLifepoints() <= 60) - { - this.getEquipment().replace(new Item(4720) ,EquipmentContainer.SLOT_CHEST); - this.getEquipment().replace(new Item(4722) ,EquipmentContainer.SLOT_LEGS); - this.getEquipment().replace(new Item(4716) ,EquipmentContainer.SLOT_HAT); - this.getEquipment().replace(new Item(4719) ,EquipmentContainer.SLOT_WEAPON); - this.getEquipment().replace(new Item(-1) ,EquipmentContainer.SLOT_SHIELD); - riskIt = true; - } - else if (riskIt) - { - this.getEquipment().replace(chest, EquipmentContainer.SLOT_CHEST); - this.getEquipment().replace(legs, EquipmentContainer.SLOT_LEGS); - this.getEquipment().replace(helmet, EquipmentContainer.SLOT_HAT); - this.getEquipment().replace(weapon, EquipmentContainer.SLOT_WEAPON); - this.getEquipment().replace(shield, EquipmentContainer.SLOT_SHIELD); - riskIt = false; - } - } - - private void checkPrayer() - { - if (this.inCombat()) - { - if (!(this.getPrayer().getActive().contains(PrayerType.PIETY))) - this.getPrayer().toggle((PrayerType.PIETY)); - } - } - - @Override - public void tick() - { - super.tick(); - //checkBarrowsSwitch(); - checkSpecialAttack(); - checkPrayer(); - //Despawn - if (this.getSkills().getLifepoints() == 0) - //this.teleport(new Location(500, 500)); - //Despawning not being delayed causes 3 errors in the console - AIPlayer.deregister(this.getUid()); - if (agressiveTimer != 0) - { - agressiveTimer--; - } - - //Combat - if (!fleeing) - { - if (tick == 0) - { - if (!this.inCombat()) - AttackPlayersInRadius(this, 5); - this.tick = 10; - } - else - this.tick--; - - if (!this.inCombat()) - { - if (movetimer == 0) - { - //if (this.FindTargets(this, 5) == null) - this.randomWalk(20, 20); - this.movetimer = 10; - } - else - movetimer --; - } - } - this.sendChat("Tik"); - this.checkFlee(385); - this.eat(385); - //this.getPrayer().toggle() - } - - public void checkFlee(int foodId) - { - if (this.getInventory().contains(foodId, 18) == false) - { - //todo: add tp - // if () - this.getProperties().setRetaliating(false); - this.sendChat("Oi"); - walkPos(this.getLocation().getLocalX(), this.getLocation().getLocalY() - 5 - RandomFunction.getRandom(5)); - fleeing = true; - } - } - - public void eat(int foodId) - { - if (riskIt) - return; - - Item foodItem = new Item(foodId); - - if (!(this.getInventory().contains(foodId, 1))) - return; - - if((this.getSkills().getStaticLevel(Skills.HITPOINTS) >= this.getSkills().getLifepoints() * 3) && this.getInventory().containsItem(foodItem)) - { - this.lock(3); - //this.animate(new Animation(829)); - Item food = this.getInventory().getItem(foodItem); - - Consumable consumable = Consumables.getConsumableById(food.getId()); - - if (consumable == null) { - consumable = new Food(new int[] {food.getId()}, new HealingEffect(1)); - } - - consumable .consume(food, this); - this.getProperties().getCombatPulse().delayNextAttack(3); - } - } - - public void setMainWeapon(int weapon) - { - this.normalWeapon = weapon; - } -} diff --git a/Server/src/main/kotlin/Cutscene.kt b/Server/src/main/kotlin/Cutscene.kt index dd66b0180..f8225d89f 100644 --- a/Server/src/main/kotlin/Cutscene.kt +++ b/Server/src/main/kotlin/Cutscene.kt @@ -259,7 +259,7 @@ abstract class Cutscene(val player: Player) { try { endActions?.invoke() } catch (e: Exception) { - SystemLogger.logErr("There's some bad nasty code in ${this::class.java.simpleName} end actions!") + SystemLogger.logErr(this::class.java, "There's some bad nasty code in ${this::class.java.simpleName} end actions!") e.printStackTrace() } return true @@ -347,7 +347,7 @@ abstract class Cutscene(val player: Player) { fun logCutscene(message: String) { if(ServerConstants.LOG_CUTSCENE) - SystemLogger.logInfo("[CUTSCENE: ${this.javaClass.simpleName}] $message") + SystemLogger.logInfo(this::class.java, "$message") } fun clearNPCs() { diff --git a/Server/src/main/kotlin/api/ContentAPI.kt b/Server/src/main/kotlin/api/ContentAPI.kt index e68262ffc..9174fbade 100644 --- a/Server/src/main/kotlin/api/ContentAPI.kt +++ b/Server/src/main/kotlin/api/ContentAPI.kt @@ -689,7 +689,7 @@ fun openDialogue(player: Player, dialogue: Any, vararg args: Any) { is Int -> player.dialogueInterpreter.open(dialogue, *args) is DialogueFile -> player.dialogueInterpreter.open(dialogue, *args) is SkillDialogueHandler -> dialogue.open() - else -> SystemLogger.logErr("Invalid object type passed to openDialogue() -> ${dialogue.javaClass.simpleName}") + else -> SystemLogger.logErr(ContentAPI::class.java, "Invalid object type passed to openDialogue() -> ${dialogue.javaClass.simpleName}") } } @@ -975,7 +975,7 @@ fun adjustCharge(node: Node, amount: Int) { when (node) { is Item -> node.charge += amount is Scenery -> node.charge += amount - else -> SystemLogger.logErr("Attempt to adjust the charge of invalid type: ${node.javaClass.simpleName}") + else -> SystemLogger.logErr(ContentAPI::class.java, "Attempt to adjust the charge of invalid type: ${node.javaClass.simpleName}") } } @@ -988,7 +988,7 @@ fun getCharge(node: Node): Int { when (node) { is Item -> return node.charge is Scenery -> return node.charge - else -> SystemLogger.logErr("Attempt to get charge of invalid type: ${node.javaClass.simpleName}") + else -> SystemLogger.logErr(ContentAPI::class.java, "Attempt to get charge of invalid type: ${node.javaClass.simpleName}") .also { return -1 } } } @@ -1002,7 +1002,7 @@ fun setCharge(node: Node, charge: Int) { when (node) { is Item -> node.charge = charge is Scenery -> node.charge = charge - else -> SystemLogger.logErr("Attempt to set the charge of invalid type: ${node.javaClass.simpleName}") + else -> SystemLogger.logErr(ContentAPI::class.java, "Attempt to set the charge of invalid type: ${node.javaClass.simpleName}") } } @@ -2128,4 +2128,6 @@ fun updateCredits(player: Player, amount: Int) : Boolean { */ fun getCredits(player: Player) : Int { return player.details.accountInfo.credits -} \ No newline at end of file +} + +private class ContentAPI \ No newline at end of file diff --git a/Server/src/main/kotlin/gui/GraphView.kt b/Server/src/main/kotlin/gui/GraphView.kt deleted file mode 100644 index 8ae2abd78..000000000 --- a/Server/src/main/kotlin/gui/GraphView.kt +++ /dev/null @@ -1,132 +0,0 @@ -package gui - -import java.awt.* -import javax.swing.JPanel - - -/** - * @author Rodrigo, Maritaria - * @author Ceikry (rewrote into Kotlin, adapted for specific use case) - */ -class GraphView() : JPanel() { - private val values: MutableList = ArrayList(10) - fun setValues(newValues: Collection) { - values.clear() - addValues(newValues) - } - - fun addValues(newValues: Collection) { - if(values.size > 200) values.removeFirst() - values.addAll(newValues) - updateUI() - } - - override fun paintComponent(graphics: Graphics) { - super.paintComponent(graphics) - if (graphics !is Graphics2D) { - graphics.drawString("Graphics is not Graphics2D, unable to render", 0, 0) - return - } - val g: Graphics2D = graphics - g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON) - val length: Int = values.size - val width: Int = width - val height: Int = height - val maxScore: Double = maxScore - val minScore: Double = minScore - val scoreRange: Double = maxScore - minScore - - // draw white background - g.color = Color.WHITE - g.fillRect( - padding + labelPadding, - padding, - width - (2 * padding) - labelPadding, - height - (2 * padding) - labelPadding - ) - g.color = Color.BLACK - val fontMetrics: FontMetrics = g.fontMetrics - val fontHeight: Int = fontMetrics.height - - // create hatch marks and grid lines for y axis. - for (i in 0 until numberYDivisions + 1) { - val x1: Int = padding + labelPadding - val x2: Int = pointWidth + padding + labelPadding - val y: Int = - height - (((i * (height - (padding * 2) - labelPadding)) / numberYDivisions) + padding + labelPadding) - if (length > 0) { - g.color = gridColor - g.drawLine(padding + labelPadding + 1 + pointWidth, y, width - padding, y) - g.color = Color.BLACK - val tickValue: Int = (minScore + ((scoreRange * i) / numberYDivisions)).toInt() - val yLabel: String = tickValue.toString() + "" - val labelWidth: Int = fontMetrics.stringWidth(yLabel) - g.drawString(yLabel, x1 - labelWidth - 5, y + (fontHeight / 2) - 3) - } - g.drawLine(x1, y, x2, y) - } - - // create x and y axes - g.drawLine(padding + labelPadding, height - padding - labelPadding, padding + labelPadding, padding) - g.drawLine( - padding + labelPadding, - height - padding - labelPadding, - width - padding, - height - padding - labelPadding - ) - val oldStroke: Stroke = g.stroke - g.color = lineColor - g.stroke = graphStroke - val xScale: Double = (width.toDouble() - (2 * padding) - labelPadding) / (length - 1) - val yScale: Double = (height.toDouble() - (2 * padding) - labelPadding) / scoreRange - val graphPoints: MutableList = ArrayList(length) - for (i in 0 until length) { - val x1: Int = ((i * xScale) + padding + labelPadding).toInt() - val y1: Int = ((maxScore - values.get(i)) * yScale + padding).toInt() - graphPoints.add(Point(x1, y1)) - } - for (i in 0 until graphPoints.size - 1) { - val x1: Int = graphPoints[i].x - val y1: Int = graphPoints[i].y - val x2: Int = graphPoints[i + 1].x - val y2: Int = graphPoints[i + 1].y - if(y2 != 0) { - g.drawLine(x1, y1, x2, y2) - } - } - val drawDots: Boolean = width > (length * pointWidth) - if (drawDots) { - g.stroke = oldStroke - g.color = pointColor - for (graphPoint: Point in graphPoints) { - val x: Int = graphPoint.x - pointWidth / 2 - val y: Int = graphPoint.y - pointWidth / 2 - g.fillOval(x, y, pointWidth, pointWidth) - } - } - } - - private val minScore: Double - get() = values.stream().min { obj: Int, integer: Int? -> obj.compareTo((integer)!!) }.orElse(0) - .toDouble() - private val maxScore: Double - get() { - return values.stream().max { obj: Int, integer: Int? -> obj.compareTo((integer)!!) }.orElse(0) - .toDouble() - } - - companion object { - private const val padding: Int = 25 - private const val labelPadding: Int = 25 - private const val pointWidth: Int = 4 - private const val numberYDivisions: Int = 10 - private val lineColor: Color = Color(44, 102, 230, 180) - private val pointColor: Color = Color(100, 100, 100, 180) - private val gridColor: Color = Color(200, 200, 200, 200) - private val graphStroke: Stroke = BasicStroke(2f) - } - - init { - preferredSize = Dimension(padding * 2 + 300, padding * 2 + 200) - } -} \ No newline at end of file diff --git a/Server/src/main/kotlin/gui/GuiEvent.kt b/Server/src/main/kotlin/gui/GuiEvent.kt deleted file mode 100644 index a1e16f28b..000000000 --- a/Server/src/main/kotlin/gui/GuiEvent.kt +++ /dev/null @@ -1,10 +0,0 @@ -package gui - -sealed class GuiEvent { - class UpdatePulseCount(val amount: Int) : GuiEvent() - class UpdateTickTime(val time: Long) : GuiEvent() - class UpdateQueuedPackets(val amount: Int) : GuiEvent() - class AddDebugMessage(val message: String) : GuiEvent() - class AddDefaultMessage(val message: String) : GuiEvent() - class AddAIPMessage(val message: String): GuiEvent() -} diff --git a/Server/src/main/kotlin/gui/ServerMonitor.kt b/Server/src/main/kotlin/gui/ServerMonitor.kt deleted file mode 100644 index 061ed1837..000000000 --- a/Server/src/main/kotlin/gui/ServerMonitor.kt +++ /dev/null @@ -1,173 +0,0 @@ -package gui - -import rs09.game.world.GameWorld -import java.awt.BorderLayout -import java.awt.Component -import java.awt.Dimension -import javax.swing.* - -object ServerMonitor : JFrame("Server Monitor"){ - - val eventQueue = ArrayList() - val pulseCount = JLabel("0") - val tickTime = JLabel("0") - val queuedPackets = JLabel("0") - val pulseList = JTextArea("") - val debugLog = JTextArea("") - val defaultLog = JTextArea("") - val AIPlog = JTextArea("") - val tickTimeGraph = GraphView() - val pulseCountGraph = GraphView() - val packetQueueGraph = GraphView() - - init { - isVisible = false - layout = BorderLayout() - size = Dimension(800,640) - preferredSize = Dimension(800,640) - minimumSize = Dimension(800,640) - isResizable = false - - val tabs = JTabbedPane() - tabs.addTab("Overview", constructOverviewTab()) - tabs.addTab("Graphs", constructGraphsTab()) - add(tabs) - - pack() - } - - private fun constructGraphsTab(): JPanel { - val graphPanel = JPanel() - - graphPanel.placeAt(0,10,800,590) - - val tickTimeBorder = BorderFactory.createTitledBorder("Tick Time") - val pulseCountBorder = BorderFactory.createTitledBorder("Pulse Count") - val packetQueueBorder = BorderFactory.createTitledBorder("Queued Packets") - - tickTimeGraph.placeAt(0, 20, 300, 200) - tickTimeGraph.border = tickTimeBorder - - pulseCountGraph.placeAt(300,20,300,200) - pulseCountGraph.border = pulseCountBorder - - packetQueueGraph.placeAt(0,220,300,200) - packetQueueGraph.border = packetQueueBorder - - graphPanel.add(tickTimeGraph) - graphPanel.add(pulseCountGraph) - graphPanel.add(packetQueueGraph) - return graphPanel - } - - private fun constructOverviewTab(): JPanel { - val overviewPanel = JPanel(null) - overviewPanel.placeAt(0,10,800,590) - - val pulseLabel = JLabel("Pulse Count: ") - pulseLabel.placeAt(0,20,100,10) - pulseCount.placeAt(150,20,100,10) - - val tickLabel = JLabel("Tick Time: ") - tickLabel.placeAt(0,35,100,10) - tickTime.placeAt(150,35,100,10) - - val packetLabel = JLabel("Queued Packets: ") - packetLabel.placeAt(0,50,200,10) - queuedPackets.placeAt(150, 50, 100, 10) - - val scrollPane = JScrollPane(pulseList) - scrollPane.placeAt(400,10,390,275) - - val border = BorderFactory.createTitledBorder("Pulses") - scrollPane.border = border - - overviewPanel.add(pulseLabel) - overviewPanel.add(pulseCount) - overviewPanel.add(tickLabel) - overviewPanel.add(tickTime) - overviewPanel.add(packetLabel) - overviewPanel.add(queuedPackets) - overviewPanel.add(scrollPane) - - val logPane = constructLogPane() - logPane.placeAt(0,280,800,300) - overviewPanel.add(logPane) - - return overviewPanel - } - - private fun constructLogPane() : JTabbedPane { - val logPane = JTabbedPane() - - debugLog.isEditable = false - val debugPanel = JPanel(BorderLayout()) - val debugScrollpane = JScrollPane(debugLog) - debugScrollpane.placeAt(0,300,800,300) - debugPanel.add(debugScrollpane, BorderLayout.CENTER) - - defaultLog.isEditable = false - val defaultPanel = JPanel(BorderLayout()) - val defaultScrollpane = JScrollPane(defaultLog) - defaultScrollpane.placeAt(0,300,800,300) - defaultPanel.add(defaultScrollpane, BorderLayout.CENTER) - - AIPlog.isEditable = false - val AIPPanel = JPanel(BorderLayout()) - val AIPscrollpane = JScrollPane(AIPlog) - AIPscrollpane.placeAt(0,300,800,300) - AIPPanel.add(AIPscrollpane, BorderLayout.CENTER) - - logPane.addTab("Default",defaultPanel) - logPane.addTab("Debug",debugPanel) - logPane.addTab("AIP",AIPPanel) - - return logPane - } - - - private fun Component.placeAt(x: Int, y: Int, width: Int, height: Int){ - this.setBounds(x,y,width,height) - } - - fun open() { - isVisible = true - Thread { - while (true) { - SwingUtilities.invokeLater { - val removeList = ArrayList() - eventQueue.toTypedArray().forEach { event -> - when (event) { - is GuiEvent.UpdatePulseCount -> { - pulseCount.text = event.amount.toString() - pulseCountGraph.addValues(intArrayOf(event.amount).toList()) - } - is GuiEvent.UpdateTickTime -> { - tickTime.text = event.time.toString() + "ms" - tickTimeGraph.addValues(intArrayOf(event.time.toInt()).toList()) - } - is GuiEvent.AddDefaultMessage -> defaultLog.text = defaultLog.text + event.message + "\n" - is GuiEvent.AddAIPMessage -> AIPlog.text = AIPlog.text + event.message + "\n" - is GuiEvent.AddDebugMessage -> debugLog.text = debugLog.text + event.message + "\n" - is GuiEvent.UpdateQueuedPackets -> { - queuedPackets.text = event.amount.toString() - packetQueueGraph.addValues(intArrayOf(event.amount).toList()) - } - } - removeList.add(event) - } - - pulseList.text = GameWorld.Pulser.currentPulses - .map { it.javaClass.simpleName + "\n" } - .filter { it.replace("\n", "").isNotEmpty() } - .sorted() - .joinToString("") - - eventQueue.removeAll(removeList) - repaint() - } - Thread.sleep(600L) - } - }.start() - } -} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/Server.kt b/Server/src/main/kotlin/rs09/Server.kt index 57d3bb213..5cb4f62e5 100644 --- a/Server/src/main/kotlin/rs09/Server.kt +++ b/Server/src/main/kotlin/rs09/Server.kt @@ -2,7 +2,6 @@ package rs09 import core.game.system.SystemManager import core.game.system.SystemState -import core.game.system.mysql.SQLManager import core.net.NioReactor import core.tools.TimeStamp import kotlinx.coroutines.* @@ -52,28 +51,27 @@ object Server { @JvmStatic fun main(args: Array) { if (args.isNotEmpty()) { - SystemLogger.logInfo("Using config file: ${args[0]}") + SystemLogger.logInfo(this::class.java, "Using config file: ${args[0]}") ServerConfigParser.parse(args[0]) } else { - SystemLogger.logInfo("Using config file: ${"worldprops" + File.separator + "default.conf"}") + SystemLogger.logInfo(this::class.java, "Using config file: ${"worldprops" + File.separator + "default.conf"}") ServerConfigParser.parse("worldprops" + File.separator + "default.conf") } startTime = System.currentTimeMillis() val t = TimeStamp() GameWorld.prompt(true) - SQLManager.init() Runtime.getRuntime().addShutdownHook(ServerConstants.SHUTDOWN_HOOK) - SystemLogger.logInfo("Starting networking...") + SystemLogger.logInfo(this::class.java, "Starting networking...") try { reactor = NioReactor.configure(43594 + GameWorld.settings?.worldId!!) reactor!!.start() } catch (e: BindException) { - SystemLogger.logErr("Port " + (43594 + GameWorld.settings?.worldId!!) + " is already in use!") + SystemLogger.logErr(this::class.java, "Port " + (43594 + GameWorld.settings?.worldId!!) + " is already in use!") throw e } //WorldCommunicator.connect() - SystemLogger.logInfo(GameWorld.settings?.name + " flags " + GameWorld.settings?.toString()) - SystemLogger.logInfo(GameWorld.settings?.name + " started in " + t.duration(false, "") + " milliseconds.") + SystemLogger.logInfo(this::class.java, GameWorld.settings?.name + " flags " + GameWorld.settings?.toString()) + SystemLogger.logInfo(this::class.java, GameWorld.settings?.name + " started in " + t.duration(false, "") + " milliseconds.") val scanner = Scanner(System.`in`) running = true @@ -96,8 +94,8 @@ object Server { delay(20000) while (running) { if (System.currentTimeMillis() - lastHeartbeat > 7200 && running) { - SystemLogger.logErr("Triggering reboot due to heartbeat timeout") - SystemLogger.logErr("Creating thread dump...") + SystemLogger.logErr(this::class.java, "Triggering reboot due to heartbeat timeout") + SystemLogger.logErr(this::class.java, "Creating thread dump...") val dump = threadDump(true, true) withContext(Dispatchers.IO) { diff --git a/Server/src/main/kotlin/rs09/ServerStore.kt b/Server/src/main/kotlin/rs09/ServerStore.kt index c76c9ecd8..fa6a81b5e 100644 --- a/Server/src/main/kotlin/rs09/ServerStore.kt +++ b/Server/src/main/kotlin/rs09/ServerStore.kt @@ -41,7 +41,7 @@ class ServerStore : PersistWorld { fileMap[key] = data counter++ } catch (e: Exception){ - SystemLogger.logErr("Failed parsing ${storeFile.name} - stack trace below.") + SystemLogger.logErr(this::class.java, "Failed parsing ${storeFile.name} - stack trace below.") e.printStackTrace() return@forEach } diff --git a/Server/src/main/kotlin/rs09/game/ai/general/ScriptAPI.kt b/Server/src/main/kotlin/rs09/game/ai/general/ScriptAPI.kt index c93955d82..bdfbd287b 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/ScriptAPI.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/ScriptAPI.kt @@ -35,7 +35,7 @@ import rs09.ServerConstants.Companion.SERVER_GE_NAME import rs09.game.ai.AIRepository import rs09.game.ge.GrandExchange import rs09.game.ge.GrandExchangeOffer -import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import rs09.game.system.SystemLogger import rs09.game.system.config.ItemConfigParser @@ -68,15 +68,15 @@ class ScriptAPI(private val bot: Player) { if(node == null) return val type = when(node){ - is Scenery -> InteractionListener.SCENERY - is NPC -> InteractionListener.NPC - is Item -> InteractionListener.ITEM - else -> -1 - } + is Scenery -> IntType.SCENERY + is NPC -> IntType.NPC + is Item -> IntType.ITEM + else -> null + } ?: return val opt: Option? = node.interaction.options.filter {it != null && it.name.equals(option, true) }.firstOrNull() if(opt == null){ - SystemLogger.logWarn("Invalid option name provided: $option") + SystemLogger.logWarn(this::class.java, "Invalid option name provided: $option") return } @@ -464,7 +464,7 @@ class ScriptAPI(private val bot: Player) { } val canSell = GrandExchange.addBotOffer(actualId, itemAmt) if (canSell && saleIsBigNews(actualId, itemAmt)) { - SystemLogger.logAI("Offered $itemAmt of $actualId on the GE.") + 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)) diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/Adventurer.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/Adventurer.kt index cbb0f36d6..98b6d3b76 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/Adventurer.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/Adventurer.kt @@ -24,6 +24,7 @@ import org.json.simple.JSONObject import rs09.ServerConstants import rs09.game.ai.AIRepository import rs09.game.ai.pvmbots.CombatBotAssembler +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import java.io.File import java.io.FileReader @@ -126,8 +127,9 @@ class Adventurer(val style: CombatStyle): Script() { "Teak","Mahogany") val resource = scriptAPI.getNearestNodeFromList(resources,true) if(resource != null){ - if(resource.name.contains("ocks")) InteractionListeners.run(resource.id,1,"mine",bot,resource) - else InteractionListeners.run(resource.id,1,"chop down",bot,resource) + if(resource.name.contains("ocks")) InteractionListeners.run(resource.id, + IntType.SCENERY,"mine",bot,resource) + else InteractionListeners.run(resource.id,IntType.SCENERY,"chop down",bot,resource) } } } diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/CoalMiner.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/CoalMiner.kt index 55924b6ce..84bfa4d70 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/CoalMiner.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/CoalMiner.kt @@ -11,6 +11,7 @@ import org.rs09.consts.Items import rs09.game.ai.general.ScriptAPI import rs09.game.ai.skillingbot.SkillingBotAssembler import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import api.* @@ -56,7 +57,7 @@ class CoalMiner : Script() { scriptAPI.walkTo(mine.randomLoc) } else { val rock = scriptAPI.getNearestNode("rocks",true) - rock?.let { InteractionListeners.run(rock.id, InteractionListener.SCENERY,"mine",bot,rock) } + rock?.let { InteractionListeners.run(rock.id, IntType.SCENERY,"mine",bot,rock) } } overlay!!.setAmount(amountInInventory(bot, Items.COAL_453) + coalAmount) } diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/DraynorWillows.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/DraynorWillows.kt index f91f224a1..0f3faafd8 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/DraynorWillows.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/DraynorWillows.kt @@ -8,6 +8,7 @@ import core.game.node.item.Item import core.game.world.map.zone.ZoneBorders import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import rs09.tools.stringtools.colorize @@ -43,7 +44,7 @@ class DraynorWillows : Script(){ val willowtree = scriptAPI.getNearestNode("willow", true) bot.interfaceManager.close() willowtree?.let { InteractionListeners.run(willowtree.id, - InteractionListener.SCENERY,"Chop down",bot,willowtree) } + IntType.SCENERY,"Chop down",bot,willowtree) } if (bot.inventory.isFull) state = State.BANKING } diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/GnomeAgility.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/GnomeAgility.kt index 991430dd8..4323d532f 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/GnomeAgility.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/GnomeAgility.kt @@ -5,6 +5,7 @@ import core.game.world.map.zone.ZoneBorders import rs09.game.ai.general.ScriptAPI import rs09.game.ai.skillingbot.SkillingBotAssembler import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/LobsterCatcher.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/LobsterCatcher.kt index d8364100c..dacae6e3c 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/LobsterCatcher.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/LobsterCatcher.kt @@ -14,6 +14,7 @@ import org.rs09.consts.Items import rs09.game.ai.AIPlayer import rs09.game.ai.general.ScriptAPI import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import rs09.game.world.GameWorld import kotlin.random.Random @@ -74,7 +75,7 @@ class LobsterCatcher : Script() { if(spot == null){ state = State.IDLE } else { - InteractionListeners.run(spot.id,InteractionListener.NPC,"cage",bot,spot) + InteractionListeners.run(spot.id,IntType.NPC,"cage",bot,spot) } if(bot.inventory.isFull){ state = State.FIND_BANK diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/SeersMagicTrees.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/SeersMagicTrees.kt index bf0f084cd..403c58cec 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/SeersMagicTrees.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/SeersMagicTrees.kt @@ -11,6 +11,7 @@ import org.rs09.consts.Items import rs09.game.ai.general.ScriptAPI import rs09.game.ai.skillingbot.SkillingBotAssembler import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners @PlayerCompatible @@ -40,7 +41,7 @@ class SeersMagicTrees : Script(){ State.CHOPPING -> { val tree = scriptAPI.getNearestNode(1306,true) bot.interfaceManager.close() - tree?.let { InteractionListeners.run(tree.id, InteractionListener.SCENERY,"Chop down",bot,tree) } + tree?.let { InteractionListeners.run(tree.id, IntType.SCENERY,"Chop down",bot,tree) } if(bot.inventory.isFull){ state = State.FIND_BANK } diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/SharkCatcher.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/SharkCatcher.kt index 34366b032..6062d7135 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/SharkCatcher.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/SharkCatcher.kt @@ -10,6 +10,7 @@ import org.rs09.consts.Items import rs09.game.ai.AIPlayer import rs09.game.ai.general.ScriptAPI import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import kotlin.random.Random @@ -117,7 +118,7 @@ class SharkCatcher : Script() { if (Random.nextBoolean()) { tick = 0 val spot = scriptAPI.getNearestNode(334, false) - spot?.let { InteractionListeners.run(spot.id, InteractionListener.NPC,"harpoon",bot,spot) } + spot?.let { InteractionListeners.run(spot.id, IntType.NPC,"harpoon",bot,spot) } if(bot.inventory.isFull){ state = State.FIND_BANK } else { diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/ShootingStarBot.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/ShootingStarBot.kt index 187006e01..c5019f70a 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/ShootingStarBot.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/ShootingStarBot.kt @@ -8,6 +8,7 @@ import org.rs09.consts.Items import rs09.game.ai.general.GeneralBotCreator import rs09.game.content.global.worldevents.shootingstar.ShootingStarPlugin import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners class ShootingStarBot : Script() { @@ -33,7 +34,7 @@ class ShootingStarBot : Script() { } State.MINING -> { - InteractionListeners.run(star.starObject.id, InteractionListener.SCENERY, "mine", bot, star.starObject) + InteractionListeners.run(star.starObject.id, IntType.SCENERY, "mine", bot, star.starObject) } State.TELEPORT_BACK -> { diff --git a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/VarrockEssenceMiner.kt b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/VarrockEssenceMiner.kt index e263a17df..cbc488db3 100644 --- a/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/VarrockEssenceMiner.kt +++ b/Server/src/main/kotlin/rs09/game/ai/general/scriptrepository/VarrockEssenceMiner.kt @@ -7,6 +7,7 @@ import core.game.world.map.zone.ZoneBorders import org.rs09.consts.Items import rs09.game.ai.skillingbot.SkillingBotAssembler import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners @PlayerCompatible @@ -50,7 +51,7 @@ class VarrockEssenceMiner : Script(){ State.MINING -> { val essence = scriptAPI.getNearestNode(2491,true) - essence?.let { InteractionListeners.run(essence.id, InteractionListener.SCENERY,"mine",bot,essence) } + essence?.let { InteractionListeners.run(essence.id, IntType.SCENERY,"mine",bot,essence) } if(bot.inventory.isFull) state = State.TO_BANK } diff --git a/Server/src/main/kotlin/rs09/game/ai/pvmbots/PvMBotsBuilder.kt b/Server/src/main/kotlin/rs09/game/ai/pvmbots/PvMBotsBuilder.kt index 7eb8d151a..d117847fa 100644 --- a/Server/src/main/kotlin/rs09/game/ai/pvmbots/PvMBotsBuilder.kt +++ b/Server/src/main/kotlin/rs09/game/ai/pvmbots/PvMBotsBuilder.kt @@ -1,28 +1,11 @@ package rs09.game.ai.pvmbots -import core.game.container.impl.EquipmentContainer -import core.game.node.entity.combat.CombatSpell -import core.game.node.entity.player.link.SpellBookManager -import core.game.node.entity.player.link.appearance.Gender -import core.game.node.item.Item -import rs09.game.world.GameWorld import core.game.world.map.Location -import core.tools.RandomFunction -import rs09.game.ai.AIPlayer import rs09.game.ai.minigamebots.pestcontrol.PestControlTestBot import rs09.game.ai.minigamebots.pestcontrol.PestControlTestBot2 -import core.game.node.entity.skill.Skills -import java.util.* -import java.util.concurrent.Executors // import sun.util.resources.CalendarData; class PvMBotsBuilder { - fun randomItem() { - var test: Item? = null - val tests = ArrayList() - for (x in 0..9998) test = Item(x) - if (test!!.definition.equipId != 0) tests.add(test) - } companion object { var botsSpawned = 0 @@ -32,474 +15,6 @@ class PvMBotsBuilder { return PvMBots(l) } - fun createLowest(l: Location?): LowestBot { - botsSpawned++ - return LowestBot(l) - } - - fun createNoob(l: Location?): NoobBot { - botsSpawned++ - return NoobBot(l) - } - - fun createDragonKiller(l: Location?): DragonKiller { - botsSpawned++ - return DragonKiller(l) - } - - fun createGiantMoleBot(l: Location?): GiantMoleBot { - botsSpawned++ - return GiantMoleBot(l) - } - - fun generateGiantMoleBot(p: PvMBots) { - p.skills.setLevel(Skills.SLAYER, 99) - p.skills.setStaticLevel(Skills.SLAYER, 99) - p.skills.setLevel(Skills.STRENGTH, 99) - p.skills.setStaticLevel(Skills.STRENGTH, 99) - p.skills.setLevel(Skills.ATTACK, 99) - p.skills.setStaticLevel(Skills.ATTACK, 99) - p.skills.setStaticLevel(Skills.HITPOINTS, 99) - p.skills.setLevel(Skills.HITPOINTS, 99) - p.skills.setStaticLevel(Skills.DEFENCE, 99) - p.skills.setLevel(Skills.DEFENCE, 99) - p.skills.setStaticLevel(Skills.PRAYER, 99) - p.skills.setLevel(Skills.PRAYER, 99) - p.skills.updateCombatLevel() - p.appearance.sync() - p.equipment.replace(Item(4720), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(4722), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(4716), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(4718), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(-1), EquipmentContainer.SLOT_SHIELD) - p.inventory.add(Item(952)) - p.inventory.add(Item(33)) - } - - fun generateMinLevels(p: PvMBots) { - //Slayer so they can attack all monsters - p.skills.setLevel(Skills.SLAYER, 99) - p.skills.setStaticLevel(Skills.SLAYER, 99) - val combatType = RandomFunction.getRandom(2) - p.skills.setLevel(Skills.HITPOINTS, 15) - p.skills.setStaticLevel(Skills.HITPOINTS, 15) - p.inventory.add(Item(329, 5)) - when (combatType) { - 0 -> { - buildArcherStats(p) - buildArcherEquipment(p) - } - 1 -> { - buildMeleeStats(p) - buildMeleeEquipment(p) - } - 2 -> { - buildMageStats(p) - buildMagicEquipment(p) - setupWizard(p) - } - else -> { - buildMeleeStats(p) - buildMeleeEquipment(p) - } - } - } - - fun createDragonKiller(p: DragonKiller) { - p.skills.setLevel(Skills.SLAYER, 99) - p.skills.setStaticLevel(Skills.SLAYER, 99) - val combatType = RandomFunction.getRandom(2) - p.skills.setLevel(Skills.HITPOINTS, 55) - p.skills.setStaticLevel(Skills.HITPOINTS, 55) - when (combatType) { - 0 -> { - buildDragonArcherStats(p) - buildDragonArcherEquipment(p) - } - 1 -> { - buildDragonMeleeStats(p) - buildDragonMeleeEquipment(p) - } - else -> { - buildDragonMeleeStats(p) - buildDragonMeleeEquipment(p) - } - } - } - - private fun buildMaxMeleeStats(p: AIPlayer) { - p.skills.setLevel(Skills.ATTACK, 99) - p.skills.setStaticLevel(Skills.ATTACK, 99) - p.skills.setLevel(Skills.STRENGTH, 99) - p.skills.setStaticLevel(Skills.STRENGTH, 99) - p.skills.setLevel(Skills.DEFENCE, 99) - p.skills.setStaticLevel(Skills.DEFENCE, 99) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - private fun buildMaxMeleeEquipment(p: AIPlayer) { - val helms = intArrayOf( - 3751) - val shield = intArrayOf( - 14767) - val platebody = intArrayOf( - 11724) - val platelegs = intArrayOf( - 11726) - val amulets = intArrayOf( - 6585) - val boots = intArrayOf( - 3105) - val cape = intArrayOf( - 6570) - val gloves = intArrayOf( - 7462) - val weapons2 = intArrayOf( - 4151) - val arrows = intArrayOf( - 892) - p.equipment.replace(Item(helms[RandomFunction.random(helms.size)]), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(shield[RandomFunction.random(shield.size)]), EquipmentContainer.SLOT_SHIELD) - p.equipment.replace(Item(platebody[RandomFunction.random(platebody.size)]), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(platelegs[RandomFunction.random(platelegs.size)]), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(weapons2[RandomFunction.random(weapons2.size)]), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(weapons2[RandomFunction.random(arrows.size)], 99999), EquipmentContainer.SLOT_ARROWS) - p.equipment.replace(Item(amulets[RandomFunction.random(amulets.size)]), EquipmentContainer.SLOT_AMULET) - p.equipment.replace(Item(boots[RandomFunction.random(boots.size)]), EquipmentContainer.SLOT_FEET) - p.equipment.replace(Item(cape[RandomFunction.random(cape.size)]), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(gloves[RandomFunction.random(gloves.size)]), EquipmentContainer.SLOT_HANDS) - } - - fun createNoob(p: NoobBot) { - p.skills.setLevel(Skills.SLAYER, 99) - p.skills.setStaticLevel(Skills.SLAYER, 99) - val combatType = RandomFunction.getRandom(3) - p.skills.setLevel(Skills.HITPOINTS, 10 + RandomFunction.getRandom(10)) - p.skills.setStaticLevel(Skills.HITPOINTS, 10 + RandomFunction.getRandom(10)) - p.skills.setLevel(Skills.DEFENCE, 1 + RandomFunction.getRandom(9)) - p.skills.setStaticLevel(Skills.DEFENCE, 1 + RandomFunction.getRandom(9)) - p.inventory.add(Item(329, 5)) - when (combatType) { - 0 -> { - buildNoobArcherStats(p) - buildNoobArcherEquipment(p) - } - 1 -> { - buildNoobMeleeStats(p) - buildNoobMeleeEquipment(p) - } - 2 -> { - run { - buildNoobMageStats(p) - buildNoobMagicEquipment(p) - setupWizard(p) - } - run { - buildNoobMeleeStats(p) - buildNoobMeleeEquipment(p) - } - } - else -> { - buildNoobMeleeStats(p) - buildNoobMeleeEquipment(p) - } - } - } - - private fun buildArcherStats(p: PvMBots) { - p.skills.setLevel(Skills.RANGE, 10) - p.skills.setStaticLevel(Skills.RANGE, 10) - p.skills.setLevel(Skills.DEFENCE, 10) - p.skills.setStaticLevel(Skills.DEFENCE, 10) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - private fun buildDragonArcherStats(p: DragonKiller) { - p.skills.setStaticLevel(Skills.RANGE, 55 + RandomFunction.getRandom(15)) - p.skills.setLevel(Skills.RANGE, p.skills.getLevel(Skills.RANGE)) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - private fun buildNoobArcherStats(p: NoobBot) { - p.skills.setLevel(Skills.RANGE, 1 + RandomFunction.getRandom(10)) - p.skills.setStaticLevel(Skills.RANGE, 1 + RandomFunction.getRandom(10)) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - fun buildMeleeStats(p: PvMBots) { - p.skills.setLevel(Skills.ATTACK, 10) - p.skills.setStaticLevel(Skills.ATTACK, 10) - p.skills.setLevel(Skills.STRENGTH, 10) - p.skills.setStaticLevel(Skills.STRENGTH, 10) - p.skills.setLevel(Skills.DEFENCE, 10) - p.skills.setStaticLevel(Skills.DEFENCE, 10) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - fun buildDragonMeleeStats(p: DragonKiller) { - p.skills.setStaticLevel(Skills.ATTACK, 55 + RandomFunction.getRandom(15)) - p.skills.setLevel(Skills.ATTACK, p.skills.getLevel(Skills.ATTACK)) - p.skills.setStaticLevel(Skills.STRENGTH, 55 + RandomFunction.getRandom(15)) - p.skills.setLevel(Skills.STRENGTH, p.skills.getLevel(Skills.STRENGTH)) - p.skills.setLevel(Skills.DEFENCE, 45 + RandomFunction.getRandom(15)) - p.skills.setLevel(Skills.DEFENCE, p.skills.getLevel(Skills.DEFENCE)) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - private fun buildNoobMeleeStats(p: NoobBot) { - p.skills.setLevel(Skills.ATTACK, 1 + RandomFunction.getRandom(10)) - p.skills.setStaticLevel(Skills.ATTACK, 1 + RandomFunction.getRandom(10)) - p.skills.setLevel(Skills.STRENGTH, 1 + RandomFunction.getRandom(10)) - p.skills.setStaticLevel(Skills.STRENGTH, 1 + RandomFunction.getRandom(10)) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - private fun buildMageStats(p: PvMBots) { - p.skills.setLevel(Skills.MAGIC, 10) - p.skills.setStaticLevel(Skills.MAGIC, 10) - p.skills.setLevel(Skills.DEFENCE, 10) - p.skills.setStaticLevel(Skills.DEFENCE, 10) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - private fun buildNoobMageStats(p: NoobBot) { - p.skills.setLevel(Skills.MAGIC, 1 + RandomFunction.getRandom(10)) - p.skills.setStaticLevel(Skills.MAGIC, 1 + RandomFunction.getRandom(10)) - p.skills.updateCombatLevel() - p.appearance.sync() - } - - private fun setupWizard(p: PvMBots) { - //final int SPELL_IDS[] = new int[] {1, 4, 6, 8, 10, 14, 17, 20, 24, 27, 33, 38, 45, 48, 52, 55 }; - p.properties.autocastSpell = SpellBookManager.SpellBook.MODERN.getSpell(1) as CombatSpell - p.inventory.add(Item(556, 1000)) //Air runes - p.inventory.add(Item(558, 1000)) //Mind runes - } - - private fun buildArcherEquipment(p: PvMBots) { - p.equipment.replace(Item(1169), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(1129), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(1095), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(841), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(884, 5000), EquipmentContainer.SLOT_ARROWS) - p.equipment.replace(Item(1007), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(1478), EquipmentContainer.SLOT_AMULET) - } - - private fun buildDragonArcherEquipment(p: DragonKiller) { - p.equipment.replace(Item(1169), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(13483), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(1099), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(9185), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(1540), EquipmentContainer.SLOT_SHIELD) - p.equipment.replace(Item(9140, 500), EquipmentContainer.SLOT_ARROWS) - p.equipment.replace(Item(10498), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(1478), EquipmentContainer.SLOT_AMULET) - } - - private fun buildNoobArcherEquipment(p: PvMBots) { - val hats = intArrayOf(1169, 1169, 1139, 1137, 1153, 579) - val legs = intArrayOf(1095, 7366, 1075, 1087, 1095) - val chest = intArrayOf(1129, 1103, 1101, 1129, 1117, 577) - p.equipment.replace(Item(hats[RandomFunction.getRandom(hats.size - 1)]), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(chest[RandomFunction.getRandom(chest.size - 1)]), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(legs[RandomFunction.getRandom(legs.size - 1)]), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(841), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(884, 5000), EquipmentContainer.SLOT_ARROWS) - p.equipment.replace(Item(1007), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(1478), EquipmentContainer.SLOT_AMULET) - } - - private fun buildMeleeEquipment(p: PvMBots) { - p.equipment.replace(Item(1153), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(1115), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(1067), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(1309), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(884), EquipmentContainer.SLOT_ARROWS) - p.equipment.replace(Item(1007), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(1725), EquipmentContainer.SLOT_AMULET) - } - - private fun buildDragonMeleeEquipment(p: DragonKiller) { - p.equipment.replace(Item(1163), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(1127), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(1079), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(1333), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(1540), EquipmentContainer.SLOT_SHIELD) - p.equipment.replace(Item(1007), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(1725), EquipmentContainer.SLOT_AMULET) - } - - private fun buildNoobMeleeEquipment(p: PvMBots) { - val hats = intArrayOf(1169, 1169, 1139, 1137, 1153, 579) - val legs = intArrayOf(1095, 7366, 1075, 1087, 1095) - val chest = intArrayOf(1129, 1103, 1101, 1129, 1117, 577) - val weapons = intArrayOf(1307, 1321, 1375, 1203, 1239, 1267, 1293, 1323, 1335) - p.equipment.replace(Item(hats[RandomFunction.getRandom(hats.size - 1)]), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(chest[RandomFunction.getRandom(chest.size - 1)]), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(legs[RandomFunction.getRandom(legs.size - 1)]), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(weapons[RandomFunction.getRandom(weapons.size - 1)]), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(884), EquipmentContainer.SLOT_ARROWS) - p.equipment.replace(Item(1007), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(1725), EquipmentContainer.SLOT_AMULET) - } - - private fun buildMagicEquipment(p: PvMBots) { - p.equipment.replace(Item(579), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(577), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(1011), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(1389), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(884), EquipmentContainer.SLOT_ARROWS) - p.equipment.replace(Item(1007), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(1727), EquipmentContainer.SLOT_AMULET) - } - - private fun buildNoobMagicEquipment(p: PvMBots) { - val hats = intArrayOf(1169, 1169, 1139, 1137, 1153, 579) - val legs = intArrayOf(1095, 7366, 1075, 1087, 1095) - val chest = intArrayOf(1129, 1103, 1101, 1129, 1117, 577) - val weapons = intArrayOf(1379, 1383, 1385, 1387, 1389) - p.equipment.replace(Item(hats[RandomFunction.getRandom(hats.size - 1)]), EquipmentContainer.SLOT_HAT) - p.equipment.replace(Item(chest[RandomFunction.getRandom(chest.size - 1)]), EquipmentContainer.SLOT_CHEST) - p.equipment.replace(Item(legs[RandomFunction.getRandom(legs.size - 1)]), EquipmentContainer.SLOT_LEGS) - p.equipment.replace(Item(weapons[RandomFunction.getRandom(weapons.size - 1)]), EquipmentContainer.SLOT_WEAPON) - p.equipment.replace(Item(884), EquipmentContainer.SLOT_ARROWS) - p.equipment.replace(Item(1007), EquipmentContainer.SLOT_CAPE) - p.equipment.replace(Item(1727), EquipmentContainer.SLOT_AMULET) - } - - fun spawn(loc: Location?) { - val bot = create(loc) - bot.appearance.gender = if (RandomFunction.random(3) == 1) Gender.FEMALE else Gender.MALE - } - - fun spawnLowest(loc: Location?) { - val bot = createLowest(loc) - generateMinLevels(bot) - } - - fun spawnNoob(loc: Location?) { - val bot = createNoob(loc) - createNoob(bot) - } - - fun spawnDragonKiller(loc: Location?) { - val bot = createDragonKiller(loc) - bot.appearance.gender = if (RandomFunction.random(3) == 1) Gender.FEMALE else Gender.MALE - createDragonKiller(bot) - } - - fun spawnGiantMoleBot(loc: Location?) { - val bot = createGiantMoleBot(Location(0, 0)) - bot.teleport(loc) - bot.appearance.gender = if (RandomFunction.random(3) == 1) Gender.FEMALE else Gender.MALE - generateGiantMoleBot(bot) - } - - @JvmStatic - fun immersiveSpawns() { - Executors.newSingleThreadExecutor().execute { - /*//Lumbridge - //GOBLINS - spawnLowest(new Location(3259, 3224)); - spawnLowest(new Location(3251, 3235)); - spawnLowest(new Location(3244, 3247)); - spawnNoob(new Location(3244, 3247)); - //COWS - spawnLowest(new Location(3259, 3245)); - spawnLowest(new Location(3258, 3261)); - spawnLowest(new Location(3263, 3263)); - spawnLowest(new Location(3263, 3271)); - spawnLowest(new Location(3254, 3288)); - //CHICKENS - spawnLowest(new Location(3234, 3294)); - spawnLowest(new Location(3229, 3297)); - //GOBLINS2 - spawnLowest(new Location(3182, 3255)); - spawnLowest(new Location(3169, 3254)); - spawnLowest(new Location(3167, 3233)); - spawnLowest(new Location(3152, 3228));*/ - //Lumby castle - spawnLowest(Location(3221, 3219)) - /* spawnNoob(new Location(3193, 3208)); - //Lumby swamp - spawnNoob(new Location(3224, 3186)); - spawnNoob(new Location(3217, 3177)); - spawnNoob(new Location(3209, 3191)); - - //Edge - spawnLowest(new Location(3096, 3509)); - - //Edge dungeon - //Hill giants - spawnLowest(new Location(3118, 9848)); - spawnLowest(new Location(3110, 9842)); - spawnLowest(new Location(3115, 9836)); - spawnLowest(new Location(3107, 9832)); - spawnLowest(new Location(3099, 9834)); - //brass key room - spawnLowest(new Location(3127, 9863)); - - //Dark wizzards - spawnLowest(new Location(3226, 3367)); - spawnLowest(new Location(3226, 3368)); - spawnLowest(new Location(3230, 3373)); - spawnLowest(new Location(3209, 3378)); - - //Varrock palace - spawnLowest(new Location(3218, 3465)); - spawnLowest(new Location(3209, 3462)); - - //Varrock Sewers - spawnLowest(new Location(3235, 9868)); - spawnLowest(new Location(3242, 9915)); - spawnLowest(new Location(3176, 9883)); - - //Dragons Wilderness - //WEST - spawnDragonKiller(new Location(2977, 3614)); - spawnDragonKiller(new Location(2987, 3619)); - - //Burthrope Dungeon - //Blue dragons - spawnDragonKiller(new Location(2901, 9799)); - spawnDragonKiller(new Location(2910, 9804)); - //Al kharid - //palace - spawnLowest(new Location(3301, 3173)); - spawnNoob(new Location(3293, 3170)); - spawnNoob(new Location(3286, 3171)); - spawnNoob(new Location(3289, 3169)); - - //Slayer Tower - spawnLowest(new Location(3412, 3173)); - spawnNoob(new Location(3412, 3539)); - spawnNoob(new Location(3420, 3545)); - spawnNoob(new Location(3420, 3545)); - spawnNoob(new Location(3420, 3558)); - spawnNoob(new Location(3433, 3571)); - //Replace with something like rune bots - spawnDragonKiller(new Location(3437, 3562, 1)); - spawnDragonKiller(new Location(3437, 3562, 1)); - spawnDragonKiller(new Location(3437, 3562, 1)); - //Bloodvelds - spawnDragonKiller(new Location(3417, 3561, 1)); - spawnDragonKiller(new Location(3417, 3561, 1)); - spawnDragonKiller(new Location(3417, 3561, 1)); - //Brimhaven dragons - spawnDragonKiller(new Location(2704, 9450)); - spawnDragonKiller(new Location(2704, 9450));*/println("[" + GameWorld.settings?.name + "]: PvMBotsBuilder: Spawned " + botsSpawned + " bots.") - } - } - @JvmStatic fun createPestControlTestBot2(l: Location?): PestControlTestBot2 { botsSpawned++ diff --git a/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFUBeacon.kt b/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFUBeacon.kt index fef439cfb..59de2049f 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFUBeacon.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFUBeacon.kt @@ -29,7 +29,7 @@ enum class AFUBeacon(val title: String, val fmLevel: Int, val varpId: Int, val o for (beacon in values()) { if (beacon.location.equals(location)) return beacon } - return RIVER_SALVE.also { SystemLogger.logWarn("Unhandled Beacon Location ${location.toString()}") } + return RIVER_SALVE.also { SystemLogger.logWarn(this::class.java, "Unhandled Beacon Location ${location.toString()}") } } fun resetAllBeacons(player: Player){ diff --git a/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFUBeaconHandler.kt b/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFUBeaconHandler.kt index c682c6008..bde15fdf4 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFUBeaconHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFUBeaconHandler.kt @@ -9,6 +9,7 @@ import core.game.system.task.Pulse import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld private val VALID_LOGS = intArrayOf(Items.LOGS_1511, Items.OAK_LOGS_1521,Items.WILLOW_LOGS_1519,Items.MAPLE_LOGS_1517,Items.YEW_LOGS_1515,Items.MAGIC_LOGS_1513) @@ -22,7 +23,7 @@ private val LIGHT_ANIM = Animation(7307) class AFUBeaconListeners : InteractionListener{ override fun defineListeners() { - on(SCENERY,"add-logs","light"){ player, node -> + on(IntType.SCENERY,"add-logs","light"){ player, node -> val beacon = AFUBeacon.forLocation(node.location) val questComplete = player.questRepository.isComplete("All Fired Up") val questStage = player.questRepository.getStage("All Fired Up") diff --git a/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFURepairClimbHandler.kt b/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFURepairClimbHandler.kt index b0a5c8710..786efc57f 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFURepairClimbHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/allfiredup/AFURepairClimbHandler.kt @@ -10,6 +10,7 @@ import core.game.world.map.Location import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import java.util.* /** @@ -19,18 +20,18 @@ import java.util.* class AFURepairClimbHandler : InteractionListener { val repairIDs = intArrayOf(38480,38470,38494) - val climbIDs = intArrayOf(38469,38471,38486,38481,38469) + val climbIDs = intArrayOf(38469,38471,38486,38481) override fun defineListeners() { - on(repairIDs,SCENERY,"repair"){ player, _ -> + on(repairIDs, IntType.SCENERY, "repair"){ player, _ -> var rco: RepairClimbObject = RepairClimbObject.GWD for(ent in RepairClimbObject.values()) if(ent.destinationDown?.withinDistance(player.location,2) == true || ent.destinationUp?.withinDistance(player.location,2) == true) rco = ent repair(player,rco) return@on true } - on(climbIDs,SCENERY,"climb"){ player, node -> + on(climbIDs, IntType.SCENERY, "climb"){ player, node -> var rco: RepairClimbObject = RepairClimbObject.GWD for(ent in RepairClimbObject.values()) if(ent.destinationDown?.withinDistance(player.location,2) == true || ent.destinationUp?.withinDistance(player.location,2) == true) rco = ent climb(player,rco,node.location) diff --git a/Server/src/main/kotlin/rs09/game/content/activity/blastfurnace/BlastFurnaceListeners.kt b/Server/src/main/kotlin/rs09/game/content/activity/blastfurnace/BlastFurnaceListeners.kt index 3f1c33c8f..6b08f3c81 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/blastfurnace/BlastFurnaceListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/blastfurnace/BlastFurnaceListeners.kt @@ -7,6 +7,7 @@ import core.game.node.item.Item import core.game.node.entity.skill.smithing.smelting.Bar import core.game.system.task.Pulse import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import core.game.world.map.Location import org.rs09.consts.Items import rs09.game.node.entity.npc.BFOreVariant @@ -59,7 +60,7 @@ class BlastFurnaceListeners : InteractionListener { /**FINALLY AFK STRENGTH TRAINING*/ - on(pump, SCENERY, "operate") { player, node -> + on(pump, IntType.SCENERY, "operate") { player, node -> if(player.getSkills().getLevel(Skills.STRENGTH) >= 30) { val pumpL = Location(1950, 4961, 0) val pumpF = Location(1949, 4961, 0) @@ -91,7 +92,7 @@ class BlastFurnaceListeners : InteractionListener { /**Logic for the pedals that run the conveyor, rewards Agility XP every tick that they're being * pedaled but will stop once the conveyor breaks.*/ - on(pedals, SCENERY, "pedal") { player, node -> + on(pedals, IntType.SCENERY, "pedal") { player, node -> if(player.getSkills().getLevel(Skills.AGILITY) >= 30) { val pedalL = Location(1947, 4966, 0) val pedalF = Location(1946, 4966, 0) @@ -117,7 +118,7 @@ class BlastFurnaceListeners : InteractionListener { /**Lets players use a spade to take coke from the pile of coke*/ - on(coke, SCENERY, "collect") { player, node -> + on(coke, IntType.SCENERY, "collect") { player, node -> if (inInventory(player, Items.SPADE_952, 1)) { animate(player, 2441) removeItem(player, Items.SPADE_952, Container.INVENTORY) @@ -133,7 +134,7 @@ class BlastFurnaceListeners : InteractionListener { * and rewards firemaking XP when shoving coke in there, it will not allow players to shovel more * coke in if it is already full.*/ - on(stove, SCENERY,"refuel") { player, node -> + on(stove, IntType.SCENERY, "refuel") { player, node -> if (inInventory(player, Items.SPADEFUL_OF_COKE_6448, 1) && BlastFurnace.stoveCoke < 30 && player.getSkills().getLevel(Skills.FIREMAKING) >= 30) { animate(player, 2442) lockInteractions(player,2) @@ -164,7 +165,7 @@ class BlastFurnaceListeners : InteractionListener { * smelt your ores because it's waiting for a player attribute to be set by the ore NPCs that this spawns * Is it fucky? Yes * Does it work? Also yes*/ - on(conveyorLoad, SCENERY, "put-ore-on") { player, node -> + on(conveyorLoad, IntType.SCENERY, "put-ore-on") { player, node -> val rocksInInven = playerOre.filter {inInventory(player, it)} var oreToActuallyAdd = 0 var coalToActuallyAdd = 0 @@ -230,7 +231,7 @@ class BlastFurnaceListeners : InteractionListener { /**Added this because clicking on ore then the belt and getting "Nothing interesting happens" is annoying * it's essentially the same thing as above except without the dialogue because if you're clicking on ore * and trying to use it on the conveyor belt then you know what you're trying to do.*/ - onUseWith(SCENERY,conveyorLoad,*playerOre){ player, _, oreType -> + onUseWith(IntType.SCENERY,conveyorLoad,*playerOre){ player, _, oreType -> val amountInInventory = player.inventory.getAmount(oreType.id) val spaceForCoal = player.blastCoal.freeSlots() val spaceForOre = player.blastOre.freeSlots() @@ -282,14 +283,14 @@ class BlastFurnaceListeners : InteractionListener { /**This handles interacting with the temperature gauge on the furnace*/ - on(tGauge, SCENERY, "read") { player, node -> + on(tGauge, IntType.SCENERY, "read") { player, node -> player.interfaceManager.openComponent(30) return@on true } /**This handles taking bars from the dispenser*/ - on(dispenser,SCENERY,"search", "take"){ player, node -> + on(dispenser, IntType.SCENERY, "search", "take"){ player, node -> if(player.varpManager.get(543).getVarbitValue(8) == 0 || player.varpManager.get(543).getVarbitValue(8) == 3) { player.interfaceManager.openComponent(28) } @@ -298,7 +299,7 @@ class BlastFurnaceListeners : InteractionListener { /**Handles using a bucket of water on the bar dispenser*/ - onUseWith(SCENERY,dispenser,Items.BUCKET_OF_WATER_1929){ player, used, with -> + onUseWith(IntType.SCENERY,dispenser,Items.BUCKET_OF_WATER_1929){ player, used, with -> when { player.varpManager.get(543).getVarbitValue(8) == 2 -> { removeItem(player,Items.BUCKET_OF_WATER_1929,Container.INVENTORY) @@ -321,7 +322,7 @@ class BlastFurnaceListeners : InteractionListener { /**The sequel to Limp Bizkits hit single, "Fix shit"*/ - on(brokenPotPipe,SCENERY,"repair"){ player, _ -> + on(brokenPotPipe, IntType.SCENERY, "repair"){ player, _ -> if(player.getSkills().getLevel(Skills.CRAFTING) >= 30){ if(inInventory(player,Items.HAMMER_2347,1)) { rewardXP(player, Skills.CRAFTING, 50.0) @@ -336,7 +337,7 @@ class BlastFurnaceListeners : InteractionListener { return@on true } - on(brokenPumpPipe,SCENERY, "repair"){ player, _ -> + on(brokenPumpPipe, IntType.SCENERY, "repair"){ player, _ -> if(player.getSkills().getLevel(Skills.CRAFTING) >= 30){ if(inInventory(player,Items.HAMMER_2347,1)) { rewardXP(player, Skills.CRAFTING, 50.0) @@ -351,7 +352,7 @@ class BlastFurnaceListeners : InteractionListener { return@on true } - on(brokenBelt,SCENERY,"repair"){ player, _ -> + on(brokenBelt, IntType.SCENERY, "repair"){ player, _ -> if(player.getSkills().getLevel(Skills.CRAFTING) >= 30){ if(inInventory(player,Items.HAMMER_2347,1)) { rewardXP(player, Skills.CRAFTING, 50.0) @@ -366,7 +367,7 @@ class BlastFurnaceListeners : InteractionListener { return@on true } - on(brokenCog,SCENERY,"repair"){ player, _ -> + on(brokenCog, IntType.SCENERY, "repair"){ player, _ -> if(player.getSkills().getLevel(Skills.CRAFTING) >= 30){ if(inInventory(player,Items.HAMMER_2347,1)) { rewardXP(player, Skills.CRAFTING, 50.0) diff --git a/Server/src/main/kotlin/rs09/game/content/activity/fishingtrawler/FishingTrawlerInteractionHandler.kt b/Server/src/main/kotlin/rs09/game/content/activity/fishingtrawler/FishingTrawlerInteractionHandler.kt index a5ed02643..79b6c7f34 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/fishingtrawler/FishingTrawlerInteractionHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/fishingtrawler/FishingTrawlerInteractionHandler.kt @@ -13,6 +13,7 @@ import core.game.world.update.flag.context.Animation import core.plugin.Initializable import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.node.entity.player.info.stats.FISHING_TRAWLER_LEAKS_PATCHED import rs09.game.node.entity.player.info.stats.STATS_BASE import rs09.tools.stringtools.colorize @@ -34,7 +35,7 @@ class FishingTrawlerInteractionHandler : InteractionListener { override fun defineListeners() { - on(ENTRANCE_PLANK,SCENERY,"cross"){ player, _ -> + on(ENTRANCE_PLANK, IntType.SCENERY, "cross"){ player, _ -> if(player.skills.getLevel(Skills.FISHING) < 15){ player.dialogueInterpreter.sendDialogue("You need to be at least level 15 fishing to play.") return@on true @@ -44,7 +45,7 @@ class FishingTrawlerInteractionHandler : InteractionListener { return@on true } - on(EXIT_PLANK,SCENERY,"cross"){ player, _ -> + on(EXIT_PLANK, IntType.SCENERY, "cross"){ player, _ -> player.properties.teleportLocation = Location.create(2676, 3170, 0) (ActivityManager.getActivity("fishing trawler") as FishingTrawlerActivity).removePlayer(player) val session: FishingTrawlerSession? = player.getAttribute("ft-session",null) @@ -52,7 +53,7 @@ class FishingTrawlerInteractionHandler : InteractionListener { return@on true } - on(HOLE,SCENERY,"fill"){ player, node -> + on(HOLE, IntType.SCENERY, "fill"){ player, node -> val session: FishingTrawlerSession? = player.getAttribute("ft-session",null) session ?: return@on false player.lock() @@ -70,12 +71,12 @@ class FishingTrawlerInteractionHandler : InteractionListener { return@on true } - on(NETIDs,SCENERY,"inspect"){ player, _ -> + on(NETIDs, IntType.SCENERY, "inspect"){ player, _ -> player.dialogueInterpreter.open(18237583) return@on true } - on(REWARD_NET,SCENERY,"inspect"){ player, _ -> + on(REWARD_NET, IntType.SCENERY, "inspect"){ player, _ -> val session: FishingTrawlerSession? = player.getAttribute("ft-session",null) if(session == null || session.boatSank){ player.dialogueInterpreter.sendDialogues(player, FacialExpression.GUILTY,"I'd better not go stealing other people's fish.") @@ -85,7 +86,7 @@ class FishingTrawlerInteractionHandler : InteractionListener { return@on true } - on(BARREL_IDS,SCENERY,"climb-on"){ player, _ -> + on(BARREL_IDS, IntType.SCENERY, "climb-on"){ player, _ -> player.properties.teleportLocation = Location.create(2672, 3222, 0) player.dialogueInterpreter.sendDialogue("You climb onto the floating barrel and begin to kick your way to the","shore.","You make it to the shore tired and weary.") player.appearance.setDefaultAnimations() @@ -93,7 +94,7 @@ class FishingTrawlerInteractionHandler : InteractionListener { return@on true } - on(FULL_BAIL_BUCKET,ITEM,"empty"){player,node -> + on(FULL_BAIL_BUCKET, IntType.ITEM, "empty"){player,node -> player.lock() player.pulseManager.run( object : Pulse(){ @@ -115,7 +116,7 @@ class FishingTrawlerInteractionHandler : InteractionListener { return@on true } - on(BAILING_BUCKET,ITEM,"bail-with") { player, node -> + on(BAILING_BUCKET, IntType.ITEM, "bail-with") { player, node -> val session: FishingTrawlerSession? = player.getAttribute("ft-session",null) session ?: return@on false if(!session.isActive){ diff --git a/Server/src/main/kotlin/rs09/game/content/activity/fishingtrawler/FishingTrawlerSession.kt b/Server/src/main/kotlin/rs09/game/content/activity/fishingtrawler/FishingTrawlerSession.kt index 67810b1c1..cb86c8a02 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/fishingtrawler/FishingTrawlerSession.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/fishingtrawler/FishingTrawlerSession.kt @@ -295,11 +295,11 @@ class FishingTrawlerSession(val activity: FishingTrawlerActivity? = null) : Logo override fun areaEnter(entity: Entity) { super.areaEnter(entity) - SystemLogger.logInfo("ENTERED FTZ") + SystemLogger.logInfo(this::class.java, "ENTERED FTZ") } override fun areaLeave(entity: Entity, logout: Boolean) { super.areaLeave(entity, logout) - SystemLogger.logInfo("EXITED FTZ") + SystemLogger.logInfo(this::class.java, "EXITED FTZ") } } diff --git a/Server/src/main/kotlin/rs09/game/content/activity/guild/crafting/CraftingGuildListeners.kt b/Server/src/main/kotlin/rs09/game/content/activity/guild/crafting/CraftingGuildListeners.kt index a14364811..08d7fc5fd 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/guild/crafting/CraftingGuildListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/guild/crafting/CraftingGuildListeners.kt @@ -8,6 +8,7 @@ import org.rs09.consts.Items import org.rs09.consts.Scenery import rs09.game.content.dialogue.region.craftingguild.TheDoorDialogues import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * @author bushtail @@ -19,7 +20,7 @@ class CraftingGuildListeners : InteractionListener { private val CAPE = Items.CRAFTING_CAPE_9780 override fun defineListeners() { - on(GUILD_DOOR, SCENERY, "open") { player, door -> + on(GUILD_DOOR, IntType.SCENERY, "open") { player, door -> if (player.location == Location.create(2933, 3289, 0)) { if (hasLevelStat(player, Skills.CRAFTING, 40)) { if (inEquipment(player, APRON)) { diff --git a/Server/src/main/kotlin/rs09/game/content/activity/mta/MTAListeners.kt b/Server/src/main/kotlin/rs09/game/content/activity/mta/MTAListeners.kt index e478e6f2b..f3f72d033 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/mta/MTAListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/mta/MTAListeners.kt @@ -8,16 +8,17 @@ import core.game.world.update.flag.context.Graphics import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.node.entity.skill.magic.SpellListener import rs09.game.node.entity.skill.magic.spellconsts.Modern class MTAListeners : InteractionListener { override fun defineListeners() { - on(NPCs.MAZE_GUARDIAN_3102,NPC,"talk-to"){player,node -> + on(NPCs.MAZE_GUARDIAN_3102, IntType.NPC, "talk-to"){player,node -> player.dialogueInterpreter.open(node.id, node) return@on true } - setDest(NPC, intArrayOf(NPCs.MAZE_GUARDIAN_3102), "talk-to") { player, node -> + setDest(IntType.NPC, intArrayOf(NPCs.MAZE_GUARDIAN_3102), "talk-to") { player, node -> return@setDest node.location.transform(Direction.getDirection(player.location, node.location), -1); } } diff --git a/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PharaohSceptre.kt b/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PharaohSceptre.kt index ab5d76d55..f3034af4f 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PharaohSceptre.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PharaohSceptre.kt @@ -15,6 +15,7 @@ import core.game.world.update.flag.context.Graphics import org.rs09.consts.Items import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE /** @@ -25,7 +26,7 @@ class PharaohSceptre : InteractionListener { override fun defineListeners() { val SCEPTRES = intArrayOf(Items.PHARAOHS_SCEPTRE_9044, Items.PHARAOHS_SCEPTRE_9046, Items.PHARAOHS_SCEPTRE_9048, Items.PHARAOHS_SCEPTRE_9050) - on(SCEPTRES, ITEM, "teleport", "operate"){player, node -> + on(SCEPTRES, IntType.ITEM, "teleport", "operate"){player, node -> val sceptre = node.asItem() if(sceptre.id == SCEPTRES.last()) diff --git a/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PyramidPlunderMinigame.kt b/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PyramidPlunderMinigame.kt index 78d49e577..7ec4eb814 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PyramidPlunderMinigame.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/pyramidplunder/PyramidPlunderMinigame.kt @@ -16,6 +16,7 @@ import org.rs09.consts.NPCs import org.rs09.consts.Scenery import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** @@ -58,7 +59,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener val ENTRANCES = intArrayOf(16484, 16487, 16490, 16493) //All Scenery.AN_ANONYMOUS_LOOKING_DOOR_16484/etc val SARCOPHAGUS = Scenery.SARCOPHAGUS_16495 - on(Scenery.SPEARTRAP_16517, SCENERY, "pass"){player, node -> + on(Scenery.SPEARTRAP_16517, IntType.SCENERY, "pass"){player, node -> val anim = Animation(CHECK_ANIM) val duration = animationDuration(anim) @@ -108,7 +109,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(intArrayOf(*SEALED_URNS, *SNAKE_URNS), SCENERY, "search") { player, node -> + on(intArrayOf(*SEALED_URNS, *SNAKE_URNS), IntType.SCENERY, "search") { player, node -> animate(player, URN_CHECK) player.faceLocation(node.location) lock(player, 1) @@ -131,7 +132,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(SEALED_URNS, SCENERY, "check for snakes") { player, node -> + on(SEALED_URNS, IntType.SCENERY, "check for snakes") { player, node -> val urn = node.asScenery() animate(player, URN_CHECK) player.faceLocation(node.location) @@ -144,7 +145,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(SNAKE_URNS, SCENERY, "charm snake") { player, node -> + on(SNAKE_URNS, IntType.SCENERY, "charm snake") { player, node -> if(!inInventory(player, Items.SNAKE_CHARM_4605)) { sendMessage(player, "You need a snake charm to charm a snake.") @@ -160,7 +161,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(CHARMED_SNAKES, SCENERY, "search") { player, node -> + on(CHARMED_SNAKES, IntType.SCENERY, "search") { player, node -> animate(player, URN_CHECK) player.faceLocation(node.location) lock(player, 1) @@ -183,12 +184,12 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(OPEN_URNS, SCENERY, "search") { player, _ -> + on(OPEN_URNS, IntType.SCENERY, "search") { player, _ -> sendMessage(player, "You've already looted this urn.") return@on true } - on(SARCOPHAGUS, SCENERY, "open") { player, node -> + on(SARCOPHAGUS, IntType.SCENERY, "open") { player, node -> sendMessage(player, "You attempt to push open the massive lid.") val strength = getDynLevel(player, Skills.STRENGTH) animate(player, PUSH_LID_START) @@ -220,7 +221,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(Scenery.GRAND_GOLD_CHEST_16473, SCENERY, "search") { player, node -> + on(Scenery.GRAND_GOLD_CHEST_16473, IntType.SCENERY, "search") { player, node -> animate(player, OPEN_CHEST_ANIM) runTask(player){ if(RandomFunction.roll(25)) @@ -242,7 +243,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(Scenery.TOMB_DOOR_16475, SCENERY, "pick-lock") { player, node -> + on(Scenery.TOMB_DOOR_16475, IntType.SCENERY, "pick-lock") { player, node -> val anim = Animation(CHECK_ANIM) val duration = animationDuration(anim) @@ -286,7 +287,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(Scenery.TOMB_DOOR_16458, SCENERY, "leave tomb") { player, _ -> + on(Scenery.TOMB_DOOR_16458, IntType.SCENERY, "leave tomb") { player, _ -> openDialogue(player, object : DialogueFile() { override fun handle(componentID: Int, buttonID: Int) { @@ -310,7 +311,7 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(ENTRANCES, SCENERY, "search") { player, door -> + on(ENTRANCES, IntType.SCENERY, "search") { player, door -> if(!getAttribute(player, "tarik-spoken-to", false)) { sendDialogue(player, "I should probably try to find out more about this place before I try to break in.") @@ -343,12 +344,12 @@ class PyramidPlunderMinigame : InteractionListener, TickListener, LogoutListener return@on true } - on(Scenery.TOMB_DOOR_16459, SCENERY, "leave tomb") { player, _ -> + on(Scenery.TOMB_DOOR_16459, IntType.SCENERY, "leave tomb") { player, _ -> teleport(player, getAttribute(player, "pyramid-entrance", Location.create(3288, 2802, 0))) return@on true } - on(NPCs.GUARDIAN_MUMMY_4476, NPC, "start-minigame") { player, _ -> + on(NPCs.GUARDIAN_MUMMY_4476, IntType.NPC, "start-minigame") { player, _ -> if(!getAttribute(player, "pp:mummy-spoken-to", false)) { openDialogue(player, NPCs.GUARDIAN_MUMMY_4476) diff --git a/Server/src/main/kotlin/rs09/game/content/activity/vinesweeper/Vinesweeper.kt b/Server/src/main/kotlin/rs09/game/content/activity/vinesweeper/Vinesweeper.kt index 176854681..a984daa6f 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/vinesweeper/Vinesweeper.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/vinesweeper/Vinesweeper.kt @@ -44,6 +44,7 @@ import rs09.game.content.activity.vinesweeper.Vinesweeper.Companion.populateSeed import rs09.game.content.activity.vinesweeper.Vinesweeper.Companion.scheduleNPCs import rs09.game.content.activity.vinesweeper.Vinesweeper.Companion.sendPoints import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InterfaceListener import rs09.game.world.GameWorld import rs09.game.world.GameWorld.ticks @@ -86,17 +87,17 @@ class Vinesweeper : InteractionListener, InterfaceListener, MapArea { override fun defineListeners() { populateSeeds() - on(Sceneries.PORTAL_29534, SCENERY, "enter") { player, _ -> + on(Sceneries.PORTAL_29534, IntType.SCENERY, "enter") { player, _ -> val x = player.getAttribute("vinesweeper:return-tele:x", 3052) val y = player.getAttribute("vinesweeper:return-tele:y", 3304) teleport(player, Location(x, y)) return@on true } - on(SIGNS, SCENERY, "read") { player, node -> + on(SIGNS, IntType.SCENERY, "read") { player, node -> player.interfaceManager.open(Component(INSTRUCTION_SIGNS[node.id]!!)) return@on true } - on(HOLES, SCENERY, "dig") { player, node -> + on(HOLES, IntType.SCENERY, "dig") { player, node -> if(!player.inventory.contains(Items.SPADE_952, 1)) { // TODO (crash): authenticity player.sendMessage("You need a spade to dig here.") @@ -106,12 +107,12 @@ class Vinesweeper : InteractionListener, InterfaceListener, MapArea { } return@on true } - onUseWith(SCENERY,Items.SPADE_952,*HOLES) { player, _, with -> + onUseWith(IntType.SCENERY,Items.SPADE_952,*HOLES) { player, _, with -> player.visualize(Animation(Animations.HUMAN_VINESWEEPER_DIG_8709), Graphics(Gfx.VINESWEEPER_DIRT_DIG_1543)) dig(player, with.location) return@onUseWith true } - on(HOLES, SCENERY, "flag") { player, node -> + on(HOLES, IntType.SCENERY, "flag") { player, node -> val hole = node as Scenery var count = 0 if(player.location != node.location) { @@ -135,12 +136,12 @@ class Vinesweeper : InteractionListener, InterfaceListener, MapArea { }) return@on true } - onUseWith(SCENERY,Items.FLAG_12625,*HOLES) { player, _, with -> + onUseWith(IntType.SCENERY,Items.FLAG_12625,*HOLES) { player, _, with -> val hole = with as Scenery plantFlag(player,hole) return@onUseWith true } - on(HOLES, SCENERY, "inspect") { player, node -> + on(HOLES, IntType.SCENERY, "inspect") { player, node -> player.animate(Animation(Animations.HUMAN_INSPECT_HOLE_8710)) player.lock(5) GameWorld.Pulser.submit(object : Pulse(5) { @@ -162,42 +163,42 @@ class Vinesweeper : InteractionListener, InterfaceListener, MapArea { }) return@on true } - on(NPCs.MRS_WINKIN_7132, NPC, "talk-to") { player, npc -> + on(NPCs.MRS_WINKIN_7132, IntType.NPC, "talk-to") { player, npc -> openDialogue(player, WinkinDialogue(), npc) return@on true } - on(NPCs.MRS_WINKIN_7132, NPC, "trade") { player, _ -> + on(NPCs.MRS_WINKIN_7132, IntType.NPC, "trade") { player, _ -> player.interfaceManager.open(Component(686)) return@on true } - on(NPCs.MRS_WINKIN_7132, NPC, "buy flags") { player, npc -> + on(NPCs.MRS_WINKIN_7132, IntType.NPC, "buy flags") { player, npc -> val dialogue = WinkinDialogue() dialogue.stage = 20 openDialogue(player, dialogue, npc) return@on true } - on(RABBITS, NPC, "feed") { player, node -> + on(RABBITS, IntType.NPC, "feed") { player, node -> val rabbit = node as NPC feedRabbit(player,rabbit) return@on true } - onUseWith(NPC,Items.OGLEROOT_12624,*RABBITS) { player, _, with -> + onUseWith(IntType.NPC,Items.OGLEROOT_12624,*RABBITS) { player, _, with -> val rabbit = with as NPC feedRabbit(player,rabbit) return@onUseWith true } - on(NPCs.FARMER_BLINKIN_7131, NPC, "talk-to") { player, npc -> + on(NPCs.FARMER_BLINKIN_7131, IntType.NPC, "talk-to") { player, npc -> //player.interfaceManager.open(Component(TUTORIAL)) openDialogue(player, BlinkinDialogue(), npc) return@on true } - on(NPCs.FARMER_BLINKIN_7131, NPC, "buy-flags") { player, npc -> + on(NPCs.FARMER_BLINKIN_7131, IntType.NPC, "buy-flags") { player, npc -> val dialogue = BlinkinDialogue() dialogue.stage = 21 openDialogue(player, dialogue, npc) return@on true } - on(NPCs.FARMER_BLINKIN_7131, NPC, "buy-roots") { player, npc -> + on(NPCs.FARMER_BLINKIN_7131, IntType.NPC, "buy-roots") { player, npc -> val dialogue = BlinkinDialogue() dialogue.stage = 40 openDialogue(player, dialogue, npc) diff --git a/Server/src/main/kotlin/rs09/game/content/activity/wguild/WGuildListeners.kt b/Server/src/main/kotlin/rs09/game/content/activity/wguild/WGuildListeners.kt index 5ea454ad8..7d3386144 100644 --- a/Server/src/main/kotlin/rs09/game/content/activity/wguild/WGuildListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/activity/wguild/WGuildListeners.kt @@ -6,6 +6,7 @@ import core.game.content.activity.wguild.catapult.CatapultRoom import core.game.node.item.Item import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class WGuildListeners : InteractionListener { override fun defineListeners() { diff --git a/Server/src/main/kotlin/rs09/game/content/ame/RandomEventManager.kt b/Server/src/main/kotlin/rs09/game/content/ame/RandomEventManager.kt index 15444a7fc..478c1259c 100644 --- a/Server/src/main/kotlin/rs09/game/content/ame/RandomEventManager.kt +++ b/Server/src/main/kotlin/rs09/game/content/ame/RandomEventManager.kt @@ -59,7 +59,7 @@ class RandomEventManager(val player: Player? = null) : LoginListener, EventHook< event = ame.npc.create(player,ame.loot,ame.type) if (event!!.spawnLocation == null) { nextSpawn = GameWorld.ticks + 3000 - SystemLogger.logWarn("Tried to spawn random event for ${player.username} but spawn location was null!") + SystemLogger.logWarn(this::class.java, "Tried to spawn random event for ${player.username} but spawn location was null!") return } event!!.init() diff --git a/Server/src/main/kotlin/rs09/game/content/ame/events/drilldemon/DrillDemonListeners.kt b/Server/src/main/kotlin/rs09/game/content/ame/events/drilldemon/DrillDemonListeners.kt index 2a9b8b16a..7867a8a46 100644 --- a/Server/src/main/kotlin/rs09/game/content/ame/events/drilldemon/DrillDemonListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/ame/events/drilldemon/DrillDemonListeners.kt @@ -4,12 +4,13 @@ import core.game.node.entity.npc.NPC import core.game.system.task.Pulse import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class DrillDemonListeners : InteractionListener { val MATS = intArrayOf(10076,10077,10078,10079) override fun defineListeners() { - on(MATS,SCENERY,"use"){ player, node -> + on(MATS, IntType.SCENERY, "use"){ player, node -> val correctTask = player.getAttribute(DrillDemonUtils.DD_KEY_TASK,-1) if(correctTask == -1){ player.sendMessage("You can't do that right now.") diff --git a/Server/src/main/kotlin/rs09/game/content/ame/events/supriseexam/SupriseExamListeners.kt b/Server/src/main/kotlin/rs09/game/content/ame/events/supriseexam/SupriseExamListeners.kt index f921b780d..2640691fe 100644 --- a/Server/src/main/kotlin/rs09/game/content/ame/events/supriseexam/SupriseExamListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/ame/events/supriseexam/SupriseExamListeners.kt @@ -7,6 +7,7 @@ import core.game.world.map.Location import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.inter.ExperienceInterface class SupriseExamListeners : InteractionListener { @@ -14,14 +15,14 @@ class SupriseExamListeners : InteractionListener { val BOOK_OF_KNOWLEDGE = Items.BOOK_OF_KNOWLEDGE_11640 override fun defineListeners() { - on(MORDAUT,NPC,"talk-to"){player, node -> + on(MORDAUT, IntType.NPC, "talk-to"){player, node -> player.faceLocation(Location.create(1886, 5024, 0)) val examComplete = player.getAttribute(SurpriseExamUtils.SE_KEY_CORRECT,0) == 3 player.dialogueInterpreter.open(MordautDialogue(examComplete),node.asNpc()) return@on true } - on(SurpriseExamUtils.SE_DOORS,SCENERY,"open"){ player, node -> + on(SurpriseExamUtils.SE_DOORS, IntType.SCENERY, "open"){ player, node -> val correctDoor = player.getAttribute(SurpriseExamUtils.SE_DOOR_KEY,-1) if(correctDoor == -1){ @@ -38,7 +39,7 @@ class SupriseExamListeners : InteractionListener { return@on true } - on(BOOK_OF_KNOWLEDGE,ITEM,"read"){player, _ -> + on(BOOK_OF_KNOWLEDGE, IntType.ITEM, "read"){player, _ -> player.setAttribute("caller"){skill: Int,p: Player -> if(p.inventory.remove(Item(BOOK_OF_KNOWLEDGE))) { val level = p.skills.getStaticLevel(skill) @@ -53,7 +54,7 @@ class SupriseExamListeners : InteractionListener { } override fun defineDestinationOverrides() { - setDest(NPC,MORDAUT){_,_ -> + setDest(IntType.NPC,MORDAUT){_,_ -> return@setDest Location.create(1886, 5025, 0) } } diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/AlKharidHealListener.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/AlKharidHealListener.kt index be93d424d..06dd7616d 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/AlKharidHealListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/AlKharidHealListener.kt @@ -8,6 +8,7 @@ import org.rs09.consts.Animations import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE /** @@ -16,7 +17,7 @@ import rs09.tools.END_DIALOGUE class AlKharidHealListener : InteractionListener { override fun defineListeners() { - on(getIds(), NPC, "heal") { player, node -> + on(getIds(), IntType.NPC, "heal") { player, node -> openDialogue(player, AlKharidHealDialogue(false), node.asNpc()) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/AliTheLeafletDropperListener.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/AliTheLeafletDropperListener.kt index 2c867db56..bf125f1c9 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/AliTheLeafletDropperListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/AliTheLeafletDropperListener.kt @@ -8,6 +8,7 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE /** @@ -16,7 +17,7 @@ import rs09.tools.END_DIALOGUE class AliTheLeafletDropperListener : InteractionListener { override fun defineListeners() { - on(NPCs.ALI_THE_LEAFLET_DROPPER_3680, NPC, "Take-flyer") { player, node -> + on(NPCs.ALI_THE_LEAFLET_DROPPER_3680, IntType.NPC, "Take-flyer") { player, node -> if(player.inventory.containItems(Items.AL_KHARID_FLYER_7922)) { openDialogue(player, DropperDialogue(2), node as NPC) } else { diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/FadliDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/FadliDialogue.kt index 3fbfae107..87ffbd31e 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/FadliDialogue.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/region/alkharid/FadliDialogue.kt @@ -8,6 +8,7 @@ import core.plugin.Initializable import org.rs09.consts.NPCs import rs09.game.content.dialogue.Topic import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE /** @@ -61,7 +62,7 @@ class FadliDialogue(player: Player? = null) : DialoguePlugin(player) { class FadliListener : InteractionListener { override fun defineListeners() { - on(NPCs.FADLI_958, NPC, "buy") { player, node -> + on(NPCs.FADLI_958, IntType.NPC, "buy") { player, node -> if(node.asNpc().openShop(player)) { return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/region/jatizso/TowerGuardDialogue.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/region/jatizso/TowerGuardDialogue.kt index 095aaf348..dcb0edb17 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/region/jatizso/TowerGuardDialogue.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/region/jatizso/TowerGuardDialogue.kt @@ -7,6 +7,7 @@ import core.game.node.entity.player.Player import core.plugin.Initializable import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import rs09.tools.END_DIALOGUE @@ -39,7 +40,7 @@ class TowerGuardDialogue(player: Player? = null) : DialoguePlugin(player) { } 10 -> npcl(FacialExpression.NEUTRAL, "IF YOU LIKE!").also { stage = END_DIALOGUE - InteractionListeners.run(NPCs.GUARD_5489, InteractionListener.NPC, "watch-shouting", player, npc) + InteractionListeners.run(NPCs.GUARD_5489, IntType.NPC, "watch-shouting", player, npc) } } return true diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/region/ourania/EniolaListener.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/region/ourania/EniolaListener.kt index d37902c3c..74f6990fa 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/region/ourania/EniolaListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/region/ourania/EniolaListener.kt @@ -7,6 +7,7 @@ import core.game.node.entity.player.link.IronmanMode import org.rs09.consts.Components import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles special banking interactions for Eniola at ZMI altar area. @@ -15,7 +16,7 @@ import rs09.game.interaction.InteractionListener */ class EniolaListener : InteractionListener { override fun defineListeners() { - on(NPCs.ENIOLA_6362, NPC, "bank") { player, _ -> + on(NPCs.ENIOLA_6362, IntType.NPC, "bank") { player, _ -> restrictForIronman(player, IronmanMode.ULTIMATE) { setAttribute(player, "zmi:bankaction", "open") openInterface(player, Components.BANK_CHARGE_ZMI_619) @@ -24,7 +25,7 @@ class EniolaListener : InteractionListener { return@on true } - on(NPCs.ENIOLA_6362, NPC, "collect") { player, _ -> + on(NPCs.ENIOLA_6362, IntType.NPC, "collect") { player, _ -> restrictForIronman(player, IronmanMode.ULTIMATE) { setAttribute(player, "zmi:bankaction", "collect") openInterface(player, Components.BANK_CHARGE_ZMI_619) diff --git a/Server/src/main/kotlin/rs09/game/content/dialogue/region/roguesden/EmeraldBenedictListener.kt b/Server/src/main/kotlin/rs09/game/content/dialogue/region/roguesden/EmeraldBenedictListener.kt index af053517c..e06fb6269 100644 --- a/Server/src/main/kotlin/rs09/game/content/dialogue/region/roguesden/EmeraldBenedictListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/dialogue/region/roguesden/EmeraldBenedictListener.kt @@ -4,6 +4,7 @@ import api.openBankAccount import api.openGrandExchangeCollectionBox import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles Emerald Benedict's only available interaction. @@ -12,12 +13,12 @@ import rs09.game.interaction.InteractionListener */ class EmeraldBenedictListener : InteractionListener { override fun defineListeners() { - on(NPCs.EMERALD_BENEDICT_2271, NPC, "bank") { player, _ -> + on(NPCs.EMERALD_BENEDICT_2271, IntType.NPC, "bank") { player, _ -> openBankAccount(player) return@on true } - on(NPCs.EMERALD_BENEDICT_2271, NPC, "collect") { player, _ -> + on(NPCs.EMERALD_BENEDICT_2271, IntType.NPC, "collect") { player, _ -> openGrandExchangeCollectionBox(player) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/global/GlobalKillCounter.kt b/Server/src/main/kotlin/rs09/game/content/global/GlobalKillCounter.kt index 850630725..9ff5d1fd9 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/GlobalKillCounter.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/GlobalKillCounter.kt @@ -32,7 +32,7 @@ class GlobalKillCounter : StartupListener, ShutdownListener { val tmp_rare_drops = data.get("rare_drops") populate(rare_drops, tmp_rare_drops) } catch (e: Exception){ - SystemLogger.logErr("Failed parsing ${file.name} - stack trace below.") + SystemLogger.logErr(this::class.java, "Failed parsing ${file.name} - stack trace below.") e.printStackTrace() } } diff --git a/Server/src/main/kotlin/rs09/game/content/global/action/EquipHandler.kt b/Server/src/main/kotlin/rs09/game/content/global/action/EquipHandler.kt index a09facfe5..a485ef82a 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/action/EquipHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/action/EquipHandler.kt @@ -11,6 +11,7 @@ import core.game.node.entity.player.link.audio.Audio import rs09.game.node.entity.skill.slayer.SlayerEquipmentFlags import core.plugin.Plugin import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import rs09.game.system.config.ItemConfigParser @@ -22,7 +23,7 @@ import rs09.game.system.config.ItemConfigParser class EquipHandler : InteractionListener { override fun defineListeners() { - on(ITEM, "equip", "wield", "wear") { player, node -> + on(IntType.ITEM, "equip", "wield", "wear") { player, node -> handleEquip(player, node) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/global/action/PickupHandler.kt b/Server/src/main/kotlin/rs09/game/content/global/action/PickupHandler.kt index 406e23752..e92f64f35 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/action/PickupHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/action/PickupHandler.kt @@ -39,7 +39,7 @@ object PickupHandler { return true } if (player.getAttribute("droppedItem:" + item.id, 0) > GameWorld.ticks) { //Splinter - SystemLogger.logAlert("$player tried to do the drop & quick pick-up Ground Item dupe.") + 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)) { diff --git a/Server/src/main/kotlin/rs09/game/content/global/shops/Shops.kt b/Server/src/main/kotlin/rs09/game/content/global/shops/Shops.kt index 41f1e6a44..2c1014c63 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/shops/Shops.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/shops/Shops.kt @@ -13,6 +13,7 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.ServerConstants import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InterfaceListener import rs09.game.system.SystemLogger import rs09.game.system.command.Privilege @@ -41,7 +42,7 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe fun logShop(msg: String) { - SystemLogger.logInfo("[SHOPS] $msg") + SystemLogger.logInfo(this::class.java, "[SHOPS] $msg") } fun parseStock(stock: String, id: Int): ArrayList{ @@ -57,7 +58,7 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe amount = "-1" val item = tokens[0].toInt() if(idsInStock[item] != null) { - SystemLogger.logWarn("[SHOPS] MALFORMED STOCK IN SHOP ID $id FOR ITEM $item") + SystemLogger.logWarn(this::class.java, "[SHOPS] MALFORMED STOCK IN SHOP ID $id FOR ITEM $item") items.forEach { if(it.itemId == item) { it.amount += amount.toInt() return@map @@ -105,7 +106,7 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe } override fun defineListeners() { - on(NPC, "trade", "shop"){player, node -> + on(IntType.NPC, "trade", "shop"){player, node -> val npc = node as NPC if (npc.id == 2824) { TanningProduct.open(player, 2824) @@ -119,7 +120,7 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe return@on true } - on(NPCs.SIEGFRIED_ERKLE_933, NPC, "trade"){ player, node -> + on(NPCs.SIEGFRIED_ERKLE_933, IntType.NPC, "trade"){ player, node -> val points = getQP(player) if(points < 40){ sendNPCDialogue(player, NPCs.SIEGFRIED_ERKLE_933, "I'm sorry, adventurer, but you need 40 quest points to buy from me.") @@ -129,7 +130,7 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe return@on true } - on(NPCs.FUR_TRADER_1316, NPC,"trade") { player, node -> + on(NPCs.FUR_TRADER_1316, IntType.NPC, "trade") { player, node -> if (!isQuestComplete(player, "Fremennik Trials")) { sendNPCDialogue(player, NPCs.FUR_TRADER_1316, "I don't sell to outerlanders.", FacialExpression.ANNOYED).also { END_DIALOGUE } } else { @@ -137,15 +138,6 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe } return@on true } - - on(NPCs.FISH_MONGER_1315, NPC,"trade") { player, node -> - if (!isQuestComplete(player, "Fremennik Trials")) { - sendNPCDialogue(player, NPCs.FISH_MONGER_1315, "I don't sell to outerlanders.", FacialExpression.ANNOYED).also { END_DIALOGUE } - } else { - shopsByNpc[node.id]?.openFor(player) - } - return@on true - } } override fun defineInterfaceListeners() { @@ -245,7 +237,7 @@ class Shops : StartupListener, TickListener, InteractionListener, InterfaceListe } override fun defineDestinationOverrides() { - setDest(NPC,"trade","shop"){_,node -> + setDest(IntType.NPC,"trade","shop"){ _, node -> val npc = node as NPC if (npc.getAttribute("facing_booth", false)) { val offsetX = npc.direction.stepX shl 1 diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/WorldEvent.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/WorldEvent.kt index faa10b899..fd76cb29d 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/WorldEvent.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/WorldEvent.kt @@ -40,7 +40,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("[World Events($name)] $message") + SystemLogger.logInfo(this::class.java, "[World Events($name)] $message") } /** diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/christmas/GiftRollPlugin.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/christmas/GiftRollPlugin.kt index c2f4bc06a..adfa22bd0 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/christmas/GiftRollPlugin.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/christmas/GiftRollPlugin.kt @@ -12,6 +12,7 @@ import rs09.ServerStore.Companion.getInt import rs09.game.content.global.WeightBasedTable import rs09.game.content.global.WeightedItem import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.SystemLogger import rs09.plugin.CorePluginTypes.XPGainPlugin import rs09.tools.stringtools.colorize @@ -55,11 +56,10 @@ class XMASMboxHandler : InteractionListener { //disable if it's not december. //Calendar.MONTH is 0-indexed, Month is 1-indexed. I know. It's dumb. Thanks oracle. if(Calendar.getInstance().get(Calendar.MONTH) + 1 != Month.DECEMBER.value){ - SystemLogger.logInfo("${Calendar.getInstance().get(Calendar.MONTH)} - ${Month.DECEMBER.value}") return } - on(MBOX, ITEM, "open"){player, used -> + on(MBOX, IntType.ITEM, "open"){player, used -> val item = MBOX_LOOT.roll().first() if(removeItem(player, used, Container.INVENTORY)) { diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/easter/EasterEventListeners.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/easter/EasterEventListeners.kt index b6f166fae..35a907c9f 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/easter/EasterEventListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/easter/EasterEventListeners.kt @@ -6,6 +6,7 @@ import core.game.node.item.GroundItemManager import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class EasterEventListeners : InteractionListener { @@ -14,7 +15,7 @@ class EasterEventListeners : InteractionListener { override fun defineListeners() { - on(eggs,ITEM,"take"){player, node -> + on(eggs, IntType.ITEM, "take"){player, node -> player.pulseManager.run(object : MovementPulse(player,node, DestinationFlag.ITEM){ override fun pulse(): Boolean { if(player.inventory.contains(Items.BASKET_OF_EGGS_4565,1) || player.equipment.contains(Items.BASKET_OF_EGGS_4565,1)){ @@ -31,13 +32,13 @@ class EasterEventListeners : InteractionListener { return@on true } - on(Items.BASKET_OF_EGGS_4565,ITEM,"operate"){player, node -> + on(Items.BASKET_OF_EGGS_4565, IntType.ITEM, "operate"){player, node -> val numEggs = player.getAttribute(EGG_ATTRIBUTE) ?: 0 player.dialogueInterpreter.sendDialogue("You have $numEggs eggs in the basket.") return@on true } - on(NPCs.EASTER_BUNNY_7197,NPC,"talk-to"){player, node -> + on(NPCs.EASTER_BUNNY_7197, IntType.NPC, "talk-to"){player, node -> val npc = node.asNpc() npc.faceLocation(player.location) val NEED_BASKET = !(player!!.inventory.contains(Items.BASKET_OF_EGGS_4565,1) || player!!.equipment.contains(Items.BASKET_OF_EGGS_4565,1) || player!!.bank.contains(Items.BASKET_OF_EGGS_4565,1)) diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/halloween/TrickOrTreatHandler.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/halloween/TrickOrTreatHandler.kt index 0420704cc..45f432bcf 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/halloween/TrickOrTreatHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/holiday/halloween/TrickOrTreatHandler.kt @@ -16,12 +16,13 @@ import rs09.ServerStore.Companion.getInt import rs09.ServerStore.Companion.getString import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld import rs09.tools.END_DIALOGUE class TrickOrTreatHandler : InteractionListener { override fun defineListeners() { - on(NPC, "trick-or-treat"){player, node -> + on(IntType.NPC, "trick-or-treat"){player, node -> val hasDone5 = getDailyTrickOrTreats(player) == 5 val hasDoneMe = getTrickOrTreatedNPCs(player).contains(node.name.toLowerCase()) diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/penguinhns/PenguinManager.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/penguinhns/PenguinManager.kt index 713f11901..56d60c23c 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/penguinhns/PenguinManager.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/penguinhns/PenguinManager.kt @@ -31,7 +31,7 @@ class PenguinManager{ private fun updateStoreFile(){ val jsonTags = JSONArray() tagMapping.filter { it.value.isNotEmpty() }.forEach { (ordinal,taggers) -> - SystemLogger.logInfo("$ordinal - ${taggers.first()}") + SystemLogger.logInfo(this::class.java, "$ordinal - ${taggers.first()}") val tag = JSONObject() tag["ordinal"] = ordinal tag["taggers"] = taggers @@ -64,6 +64,6 @@ class PenguinManager{ } fun log(message: String){ - SystemLogger.logInfo("[Penguins] $message") + SystemLogger.logInfo(this::class.java, "[Penguins] $message") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/penguinhns/PenguinSpyingHandler.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/penguinhns/PenguinSpyingHandler.kt index 613ec2246..3000954da 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/penguinhns/PenguinSpyingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/penguinhns/PenguinSpyingHandler.kt @@ -12,11 +12,12 @@ import core.plugin.Plugin import core.game.content.quest.PluginInteraction import core.game.content.quest.PluginInteractionManager import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class PenguinSpyingHandler : InteractionListener{ override fun defineListeners() { - on(PENGUINS, NPC, "spy-on"){player, node -> + on(PENGUINS, IntType.NPC, "spy-on"){player, node -> val npc = node.asNpc() if(PenguinManager.hasTagged(player, npc.location)){ player.sendMessage("You've already tagged this penguin.") diff --git a/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/ShootingStarPlugin.kt b/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/ShootingStarPlugin.kt index 0504f0883..2bc8588b2 100644 --- a/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/ShootingStarPlugin.kt +++ b/Server/src/main/kotlin/rs09/game/content/global/worldevents/shootingstar/ShootingStarPlugin.kt @@ -11,6 +11,7 @@ import rs09.ServerStore import rs09.ServerStore.Companion.getBoolean import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.SystemLogger import rs09.game.system.command.Privilege import rs09.game.world.GameWorld @@ -36,7 +37,7 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com } override fun defineListeners() { - on(Scenery.SHOOTING_STAR_NOTICEBOARD_38669, SCENERY, "read") { player, _ -> + on(Scenery.SHOOTING_STAR_NOTICEBOARD_38669, IntType.SCENERY, "read") { player, _ -> var index = 0 scoreboardEntries.forEach { entry -> val timeElapsed = secondsToTicks(GameWorld.ticks - entry.time) / 60 @@ -48,17 +49,17 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com return@on true } - on(SHOOTING_STARS,SCENERY,"mine"){ player, _ -> + on(SHOOTING_STARS, IntType.SCENERY, "mine"){ player, _ -> star.mine(player) return@on true } - on(SHOOTING_STARS,SCENERY,"prospect"){ player, _ -> + on(SHOOTING_STARS, IntType.SCENERY, "prospect"){ player, _ -> star.prospect(player) return@on true } - on(RING, ITEM, "rub", "operate"){player, node -> + on(RING, IntType.ITEM, "rub", "operate"){player, node -> if(getRingStoreFile().getBoolean(player.username.toLowerCase())){ sendDialogue(player, "The ring is still recharging.") return@on true @@ -111,7 +112,7 @@ class ShootingStarPlugin : LoginListener, InteractionListener, TickListener, Com } override fun startup() { - SystemLogger.logInfo("Shooting Stars initialized.") + SystemLogger.logInfo(this::class.java, "Shooting Stars initialized.") } private data class ScoreboardEntry(val player: String, val time: Int) diff --git a/Server/src/main/kotlin/rs09/game/content/jobs/WorkForInteractionListener.kt b/Server/src/main/kotlin/rs09/game/content/jobs/WorkForInteractionListener.kt index 35d01af4e..9c99d4b8b 100644 --- a/Server/src/main/kotlin/rs09/game/content/jobs/WorkForInteractionListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/jobs/WorkForInteractionListener.kt @@ -16,6 +16,7 @@ import org.rs09.consts.NPCs import rs09.ServerStore.Companion.getInt import rs09.game.Event import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles the work-for actions for the NPCs @@ -120,7 +121,7 @@ class WorkForInteractionListener : InteractionListener, LoginListener { } override fun defineListeners() { - on(EMPLOYER_IDS, NPC, "work-for") { player, node -> + on(EMPLOYER_IDS, IntType.NPC, "work-for") { player, node -> if (JobManager.getStoreFile().getInt(player.username.lowercase()) == 3) { sendNPCDialogue(player, node.id, "You've hit your limit for the day. Come back tomorrow!") return@on true diff --git a/Server/src/main/kotlin/rs09/game/content/quest/free/dragonslayer/DSEquipListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/free/dragonslayer/DSEquipListeners.kt index 55e1fed93..50565e530 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/free/dragonslayer/DSEquipListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/free/dragonslayer/DSEquipListeners.kt @@ -3,6 +3,7 @@ package rs09.game.content.quest.free.dragonslayer import api.* import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class DSEquipListeners : InteractionListener { diff --git a/Server/src/main/kotlin/rs09/game/content/quest/free/dragonslayer/DSListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/free/dragonslayer/DSListeners.kt index e7125f2a7..0e962b66c 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/free/dragonslayer/DSListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/free/dragonslayer/DSListeners.kt @@ -3,10 +3,11 @@ package rs09.game.content.quest.free.dragonslayer import api.sendMessage import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class DSListeners : InteractionListener { override fun defineListeners() { - on(Scenery.CELL_DOOR_40184, SCENERY, "open") {player, _ -> + on(Scenery.CELL_DOOR_40184, IntType.SCENERY, "open") {player, _ -> sendMessage(player, "It's locked tight.") return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/BloatedToadNPC.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/BloatedToadNPC.kt index d84cb54ec..e0930cc87 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/BloatedToadNPC.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/BloatedToadNPC.kt @@ -7,6 +7,7 @@ import org.rs09.consts.Items import org.rs09.consts.Graphics import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.command.Privilege import core.plugin.Initializable import core.game.node.entity.npc.AbstractNPC @@ -120,7 +121,7 @@ class BloatedToadListeners : InteractionListener, StartupListener, Commands { } override fun defineListeners() { - on(Items.BLOATED_TOAD_2875, ITEM, "drop") {player, used -> + on(Items.BLOATED_TOAD_2875, IntType.ITEM, "drop") {player, used -> val quest = player.questRepository.getQuest("Big Chompy Bird Hunting") val inExtraBorder = extraBorders.filter { it.insideBorder(player) }.count() > 0 @@ -151,13 +152,13 @@ class BloatedToadListeners : InteractionListener, StartupListener, Commands { return@on true } - on(Items.BLOATED_TOAD_2875, ITEM, "release") { player, used -> + on(Items.BLOATED_TOAD_2875, IntType.ITEM, "release") { player, used -> removeItem(player, used.asItem()) sendPlayerDialogue(player, "Free the fat toadsies!") return@on true } - on(Items.BLOATED_TOAD_2875, ITEM, "release all") { player, used -> + on(Items.BLOATED_TOAD_2875, IntType.ITEM, "release all") { player, used -> removeAll(player, used.asItem()) sendPlayerDialogue(player, "Free the fat toadsies!") return@on true diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyBird.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyBird.kt index fd322084f..0438ca54b 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyBird.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyBird.kt @@ -18,6 +18,7 @@ import core.game.node.entity.player.link.quest.Quest import core.game.world.update.flag.context.Graphics as Gfx import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.content.dialogue.SkillDialogueHandler import rs09.game.content.dialogue.SkillDialogueHandler.SkillDialogue import rs09.game.system.config.ItemConfigParser @@ -137,19 +138,19 @@ class ChompyBird : Quest("Big Chompy Bird Hunting", 35, 34, 2, Vars.VARP_QUEST_C override fun defineListeners() { val filledBellows = intArrayOf(Items.OGRE_BELLOWS_3_2872, Items.OGRE_BELLOWS_2_2873, Items.OGRE_BELLOWS_1_2874) - on(3379, SCENERY, "enter") {player, _ -> + on(3379, IntType.SCENERY, "enter") {player, _ -> teleport(player, CAVE_ENTRANCE) sendMessage(player, "You walk through the cave entrance into a dimly lit cave.") return@on true } - on(intArrayOf(32068, 32069), SCENERY, "pass-through") {player, _ -> + on(intArrayOf(32068, 32069), IntType.SCENERY, "pass-through") {player, _ -> teleport(player, CAVE_EXIT) sendMessage(player, "You walk back out of the darkness of the cave into daylight.") return@on true } - on(3377, SCENERY, "unlock") {player, node -> + on(3377, IntType.SCENERY, "unlock") {player, node -> if (freeSlots(player) == 0) { sendMessage(player, "You don't have enough space to do that.") return@on true @@ -177,7 +178,7 @@ class ChompyBird : Quest("Big Chompy Bird Hunting", 35, 34, 2, Vars.VARP_QUEST_C return@on true } - onUseWith(SCENERY, Items.RAW_CHOMPY_2876, 3375) {player, used, _ -> + onUseWith(IntType.SCENERY, Items.RAW_CHOMPY_2876, 3375) {player, used, _ -> val rantzIngredient = getAttribute(player, ATTR_ING_RANTZ, -1) val bugsIngredient = getAttribute(player, ATTR_ING_BUGS, -1) val fycieIngredient = getAttribute(player, ATTR_ING_FYCIE, -1) @@ -221,7 +222,7 @@ class ChompyBird : Quest("Big Chompy Bird Hunting", 35, 34, 2, Vars.VARP_QUEST_C return@onUseWith true } - onUseWith(SCENERY, Items.OGRE_BELLOWS_2871, 684) {player, used, _ -> + onUseWith(IntType.SCENERY, Items.OGRE_BELLOWS_2871, 684) {player, used, _ -> if (removeItem(player, used.asItem())) { lock(player, 2) visualize(player, Animations.HUMAN_USING_BELLOWS_1026, Gfx(Graphics.USING_BELLOWS, 80)) @@ -231,7 +232,7 @@ class ChompyBird : Quest("Big Chompy Bird Hunting", 35, 34, 2, Vars.VARP_QUEST_C return@onUseWith true } - onUseWith(NPC, filledBellows, NPCs.SWAMP_TOAD_1013) {player, used, with -> + onUseWith(IntType.NPC, filledBellows, NPCs.SWAMP_TOAD_1013) {player, used, with -> val hasTooManyToads = amountInInventory(player, Items.BLOATED_TOAD_2875) >= 3 if (hasTooManyToads) { @@ -257,7 +258,7 @@ class ChompyBird : Quest("Big Chompy Bird Hunting", 35, 34, 2, Vars.VARP_QUEST_C return@onUseWith true } - onUseWith(ITEM, Items.OGRE_ARROW_SHAFT_2864, Items.FEATHER_314) {player, used, with -> + onUseWith(IntType.ITEM, Items.OGRE_ARROW_SHAFT_2864, Items.FEATHER_314) {player, used, with -> val shaftAmount = amountInInventory(player, used.id) val featherAmount = amountInInventory(player, with.id) var maxAmount = min(shaftAmount, featherAmount) @@ -278,7 +279,7 @@ class ChompyBird : Quest("Big Chompy Bird Hunting", 35, 34, 2, Vars.VARP_QUEST_C return@onUseWith true } - onUseWith(ITEM, Items.WOLF_BONES_2859, Items.CHISEL_1755) {player, used, with -> + onUseWith(IntType.ITEM, Items.WOLF_BONES_2859, Items.CHISEL_1755) {player, used, with -> val maxAmount = amountInInventory(player, used.id) if (getStage(player) == 0) { @@ -314,7 +315,7 @@ class ChompyBird : Quest("Big Chompy Bird Hunting", 35, 34, 2, Vars.VARP_QUEST_C return@onUseWith true } - onUseWith(ITEM, Items.WOLFBONE_ARROWTIPS_2861, Items.FLIGHTED_OGRE_ARROW_2865) {player, used, with -> + onUseWith(IntType.ITEM, Items.WOLFBONE_ARROWTIPS_2861, Items.FLIGHTED_OGRE_ARROW_2865) {player, used, with -> fun getMaxAmount(_unused: Int = 0): Int { val tips = amountInInventory(player, Items.WOLFBONE_ARROWTIPS_2861) val shafts = amountInInventory(player, Items.FLIGHTED_OGRE_ARROW_2865) diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyBirdNPC.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyBirdNPC.kt index d51b22f0c..bfccf8391 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyBirdNPC.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyBirdNPC.kt @@ -22,6 +22,7 @@ import core.game.world.map.Location import core.game.world.map.path.Pathfinder import core.game.interaction.MovementPulse import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import core.game.world.update.flag.context.Animation @Initializable @@ -148,7 +149,7 @@ class ChompyBirdNPC : AbstractNPC, InteractionListener { } override fun defineListeners() { - on(NPCs.CHOMPY_BIRD_1016, NPC, "pluck") { player, node -> + on(NPCs.CHOMPY_BIRD_1016, IntType.NPC, "pluck") { player, node -> val bird = node.asNpc() if (!bird.getAttribute("plucked", false)) { @@ -163,7 +164,7 @@ class ChompyBirdNPC : AbstractNPC, InteractionListener { return@on true } - on(Items.OGRE_BOW_2883, ITEM, "check kills") { player, _ -> + on(Items.OGRE_BOW_2883, IntType.ITEM, "check kills") { player, _ -> val amount = player.getAttribute("chompy-kills", 0) sendDialogue(player, "You have killed $amount chompy birds.") return@on true diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyHat.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyHat.kt index 69be5c750..ab61ce40b 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyHat.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/chompybird/ChompyHat.kt @@ -6,6 +6,7 @@ import rs09.tools.stringtools.colorize import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import core.game.node.entity.player.Player import java.util.* diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/elementalworkshop/EWListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/elementalworkshop/EWListeners.kt index 4230afd48..6deb89702 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/elementalworkshop/EWListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/elementalworkshop/EWListeners.kt @@ -17,6 +17,7 @@ import rs09.game.content.quest.members.elementalworkshop.EWUtils.RIGHT_WATER_CON import rs09.game.content.quest.members.elementalworkshop.EWUtils.WATER_WHEEL_STATE import rs09.game.content.quest.members.elementalworkshop.EWUtils.currentStage import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.SystemLogger /** @@ -90,7 +91,7 @@ class EWListeners : InteractionListener { * Seers Village House listeners * * * * * * * * * * * * * * * * * * */ // Bookcase (quest start) - on(Scenery.BOOKCASE_26113, SCENERY, "search") { player, _ -> + on(Scenery.BOOKCASE_26113, IntType.SCENERY, "search") { player, _ -> val stage = currentStage(player) if (stage < 3) { @@ -129,7 +130,7 @@ class EWListeners : InteractionListener { } // Knife on Battered book -> Slashed book + Battered key - onUseWith(ITEM, Items.KNIFE_946, Items.BATTERED_BOOK_2886) { player, _, with -> + onUseWith(IntType.ITEM, Items.KNIFE_946, Items.BATTERED_BOOK_2886) { player, _, with -> val stage = currentStage(player) if (stage >= 1) { lock(player, 2) @@ -162,7 +163,7 @@ class EWListeners : InteractionListener { * Seers Village Smithy listeners * * * * * * * * * * * * * * * * * * */ // Odd looking wall handler - on(intArrayOf(Scenery.ODD_LOOKING_WALL_26114, Scenery.ODD_LOOKING_WALL_26115), SCENERY, "open") { player, wall -> + on(intArrayOf(Scenery.ODD_LOOKING_WALL_26114, Scenery.ODD_LOOKING_WALL_26115), IntType.SCENERY, "open") { player, wall -> // Nothing interesting happens if quest wasn't started. if (currentStage(player) < 1) { sendMessage(player, "Nothing interesting happens.") @@ -188,7 +189,7 @@ class EWListeners : InteractionListener { return@on true } - on(Scenery.STAIRCASE_3415, SCENERY, "climb-down") { player, _ -> + on(Scenery.STAIRCASE_3415, IntType.SCENERY, "climb-down") { player, _ -> val stage = currentStage(player) // Prevent player from somehow skipping beginning quest stages if (stage < 1) { @@ -207,7 +208,7 @@ class EWListeners : InteractionListener { return@on true } - on(Scenery.STAIRCASE_3416, SCENERY, "climb-up") { player, _ -> + on(Scenery.STAIRCASE_3416, IntType.SCENERY, "climb-up") { player, _ -> teleport(player, Location.create(2709, 3498, 0)) return@on true } @@ -218,13 +219,13 @@ class EWListeners : InteractionListener { * * * * * * * * * * * * * * */ // Center hatch, inaccessible // NOTE: REMOVE ME/ADD CORRECT CHECKS FOR ELEMENTAL WORKSHOP II - on(Scenery.HATCH_18595, SCENERY, "open") { player, _ -> + on(Scenery.HATCH_18595, IntType.SCENERY, "open") { player, _ -> sendDialogue(player, "You're unable to open the locked hatch.") return@on true } // Stone bowl box, player can get more at any time - on(Scenery.BOXES_3397, SCENERY, "search") { player, _ -> + on(Scenery.BOXES_3397, IntType.SCENERY, "search") { player, _ -> // If the player doesn't have a stone bowl in their inventory if (player.inventory.addIfDoesntHave(emptyStoneBowl)) { sendMessage(player, "You find a stone bowl.") @@ -235,7 +236,7 @@ class EWListeners : InteractionListener { } // Needle crate, player can only receive once - on(Scenery.CRATE_3400, SCENERY, "search") { player, _ -> + on(Scenery.CRATE_3400, IntType.SCENERY, "search") { player, _ -> if (!getAttribute(player, "/save:ew1:got_needle", false)) { setAttribute(player, "/save:ew1:got_needle", true) addItem(player, Items.NEEDLE_1733) @@ -247,7 +248,7 @@ class EWListeners : InteractionListener { } // Leather crate, player can only receive once - on(Scenery.CRATE_3394, SCENERY, "search") { player, _ -> + on(Scenery.CRATE_3394, IntType.SCENERY, "search") { player, _ -> if (!getAttribute(player, "/save:ew1:got_leather", false)) { setAttribute(player, "/save:ew1:got_leather", true) addItem(player, Items.LEATHER_1741) @@ -259,7 +260,7 @@ class EWListeners : InteractionListener { } // Workbenches/Anvil - onUseWith(SCENERY, Items.ELEMENTAL_METAL_2893, Scenery.WORKBENCH_3402) { player, used, workbench -> + onUseWith(IntType.SCENERY, Items.ELEMENTAL_METAL_2893, Scenery.WORKBENCH_3402) { player, used, workbench -> // Warn player their smithing level is too low to make the shield if (player.skills.getLevel(Skills.SMITHING) < 20) { sendMessage(player, "You need a smithing level of 20 to create an elemental shield.") @@ -277,7 +278,7 @@ class EWListeners : InteractionListener { } // Sanity error check (Should never get thrown) if (!player.inventory.containsAll(*elementalShieldReqItems)) { - SystemLogger.logErr("${player.username} tried to forge an elemental shield without all the required items.") + SystemLogger.logErr(this::class.java, "${player.username} tried to forge an elemental shield without all the required items.") return@onUseWith false } // Successfully smith the elemental shield @@ -302,7 +303,7 @@ class EWListeners : InteractionListener { * Fire room listeners * * * * * * * * * * * * * */ // Lava trough stone bowl (empty) - onUseWith(SCENERY, Items.A_STONE_BOWL_2888, *lavaTrough) { player, used, trough -> + onUseWith(IntType.SCENERY, Items.A_STONE_BOWL_2888, *lavaTrough) { player, used, trough -> lock(player, (animationDuration(fillStoneBowlAnimation) + 1)) runTask(player) { face(player, trough) @@ -315,13 +316,13 @@ class EWListeners : InteractionListener { } // Lava trough stone bowl (filled with lava) - onUseWith(SCENERY, fullStoneBowl.id, *lavaTrough) { player, _, _ -> + onUseWith(IntType.SCENERY, fullStoneBowl.id, *lavaTrough) { player, _, _ -> sendMessage(player, "The bowl is already full of lava.") return@onUseWith true } // Pour lava into unlit furnace - onUseWith(SCENERY, fullStoneBowl.id, Scenery.FURNACE_18525) { player, used, _ -> + onUseWith(IntType.SCENERY, fullStoneBowl.id, Scenery.FURNACE_18525) { player, used, _ -> player.faceLocation(Location.create(2726, 9875, 0)) lock(player, 3) submitIndividualPulse(player, object : Pulse() { @@ -347,7 +348,7 @@ class EWListeners : InteractionListener { } // Pour lava into lit furnace - onUseWith(SCENERY, fullStoneBowl.id, Scenery.FURNACE_18526) { player, used, _ -> + onUseWith(IntType.SCENERY, fullStoneBowl.id, Scenery.FURNACE_18526) { player, used, _ -> player.faceLocation(Location.create(2726, 9875, 0)) runTask(player) { playAudio(player, fillFurnaceWithLavaSFX) @@ -358,7 +359,7 @@ class EWListeners : InteractionListener { } // Use elemental ore on lit furnace - onUseWith(SCENERY, Items.ELEMENTAL_ORE_2892, Scenery.FURNACE_18526) { player, _, _ -> + onUseWith(IntType.SCENERY, Items.ELEMENTAL_ORE_2892, Scenery.FURNACE_18526) { player, _, _ -> player.faceLocation(Location.create(2726, 9875, 0)) // Warn player their smithing level is too low to smelt the ore if (player.skills.getLevel(Skills.SMITHING) < 20) { @@ -409,11 +410,11 @@ class EWListeners : InteractionListener { * onCast SUPERHEAT spell (ModernListeners.kt) * SKIPPED DUE TO SPAGHETTI: on BLAST FURNACE BELT "put-ore-on" (BlastfurnaceListeners.kt) */ - onUseWith(SCENERY, Items.ELEMENTAL_ORE_2892, *furnaceIDS) { player, _, _ -> + onUseWith(IntType.SCENERY, Items.ELEMENTAL_ORE_2892, *furnaceIDS) { player, _, _ -> sendMessage(player, "This furnace is not hot enough to smelt elemental ore.") return@onUseWith true } - onUseWith(SCENERY, Items.ELEMENTAL_ORE_2892, Scenery.CONVEYOR_BELT_9100) { player, _, _ -> + onUseWith(IntType.SCENERY, Items.ELEMENTAL_ORE_2892, Scenery.CONVEYOR_BELT_9100) { player, _, _ -> sendMessage(player, "There would be no point in smelting that.") return@onUseWith true } @@ -422,7 +423,7 @@ class EWListeners : InteractionListener { * Water room listeners * * * * * * * * * * * * * */ // Water controls - on(waterControls, SCENERY, "turn") { player, _ -> + on(waterControls, IntType.SCENERY, "turn") { player, _ -> // Notify player they can't change water control values while water wheel is running if (EWUtils.waterWheelEnabled(player)) { sendMessage(player, "Now that the water wheel is running, the valve seems locked off.") @@ -452,7 +453,7 @@ class EWListeners : InteractionListener { else -> { offset = -1 enabled = 0 - SystemLogger.logErr("Unhandled location when determining enabled water controls! ${player.location}") + SystemLogger.logErr(this::class.java, "Unhandled location when determining enabled water controls! ${player.location}") return@on false } } @@ -481,7 +482,7 @@ class EWListeners : InteractionListener { } // Water wheel lever handler - on(Scenery.LEVER_3406, SCENERY, "pull") { player, lever -> + on(Scenery.LEVER_3406, IntType.SCENERY, "pull") { player, lever -> // Default will happen no matter what lock(player, 2) sendMessage(player, "You pull the lever") @@ -516,7 +517,7 @@ class EWListeners : InteractionListener { /* * * * * * * * * * * * * * * Air room listeners * * * * * * * * * * * * * */ - on(Scenery.BELLOWS_18516, SCENERY, "fix") { player, bellows -> + on(Scenery.BELLOWS_18516, IntType.SCENERY, "fix") { player, bellows -> player.faceLocation(Location.create(2736, 9883, 0)) // Warn player bellows are already fixed if (getAttribute(player, "/save:ew1:bellows_fixed", false)) { @@ -553,7 +554,7 @@ class EWListeners : InteractionListener { return@on true } - on(Scenery.LEVER_3409, SCENERY, "pull") { player, lever -> + on(Scenery.LEVER_3409, IntType.SCENERY, "pull") { player, lever -> // Warn player they have to fix the bellows before pulling the lever if (!getAttribute(player, "/save:ew1:bellows_fixed", false)) { sendPlayerDialogue(player, "I shouldn't risk damaging the bellows any further.") @@ -584,20 +585,20 @@ class EWListeners : InteractionListener { } } override fun defineDestinationOverrides() { - setDest(SCENERY, intArrayOf(Scenery.FURNACE_18525, Scenery.FURNACE_18526), "use") { _, _ -> + setDest(IntType.SCENERY, intArrayOf(Scenery.FURNACE_18525, Scenery.FURNACE_18526), "use") { _, _ -> return@setDest Location.create(2724,9875) } - setDest(SCENERY, intArrayOf(Scenery.BELLOWS_18516), "fix") { _, _ -> + setDest(IntType.SCENERY, intArrayOf(Scenery.BELLOWS_18516), "fix") { _, _ -> return@setDest Location.create(2733, 9884, 0) } - setDest(SCENERY, intArrayOf(Scenery.ODD_LOOKING_WALL_26115), "open") { player, _ -> + setDest(IntType.SCENERY, intArrayOf(Scenery.ODD_LOOKING_WALL_26115), "open") { player, _ -> if (inBorders(player, 2709, 3496, 2711, 3498)) { return@setDest Location.create(2709, 3496, 0) } else { return@setDest Location.create(2709, 3495, 0) } } - setDest(SCENERY, intArrayOf(Scenery.ODD_LOOKING_WALL_26114), "open") { player, _ -> + setDest(IntType.SCENERY, intArrayOf(Scenery.ODD_LOOKING_WALL_26114), "open") { player, _ -> if (inBorders(player, 2709, 3496, 2711, 3498)) { return@setDest Location.create(2710, 3496, 0) } else { diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/elementalworkshop/ElementalRockNPC.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/elementalworkshop/ElementalRockNPC.kt index 02873b677..8e234c011 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/elementalworkshop/ElementalRockNPC.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/elementalworkshop/ElementalRockNPC.kt @@ -12,6 +12,7 @@ import core.game.world.update.flag.context.Animation import core.plugin.Initializable import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Npc(s): @@ -46,7 +47,7 @@ class ElementalRockNPC(id: Int = 0, location: Location? = null) : AbstractNPC(id // The NPC stays in their upright form when the player // stops attacking and can walk around override fun defineListeners() { - on(ids, NPC, "Mine") { player, node -> + on(ids, IntType.NPC, "Mine") { player, node -> val tool: SkillingTool? = getTool(player, true) // Check to see if the player can proc the NPC if (tool == null) { diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/FamilyCrest.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/FamilyCrest.kt index c1bba6ff6..a1c037a46 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/FamilyCrest.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/FamilyCrest.kt @@ -120,7 +120,7 @@ class FamilyCrest: Quest("Family Crest", 59, 58, 1, 148, 0, 1, 11) { drawReward(player,"for the gauntlets",ln++) if (!addItem(player, Items.FAMILY_GAUNTLETS_778)) { - SystemLogger.logErr("Failed to give gauntlets to ${player.username} at end of quest, this should not occur due to crest item removal needed to finish quest.") + SystemLogger.logErr(this::class.java, "Failed to give gauntlets to ${player.username} at end of quest, this should not occur due to crest item removal needed to finish quest.") } setAttribute(player, "/save:family-crest:gauntlets", Items.FAMILY_GAUNTLETS_778) } diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/JohnathonAntiPoisonInteraction.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/JohnathonAntiPoisonInteraction.kt index 9476bc3b1..14c74f287 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/JohnathonAntiPoisonInteraction.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/JohnathonAntiPoisonInteraction.kt @@ -5,12 +5,13 @@ import api.* import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class JohnathonAntiPosionInteraction: InteractionListener { override fun defineListeners() { val poisons = intArrayOf(Items.ANTIPOISON4_2446, Items.ANTIPOISON3_175, Items.ANTIPOISON2_177, Items.ANTIPOISON1_179) - onUseWith(NPC, poisons, NPCs.JOHNATHON_668){player, used, with -> + onUseWith(IntType.NPC, poisons, NPCs.JOHNATHON_668){player, used, with -> val npc = with.asNpc() val antip = used.asItem() val stage = questStage(player, "Family Crest") diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/WitchavenLeverInteraction.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/WitchavenLeverInteraction.kt index 94e40e360..99297d6fb 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/WitchavenLeverInteraction.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/familycrest/WitchavenLeverInteraction.kt @@ -13,6 +13,7 @@ import core.net.packet.out.ClearScenery import core.net.packet.out.ConstructScenery import core.net.packet.out.UpdateAreaPosition; import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType fun doDoor(player: Player, scenery: Scenery) { val d = if(scenery.rotation == 0 || scenery.rotation == 3) { -1 } else { 0 } @@ -50,7 +51,7 @@ class WitchavenLeverInteraction : InteractionListener { val DOORS = intArrayOf(NORTH_DOOR, HELLHOUND_DOOR, SOUTHWEST_DOOR, SOUTHEAST_DOOR) override fun defineListeners() { - on(LEVERS, SCENERY, "pull") { player, node -> + on(LEVERS, IntType.SCENERY, "pull") { player, node -> val baseId = if(node.id % 2 == 0) { node.id - 1 } else { node.id } if(player.questRepository.getQuest("Family Crest").getStage(player) == 0) { player.sendMessage("Nothing interesting happens.") @@ -78,7 +79,7 @@ class WitchavenLeverInteraction : InteractionListener { player.session.write(buffer) return@on true } - on(DOORS, SCENERY, "open") { player, node -> + on(DOORS, IntType.SCENERY, "open") { player, node -> val northA = player.getAttribute("family-crest:witchaven-lever:${NORTH_LEVER_A}", false) val northB = player.getAttribute("family-crest:witchaven-lever:${NORTH_LEVER_B}", false) val south = player.getAttribute("family-crest:witchaven-lever:${SOUTH_LEVER}", false) diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/DramenTreeListener.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/DramenTreeListener.kt index c66f433cf..7174d2e56 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/DramenTreeListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/DramenTreeListener.kt @@ -10,13 +10,13 @@ import org.rs09.consts.Scenery as Sceneries import rs09.game.interaction.InteractionListener import api.questStage import api.sendMessage +import rs09.game.interaction.IntType -@Initializable class DramenTreeListener : InteractionListener { override fun defineListeners() { - on(Sceneries.DRAMEN_TREE_1292,SCENERY,"chop down"){ player, node -> + on(Sceneries.DRAMEN_TREE_1292, IntType.SCENERY, "chop down"){ player, node -> val questStage = questStage(player,"Lost City") if (SkillingTool.getHatchet(player) == null) { sendMessage(player,"You do not have an axe which you have the level to use.") diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/LostCityListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/LostCityListeners.kt index f3c24c66c..75c7538a5 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/LostCityListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/LostCityListeners.kt @@ -10,6 +10,7 @@ import core.game.system.task.Pulse import core.game.world.map.Location import core.plugin.Initializable import org.rs09.consts.Items +import rs09.game.interaction.IntType import org.rs09.consts.Scenery as Sceneries import rs09.game.interaction.InteractionListener import rs09.game.world.GameWorld @@ -24,7 +25,7 @@ class LostCityListeners : InteractionListener { override fun defineListeners() { // the shed teleport, to allow players to access zanaris if they enter the shed while wielding the dramen staff - on(Sceneries.DOOR_2406,SCENERY,"open"){ player, node -> + on(Sceneries.DOOR_2406,IntType.SCENERY,"open"){ player, node -> DoorActionHandler.handleAutowalkDoor(player,node as Scenery) val quest = "Lost City" val isOutsideShed = player.location.x < node.location.x @@ -52,7 +53,7 @@ class LostCityListeners : InteractionListener { return@on true } // creating the dramen staff via using knife on dramen branch - onUseWith(ITEM,Items.KNIFE_946,Items.DRAMEN_BRANCH_771){ player, _, _ -> + onUseWith(IntType.ITEM,Items.KNIFE_946,Items.DRAMEN_BRANCH_771){ player, _, _ -> if(!player.skills.hasLevel(Skills.CRAFTING,31)) { sendDialogue(player,"You need a crafting level of 31 to do this.") return@onUseWith false diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/ShamusTreeListener.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/ShamusTreeListener.kt index 08465dd14..498bc70de 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/ShamusTreeListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/lostcity/ShamusTreeListener.kt @@ -12,6 +12,7 @@ import core.plugin.Initializable import org.rs09.consts.NPCs import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld @@ -64,7 +65,7 @@ class ShamusTreeListener : InteractionListener { } override fun defineListeners() { - on(Scenery.TREE_2409,SCENERY,"chop") { player, _ -> + on(Scenery.TREE_2409, IntType.SCENERY, "chop") { player, _ -> handleShamusTree(player) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/BrotherCedricNPC.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/BrotherCedricNPC.kt index 442e8c300..e8e966038 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/BrotherCedricNPC.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/BrotherCedricNPC.kt @@ -10,6 +10,7 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE /** @@ -114,7 +115,7 @@ class BrotherCedricDialogue : DialogueFile() { */ class BrotherCedricListener : InteractionListener { override fun defineListeners() { - on(NPCs.BROTHER_CEDRIC_280, NPC, "talk-to"){ player, _ -> + on(NPCs.BROTHER_CEDRIC_280, IntType.NPC, "talk-to"){ player, _ -> player.dialogueInterpreter.open(BrotherCedricDialogue(), NPC(NPCs.BROTHER_CEDRIC_280)) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/BrotherOmadNPC.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/BrotherOmadNPC.kt index 361a89b83..dcc174a23 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/BrotherOmadNPC.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/BrotherOmadNPC.kt @@ -12,6 +12,7 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld.Pulser import rs09.tools.END_DIALOGUE @@ -207,7 +208,7 @@ class BrotherOmadDialogue : DialogueFile() { */ class BrotherOmadListener : InteractionListener { override fun defineListeners() { - on(NPCs.BROTHER_OMAD_279, NPC, "talk-to"){ player, _ -> + on(NPCs.BROTHER_OMAD_279, IntType.NPC, "talk-to"){ player, _ -> player.dialogueInterpreter.open(BrotherOmadDialogue(), NPC(NPCs.BROTHER_OMAD_279)) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/MonasteryMonkNPC.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/MonasteryMonkNPC.kt index e4d94c83a..ed4c9b42c 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/MonasteryMonkNPC.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/monksfriend/MonasteryMonkNPC.kt @@ -5,6 +5,7 @@ import core.game.node.entity.npc.NPC import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE /** @@ -36,7 +37,7 @@ class MonasteryMonkDialogue : DialogueFile() { */ class MonasteryMonkListener : InteractionListener { override fun defineListeners() { - on(NPCs.MONK_281, NPC, "talk-to"){ player, _ -> + on(NPCs.MONK_281, IntType.NPC, "talk-to"){ player, _ -> player.dialogueInterpreter.open(MonasteryMonkDialogue(), NPC(NPCs.MONK_281)) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/naturespirit/NSListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/naturespirit/NSListeners.kt index 57d274320..38bdcda6b 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/naturespirit/NSListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/naturespirit/NSListeners.kt @@ -16,6 +16,7 @@ import rs09.game.content.dialogue.DialogueFile import rs09.game.content.global.action.PickupHandler import rs09.game.content.global.shops.Shops import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.node.entity.npc.MortMyreGhastNPC import rs09.game.system.SystemLogger import rs09.tools.END_DIALOGUE @@ -46,12 +47,12 @@ class NSListeners : InteractionListener { val items = intArrayOf(USED_SPELLCARD, FUNGUS) override fun defineListeners() { - on(GROTTO_TREE, SCENERY, "look-at"){player, _ -> + on(GROTTO_TREE, IntType.SCENERY, "look-at"){player, _ -> sendMessage(player, "It looks like a tree on a large rock with roots trailing down to the ground.") return@on true } - on(GROTTO_TREE, SCENERY, "search"){player, _ -> + on(GROTTO_TREE, IntType.SCENERY, "search"){player, _ -> if(!getAttribute(player, GROTTO_SEARCHED, false) || !(inInventory(player, JOURNAL) || inBank(player, JOURNAL))){ sendItemDialogue(player, JOURNAL, "You search the strange rock. You find a knot and inside of it you discover a small tome. The words on the front are a bit vague, but you can make out the words 'Tarlock' and 'journal'.") addItemOrDrop(player, JOURNAL, 1) @@ -61,7 +62,7 @@ class NSListeners : InteractionListener { return@on false } - on(GROTTO_ENTRANCE, SCENERY, "enter"){player, node -> + on(GROTTO_ENTRANCE, IntType.SCENERY, "enter"){player, node -> val questStage = player.questRepository.getQuest("Nature Spirit").getStage(player) if(questStage < 55) { val npc = core.game.node.entity.npc.NPC.create(NPCs.FILLIMAN_TARLOCK_1050, Location.create(3440, 3336, 0)) @@ -74,7 +75,7 @@ class NSListeners : InteractionListener { return@on true } - on(GROTTO_ALTAR, SCENERY,"search"){player, node -> + on(GROTTO_ALTAR, IntType.SCENERY, "search"){player, node -> val stage = player.questRepository.getStage("Nature Spirit") if(stage == 55){ openDialogue(player, FillimanCompletionDialogue(), NPC(NPCs.FILLIMAN_TARLOCK_1050)) @@ -84,22 +85,22 @@ class NSListeners : InteractionListener { return@on false } - on(NATURE_STONE, SCENERY, "search"){player, _ -> + on(NATURE_STONE, IntType.SCENERY, "search"){player, _ -> sendDialogue(player, "You search the stone and find that it has some sort of nature symbol scratched into it.") return@on true } - on(FAITH_STONE, SCENERY, "search"){player, _ -> + on(FAITH_STONE, IntType.SCENERY, "search"){player, _ -> sendDialogue(player, "You search the stone and find that it has some sort of faith symbol scratched into it.") return@on true } - on(FREELY_GIVEN_STONE, SCENERY, "search"){player, _ -> + on(FREELY_GIVEN_STONE, IntType.SCENERY, "search"){player, _ -> sendDialogue(player, "You search the stone and find it has some sort of spirit symbol scratched into it.") return@on true } - on(WISHING_WELL, SCENERY, "make-wish"){player, node -> + on(WISHING_WELL, IntType.SCENERY, "make-wish"){player, node -> if(player.questRepository.isComplete("Nature Spirit") && player.questRepository.isComplete("Wolf Whistle")) Shops.openId(player, 241) else @@ -108,19 +109,19 @@ class NSListeners : InteractionListener { return@on true } - on(JOURNAL, ITEM, "read"){player, _ -> + on(JOURNAL, IntType.ITEM, "read"){player, _ -> player.dialogueInterpreter.open(NSJournalDialogue()) return@on true } - on(WASHING_BOWL, GROUNDITEM, "take"){player, node -> - SystemLogger.logInfo("Running listener") + on(WASHING_BOWL, IntType.GROUNDITEM, "take"){player, node -> + SystemLogger.logInfo(this::class.java, "Running listener") GroundItemManager.create(Item(MIRROR), node.location, player) PickupHandler.take(player, node as GroundItem) return@on true } - on(MIRROR, GROUNDITEM, "take"){player, node -> + on(MIRROR, IntType.GROUNDITEM, "take"){player, node -> if(getAttribute(player, MIRROR_TAKEN, false) && (inInventory(player, MIRROR) || inBank(player, MIRROR))){ sendDialogue(player, "I don't need another one of these.") return@on true @@ -130,7 +131,7 @@ class NSListeners : InteractionListener { return@on true } - on(SPELLCARD, ITEM, "cast"){player, node -> + on(SPELLCARD, IntType.ITEM, "cast"){player, node -> if(NSUtils.castBloom(player)){ removeItem(player, node.asItem(), Container.INVENTORY) addItem(player, Items.A_USED_SPELL_2969) @@ -138,7 +139,7 @@ class NSListeners : InteractionListener { return@on true } - on(intArrayOf(DRUID_POUCH, DRUID_POUCH_EMPTY), ITEM, "fill"){player, node -> + on(intArrayOf(DRUID_POUCH, DRUID_POUCH_EMPTY), IntType.ITEM, "fill"){player, node -> if(player.questRepository.getStage("Nature Spirit") >= 75) { if (amountInInventory(player, PEAR) >= 3) { @@ -169,7 +170,7 @@ class NSListeners : InteractionListener { return@on true } - onUseWith(SCENERY, Items.SILVER_SICKLE_2961, NATURE_ALTAR){player, used, with -> + onUseWith(IntType.SCENERY, Items.SILVER_SICKLE_2961, NATURE_ALTAR){player, used, with -> sendItemDialogue(player, Items.SILVER_SICKLEB_2963, "You dump the sickle into the waters.") if(removeItem(player, Items.SILVER_SICKLE_2961, Container.INVENTORY)){ addItem(player, Items.SILVER_SICKLEB_2963, 1) @@ -177,11 +178,11 @@ class NSListeners : InteractionListener { return@onUseWith true } - onUseWith(NPC, DRUID_POUCH, NPCs.GHAST_1052){player, used, with -> + onUseWith(IntType.NPC, DRUID_POUCH, NPCs.GHAST_1052){player, used, with -> NSUtils.activatePouch(player, with as MortMyreGhastNPC) } - onUseWith(SCENERY, items, *stones) { player, used, with -> + onUseWith(IntType.SCENERY, items, *stones) { player, used, with -> when (used.id) { USED_SPELLCARD -> { if (with.id == FREELY_GIVEN_STONE) { diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/HunterTalismanListener.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/HunterTalismanListener.kt index 03e567722..7e035a6b5 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/HunterTalismanListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/HunterTalismanListener.kt @@ -7,6 +7,7 @@ import core.game.system.task.Pulse import core.game.world.map.Location import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld.Pulser import kotlin.math.abs import kotlin.math.atan2 @@ -17,7 +18,7 @@ class HunterTalismanListener : InteractionListener { override fun defineListeners() { - on(TALISMAN,ITEM,"locate"){player,_ -> + on(TALISMAN, IntType.ITEM, "locate"){player,_ -> var locationString = getAttribute(player,"fremtrials:draugen-loc","none") if(locationString == "none"){ val newLoc = possibleLocations.random() diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/SeerLockInterfaceListener.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/SeerLockInterfaceListener.kt index 231266e68..802d126ac 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/SeerLockInterfaceListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/SeerLockInterfaceListener.kt @@ -1,7 +1,6 @@ package rs09.game.content.quest.members.thefremenniktrials import api.sendMessage -import core.game.container.access.BitregisterAssembler import rs09.game.interaction.InterfaceListener class SeerLockInterfaceListener : InterfaceListener { @@ -25,7 +24,7 @@ class SeerLockInterfaceListener : InterfaceListener { player.packetDispatch.sendVarcUpdate(619, 0) player.packetDispatch.sendVarcUpdate(620, 0) player.packetDispatch.sendVarcUpdate(621, 0) - BitregisterAssembler.send(player,298,2,0,1, BitregisterAssembler(0)) + player.packetDispatch.sendIfaceSettings(0, 2, 298, 0, 1) player.setAttribute("riddle-letter-one",0) player.setAttribute("riddle-letter-two",0) player.setAttribute("riddle-letter-three",0) diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/SeersHouseListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/SeersHouseListeners.kt index 224196c17..5e88b9d8b 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/SeersHouseListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/SeersHouseListeners.kt @@ -14,6 +14,7 @@ import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class SeersHouseListeners : InteractionListener { @@ -96,7 +97,7 @@ class SeersHouseListeners : InteractionListener { override fun defineListeners() { - on(WESTDOOR,SCENERY,"open"){player,node -> + on(WESTDOOR, IntType.SCENERY, "open"){player,node -> if(!player.getAttribute("PeerStarted",false)){ sendDialogue(player,"You should probably talk to the owner of this home.") } @@ -120,12 +121,12 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(WESTLADDER, SCENERY,"Climb-up") { player, node -> + on(WESTLADDER, IntType.SCENERY, "Climb-up") { player, node -> ClimbActionHandler.climb(player, Animation(828), Location.create(2631, 3664, 2)) return@on true } - on(WESTTRAPDOOR.id, SCENERY,"Climb-down") { player, node -> + on(WESTTRAPDOOR.id, IntType.SCENERY, "Climb-down") { player, node -> if(player.location.x < 2634){ ClimbActionHandler.climb(player, Animation(828), Location.create(2631, 3664, 0)) } @@ -135,39 +136,39 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(WESTTRAPDOOR.id, SCENERY,"Close") { player, node -> + on(WESTTRAPDOOR.id, IntType.SCENERY, "Close") { player, node -> SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(4174)) return@on true } - on(WESTTRAPDOOR.id, SCENERY,"Open") { player, node -> + on(WESTTRAPDOOR.id, IntType.SCENERY, "Open") { player, node -> SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(4173)) return@on true } - on(EASTTRAPDOOR.id, SCENERY,"Open") { player, node -> + on(EASTTRAPDOOR.id, IntType.SCENERY, "Open") { player, node -> SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(4173)) return@on true } - on(EASTTRAPDOOR.id, SCENERY,"Close") { player, node -> + on(EASTTRAPDOOR.id, IntType.SCENERY, "Close") { player, node -> SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(4174)) return@on true } - on(EASTTRAPDOOR.id, SCENERY,"Climb-down") { player, node -> + on(EASTTRAPDOOR.id, IntType.SCENERY, "Climb-down") { player, node -> if(player.location.x > 2634){ ClimbActionHandler.climb(player, Animation(828), Location.create(2636, 3664, 0)) } return@on true } - on(EASTLADDER, SCENERY,"Climb-Up") { player, node -> + on(EASTLADDER, IntType.SCENERY, "Climb-Up") { player, node -> ClimbActionHandler.climb(player, Animation(828), Location.create(2636, 3664, 2)) return@on true } - on(CUPBOARD,SCENERY,"Search") { player, node -> + on(CUPBOARD, IntType.SCENERY, "Search") { player, node -> sendMessage(player,"You search the cupboard...") if(player.inventory.contains(EMPTYBUCKET,1)){ sendMessage(player,"You find nothing of interest.") @@ -179,12 +180,12 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(BALANCECHEST, SCENERY,"Open") { player, node -> + on(BALANCECHEST, IntType.SCENERY, "Open") { player, node -> sendDialogue(player,"This chest is securely locked shut. There is some kind of balance attached to the lock, and a number four is painted just above it.") return@on true } - on(BOOKCASE, SCENERY,"Search") { player, node -> + on(BOOKCASE, IntType.SCENERY, "Search") { player, node -> sendMessage(player,"You search the bookcase...") if(player.inventory.contains(REDHERRING,1)){ sendMessage(player,"You find nothing of interest.") @@ -196,7 +197,7 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(SOUTHBOXES, SCENERY,"Search"){ player, node -> + on(SOUTHBOXES, IntType.SCENERY, "Search"){ player, node -> sendMessage(player,"You search the boxes...") if(player.inventory.contains(BLUETHREAD,1)){ sendMessage(player,"You find nothing of interest.") @@ -208,17 +209,17 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(CHEST, SCENERY,"Open"){ player, node -> + on(CHEST, IntType.SCENERY, "Open"){ player, node -> SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(4168)) return@on true } - on(CHEST, SCENERY,"Close"){ player, node -> + on(CHEST, IntType.SCENERY, "Close"){ player, node -> SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(4167)) return@on true } - on(CHEST, SCENERY,"Search"){ player, node -> + on(CHEST, IntType.SCENERY, "Search"){ player, node -> sendMessage(player,"You search the chest...") if(player.inventory.contains(EMPTYJUG,1)){ sendMessage(player,"You find nothing of interest.") @@ -230,7 +231,7 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(EASTCRATES, SCENERY,"Search") { player, node -> + on(EASTCRATES, IntType.SCENERY, "Search") { player, node -> sendMessage(player,"You search the crates...") if(player.inventory.contains(PICK,1)){ sendMessage(player,"You find nothing of interest.") @@ -242,7 +243,7 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(SOUTHCRATES, SCENERY,"Search") { player, node -> + on(SOUTHCRATES, IntType.SCENERY, "Search") { player, node -> sendMessage(player,"You search the crates...") if(player.inventory.contains(SHIPTOY,1)){ sendMessage(player,"You find nothing of interest.") @@ -254,41 +255,17 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(SOUTHBOXES, SCENERY,"Search") { player, node -> - sendMessage(player,"You search the boxes...") - if(player.inventory.contains(MAGNET,1)){ - sendMessage(player,"You find nothing of interest.") - } - else{ - addItem(player,MAGNET) - sendMessage(player,"You find a magnet hidden inside.") - } - return@on true - } - - on(SOUTHBOXES, SCENERY,"Search") { player, node -> - sendMessage(player,"You search the boxes...") - if(player.inventory.contains(MAGNET,1)){ - sendMessage(player,"You find nothing of interest.") - } - else{ - addItem(player,MAGNET) - sendMessage(player,"You find a magnet hidden inside.") - } - return@on true - } - - on(BULLSHEAD, SCENERY,"Study") { player, node -> + on(BULLSHEAD, IntType.SCENERY, "Study") { player, node -> player.dialogueInterpreter.open(BullHeadDialogue(player)) return@on true } - on(UNICORNHEAD, SCENERY,"Study") { player, node -> + on(UNICORNHEAD, IntType.SCENERY, "Study") { player, node -> player.dialogueInterpreter.open(UnicornHeadDialogue(player)) return@on true } - onUseWith(SCENERY,REDHERRING,COOKINGRANGE) { player, used, with -> + onUseWith(IntType.SCENERY,REDHERRING,COOKINGRANGE) { player, used, with -> player.animate(Animation(883,Animator.Priority.HIGH)) player.audioManager.send(Audio(2577, 1, 1)) removeItem(player,REDHERRING) @@ -297,19 +274,20 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,REDGOOP,WOODENDISK) { player, used, with -> - removeItem(player,WOODENDISK) + onUseWith(IntType.ITEM,REDGOOP,WOODENDISK) { player, used, with -> + removeItem(player, WOODENDISK) + removeItem(player, REDGOOP) addItem(player,REDDISK) sendMessage(player,"You coat the wooden coin with the sticky red goop.") return@onUseWith true } - on(MURAL, SCENERY,"Study") { player, node -> + on(MURAL, IntType.SCENERY, "Study") { player, node -> sendMessage(player,"The mural feels like something is missing.") return@on true } - onUseWith(SCENERY, BUCKETS, TAP) { player, bucket, _ -> + onUseWith(IntType.SCENERY, BUCKETS, TAP) { player, bucket, _ -> when(bucket.id){ 3727 ->{ removeItem(player,EMPTYBUCKET) @@ -345,7 +323,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, JUGS, TAP) { player, used, with -> + onUseWith(IntType.SCENERY, JUGS, TAP) { player, used, with -> when(used.id){ EMPTYJUG ->{ removeItem(player,EMPTYJUG) @@ -369,7 +347,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, BUCKETS, DRAIN) { player, used, with -> + onUseWith(IntType.SCENERY, BUCKETS, DRAIN) { player, used, with -> when(used.id){ EMPTYBUCKET ->{ sendMessage(player,"The bucket is already empty!") @@ -403,7 +381,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, JUGS, DRAIN) { player, used, with -> + onUseWith(IntType.SCENERY, JUGS, DRAIN) { player, used, with -> when(used.id){ EMPTYJUG ->{ sendMessage(player,"The jug is already empty!") @@ -427,14 +405,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,REDGOOP,WOODENDISK) { player, _, _ -> - removeItem(player,REDGOOP) - removeItem(player,WOODENDISK) - addItem(player,REDDISK) - return@onUseWith true - } - - onUseWith(SCENERY, FOURFIFTHBUCKET, BALANCECHEST) { player, used, with -> + onUseWith(IntType.SCENERY, FOURFIFTHBUCKET, BALANCECHEST) { player, used, with -> removeItem(player,FOURFIFTHBUCKET) addItem(player,VASE) sendMessage(player,"You place the bucket on the scale.") @@ -443,7 +414,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, DISKS, MURAL) { player, used, with -> + onUseWith(IntType.SCENERY, DISKS, MURAL) { player, used, with -> when(used.id){ REDDISK ->{ if(player.getAttribute("olddiskplaced",false)){ @@ -481,7 +452,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, BUCKETS, BALANCECHEST) { player, used, with -> + onUseWith(IntType.SCENERY, BUCKETS, BALANCECHEST) { player, used, with -> when(used.id){ EMPTYBUCKET ->{ player.animate(Animation(883,Animator.Priority.HIGH)) @@ -519,7 +490,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, JUGS, BALANCECHEST) { player, used, with -> + onUseWith(IntType.SCENERY, JUGS, BALANCECHEST) { player, used, with -> when(used.id){ EMPTYJUG ->{ player.animate(Animation(883,Animator.Priority.HIGH)) @@ -545,7 +516,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, BUCKETS, FROZENTABLE) { player, used, with -> + onUseWith(IntType.SCENERY, BUCKETS, FROZENTABLE) { player, used, with -> when(used.id){ EMPTYBUCKET -> sendMessage(player,"Your empty bucket gets very cold on the icy table.") FULLBUCKET -> { @@ -558,7 +529,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, JUGS, FROZENTABLE) { player, used, with -> + onUseWith(IntType.SCENERY, JUGS, FROZENTABLE) { player, used, with -> when(used.id){ EMPTYJUG -> sendMessage(player,"Your empty jug gets very cold on the icy table.") FULLJUG -> { @@ -571,7 +542,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,BUCKETS,*JUGS) { player, used, with -> + onUseWith(IntType.ITEM,BUCKETS,*JUGS) { player, used, with -> when(used.id){ ONEFIFTHBUCKET -> { when(with.id){ @@ -707,7 +678,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,JUGS,*BUCKETS) { player, used, with -> + onUseWith(IntType.ITEM,JUGS,*BUCKETS) { player, used, with -> when(used.id){ ONETHIRDJUG->{ when(with.id){ @@ -833,30 +804,30 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - on(VASE,ITEM,"Shake") { player, node -> + on(VASE, IntType.ITEM, "Shake") { player, node -> sendDialogue(player,"You shake the strangely shaped Vase. From the sound of it there is something metallic inside, but the neck of th vase is too narrow for it to come out.") return@on true } - onUseWith(ITEM,PICK,VASE) { player, used, with -> + onUseWith(IntType.ITEM,PICK,VASE) { player, used, with -> sendMessage(player,"The pick wouldn't be strong enough to break the vase open.") return@onUseWith true } - onUseWith(ITEM,MAGNET,VASE) { player, used, with -> + onUseWith(IntType.ITEM,MAGNET,VASE) { player, used, with -> sendMessage(player,"You use the magnet on the vase. The metallic object inside moves.") sendMessage(player,"The neck of the vase is too thin for thee object to come out of the vase.") return@onUseWith true } - onUseWith(SCENERY, VASE, TAP) { player, used, with -> + onUseWith(IntType.SCENERY, VASE, TAP) { player, used, with -> removeItem(player,VASE) addItem(player,FULLVASE) sendMessage(player,"You fill the strange looking vase with water.") return@onUseWith true } - onUseWith(ITEM,FULLJUG,VASE) { player, used, with -> + onUseWith(IntType.ITEM,FULLJUG,VASE) { player, used, with -> removeItem(player,FULLJUG) removeItem(player,VASE) addItem(player,EMPTYJUG) @@ -865,12 +836,12 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - on(FULLVASE,ITEM,"Shake") { player, node -> + on(FULLVASE, IntType.ITEM, "Shake") { player, node -> sendDialogue(player,"You shake the strangely shaped vase. The water inside it sloshes a little. Some spills out of the neck of the vase.") return@on true } - onUseWith(ITEM,VASE,VASELID) { player, used, with -> + onUseWith(IntType.ITEM,VASE,VASELID) { player, used, with -> removeItem(player,VASE) removeItem(player,VASELID) addItem(player,SEALEDEMPTYVASE) @@ -878,7 +849,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,FULLVASE,VASELID) { player, used, with -> + onUseWith(IntType.ITEM,FULLVASE,VASELID) { player, used, with -> removeItem(player,FULLVASE) removeItem(player,VASELID) addItem(player,SEALEDFULLVASE) @@ -886,7 +857,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - on(SEALEDEMPTYVASE,ITEM,"Remove-lid") { player, node -> + on(SEALEDEMPTYVASE, IntType.ITEM, "Remove-lid") { player, node -> removeItem(player,SEALEDEMPTYVASE) addItem(player,VASE) addItem(player,VASELID) @@ -894,7 +865,7 @@ class SeersHouseListeners : InteractionListener { return@on true } - on(SEALEDFULLVASE,ITEM,"Remove-lid") { player, node -> + on(SEALEDFULLVASE, IntType.ITEM, "Remove-lid") { player, node -> removeItem(player,SEALEDFULLVASE) addItem(player,VASE) addItem(player,VASELID) @@ -902,7 +873,7 @@ class SeersHouseListeners : InteractionListener { return@on true } - onUseWith(SCENERY, FULLVASE, FROZENTABLE) { player, used, with -> + onUseWith(IntType.SCENERY, FULLVASE, FROZENTABLE) { player, used, with -> player.animate(Animation(883,Animator.Priority.HIGH)) removeItem(player,VASE) addItem(player,FROZENVASE) @@ -910,7 +881,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, SEALEDFULLVASE, FROZENTABLE) { player, used, with -> + onUseWith(IntType.SCENERY, SEALEDFULLVASE, FROZENTABLE) { player, used, with -> player.animate(Animation(883,Animator.Priority.HIGH)) removeItem(player,SEALEDFULLVASE) addItem(player,FROZENKEY) @@ -919,7 +890,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, FROZENBUCKET, COOKINGRANGE) { player, used, with -> + onUseWith(IntType.SCENERY, FROZENBUCKET, COOKINGRANGE) { player, used, with -> player.animate(Animation(883,Animator.Priority.HIGH)) player.audioManager.send(Audio(2577, 1, 1)) removeItem(player,FROZENBUCKET) @@ -928,7 +899,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, FROZENJUG, COOKINGRANGE) { player, used, with -> + onUseWith(IntType.SCENERY, FROZENJUG, COOKINGRANGE) { player, used, with -> player.animate(Animation(883,Animator.Priority.HIGH)) player.audioManager.send(Audio(2577, 1, 1)) removeItem(player,FROZENJUG) @@ -937,7 +908,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, FROZENVASE, COOKINGRANGE) { player, used, with -> + onUseWith(IntType.SCENERY, FROZENVASE, COOKINGRANGE) { player, used, with -> player.animate(Animation(883,Animator.Priority.HIGH)) player.audioManager.send(Audio(2577, 1, 1)) removeItem(player,FROZENVASE) @@ -946,7 +917,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - onUseWith(SCENERY, FROZENKEY, COOKINGRANGE) { player, used, with -> + onUseWith(IntType.SCENERY, FROZENKEY, COOKINGRANGE) { player, used, with -> player.animate(Animation(883,Animator.Priority.HIGH)) player.audioManager.send(Audio(2577, 1, 1)) removeItem(player,FROZENKEY) @@ -955,7 +926,7 @@ class SeersHouseListeners : InteractionListener { return@onUseWith true } - on(EASTDOOR, SCENERY,"Open") { player, node -> + on(EASTDOOR, IntType.SCENERY, "Open") { player, node -> if(player.inventory.contains(SEERSKEY,1)){ player.setAttribute("/save:housepuzzlesolved",true) player.inventory.clear() diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/TFTInteractionListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/TFTInteractionListeners.kt index 980f8347c..982b9d3ea 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/TFTInteractionListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/thefremenniktrials/TFTInteractionListeners.kt @@ -21,6 +21,7 @@ import core.game.world.update.flag.context.Graphics import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.config.ItemConfigParser import rs09.game.world.GameWorld.Pulser @@ -54,12 +55,12 @@ class TFTInteractionListeners : InteractionListener{ private val STEW_INGREDIENT_IDS = intArrayOf(Items.POTATO_1942,Items.ONION_1957,Items.CABBAGE_1965,Items.PET_ROCK_3695) override fun defineListeners() { - onUseWith(NPC,BEER,WORKER){ player, beer, _ -> + onUseWith(IntType.NPC,BEER,WORKER){ player, beer, _ -> player.dialogueInterpreter.open(CouncilWorkerFTDialogue(0,true,beer.id), NPC(WORKER)) return@onUseWith true } - onUseWith(SCENERY, FISH, FISH_ALTAR){ player,fish,_ -> + onUseWith(IntType.SCENERY, FISH, FISH_ALTAR){ player,fish,_ -> if(inInventory(player,Items.LYRE_3689) || inInventory(player,Items.ENCHANTED_LYRE_3690)) { Pulser.submit(SpiritPulse(player, fish.id)) } else { @@ -68,7 +69,7 @@ class TFTInteractionListeners : InteractionListener{ return@onUseWith true } - onUseWith(ITEM,LOW_ALC_KEG,KEG){player,_,_ -> + onUseWith(IntType.ITEM,LOW_ALC_KEG,KEG){player,_,_ -> if(!getAttribute(player,"fremtrials:keg-mixed",false)){ if(getAttribute(player,"fremtrials:cherrybomb",false)) { removeItem(player,LOW_ALC_KEG) @@ -83,7 +84,7 @@ class TFTInteractionListeners : InteractionListener{ return@onUseWith true } - onUseWith(ITEM,TINDERBOX,CHERRY_BOMB){player,_,_ -> + onUseWith(IntType.ITEM,TINDERBOX,CHERRY_BOMB){player,_,_ -> if(removeItem(player,CHERRY_BOMB)){ addItem(player,LIT_BOMB) sendMessage(player,"You light the strange object.") @@ -91,7 +92,7 @@ class TFTInteractionListeners : InteractionListener{ return@onUseWith true } - onUseWith(ITEM,KNIFE,TREE_BRANCH){player,_,_ -> + onUseWith(IntType.ITEM,KNIFE,TREE_BRANCH){player,_,_ -> if (!player.skills.hasLevel(Skills.CRAFTING,40)) { sendDialogue(player, "You need 40 crafting to do this!") return@onUseWith true @@ -103,7 +104,7 @@ class TFTInteractionListeners : InteractionListener{ return@onUseWith true } - onUseWith(SCENERY, STEW_INGREDIENT_IDS, LALLIS_STEW){player,stewIngredient,_ -> + onUseWith(IntType.SCENERY, STEW_INGREDIENT_IDS, LALLIS_STEW){player,stewIngredient,_ -> when(stewIngredient.id){ Items.ONION_1957 -> { sendDialogue(player,"You added an onion to the stew") @@ -129,7 +130,7 @@ class TFTInteractionListeners : InteractionListener{ return@onUseWith true } - onUseWith(SCENERY,GOLDEN_FLEECE,*SPINNING_WHEEL_IDS){ player, _, _ -> + onUseWith(IntType.SCENERY,GOLDEN_FLEECE,*SPINNING_WHEEL_IDS){ player, _, _ -> if(removeItem(player,GOLDEN_FLEECE)){ addItem(player,GOLDEN_WOOL) animate(player,896) @@ -138,7 +139,7 @@ class TFTInteractionListeners : InteractionListener{ return@onUseWith true } - onUseWith(ITEM,UNSTRUNG_LYRE,GOLDEN_WOOL){ player, _, _ -> + onUseWith(IntType.ITEM,UNSTRUNG_LYRE,GOLDEN_WOOL){ player, _, _ -> if(player.getSkills().getLevel(Skills.FLETCHING) >= 25){ if(removeItem(player,GOLDEN_WOOL) && removeItem(player,Items.UNSTRUNG_LYRE_3688)){ @@ -150,7 +151,7 @@ class TFTInteractionListeners : InteractionListener{ return@onUseWith true } - on(LONGHALL_BACKDOOR, SCENERY,"open"){player,door -> + on(LONGHALL_BACKDOOR, IntType.SCENERY, "open"){player,door -> when { getAttribute(player,"LyreEnchanted",false) -> { sendNPCDialogue(player,1278,"Yeah you're good to go through. Olaf tells me you're some kind of outerlander bard here on tour. I doubt you're worse than Olaf is.") @@ -166,7 +167,7 @@ class TFTInteractionListeners : InteractionListener{ return@on true } - on(LYRE_IDs,ITEM,"play"){player,lyre -> + on(LYRE_IDs, IntType.ITEM, "play"){player,lyre -> if(getAttribute(player,"onStage",false) && !getAttribute(player,"lyreConcertPlayed",false)){ Pulser.submit(LyreConcertPulse(player,lyre.id)) } else if(questStage(player, "Fremennik Trials") < 20 || !isQuestComplete(player, "Fremennik Trials")){ @@ -182,7 +183,7 @@ class TFTInteractionListeners : InteractionListener{ return@on true } - on(PIPE,SCENERY,"put-inside"){ player, _ -> + on(PIPE, IntType.SCENERY, "put-inside"){ player, _ -> if(inInventory(player,LIT_BOMB)){ sendMessage(player,"You stuff the lit object into the pipe.") setAttribute(player,"/save:fremtrials:cherrybomb",true) @@ -193,7 +194,7 @@ class TFTInteractionListeners : InteractionListener{ return@on true } - on(PORTALIDs,SCENERY,"use"){ player, portal -> + on(PORTALIDs, IntType.SCENERY, "use"){ player, portal -> player.properties?.teleportLocation = when(portal.id){ 2273 -> DestRoom(2639, 10012, 2645, 10018).getCenter() 2274 -> DestRoom(2650, 10034, 2656, 10040).getCenter() @@ -210,14 +211,14 @@ class TFTInteractionListeners : InteractionListener{ return@on true } - on(SWENSEN_LADDER,SCENERY,"climb"){ player, _ -> + on(SWENSEN_LADDER, IntType.SCENERY, "climb"){ player, _ -> if(!getAttribute(player,"fremtrials:swensen-accepted",false)){ sendNPCDialogue(player,1283,"Where do you think you're going?",FacialExpression.ANGRY) } return@on true } - on(THORVALD_LADDER, SCENERY, "climb-down") { player, _ -> + on(THORVALD_LADDER, IntType.SCENERY, "climb-down") { player, _ -> if (isQuestComplete(player, "Fremennik Trials") || getAttribute(player, "fremtrials:thorvald-vote", false)) { sendMessage(player,"You have no reason to go back down there.") return@on true @@ -251,7 +252,7 @@ class TFTInteractionListeners : InteractionListener{ return@on true } - on(THORVALD_LADDER_LOWER, SCENERY, "climb-up") { player, _ -> + on(THORVALD_LADDER_LOWER, IntType.SCENERY, "climb-up") { player, _ -> if (player.getExtension(KoscheiSession::class.java) != null) { KoscheiSession.getSession(player).close() } @@ -259,12 +260,12 @@ class TFTInteractionListeners : InteractionListener{ return@on true } - on(SWAYING_TREE,SCENERY,"cut-branch"){ player, node -> + on(SWAYING_TREE, IntType.SCENERY, "cut-branch"){ player, node -> player.pulseManager.run(WoodcuttingSkillPulse(player, node as Scenery)) return@on true } - on(SHOPNPCS,NPC,"Trade") { player, npc -> + on(SHOPNPCS, IntType.NPC, "Trade") { player, npc -> if(isQuestComplete(player, "Fremennik Trials")){ npc.asNpc().openShop(player) } else when(npc.id){ diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/thegolem/TheGolemQuest.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/thegolem/TheGolemQuest.kt index 6980d4ed6..71965ff76 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/thegolem/TheGolemQuest.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/thegolem/TheGolemQuest.kt @@ -21,6 +21,7 @@ import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueBuilder import rs09.game.content.dialogue.DialogueBuilderFile import rs09.game.content.dialogue.DialogueFile +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListener import rs09.game.interaction.InterfaceListener import rs09.game.world.GameWorld @@ -370,21 +371,21 @@ class TheGolemListeners : InteractionListener { override fun defineDestinationOverrides() { addClimbDest(Location.create(3492, 3089, 0), Location.create(2722, 4886, 0)) addClimbDest(Location.create(2721, 4884, 0), Location.create(3491, 3090, 0)) - setDest(SCENERY, intArrayOf(34978), "climb-down") { _, _ -> return@setDest Location.create(3491, 3090, 0) } - setDest(SCENERY, intArrayOf(6372), "climb-up") { _, _ -> return@setDest Location.create(2722, 4886, 0) } + setDest(IntType.SCENERY, intArrayOf(34978), "climb-down") { _, _ -> return@setDest Location.create(3491, 3090, 0) } + setDest(IntType.SCENERY, intArrayOf(6372), "climb-up") { _, _ -> return@setDest Location.create(2722, 4886, 0) } } override fun defineListeners() { - onUseWith(NPC, Items.SOFT_CLAY_1761, 1907) { player, used, with -> return@onUseWith repairGolem(player) } - on(34978, SCENERY, "climb-down") { player, node -> ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_DOWN, SpecialLadders.getDestination(node.location)); return@on true } - on(6372, SCENERY, "climb-up") { player, node -> ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_UP, SpecialLadders.getDestination(node.location)); return@on true } - on(4615, ITEM, "read") { player, node -> + onUseWith(IntType.NPC, Items.SOFT_CLAY_1761, 1907) { player, used, with -> return@onUseWith repairGolem(player) } + on(34978, IntType.SCENERY, "climb-down") { player, node -> ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_DOWN, SpecialLadders.getDestination(node.location)); return@on true } + on(6372, IntType.SCENERY, "climb-up") { player, node -> ClimbActionHandler.climb(player, ClimbActionHandler.CLIMB_UP, SpecialLadders.getDestination(node.location)); return@on true } + on(4615, IntType.ITEM, "read") { player, node -> player.setAttribute("ifaces:220:lines", LETTER_LINES) player.setAttribute("/save:the-golem:read-elissa-letter", true) openInterface(player, 220) return@on true } - on(35226, SCENERY, "search") { player, node -> + on(35226, IntType.SCENERY, "search") { player, node -> player.packetDispatch.sendMessage("You search the bookcase.") val readLetter = player.getAttribute("the-golem:read-elissa-letter", false) if(!player.inventory.containsAtLeastOneItem(4616) && !player.bank.containsAtLeastOneItem(4616) && readLetter) { @@ -395,8 +396,8 @@ class TheGolemListeners : InteractionListener { } return@on true } - on(6363, SCENERY, "open") { player, node -> player.sendMessage("The door doesn't open."); return@on true } - on(6364, SCENERY, "enter") { player, node -> + on(6363, IntType.SCENERY, "open") { player, node -> player.sendMessage("The door doesn't open."); return@on true } + on(6364, IntType.SCENERY, "enter") { player, node -> player.sendMessage("You step into the portal.") if(!player.getAttribute("the-golem:seen-demon", false)) { player.sendMessage("The room is dominated by a colossal horned skeleton!") @@ -406,24 +407,24 @@ class TheGolemListeners : InteractionListener { teleport(player, Location.create(3552, 4948, 0)) return@on true } - on(6282, SCENERY, "enter") { player, node -> + on(6282, IntType.SCENERY, "enter") { player, node -> player.sendMessage("You step into the portal.") teleport(player, Location.create(2722, 4911, 0)) return@on true } - onUseWith(SCENERY, Items.HAMMER_2347, 6301) { player, _, _ -> takeThroneGems(player); return@onUseWith true } - onUseWith(SCENERY, Items.CHISEL_1755, 6301) { player, _, _ -> takeThroneGems(player); return@onUseWith true } - on(646, NPC, "pickpocket") { player, node -> return@on pickpocketCurator(player, node) } - on(intArrayOf(24627, 24550), SCENERY, "study") { player, node -> return@on displayCase(player, node as Scenery) } - on(24627, SCENERY, "open") { player, node -> return@on openDisplayCase(player, node) } - onUseWith(SCENERY, 4618, 6309) { player, used, with -> return@onUseWith placeStatuette(player) } - on(intArrayOf(6307, 6308), SCENERY, "turn") { player, node -> turnStatuette(player, node as Scenery) } - onUseWith(ITEM, 233, 4620) { player, used, with -> return@onUseWith mortarOnMushroom(player) } - onUseWith(ITEM, 4621, 4622) { player, used, with -> return@onUseWith featherOnInk(player) } - onUseWith(ITEM, 970, 4623) { player, used, with -> return@onUseWith penOnPapyrus(player) } - onUseWith(NPC, 4619, 1907) { player, used, with -> return@onUseWith implementOnGolem(player) } - onUseWith(NPC, 4624, 1907) { player, used, with -> return@onUseWith programOnGolem(player, used, with) } - on(1911, NPC, "grab-feather") { player, node -> + onUseWith(IntType.SCENERY, Items.HAMMER_2347, 6301) { player, _, _ -> takeThroneGems(player); return@onUseWith true } + onUseWith(IntType.SCENERY, Items.CHISEL_1755, 6301) { player, _, _ -> takeThroneGems(player); return@onUseWith true } + on(646, IntType.NPC, "pickpocket") { player, node -> return@on pickpocketCurator(player, node) } + on(intArrayOf(24627, 24550), IntType.SCENERY, "study") { player, node -> return@on displayCase(player, node as Scenery) } + on(24627, IntType.SCENERY, "open") { player, node -> return@on openDisplayCase(player, node) } + onUseWith(IntType.SCENERY, 4618, 6309) { player, used, with -> return@onUseWith placeStatuette(player) } + on(intArrayOf(6307, 6308), IntType.SCENERY, "turn") { player, node -> turnStatuette(player, node as Scenery) } + onUseWith(IntType.ITEM, 233, 4620) { player, used, with -> return@onUseWith mortarOnMushroom(player) } + onUseWith(IntType.ITEM, 4621, 4622) { player, used, with -> return@onUseWith featherOnInk(player) } + onUseWith(IntType.ITEM, 970, 4623) { player, used, with -> return@onUseWith penOnPapyrus(player) } + onUseWith(IntType.NPC, 4619, 1907) { player, used, with -> return@onUseWith implementOnGolem(player) } + onUseWith(IntType.NPC, 4624, 1907) { player, used, with -> return@onUseWith programOnGolem(player, used, with) } + on(1911, IntType.NPC, "grab-feather") { player, node -> if(player.getAttribute("the-golem:varmen-notes-read", false)) { player.lock() GameWorld.Pulser.submit(object : Pulse(){ diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/thelosttribe/PickpocketSigmund.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/thelosttribe/PickpocketSigmund.kt index d4da27d6b..d3bddde85 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/thelosttribe/PickpocketSigmund.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/thelosttribe/PickpocketSigmund.kt @@ -7,6 +7,7 @@ import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld /** @@ -17,7 +18,7 @@ class PickpocketSigmund : InteractionListener{ val SIGMUND = NPCs.SIGMUND_2082 override fun defineListeners() { - on(SIGMUND,NPC,"pickpocket"){player, node -> + on(SIGMUND, IntType.NPC, "pickpocket"){player, node -> player.lock() GameWorld.Pulser.submit(object : Pulse(){ var counter = 0 diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/tree/KhazardWarlordNPC.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/tree/KhazardWarlordNPC.kt index 9d9a7f525..79a0690e2 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/tree/KhazardWarlordNPC.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/tree/KhazardWarlordNPC.kt @@ -11,6 +11,7 @@ import core.plugin.Initializable import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType @Initializable class KhazardWarlordNPC(id: Int = 0, location: Location? = null) : AbstractNPC(id,location), InteractionListener { diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/tree/TreeGnomeVillageListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/tree/TreeGnomeVillageListeners.kt index c2e632e4c..4afd351a3 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/tree/TreeGnomeVillageListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/tree/TreeGnomeVillageListeners.kt @@ -20,6 +20,7 @@ import rs09.game.content.dialogue.DialogueFile import rs09.game.content.quest.members.tree.TreeGnomeVillage.Companion.mazeEntrance import rs09.game.content.quest.members.tree.TreeGnomeVillage.Companion.mazeVillage import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld class TreeGnomeVillageListeners : InteractionListener { @@ -31,61 +32,61 @@ class TreeGnomeVillageListeners : InteractionListener { private val strongholdDoor = 2184 override fun defineDestinationOverrides() { - setDest(NPC, intArrayOf(NPCs.TRACKER_GNOME_2_482),"talk-to"){ _, _ -> + setDest(IntType.NPC, intArrayOf(NPCs.TRACKER_GNOME_2_482),"talk-to"){ _, _ -> return@setDest Location.create(2524, 3256, 0) } } override fun defineListeners() { - on(NPCs.KING_BOLREN_469, NPC, "talk-to"){ player, npc -> + on(NPCs.KING_BOLREN_469, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, KingBolrenDialogue(), npc) return@on true } - on(NPCs.ELKOY_5179, NPC, "talk-to"){ player, npc -> + on(NPCs.ELKOY_5179, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, ElkoyDialogue(), npc) return@on true } - on(NPCs.ELKOY_5182, NPC, "talk-to"){ player, npc -> + on(NPCs.ELKOY_5182, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, ElkoyDialogue(), npc) return@on true } - on(NPCs.ELKOY_5182, NPC, "follow"){ player, _ -> + on(NPCs.ELKOY_5182, IntType.NPC, "follow"){ player, _ -> ElkoyDialogue().travelCutscene(player, if (player.location.y > 3161) mazeVillage else mazeEntrance) return@on true } - on(NPCs.COMMANDER_MONTAI_470, NPC, "talk-to"){ player, npc -> + on(NPCs.COMMANDER_MONTAI_470, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, CommanderMontaiDialogue(), npc) return@on true } - on(NPCs.TRACKER_GNOME_1_481, NPC, "talk-to"){ player, npc -> + on(NPCs.TRACKER_GNOME_1_481, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, TrackerGnomeOneDialogue(), npc) return@on true } - on(NPCs.TRACKER_GNOME_2_482, NPC, "talk-to"){ player, npc -> + on(NPCs.TRACKER_GNOME_2_482, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, TrackerGnomeTwoDialogue(), npc) return@on true } - on(NPCs.TRACKER_GNOME_3_483, NPC, "talk-to"){ player, npc -> + on(NPCs.TRACKER_GNOME_3_483, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, TrackerGnomeThreeDialogue(), npc) return@on true } - on(NPCs.KHAZARD_WARLORD_477, NPC, "talk-to"){ player, npc -> + on(NPCs.KHAZARD_WARLORD_477, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, KhazardWarlordDialogue(), npc) return@on true } - on(NPCs.REMSAI_472, NPC, "talk-to"){ player, npc -> + on(NPCs.REMSAI_472, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, RemsaiDialogue(), npc) return@on true } - on(NPCs.LOCAL_GNOME_484, NPC, "talk-to"){ player, npc -> + on(NPCs.LOCAL_GNOME_484, IntType.NPC, "talk-to"){ player, npc -> openDialogue(player, LocalGnomeDialogue(), npc) return@on true } - on(ballista, SCENERY, "fire"){ player, _ -> + on(ballista, IntType.SCENERY, "fire"){ player, _ -> openDialogue(player, BallistaDialogue()) return@on true } - on(looseRailing, SCENERY, "squeeze-through"){ player, _ -> + on(looseRailing, IntType.SCENERY, "squeeze-through"){ player, _ -> if(player.location != location(2516,3161,0)) { squeezeThrough(player) } else { @@ -104,31 +105,31 @@ class TreeGnomeVillageListeners : InteractionListener { } return@on true } - on(crumbledWall, SCENERY, "climb-over"){ player, _ -> + on(crumbledWall, IntType.SCENERY, "climb-over"){ player, _ -> openDialogue(player, ClimbWall()) return@on true } - on(closedChest, SCENERY, "open"){ player, node -> + on(closedChest, IntType.SCENERY, "open"){ player, node -> SceneryBuilder.replace(node.asScenery(), Scenery(openedChest, node.location, node.asScenery().rotation),10) val upperGuard: NPC = RegionManager.getNpc(player.location, NPCs.KHAZARD_COMMANDER_478, 6) ?: return@on true upperGuard.sendChat("Oi. You! Get out of there.") upperGuard.attack(player) return@on true } - on(openedChest, SCENERY, "search"){ player, _ -> + on(openedChest, IntType.SCENERY, "search"){ player, _ -> if(!inInventory(player,Items.ORB_OF_PROTECTION_587)){ sendDialogue(player,"You search the chest. Inside you find the gnomes' stolen orb of protection.") addItemOrDrop(player,Items.ORB_OF_PROTECTION_587) } return@on true } - on(strongholdDoor, SCENERY, "open"){ player, node -> + on(strongholdDoor, IntType.SCENERY, "open"){ player, node -> if(player.location.y >= 3251){ DoorActionHandler.handleAutowalkDoor(player, node as Scenery) } return@on true } - on(NPCs.LIEUTENANT_SCHEPBUR_3817, NPC, "talk-to"){player, node -> + on(NPCs.LIEUTENANT_SCHEPBUR_3817, IntType.NPC, "talk-to"){player, node -> openDialogue(player, LieutenantSchepburDialogue(),node) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/tribaltotem/TribalTotemListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/tribaltotem/TribalTotemListeners.kt index cf5325ae6..cfe85a410 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/tribaltotem/TribalTotemListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/tribaltotem/TribalTotemListeners.kt @@ -9,6 +9,7 @@ import core.game.world.map.Location import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class TribalTotemListeners : InteractionListener{ @@ -22,7 +23,7 @@ class TribalTotemListeners : InteractionListener{ val openChest = 2710 override fun defineListeners() { - on(frontDoor, SCENERY,"Open"){ player, door -> + on(frontDoor, IntType.SCENERY, "Open"){ player, door -> if(player.questRepository.getStage("Tribal Totem") >= 35){ DoorActionHandler.handleAutowalkDoor(player,door.asScenery()) } @@ -30,7 +31,7 @@ class TribalTotemListeners : InteractionListener{ return@on true } - on(realCrate, SCENERY,"Investigate"){ player, node -> + on(realCrate, IntType.SCENERY, "Investigate"){ player, node -> if(player.questRepository.getStage("Tribal Totem") in 1..19 && !player.inventory.containsAtLeastOneItem(Items.ADDRESS_LABEL_1858)){ sendDialogue(player,"There is a label on this crate. It says; To Lord Handelmort, Handelmort Mansion Ardogune.You carefully peel it off and take it.") addItem(player,Items.ADDRESS_LABEL_1858,1) @@ -41,19 +42,19 @@ class TribalTotemListeners : InteractionListener{ return@on true } - on(wizCrate, SCENERY,"Investigate"){ player, node -> + on(wizCrate, IntType.SCENERY, "Investigate"){ player, node -> sendDialogue(player,"There is a label on this crate: Senior Patents Clerk, Chamber of Invention, The Wizards' Tower, Misthalin. The crate is securely fastened shut and ready for delivery.") return@on true } - onUseWith(SCENERY,label,wizCrate){ player, used, with -> + onUseWith(IntType.SCENERY,label,wizCrate){ player, used, with -> sendDialogue(player,"You carefully place the delivery address label over the existing label, covering it completely.") removeItem(player,label) player.questRepository.getQuest("Tribal Totem").setStage(player,20) return@onUseWith true } - on(lockedDoor, SCENERY,"Open"){ player, node -> + on(lockedDoor, IntType.SCENERY, "Open"){ player, node -> if(player.getAttribute("TT:DoorUnlocked",false) == true){ DoorActionHandler.handleAutowalkDoor(player,node.asScenery()) }else{ @@ -62,7 +63,7 @@ class TribalTotemListeners : InteractionListener{ return@on true } - on(stairs,SCENERY,"Climb-up"){ player, node -> + on(stairs, IntType.SCENERY, "Climb-up"){ player, node -> if(player.getAttribute("TT:StairsChecked",false)){ ClimbActionHandler.climb(player, Animation(828), Location.create(2629, 3324, 1)) } @@ -73,7 +74,7 @@ class TribalTotemListeners : InteractionListener{ return@on true } - on(stairs, SCENERY,"Investigate"){ player, node -> + on(stairs, IntType.SCENERY, "Investigate"){ player, node -> if(player.getSkills().getStaticLevel(Skills.THIEVING) >= 21){ sendDialogue(player,"Your trained senses as a thief enable you to see that there is a trap in these stairs. You make a note of its location for future reference when using these stairs") player.setAttribute("/save:TT:StairsChecked",true) @@ -83,17 +84,17 @@ class TribalTotemListeners : InteractionListener{ return@on true } - on(closedChest, SCENERY,"Open"){ player, node -> + on(closedChest, IntType.SCENERY, "Open"){ player, node -> SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(2710)) return@on true } - on(openChest,SCENERY,"Close"){ player, node -> + on(openChest, IntType.SCENERY, "Close"){ player, node -> SceneryBuilder.replace(node.asScenery(), node.asScenery().transform(2709)) return@on true } - on(openChest, SCENERY,"Search"){ player, node -> + on(openChest, IntType.SCENERY, "Search"){ player, node -> if(!player.inventory.containsAtLeastOneItem(Items.TOTEM_1857)){ sendDialogue(player,"Inside the chest you find the tribal totem.") addItem(player,Items.TOTEM_1857) diff --git a/Server/src/main/kotlin/rs09/game/content/quest/members/waterfall/WaterfallListeners.kt b/Server/src/main/kotlin/rs09/game/content/quest/members/waterfall/WaterfallListeners.kt index 9b7ea6c19..05eed9761 100644 --- a/Server/src/main/kotlin/rs09/game/content/quest/members/waterfall/WaterfallListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/quest/members/waterfall/WaterfallListeners.kt @@ -3,19 +3,20 @@ package rs09.game.content.quest.members.waterfall import core.game.world.map.Location import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class WaterfallListeners : InteractionListener{ val HUDON = NPCs.HUDON_305 override fun defineListeners() { - on(HUDON,NPC,"talk-to"){player, node -> + on(HUDON, IntType.NPC, "talk-to"){player, node -> player.dialogueInterpreter.open(HUDON,node.asNpc()) return@on true } } override fun defineDestinationOverrides() { - setDest(NPC,HUDON){_,_ -> + setDest(IntType.NPC,HUDON){_,_ -> return@setDest Location.create(2512, 3481, 0) } } diff --git a/Server/src/main/kotlin/rs09/game/content/tutorial/TutorialListeners.kt b/Server/src/main/kotlin/rs09/game/content/tutorial/TutorialListeners.kt index c8030de35..525628a32 100644 --- a/Server/src/main/kotlin/rs09/game/content/tutorial/TutorialListeners.kt +++ b/Server/src/main/kotlin/rs09/game/content/tutorial/TutorialListeners.kt @@ -9,6 +9,7 @@ import core.game.system.task.Pulse import core.game.world.map.Location import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.repository.Repository /** @@ -31,7 +32,7 @@ class TutorialListeners : InteractionListener { val RAT_GATES = intArrayOf(3022, 3023) override fun defineListeners() { - on(GUIDE_HOUSE_DOOR, SCENERY, "open"){player, door -> + on(GUIDE_HOUSE_DOOR, IntType.SCENERY, "open"){player, door -> if(getAttribute(player, "tutorial:stage", 0) != 3) return@on true @@ -42,7 +43,7 @@ class TutorialListeners : InteractionListener { return@on true } - on(FIRST_GATE, SCENERY, "open"){player, gate -> + on(FIRST_GATE, IntType.SCENERY, "open"){player, gate -> if(getAttribute(player, "tutorial:stage", 0) != 16) return@on true @@ -52,7 +53,7 @@ class TutorialListeners : InteractionListener { return@on true } - on(COOKS_DOOR, SCENERY, "open"){player, door -> + on(COOKS_DOOR, IntType.SCENERY, "open"){player, door -> if(getAttribute(player, "tutorial:stage", 0) != 17) return@on true @@ -62,7 +63,7 @@ class TutorialListeners : InteractionListener { return@on true } - on(COOKS_EXIT, SCENERY, "open"){player, door -> + on(COOKS_EXIT, IntType.SCENERY, "open"){player, door -> if(getAttribute(player, "tutorial:stage", 0) != 22) return@on true @@ -72,7 +73,7 @@ class TutorialListeners : InteractionListener { return@on true } - on(QUEST_ENTER, SCENERY, "open") {player, door -> + on(QUEST_ENTER, IntType.SCENERY, "open") {player, door -> if(getAttribute(player, "tutorial:stage", 0) != 26) return@on true @@ -82,7 +83,7 @@ class TutorialListeners : InteractionListener { return@on true } - on(QUEST_LADDER, SCENERY, "climb-down") {player, ladder -> + on(QUEST_LADDER, IntType.SCENERY, "climb-down") {player, ladder -> if(getAttribute(player, "tutorial:stage", 0) < 29) return@on true @@ -93,7 +94,7 @@ class TutorialListeners : InteractionListener { ClimbActionHandler.climbLadder(player, ladder.asScenery(), "climb-down") } - on(QUEST_EXIT_LADDER, SCENERY, "climb-up") { player, ladder -> + on(QUEST_EXIT_LADDER, IntType.SCENERY, "climb-up") { player, ladder -> ClimbActionHandler.climbLadder(player, ladder.asScenery(), "climb-up") submitWorldPulse(object : Pulse(2) { @@ -107,7 +108,7 @@ class TutorialListeners : InteractionListener { return@on true } - on(COMBAT_GATES, SCENERY, "open"){player, gate -> + on(COMBAT_GATES, IntType.SCENERY, "open"){player, gate -> if(getAttribute(player, "tutorial:stage", 0) != 43) return@on true @@ -116,7 +117,7 @@ class TutorialListeners : InteractionListener { DoorActionHandler.handleAutowalkDoor(player, gate as Scenery) } - on(RAT_GATES, SCENERY, "open") {player, gate -> + on(RAT_GATES, IntType.SCENERY, "open") {player, gate -> val stage = getAttribute(player, "tutorial:stage", 0) if(stage !in 50..53){ player.dialogueInterpreter.sendDialogues(NPCs.COMBAT_INSTRUCTOR_944, FacialExpression.ANGRY, "Oi, get away from there!","Don't enter my rat pen unless I say so!") @@ -131,7 +132,7 @@ class TutorialListeners : InteractionListener { return@on true } - on(COMBAT_EXIT, SCENERY, "climb-up") {player, ladder -> + on(COMBAT_EXIT, IntType.SCENERY, "climb-up") {player, ladder -> if(getAttribute(player, "tutorial:stage", 0) != 55) return@on true @@ -140,7 +141,7 @@ class TutorialListeners : InteractionListener { ClimbActionHandler.climbLadder(player, ladder.asScenery(), "climb-up") } - on(BANK_EXIT, SCENERY, "open") {player, door -> + on(BANK_EXIT, IntType.SCENERY, "open") {player, door -> if(getAttribute(player, "tutorial:stage", 0) != 57) return@on true @@ -149,7 +150,7 @@ class TutorialListeners : InteractionListener { DoorActionHandler.handleAutowalkDoor(player, door as Scenery) } - on(FINANCE_EXIT, SCENERY, "open") {player,door -> + on(FINANCE_EXIT, IntType.SCENERY, "open") {player,door -> if(getAttribute(player, "tutorial:stage", 0) != 59) return@on true @@ -158,7 +159,7 @@ class TutorialListeners : InteractionListener { DoorActionHandler.handleAutowalkDoor(player, door as Scenery) } - on(CHURCH_EXIT, SCENERY, "open") {player, door -> + on(CHURCH_EXIT, IntType.SCENERY, "open") {player, door -> if(getAttribute(player, "tutorial:stage", 0) != 66) return@on true diff --git a/Server/src/main/kotlin/rs09/game/content/zone/YanilleAgilityDungeon.kt b/Server/src/main/kotlin/rs09/game/content/zone/YanilleAgilityDungeon.kt index 2a6d955ca..47ad28c22 100644 --- a/Server/src/main/kotlin/rs09/game/content/zone/YanilleAgilityDungeon.kt +++ b/Server/src/main/kotlin/rs09/game/content/zone/YanilleAgilityDungeon.kt @@ -3,6 +3,7 @@ package rs09.game.content.zone import api.* import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import core.game.content.global.action.ClimbActionHandler import core.game.node.entity.skill.Skills import core.game.node.entity.skill.agility.AgilityHandler @@ -38,19 +39,19 @@ public class YanilleAgilityDungeonListeners : InteractionListener { override fun defineListeners() { ZoneBuilder.configure(YanilleAgilityDungeon()); - on(1728, SCENERY, "climb-down") { player, _ -> + on(1728, IntType.SCENERY, "climb-down") { player, _ -> player.teleport(Location(2620, 9565, 0)) return@on true } - on(1729, SCENERY, "climb-up") { player, _ -> + on(1729, IntType.SCENERY, "climb-up") { player, _ -> player.teleport(Location(2620, 9496, 0)) return@on true } - on(2316, SCENERY, "climb-up") { player, _ -> + on(2316, IntType.SCENERY, "climb-up") { player, _ -> player.teleport(Location.create(2569, 9525, 0)) return@on true } - on(intArrayOf(2318, 2317), SCENERY, "climb-up", "climb-down") { player, target -> + on(intArrayOf(2318, 2317), IntType.SCENERY, "climb-up", "climb-down") { player, target -> if (player.skills.getLevel(Skills.AGILITY) < 67) { player.dialogueInterpreter.sendDialogue("You need an Agility level of at least 67 in order to do this.") return@on true @@ -61,11 +62,11 @@ public class YanilleAgilityDungeonListeners : InteractionListener { player.skills.addExperience(Skills.AGILITY, 5.5, true) return@on true } - on(intArrayOf(35969, 2303), SCENERY, "walk-across") { player, target -> + on(intArrayOf(35969, 2303), IntType.SCENERY, "walk-across") { player, target -> handleBalancingLedge(player, target.asScenery()) return@on true } - on(377, SCENERY, "open") { player, target -> + on(377, IntType.SCENERY, "open") { player, target -> if (!player.inventory.contains(Items.SINISTER_KEY_993, 1)) { player.sendMessage("The chest is locked.") } else { @@ -85,11 +86,11 @@ public class YanilleAgilityDungeonListeners : InteractionListener { } return@on true } - on(378, SCENERY, "search") { player, _ -> + on(378, IntType.SCENERY, "search") { player, _ -> player.sendMessage("The chest is empty.") return@on true } - on(378, SCENERY, "shut") { player, _ -> + on(378, IntType.SCENERY, "shut") { player, _ -> return@on true } diff --git a/Server/src/main/kotlin/rs09/game/content/zone/keldagrim/OrdanDialogue.kt b/Server/src/main/kotlin/rs09/game/content/zone/keldagrim/OrdanDialogue.kt index b13af8880..fc8abea7a 100644 --- a/Server/src/main/kotlin/rs09/game/content/zone/keldagrim/OrdanDialogue.kt +++ b/Server/src/main/kotlin/rs09/game/content/zone/keldagrim/OrdanDialogue.kt @@ -9,6 +9,7 @@ import core.game.node.item.Item import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE /**It's just some simple Ordan dialogue @@ -74,7 +75,7 @@ class OrdanDialogue(player: Player? = null) : DialoguePlugin(player) { Items.RUNITE_ORE_452 to 1000 ) override fun defineListeners() { - onUseWith(NPC, NPCs.ORDAN_2564,*notedOre){ player, _, noteType -> + onUseWith(IntType.NPC, NPCs.ORDAN_2564,*notedOre){ player, _, noteType -> val noteAmount = amountInInventory(player, noteType.id) val noteName = noteType.name var unNoteAmount = 0 diff --git a/Server/src/main/kotlin/rs09/game/content/zone/phasmatys/bonegrinder/BoneGrinderListener.kt b/Server/src/main/kotlin/rs09/game/content/zone/phasmatys/bonegrinder/BoneGrinderListener.kt index f4e923838..a2c8d58a9 100644 --- a/Server/src/main/kotlin/rs09/game/content/zone/phasmatys/bonegrinder/BoneGrinderListener.kt +++ b/Server/src/main/kotlin/rs09/game/content/zone/phasmatys/bonegrinder/BoneGrinderListener.kt @@ -11,6 +11,7 @@ import core.game.world.map.Location import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld.Pulser private const val LOADER = 11162 @@ -34,35 +35,35 @@ class BoneGrinderListener : InteractionListener { /** * Handle the bone loader/hopper fill option */ - on(LOADER,SCENERY,"fill"){ player, _ -> + on(LOADER, IntType.SCENERY, "fill"){ player, _ -> handleFill(player) } /** * Handle the wheel's wind option */ - on(BONE_GRINDER,SCENERY,"wind"){ player, _ -> + on(BONE_GRINDER, IntType.SCENERY, "wind"){ player, _ -> handleWind(player) } /** * Handle the wheel's status option */ - on(BONE_GRINDER,SCENERY,"status"){ player, _ -> + on(BONE_GRINDER, IntType.SCENERY, "status"){ player, _ -> handleStatus(player) } /** * Handle the bin's empty option */ - on(BIN,SCENERY,"empty"){ player, _ -> + on(BIN, IntType.SCENERY, "empty"){ player, _ -> handleEmpty(player) } /** * Handle Bone -> Hopper */ - onUseWith(SCENERY,LOADER,*boneIDs){ player, _, _ -> + onUseWith(IntType.SCENERY,LOADER,*boneIDs){ player, _, _ -> handleFill(player) return@onUseWith true } diff --git a/Server/src/main/kotlin/rs09/game/content/zone/wilderness/RevenantController.kt b/Server/src/main/kotlin/rs09/game/content/zone/wilderness/RevenantController.kt index b6dfc93ef..2628b612f 100644 --- a/Server/src/main/kotlin/rs09/game/content/zone/wilderness/RevenantController.kt +++ b/Server/src/main/kotlin/rs09/game/content/zone/wilderness/RevenantController.kt @@ -99,10 +99,10 @@ class RevenantController : TickListener, Commands { define("listrevs", Privilege.ADMIN) {player, strings -> for (rev in trackedRevenants) { - SystemLogger.logInfo("REV ${rev.id}-${rev.name} @ ${rev.location.toString()}") + SystemLogger.logInfo(this::class.java, "REV ${rev.id}-${rev.name} @ ${rev.location.toString()}") } - SystemLogger.logInfo("Total of ${trackedRevenants.size} revenants spawned.") + SystemLogger.logInfo(this::class.java, "Total of ${trackedRevenants.size} revenants spawned.") } define("clearrevs", Privilege.ADMIN) {_, _ -> diff --git a/Server/src/main/kotlin/rs09/game/ge/GrandExchange.kt b/Server/src/main/kotlin/rs09/game/ge/GrandExchange.kt index ecb13e080..39d21b3d9 100644 --- a/Server/src/main/kotlin/rs09/game/ge/GrandExchange.kt +++ b/Server/src/main/kotlin/rs09/game/ge/GrandExchange.kt @@ -225,7 +225,7 @@ class GrandExchange : StartupListener, Commands { if ( offer.offerState != OfferState.PENDING || offer.uid != 0L ) { - SystemLogger.logWarn("[GE] DISPATCH FAILURE: ${offer.offerState.name}, UID: ${offer.uid}") + SystemLogger.logWarn(this::class.java, "[GE] DISPATCH FAILURE: ${offer.offerState.name}, UID: ${offer.uid}") return false } diff --git a/Server/src/main/kotlin/rs09/game/interaction/FOGRewardsInterface.kt b/Server/src/main/kotlin/rs09/game/interaction/FOGRewardsInterface.kt index e4644f06e..450d080c4 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/FOGRewardsInterface.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/FOGRewardsInterface.kt @@ -52,7 +52,7 @@ class FOGRewardsInterface : ComponentPlugin(){ 176 -> choice = Air_Gloves 181 -> choice = Water_Gloves 186 -> choice = Earth_Gloves - else -> SystemLogger.logWarn("Unhandled button ID for FOG interface: $button").also { return true } + else -> SystemLogger.logWarn(this::class.java, "Unhandled button ID for FOG interface: $button").also { return true } } handleOpcode(choice,opcode,player!!) return true diff --git a/Server/src/main/kotlin/rs09/game/interaction/IntType.kt b/Server/src/main/kotlin/rs09/game/interaction/IntType.kt new file mode 100644 index 000000000..dc8ac61e1 --- /dev/null +++ b/Server/src/main/kotlin/rs09/game/interaction/IntType.kt @@ -0,0 +1,9 @@ +package rs09.game.interaction + +enum class IntType { + ITEM, + SCENERY, + NPC, + GROUNDITEM, + PLAYER +} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/InteractionListener.kt b/Server/src/main/kotlin/rs09/game/interaction/InteractionListener.kt index 345979d1c..ba1abac50 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/InteractionListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/InteractionListener.kt @@ -8,45 +8,34 @@ import core.game.world.map.Location import rs09.game.system.SystemLogger interface InteractionListener : ContentInterface{ - val ITEM: Int - get() = 0 - val SCENERY: Int - get() = 1 - val NPC: Int - get() = 2 - val GROUNDITEM: Int - get() = 3 - val PLAYER: Int - get() = 4 - - fun on(id: Int, type: Int, vararg option: String, handler: (player: Player, node: Node) -> Boolean){ - InteractionListeners.add(id,type,option,handler) + fun on(id: Int, type: IntType, vararg option: String, handler: (player: Player, node: Node) -> Boolean){ + InteractionListeners.add(id,type.ordinal,option,handler) } - fun on(ids: IntArray, type: Int, vararg option: String, handler: (player: Player, node: Node) -> Boolean){ - InteractionListeners.add(ids,type,option,handler) + fun on(ids: IntArray, type: IntType, vararg option: String, handler: (player: Player, node: Node) -> Boolean){ + InteractionListeners.add(ids,type.ordinal,option,handler) } - fun on(option: String, type: Int, handler: (player: Player, node: Node) -> Boolean){ - InteractionListeners.add(option,type,handler) + fun on(option: String, type: IntType, handler: (player: Player, node: Node) -> Boolean){ + InteractionListeners.add(option,type.ordinal,handler) } - fun on(type: Int, vararg option: String, handler: (player: Player, node: Node) -> Boolean){ - InteractionListeners.add(option,type,handler) + fun on(type: IntType, vararg option: String, handler: (player: Player, node: Node) -> Boolean){ + InteractionListeners.add(option,type.ordinal,handler) } - fun onUseWith(type: Int, used: Int, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean){ - InteractionListeners.add(type,used,with,handler) + fun onUseWith(type: IntType, used: Int, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean){ + InteractionListeners.add(type.ordinal,used,with,handler) } - fun onUseWith(type: Int, used: IntArray, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean){ - InteractionListeners.add(type,used,with,handler) + fun onUseWith(type: IntType, used: IntArray, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean){ + InteractionListeners.add(type.ordinal,used,with,handler) } - fun onUseAnyWith(type: Int, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean) { - InteractionListeners.add(type, with, handler) + fun onUseAnyWith(type: IntType, vararg with: Int, handler: (player: Player, used: Node, with: Node) -> Boolean) { + InteractionListeners.add(type.ordinal, with, handler) } fun onUseWithPlayer(vararg used: Int, handler: (player: Player, used: Node, with: Node) -> Boolean) { InteractionListeners.add(PLAYER, used, handler) } // Note: wildcard listeners incur overhead on every use-with interaction, only use them as a space-time tradeoff when something // is actually supposed to have a response to every item used with it (e.g. imp boxes, certain quest npcs) - fun onUseWithWildcard(type: Int, predicate: (used: Int, with: Int) -> Boolean, handler: (player: Player, used: Node, with: Node) -> Boolean) { - InteractionListeners.addWildcard(type, predicate, handler) + fun onUseWithWildcard(type: IntType, predicate: (used: Int, with: Int) -> Boolean, handler: (player: Player, used: Node, with: Node) -> Boolean) { + InteractionListeners.addWildcard(type.ordinal, predicate, handler) } fun onEquip(id: Int, handler: (player: Player, node: Node) -> Boolean){ InteractionListeners.addEquip(id,handler) @@ -64,15 +53,15 @@ interface InteractionListener : ContentInterface{ fun defineDestinationOverrides(){} - fun setDest(type: Int, id: Int,handler: (Entity, Node) -> Location){ - InteractionListeners.addDestOverride(type,id,handler) + fun setDest(type: IntType, id: Int,handler: (Entity, Node) -> Location){ + InteractionListeners.addDestOverride(type.ordinal,id,handler) } - fun setDest(type:Int, vararg options: String, handler: (Entity, Node) -> Location){ - InteractionListeners.addDestOverrides(type,options,handler) + fun setDest(type: IntType, vararg options: String, handler: (Entity, Node) -> Location){ + InteractionListeners.addDestOverrides(type.ordinal,options,handler) } - fun setDest(type: Int, ids: IntArray, vararg options: String, handler: (Entity, Node) -> Location){ - InteractionListeners.addDestOverrides(type,ids,options,handler) + fun setDest(type: IntType, ids: IntArray, vararg options: String, handler: (Entity, Node) -> Location){ + InteractionListeners.addDestOverrides(type.ordinal,ids,options,handler) } fun onDig(location: Location,method: (player: Player) -> Unit){ diff --git a/Server/src/main/kotlin/rs09/game/interaction/InteractionListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/InteractionListeners.kt index e9a332e42..41304bf10 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/InteractionListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/InteractionListeners.kt @@ -23,10 +23,17 @@ object InteractionListeners { fun add(id: Int, type: Int, option: Array, method: (Player,Node) -> Boolean){ for(opt in option) { val key = "$id:$type:${opt.toLowerCase()}" + if (!validate(key)) { + throw IllegalStateException("$opt for $id with type ${IntType.values()[type].name} already defined! Existing use: [${listeners[key]!!::class.toString()}]") + } listeners[key] = method } } + private fun validate(key: String): Boolean { + return !listeners.containsKey(key) && !useWithListeners.containsKey(key) + } + @JvmStatic fun add(ids: IntArray, type: Int, option: Array, method: (Player,Node) -> Boolean){ for(id in ids){ @@ -37,6 +44,9 @@ object InteractionListeners { @JvmStatic fun add(option: String,type: Int, method: (Player,Node) -> Boolean){ val key = "$type:${option.toLowerCase()}" + if (!validate(key)) { + throw IllegalStateException("Catchall listener for $option on type ${IntType.values()[type].name} already in use: ${listeners[key]!!::class}") + } listeners[key] = method } @@ -49,13 +59,18 @@ object InteractionListeners { @JvmStatic fun add(used: Int, with: Int, type: Int, method: (Player,Node,Node) -> Boolean){ - useWithListeners["$used:$with:$type"] = method + val key = "$used:$with:$type" + val altKey = "$with:$used:$type" + if (!validate(key) || !validate(altKey)) { + throw IllegalStateException("Usewith using $used with $with for type ${IntType.values()[type]} already in use: [${(useWithListeners[key] ?: useWithListeners[altKey])!!::class}") + } + useWithListeners[key] = method } @JvmStatic fun add(type: Int, used: Int, with: IntArray, method: (Player, Node, Node) -> Boolean){ for(id in with){ - useWithListeners["$used:$id:$type"] = method + add(used = used, with = id, type = type, method = method) } } @@ -159,11 +174,10 @@ object InteractionListeners { } @JvmStatic - fun run(used: Node, with: Node, type: Int,player: Player): Boolean{ - player.debug("InteractionListeners.run(${used.id}, ${with.id}, ${type}, _)") + fun run(used: Node, with: Node, type: IntType, player: Player): Boolean{ val flag = when(type){ - 2, 4 -> DestinationFlag.ENTITY - 1 -> DestinationFlag.OBJECT + IntType.NPC, IntType.PLAYER -> DestinationFlag.ENTITY + IntType.SCENERY -> DestinationFlag.OBJECT else -> DestinationFlag.OBJECT } @@ -172,19 +186,19 @@ object InteractionListeners { var flipped = false val method = if (with is Player) get(-1, used.id, 4) ?: return false - else get(used.id,with.id,type) ?: - if (type == InteractionListener.ITEM) - get(with.id,used.id,type).also { flipped = true } ?: return false + else get(used.id,with.id,type.ordinal) ?: + if (type == IntType.ITEM) + get(with.id,used.id,type.ordinal).also { flipped = true } ?: return false else return false val destOverride = if(flipped) { - getOverride(type, used.id, "use") ?: getOverride(type, with.id) ?: getOverride(type, "use") + getOverride(type.ordinal, used.id, "use") ?: getOverride(type.ordinal, with.id) ?: getOverride(type.ordinal, "use") } else { - getOverride(type, with.id, "use") ?: getOverride(type, used.id) ?: getOverride(type, "use") + getOverride(type.ordinal, with.id, "use") ?: getOverride(type.ordinal, used.id) ?: getOverride(type.ordinal, "use") } - if(type != 0 && !isUseWithInstant(method)) { + if(type != IntType.ITEM && !isUseWithInstant(method)) { if(player.locks.isMovementLocked) return false player.pulseManager.run(object : MovementPulse(player, with, flag, destOverride) { override fun pulse(): Boolean { @@ -209,19 +223,19 @@ object InteractionListeners { } @JvmStatic - fun run(id: Int, type: Int, option: String, player: Player, node: Node): Boolean{ + fun run(id: Int, type: IntType, option: String, player: Player, node: Node): Boolean{ val flag = when(type){ - 4 -> DestinationFlag.ENTITY - 3 -> DestinationFlag.ITEM - 2 -> DestinationFlag.ENTITY - 1 -> null + IntType.PLAYER -> DestinationFlag.ENTITY + IntType.GROUNDITEM -> DestinationFlag.ITEM + IntType.NPC -> DestinationFlag.ENTITY + IntType.ITEM -> null else -> DestinationFlag.OBJECT } if(player.locks.isInteractionLocked) return false - val method = get(id,type,option) ?: get(option,type) ?: return false - val destOverride = getOverride(type, id, option) ?: getOverride(type,node.id) ?: getOverride(type,option.toLowerCase()) + val method = get(id,type.ordinal,option) ?: get(option,type.ordinal) ?: return false + val destOverride = getOverride(type.ordinal, id, option) ?: getOverride(type.ordinal,node.id) ?: getOverride(type.ordinal,option.toLowerCase()) player.setAttribute("interact:option", option) @@ -232,7 +246,7 @@ object InteractionListeners { return true } - if(type != 0 && !isInstant(method)) { + if(type != IntType.ITEM && !isInstant(method)) { if(player.locks.isMovementLocked) return false player.pulseManager.run(object : MovementPulse(player, node, flag, destOverride) { override fun pulse(): Boolean { diff --git a/Server/src/main/kotlin/rs09/game/interaction/inter/ExperienceInterface.kt b/Server/src/main/kotlin/rs09/game/interaction/inter/ExperienceInterface.kt index b8e4e1215..17544b257 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/inter/ExperienceInterface.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/inter/ExperienceInterface.kt @@ -70,7 +70,7 @@ class ExperienceInterface() : ComponentPlugin() { 46 -> Skills.WOODCUTTING 40 -> Skills.FLETCHING 51 -> Skills.CONSTRUCTION - else -> Skills.SLAYER.also { SystemLogger.logWarn("EXP_INTERFACE: Invalid SKILL CHOICE BUTTON: $button") } + else -> Skills.SLAYER.also { SystemLogger.logWarn(this::class.java, "EXP_INTERFACE: Invalid SKILL CHOICE BUTTON: $button") } } player.setAttribute("exp_interface:skill",skill) } diff --git a/Server/src/main/kotlin/rs09/game/interaction/inter/ge/StockMarket.kt b/Server/src/main/kotlin/rs09/game/interaction/inter/ge/StockMarket.kt index 613478598..b3e71a9a8 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/inter/ge/StockMarket.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/inter/ge/StockMarket.kt @@ -2,7 +2,6 @@ package rs09.game.interaction.inter.ge import api.* import core.game.component.Component -import core.game.container.access.BitregisterAssembler import core.game.ge.OfferState import core.game.node.entity.player.Player import core.game.node.entity.player.link.audio.Audio @@ -125,7 +124,8 @@ class StockMarket : InterfaceListener { 149, "IviiiIsssss", "", "", "", "Examine", "Offer", -1, 0, 7, 4, 93, 7012370 ) - BitregisterAssembler.send(player, 107, 18, 0, 27, BitregisterAssembler(0, 1)) + val settings = IfaceSettingsBuilder().enableOptions(0, 1).build() + player.packetDispatch.sendIfaceSettings(settings, 18, 107, 0, 27) } 157 -> updateOfferAmount(player, tempOffer, tempOffer.amount - 1) 159 -> updateOfferAmount(player, tempOffer, tempOffer.amount + 1) @@ -199,7 +199,7 @@ class StockMarket : InterfaceListener { { if(offer == null) { - SystemLogger.logWarn("Opened offer was null and was attempted to be aborted!") + SystemLogger.logWarn(this::class.java, "Opened offer was null and was attempted to be aborted!") return } sendMessage(player, "Abort request acknowledged. Please be aware that your offer may") @@ -207,7 +207,7 @@ class StockMarket : InterfaceListener { if(!offer.isActive) { - SystemLogger.logWarn("Offer ${offer.uid}[${offer.index}]: ${if(offer.sell) "s" else "b"} ${offer.itemID}x ${offer.amount} was NO LONGER active when abort attempted") + SystemLogger.logWarn(this::class.java, "Offer ${offer.uid}[${offer.index}]: ${if(offer.sell) "s" else "b"} ${offer.itemID}x ${offer.amount} was NO LONGER active when abort attempted") return } offer.offerState = OfferState.ABORTED @@ -341,7 +341,7 @@ class StockMarket : InterfaceListener { val item = offer.withdraw[index] if(item == null) { - SystemLogger.logWarn("Offer withdraw[$index] is null!") + SystemLogger.logWarn(this::class.java, "Offer withdraw[$index] is null!") return } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/BraceletOfClayPlugin.kt b/Server/src/main/kotlin/rs09/game/interaction/item/BraceletOfClayPlugin.kt index a6024728e..1d445752b 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/BraceletOfClayPlugin.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/BraceletOfClayPlugin.kt @@ -3,6 +3,7 @@ package rs09.game.interaction.item import api.* import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles the bracelet of clay operate option. @@ -12,7 +13,7 @@ class BraceletOfClayPlugin : InteractionListener { override fun defineListeners() { - on(Items.BRACELET_OF_CLAY_11074, ITEM, "operate"){ player, node -> + on(Items.BRACELET_OF_CLAY_11074, IntType.ITEM, "operate"){ player, node -> var charge = getCharge(node) if (charge > 28) setCharge(node, 28).also { charge = 28 } sendMessage(player, "You have $charge uses left.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/CadavaPotionListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/CadavaPotionListener.kt index 38230812b..fafeccd97 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/CadavaPotionListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/CadavaPotionListener.kt @@ -3,6 +3,7 @@ package rs09.game.interaction.`object` import api.sendItemDialogue import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * @author bushtail @@ -13,11 +14,11 @@ class CadavaPotionListener : InteractionListener { var POTION = Items.CADAVA_POTION_756 override fun defineListeners() { - on(POTION, ITEM, "drink") { player, node -> + on(POTION, IntType.ITEM, "drink") { player, node -> sendItemDialogue(player, POTION, "You dare not drink.") return@on true } - on(POTION, ITEM, "look-at") { player, node -> + on(POTION, IntType.ITEM, "look-at") { player, node -> sendItemDialogue(player, POTION, "This looks very colourful.") return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/DrinkBlamishOilListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/DrinkBlamishOilListener.kt index 5b9df3f41..1a009bece 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/DrinkBlamishOilListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/DrinkBlamishOilListener.kt @@ -3,11 +3,12 @@ package rs09.game.interaction.item import api.* import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class DrinkBlamishOilListener : InteractionListener { override fun defineListeners() { - on(Items.BLAMISH_OIL_1582, ITEM, "drink"){player, _ -> + on(Items.BLAMISH_OIL_1582, IntType.ITEM, "drink"){player, _ -> sendPlayerDialogue(player, "You know... I'd really rather not.") return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/EnchantJewelleryTabOption.kt b/Server/src/main/kotlin/rs09/game/interaction/item/EnchantJewelleryTabOption.kt index b92bd0976..a4cfb3547 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/EnchantJewelleryTabOption.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/EnchantJewelleryTabOption.kt @@ -63,7 +63,7 @@ class EnchantJewelleryTabOption : OptionHandler(){ } if(items == null){ - SystemLogger.logWarn("UNHANDLED ENCHANT ITEM TABLET [ID: ${node?.id}") + SystemLogger.logWarn(this::class.java, "UNHANDLED ENCHANT ITEM TABLET [ID: ${node?.id}") return true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/EnchantedGemListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/EnchantedGemListener.kt index c399fd8ea..667dd6739 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/EnchantedGemListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/EnchantedGemListener.kt @@ -8,11 +8,12 @@ import rs09.game.content.dialogue.DialogueFile import rs09.game.content.dialogue.IfTopic import rs09.game.content.dialogue.Topic import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE class EnchantedGemListener : InteractionListener { override fun defineListeners() { - on(Items.ENCHANTED_GEM_4155, ITEM, "activate") { player, _ -> + on(Items.ENCHANTED_GEM_4155, IntType.ITEM, "activate") { player, _ -> openDialogue(player, EnchantedGemDialogue()) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/EnchantedJewelleryListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/EnchantedJewelleryListener.kt index 426710ef9..32480e8b7 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/EnchantedJewelleryListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/EnchantedJewelleryListener.kt @@ -9,6 +9,7 @@ import core.game.node.item.Item import rs09.game.content.dialogue.DialogueFile import rs09.game.content.global.EnchantedJewellery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.START_DIALOGUE /** @@ -20,11 +21,11 @@ class EnchantedJewelleryListener : InteractionListener { val ids = EnchantedJewellery.idMap.keys.toIntArray() override fun defineListeners() { - on(ids, ITEM, "operate") { player, node -> + on(ids, IntType.ITEM, "operate") { player, node -> handle(player, node, true) return@on true } - on(ids, ITEM, "rub") { player, node -> + on(ids, IntType.ITEM, "rub") { player, node -> handle(player, node, false) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/GodBookListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/item/GodBookListeners.kt index c030b9b0a..c02f92e45 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/GodBookListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/GodBookListeners.kt @@ -7,6 +7,7 @@ import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE class GodBookListeners : InteractionListener { @@ -16,17 +17,17 @@ class GodBookListeners : InteractionListener { val GB_GUTHIX = Items.BOOK_OF_BALANCE_3844 override fun defineListeners() { - on(GB_SARADOMIN, ITEM, "preach"){player, _ -> + on(GB_SARADOMIN, IntType.ITEM, "preach"){player, _ -> openDialogue(player, HOLY_DIALOGUE(BOOK.SARA)) return@on true } - on(GB_ZAMORAK, ITEM, "preach"){ player, _ -> + on(GB_ZAMORAK, IntType.ITEM, "preach"){ player, _ -> openDialogue(player, HOLY_DIALOGUE(BOOK.ZAM)) return@on true } - on(GB_GUTHIX, ITEM, "preach"){ player, _ -> + on(GB_GUTHIX, IntType.ITEM, "preach"){ player, _ -> openDialogue(player, HOLY_DIALOGUE(BOOK.GUTHIX)) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/GrandSeedPodHandler.kt b/Server/src/main/kotlin/rs09/game/interaction/item/GrandSeedPodHandler.kt index cf314a495..27025cf90 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/GrandSeedPodHandler.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/GrandSeedPodHandler.kt @@ -16,6 +16,7 @@ import core.plugin.Initializable import core.plugin.Plugin import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld import api.* @@ -33,7 +34,7 @@ private const val LAUNCH_ANIMATION = 4547 class GrandSeedPodHandler : InteractionListener { override fun defineListeners() { - on(Items.GRAND_SEED_POD_9469, ITEM, "squash", "launch"){player, _ -> + on(Items.GRAND_SEED_POD_9469, IntType.ITEM, "squash", "launch"){player, _ -> when(getUsedOption(player)){ "launch" -> submitWorldPulse(LaunchPulse(player)) "squash" -> submitWorldPulse(SquashPulse(player)) diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/ImplingJarListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/ImplingJarListener.kt index a9730319b..ac90cbab7 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/ImplingJarListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/ImplingJarListener.kt @@ -7,6 +7,7 @@ import org.rs09.consts.Items import rs09.game.content.global.WeightBasedTable import rs09.game.content.global.WeightedItem import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.SystemLogger class ImplingJarListener : InteractionListener { @@ -14,7 +15,7 @@ class ImplingJarListener : InteractionListener { val JARS = ImplingLoot.values().map { it.jarId }.toIntArray() override fun defineListeners() { - on(JARS, ITEM, "loot"){player, node -> + on(JARS, IntType.ITEM, "loot"){player, node -> val jar = node.asItem() val loot = ImplingLoot.forId(jar.id)?.roll()?.first() ?: return@on false diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/ItemQuestRequirementListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/ItemQuestRequirementListener.kt index d484e7aca..cd3ae2449 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/ItemQuestRequirementListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/ItemQuestRequirementListener.kt @@ -4,6 +4,7 @@ import api.* import core.game.node.entity.player.link.quest.QuestRepository import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class ItemQuestRequirementListener : InteractionListener { diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/MiningHelmetListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/MiningHelmetListener.kt index bc178eeef..5be644253 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/MiningHelmetListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/MiningHelmetListener.kt @@ -2,11 +2,12 @@ package rs09.game.interaction.item import api.* import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import org.rs09.consts.Items class MiningHelmetListener : InteractionListener { override fun defineListeners() { - on(Items.MINING_HELMET_5013, ITEM, "drop") {player, _ -> + on(Items.MINING_HELMET_5013, IntType.ITEM, "drop") {player, _ -> val removed = removeItem(player, Items.MINING_HELMET_5013) if (removed) produceGroundItem(player, Items.MINING_HELMET_5014) sendMessage(player, "The helmet goes out as you drop it.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/PetRock.kt b/Server/src/main/kotlin/rs09/game/interaction/item/PetRock.kt index 9409e26c4..021d7a6ca 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/PetRock.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/PetRock.kt @@ -5,11 +5,12 @@ import core.game.content.dialogue.FacialExpression import org.rs09.consts.Items import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE class PetRockPlugin : InteractionListener { override fun defineListeners() { - on(Items.PET_ROCK_3695, ITEM, "interact"){ player, _ -> + on(Items.PET_ROCK_3695, IntType.ITEM, "interact"){ player, _ -> openDialogue(player, PetRockDialogue()) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/StaffOfTheRaven.kt b/Server/src/main/kotlin/rs09/game/interaction/item/StaffOfTheRaven.kt index 1ffcc15a9..ac49b8fbd 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/StaffOfTheRaven.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/StaffOfTheRaven.kt @@ -6,6 +6,7 @@ import core.game.node.item.Item import core.game.world.update.flag.context.Graphics import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE /** @@ -14,7 +15,7 @@ import rs09.tools.END_DIALOGUE class StaffOfTheRaven : InteractionListener { val ids = intArrayOf(14654, 14655, 14656) override fun defineListeners() { - on(ids, ITEM, "recolor", "operate"){player, node -> + on(ids, IntType.ITEM, "recolor", "operate"){player, node -> val hasUnlocked = player.getAttribute("sotr:purchased",false) val hasRecolorA = player.getAttribute("sotr:recolor1", false) val hasRecolorB = player.getAttribute("sotr:recolor2", false) diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/ToyHorseyListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/ToyHorseyListener.kt index 97a677edc..c05c09652 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/ToyHorseyListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/ToyHorseyListener.kt @@ -6,6 +6,7 @@ import api.stopWalk import org.rs09.consts.Animations import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Interaction listener for the Toy Horsey item @@ -29,7 +30,7 @@ class ToyHorseListener : InteractionListener { ) override fun defineListeners() { - on(HORSEY_MAP.keys.toIntArray(), ITEM, "play-with") { player, node -> + on(HORSEY_MAP.keys.toIntArray(), IntType.ITEM, "play-with") { player, node -> // "high-priority" interaction, so movement is stopped stopWalk(player) animate(player, HORSEY_MAP.get(node.id)) diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/ToyListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/item/ToyListeners.kt index b77eb943f..ff450a8e6 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/ToyListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/ToyListeners.kt @@ -5,6 +5,7 @@ import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class ToyListeners : InteractionListener { companion object { @@ -30,13 +31,13 @@ class ToyListeners : InteractionListener { } override fun defineListeners() { - on(Items.CHOCATRICE_CAPE_12634, ITEM, "operate"){player, _ -> + on(Items.CHOCATRICE_CAPE_12634, IntType.ITEM, "operate"){player, _ -> lockInteractions(player, 2) visualize(player, 8903, 1566) return@on true } - on(MARIONETTES, ITEM, "jump", "walk", "bow", "dance") {player, marionette -> + on(MARIONETTES, IntType.ITEM, "jump", "walk", "bow", "dance") {player, marionette -> val index = MARIONETTES.indexOf(marionette.id) lockInteractions(player, 2) @@ -49,13 +50,13 @@ class ToyListeners : InteractionListener { return@on true } - on(Items.REINDEER_HAT_10507, ITEM, "operate"){player, _ -> + on(Items.REINDEER_HAT_10507, IntType.ITEM, "operate"){player, _ -> lockInteractions(player, 2) animate(player, 5059) return@on true } - on(Items.SNOW_GLOBE_11949, ITEM, "shake") {player, _ -> + on(Items.SNOW_GLOBE_11949, IntType.ITEM, "shake") {player, _ -> lockInteractions(player, 2) animate(player, SNOWGLOBE_SHAKE) runTask(player, 3) { @@ -67,7 +68,7 @@ class ToyListeners : InteractionListener { return@on true } - on(Items.YO_YO_4079, ITEM, "play", "loop", "walk", "crazy"){player, _ -> + on(Items.YO_YO_4079, IntType.ITEM, "play", "loop", "walk", "crazy"){player, _ -> val option = getUsedOption(player) lockInteractions(player, 2) @@ -80,7 +81,7 @@ class ToyListeners : InteractionListener { return@on true } - on(Items.ZOMBIE_HEAD_6722, ITEM, "talk-at", "display", "question"){player, _ -> + on(Items.ZOMBIE_HEAD_6722, IntType.ITEM, "talk-at", "display", "question"){player, _ -> val option = getUsedOption(player) lockInteractions(player, 2) diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/HaySackOnSpear.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/HaySackOnSpear.kt index 5c6f2fe48..e4c8771cf 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/HaySackOnSpear.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/HaySackOnSpear.kt @@ -4,13 +4,14 @@ import api.Container import api.* import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class HaySackOnSpear : InteractionListener { val HAYSACK = Items.HAY_SACK_6057 val SPEAR = Items.BRONZE_SPEAR_1237 override fun defineListeners() { - onUseWith(ITEM, HAYSACK, SPEAR){ player, used, _ -> + onUseWith(IntType.ITEM, HAYSACK, SPEAR){ player, used, _ -> if(removeItem(player, used.asItem(), Container.INVENTORY)){ addItem(player, Items.HAY_SACK_6058, 1) sendMessage(player, "You stab the hay sack with a bronze spear") diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/OilFishingRodListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/OilFishingRodListener.kt index 9054c7136..24992f8b2 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/OilFishingRodListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/OilFishingRodListener.kt @@ -5,10 +5,11 @@ import core.game.system.task.Pulse import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class OilFishingRodListener : InteractionListener { override fun defineListeners() { - onUseWith(ITEM, Items.BLAMISH_OIL_1582, Items.FISHING_ROD_307) {player, used, with -> + onUseWith(IntType.ITEM, Items.BLAMISH_OIL_1582, Items.FISHING_ROD_307) {player, used, with -> player.pulseManager.run(object : Pulse() { var counter = 0 override fun pulse(): Boolean { @@ -26,7 +27,7 @@ class OilFishingRodListener : InteractionListener { return@onUseWith true } - onUseWith(ITEM, Items.THIN_SNAIL_3363, Items.PESTLE_AND_MORTAR_233) {player, used, with -> + onUseWith(IntType.ITEM, Items.THIN_SNAIL_3363, Items.PESTLE_AND_MORTAR_233) {player, used, with -> if (player.inventory.contains(Items.SAMPLE_BOTTLE_3377, 1)) { player.pulseManager.run(object : Pulse() { var counter = 0 diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/PoisonedWeaponListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/PoisonedWeaponListeners.kt index 06fed9836..f1ed59e49 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/PoisonedWeaponListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/PoisonedWeaponListeners.kt @@ -4,6 +4,7 @@ import api.* import core.game.node.item.Item import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import kotlin.collections.toIntArray import kotlin.math.min @@ -13,7 +14,7 @@ class PoisonedWeaponListeners : InteractionListener { val poisonableItems = PoisonSets.itemMap.keys.toIntArray() val poisonedItems = PoisonSets.itemMap.values.toIntArray() - onUseWith(ITEM, poisons, *poisonableItems){player, used, with -> + onUseWith(IntType.ITEM, poisons, *poisonableItems){player, used, with -> val index = poisons.indexOf(used.id) val product = PoisonSets.itemMap[with.id]!![index] val amt = min(5, with.asItem().amount) @@ -27,7 +28,7 @@ class PoisonedWeaponListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM, Items.CLEANING_CLOTH_3188, *poisonedItems) {player, _, with -> + onUseWith(IntType.ITEM, Items.CLEANING_CLOTH_3188, *poisonedItems) {player, _, with -> val base = PoisonSets.getBase(with.id) ?: return@onUseWith false val amt = min(5, with.asItem().amount) removeItem(player, Item(with.id, amt)) @@ -42,7 +43,7 @@ class PoisonedWeaponListeners : InteractionListener { IRON_ARROW(884, 885, 5617, 5623), STEEL_ARROW(886, 887, 5618, 5624), MITHRIL_ARROW(888, 889, 5619, 5625), - ADAMANT_ARROW(890, 891, 5620, 5626), + ADAMANT_ARROW(890, 891, Items.ADAMANT_ARROWP_PLUS_5620, 5626), RUNE_ARROW(892, 893, 5621, 5627), IRON_KNIFE(863, 871, 5655, 5662), @@ -61,12 +62,12 @@ class PoisonedWeaponListeners : InteractionListener { ADAMANT_DART(810, 816, 5633, 5640), RUNE_DART(811, 817, 5634, 5641), - IRON_JAVELIN(825, 831, 5641, 5648), - BRONZE_JAVELIN(826, 832, 5642, 5649), - STEEL_JAVELIN(827, 833, 5643, 5650), - MITHRIL_JAVELIN(828, 834, 5644, 5651), - ADAMANT_JAVELIN(829, 835, 5645, 5652), - RUNE_JAVELIN(830, 836, 5646, 5653), + IRON_JAVELIN(825, 831, Items.IRON_JAVELINP_PLUS_5643, 5648), + BRONZE_JAVELIN(826, 832, Items.BRONZE_JAVELINP_PLUS_5642, 5649), + STEEL_JAVELIN(827, 833, Items.STEEL_JAVELINP_PLUS_5644, 5650), + MITHRIL_JAVELIN(828, 834, Items.MITHRIL_JAVELINP_PLUS_5645, 5651), + ADAMANT_JAVELIN(829, 835, Items.ADAMANT_JAVELINP_PLUS_5646, 5652), + RUNE_JAVELIN(830, 836, Items.RUNE_JAVELINP_PLUS_5647, 5653), IRON_DAGGER(1203, 1219, 5668, 5686), BRONZE_DAGGER(1205, 1221, 5670, 5688), @@ -77,14 +78,14 @@ class PoisonedWeaponListeners : InteractionListener { DRAGON_DAGGER(1215, 1231, 5680, 5698), BLACK_DAGGER(1217, 1233, 5682, 5700), - BRONZE_SPEAR(1237, 1251, 5704, 5618), - IRON_SPEAR(1239, 1253, 5706, 5620), - STEEL_SPEAR(1241, 1255, 5708, 5622), - MITHRIL_SPEAR(1243, 1257, 5710, 5624), - ADAMANT_SPEAR(1245, 1259, 5712, 5626), - RUNE_SPEAR(1247, 1261, 5714, 5628), + BRONZE_SPEAR(1237, 1251, 5704, Items.BRONZE_SPEARP_PLUS_PLUS_5718), + IRON_SPEAR(1239, 1253, 5706, Items.IRON_SPEARP_PLUS_PLUS_5720), + STEEL_SPEAR(1241, 1255, 5708, 5722), + MITHRIL_SPEAR(1243, 1257, 5710, 5724), + ADAMANT_SPEAR(1245, 1259, 5712, 5726), + RUNE_SPEAR(1247, 1261, 5714, 5728), DRAGON_SPEAR(1249, 1263, 5716, 5730), - BLACK_SPEAR(4580, 4582, 5734, 5636); + BLACK_SPEAR(4580, 4582, 5734, 5736); companion object { val itemMap = values().map { it.base to intArrayOf(it.p,it.pp,it.ppp) }.toMap() diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/TOTTHelmOnCape.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/TOTTHelmOnCape.kt index b6af52e2a..9ad853927 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/TOTTHelmOnCape.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/TOTTHelmOnCape.kt @@ -5,11 +5,12 @@ import api.* import org.rs09.consts.Items import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE class TOTTHelmOnCape : InteractionListener { override fun defineListeners() { - onUseWith(ITEM, Items.SLAYER_HELMET_13263, Items.SLAYER_CAPE_9786, Items.SLAYER_CAPET_9787){ player, used, with -> + onUseWith(IntType.ITEM, Items.SLAYER_HELMET_13263, Items.SLAYER_CAPE_9786, Items.SLAYER_CAPET_9787){ player, used, with -> val alreadyHasHelm = getAttribute(player, "cape_perks:tott:helmet-stored", false) if(alreadyHasHelm){ diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/WatermelonOnSack.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/WatermelonOnSack.kt index 82117f1eb..35ebdcb85 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withitem/WatermelonOnSack.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withitem/WatermelonOnSack.kt @@ -5,13 +5,14 @@ import api.* import core.game.node.entity.skill.Skills import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class WatermelonOnSack : InteractionListener { val SACK = Items.HAY_SACK_6058 val WATERMELON = Items.WATERMELON_5982 override fun defineListeners() { - onUseWith(ITEM, SACK, WATERMELON){player, used, _ -> + onUseWith(IntType.ITEM, SACK, WATERMELON){player, used, _ -> if(getStatLevel(player, Skills.FARMING) >= 23){ removeItem(player,SACK, Container.INVENTORY) removeItem(player,WATERMELON,Container.INVENTORY) diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/ArchaeologicalExpertListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/ArchaeologicalExpertListener.kt index 713d59d7e..5f698bf23 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/ArchaeologicalExpertListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/ArchaeologicalExpertListener.kt @@ -6,6 +6,7 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.content.dialogue.region.examcentre.ArchaeologistcalExpertUsedOnDialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType open class ArchaeologicalExpertListener() : InteractionListener { val staff = Items.ANCIENT_STAFF_4675 @@ -42,7 +43,7 @@ open class ArchaeologicalExpertListener() : InteractionListener { val lol = arrayOf(Items) override fun defineListeners() { - onUseWith(NPC, items, archy) { + onUseWith(IntType.NPC, items, archy) { player, used, with -> openDialogue(player, ArchaeologistcalExpertUsedOnDialogueFile(used.id)) return@onUseWith false } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/BonesOnStrayDog.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/BonesOnStrayDog.kt index da597e263..af0300f00 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/BonesOnStrayDog.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/BonesOnStrayDog.kt @@ -10,6 +10,7 @@ import core.game.node.item.Item import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class BonesOnStrayDog : InteractionListener { override fun defineListeners() { @@ -22,7 +23,7 @@ class BonesOnStrayDog : InteractionListener { NPCs.STRAY_DOG_5918 ) - onUseWith(NPC, bones, *dogs) { player, used, with -> + onUseWith(IntType.NPC, bones, *dogs) { player, used, with -> used as Item; with as NPC var woof = "Woof" diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/CatOnArdougneCivilian.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/CatOnArdougneCivilian.kt index db1383c41..3fd5be5b1 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/CatOnArdougneCivilian.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/CatOnArdougneCivilian.kt @@ -5,6 +5,7 @@ import api.* import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class CatOnArdougneCivilian: InteractionListener { @@ -44,7 +45,7 @@ class CatOnArdougneCivilian: InteractionListener { ) override fun defineListeners() { - onUseWith(NPC,cats,*civilians){player, used, _ -> + onUseWith(IntType.NPC,cats,*civilians){player, used, _ -> sendItemDialogue(player,Items.DEATH_RUNE_560,"You hand over the cat.
You are given 100 Death Runes.") player.familiarManager.removeDetails(used.id) removeItem(player,used,Container.INVENTORY) diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/CiderOnForester.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/CiderOnForester.kt index 7ab4498e7..53cd9024e 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/CiderOnForester.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/CiderOnForester.kt @@ -7,12 +7,13 @@ import core.game.node.item.Item import org.rs09.consts.Items import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class CiderOnForester : InteractionListener { override fun defineListeners() { val ids = intArrayOf(1,2,3,4,5) - onUseWith(NPC, Items.CIDER_5763, *ids){player, used, with -> + onUseWith(IntType.NPC, Items.CIDER_5763, *ids){player, used, with -> if(inBorders(player, 2689, 3488, 2700, 3498)){ player.dialogueInterpreter.open(CiderOnForesterDialogue(),with) return@onUseWith true diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/FeedFaladorSheepdog.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/FeedFaladorSheepdog.kt index f007ab93b..abc23f025 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/FeedFaladorSheepdog.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/FeedFaladorSheepdog.kt @@ -9,6 +9,7 @@ import org.rs09.consts.Animations import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class FeedFaladorSheepdog : InteractionListener { companion object { @@ -24,7 +25,7 @@ class FeedFaladorSheepdog : InteractionListener { } override fun defineListeners() { - onUseAnyWith(NPC, SHEEP_DOG_NPC) { player, used, with -> + onUseAnyWith(IntType.NPC, SHEEP_DOG_NPC) { player, used, with -> if (CONSUMABLE_BONES.contains(used.id)) { if (!removeItem(player, used.asItem())) { return@onUseAnyWith true diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/GCItemOnCat.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/GCItemOnCat.kt index 0e780e870..d86e38613 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/GCItemOnCat.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/GCItemOnCat.kt @@ -8,6 +8,7 @@ import core.game.world.map.path.Pathfinder import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld.Pulser class GCItemOnCat : InteractionListener { @@ -15,7 +16,7 @@ class GCItemOnCat : InteractionListener { val GERTCAT = "Gertrude's Cat" val BEND_DOWN = 827 - onUseWith(NPC, Items.BUCKET_OF_MILK_1927, NPCs.GERTRUDES_CAT_2997) {player, used, with -> + onUseWith(IntType.NPC, Items.BUCKET_OF_MILK_1927, NPCs.GERTRUDES_CAT_2997) {player, used, with -> if(questStage(player, GERTCAT) == 20 && removeItem(player, used.asItem())){ addItem(player, Items.BUCKET_1925) animate(player, BEND_DOWN) //bend down @@ -25,7 +26,7 @@ class GCItemOnCat : InteractionListener { return@onUseWith true } - onUseWith(NPC, Items.DOOGLE_SARDINE_1552, NPCs.GERTRUDES_CAT_2997){player, used, with -> + onUseWith(IntType.NPC, Items.DOOGLE_SARDINE_1552, NPCs.GERTRUDES_CAT_2997){player, used, with -> if(questStage(player, GERTCAT) == 30 && removeItem(player, used.asItem())){ animate(player, BEND_DOWN) sendChat(with.asNpc(), "Mew!") @@ -34,12 +35,12 @@ class GCItemOnCat : InteractionListener { return@onUseWith true } - onUseWith(NPC, Items.RAW_SARDINE_327, NPCs.GERTRUDES_CAT_2997){player, _, _ -> + onUseWith(IntType.NPC, Items.RAW_SARDINE_327, NPCs.GERTRUDES_CAT_2997){player, _, _ -> sendMessage(player, "The cat doesn't seem interested in that.") return@onUseWith true } - onUseWith(NPC, Items.THREE_LITTLE_KITTENS_13236, NPCs.GERTRUDES_CAT_2997){player, used, with -> + onUseWith(IntType.NPC, Items.THREE_LITTLE_KITTENS_13236, NPCs.GERTRUDES_CAT_2997){player, used, with -> if(removeItem(player, used.asItem())){ setQuestStage(player, GERTCAT, 60) //below copied verbatim from original, I don't like it. diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/HatEasterEgg.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/HatEasterEgg.kt index e95b939c9..fdb71a2c3 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/HatEasterEgg.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/HatEasterEgg.kt @@ -7,6 +7,7 @@ import core.game.world.update.flag.context.Graphics import org.rs09.consts.Items import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType val graphics = 482 class HatEasterEgg : InteractionListener { @@ -16,7 +17,7 @@ class HatEasterEgg : InteractionListener { val NEW_HAT = 14650 override fun defineListeners() { - onUseWith(SCENERY,WIZ_HAT,MACHINE){ player, used, with -> + onUseWith(IntType.SCENERY,WIZ_HAT,MACHINE){ player, used, with -> player.dialogueInterpreter.open(HatDialogue(), NPC(872)) return@onUseWith true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/MistagEasterEgg.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/MistagEasterEgg.kt index e9ac0d973..07cfc6c90 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/MistagEasterEgg.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/MistagEasterEgg.kt @@ -7,6 +7,7 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE class MistagEasterEgg : InteractionListener { @@ -15,7 +16,7 @@ class MistagEasterEgg : InteractionListener { val ZANIK_RING = 14649 override fun defineListeners() { - onUseWith(NPC,DIAMOND,MISTAG){player, _, with -> + onUseWith(IntType.NPC,DIAMOND,MISTAG){player, _, with -> val alreadyHasRing = player.inventory.contains(ZANIK_RING,1) || player.bank.contains(ZANIK_RING,1) || player.equipment.contains(ZANIK_RING,1) player.dialogueInterpreter.open(MistagEasterEggDialogue(alreadyHasRing),with.asNpc()) return@onUseWith true diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/PoisonChaliceOnKingArthur.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/PoisonChaliceOnKingArthur.kt index 45d3b265f..571d4bebe 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/PoisonChaliceOnKingArthur.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/PoisonChaliceOnKingArthur.kt @@ -6,11 +6,12 @@ import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE class PoisonChaliceOnKingArthur : InteractionListener { override fun defineListeners() { - onUseWith(NPC, Items.POISON_CHALICE_197, NPCs.KING_ARTHUR_251) { player, _, with -> + onUseWith(IntType.NPC, Items.POISON_CHALICE_197, NPCs.KING_ARTHUR_251) { player, _, with -> player.dialogueInterpreter.open(PoisonChaliceOnKingArthurDialogue(), with) return@onUseWith true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/RopeOnLadyKeli.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/RopeOnLadyKeli.kt index 548ba5442..22bac8992 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/RopeOnLadyKeli.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/RopeOnLadyKeli.kt @@ -4,12 +4,13 @@ import api.* import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class RopeOnLadyKeli : InteractionListener { override fun defineListeners() { val PAR = "Prince Ali Rescue" - onUseWith(NPC, Items.ROPE_954, NPCs.LADY_KELI_919) {player, used, with -> + onUseWith(IntType.NPC, Items.ROPE_954, NPCs.LADY_KELI_919) {player, used, with -> if(questStage(player, PAR) in 40..50 && getAttribute(player, "guard-drunk", false)){ if(removeItem(player, used.asItem())){ sendDialogue(player, "You overpower Keli, tie her up, and put her in a cupboard.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/ZooknockListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/ZooknockListener.kt index 63a5289fb..d3680f138 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/ZooknockListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withnpc/ZooknockListener.kt @@ -7,6 +7,7 @@ import org.rs09.consts.NPCs import rs09.game.content.dialogue.region.examcentre.ArchaeologistcalExpertUsedOnDialogueFile import rs09.game.content.dialogue.region.examcentre.ZooknockDialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType open class ZooknockListener() : InteractionListener { val goldBar = Items.GOLD_BAR_2357 @@ -21,7 +22,7 @@ open class ZooknockListener() : InteractionListener { val lol = arrayOf(Items) override fun defineListeners() { - onUseWith(NPC, items, zooknock) { + onUseWith(IntType.NPC, items, zooknock) { player, used, with -> openDialogue(player, ZooknockDialogueFile(used.id)) return@onUseWith false } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/AmmoMouldOnFurnace.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/AmmoMouldOnFurnace.kt index 863a4f6ef..f34c8b08f 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/AmmoMouldOnFurnace.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/AmmoMouldOnFurnace.kt @@ -11,6 +11,7 @@ import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.content.dialogue.SkillDialogueHandler import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class AmmoMouldOnFurnace : InteractionListener{ private val furnaces = intArrayOf(4304, 6189, 11010, 11666, 12100, 12809, 18497, 26814, 30021, 30510, 36956, 37651) // abstract when smelting converted to kotlin @@ -83,6 +84,6 @@ class AmmoMouldOnFurnace : InteractionListener{ } override fun defineListeners() { - onUseWith(SCENERY, Items.STEEL_BAR_2353, *furnaces, handler = ::cannonBallOnUseWithHandler) + onUseWith(IntType.SCENERY, Items.STEEL_BAR_2353, *furnaces, handler = ::cannonBallOnUseWithHandler) } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/AxeOnTree.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/AxeOnTree.kt index 07a1abe3c..0c1515a79 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/AxeOnTree.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/AxeOnTree.kt @@ -7,13 +7,14 @@ import core.game.node.entity.skill.gather.woodcutting.WoodcuttingSkillPulse import org.rs09.consts.Items import rs09.ServerConstants import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class AxeOnTree : InteractionListener{ val axes = intArrayOf(Items.BRONZE_AXE_1351, Items.MITHRIL_AXE_1355, Items.IRON_AXE_1349, Items.BLACK_AXE_1361, Items.STEEL_AXE_1353, Items.ADAMANT_AXE_1357, Items.RUNE_AXE_1359, Items.DRAGON_AXE_6739, Items.INFERNO_ADZE_13661) val trees = WoodcuttingNode.values().map { it.id }.toIntArray() override fun defineListeners() { - onUseWith(SCENERY, axes, *trees){player, _, with -> + onUseWith(IntType.SCENERY, axes, *trees){player, _, with -> submitIndividualPulse(player, WoodcuttingSkillPulse(player, with.asScenery())) return@onUseWith true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/CoalTruckListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/CoalTruckListener.kt index 8bbedc5e9..1268f9ef4 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/CoalTruckListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/CoalTruckListener.kt @@ -5,6 +5,7 @@ import core.game.node.item.Item import org.rs09.consts.Items import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles coal truck interactions @@ -17,7 +18,7 @@ class CoalTruckListener : InteractionListener { } override fun defineListeners() { - on(Scenery.COAL_TRUCK_2114, SCENERY, "remove-coal") { player, node -> + on(Scenery.COAL_TRUCK_2114, IntType.SCENERY, "remove-coal") { player, node -> var coalInTruck = getAttribute(player, ATTRIBUTE_COAL_TRUCK_INVENTORY, 0) if (coalInTruck == 0) { @@ -39,7 +40,7 @@ class CoalTruckListener : InteractionListener { return@on true } - on(Scenery.COAL_TRUCK_2114, SCENERY, "investigate") { player, _ -> + on(Scenery.COAL_TRUCK_2114, IntType.SCENERY, "investigate") { player, _ -> val coalInTruck = getAttribute(player, ATTRIBUTE_COAL_TRUCK_INVENTORY, 0) sendDialogue( @@ -50,7 +51,7 @@ class CoalTruckListener : InteractionListener { return@on true } - onUseWith(SCENERY, Items.COAL_453, Scenery.COAL_TRUCK_2114) { player, _, _ -> + onUseWith(IntType.SCENERY, Items.COAL_453, Scenery.COAL_TRUCK_2114) { player, _, _ -> var coalInTruck = getAttribute(player, ATTRIBUTE_COAL_TRUCK_INVENTORY, 0) var coalInInventory = amountInInventory(player, Items.COAL_453) diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/FishEasterEgg.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/FishEasterEgg.kt index db5cc1a23..7ef94beaf 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/FishEasterEgg.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/FishEasterEgg.kt @@ -4,6 +4,7 @@ import api.* import core.game.node.entity.skill.gather.woodcutting.WoodcuttingNode import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class FishEasterEgg : InteractionListener { val TREE_IDs = WoodcuttingNode.values().map { it.id }.toIntArray() @@ -12,12 +13,12 @@ class FishEasterEgg : InteractionListener { val doors = intArrayOf(1967,1968) override fun defineListeners() { - onUseWith(SCENERY, fish, *TREE_IDs){player, _, _ -> + onUseWith(IntType.SCENERY, fish, *TREE_IDs){player, _, _ -> sendMessage(player, "This is not the mightiest tree in the forest.") return@onUseWith true } - onUseWith(SCENERY, fish, *doors){player, _, _ -> + onUseWith(IntType.SCENERY, fish, *doors){player, _, _ -> sendMessage(player, "It can't be done!") return@onUseWith true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/HatStand.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/HatStand.kt index a7f76b8f6..05f018632 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/HatStand.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/HatStand.kt @@ -4,6 +4,7 @@ import api.* import api.EquipmentSlot import core.cache.def.impl.ItemDefinition import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.SystemLogger class HatStand : InteractionListener { @@ -12,7 +13,7 @@ class HatStand : InteractionListener { val hat_stand = 374 override fun defineListeners() { - onUseWith(SCENERY, hats, hat_stand){player, used, with -> + onUseWith(IntType.SCENERY, hats, hat_stand){player, used, with -> sendDialogue(player, "It'd probably fall off if I tried to do that.") return@onUseWith true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/SackOnHay.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/SackOnHay.kt index 8297e0f79..5df793c4e 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/SackOnHay.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/SackOnHay.kt @@ -4,13 +4,14 @@ import api.Container import api.* import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class SackOnHay : InteractionListener { val SACK = Items.EMPTY_SACK_5418 val HAY = intArrayOf(36892, 36894, 36896, 300, 34593, 298, 299) override fun defineListeners() { - onUseWith(SCENERY, SACK, *HAY){player, used, _ -> + onUseWith(IntType.SCENERY, SACK, *HAY){player, used, _ -> if(removeItem(player, used.asItem(), Container.INVENTORY)){ addItem(player, Items.HAY_SACK_6057, 1) sendMessage(player, "You fill the sack with hay.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/WaterSourceListener.kt b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/WaterSourceListener.kt index e8733591f..ae8b52086 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/item/withobject/WaterSourceListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/item/withobject/WaterSourceListener.kt @@ -6,6 +6,7 @@ import core.game.system.task.Pulse import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles filling most water sources. @@ -20,7 +21,7 @@ class WaterSourceListener : InteractionListener { override fun defineListeners() { - onUseWith(SCENERY, WaterVessel.getInputs(), *waterSources){player, used, with -> + onUseWith(IntType.SCENERY, WaterVessel.getInputs(), *waterSources){player, used, with -> val vessel = WaterVessel.forId(used.id) ?: return@onUseWith false if(with.name.contains("well", ignoreCase = true) && !vessel.wellable) diff --git a/Server/src/main/kotlin/rs09/game/interaction/npc/DecantListener.kt b/Server/src/main/kotlin/rs09/game/interaction/npc/DecantListener.kt index bffc1885f..a47db7de1 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/npc/DecantListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/npc/DecantListener.kt @@ -6,12 +6,13 @@ import core.game.node.entity.player.Player import core.game.node.item.Item import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE class DecantListener : InteractionListener { override fun defineListeners() { - on(NPC,"decant"){player, node -> + on(IntType.NPC,"decant"){player, node -> decant(player) player.dialogueInterpreter.open(DecantingDialogue(),node.asNpc()) return@on true diff --git a/Server/src/main/kotlin/rs09/game/interaction/npc/NPCDepositListener.kt b/Server/src/main/kotlin/rs09/game/interaction/npc/NPCDepositListener.kt index ec3037030..f1b7759ef 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/npc/NPCDepositListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/npc/NPCDepositListener.kt @@ -8,12 +8,13 @@ import core.game.content.dialogue.FacialExpression import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.tools.END_DIALOGUE class NPCDepositListener : InteractionListener { override fun defineListeners() { - on(NPCs.PEER_THE_SEER_1288, NPC,"deposit") { player, _ -> + on(NPCs.PEER_THE_SEER_1288, IntType.NPC, "deposit") { player, _ -> if (isEquipped(player, Items.FREMENNIK_SEA_BOOTS_1_14571) || isEquipped(player, Items.FREMENNIK_SEA_BOOTS_2_14572) || isEquipped(player, Items.FREMENNIK_SEA_BOOTS_3_14573)) { diff --git a/Server/src/main/kotlin/rs09/game/interaction/npc/NPCTalkListener.kt b/Server/src/main/kotlin/rs09/game/interaction/npc/NPCTalkListener.kt index 1fbc3cdbe..85c18822d 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/npc/NPCTalkListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/npc/NPCTalkListener.kt @@ -8,6 +8,7 @@ import rs09.game.content.activity.gnomecooking.* import rs09.game.content.ame.RandomEventManager import rs09.game.content.ame.RandomEvents import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles the NPC talk-to option. @@ -18,7 +19,7 @@ class NPCTalkListener : InteractionListener { val barCrawlNPCs = intArrayOf(733,848,735,739,737,738,731,568,3217,736,734) override fun defineListeners() { - on(barCrawlNPCs, NPC, "talk-to", "talk"){player, node -> + on(barCrawlNPCs, IntType.NPC, "talk-to", "talk"){player, node -> val type = BarcrawlType.forId(node.id) val instance = BarcrawlManager.getInstance(player) if (instance.isFinished || !instance.isStarted || instance.isCompleted(type!!.ordinal)) { @@ -29,7 +30,7 @@ class NPCTalkListener : InteractionListener { return@on true } - on(NPC,"talk-to","talk","talk to"){player,node -> + on(IntType.NPC,"talk-to","talk","talk to"){player,node -> val npc = node.asNpc() if(RandomEvents.randomIDs.contains(node.id)){ if(RandomEventManager.getInstance(player)!!.event == null || RandomEventManager.getInstance(player)!!.event!!.id != node.id){ diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/BankBoothListener.kt b/Server/src/main/kotlin/rs09/game/interaction/object/BankBoothListener.kt index c04b1c153..805934d66 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/BankBoothListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/BankBoothListener.kt @@ -13,6 +13,7 @@ import org.rs09.consts.NPCs import org.rs09.consts.Scenery import rs09.ServerConstants import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.node.entity.npc.BankerNPC import rs09.game.world.repository.Repository @@ -176,12 +177,12 @@ class BankBoothListener : InteractionListener { } override fun defineListeners() { - on(BANK_BOOTHS, SCENERY, "use-quickly", "bank", handler = ::quickBankBoothUse) - on(BANK_BOOTHS, SCENERY, "use", handler = ::regularBankBoothUse) - on(BANK_BOOTHS, SCENERY, "collect", handler = ::collectBankBoothUse) + on(BANK_BOOTHS, IntType.SCENERY, "use-quickly", "bank", handler = ::quickBankBoothUse) + on(BANK_BOOTHS, IntType.SCENERY, "use", handler = ::regularBankBoothUse) + on(BANK_BOOTHS, IntType.SCENERY, "collect", handler = ::collectBankBoothUse) if (ServerConstants.BANK_BOOTH_NOTE_ENABLED) { - onUseAnyWith(SCENERY, *BANK_BOOTHS, handler = ::attemptToConvertItems) + onUseAnyWith(IntType.SCENERY, *BANK_BOOTHS, handler = ::attemptToConvertItems) } } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/BankChestListener.kt b/Server/src/main/kotlin/rs09/game/interaction/object/BankChestListener.kt index da2db8222..a55e24200 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/BankChestListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/BankChestListener.kt @@ -3,6 +3,7 @@ package rs09.game.interaction.`object` import api.openBankAccount import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType private val BANK_CHESTS = intArrayOf( Scenery.BANK_CHEST_3194, Scenery.BANK_CHEST_4483, @@ -19,7 +20,7 @@ private val BANK_CHESTS = intArrayOf( */ class BankChestListener : InteractionListener { override fun defineListeners() { - on(BANK_CHESTS, SCENERY, "bank", "use") { player, node -> + on(BANK_CHESTS, IntType.SCENERY, "bank", "use") { player, node -> openBankAccount(player) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/BankDepositBoxListener.kt b/Server/src/main/kotlin/rs09/game/interaction/object/BankDepositBoxListener.kt index edfac3fdf..ecc1fb4bb 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/BankDepositBoxListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/BankDepositBoxListener.kt @@ -10,6 +10,7 @@ import core.game.node.entity.player.link.IronmanMode import org.rs09.consts.Components import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType private val BANK_DEPOSIT_BOXES = intArrayOf( Scenery.BANK_DEPOSIT_BOX_9398, @@ -54,6 +55,6 @@ class BankDepositBoxListener : InteractionListener { } override fun defineListeners() { - on(BANK_DEPOSIT_BOXES, SCENERY, "deposit", handler = ::openDepositBox) + on(BANK_DEPOSIT_BOXES, IntType.SCENERY, "deposit", handler = ::openDepositBox) } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/DemonTauntHandler.kt b/Server/src/main/kotlin/rs09/game/interaction/object/DemonTauntHandler.kt index f21093c56..c5acefae8 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/DemonTauntHandler.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/DemonTauntHandler.kt @@ -6,6 +6,7 @@ import core.game.node.entity.player.link.emote.Emotes import org.rs09.consts.NPCs import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles taunting of the demon in the wizard's tower @@ -15,7 +16,7 @@ import rs09.game.interaction.InteractionListener class DemonTauntHandler : InteractionListener { override fun defineListeners() { - on(Scenery.RAILING_37668, SCENERY, "taunt-through") { player, _ -> + on(Scenery.RAILING_37668, IntType.SCENERY, "taunt-through") { player, _ -> val demon = findLocalNPC(player, NPCs.LESSER_DEMON_82) ?: return@on true sendMessage(player, "You taunt the demon, making it growl.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/EnchantedValleyListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/object/EnchantedValleyListeners.kt index bf5124b4f..fd1bd1aea 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/EnchantedValleyListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/EnchantedValleyListeners.kt @@ -6,13 +6,14 @@ import core.game.node.entity.skill.gather.SkillingTool import core.game.system.task.Pulse import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class EnchantedValleyListeners : InteractionListener { val ENCHANTED_V_TREE = 16265 val TREE_SPIRIT_IDS = intArrayOf(NPCs.TREE_SPIRIT_438,NPCs.TREE_SPIRIT_439,NPCs.TREE_SPIRIT_440,NPCs.TREE_SPIRIT_441,NPCs.TREE_SPIRIT_442,NPCs.TREE_SPIRIT_443) override fun defineListeners() { - on(ENCHANTED_V_TREE,SCENERY,"chop-down"){ player, node -> + on(ENCHANTED_V_TREE, IntType.SCENERY, "chop-down"){ player, node -> val tool: SkillingTool? = SkillingTool.getHatchet(player) tool ?: player.sendMessage("You lack an axe which you have the Woodcutting level to use.").also { return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/FairyRingPlugin.kt b/Server/src/main/kotlin/rs09/game/interaction/object/FairyRingPlugin.kt index 5877d2845..2147860f8 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/FairyRingPlugin.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/FairyRingPlugin.kt @@ -8,6 +8,7 @@ import core.game.node.entity.player.link.TeleportManager.TeleportType import core.game.world.map.Location import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles interactions with fairy rings @@ -22,17 +23,17 @@ class FairyRingPlugin : InteractionListener { override fun defineListeners() { - on(RINGS,SCENERY,"use"){ player, _ -> + on(RINGS, IntType.SCENERY, "use"){ player, _ -> if (!fairyMagic(player)) return@on true player.teleporter.send(Location.create(2412, 4434, 0), TeleportType.FAIRY_RING) return@on true } - on(MAIN_RING,SCENERY,"use"){ player, _ -> + on(MAIN_RING, IntType.SCENERY, "use"){ player, _ -> if (!fairyMagic(player)) return@on true openFairyRing(player) return@on true } - on(ENTRY_RING,SCENERY,"use") { player, _ -> + on(ENTRY_RING, IntType.SCENERY, "use") { player, _ -> if (!fairyMagic(player)) return@on true player.teleporter.send(Location.create(3203, 3168, 0), TeleportType.FAIRY_RING) return@on true diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/GutanothChestPlugin.kt b/Server/src/main/kotlin/rs09/game/interaction/object/GutanothChestPlugin.kt index ab6d72adc..9a069455b 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/GutanothChestPlugin.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/GutanothChestPlugin.kt @@ -10,6 +10,7 @@ import core.game.system.task.Pulse import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld import java.util.concurrent.TimeUnit @@ -18,7 +19,7 @@ class GutanothChestInteractionHandler : InteractionListener{ override fun defineListeners() { - on(CHEST,SCENERY,"open"){ player, node -> + on(CHEST, IntType.SCENERY, "open"){ player, node -> val delay = player.getAttribute("gutanoth-chest-delay", 0L) GameWorld.Pulser.submit(ChestPulse(player,System.currentTimeMillis() > delay, node as Scenery)) return@on true diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/JungleBushHandler.kt b/Server/src/main/kotlin/rs09/game/interaction/object/JungleBushHandler.kt index 555bb3074..0bf5e3d9c 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/JungleBushHandler.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/JungleBushHandler.kt @@ -8,6 +8,7 @@ import core.game.system.task.Pulse import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld /** @@ -22,7 +23,7 @@ class JungleBushHandler : InteractionListener{ override fun defineListeners() { - on(ids,SCENERY,"chop-down"){ player, node -> + on(ids, IntType.SCENERY, "chop-down"){ player, node -> val toChop = node.asScenery() if(checkRequirement(player)){ GameWorld.Pulser.submit(object : Pulse(0){ diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/MuddyChestHandler.kt b/Server/src/main/kotlin/rs09/game/interaction/object/MuddyChestHandler.kt index b1ec9a77f..93a35bd51 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/MuddyChestHandler.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/MuddyChestHandler.kt @@ -7,6 +7,7 @@ import core.game.node.item.Item import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles the muddy chest @@ -18,7 +19,7 @@ class MuddyChestHandler : InteractionListener { override fun defineListeners() { - on(CHEST,SCENERY,"open"){ player, node -> + on(CHEST, IntType.SCENERY, "open"){ player, node -> val key = Item(Items.MUDDY_KEY_991) if(player.inventory.containsItem(key)){ player.inventory.remove(key) diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/SeaweedNetHandler.kt b/Server/src/main/kotlin/rs09/game/interaction/object/SeaweedNetHandler.kt index 5364b8b08..e2d9d9869 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/SeaweedNetHandler.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/SeaweedNetHandler.kt @@ -9,11 +9,12 @@ import core.game.system.task.Pulse import org.rs09.consts.Animations import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class SeaweedNetHandler : InteractionListener { override fun defineListeners() { - on(NET, SCENERY, "Take-from"){ player, node -> + on(NET, IntType.SCENERY, "Take-from"){ player, node -> if (!isQuestComplete(player, "Swan Song")) { sendMessage(player, "You must complete Swan Song first.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/TarBarrelListener.kt b/Server/src/main/kotlin/rs09/game/interaction/object/TarBarrelListener.kt index 32b76160d..8b057f0eb 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/TarBarrelListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/TarBarrelListener.kt @@ -5,6 +5,7 @@ import core.game.node.item.Item import core.tools.RandomFunction import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * @author Woah, with love @@ -23,7 +24,7 @@ class TarBarrelListener : InteractionListener { override fun defineListeners() { - on(FULL_TAR_BARREL_16860,SCENERY,"take-from") { player, node -> + on(FULL_TAR_BARREL_16860, IntType.SCENERY, "take-from") { player, node -> val incrementAmount = RandomFunction.random(83, 1000) if (player.inventory.isFull) { diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/VarrockGuardSignpost.kt b/Server/src/main/kotlin/rs09/game/interaction/object/VarrockGuardSignpost.kt index 51a5afe9f..d667102d2 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/VarrockGuardSignpost.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/VarrockGuardSignpost.kt @@ -8,6 +8,7 @@ import core.game.world.map.zone.MapZone import core.game.world.map.zone.ZoneBorders import rs09.GlobalStats import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.SystemLogger class VarrockGuardSignpost : InteractionListener { @@ -26,9 +27,9 @@ class VarrockGuardSignpost : InteractionListener { registerMapZone(zone, ZoneBorders(3180,3420,3165,3435)) registerMapZone(zone, ZoneBorders(3280,3422,3266,3435)) - on(31298, SCENERY, "read"){player, _ -> + on(31298, IntType.SCENERY, "read"){player, _ -> val pickpocketCount = GlobalStats.getDailyGuardPickpockets() - SystemLogger.logInfo("Is equal? ${pickpocketCount == 0}") + SystemLogger.logInfo(this::class.java, "Is equal? ${pickpocketCount == 0}") when(pickpocketCount){ 0 -> sendDialogue(player, "The Varrock Palace guards are pleased to announce that crime is at an all-time low, without a single guard in the palace or at the city gates being pickpocketed today.") 1 -> sendDialogue(player, "One of the Varrock Palace guards was pickpocketed today. He was close to tears at having lost his last few gold pieces." ) diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/WizardGuildPortals.kt b/Server/src/main/kotlin/rs09/game/interaction/object/WizardGuildPortals.kt index 6a46c9a1c..af38fc70c 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/WizardGuildPortals.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/WizardGuildPortals.kt @@ -3,6 +3,7 @@ package rs09.game.interaction.`object` import api.* import core.game.world.map.Location import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class WizardGuildPortals : InteractionListener { @@ -11,21 +12,21 @@ class WizardGuildPortals : InteractionListener { val SORC_TOWER_PORTAL = 2158 override fun defineListeners() { - on(WTOWER_PORTAL, SCENERY, "enter"){player, _ -> + on(WTOWER_PORTAL, IntType.SCENERY, "enter"){player, _ -> teleport(player, Location.create(3109, 3159, 0)) sendMessage(player, "You enter the magic portal...") sendMessage(player, "You teleport to the Wizards' tower.") return@on true } - on(DWTOWER_PORTAL, SCENERY, "enter"){player, _ -> + on(DWTOWER_PORTAL, IntType.SCENERY, "enter"){player, _ -> teleport(player, Location.create(2907, 3333, 0)) sendMessage(player, "You enter the magic portal...") sendMessage(player, "You teleport to the Dark Wizards' tower.") return@on true } - on(SORC_TOWER_PORTAL, SCENERY, "enter"){player, _ -> + on(SORC_TOWER_PORTAL, IntType.SCENERY, "enter"){player, _ -> teleport(player, Location.create(2703, 3406, 0)) sendMessage(player, "You enter the magic portal...") sendMessage(player, "You teleport to Thormac the Sorceror's house.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/canoestation/CanoeStationListener.kt b/Server/src/main/kotlin/rs09/game/interaction/object/canoestation/CanoeStationListener.kt index 5c4f252d3..be03defd5 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/canoestation/CanoeStationListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/canoestation/CanoeStationListener.kt @@ -7,10 +7,11 @@ import core.game.system.task.Pulse import core.game.world.update.flag.context.Animation import org.rs09.consts.Components import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class CanoeStationListener : InteractionListener { - private val STATION_IDs = intArrayOf(12140, 12141, 12142, 12143, 12144, 12145, 12146, 12147, 12148, 12151, 12152, 12153, 12154, 12155, 12156, 12157, 12158, 12144, 12146, 12149, 12150, 12157) + private val STATION_IDs = intArrayOf(12140, 12141, 12142, 12143, 12144, 12145, 12146, 12147, 12148, 12151, 12152, 12153, 12154, 12155, 12156, 12157, 12158, 12149, 12150) private val STAGE_TREE_NONINTERACTABLE = 9 private val STAGE_LOG_CHOPPED = 10 private val SHAPING_INTERFACE = Components.CANOE_52 @@ -19,16 +20,16 @@ class CanoeStationListener : InteractionListener { private val FLOAT = Animation(3304) override fun defineDestinationOverrides() { - setDest(SCENERY,STATION_IDs,"chop-down"){ _,node -> + setDest(IntType.SCENERY,STATION_IDs,"chop-down"){ _,node -> return@setDest CanoeUtils.getChopLocation(node.location) } - setDest(SCENERY,STATION_IDs,"shape-canoe","float canoe","float log","float waka"){ _,node -> + setDest(IntType.SCENERY,STATION_IDs,"shape-canoe","float canoe","float log","float waka"){ _,node -> return@setDest CanoeUtils.getCraftFloatLocation(node.location) } } override fun defineListeners() { - on(STATION_IDs,SCENERY,"chop-down"){ player, node -> + on(STATION_IDs, IntType.SCENERY, "chop-down"){ player, node -> val axe: SkillingTool? = SkillingTool.getHatchet(player) val varbit = node.asScenery().definition.configFile if(varbit.getValue(player) != 0){ @@ -60,7 +61,7 @@ class CanoeStationListener : InteractionListener { return@on true } - on(STATION_IDs,SCENERY,"shape-canoe"){ player, node -> + on(STATION_IDs, IntType.SCENERY, "shape-canoe"){ player, node -> val varbit = node.asScenery().definition.configFile if(varbit.getValue(player) != STAGE_LOG_CHOPPED){ player.varpManager.setVarbit(varbit,0) @@ -72,7 +73,7 @@ class CanoeStationListener : InteractionListener { return@on true } - on(STATION_IDs,SCENERY,"float canoe","float log","float waka"){ player, node -> + on(STATION_IDs, IntType.SCENERY, "float canoe","float log","float waka"){ player, node -> val varbit = node.asScenery().definition.configFile val canoe = CanoeUtils.getCanoeFromVarbit(player,varbit) player.animator.animate(PUSH) @@ -89,7 +90,7 @@ class CanoeStationListener : InteractionListener { return@on true } - on(STATION_IDs,SCENERY,"paddle log","paddle canoe"){ player, node -> + on(STATION_IDs, IntType.SCENERY, "paddle log","paddle canoe"){ player, node -> player.interfaceManager.open(Component(Components.CANOE_STATIONS_MAP_53)) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/object/objects/CrateHandler.kt b/Server/src/main/kotlin/rs09/game/interaction/object/objects/CrateHandler.kt index 48364fc2d..3c2b41ad8 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/object/objects/CrateHandler.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/object/objects/CrateHandler.kt @@ -5,6 +5,7 @@ import api.sendMessage import core.game.system.task.Pulse import core.game.world.update.flag.context.Animation import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.`object`.dialogues.CrateDialogues /** @@ -24,14 +25,14 @@ class CrateHandler : InteractionListener { override fun defineListeners() { //searching crates with monkey amulet moulds - on(monkeyAmuletMouldCrate, SCENERY, "search") { player, node -> + on(monkeyAmuletMouldCrate, IntType.SCENERY, "search") { player, node -> player.animator.animate(Animation(536)) sendMessage(player, "You search the crate.") openDialogue(player!!, CrateDialogues(0)) return@on true } - on(threadCrate, SCENERY, "search") { player, node -> + on(threadCrate, IntType.SCENERY, "search") { player, node -> sendMessage(player, "You search the crate.") player.pulseManager.run(object : Pulse() { var counter = 0 @@ -45,7 +46,7 @@ class CrateHandler : InteractionListener { return@on true } - on(monkeyTalkingDentures, SCENERY, "search") { player, node -> + on(monkeyTalkingDentures, IntType.SCENERY, "search") { player, node -> sendMessage(player, "You search the crate.") player.pulseManager.run(object : Pulse() { var counter = 0 @@ -59,7 +60,7 @@ class CrateHandler : InteractionListener { return@on true } - on(bananaCrate, SCENERY, "search") { player, node -> + on(bananaCrate, IntType.SCENERY, "search") { player, node -> sendMessage(player, "You search the crate.") player.pulseManager.run(object : Pulse() { var counter = 0 @@ -73,13 +74,13 @@ class CrateHandler : InteractionListener { return@on true } - on(monkeyMadnessEntranceDown, SCENERY, "search") { player, node -> + on(monkeyMadnessEntranceDown, IntType.SCENERY, "search") { player, node -> sendMessage(player, "You search the crate.") openDialogue(player!!, CrateDialogues(4)) return@on true } - on(tinderboxCrate, SCENERY, "search") { player, node -> + on(tinderboxCrate, IntType.SCENERY, "search") { player, node -> sendMessage(player, "You search the crate.") player.pulseManager.run(object : Pulse() { var counter = 0 @@ -93,7 +94,7 @@ class CrateHandler : InteractionListener { return@on true } - on(slimyGnomeEyesCrate, SCENERY, "search") { player, node -> + on(slimyGnomeEyesCrate, IntType.SCENERY, "search") { player, node -> sendMessage(player, "You search the crate.") player.pulseManager.run(object : Pulse() { var counter = 0 @@ -107,7 +108,7 @@ class CrateHandler : InteractionListener { return@on true } - on(hammersCrate, SCENERY, "search") { player, node -> + on(hammersCrate, IntType.SCENERY, "search") { player, node -> sendMessage(player, "You search the crate.") player.pulseManager.run(object : Pulse() { var counter = 0 diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/IsafdarListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/IsafdarListeners.kt index 2c832b411..4400321ad 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/IsafdarListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/IsafdarListeners.kt @@ -2,6 +2,7 @@ package rs09.game.interaction.region import core.game.world.map.Location import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * File to be used for anything Isafdar related. @@ -17,12 +18,12 @@ class IsafdarListeners : InteractionListener { val inside = Location.create(2314, 9624, 0) override fun defineListeners() { - on(CAVE_ENTRANCE,SCENERY,"enter"){ player, node -> + on(CAVE_ENTRANCE, IntType.SCENERY, "enter"){ player, node -> player.teleport(inside) return@on true } - on(CAVE_EXIT,SCENERY,"exit"){ player, node -> + on(CAVE_EXIT, IntType.SCENERY, "exit"){ player, node -> player.teleport(outside) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/MorytaniaListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/MorytaniaListeners.kt index 2ea974f0b..18bc20d94 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/MorytaniaListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/MorytaniaListeners.kt @@ -12,6 +12,7 @@ import kotlinx.coroutines.launch import org.rs09.consts.NPCs import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import kotlin.random.Random /** @@ -36,7 +37,7 @@ class MorytaniaListeners : InteractionListener { override fun defineListeners() { - on(SWAMP_GATES, SCENERY, "open"){player, node -> + on(SWAMP_GATES, IntType.SCENERY, "open"){player, node -> if(player.location.y == 3457){ DoorActionHandler.handleAutowalkDoor(player, node.asScenery()) GlobalScope.launch { @@ -56,12 +57,12 @@ class MorytaniaListeners : InteractionListener { return@on true } - on(GROTTO_EXIT,SCENERY,"exit"){ player, node -> + on(GROTTO_EXIT, IntType.SCENERY, "exit"){ player, node -> player.teleport(outside) return@on true } - on(GROTTO_BRIDGE,SCENERY,"jump"){ player, node -> + on(GROTTO_BRIDGE, IntType.SCENERY, "jump"){ player, node -> val start = node.location var failLand = Location(3438,3331) var failAnim = Animation(770) diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/dungeons/brimhaven/BrimhavenDungeonListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/dungeons/brimhaven/BrimhavenDungeonListeners.kt index 2894cc215..19bee4f5a 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/dungeons/brimhaven/BrimhavenDungeonListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/dungeons/brimhaven/BrimhavenDungeonListeners.kt @@ -6,6 +6,7 @@ import core.game.world.map.Location import core.game.world.update.flag.context.Animation import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class BrimhavenDungeonListeners : InteractionListener { @@ -17,32 +18,32 @@ class BrimhavenDungeonListeners : InteractionListener { val LOGS = intArrayOf(5088,5090) override fun defineListeners() { - on(EXIT,SCENERY,"leave"){ player, _ -> + on(EXIT, IntType.SCENERY, "leave"){ player, _ -> player.properties.teleportLocation = Location.create(2745, 3152, 0) return@on true } - on(STAIRS,SCENERY,"walk-up","walk-down"){ player, node -> + on(STAIRS, IntType.SCENERY, "walk-up","walk-down"){ player, node -> BrimhavenUtils.handleStairs(node.asScenery(),player) return@on true } - on(STEPPING_STONES,SCENERY,"jump-from"){ player, node -> + on(STEPPING_STONES, IntType.SCENERY, "jump-from"){ player, node -> BrimhavenUtils.handleSteppingStones(player,node.asScenery()) return@on true } - on(VINES,SCENERY,"chop-down"){ player, node -> + on(VINES, IntType.SCENERY, "chop-down"){ player, node -> BrimhavenUtils.handleVines(player,node.asScenery()) return@on true } - on(SANIBOCH,NPC,"pay"){player, node -> + on(SANIBOCH, IntType.NPC, "pay"){player, node -> player.dialogueInterpreter.open(SANIBOCH,node.asNpc(),10) return@on true } - on(LOGS,SCENERY,"walk-across"){ player, node -> + on(LOGS, IntType.SCENERY, "walk-across"){ player, node -> if (player.skills.getLevel(Skills.AGILITY) < 30) { player.packetDispatch.sendMessage("You need an agility level of 30 to cross this.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/dungeons/taverley/TaverleyDungeonListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/dungeons/taverley/TaverleyDungeonListeners.kt index d445f7e44..71486db40 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/dungeons/taverley/TaverleyDungeonListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/dungeons/taverley/TaverleyDungeonListeners.kt @@ -5,6 +5,7 @@ import core.game.content.global.action.DoorActionHandler import org.rs09.consts.Items import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class TaverleyDungeonListeners : InteractionListener { @@ -13,7 +14,7 @@ class TaverleyDungeonListeners : InteractionListener { override fun defineListeners() { - on(BD_GATE, SCENERY, "open"){player, node -> + on(BD_GATE, IntType.SCENERY, "open"){player, node -> if(!inInventory(player, Items.DUSTY_KEY_1590)){ sendMessage(player, "This gate seems to be locked.") } else { @@ -23,7 +24,7 @@ class TaverleyDungeonListeners : InteractionListener { } - on(JAIL_DOOR, SCENERY, "open"){player, node -> + on(JAIL_DOOR, IntType.SCENERY, "open"){player, node -> when(player.location.y){ 9689 -> DoorActionHandler.handleAutowalkDoor(player, node.asScenery()) //inside the cell going out 9690 -> { //outside the cell going in diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/falador/WineOfZamorakInteraction.kt b/Server/src/main/kotlin/rs09/game/interaction/region/falador/WineOfZamorakInteraction.kt index d160409d8..1da29cb31 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/falador/WineOfZamorakInteraction.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/falador/WineOfZamorakInteraction.kt @@ -5,11 +5,12 @@ import core.game.world.map.RegionManager import org.rs09.consts.Items import rs09.game.content.global.action.PickupHandler import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class WineOfZamorakInteraction : InteractionListener { override fun defineListeners() { - on(Items.WINE_OF_ZAMORAK_245,GROUNDITEM,"take"){player, wine -> + on(Items.WINE_OF_ZAMORAK_245,IntType.GROUNDITEM,"take"){player, wine -> if(player.location.regionId != 11574){ PickupHandler.take(player, wine as GroundItem) return@on true diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/ChurchSignListener.kt b/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/ChurchSignListener.kt index 6d20582e2..0f74e3134 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/ChurchSignListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/ChurchSignListener.kt @@ -4,13 +4,14 @@ import api.* import org.rs09.consts.Scenery import rs09.GlobalStats import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class ChurchSignListener : InteractionListener { val CHURCH_SIGN = Scenery.SIGNPOST_31299 override fun defineListeners() { - on(CHURCH_SIGN, SCENERY, "read"){player, _ -> + on(CHURCH_SIGN, IntType.SCENERY, "read"){player, _ -> val deaths = GlobalStats.getDailyDeaths() if(deaths > 0) { sendDialogue(player, "So far today $deaths unlucky adventurers have died on RuneScape and been sent to their respawn location. Be careful out there.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/CowFieldSignListener.kt b/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/CowFieldSignListener.kt index 55107626c..fef7bf2cc 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/CowFieldSignListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/CowFieldSignListener.kt @@ -4,6 +4,7 @@ import api.* import org.rs09.consts.Scenery import rs09.GlobalStats import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * @author bushtail @@ -14,7 +15,7 @@ class CowFieldSignListener : InteractionListener { val SIGN = Scenery.SIGNPOST_31297 override fun defineListeners() { - on(SIGN, SCENERY, "read") { player, _ -> + on(SIGN, IntType.SCENERY, "read") { player, _ -> val COW_DEATHS = GlobalStats.getDailyCowDeaths() if(COW_DEATHS > 0) { sendDialogue(player, "Local cowherders have reported that $COW_DEATHS cows have been slain in this field today by passing adventurers. Farmers throughout the land fear this may be an epidemic.") diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/FredChestListener.kt b/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/FredChestListener.kt index 4abc44895..ec2ed3883 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/FredChestListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/FredChestListener.kt @@ -4,6 +4,7 @@ import api.* import core.game.world.map.Direction import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * @author bushtail @@ -14,15 +15,15 @@ class FredChestListener : InteractionListener { val OPEN = Scenery.OPEN_CHEST_37010 override fun defineListeners() { - on(SHUT, SCENERY, "open") { _, node -> + on(SHUT, IntType.SCENERY, "open") { _, node -> replaceScenery(node.asScenery(), OPEN, -1, node.location) return@on true } - on(OPEN, SCENERY, "shut") { _, node -> + on(OPEN, IntType.SCENERY, "shut") { _, node -> replaceScenery(node.asScenery(), SHUT, -1, node.location) return@on true } - on(OPEN, SCENERY, "search") { player, _ -> + on(OPEN, IntType.SCENERY, "search") { player, _ -> sendMessage(player, "You search the chest but find nothing.") return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/GnomeCopterSignListener.kt b/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/GnomeCopterSignListener.kt index 8e696d7d4..ee785a4bf 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/GnomeCopterSignListener.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/lumbridge/GnomeCopterSignListener.kt @@ -4,6 +4,7 @@ import api.sendDialogue import api.sendMessage import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * @author bushtail @@ -12,7 +13,7 @@ import rs09.game.interaction.InteractionListener class GnomeCopterSignListener : InteractionListener { val SIGN = Scenery.ADVERTISEMENT_30037 override fun defineListeners() { - on(SIGN, SCENERY, "read") { player, _ -> + on(SIGN, IntType.SCENERY, "read") { player, _ -> sendDialogue(player, "Come check our gnome copters up north! Disclaimer: EXTREMELY WIP") return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/JatizsoListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/JatizsoListeners.kt index da8fc12ad..28f73438d 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/JatizsoListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/JatizsoListeners.kt @@ -12,6 +12,7 @@ import core.game.world.map.zone.ZoneBorders import org.rs09.consts.NPCs import rs09.game.content.dialogue.region.jatizso.LeftieRightieDialogue import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class JatizsoListeners : InteractionListener { val GATES_CLOSED = intArrayOf(21403,21405) @@ -40,7 +41,7 @@ class JatizsoListeners : InteractionListener { ) ) override fun defineListeners() { - on(GATES_CLOSED, SCENERY, "open"){player, node -> + on(GATES_CLOSED, IntType.SCENERY, "open"){player, node -> if(NORTH_GATE_ZONE.insideBorder(player)){ if(node.id == GATES_CLOSED.first()){ val other = getScenery(node.location.transform(1, 0, 0)) ?: return@on true @@ -76,7 +77,7 @@ class JatizsoListeners : InteractionListener { return@on true } - on(TOWER_GUARDS, NPC, "watch-shouting"){player, _ -> + on(TOWER_GUARDS, IntType.NPC, "watch-shouting"){player, _ -> val local = findLocalNPC(player, NPCs.GUARD_5489) lock(player, 200) face(local!!, Location.create(2371, 3801, 2)) @@ -121,23 +122,23 @@ class JatizsoListeners : InteractionListener { return@on true } - on(BELL, SCENERY, "ring-bell"){player, _ -> + on(BELL, IntType.SCENERY, "ring-bell"){player, _ -> playAudio(player, Audio(15)) sendMessage(player, "You ring the warning bell, but everyone ignores it!") return@on true } - on(GUARDS, NPC, "talk-to"){player, node -> + on(GUARDS, IntType.NPC, "talk-to"){player, node -> player.dialogueInterpreter.open(LeftieRightieDialogue(), NPC(NPCs.GUARD_5491)) return@on true } - on(KING_CHEST, SCENERY, "open"){player, node -> + on(KING_CHEST, IntType.SCENERY, "open"){player, node -> sendPlayerDialogue(player, "I probably shouldn't mess with that.", FacialExpression.HALF_THINKING) return@on true } - setDest(NPC, NPCs.MAGNUS_GRAM_5488){_,_ -> + setDest(IntType.NPC, NPCs.MAGNUS_GRAM_5488){_,_ -> return@setDest Location.create(2416, 3801, 0) } diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/NeitiznotListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/NeitiznotListeners.kt index ad1f2fb43..2b87af938 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/NeitiznotListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/NeitiznotListeners.kt @@ -11,13 +11,14 @@ import core.game.world.map.zone.MapZone import core.game.world.map.zone.ZoneBorders import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class NeitiznotListeners : InteractionListener { val STUMP = 21305 override fun defineListeners() { - on(STUMP, SCENERY, "cut-wood"){player, _ -> + on(STUMP, IntType.SCENERY, "cut-wood"){player, _ -> sendPlayerDialogue(player, "I should probably leave this alone.", FacialExpression.HALF_THINKING) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/RellekkaListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/RellekkaListeners.kt index 63b3443a0..a7add85c0 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/RellekkaListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/rellekka/RellekkaListeners.kt @@ -4,6 +4,7 @@ import core.game.world.map.Location import core.plugin.Initializable import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.util.region.rellekka.RellekkaDestination import rs09.game.util.region.rellekka.RellekkaUtils @@ -27,7 +28,7 @@ class RellekkaListeners : InteractionListener { val STAIRS = intArrayOf(19690,19691) override fun defineListeners() { - on(STAIRS,SCENERY,"ascend","descend"){ player, node -> + on(STAIRS, IntType.SCENERY, "ascend","descend"){ player, node -> if(player.location.y < 3802){ player.properties.teleportLocation = when(player.location.x){ 2715 -> DOWN1A @@ -48,22 +49,22 @@ class RellekkaListeners : InteractionListener { return@on true } - on(NPCs.MARIA_GUNNARS_5508, NPC, "ferry-neitiznot"){player, _ -> + on(NPCs.MARIA_GUNNARS_5508, IntType.NPC, "ferry-neitiznot"){player, _ -> RellekkaUtils.sail(player, RellekkaDestination.RELLEKKA_TO_NEITIZNOT) return@on true } - on(NPCs.MARIA_GUNNARS_5507, NPC, "ferry-rellekka"){player, node -> + on(NPCs.MARIA_GUNNARS_5507, IntType.NPC, "ferry-rellekka"){player, node -> RellekkaUtils.sail(player, RellekkaDestination.NEITIZNOT_TO_RELLEKKA) return@on true } - on(NPCs.MORD_GUNNARS_5481, NPC, "ferry-jatizso"){player, node -> + on(NPCs.MORD_GUNNARS_5481, IntType.NPC, "ferry-jatizso"){player, node -> RellekkaUtils.sail(player, RellekkaDestination.RELLEKKA_TO_JATIZSO) return@on true } - on(NPCs.MORD_GUNNARS_5482, NPC, "ferry-rellekka"){player, node -> + on(NPCs.MORD_GUNNARS_5482, IntType.NPC, "ferry-rellekka"){player, node -> RellekkaUtils.sail(player, RellekkaDestination.JATIZSO_TO_RELLEKKA) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/interaction/region/wilderness/RoguesCastleListeners.kt b/Server/src/main/kotlin/rs09/game/interaction/region/wilderness/RoguesCastleListeners.kt index 9e5e7142f..839816588 100644 --- a/Server/src/main/kotlin/rs09/game/interaction/region/wilderness/RoguesCastleListeners.kt +++ b/Server/src/main/kotlin/rs09/game/interaction/region/wilderness/RoguesCastleListeners.kt @@ -12,6 +12,7 @@ import org.rs09.consts.Items import rs09.game.content.global.WeightBasedTable import rs09.game.content.global.WeightedItem import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class RoguesCastleListeners : InteractionListener { @@ -20,13 +21,13 @@ class RoguesCastleListeners : InteractionListener { val FLOOR_2_CHESTS = intArrayOf(38834, 38835) override fun defineListeners() { - on(FLOOR_1_CHESTS, SCENERY, "open"){ player, node -> + on(FLOOR_1_CHESTS, IntType.SCENERY, "open"){ player, node -> val scenery = node.asScenery() openChest(player, scenery) return@on true } - on(FLOOR_1_CHESTS, SCENERY, "search"){player, node -> + on(FLOOR_1_CHESTS, IntType.SCENERY, "search"){player, node -> val scenery = node.asScenery() if(getCharge(scenery) == 0){ sendMessage(player, "This chest has already been looted.") @@ -44,12 +45,12 @@ class RoguesCastleListeners : InteractionListener { return@on true } - on(FLOOR_2_CHESTS, SCENERY, "open"){player, node -> + on(FLOOR_2_CHESTS, IntType.SCENERY, "open"){player, node -> sendMessage(player, "This chest appears to be locked.") return@on true } - on(FLOOR_2_CHESTS, SCENERY, "pick-lock"){player, node -> + on(FLOOR_2_CHESTS, IntType.SCENERY, "pick-lock"){player, node -> val scenery = node.asScenery() if(!inInventory(player, Items.LOCKPICK_1523)){ sendMessage(player, "You need a lockpick in order to attempt this.") @@ -84,7 +85,7 @@ class RoguesCastleListeners : InteractionListener { return@on true } - on(FLOOR_2_CHESTS, SCENERY, "search"){player, node -> + on(FLOOR_2_CHESTS, IntType.SCENERY, "search"){player, node -> val scenery = node.asScenery() if(getCharge(scenery) == 0){ diff --git a/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatSwingHandler.kt b/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatSwingHandler.kt index 32295924a..eb3abb159 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatSwingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/combat/CombatSwingHandler.kt @@ -190,7 +190,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("Should hit: $it") } + return (acc > def).also { if(entity?.username?.toLowerCase() == "test10") SystemLogger.logInfo(this::class.java, "Should hit: $it") } } /** @@ -604,7 +604,7 @@ abstract class CombatSwingHandler(var type: CombatStyle?) { specialHandlers = HashMap() } if (specialHandlers!!.containsKey(itemId)) { - SystemLogger.logErr("Already contained special attack handler for item " + itemId + " - [old=" + specialHandlers!![itemId]!!::class.java.simpleName + ", new=" + handler.javaClass.simpleName + "].") + SystemLogger.logErr(this::class.java, "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 diff --git a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/RangeSwingHandler.kt b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/RangeSwingHandler.kt index b4cc48e13..6512fe11c 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/RangeSwingHandler.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/combat/handlers/RangeSwingHandler.kt @@ -79,7 +79,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("Damage: $it") } + val max = calculateHit(entity, victim, 1.0).also { if(entity?.name?.toLowerCase() == "test10") SystemLogger.logInfo(this::class.java, "Damage: $it") } state.maximumHit = max hit = RandomFunction.random(max + 1) } @@ -110,7 +110,7 @@ open class RangeSwingHandler if (entity is Player) { val rw = RangeWeapon.get(entity.equipment.getNew(3).id) if (rw == null) { - SystemLogger.logErr("Unhandled range weapon used - [item id=" + entity.equipment.getNew(3).id + "].") + SystemLogger.logErr(this::class.java, "Unhandled range weapon used - [item id=" + entity.equipment.getNew(3).id + "].") return } w = Weapon(entity.equipment[3], rw.ammunitionSlot, entity.equipment.getNew(rw.ammunitionSlot)) diff --git a/Server/src/main/kotlin/rs09/game/node/entity/equipment/AvasDevice.kt b/Server/src/main/kotlin/rs09/game/node/entity/equipment/AvasDevice.kt index d9ad9db84..d51191109 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/equipment/AvasDevice.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/equipment/AvasDevice.kt @@ -9,6 +9,7 @@ import core.game.node.entity.player.Player import org.rs09.consts.Items import rs09.game.Event import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.config.ItemConfigParser import rs09.tools.secondsToTicks import rs09.tools.stringtools.colorize @@ -36,7 +37,7 @@ class AvasDevice : InteractionListener, EventHook { player.unhook(this) return@onUnequip true } - on(devices, ITEM, "operate") { player, _ -> + on(devices, IntType.ITEM, "operate") { player, _ -> val attract = !attractEnabled(player) setAttribute(player, ATTRACT_ENABLED, attract) sendMessage( diff --git a/Server/src/main/kotlin/rs09/game/node/entity/equipment/PlayerPeltables.kt b/Server/src/main/kotlin/rs09/game/node/entity/equipment/PlayerPeltables.kt index 799c6ed0e..5ab91c429 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/equipment/PlayerPeltables.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/equipment/PlayerPeltables.kt @@ -12,6 +12,7 @@ import core.game.world.map.path.Pathfinder import core.game.world.update.flag.context.Graphics import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class PlayerPeltables : InteractionListener { @@ -28,7 +29,7 @@ class PlayerPeltables : InteractionListener { onEquip(PELTABLES, ::setPlayerOps) onUnequip(PELTABLES, ::removePlayerOps) - on("pelt", PLAYER, ::handlePeltInteraction) + on("pelt", IntType.PLAYER, ::handlePeltInteraction) onUseWithPlayer(*PELTABLES) {player, used, with -> handlePeltInteraction(player, with, used) } flagInstant() } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/npc/BankerNPC.kt b/Server/src/main/kotlin/rs09/game/node/entity/npc/BankerNPC.kt index 80f365b17..d6fa6944f 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/npc/BankerNPC.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/npc/BankerNPC.kt @@ -11,6 +11,7 @@ import core.game.world.map.Location import core.plugin.Initializable import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.`object`.BankBoothListener /** @@ -26,8 +27,7 @@ class BankerNPC : AbstractNPC, InteractionListener { val SPECIAL_NPC_IDS = intArrayOf( NPCs.SIRSAL_BANKER_4519, NPCs.FADLI_958, NPCs.BANK_TUTOR_4907, NPCs.JADE_4296, - NPCs.EMERALD_BENEDICT_2271, NPCs.OGRESS_BANKER_7049, NPCs.OGRESS_BANKER_7050, - NPCs.ARNOLD_LYDSPOR_3824, + NPCs.OGRESS_BANKER_7049, NPCs.OGRESS_BANKER_7050, NPCs.ARNOLD_LYDSPOR_3824, /* Maximillian Sackville - Near Wilderness bounty-hunter area. */ NPCs.BANKER_6538 @@ -146,12 +146,12 @@ class BankerNPC : AbstractNPC, InteractionListener { } override fun defineListeners() { - on(ALL_BANKER_NPC_IDS, NPC, "bank", handler = Companion::attemptBank) - on(ALL_BANKER_NPC_IDS, NPC, "collect", handler = Companion::attemptCollect) + on(ALL_BANKER_NPC_IDS, IntType.NPC, "bank", handler = Companion::attemptBank) + on(ALL_BANKER_NPC_IDS, IntType.NPC, "collect", handler = Companion::attemptCollect) } override fun defineDestinationOverrides() { - setDest(NPC, ALL_BANKER_NPC_IDS, "bank", "collect", "talk-to", handler = ::provideDestinationOverride) + setDest(IntType.NPC, ALL_BANKER_NPC_IDS, "bank", "collect", "talk-to", handler = ::provideDestinationOverride) } override fun init() { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/npc/GnomeSpiritTreeListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/npc/GnomeSpiritTreeListener.kt index 5d3013152..24b0c61e0 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/npc/GnomeSpiritTreeListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/npc/GnomeSpiritTreeListener.kt @@ -15,6 +15,7 @@ import org.rs09.consts.NPCs import rs09.game.content.dialogue.DialogueFile import rs09.game.content.quest.members.tree.TreeGnomeVillage import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld.Pulser import rs09.tools.END_DIALOGUE @@ -22,11 +23,11 @@ class GnomeSpiritTreeListener: InteractionListener { val spiritTrees = intArrayOf(1317,1293,1294) override fun defineListeners() { - on(spiritTrees, SCENERY, "talk-to"){ player, _ -> + on(spiritTrees, IntType.SCENERY, "talk-to"){ player, _ -> openDialogue(player, GnomeSpiritTreeDialogue(), NPC(NPCs.SPIRIT_TREE_3636)) return@on true } - on(spiritTrees, SCENERY, "teleport"){ player, _ -> + on(spiritTrees, IntType.SCENERY, "teleport"){ player, _ -> openDialogue(player, GnomeSpiritTreeTeleportDialogue(), NPC(NPCs.SPIRIT_TREE_3636)) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/player/graves/GraveController.kt b/Server/src/main/kotlin/rs09/game/node/entity/player/graves/GraveController.kt index 153acd652..85171079d 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/player/graves/GraveController.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/player/graves/GraveController.kt @@ -17,6 +17,7 @@ import org.json.simple.JSONObject import org.rs09.consts.Items import rs09.ServerStore import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.command.Privilege import rs09.game.world.GameWorld import rs09.game.world.repository.Repository @@ -28,10 +29,10 @@ import kotlin.math.min class GraveController : PersistWorld, TickListener, InteractionListener, Commands { override fun defineListeners() { - on(GraveType.ids, NPC, "read", handler = this::onGraveReadOption) - on(GraveType.ids, NPC, "bless", handler = this::onGraveBlessed) - on(GraveType.ids, NPC, "repair", handler = this::onGraveRepaired) - on(GraveType.ids, NPC, "demolish", handler = this::onGraveDemolished) + on(GraveType.ids, IntType.NPC, "read", handler = this::onGraveReadOption) + on(GraveType.ids, IntType.NPC, "bless", handler = this::onGraveBlessed) + on(GraveType.ids, IntType.NPC, "repair", handler = this::onGraveRepaired) + on(GraveType.ids, IntType.NPC, "demolish", handler = this::onGraveDemolished) } override fun defineCommands() { @@ -84,8 +85,8 @@ class GraveController : PersistWorld, TickListener, InteractionListener, Command openInterface(player, 266) setInterfaceText(player, grave.retrieveFormattedText(), 266, 23) + sendMessage(player, "It looks like it'll survive another ${grave.getFormattedTimeRemaining()}.") if (player.details.uid == grave.ownerUid) { - sendMessage(player, "It looks like it'll survive another ${grave.getFormattedTimeRemaining()}.") sendMessage(player, "Isn't there something a bit odd about reading your own gravestone?") } return true diff --git a/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/LoginParser.kt b/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/LoginParser.kt index f44e68f5b..8bc079002 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/LoginParser.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/LoginParser.kt @@ -4,37 +4,21 @@ import api.LoginListener import core.game.node.entity.player.Player import core.game.node.entity.player.info.PlayerDetails import core.game.node.entity.player.info.login.LoginConfiguration -import core.game.node.entity.player.info.login.LoginType import core.game.node.entity.player.info.login.PlayerParser import core.game.node.entity.player.info.login.Response import core.game.system.SystemManager import core.game.system.monitor.PlayerMonitor import core.game.system.task.Pulse -import core.net.amsc.MSPacketRepository -import core.net.amsc.ManagementServerState -import core.net.amsc.WorldCommunicator import rs09.auth.AuthResponse import rs09.game.world.GameWorld import rs09.game.world.GameWorld.loginListeners import rs09.game.world.repository.Repository -import java.util.concurrent.locks.Lock -import java.util.concurrent.locks.ReentrantLock import java.util.function.Consumer /** * Parses the login of a player. */ -class LoginParser(val details: PlayerDetails, private val type: LoginType) { - companion object { - var monkeywrench = true - } - /** - * The player in the game, used for reconnect login type. - */ - private var gamePlayer: Player? = null - - val timeStamp: Int = GameWorld.ticks - +class LoginParser(val details: PlayerDetails) { /** * Initializes the player. * @param player The player. @@ -56,7 +40,6 @@ class LoginParser(val details: PlayerDetails, private val type: LoginType) { Repository.playerNames.remove(player.name) flag(AuthResponse.ErrorLoadingProfile) } - //Repository.getPlayerNames().put(player.getName(), player); GameWorld.Pulser.submit(object : Pulse(1) { override fun pulse(): Boolean { try { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaveParser.kt b/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaveParser.kt index 2e677bb3a..c63710b73 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaveParser.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaveParser.kt @@ -44,7 +44,7 @@ class PlayerSaveParser(val player: Player) { { reader = FileReader(JSON) } - reader ?: SystemLogger.logWarn("Couldn't find save file for ${player.name}, or save is corrupted.").also { read = false } + reader ?: SystemLogger.logWarn(this::class.java, "Couldn't find save file for ${player.name}, or save is corrupted.").also { read = false } if (read) { saveFile = parser.parse(reader) as JSONObject } @@ -119,7 +119,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("Invalid data type for key: $key in PlayerSaveParser.kt Line 115") } + else -> null.also { SystemLogger.logWarn(this::class.java, "Invalid data type for key: $key in PlayerSaveParser.kt Line 115") } }) } } else { @@ -178,7 +178,7 @@ class PlayerSaveParser(val player: Player) { fun parseStates() { player.states.clear() - SystemLogger.logErr("Parsing states") + SystemLogger.logErr(this::class.java, "Parsing states") if (saveFile!!.containsKey("states")) { val states: JSONArray = saveFile!!["states"] as JSONArray for (state in states) { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaver.kt b/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaver.kt index da39490e5..7a2cbebf1 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaver.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/player/info/login/PlayerSaver.kt @@ -62,7 +62,7 @@ class PlayerSaver (val player: Player){ val manager = ScriptEngineManager() val scriptEngine = manager.getEngineByName("JavaScript") if (scriptEngine == null) { - SystemLogger.logErr("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!") + 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()) @@ -106,7 +106,7 @@ class PlayerSaver (val player: Player){ is Short -> "short" is String -> "str" is Byte -> "byte" - else -> "null".also { SystemLogger.logWarn("Invalid attribute type for key: $key in PlayerSaver.kt Line 115") } + else -> "null".also { SystemLogger.logWarn(this::class.java, "Invalid attribute type for key: $key in PlayerSaver.kt Line 115") } } attr.put("type",type) attr.put("key",key) diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/AttackListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/AttackListener.kt index 0f00f1e7c..65698fd42 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/AttackListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/AttackListener.kt @@ -2,10 +2,11 @@ package rs09.game.node.entity.skill import core.game.node.entity.combat.CombatStyle import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class AttackListener : InteractionListener { override fun defineListeners() { - on(NPC, "attack"){player, npc -> + on(IntType.NPC, "attack"){player, npc -> //Makes sure player uses correct attack styles for lumbridge dummies if (npc.id == 4474 && player.getSwingHandler(false).type != CombatStyle.MAGIC) { player.sendMessage("You can only attack this with magic.") diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/construction/decoration/chapel/BurnerListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/construction/decoration/chapel/BurnerListener.kt index 176881a95..a0702fe68 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/construction/decoration/chapel/BurnerListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/construction/decoration/chapel/BurnerListener.kt @@ -6,6 +6,7 @@ import core.game.node.item.Item import core.game.world.update.flag.context.Animation import core.tools.RandomFunction import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles the lighting of the torches of the Chapel. @@ -16,7 +17,7 @@ class BurnerListener : InteractionListener { val IDs = intArrayOf(13202,13203,13204,13205,13206,13207,13208,13209,13210,13211,13212,13213) override fun defineListeners() { - on(IDs,SCENERY,"light"){ player, node -> + on(IDs, IntType.SCENERY, "light"){ player, node -> if (player.ironmanManager.checkRestriction() && !player.houseManager.isInHouse(player)) { return@on true } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/construction/decoration/questhall/MountedGlory.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/construction/decoration/questhall/MountedGlory.kt index 8c3bfc7b6..7a2f02287 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/construction/decoration/questhall/MountedGlory.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/construction/decoration/questhall/MountedGlory.kt @@ -8,6 +8,7 @@ import core.game.world.map.Location import core.game.world.update.flag.context.Animation import core.game.world.update.flag.context.Graphics import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import java.util.concurrent.Executors import java.util.concurrent.TimeUnit @@ -23,22 +24,22 @@ class MountedGlory : InteractionListener { ) override fun defineListeners() { - on(MOUNTED_GLORY, SCENERY,"Edgeville") { player, _ -> + on(MOUNTED_GLORY, IntType.SCENERY, "Edgeville") { player, _ -> mountedGloryTeleport(player,0) return@on true } - on(MOUNTED_GLORY, SCENERY,"Karamja") { player, _ -> + on(MOUNTED_GLORY, IntType.SCENERY, "Karamja") { player, _ -> mountedGloryTeleport(player,1) return@on true } - on(MOUNTED_GLORY, SCENERY,"Draynor Village") { player, _ -> + on(MOUNTED_GLORY, IntType.SCENERY, "Draynor Village") { player, _ -> mountedGloryTeleport(player,2) return@on true } - on(MOUNTED_GLORY, SCENERY,"Al Kharid") { player, _ -> + on(MOUNTED_GLORY, IntType.SCENERY, "Al Kharid") { player, _ -> mountedGloryTeleport(player,3) return@on true } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/DoughMakingListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/DoughMakingListener.kt index 34f1463a3..3f979e7a0 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/DoughMakingListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/DoughMakingListener.kt @@ -7,6 +7,7 @@ import core.game.node.item.Item import org.rs09.consts.Items import rs09.game.content.dialogue.DialogueFile import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class DoughMakingListener : InteractionListener { companion object { @@ -19,7 +20,7 @@ class DoughMakingListener : InteractionListener { override fun defineListeners() { onUseWith( - ITEM, + IntType.ITEM, FULL_WATER_CONTAINERS_TO_EMPTY_CONTAINERS.keys.toIntArray(), Items.POT_OF_FLOUR_1933 ) { player, waterContainer, flourContainer -> diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/SaucyKebabListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/SaucyKebabListener.kt index 051ce9378..ac32cc689 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/SaucyKebabListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/cooking/SaucyKebabListener.kt @@ -5,6 +5,7 @@ import api.* import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** @@ -20,7 +21,7 @@ class SaucyKebabListener : InteractionListener { ) override fun defineListeners() { - onUseWith(ITEM, kebabArr, sauce) { player, used, with -> + onUseWith(IntType.ITEM, kebabArr, sauce) { player, used, with -> if(removeItem(player, used.asItem()) && removeItem(player, with.asItem())) { return@onUseWith addItem(player, Items.SUPER_KEBAB_4608) } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/lightsources/LightSourceExtinguisher.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/lightsources/LightSourceExtinguisher.kt index 33fecf75a..41c17cc12 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/lightsources/LightSourceExtinguisher.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/lightsources/LightSourceExtinguisher.kt @@ -28,7 +28,7 @@ class LightSourceExtinguisher : OptionHandler(){ val lightSource = LightSources.forId(node.id) - lightSource ?: return false.also { SystemLogger.logWarn("UNHANDLED EXTINGUISH OPTION: ID = ${node.id}") } + lightSource ?: return false.also { SystemLogger.logWarn(this::class.java, "UNHANDLED EXTINGUISH OPTION: ID = ${node.id}") } player.inventory.replace(node.asItem(), Item(lightSource.fullID)) return true diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/silver/SilverCraftingListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/silver/SilverCraftingListener.kt index 4a29759b8..63979f418 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/silver/SilverCraftingListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/silver/SilverCraftingListener.kt @@ -7,6 +7,7 @@ import org.rs09.consts.Components import org.rs09.consts.Items import org.rs09.consts.Scenery import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InterfaceListener import core.game.node.scenery.Scenery as CoreScenery @@ -87,7 +88,7 @@ class SilverCraftingListener : InterfaceListener, InteractionListener { } override fun defineListeners() { - onUseWith(SCENERY, Items.SILVER_BAR_2355, *FURNACES) { player, _, with -> + onUseWith(IntType.SCENERY, Items.SILVER_BAR_2355, *FURNACES) { player, _, with -> setAttribute(player, ATTRIBUTE_FURNACE_ID, with) openInterface(player, Components.CRAFTING_SILVER_CASTING_438) return@onUseWith true diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/silver/SilverStringingListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/silver/SilverStringingListener.kt index 78d665135..1cdc72288 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/silver/SilverStringingListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/crafting/silver/SilverStringingListener.kt @@ -6,6 +6,7 @@ import core.game.node.Node import core.game.node.entity.player.Player import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * Handles ball of wool <-> stringable silver items interaction. @@ -31,6 +32,6 @@ class SilverStringingListener : InteractionListener { } override fun defineListeners() { - onUseWith(ITEM, Items.BALL_OF_WOOL_1759, *STRINGABLE_PRODUCTS, handler = ::stringSilverProduct) + onUseWith(IntType.ITEM, Items.BALL_OF_WOOL_1759, *STRINGABLE_PRODUCTS, handler = ::stringSilverProduct) } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/CompostBin.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/CompostBin.kt index bb6445952..4f7636ed3 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/CompostBin.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/CompostBin.kt @@ -131,7 +131,7 @@ class CompostBin(val player: Player, val bin: CompostBins) { } if (isClosed) player.varpManager.get(bin.varpIndex).setVarbit(bin.varpOffest + 6, 1) } - SystemLogger.logAlert("Sending " + player.varpManager.get(bin.varpIndex).getValue()) + SystemLogger.logAlert(this::class.java, "Sending " + player.varpManager.get(bin.varpIndex).getValue()) player.varpManager.get(bin.varpIndex).send(player) } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/FarmerPayOptionHandler.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/FarmerPayOptionHandler.kt index b957769d9..623fe867f 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/FarmerPayOptionHandler.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/FarmerPayOptionHandler.kt @@ -3,15 +3,16 @@ package rs09.game.node.entity.skill.farming import core.game.node.Node import core.game.node.entity.player.Player import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class FarmerPayOptionHandler : InteractionListener { override fun defineListeners() { - on(NPC,"pay","pay (north)","pay (north-west)"){player,node -> + on(IntType.NPC,"pay","pay (north)","pay (north-west)"){player,node -> return@on attemptPay(player,node,0) } - on(NPC,"pay (south)","pay (south-east)"){player,node -> + on(IntType.NPC,"pay (south)","pay (south-east)"){player,node -> return@on attemptPay(player,node,1) } } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/HealthChecker.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/HealthChecker.kt index 6c0c840b7..59dd3792d 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/HealthChecker.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/HealthChecker.kt @@ -39,7 +39,7 @@ class HealthChecker : OptionHandler(){ PatchType.FRUIT_TREE -> patch.setCurrentState(patch.getCurrentState() - 14) PatchType.BUSH -> patch.setCurrentState(patch.plantable!!.value + patch.plantable!!.stages + 4) PatchType.CACTUS -> patch.setCurrentState(patch.plantable!!.value + patch.plantable!!.stages + 3) - else -> SystemLogger.logErr("Unreachable patch type from when(type) switch in HealthChecker.kt line 36") + else -> SystemLogger.logErr(this::class.java,"Unreachable patch type from when(type) switch in HealthChecker.kt line 36") } if(type == PatchType.FRUIT_TREE){ diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/LeprechaunNoter.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/LeprechaunNoter.kt index 2c8124cfc..ba26461b0 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/LeprechaunNoter.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/LeprechaunNoter.kt @@ -7,6 +7,7 @@ import core.game.node.item.Item import core.plugin.Initializable import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class LeprechaunNoter : InteractionListener { @@ -14,7 +15,7 @@ class LeprechaunNoter : InteractionListener { val LEPRECHAUNS = intArrayOf(NPCs.TOOL_LEPRECHAUN_3021,NPCs.GOTH_LEPRECHAUN_8000,NPCs.TOOL_LEPRECHAUN_4965,NPCs.TECLYN_2861) override fun defineListeners() { - onUseWith(NPC,CROPS,*LEPRECHAUNS){player, used, with -> + onUseWith(IntType.NPC,CROPS,*LEPRECHAUNS){player, used, with -> val usedItem = used.asItem() val npc = with.asNpc() val expr = when(npc.id){ diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/Patch.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/Patch.kt index a9c33c7b8..bf75ccd7c 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/Patch.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/farming/Patch.kt @@ -106,7 +106,7 @@ class Patch(val player: Player, val patch: FarmingPatch, var plantable: Plantabl PatchType.FRUIT_TREE -> player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,plantable!!.value + plantable!!.stages + 20) PatchType.BUSH -> player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset,250 + (plantable!!.ordinal - Plantable.REDBERRY_SEED.ordinal)) PatchType.CACTUS -> player.varpManager.get(patch.varpIndex).setVarbit(patch.varpOffset, 31) - else -> SystemLogger.logWarn("Invalid setting of isCheckHealth for patch type: " + patch.type.name) + else -> SystemLogger.logWarn(this::class.java, "Invalid setting of isCheckHealth for patch type: " + patch.type.name) } } else { when(patch.type){ diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/fletching/FletchingListeners.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/fletching/FletchingListeners.kt index 4867fbdf8..ae74179ae 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/fletching/FletchingListeners.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/fletching/FletchingListeners.kt @@ -20,6 +20,7 @@ import org.rs09.consts.Items.STRIPY_FEATHER_10087 import org.rs09.consts.Items.YELLOW_FEATHER_10090 import rs09.game.content.dialogue.SkillDialogueHandler import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class FletchingListeners : InteractionListener { @@ -39,7 +40,7 @@ class FletchingListeners : InteractionListener { override fun defineListeners() { - onUseWith(ITEM,STRINGS,*UNSTRUNG_BOWS){player,string,bow -> + onUseWith(IntType.ITEM,STRINGS,*UNSTRUNG_BOWS){player,string,bow -> val enum = Fletching.stringMap[bow.id] ?: return@onUseWith false if(enum.string != string.id){ player.sendMessage("That's not the right kind of string for this.") @@ -60,7 +61,7 @@ class FletchingListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,ARROW_SHAFT,*FEATHERS){player,shaft,feather -> + onUseWith(IntType.ITEM,ARROW_SHAFT,*FEATHERS){player,shaft,feather -> val handler: SkillDialogueHandler = object : SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, Item(FLETCHED_SHAFT)) { override fun create(amount: Int, index: Int) { @@ -76,7 +77,7 @@ class FletchingListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,FLETCHED_SHAFT,*UNFINISHED_ARROWS){player,shaft,unfinished -> + onUseWith(IntType.ITEM,FLETCHED_SHAFT,*UNFINISHED_ARROWS){player,shaft,unfinished -> val head = Fletching.arrowHeadMap[unfinished.id] ?: return@onUseWith false val handler: SkillDialogueHandler = object : SkillDialogueHandler(player, SkillDialogue.ONE_OPTION, head.getFinished()) { @@ -93,7 +94,7 @@ class FletchingListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,MITHRIL_BOLT,MITH_GRAPPLE_TIP){player,bolt,tip -> + onUseWith(IntType.ITEM,MITHRIL_BOLT,MITH_GRAPPLE_TIP){player,bolt,tip -> if(player.skills.getLevel(Skills.FLETCHING) < 59){ player.sendMessage("You need a fletching level of 59 to make this.") return@onUseWith true @@ -104,7 +105,7 @@ class FletchingListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,ROPE,MITH_GRAPPLE){player,rope,grapple -> + onUseWith(IntType.ITEM,ROPE,MITH_GRAPPLE){player,rope,grapple -> if(player.skills.getLevel(Skills.FLETCHING) < 59){ player.sendMessage("You need a fletching level of 59 to make this.") return@onUseWith true @@ -115,7 +116,7 @@ class FletchingListeners : InteractionListener { return@onUseWith true } - onUseWith(ITEM,LIMBIDs,*STOCKIDs){player, limb, stock -> + onUseWith(IntType.ITEM,LIMBIDs,*STOCKIDs){player, limb, stock -> val limbEnum = Fletching.limbMap[stock.id] ?: return@onUseWith false if(limbEnum.limb != limb.id){ player.sendMessage("That's not the right limb to attach to that stock.") diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionListeners.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionListeners.kt index 2e355d956..37b941a2a 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionListeners.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/GatheringSkillOptionListeners.kt @@ -9,6 +9,7 @@ import core.game.node.entity.skill.gather.woodcutting.WoodcuttingSkillPulse import org.rs09.consts.NPCs import rs09.game.content.dialogue.KjallakOnChopDialogue import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.node.entity.skill.gather.mining.MiningSkillPulse class GatheringSkillOptionListeners : InteractionListener { @@ -16,7 +17,7 @@ class GatheringSkillOptionListeners : InteractionListener { val ETCETERIA_REGION = 10300 override fun defineListeners() { - on(SCENERY,"chop-down","chop down","cut down","chop"){ player, node -> + on(IntType.SCENERY,"chop-down","chop down","cut down","chop"){ player, node -> if(player.location.regionId == ETCETERIA_REGION){ player.dialogueInterpreter.open(KjallakOnChopDialogue(), NPC(NPCs.CARPENTER_KJALLAK_3916)) return@on true @@ -25,17 +26,17 @@ class GatheringSkillOptionListeners : InteractionListener { return@on true } - on(SCENERY,"mine"){ player, node -> + on(IntType.SCENERY,"mine"){ player, node -> player.pulseManager.run(MiningSkillPulse(player, node.asScenery())) return@on true } - on(NPC,"net"){player,node -> return@on fish(player,node,"net")} - on(NPC,"lure"){player,node -> return@on fish(player,node,"lure")} - on(NPC,"bait"){player,node -> return@on fish(player,node,"bait")} - on(NPC,"harpoon"){player,node -> return@on fish(player,node,"harpoon")} - on(NPC,"cage"){player,node -> return@on fish(player,node,"cage")} - on(NPC,"fish"){player, node -> return@on fish(player,node,"fish") } + on(IntType.NPC,"net"){player,node -> return@on fish(player,node,"net")} + on(IntType.NPC,"lure"){player,node -> return@on fish(player,node,"lure")} + on(IntType.NPC,"bait"){player,node -> return@on fish(player,node,"bait")} + on(IntType.NPC,"harpoon"){player,node -> return@on fish(player,node,"harpoon")} + on(IntType.NPC,"cage"){player,node -> return@on fish(player,node,"cage")} + on(IntType.NPC,"fish"){player, node -> return@on fish(player,node,"fish") } } fun fish(player: Player, node: Node, opt: String): Boolean{ diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishInteractionListeners.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishInteractionListeners.kt index d016f5e6f..e49461f32 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishInteractionListeners.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/fishing/barbfishing/BarbFishInteractionListeners.kt @@ -2,11 +2,12 @@ package rs09.game.node.entity.skill.gather.fishing.barbfishing import core.game.node.item.Item import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class BarbFishInteractionListeners : InteractionListener { override fun defineListeners() { - on(25268,SCENERY,"search"){ player, _ -> + on(25268, IntType.SCENERY, "search"){ player, _ -> if(player.getAttribute("barbtraining:fishing",false) == true){ if(!player.inventory.containsItem(Item(11323))){ player.inventory.add(Item(11323)) @@ -20,7 +21,7 @@ class BarbFishInteractionListeners : InteractionListener { return@on true } - on(1176,NPC,"fish"){player,_ -> + on(1176, IntType.NPC, "fish"){player,_ -> player.pulseManager.run(BarbFishingPulse(player)) player.sendMessage("You attempt to catch a fish...") return@on true diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/ProspectListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/ProspectListener.kt index 1f8216ce5..118c73b70 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/ProspectListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/gather/mining/ProspectListener.kt @@ -5,6 +5,7 @@ import core.game.node.entity.skill.gather.mining.MiningNode import core.game.node.item.Item import core.game.system.task.Pulse import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType /** * @author: bushtail @@ -13,7 +14,7 @@ import rs09.game.interaction.InteractionListener class ProspectListener : InteractionListener { override fun defineListeners() { - on(SCENERY, "prospect") { player, node -> + on(IntType.SCENERY, "prospect") { player, node -> val rock = MiningNode.forId(node.asScenery().id) if(rock == null) { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/pitfall/HunterPitfall.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/pitfall/HunterPitfall.kt index c98e212b0..9d6cca769 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/pitfall/HunterPitfall.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/pitfall/HunterPitfall.kt @@ -26,6 +26,7 @@ import core.tools.RandomFunction import org.rs09.consts.Items import org.rs09.consts.NPCs import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld /*@Initializable @@ -152,7 +153,7 @@ val KYATT_PIT = 19233 class PitfallListeners : InteractionListener { override fun defineListeners() { - setDest(SCENERY, intArrayOf(PIT, SPIKED_PIT, LARUPIA_PIT, GRAAHK_PIT, KYATT_PIT), "trap", "jump", "dismantle") { player, node -> + setDest(IntType.SCENERY, intArrayOf(PIT, SPIKED_PIT, LARUPIA_PIT, GRAAHK_PIT, KYATT_PIT), "trap", "jump", "dismantle") { player, node -> val pit = node as Scenery val src = player.getLocation() var dst = pit.getLocation() @@ -170,7 +171,7 @@ class PitfallListeners : InteractionListener { } return@setDest dst } - on(PIT, SCENERY, "trap") { player, node -> + on(PIT, IntType.SCENERY, "trap") { player, node -> val pit = node as Scenery; // TODO: check hunter level, remove logs if(player.skills.getLevel(Skills.HUNTER) < 31) { @@ -206,7 +207,7 @@ class PitfallListeners : InteractionListener { GameWorld.Pulser.submit(collapsePulse) return@on true } - on(SPIKED_PIT, SCENERY, "jump") { player, node -> + on(SPIKED_PIT, IntType.SCENERY, "jump") { player, node -> val pit = node as Scenery; val src = player.getLocation() val dir = pitJumpSpots(pit.getLocation())!![src] @@ -245,26 +246,26 @@ class PitfallListeners : InteractionListener { } return@on true } - on(SPIKED_PIT, SCENERY, "dismantle") { player, node -> + on(SPIKED_PIT, IntType.SCENERY, "dismantle") { player, node -> val pit = node as Scenery; player.removeAttribute("pitfall:timestamp:${pit.location.x}:${pit.location.y}") player.incrementAttribute("pitfall:count", -1) setPitState(player, pit.location, 0) return@on true } - on(LARUPIA_PIT, SCENERY, "dismantle") { player, node -> + on(LARUPIA_PIT, IntType.SCENERY, "dismantle") { player, node -> lootCorpse(player, node as Scenery, 180.0, Items.LARUPIA_FUR_10095, Items.TATTY_LARUPIA_FUR_10093) return@on true } - on(GRAAHK_PIT, SCENERY, "dismantle") { player, node -> + on(GRAAHK_PIT, IntType.SCENERY, "dismantle") { player, node -> lootCorpse(player, node as Scenery, 240.0, Items.GRAAHK_FUR_10099, Items.TATTY_GRAAHK_FUR_10097) return@on true } - on(KYATT_PIT, SCENERY, "dismantle") { player, node -> + on(KYATT_PIT, IntType.SCENERY, "dismantle") { player, node -> lootCorpse(player, node as Scenery, 300.0, Items.KYATT_FUR_10103, Items.TATTY_KYATT_FUR_10101) return@on true } - on(BEAST_IDS, NPC, "tease") { player, node -> + on(BEAST_IDS, IntType.NPC, "tease") { player, node -> val entity = node as Entity val hunterReq = HUNTER_REQS[entity.name]!! if(player.skills.getLevel(Skills.HUNTER) < hunterReq) { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/tracking/HunterTracking.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/tracking/HunterTracking.kt index d888c6315..d9e42c845 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/tracking/HunterTracking.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/hunter/tracking/HunterTracking.kt @@ -50,7 +50,7 @@ abstract class HunterTracking : OptionHandler(){ val trail = player.getAttribute(attribute, ArrayList()) val initialTrail = getInitialTrail(startobj) if(initialTrail == null) { - SystemLogger.logWarn("UNHANDLED STARTING OBJECT FOR HUNTER TRACKING $startobj") + SystemLogger.logWarn(this::class.java, "UNHANDLED STARTING OBJECT FOR HUNTER TRACKING $startobj") return } trail.add(initialTrail) diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/magic/SpellListeners.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/magic/SpellListeners.kt index 36032a7ea..27af60b4c 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/magic/SpellListeners.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/magic/SpellListeners.kt @@ -18,12 +18,12 @@ object SpellListeners { } fun get(spellID: Int, type: Int, book: String): ((Player,Node?) -> Unit)?{ - SystemLogger.logInfo("Getting $book:$spellID:$type") + SystemLogger.logInfo(this::class.java, "Getting $book:$spellID:$type") return castMap["$book:$spellID:$type"] } fun get(spellID: Int, type: Int, id: Int, book: String): ((Player,Node?) -> Unit)?{ - SystemLogger.logInfo("Getting $book:$spellID:$type:$id") + SystemLogger.logInfo(this::class.java, "Getting $book:$spellID:$type:$id") return castMap["$book:$spellID:$type:$id"] } diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/magic/SpellTablets.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/magic/SpellTablets.kt index ded43db37..0164fded1 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/magic/SpellTablets.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/magic/SpellTablets.kt @@ -5,6 +5,7 @@ import core.game.node.item.Item import core.game.world.update.flag.context.Animation import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.node.entity.skill.magic.spellconsts.Modern class SpellTablets : InteractionListener { @@ -12,14 +13,14 @@ class SpellTablets : InteractionListener { val B2B_TABLET = Items.BONES_TO_BANANAS_8014 override fun defineListeners() { - on(B2B_TABLET,ITEM,"break"){player, node -> + on(B2B_TABLET, IntType.ITEM, "break"){player, node -> breakTablet(player) SpellListeners.run(Modern.BONES_TO_BANANAS,SpellListener.NONE,"modern",player) player.inventory.remove(Item(node.id)) return@on true } - on(B2P_TABLET,ITEM,"break"){player, node -> + on(B2P_TABLET, IntType.ITEM, "break"){player, node -> breakTablet(player) SpellListeners.run(Modern.BONES_TO_PEACHES,SpellListener.NONE,"modern",player) player.inventory.remove(Item(node.id)) diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/runecrafting/abyss/AbyssPlugin.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/runecrafting/abyss/AbyssPlugin.kt index 2f4ba68e0..64b41b79c 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/runecrafting/abyss/AbyssPlugin.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/runecrafting/abyss/AbyssPlugin.kt @@ -26,6 +26,7 @@ import org.rs09.consts.Animations import org.rs09.consts.Graphics as Gfx import org.rs09.consts.Scenery as Sceneries import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.world.GameWorld import kotlin.math.cos import kotlin.math.sin @@ -43,24 +44,24 @@ class AbyssPlugin : InteractionListener { definePlugin(AbyssalNPC()) definePlugin(DarkMageDialogue()) definePlugin(ZamorakMageDialogue()) - on(NPCs.MAGE_OF_ZAMORAK_2259, NPC, "teleport"){ player, node -> + on(NPCs.MAGE_OF_ZAMORAK_2259, IntType.NPC, "teleport"){ player, node -> teleport(player, node as NPC) return@on true } - on(NPCs.DARK_MAGE_2262, NPC, "repair-pouches"){ player, node -> + on(NPCs.DARK_MAGE_2262, IntType.NPC, "repair-pouches"){ player, node -> player.dialogueInterpreter.open(node.id, node, true) return@on true } - on(SCENERY, "exit-through"){ player, node -> + on(IntType.SCENERY, "exit-through"){ player, node -> val altar = Altar.forObject(node as Scenery) altar?.enterRift(player) return@on true } - on(Sceneries.PASSAGE_7154, SCENERY, "go-through",){ player, node -> + on(Sceneries.PASSAGE_7154, IntType.SCENERY, "go-through",){ player, node -> player.properties.teleportLocation = innerRing(node) return@on true } - on(Sceneries.ROCK_7158, SCENERY, "mine"){ player, node -> + on(Sceneries.ROCK_7158, IntType.SCENERY, "mine"){ player, node -> val tool: SkillingTool? = getTool(player, true) if (tool == null) { sendMessage(player, "You need a pickaxe in order to do that.") @@ -79,7 +80,7 @@ class AbyssPlugin : InteractionListener { ) ) } - on(Sceneries.TENDRILS_7161, SCENERY, "chop"){ player, node -> + on(Sceneries.TENDRILS_7161, IntType.SCENERY, "chop"){ player, node -> val tool: SkillingTool? = getTool(player, false) if (tool == null) { sendMessage(player, "You need an axe in order to do that.") @@ -98,7 +99,7 @@ class AbyssPlugin : InteractionListener { ) ) } - on(Sceneries.BOIL_7165, SCENERY, "burn-down"){ player, node -> + on(Sceneries.BOIL_7165, IntType.SCENERY, "burn-down"){ player, node -> if (!inInventory(player, Items.TINDERBOX_590)) { sendMessage(player, "You don't have a tinderbox to burn it.") return@on true @@ -118,7 +119,7 @@ class AbyssPlugin : InteractionListener { ) ) } - on(Sceneries.EYES_7168, SCENERY, "distract"){ player, node -> + on(Sceneries.EYES_7168, IntType.SCENERY, "distract"){ player, node -> val distractEmote = Animation(distractEmotes[RandomFunction.random(0,distractEmotes.size)]) return@on handleObstacle( node, @@ -133,7 +134,7 @@ class AbyssPlugin : InteractionListener { ) ) } - on(Sceneries.GAP_7164, SCENERY, "squeeze-through"){ player, node -> + on(Sceneries.GAP_7164, IntType.SCENERY, "squeeze-through"){ player, node -> return@on handleObstacle( node, player, @@ -254,7 +255,7 @@ class AbyssPlugin : InteractionListener { const val BURN_PROGRESS = 16 const val DISTRACT_PROGRESS = 18 fun handleObstacle(obstacle: Node, player: Player, skill: Int, varbitVal: Int?, animation: Animation, messages: Array): Boolean { - logInfo("handled abyss ${obstacle.name}") + logInfo(this::class.java, "handled abyss ${obstacle.name}") player.lock() player.animate(animation) GameWorld.Pulser.submit(object : Pulse(1, player) { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/skillcapeperks/SkillcapeEquipmentPlugin.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/skillcapeperks/SkillcapeEquipmentPlugin.kt index c7941654f..8505f9aac 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/skillcapeperks/SkillcapeEquipmentPlugin.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/skillcapeperks/SkillcapeEquipmentPlugin.kt @@ -1,6 +1,7 @@ package rs09.game.node.entity.skill.skillcapeperks import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType class SkillcapeEquipmentPlugin : InteractionListener { override fun defineListeners() { diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/summoning/CarvedEvilTurnipListener.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/summoning/CarvedEvilTurnipListener.kt index d7935e079..1c7f69699 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/summoning/CarvedEvilTurnipListener.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/summoning/CarvedEvilTurnipListener.kt @@ -1,6 +1,7 @@ import api.* import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import core.tools.RandomFunction class CarvedEvilTurnipListener : InteractionListener { @@ -9,7 +10,7 @@ class CarvedEvilTurnipListener : InteractionListener { val carvedEvilTurnip = Items.CARVED_EVIL_TURNIP_12153 override fun defineListeners() { - onUseWith(ITEM, evilTurnip, knife) { player, used, with -> + onUseWith(IntType.ITEM, evilTurnip, knife) { player, used, with -> if(removeItem(player, used.asItem())) { sendMessage(player, "You carve a scary face into the evil turnip.") sendMessage(player, "Wooo! It's enough to give you nightmares.") diff --git a/Server/src/main/kotlin/rs09/game/node/entity/skill/thieving/ThievingListeners.kt b/Server/src/main/kotlin/rs09/game/node/entity/skill/thieving/ThievingListeners.kt index 215c0b1ea..e84815efc 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/skill/thieving/ThievingListeners.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/skill/thieving/ThievingListeners.kt @@ -10,6 +10,7 @@ import core.game.world.update.flag.context.Animation import core.tools.RandomFunction import org.rs09.consts.Items import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.system.SystemLogger import rs09.tools.secondsToTicks @@ -21,10 +22,10 @@ class ThievingListeners : InteractionListener { override fun defineListeners() { - on(NPC,"pickpocket","pick-pocket"){player, node -> + on(IntType.NPC,"pickpocket","pick-pocket"){player, node -> val pickpocketData = Pickpockets.forID(node.id) ?: return@on false var successMod = 0 - SystemLogger.logInfo(pickpocketData.table.toString()) + SystemLogger.logInfo(this::class.java, pickpocketData.table.toString()) if(player.inCombat()){ player.sendMessage("You can't pickpocket while in combat.") diff --git a/Server/src/main/kotlin/rs09/game/node/entity/state/newsys/states/FarmingState.kt b/Server/src/main/kotlin/rs09/game/node/entity/state/newsys/states/FarmingState.kt index c785b9712..02abb37af 100644 --- a/Server/src/main/kotlin/rs09/game/node/entity/state/newsys/states/FarmingState.kt +++ b/Server/src/main/kotlin/rs09/game/node/entity/state/newsys/states/FarmingState.kt @@ -73,7 +73,7 @@ class FarmingState(player: Player? = null) : State(player) { val cBin = CompostBins.values()[binOrdinal] val b = cBin.getBinForPlayer(player) b.parse(bin["binData"] as JSONObject) - SystemLogger.logErr("bin size " + binMap.size) + SystemLogger.logErr(this::class.java, "bin size " + binMap.size) } } if(_data.containsKey("farming-patches")){ @@ -104,7 +104,7 @@ class FarmingState(player: Player? = null) : State(player) { if((patch.currentGrowthStage < patch.plantable?.stages ?: 0) && !patch.isWeedy()){ val startTime = (patch.nextGrowth - TimeUnit.MINUTES.toMillis(patch.patch.type.stageGrowthTime * (patch.currentGrowthStage + 1).toLong())) var expectedStage = Math.floor((System.currentTimeMillis() - startTime.toDouble()) / TimeUnit.MINUTES.toMillis(patch.patch.type.stageGrowthTime.toLong())).toInt() - SystemLogger.logErr("$expectedStage $startTime ${System.currentTimeMillis()}") + SystemLogger.logErr(this::class.java, "$expectedStage $startTime ${System.currentTimeMillis()}") if(!patchDiseased && !patchDead) { if (expectedStage > patch.plantable?.stages ?: 0) { diff --git a/Server/src/main/kotlin/rs09/game/system/SystemLogger.kt b/Server/src/main/kotlin/rs09/game/system/SystemLogger.kt index aec2726d6..4ad223b2b 100644 --- a/Server/src/main/kotlin/rs09/game/system/SystemLogger.kt +++ b/Server/src/main/kotlin/rs09/game/system/SystemLogger.kt @@ -43,9 +43,9 @@ object SystemLogger { } @JvmStatic - fun logInfo(vararg messages: String){ + fun logInfo(clazz: Class<*>, vararg messages: String){ for(m in messages){ - val msg = "${getTime()}: [INFO] $m" + val msg = "${getTime()}: [${clazz.simpleName}] $m" if(m.isNotBlank()) { t.println(msg) } @@ -53,32 +53,32 @@ object SystemLogger { } @JvmStatic - fun logErr(message: String){ - val msg = "${getTime()}: [ ERR] $message" + fun logErr(clazz: Class<*>, message: String){ + val msg = "${getTime()}: [${clazz.simpleName}] $message" if(message.isNotBlank()) { t.println(msg) } } @JvmStatic - fun logWarn(message: String){ - val msg = "${getTime()}: [WARN] $message" + fun logWarn(clazz: Class<*>, message: String){ + val msg = "${getTime()}: [${clazz.simpleName}] $message" if(message.isNotBlank()) { t.println(msg) } } @JvmStatic - fun logAlert(message: String){ - val msg = "${getTime()}: [ALRT] $message" + fun logAlert(clazz: Class<*>, message: String){ + val msg = "${getTime()}: [${clazz.simpleName}] $message" if(message.isNotBlank()) { t.println(msg) } } @JvmStatic - fun logAI(message: String){ - val msg = "${getTime()}: [AIPL] $message" + fun logAI(clazz: Class<*>, message: String){ + val msg = "${getTime()}: [${clazz.simpleName}] $message" if(message.isNotBlank()) { t.println(msg) } @@ -98,7 +98,7 @@ object SystemLogger { fun logTrade(message: String){ try { if (message.isNotBlank()) { - if (tradeLogWriter == null) logWarn("Trade Logger is null!") + if (tradeLogWriter == null) logWarn(this::class.java, "Trade Logger is null!") tradeLogWriter?.write("${getTime()}: $message") tradeLogWriter?.newLine() } @@ -107,12 +107,12 @@ object SystemLogger { @JvmStatic fun logStartup(message: String) { - SystemLogger.logInfo("[STARTUP] $message") + logInfo(this::class.java, "[STARTUP] $message") } @JvmStatic fun logShutdown(message: String) { - SystemLogger.logInfo("[SHUTDOWN] $message") + logInfo(this::class.java,"[SHUTDOWN] $message") } fun logMS(s: String) { diff --git a/Server/src/main/kotlin/rs09/game/system/command/oldsys/AIPCommandPlugin.kt b/Server/src/main/kotlin/rs09/game/system/command/oldsys/AIPCommandPlugin.kt deleted file mode 100644 index 18fb362d0..000000000 --- a/Server/src/main/kotlin/rs09/game/system/command/oldsys/AIPCommandPlugin.kt +++ /dev/null @@ -1,329 +0,0 @@ -package rs09.game.system.command.oldsys - -//import rs09.game.ai.general.scriptrepository.ManThiever -import core.game.container.impl.EquipmentContainer -import core.game.interaction.Interaction -import core.game.node.entity.player.Player -import core.game.node.entity.player.link.appearance.Gender -import core.game.node.entity.skill.Skills -import rs09.game.system.command.CommandPlugin -import core.game.system.command.CommandSet -import core.game.system.task.Pulse -import rs09.game.world.GameWorld -import rs09.game.world.ImmerseWorld -import core.game.world.map.Location -import core.game.world.map.RegionManager -import core.game.world.map.path.Pathfinder -import rs09.game.world.repository.Repository -import core.plugin.Initializable -import core.plugin.Plugin -import core.tools.RandomFunction -import rs09.game.ai.AIPBuilder -import rs09.game.ai.AIPlayer -import rs09.game.ai.general.GeneralBotCreator -import rs09.game.ai.general.scriptrepository.LobsterCatcher -import rs09.game.ai.pvmbots.PvMBotsBuilder -import rs09.game.ai.pvp.PVPAIPActions -import rs09.game.ai.pvp.PVPAIPBuilderUtils -import rs09.game.ai.resource.ResourceAIPActions -import rs09.game.ai.skillingbot.SkillingBotsBuilder -import rs09.game.ai.wilderness.PvPBotsBuilder -import rs09.game.node.entity.skill.slayer.SlayerManager -import java.util.* - -/** - * Handles the AIPlayer commands. - * These commands are for bots - * - * @author Emperor - */ -@Initializable -class AIPCommandPlugin : CommandPlugin() { - override fun newInstance(arg: Any?): Plugin? { - link(CommandSet.ADMINISTRATOR) - return this - } - - override fun parse(player: Player?, name: String?, args: Array?): Boolean { - var name = name - var legion = player!!.getAttribute>("aip_legion") - when (name) { - "desaip" -> { - player.removeAttribute("aip_select") - return true - } - "sellegion" -> { - if (legion != null && !legion.isEmpty()) { - player.setAttribute("aip_select", legion[0]) - } - return true - } - "regroup" -> { - var last = player - if (legion != null && !legion.isEmpty()) { - for (p in legion) { - p.follow(last) - last = p - } - } - player.removeAttribute("aip_select") - return true - } - "clearlegion" -> { - if (legion != null && !legion.isEmpty()) { - for (p in legion) { - AIPlayer.deregister(p.uid) - } - legion.clear() - } - player.removeAttribute("aip_select") - player.removeAttribute("aip_legion") - return true - } - "clearaips" -> { - for (p in Repository.players) { - if (p.isArtificial) { - p.clear() - } - } - return true - } - "aip" -> { - name = if (args!!.size < 2) player.name else args[1] - val p = AIPBuilder.copy(player, player.location.transform(0, 1, 0)) - p.init() - Interaction.sendOption(player, 7, "Control") - return true - } - "legion" -> { - val size = if (args!!.size < 2) 10 else args[1]!!.toInt() - var last = player - if (legion == null) { - player.setAttribute("aip_legion", ArrayList().also { legion = it }) - } - Interaction.sendOption(player, 7, "Control") - val joinClan = player.communication.clan != null && !player.communication.clan.isDefault - var i = 0 - while (i < size) { - val aip = AIPBuilder.copy(player, last!!.getLocation().transform(0, 1, 0)) - aip.init() - if (legion!!.isEmpty()) { - aip.setAttribute("aip_legion", legion) - } - legion!!.add(aip) - val l: Player = last!! - if (joinClan) { - if (player.communication.clan.enter(aip)) { - aip.communication.clan = player.communication.clan - } - if (player.communication.clan.clanWar != null) { - player.communication.clan.clanWar.fireEvent("join", aip) - } - } - GameWorld.Pulser.submit(object : Pulse(1) { - override fun pulse(): Boolean { - aip.follow(l) - return true - } - }) - last = aip - i++ - } - return true - } - "banktest" -> { - val bot = AIPlayer(player.location) - //Location.create(2719, 3431, 0) - //Location.create(2726, 3477, 0) - //Location.create(2726, 3491, 0) - Pathfinder.find(bot,Location.create(2726, 3491, 0)).walk(bot) - return true - } - "pvplegion" -> { - val size = if (args!!.size < 2) 10 else args[1]!!.toInt() - var last = player - if (PVPAIPActions.pvp_players == null) { - player.setAttribute("aip_legion", ArrayList().also { PVPAIPActions.pvp_players = it }) - } - var i = 0 - while (i < size) { - val aip = AIPBuilder.create(generateLocation(player)) - aip.controler = player - aip.appearance.gender = if (RandomFunction.random(3) == 1) Gender.FEMALE else Gender.MALE - aip.init() - PVPAIPBuilderUtils.generateClass(aip) - if (PVPAIPActions.pvp_players.isEmpty()) { - aip.setAttribute("aip_legion", PVPAIPActions.pvp_players) - } - PVPAIPActions.pvp_players.add(aip) - last = aip - i++ - } - return true - } - "resourcelegion" -> { - val size = if (args!!.size < 2) 10 else args[1]!!.toInt() - var last = player - if (ResourceAIPActions.resource_players == null) { - player.setAttribute("aip_legion", ArrayList().also { ResourceAIPActions.resource_players = it }) - } - var i = 0 - while (i < size) { - val aip = AIPBuilder.create(generateLocation(player)) - aip.controler = player - aip.appearance.gender = if (RandomFunction.random(3) == 1) Gender.FEMALE else Gender.MALE - aip.init() - PVPAIPBuilderUtils.generateClass(aip) - if (ResourceAIPActions.resource_players.isEmpty()) { - aip.setAttribute("aip_legion", ResourceAIPActions.resource_players) - } - ResourceAIPActions.resource_players.add(aip) - i++ - } - return true - } - "syncresource" -> ResourceAIPActions.syncBotThread(player) - "pvpfight" -> { - PVPAIPActions.syncBotThread(player) - return true - } - "bot" -> { - PvMBotsBuilder.spawnLowest(player.location) - return true - } - "molebot" -> { - PvMBotsBuilder.spawnGiantMoleBot(player.location) - return true - } - "slayerpoints" -> { - SlayerManager.getInstance(player).slayerPoints = 50000 - return true - } - "dragonbot" -> { - PvMBotsBuilder.spawnDragonKiller(player.location) - return true - } - "pure" -> { - player.skills.setStaticLevel(Skills.HITPOINTS, 60) - player.skills.setStaticLevel(Skills.RANGE, 95) - player.skills.setStaticLevel(Skills.MAGIC, 95) - player.skills.setStaticLevel(Skills.ATTACK, 50) - player.skills.setStaticLevel(Skills.STRENGTH, 93) - player.skills.setStaticLevel(Skills.DEFENCE, 1) - player.skills.setStaticLevel(Skills.PRAYER, 1) - player.skills.updateCombatLevel() - return true - } - "noobbot" -> { - PvMBotsBuilder.spawnNoob(player.location) - return true - } - "immerse", "immersiveworld", "immersive" -> { - player.sendMessage("Started immersive world, 2") - return true - } - "botdataform" -> { - //Dumps your current character info in the form used by data/botdata - //name:cblevel:helmet:cape:neck:weapon:chest:shield:unknown:legs:unknown:gloves:boots: - println(player.username + ":" - + player.properties.currentCombatLevel + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_HAT) + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_CAPE) + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_AMULET) + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_WEAPON) + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_CHEST) + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_SHIELD) + ":" - + "0" + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_LEGS) + ":" - + "0" + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_HANDS) + ":" - + player.equipment.getAsId(EquipmentContainer.SLOT_FEET) + ":" - ) - return true - } - "fishtest" -> { - SkillingBotsBuilder.spawnTroutLumbridge(Location(3241, 3242)) - return true - } - "varrockminebots" -> { - SkillingBotsBuilder.spawnClayBotVarrock(Location(3181, 3368)) - SkillingBotsBuilder.spawnSilverBotVarrock(Location(3181, 3368)) - SkillingBotsBuilder.spawnIronBotVarrock(Location(3181, 3368)) - SkillingBotsBuilder.spawnTinBotVarrock(Location(3181, 3368)) - return true - } - "pvpbot" -> { - PvPBotsBuilder.spawn(player.location) - return true - } - "pvpbots" -> { - var amountBots = 0 - while (amountBots < 50) { - PvPBotsBuilder.spawn(player.location) - amountBots++ - } - return true - } - "ranger" -> { - } - "removetask" -> return if (!SlayerManager.getInstance(player).hasTask()) { - player.sendMessage("You don't have an active task right now.") - true - } else { - SlayerManager.getInstance(player).clear() - player.sendMessage("You have canceled your current task.") - true - } - "testpest", "pcbots", "pestcontrolbots", "pest-test", "test-pest", "pesttest" -> { - player.sendMessage("Spawning some bots I think") - val arg2: Int - arg2 = try { - args!![1]!!.toInt() - } catch (e: Exception) { - 20 - } - var pestBotsAmount = 0 - while (pestBotsAmount < arg2) { - PvMBotsBuilder.createPestControlTestBot(player.location) - pestBotsAmount++ - } - return true - } - "bots" -> { - var arg = 1 - var xpos = 0 - var ypos = 0 - try { - arg = args!![1]!!.toInt() - } catch (e: Exception) { - println("Rip " + args!![1]) - } - var amountBots2 = 0 - while (amountBots2 < arg) { - xpos = 2500 + RandomFunction.getRandom(1000) - ypos = 3000 + RandomFunction.getRandom(500) - PvMBotsBuilder.spawnNoob(Location(xpos, ypos)) - amountBots2++ - } - println("$xpos $ypos") - return true - } - //"manthiev" -> GeneralBotCreator(player.location, ManThiever()) - "fish" -> GeneralBotCreator(Location.create(2805, 3435, 0), LobsterCatcher()) - } - return false - } - - private fun generateLocation(player: Player?): Location { - val random_location = player!!.location.transform(RandomFunction.random(-15, 15), RandomFunction.random(-15, 15), 0) - if (!RegionManager.isTeleportPermitted(random_location)) { - return generateLocation(player) - } - if (!Pathfinder.find(player, random_location, false, Pathfinder.DUMB).isSuccessful) { - return generateLocation(player) - } - return if (RegionManager.getObject(random_location) != null) { - generateLocation(player) - } else random_location - } -} \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoOptionHandler.kt b/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoOptionHandler.kt index 777ec29fa..d7d110384 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoOptionHandler.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/rottenpotato/RottenPotatoOptionHandler.kt @@ -36,7 +36,7 @@ class RottenPotatoOptionHandler : OptionHandler() { if(player.rights != Rights.ADMINISTRATOR) { removeItem(player, Items.ROTTEN_POTATO_5733) - SystemLogger.logAlert("Player ${player.username} had a rotten potato. It has been removed.") + SystemLogger.logAlert(this::class.java, "Player ${player.username} had a rotten potato. It has been removed.") return false } diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt index ce88a3f49..1f2580227 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/DevelopmentCommandSet.kt @@ -72,14 +72,14 @@ class DevelopmentCommandSet : CommandSet(Privilege.ADMIN) { val mapId = args[1].toIntOrNull() ?: return@define val def = Struct.get(mapId) - SystemLogger.logInfo(def.toString()) + SystemLogger.logInfo(this::class.java, def.toString()) } define("datamap") {player, args -> val mapId = args[1].toIntOrNull() ?: return@define val def = DataMap.get(mapId) - SystemLogger.logInfo(def.toString()) + SystemLogger.logInfo(this::class.java, def.toString()) } define("dumpstructs", Privilege.ADMIN, "", "Dumps all the cache structs to structs.txt") {player, _ -> diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt index 7b638186a..a84ecdaa0 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/MiscCommandSet.kt @@ -118,9 +118,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("Viewport: " + l.getSceneX(player.playerFlags.lastSceneGraph) + "," + l.getSceneY(player.playerFlags.lastSceneGraph)) + SystemLogger.logInfo(this::class.java, "Viewport: " + l.getSceneX(player.playerFlags.lastSceneGraph) + "," + l.getSceneY(player.playerFlags.lastSceneGraph)) val loc = "Location.create(" + l.x + ", " + l.y + ", " + l.z + ")" - SystemLogger.logInfo(loc + "; " + player.playerFlags.lastSceneGraph + ", " + l.localX + ", " + l.localY) + SystemLogger.logInfo(this::class.java, loc + "; " + player.playerFlags.lastSceneGraph + ", " + l.localX + ", " + l.localY) try { val stringSelection = StringSelection(loc) val clpbrd = Toolkit.getDefaultToolkit().systemClipboard diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/SpawnCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/SpawnCommandSet.kt index 43d9167dc..2ea1dcdcb 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/SpawnCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/SpawnCommandSet.kt @@ -69,7 +69,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("object = $`object`") + SystemLogger.logInfo(this::class.java, "object = $`object`") } define("objectgrid") { player, args -> diff --git a/Server/src/main/kotlin/rs09/game/system/command/sets/SystemCommandSet.kt b/Server/src/main/kotlin/rs09/game/system/command/sets/SystemCommandSet.kt index df4e776e4..cb479eb69 100644 --- a/Server/src/main/kotlin/rs09/game/system/command/sets/SystemCommandSet.kt +++ b/Server/src/main/kotlin/rs09/game/system/command/sets/SystemCommandSet.kt @@ -43,7 +43,7 @@ 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(pass) + SystemLogger.logInfo(this::class.java, pass) runTask(player) { if (GameWorld.authenticator.checkPassword(player, pass)) { sendInputDialogue(player, InputType.STRING_SHORT, "Enter New Password:") { value2 -> diff --git a/Server/src/main/kotlin/rs09/game/system/config/CustomVarbitParser.kt b/Server/src/main/kotlin/rs09/game/system/config/CustomVarbitParser.kt index 3a8df32d3..609c18e7d 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/CustomVarbitParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/CustomVarbitParser.kt @@ -30,6 +30,6 @@ class CustomVarbitParser { count++ } - SystemLogger.logInfo("Parsed $count custom varbit definitions.") + SystemLogger.logInfo(this::class.java, "Parsed $count custom varbit definitions.") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/config/DoorConfigLoader.kt b/Server/src/main/kotlin/rs09/game/system/config/DoorConfigLoader.kt index b8957ca36..a833ff20d 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/DoorConfigLoader.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/DoorConfigLoader.kt @@ -31,7 +31,7 @@ class DoorConfigLoader { DOORS[door.id] = door count++ } - SystemLogger.logInfo("Parsed $count door configs.") + SystemLogger.logInfo(this::class.java, "Parsed $count door configs.") } diff --git a/Server/src/main/kotlin/rs09/game/system/config/DropTableParser.kt b/Server/src/main/kotlin/rs09/game/system/config/DropTableParser.kt index 78a715a65..79b283743 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/DropTableParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/DropTableParser.kt @@ -30,7 +30,7 @@ class DropTableParser { count++ } } - SystemLogger.logInfo("Parsed $count drop tables.") + SystemLogger.logInfo(this::class.java, "Parsed $count drop tables.") } private fun parseTable(data: JSONArray, destTable: NPCDropTable, isAlways: Boolean, isCharms: Boolean = false) { diff --git a/Server/src/main/kotlin/rs09/game/system/config/GroundSpawnLoader.kt b/Server/src/main/kotlin/rs09/game/system/config/GroundSpawnLoader.kt index 391369675..d05190652 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/GroundSpawnLoader.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/GroundSpawnLoader.kt @@ -34,7 +34,7 @@ class GroundSpawnLoader { count++ } } - SystemLogger.logInfo("Initialized $count ground items.") + SystemLogger.logInfo(this::class.java, "Initialized $count ground items.") } class GroundSpawn /** diff --git a/Server/src/main/kotlin/rs09/game/system/config/InterfaceConfigParser.kt b/Server/src/main/kotlin/rs09/game/system/config/InterfaceConfigParser.kt index f4573ce18..e07e5a1e1 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/InterfaceConfigParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/InterfaceConfigParser.kt @@ -24,6 +24,6 @@ class InterfaceConfigParser{ ComponentDefinition.getDefinitions()[id] = ComponentDefinition().parse(e["interfaceType"].toString(),e["walkable"].toString(),e["tabIndex"].toString()) count++ } - SystemLogger.logInfo("Parsed $count interface configs.") + SystemLogger.logInfo(this::class.java, "Parsed $count interface configs.") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/config/ItemConfigParser.kt b/Server/src/main/kotlin/rs09/game/system/config/ItemConfigParser.kt index 4fcd1e381..7b5dd744f 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/ItemConfigParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/ItemConfigParser.kt @@ -296,6 +296,6 @@ class ItemConfigParser { } count++ } - SystemLogger.logInfo("Parsed $count item configs.") + SystemLogger.logInfo(this::class.java, "Parsed $count item configs.") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/config/MusicConfigLoader.kt b/Server/src/main/kotlin/rs09/game/system/config/MusicConfigLoader.kt index cb3408138..40def29f1 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/MusicConfigLoader.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/MusicConfigLoader.kt @@ -67,6 +67,6 @@ class MusicConfigLoader { } count++ } - SystemLogger.logInfo("Parsed $count music configs.") + SystemLogger.logInfo(this::class.java, "Parsed $count music configs.") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/config/NPCConfigParser.kt b/Server/src/main/kotlin/rs09/game/system/config/NPCConfigParser.kt index 17cb5783d..77cacad8b 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/NPCConfigParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/NPCConfigParser.kt @@ -259,12 +259,12 @@ NPCConfigParser { "facing_booth", "can_tolerate", "water_npc"-> configs.put(it.key.toString(), it.value.toString().toBoolean()) - else -> SystemLogger.logWarn("Unhandled key for npc config: ${it.key.toString()}") + else -> SystemLogger.logWarn(this::class.java, "Unhandled key for npc config: ${it.key.toString()}") } } } count++ } - SystemLogger.logInfo("Parsed $count NPC configurations") + SystemLogger.logInfo(this::class.java, "Parsed $count NPC configurations") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/config/NPCSpawner.kt b/Server/src/main/kotlin/rs09/game/system/config/NPCSpawner.kt index 69a11a2c3..661adfe8c 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/NPCSpawner.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/NPCSpawner.kt @@ -38,6 +38,6 @@ class NPCSpawner { count++ } } - SystemLogger.logInfo("Spawned $count NPCs") + SystemLogger.logInfo(this::class.java, "Spawned $count NPCs") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/config/ObjectConfigParser.kt b/Server/src/main/kotlin/rs09/game/system/config/ObjectConfigParser.kt index 77a7a9a33..f2061f56a 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/ObjectConfigParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/ObjectConfigParser.kt @@ -35,7 +35,7 @@ class ObjectConfigParser { count++ } } - SystemLogger.logInfo("Parsed $count object configs.") + SystemLogger.logInfo(this::class.java, "Parsed $count object configs.") } } diff --git a/Server/src/main/kotlin/rs09/game/system/config/RangedConfigLoader.kt b/Server/src/main/kotlin/rs09/game/system/config/RangedConfigLoader.kt index b53c3fcc2..f41f26e87 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/RangedConfigLoader.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/RangedConfigLoader.kt @@ -55,7 +55,7 @@ class RangedConfigLoader { Ammunition.getAmmunition().put(Integer.parseInt(e["itemId"].toString()),ammo) count++ } - SystemLogger.logWarn("Parsed $count ammo configs...") + SystemLogger.logWarn(this::class.java, "Parsed $count ammo configs...") count = 0 reader = FileReader(ServerConstants.CONFIG_PATH + "ranged_weapon_configs.json") @@ -75,6 +75,6 @@ class RangedConfigLoader { RangeWeapon.getRangeWeapons().putIfAbsent(weapon.itemId,weapon) count++ } - SystemLogger.logInfo("Parsed $count ranged weapon configs...") + SystemLogger.logInfo(this::class.java, "Parsed $count ranged weapon configs...") } } diff --git a/Server/src/main/kotlin/rs09/game/system/config/ServerConfigParser.kt b/Server/src/main/kotlin/rs09/game/system/config/ServerConfigParser.kt index 3dc3574e7..7e1e95679 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/ServerConfigParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/ServerConfigParser.kt @@ -32,7 +32,7 @@ object ServerConfigParser { private fun parseFromFile(confFile: File?) { if(!confFile!!.canonicalFile.exists()){ - SystemLogger.logErr("${confFile.canonicalFile} does not exist.") + SystemLogger.logErr(this::class.java, "${confFile.canonicalFile} does not exist.") exitProcess(0) } else { try { @@ -40,9 +40,9 @@ object ServerConfigParser { parseServerSettings() parseGameSettings() } catch (e: java.lang.IllegalStateException) { - SystemLogger.logErr("Passed config file is not a TOML file. Path: ${confFile.canonicalPath}") - SystemLogger.logErr("Exception received: $e") - SystemLogger.logAlert("Shutting down...") + 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...") exitProcess(0) } } @@ -133,7 +133,7 @@ object ServerConfigParser { try { return parsePath(getString(key).replace("@data", ServerConstants.DATA_PATH!!)) } catch (e: Exception){ - SystemLogger.logErr("Error parsing key: $key") + SystemLogger.logErr(this::class.java, "Error parsing key: $key") exitProcess(0) } } diff --git a/Server/src/main/kotlin/rs09/game/system/config/ShopParser.kt b/Server/src/main/kotlin/rs09/game/system/config/ShopParser.kt index 08c6b6ac2..6e35df21d 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/ShopParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/ShopParser.kt @@ -31,6 +31,6 @@ class ShopParser{ count++ } - SystemLogger.logInfo("Parsed $count shops.") + SystemLogger.logInfo(this::class.java, "Parsed $count shops.") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/system/config/XteaParser.kt b/Server/src/main/kotlin/rs09/game/system/config/XteaParser.kt index 5ff740263..e08cee172 100644 --- a/Server/src/main/kotlin/rs09/game/system/config/XteaParser.kt +++ b/Server/src/main/kotlin/rs09/game/system/config/XteaParser.kt @@ -37,6 +37,6 @@ class XteaParser { REGION_XTEA[id] = intArrayOf(keys[0],keys[1],keys[2],keys[3]) count++ } - SystemLogger.logInfo("Parsed $count region keys.") + SystemLogger.logInfo(this::class.java, "Parsed $count region keys.") } } \ No newline at end of file diff --git a/Server/src/main/kotlin/rs09/game/world/DeadlockDetector.kt b/Server/src/main/kotlin/rs09/game/world/DeadlockDetector.kt index 69aebd430..964cd0a48 100644 --- a/Server/src/main/kotlin/rs09/game/world/DeadlockDetector.kt +++ b/Server/src/main/kotlin/rs09/game/world/DeadlockDetector.kt @@ -17,9 +17,9 @@ class DeadlockDetector : Runnable { if (threadInfo != null) { for (thread in Thread.getAllStackTraces().keys) { if (thread.id == threadInfo.threadId) { - SystemLogger.logErr(threadInfo.toString().trim()) + SystemLogger.logErr(this::class.java, threadInfo.toString().trim()) for (ste in thread.stackTrace) { - SystemLogger.logErr("\t" + ste.toString().trim { it <= ' ' }) + SystemLogger.logErr(this::class.java, "\t" + ste.toString().trim { it <= ' ' }) } } } diff --git a/Server/src/main/kotlin/rs09/game/world/GameWorld.kt b/Server/src/main/kotlin/rs09/game/world/GameWorld.kt index 9bd6ff4fb..e32fc18a5 100644 --- a/Server/src/main/kotlin/rs09/game/world/GameWorld.kt +++ b/Server/src/main/kotlin/rs09/game/world/GameWorld.kt @@ -163,7 +163,7 @@ object GameWorld { */ @Throws(Throwable::class) fun prompt(run: Boolean, directory: String?){ - logInfo("Prompting ${settings?.name} Game World...") + logInfo(GameWorld::class.java, "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() diff --git a/Server/src/main/kotlin/rs09/game/world/PulseRunner.kt b/Server/src/main/kotlin/rs09/game/world/PulseRunner.kt index cb154b10b..08a8e6378 100644 --- a/Server/src/main/kotlin/rs09/game/world/PulseRunner.kt +++ b/Server/src/main/kotlin/rs09/game/world/PulseRunner.kt @@ -26,7 +26,7 @@ class PulseRunner { pulses.add(pulse) } } catch (e: Exception) { - SystemLogger.logErr("Pulse execution error. Stack trace below.") + SystemLogger.logErr(this::class.java, "Pulse execution error. Stack trace below.") e.printStackTrace() } } @@ -46,15 +46,15 @@ class PulseRunner { private fun notifyIfTooLong(pulse: Pulse, elapsedTime: Long) { if (elapsedTime >= 100) { if (pulse is GeneralBotCreator.BotScriptPulse) { - SystemLogger.logWarn("CRITICALLY long bot-script tick - ${pulse.botScript.javaClass.name} took $elapsedTime ms") + SystemLogger.logWarn(this::class.java, "CRITICALLY long bot-script tick - ${pulse.botScript.javaClass.name} took $elapsedTime ms") } else { - SystemLogger.logWarn("CRITICALLY long running pulse - ${pulse.javaClass.name} took $elapsedTime ms") + SystemLogger.logWarn(this::class.java, "CRITICALLY long running pulse - ${pulse.javaClass.name} took $elapsedTime ms") } } else if (elapsedTime >= 30) { if (pulse is GeneralBotCreator.BotScriptPulse) { - SystemLogger.logWarn("Long bot-script tick - ${pulse.botScript.javaClass.name} took $elapsedTime ms") + SystemLogger.logWarn(this::class.java, "Long bot-script tick - ${pulse.botScript.javaClass.name} took $elapsedTime ms") } else { - SystemLogger.logWarn("Long running pulse - ${pulse.javaClass.name} took $elapsedTime ms") + SystemLogger.logWarn(this::class.java, "Long running pulse - ${pulse.javaClass.name} took $elapsedTime ms") } } } diff --git a/Server/src/main/kotlin/rs09/game/world/repository/DisconnectionQueue.kt b/Server/src/main/kotlin/rs09/game/world/repository/DisconnectionQueue.kt index 1081bd886..0ec203d2f 100644 --- a/Server/src/main/kotlin/rs09/game/world/repository/DisconnectionQueue.kt +++ b/Server/src/main/kotlin/rs09/game/world/repository/DisconnectionQueue.kt @@ -50,14 +50,14 @@ class DisconnectionQueue { return false } if (entry.isClear) { - SystemLogger.logInfo("Clearing player...") + SystemLogger.logInfo(this::class.java, "Clearing player...") player.clear() } Repository.playerNames.remove(player.name) Repository.lobbyPlayers.remove(player) Repository.removePlayer(player) Repository.LOGGED_IN_PLAYERS.remove(player.details.username) - SystemLogger.logInfo("Player cleared. Removed ${player.details.username}") + SystemLogger.logInfo(this::class.java, "Player cleared. Removed ${player.details.username}") try { if(player.communication.clan != null) player.communication.clan.leave(player, false) diff --git a/Server/src/main/kotlin/rs09/net/packet/PacketWriteQueue.kt b/Server/src/main/kotlin/rs09/net/packet/PacketWriteQueue.kt index ef90be87a..32055f3d1 100644 --- a/Server/src/main/kotlin/rs09/net/packet/PacketWriteQueue.kt +++ b/Server/src/main/kotlin/rs09/net/packet/PacketWriteQueue.kt @@ -55,9 +55,9 @@ class PacketWriteQueue : TickListener { } if (packetsToWrite.isNotEmpty()) { - SystemLogger.logWarn("Packet queue was NOT empty! Remaining packets: ${packetsToWrite.size}") + SystemLogger.logWarn(this::class.java, "Packet queue was NOT empty! Remaining packets: ${packetsToWrite.size}") try { - for (pkt: QueuedPacket<*>? in packetsToWrite) SystemLogger.logWarn("${pkt?.out?.javaClass?.simpleName ?: "NULL"} <- ${pkt?.context ?: "NULL"}") + for (pkt: QueuedPacket<*>? in packetsToWrite) SystemLogger.logWarn(this::class.java, "${pkt?.out?.javaClass?.simpleName ?: "NULL"} <- ${pkt?.context ?: "NULL"}") } catch (ignored: NullPointerException) { //do nothing, we don't care, this can happen when everything is working as intended. } catch (e: Exception) { @@ -79,7 +79,7 @@ class PacketWriteQueue : TickListener { val pack = out as? OutgoingPacket val ctx = context as? T if (pack == null || ctx == null) { - SystemLogger.logWarn("Failed packet casting") + SystemLogger.logWarn(this::class.java, "Failed packet casting") return } pack.send(ctx) diff --git a/Server/src/main/kotlin/rs09/net/packet/in/Login.kt b/Server/src/main/kotlin/rs09/net/packet/in/Login.kt index d9f022c34..5fd3f1a00 100644 --- a/Server/src/main/kotlin/rs09/net/packet/in/Login.kt +++ b/Server/src/main/kotlin/rs09/net/packet/in/Login.kt @@ -7,7 +7,6 @@ import core.game.node.entity.player.Player import core.game.node.entity.player.info.PlayerDetails import core.game.node.entity.player.info.Rights import core.game.node.entity.player.info.UIDInfo -import core.game.node.entity.player.info.login.LoginType import core.net.Constants import core.net.IoSession import core.tools.StringUtils @@ -22,10 +21,8 @@ import rs09.ServerStore.Companion.getList import rs09.auth.AuthResponse import rs09.game.node.entity.player.info.login.LoginParser import rs09.game.system.SystemLogger -import rs09.game.system.command.Privilege import rs09.game.world.GameWorld import rs09.game.world.repository.Repository -import rs09.worker.ManagementEvents import rs09.worker.ManagementEvents.publish import java.math.BigInteger import java.nio.BufferUnderflowException @@ -50,7 +47,7 @@ object Login { return Pair(AuthResponse.Updated, null) } if (info.opcode != NORMAL_LOGIN_OP && info.opcode != RECONNECT_LOGIN_OP) { - SystemLogger.logInfo("Invalid Login Opcode: ${info.opcode}") + SystemLogger.logInfo(this::class.java, "Invalid Login Opcode: ${info.opcode}") return Pair(AuthResponse.InvalidLoginServer, null) } @@ -87,7 +84,7 @@ object Login { return Pair(AuthResponse.Success, info) } catch (e: Exception) { - SystemLogger.logErr("Exception encountered during login packet parsing! See stack trace below.") + SystemLogger.logErr(this::class.java, "Exception encountered during login packet parsing! See stack trace below.") e.printStackTrace() return Pair(AuthResponse.UnexpectedError, null) } @@ -155,7 +152,7 @@ object Login { } session.lastPing = System.currentTimeMillis() try { - LoginParser(player.details, LoginType.fromType(opcode)).initialize(player, opcode == RECONNECT_LOGIN_OP) + LoginParser(player.details).initialize(player, opcode == RECONNECT_LOGIN_OP) sendMSEvents(player.details) } catch (e: Exception) { e.printStackTrace() diff --git a/Server/src/main/kotlin/rs09/net/packet/in/QuickChatPacketHandler.kt b/Server/src/main/kotlin/rs09/net/packet/in/QuickChatPacketHandler.kt index 311c0d57e..2cd7a3f76 100644 --- a/Server/src/main/kotlin/rs09/net/packet/in/QuickChatPacketHandler.kt +++ b/Server/src/main/kotlin/rs09/net/packet/in/QuickChatPacketHandler.kt @@ -31,7 +31,7 @@ class QuickChatPacketHandler : IncomingPacket { 3,4 -> QCPacketType.STANDARD 5 -> QCPacketType.SINGLE 7 -> QCPacketType.DOUBLE - else -> QCPacketType.UNHANDLED.also { SystemLogger.logWarn("UNHANDLED QC PACKET TYPE Size ${x.array().size}") } + else -> QCPacketType.UNHANDLED.also { SystemLogger.logWarn(this::class.java, "UNHANDLED QC PACKET TYPE Size ${x.array().size}") } } val forClan = (buffer.get() and 0xFF) == 1 @@ -50,19 +50,19 @@ class QuickChatPacketHandler : IncomingPacket { buffer.get() //discard selection_b_index = buffer.get() } - QCPacketType.UNHANDLED -> SystemLogger.logWarn("Unhandled packet type, skipping remaining buffer contents.") + QCPacketType.UNHANDLED -> SystemLogger.logWarn(this::class.java, "Unhandled packet type, skipping remaining buffer contents.") } //Prints the values of each byte in the buffer to server log //If the world is in dev mode if(GameWorld.settings?.isDevMode == true) { - SystemLogger.logInfo("Begin QuickChat Packet Buffer Dump---------") - SystemLogger.logInfo("Packet Type: ${packetType.name} Chat Type: ${if(forClan) "Clan" else "Public"}") + SystemLogger.logInfo(this::class.java, "Begin QuickChat Packet Buffer Dump---------") + SystemLogger.logInfo(this::class.java, "Packet Type: ${packetType.name} Chat Type: ${if(forClan) "Clan" else "Public"}") x?.array()?.forEach { - SystemLogger.logInfo("$it") + SystemLogger.logInfo(this::class.java, "$it") } - SystemLogger.logInfo("End QuickChat Packet Buffer Dump-----------") + SystemLogger.logInfo(this::class.java, "End QuickChat Packet Buffer Dump-----------") } QCRepository.sendQC(player,multiplier,offset,packetType,selection_a_index,selection_b_index,forClan) diff --git a/Server/src/main/kotlin/rs09/plugin/ClassScanner.kt b/Server/src/main/kotlin/rs09/plugin/ClassScanner.kt index 73772511b..2bd6a1902 100644 --- a/Server/src/main/kotlin/rs09/plugin/ClassScanner.kt +++ b/Server/src/main/kotlin/rs09/plugin/ClassScanner.kt @@ -19,6 +19,7 @@ import io.github.classgraph.ClassInfo import io.github.classgraph.ScanResult import rs09.game.ai.general.scriptrepository.PlayerScripts import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InterfaceListener import rs09.game.node.entity.player.info.login.PlayerSaveParser import rs09.game.node.entity.player.info.login.PlayerSaver @@ -67,10 +68,10 @@ object ClassScanner { loadContentInterfacesFrom(scanResults) logStartup("Loaded $amountLoaded content interfaces.") } catch (t: Throwable) { - SystemLogger.logErr("Error initializing Plugins -> " + t.localizedMessage + " for file -> " + lastLoaded) + SystemLogger.logErr(this::class.java, "Error initializing Plugins -> " + t.localizedMessage + " for file -> " + lastLoaded) t.printStackTrace() } catch (e: Exception) { - SystemLogger.logErr("Error initializing Plugins -> " + e.localizedMessage + " for file -> " + lastLoaded) + SystemLogger.logErr(this::class.java, "Error initializing Plugins -> " + e.localizedMessage + " for file -> " + lastLoaded) e.printStackTrace() } } @@ -112,12 +113,12 @@ object ClassScanner { } for(border in clazz.defineAreaBorders()) zone.register(border) ZoneBuilder.configure(zone) - SystemLogger.logInfo("Configured zone: ${clazz.javaClass.simpleName + "MapArea"}") + SystemLogger.logInfo(this::class.java, "Configured zone: ${clazz.javaClass.simpleName + "MapArea"}") MapArea.zoneMaps[clazz.javaClass.simpleName + "MapArea"] = zone } amountLoaded++ } catch (e: Exception) { - SystemLogger.logErr("Error loading content: ${it.simpleName}, ${e.localizedMessage}") + SystemLogger.logErr(this::class.java, "Error loading content: ${it.simpleName}, ${e.localizedMessage}") e.printStackTrace() } } @@ -138,10 +139,10 @@ object ClassScanner { definePlugin(clazz) } } catch (t: Throwable) { - SystemLogger.logErr("Failed to load plugin ${p.name}."); + SystemLogger.logErr(this::class.java, "Failed to load plugin ${p.name}."); if (t is NoSuchMethodException && p.superclass.simpleName == DialoguePlugin::class.simpleName) { - SystemLogger.logErr( + SystemLogger.logErr(this::class.java, "Make sure the constructor signature matches " + "`${p.simpleName}(player: Player? = null) : DialoguePlugin(player)'." ) @@ -198,7 +199,7 @@ object ClassScanner { plugin.newInstance(null) QuestRepository.register(plugin as Quest) } - else -> SystemLogger.logWarn("Unknown Manifest: " + manifest.type) + else -> SystemLogger.logWarn(this::class.java, "Unknown Manifest: " + manifest.type) } } numPlugins++ diff --git a/Server/src/main/kotlin/rs09/worker/MajorUpdateWorker.kt b/Server/src/main/kotlin/rs09/worker/MajorUpdateWorker.kt index 40469cf87..50d1cb460 100644 --- a/Server/src/main/kotlin/rs09/worker/MajorUpdateWorker.kt +++ b/Server/src/main/kotlin/rs09/worker/MajorUpdateWorker.kt @@ -75,7 +75,7 @@ class MajorUpdateWorker { Thread.sleep(max(600 - (end - start), 0)) } - SystemLogger.logInfo("Update worker stopped.") + SystemLogger.logInfo(this::class.java, "Update worker stopped.") } fun handleTickActions(skipPulseUpdate: Boolean = false) { diff --git a/Server/src/main/kotlin/rs09/worker/ManagementEvents.kt b/Server/src/main/kotlin/rs09/worker/ManagementEvents.kt index 585e74d53..3173316ec 100644 --- a/Server/src/main/kotlin/rs09/worker/ManagementEvents.kt +++ b/Server/src/main/kotlin/rs09/worker/ManagementEvents.kt @@ -277,7 +277,7 @@ object ManagementEvents { info.username = ServerConstants.SERVER_NAME info.password = ServerConstants.MS_SECRET_KEY info.rights = 2 - SystemLogger.logAlert("Creating default server account: ${info.username}, password is your MS_SECRET_KEY!") + SystemLogger.logAlert(this::class.java, "Creating default server account: ${info.username}, password is your MS_SECRET_KEY!") GameWorld.authenticator.createAccountWith(info) info = GameWorld.accountStorage.getAccountInfo(event.clanOwner) } diff --git a/Server/src/test/kotlin/TestUtils.kt b/Server/src/test/kotlin/TestUtils.kt index 07128d52d..4b8861d9d 100644 --- a/Server/src/test/kotlin/TestUtils.kt +++ b/Server/src/test/kotlin/TestUtils.kt @@ -61,7 +61,7 @@ object TestUtils { } fun advanceTicks(amount: Int, skipPulseUpdates: Boolean = true) { - SystemLogger.logInfo("Advancing ticks by $amount.") + SystemLogger.logInfo(this::class.java, "Advancing ticks by $amount.") for(i in 0 until amount) { GameWorld.majorUpdateWorker.handleTickActions(skipPulseUpdates) } diff --git a/Server/src/test/kotlin/content/EquipTests.kt b/Server/src/test/kotlin/content/EquipTests.kt index ae5c59be0..7acdfd364 100644 --- a/Server/src/test/kotlin/content/EquipTests.kt +++ b/Server/src/test/kotlin/content/EquipTests.kt @@ -9,6 +9,7 @@ import org.junit.jupiter.api.Test import org.rs09.consts.Items import rs09.game.content.global.action.EquipHandler import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners class EquipTests { @@ -27,7 +28,7 @@ class EquipTests { val p = TestUtils.getMockPlayer("bill") p.inventory.add(Item(4151)) - InteractionListeners.run(4151, InteractionListener.ITEM, "equip", p, p.inventory[0]) + InteractionListeners.run(4151, IntType.ITEM, "equip", p, p.inventory[0]) Assertions.assertEquals(true, didRun) } @@ -61,7 +62,7 @@ class EquipTests { p.equipment.replace(Item(4151), EquipmentSlot.WEAPON.ordinal) p.inventory.add(Item(1333)) p.skills.staticLevels[Skills.ATTACK] = 40 - InteractionListeners.run(1333, InteractionListener.ITEM, "equip", p, p.inventory[0]) + InteractionListeners.run(1333, IntType.ITEM, "equip", p, p.inventory[0]) Assertions.assertEquals(true, didRun, p.equipment.toString()) } @@ -73,7 +74,7 @@ class EquipTests { p.inventory.add(Item(Items.BRONZE_DART_806, 1000)) p.inventory.add(Item(Items.RUNE_SCIMITAR_1333)) - InteractionListeners.run(Items.RUNE_SCIMITAR_1333, InteractionListener.ITEM, "equip", p, p.inventory[1]) + InteractionListeners.run(Items.RUNE_SCIMITAR_1333, IntType.ITEM, "equip", p, p.inventory[1]) Assertions.assertEquals(2000, p.inventory.getAmount(Items.BRONZE_DART_806), "\n" + p.inventory.toString() + "\n" + p.equipment.toString()) } @@ -87,7 +88,7 @@ class EquipTests { Assertions.assertEquals(1, p.inventory.freeSlots()) - InteractionListeners.run(Items.BRONZE_2H_SWORD_1307, InteractionListener.ITEM, "equip", p, p.inventory[26]) + InteractionListeners.run(Items.BRONZE_2H_SWORD_1307, IntType.ITEM, "equip", p, p.inventory[26]) Assertions.assertEquals(0, p.inventory.freeSlots()) Assertions.assertEquals(Items.BRONZE_SWORD_1277, p.inventory[26].id) Assertions.assertEquals(Items.WOODEN_SHIELD_1171, p.inventory[27].id) @@ -98,10 +99,10 @@ class EquipTests { p.inventory.add(Item(Items.BRONZE_2H_SWORD_1307)) p.inventory.add(Item(Items.WOODEN_SHIELD_1171)) - InteractionListeners.run(Items.BRONZE_2H_SWORD_1307, InteractionListener.ITEM, "equip", p, p.inventory[0]) + InteractionListeners.run(Items.BRONZE_2H_SWORD_1307, IntType.ITEM, "equip", p, p.inventory[0]) Assertions.assertEquals(Items.BRONZE_2H_SWORD_1307, p.equipment.get(EquipmentSlot.WEAPON.ordinal).id) - InteractionListeners.run(Items.WOODEN_SHIELD_1171, InteractionListener.ITEM, "equip", p, p.inventory[1]) + InteractionListeners.run(Items.WOODEN_SHIELD_1171, IntType.ITEM, "equip", p, p.inventory[1]) Assertions.assertEquals(Items.BRONZE_2H_SWORD_1307, p.inventory[1]?.id ?: -1) } @@ -110,10 +111,10 @@ class EquipTests { p.inventory.add(Item(Items.BRONZE_SWORD_1277)) p.inventory.add(Item(Items.WOODEN_SHIELD_1171)) - InteractionListeners.run(Items.BRONZE_SWORD_1277, InteractionListener.ITEM, "equip", p, p.inventory[0]) + InteractionListeners.run(Items.BRONZE_SWORD_1277, IntType.ITEM, "equip", p, p.inventory[0]) Assertions.assertEquals(Items.BRONZE_SWORD_1277, p.equipment[EquipmentSlot.WEAPON.ordinal].id) - InteractionListeners.run(Items.WOODEN_SHIELD_1171, InteractionListener.ITEM, "equip", p, p.inventory[1]) + InteractionListeners.run(Items.WOODEN_SHIELD_1171, IntType.ITEM, "equip", p, p.inventory[1]) Assertions.assertEquals(Items.BRONZE_SWORD_1277, p.equipment[EquipmentSlot.WEAPON.ordinal]?.id ?: -1) } @@ -122,7 +123,7 @@ class EquipTests { p.equipment.replace(Item(Items.BRONZE_ARROW_882, 100), EquipmentSlot.AMMO.ordinal) p.inventory.add(Item(Items.BRONZE_ARROW_882, 200)) - InteractionListeners.run(Items.BRONZE_ARROW_882, InteractionListener.ITEM, "equip", p, p.inventory[0]) + InteractionListeners.run(Items.BRONZE_ARROW_882, IntType.ITEM, "equip", p, p.inventory[0]) Assertions.assertEquals(300, p.equipment[EquipmentSlot.AMMO.ordinal].amount) } @@ -135,7 +136,7 @@ class EquipTests { p.inventory.add(Item(Items.DRAGON_CLAWS_14484), true, 25) Assertions.assertEquals(p.inventory.getSlot(Item(Items.DRAGON_CLAWS_14484)), 25) - InteractionListeners.run(Items.DRAGON_CLAWS_14484, InteractionListener.ITEM, "equip", p, p.inventory[25]) + InteractionListeners.run(Items.DRAGON_CLAWS_14484, IntType.ITEM, "equip", p, p.inventory[25]) Assertions.assertEquals(Items.DRAGON_CLAWS_14484, p.equipment.get(EquipmentSlot.WEAPON.ordinal).id) Assertions.assertEquals(p.inventory.getSlot(Item(Items.ABYSSAL_WHIP_4151)), 25) Assertions.assertEquals(p.inventory.getSlot(Item(Items.RUNE_DEFENDER_8850)), 0) diff --git a/Server/src/test/kotlin/content/ListenerTests.kt b/Server/src/test/kotlin/content/ListenerTests.kt new file mode 100644 index 000000000..2aac1002c --- /dev/null +++ b/Server/src/test/kotlin/content/ListenerTests.kt @@ -0,0 +1,46 @@ +package content + +import TestUtils +import core.game.node.item.Item +import org.junit.jupiter.api.Assertions +import org.junit.jupiter.api.Test +import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType +import rs09.game.interaction.InteractionListeners + +class ListenerTests : InteractionListener { + @Test fun doubleDefinedListenerShouldThrowIllegalStateException() { + on(0, IntType.ITEM, "touch") {_,_ -> return@on true} + Assertions.assertThrows(IllegalStateException::class.java) { + on(0, IntType.ITEM, "touch") {_,_ -> return@on true} + } + } + + @Test fun doubleDefinedUseWithShouldThrowIllegalStateException() { + onUseWith(IntType.SCENERY, 0, 1) {_,_,_ -> return@onUseWith true} + Assertions.assertThrows(IllegalStateException::class.java) { + onUseWith(IntType.SCENERY, 0, 1) {_,_,_ -> return@onUseWith true} + } + } + + @Test fun conflictingCatchallShouldThrowIllegalStateException() { + on(IntType.ITEM, "boop"){_,_ -> return@on true} + Assertions.assertThrows(IllegalStateException::class.java) { + on(IntType.ITEM, "boop") {_,_ -> return@on true} + } + } + + @Test fun specificListenerShouldOverrideCatchallListener() { + var specificRan = false + var catchAllRan = false + on(IntType.ITEM, "zap") { _, _ -> catchAllRan = true; return@on true} + on(1, IntType.ITEM, "zap") {_,_ -> specificRan = true; return@on true} + + InteractionListeners.run(1, IntType.ITEM, "zap", TestUtils.getMockPlayer("bilbots"), Item(1)) + + Assertions.assertEquals(false, catchAllRan) + Assertions.assertEquals(true, specificRan) + } + + override fun defineListeners() {} +} \ No newline at end of file diff --git a/Server/src/test/kotlin/core/PathfinderTests.kt b/Server/src/test/kotlin/core/PathfinderTests.kt index 7262903eb..e7f0b35e1 100644 --- a/Server/src/test/kotlin/core/PathfinderTests.kt +++ b/Server/src/test/kotlin/core/PathfinderTests.kt @@ -7,6 +7,7 @@ import core.game.world.map.RegionManager import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test import rs09.game.interaction.InteractionListener +import rs09.game.interaction.IntType import rs09.game.interaction.InteractionListeners import rs09.game.node.entity.skill.gather.GatheringSkillOptionListeners @@ -41,7 +42,7 @@ class PathfinderTests { p.location = start p.init() - Assertions.assertEquals(true, InteractionListeners.run(1307, InteractionListener.SCENERY, "chop-down", p, dest!!)) + Assertions.assertEquals(true, InteractionListeners.run(1307, IntType.SCENERY, "chop-down", p, dest!!)) TestUtils.advanceTicks(20, false) Assertions.assertEquals(Location.create(2722, 3475, 0), p.location) } diff --git a/Server/src/test/kotlin/core/storage/SQLStorageProviderTests.kt b/Server/src/test/kotlin/core/storage/SQLStorageProviderTests.kt index 02d1845f2..9a5e6605d 100644 --- a/Server/src/test/kotlin/core/storage/SQLStorageProviderTests.kt +++ b/Server/src/test/kotlin/core/storage/SQLStorageProviderTests.kt @@ -23,9 +23,9 @@ class SQLStorageProviderTests { } @AfterAll @JvmStatic fun cleanup() { - SystemLogger.logInfo("Cleaning up unit test accounts") + SystemLogger.logInfo(this::class.java, "Cleaning up unit test accounts") testAccountNames.forEach {name -> - SystemLogger.logInfo("Removing test account $name") + SystemLogger.logInfo(this::class.java, "Removing test account $name") val info = UserAccountInfo.createDefault() info.username = name storage.remove(info)