Merge remote-tracking branch 'origin/magicbot-reg-update' into magicbox1.5

# Conflicts:
#	src/engine/ai/MobileFSM.java
#	src/engine/ai/MobileFSMManager.java
#	src/engine/devcmd/cmds/SetAICmd.java
#	src/engine/gameManager/DevCmdManager.java
This commit is contained in:
2023-07-15 09:27:57 -04:00
748 changed files with 99752 additions and 101122 deletions
+381 -439
View File
@@ -14,459 +14,401 @@ import engine.math.Vector3fImmutable;
public class MBServerStatics {
public static final int revisionNumber = 1;
public static final int revisionNumber = 1;
public static final String CMDLINE_ARGS_EXE_NAME_DELIMITER = "-name";
public static final String CMDLINE_ARGS_CONFIG_FILE_PATH_DELIMITER = "-config";
public static final String CMDLINE_ARGS_CALLER_DELIMITER = "-caller";
public static final String CMDLINE_ARGS_REASON_DELIMITER = "-reason";
public static final String EXISTING_CONNECTION_CLOSED = "An existing connection was forcibly closed by the remote host";
public static final String RESET_BY_PEER = "Connection reset by peer";
/*
* ####Debugging Flags####
*/
public static final boolean POWERS_DEBUG = false;
public static final boolean MOVEMENT_SYNC_DEBUG = false;
public static final boolean BONUS_TRAINS_ENABLED = false;
public static final boolean REGENS_DEBUG = false;
public static final boolean SHOW_SAFE_MODE_CHANGE = false;
public static final boolean COMBAT_TARGET_HITBOX_DEBUG = false; // output
// hit box
// calcs
public static final boolean PRINT_INCOMING_OPCODES = false; // print
public static final int BANK_GOLD_LIMIT = 25000000;
// incoming
// opcodes to
// console
public static final int PLAYER_GOLD_LIMIT = 10000000;
// buildings, npcs
/*
* Login cache flags
*/
public static final boolean SKIP_CACHE_LOGIN = false; // skip caching // login server
public static final boolean SKIP_CACHE_LOGIN_PLAYER = false; // skip caching // on login
public static final boolean SKIP_CACHE_LOGIN_ITEM = false; // skip caching
/*
* ChatManager related
*/
public static final int SHOUT_PERCEPTION_RADIUS_MOD = 2;
/*
* DevCmd related
*/
public static final String DEV_CMD_PREFIX = "./";
// The number of elements in INITIAL_WORKERS defines the initial number of
// job pools
public static final int[] INITIAL_JOBPOOL_WORKERS = {4, 2, 1};
public static String getEmulatorVersion() {
return Integer.toString(revisionNumber);
}
/*
* JobManager related
*/
public static final int JOBMANAGER_INTERNAL_MONITORING_INTERVAL_MS = 1000;
public static final int JOB_STALL_THRESHOLD_MS = 120 * 1000;
public static final int SCHEDULER_INITIAL_CAPACITY = 1000;
public static final int SCHEDULER_EXECUTION_TIME_COMPENSATION = 16;
public static final int CHM_INIT_CAP = 10;
public static final String CMDLINE_ARGS_EXE_NAME_DELIMITER = "-name";
public static final String CMDLINE_ARGS_CONFIG_FILE_PATH_DELIMITER = "-config";
public static final String CMDLINE_ARGS_CALLER_DELIMITER = "-caller";
public static final String CMDLINE_ARGS_REASON_DELIMITER = "-reason";
public static final String EXISTING_CONNECTION_CLOSED = "An existing connection was forcibly closed by the remote host";
public static final String RESET_BY_PEER = "Connection reset by peer";
/*
* ####Debugging Flags####
*/
public static final boolean POWERS_DEBUG = false;
public static final boolean MOVEMENT_SYNC_DEBUG = false;
public static final boolean BONUS_TRAINS_ENABLED = false;
public static final boolean REGENS_DEBUG = false;
public static final boolean SHOW_SAFE_MODE_CHANGE = false;
public static final boolean COMBAT_TARGET_HITBOX_DEBUG = false; // output
// hit box
// calcs
public static final boolean PRINT_INCOMING_OPCODES = false; // print
// incoming
// opcodes to
// console
public static final int BANK_GOLD_LIMIT = 25000000;
public static final int PLAYER_GOLD_LIMIT = 10000000;
// buildings, npcs
/*
* Login cache flags
*/
public static final boolean SKIP_CACHE_LOGIN = false; // skip caching // login server
public static final boolean SKIP_CACHE_LOGIN_PLAYER = false; // skip caching // on login
public static final boolean SKIP_CACHE_LOGIN_ITEM = false; // skip caching
/*
* ChatManager related
*/
public static final int SHOUT_PERCEPTION_RADIUS_MOD = 2;
/*
* DevCmd related
*/
public static final String DEV_CMD_PREFIX = "./";
/*
* JobManager related
*/
// The number of elements in INITIAL_WORKERS defines the initial number of
// job pools
public static final int[] INITIAL_JOBPOOL_WORKERS = { 4, 2, 1 };
public static final int JOBMANAGER_INTERNAL_MONITORING_INTERVAL_MS = 1000;
public static final int JOB_STALL_THRESHOLD_MS = 120 * 1000;
public static final int SCHEDULER_INITIAL_CAPACITY = 1000;
public static final int SCHEDULER_EXECUTION_TIME_COMPENSATION = 16;
/*
* Concurrent Hash Map - Defaults
*/
public static final int CHM_INIT_CAP = 10;
public static final float CHM_LOAD = 0.75f;
public static final int CHM_THREAD_HIGH = 4;
public static final int CHM_THREAD_MED = 2;
public static final int CHM_THREAD_LOW = 1;
/*
* LoginErrorMsg related
*/
public static final int LOGINERROR_INVALID_USERNAME_PASSWORD = 1;
/*
* Message is Version:
*/
public static final int LOGINERROR_INCORRECT_CLIENT_VERSION = 3;
public static final int LOGINERROR_NOT_ALLOWED_TO_LOGIN_YET = 4;
/*
* Message is 'Error ='
*/
public static final int LOGINERROR_LOGINSERVER_IS_UNAVAILABLE = 5;
public static final int LOGINERROR_INVALID_ADMIN_USERNAME_PASSWORD = 6;
public static final int LOGINERROR_NO_MORE_PLAYTIME_ON_ACCOUNT = 7;
public static final int LOGINERROR_ACCOUNT_DOESNT_HAVE_SUBSCRIPTION = 8;
public static final int LOGINERROR_ACCOUNT_INSECURE_CHANGE_PASSWORD = 9;
public static final int LOGINERROR_TOO_MANY_LOGIN_TRIES = 10;
/*
* Message is 'Error ='
*/
public static final int LOGINERROR_NOMOREPLAYTIME = 7;
public static final int LOGINERROR_INACTIVE = 8;
public static final int LOGINERROR_UNABLE_TO_LOGIN = 11;
public static final int LOGINERROR_LOGINSERVER_BUSY = 12;
public static final int LOGINERROR_BLANK = 13;
/*
* Name Validation Related
*/
public static final int INVALIDNAME_FIRSTNAME_MUST_BE_LONGER = 1;
public static final int INVALIDNAME_FIRSTANDLAST_MUST_BE_SHORTER = 2;
public static final int INVALIDNAME_FIRSTNAME_MUST_NOT_HAVE_SPACES = 3;
public static final int INVALIDNAME_FIRSTNAME_INVALID_CHARACTERS = 4;
public static final int INVALIDNAME_PLEASE_CHOOSE_ANOTHER_FIRSTNAME = 5;
public static final int INVALIDNAME_PLEASE_CHOOSE_ANOTHER_LASTNAME = 7;
public static final int INVALIDNAME_LASTNAME_UNAVAILABLE = 8;
public static final int INVALIDNAME_FIRSTNAME_UNAVAILABLE = 9;
public static final int INVALIDNAME_WRONG_WORLD_ID = 10;
public static final int INVALIDNAME_GENERIC = 11;
/*
* 1: A first name of at least 3 character(s) must be entered 2: Your first
* and last name cannot be more than 15 characters each. 3: Your first name
* may not contain spaces 4: There are invalid characters in the first name.
* 5: Please choose another first name 7: Please choose another last name 8:
* That last name is unavailable 9: That first name is unavailable 10: Your
* client sent an invalid world id 11: Invalid name. Choose another
*/
public static final int MIN_NAME_LENGTH = 3;
public static final int MAX_NAME_LENGTH = 15;
/*
* ClientConnection related
*/
public static final boolean TCP_NO_DELAY_DEFAULT = true;
public static final byte MAX_CRYPTO_INIT_TRIES = 10;
public static boolean DEBUG_PROTOCOL = false;
/*
* Account Related
*/
public static final byte MAX_LOGIN_ATTEMPTS = 5;
/*
* Concurrent Hash Map - Defaults
*/
public static final float CHM_LOAD = 0.75f;
public static final int CHM_THREAD_HIGH = 4;
public static final int CHM_THREAD_MED = 2;
public static final int CHM_THREAD_LOW = 1;
/*
* LoginErrorMsg related
*/
public static final int LOGINERROR_INVALID_USERNAME_PASSWORD = 1;
/*
* Message is Version:
*/
public static final int LOGINERROR_INCORRECT_CLIENT_VERSION = 3;
public static final int LOGINERROR_NOT_ALLOWED_TO_LOGIN_YET = 4;
/*
* Message is 'Error ='
*/
public static final int LOGINERROR_LOGINSERVER_IS_UNAVAILABLE = 5;
public static final int LOGINERROR_INVALID_ADMIN_USERNAME_PASSWORD = 6;
public static final int LOGINERROR_NO_MORE_PLAYTIME_ON_ACCOUNT = 7;
public static final int LOGINERROR_ACCOUNT_DOESNT_HAVE_SUBSCRIPTION = 8;
public static final int LOGINERROR_ACCOUNT_INSECURE_CHANGE_PASSWORD = 9;
public static final int LOGINERROR_TOO_MANY_LOGIN_TRIES = 10;
/*
* Message is 'Error ='
*/
public static final int LOGINERROR_NOMOREPLAYTIME = 7;
public static final int LOGINERROR_INACTIVE = 8;
public static final int LOGINERROR_UNABLE_TO_LOGIN = 11;
public static final int LOGINERROR_LOGINSERVER_BUSY = 12;
public static final int LOGINERROR_BLANK = 13;
/*
* Name Validation Related
*/
public static final int INVALIDNAME_FIRSTNAME_MUST_BE_LONGER = 1;
public static final int INVALIDNAME_FIRSTANDLAST_MUST_BE_SHORTER = 2;
public static final int INVALIDNAME_FIRSTNAME_MUST_NOT_HAVE_SPACES = 3;
public static final int INVALIDNAME_FIRSTNAME_INVALID_CHARACTERS = 4;
public static final int INVALIDNAME_PLEASE_CHOOSE_ANOTHER_FIRSTNAME = 5;
public static final int INVALIDNAME_PLEASE_CHOOSE_ANOTHER_LASTNAME = 7;
public static final int INVALIDNAME_LASTNAME_UNAVAILABLE = 8;
public static final int INVALIDNAME_FIRSTNAME_UNAVAILABLE = 9;
public static final int INVALIDNAME_WRONG_WORLD_ID = 10;
public static final int INVALIDNAME_GENERIC = 11;
/*
* 1: A first name of at least 3 character(s) must be entered 2: Your first
* and last name cannot be more than 15 characters each. 3: Your first name
* may not contain spaces 4: There are invalid characters in the first name.
* 5: Please choose another first name 7: Please choose another last name 8:
* That last name is unavailable 9: That first name is unavailable 10: Your
* client sent an invalid world id 11: Invalid name. Choose another
*/
public static final int MIN_NAME_LENGTH = 3;
public static final int MAX_NAME_LENGTH = 15;
/*
* ClientConnection related
*/
public static final boolean TCP_NO_DELAY_DEFAULT = true;
public static final byte MAX_CRYPTO_INIT_TRIES = 10;
public static final byte MAX_LOGIN_ATTEMPTS = 5;
public static final int RESET_LOGIN_ATTEMPTS_AFTER = (15 * 60 * 1000); // in
/*
* Account Related
*/
public static final int MAX_ACTIVE_GAME_ACCOUNTS_PER_DISCORD_ACCOUNT = 4; // 0
public static final byte MAX_NUM_OF_CHARACTERS = 7;
public static final byte MAX_NUM_OF_CHARACTERS = 7;
public static final int STAT_STR_ID = 0x8AC3C0E6;
public static final int STAT_SPI_ID = 0xACB82E33;
public static final int STAT_CON_ID = 0xB15DC77E;
public static final int STAT_DEX_ID = 0xE07B3336;
public static final int STAT_INT_ID = 0xFF665EC3;
public static final int SLOT_UNEQUIPPED = 0;
public static final int SLOT_MAINHAND = 1;
public static final int SLOT_OFFHAND = 2;
public static final int SLOT_HELMET = 3;
public static final int SLOT_CHEST = 4;
public static final int SLOT_ARMS = 5;
public static final int SLOT_GLOVES = 6;
public static final int SLOT_RING1 = 7;
public static final int SLOT_RING2 = 8;
public static final int SLOT_NECKLACE = 9;
public static final int SLOT_LEGGINGS = 10;
public static final int SLOT_FEET = 11;
public static final int SLOT_HAIRSTYLE = 18; // 17 & 18? Weird.
public static final int SLOT_BEARDSTYLE = 17; // 17 & 18? Weird.
/*
* Group Formation Names
*/
public static final String[] FORMATION_NAMES = {"Column", "Line", "Box",
"Triangle", "Circle", "Ranks", "Wedge", "Inverse Wedge", "T"};
public static final int RUNE_COST_ATTRIBUTE_ID = 0;
public static final int STAT_STR_ID = 0x8AC3C0E6;
public static final int STAT_SPI_ID = 0xACB82E33;
public static final int STAT_CON_ID = 0xB15DC77E;
public static final int STAT_DEX_ID = 0xE07B3336;
public static final int STAT_INT_ID = 0xFF665EC3;
// Equip[0] = Slot1 = Weapon MainHand
// Equip[1] = Slot2 = OffHand
// Equip[2] = Slot3 = Helmet
// Equip[3] = Slot4 = Chest
// Equip[4] = Slot5 = Arms
// Equip[5] = Slot6 = Gloves
// Equip[6] = Slot7 = Ring1
// Equip[7] = Slot8 = Ring2
// Equip[8] = Slot9 = Necklace
// Equip[9] = Slot10 = Leggings
// Equip[10] = Slot11 = Feet
// Equip[11] = Slot17 = HairStyle
// Equip[12] = Slot18 = BeardStyle
public static final int RUNE_STR_ATTRIBUTE_ID = 1;
public static final int RUNE_DEX_ATTRIBUTE_ID = 2;
public static final int RUNE_CON_ATTRIBUTE_ID = 3;
public static final int RUNE_INT_ATTRIBUTE_ID = 4;
public static final int RUNE_SPI_ATTRIBUTE_ID = 5;
public static final int RUNE_STR_MAX_ATTRIBUTE_ID = 6;
public static final int RUNE_DEX_MAX_ATTRIBUTE_ID = 7;
public static final int RUNE_CON_MAX_ATTRIBUTE_ID = 8;
public static final int RUNE_INT_MAX_ATTRIBUTE_ID = 9;
public static final int RUNE_SPI_MAX_ATTRIBUTE_ID = 10;
public static final int RUNE_STR_MIN_NEEDED_ATTRIBUTE_ID = 11;
public static final int RUNE_DEX_MIN_NEEDED_ATTRIBUTE_ID = 12;
public static final int RUNE_CON_MIN_NEEDED_ATTRIBUTE_ID = 13;
public static final int RUNE_INT_MIN_NEEDED_ATTRIBUTE_ID = 14;
public static final int RUNE_SPI_MIN_NEEDED_ATTRIBUTE_ID = 15;
/*
* DBMan
*/
public static final int NO_DB_ROW_ASSIGNED_YET = Integer.MAX_VALUE;
public static final boolean DB_DEBUGGING_ON_BY_DEFAULT = false; // warning:
public static final boolean ENABLE_QUERY_TIME_WARNING = true;
public static final boolean ENABLE_UPDATE_TIME_WARNING = true;
public static final boolean ENABLE_EXECUTION_TIME_WARNING = true;
public static final int AFK_TIMEOUT_MS = (30 * 60 * 1000) * 100; // Added
public static final int TIMEOUT_CHECKS_TIMER_MS = (60 * 1000);
public static final int MASK_PLAYER = 1;
public static final int MASK_MOB = 2;
public static final int SLOT_UNEQUIPPED = 0;
public static final int SLOT_MAINHAND = 1;
public static final int SLOT_OFFHAND = 2;
public static final int SLOT_HELMET = 3;
public static final int SLOT_CHEST = 4;
public static final int SLOT_ARMS = 5;
public static final int SLOT_GLOVES = 6;
public static final int SLOT_RING1 = 7;
public static final int SLOT_RING2 = 8;
public static final int SLOT_NECKLACE = 9;
public static final int SLOT_LEGGINGS = 10;
public static final int SLOT_FEET = 11;
public static final int SLOT_HAIRSTYLE = 18; // 17 & 18? Weird.
public static final int SLOT_BEARDSTYLE = 17; // 17 & 18? Weird.
/*
* Masks for Quad Tree. Masks should be multiple of 2.
*/
public static final int MASK_PET = 4;
public static final int MASK_CORPSE = 8;
public static final int MASK_BUILDING = 16;
public static final int MASK_UNDEAD = 64;
public static final int MASK_BEAST = 128;
public static final int MASK_HUMANOID = 256;
public static final int MASK_NPC = 512;
public static final int MASK_IAGENT = 2048;
public static final int MASK_DRAGON = 4096;
public static final int MASK_RAT = 8192;
public static final int MASK_SIEGE = 16384;
public static final int MASK_CITY = 32768;
public static final int MASK_ZONE = 65536;
public static final int MASK_AGGRO = 5; // Player, Pet
public static final int MASK_MOBILE = 7; // Player, Mob, Pet
// Equip[0] = Slot1 = Weapon MainHand
// Equip[1] = Slot2 = OffHand
// Equip[2] = Slot3 = Helmet
// Equip[3] = Slot4 = Chest
// Equip[4] = Slot5 = Arms
// Equip[5] = Slot6 = Gloves
// Equip[6] = Slot7 = Ring1
// Equip[7] = Slot8 = Ring2
// Equip[8] = Slot9 = Necklace
// Equip[9] = Slot10 = Leggings
// Equip[10] = Slot11 = Feet
// Equip[11] = Slot17 = HairStyle
// Equip[12] = Slot18 = BeardStyle
/*
* Group Formation Names
*/
public static final String[] FORMATION_NAMES = { "Column", "Line", "Box",
"Triangle", "Circle", "Ranks", "Wedge", "Inverse Wedge", "T" };
public static final int RUNE_COST_ATTRIBUTE_ID = 0;
public static final int RUNE_STR_ATTRIBUTE_ID = 1;
public static final int RUNE_DEX_ATTRIBUTE_ID = 2;
public static final int RUNE_CON_ATTRIBUTE_ID = 3;
public static final int RUNE_INT_ATTRIBUTE_ID = 4;
public static final int RUNE_SPI_ATTRIBUTE_ID = 5;
public static final int RUNE_STR_MAX_ATTRIBUTE_ID = 6;
public static final int RUNE_DEX_MAX_ATTRIBUTE_ID = 7;
public static final int RUNE_CON_MAX_ATTRIBUTE_ID = 8;
public static final int RUNE_INT_MAX_ATTRIBUTE_ID = 9;
public static final int RUNE_SPI_MAX_ATTRIBUTE_ID = 10;
public static final int RUNE_STR_MIN_NEEDED_ATTRIBUTE_ID = 11;
public static final int RUNE_DEX_MIN_NEEDED_ATTRIBUTE_ID = 12;
public static final int RUNE_CON_MIN_NEEDED_ATTRIBUTE_ID = 13;
public static final int RUNE_INT_MIN_NEEDED_ATTRIBUTE_ID = 14;
public static final int RUNE_SPI_MIN_NEEDED_ATTRIBUTE_ID = 15;
/*
* DBMan
*/
public static final int NO_DB_ROW_ASSIGNED_YET = Integer.MAX_VALUE;
public static final boolean DB_DEBUGGING_ON_BY_DEFAULT = false; // warning:
public static final boolean ENABLE_QUERY_TIME_WARNING = true;
public static final boolean ENABLE_UPDATE_TIME_WARNING = true;
public static final boolean ENABLE_EXECUTION_TIME_WARNING = true;
public static final int AFK_TIMEOUT_MS = (30 * 60 * 1000) * 100; // Added
public static final int TIMEOUT_CHECKS_TIMER_MS = (60 * 1000);
/*
* Masks for Quad Tree. Masks should be multiple of 2.
*/
public static final int MASK_PLAYER = 1;
public static final int MASK_MOB = 2;
public static final int MASK_PET = 4;
public static final int MASK_CORPSE = 8;
public static final int MASK_BUILDING = 16;
public static final int MASK_UNDEAD = 64;
public static final int MASK_BEAST = 128;
public static final int MASK_HUMANOID = 256;
public static final int MASK_NPC = 512;
public static final int MASK_IAGENT = 2048;
public static final int MASK_DRAGON = 4096;
public static final int MASK_RAT = 8192;
public static final int MASK_SIEGE = 16384;
public static final int MASK_CITY = 32768;
public static final int MASK_ZONE = 65536;
/*
* Combined QT Masks. For convenience
*/
public static final int MASK_AGGRO = 5; // Player, Pet
public static final int MASK_MOBILE = 7; // Player, Mob, Pet
public static final int MASK_STATIC = 568; // Corpse, Building, Trigger, NPC
/*
* World Coordinate Data
*/
public static final double MAX_WORLD_HEIGHT = -98304.0;
public static final double MAX_WORLD_WIDTH = 131072.0;
public static final float SEA_FLOOR_ALTITUDE = -1000f;
public static int SPATIAL_HASH_BUCKETSX = 16384;
public static int SPATIAL_HASH_BUCKETSY = 12288;
public static float MAX_PLAYER_X_LOC = 129999;
public static float MAX_PLAYER_Y_LOC = -97000;
/*
* Ranges
*/
public static final int CHARACTER_LOAD_RANGE = 400; // load range of mobile objects
// (default: 300)
public static final int STRUCTURE_LOAD_RANGE = 700; // load range of
// (default: 600)
public static float LOOT_RANGE = 100;
public static final int EXP_RANGE = 400;
public static final int GOLD_SPLIT_RANGE = 600;
// non-moving objects
public static final int SAY_RANGE = 200;
public static final int SHOUT_RANGE = 300;
public static final int STATIC_THRESHOLD = 75; // Range must travel before
// reloading statics
public static final int FORMATION_RANGE = 75; // Max Distance a player can
// be from group lead on
// formation move
public static final int OPENCLOSEDOORDISTANCE = 128; // Max distance a
public static final int DOOR_CLOSE_TIMER = 30000; // 30 seconds
// player can be from a door in order to toggle its state
public static final int TRADE_RANGE = 10; // Max distance a player can be
// from another player to trade
public static final int NPC_TALK_RANGE = 20; // Range player can be to talk
// to npc
public static final int MAX_TELEPORT_RANGE = 1020; // Max range teleports
// will work at
public static final int RANGED_WEAPON_RANGE = 35; // any weapon attack
// range beyond this
// is ranged.
public static final int CALL_FOR_HELP_RADIUS = 100; // Range mobs will
// respond to calls
// for help
public static final int TREE_TELEPORT_RADIUS = 30;
public static float MOB_SPEED_WALK = 6.5f;
public static float MOB_SPEED_WALKCOMBAT = 4.4f;
public static float MOB_SPEED_RUN = 14.67f;
public static float MOB_SPEED_RUNCOMBAT = 14.67f;
/*
* Combined QT Masks. For convenience
*/
public static final int MASK_STATIC = 568; // Corpse, Building, Trigger, NPC
/*
* World Coordinate Data
*/
public static final double MAX_WORLD_HEIGHT = -98304.0;
public static final double MAX_WORLD_WIDTH = 131072.0;
public static final float SEA_FLOOR_ALTITUDE = -1000f;
/*
* Ranges
*/
public static final int CHARACTER_LOAD_RANGE = 400; // load range of mobile objects
// (default: 300)
public static final int STRUCTURE_LOAD_RANGE = 700; // load range of
public static final int EXP_RANGE = 400;
public static final int GOLD_SPLIT_RANGE = 600;
// non-moving objects
public static final int SAY_RANGE = 200;
public static final int SHOUT_RANGE = 300;
public static final int STATIC_THRESHOLD = 75; // Range must travel before
// reloading statics
public static final int FORMATION_RANGE = 75; // Max Distance a player can
// (default: 600)
// be from group lead on
// formation move
public static final int OPENCLOSEDOORDISTANCE = 128; // Max distance a
public static final int DOOR_CLOSE_TIMER = 30000; // 30 seconds
// player can be from a door in order to toggle its state
public static final int TRADE_RANGE = 10; // Max distance a player can be
// from another player to trade
public static final int NPC_TALK_RANGE = 20; // Range player can be to talk
// to npc
public static final int MAX_TELEPORT_RANGE = 1020; // Max range teleports
// will work at
public static final int RANGED_WEAPON_RANGE = 35; // any weapon attack
// range beyond this
// is ranged.
public static final int CALL_FOR_HELP_RADIUS = 100; // Range mobs will
public static final int TREE_TELEPORT_RADIUS = 30;
public static final int[] DEFAULTGRID = {-1, 1};
public static final float startX = 19128;// 70149f; //19318.0f;
public static final float startY = 94f; // 94f;
public static final float startZ = -73553; // -73661.0f;
public static final Vector3fImmutable DEFAULT_START = new Vector3fImmutable(
MBServerStatics.startX, MBServerStatics.startY,
MBServerStatics.startZ);
/*
* Base movement speeds. Do NOT modify these. They must match the client
*/
public static final float FLYWALKSPEED = 6.33f;
// respond to calls
// for help
public static final float FLYRUNSPEED = 18.38f;
public static final float SWIMSPEED = 6.5f;
public static final float WALKSPEED = 6.5f;
public static final float RUNSPEED = 14.67f;
public static final float COMBATWALKSPEED = 4.44f;
/*
* Noob Island Start Location for new players
*/
public static final int[] DEFAULTGRID = {-1,1};
public static final float startX = 19128;// 70149f; //19318.0f;
public static final float startY = 94f; // 94f;
public static final float startZ = -73553; // -73661.0f;
public static final Vector3fImmutable DEFAULT_START = new Vector3fImmutable(
MBServerStatics.startX, MBServerStatics.startY,
MBServerStatics.startZ);
/*
* Base movement speeds. Do NOT modify these. They must match the client
*/
public static final float FLYWALKSPEED = 6.33f;
public static final float FLYRUNSPEED = 18.38f;
public static final float SWIMSPEED = 6.5f;
public static final float WALKSPEED = 6.5f;
public static final float RUNSPEED = 14.67f;
public static final float COMBATWALKSPEED = 4.44f;
public static final float COMBATRUNSPEED = 14.67f;
public static final float RUNSPEED_MOB = 15.4f;
public static final float MOVEMENT_DESYNC_TOLERANCE = 2f; // Distance out of
public static final float NO_WEAPON_RANGE = 8f; // Range for attack with no
// weapon
public static final float REGEN_IDLE = .06f;
/*
* Base regen rates. Do NOT modify these. They must match the client %per
* second for health/mana. x per second for stamina.
*/
public static final float HEALTH_REGEN_SIT = 0.0033333f; // 100% in 3
// minutes
public static final float HEALTH_REGEN_IDLE = 0.000666667f; // 100% in 25
// minutes
public static final float HEALTH_REGEN_WALK = 0.0005f; // 100% in 33.33
// minutes
public static final float HEALTH_REGEN_RUN = 0f;
public static final float HEALTH_REGEN_SWIM_NOSTAMINA = -.03f; // 100% in
public static final float HEALTH_REGEN_SIT_STATIC = 0.33333f; // 100% in 3
// minutes
public static final float HEALTH_REGEN_IDLE_STATIC = 0.0666667f; // 100% in
// 25
// minutes
public static final float HEALTH_REGEN_WALK_STATIC = 0.05f; // 100% in 33.33
// minutes
public static final float HEALTH_REGEN_RUN_STATIC = 0f;
public static final float HEALTH_REGEN_SWIM_NOSTAMINA_STATIC = 0f; // 100%
public static final float MANA_REGEN_STATIC = 0.16666666666666666666666666666667f;
public static final float MANA_REGEN_SIT = 0.008333333f; // 100% in 2
public static final float MANA_REGEN_IDLE = 0.00166667f; // 100% in 10
public static final float MANA_REGEN_WALK = 0.00125f; // 100% in 13.333
public static final float MANA_REGEN_RUN = 0f;
public static final float STAMINA_REGEN_SIT = 2f; // 2 per second
public static final float STAMINA_REGEN_IDLE = 0.2f; // 1 per 5 seconds
public static final float STAMINA_REGEN_WALK = 0f;
public static final float STAMINA_REGEN_RUN_COMBAT = -0.6499999762f;
public static final float STAMINA_REGEN_RUN_NONCOMBAT = -0.400000006f;
public static final float STAMINA_REGEN_SWIM = -1f; // -1 per second
public static float STAMINA_REGEN_FLY_IDLE = -2f; // needs verifying
public static float STAMINA_REGEN_FLY_WALK = -1f; // needs verifying
public static float STAMINA_REGEN_FLY_RUN = -1.400000006f; // needs verifying
public static float STAMINA_REGEN_FLY_RUN_COMBAT = -1.6499999762f; // needs verifying
public static final int REGEN_SENSITIVITY_PLAYER = 250; // calc regen ever X
public static final int REGEN_SENSITIVITY_MOB = 1000; // calc regen ever X
public static final int TOMBSTONE = 2024;
public static final int LOGOUT_TIMER_MS = 1000; // logout delay applied
public static final int CORPSE_CLEANUP_TIMER_MS = 15 * 60 * 1000; // Cleanup
public static final int DEFAULT_SPAWN_TIME_MS = 3 * 60 * 1000; // 3 minute
public static final int SESSION_CLEANUP_TIMER_MS = 30 * 1000; // cleanup
public static final int MOVEMENT_FREQUENCY_MS = 1000; // Update movement
// once every X ms
public static final int FLY_FREQUENCY_MS = 1000; // Update flight once every
public static final float FLY_RATE = .0078f;
// x ms
public static final int HEIGHT_CHANGE_TIMER_MS = 125; // Time in ms to fly
// up or down 1 unit
public static final long OPCODE_HANDLE_TIME_WARNING_MS = 250L;
public static final long DB_QUERY_WARNING_TIME_MS = 250L;
public static final long DB_UPDATE_WARNING_TIME_MS = 250L;
public static final long DB_EXECUTION_WARNING_TIME_MS = 250L;
public static boolean DB_ENABLE_QUERY_OUTPUT = false;
// summons
public static final int THIRTY_SECONDS = 30000;
public static final int FOURTYFIVE_SECONDS = 45000;
public static final int ONE_MINUTE = 60000;
public static final int FIVE_MINUTES = 300000;
public static final int FIFTEEN_MINUTES = 900000;
public static final int THIRTY_MINUTES = 1800000;
public static final long TWENTY_FOUR_HOURS = 86400000;
public static final int LOAD_OBJECT_DELAY = 500; // long to wait to update
public static final int TELEPORT_TIME_IN_SECONDS = 10;
public static final int REPLEDGE_TIME_IN_SECONDS = 0;
public static final int RUNEGATE_CLOSE_TIME = 30000; // runegate close timer
public static final long PLAYER_KILL_XP_TIMER = 60 * 60 * 1000; // 60
public static final int UPDATE_GROUP_RATE = 10000; // Update group info
public static float PLAYER_HATE_DELIMITER = 50; // reduces 50 hate a second
public static float PLAYER_COMBAT_HATE_MODIFIER = 2;
public static final int COMBAT_SEND_DODGE = 20;
public static final int COMBAT_SEND_BLOCK = 21;
public static final int COMBAT_SEND_PARRY = 22;
public static final short LEVELCAP = 75;
public static final int LEVEL_CON_WHITE = 7;
public static final int RESPAWN_TIMER = 90 * 1000;
public static final int DESPAWN_TIMER = 12 * 1000;
public static final int DESPAWN_TIMER_WITH_LOOT = 60 * 1000;
public static final int DESPAWN_TIMER_ONCE_LOOTED = 5 * 1000;
public static final int MAX_COMBAT_HITBOX_RADIUS = 80;
public static final int PROC_CHANCE = 5; // %chance to proc
/*
* Noob Island Start Location for new players
*/
public static final float COMBATRUNSPEED = 14.67f;
public static final float RUNSPEED_MOB = 15.4f;
public static final float MOVEMENT_DESYNC_TOLERANCE = 2f; // Distance out of
public static final float NO_WEAPON_RANGE = 8f; // Range for attack with no
public static final float REGEN_IDLE = .06f;
/*
* Base regen rates. Do NOT modify these. They must match the client %per
* second for health/mana. x per second for stamina.
*/
public static final float HEALTH_REGEN_SIT = 0.0033333f; // 100% in 3
// minutes
public static final float HEALTH_REGEN_IDLE = 0.000666667f; // 100% in 25
// minutes
public static final float HEALTH_REGEN_WALK = 0.0005f; // 100% in 33.33
// minutes
public static final float HEALTH_REGEN_RUN = 0f;
public static final float HEALTH_REGEN_SWIM_NOSTAMINA = -.03f; // 100% in
public static final float HEALTH_REGEN_SIT_STATIC = 0.33333f; // 100% in 3
// minutes
public static final float HEALTH_REGEN_IDLE_STATIC = 0.0666667f; // 100% in
// 25
// minutes
public static final float HEALTH_REGEN_WALK_STATIC = 0.05f; // 100% in 33.33
// minutes
public static final float HEALTH_REGEN_RUN_STATIC = 0f;
public static final float HEALTH_REGEN_SWIM_NOSTAMINA_STATIC = 0f; // 100%
// weapon
public static final float MANA_REGEN_STATIC = 0.16666666666666666666666666666667f;
public static final float MANA_REGEN_SIT = 0.008333333f; // 100% in 2
public static final float MANA_REGEN_IDLE = 0.00166667f; // 100% in 10
public static final float MANA_REGEN_WALK = 0.00125f; // 100% in 13.333
public static final float MANA_REGEN_RUN = 0f;
public static final float STAMINA_REGEN_SIT = 2f; // 2 per second
public static final float STAMINA_REGEN_IDLE = 0.2f; // 1 per 5 seconds
public static final float STAMINA_REGEN_WALK = 0f;
public static final float STAMINA_REGEN_RUN_COMBAT = -0.6499999762f;
public static final float STAMINA_REGEN_RUN_NONCOMBAT = -0.400000006f;
public static final float STAMINA_REGEN_SWIM = -1f; // -1 per second
public static final int REGEN_SENSITIVITY_PLAYER = 250; // calc regen ever X
public static final int REGEN_SENSITIVITY_MOB = 1000; // calc regen ever X
public static final int TOMBSTONE = 2024;
public static final int LOGOUT_TIMER_MS = 1000; // logout delay applied
public static final int CORPSE_CLEANUP_TIMER_MS = 15 * 60 * 1000; // Cleanup
public static final int DEFAULT_SPAWN_TIME_MS = 3 * 60 * 1000; // 3 minute
public static final int SESSION_CLEANUP_TIMER_MS = 30 * 1000; // cleanup
public static final int MOVEMENT_FREQUENCY_MS = 1000; // Update movement
// once every X ms
public static final int FLY_FREQUENCY_MS = 1000; // Update flight once every
public static final float FLY_RATE = .0078f;
// x ms
public static final int HEIGHT_CHANGE_TIMER_MS = 125; // Time in ms to fly
// up or down 1 unit
public static final long OPCODE_HANDLE_TIME_WARNING_MS = 250L;
public static final long DB_QUERY_WARNING_TIME_MS = 250L;
public static final long DB_UPDATE_WARNING_TIME_MS = 250L;
public static final long DB_EXECUTION_WARNING_TIME_MS = 250L;
// summons
public static final int THIRTY_SECONDS = 30000;
public static final int FOURTYFIVE_SECONDS = 45000;
public static final int ONE_MINUTE = 60000;
public static final int FIVE_MINUTES = 300000;
public static final int FIFTEEN_MINUTES = 900000;
public static final int THIRTY_MINUTES = 1800000;
public static final long TWENTY_FOUR_HOURS = 86400000;
public static final int LOAD_OBJECT_DELAY = 500; // long to wait to update
public static final int TELEPORT_TIME_IN_SECONDS = 10;
public static final int REPLEDGE_TIME_IN_SECONDS = 0;
public static final int RUNEGATE_CLOSE_TIME = 30000; // runegate close timer
public static final long PLAYER_KILL_XP_TIMER = 60 * 60 * 1000; // 60
public static final int UPDATE_GROUP_RATE = 10000; // Update group info
public static final int COMBAT_SEND_DODGE = 20;
public static final int COMBAT_SEND_BLOCK = 21;
public static final int COMBAT_SEND_PARRY = 22;
public static final short LEVELCAP = 75;
public static final int LEVEL_CON_WHITE = 7;
public static final int RESPAWN_TIMER = 90 * 1000;
public static final int DESPAWN_TIMER = 12 * 1000;
public static final int DESPAWN_TIMER_WITH_LOOT = 60 * 1000;
public static final int DESPAWN_TIMER_ONCE_LOOTED = 5 * 1000;
public static final int MAX_COMBAT_HITBOX_RADIUS = 80;
public static final int PROC_CHANCE = 5; // %chance to proc
public static final float TRACK_ARROW_FAST_RANGE = 50f; // Range to go from
public static final int TRACK_ARROW_SENSITIVITY = 1000; // Refresh track
// arrows every X ms
public static final int TRACK_ARROW_SENSITIVITY_FAST = 250; // Refresh track
public static final int LOW_POPULATION = 100;
public static final int NORMAL_POPULATION = 500;
public static final int HIGH_POPULATION = 1000;
public static final int VERY_OVERPOPULATED_POPULATION = 3000;
public static final int FULL_POPULATION = 5000;
public static final int TRACK_WINDOW_THRESHOLD = 1000; // max refresh once
public static final int WHO_WINDOW_THRESHOLD = 3000; // max refresh once
// Mine related
public static final int MINE_EARLY_WINDOW = 16; // 4pm
public static final int MINE_LATE_WINDOW = 0; // Midnight
public static boolean DEBUG_PROTOCOL = false;
public static int SPATIAL_HASH_BUCKETSX = 16384;
public static int SPATIAL_HASH_BUCKETSY = 12288;
public static float MAX_PLAYER_X_LOC = 129999;
public static float MAX_PLAYER_Y_LOC = -97000;
public static float LOOT_RANGE = 100;
public static float MOB_SPEED_WALK = 6.5f;
public static float MOB_SPEED_WALKCOMBAT = 4.4f;
public static float MOB_SPEED_RUN = 14.67f;
public static float MOB_SPEED_RUNCOMBAT = 14.67f;
public static float STAMINA_REGEN_FLY_IDLE = -2f; // needs verifying
public static float STAMINA_REGEN_FLY_WALK = -1f; // needs verifying
public static float STAMINA_REGEN_FLY_RUN = -1.400000006f; // needs verifying
public static float STAMINA_REGEN_FLY_RUN_COMBAT = -1.6499999762f; // needs verifying
public static boolean DB_ENABLE_QUERY_OUTPUT = false;
public static float PLAYER_HATE_DELIMITER = 50; // reduces 50 hate a second
public static float PLAYER_COMBAT_HATE_MODIFIER = 2;
// DO NOT FINAL THESE FIELD!
public static Enum.AccountStatus accessLevel; // Min account level to login to server
public static boolean blockLogin = false;
public static boolean ENABLE_VAULT_FILL = false;
public static boolean ENABLE_MOB_LOOT = true;
public static boolean ENABLE_AUDIT_JOB_WORKERS = true;
public static boolean ENABLE_COMBAT_TARGET_HITBOX = true;
public static final float TRACK_ARROW_FAST_RANGE = 50f; // Range to go from
public static final int TRACK_ARROW_SENSITIVITY = 1000; // Refresh track
// arrows every X ms
public static final int TRACK_ARROW_SENSITIVITY_FAST = 250; // Refresh track
public static final int LOW_POPULATION = 100;
public static final int NORMAL_POPULATION = 500;
public static final int HIGH_POPULATION = 1000;
public static final int VERY_OVERPOPULATED_POPULATION = 3000;
public static final int FULL_POPULATION = 5000;
public static final int TRACK_WINDOW_THRESHOLD = 1000; // max refresh once
public static final int WHO_WINDOW_THRESHOLD = 3000; // max refresh once
// Mine related
public static final int MINE_EARLY_WINDOW = 16; // 4pm
public static final int MINE_LATE_WINDOW = 0; // Midnight
public static boolean ENABLE_VAULT_FILL = false;
public static boolean ENABLE_MOB_LOOT = true;
public static boolean ENABLE_AUDIT_JOB_WORKERS = true;
public static boolean ENABLE_COMBAT_TARGET_HITBOX = true;
public static String JUNIOR = "Junior";
public static String VETERAN = "Veteran";
public static String ELITE = "Elite";
public static String getEmulatorVersion() {
return Integer.toString(revisionNumber);
}
}
+101 -102
View File
@@ -50,16 +50,21 @@ public class LoginServer {
// Instance variables
private VersionInfoMsg versionInfoMessage;
public static int population = 0;
public static boolean worldServerRunning = false;
public static boolean loginServerRunning = false;
public static ServerStatusMsg serverStatusMsg = new ServerStatusMsg(0, (byte) 1);
private VersionInfoMsg versionInfoMessage;
// This is the entrypoint for the MagicBane Login Server when
// it is executed by the command line scripts. The fun begins here!
public LoginServer() {
}
// Mainline execution loop for the login server.
public static void main(String[] args) {
LoginServer loginServer;
@@ -83,8 +88,8 @@ public class LoginServer {
ConfigManager.serverType = Enum.ServerType.LOGINSERVER;
if (ConfigManager.init() == false) {
Logger.error("ABORT! Missing config entry!");
return;
Logger.error("ABORT! Missing config entry!");
return;
}
// Start the Login Server
@@ -101,7 +106,68 @@ public class LoginServer {
}
}
// Mainline execution loop for the login server.
// Constructor
public static boolean getActiveBaneQuery(PlayerCharacter playerCharacter) {
boolean outStatus = false;
// char has never logged on so cannot have dropped a bane
if (playerCharacter.getHash() == null)
return outStatus;
// query data warehouse for unresolved bane with this character
try (Connection connection = DbManager.getConnection();
PreparedStatement statement = buildQueryActiveBaneStatement(connection, playerCharacter);
ResultSet rs = statement.executeQuery()) {
while (rs.next()) {
outStatus = true;
}
} catch (SQLException e) {
Logger.error(e.toString());
}
return outStatus;
}
private static PreparedStatement buildQueryActiveBaneStatement(Connection connection, PlayerCharacter playerCharacter) throws SQLException {
PreparedStatement outStatement;
String queryString = "SELECT `city_id` FROM `warehouse_banehistory` WHERE `char_id` = ? AND `RESOLUTION` = 'PENDING'";
outStatement = connection.prepareStatement(queryString);
outStatement.setString(1, playerCharacter.getHash());
return outStatement;
}
public static boolean isPortInUse(int port) {
ProcessBuilder builder = new ProcessBuilder("/bin/bash", "-c", "lsof -i tcp:" + port + " | tail -n +2 | awk '{print $2}'");
builder.redirectErrorStream(true);
Process process = null;
String line = null;
boolean portInUse = false;
try {
process = builder.start();
InputStream is = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
while ((line = reader.readLine()) != null) {
portInUse = true;
}
} catch (IOException e) {
e.printStackTrace();
}
return portInUse;
}
private void exec() {
@@ -117,49 +183,43 @@ public class LoginServer {
// Invalidate cache for players driven by forum
// and stored procedure forum_link_pass()
// Run cache routine right away if requested.
// Run cache routine right away if requested.
File cacheFile = new File("cacheInvalid");
File cacheFile = new File("cacheInvalid");
if (cacheFile.exists() == true) {
if (cacheFile.exists() == true) {
nextCacheTime = LocalDateTime.now();
nextCacheTime = LocalDateTime.now();
try {
Files.deleteIfExists(Paths.get("cacheInvalid"));
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
Files.deleteIfExists(Paths.get("cacheInvalid"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (LocalDateTime.now().isAfter(nextCacheTime)) {
invalidateCacheList();
nextCacheTime = LocalDateTime.now().plusSeconds(30);
}
if (LocalDateTime.now().isAfter(nextCacheTime)) {
invalidateCacheList();
nextCacheTime = LocalDateTime.now().plusSeconds(30);
}
if (LocalDateTime.now().isAfter(nextServerTime)) {
checkServerHealth();
nextServerTime = LocalDateTime.now().plusSeconds(1);
}
if (LocalDateTime.now().isAfter(nextServerTime)) {
checkServerHealth();
nextServerTime = LocalDateTime.now().plusSeconds(1);
}
if (LocalDateTime.now().isAfter(nextDatabaseTime)) {
String pop = SimulationManager.getPopulationString();
Logger.info("Keepalive: " + pop);
nextDatabaseTime = LocalDateTime.now().plusMinutes(30);
}
if (LocalDateTime.now().isAfter(nextDatabaseTime)) {
String pop = SimulationManager.getPopulationString();
Logger.info("Keepalive: " + pop);
nextDatabaseTime = LocalDateTime.now().plusMinutes(30);
}
ThreadUtils.sleep(100);
ThreadUtils.sleep(100);
}
}
// Constructor
public LoginServer() {
}
private boolean init() {
// Initialize Application Protocol
@@ -219,6 +279,13 @@ public class LoginServer {
Logger.info("***Boot Successful***");
return true;
}
/*
* message handlers (relay)
*/
// ==============================
// Support Functions
// ==============================
private boolean initDatabaseLayer() {
@@ -288,13 +355,6 @@ public class LoginServer {
Logger.error(e.toString());
}
}
/*
* message handlers (relay)
*/
// ==============================
// Support Functions
// ==============================
public VersionInfoMsg getDefaultVersionInfo() {
return versionInfoMessage;
@@ -406,67 +466,6 @@ public class LoginServer {
}
public static boolean getActiveBaneQuery(PlayerCharacter playerCharacter) {
boolean outStatus = false;
// char has never logged on so cannot have dropped a bane
if (playerCharacter.getHash() == null)
return outStatus;
// query data warehouse for unresolved bane with this character
try (Connection connection = DbManager.getConnection();
PreparedStatement statement = buildQueryActiveBaneStatement(connection, playerCharacter);
ResultSet rs = statement.executeQuery()) {
while (rs.next()) {
outStatus = true;
}
} catch (SQLException e) {
Logger.error(e.toString());
}
return outStatus;
}
private static PreparedStatement buildQueryActiveBaneStatement(Connection connection, PlayerCharacter playerCharacter) throws SQLException {
PreparedStatement outStatement;
String queryString = "SELECT `city_id` FROM `warehouse_banehistory` WHERE `char_id` = ? AND `RESOLUTION` = 'PENDING'";
outStatement = connection.prepareStatement(queryString);
outStatement.setString(1, playerCharacter.getHash());
return outStatement;
}
public static boolean isPortInUse(int port) {
ProcessBuilder builder = new ProcessBuilder("/bin/bash", "-c", "lsof -i tcp:" + port + " | tail -n +2 | awk '{print $2}'");
builder.redirectErrorStream(true);
Process process = null;
String line = null;
boolean portInUse = false;
try {
process = builder.start();
InputStream is = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
while ((line = reader.readLine()) != null) {
portInUse = true;
}
} catch (IOException e) {
e.printStackTrace();
}
return portInUse;
}
private int readPopulationFile() {
ProcessBuilder builder = new ProcessBuilder("/bin/bash", "-c", "cat " + ConfigManager.DEFAULT_DATA_DIR + ConfigManager.MB_WORLD_NAME.getValue().replaceAll("'", "") + ".pop");
@@ -44,6 +44,18 @@ public class LoginServerMsgHandler implements NetMsgHandler {
this.server = server;
}
public static void sendInvalidNameMsg(String firstName, String lastName, int errorCode, ClientConnection clientConnection) {
InvalidNameMsg invalidNameMessage;
if (firstName.length() > 256 || lastName.length() > 256)
invalidNameMessage = new InvalidNameMsg(firstName, lastName, errorCode);
else
invalidNameMessage = new InvalidNameMsg(firstName, lastName, errorCode);
clientConnection.sendMsg(invalidNameMessage);
}
/*
* =========================================================================
* Client Messages
@@ -124,7 +136,7 @@ public class LoginServerMsgHandler implements NetMsgHandler {
cMajorVer = vim.getMajorVersion();
cMinorVer = vim.getMinorVersion();
if (!cMajorVer.equals(this.server.getDefaultVersionInfo().getMajorVersion())) {
if (!cMajorVer.equals(this.server.getDefaultVersionInfo().getMajorVersion())) {
this.KickToLogin(MBServerStatics.LOGINERROR_INCORRECT_CLIENT_VERSION, "Major Version Failure: " + cMajorVer, cc);
return;
}
@@ -139,7 +151,7 @@ public class LoginServerMsgHandler implements NetMsgHandler {
return;
}
if (cMinorVer.length() < 8 || cMinorVer.length() > 16) {
if (cMinorVer.length() < 8 || cMinorVer.length() > 16) {
this.KickToLogin(MBServerStatics.LOGINERROR_INCORRECT_CLIENT_VERSION, "Minor Version Failure: ", cc);
return;
}
@@ -149,7 +161,7 @@ public class LoginServerMsgHandler implements NetMsgHandler {
cc.machineID = cMinorVer;
// send fake right back to the client
outVim = new VersionInfoMsg(vim.getMajorVersion(), this.server.getDefaultVersionInfo().getMinorVersion() );
outVim = new VersionInfoMsg(vim.getMajorVersion(), this.server.getDefaultVersionInfo().getMinorVersion());
cc.sendMsg(outVim);
}
@@ -186,9 +198,9 @@ public class LoginServerMsgHandler implements NetMsgHandler {
return;
}
Logger.info("AutoRegister: " + uname + "/" + pass);
DbManager.AccountQueries.CREATE_SINGLE(uname, pass);
account = DbManager.AccountQueries.GET_ACCOUNT(uname);
Logger.info("AutoRegister: " + uname + "/" + pass);
DbManager.AccountQueries.CREATE_SINGLE(uname, pass);
account = DbManager.AccountQueries.GET_ACCOUNT(uname);
if (account == null) {
this.KickToLogin(MBServerStatics.LOGINERROR_INVALID_USERNAME_PASSWORD, "Could not find account (" + uname + ')', clientConnection);
@@ -353,18 +365,6 @@ public class LoginServerMsgHandler implements NetMsgHandler {
}
}
public static void sendInvalidNameMsg(String firstName, String lastName, int errorCode, ClientConnection clientConnection) {
InvalidNameMsg invalidNameMessage;
if (firstName.length() > 256 || lastName.length() > 256)
invalidNameMessage = new InvalidNameMsg(firstName, lastName, errorCode);
else
invalidNameMessage = new InvalidNameMsg(firstName, lastName, errorCode);
clientConnection.sendMsg(invalidNameMessage);
}
private void DeleteCharacter(DeleteCharacterMsg msg, ClientConnection origin) {
try {