Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/dist/game/GameServer_loop.sh b/dist/game/GameServer_loop.sh
- index a1c11c9..09adfb6 100644
- --- a/dist/game/GameServer_loop.sh
- +++ b/dist/game/GameServer_loop.sh
- @@ -1,14 +1,75 @@
- #!/bin/bash
- -# exit codes of GameServer:
- -# 0 normal shutdown
- -# 2 reboot attempt
- +################################################################################
- +# Server exit codes: ###########################################################
- +# - 0: Shutdown ###########################################################
- +# - 1: Error ###########################################################
- +# - 2: Restart ###########################################################
- +################################################################################
- -while :; do
- - [ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
- - [ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
- - java -Dpython.cachedir=../cachedir -Xms1024m -Xmx1792m -jar l2jserver.jar > log/stdout.log 2>&1
- - [ $? -ne 2 ] && break
- -# /etc/init.d/mysql restart
- - sleep 10
- +################################################################################
- +# Constants ####################################################################
- +################################################################################
- +APP_JAR="l2jserver.jar"
- +APP_TITLE="L2J Game Server"
- +JVM_ARGS_DEFAULT_PATH="config/default/Server_JVM_Args.txt"
- +APP_ARGS_DEFAULT_PATH="config/default/Server_APP_Args.txt"
- +JVM_ARGS_OVERWRITE_PATH="config/Server_JVM_Args.txt"
- +APP_ARGS_OVERWRITE_PATH="config/Server_APP_Args.txt"
- +LOGDIR_PATH="log/"
- +
- +err=2
- +while [ $err == 2 ]; do
- + err=0
- + JVM_ARGS_PATH="$JVM_ARGS_DEFAULT_PATH"
- + APP_ARGS_PATH="$APP_ARGS_DEFAULT_PATH"
- +
- + # Determine if the overwrite files are available
- + [ -f "$JVM_ARGS_OVERWRITE_PATH" ] && JVM_ARGS_PATH="$JVM_ARGS_OVERWRITE_PATH"
- + [ -f "$APP_ARGS_OVERWRITE_PATH" ] && APP_ARGS_PATH="$APP_ARGS_OVERWRITE_PATH"
- +
- + # Check for the arguments file to be available
- + if [ ! -f "$JVM_ARGS_PATH" ]; then
- + echo "$JVM_ARGS_PATH is missing. Aborting launch."
- + echo ""
- + break
- + elif [ ! -f "$APP_ARGS_PATH" ]; then
- + echo "$APP_ARGS_PATH is missing. Aborting launch."
- + echo ""
- + break
- + fi
- +
- + # Print used argument files and read them
- + echo "JVM arguments file: $JVM_ARGS_PATH"
- + echo "APP arguments file: $APP_ARGS_PATH"
- + echo ""
- + readarray -t JVM_ARGS < "$JVM_ARGS_PATH"
- + readarray -t APP_ARGS < "$APP_ARGS_PATH"
- +
- + # Construct and print the command line
- + APP_CMD_LN="java ${JVM_ARGS[*]//[$'\r\n']} -jar $APP_JAR ${APP_ARGS[*]//[$'\r\n']}"
- + echo "Startup command line: $APP_CMD_LN"
- + echo ""
- +
- + # rem Delete old *.lck files and archive old logs
- + [ -f "log/*.lck" ] && rm log/*.lck
- + for LOGFILE_PATH in $LOGDIR_PATH*; do
- + [ "$LOGFILE_PATH" == "$LOGDIR_PATH*" ] && continue
- + LOGFILE_NAME="${LOGFILE_PATH#*/}"
- + [[ "$LOGFILE_NAME" == [0-9]* ]] && continue
- + mv "$LOGFILE_PATH" "$LOGDIR_PATH`date +%Y-%m-%d_%H-%M-%S`_$LOGFILE_NAME"
- + done
- +
- + # Execute the command line
- + echo "Starting $APP_TITLE."
- + echo ""
- + $APP_CMD_LN
- +
- + err=$?
- + [ $err == 2 ] && echo "Admin Restarted $APP_TITLE."
- +
- + sleep 10;
- done
- +
- +[ $err == 1 ] && echo "$APP_TITLE terminated abnormally!"
- +echo "$APP_TITLE terminated."
- \ No newline at end of file
- diff --git a/dist/game/config/Character.properties b/dist/game/config/Character.properties
- deleted file mode 100644
- index fcb612f..0000000
- --- a/dist/game/config/Character.properties
- +++ /dev/null
- @@ -1,822 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Alternative Character Settings
- -# ---------------------------------------------------------------------------
- -# This properties file is solely for the purpose of Character modifications that directly influence them.
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# Statistics
- -# ---------------------------------------------------------------------------
- -
- -# This option, if enabled, will force a character to de-level if the characters' experience is below their level after losing experience on death.
- -# If this is set to False, the character will not de-level even if their Experience is below their level after death.
- -# Default: True
- -Delevel = True
- -
- -# This option enable check for all player skills for skill level.
- -# If player level is lower than skill learn level - 9, skill level is decreased to next possible level.
- -# If there is no possible level, skill is removed from player.
- -DecreaseSkillOnDelevel = True
- -
- -# Weight limit multiplier. Example: Setting this to 5 will give players 5x the normal weight limit.
- -# Default: 1
- -AltWeightLimit = 1
- -
- -# Run speed modifier. Example: Setting this to 5 will give players +5 to their running speed.
- -# Default: 0
- -RunSpeedBoost = 0
- -
- -# Chance of receiving the Death Penalty debuff when killed by a mob.
- -# Default: 20
- -DeathPenaltyChance = 20
- -
- -# Percent of HP, MP, and CP which is restored on character revival.
- -# Use 0 to disable restore
- -# Default: 0, 65, 0
- -RespawnRestoreCP = 0
- -RespawnRestoreHP = 65
- -RespawnRestoreMP = 0
- -
- -# Percent of HP, MP, and CP regeneration for players.
- -# Example: Setting HP to 10 will cause player HP to regenerate 90% slower than normal.
- -# Default: 100, 100, 100
- -HpRegenMultiplier = 100
- -MpRegenMultiplier = 100
- -CpRegenMultiplier = 100
- -
- -# ---------------------------------------------------------------------------
- -# Skills & Effects
- -# ---------------------------------------------------------------------------
- -
- -# When this is enabled it will read the "SkillDurationList" option.
- -# This will basically overlook the "time = x" in the skill XMLs so that you do not need to modify the L2J Datapack XMLs to increase skill duration.
- -# Default: False
- -EnableModifySkillDuration = False
- -# Skill duration list
- -# Format: skillid,newtime;skillid2,newtime2...
- -# Example:
- -# This enable 1h(3600) duration for songs, the "\"indicates new line,
- -# and is only set for formating purposes.
- -# SkillDurationList = 264,3600;265,3600;266,3600;267,3600;268,3600;\
- -# 269,3600;270,3600;304,3600;305,1200;306,3600;308,3600;349,3600;\
- -# 363,3600;364,3600
- -SkillDurationList =
- -
- -# When this is enabled it will read the "SkillReuseList" option.
- -EnableModifySkillReuse = False
- -# Format: skillid,newDelayTime;skillid,newDelayTime2 (See skillDuration for examples)
- -SkillReuseList =
- -
- -# If it's true all class skills will be delivered upon level up and login.
- -# Default: False
- -AutoLearnSkills = False
- -
- -# If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills.
- -# Default: False
- -AutoLearnForgottenScrollSkills = False
- -
- -# Default: False
- -AutoLootHerbs = False
- -
- -# Maximum number of buffs and songs/dances.
- -# Remember that Divine Inspiration will give players 4 additional buff slots on top of the number specified in "maxbuffamount".
- -# Default: 20, 12, 12
- -MaxBuffAmount = 20
- -MaxTriggeredBuffAmount = 12
- -MaxDanceAmount = 12
- -
- -# Allow players to cancel dances/songs via Alt+click on buff icon
- -# Default: False
- -DanceCancelBuff = False
- -
- -# This option enables/disables additional MP consume for dances and songs.
- -# Default: True
- -DanceConsumeAdditionalMP = True
- -
- -# Allow players to have all dances/songs stored when logout.
- -# Default: False
- -AltStoreDances = False
- -
- -# This option allows a player to automatically learn Divine Inspiration.
- -# This is not included in AutoLearnSkills above.
- -# Default: False
- -AutoLearnDivineInspiration = False
- -
- -# This is to allow a character to be canceled during bow use, skill use, or both.
- -# Available Options: bow, cast, all
- -# Default: cast
- -AltGameCancelByHit = cast
- -
- -# This option, if enabled, will allow magic to fail, and if disabled magic damage will always succeed with a 100% chance.
- -# Default: True
- -MagicFailures = True
- -
- -# Protection from aggressive mobs after getting up from fake death.
- -# The value is specified in seconds.
- -# Default: 0
- -PlayerFakeDeathUpProtection = 0
- -
- -# This option is to enable or disable the storage of buffs/debuffs among other effects.
- -# Default: True
- -StoreSkillCooltime = True
- -
- -# This option is to enable or disable the storage of buffs/debuffs among other effects during
- -# a subclass change
- -# Default: False
- -SubclassStoreSkillCooltime = False
- -
- -# These are alternative rules for shields.
- -# If True and they block:
- -# The damage is powerAtk-shieldDef,
- -# If False and they block:
- -# The damage is powerAtk / (shieldDef + powerDef)
- -# Default: False
- -AltShieldBlocks = False
- -
- -# This is the percentage for perfect shield block rate.
- -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- -# Default: 10
- -AltPerfectShieldBlockRate = 10
- -
- -# This is the value ticks are multiplied with to result in interval per tick in milliseconds.
- -# Note: Editing this will not affect how much the over-time effects heals since heal scales with that value too.
- -# Default: 666
- -EffectTickRatio = 666
- -
- -# ---------------------------------------------------------------------------
- -# Class, Sub-class and skill learning options
- -# ---------------------------------------------------------------------------
- -
- -# Allow use of Event Managers for changing occupation without any quests.
- -# Default: False
- -AllowClassMasters = False
- -
- -# ConfigClassMaster=1;[57(100000)];[];2;[57(1000000)];[];3;[57(10000000)],[5575(1000000)];[6622(1)]
- -# 1st occupation change for 100.000 Adena (item id 57)
- -# 2nd occupation change for 1.000.0000 Adena (item id 57)
- -# 3rd occupation change for 10.000.0000 Adena (item id 57) and 1.000.000 Ancient Adena (item id 5575)
- -# on 3rd occupation change player will be rewarded with 1 Book of Giants (item id 6622)
- -# ConfigClassMaster=1;[];[];2;[];[];3;[];[]
- -# 1st, 2nd, 3rd occupation change for free, without rewards.
- -# ConfigClassMaster=1;[];[];2;[];[]
- -# Allow only first and second change.
- -ConfigClassMaster = 1;[];[];2;[];[];3;[];[]
- -
- -# Class Masters will allow changing to any occupation on any level inside class tree
- -# For example, Dwarven Fighter will be able to advance to:
- -# Artisan, Scavenger, Warsmith, Bounty Hunter, Maestro, Fortune Seeker.
- -# But Warsmith will be able to change only to Maestro.
- -# Default = False
- -AllowEntireTree = False
- -
- -# When character reach levels 20,40,76 he will receive tutorial page
- -# with list of the all possible variants, and can select and immediately
- -# change to the new occupation, or decide to choose later (on next login).
- -# Can be used with or without classic Class Masters.
- -# Default = False
- -AlternateClassMaster = False
- -
- -# Require life crystal needed to learn clan skills.
- -# Default: True
- -LifeCrystalNeeded = True
- -
- -# Require book needed to enchant skills.
- -# Default: True
- -EnchantSkillSpBookNeeded = True
- -
- -# Require spell book needed to learn Divine Inspiration.
- -# Default: True
- -DivineInspirationSpBookNeeded = True
- -
- -# When enabled, the following will be true:
- -# All classes can learn all skills.
- -# Skills of another class costs x2 SP to learn.
- -# Skills of another race costs x2 SP to learn.
- -# Skills of fighters/mages costs x3 SP to learn.
- -# Default: False
- -AltGameSkillLearn = False
- -
- -# Allow player to sub-class without checking for unique quest items.
- -# Default: False
- -AltSubClassWithoutQuests = False
- -
- -# Allow player to add/change subclass at all village master
- -# Default: False
- -AltSubclassEverywhere = False
- -
- -# Allow player to learn transformations without quest.
- -# Default: False
- -AltTransformationWithoutQuest = False
- -
- -# Fee to remove Transfer skills.
- -# Default: 10000000
- -FeeDeleteTransferSkills = 10000000
- -
- -# Fee to remove Sub-Class skills.
- -# Default: 10000000
- -FeeDeleteSubClassSkills = 10000000
- -
- -# ---------------------------------------------------------------------------
- -# Summons configuration
- -# ---------------------------------------------------------------------------
- -
- -# This option is to enable or disable the storage of buffs/debuffs among other effects on pets/invocations
- -# Default: True
- -SummonStoreSkillCooltime = True
- -
- -# Servitor summons on login if player had it summoned before logout
- -# Default: True
- -RestoreServitorOnReconnect = True
- -
- -# Pet summons on login if player had it summoned before logout
- -# Default: True
- -RestorePetOnReconnect = True
- -
- -# ---------------------------------------------------------------------------
- -# Vitality configuration
- -# ---------------------------------------------------------------------------
- -
- -# Enables vitality system
- -# Default: True
- -EnableVitality = True
- -
- -# Do you want players to recover their vitality when they reconnect?
- -# This is calculated with the time they've been offline
- -# Actual Time - Last Time Online / 1000 x rate recovery on reconnect
- -# Notes:
- -# Works only if EnableVitality = True
- -# Default: True
- -RecoverVitalityOnReconnect = True
- -
- -# Option to set a lower vitality at character creation.
- -# Vitality needs to be enabled, and startingpoints needs to be lower
- -# than max-vitality points.
- -# Default: 20000
- -StartingVitalityPoints = 20000
- -
- -
- -# ---------------------------------------------------------------------------
- -# Limits
- -# ---------------------------------------------------------------------------
- -
- -# Maximum Exp Bonus.
- -# from vitality + nevit's hunting bonus, and etc..
- -# Default: 3.5
- -MaxExpBonus = 3.5
- -
- -# Maximum Sp Bonus.
- -# from vitality + nevit's hunting bonus, and etc..
- -# Default: 3.5
- -MaxSpBonus = 3.5
- -
- -# Maximum character running speed.
- -# Default: 250
- -MaxRunSpeed = 250
- -
- -# Maximum character Physical Critical Rate. (10 = 1%)
- -# Default: 500
- -MaxPCritRate = 500
- -
- -# Maximum character Magic Critical Rate. (10 = 1%)
- -# Default: 200
- -MaxMCritRate = 200
- -
- -# Maximum character Attack Speed.
- -# Default: 1500
- -MaxPAtkSpeed = 1500
- -
- -# Maximum character Cast Speed.
- -# Default: 1999
- -MaxMAtkSpeed = 1999
- -
- -# Maximum character Evasion.
- -# Default: 250
- -MaxEvasion = 250
- -
- -# Minimum and Maximum Abnormal State Success Rate.
- -# This affect all skills/effects chances, except in skills where minChance or maxChance parameters are defined.
- -# Default: H5 minimum of 10% and maximum of 90%.
- -MinAbnormalStateSuccessRate = 10
- -MaxAbnormalStateSuccessRate = 90
- -
- -# It's possible to customize the maximum level
- -# Above the default requires extra data
- -
- -# Maximum player level
- -# Default: 85
- -MaxPlayerLevel = 85
- -
- -# Maximum pet level
- -# Default: 86
- -MaxPetLevel = 86
- -
- -# Maximum number of allowed subclasses for every player.
- -# Default: 3
- -MaxSubclass = 3
- -
- -# Starting level for subclasses.
- -# Default: 40
- -BaseSubclassLevel = 40
- -
- -# Maximum subclass level.
- -# Default: 80
- -MaxSubclassLevel = 80
- -
- -# Maximum number of allowed slots for Private Stores Sell.
- -# Other means all the other races aside from Dwarf.
- -# Default: 4, 3
- -MaxPvtStoreSellSlotsDwarf = 4
- -MaxPvtStoreSellSlotsOther = 3
- -
- -# Maximum number of allowed slots for Private Stores Buy.
- -# Other means all the other races aside from Dwarf.
- -# Default: 5, 4
- -MaxPvtStoreBuySlotsDwarf = 5
- -MaxPvtStoreBuySlotsOther = 4
- -
- -# This will control the inventory space limit (NOT WEIGHT LIMIT).
- -# Default: 80, 100, 250
- -MaximumSlotsForNoDwarf = 80
- -MaximumSlotsForDwarf = 100
- -MaximumSlotsForGMPlayer = 250
- -MaximumSlotsForQuestItems = 100
- -
- -# This will control a character's warehouse capacity.
- -# Notes:
- -# This must be LESS then 300 or the client will crash.
- -# Default: 120, 100, 200, 20
- -MaximumWarehouseSlotsForDwarf = 120
- -MaximumWarehouseSlotsForNoDwarf = 100
- -MaximumWarehouseSlotsForClan = 200
- -
- -# Freight
- -# Maximum items that can be placed in Freight
- -# Default: 200
- -MaximumFreightSlots = 200
- -# The price for each item that's deposited
- -# Default: 1000
- -FreightPrice = 1000
- -
- -# Npc talk blockage. When a player talks to a NPC, he must wait some secs
- -# before being able to walk again. In seconds
- -# Default: 3
- -# Set to 0 to disable it
- -NpcTalkBlockingTime = 3
- -
- -# ---------------------------------------------------------------------------
- -# Enchanting
- -# ---------------------------------------------------------------------------
- -# This controls the chance an item has to break if it is enchanted.
- -# This chance is in %, so if you set this to 100%, enchants will always succeed.
- -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- -EnchantChanceElementStone = 50
- -EnchantChanceElementCrystal = 30
- -EnchantChanceElementJewel = 20
- -EnchantChanceElementEnergy = 10
- -
- -# List of non-enchantable items.
- -# Currently apprentice, travelers weapons and Pailaka items
- -# Default: 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
- -EnchantBlackList = 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
- -
- -# ---------------------------------------------------------------------------
- -# Augmenting
- -# ---------------------------------------------------------------------------
- -# These control the chance to get a skill in the augmentation process.
- -# Default: 15, 30, 45, 60
- -AugmentationNGSkillChance = 15
- -AugmentationMidSkillChance = 30
- -AugmentationHighSkillChance = 45
- -AugmentationTopSkillChance = 60
- -# Accessory augmentation skills currently disabled
- -AugmentationAccSkillChance = 0
- -
- -# This controls the chance to get a base stat modifier in the augmentation process.
- -# Notes:
- -# This has no dependency on the grade of Life Stone.
- -# Default: 1
- -AugmentationBaseStatChance = 1
- -
- -# These control the chance to get a glow effect in the augmentation process.
- -# Notes:
- -# No/Mid Grade Life Stone can not have glow effect if you do not get a skill or base stat modifier.
- -# Default: 0, 40, 70, 100
- -AugmentationNGGlowChance = 0
- -AugmentationMidGlowChance = 40
- -AugmentationHighGlowChance = 70
- -AugmentationTopGlowChance = 100
- -
- -# This will enable retail like weapon augmentation, but then you cant change
- -# weapon glow, base stat chance, because it wouldnt be retail like again.
- -RetailLikeAugmentation = True
- -
- -# This will have effect ONLY when RetailLikeAugmentation is True. The sum of 4 numbers must be 100!
- -# You can change probability (in %) of augment color chances - in order yellow, blue, purple, red
- -# Purple and Red always give skill. Default is 55%,35%,7%,3% for all lifestone grades (ie 7+3=10%
- -# for skill, not counting blue ones, that are very rare and not useful anyway).
- -RetailLikeAugmentationNoGradeChance = 55,35,7,3
- -RetailLikeAugmentationMidGradeChance = 55,35,7,3
- -RetailLikeAugmentationHighGradeChance = 55,35,7,3
- -RetailLikeAugmentationTopGradeChance = 55,35,7,3
- -
- -# This will enable retail like accessory augmentation, but then you cant change skill chances for accessory augments
- -RetailLikeAugmentationAccessory = True
- -
- -# List of non-augmentable items, currently contains only Grand Boss jewels
- -# Shadow, common, time-limited, hero, pvp, wear items are hardcoded, as well as all etcitems.
- -# Rods can't be augmented too.
- -# Default: 6656,6657,6658,6659,6660,6661,6662,8191,10170,10314
- -AugmentationBlackList = 6656,6657,6658,6659,6660,6661,6662,8191,10170,10314,13740,13741,13742,13743,13744,13745,13746,13747,13748,14592,14593,14594,14595,14596,14597,14598,14599,14600,14664,14665,14666,14667,14668,14669,14670,14671,14672,14801,14802,14803,14804,14805,14806,14807,14808,14809,15282,15283,15284,15285,15286,15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,15299,16025,16026,21712,22173,22174,22175
- -
- -# Allows alternative augmentation of PvP items.
- -# Default: False
- -AltAllowAugmentPvPItems = false
- -
- -# ---------------------------------------------------------------------------
- -# Karma
- -# ---------------------------------------------------------------------------
- -
- -# Karma player can be killed in Peace zone.
- -# Default: False
- -AltKarmaPlayerCanBeKilledInPeaceZone = False
- -
- -# Karma player can use GateKeeper.
- -# Default: False
- -AltKarmaPlayerCanUseGK = False
- -
- -# Karma player can use escape and recall skills.
- -# Default: True
- -AltKarmaPlayerCanTeleport = True
- -
- -# Karma player can shop.
- -# Default: True
- -AltKarmaPlayerCanShop = True
- -
- -# Karma player can trade.
- -# Default: True
- -AltKarmaPlayerCanTrade = True
- -
- -# Karma player can use warehouse.
- -# Default: True
- -AltKarmaPlayerCanUseWareHouse = True
- -
- -
- -# ---------------------------------------------------------------------------
- -# Fame
- -# ---------------------------------------------------------------------------
- -
- -# The maximum number of Fame points a player can have
- -# Default: 100000
- -MaxPersonalFamePoints = 100000
- -
- -# How frequently the player gets Fame points while in a Fortress Siege zone
- -# Default: 300s (5 min)
- -FortressZoneFameTaskFrequency = 300
- -
- -# How much Fame aquired while in a Fortress Siege Zone
- -# Default: 31
- -FortressZoneFameAquirePoints = 31
- -
- -# How frequently the player gets Fame points while in a Castle Siege zone
- -# Default: 300s (5 min)
- -CastleZoneFameTaskFrequency = 300
- -
- -# How much Fame acquired while in a Castle Siege Zone
- -# Default: 125
- -CastleZoneFameAquirePoints = 125
- -
- -# Dead players can receive fame.
- -# Default: True
- -FameForDeadPlayers = True
- -
- -# ---------------------------------------------------------------------------
- -# Crafting
- -# ---------------------------------------------------------------------------
- -
- -# Option to enable or disable crafting.
- -# Default: True
- -CraftingEnabled = True
- -
- -# Enable/Disable crafting of Masterwork items (If set to true, masterwork items can be created when crafting).
- -# Default: True
- -CraftMasterwork = True
- -
- -# Limits for recipes
- -# Default: 50, 50
- -DwarfRecipeLimit = 50
- -CommonRecipeLimit = 50
- -
- -# Alternative crafting rules. If enabled, the following will be true:
- -# Crafting takes time.
- -# Players get EXP/SP for crafting.
- -# Default: False
- -AltGameCreation = False
- -
- -# Crafting Time multiplier.
- -# The higher the number, the more time the crafting process takes. XP/SP reward increases with time.
- -# Default: 1
- -AltGameCreationSpeed = 1
- -
- -# Additional crafting XP/SP rate multiplier.
- -# Default: 1, 1
- -AltGameCreationXpRate = 1
- -AltGameCreationSpRate = 1
- -
- -# Additional XP/SP rate multiplier when creating rare item.
- -# Default: 2
- -AltGameCreationRareXpSpRate = 2
- -
- -# If set to False, blacksmiths don't take recipes from players inventory when crafting.
- -# Default: True
- -AltBlacksmithUseRecipes = True
- -
- -# Store/Restore Dwarven Manufacture list
- -# Keep manufacture shoplist after relog
- -# Default: False
- -StoreRecipeShopList = False
- -
- -# ---------------------------------------------------------------------------
- -# Clan
- -# ---------------------------------------------------------------------------
- -
- -# Day on which all pending clan leader requests will be applied:
- -# Possible values:
- -# 1 - Sunday
- -# 2 - Monday
- -# 3 - Tuesday
- -# 4 - Wednesday
- -# 5 - Thursday
- -# 6 - Friday
- -# 7 - Saturday
- -# Default: 3
- -AltClanLeaderDateChange = 3
- -
- -# Hour on which all pending data requests will be applied:
- -# Format: Hour:Minute:Second
- -# Default: 00:00:00
- -AltClanLeaderHourChange = 00:00:00
- -
- -# When enabled all clan leader requests will be performed instantly.
- -# Default: False
- -AltClanLeaderInstantActivation = False
- -
- -# Number of days you have to wait before joining another clan.
- -# Default: 1
- -DaysBeforeJoinAClan = 1
- -
- -# Number of days you have to wait before creating a new clan.
- -# Default: 10
- -DaysBeforeCreateAClan = 10
- -
- -# Number of days it takes to dissolve a clan.
- -# Default: 7
- -DaysToPassToDissolveAClan = 7
- -
- -# Number of days before joining a new alliance when clan voluntarily leave an alliance.
- -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- -# Default: 1
- -DaysBeforeJoinAllyWhenLeaved = 1
- -
- -# Number of days before joining a new alliance when clan was dismissed from an alliance.
- -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- -# Default: 1
- -DaysBeforeJoinAllyWhenDismissed = 1
- -
- -# Number of days before accepting a new clan for alliance when clan was dismissed from an alliance.
- -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- -# Default: 1
- -DaysBeforeAcceptNewClanWhenDismissed = 1
- -
- -# Number of days before creating a new alliance after dissolving an old alliance.
- -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- -# Default: 1
- -DaysBeforeCreateNewAllyWhenDissolved = 1
- -
- -# Maximum number of clans in alliance.
- -# Default: 3
- -AltMaxNumOfClansInAlly = 3
- -
- -# Allow clan members to withdraw from the clan warehouse.
- -# Default: False
- -AltMembersCanWithdrawFromClanWH = False
- -
- -# Remove castle circlets after a clan loses their castle or a player leaves a clan.
- -# Default: True
- -RemoveCastleCirclets = True
- -
- -# Number of members needed to request a clan war.
- -# Default: 15
- -AltClanMembersForWar = 15
- -
- -
- -# ---------------------------------------------------------------------------
- -# Party
- -# ---------------------------------------------------------------------------
- -
- -# CONFUSING(nothing to do with party) -> When you made damage to a mob
- -# and are inside this range, you will be considered as player to reward.
- -# Checks for party range to mob to calculate rewards(exp, items).
- -# Default: 1600
- -AltPartyRange = 1600
- -
- -# 1. Used for Adena distribution in party
- -# 2. Used to handle random and by turn party loot
- -# Default: 1400
- -AltPartyRange2 = 1400
- -
- -# If true, when party leader leaves party, next member in party will be the leader.
- -# If false the party be will dispersed.
- -# Default: False
- -AltLeavePartyLeader = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Initial Settings:
- -# ---------------------------------------------------------------------------
- -
- -#Initial Equipment Events is to enable a special settings for the items that a new character starts with.
- -#Default: False
- -InitialEquipmentEvent = False
- -
- -# This is the amount of Adena that a new character starts their character with.
- -# Default: 0
- -StartingAdena = 0
- -
- -# This is the starting level of the new character.
- -# Default: 1
- -StartingLevel = 1
- -
- -# This is the amount of SP that a new character starts their character with.
- -# Default: 0
- -StartingSP = 0
- -
- -# ---------------------------------------------------------------------------
- -# Other Settings:
- -# ---------------------------------------------------------------------------
- -
- -# This is the maximum amount of Adena that character can have in his inventory or warehouse.
- -# The maximum input amount is 9,223,372,036,854,775,807. (nine quintillion
- -# two hundred twenty three quadrillion three hundred seventy two trillion thirty six billion
- -# eight hundred fifty four million seven hundred seventy five thousand eight hundred seven)
- -# Setting negative values (-1 or others) will result in maximum amount available.
- -# Big values do not cause critical errors, although only 16 digits are visible in the inventory
- -# (example: 3,372,036,854,775,807 is visible out of 9,223,372,036,854,775,807)
- -# Default: 99900000000 (99 bilion and 900 milion)
- -MaxAdena = 99900000000
- -
- -# This option, when set to True, will enable automatically picking up items.
- -# If set False it will force the player to pickup dropped items from mobs.
- -# This excludes herbs mentioned above and items from Raid/GrandBosses with minions.
- -# Default: False
- -AutoLoot = False
- -
- -# This option, when set to True, will enable automatically picking up items from Raid/GrandBosses with minions.
- -# If set False it will force the player to pickup dropped items from bosses.
- -# This excludes herbs mentioned above and items from mobs.
- -# Default: False
- -AutoLootRaids = False
- -
- -# Delay for raid drop items loot privilege
- -# Require Command Channel , check next option
- -# Value is in seconds
- -# Default: 900 (15min)
- -RaidLootRightsInterval = 900
- -
- -# Minimal size of Command Channel for apply raid loot privilege
- -# Default: 45
- -RaidLootRightsCCSize = 45
- -
- -# This is the time in seconds that it will take for the player command "/unstuck" to activate.
- -# Default: 300
- -UnstuckInterval = 300
- -
- -# Teleport Watchdog Timeout (seconds)
- -# Player forced to appear if remain in teleported state longer than timeout
- -# Does not set too low, recommended value 60s.
- -# This time is in seconds, leave it at 0 if you want this feature disabled.
- -# Default: 0
- -TeleportWatchdogTimeout = 0
- -
- -# After a player teleports, this is the time the player is protected.
- -# This time is in seconds, leave it at 0 if you want this feature disabled.
- -# Retail (Since GE): 600 (10 minutes)
- -# Default: 600
- -PlayerSpawnProtection = 600
- -
- -# Spawn protection should disappear with any action with the exception
- -# of the item usage from items in this list.
- -# Format: itemId,itemId,itemId,....
- -# Default: 0
- -PlayerSpawnProtectionAllowedItems =
- -
- -# Teleport spawn protection time. It will protect the player in the
- -# teleport spawn for the given time. 0 to disable feature
- -PlayerTeleportProtection = 0
- -
- -# If enabled, players respawn in town on different locations defined in zone.xml for given town.
- -# If disabled the first spawn location from zone.xml is used.
- -# Default: True
- -RandomRespawnInTownEnabled = True
- -
- -# This will allow a random offset from the base teleport location coordinates based on a maximum offset.
- -# Default: True
- -OffsetOnTeleportEnabled = True
- -
- -# Maximum offset for base teleport location when OffsetOnTeleportEnabled is enabled .
- -# Default: 50
- -MaxOffsetOnTeleport = 50
- -
- -# This option is to enable or disable the use of in game petitions.
- -# The MaxPetitionsPerPlayer is the amount of petitions a player can make.
- -# The MaximumPendingPetitions is the total amount of petitions in the server.
- -# Note:
- -# Logically, MaximumPendingPetitions must be higher then MaxPetitionsPerPlayer.
- -# Default: True, 5, 25
- -PetitioningAllowed = True
- -MaxPetitionsPerPlayer = 5
- -MaxPetitionsPending = 25
- -
- -# Free teleporting around the world.
- -# Default: False
- -AltFreeTeleporting = False
- -
- -# Allow character deletion after days set below. To disallow character deletion, set this equal to 0.
- -# Default: 7
- -DeleteCharAfterDays = 7
- -
- -# Alternative Xp/Sp rewards, if not 0, then calculated as 2^((mob.level-player.level) / coef). Coef are the 2 numbers set below.
- -# A few examples for "AltGameExponentXp = 5." and "AltGameExponentSp = 3.":
- -# diff = 0 (player and mob has the same level), XP bonus rate = 1, SP bonus rate = 1
- -# diff = 3 (mob is 3 levels above), XP bonus rate = 1.52, SP bonus rate = 2
- -# diff = 5 (mob is 5 levels above), XP bonus rate = 2, SP bonus rate = 3.17
- -# diff = -8 (mob is 8 levels below), XP bonus rate = 0.4, SP bonus rate = 0.16
- -# Default: 0, 0
- -AltGameExponentXp = 0
- -AltGameExponentSp = 0
- -
- -
- -# PARTY XP DISTRIBUTION
- -# With "auto method" member is cut from Exp/SP distribution when his share is lower than party bonus acquired for him (30% for 2 member party).
- -# In that case he will not receive any Exp/SP from party and is not counted for party bonus.
- -# If you don't want to have a cutoff point for party members' XP distribution, set the first option to "none".
- -# Available Options: highfive, auto, level, percentage, none
- -# Default: highfive
- -PartyXpCutoffMethod = highfive
- -
- -# This option takes effect when "percentage" method is chosen. Don't use high values for this!
- -# Default: 3.0
- -PartyXpCutoffPercent = 3.0
- -
- -# This option takes effect when "level" method is chosen. Don't use low values for this!
- -# Default: 20
- -PartyXpCutoffLevel = 20
- -
- -# This option takes effect when "highfive" method is chosen.
- -# Each pair of numbers represent a level range.
- -# If the gap is between the first pair, there is no penalty.
- -# If the gap is between the second pair, the lowest party member will gain only 30% of the XP that others receive.
- -# If the gap is between the last pair, the lowest party member will not receive any XP.
- -# Default: 0,9;10,14;15,99
- -PartyXpCutoffGaps = 0,9;10,14;15,99
- -
- -# This option takes effect when "highfive" method is chosen.
- -# Each number represent the XP percent gain at that level gap.
- -# For the first gap, the lowest party member will gain 100% XP as there is no penalty.
- -# For the second gap, the lowest party member will gain only 30% of the XP that others receive.
- -# For the last gap, the lowest party member will not receive any XP.
- -# Default: 100;30;0
- -PartyXpCutoffGapPercent = 100;30;0
- -
- -# Disable tutorial on new player enter into Game
- -# Please remember its sometimes important to novice players
- -# Default: False
- -DisableTutorial = False
- -
- -# Expertise penalty
- -# If disabled, player will not receive penalty for equip higher grade items
- -# Default: True
- -ExpertisePenalty = True
- -
- -# Player can in client define his own key mapping and for save it must be stored server side.
- -# Disabled until confirmed as working.
- -# Default: False
- -StoreCharUiSettings = False
- -
- -# Character name restriction
- -# Disallow characters to have a name which contains the words.
- -# Split them with ",". Use lowercase. Example: announcements,announce...
- -# Default: annou,ammou,amnou,anmou,anou,amou,announcements,announce
- -ForbiddenNames = annou,ammou,amnou,anmou,anou,amou,announcements,announce
- -
- -# If enabled, when character in silence (block PMs) mode sends a PM to a character, silence mode no longer blocks this character,
- -# allowing both characters send each other PMs even with enabled silence mode.
- -# The exclude list is cleared each time the character goes into silence mode.
- -SilenceModeExclude = False
- -
- -# Enables alternative validation of triggering skills.
- -# When enabled pvp skills will not be casted on non flagged player.
- -# Sadly its non-retail
- -# Default: False
- -AltValidateTriggerSkills = False
- diff --git a/dist/game/config/ConquerableHallSiege.properties b/dist/game/config/ConquerableHallSiege.properties
- deleted file mode 100644
- index 583d5d5..0000000
- --- a/dist/game/config/ConquerableHallSiege.properties
- +++ /dev/null
- @@ -1,24 +0,0 @@
- -# --------------------------------------------------
- -# Contestable halls general configuration
- -# --------------------------------------------------
- -
- -# Min level that each clan needs to register
- -# for the siege
- -MinClanLevel = 4
- -
- -# Max number of clans allowed to register for
- -# the battle
- -MaxAttackers = 500
- -
- -# Max numbers of flags that each clan is allowed
- -# to put
- -MaxFlagsPerClan = 1
- -
- -# Enable the fame reward
- -EnableFame = false
- -
- -# Fame amount
- -FameAmount = 0
- -
- -# Fame Frequency
- -FameFrequency = 0
- diff --git a/dist/game/config/Feature.properties b/dist/game/config/Feature.properties
- deleted file mode 100644
- index d8a6bf0..0000000
- --- a/dist/game/config/Feature.properties
- +++ /dev/null
- @@ -1,396 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Alternative Feature Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -# ---------------------------------------------------------------------------
- -# Castle
- -# ---------------------------------------------------------------------------
- -
- -# Siege Time rules
- -# Which hours can change Castle Lords
- -# Default: 16,20
- -SiegeHourList = 16,20
- -
- -# Teleport Function price
- -# Price = 7 days
- -CastleTeleportFunctionFeeRatio = 604800000
- -CastleTeleportFunctionFeeLvl1 = 1000
- -CastleTeleportFunctionFeeLvl2 = 10000
- -
- -# Support magic buff price
- -# Price = 7 day
- -CastleSupportFunctionFeeRatio = 604800000
- -CastleSupportFeeLvl1 = 49000
- -CastleSupportFeeLvl2 = 120000
- -
- -# MP Regeneration price
- -# Price = 7 day
- -CastleMpRegenerationFunctionFeeRatio = 604800000
- -CastleMpRegenerationFeeLvl1 = 45000
- -CastleMpRegenerationFeeLvl2 = 65000
- -
- -# Hp Regeneration price
- -# Price = 7 day
- -CastleHpRegenerationFunctionFeeRatio = 604800000
- -CastleHpRegenerationFeeLvl1 = 12000
- -CastleHpRegenerationFeeLvl2 = 20000
- -
- -# Exp Regeneration price
- -# Price = 7 day
- -CastleExpRegenerationFunctionFeeRatio = 604800000
- -CastleExpRegenerationFeeLvl1 = 63000
- -CastleExpRegenerationFeeLvl2 = 70000
- -
- -# Outer Door upgrade price
- -OuterDoorUpgradePriceLvl2 = 3000000
- -OuterDoorUpgradePriceLvl3 = 4000000
- -OuterDoorUpgradePriceLvl5 = 5000000
- -
- -# Inner Door upgrade price
- -InnerDoorUpgradePriceLvl2 = 750000
- -InnerDoorUpgradePriceLvl3 = 900000
- -InnerDoorUpgradePriceLvl5 = 1000000
- -
- -# Wall upgrade price
- -WallUpgradePriceLvl2 = 1600000
- -WallUpgradePriceLvl3 = 1800000
- -WallUpgradePriceLvl5 = 2000000
- -
- -# Trap upgrade price
- -TrapUpgradePriceLvl1 = 3000000
- -TrapUpgradePriceLvl2 = 4000000
- -TrapUpgradePriceLvl3 = 5000000
- -TrapUpgradePriceLvl4 = 6000000
- -
- -# ---------------------------------------------------------------------------
- -# Clan Hall
- -# ---------------------------------------------------------------------------
- -
- -# Teleport Function price
- -# Price = 7 days
- -ClanHallTeleportFunctionFeeRatio = 604800000
- -ClanHallTeleportFunctionFeeLvl1 = 7000
- -ClanHallTeleportFunctionFeeLvl2 = 14000
- -
- -# Support magic buff price
- -# Price = 1 day
- -ClanHallSupportFunctionFeeRatio = 86400000
- -ClanHallSupportFeeLvl1 = 2500
- -ClanHallSupportFeeLvl2 = 5000
- -ClanHallSupportFeeLvl3 = 7000
- -ClanHallSupportFeeLvl4 = 11000
- -ClanHallSupportFeeLvl5 = 21000
- -ClanHallSupportFeeLvl6 = 36000
- -ClanHallSupportFeeLvl7 = 37000
- -ClanHallSupportFeeLvl8 = 364000
- -
- -# MP Regeneration price
- -# Price = 1 day
- -ClanHallMpRegenerationFunctionFeeRatio = 86400000
- -ClanHallMpRegenerationFeeLvl1 = 2000
- -ClanHallMpRegenerationFeeLvl2 = 3750
- -ClanHallMpRegenerationFeeLvl3 = 6500
- -ClanHallMpRegenerationFeeLvl4 = 13750
- -ClanHallMpRegenerationFeeLvl5 = 20000
- -
- -# Hp Regeneration price
- -# Price = 1 day
- -ClanHallHpRegenerationFunctionFeeRatio = 86400000
- -ClanHallHpRegenerationFeeLvl1 = 700
- -ClanHallHpRegenerationFeeLvl2 = 800
- -ClanHallHpRegenerationFeeLvl3 = 1000
- -ClanHallHpRegenerationFeeLvl4 = 1166
- -ClanHallHpRegenerationFeeLvl5 = 1500
- -ClanHallHpRegenerationFeeLvl6 = 1750
- -ClanHallHpRegenerationFeeLvl7 = 2000
- -ClanHallHpRegenerationFeeLvl8 = 2250
- -ClanHallHpRegenerationFeeLvl9 = 2500
- -ClanHallHpRegenerationFeeLvl10 = 3250
- -ClanHallHpRegenerationFeeLvl11 = 3750
- -ClanHallHpRegenerationFeeLvl12 = 4250
- -ClanHallHpRegenerationFeeLvl13 = 5166
- -
- -# Exp Regeneration price
- -# Price = 1 day
- -ClanHallExpRegenerationFunctionFeeRatio = 86400000
- -ClanHallExpRegenerationFeeLvl1 = 3000
- -ClanHallExpRegenerationFeeLvl2 = 6000
- -ClanHallExpRegenerationFeeLvl3 = 9000
- -ClanHallExpRegenerationFeeLvl4 = 15000
- -ClanHallExpRegenerationFeeLvl5 = 21000
- -ClanHallExpRegenerationFeeLvl6 = 23330
- -ClanHallExpRegenerationFeeLvl7 = 30000
- -
- -# Creation item function
- -# Price = 1 day
- -ClanHallItemCreationFunctionFeeRatio = 86400000
- -ClanHallItemCreationFunctionFeeLvl1 = 30000
- -ClanHallItemCreationFunctionFeeLvl2 = 70000
- -ClanHallItemCreationFunctionFeeLvl3 = 140000
- -
- -# Curtains Decoration
- -# Price = 7 days
- -ClanHallCurtainFunctionFeeRatio = 604800000
- -ClanHallCurtainFunctionFeeLvl1 = 2000
- -ClanHallCurtainFunctionFeeLvl2 = 2500
- -
- -# Fixtures Decoration
- -# Price = 3 days
- -ClanHallFrontPlatformFunctionFeeRatio = 259200000
- -ClanHallFrontPlatformFunctionFeeLvl1 = 1300
- -ClanHallFrontPlatformFunctionFeeLvl2 = 4000
- -
- -# If true Clan Hall buff cost 0 mp.
- -# Default: False
- -AltClanHallMpBuffFree = False
- -
- -# ---------------------------------------------------------------------------
- -# Fortress
- -# ---------------------------------------------------------------------------
- -
- -# Teleport Function price
- -# Price = 7 days
- -FortressTeleportFunctionFeeRatio = 604800000
- -FortressTeleportFunctionFeeLvl1 = 1000
- -FortressTeleportFunctionFeeLvl2 = 10000
- -
- -# Support magic buff price
- -# Price = 1 day
- -FortressSupportFunctionFeeRatio = 86400000
- -FortressSupportFeeLvl1 = 7000
- -FortressSupportFeeLvl2 = 17000
- -
- -# MP Regeneration price
- -# Price = 1 day
- -FortressMpRegenerationFunctionFeeRatio = 86400000
- -FortressMpRegenerationFeeLvl1 = 6500
- -FortressMpRegenerationFeeLvl2 = 9300
- -
- -# Hp Regeneration price
- -# Price = 1 day
- -FortressHpRegenerationFunctionFeeRatio = 86400000
- -FortressHpRegenerationFeeLvl1 = 2000
- -FortressHpRegenerationFeeLvl2 = 3500
- -
- -# Exp Regeneration price
- -# Price = 1 day
- -FortressExpRegenerationFunctionFeeRatio = 86400000
- -FortressExpRegenerationFeeLvl1 = 9000
- -FortressExpRegenerationFeeLvl2 = 10000
- -
- -# This is the time frequently when Fort owner gets Blood Oath, supply level raised and Fort fee is payed
- -# Default 360 mins
- -FortressPeriodicUpdateFrequency = 360
- -
- -# The number of Blood Oath which given to the Fort owner clan when Fort Updater runs
- -# Default: 1
- -FortressBloodOathCount = 1
- -
- -# The maximum Fort supply level
- -# Max lvl what you can define here is 21!
- -# Default: 6
- -FortressMaxSupplyLevel = 6
- -
- -# Fort fee which payed to the Castle
- -# Default: 25000
- -FortressFeeForCastle = 25000
- -
- -# The maximum time while a clan can own a fortress
- -# Deafault: 168 hours
- -FortressMaximumOwnTime = 168
- -
- -
- -# ---------------------------------------------------------------------------
- -# Seven Signs
- -# ---------------------------------------------------------------------------
- -
- -# Determines whether castle ownership is determined by clan or by alliance.
- -# Default is by alliance, as on official servers.
- -AltRequireClanCastle = False
- -
- -# Dawn:
- -# True - Players not owning castle need pay participation fee
- -# False - Anyone can join Dawn
- -AltCastleForDawn = True
- -
- -# Dusk:
- -# True - Players owning castle can not join Dusk side
- -# False - Anyone can join Dusk
- -AltCastleForDusk = True
- -
- -# Minimum Players for participate in SevenSigns Festival.
- -# Default: 5
- -AltFestivalMinPlayer = 5
- -
- -# Maximum seal stone contribution per player during festival.
- -# Default: 1000000
- -AltMaxPlayerContrib = 1000000
- -
- -# Festival Manager Start time (set in milliseconds; 1000 = 1 second).
- -# Default: 2 minutes
- -AltFestivalManagerStart = 120000
- -
- -# Festival Length (set in milliseconds; 1000 = 1 second).
- -# Default: 18 minutes
- -AltFestivalLength = 1080000
- -
- -# Festival Cycle Length.
- -# Default: 38 Minutes (20 minutes wait time + Festival Length) (set in milliseconds; 1000 = 1 second).
- -AltFestivalCycleLength = 2280000
- -
- -# At what point the first festival spawn occurs.
- -# Default: 2 minutes (set in milliseconds; 1000 = 1 second).
- -AltFestivalFirstSpawn = 120000
- -
- -# At what Point the first festival swarm occurs.
- -# Default: 5 minutes (set in milliseconds; 1000 = 1 second).
- -AltFestivalFirstSwarm = 300000
- -
- -# At what Point the second festival spawn occurs.
- -# Default: 9 minutes (set in milliseconds; 1000 = 1 second).
- -AltFestivalSecondSpawn = 540000
- -
- -# At what Point the second festival spawn occurs.
- -# Default: 12 minutes (set in milliseconds; 1000 = 1 second).
- -AltFestivalSecondSwarm = 720000
- -
- -# At what point the chests spawn in.
- -# Default: 15 minutes (set in milliseconds; 1000 = 1 second).
- -AltFestivalChestSpawn = 900000
- -
- -# This multipliers are used to change P.Def/M.Def of castle gates/walls while Seal of Strife is controlled by one of the sides.
- -# Default: 1.1,0.8,1.1,0.8
- -AltDawnGatesPdefMult = 1.1
- -AltDuskGatesPdefMult = 0.8
- -AltDawnGatesMdefMult = 1.1
- -AltDuskGatesMdefMult = 0.8
- -
- -# If this = true only cabal period owners can use merchant and blacksmith of mammon.
- -# If false any player can use.
- -# Default: True
- -StrictSevenSigns = True
- -
- -# Save SevenSigns status only each 30 minutes and after period change.
- -# Player info saved only during periodic data store (set by CharacterDataStoreInterval) and logout.
- -# If False then save info and status immediately after changes.
- -# Default: True
- -AltSevenSignsLazyUpdate = True
- -
- -# Total count of available tickets.
- -# Default: 300
- -SevenSignsDawnTicketQuantity = 300
- -
- -# Price of each ticket.
- -# Default: 1000
- -SevenSignsDawnTicketPrice = 1000
- -
- -# Tickets bundle (exchanged in amounts of).
- -# Default: 10
- -SevenSignsDawnTicketBundle = 10
- -
- -# Ticket item Id.
- -# Default: 6388
- -SevenSignsManorsAgreementId = 6388
- -
- -# Fee for joining Dawn
- -SevenSignsJoinDawnFee = 50000
- -
- -
- -# ---------------------------------------------------------------------------
- -# Clan Reputation Points
- -# ---------------------------------------------------------------------------
- -# Reputation score gained by taking Fortress.
- -TakeFortPoints = 200
- -
- -# Reputation score gained by taking Castle.
- -TakeCastlePoints = 1500
- -
- -# Reputation score gained by defended Castle.
- -CastleDefendedPoints = 750
- -
- -# Reputation score gained per clan members of festival winning party.
- -FestivalOfDarknessWin = 200
- -
- -# Reputation score gained for per hero clan members.
- -HeroPoints = 1000
- -
- -# Minimum Reputation score gained after completing 2nd class transfer under Academy.
- -CompleteAcademyMinPoints = 190
- -
- -# Maximum Reputation score gained after completing 2nd class transfer under Academy.
- -CompleteAcademyMaxPoints = 650
- -
- -# Reputation score gained per killed ballista.
- -KillBallistaPoints = 30
- -
- -# Reputation score gained for one Blood Alliance.
- -BloodAlliancePoints = 500
- -
- -# Reputation score gained for 10 Blood Oaths.
- -BloodOathPoints = 200
- -
- -# Reputation score gained for 100 Knight's Epaulettes.
- -KnightsEpaulettePoints = 20
- -
- -# Reputation score gained per clan member listed as top raid killers.
- -1stRaidRankingPoints = 1250
- -2ndRaidRankingPoints = 900
- -3rdRaidRankingPoints = 700
- -4thRaidRankingPoints = 600
- -5thRaidRankingPoints = 450
- -6thRaidRankingPoints = 350
- -7thRaidRankingPoints = 300
- -8thRaidRankingPoints = 200
- -9thRaidRankingPoints = 150
- -10thRaidRankingPoints = 100
- -UpTo50thRaidRankingPoints = 25
- -UpTo100thRaidRankingPoints = 12
- -
- -# Reputation score gained/reduced per kill during a clan war or siege war.
- -ReputationScorePerKill = 1
- -
- -# Reputation score reduced by loosing Fortress in battle.
- -LooseFortPoints = 0
- -
- -# Reputation score reduced by loosing Castle in battle.
- -LooseCastlePoints = 3000
- -
- -# Reputation score reduced by creating Royal Guard.
- -CreateRoyalGuardCost = 5000
- -
- -# Reputation score reduced by creating Knight Unit.
- -CreateKnightUnitCost = 10000
- -
- -# Reputation score reduced by reinforcing Knight Unit (if clan level is 9 or more).
- -ReinforceKnightUnitCost = 5000
- -
- -# Reputation score reduced by increasing clan level.
- -ClanLevel6Cost = 5000
- -ClanLevel7Cost = 10000
- -ClanLevel8Cost = 20000
- -ClanLevel9Cost = 40000
- -ClanLevel10Cost = 40000
- -ClanLevel11Cost = 75000
- -
- -# Number of clan members needed to increase clan level.
- -ClanLevel6Requirement = 30
- -ClanLevel7Requirement = 50
- -ClanLevel8Requirement = 80
- -ClanLevel9Requirement = 120
- -ClanLevel10Requirement = 140
- -ClanLevel11Requirement = 170
- -
- -# ---------------------------------------------------------------------------
- -# Other
- -# ---------------------------------------------------------------------------
- -
- -# Allow riding wyvern ignoring 7 Signs status
- -# This will allow Castle Lords to ride wyvern even when Dusk has won Seal of Strife
- -# Default: False
- -AllowRideWyvernAlways = False
- -
- -# Allow riding wyvern during Castle/Fort Siege
- -# Default: True
- -AllowRideWyvernDuringSiege = True
- \ No newline at end of file
- diff --git a/dist/game/config/FloodProtector.properties b/dist/game/config/FloodProtector.properties
- deleted file mode 100644
- index 44aa685..0000000
- --- a/dist/game/config/FloodProtector.properties
- +++ /dev/null
- @@ -1,124 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Floodprotector Options
- -# ---------------------------------------------------------------------------
- -# The following settings can be applied to each feature:
- -# Interval - interval in gameserver ticks (1 tick = 100ms) in which only one request is allowed
- -# LogFlooding - whether flooding should be logged (only first occurrence of flooding and total count of flood requests is logged)
- -# PunishmentLimit - if number of requests within single interval exceeds specified number then the specified punishment is applied (0 = disables punishment feature)
- -# PunishmentType - type of the punishment ('none', 'kick', 'ban', 'jail'), valid only if PunishmentLimit is greater than 0
- -# PunishmentTime - for how many minutes should the player(jail)/account(ban) be punished (0 = forever), valid only for PunishmentType 'jail' or 'ban'
- -
- -# UseItem - item usage flooding
- -# Item usage interval
- -# Disabled to match retail, if you want to enable this protection change the value to 4 for example.
- -# Default: 0
- -FloodProtectorUseItemInterval = 0
- -FloodProtectorUseItemLogFlooding = False
- -FloodProtectorUseItemPunishmentLimit = 0
- -FloodProtectorUseItemPunishmentType = none
- -FloodProtectorUseItemPunishmentTime = 0
- -
- -# RollDice - rolling dice flooding
- -FloodProtectorRollDiceInterval = 42
- -FloodProtectorRollDiceLogFlooding = False
- -FloodProtectorRollDicePunishmentLimit = 0
- -FloodProtectorRollDicePunishmentType = none
- -FloodProtectorRollDicePunishmentTime = 0
- -
- -# Firework - firework flooding
- -FloodProtectorFireworkInterval = 42
- -FloodProtectorFireworkLogFlooding = False
- -FloodProtectorFireworkPunishmentLimit = 0
- -FloodProtectorFireworkPunishmentType = none
- -FloodProtectorFireworkPunishmentTime = 0
- -
- -# ItemPetSummon - item summoning and pet mounting flooding
- -FloodProtectorItemPetSummonInterval = 16
- -FloodProtectorItemPetSummonLogFlooding = False
- -FloodProtectorItemPetSummonPunishmentLimit = 0
- -FloodProtectorItemPetSummonPunishmentType = none
- -FloodProtectorItemPetSummonPunishmentTime = 0
- -
- -# HeroVoice - hero voice flooding
- -FloodProtectorHeroVoiceInterval = 100
- -FloodProtectorHeroVoiceLogFlooding = False
- -FloodProtectorHeroVoicePunishmentLimit = 0
- -FloodProtectorHeroVoicePunishmentType = none
- -FloodProtectorHeroVoicePunishmentTime = 0
- -
- -# GlobalChat - global chat flooding
- -FloodProtectorGlobalChatInterval = 5
- -FloodProtectorGlobalChatLogFlooding = False
- -FloodProtectorGlobalChatPunishmentLimit = 0
- -FloodProtectorGlobalChatPunishmentType = none
- -FloodProtectorGlobalChatPunishmentTime = 0
- -
- -# Subclass - subclass flooding
- -FloodProtectorSubclassInterval = 20
- -FloodProtectorSubclassLogFlooding = False
- -FloodProtectorSubclassPunishmentLimit = 0
- -FloodProtectorSubclassPunishmentType = none
- -FloodProtectorSubclassPunishmentTime = 0
- -
- -# DropItem - drop item flooding
- -FloodProtectorDropItemInterval = 10
- -FloodProtectorDropItemLogFlooding = False
- -FloodProtectorDropItemPunishmentLimit = 0
- -FloodProtectorDropItemPunishmentType = none
- -FloodProtectorDropItemPunishmentTime = 0
- -
- -# ServerBypass - server bypass flooding
- -FloodProtectorServerBypassInterval = 5
- -FloodProtectorServerBypassLogFlooding = False
- -FloodProtectorServerBypassPunishmentLimit = 0
- -FloodProtectorServerBypassPunishmentType = none
- -FloodProtectorServerBypassPunishmentTime = 0
- -
- -# ServerBypass - multisell list request flooding
- -FloodProtectorMultiSellInterval = 1
- -FloodProtectorMultiSellLogFlooding = False
- -FloodProtectorMultiSellPunishmentLimit = 0
- -FloodProtectorMultiSellPunishmentType = none
- -FloodProtectorMultiSellPunishmentTime = 0
- -
- -# All kind of other transactions - to/from pet, private store, warehouse, destroy
- -FloodProtectorTransactionInterval = 10
- -FloodProtectorTransactionLogFlooding = False
- -FloodProtectorTransactionPunishmentLimit = 0
- -FloodProtectorTransactionPunishmentType = none
- -FloodProtectorTransactionPunishmentTime = 0
- -
- -# Manufacture
- -FloodProtectorManufactureInterval = 3
- -FloodProtectorManufactureLogFlooding = False
- -FloodProtectorManufacturePunishmentLimit = 0
- -FloodProtectorManufacturePunishmentType = none
- -FloodProtectorManufacturePunishmentTime = 0
- -
- -# Manor
- -FloodProtectorManorInterval = 30
- -FloodProtectorManorLogFlooding = False
- -FloodProtectorManorPunishmentLimit = 0
- -FloodProtectorManorPunishmentType = none
- -FloodProtectorManorPunishmentTime = 0
- -
- -# SendMail - sending mail interval, 10s on retail
- -FloodProtectorSendMailInterval = 100
- -FloodProtectorSendMailLogFlooding = False
- -FloodProtectorSendMailPunishmentLimit = 0
- -FloodProtectorSendMailPunishmentType = none
- -FloodProtectorSendMailPunishmentTime = 0
- -
- -# CharacterSelect - attempts to load character
- -FloodProtectorCharacterSelectInterval = 30
- -FloodProtectorCharacterSelectLogFlooding = False
- -FloodProtectorCharacterSelectPunishmentLimit = 0
- -FloodProtectorCharacterSelectPunishmentType = none
- -FloodProtectorCharacterSelectPunishmentTime = 0
- -
- -# Item Auction - Request for refresh
- -FloodProtectorItemAuctionInterval = 9
- -FloodProtectorItemAuctionLogFlooding = False
- -FloodProtectorItemAuctionPunishmentLimit = 0
- -FloodProtectorItemAuctionPunishmentType = none
- -FloodProtectorItemAuctionPunishmentTime = 0
- diff --git a/dist/game/config/FortSiege.properties b/dist/game/config/FortSiege.properties
- deleted file mode 100644
- index a1ba061..0000000
- --- a/dist/game/config/FortSiege.properties
- +++ /dev/null
- @@ -1,277 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Fort Siege Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# Standard Settings
- -# ---------------------------------------------------------------------------
- -
- -# Length of siege before the count down (in minutes).
- -SiegeLength = 60
- -
- -# This defines how long you need to wait until the suspicious merchant will spawn after siege ends (in minutes).
- -# Keep in mind when merchant spawns, the fort can be immediately sieged.
- -# Default: 180
- -SuspiciousMerchantRespawnDelay = 180
- -
- -# This defines how long you have to kill all commanders once you kill the first one (in minutes).
- -# After that time (if all commanders not killed) all commanders and doors get respawned.
- -CountDownLength = 10
- -
- -# Max number of flags per clan.
- -MaxFlags = 1
- -
- -# Minimum clan level needed to sign up.
- -SiegeClanMinLevel = 4
- -
- -#Max number of clans that can register on each side.
- -AttackerMaxClans = 500
- -
- -# This option, if enabled, will enable register Fortress Siege to Castle owners just in territory.
- -# Default: True
- -JustToTerritory = True
- -
- -# ---------------------------------------------------------------------------
- -# Fortress Commander Spawns
- -# ---------------------------------------------------------------------------
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -# Name - fortress name
- -# N - number - 1: Archer Comander
- -# - 2: Guard Commander
- -# - 3: Support Unit Commander
- -# - 4: Main Machine - not supported yet, used General
- -# - 5: General - not used yet, will be used once control room is supported
- -# Please keep the correct order of commanders, otherwise client will show wrong occupied barracks.
- -# Control room (main machine) currently emulated in client.
- -# x,y,z - coords
- -# heading
- -# npc_id - id of template
- -
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -# Name - fortress name
- -# N - number
- -# x,y,z - coords
- -# flag_id - id of combat flag
- -
- -# Shanty Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -ShantyCommander1 = -52435,155188,-1768,20000,35683
- -ShantyCommander2 = -52128,157752,-2024,29864,35677
- -ShantyCommander3 = -53944,155433,-2024,7304,35680
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -ShantyFlag1 = -53086,156493,-1896,9819
- -ShantyFlag2 = -53054,156605,-1896,9819
- -ShantyFlag3 = -53032,156689,-1896,9819
- -
- -# Southern Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -SouthernCommander1 = -21328,218864,-2952,0,35719
- -SouthernCommander2 = -22992,218160,-3208,0,35713
- -SouthernCommander3 = -21520,221504,-3208,45328,35716
- -SouthernCommander4 = -22728,221746,-3200,33168,35721
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -SouthernFlag1 = -22386,219917,-3079,9819
- -SouthernFlag2 = -22386,219798,-3079,9819
- -SouthernFlag3 = -22386,219679,-3079,9819
- -
- -# Hive Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -HiveCommander1 = 15152,188128,-2640,0,35752
- -HiveCommander2 = 17984,187536,-2896,45056,35746
- -HiveCommander3 = 16016,189520,-2888,0,35749
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -HiveFlag1 = 16685,188358,-2770,9819
- -HiveFlag2 = 16761,188306,-2770,9819
- -HiveFlag3 = 16847,188257,-2770,9819
- -
- -# Valley Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -ValleyCommander1 = 124768,121856,-2296,0,35788
- -ValleyCommander2 = 124299,123614,-2552,49192,35782
- -ValleyCommander3 = 124768,124640,-2552,54480,35785
- -ValleyCommander4 = 128048,123344,-2536,35028,35790
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -ValleyFlag1 = 125970,123653,-2429,9819
- -ValleyFlag2 = 126092,123650,-2429,9819
- -ValleyFlag3 = 126205,123648,-2429,9819
- -
- -# Ivory Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -IvoryCommander1 = 72400,2896,-2760,0,35821
- -IvoryCommander2 = 73788,5479,-3016,55136,35815
- -IvoryCommander3 = 71264,4144,-3008,0,35818
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -IvoryFlag1 = 72565,4436,-2888,9819
- -IvoryFlag2 = 72660,4512,-2888,9819
- -IvoryFlag3 = 72759,4594,-2888,9819
- -
- -# Narsell Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -NarsellCommander1 = 154704,53856,-2968,0,35852
- -NarsellCommander2 = 155576,56592,-3224,59224,35846
- -NarsellCommander3 = 153328,54848,-3216,5512,35849
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -NarsellFlag1 = 154567,55397,-3097,9819
- -NarsellFlag2 = 154650,55493,-3097,9819
- -NarsellFlag3 = 154715,55587,-3097,9819
- -
- -# Bayou Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -BayouCommander1 = 188624,38240,-3128,0,35888
- -BayouCommander2 = 188160,39920,-3376,49284,35882
- -BayouCommander3 = 188626,41066,-3376,57140,35885
- -BayouCommander4 = 191846,39764,-3368,33020,35890
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -BayouFlag1 = 189838,40063,-3253,9819
- -BayouFlag2 = 189931,40060,-3253,9819
- -BayouFlag3 = 190052,40062,-3253,9819
- -
- -# White Sands Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -WhiteSandsCommander1 = 117216,205648,-3048,0,35921
- -WhiteSandsCommander2 = 118880,203568,-3304,5396,35915
- -WhiteSandsCommander3 = 118560,206560,-3304,48872,35918
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -WhiteSandsFlag1 = 118640,205151,-3176,9819
- -WhiteSandsFlag2 = 118690,205062,-3176,9819
- -WhiteSandsFlag3 = 118742,204968,-3176,9819
- -
- -# Borderland Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -BorderlandCommander1 = 159664,-72224,-2584,0,35957
- -BorderlandCommander2 = 157968,-71659,-2832,59020,35951
- -BorderlandCommander3 = 157312,-70640,-2832,0,35954
- -BorderlandCommander4 = 160194,-68688,-2824,43272,35959
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -BorderlandFlag1 = 158817,-70229,-2708,9819
- -BorderlandFlag2 = 158883,-70145,-2708,9819
- -BorderlandFlag3 = 158946,-70045,-2708,9819
- -
- -# Swamp Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -SwampCommander1 = 71264,-60512,-2504,0,35995
- -SwampCommander2 = 71248,-62352,-2752,12388,35989
- -SwampCommander3 = 68688,-59648,-2752,56012,35992
- -SwampCommander4 = 68005,-60866,-2744,5424,35997
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -SwampFlag1 = 69829,-61087,-2629,9819
- -SwampFlag2 = 69979,-61144,-2632,9819
- -SwampFlag3 = 70069,-61182,-2629,9819
- -
- -# Archaic Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -ArchaicCommander1 = 109856,-142640,-2672,0,36028
- -ArchaicCommander2 = 109600,-139735,-2928,62612,36022
- -ArchaicCommander3 = 108223,-142209,-2920,8524,36025
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -ArchaicFlag1 = 109142,-141243,-2801,9819
- -ArchaicFlag2 = 109184,-141129,-2801,9819
- -ArchaicFlag3 = 109214,-141016,-2801,9819
- -
- -# Floran Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -FloranCommander1 = 6528,151872,-2608,0,36064
- -FloranCommander2 = 7006,148242,-2856,32768,36058
- -FloranCommander3 = 4384,150992,-2856,0,36061
- -FloranCommander4 = 5246,152319,-2848,49151,36066
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -FloranFlag1 = 5293,149624,-2732,9819
- -FloranFlag2 = 5306,149743,-2732,9819
- -FloranFlag3 = 5299,149870,-2732,9819
- -
- -# Cloud Mountain Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -CloudMountainCommander1 = -55248,90496,-2536,0,36102
- -CloudMountainCommander2 = -55791,91856,-2792,0,36096
- -CloudMountainCommander3 = -54168,92604,-2784,49196,36099
- -CloudMountainCommander4 = -50913,92259,-2776,41188,36104
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -CloudMountainFlag1 = -53354,91537,-2664,9819
- -CloudMountainFlag2 = -53237,91537,-2664,9819
- -CloudMountainFlag3 = -53112,91537,-2664,9819
- -
- -# Tanor Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -TanorCommander1 = 58480,139648,-1464,0,36135
- -TanorCommander2 = 61864,139257,-1728,46896,36129
- -TanorCommander3 = 59436,140834,-1720,47296,36132
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -TanorFlag1 = 60225,139771,-1597,9819
- -TanorFlag2 = 60362,139742,-1597,9819
- -TanorFlag3 = 60467,139727,-1597,9819
- -
- -# DragonSpine Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -DragonspineCommander1 = 13184,94928,-3144,0,36166
- -DragonspineCommander2 = 9472,94992,-3392,0,36160
- -DragonspineCommander3 = 12829,96214,-3392,49152,36163
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -DragonspineFlag1 = 11459,95308,-3264,9819
- -DragonspineFlag2 = 11527,95301,-3264,9819
- -DragonspineFlag3 = 11623,95311,-3264,9819
- -
- -# Antharas Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -AntharasCommander1 = 79440,88752,-2600,0,36202
- -AntharasCommander2 = 77262,91704,-2856,5112,36196
- -AntharasCommander3 = 80929,90510,-2856,40192,36199
- -AntharasCommander4 = 80755,89002,-2848,21984,36204
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -AntharasFlag1 = 79470,91299,-2728,9819
- -AntharasFlag2 = 79528,91187,-2728,9819
- -AntharasFlag3 = 79580,91095,-2728,9819
- -
- -# Western Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -WesternCommander1 = 113481,-16058,-712,0,36240
- -WesternCommander2 = 109872,-16624,-968,16384,36234
- -WesternCommander3 = 112601,-13933,-960,49152,36237
- -WesternCommander4 = 113929,-14801,-960,32768,36242
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -WesternFlag1 = 111280,-14820,-839,9819
- -WesternFlag2 = 111380,-14820,-839,9819
- -WesternFlag3 = 111480,-14820,-839,9819
- -
- -# Hunters Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -HuntersCommander1 = 123232,94400,-1856,0,36278
- -HuntersCommander2 = 122688,95760,-2112,0,36272
- -HuntersCommander3 = 124305,96528,-2104,49151,36275
- -HuntersCommander4 = 127632,96240,-2096,40892,36280
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -HuntersFlag1 = 125155,95455,-1984,9819
- -HuntersFlag2 = 125255,95455,-1984,9819
- -HuntersFlag3 = 125355,95455,-1984,9819
- -
- -# Aaru Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -AaruCommander1 = 74288,186912,-2296,0,36311
- -AaruCommander2 = 71392,184720,-2552,5528,36305
- -AaruCommander3 = 71542,186410,-2552,55088,36308
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -AaruFlag1 = 73029,186303,-2424,9819
- -AaruFlag2 = 73923,186247,-2424,9819
- -AaruFlag3 = 72833,186178,-2424,9819
- -
- -# Demon Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -DemonCommander1 = 100752,-53664,-360,0,36347
- -DemonCommander2 = 100688,-57440,-616,16384,36341
- -DemonCommander3 = 99484,-54027,-616,0,36344
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -DemonFlag1 = 100400,-55401,-488,9819
- -DemonFlag2 = 100400,-55301,-488,9819
- -DemonFlag3 = 100400,-55201,-488,9819
- -
- -# Monastic Fortress
- -# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- -MonasticCommander1 = 73680,-95456,-1144,0,36385
- -MonasticCommander2 = 70189,-93935,-1400,61576,36379
- -MonasticCommander3 = 73831,-94119,-1400,45536,36382
- -# Flag syntax: NameFlagN = x,y,z,flag_id
- -MonasticFlag1 = 72174,-94437,-1271,9819
- -MonasticFlag2 = 72294,-94481,-1271,9819
- -MonasticFlag3 = 72401,-94526,-1271,9819
- \ No newline at end of file
- diff --git a/dist/game/config/General.properties b/dist/game/config/General.properties
- deleted file mode 100644
- index 65b341c..0000000
- --- a/dist/game/config/General.properties
- +++ /dev/null
- @@ -1,898 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# General Server Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# Administrator
- -# ---------------------------------------------------------------------------
- -
- -# If this option is set to True every newly created character will have access level 127. This means that every character created will have Administrator Privileges.
- -# Default: False
- -EverybodyHasAdminRights = False
- -
- -# Setting for serverList
- -# Displays [] in front of server name on character selection
- -# Default: False
- -ServerListBrackets = False
- -
- -# Displays server type next to the server name on character selection.
- -# Notes:
- -# Accepted Values: Normal, Relax, Test, NoLabel, Restricted, Event, Free
- -# Default: Normal
- -ServerListType = Normal
- -
- -# Displays server minimum age to the server name on character selection.
- -# Notes:
- -# Accepted values: 0, 15, 18
- -# Default: 0
- -ServerListAge = 0
- -
- -
- -# If True, only accounts with GM access can enter the server.
- -# Default: False
- -ServerGMOnly = False
- -
- -# Enable GMs to have the glowing aura of a Hero character on login.
- -# Notes:
- -# GMs can do "///hero" on themselves and get this aura voluntarily.
- -# It's advised to keep this off due to graphic lag.
- -# Default: False
- -GMHeroAura = False
- -
- -# Auto set invulnerable status to a GM on login.
- -# Default: False
- -GMStartupInvulnerable = False
- -
- -# Auto set invisible status to a GM on login.
- -# Default: False
- -GMStartupInvisible = False
- -
- -# Auto block private messages to a GM on login.
- -# Default: False
- -GMStartupSilence = False
- -
- -# Auto list GMs in GM list (/gmlist) on login.
- -# Default: False
- -GMStartupAutoList = False
- -
- -# Auto set diet mode on to a GM on login (affects your weight penalty).
- -# Default: False
- -GMStartupDietMode = False
- -
- -# Item restrictions apply to GMs as well? (True = restricted usage)
- -# Default: True
- -GMItemRestriction = True
- -
- -# Skill restrictions apply to GMs as well? (True = restricted usage)
- -# Default: True
- -GMSkillRestriction = True
- -
- -# Allow GMs to drop/trade non-tradable and quest(drop only) items
- -# Default: False
- -GMTradeRestrictedItems = False
- -
- -# Allow GMs to restart/exit while is fighting stance
- -# Default: True
- -GMRestartFighting = True
- -
- -# Show the GM's name behind an announcement made by him
- -# example: "Announce: hi (HanWik)"
- -GMShowAnnouncerName = False
- -
- -# Show the GM's name before an announcement made by him
- -# example: "Nyaran: hi"
- -GMShowCritAnnouncerName = False
- -
- -# Give special skills for every GM
- -# 7029,7041-7064,7088-7096,23238-23249 (Master's Blessing)
- -# Default: False
- -GMGiveSpecialSkills = False
- -
- -# Give special aura skills for every GM
- -# 7029,23238-23249,23253-23296 (Master's Blessing)
- -# Default: False
- -GMGiveSpecialAuraSkills = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Server Security
- -# ---------------------------------------------------------------------------
- -
- -# Enforce gameguard for clients. Sends a gameguard query on character login.
- -# Default: False
- -GameGuardEnforce = False
- -
- -# Don't allow player to perform trade, talk with npc, or move until gameguard reply is received.
- -# Default: False
- -GameGuardProhibitAction = False
- -
- -#Logging settings. The following four settings, while enabled, will increase writing to your hard drive(s) considerably. Depending on the size of your server, the amount of players, and other factors, you may suffer a noticable performance hit.
- -# Default: False
- -LogChat = False
- -
- -# Default: False
- -LogAutoAnnouncements = False
- -
- -# Default: False
- -LogItems = False
- -
- -# Log only Adena and equippable items if LogItems is enabled
- -LogItemsSmallLog = False
- -
- -# Default: False
- -LogItemEnchants = False
- -
- -# Default: False
- -LogSkillEnchants = False
- -
- -# Default: False
- -GMAudit = False
- -
- -# Check players for non-allowed skills
- -# Default: False
- -SkillCheckEnable = False
- -
- -# If true, remove invalid skills from player and database.
- -# Report only, if false.
- -# Default: False
- -SkillCheckRemove = False
- -
- -# Check also GM characters (only if SkillCheckEnable = True)
- -# Default: True
- -SkillCheckGM = True
- -
- -
- -# ---------------------------------------------------------------------------
- -# Thread Configuration
- -# ---------------------------------------------------------------------------
- -
- -# Extreme caution should be here, set to defaults if you do not know what you are doing.
- -# These could possibly hurt your servers performance or improve it depending on your server's configuration, size, and other factors.
- -# Default: 10
- -ThreadPoolSizeEffects = 10
- -
- -# Default: 13
- -ThreadPoolSizeGeneral = 13
- -
- -# Default: 2
- -ThreadPoolSizeEvents = 2
- -
- -# Default: 2
- -UrgentPacketThreadCoreSize = 2
- -
- -# Default: 4
- -GeneralPacketThreadCoreSize = 4
- -
- -# Default: 4
- -GeneralThreadCoreSize = 4
- -
- -# Default: 6
- -AiMaxThread = 6
- -
- -# Default: 5
- -EventsMaxThread = 5
- -
- -# Dead Lock Detector (a separate thread for detecting deadlocks).
- -# For improved crash logs and automatic restart in deadlock case if enabled.
- -# Check interval is in seconds.
- -# Default: True
- -DeadLockDetector = True
- -
- -# Default: 20
- -DeadLockCheckInterval = 20
- -
- -# Default: False
- -RestartOnDeadlock = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Client packet queue tuning
- -# ---------------------------------------------------------------------------
- -
- -# Queue size, do not set it too low !
- -# 0 - use value MaxReadPerPass + 2 (from mmo.properties)
- -# Default: 0
- -ClientPacketQueueSize = 0
- -
- -# Maximum number of packets in burst.
- -# Execution will be aborted and thread released if more packets executed in raw.
- -# 0 - use value MaxReadPerPass + 1 (from mmo.properties)
- -# Default: 0
- -ClientPacketQueueMaxBurstSize = 0
- -
- -# Maximum number of packets per second.
- -# Flood detector will be triggered if more packets received.
- -# After triggering all incoming packets will be dropped until flooding stopped.
- -# Default: 80
- -ClientPacketQueueMaxPacketsPerSecond = 80
- -
- -# Average number of packets per second calculated during this interval.
- -# Using larger value decrease number of false kicks, but slower reaction to flood.
- -# Avoid using too low or too high values, recommended between 3 and 10.
- -# Default: 5
- -ClientPacketQueueMeasureInterval = 5
- -
- -# Maximum average number of packets per second during measure interval.
- -# Flood detector will be triggered if more packets received.
- -# After triggering all incoming packets will be dropped until flooding stopped.
- -# Default: 40
- -ClientPacketQueueMaxAveragePacketsPerSecond = 40
- -
- -# Maximum number of flood triggers per minute.
- -# Client will be kicked if more floods detected.
- -# Default: 2
- -ClientPacketQueueMaxFloodsPerMin = 2
- -
- -# Maximum number of queue overflows per minute.
- -# After overflow all incoming packets from client are dropped until queue is flushed.
- -# Client will be kicked if more queue overflows detected.
- -# Default: 1
- -ClientPacketQueueMaxOverflowsPerMin = 1
- -
- -# Maximum number of buffer underflows per minute.
- -# Client will be kicked if more underflow exceptions detected.
- -# Default: 1
- -ClientPacketQueueMaxUnderflowsPerMin = 1
- -
- -# Maximum number of unknown packets per minute.
- -# Client will be kicked if more unknown packets received.
- -# Default: 5
- -ClientPacketQueueMaxUnknownPerMin = 5
- -
- -
- -# ---------------------------------------------------------------------------
- -# Optimization
- -# ---------------------------------------------------------------------------
- -
- -# Items on ground management.
- -# Allow players to drop items on the ground.
- -# Default: True
- -AllowDiscardItem = True
- -
- -# Delete dropped reward items from world after a specified amount of seconds. Disabled = 0.
- -# Default: 600
- -AutoDestroyDroppedItemAfter = 600
- -
- -# Time in seconds after which dropped herb will be auto-destroyed
- -# Default: 60
- -AutoDestroyHerbTime = 60
- -
- -# List of item id that will not be destroyed (separated by "," like 57,5575,6673).
- -# Notes:
- -# Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
- -# Items on this list will be protected regardless of the following options.
- -# Default: 0
- -ListOfProtectedItems = 0
- -
- -# Cleans up the server database on startup.
- -# The bigger the database is, the longer it will take to clean up the database(the slower the server will start).
- -# Sometimes this ends up with 0 elements cleaned up, and a lot of wasted time on the server startup.
- -# If you want a faster server startup, set this to 'false', but its recommended to clean up the database from time to time.
- -# Default: True
- -DatabaseCleanUp = True
- -
- -# The time before a database connection closes (in milliseconds)
- -# If a query takes longer to execute than the time defined here, the server will throw "Unclosed Connection!" error.
- -# If you get often this error message, try increasing this.
- -# Default: 60000ms
- -ConnectionCloseTime = 60000
- -
- -# This is the interval (in minutes), that the gameserver will update a players information such as location.
- -# The higher you set this number, there will be less character information saving so you will have less accessessing of the database and your hard drive(s).
- -# The lower you set this number, there will be more frequent character information saving so you will have more access to the database and your hard drive(s).
- -# A value of 0 disables periodic saving.
- -# Independent of this setting the character is always saved after leaving the world.
- -# Default: 15
- -CharacterDataStoreInterval = 15
- -
- -# This enables the server to only update items when saving the character.
- -# Enabling this greatly reduces DB usage and improves performance.
- -# WARNING: This option causes item loss during crashes.
- -# Default: False
- -LazyItemsUpdate = False
- -
- -# When enabled, this forces (even if using lazy item updates) the items owned by the character to be updated into DB when saving its character.
- -# Default: False
- -UpdateItemsOnCharStore = False
- -
- -# Also delete from world misc. items dropped by players (all except equip-able items).
- -# Notes:
- -# Works only if AutoDestroyDroppedItemAfter is greater than 0.
- -# Default: False
- -DestroyPlayerDroppedItem = False
- -
- -# Destroy dropped equippable items (armor, weapon, jewelry).
- -# Notes:
- -# Works only if DestroyPlayerDroppedItem = True
- -# Default: False
- -DestroyEquipableItem = False
- -
- -# Save dropped items into the database for restoring after restart.
- -# Default: False
- -SaveDroppedItem = False
- -
- -# Enable/Disable the emptying of the stored dropped items table after items are loaded into memory (safety setting).
- -# If the server crashed before saving items, on next start old items will be restored and players may already have picked up some of them so this will prevent duplicates.
- -# Default: False
- -EmptyDroppedItemTableAfterLoad = False
- -
- -# Time interval in minutes to save in DB items on ground. Disabled = 0.
- -# Notes:
- -# If SaveDroppedItemInterval is disabled, items will be saved into the database only at server shutdown.
- -# Default: 60
- -SaveDroppedItemInterval = 60
- -
- -# Delete all saved items from the database on next restart?
- -# Notes:
- -# Works only if SaveDroppedItem = False.
- -# Default: False
- -ClearDroppedItemTable = False
- -
- -# Delete invalid quest from players.
- -# Default: False
- -AutoDeleteInvalidQuestData = False
- -
- -# If True, allows a special handling for drops when chance raises over 100% (eg. when applying chance rates).
- -# True value causes better drop handling at higher rates.
- -# Default: True
- -PreciseDropCalculation = True
- -
- -# Allow creating multiple non-stackable items at one time?
- -# Default: True
- -MultipleItemDrop = True
- -
- -# Forces full item inventory packet to be sent for any item change.
- -# Notes:
- -# This can increase network traffic
- -# Default: False
- -ForceInventoryUpdate = False
- -
- -# True = Load html's into cache only on first time html is requested.
- -# False = Load all html's into cache on server startup.
- -# Default: True
- -LazyCache = True
- -
- -# Cache all character names in to memory on server startup
- -# False - names are loaded from Db when they are requested
- -# True - decrease Db usage , increase memory consumption
- -# Default: True
- -CacheCharNames = True
- -
- -# Minimum and maximum variables in seconds for npc animation delay.
- -# You must keep MinNPCAnimation < = MaxNPCAnimation.
- -# Default: 10
- -MinNPCAnimation = 10
- -
- -# Default: 20
- -MaxNPCAnimation = 20
- -
- -# Default: 5
- -MinMonsterAnimation = 5
- -
- -# Default: 20
- -MaxMonsterAnimation = 20
- -
- -# Knownlist (the list of things a character sees) update method. Default is currently time based updating, which also makes it possible to use config options for guards to see moving monsters. Alternatively move based update can be used but guards cannot track mobs with that option but otherwise it should work well.
- -# Default: False
- -MoveBasedKnownlist = False
- -
- -# Interval (in milliseconds) in which the knownlist does full updates.
- -# For move based updates its used for intermediate updates.
- -# WARNING!
- -# Useful interval is between 300 - 2000. Too small value may kill your CPU, too high value may not update knownlists properly. The default value is chosen experimentally.
- -# Default: 1250
- -KnownListUpdateInterval = 1250
- -
- -# Grid options: Grids can turn themselves on and off. This also affects the loading and processing of all AI tasks and (in the future) geodata within this grid.
- -# Turn on for a grid with a person in it is immediate, but it then turns on the 8 neighboring grids based on the specified number of seconds.
- -# Turn off for a grid and neighbors occurs after the specified number of seconds have passed during which a grid has had no players in or in any of its neighbors.
- -# The always on option allows to ignore all this and let all grids be active at all times (not suggested).
- -# Default: False
- -GridsAlwaysOn = False
- -
- -# Default: 1
- -GridNeighborTurnOnTime = 1
- -
- -# Default: 90
- -GridNeighborTurnOffTime = 90
- -
- -# ---------------------------------------------------------------------------
- -# Falling Damage
- -# ---------------------------------------------------------------------------
- -
- -# Allow characters to receive damage from falling.
- -# CoordSynchronize = 2 is recommended.
- -# Default: True
- -EnableFallingDamage = True
- -
- -
- -# ---------------------------------------------------------------------------
- -# Features
- -# ---------------------------------------------------------------------------
- -
- -# Peace Zone Modes:
- -# 0 = Peace All the Time
- -# 1 = PVP During Siege for siege participants
- -# 2 = PVP All the Time
- -# Default: 0
- -PeaceZoneMode = 0
- -
- -# Global Chat.
- -# Available Options: ON, OFF, GM, GLOBAL
- -# Default: ON
- -GlobalChat = ON
- -
- -# Trade Chat.
- -# Available Options: ON, OFF, GM, GLOBAL
- -# Default: ON
- -TradeChat = ON
- -
- -# If you are experiencing problems with Warehouse transactions, feel free to disable them here.
- -# Default: True
- -AllowWarehouse = True
- -
- -# Enable Warehouse Cache. If warehouse is not used will server clear memory used by this warehouse.
- -# Default: False
- -WarehouseCache = False
- -
- -# How long warehouse should be stored in memory.
- -# Default: 15
- -WarehouseCacheTime = 15
- -
- -# Default: True
- -AllowRefund = True
- -
- -# Default: True
- -AllowMail = True
- -
- -# Default: True
- -AllowAttachments = True
- -
- -# If True player can try on weapon and armor in shop.
- -# Default: True
- -AllowWear = True
- -
- -# Default: 5
- -WearDelay = 5
- -
- -#Adena cost to try on an item.
- -# Default: 10
- -WearPrice = 10
- -
- -
- -# ---------------------------------------------------------------------------
- -# Instances
- -# ---------------------------------------------------------------------------
- -# Restores the player to their previous instance (ie. an instanced area/dungeon) on EnterWorld.
- -# Default: False
- -RestorePlayerInstance = False
- -
- -# Set whether summon skills can be used to summon players inside an instance.
- -# When enabled individual instances can have summoning disabled in instance xml's.
- -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- -# Default: False
- -AllowSummonInInstance = False
- -
- -# When a player dies, is removed from instance after a fixed period of time.
- -# Time in seconds.
- -# Default: 60
- -EjectDeadPlayerTime = 60
- -
- -# When is instance finished, is set time to destruction currency instance.
- -# Time in seconds.
- -# Default: 300
- -DefaultFinishTime = 300
- -
- -
- -# ---------------------------------------------------------------------------
- -# Misc Settings
- -# ---------------------------------------------------------------------------
- -
- -# Default: True
- -AllowRace = True
- -
- -# Default: True
- -AllowWater = True
- -
- -# Enable pets for rent (wyvern & strider) from pet managers.
- -# Default: False
- -AllowRentPet = False
- -
- -# Default: True
- -AllowFishing = True
- -
- -# Default: True
- -AllowBoat = True
- -
- -# Boat broadcast radius.
- -# If players getting annoyed by boat shouts then radius can be decreased.
- -# Default: 20000
- -BoatBroadcastRadius = 20000
- -
- -# Default: True
- -AllowCursedWeapons = True
- -
- -#Allow Pet manager's pets to walk around.
- -# Default: True
- -AllowPetWalkers = True
- -
- -# Show "data/html/servnews.htm" when a character enters world.
- -# Default: False
- -ShowServerNews = False
- -
- -# Enable the Community Board.
- -# Default: True
- -EnableCommunityBoard = True
- -
- -# Default Community Board page.
- -# Default: _bbshome
- -BBSDefault = _bbshome
- -
- -# Enable chat filter
- -# Default = False
- -UseChatFilter = False
- -
- -# Replace filter words with following chars
- -ChatFilterChars = ^_^
- -
- -# Banchat for channels, split ";"
- -# 0 = ALL (white)
- -# 1 = SHOUT (!)
- -# 2 = TELL (")
- -# 3 = PARTY (#)
- -# 4 = CLAN (@)
- -# 5 = GM (//gmchat)
- -# 6 = PETITION_PLAYER (*)
- -# 7 = PETITION_GM (*)
- -# 8 = TRADE (+)
- -# 9 = ALLIANCE ($)
- -# 10 = ANNOUNCEMENT
- -# 11 = BOAT
- -# 12 = L2FRIEND
- -# 13 = MSNCHAT
- -# 14 = PARTYMATCH_ROOM
- -# 15 = PARTYROOM_COMMANDER (Yellow)
- -# 16 = PARTYROOM_ALL (Red)
- -# 17 = HERO_VOICE (&)
- -# 18 = CRITICAL_ANNOUNCE
- -# 19 = SCREEN_ANNOUNCE
- -# 20 = BATTLEFIELD
- -# 21 = MPCC_ROOM
- -# Default: 0;1;8;17
- -BanChatChannels = 0;1;8;17
- -
- -# ---------------------------------------------------------------------------
- -# Manor
- -# ---------------------------------------------------------------------------
- -
- -# Default: True
- -AllowManor = True
- -
- -# Manor refresh time in military hours.
- -# Default: 20 (8pm)
- -AltManorRefreshTime = 20
- -
- -# Manor refresh time (minutes).
- -# Default: 00 (start of the hour)
- -AltManorRefreshMin = 00
- -
- -# Manor period approve time in military hours.
- -# Default: 4 (4am)
- -AltManorApproveTime = 4
- -
- -# Manor period approve time (minutes).
- -# Default: 30
- -AltManorApproveMin = 30
- -
- -# Manor maintenance time (minutes).
- -# Default: 6
- -AltManorMaintenanceMin = 6
- -
- -# Manor Save Type.
- -# True = Save data into the database after every action
- -# Default: False
- -AltManorSaveAllActions = False
- -
- -# Manor Save Period (used only if AltManorSaveAllActions = False)
- -# Default: 2 (hour)
- -AltManorSavePeriodRate = 2
- -
- -
- -# ---------------------------------------------------------------------------
- -# Lottery
- -# ---------------------------------------------------------------------------
- -
- -# Default: True
- -AllowLottery = True
- -
- -# Initial Lottery prize.
- -# Default: 50000
- -AltLotteryPrize = 50000
- -
- -# Lottery Ticket Price
- -# Default: 2000
- -AltLotteryTicketPrice = 2000
- -
- -# What part of jackpot amount should receive characters who pick 5 wining numbers
- -# Default: 0.6
- -AltLottery5NumberRate = 0.6
- -
- -# What part of jackpot amount should receive characters who pick 4 wining numbers
- -# Default: 0.2
- -AltLottery4NumberRate = 0.2
- -
- -# What part of jackpot amount should receive characters who pick 3 wining numbers
- -# Default: 0.2
- -AltLottery3NumberRate = 0.2
- -
- -# How much Adena receive characters who pick two or less of the winning number
- -# Default: 200
- -AltLottery2and1NumberPrize = 200
- -
- -
- -# ---------------------------------------------------------------------------
- -# Item Auction
- -# ---------------------------------------------------------------------------
- -
- -#
- -AltItemAuctionEnabled = True
- -
- -# Number of days before auction cleared from database with all bids.
- -# Default: 14
- -AltItemAuctionExpiredAfter = 14
- -
- -# Auction extends to specified amount of seconds if one or more new bids added.
- -# By default auction extends only two times, by 5 and 3 minutes, this custom value used after it.
- -# Values higher than 60s is not recommended.
- -# Default: 0
- -AltItemAuctionTimeExtendsOnBid = 0
- -
- -
- -# ---------------------------------------------------------------------------
- -# Dimension Rift
- -# ---------------------------------------------------------------------------
- -
- -# Minimal party size to enter rift. Min = 2, Max = 9.
- -# If while inside the rift, the party becomes smaller, all members will be teleported back.
- -# Default: 2
- -RiftMinPartySize = 2
- -
- -# Number of maximum jumps between rooms allowed, after this time party will be teleported back
- -# Default: 4
- -MaxRiftJumps = 4
- -
- -# Time in ms the party has to wait until the mobs spawn when entering a room. C4 retail: 10s
- -# Default: 10000
- -RiftSpawnDelay = 10000
- -
- -# Time between automatic jumps in seconds
- -# Default: 480
- -AutoJumpsDelayMin = 480
- -
- -# Default: 600
- -AutoJumpsDelayMax = 600
- -
- -# Time Multiplier for stay in the boss room
- -# Default: 1.5
- -BossRoomTimeMultiply = 1.5
- -
- -# Cost in dimension fragments to enter the rift, each party member must own this amount
- -# Default: 18
- -RecruitCost = 18
- -
- -# Default: 21
- -SoldierCost = 21
- -
- -# Default: 24
- -OfficerCost = 24
- -
- -# Default: 27
- -CaptainCost = 27
- -
- -# Default: 30
- -CommanderCost = 30
- -
- -# Default: 33
- -HeroCost = 33
- -
- -
- -# ---------------------------------------------------------------------------
- -# Four Sepulchers
- -# ---------------------------------------------------------------------------
- -
- -# Default: 50
- -TimeOfAttack = 50
- -
- -# Default: 5
- -TimeOfCoolDown = 5
- -
- -# Default: 3
- -TimeOfEntry = 3
- -
- -# Default: 2
- -TimeOfWarmUp = 2
- -
- -# Default: 4
- -NumberOfNecessaryPartyMembers = 4
- -
- -
- -# ---------------------------------------------------------------------------
- -# Punishment
- -# ---------------------------------------------------------------------------
- -
- -# Player punishment for illegal actions:
- -# 1 - broadcast warning to gms only
- -# 2 - kick player(default)
- -# 3 - kick & ban player
- -# 4 - jail player (define minutes of jail with param: 0 = infinite)
- -# Default: 2
- -DefaultPunish = 2
- -
- -# This setting typically specifies the duration of the above punishment.
- -# Default: 0
- -DefaultPunishParam = 0
- -
- -# Apply default punish if player buy items for zero Adena.
- -# Default: True
- -OnlyGMItemsFree = True
- -
- -# Jail is a PvP zone.
- -# Default: False
- -JailIsPvp = False
- -
- -# Disable all chat in jail (except normal one)
- -# Default: True
- -JailDisableChat = True
- -
- -# Disable all transaction in jail
- -# Trade/Store/Drop
- -# Default: False
- -JailDisableTransaction = False
- -
- -# Enchant Skill Details Settings
- -# Default: 1,5
- -NormalEnchantCostMultipiler = 1
- -SafeEnchantCostMultipiler = 5
- -
- -# ---------------------------------------------------------------------------
- -# Custom Components
- -# ---------------------------------------------------------------------------
- -
- -# Default: False
- -CustomSpawnlistTable = False
- -
- -# Option to save GM spawn only in the custom table.
- -# Default: False
- -SaveGmSpawnOnCustom = False
- -
- -# Default: False
- -CustomNpcData = False
- -
- -# Default: False
- -CustomTeleportTable = False
- -
- -# Default: False
- -CustomNpcBufferTables = False
- -
- -# Default: False
- -CustomSkillsLoad = False
- -
- -# Default: False
- -CustomItemsLoad = False
- -
- -# Default: False
- -CustomMultisellLoad = False
- -
- -# Default: False
- -CustomBuyListLoad = False
- -
- -# ---------------------------------------------------------------------------
- -# Birthday Event Settings
- -# ---------------------------------------------------------------------------
- -
- -# Gift sent with Mail System
- -# Default: 22187
- -AltBirthdayGift = 22187
- -
- -# Mail Subject
- -AltBirthdayMailSubject = Happy Birthday!
- -
- -# Mail Content
- -# $c1: Player name
- -# $s1: Age
- -AltBirthdayMailText = Hello Adventurer!! Seeing as you're one year older now, I thought I would send you some birthday cheer :) Please find your birthday pack attached. May these gifts bring you joy and happiness on this very special day.\n\nSincerely, Alegria
- -
- -# ---------------------------------------------------------------------------
- -# Handy's Block Checker Event Settings
- -# ---------------------------------------------------------------------------
- -
- -# Enable the Handy's Block Checker event
- -# Default: True
- -EnableBlockCheckerEvent = True
- -
- -# Minimum number of members on each team before
- -# be able to start the event
- -# Min: 1
- -# Max: 6
- -# Retail: 2
- -BlockCheckerMinTeamMembers = 2
- -
- -# Fair play
- -# Players can choose what team to play. However, by
- -# enabling this property to true, the teams will be
- -# balanced in the teleport to the arena
- -HBCEFairPlay = True
- -
- -# ---------------------------------------------------------------------------
- -# Hellbound Settings
- -# ---------------------------------------------------------------------------
- -# If true, players can enter the Hellbound island without any quests
- -# Default: False
- -HellboundWithoutQuest = False
- -
- -# ---------------------------------------------------------------------------
- -# Bot Report Button settings
- -# ---------------------------------------------------------------------------
- -
- -# Enable the bot report button on the desired game servers.
- -# Default: True
- -EnableBotReportButton = True
- -
- -# Report points restart hour. Format: HH:MM ( PM mode, 24 hours clock)
- -# Default: 00:00
- -BotReportPointsResetHour = 00:00
- -
- -# Delay between reports from the same player (in minutes)
- -# Default: 30 minutes
- -BotReportDelay = 30
- -
- -# Allow players from the same clan to report the same bot
- -# Default: False
- -AllowReportsFromSameClanMembers = False
- -
- -# ---------------------------------------------------------------------------
- -# Developer Settings
- -# ---------------------------------------------------------------------------
- -# Do not touch these if you do not know what you are doing.
- -# These settings are for debugging servers ONLY. They are not meant for LIVE servers.
- -
- -# Default: False
- -Debug = False
- -
- -# Instances debugging
- -# Default: False
- -InstanceDebug = False
- -
- -# Html action cache debugging
- -# Default: False
- -HtmlActionCacheDebug = False
- -
- -# Packet handler debug output
- -# Default: False
- -PacketHandlerDebug = False
- -
- -# Default: False
- -Developer = False
- -
- -# Don't load Handlers
- -# Default: False
- -AltDevNoHandlers = False
- -
- -# Don't load quests.
- -# Default: False
- -AltDevNoQuests = False
- -
- -# Don't load spawntable.
- -# Default: False
- -AltDevNoSpawns = False
- -
- -# Show quests while loading them.
- -# Default: False
- -AltDevShowQuestsLoadInLogs = False
- -
- -# Show scripts while loading them.
- -# Default: False
- -AltDevShowScriptsLoadInLogs = False
- diff --git a/dist/game/config/GeoData.properties b/dist/game/config/GeoData.properties
- deleted file mode 100644
- index 3511380..0000000
- --- a/dist/game/config/GeoData.properties
- +++ /dev/null
- @@ -1,75 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# GeoData
- -# ---------------------------------------------------------------------------
- -
- -# Pathfinding options:
- -# 0 = Disabled
- -# 1 = Enabled using path node files
- -# 2 = Enabled using geodata cells at runtime
- -# Default: 0
- -PathFinding = 0
- -
- -# Pathnode directory
- -# Default: data/pathnode
- -PathnodeDirectory = data/pathnode
- -
- -# Pathfinding array buffers configuration
- -PathFindBuffers = 100x6;128x6;192x6;256x4;320x4;384x4;500x2
- -
- -# Weight for nodes without obstacles far from walls
- -LowWeight = 0.5
- -
- -# Weight for nodes near walls
- -MediumWeight = 2
- -
- -# Weight for nodes with obstacles
- -HighWeight = 3
- -
- -# Angle paths will be more "smart", but in cost of higher CPU utilization
- -AdvancedDiagonalStrategy = True
- -
- -# Weight for diagonal movement. Used only with AdvancedDiagonalStrategy = True
- -# Default: LowWeight * sqrt(2)
- -DiagonalWeight = 0.707
- -
- -# Maximum number of LOS postfilter passes, 0 will disable postfilter.
- -# Default: 3
- -MaxPostfilterPasses = 3
- -
- -# Path debug function.
- -# Nodes known to pathfinder will be displayed as adena, constructed path as antidots.
- -# Number of the items show node cost * 10
- -# Potions display path after first stage filter
- -# Red potions - actual waypoints. Green potions - nodes removed by LOS postfilter
- -# This function FOR DEBUG PURPOSES ONLY, never use it on the live server !
- -DebugPath = False
- -
- -# True = Loads GeoData buffer's content into physical memory.
- -# False = Does not necessarily imply that the GeoData buffer's content is not resident in physical memory.
- -# Default: True
- -ForceGeoData = True
- -
- -# This setting controls Client <--> Server Player coordinates synchronization:
- -# -1 - Will synchronize only Z from Client --> Server. Default when no geodata.
- -# 1 - Synchronization Client --> Server only. Using this option (without geodata) makes it more difficult for players to bypass obstacles.
- -# 2 - Intended for geodata (at least with cell-level pathfinding, otherwise can you try -1).
- -# Server sends validation packet if client goes too far from server calculated coordinates.
- -# Default: -1
- -CoordSynchronize = -1
- -
- -# Geodata files folder
- -GeoDataPath = ./data/geodata
- -
- -# True: Try to load regions not specified below(won't disturb server startup when file does not exist)
- -# False: Don't load any regions other than the ones specified with True below
- -TryLoadUnspecifiedRegions = True
- -
- -# List of regions to be required to load
- -# eg.:
- -# Both regions required
- -# 22_22=True
- -# 19_20=true
- -# Exclude region from loading
- -# 25_26=false
- -# True: Region is required for the server to startup
- -# False: Region is not considered to be loaded
- diff --git a/dist/game/config/GraciaSeeds.properties b/dist/game/config/GraciaSeeds.properties
- deleted file mode 100644
- index 1542f29..0000000
- --- a/dist/game/config/GraciaSeeds.properties
- +++ /dev/null
- @@ -1,18 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Gracia Seeds Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# Seed of Destruction Settings
- -# ---------------------------------------------------------------------------
- -
- -# Count of Kills which needed for Stage 2
- -# Default: 10
- -TiatKillCountForNextState = 10
- -
- -# Length of Stage 2 before the Defense state starts (in minutes).
- -# Default: 720min (12h)
- -Stage2Length = 720
- diff --git a/dist/game/config/GrandBoss.properties b/dist/game/config/GrandBoss.properties
- deleted file mode 100644
- index cf21798..0000000
- --- a/dist/game/config/GrandBoss.properties
- +++ /dev/null
- @@ -1,78 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Antharas
- -# ---------------------------------------------------------------------------
- -
- -# Delay of appearance time of Antharas. Value is minute. Range 3-60
- -AntharasWaitTime = 20
- -
- -# Interval time of Antharas. Value is hour. Range 1-480
- -IntervalOfAntharasSpawn = 264
- -
- -# Random interval. Range 1-192
- -RandomOfAntharasSpawn = 72
- -
- -# ---------------------------------------------------------------------------
- -# Valakas
- -# ---------------------------------------------------------------------------
- -
- -# Delay of appearance time of Valakas. Value is minute. Range 3-60
- -ValakasWaitTime = 30
- -
- -# Interval time of Valakas. Value is hour. Range 1-480
- -IntervalOfValakasSpawn = 264
- -
- -# Random interval. Range 1-192
- -RandomOfValakasSpawn = 72
- -
- -# ---------------------------------------------------------------------------
- -# Baium
- -# ---------------------------------------------------------------------------
- -
- -# Interval time of Baium. Value is hour. Range 1-480
- -IntervalOfBaiumSpawn = 168
- -
- -# Random interval. Range 1-192
- -RandomOfBaiumSpawn = 48
- -
- -# ---------------------------------------------------------------------------
- -# Core
- -# ---------------------------------------------------------------------------
- -
- -# Interval time of Core. Value is hour. Range 1-480
- -IntervalOfCoreSpawn = 60
- -
- -# Random interval. Range 1-192
- -RandomOfCoreSpawn = 24
- -
- -# ---------------------------------------------------------------------------
- -# Orfen
- -# ---------------------------------------------------------------------------
- -
- -# Interval time of Orfen. Value is hour. Range 1-480
- -IntervalOfOrfenSpawn = 48
- -
- -# Random interval. Range 1-192
- -RandomOfOrfenSpawn = 20
- -
- -# ---------------------------------------------------------------------------
- -# Queen Ant
- -# ---------------------------------------------------------------------------
- -
- -# Interval time of QueenAnt. Value is hour. Range 1-480
- -IntervalOfQueenAntSpawn = 36
- -
- -# Random interval. Range 1-192
- -RandomOfQueenAntSpawn = 17
- -
- -# ---------------------------------------------------------------------------
- -# Beleth
- -# ---------------------------------------------------------------------------
- -
- -# Interval time of Beleth. Value is hour. Range 1-480. Retail: 192
- -IntervalOfBelethSpawn = 192
- -
- -# Random interval. Range 1-192. Retail: 148
- -RandomOfBelethSpawn = 148
- -
- -#Minimal count of players for enter to Beleth. Retail: 36
- -BelethMinPlayers = 36
- \ No newline at end of file
- diff --git a/dist/game/config/IdFactory.properties b/dist/game/config/IdFactory.properties
- deleted file mode 100644
- index b3d0922..0000000
- --- a/dist/game/config/IdFactory.properties
- +++ /dev/null
- @@ -1,21 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# ID Factory Settings
- -# ---------------------------------------------------------------------------
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# Standard Settings
- -# ---------------------------------------------------------------------------
- -
- -# Tell server which IDFactory Class to use:
- -# Compaction = Original method
- -# BitSet = One non compaction method
- -# Stack = Another non compaction method
- -# Default: BitSet
- -IDFactory = BitSet
- -
- -# Check for bad ids in the database on server boot up.
- -# Much faster load time without it, but may cause problems.
- -# Default: True
- -BadIdChecking = True
- \ No newline at end of file
- diff --git a/dist/game/config/L2JMods.properties b/dist/game/config/L2JMods.properties
- deleted file mode 100644
- index 439eed9..0000000
- --- a/dist/game/config/L2JMods.properties
- +++ /dev/null
- @@ -1,510 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# L2JMODS - non-retail-like systems that have been integrated into the L2J project.
- -# Be warned that there may be no support for these mods beyond the original author's assistance.
- -
- -# ---------------------------------------------------------------------------
- -# Champion mobs - Turn random mobs into Champions
- -# ---------------------------------------------------------------------------
- -
- -# Enable/Disable Champion Mob System.
- -ChampionEnable = False
- -
- -# Force Champion mobs to be passive?
- -# To leave champion mobs to default/Aggressive, set to False.
- -# To set all champion mobs to Passive, set True.
- -ChampionPassive = False
- -
- -# % chance for a mob to became champion (-1 to disable).
- -ChampionFrequency = -1
- -
- -# Title of all Champion Mobs.
- -ChampionTitle = Champion
- -
- -# Min and max levels allowed for a mob to be a Champion mob.
- -ChampionMinLevel = 20
- -ChampionMaxLevel = 78
- -
- -# Hp multiplier for Champion mobs.
- -ChampionHp = 8
- -
- -# Hp Regen Multiplier for Champion mobs.
- -ChampionHpRegen = 1.0
- -
- -# Exp/Sp rewards multiplier for Champion mobs.
- -ChampionRewardsExpSp = 8.0
- -
- -# Standard rewards chance multiplier for Champion mobs.
- -ChampionRewardsChance = 8.0
- -
- -# Standard rewards amount multiplier for Champion mobs.
- -ChampionRewardsAmount = 1.0
- -
- -# Adena & Seal Stone rewards chance multiplier for Champion mobs.
- -ChampionAdenasRewardsChance = 1.0
- -
- -# Adena & Seal Stone rewards amount multiplier for Champion mobs.
- -ChampionAdenasRewardsAmount = 1.0
- -
- -# P. Attack and M. Attack bonus for Champion mobs.
- -ChampionAtk = 1.0
- -
- -# Physical/Magical Attack Speed bonus for Champion mobs.
- -ChampionSpdAtk = 1.0
- -
- -# Specified reward item ID
- -ChampionRewardItemID = 6393
- -
- -# The amount of the specified reward a player will receive if they are awarded the item.
- -ChampionRewardItemQty = 1
- -
- -# % Chance to obtain a specified reward item from a higher level Champion mob.
- -# Default: 0
- -ChampionRewardLowerLvlItemChance = 0
- -
- -# % Chance to obtain a specified reward item from a lower level Champion mob.
- -# Default: 0
- -ChampionRewardHigherLvlItemChance = 0
- -
- -# Do you want to enable the vitality calculation when killing champion mobs?
- -# Be aware that it can lead to huge unbalance on your server, your rate for that mob would
- -# then be "mobXP x serverRate x vitalityRate x championXpRate
- -# Notes:
- -# Works only if EnableVitality = True
- -# Default: False
- -ChampionEnableVitality = False
- -
- -# Enable spawning of the champions in instances
- -# Default = False
- -ChampionEnableInInstances = False
- -
- -# ---------------------------------------------------------------------------
- -# Wedding System (by evill33t)
- -# ---------------------------------------------------------------------------
- -# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
- -# CustomNpcTable = True in General.properties
- -# ---------------------------------------------------------------------------
- -# Wedding Manager ID: 50007
- -#
- -# First part - "Engagement"
- -# 1) Target the player that you want to make a couple with.
- -# 2) Use the voice command ".engage nameofyourpartner" then press enter.
- -# 3) If the target player has you on listed as a friend (ie. you are in each other's friends list) a popup will appear with an engagement request along with a system message that you want to be engaged with him/her.
- -# 4) If the target player accepts the engagement invitation, you will be engaged.
- -#
- -# Second part - "Marriage"
- -# 1) Once two players are engaged, they can speak to Andromeda, the Wedding Priest in the Hot Springs Guild House (Goddard Area).
- -# (You may need Formal Wear and Adena to pay wedding fees!)
- -# 2) Each player needs to speak to the NPC and make the request to be married.
- -# 3) Once done, fireworks will display and the two players will be married.
- -#
- -# Afterwards you can use the voice command ".gotolove nameofyourpartner" to teleport to your partner if you're married (there may also be a fee which can be specified below)
- -#
- -# If you want to cancel your Engagement/Marriage, use the voice command ".divorce nameofyourpartner".
- -#
- -# If you're married you have to pay a specified % of your adena to your partner.
- -#
- -# If a player attempts to become engaged to another player while married they may suffer a penalty if it's enabled below.
- -# ---------------------------------------------------------------------------
- -# Enable/Disable Wedding System
- -AllowWedding = False
- -
- -# Amount of Adena required to get married
- -WeddingPrice = 250000000
- -
- -# Enable/Disable punishing of players who attempt to be engaged to other players while married.
- -WeddingPunishInfidelity = True
- -
- -# Enable/Disable teleport function for married couples.
- -WeddingTeleport = True
- -
- -# Amount of Adena required to teleport to spouse.
- -WeddingTeleportPrice = 50000
- -
- -# Time before character is teleported after using the skill.
- -WeddingTeleportDuration = 60
- -
- -# Enable/Disable same sex marriages.
- -WeddingAllowSameSex = False
- -
- -# Require players to wear formal wear to be married?
- -WeddingFormalWear = True
- -
- -# Amount of Adena (%) a player must pay to the other to get divorced.
- -WeddingDivorceCosts = 20
- -
- -
- -# ---------------------------------------------------------------------------
- -# Team vs. Team Event Engine (by HorridoJoho)
- -# ---------------------------------------------------------------------------
- -
- -# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
- -# CustomNpcTable = True in General.properties
- -# ---------------------------------------------------------------------------
- -# Enable/Disable TvTEvent System
- -# Default: False
- -TvTEventEnabled = False
- -
- -# TvT in instance
- -# Default: False
- -TvTEventInInstance = False
- -
- -# Name of the instance file for TvT
- -# Default: coliseum.xml
- -TvTEventInstanceFile = coliseum.xml
- -
- -# Times TvT will occur (24h format).
- -# Default: 9:00,15:00,21:00,3:00
- -TvTEventInterval = 9:00,15:00,21:00,3:00
- -
- -# Registration timer from start of event (in minutes).
- -# Default: 30
- -TvTEventParticipationTime = 30
- -
- -# Event running time (in minutes).
- -# Default: 20
- -TvTEventRunningTime = 20
- -
- -# TvT Event NPC (create a custom npc of type L2TvTEventNpc).
- -# Default: 70010
- -TvTEventParticipationNpcId = 70010
- -
- -# TvT Event Participation Fee (itemId, number). Fee is not returned.
- -# Example: 57,100000
- -# Default: 0,0
- -TvTEventParticipationFee = 0,0
- -
- -# Location for TvTEvent NPC to spawn in form x,y,z[,heading]
- -# Default: 83425,148585,-3406
- -TvTEventParticipationNpcCoordinates = 83425,148585,-3406
- -
- -# Minimum amount of players allowed in each team.
- -# Default: 1
- -TvTEventMinPlayersInTeams = 1
- -# Maximum amount of players allowed in each team.
- -# Default: 20
- -TvTEventMaxPlayersInTeams = 20
- -
- -# Minimum level of players that may join the event.
- -# Default: 1
- -TvTEventMinPlayerLevel = 1
- -# Maximum level of players that may join the event.
- -# Default: 85
- -TvTEventMaxPlayerLevel = 85
- -
- -# Respawn delay timer (in seconds).
- -# Default: 10
- -TvTEventRespawnTeleportDelay = 10
- -# Exit delay timer (in seconds).
- -# Default: 10
- -TvTEventStartLeaveTeleportDelay = 10
- -
- -# First Team - Name, Start/Death x,y,z location.
- -TvTEventTeam1Name = Team1
- -TvTEventTeam1Coordinates = 148695,46725,-3414
- -
- -# Second Team - Name, Start/Death x,y,z location.
- -TvTEventTeam2Name = Team2
- -TvTEventTeam2Coordinates = 149999,46728,-3414
- -
- -# Reward for winning team.
- -# Example: TvTEventReward = itemId,amount;itemId,amount;itemId,amount
- -TvTEventReward = 57,100000
- -
- -# TvTEvent Rules
- -TvTEventTargetTeamMembersAllowed = True
- -TvTEventScrollsAllowed = False
- -TvTEventPotionsAllowed = False
- -TvTEventSummonByItemAllowed = False
- -
- -# Door ID's to open/close on start/end.
- -# Not supported in instance, use xml template for defining doors.
- -# Example: TvTDoorsToOpen = 1;2;3;4;5;6
- -TvTDoorsToOpen =
- -TvTDoorsToClose =
- -
- -# Should both teams get reward if there's a tie?
- -TvTRewardTeamTie = False
- -
- -# Participant's effects handling on teleport/death.
- -# Effects lasting through death never removed.
- -# 0 - always remove all effects.
- -# 1 - remove all effects only during port to event (noblesse blessing can be used)
- -# 2 - never remove any effect
- -# Default: 0
- -TvTEventEffectsRemoval = 0
- -
- -# Fighter-class participants will be buffed with those buffs each respawn
- -# Format: skill1Id,skill1Level;skill2Id,skill2Level...
- -# Example: 1504,1;1501,1;1502,1;1499,1
- -TvTEventFighterBuffs =
- -
- -# Mage-class participants will be buffed with those buffs each respawn
- -# Format: skill1Id,skill1Level;skill2Id,skill2Level...
- -# Example: 1504,1;1500,1;1501,1;1085,3
- -TvTEventMageBuffs =
- -
- -# Maximum number of allowed participants per IP address (dualbox check)
- -# Default: 0 (no limits)
- -TvTEventMaxParticipantsPerIP = 0
- -
- -# Voiced command (.tvt) working during TVT event to get information about event status
- -TvTAllowVoicedInfoCommand = false
- -
- -
- -# ---------------------------------------------------------------------------
- -# L2J Banking System
- -# ---------------------------------------------------------------------------
- -
- -# Enable/Disable Banking System
- -BankingEnabled = False
- -
- -# Amount of Goldbars a player gets when they use the ".deposit" command. Also the same amount they will lose with ".withdraw".
- -BankingGoldbarCount = 1
- -
- -# Amount of Adena a player gets when they use the ".withdraw" command. Also the same amount they will lose with ".deposit".
- -BankingAdenaCount = 500000000
- -
- -
- -# ---------------------------------------------------------------------------
- -# Warehouse Sorting
- -# Shows Withdraw Window sorted by ItemType (Armor/Weapon/Spellbook....)
- -# ---------------------------------------------------------------------------
- -
- -EnableWarehouseSortingClan = False
- -EnableWarehouseSortingPrivate = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Offline trade/craft
- -# ---------------------------------------------------------------------------
- -
- -# Option to enable or disable offline trade feature.
- -# Enable -> true, Disable -> false
- -OfflineTradeEnable = False
- -
- -# Option to enable or disable offline craft feature.
- -# Enable -> true, Disable -> false
- -OfflineCraftEnable = False
- -
- -# If set to True, off-line shops will be possible only peace zones.
- -# Default: False
- -OfflineModeInPeaceZone = False
- -
- -# If set to True, players in off-line shop mode wont take any damage, thus they cannot be killed.
- -# Default: False
- -OfflineModeNoDamage = False
- -
- -# If set to True, name color will be changed then entering offline mode
- -OfflineSetNameColor = False
- -
- -# Color of the name in offline mode (if OfflineSetNameColor = True)
- -OfflineNameColor = 808080
- -
- -# Allow fame for characters in offline mode
- -# Enable -> true, Disable -> false
- -OfflineFame = True
- -
- -#Restore offline traders/crafters after restart/shutdown. Default: false.
- -RestoreOffliners = False
- -
- -#Do not restore offline characters, after OfflineMaxDays days spent from first restore.
- -#Require server restart to disconnect expired shops.
- -#0 = disabled (always restore).
- -#Default: 10
- -OfflineMaxDays = 10
- -
- -#Disconnect shop after finished selling, buying.
- -#Default: True
- -OfflineDisconnectFinished = True
- -
- -# ---------------------------------------------------------------------------
- -# Mana Drugs/Potions
- -# ---------------------------------------------------------------------------
- -
- -# This option will enable core support for:
- -# Mana Drug (item ID 726), using skill ID 10000.
- -# Mana Potion (item ID 728), using skill ID 10001.
- -EnableManaPotionSupport = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Display Server Time
- -# ---------------------------------------------------------------------------
- -
- -# This option will enable displaying of the local server time for /time command.
- -DisplayServerTime = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Welcome message
- -# ---------------------------------------------------------------------------
- -
- -# Show screen welcome message on character login
- -# Default: False
- -ScreenWelcomeMessageEnable = False
- -
- -# Screen welcome message text to show on character login if enabled
- -# ('#' for a new line, but message can have max 2 lines)
- -ScreenWelcomeMessageText = Welcome to L2J server!
- -
- -# Show screen welcome message for x seconds when character log in to game if enabled
- -ScreenWelcomeMessageTime = 10
- -
- -
- -# ---------------------------------------------------------------------------
- -# AntiFeed
- -# ---------------------------------------------------------------------------
- -
- -# This option will enable antifeed for pvp/pk/clanrep points.
- -# Default: False
- -AntiFeedEnable = False
- -
- -# If set to True, kills from dualbox will not increase pvp/pk points
- -# and clan reputation will not be transferred.
- -# Default: True
- -AntiFeedDualbox = True
- -
- -# If set to True, server will count disconnected (unable to determine ip address)
- -# as dualbox.
- -# Default: True
- -AntiFeedDisconnectedAsDualbox = True
- -
- -# If character died faster than timeout - pvp/pk points for killer will not increase
- -# and clan reputation will not be transferred.
- -# Setting to 0 will disable this feature.
- -# Default: 120 seconds.
- -AntiFeedInterval = 120
- -
- -
- -# ---------------------------------------------------------------------------
- -# Pvp/pk Announce
- -# ---------------------------------------------------------------------------
- -
- -# Default: False
- -AnnouncePkPvP = False
- -
- -# Announce this as normal system message
- -# Default: True
- -AnnouncePkPvPNormalMessage = True
- -
- -# PK message template
- -# variables: $killer, $target
- -AnnouncePkMsg = $killer has slaughtered $target
- -
- -# Pvp message template
- -# variables: $killer, $target
- -AnnouncePvpMsg = $killer has defeated $target
- -
- -
- -# ---------------------------------------------------------------------------
- -# Chat Moderation
- -# ---------------------------------------------------------------------------
- -
- -# This option will enable using of the voice commands .banchat and .unbanchat
- -# for players with corresponding access level (default: 7).
- -# Check access_levels.sql and admin_command_access_rights for details.
- -# Default: False
- -ChatAdmin = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Hellbound Status Voice Command
- -# ---------------------------------------------------------------------------
- -
- -# This option will enable using of the voice commands .hellbound
- -# for retrieving information about current Hellbound level and trust.
- -# Default: False
- -HellboundStatus = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Multilingual support
- -# ---------------------------------------------------------------------------
- -
- -# Enable or disable multilingual support.
- -# Default: False
- -MultiLangEnable = False
- -
- -# Default language, if not defined.
- -# Default: en
- -MultiLangDefault = en
- -
- -# List of allowed languages, semicolon separated.
- -# Default: en;ru
- -MultiLangAllowed = en;ru
- -
- -# Enable or disable voice command .lang for changing languages on the fly.
- -# Default: True
- -MultiLangVoiceCommand = True
- -
- -# Enable or disable multilingual SystemMessages support.
- -# Default: False
- -MultiLangSystemMessageEnable = False
- -
- -# List of allowed languages for SystemMessages, semicolon separated.
- -# Default:
- -MultiLangSystemMessageAllowed =
- -
- -# Enable or disable multilingual NpcStrings support.
- -# Default: False
- -MultiLangNpcStringEnable = False
- -
- -# List of allowed languages for NpcStrings, semicolon separated.
- -# Default:
- -MultiLangNpcStringAllowed =
- -
- -
- -# ---------------------------------------------------------------------------
- -# Walker/Bot protection
- -# ---------------------------------------------------------------------------
- -
- -# Basic protection against L2Walker.
- -# Default: False
- -L2WalkerProtection = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Debug enable/disable voice command
- -# ---------------------------------------------------------------------------
- -
- -# This option will enable voice command .debug allowing players
- -# to turn on/off debugging on self only.
- -# (admin command //debug can enable debugging on any character)
- -# Use admin_command_access_rights table for defining access rights.
- -# Default: False
- -DebugVoiceCommand = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Dualbox Check
- -# ---------------------------------------------------------------------------
- -
- -# Maximum number of players per IP address allowed to enter game.
- -# Default: 0 (unlimited)
- -DualboxCheckMaxPlayersPerIP = 0
- -
- -# Maximum number of players per IP address allowed to participate in olympiad.
- -# Default: 0 (unlimited)
- -DualboxCheckMaxOlympiadParticipantsPerIP = 0
- -
- -# Maximum number of players per IP address allowed to participate in events using L2J Event Engine (//event).
- -# Default: 0 (unlimited)
- -DualboxCheckMaxL2EventParticipantsPerIP = 0
- -
- -# Whitelist of the addresses for dualbox checks.
- -# Format: Address1,Number1;Address2,Number2...
- -# Network address can be number (127.0.0.1) or symbolic (localhost) formats.
- -# Additional connection number added to the global limits for this address.
- -# For example, if number of TvT event participants per IP address set to the 1 (no dualbox)
- -# and whitelist contains "l2jserver.com,2" then number of allowed participants from l2jserver.com
- -# will be 1+2=3. Use 0 or negative value for unlimited number of connections.
- -# Default: 127.0.0.1,0 (no limits from localhost)
- -DualboxCheckWhitelist = 127.0.0.1,0
- -
- -# ---------------------------------------------------------------------------
- -# Password Change
- -# ---------------------------------------------------------------------------
- -
- -# Enables .changepassword voiced command which allows the players to change their account's password ingame.
- -# Default: False
- -AllowChangePassword = False
- \ No newline at end of file
- diff --git a/dist/game/config/MMO.properties b/dist/game/config/MMO.properties
- deleted file mode 100644
- index 1882ae9..0000000
- --- a/dist/game/config/MMO.properties
- +++ /dev/null
- @@ -1,24 +0,0 @@
- -#---------------------------------------------------------------
- -# MMO
- -#---------------------------------------------------------------
- -
- -# Sleep time for all Selectors
- -# After he finished his job the Selector waits the given time in milliseconds
- -# Lower values will speed up the loop and the Ping is smaller
- -SleepTime = 20
- -
- -# Every loop it send a maximum of the given packages to each connection
- -# Lower values will speed up the loop and the Ping is smaller but cause less output
- -MaxSendPerPass = 12
- -
- -# Every loop it read a maximum of the given packages from each connection
- -# Lower values will speed up the loop and the Ping is smaller but cause less input
- -MaxReadPerPass = 12
- -
- -# Each unfinished read/write need a TEMP storage Buffer
- -# on large player amount we need more Buffers
- -# if there are not enough buffers new ones are generated but not stored for future usage
- -HelperBufferCount = 20
- -
- -# Setting this to True will lower your ping, at the cost of an increase in bandwidth consumption.
- -TcpNoDelay = False
- \ No newline at end of file
- diff --git a/dist/game/config/NPC.properties b/dist/game/config/NPC.properties
- deleted file mode 100644
- index 5ee254c..0000000
- --- a/dist/game/config/NPC.properties
- +++ /dev/null
- @@ -1,218 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# NPC Settings
- -# ---------------------------------------------------------------------------
- -# This properties file is solely for the purpose of NPC modifications and settings that directly influence them.
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# General
- -# ---------------------------------------------------------------------------
- -
- -# Global announcements will be made indicating Blacksmith/Merchant of Mammon
- -# Spawning points.
- -# Default: False
- -AnnounceMammonSpawn = False
- -
- -# True - Mobs can be aggressive while in peace zones.
- -# False - Mobs can NOT be aggressive while in peace zones.
- -# Default: True
- -AltMobAgroInPeaceZone = True
- -
- -# Defines whether NPCs are attackable by default
- -# Retail: True
- -AltAttackableNpcs = True
- -
- -# Allows non-GM players to view NPC stats via shift-click
- -# Default: False
- -AltGameViewNpc = False
- -
- -# Maximum distance mobs can randomly go from spawn point.
- -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- -# Default: 300
- -MaxDriftRange = 300
- -
- -# Default: False
- -ShowNpcLevel = False
- -
- -# Show clan, alliance crests for territory NPCs without quests
- -# Default: False
- -ShowCrestWithoutQuest = False
- -
- -# Custom random EnchantEffect
- -# All npcs with weapons get random weapon enchanted value
- -# Enchantment is only visual, range is 4-21
- -# Default: False
- -EnableRandomEnchantEffect = False
- -
- -# The minimum NPC level for the Gracia Epilogue rule:
- -# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
- -# Notes:
- -# If you want to disable this feature then set it 99
- -# Default: 78
- -MinNPCLevelForDmgPenalty = 78
- -
- -# The penalty in percent for -2 till -5 level differences
- -# default:
- -# normal - 0.7, 0.6, 0.6, 0.55
- -# critical - 0.75, 0.65, 0.6, 0.58
- -# skill - 0.8, 0.7, 0.65, 0.62
- -DmgPenaltyForLvLDifferences = 0.7, 0.6, 0.6, 0.55
- -CritDmgPenaltyForLvLDifferences = 0.75, 0.65, 0.6, 0.58
- -SkillDmgPenaltyForLvLDifferences = 0.8, 0.7, 0.65, 0.62
- -
- -# The minimum NPC level for the Gracia Epilogue rule:
- -# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
- -# Notes:
- -# If you want to disable this feature then set it 99
- -# Default: 78
- -MinNPCLevelForMagicPenalty = 78
- -
- -# The penalty in percent for -3 till -6 level differences
- -# Default: unknown
- -SkillChancePenaltyForLvLDifferences = 2.5, 3.0, 3.25, 3.5
- -
- -# ---------------------------------------------------------------------------
- -# Monsters
- -# ---------------------------------------------------------------------------
- -
- -# Decay Time Task (don't set it too low!) (in milliseconds):
- -# Default: 5000
- -DecayTimeTask = 5000
- -
- -# This is the default corpse time (in seconds).
- -# Default: 7
- -DefaultCorpseTime = 7
- -
- -# This is the time that will be added to spoiled corpse time (in seconds).
- -# Default: 10
- -SpoiledCorpseExtendTime = 10
- -
- -# The time allowed to use a corpse consume skill before the corpse decays.
- -# Default: 2000
- -CorpseConsumeSkillAllowedTimeBeforeDecay = 2000
- -
- -# ---------------------------------------------------------------------------
- -# Guards
- -# ---------------------------------------------------------------------------
- -
- -# True - Allows guards to attack aggressive mobs within range.
- -# Default: False
- -GuardAttackAggroMob = False
- -
- -
- -# ---------------------------------------------------------------------------
- -# Pets
- -# ---------------------------------------------------------------------------
- -
- -# This option enables or disables the Wyvern manager located in every castle
- -# to train Wyverns and Striders from Hatchlings.
- -# Default: False
- -AllowWyvernUpgrader = False
- -
- -# Pets that can be rented.
- -# Example: 30827, 32471, 34486, 36547
- -# Default: 30827
- -ListPetRentNpc = 30827
- -
- -# This will control the inventory space limit for pets (NOT WEIGHT LIMIT).
- -# Default: 12
- -MaximumSlotsForPet = 12
- -
- -# HP/MP Regen Multiplier for Pets
- -# Default: 100, 100
- -PetHpRegenMultiplier = 100
- -PetMpRegenMultiplier = 100
- -
- -# ---------------------------------------------------------------------------
- -# Raid Bosses
- -# ---------------------------------------------------------------------------
- -
- -# Percent of HP and MP regeneration for raid bosses.
- -# Example: Setting HP to 10 will cause raid boss HP to regenerate 90% slower than normal.
- -# Default: 100, 100
- -RaidHpRegenMultiplier = 100
- -RaidMpRegenMultiplier = 100
- -
- -# Percent of physical and magical defense for raid bosses.
- -# Example: A setting of 10 will cause defense to be 90% lower than normal,
- -# while 110 will cause defense to be 10% higher than normal.
- -# Default: 100, 100
- -RaidPDefenceMultiplier = 100
- -RaidMDefenceMultiplier = 100
- -
- -# Percent of physical and magical attack for raid bosses.
- -# Example: A setting of 10 will cause attack to be 90% lower than normal,
- -# while 110 will cause attack to be 10% higher than normal.
- -# Default: 100, 100
- -RaidPAttackMultiplier = 100
- -RaidMAttackMultiplier = 100
- -
- -# Configure Minimum and Maximum time multiplier between raid boss re-spawn.
- -# By default 12Hours*1.0 for Minimum Time and 24Hours*1.0 for Maximum Time.
- -# Example: Setting RaidMaxRespawnMultiplier to 2 will make the time between
- -# re-spawn 24 hours to 48 hours.
- -# Default: 1.0, 1.0
- -RaidMinRespawnMultiplier = 1.0
- -RaidMaxRespawnMultiplier = 1.0
- -
- -# Configure the interval at which raid boss minions will re-spawn.
- -# This time is in milliseconds, 1 minute is 60000 milliseconds.
- -# Default: 300000
- -RaidMinionRespawnTime = 300000
- -
- -# Let's make handling of minions with non-standard static respawn easier - no additional code, just config.
- -# Format: minionId1,timeInSec1;minionId2,timeInSec2
- -CustomMinionsRespawnTime = 22450,30;22371,120;22543,0;25545,0;22424,30;22425,30;22426,30;22427,30;22428,30;22429,30;22430,30;22432,30;22433,30;22434,30;22435,30;22436,30;22437,30;22438,30;25596,30;25605,0;25606,0;25607,0;25608,0
- -
- -# Disable Raid Curse if raid more than 8 levels lower.
- -# Caution: drop will be reduced or even absent if DeepBlue drop rules enabled.
- -# Default: False
- -DisableRaidCurse = False
- -
- -# Configure the interval at which raid bosses and minions wont reconsider their target
- -# This time is in seconds, 1 minute is 60 seconds.
- -# Default: 10,10,10
- -RaidChaosTime = 10
- -GrandChaosTime = 10
- -MinionChaosTime = 10
- -
- -# ---------------------------------------------------------------------------
- -# Drops
- -# ---------------------------------------------------------------------------
- -
- -# If True, activates bellow level gap rules for standard mobs:
- -# Default: True
- -UseDeepBlueDropRules = True
- -
- -# If True, activates bellow level gap rules for raid bosses:
- -# Default: True
- -UseDeepBlueDropRulesRaid = True
- -
- -
- -# The min and max level difference used for level gap calculation
- -# this is only for how many levels higher the player is than the monster
- -# Default: 8
- -DropAdenaMinLevelDifference=8
- -# Default: 15
- -DropAdenaMaxLevelDifference=15
- -
- -# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
- -# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
- -# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
- -# Default: 10
- -DropAdenaMinLevelGapChance=10
- -
- -# The min and max level difference used for level gap calculation
- -# this is only for how many levels higher the player is than the monster
- -# Default: 5
- -DropItemMinLevelDifference=5
- -# Default: 10
- -DropItemMaxLevelDifference=10
- -
- -# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
- -# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
- -# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
- -# Default: 10
- -DropItemMinLevelGapChance=10
- \ No newline at end of file
- diff --git a/dist/game/config/Olympiad.properties b/dist/game/config/Olympiad.properties
- deleted file mode 100644
- index 8940338..0000000
- --- a/dist/game/config/Olympiad.properties
- +++ /dev/null
- @@ -1,166 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Olympiad Settings
- -# ---------------------------------------------------------------------------
- -
- -# The defaults are set to be retail-like.
- -# If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything.
- -# Also please understand what you are changing before you do so on a live server.
- -# ---------------------------------------------------------------------------
- -
- -# Olympiad Start Time in Military hours Default 6pm (18)
- -# Default: 18
- -AltOlyStartTime = 18
- -
- -# Olympiad Start Time for Min's, Default 00 so at the start of the hour.
- -# Default: 00
- -AltOlyMin = 00
- -
- -# Maximum number of buffs.
- -# Default: 5
- -AltOlyMaxBuffs = 5
- -
- -# Olympiad Competition Period, Default 6 hours.
- -# (If set different, should be increment by 10mins)
- -# Default: 21600000
- -AltOlyCPeriod = 21600000
- -
- -# Olympiad Battle Period, Default 5 minutes.
- -# Default: 300000
- -AltOlyBattle = 300000
- -
- -# Olympiad Weekly Period, Default 1 week
- -# Used for adding points to nobles
- -# Default: 604800000
- -AltOlyWPeriod = 604800000
- -
- -# Olympiad Validation Period, Default 24 Hours.
- -# Default: 86400000
- -AltOlyVPeriod = 86400000
- -
- -# Points for reaching Noblesse for the first time
- -# Default: 10
- -AltOlyStartPoints = 10
- -
- -# Points every week
- -# Default: 10
- -AltOlyWeeklyPoints = 10
- -
- -# Required number of participants for the class based games
- -# Default: 11
- -AltOlyClassedParticipants = 11
- -
- -# Required number of participants for the non-class based games
- -# Default: 11
- -AltOlyNonClassedParticipants = 11
- -
- -# Required number of participants for the 3x3 teams games
- -# Default: 6
- -AltOlyTeamsParticipants = 6
- -
- -# Number used for displaying amount of registered participants, messages "Fewer than ..." or "More than ...".
- -# 0 for displaying digits instead of text phrase (old style).
- -# Default: 100
- -AltOlyRegistrationDisplayNumber = 100
- -
- -# Reward for the class based games
- -# Format: itemId1,itemNum1;itemId2,itemNum2...
- -# Default: 13722,50
- -AltOlyClassedReward = 13722,50
- -
- -# Reward for the non-class based games
- -# Format: itemId1,itemNum1;itemId2,itemNum2...
- -# Default: 13722,40
- -AltOlyNonClassedReward = 13722,40
- -
- -# Reward for the 3x3 teams games
- -# Format: itemId1,itemNum1;itemId2,itemNum2...
- -# Default: 13722,85
- -AltOlyTeamReward = 13722,85
- -
- -# ItemId used for exchanging to the points.
- -# Default: 13722
- -AltOlyCompRewItem = 13722
- -
- -# The minimal matches you need to participate to receive point rewards
- -# Default: 15
- -AltOlyMinMatchesForPoints = 15
- -
- -# Rate to exchange points to reward item.
- -# Default: 1000
- -AltOlyGPPerPoint = 1000
- -
- -# Noblesse points awarded to Heroes.
- -# Default: 200
- -AltOlyHeroPoints = 200
- -
- -# Noblesse points awarded to Rank 1 members.
- -# Default: 100
- -AltOlyRank1Points = 100
- -
- -# Noblesse points awarded to Rank 2 members.
- -# Default: 75
- -AltOlyRank2Points = 75
- -
- -# Noblesse points awarded to Rank 3 members.
- -# Default: 55
- -AltOlyRank3Points = 55
- -
- -# Noblesse points awarded to Rank 4 members.
- -# Default: 40
- -AltOlyRank4Points = 40
- -
- -# Noblesse points awarded to Rank 5 members.
- -# Default: 30
- -AltOlyRank5Points = 30
- -
- -# Maximum points that player can gain/lose on a match.
- -# Default: 10
- -AltOlyMaxPoints = 10
- -
- -# Hero tables show last month's winners or current status.
- -# Default: True
- -AltOlyShowMonthlyWinners = True
- -
- -# Olympiad Managers announce each start of fight.
- -# Default: True
- -AltOlyAnnounceGames = True
- -
- -# Restrict specified items in Olympiad. ItemID's need to be separated with a comma (ex. 1,200,350)
- -# Equipped items will be moved to inventory during port.
- -# Default: 6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,9388,9389,9390,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,20759,20775,20776,20777,20778,14774
- -AltOlyRestrictedItems = 6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,9388,9389,9390,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,20759,20775,20776,20777,20778,14774
- -
- -# Enchant limit for items during Olympiad battles. Disabled = -1.
- -# Default: -1
- -AltOlyEnchantLimit = -1
- -
- -# Log all Olympiad fights and outcome to olympiad.csv file.
- -# Default: False
- -AltOlyLogFights = False
- -
- -# Time to wait before teleported to arena.
- -# Default: 120
- -AltOlyWaitTime = 120
- -
- -# Divider for points in classed and non-classed games
- -# Default: 5, 5
- -AltOlyDividerClassed = 5
- -AltOlyDividerNonClassed = 5
- -
- -# Maximum number of matches a Noblesse character can join per week
- -# Default: 70
- -AltOlyMaxWeeklyMatches = 70
- -
- -# Maximum number of Class-Irrelevant Individual matches a character can join per week
- -# Default: 60
- -AltOlyMaxWeeklyMatchesNonClassed = 60
- -
- -# Maximum number of Class Individual matches a character can join per week
- -# Default: 30
- -AltOlyMaxWeeklyMatchesClassed = 30
- -
- -# Maximum number of Class-Irrelevant Team matches a character can join per week
- -# Default: 10
- -AltOlyMaxWeeklyMatchesTeam = 10
- \ No newline at end of file
- diff --git a/dist/game/config/PVP.properties b/dist/game/config/PVP.properties
- deleted file mode 100644
- index b9a6ab4..0000000
- --- a/dist/game/config/PVP.properties
- +++ /dev/null
- @@ -1,43 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# PvP Related Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -# ---------------------------------------------------------------------------
- -# PK'er Drop Settings
- -# ---------------------------------------------------------------------------
- -
- -# Default: False
- -CanGMDropEquipment = False
- -
- -# Warning: Make sure the lists do NOT CONTAIN
- -# trailing spaces or spaces between the numbers!
- -# List of pet items we cannot drop.
- -# Default: 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
- -ListOfPetItems = 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
- -
- -# Lists of items which should NEVER be dropped (note, Adena will
- -# never be dropped) whether on this list or not
- -# Default: 57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390
- -ListOfNonDroppableItems = 57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390
- -
- -# Default: 6
- -MinimumPKRequiredToDrop = 6
- -
- -
- -# ---------------------------------------------------------------------------
- -# Misc.
- -# ---------------------------------------------------------------------------
- -
- -# Should we award a pvp point for killing a player with karma?
- -# Default: False
- -AwardPKKillPVPPoint = False
- -
- -# How much time one stays in PvP mode after hitting an innocent (in ms)
- -# Default: 120000
- -PvPVsNormalTime = 120000
- -
- -# Length one stays in PvP mode after hitting a purple player (in ms)
- -# Default: 60000
- -PvPVsPvPTime = 60000
- \ No newline at end of file
- diff --git a/dist/game/config/Rates.properties b/dist/game/config/Rates.properties
- deleted file mode 100644
- index 909c6a9..0000000
- --- a/dist/game/config/Rates.properties
- +++ /dev/null
- @@ -1,166 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Rate Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# Item Rates
- -# ---------------------------------------------------------------------------
- -# Warning: Remember if you increase both chance and amount you will have higher rates than expected
- -# Example: if amount multiplier is 5 and chance multiplier is 5 you will end up with 5*5 = 25 drop rates so be careful!
- -
- -
- -# Multiplies the amount of items dropped from monster on ground when it dies.
- -DeathDropAmountMultiplier = 1
- -# Multiplies the amount of items looted from monster when a skill like Sweeper(Spoil) is used.
- -CorpseDropAmountMultiplier = 1
- -# Multiplies the amount of items dropped from monster on ground when it dies.
- -HerbDropAmountMultiplier = 1
- -RaidDropAmountMultiplier = 1
- -
- -# Multiplies the chance of items that can be dropped from monster on ground when it dies.
- -DeathDropChanceMultiplier = 1
- -# Multiplies the chance of items that can be looted from monster when a skill like Sweeper(Spoil) is used.
- -CorpseDropChanceMultiplier = 1
- -# Multiplies the chance of items that can be dropped from monster on ground when it dies.
- -HerbDropChanceMultiplier = 1
- -RaidDropChanceMultiplier = 1
- -
- -# List of items affected by custom drop rate by id, used now for Adena rate too.
- -# Usage: itemId1,multiplier1;itemId2,multiplier2;...
- -# Note: Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
- -# Example for Raid boss 1x jewelry: 6656,1;6657,1;6658,1;6659,1;6660,1;6661,1;6662,1;8191,1;10170,1;10314,1;
- -# Default: 57,1
- -DropAmountMultiplierByItemId = 57,1
- -DropChanceMultiplierByItemId = 57,1
- -
- -
- -# ---------------------------------------------------------------------------
- -# Standard Settings (Retail value = 1)
- -# ---------------------------------------------------------------------------
- -
- -
- -# Experience multiplier
- -RateXp = 1
- -# Skill points multiplier
- -RateSp = 1
- -# Experience multiplier (Party)
- -RatePartyXp = 1
- -# Skill points multiplier (Party)
- -RatePartySp = 1
- -RateDropManor = 1
- -# Karma decreasing rate
- -# Note: -1 means RateXp so it means it will use retail rate for decreasing karma upon death or receiving exp by farming mobs.
- -# Default: -1
- -RateKarmaLost = -1
- -RateKarmaExpLost = 1
- -RateSiegeGuardsPrice = 1
- -
- -# Modify the rate of reward of all extractable items and skills.
- -# Default: 1.
- -RateExtractable = 1.
- -
- -# Hellbound trust increase/decrease multipliers
- -RateHellboundTrustIncrease = 1
- -RateHellboundTrustDecrease = 1
- -
- -# Quest Multipliers
- -# Warning: Many quests need to be rewritten
- -# for this setting to work properly.
- -
- -# Quest item drop multiplier
- -RateQuestDrop = 1
- -
- -# Exp/SP reward multipliers
- -RateQuestRewardXP = 1
- -RateQuestRewardSP = 1
- -
- -# Adena reward multiplier
- -RateQuestRewardAdena = 1
- -
- -# Use additional item multipliers?
- -# Default: False
- -UseQuestRewardMultipliers = False
- -
- -# Default reward multiplier
- -# When UseRewardMultipliers=False - default multiplier is used for any reward
- -# When UseRewardMultipliers=True - default multiplier is used for all items not affected by additional multipliers
- -# Default: 1
- -RateQuestReward = 1
- -
- -# Additional quest-reward multipliers based on item type
- -RateQuestRewardPotion = 1
- -RateQuestRewardScroll = 1
- -RateQuestRewardRecipe = 1
- -RateQuestRewardMaterial = 1
- -
- -# ---------------------------------------------------------------------------
- -# Vitality system rates. Works only if EnableVitality = True
- -# ---------------------------------------------------------------------------
- -
- -# The following configures the XP multiplier of each vitality level. Basically, you have
- -# 5 levels, the first one being 0. Official rates are:
- -# Level 1: 150%
- -# Level 2: 200%
- -# Level 3: 250%
- -# Level 4: 300%
- -# Take care setting these values according to your server rates, as the can lead to huge differences!
- -# Example with a server rate 15x and a level 4 vitality = 3. => final server rate = 45 (15x3)!
- -RateVitalityLevel1 = 1.5
- -RateVitalityLevel2 = 2.
- -RateVitalityLevel3 = 2.5
- -RateVitalityLevel4 = 3.
- -
- -# These options are to be used if you want to increase the vitality gain/lost for each mob you kills
- -# Default values are 1.
- -RateVitalityGain = 1.
- -RateVitalityLost = 1.
- -
- -# This defines how many times faster do the players regain their vitality when in peace zones
- -RateRecoveryPeaceZone = 1.
- -
- -# This defines how many times faster do the players regain their vitality when offline
- -# Note that you need to turn on "RecoverVitalityOnReconnect" to have this option effective
- -RateRecoveryOnReconnect = 4.
- -
- -
- -# ---------------------------------------------------------------------------
- -# Player Drops (values are set in PERCENTS)
- -# ---------------------------------------------------------------------------
- -
- -PlayerDropLimit = 0
- -# in %
- -PlayerRateDrop = 0
- -# in %
- -PlayerRateDropItem = 0
- -# in %
- -PlayerRateDropEquip = 0
- -# in %
- -PlayerRateDropEquipWeapon = 0
- -
- -# Default: 10
- -KarmaDropLimit = 10
- -
- -# Default: 40
- -KarmaRateDrop = 40
- -
- -# Default: 50
- -KarmaRateDropItem = 50
- -
- -# Default: 40
- -KarmaRateDropEquip = 40
- -
- -# Default: 10
- -KarmaRateDropEquipWeapon = 10
- -
- -
- -# ---------------------------------------------------------------------------
- -# Pets (Default value = 1)
- -# ---------------------------------------------------------------------------
- -
- -PetXpRate = 1
- -PetFoodRate = 1
- -SinEaterXpRate = 1
- -
- diff --git a/dist/game/config/Server.properties b/dist/game/config/Server.properties
- deleted file mode 100644
- index 79d6934..0000000
- --- a/dist/game/config/Server.properties
- +++ /dev/null
- @@ -1,136 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Game Server Settings
- -# ---------------------------------------------------------------------------
- -# This is the server configuration file. Here you can set up the connection information for your server.
- -# This was written with the assumption that you are behind a router.
- -# Dumbed Down Definitions...
- -# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
- -# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
- -# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
- -
- -# ---------------------------------------------------------------------------
- -# Networking
- -# ---------------------------------------------------------------------------
- -
- -# Enables automatic port mapping for game server.
- -# If you have a router game server will request for port forwarding.
- -# Default: True
- -EnableUPnP = True
- -
- -# Where's the Login server this gameserver should connect to
- -# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
- -# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
- -# Default: 127.0.0.1
- -LoginHost = 127.0.0.1
- -
- -# TCP port the login server listen to for gameserver connection requests
- -# Default: 9014
- -LoginPort = 9014
- -
- -# Bind address for gameserver. You should not need to change it in most cases.
- -# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
- -# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
- -# Default: * (0.0.0.0)
- -GameserverHostname = *
- -
- -# Default: 7777
- -GameserverPort = 7777
- -
- -
- -# ---------------------------------------------------------------------------
- -# Database
- -# ---------------------------------------------------------------------------
- -# Database Engine
- -# Available: MySQL, MariaDB
- -# Default: MySQL
- -Database = MySQL
- -
- -# Specify the appropriate driver and url for the database you're using.
- -# Examples:
- -# Driver = com.mysql.jdbc.Driver
- -# Driver = org.hsqldb.jdbcDriver
- -# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
- -# Driver = org.mariadb.jdbc.Driver
- -# Default: com.mysql.jdbc.Driver
- -Driver = com.mysql.jdbc.Driver
- -# Database URL
- -# URL = jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
- -# URL = jdbc:hsqldb:hsql://localhost/l2jgs
- -# URL = jdbc:sqlserver://localhost/database = l2jgs/user = sa/password =
- -# URL = jdbc:mariadb://localhost/l2jgs
- -# Default: jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
- -URL = jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
- -# Database user info (default is "root" but it's not recommended)
- -Login = root
- -# Database connection password
- -Password = toor
- -
- -# Database Connection Pool
- -# Default: HikariCP
- -# Available: BoneCP, C3P0, HikariCP
- -ConnectionPool = HikariCP
- -
- -# Default: 100
- -MaximumDbConnections = 100
- -
- -# Default: 0
- -MaximumDbIdleTime = 0
- -
- -# ---------------------------------------------------------------------------
- -# Misc Server Settings
- -# ---------------------------------------------------------------------------
- -
- -# This is the server ID that the Game Server will request.
- -# Example: 1 = Bartz
- -# Default: 1
- -RequestServerID = 1
- -
- -# True = The Login Server will give an other ID to the server if the requested ID is already reserved.
- -# Default: True
- -AcceptAlternateID = True
- -
- -# Datapack root directory.
- -# Defaults to current directory from which the server is started unless the below line is uncommented.
- -# WARNING: <u><b><font color="red">If the specified path is invalid, it will lead to multiple errors!</font></b></u>
- -#Default: .
- -DatapackRoot = .
- -
- -# Define how many players are allowed to play simultaneously on your server.
- -# Default: 500
- -MaximumOnlineUsers = 500
- -
- -# Numbers of protocol revisions that server allows to connect.
- -# Delimiter is ;
- -# WARNING: <u><b><font color="red">Changing the protocol revision may result in incompatible communication and many errors in game!</font></b></u>
- -# Default: 267;268;271;273
- -AllowedProtocolRevisions = 267;268;271;273
- -
- -
- -# ---------------------------------------------------------------------------
- -# Misc Player Settings
- -# ---------------------------------------------------------------------------
- -
- -# Player name template.
- -# Examples:
- -# PlayerNameTemplate = [A-Z][a-z]{3,3}[A-Za-z0-9]*
- -# The above setting will allow names with first capital letter, next three small letters,
- -# and any letter (case insensitive) or number, like OmfgWTF1
- -# PlayerNameTemplate = [A-Z][a-z]*
- -# The above setting will allow names only of letters with first one capital, like Omfgwtf
- -# The default forces start with a letter and continues either with letters or numbers.
- -# Default: [a-zA-Z0-9]*
- -PlayerNameTemplate = [a-zA-Z0-9]*
- -
- -# This setting restricts names players can give to their pets.
- -# See CnameTemplate for details
- -# Default: [a-zA-Z0-9]*
- -PetNameTemplate = [a-zA-Z0-9]*
- -
- -# This setting restricts clan/subpledge names players can set.
- -# See CnameTemplate for details
- -# Default: [a-zA-Z0-9]+
- -ClanNameTemplate = [a-zA-Z0-9]*
- -
- -# Maximum number of characters per account.
- -# Default: 7 (client limit)
- -CharMaxNumber = 7
- \ No newline at end of file
- diff --git a/dist/game/config/Siege.properties b/dist/game/config/Siege.properties
- deleted file mode 100644
- index e188432..0000000
- --- a/dist/game/config/Siege.properties
- +++ /dev/null
- @@ -1,130 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Siege Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# Standard Settings
- -# ---------------------------------------------------------------------------
- -
- -# Length of siege before the count down (in minutes).
- -# Default: 120
- -SiegeLength = 120
- -
- -# Maximum number of flags per clan.
- -# Default: 1
- -MaxFlags = 1
- -
- -# Minimum level to register.
- -# Default: 5
- -SiegeClanMinLevel = 5
- -
- -# Max number of clans that can register on each side.
- -# Default: 500
- -AttackerMaxClans = 500
- -
- -# Default: 500
- -DefenderMaxClans = 500
- -
- -# Respawn times (in milliseconds).
- -# Default: 0
- -AttackerRespawn = 0
- -
- -# Reward successful siege defense with blood alliance in clan warehouse
- -# Default: 1
- -BloodAllianceReward = 1
- -
- -
- -# ---------------------------------------------------------------------------
- -# Castle Control Tower Spawns
- -# ---------------------------------------------------------------------------
- -
- -# Caste Artifacts and Control Towers spawns
- -#
- -# Control Towers syntax: NameControlTowerN=x,y,z,npc_id,hp
- -# Name - castle name
- -# N - number
- -# x,y,z - coords
- -# npc_id - id of template
- -#
- -# Flame Towers syntax: NameFlameTowerN=x,y,z,npc_id,hp,zoneIds
- -# Name - castle name
- -# N - number
- -# x,y,z - coords
- -# npc_id - id of template
- -# zoneIds - ids of zones related with tower
- -#
- -
- -# Gludio
- -GludioFlameTower1=-18154,107591,-2560,13004,70017,70019
- -GludioFlameTower2=-19329,108154,-2384,13004,70018,70020
- -GludioControlTower1=-18325,112811,-2377,13002
- -GludioControlTower2=-18048,107098,-2378,13002
- -GludioControlTower3=-18113,108597,-2343,13002
- -GludioMaxMercenaries = 100
- -
- -# Giran
- -GiranFlameTower1=118331,145055,-2627,13004,70025,70027
- -GiranFlameTower2=117768,143880,-2451,13004,70026,70028
- -GiranControlTower1=113115,144829,-2446,13002
- -GiranControlTower2=118828,145106,-2447,13002
- -GiranControlTower3=117329,145041,-2412,13002
- -GiranMaxMercenaries = 200
- -
- -# Dion
- -DionFlameTower1=22114,162159,-2754,13004,70021,70023
- -DionFlameTower2=23289,161596,-2578,13004,70022,70024
- -DionControlTower1=22285,156939,-2571,13002
- -DionControlTower2=22008,162652,-2572,13002
- -DionControlTower3=22073,161153,-2537,13002
- -DionMaxMercenaries = 150
- -
- -# Oren
- -OrenFlameTower1=84407,37150,-2354,13004,70029,70031
- -OrenFlameTower2=83844,35975,-2178,13004,70030,70032
- -OrenControlTower1=79193,36977,-2167,13002
- -OrenControlTower2=84906,37254,-2168,13002
- -OrenControlTower3=83407,37189,-2133,13002
- -OrenMaxMercenaries = 300
- -
- -# Aden
- -AdenFlameTower1=149976,1583,-450,13004,70008,70016,70007,70015,70006,70014,70005,70013
- -AdenFlameTower2=144955,1603,-450,13004,70004,70012,70003,70011,70002,70010,70001,70009
- -AdenControlTower1=148774,2351,-389,13002
- -AdenControlTower2=147456,5724,158,13002
- -AdenControlTower3=146137,2352,-389,13002
- -AdenMaxMercenaries = 400
- -
- -# Innadril
- -InnadrilFlameTower1=116065,250938,-850,13004,70033,70035
- -InnadrilFlameTower2=117240,250375,-674,13004,70034,70036
- -InnadrilControlTower1=116236,245718,-667,13002
- -InnadrilControlTower2=115959,251431,-667,13002
- -InnadrilControlTower3=116024,249932,-633,13002
- -InnadrilMaxMercenaries = 400
- -
- -# Goddard
- -GoddardFlameTower1=148144,-46992,-1609,13004,70037,70039
- -GoddardFlameTower2=146784,-46992,-1609,13004,70038,70040
- -GoddardControlTower1=144672,-48832,-1742,13002
- -GoddardControlTower2=150240,-48832,-1742,13002
- -GoddardControlTower3=147456,-49200,-1619,13002
- -GoddardMaxMercenaries = 400
- -
- -# Rune
- -RuneFlameTower1=12864,-47440,-1087,13004,70041,70043
- -RuneFlameTower2=12225,-50767,1248,13004,70042,70044
- -RuneControlTower1=16565,-50318,-641,13002
- -RuneControlTower2=16559,-48000,-641,13002
- -RuneControlTower3=10775,-48481,83,13002
- -RuneMaxMercenaries = 400
- -
- -# Schuttgart
- -SchuttgartFlameTower1=76872,-151043,120,13004,70045,70047
- -SchuttgartFlameTower2=78233,-151037,120,13004,70046,70048
- -SchuttgartControlTower1=80334,-152898,-8,13002
- -SchuttgartControlTower2=74775,-152928,-8,13002
- -SchuttgartControlTower3=77547,-153246,112,13002
- -SchuttgartMaxMercenaries = 400
- diff --git a/dist/game/config/Telnet.properties b/dist/game/config/Telnet.properties
- deleted file mode 100644
- index f375cc8..0000000
- --- a/dist/game/config/Telnet.properties
- +++ /dev/null
- @@ -1,28 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Telnet Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -# ---------------------------------------------------------------------------
- -
- -# Allows text based monitoring and administration of L2J GS
- -# by using a telnet client. Communication protocol is insecure
- -# and you should use SSL tunnels, VPN, etc. if you plan to connect
- -# over non-trusted channels.
- -# Default: False
- -EnableTelnet = False
- -
- -# This is the port L2J should listen to for incoming telnet
- -# requests.
- -# Default: 54321
- -StatusPort = 54321
- -
- -# If the following is not set, a random password is generated on server startup.
- -# Usage: StatusPW = somePass
- -StatusPW =
- -
- -# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
- -# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
- -# Default: 127.0.0.1,localhost
- -ListOfHosts = 127.0.0.1,localhost
- \ No newline at end of file
- diff --git a/dist/game/config/TerritoryWar.properties b/dist/game/config/TerritoryWar.properties
- deleted file mode 100644
- index ce04ff6..0000000
- --- a/dist/game/config/TerritoryWar.properties
- +++ /dev/null
- @@ -1,53 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# TerritoryWar Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -
- -# ---------------------------------------------------------------------------
- -# Standard Settings
- -# ---------------------------------------------------------------------------
- -
- -# Length of siege before the count down (in minutes).
- -# Default: 120
- -WarLength = 120
- -
- -# Clan Minimum level to register.
- -# Default: 0
- -ClanMinLevel = 0
- -
- -# Player Minimum level to register.
- -# Default: 40
- -PlayerMinLevel = 40
- -
- -# Max number of clans and players that can register for a side.
- -# Default: 500
- -DefenderMaxClans = 500
- -
- -# Default: 500
- -DefenderMaxPlayers = 500
- -
- -# Is Ward holding players can be attacked and killed in peace zone
- -# Default: False
- -PlayerWithWardCanBeKilledInPeaceZone = False
- -
- -# Spawn wards in Castles when Territory War is not in progress
- -# Default: False
- -SpawnWardsWhenTWIsNotInProgress = False
- -
- -# Return all wards to their own castle when Territory War starts
- -# Default: False
- -ReturnWardsWhenTWStarts = False
- -
- -# Territory Badge needed to change nobless
- -# default: 100
- -MinTerritoryBadgeForNobless = 100
- -
- -# Territory Badge needed to buy Strider
- -# default: 50
- -MinTerritoryBadgeForStriders = 50
- -
- -# Territory Badge needed to buy Guardian's Strider
- -# default: 80
- -MinTerritoryBadgeForBigStrider = 80
- \ No newline at end of file
- diff --git a/dist/game/config/default/Character.properties b/dist/game/config/default/Character.properties
- new file mode 100644
- index 0000000..fcb612f
- --- /dev/null
- +++ b/dist/game/config/default/Character.properties
- @@ -0,0 +1,822 @@
- +# ---------------------------------------------------------------------------
- +# Alternative Character Settings
- +# ---------------------------------------------------------------------------
- +# This properties file is solely for the purpose of Character modifications that directly influence them.
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# Statistics
- +# ---------------------------------------------------------------------------
- +
- +# This option, if enabled, will force a character to de-level if the characters' experience is below their level after losing experience on death.
- +# If this is set to False, the character will not de-level even if their Experience is below their level after death.
- +# Default: True
- +Delevel = True
- +
- +# This option enable check for all player skills for skill level.
- +# If player level is lower than skill learn level - 9, skill level is decreased to next possible level.
- +# If there is no possible level, skill is removed from player.
- +DecreaseSkillOnDelevel = True
- +
- +# Weight limit multiplier. Example: Setting this to 5 will give players 5x the normal weight limit.
- +# Default: 1
- +AltWeightLimit = 1
- +
- +# Run speed modifier. Example: Setting this to 5 will give players +5 to their running speed.
- +# Default: 0
- +RunSpeedBoost = 0
- +
- +# Chance of receiving the Death Penalty debuff when killed by a mob.
- +# Default: 20
- +DeathPenaltyChance = 20
- +
- +# Percent of HP, MP, and CP which is restored on character revival.
- +# Use 0 to disable restore
- +# Default: 0, 65, 0
- +RespawnRestoreCP = 0
- +RespawnRestoreHP = 65
- +RespawnRestoreMP = 0
- +
- +# Percent of HP, MP, and CP regeneration for players.
- +# Example: Setting HP to 10 will cause player HP to regenerate 90% slower than normal.
- +# Default: 100, 100, 100
- +HpRegenMultiplier = 100
- +MpRegenMultiplier = 100
- +CpRegenMultiplier = 100
- +
- +# ---------------------------------------------------------------------------
- +# Skills & Effects
- +# ---------------------------------------------------------------------------
- +
- +# When this is enabled it will read the "SkillDurationList" option.
- +# This will basically overlook the "time = x" in the skill XMLs so that you do not need to modify the L2J Datapack XMLs to increase skill duration.
- +# Default: False
- +EnableModifySkillDuration = False
- +# Skill duration list
- +# Format: skillid,newtime;skillid2,newtime2...
- +# Example:
- +# This enable 1h(3600) duration for songs, the "\"indicates new line,
- +# and is only set for formating purposes.
- +# SkillDurationList = 264,3600;265,3600;266,3600;267,3600;268,3600;\
- +# 269,3600;270,3600;304,3600;305,1200;306,3600;308,3600;349,3600;\
- +# 363,3600;364,3600
- +SkillDurationList =
- +
- +# When this is enabled it will read the "SkillReuseList" option.
- +EnableModifySkillReuse = False
- +# Format: skillid,newDelayTime;skillid,newDelayTime2 (See skillDuration for examples)
- +SkillReuseList =
- +
- +# If it's true all class skills will be delivered upon level up and login.
- +# Default: False
- +AutoLearnSkills = False
- +
- +# If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills.
- +# Default: False
- +AutoLearnForgottenScrollSkills = False
- +
- +# Default: False
- +AutoLootHerbs = False
- +
- +# Maximum number of buffs and songs/dances.
- +# Remember that Divine Inspiration will give players 4 additional buff slots on top of the number specified in "maxbuffamount".
- +# Default: 20, 12, 12
- +MaxBuffAmount = 20
- +MaxTriggeredBuffAmount = 12
- +MaxDanceAmount = 12
- +
- +# Allow players to cancel dances/songs via Alt+click on buff icon
- +# Default: False
- +DanceCancelBuff = False
- +
- +# This option enables/disables additional MP consume for dances and songs.
- +# Default: True
- +DanceConsumeAdditionalMP = True
- +
- +# Allow players to have all dances/songs stored when logout.
- +# Default: False
- +AltStoreDances = False
- +
- +# This option allows a player to automatically learn Divine Inspiration.
- +# This is not included in AutoLearnSkills above.
- +# Default: False
- +AutoLearnDivineInspiration = False
- +
- +# This is to allow a character to be canceled during bow use, skill use, or both.
- +# Available Options: bow, cast, all
- +# Default: cast
- +AltGameCancelByHit = cast
- +
- +# This option, if enabled, will allow magic to fail, and if disabled magic damage will always succeed with a 100% chance.
- +# Default: True
- +MagicFailures = True
- +
- +# Protection from aggressive mobs after getting up from fake death.
- +# The value is specified in seconds.
- +# Default: 0
- +PlayerFakeDeathUpProtection = 0
- +
- +# This option is to enable or disable the storage of buffs/debuffs among other effects.
- +# Default: True
- +StoreSkillCooltime = True
- +
- +# This option is to enable or disable the storage of buffs/debuffs among other effects during
- +# a subclass change
- +# Default: False
- +SubclassStoreSkillCooltime = False
- +
- +# These are alternative rules for shields.
- +# If True and they block:
- +# The damage is powerAtk-shieldDef,
- +# If False and they block:
- +# The damage is powerAtk / (shieldDef + powerDef)
- +# Default: False
- +AltShieldBlocks = False
- +
- +# This is the percentage for perfect shield block rate.
- +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- +# Default: 10
- +AltPerfectShieldBlockRate = 10
- +
- +# This is the value ticks are multiplied with to result in interval per tick in milliseconds.
- +# Note: Editing this will not affect how much the over-time effects heals since heal scales with that value too.
- +# Default: 666
- +EffectTickRatio = 666
- +
- +# ---------------------------------------------------------------------------
- +# Class, Sub-class and skill learning options
- +# ---------------------------------------------------------------------------
- +
- +# Allow use of Event Managers for changing occupation without any quests.
- +# Default: False
- +AllowClassMasters = False
- +
- +# ConfigClassMaster=1;[57(100000)];[];2;[57(1000000)];[];3;[57(10000000)],[5575(1000000)];[6622(1)]
- +# 1st occupation change for 100.000 Adena (item id 57)
- +# 2nd occupation change for 1.000.0000 Adena (item id 57)
- +# 3rd occupation change for 10.000.0000 Adena (item id 57) and 1.000.000 Ancient Adena (item id 5575)
- +# on 3rd occupation change player will be rewarded with 1 Book of Giants (item id 6622)
- +# ConfigClassMaster=1;[];[];2;[];[];3;[];[]
- +# 1st, 2nd, 3rd occupation change for free, without rewards.
- +# ConfigClassMaster=1;[];[];2;[];[]
- +# Allow only first and second change.
- +ConfigClassMaster = 1;[];[];2;[];[];3;[];[]
- +
- +# Class Masters will allow changing to any occupation on any level inside class tree
- +# For example, Dwarven Fighter will be able to advance to:
- +# Artisan, Scavenger, Warsmith, Bounty Hunter, Maestro, Fortune Seeker.
- +# But Warsmith will be able to change only to Maestro.
- +# Default = False
- +AllowEntireTree = False
- +
- +# When character reach levels 20,40,76 he will receive tutorial page
- +# with list of the all possible variants, and can select and immediately
- +# change to the new occupation, or decide to choose later (on next login).
- +# Can be used with or without classic Class Masters.
- +# Default = False
- +AlternateClassMaster = False
- +
- +# Require life crystal needed to learn clan skills.
- +# Default: True
- +LifeCrystalNeeded = True
- +
- +# Require book needed to enchant skills.
- +# Default: True
- +EnchantSkillSpBookNeeded = True
- +
- +# Require spell book needed to learn Divine Inspiration.
- +# Default: True
- +DivineInspirationSpBookNeeded = True
- +
- +# When enabled, the following will be true:
- +# All classes can learn all skills.
- +# Skills of another class costs x2 SP to learn.
- +# Skills of another race costs x2 SP to learn.
- +# Skills of fighters/mages costs x3 SP to learn.
- +# Default: False
- +AltGameSkillLearn = False
- +
- +# Allow player to sub-class without checking for unique quest items.
- +# Default: False
- +AltSubClassWithoutQuests = False
- +
- +# Allow player to add/change subclass at all village master
- +# Default: False
- +AltSubclassEverywhere = False
- +
- +# Allow player to learn transformations without quest.
- +# Default: False
- +AltTransformationWithoutQuest = False
- +
- +# Fee to remove Transfer skills.
- +# Default: 10000000
- +FeeDeleteTransferSkills = 10000000
- +
- +# Fee to remove Sub-Class skills.
- +# Default: 10000000
- +FeeDeleteSubClassSkills = 10000000
- +
- +# ---------------------------------------------------------------------------
- +# Summons configuration
- +# ---------------------------------------------------------------------------
- +
- +# This option is to enable or disable the storage of buffs/debuffs among other effects on pets/invocations
- +# Default: True
- +SummonStoreSkillCooltime = True
- +
- +# Servitor summons on login if player had it summoned before logout
- +# Default: True
- +RestoreServitorOnReconnect = True
- +
- +# Pet summons on login if player had it summoned before logout
- +# Default: True
- +RestorePetOnReconnect = True
- +
- +# ---------------------------------------------------------------------------
- +# Vitality configuration
- +# ---------------------------------------------------------------------------
- +
- +# Enables vitality system
- +# Default: True
- +EnableVitality = True
- +
- +# Do you want players to recover their vitality when they reconnect?
- +# This is calculated with the time they've been offline
- +# Actual Time - Last Time Online / 1000 x rate recovery on reconnect
- +# Notes:
- +# Works only if EnableVitality = True
- +# Default: True
- +RecoverVitalityOnReconnect = True
- +
- +# Option to set a lower vitality at character creation.
- +# Vitality needs to be enabled, and startingpoints needs to be lower
- +# than max-vitality points.
- +# Default: 20000
- +StartingVitalityPoints = 20000
- +
- +
- +# ---------------------------------------------------------------------------
- +# Limits
- +# ---------------------------------------------------------------------------
- +
- +# Maximum Exp Bonus.
- +# from vitality + nevit's hunting bonus, and etc..
- +# Default: 3.5
- +MaxExpBonus = 3.5
- +
- +# Maximum Sp Bonus.
- +# from vitality + nevit's hunting bonus, and etc..
- +# Default: 3.5
- +MaxSpBonus = 3.5
- +
- +# Maximum character running speed.
- +# Default: 250
- +MaxRunSpeed = 250
- +
- +# Maximum character Physical Critical Rate. (10 = 1%)
- +# Default: 500
- +MaxPCritRate = 500
- +
- +# Maximum character Magic Critical Rate. (10 = 1%)
- +# Default: 200
- +MaxMCritRate = 200
- +
- +# Maximum character Attack Speed.
- +# Default: 1500
- +MaxPAtkSpeed = 1500
- +
- +# Maximum character Cast Speed.
- +# Default: 1999
- +MaxMAtkSpeed = 1999
- +
- +# Maximum character Evasion.
- +# Default: 250
- +MaxEvasion = 250
- +
- +# Minimum and Maximum Abnormal State Success Rate.
- +# This affect all skills/effects chances, except in skills where minChance or maxChance parameters are defined.
- +# Default: H5 minimum of 10% and maximum of 90%.
- +MinAbnormalStateSuccessRate = 10
- +MaxAbnormalStateSuccessRate = 90
- +
- +# It's possible to customize the maximum level
- +# Above the default requires extra data
- +
- +# Maximum player level
- +# Default: 85
- +MaxPlayerLevel = 85
- +
- +# Maximum pet level
- +# Default: 86
- +MaxPetLevel = 86
- +
- +# Maximum number of allowed subclasses for every player.
- +# Default: 3
- +MaxSubclass = 3
- +
- +# Starting level for subclasses.
- +# Default: 40
- +BaseSubclassLevel = 40
- +
- +# Maximum subclass level.
- +# Default: 80
- +MaxSubclassLevel = 80
- +
- +# Maximum number of allowed slots for Private Stores Sell.
- +# Other means all the other races aside from Dwarf.
- +# Default: 4, 3
- +MaxPvtStoreSellSlotsDwarf = 4
- +MaxPvtStoreSellSlotsOther = 3
- +
- +# Maximum number of allowed slots for Private Stores Buy.
- +# Other means all the other races aside from Dwarf.
- +# Default: 5, 4
- +MaxPvtStoreBuySlotsDwarf = 5
- +MaxPvtStoreBuySlotsOther = 4
- +
- +# This will control the inventory space limit (NOT WEIGHT LIMIT).
- +# Default: 80, 100, 250
- +MaximumSlotsForNoDwarf = 80
- +MaximumSlotsForDwarf = 100
- +MaximumSlotsForGMPlayer = 250
- +MaximumSlotsForQuestItems = 100
- +
- +# This will control a character's warehouse capacity.
- +# Notes:
- +# This must be LESS then 300 or the client will crash.
- +# Default: 120, 100, 200, 20
- +MaximumWarehouseSlotsForDwarf = 120
- +MaximumWarehouseSlotsForNoDwarf = 100
- +MaximumWarehouseSlotsForClan = 200
- +
- +# Freight
- +# Maximum items that can be placed in Freight
- +# Default: 200
- +MaximumFreightSlots = 200
- +# The price for each item that's deposited
- +# Default: 1000
- +FreightPrice = 1000
- +
- +# Npc talk blockage. When a player talks to a NPC, he must wait some secs
- +# before being able to walk again. In seconds
- +# Default: 3
- +# Set to 0 to disable it
- +NpcTalkBlockingTime = 3
- +
- +# ---------------------------------------------------------------------------
- +# Enchanting
- +# ---------------------------------------------------------------------------
- +# This controls the chance an item has to break if it is enchanted.
- +# This chance is in %, so if you set this to 100%, enchants will always succeed.
- +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- +EnchantChanceElementStone = 50
- +EnchantChanceElementCrystal = 30
- +EnchantChanceElementJewel = 20
- +EnchantChanceElementEnergy = 10
- +
- +# List of non-enchantable items.
- +# Currently apprentice, travelers weapons and Pailaka items
- +# Default: 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
- +EnchantBlackList = 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
- +
- +# ---------------------------------------------------------------------------
- +# Augmenting
- +# ---------------------------------------------------------------------------
- +# These control the chance to get a skill in the augmentation process.
- +# Default: 15, 30, 45, 60
- +AugmentationNGSkillChance = 15
- +AugmentationMidSkillChance = 30
- +AugmentationHighSkillChance = 45
- +AugmentationTopSkillChance = 60
- +# Accessory augmentation skills currently disabled
- +AugmentationAccSkillChance = 0
- +
- +# This controls the chance to get a base stat modifier in the augmentation process.
- +# Notes:
- +# This has no dependency on the grade of Life Stone.
- +# Default: 1
- +AugmentationBaseStatChance = 1
- +
- +# These control the chance to get a glow effect in the augmentation process.
- +# Notes:
- +# No/Mid Grade Life Stone can not have glow effect if you do not get a skill or base stat modifier.
- +# Default: 0, 40, 70, 100
- +AugmentationNGGlowChance = 0
- +AugmentationMidGlowChance = 40
- +AugmentationHighGlowChance = 70
- +AugmentationTopGlowChance = 100
- +
- +# This will enable retail like weapon augmentation, but then you cant change
- +# weapon glow, base stat chance, because it wouldnt be retail like again.
- +RetailLikeAugmentation = True
- +
- +# This will have effect ONLY when RetailLikeAugmentation is True. The sum of 4 numbers must be 100!
- +# You can change probability (in %) of augment color chances - in order yellow, blue, purple, red
- +# Purple and Red always give skill. Default is 55%,35%,7%,3% for all lifestone grades (ie 7+3=10%
- +# for skill, not counting blue ones, that are very rare and not useful anyway).
- +RetailLikeAugmentationNoGradeChance = 55,35,7,3
- +RetailLikeAugmentationMidGradeChance = 55,35,7,3
- +RetailLikeAugmentationHighGradeChance = 55,35,7,3
- +RetailLikeAugmentationTopGradeChance = 55,35,7,3
- +
- +# This will enable retail like accessory augmentation, but then you cant change skill chances for accessory augments
- +RetailLikeAugmentationAccessory = True
- +
- +# List of non-augmentable items, currently contains only Grand Boss jewels
- +# Shadow, common, time-limited, hero, pvp, wear items are hardcoded, as well as all etcitems.
- +# Rods can't be augmented too.
- +# Default: 6656,6657,6658,6659,6660,6661,6662,8191,10170,10314
- +AugmentationBlackList = 6656,6657,6658,6659,6660,6661,6662,8191,10170,10314,13740,13741,13742,13743,13744,13745,13746,13747,13748,14592,14593,14594,14595,14596,14597,14598,14599,14600,14664,14665,14666,14667,14668,14669,14670,14671,14672,14801,14802,14803,14804,14805,14806,14807,14808,14809,15282,15283,15284,15285,15286,15287,15288,15289,15290,15291,15292,15293,15294,15295,15296,15297,15298,15299,16025,16026,21712,22173,22174,22175
- +
- +# Allows alternative augmentation of PvP items.
- +# Default: False
- +AltAllowAugmentPvPItems = false
- +
- +# ---------------------------------------------------------------------------
- +# Karma
- +# ---------------------------------------------------------------------------
- +
- +# Karma player can be killed in Peace zone.
- +# Default: False
- +AltKarmaPlayerCanBeKilledInPeaceZone = False
- +
- +# Karma player can use GateKeeper.
- +# Default: False
- +AltKarmaPlayerCanUseGK = False
- +
- +# Karma player can use escape and recall skills.
- +# Default: True
- +AltKarmaPlayerCanTeleport = True
- +
- +# Karma player can shop.
- +# Default: True
- +AltKarmaPlayerCanShop = True
- +
- +# Karma player can trade.
- +# Default: True
- +AltKarmaPlayerCanTrade = True
- +
- +# Karma player can use warehouse.
- +# Default: True
- +AltKarmaPlayerCanUseWareHouse = True
- +
- +
- +# ---------------------------------------------------------------------------
- +# Fame
- +# ---------------------------------------------------------------------------
- +
- +# The maximum number of Fame points a player can have
- +# Default: 100000
- +MaxPersonalFamePoints = 100000
- +
- +# How frequently the player gets Fame points while in a Fortress Siege zone
- +# Default: 300s (5 min)
- +FortressZoneFameTaskFrequency = 300
- +
- +# How much Fame aquired while in a Fortress Siege Zone
- +# Default: 31
- +FortressZoneFameAquirePoints = 31
- +
- +# How frequently the player gets Fame points while in a Castle Siege zone
- +# Default: 300s (5 min)
- +CastleZoneFameTaskFrequency = 300
- +
- +# How much Fame acquired while in a Castle Siege Zone
- +# Default: 125
- +CastleZoneFameAquirePoints = 125
- +
- +# Dead players can receive fame.
- +# Default: True
- +FameForDeadPlayers = True
- +
- +# ---------------------------------------------------------------------------
- +# Crafting
- +# ---------------------------------------------------------------------------
- +
- +# Option to enable or disable crafting.
- +# Default: True
- +CraftingEnabled = True
- +
- +# Enable/Disable crafting of Masterwork items (If set to true, masterwork items can be created when crafting).
- +# Default: True
- +CraftMasterwork = True
- +
- +# Limits for recipes
- +# Default: 50, 50
- +DwarfRecipeLimit = 50
- +CommonRecipeLimit = 50
- +
- +# Alternative crafting rules. If enabled, the following will be true:
- +# Crafting takes time.
- +# Players get EXP/SP for crafting.
- +# Default: False
- +AltGameCreation = False
- +
- +# Crafting Time multiplier.
- +# The higher the number, the more time the crafting process takes. XP/SP reward increases with time.
- +# Default: 1
- +AltGameCreationSpeed = 1
- +
- +# Additional crafting XP/SP rate multiplier.
- +# Default: 1, 1
- +AltGameCreationXpRate = 1
- +AltGameCreationSpRate = 1
- +
- +# Additional XP/SP rate multiplier when creating rare item.
- +# Default: 2
- +AltGameCreationRareXpSpRate = 2
- +
- +# If set to False, blacksmiths don't take recipes from players inventory when crafting.
- +# Default: True
- +AltBlacksmithUseRecipes = True
- +
- +# Store/Restore Dwarven Manufacture list
- +# Keep manufacture shoplist after relog
- +# Default: False
- +StoreRecipeShopList = False
- +
- +# ---------------------------------------------------------------------------
- +# Clan
- +# ---------------------------------------------------------------------------
- +
- +# Day on which all pending clan leader requests will be applied:
- +# Possible values:
- +# 1 - Sunday
- +# 2 - Monday
- +# 3 - Tuesday
- +# 4 - Wednesday
- +# 5 - Thursday
- +# 6 - Friday
- +# 7 - Saturday
- +# Default: 3
- +AltClanLeaderDateChange = 3
- +
- +# Hour on which all pending data requests will be applied:
- +# Format: Hour:Minute:Second
- +# Default: 00:00:00
- +AltClanLeaderHourChange = 00:00:00
- +
- +# When enabled all clan leader requests will be performed instantly.
- +# Default: False
- +AltClanLeaderInstantActivation = False
- +
- +# Number of days you have to wait before joining another clan.
- +# Default: 1
- +DaysBeforeJoinAClan = 1
- +
- +# Number of days you have to wait before creating a new clan.
- +# Default: 10
- +DaysBeforeCreateAClan = 10
- +
- +# Number of days it takes to dissolve a clan.
- +# Default: 7
- +DaysToPassToDissolveAClan = 7
- +
- +# Number of days before joining a new alliance when clan voluntarily leave an alliance.
- +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- +# Default: 1
- +DaysBeforeJoinAllyWhenLeaved = 1
- +
- +# Number of days before joining a new alliance when clan was dismissed from an alliance.
- +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- +# Default: 1
- +DaysBeforeJoinAllyWhenDismissed = 1
- +
- +# Number of days before accepting a new clan for alliance when clan was dismissed from an alliance.
- +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- +# Default: 1
- +DaysBeforeAcceptNewClanWhenDismissed = 1
- +
- +# Number of days before creating a new alliance after dissolving an old alliance.
- +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- +# Default: 1
- +DaysBeforeCreateNewAllyWhenDissolved = 1
- +
- +# Maximum number of clans in alliance.
- +# Default: 3
- +AltMaxNumOfClansInAlly = 3
- +
- +# Allow clan members to withdraw from the clan warehouse.
- +# Default: False
- +AltMembersCanWithdrawFromClanWH = False
- +
- +# Remove castle circlets after a clan loses their castle or a player leaves a clan.
- +# Default: True
- +RemoveCastleCirclets = True
- +
- +# Number of members needed to request a clan war.
- +# Default: 15
- +AltClanMembersForWar = 15
- +
- +
- +# ---------------------------------------------------------------------------
- +# Party
- +# ---------------------------------------------------------------------------
- +
- +# CONFUSING(nothing to do with party) -> When you made damage to a mob
- +# and are inside this range, you will be considered as player to reward.
- +# Checks for party range to mob to calculate rewards(exp, items).
- +# Default: 1600
- +AltPartyRange = 1600
- +
- +# 1. Used for Adena distribution in party
- +# 2. Used to handle random and by turn party loot
- +# Default: 1400
- +AltPartyRange2 = 1400
- +
- +# If true, when party leader leaves party, next member in party will be the leader.
- +# If false the party be will dispersed.
- +# Default: False
- +AltLeavePartyLeader = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Initial Settings:
- +# ---------------------------------------------------------------------------
- +
- +#Initial Equipment Events is to enable a special settings for the items that a new character starts with.
- +#Default: False
- +InitialEquipmentEvent = False
- +
- +# This is the amount of Adena that a new character starts their character with.
- +# Default: 0
- +StartingAdena = 0
- +
- +# This is the starting level of the new character.
- +# Default: 1
- +StartingLevel = 1
- +
- +# This is the amount of SP that a new character starts their character with.
- +# Default: 0
- +StartingSP = 0
- +
- +# ---------------------------------------------------------------------------
- +# Other Settings:
- +# ---------------------------------------------------------------------------
- +
- +# This is the maximum amount of Adena that character can have in his inventory or warehouse.
- +# The maximum input amount is 9,223,372,036,854,775,807. (nine quintillion
- +# two hundred twenty three quadrillion three hundred seventy two trillion thirty six billion
- +# eight hundred fifty four million seven hundred seventy five thousand eight hundred seven)
- +# Setting negative values (-1 or others) will result in maximum amount available.
- +# Big values do not cause critical errors, although only 16 digits are visible in the inventory
- +# (example: 3,372,036,854,775,807 is visible out of 9,223,372,036,854,775,807)
- +# Default: 99900000000 (99 bilion and 900 milion)
- +MaxAdena = 99900000000
- +
- +# This option, when set to True, will enable automatically picking up items.
- +# If set False it will force the player to pickup dropped items from mobs.
- +# This excludes herbs mentioned above and items from Raid/GrandBosses with minions.
- +# Default: False
- +AutoLoot = False
- +
- +# This option, when set to True, will enable automatically picking up items from Raid/GrandBosses with minions.
- +# If set False it will force the player to pickup dropped items from bosses.
- +# This excludes herbs mentioned above and items from mobs.
- +# Default: False
- +AutoLootRaids = False
- +
- +# Delay for raid drop items loot privilege
- +# Require Command Channel , check next option
- +# Value is in seconds
- +# Default: 900 (15min)
- +RaidLootRightsInterval = 900
- +
- +# Minimal size of Command Channel for apply raid loot privilege
- +# Default: 45
- +RaidLootRightsCCSize = 45
- +
- +# This is the time in seconds that it will take for the player command "/unstuck" to activate.
- +# Default: 300
- +UnstuckInterval = 300
- +
- +# Teleport Watchdog Timeout (seconds)
- +# Player forced to appear if remain in teleported state longer than timeout
- +# Does not set too low, recommended value 60s.
- +# This time is in seconds, leave it at 0 if you want this feature disabled.
- +# Default: 0
- +TeleportWatchdogTimeout = 0
- +
- +# After a player teleports, this is the time the player is protected.
- +# This time is in seconds, leave it at 0 if you want this feature disabled.
- +# Retail (Since GE): 600 (10 minutes)
- +# Default: 600
- +PlayerSpawnProtection = 600
- +
- +# Spawn protection should disappear with any action with the exception
- +# of the item usage from items in this list.
- +# Format: itemId,itemId,itemId,....
- +# Default: 0
- +PlayerSpawnProtectionAllowedItems =
- +
- +# Teleport spawn protection time. It will protect the player in the
- +# teleport spawn for the given time. 0 to disable feature
- +PlayerTeleportProtection = 0
- +
- +# If enabled, players respawn in town on different locations defined in zone.xml for given town.
- +# If disabled the first spawn location from zone.xml is used.
- +# Default: True
- +RandomRespawnInTownEnabled = True
- +
- +# This will allow a random offset from the base teleport location coordinates based on a maximum offset.
- +# Default: True
- +OffsetOnTeleportEnabled = True
- +
- +# Maximum offset for base teleport location when OffsetOnTeleportEnabled is enabled .
- +# Default: 50
- +MaxOffsetOnTeleport = 50
- +
- +# This option is to enable or disable the use of in game petitions.
- +# The MaxPetitionsPerPlayer is the amount of petitions a player can make.
- +# The MaximumPendingPetitions is the total amount of petitions in the server.
- +# Note:
- +# Logically, MaximumPendingPetitions must be higher then MaxPetitionsPerPlayer.
- +# Default: True, 5, 25
- +PetitioningAllowed = True
- +MaxPetitionsPerPlayer = 5
- +MaxPetitionsPending = 25
- +
- +# Free teleporting around the world.
- +# Default: False
- +AltFreeTeleporting = False
- +
- +# Allow character deletion after days set below. To disallow character deletion, set this equal to 0.
- +# Default: 7
- +DeleteCharAfterDays = 7
- +
- +# Alternative Xp/Sp rewards, if not 0, then calculated as 2^((mob.level-player.level) / coef). Coef are the 2 numbers set below.
- +# A few examples for "AltGameExponentXp = 5." and "AltGameExponentSp = 3.":
- +# diff = 0 (player and mob has the same level), XP bonus rate = 1, SP bonus rate = 1
- +# diff = 3 (mob is 3 levels above), XP bonus rate = 1.52, SP bonus rate = 2
- +# diff = 5 (mob is 5 levels above), XP bonus rate = 2, SP bonus rate = 3.17
- +# diff = -8 (mob is 8 levels below), XP bonus rate = 0.4, SP bonus rate = 0.16
- +# Default: 0, 0
- +AltGameExponentXp = 0
- +AltGameExponentSp = 0
- +
- +
- +# PARTY XP DISTRIBUTION
- +# With "auto method" member is cut from Exp/SP distribution when his share is lower than party bonus acquired for him (30% for 2 member party).
- +# In that case he will not receive any Exp/SP from party and is not counted for party bonus.
- +# If you don't want to have a cutoff point for party members' XP distribution, set the first option to "none".
- +# Available Options: highfive, auto, level, percentage, none
- +# Default: highfive
- +PartyXpCutoffMethod = highfive
- +
- +# This option takes effect when "percentage" method is chosen. Don't use high values for this!
- +# Default: 3.0
- +PartyXpCutoffPercent = 3.0
- +
- +# This option takes effect when "level" method is chosen. Don't use low values for this!
- +# Default: 20
- +PartyXpCutoffLevel = 20
- +
- +# This option takes effect when "highfive" method is chosen.
- +# Each pair of numbers represent a level range.
- +# If the gap is between the first pair, there is no penalty.
- +# If the gap is between the second pair, the lowest party member will gain only 30% of the XP that others receive.
- +# If the gap is between the last pair, the lowest party member will not receive any XP.
- +# Default: 0,9;10,14;15,99
- +PartyXpCutoffGaps = 0,9;10,14;15,99
- +
- +# This option takes effect when "highfive" method is chosen.
- +# Each number represent the XP percent gain at that level gap.
- +# For the first gap, the lowest party member will gain 100% XP as there is no penalty.
- +# For the second gap, the lowest party member will gain only 30% of the XP that others receive.
- +# For the last gap, the lowest party member will not receive any XP.
- +# Default: 100;30;0
- +PartyXpCutoffGapPercent = 100;30;0
- +
- +# Disable tutorial on new player enter into Game
- +# Please remember its sometimes important to novice players
- +# Default: False
- +DisableTutorial = False
- +
- +# Expertise penalty
- +# If disabled, player will not receive penalty for equip higher grade items
- +# Default: True
- +ExpertisePenalty = True
- +
- +# Player can in client define his own key mapping and for save it must be stored server side.
- +# Disabled until confirmed as working.
- +# Default: False
- +StoreCharUiSettings = False
- +
- +# Character name restriction
- +# Disallow characters to have a name which contains the words.
- +# Split them with ",". Use lowercase. Example: announcements,announce...
- +# Default: annou,ammou,amnou,anmou,anou,amou,announcements,announce
- +ForbiddenNames = annou,ammou,amnou,anmou,anou,amou,announcements,announce
- +
- +# If enabled, when character in silence (block PMs) mode sends a PM to a character, silence mode no longer blocks this character,
- +# allowing both characters send each other PMs even with enabled silence mode.
- +# The exclude list is cleared each time the character goes into silence mode.
- +SilenceModeExclude = False
- +
- +# Enables alternative validation of triggering skills.
- +# When enabled pvp skills will not be casted on non flagged player.
- +# Sadly its non-retail
- +# Default: False
- +AltValidateTriggerSkills = False
- diff --git a/dist/game/config/default/ConquerableHallSiege.properties b/dist/game/config/default/ConquerableHallSiege.properties
- new file mode 100644
- index 0000000..583d5d5
- --- /dev/null
- +++ b/dist/game/config/default/ConquerableHallSiege.properties
- @@ -0,0 +1,24 @@
- +# --------------------------------------------------
- +# Contestable halls general configuration
- +# --------------------------------------------------
- +
- +# Min level that each clan needs to register
- +# for the siege
- +MinClanLevel = 4
- +
- +# Max number of clans allowed to register for
- +# the battle
- +MaxAttackers = 500
- +
- +# Max numbers of flags that each clan is allowed
- +# to put
- +MaxFlagsPerClan = 1
- +
- +# Enable the fame reward
- +EnableFame = false
- +
- +# Fame amount
- +FameAmount = 0
- +
- +# Fame Frequency
- +FameFrequency = 0
- diff --git a/dist/game/config/default/Feature.properties b/dist/game/config/default/Feature.properties
- new file mode 100644
- index 0000000..d8a6bf0
- --- /dev/null
- +++ b/dist/game/config/default/Feature.properties
- @@ -0,0 +1,396 @@
- +# ---------------------------------------------------------------------------
- +# Alternative Feature Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +# ---------------------------------------------------------------------------
- +# Castle
- +# ---------------------------------------------------------------------------
- +
- +# Siege Time rules
- +# Which hours can change Castle Lords
- +# Default: 16,20
- +SiegeHourList = 16,20
- +
- +# Teleport Function price
- +# Price = 7 days
- +CastleTeleportFunctionFeeRatio = 604800000
- +CastleTeleportFunctionFeeLvl1 = 1000
- +CastleTeleportFunctionFeeLvl2 = 10000
- +
- +# Support magic buff price
- +# Price = 7 day
- +CastleSupportFunctionFeeRatio = 604800000
- +CastleSupportFeeLvl1 = 49000
- +CastleSupportFeeLvl2 = 120000
- +
- +# MP Regeneration price
- +# Price = 7 day
- +CastleMpRegenerationFunctionFeeRatio = 604800000
- +CastleMpRegenerationFeeLvl1 = 45000
- +CastleMpRegenerationFeeLvl2 = 65000
- +
- +# Hp Regeneration price
- +# Price = 7 day
- +CastleHpRegenerationFunctionFeeRatio = 604800000
- +CastleHpRegenerationFeeLvl1 = 12000
- +CastleHpRegenerationFeeLvl2 = 20000
- +
- +# Exp Regeneration price
- +# Price = 7 day
- +CastleExpRegenerationFunctionFeeRatio = 604800000
- +CastleExpRegenerationFeeLvl1 = 63000
- +CastleExpRegenerationFeeLvl2 = 70000
- +
- +# Outer Door upgrade price
- +OuterDoorUpgradePriceLvl2 = 3000000
- +OuterDoorUpgradePriceLvl3 = 4000000
- +OuterDoorUpgradePriceLvl5 = 5000000
- +
- +# Inner Door upgrade price
- +InnerDoorUpgradePriceLvl2 = 750000
- +InnerDoorUpgradePriceLvl3 = 900000
- +InnerDoorUpgradePriceLvl5 = 1000000
- +
- +# Wall upgrade price
- +WallUpgradePriceLvl2 = 1600000
- +WallUpgradePriceLvl3 = 1800000
- +WallUpgradePriceLvl5 = 2000000
- +
- +# Trap upgrade price
- +TrapUpgradePriceLvl1 = 3000000
- +TrapUpgradePriceLvl2 = 4000000
- +TrapUpgradePriceLvl3 = 5000000
- +TrapUpgradePriceLvl4 = 6000000
- +
- +# ---------------------------------------------------------------------------
- +# Clan Hall
- +# ---------------------------------------------------------------------------
- +
- +# Teleport Function price
- +# Price = 7 days
- +ClanHallTeleportFunctionFeeRatio = 604800000
- +ClanHallTeleportFunctionFeeLvl1 = 7000
- +ClanHallTeleportFunctionFeeLvl2 = 14000
- +
- +# Support magic buff price
- +# Price = 1 day
- +ClanHallSupportFunctionFeeRatio = 86400000
- +ClanHallSupportFeeLvl1 = 2500
- +ClanHallSupportFeeLvl2 = 5000
- +ClanHallSupportFeeLvl3 = 7000
- +ClanHallSupportFeeLvl4 = 11000
- +ClanHallSupportFeeLvl5 = 21000
- +ClanHallSupportFeeLvl6 = 36000
- +ClanHallSupportFeeLvl7 = 37000
- +ClanHallSupportFeeLvl8 = 364000
- +
- +# MP Regeneration price
- +# Price = 1 day
- +ClanHallMpRegenerationFunctionFeeRatio = 86400000
- +ClanHallMpRegenerationFeeLvl1 = 2000
- +ClanHallMpRegenerationFeeLvl2 = 3750
- +ClanHallMpRegenerationFeeLvl3 = 6500
- +ClanHallMpRegenerationFeeLvl4 = 13750
- +ClanHallMpRegenerationFeeLvl5 = 20000
- +
- +# Hp Regeneration price
- +# Price = 1 day
- +ClanHallHpRegenerationFunctionFeeRatio = 86400000
- +ClanHallHpRegenerationFeeLvl1 = 700
- +ClanHallHpRegenerationFeeLvl2 = 800
- +ClanHallHpRegenerationFeeLvl3 = 1000
- +ClanHallHpRegenerationFeeLvl4 = 1166
- +ClanHallHpRegenerationFeeLvl5 = 1500
- +ClanHallHpRegenerationFeeLvl6 = 1750
- +ClanHallHpRegenerationFeeLvl7 = 2000
- +ClanHallHpRegenerationFeeLvl8 = 2250
- +ClanHallHpRegenerationFeeLvl9 = 2500
- +ClanHallHpRegenerationFeeLvl10 = 3250
- +ClanHallHpRegenerationFeeLvl11 = 3750
- +ClanHallHpRegenerationFeeLvl12 = 4250
- +ClanHallHpRegenerationFeeLvl13 = 5166
- +
- +# Exp Regeneration price
- +# Price = 1 day
- +ClanHallExpRegenerationFunctionFeeRatio = 86400000
- +ClanHallExpRegenerationFeeLvl1 = 3000
- +ClanHallExpRegenerationFeeLvl2 = 6000
- +ClanHallExpRegenerationFeeLvl3 = 9000
- +ClanHallExpRegenerationFeeLvl4 = 15000
- +ClanHallExpRegenerationFeeLvl5 = 21000
- +ClanHallExpRegenerationFeeLvl6 = 23330
- +ClanHallExpRegenerationFeeLvl7 = 30000
- +
- +# Creation item function
- +# Price = 1 day
- +ClanHallItemCreationFunctionFeeRatio = 86400000
- +ClanHallItemCreationFunctionFeeLvl1 = 30000
- +ClanHallItemCreationFunctionFeeLvl2 = 70000
- +ClanHallItemCreationFunctionFeeLvl3 = 140000
- +
- +# Curtains Decoration
- +# Price = 7 days
- +ClanHallCurtainFunctionFeeRatio = 604800000
- +ClanHallCurtainFunctionFeeLvl1 = 2000
- +ClanHallCurtainFunctionFeeLvl2 = 2500
- +
- +# Fixtures Decoration
- +# Price = 3 days
- +ClanHallFrontPlatformFunctionFeeRatio = 259200000
- +ClanHallFrontPlatformFunctionFeeLvl1 = 1300
- +ClanHallFrontPlatformFunctionFeeLvl2 = 4000
- +
- +# If true Clan Hall buff cost 0 mp.
- +# Default: False
- +AltClanHallMpBuffFree = False
- +
- +# ---------------------------------------------------------------------------
- +# Fortress
- +# ---------------------------------------------------------------------------
- +
- +# Teleport Function price
- +# Price = 7 days
- +FortressTeleportFunctionFeeRatio = 604800000
- +FortressTeleportFunctionFeeLvl1 = 1000
- +FortressTeleportFunctionFeeLvl2 = 10000
- +
- +# Support magic buff price
- +# Price = 1 day
- +FortressSupportFunctionFeeRatio = 86400000
- +FortressSupportFeeLvl1 = 7000
- +FortressSupportFeeLvl2 = 17000
- +
- +# MP Regeneration price
- +# Price = 1 day
- +FortressMpRegenerationFunctionFeeRatio = 86400000
- +FortressMpRegenerationFeeLvl1 = 6500
- +FortressMpRegenerationFeeLvl2 = 9300
- +
- +# Hp Regeneration price
- +# Price = 1 day
- +FortressHpRegenerationFunctionFeeRatio = 86400000
- +FortressHpRegenerationFeeLvl1 = 2000
- +FortressHpRegenerationFeeLvl2 = 3500
- +
- +# Exp Regeneration price
- +# Price = 1 day
- +FortressExpRegenerationFunctionFeeRatio = 86400000
- +FortressExpRegenerationFeeLvl1 = 9000
- +FortressExpRegenerationFeeLvl2 = 10000
- +
- +# This is the time frequently when Fort owner gets Blood Oath, supply level raised and Fort fee is payed
- +# Default 360 mins
- +FortressPeriodicUpdateFrequency = 360
- +
- +# The number of Blood Oath which given to the Fort owner clan when Fort Updater runs
- +# Default: 1
- +FortressBloodOathCount = 1
- +
- +# The maximum Fort supply level
- +# Max lvl what you can define here is 21!
- +# Default: 6
- +FortressMaxSupplyLevel = 6
- +
- +# Fort fee which payed to the Castle
- +# Default: 25000
- +FortressFeeForCastle = 25000
- +
- +# The maximum time while a clan can own a fortress
- +# Deafault: 168 hours
- +FortressMaximumOwnTime = 168
- +
- +
- +# ---------------------------------------------------------------------------
- +# Seven Signs
- +# ---------------------------------------------------------------------------
- +
- +# Determines whether castle ownership is determined by clan or by alliance.
- +# Default is by alliance, as on official servers.
- +AltRequireClanCastle = False
- +
- +# Dawn:
- +# True - Players not owning castle need pay participation fee
- +# False - Anyone can join Dawn
- +AltCastleForDawn = True
- +
- +# Dusk:
- +# True - Players owning castle can not join Dusk side
- +# False - Anyone can join Dusk
- +AltCastleForDusk = True
- +
- +# Minimum Players for participate in SevenSigns Festival.
- +# Default: 5
- +AltFestivalMinPlayer = 5
- +
- +# Maximum seal stone contribution per player during festival.
- +# Default: 1000000
- +AltMaxPlayerContrib = 1000000
- +
- +# Festival Manager Start time (set in milliseconds; 1000 = 1 second).
- +# Default: 2 minutes
- +AltFestivalManagerStart = 120000
- +
- +# Festival Length (set in milliseconds; 1000 = 1 second).
- +# Default: 18 minutes
- +AltFestivalLength = 1080000
- +
- +# Festival Cycle Length.
- +# Default: 38 Minutes (20 minutes wait time + Festival Length) (set in milliseconds; 1000 = 1 second).
- +AltFestivalCycleLength = 2280000
- +
- +# At what point the first festival spawn occurs.
- +# Default: 2 minutes (set in milliseconds; 1000 = 1 second).
- +AltFestivalFirstSpawn = 120000
- +
- +# At what Point the first festival swarm occurs.
- +# Default: 5 minutes (set in milliseconds; 1000 = 1 second).
- +AltFestivalFirstSwarm = 300000
- +
- +# At what Point the second festival spawn occurs.
- +# Default: 9 minutes (set in milliseconds; 1000 = 1 second).
- +AltFestivalSecondSpawn = 540000
- +
- +# At what Point the second festival spawn occurs.
- +# Default: 12 minutes (set in milliseconds; 1000 = 1 second).
- +AltFestivalSecondSwarm = 720000
- +
- +# At what point the chests spawn in.
- +# Default: 15 minutes (set in milliseconds; 1000 = 1 second).
- +AltFestivalChestSpawn = 900000
- +
- +# This multipliers are used to change P.Def/M.Def of castle gates/walls while Seal of Strife is controlled by one of the sides.
- +# Default: 1.1,0.8,1.1,0.8
- +AltDawnGatesPdefMult = 1.1
- +AltDuskGatesPdefMult = 0.8
- +AltDawnGatesMdefMult = 1.1
- +AltDuskGatesMdefMult = 0.8
- +
- +# If this = true only cabal period owners can use merchant and blacksmith of mammon.
- +# If false any player can use.
- +# Default: True
- +StrictSevenSigns = True
- +
- +# Save SevenSigns status only each 30 minutes and after period change.
- +# Player info saved only during periodic data store (set by CharacterDataStoreInterval) and logout.
- +# If False then save info and status immediately after changes.
- +# Default: True
- +AltSevenSignsLazyUpdate = True
- +
- +# Total count of available tickets.
- +# Default: 300
- +SevenSignsDawnTicketQuantity = 300
- +
- +# Price of each ticket.
- +# Default: 1000
- +SevenSignsDawnTicketPrice = 1000
- +
- +# Tickets bundle (exchanged in amounts of).
- +# Default: 10
- +SevenSignsDawnTicketBundle = 10
- +
- +# Ticket item Id.
- +# Default: 6388
- +SevenSignsManorsAgreementId = 6388
- +
- +# Fee for joining Dawn
- +SevenSignsJoinDawnFee = 50000
- +
- +
- +# ---------------------------------------------------------------------------
- +# Clan Reputation Points
- +# ---------------------------------------------------------------------------
- +# Reputation score gained by taking Fortress.
- +TakeFortPoints = 200
- +
- +# Reputation score gained by taking Castle.
- +TakeCastlePoints = 1500
- +
- +# Reputation score gained by defended Castle.
- +CastleDefendedPoints = 750
- +
- +# Reputation score gained per clan members of festival winning party.
- +FestivalOfDarknessWin = 200
- +
- +# Reputation score gained for per hero clan members.
- +HeroPoints = 1000
- +
- +# Minimum Reputation score gained after completing 2nd class transfer under Academy.
- +CompleteAcademyMinPoints = 190
- +
- +# Maximum Reputation score gained after completing 2nd class transfer under Academy.
- +CompleteAcademyMaxPoints = 650
- +
- +# Reputation score gained per killed ballista.
- +KillBallistaPoints = 30
- +
- +# Reputation score gained for one Blood Alliance.
- +BloodAlliancePoints = 500
- +
- +# Reputation score gained for 10 Blood Oaths.
- +BloodOathPoints = 200
- +
- +# Reputation score gained for 100 Knight's Epaulettes.
- +KnightsEpaulettePoints = 20
- +
- +# Reputation score gained per clan member listed as top raid killers.
- +1stRaidRankingPoints = 1250
- +2ndRaidRankingPoints = 900
- +3rdRaidRankingPoints = 700
- +4thRaidRankingPoints = 600
- +5thRaidRankingPoints = 450
- +6thRaidRankingPoints = 350
- +7thRaidRankingPoints = 300
- +8thRaidRankingPoints = 200
- +9thRaidRankingPoints = 150
- +10thRaidRankingPoints = 100
- +UpTo50thRaidRankingPoints = 25
- +UpTo100thRaidRankingPoints = 12
- +
- +# Reputation score gained/reduced per kill during a clan war or siege war.
- +ReputationScorePerKill = 1
- +
- +# Reputation score reduced by loosing Fortress in battle.
- +LooseFortPoints = 0
- +
- +# Reputation score reduced by loosing Castle in battle.
- +LooseCastlePoints = 3000
- +
- +# Reputation score reduced by creating Royal Guard.
- +CreateRoyalGuardCost = 5000
- +
- +# Reputation score reduced by creating Knight Unit.
- +CreateKnightUnitCost = 10000
- +
- +# Reputation score reduced by reinforcing Knight Unit (if clan level is 9 or more).
- +ReinforceKnightUnitCost = 5000
- +
- +# Reputation score reduced by increasing clan level.
- +ClanLevel6Cost = 5000
- +ClanLevel7Cost = 10000
- +ClanLevel8Cost = 20000
- +ClanLevel9Cost = 40000
- +ClanLevel10Cost = 40000
- +ClanLevel11Cost = 75000
- +
- +# Number of clan members needed to increase clan level.
- +ClanLevel6Requirement = 30
- +ClanLevel7Requirement = 50
- +ClanLevel8Requirement = 80
- +ClanLevel9Requirement = 120
- +ClanLevel10Requirement = 140
- +ClanLevel11Requirement = 170
- +
- +# ---------------------------------------------------------------------------
- +# Other
- +# ---------------------------------------------------------------------------
- +
- +# Allow riding wyvern ignoring 7 Signs status
- +# This will allow Castle Lords to ride wyvern even when Dusk has won Seal of Strife
- +# Default: False
- +AllowRideWyvernAlways = False
- +
- +# Allow riding wyvern during Castle/Fort Siege
- +# Default: True
- +AllowRideWyvernDuringSiege = True
- \ No newline at end of file
- diff --git a/dist/game/config/default/FloodProtector.properties b/dist/game/config/default/FloodProtector.properties
- new file mode 100644
- index 0000000..44aa685
- --- /dev/null
- +++ b/dist/game/config/default/FloodProtector.properties
- @@ -0,0 +1,124 @@
- +# ---------------------------------------------------------------------------
- +# Floodprotector Options
- +# ---------------------------------------------------------------------------
- +# The following settings can be applied to each feature:
- +# Interval - interval in gameserver ticks (1 tick = 100ms) in which only one request is allowed
- +# LogFlooding - whether flooding should be logged (only first occurrence of flooding and total count of flood requests is logged)
- +# PunishmentLimit - if number of requests within single interval exceeds specified number then the specified punishment is applied (0 = disables punishment feature)
- +# PunishmentType - type of the punishment ('none', 'kick', 'ban', 'jail'), valid only if PunishmentLimit is greater than 0
- +# PunishmentTime - for how many minutes should the player(jail)/account(ban) be punished (0 = forever), valid only for PunishmentType 'jail' or 'ban'
- +
- +# UseItem - item usage flooding
- +# Item usage interval
- +# Disabled to match retail, if you want to enable this protection change the value to 4 for example.
- +# Default: 0
- +FloodProtectorUseItemInterval = 0
- +FloodProtectorUseItemLogFlooding = False
- +FloodProtectorUseItemPunishmentLimit = 0
- +FloodProtectorUseItemPunishmentType = none
- +FloodProtectorUseItemPunishmentTime = 0
- +
- +# RollDice - rolling dice flooding
- +FloodProtectorRollDiceInterval = 42
- +FloodProtectorRollDiceLogFlooding = False
- +FloodProtectorRollDicePunishmentLimit = 0
- +FloodProtectorRollDicePunishmentType = none
- +FloodProtectorRollDicePunishmentTime = 0
- +
- +# Firework - firework flooding
- +FloodProtectorFireworkInterval = 42
- +FloodProtectorFireworkLogFlooding = False
- +FloodProtectorFireworkPunishmentLimit = 0
- +FloodProtectorFireworkPunishmentType = none
- +FloodProtectorFireworkPunishmentTime = 0
- +
- +# ItemPetSummon - item summoning and pet mounting flooding
- +FloodProtectorItemPetSummonInterval = 16
- +FloodProtectorItemPetSummonLogFlooding = False
- +FloodProtectorItemPetSummonPunishmentLimit = 0
- +FloodProtectorItemPetSummonPunishmentType = none
- +FloodProtectorItemPetSummonPunishmentTime = 0
- +
- +# HeroVoice - hero voice flooding
- +FloodProtectorHeroVoiceInterval = 100
- +FloodProtectorHeroVoiceLogFlooding = False
- +FloodProtectorHeroVoicePunishmentLimit = 0
- +FloodProtectorHeroVoicePunishmentType = none
- +FloodProtectorHeroVoicePunishmentTime = 0
- +
- +# GlobalChat - global chat flooding
- +FloodProtectorGlobalChatInterval = 5
- +FloodProtectorGlobalChatLogFlooding = False
- +FloodProtectorGlobalChatPunishmentLimit = 0
- +FloodProtectorGlobalChatPunishmentType = none
- +FloodProtectorGlobalChatPunishmentTime = 0
- +
- +# Subclass - subclass flooding
- +FloodProtectorSubclassInterval = 20
- +FloodProtectorSubclassLogFlooding = False
- +FloodProtectorSubclassPunishmentLimit = 0
- +FloodProtectorSubclassPunishmentType = none
- +FloodProtectorSubclassPunishmentTime = 0
- +
- +# DropItem - drop item flooding
- +FloodProtectorDropItemInterval = 10
- +FloodProtectorDropItemLogFlooding = False
- +FloodProtectorDropItemPunishmentLimit = 0
- +FloodProtectorDropItemPunishmentType = none
- +FloodProtectorDropItemPunishmentTime = 0
- +
- +# ServerBypass - server bypass flooding
- +FloodProtectorServerBypassInterval = 5
- +FloodProtectorServerBypassLogFlooding = False
- +FloodProtectorServerBypassPunishmentLimit = 0
- +FloodProtectorServerBypassPunishmentType = none
- +FloodProtectorServerBypassPunishmentTime = 0
- +
- +# ServerBypass - multisell list request flooding
- +FloodProtectorMultiSellInterval = 1
- +FloodProtectorMultiSellLogFlooding = False
- +FloodProtectorMultiSellPunishmentLimit = 0
- +FloodProtectorMultiSellPunishmentType = none
- +FloodProtectorMultiSellPunishmentTime = 0
- +
- +# All kind of other transactions - to/from pet, private store, warehouse, destroy
- +FloodProtectorTransactionInterval = 10
- +FloodProtectorTransactionLogFlooding = False
- +FloodProtectorTransactionPunishmentLimit = 0
- +FloodProtectorTransactionPunishmentType = none
- +FloodProtectorTransactionPunishmentTime = 0
- +
- +# Manufacture
- +FloodProtectorManufactureInterval = 3
- +FloodProtectorManufactureLogFlooding = False
- +FloodProtectorManufacturePunishmentLimit = 0
- +FloodProtectorManufacturePunishmentType = none
- +FloodProtectorManufacturePunishmentTime = 0
- +
- +# Manor
- +FloodProtectorManorInterval = 30
- +FloodProtectorManorLogFlooding = False
- +FloodProtectorManorPunishmentLimit = 0
- +FloodProtectorManorPunishmentType = none
- +FloodProtectorManorPunishmentTime = 0
- +
- +# SendMail - sending mail interval, 10s on retail
- +FloodProtectorSendMailInterval = 100
- +FloodProtectorSendMailLogFlooding = False
- +FloodProtectorSendMailPunishmentLimit = 0
- +FloodProtectorSendMailPunishmentType = none
- +FloodProtectorSendMailPunishmentTime = 0
- +
- +# CharacterSelect - attempts to load character
- +FloodProtectorCharacterSelectInterval = 30
- +FloodProtectorCharacterSelectLogFlooding = False
- +FloodProtectorCharacterSelectPunishmentLimit = 0
- +FloodProtectorCharacterSelectPunishmentType = none
- +FloodProtectorCharacterSelectPunishmentTime = 0
- +
- +# Item Auction - Request for refresh
- +FloodProtectorItemAuctionInterval = 9
- +FloodProtectorItemAuctionLogFlooding = False
- +FloodProtectorItemAuctionPunishmentLimit = 0
- +FloodProtectorItemAuctionPunishmentType = none
- +FloodProtectorItemAuctionPunishmentTime = 0
- diff --git a/dist/game/config/default/FortSiege.properties b/dist/game/config/default/FortSiege.properties
- new file mode 100644
- index 0000000..a1ba061
- --- /dev/null
- +++ b/dist/game/config/default/FortSiege.properties
- @@ -0,0 +1,277 @@
- +# ---------------------------------------------------------------------------
- +# Fort Siege Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# Standard Settings
- +# ---------------------------------------------------------------------------
- +
- +# Length of siege before the count down (in minutes).
- +SiegeLength = 60
- +
- +# This defines how long you need to wait until the suspicious merchant will spawn after siege ends (in minutes).
- +# Keep in mind when merchant spawns, the fort can be immediately sieged.
- +# Default: 180
- +SuspiciousMerchantRespawnDelay = 180
- +
- +# This defines how long you have to kill all commanders once you kill the first one (in minutes).
- +# After that time (if all commanders not killed) all commanders and doors get respawned.
- +CountDownLength = 10
- +
- +# Max number of flags per clan.
- +MaxFlags = 1
- +
- +# Minimum clan level needed to sign up.
- +SiegeClanMinLevel = 4
- +
- +#Max number of clans that can register on each side.
- +AttackerMaxClans = 500
- +
- +# This option, if enabled, will enable register Fortress Siege to Castle owners just in territory.
- +# Default: True
- +JustToTerritory = True
- +
- +# ---------------------------------------------------------------------------
- +# Fortress Commander Spawns
- +# ---------------------------------------------------------------------------
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +# Name - fortress name
- +# N - number - 1: Archer Comander
- +# - 2: Guard Commander
- +# - 3: Support Unit Commander
- +# - 4: Main Machine - not supported yet, used General
- +# - 5: General - not used yet, will be used once control room is supported
- +# Please keep the correct order of commanders, otherwise client will show wrong occupied barracks.
- +# Control room (main machine) currently emulated in client.
- +# x,y,z - coords
- +# heading
- +# npc_id - id of template
- +
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +# Name - fortress name
- +# N - number
- +# x,y,z - coords
- +# flag_id - id of combat flag
- +
- +# Shanty Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +ShantyCommander1 = -52435,155188,-1768,20000,35683
- +ShantyCommander2 = -52128,157752,-2024,29864,35677
- +ShantyCommander3 = -53944,155433,-2024,7304,35680
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +ShantyFlag1 = -53086,156493,-1896,9819
- +ShantyFlag2 = -53054,156605,-1896,9819
- +ShantyFlag3 = -53032,156689,-1896,9819
- +
- +# Southern Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +SouthernCommander1 = -21328,218864,-2952,0,35719
- +SouthernCommander2 = -22992,218160,-3208,0,35713
- +SouthernCommander3 = -21520,221504,-3208,45328,35716
- +SouthernCommander4 = -22728,221746,-3200,33168,35721
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +SouthernFlag1 = -22386,219917,-3079,9819
- +SouthernFlag2 = -22386,219798,-3079,9819
- +SouthernFlag3 = -22386,219679,-3079,9819
- +
- +# Hive Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +HiveCommander1 = 15152,188128,-2640,0,35752
- +HiveCommander2 = 17984,187536,-2896,45056,35746
- +HiveCommander3 = 16016,189520,-2888,0,35749
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +HiveFlag1 = 16685,188358,-2770,9819
- +HiveFlag2 = 16761,188306,-2770,9819
- +HiveFlag3 = 16847,188257,-2770,9819
- +
- +# Valley Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +ValleyCommander1 = 124768,121856,-2296,0,35788
- +ValleyCommander2 = 124299,123614,-2552,49192,35782
- +ValleyCommander3 = 124768,124640,-2552,54480,35785
- +ValleyCommander4 = 128048,123344,-2536,35028,35790
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +ValleyFlag1 = 125970,123653,-2429,9819
- +ValleyFlag2 = 126092,123650,-2429,9819
- +ValleyFlag3 = 126205,123648,-2429,9819
- +
- +# Ivory Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +IvoryCommander1 = 72400,2896,-2760,0,35821
- +IvoryCommander2 = 73788,5479,-3016,55136,35815
- +IvoryCommander3 = 71264,4144,-3008,0,35818
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +IvoryFlag1 = 72565,4436,-2888,9819
- +IvoryFlag2 = 72660,4512,-2888,9819
- +IvoryFlag3 = 72759,4594,-2888,9819
- +
- +# Narsell Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +NarsellCommander1 = 154704,53856,-2968,0,35852
- +NarsellCommander2 = 155576,56592,-3224,59224,35846
- +NarsellCommander3 = 153328,54848,-3216,5512,35849
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +NarsellFlag1 = 154567,55397,-3097,9819
- +NarsellFlag2 = 154650,55493,-3097,9819
- +NarsellFlag3 = 154715,55587,-3097,9819
- +
- +# Bayou Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +BayouCommander1 = 188624,38240,-3128,0,35888
- +BayouCommander2 = 188160,39920,-3376,49284,35882
- +BayouCommander3 = 188626,41066,-3376,57140,35885
- +BayouCommander4 = 191846,39764,-3368,33020,35890
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +BayouFlag1 = 189838,40063,-3253,9819
- +BayouFlag2 = 189931,40060,-3253,9819
- +BayouFlag3 = 190052,40062,-3253,9819
- +
- +# White Sands Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +WhiteSandsCommander1 = 117216,205648,-3048,0,35921
- +WhiteSandsCommander2 = 118880,203568,-3304,5396,35915
- +WhiteSandsCommander3 = 118560,206560,-3304,48872,35918
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +WhiteSandsFlag1 = 118640,205151,-3176,9819
- +WhiteSandsFlag2 = 118690,205062,-3176,9819
- +WhiteSandsFlag3 = 118742,204968,-3176,9819
- +
- +# Borderland Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +BorderlandCommander1 = 159664,-72224,-2584,0,35957
- +BorderlandCommander2 = 157968,-71659,-2832,59020,35951
- +BorderlandCommander3 = 157312,-70640,-2832,0,35954
- +BorderlandCommander4 = 160194,-68688,-2824,43272,35959
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +BorderlandFlag1 = 158817,-70229,-2708,9819
- +BorderlandFlag2 = 158883,-70145,-2708,9819
- +BorderlandFlag3 = 158946,-70045,-2708,9819
- +
- +# Swamp Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +SwampCommander1 = 71264,-60512,-2504,0,35995
- +SwampCommander2 = 71248,-62352,-2752,12388,35989
- +SwampCommander3 = 68688,-59648,-2752,56012,35992
- +SwampCommander4 = 68005,-60866,-2744,5424,35997
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +SwampFlag1 = 69829,-61087,-2629,9819
- +SwampFlag2 = 69979,-61144,-2632,9819
- +SwampFlag3 = 70069,-61182,-2629,9819
- +
- +# Archaic Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +ArchaicCommander1 = 109856,-142640,-2672,0,36028
- +ArchaicCommander2 = 109600,-139735,-2928,62612,36022
- +ArchaicCommander3 = 108223,-142209,-2920,8524,36025
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +ArchaicFlag1 = 109142,-141243,-2801,9819
- +ArchaicFlag2 = 109184,-141129,-2801,9819
- +ArchaicFlag3 = 109214,-141016,-2801,9819
- +
- +# Floran Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +FloranCommander1 = 6528,151872,-2608,0,36064
- +FloranCommander2 = 7006,148242,-2856,32768,36058
- +FloranCommander3 = 4384,150992,-2856,0,36061
- +FloranCommander4 = 5246,152319,-2848,49151,36066
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +FloranFlag1 = 5293,149624,-2732,9819
- +FloranFlag2 = 5306,149743,-2732,9819
- +FloranFlag3 = 5299,149870,-2732,9819
- +
- +# Cloud Mountain Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +CloudMountainCommander1 = -55248,90496,-2536,0,36102
- +CloudMountainCommander2 = -55791,91856,-2792,0,36096
- +CloudMountainCommander3 = -54168,92604,-2784,49196,36099
- +CloudMountainCommander4 = -50913,92259,-2776,41188,36104
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +CloudMountainFlag1 = -53354,91537,-2664,9819
- +CloudMountainFlag2 = -53237,91537,-2664,9819
- +CloudMountainFlag3 = -53112,91537,-2664,9819
- +
- +# Tanor Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +TanorCommander1 = 58480,139648,-1464,0,36135
- +TanorCommander2 = 61864,139257,-1728,46896,36129
- +TanorCommander3 = 59436,140834,-1720,47296,36132
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +TanorFlag1 = 60225,139771,-1597,9819
- +TanorFlag2 = 60362,139742,-1597,9819
- +TanorFlag3 = 60467,139727,-1597,9819
- +
- +# DragonSpine Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +DragonspineCommander1 = 13184,94928,-3144,0,36166
- +DragonspineCommander2 = 9472,94992,-3392,0,36160
- +DragonspineCommander3 = 12829,96214,-3392,49152,36163
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +DragonspineFlag1 = 11459,95308,-3264,9819
- +DragonspineFlag2 = 11527,95301,-3264,9819
- +DragonspineFlag3 = 11623,95311,-3264,9819
- +
- +# Antharas Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +AntharasCommander1 = 79440,88752,-2600,0,36202
- +AntharasCommander2 = 77262,91704,-2856,5112,36196
- +AntharasCommander3 = 80929,90510,-2856,40192,36199
- +AntharasCommander4 = 80755,89002,-2848,21984,36204
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +AntharasFlag1 = 79470,91299,-2728,9819
- +AntharasFlag2 = 79528,91187,-2728,9819
- +AntharasFlag3 = 79580,91095,-2728,9819
- +
- +# Western Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +WesternCommander1 = 113481,-16058,-712,0,36240
- +WesternCommander2 = 109872,-16624,-968,16384,36234
- +WesternCommander3 = 112601,-13933,-960,49152,36237
- +WesternCommander4 = 113929,-14801,-960,32768,36242
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +WesternFlag1 = 111280,-14820,-839,9819
- +WesternFlag2 = 111380,-14820,-839,9819
- +WesternFlag3 = 111480,-14820,-839,9819
- +
- +# Hunters Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +HuntersCommander1 = 123232,94400,-1856,0,36278
- +HuntersCommander2 = 122688,95760,-2112,0,36272
- +HuntersCommander3 = 124305,96528,-2104,49151,36275
- +HuntersCommander4 = 127632,96240,-2096,40892,36280
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +HuntersFlag1 = 125155,95455,-1984,9819
- +HuntersFlag2 = 125255,95455,-1984,9819
- +HuntersFlag3 = 125355,95455,-1984,9819
- +
- +# Aaru Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +AaruCommander1 = 74288,186912,-2296,0,36311
- +AaruCommander2 = 71392,184720,-2552,5528,36305
- +AaruCommander3 = 71542,186410,-2552,55088,36308
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +AaruFlag1 = 73029,186303,-2424,9819
- +AaruFlag2 = 73923,186247,-2424,9819
- +AaruFlag3 = 72833,186178,-2424,9819
- +
- +# Demon Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +DemonCommander1 = 100752,-53664,-360,0,36347
- +DemonCommander2 = 100688,-57440,-616,16384,36341
- +DemonCommander3 = 99484,-54027,-616,0,36344
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +DemonFlag1 = 100400,-55401,-488,9819
- +DemonFlag2 = 100400,-55301,-488,9819
- +DemonFlag3 = 100400,-55201,-488,9819
- +
- +# Monastic Fortress
- +# Commander syntax: NameCommanderN = x,y,z,heading,npc_id
- +MonasticCommander1 = 73680,-95456,-1144,0,36385
- +MonasticCommander2 = 70189,-93935,-1400,61576,36379
- +MonasticCommander3 = 73831,-94119,-1400,45536,36382
- +# Flag syntax: NameFlagN = x,y,z,flag_id
- +MonasticFlag1 = 72174,-94437,-1271,9819
- +MonasticFlag2 = 72294,-94481,-1271,9819
- +MonasticFlag3 = 72401,-94526,-1271,9819
- \ No newline at end of file
- diff --git a/dist/game/config/default/General.properties b/dist/game/config/default/General.properties
- new file mode 100644
- index 0000000..4b2e309
- --- /dev/null
- +++ b/dist/game/config/default/General.properties
- @@ -0,0 +1,898 @@
- +# ---------------------------------------------------------------------------
- +# General Server Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# Administrator
- +# ---------------------------------------------------------------------------
- +
- +# If this option is set to True every newly created character will have access level 127. This means that every character created will have Administrator Privileges.
- +# Default: False
- +EverybodyHasAdminRights = False
- +
- +# Setting for serverList
- +# Displays [] in front of server name on character selection
- +# Default: False
- +ServerListBrackets = False
- +
- +# Displays server type next to the server name on character selection.
- +# Notes:
- +# Accepted Values: Normal, Relax, Test, NoLabel, Restricted, Event, Free
- +# Default: Normal
- +ServerListType = Normal
- +
- +# Displays server minimum age to the server name on character selection.
- +# Notes:
- +# Accepted values: 0, 15, 18
- +# Default: 0
- +ServerListAge = 0
- +
- +
- +# If True, only accounts with GM access can enter the server.
- +# Default: False
- +ServerGMOnly = False
- +
- +# Enable GMs to have the glowing aura of a Hero character on login.
- +# Notes:
- +# GMs can do "///hero" on themselves and get this aura voluntarily.
- +# It's advised to keep this off due to graphic lag.
- +# Default: False
- +GMHeroAura = False
- +
- +# Auto set invulnerable status to a GM on login.
- +# Default: False
- +GMStartupInvulnerable = False
- +
- +# Auto set invisible status to a GM on login.
- +# Default: False
- +GMStartupInvisible = False
- +
- +# Auto block private messages to a GM on login.
- +# Default: False
- +GMStartupSilence = False
- +
- +# Auto list GMs in GM list (/gmlist) on login.
- +# Default: False
- +GMStartupAutoList = False
- +
- +# Auto set diet mode on to a GM on login (affects your weight penalty).
- +# Default: False
- +GMStartupDietMode = False
- +
- +# Item restrictions apply to GMs as well? (True = restricted usage)
- +# Default: True
- +GMItemRestriction = True
- +
- +# Skill restrictions apply to GMs as well? (True = restricted usage)
- +# Default: True
- +GMSkillRestriction = True
- +
- +# Allow GMs to drop/trade non-tradable and quest(drop only) items
- +# Default: False
- +GMTradeRestrictedItems = False
- +
- +# Allow GMs to restart/exit while is fighting stance
- +# Default: True
- +GMRestartFighting = True
- +
- +# Show the GM's name behind an announcement made by him
- +# example: "Announce: hi (HanWik)"
- +GMShowAnnouncerName = False
- +
- +# Show the GM's name before an announcement made by him
- +# example: "Nyaran: hi"
- +GMShowCritAnnouncerName = False
- +
- +# Give special skills for every GM
- +# 7029,7041-7064,7088-7096,23238-23249 (Master's Blessing)
- +# Default: False
- +GMGiveSpecialSkills = False
- +
- +# Give special aura skills for every GM
- +# 7029,23238-23249,23253-23296 (Master's Blessing)
- +# Default: False
- +GMGiveSpecialAuraSkills = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Server Security
- +# ---------------------------------------------------------------------------
- +
- +# Enforce gameguard for clients. Sends a gameguard query on character login.
- +# Default: False
- +GameGuardEnforce = False
- +
- +# Don't allow player to perform trade, talk with npc, or move until gameguard reply is received.
- +# Default: False
- +GameGuardProhibitAction = False
- +
- +#Logging settings. The following four settings, while enabled, will increase writing to your hard drive(s) considerably. Depending on the size of your server, the amount of players, and other factors, you may suffer a noticable performance hit.
- +# Default: False
- +LogChat = False
- +
- +# Default: False
- +LogAutoAnnouncements = False
- +
- +# Default: False
- +LogItems = False
- +
- +# Log only Adena and equippable items if LogItems is enabled
- +LogItemsSmallLog = False
- +
- +# Default: False
- +LogItemEnchants = False
- +
- +# Default: False
- +LogSkillEnchants = False
- +
- +# Default: False
- +GMAudit = False
- +
- +# Check players for non-allowed skills
- +# Default: False
- +SkillCheckEnable = False
- +
- +# If true, remove invalid skills from player and database.
- +# Report only, if false.
- +# Default: False
- +SkillCheckRemove = False
- +
- +# Check also GM characters (only if SkillCheckEnable = True)
- +# Default: True
- +SkillCheckGM = True
- +
- +
- +# ---------------------------------------------------------------------------
- +# Thread Configuration
- +# ---------------------------------------------------------------------------
- +
- +# Extreme caution should be here, set to defaults if you do not know what you are doing.
- +# These could possibly hurt your servers performance or improve it depending on your server's configuration, size, and other factors.
- +# Default: 10
- +ThreadPoolSizeEffects = 10
- +
- +# Default: 13
- +ThreadPoolSizeGeneral = 13
- +
- +# Default: 2
- +ThreadPoolSizeEvents = 2
- +
- +# Default: 2
- +UrgentPacketThreadCoreSize = 2
- +
- +# Default: 4
- +GeneralPacketThreadCoreSize = 4
- +
- +# Default: 4
- +GeneralThreadCoreSize = 4
- +
- +# Default: 6
- +AiMaxThread = 6
- +
- +# Default: 5
- +EventsMaxThread = 5
- +
- +# Dead Lock Detector (a separate thread for detecting deadlocks).
- +# For improved crash logs and automatic restart in deadlock case if enabled.
- +# Check interval is in seconds.
- +# Default: True
- +DeadLockDetector = True
- +
- +# Default: 20
- +DeadLockCheckInterval = 20
- +
- +# Default: False
- +RestartOnDeadlock = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Client packet queue tuning
- +# ---------------------------------------------------------------------------
- +
- +# Queue size, do not set it too low !
- +# 0 - use value MaxReadPerPass + 2 (from mmo.properties)
- +# Default: 0
- +ClientPacketQueueSize = 0
- +
- +# Maximum number of packets in burst.
- +# Execution will be aborted and thread released if more packets executed in raw.
- +# 0 - use value MaxReadPerPass + 1 (from mmo.properties)
- +# Default: 0
- +ClientPacketQueueMaxBurstSize = 0
- +
- +# Maximum number of packets per second.
- +# Flood detector will be triggered if more packets received.
- +# After triggering all incoming packets will be dropped until flooding stopped.
- +# Default: 80
- +ClientPacketQueueMaxPacketsPerSecond = 80
- +
- +# Average number of packets per second calculated during this interval.
- +# Using larger value decrease number of false kicks, but slower reaction to flood.
- +# Avoid using too low or too high values, recommended between 3 and 10.
- +# Default: 5
- +ClientPacketQueueMeasureInterval = 5
- +
- +# Maximum average number of packets per second during measure interval.
- +# Flood detector will be triggered if more packets received.
- +# After triggering all incoming packets will be dropped until flooding stopped.
- +# Default: 40
- +ClientPacketQueueMaxAveragePacketsPerSecond = 40
- +
- +# Maximum number of flood triggers per minute.
- +# Client will be kicked if more floods detected.
- +# Default: 2
- +ClientPacketQueueMaxFloodsPerMin = 2
- +
- +# Maximum number of queue overflows per minute.
- +# After overflow all incoming packets from client are dropped until queue is flushed.
- +# Client will be kicked if more queue overflows detected.
- +# Default: 1
- +ClientPacketQueueMaxOverflowsPerMin = 1
- +
- +# Maximum number of buffer underflows per minute.
- +# Client will be kicked if more underflow exceptions detected.
- +# Default: 1
- +ClientPacketQueueMaxUnderflowsPerMin = 1
- +
- +# Maximum number of unknown packets per minute.
- +# Client will be kicked if more unknown packets received.
- +# Default: 5
- +ClientPacketQueueMaxUnknownPerMin = 5
- +
- +
- +# ---------------------------------------------------------------------------
- +# Optimization
- +# ---------------------------------------------------------------------------
- +
- +# Items on ground management.
- +# Allow players to drop items on the ground.
- +# Default: True
- +AllowDiscardItem = True
- +
- +# Delete dropped reward items from world after a specified amount of seconds. Disabled = 0.
- +# Default: 600
- +AutoDestroyDroppedItemAfter = 600
- +
- +# Time in seconds after which dropped herb will be auto-destroyed
- +# Default: 60
- +AutoDestroyHerbTime = 60
- +
- +# List of item id that will not be destroyed (separated by "," like 57,5575,6673).
- +# Notes:
- +# Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
- +# Items on this list will be protected regardless of the following options.
- +# Default: 0
- +ListOfProtectedItems = 0
- +
- +# Cleans up the server database on startup.
- +# The bigger the database is, the longer it will take to clean up the database(the slower the server will start).
- +# Sometimes this ends up with 0 elements cleaned up, and a lot of wasted time on the server startup.
- +# If you want a faster server startup, set this to 'false', but its recommended to clean up the database from time to time.
- +# Default: True
- +DatabaseCleanUp = True
- +
- +# The time before a database connection closes (in milliseconds)
- +# If a query takes longer to execute than the time defined here, the server will throw "Unclosed Connection!" error.
- +# If you get often this error message, try increasing this.
- +# Default: 60000ms
- +ConnectionCloseTime = 60000
- +
- +# This is the interval (in minutes), that the gameserver will update a players information such as location.
- +# The higher you set this number, there will be less character information saving so you will have less accessessing of the database and your hard drive(s).
- +# The lower you set this number, there will be more frequent character information saving so you will have more access to the database and your hard drive(s).
- +# A value of 0 disables periodic saving.
- +# Independent of this setting the character is always saved after leaving the world.
- +# Default: 15
- +CharacterDataStoreInterval = 15
- +
- +# This enables the server to only update items when saving the character.
- +# Enabling this greatly reduces DB usage and improves performance.
- +# WARNING: This option causes item loss during crashes.
- +# Default: False
- +LazyItemsUpdate = False
- +
- +# When enabled, this forces (even if using lazy item updates) the items owned by the character to be updated into DB when saving its character.
- +# Default: False
- +UpdateItemsOnCharStore = False
- +
- +# Also delete from world misc. items dropped by players (all except equip-able items).
- +# Notes:
- +# Works only if AutoDestroyDroppedItemAfter is greater than 0.
- +# Default: False
- +DestroyPlayerDroppedItem = False
- +
- +# Destroy dropped equippable items (armor, weapon, jewelry).
- +# Notes:
- +# Works only if DestroyPlayerDroppedItem = True
- +# Default: False
- +DestroyEquipableItem = False
- +
- +# Save dropped items into the database for restoring after restart.
- +# Default: False
- +SaveDroppedItem = False
- +
- +# Enable/Disable the emptying of the stored dropped items table after items are loaded into memory (safety setting).
- +# If the server crashed before saving items, on next start old items will be restored and players may already have picked up some of them so this will prevent duplicates.
- +# Default: False
- +EmptyDroppedItemTableAfterLoad = False
- +
- +# Time interval in minutes to save in DB items on ground. Disabled = 0.
- +# Notes:
- +# If SaveDroppedItemInterval is disabled, items will be saved into the database only at server shutdown.
- +# Default: 60
- +SaveDroppedItemInterval = 60
- +
- +# Delete all saved items from the database on next restart?
- +# Notes:
- +# Works only if SaveDroppedItem = False.
- +# Default: False
- +ClearDroppedItemTable = False
- +
- +# Delete invalid quest from players.
- +# Default: False
- +AutoDeleteInvalidQuestData = False
- +
- +# If True, allows a special handling for drops when chance raises over 100% (eg. when applying chance rates).
- +# True value causes better drop handling at higher rates.
- +# Default: True
- +PreciseDropCalculation = True
- +
- +# Allow creating multiple non-stackable items at one time?
- +# Default: True
- +MultipleItemDrop = True
- +
- +# Forces full item inventory packet to be sent for any item change.
- +# Notes:
- +# This can increase network traffic
- +# Default: False
- +ForceInventoryUpdate = False
- +
- +# True = Load html's into cache only on first time html is requested.
- +# False = Load all html's into cache on server startup.
- +# Default: True
- +LazyCache = True
- +
- +# Cache all character names in to memory on server startup
- +# False - names are loaded from Db when they are requested
- +# True - decrease Db usage , increase memory consumption
- +# Default: True
- +CacheCharNames = True
- +
- +# Minimum and maximum variables in seconds for npc animation delay.
- +# You must keep MinNPCAnimation < = MaxNPCAnimation.
- +# Default: 10
- +MinNPCAnimation = 10
- +
- +# Default: 20
- +MaxNPCAnimation = 20
- +
- +# Default: 5
- +MinMonsterAnimation = 5
- +
- +# Default: 20
- +MaxMonsterAnimation = 20
- +
- +# Knownlist (the list of things a character sees) update method. Default is currently time based updating, which also makes it possible to use config options for guards to see moving monsters. Alternatively move based update can be used but guards cannot track mobs with that option but otherwise it should work well.
- +# Default: False
- +MoveBasedKnownlist = False
- +
- +# Interval (in milliseconds) in which the knownlist does full updates.
- +# For move based updates its used for intermediate updates.
- +# WARNING!
- +# Useful interval is between 300 - 2000. Too small value may kill your CPU, too high value may not update knownlists properly. The default value is chosen experimentally.
- +# Default: 1250
- +KnownListUpdateInterval = 1250
- +
- +# Grid options: Grids can turn themselves on and off. This also affects the loading and processing of all AI tasks and (in the future) geodata within this grid.
- +# Turn on for a grid with a person in it is immediate, but it then turns on the 8 neighboring grids based on the specified number of seconds.
- +# Turn off for a grid and neighbors occurs after the specified number of seconds have passed during which a grid has had no players in or in any of its neighbors.
- +# The always on option allows to ignore all this and let all grids be active at all times (not suggested).
- +# Default: False
- +GridsAlwaysOn = False
- +
- +# Default: 1
- +GridNeighborTurnOnTime = 1
- +
- +# Default: 90
- +GridNeighborTurnOffTime = 90
- +
- +# ---------------------------------------------------------------------------
- +# Falling Damage
- +# ---------------------------------------------------------------------------
- +
- +# Allow characters to receive damage from falling.
- +# CoordSynchronize = 2 is recommended.
- +# Default: True
- +EnableFallingDamage = True
- +
- +
- +# ---------------------------------------------------------------------------
- +# Features
- +# ---------------------------------------------------------------------------
- +
- +# Peace Zone Modes:
- +# 0 = Peace All the Time
- +# 1 = PVP During Siege for siege participants
- +# 2 = PVP All the Time
- +# Default: 0
- +PeaceZoneMode = 0
- +
- +# Global Chat.
- +# Available Options: ON, OFF, GM, GLOBAL
- +# Default: ON
- +GlobalChat = ON
- +
- +# Trade Chat.
- +# Available Options: ON, OFF, GM, GLOBAL
- +# Default: ON
- +TradeChat = ON
- +
- +# If you are experiencing problems with Warehouse transactions, feel free to disable them here.
- +# Default: True
- +AllowWarehouse = True
- +
- +# Enable Warehouse Cache. If warehouse is not used will server clear memory used by this warehouse.
- +# Default: False
- +WarehouseCache = False
- +
- +# How long warehouse should be stored in memory.
- +# Default: 15
- +WarehouseCacheTime = 15
- +
- +# Default: True
- +AllowRefund = True
- +
- +# Default: True
- +AllowMail = True
- +
- +# Default: True
- +AllowAttachments = True
- +
- +# If True player can try on weapon and armor in shop.
- +# Default: True
- +AllowWear = True
- +
- +# Default: 5
- +WearDelay = 5
- +
- +#Adena cost to try on an item.
- +# Default: 10
- +WearPrice = 10
- +
- +
- +# ---------------------------------------------------------------------------
- +# Instances
- +# ---------------------------------------------------------------------------
- +# Restores the player to their previous instance (ie. an instanced area/dungeon) on EnterWorld.
- +# Default: False
- +RestorePlayerInstance = False
- +
- +# Set whether summon skills can be used to summon players inside an instance.
- +# When enabled individual instances can have summoning disabled in instance xml's.
- +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- +# Default: False
- +AllowSummonInInstance = False
- +
- +# When a player dies, is removed from instance after a fixed period of time.
- +# Time in seconds.
- +# Default: 60
- +EjectDeadPlayerTime = 60
- +
- +# When is instance finished, is set time to destruction currency instance.
- +# Time in seconds.
- +# Default: 300
- +DefaultFinishTime = 300
- +
- +
- +# ---------------------------------------------------------------------------
- +# Misc Settings
- +# ---------------------------------------------------------------------------
- +
- +# Default: True
- +AllowRace = True
- +
- +# Default: True
- +AllowWater = True
- +
- +# Enable pets for rent (wyvern & strider) from pet managers.
- +# Default: False
- +AllowRentPet = False
- +
- +# Default: True
- +AllowFishing = True
- +
- +# Default: True
- +AllowBoat = True
- +
- +# Boat broadcast radius.
- +# If players getting annoyed by boat shouts then radius can be decreased.
- +# Default: 20000
- +BoatBroadcastRadius = 20000
- +
- +# Default: True
- +AllowCursedWeapons = True
- +
- +#Allow Pet manager's pets to walk around.
- +# Default: True
- +AllowPetWalkers = True
- +
- +# Show "data/html/servnews.htm" when a character enters world.
- +# Default: False
- +ShowServerNews = False
- +
- +# Enable the Community Board.
- +# Default: True
- +EnableCommunityBoard = True
- +
- +# Default Community Board page.
- +# Default: _bbshome
- +BBSDefault = _bbshome
- +
- +# Enable chat filter
- +# Default = False
- +UseChatFilter = False
- +
- +# Replace filter words with following chars
- +ChatFilterChars = ^_^
- +
- +# Banchat for channels, split ";"
- +# 0 = ALL (white)
- +# 1 = SHOUT (!)
- +# 2 = TELL (")
- +# 3 = PARTY (#)
- +# 4 = CLAN (@)
- +# 5 = GM (//gmchat)
- +# 6 = PETITION_PLAYER (*)
- +# 7 = PETITION_GM (*)
- +# 8 = TRADE (+)
- +# 9 = ALLIANCE ($)
- +# 10 = ANNOUNCEMENT
- +# 11 = BOAT
- +# 12 = L2FRIEND
- +# 13 = MSNCHAT
- +# 14 = PARTYMATCH_ROOM
- +# 15 = PARTYROOM_COMMANDER (Yellow)
- +# 16 = PARTYROOM_ALL (Red)
- +# 17 = HERO_VOICE (&)
- +# 18 = CRITICAL_ANNOUNCE
- +# 19 = SCREEN_ANNOUNCE
- +# 20 = BATTLEFIELD
- +# 21 = MPCC_ROOM
- +# Default: 0;1;8;17
- +BanChatChannels = 0;1;8;17
- +
- +# ---------------------------------------------------------------------------
- +# Manor
- +# ---------------------------------------------------------------------------
- +
- +# Default: True
- +AllowManor = True
- +
- +# Manor refresh time in military hours.
- +# Default: 20 (8pm)
- +AltManorRefreshTime = 20
- +
- +# Manor refresh time (minutes).
- +# Default: 00 (start of the hour)
- +AltManorRefreshMin = 00
- +
- +# Manor period approve time in military hours.
- +# Default: 4 (4am)
- +AltManorApproveTime = 4
- +
- +# Manor period approve time (minutes).
- +# Default: 30
- +AltManorApproveMin = 30
- +
- +# Manor maintenance time (minutes).
- +# Default: 6
- +AltManorMaintenanceMin = 6
- +
- +# Manor Save Type.
- +# True = Save data into the database after every action
- +# Default: False
- +AltManorSaveAllActions = False
- +
- +# Manor Save Period (used only if AltManorSaveAllActions = False)
- +# Default: 2 (hour)
- +AltManorSavePeriodRate = 2
- +
- +
- +# ---------------------------------------------------------------------------
- +# Lottery
- +# ---------------------------------------------------------------------------
- +
- +# Default: True
- +AllowLottery = True
- +
- +# Initial Lottery prize.
- +# Default: 50000
- +AltLotteryPrize = 50000
- +
- +# Lottery Ticket Price
- +# Default: 2000
- +AltLotteryTicketPrice = 2000
- +
- +# What part of jackpot amount should receive characters who pick 5 wining numbers
- +# Default: 0.6
- +AltLottery5NumberRate = 0.6
- +
- +# What part of jackpot amount should receive characters who pick 4 wining numbers
- +# Default: 0.2
- +AltLottery4NumberRate = 0.2
- +
- +# What part of jackpot amount should receive characters who pick 3 wining numbers
- +# Default: 0.2
- +AltLottery3NumberRate = 0.2
- +
- +# How much Adena receive characters who pick two or less of the winning number
- +# Default: 200
- +AltLottery2and1NumberPrize = 200
- +
- +
- +# ---------------------------------------------------------------------------
- +# Item Auction
- +# ---------------------------------------------------------------------------
- +
- +#
- +AltItemAuctionEnabled = True
- +
- +# Number of days before auction cleared from database with all bids.
- +# Default: 14
- +AltItemAuctionExpiredAfter = 14
- +
- +# Auction extends to specified amount of seconds if one or more new bids added.
- +# By default auction extends only two times, by 5 and 3 minutes, this custom value used after it.
- +# Values higher than 60s is not recommended.
- +# Default: 0
- +AltItemAuctionTimeExtendsOnBid = 0
- +
- +
- +# ---------------------------------------------------------------------------
- +# Dimension Rift
- +# ---------------------------------------------------------------------------
- +
- +# Minimal party size to enter rift. Min = 2, Max = 9.
- +# If while inside the rift, the party becomes smaller, all members will be teleported back.
- +# Default: 2
- +RiftMinPartySize = 2
- +
- +# Number of maximum jumps between rooms allowed, after this time party will be teleported back
- +# Default: 4
- +MaxRiftJumps = 4
- +
- +# Time in ms the party has to wait until the mobs spawn when entering a room. C4 retail: 10s
- +# Default: 10000
- +RiftSpawnDelay = 10000
- +
- +# Time between automatic jumps in seconds
- +# Default: 480
- +AutoJumpsDelayMin = 480
- +
- +# Default: 600
- +AutoJumpsDelayMax = 600
- +
- +# Time Multiplier for stay in the boss room
- +# Default: 1.5
- +BossRoomTimeMultiply = 1.5
- +
- +# Cost in dimension fragments to enter the rift, each party member must own this amount
- +# Default: 18
- +RecruitCost = 18
- +
- +# Default: 21
- +SoldierCost = 21
- +
- +# Default: 24
- +OfficerCost = 24
- +
- +# Default: 27
- +CaptainCost = 27
- +
- +# Default: 30
- +CommanderCost = 30
- +
- +# Default: 33
- +HeroCost = 33
- +
- +
- +# ---------------------------------------------------------------------------
- +# Four Sepulchers
- +# ---------------------------------------------------------------------------
- +
- +# Default: 50
- +TimeOfAttack = 50
- +
- +# Default: 5
- +TimeOfCoolDown = 5
- +
- +# Default: 3
- +TimeOfEntry = 3
- +
- +# Default: 2
- +TimeOfWarmUp = 2
- +
- +# Default: 4
- +NumberOfNecessaryPartyMembers = 4
- +
- +
- +# ---------------------------------------------------------------------------
- +# Punishment
- +# ---------------------------------------------------------------------------
- +
- +# Player punishment for illegal actions:
- +# 1 - broadcast warning to gms only
- +# 2 - kick player(default)
- +# 3 - kick & ban player
- +# 4 - jail player (define minutes of jail with param: 0 = infinite)
- +# Default: 2
- +DefaultPunish = 2
- +
- +# This setting typically specifies the duration of the above punishment.
- +# Default: 0
- +DefaultPunishParam = 0
- +
- +# Apply default punish if player buy items for zero Adena.
- +# Default: True
- +OnlyGMItemsFree = True
- +
- +# Jail is a PvP zone.
- +# Default: False
- +JailIsPvp = False
- +
- +# Disable all chat in jail (except normal one)
- +# Default: True
- +JailDisableChat = True
- +
- +# Disable all transaction in jail
- +# Trade/Store/Drop
- +# Default: False
- +JailDisableTransaction = False
- +
- +# Enchant Skill Details Settings
- +# Default: 1,5
- +NormalEnchantCostMultipiler = 1
- +SafeEnchantCostMultipiler = 5
- +
- +# ---------------------------------------------------------------------------
- +# Custom Components
- +# ---------------------------------------------------------------------------
- +
- +# Default: False
- +CustomSpawnlistTable = False
- +
- +# Option to save GM spawn only in the custom table.
- +# Default: False
- +SaveGmSpawnOnCustom = False
- +
- +# Default: False
- +CustomNpcData = False
- +
- +# Default: False
- +CustomTeleportTable = False
- +
- +# Default: False
- +CustomNpcBufferTables = False
- +
- +# Default: False
- +CustomSkillsLoad = False
- +
- +# Default: False
- +CustomItemsLoad = False
- +
- +# Default: False
- +CustomMultisellLoad = False
- +
- +# Default: False
- +CustomBuyListLoad = False
- +
- +# ---------------------------------------------------------------------------
- +# Birthday Event Settings
- +# ---------------------------------------------------------------------------
- +
- +# Gift sent with Mail System
- +# Default: 22187
- +AltBirthdayGift = 22187
- +
- +# Mail Subject
- +AltBirthdayMailSubject = Happy Birthday!
- +
- +# Mail Content
- +# $c1: Player name
- +# $s1: Age
- +AltBirthdayMailText = Hello Adventurer!! Seeing as you're one year older now, I thought I would send you some birthday cheer :) Please find your birthday pack attached. May these gifts bring you joy and happiness on this very special day.\n\nSincerely, Alegria
- +
- +# ---------------------------------------------------------------------------
- +# Handy's Block Checker Event Settings
- +# ---------------------------------------------------------------------------
- +
- +# Enable the Handy's Block Checker event
- +# Default: True
- +EnableBlockCheckerEvent = True
- +
- +# Minimum number of members on each team before
- +# be able to start the event
- +# Min: 1
- +# Max: 6
- +# Retail: 2
- +BlockCheckerMinTeamMembers = 2
- +
- +# Fair play
- +# Players can choose what team to play. However, by
- +# enabling this property to true, the teams will be
- +# balanced in the teleport to the arena
- +HBCEFairPlay = True
- +
- +# ---------------------------------------------------------------------------
- +# Hellbound Settings
- +# ---------------------------------------------------------------------------
- +# If true, players can enter the Hellbound island without any quests
- +# Default: False
- +HellboundWithoutQuest = False
- +
- +# ---------------------------------------------------------------------------
- +# Bot Report Button settings
- +# ---------------------------------------------------------------------------
- +
- +# Enable the bot report button on the desired game servers.
- +# Default: True
- +EnableBotReportButton = True
- +
- +# Report points restart hour. Format: HH:MM ( PM mode, 24 hours clock)
- +# Default: 00:00
- +BotReportPointsResetHour = 00:00
- +
- +# Delay between reports from the same player (in minutes)
- +# Default: 30 minutes
- +BotReportDelay = 30
- +
- +# Allow players from the same clan to report the same bot
- +# Default: False
- +AllowReportsFromSameClanMembers = False
- +
- +# ---------------------------------------------------------------------------
- +# Developer Settings
- +# ---------------------------------------------------------------------------
- +# Do not touch these if you do not know what you are doing.
- +# These settings are for debugging servers ONLY. They are not meant for LIVE servers.
- +
- +# Default: False
- +Debug = False
- +
- +# Instances debugging
- +# Default: False
- +InstanceDebug = False
- +
- +# Html action cache debugging
- +# Default: False
- +HtmlActionCacheDebug = False
- +
- +# Packet handler debug output
- +# Default: False
- +PacketHandlerDebug = False
- +
- +# Default: False
- +Developer = False
- +
- +# Don't load Handlers
- +# Default: False
- +AltDevNoHandlers = False
- +
- +# Don't load quests.
- +# Default: False
- +AltDevNoQuests = False
- +
- +# Don't load spawntable.
- +# Default: False
- +AltDevNoSpawns = False
- +
- +# Show quests while loading them.
- +# Default: False
- +AltDevShowQuestsLoadInLogs = False
- +
- +# Show scripts while loading them.
- +# Default: False
- +AltDevShowScriptsLoadInLogs = False
- diff --git a/dist/game/config/default/GeoData.properties b/dist/game/config/default/GeoData.properties
- new file mode 100644
- index 0000000..3511380
- --- /dev/null
- +++ b/dist/game/config/default/GeoData.properties
- @@ -0,0 +1,75 @@
- +# ---------------------------------------------------------------------------
- +# GeoData
- +# ---------------------------------------------------------------------------
- +
- +# Pathfinding options:
- +# 0 = Disabled
- +# 1 = Enabled using path node files
- +# 2 = Enabled using geodata cells at runtime
- +# Default: 0
- +PathFinding = 0
- +
- +# Pathnode directory
- +# Default: data/pathnode
- +PathnodeDirectory = data/pathnode
- +
- +# Pathfinding array buffers configuration
- +PathFindBuffers = 100x6;128x6;192x6;256x4;320x4;384x4;500x2
- +
- +# Weight for nodes without obstacles far from walls
- +LowWeight = 0.5
- +
- +# Weight for nodes near walls
- +MediumWeight = 2
- +
- +# Weight for nodes with obstacles
- +HighWeight = 3
- +
- +# Angle paths will be more "smart", but in cost of higher CPU utilization
- +AdvancedDiagonalStrategy = True
- +
- +# Weight for diagonal movement. Used only with AdvancedDiagonalStrategy = True
- +# Default: LowWeight * sqrt(2)
- +DiagonalWeight = 0.707
- +
- +# Maximum number of LOS postfilter passes, 0 will disable postfilter.
- +# Default: 3
- +MaxPostfilterPasses = 3
- +
- +# Path debug function.
- +# Nodes known to pathfinder will be displayed as adena, constructed path as antidots.
- +# Number of the items show node cost * 10
- +# Potions display path after first stage filter
- +# Red potions - actual waypoints. Green potions - nodes removed by LOS postfilter
- +# This function FOR DEBUG PURPOSES ONLY, never use it on the live server !
- +DebugPath = False
- +
- +# True = Loads GeoData buffer's content into physical memory.
- +# False = Does not necessarily imply that the GeoData buffer's content is not resident in physical memory.
- +# Default: True
- +ForceGeoData = True
- +
- +# This setting controls Client <--> Server Player coordinates synchronization:
- +# -1 - Will synchronize only Z from Client --> Server. Default when no geodata.
- +# 1 - Synchronization Client --> Server only. Using this option (without geodata) makes it more difficult for players to bypass obstacles.
- +# 2 - Intended for geodata (at least with cell-level pathfinding, otherwise can you try -1).
- +# Server sends validation packet if client goes too far from server calculated coordinates.
- +# Default: -1
- +CoordSynchronize = -1
- +
- +# Geodata files folder
- +GeoDataPath = ./data/geodata
- +
- +# True: Try to load regions not specified below(won't disturb server startup when file does not exist)
- +# False: Don't load any regions other than the ones specified with True below
- +TryLoadUnspecifiedRegions = True
- +
- +# List of regions to be required to load
- +# eg.:
- +# Both regions required
- +# 22_22=True
- +# 19_20=true
- +# Exclude region from loading
- +# 25_26=false
- +# True: Region is required for the server to startup
- +# False: Region is not considered to be loaded
- diff --git a/dist/game/config/default/GraciaSeeds.properties b/dist/game/config/default/GraciaSeeds.properties
- new file mode 100644
- index 0000000..1542f29
- --- /dev/null
- +++ b/dist/game/config/default/GraciaSeeds.properties
- @@ -0,0 +1,18 @@
- +# ---------------------------------------------------------------------------
- +# Gracia Seeds Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# Seed of Destruction Settings
- +# ---------------------------------------------------------------------------
- +
- +# Count of Kills which needed for Stage 2
- +# Default: 10
- +TiatKillCountForNextState = 10
- +
- +# Length of Stage 2 before the Defense state starts (in minutes).
- +# Default: 720min (12h)
- +Stage2Length = 720
- diff --git a/dist/game/config/default/GrandBoss.properties b/dist/game/config/default/GrandBoss.properties
- new file mode 100644
- index 0000000..cf21798
- --- /dev/null
- +++ b/dist/game/config/default/GrandBoss.properties
- @@ -0,0 +1,78 @@
- +# ---------------------------------------------------------------------------
- +# Antharas
- +# ---------------------------------------------------------------------------
- +
- +# Delay of appearance time of Antharas. Value is minute. Range 3-60
- +AntharasWaitTime = 20
- +
- +# Interval time of Antharas. Value is hour. Range 1-480
- +IntervalOfAntharasSpawn = 264
- +
- +# Random interval. Range 1-192
- +RandomOfAntharasSpawn = 72
- +
- +# ---------------------------------------------------------------------------
- +# Valakas
- +# ---------------------------------------------------------------------------
- +
- +# Delay of appearance time of Valakas. Value is minute. Range 3-60
- +ValakasWaitTime = 30
- +
- +# Interval time of Valakas. Value is hour. Range 1-480
- +IntervalOfValakasSpawn = 264
- +
- +# Random interval. Range 1-192
- +RandomOfValakasSpawn = 72
- +
- +# ---------------------------------------------------------------------------
- +# Baium
- +# ---------------------------------------------------------------------------
- +
- +# Interval time of Baium. Value is hour. Range 1-480
- +IntervalOfBaiumSpawn = 168
- +
- +# Random interval. Range 1-192
- +RandomOfBaiumSpawn = 48
- +
- +# ---------------------------------------------------------------------------
- +# Core
- +# ---------------------------------------------------------------------------
- +
- +# Interval time of Core. Value is hour. Range 1-480
- +IntervalOfCoreSpawn = 60
- +
- +# Random interval. Range 1-192
- +RandomOfCoreSpawn = 24
- +
- +# ---------------------------------------------------------------------------
- +# Orfen
- +# ---------------------------------------------------------------------------
- +
- +# Interval time of Orfen. Value is hour. Range 1-480
- +IntervalOfOrfenSpawn = 48
- +
- +# Random interval. Range 1-192
- +RandomOfOrfenSpawn = 20
- +
- +# ---------------------------------------------------------------------------
- +# Queen Ant
- +# ---------------------------------------------------------------------------
- +
- +# Interval time of QueenAnt. Value is hour. Range 1-480
- +IntervalOfQueenAntSpawn = 36
- +
- +# Random interval. Range 1-192
- +RandomOfQueenAntSpawn = 17
- +
- +# ---------------------------------------------------------------------------
- +# Beleth
- +# ---------------------------------------------------------------------------
- +
- +# Interval time of Beleth. Value is hour. Range 1-480. Retail: 192
- +IntervalOfBelethSpawn = 192
- +
- +# Random interval. Range 1-192. Retail: 148
- +RandomOfBelethSpawn = 148
- +
- +#Minimal count of players for enter to Beleth. Retail: 36
- +BelethMinPlayers = 36
- \ No newline at end of file
- diff --git a/dist/game/config/default/IdFactory.properties b/dist/game/config/default/IdFactory.properties
- new file mode 100644
- index 0000000..b3d0922
- --- /dev/null
- +++ b/dist/game/config/default/IdFactory.properties
- @@ -0,0 +1,21 @@
- +# ---------------------------------------------------------------------------
- +# ID Factory Settings
- +# ---------------------------------------------------------------------------
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# Standard Settings
- +# ---------------------------------------------------------------------------
- +
- +# Tell server which IDFactory Class to use:
- +# Compaction = Original method
- +# BitSet = One non compaction method
- +# Stack = Another non compaction method
- +# Default: BitSet
- +IDFactory = BitSet
- +
- +# Check for bad ids in the database on server boot up.
- +# Much faster load time without it, but may cause problems.
- +# Default: True
- +BadIdChecking = True
- \ No newline at end of file
- diff --git a/dist/game/config/default/L2JMods.properties b/dist/game/config/default/L2JMods.properties
- new file mode 100644
- index 0000000..439eed9
- --- /dev/null
- +++ b/dist/game/config/default/L2JMods.properties
- @@ -0,0 +1,510 @@
- +# ---------------------------------------------------------------------------
- +# L2JMODS - non-retail-like systems that have been integrated into the L2J project.
- +# Be warned that there may be no support for these mods beyond the original author's assistance.
- +
- +# ---------------------------------------------------------------------------
- +# Champion mobs - Turn random mobs into Champions
- +# ---------------------------------------------------------------------------
- +
- +# Enable/Disable Champion Mob System.
- +ChampionEnable = False
- +
- +# Force Champion mobs to be passive?
- +# To leave champion mobs to default/Aggressive, set to False.
- +# To set all champion mobs to Passive, set True.
- +ChampionPassive = False
- +
- +# % chance for a mob to became champion (-1 to disable).
- +ChampionFrequency = -1
- +
- +# Title of all Champion Mobs.
- +ChampionTitle = Champion
- +
- +# Min and max levels allowed for a mob to be a Champion mob.
- +ChampionMinLevel = 20
- +ChampionMaxLevel = 78
- +
- +# Hp multiplier for Champion mobs.
- +ChampionHp = 8
- +
- +# Hp Regen Multiplier for Champion mobs.
- +ChampionHpRegen = 1.0
- +
- +# Exp/Sp rewards multiplier for Champion mobs.
- +ChampionRewardsExpSp = 8.0
- +
- +# Standard rewards chance multiplier for Champion mobs.
- +ChampionRewardsChance = 8.0
- +
- +# Standard rewards amount multiplier for Champion mobs.
- +ChampionRewardsAmount = 1.0
- +
- +# Adena & Seal Stone rewards chance multiplier for Champion mobs.
- +ChampionAdenasRewardsChance = 1.0
- +
- +# Adena & Seal Stone rewards amount multiplier for Champion mobs.
- +ChampionAdenasRewardsAmount = 1.0
- +
- +# P. Attack and M. Attack bonus for Champion mobs.
- +ChampionAtk = 1.0
- +
- +# Physical/Magical Attack Speed bonus for Champion mobs.
- +ChampionSpdAtk = 1.0
- +
- +# Specified reward item ID
- +ChampionRewardItemID = 6393
- +
- +# The amount of the specified reward a player will receive if they are awarded the item.
- +ChampionRewardItemQty = 1
- +
- +# % Chance to obtain a specified reward item from a higher level Champion mob.
- +# Default: 0
- +ChampionRewardLowerLvlItemChance = 0
- +
- +# % Chance to obtain a specified reward item from a lower level Champion mob.
- +# Default: 0
- +ChampionRewardHigherLvlItemChance = 0
- +
- +# Do you want to enable the vitality calculation when killing champion mobs?
- +# Be aware that it can lead to huge unbalance on your server, your rate for that mob would
- +# then be "mobXP x serverRate x vitalityRate x championXpRate
- +# Notes:
- +# Works only if EnableVitality = True
- +# Default: False
- +ChampionEnableVitality = False
- +
- +# Enable spawning of the champions in instances
- +# Default = False
- +ChampionEnableInInstances = False
- +
- +# ---------------------------------------------------------------------------
- +# Wedding System (by evill33t)
- +# ---------------------------------------------------------------------------
- +# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
- +# CustomNpcTable = True in General.properties
- +# ---------------------------------------------------------------------------
- +# Wedding Manager ID: 50007
- +#
- +# First part - "Engagement"
- +# 1) Target the player that you want to make a couple with.
- +# 2) Use the voice command ".engage nameofyourpartner" then press enter.
- +# 3) If the target player has you on listed as a friend (ie. you are in each other's friends list) a popup will appear with an engagement request along with a system message that you want to be engaged with him/her.
- +# 4) If the target player accepts the engagement invitation, you will be engaged.
- +#
- +# Second part - "Marriage"
- +# 1) Once two players are engaged, they can speak to Andromeda, the Wedding Priest in the Hot Springs Guild House (Goddard Area).
- +# (You may need Formal Wear and Adena to pay wedding fees!)
- +# 2) Each player needs to speak to the NPC and make the request to be married.
- +# 3) Once done, fireworks will display and the two players will be married.
- +#
- +# Afterwards you can use the voice command ".gotolove nameofyourpartner" to teleport to your partner if you're married (there may also be a fee which can be specified below)
- +#
- +# If you want to cancel your Engagement/Marriage, use the voice command ".divorce nameofyourpartner".
- +#
- +# If you're married you have to pay a specified % of your adena to your partner.
- +#
- +# If a player attempts to become engaged to another player while married they may suffer a penalty if it's enabled below.
- +# ---------------------------------------------------------------------------
- +# Enable/Disable Wedding System
- +AllowWedding = False
- +
- +# Amount of Adena required to get married
- +WeddingPrice = 250000000
- +
- +# Enable/Disable punishing of players who attempt to be engaged to other players while married.
- +WeddingPunishInfidelity = True
- +
- +# Enable/Disable teleport function for married couples.
- +WeddingTeleport = True
- +
- +# Amount of Adena required to teleport to spouse.
- +WeddingTeleportPrice = 50000
- +
- +# Time before character is teleported after using the skill.
- +WeddingTeleportDuration = 60
- +
- +# Enable/Disable same sex marriages.
- +WeddingAllowSameSex = False
- +
- +# Require players to wear formal wear to be married?
- +WeddingFormalWear = True
- +
- +# Amount of Adena (%) a player must pay to the other to get divorced.
- +WeddingDivorceCosts = 20
- +
- +
- +# ---------------------------------------------------------------------------
- +# Team vs. Team Event Engine (by HorridoJoho)
- +# ---------------------------------------------------------------------------
- +
- +# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
- +# CustomNpcTable = True in General.properties
- +# ---------------------------------------------------------------------------
- +# Enable/Disable TvTEvent System
- +# Default: False
- +TvTEventEnabled = False
- +
- +# TvT in instance
- +# Default: False
- +TvTEventInInstance = False
- +
- +# Name of the instance file for TvT
- +# Default: coliseum.xml
- +TvTEventInstanceFile = coliseum.xml
- +
- +# Times TvT will occur (24h format).
- +# Default: 9:00,15:00,21:00,3:00
- +TvTEventInterval = 9:00,15:00,21:00,3:00
- +
- +# Registration timer from start of event (in minutes).
- +# Default: 30
- +TvTEventParticipationTime = 30
- +
- +# Event running time (in minutes).
- +# Default: 20
- +TvTEventRunningTime = 20
- +
- +# TvT Event NPC (create a custom npc of type L2TvTEventNpc).
- +# Default: 70010
- +TvTEventParticipationNpcId = 70010
- +
- +# TvT Event Participation Fee (itemId, number). Fee is not returned.
- +# Example: 57,100000
- +# Default: 0,0
- +TvTEventParticipationFee = 0,0
- +
- +# Location for TvTEvent NPC to spawn in form x,y,z[,heading]
- +# Default: 83425,148585,-3406
- +TvTEventParticipationNpcCoordinates = 83425,148585,-3406
- +
- +# Minimum amount of players allowed in each team.
- +# Default: 1
- +TvTEventMinPlayersInTeams = 1
- +# Maximum amount of players allowed in each team.
- +# Default: 20
- +TvTEventMaxPlayersInTeams = 20
- +
- +# Minimum level of players that may join the event.
- +# Default: 1
- +TvTEventMinPlayerLevel = 1
- +# Maximum level of players that may join the event.
- +# Default: 85
- +TvTEventMaxPlayerLevel = 85
- +
- +# Respawn delay timer (in seconds).
- +# Default: 10
- +TvTEventRespawnTeleportDelay = 10
- +# Exit delay timer (in seconds).
- +# Default: 10
- +TvTEventStartLeaveTeleportDelay = 10
- +
- +# First Team - Name, Start/Death x,y,z location.
- +TvTEventTeam1Name = Team1
- +TvTEventTeam1Coordinates = 148695,46725,-3414
- +
- +# Second Team - Name, Start/Death x,y,z location.
- +TvTEventTeam2Name = Team2
- +TvTEventTeam2Coordinates = 149999,46728,-3414
- +
- +# Reward for winning team.
- +# Example: TvTEventReward = itemId,amount;itemId,amount;itemId,amount
- +TvTEventReward = 57,100000
- +
- +# TvTEvent Rules
- +TvTEventTargetTeamMembersAllowed = True
- +TvTEventScrollsAllowed = False
- +TvTEventPotionsAllowed = False
- +TvTEventSummonByItemAllowed = False
- +
- +# Door ID's to open/close on start/end.
- +# Not supported in instance, use xml template for defining doors.
- +# Example: TvTDoorsToOpen = 1;2;3;4;5;6
- +TvTDoorsToOpen =
- +TvTDoorsToClose =
- +
- +# Should both teams get reward if there's a tie?
- +TvTRewardTeamTie = False
- +
- +# Participant's effects handling on teleport/death.
- +# Effects lasting through death never removed.
- +# 0 - always remove all effects.
- +# 1 - remove all effects only during port to event (noblesse blessing can be used)
- +# 2 - never remove any effect
- +# Default: 0
- +TvTEventEffectsRemoval = 0
- +
- +# Fighter-class participants will be buffed with those buffs each respawn
- +# Format: skill1Id,skill1Level;skill2Id,skill2Level...
- +# Example: 1504,1;1501,1;1502,1;1499,1
- +TvTEventFighterBuffs =
- +
- +# Mage-class participants will be buffed with those buffs each respawn
- +# Format: skill1Id,skill1Level;skill2Id,skill2Level...
- +# Example: 1504,1;1500,1;1501,1;1085,3
- +TvTEventMageBuffs =
- +
- +# Maximum number of allowed participants per IP address (dualbox check)
- +# Default: 0 (no limits)
- +TvTEventMaxParticipantsPerIP = 0
- +
- +# Voiced command (.tvt) working during TVT event to get information about event status
- +TvTAllowVoicedInfoCommand = false
- +
- +
- +# ---------------------------------------------------------------------------
- +# L2J Banking System
- +# ---------------------------------------------------------------------------
- +
- +# Enable/Disable Banking System
- +BankingEnabled = False
- +
- +# Amount of Goldbars a player gets when they use the ".deposit" command. Also the same amount they will lose with ".withdraw".
- +BankingGoldbarCount = 1
- +
- +# Amount of Adena a player gets when they use the ".withdraw" command. Also the same amount they will lose with ".deposit".
- +BankingAdenaCount = 500000000
- +
- +
- +# ---------------------------------------------------------------------------
- +# Warehouse Sorting
- +# Shows Withdraw Window sorted by ItemType (Armor/Weapon/Spellbook....)
- +# ---------------------------------------------------------------------------
- +
- +EnableWarehouseSortingClan = False
- +EnableWarehouseSortingPrivate = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Offline trade/craft
- +# ---------------------------------------------------------------------------
- +
- +# Option to enable or disable offline trade feature.
- +# Enable -> true, Disable -> false
- +OfflineTradeEnable = False
- +
- +# Option to enable or disable offline craft feature.
- +# Enable -> true, Disable -> false
- +OfflineCraftEnable = False
- +
- +# If set to True, off-line shops will be possible only peace zones.
- +# Default: False
- +OfflineModeInPeaceZone = False
- +
- +# If set to True, players in off-line shop mode wont take any damage, thus they cannot be killed.
- +# Default: False
- +OfflineModeNoDamage = False
- +
- +# If set to True, name color will be changed then entering offline mode
- +OfflineSetNameColor = False
- +
- +# Color of the name in offline mode (if OfflineSetNameColor = True)
- +OfflineNameColor = 808080
- +
- +# Allow fame for characters in offline mode
- +# Enable -> true, Disable -> false
- +OfflineFame = True
- +
- +#Restore offline traders/crafters after restart/shutdown. Default: false.
- +RestoreOffliners = False
- +
- +#Do not restore offline characters, after OfflineMaxDays days spent from first restore.
- +#Require server restart to disconnect expired shops.
- +#0 = disabled (always restore).
- +#Default: 10
- +OfflineMaxDays = 10
- +
- +#Disconnect shop after finished selling, buying.
- +#Default: True
- +OfflineDisconnectFinished = True
- +
- +# ---------------------------------------------------------------------------
- +# Mana Drugs/Potions
- +# ---------------------------------------------------------------------------
- +
- +# This option will enable core support for:
- +# Mana Drug (item ID 726), using skill ID 10000.
- +# Mana Potion (item ID 728), using skill ID 10001.
- +EnableManaPotionSupport = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Display Server Time
- +# ---------------------------------------------------------------------------
- +
- +# This option will enable displaying of the local server time for /time command.
- +DisplayServerTime = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Welcome message
- +# ---------------------------------------------------------------------------
- +
- +# Show screen welcome message on character login
- +# Default: False
- +ScreenWelcomeMessageEnable = False
- +
- +# Screen welcome message text to show on character login if enabled
- +# ('#' for a new line, but message can have max 2 lines)
- +ScreenWelcomeMessageText = Welcome to L2J server!
- +
- +# Show screen welcome message for x seconds when character log in to game if enabled
- +ScreenWelcomeMessageTime = 10
- +
- +
- +# ---------------------------------------------------------------------------
- +# AntiFeed
- +# ---------------------------------------------------------------------------
- +
- +# This option will enable antifeed for pvp/pk/clanrep points.
- +# Default: False
- +AntiFeedEnable = False
- +
- +# If set to True, kills from dualbox will not increase pvp/pk points
- +# and clan reputation will not be transferred.
- +# Default: True
- +AntiFeedDualbox = True
- +
- +# If set to True, server will count disconnected (unable to determine ip address)
- +# as dualbox.
- +# Default: True
- +AntiFeedDisconnectedAsDualbox = True
- +
- +# If character died faster than timeout - pvp/pk points for killer will not increase
- +# and clan reputation will not be transferred.
- +# Setting to 0 will disable this feature.
- +# Default: 120 seconds.
- +AntiFeedInterval = 120
- +
- +
- +# ---------------------------------------------------------------------------
- +# Pvp/pk Announce
- +# ---------------------------------------------------------------------------
- +
- +# Default: False
- +AnnouncePkPvP = False
- +
- +# Announce this as normal system message
- +# Default: True
- +AnnouncePkPvPNormalMessage = True
- +
- +# PK message template
- +# variables: $killer, $target
- +AnnouncePkMsg = $killer has slaughtered $target
- +
- +# Pvp message template
- +# variables: $killer, $target
- +AnnouncePvpMsg = $killer has defeated $target
- +
- +
- +# ---------------------------------------------------------------------------
- +# Chat Moderation
- +# ---------------------------------------------------------------------------
- +
- +# This option will enable using of the voice commands .banchat and .unbanchat
- +# for players with corresponding access level (default: 7).
- +# Check access_levels.sql and admin_command_access_rights for details.
- +# Default: False
- +ChatAdmin = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Hellbound Status Voice Command
- +# ---------------------------------------------------------------------------
- +
- +# This option will enable using of the voice commands .hellbound
- +# for retrieving information about current Hellbound level and trust.
- +# Default: False
- +HellboundStatus = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Multilingual support
- +# ---------------------------------------------------------------------------
- +
- +# Enable or disable multilingual support.
- +# Default: False
- +MultiLangEnable = False
- +
- +# Default language, if not defined.
- +# Default: en
- +MultiLangDefault = en
- +
- +# List of allowed languages, semicolon separated.
- +# Default: en;ru
- +MultiLangAllowed = en;ru
- +
- +# Enable or disable voice command .lang for changing languages on the fly.
- +# Default: True
- +MultiLangVoiceCommand = True
- +
- +# Enable or disable multilingual SystemMessages support.
- +# Default: False
- +MultiLangSystemMessageEnable = False
- +
- +# List of allowed languages for SystemMessages, semicolon separated.
- +# Default:
- +MultiLangSystemMessageAllowed =
- +
- +# Enable or disable multilingual NpcStrings support.
- +# Default: False
- +MultiLangNpcStringEnable = False
- +
- +# List of allowed languages for NpcStrings, semicolon separated.
- +# Default:
- +MultiLangNpcStringAllowed =
- +
- +
- +# ---------------------------------------------------------------------------
- +# Walker/Bot protection
- +# ---------------------------------------------------------------------------
- +
- +# Basic protection against L2Walker.
- +# Default: False
- +L2WalkerProtection = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Debug enable/disable voice command
- +# ---------------------------------------------------------------------------
- +
- +# This option will enable voice command .debug allowing players
- +# to turn on/off debugging on self only.
- +# (admin command //debug can enable debugging on any character)
- +# Use admin_command_access_rights table for defining access rights.
- +# Default: False
- +DebugVoiceCommand = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Dualbox Check
- +# ---------------------------------------------------------------------------
- +
- +# Maximum number of players per IP address allowed to enter game.
- +# Default: 0 (unlimited)
- +DualboxCheckMaxPlayersPerIP = 0
- +
- +# Maximum number of players per IP address allowed to participate in olympiad.
- +# Default: 0 (unlimited)
- +DualboxCheckMaxOlympiadParticipantsPerIP = 0
- +
- +# Maximum number of players per IP address allowed to participate in events using L2J Event Engine (//event).
- +# Default: 0 (unlimited)
- +DualboxCheckMaxL2EventParticipantsPerIP = 0
- +
- +# Whitelist of the addresses for dualbox checks.
- +# Format: Address1,Number1;Address2,Number2...
- +# Network address can be number (127.0.0.1) or symbolic (localhost) formats.
- +# Additional connection number added to the global limits for this address.
- +# For example, if number of TvT event participants per IP address set to the 1 (no dualbox)
- +# and whitelist contains "l2jserver.com,2" then number of allowed participants from l2jserver.com
- +# will be 1+2=3. Use 0 or negative value for unlimited number of connections.
- +# Default: 127.0.0.1,0 (no limits from localhost)
- +DualboxCheckWhitelist = 127.0.0.1,0
- +
- +# ---------------------------------------------------------------------------
- +# Password Change
- +# ---------------------------------------------------------------------------
- +
- +# Enables .changepassword voiced command which allows the players to change their account's password ingame.
- +# Default: False
- +AllowChangePassword = False
- \ No newline at end of file
- diff --git a/dist/game/config/default/MMO.properties b/dist/game/config/default/MMO.properties
- new file mode 100644
- index 0000000..1882ae9
- --- /dev/null
- +++ b/dist/game/config/default/MMO.properties
- @@ -0,0 +1,24 @@
- +#---------------------------------------------------------------
- +# MMO
- +#---------------------------------------------------------------
- +
- +# Sleep time for all Selectors
- +# After he finished his job the Selector waits the given time in milliseconds
- +# Lower values will speed up the loop and the Ping is smaller
- +SleepTime = 20
- +
- +# Every loop it send a maximum of the given packages to each connection
- +# Lower values will speed up the loop and the Ping is smaller but cause less output
- +MaxSendPerPass = 12
- +
- +# Every loop it read a maximum of the given packages from each connection
- +# Lower values will speed up the loop and the Ping is smaller but cause less input
- +MaxReadPerPass = 12
- +
- +# Each unfinished read/write need a TEMP storage Buffer
- +# on large player amount we need more Buffers
- +# if there are not enough buffers new ones are generated but not stored for future usage
- +HelperBufferCount = 20
- +
- +# Setting this to True will lower your ping, at the cost of an increase in bandwidth consumption.
- +TcpNoDelay = False
- \ No newline at end of file
- diff --git a/dist/game/config/default/NPC.properties b/dist/game/config/default/NPC.properties
- new file mode 100644
- index 0000000..5ee254c
- --- /dev/null
- +++ b/dist/game/config/default/NPC.properties
- @@ -0,0 +1,218 @@
- +# ---------------------------------------------------------------------------
- +# NPC Settings
- +# ---------------------------------------------------------------------------
- +# This properties file is solely for the purpose of NPC modifications and settings that directly influence them.
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# General
- +# ---------------------------------------------------------------------------
- +
- +# Global announcements will be made indicating Blacksmith/Merchant of Mammon
- +# Spawning points.
- +# Default: False
- +AnnounceMammonSpawn = False
- +
- +# True - Mobs can be aggressive while in peace zones.
- +# False - Mobs can NOT be aggressive while in peace zones.
- +# Default: True
- +AltMobAgroInPeaceZone = True
- +
- +# Defines whether NPCs are attackable by default
- +# Retail: True
- +AltAttackableNpcs = True
- +
- +# Allows non-GM players to view NPC stats via shift-click
- +# Default: False
- +AltGameViewNpc = False
- +
- +# Maximum distance mobs can randomly go from spawn point.
- +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
- +# Default: 300
- +MaxDriftRange = 300
- +
- +# Default: False
- +ShowNpcLevel = False
- +
- +# Show clan, alliance crests for territory NPCs without quests
- +# Default: False
- +ShowCrestWithoutQuest = False
- +
- +# Custom random EnchantEffect
- +# All npcs with weapons get random weapon enchanted value
- +# Enchantment is only visual, range is 4-21
- +# Default: False
- +EnableRandomEnchantEffect = False
- +
- +# The minimum NPC level for the Gracia Epilogue rule:
- +# "The amount of damage inflicted on monsters will be lower if your character is 2 or more levels below that of the level 78+ monster."
- +# Notes:
- +# If you want to disable this feature then set it 99
- +# Default: 78
- +MinNPCLevelForDmgPenalty = 78
- +
- +# The penalty in percent for -2 till -5 level differences
- +# default:
- +# normal - 0.7, 0.6, 0.6, 0.55
- +# critical - 0.75, 0.65, 0.6, 0.58
- +# skill - 0.8, 0.7, 0.65, 0.62
- +DmgPenaltyForLvLDifferences = 0.7, 0.6, 0.6, 0.55
- +CritDmgPenaltyForLvLDifferences = 0.75, 0.65, 0.6, 0.58
- +SkillDmgPenaltyForLvLDifferences = 0.8, 0.7, 0.65, 0.62
- +
- +# The minimum NPC level for the Gracia Epilogue rule:
- +# "When a character's level is 3 or more levels lower than that of a monsters level the chance that the monster will be able to resist a magic spell will increase."
- +# Notes:
- +# If you want to disable this feature then set it 99
- +# Default: 78
- +MinNPCLevelForMagicPenalty = 78
- +
- +# The penalty in percent for -3 till -6 level differences
- +# Default: unknown
- +SkillChancePenaltyForLvLDifferences = 2.5, 3.0, 3.25, 3.5
- +
- +# ---------------------------------------------------------------------------
- +# Monsters
- +# ---------------------------------------------------------------------------
- +
- +# Decay Time Task (don't set it too low!) (in milliseconds):
- +# Default: 5000
- +DecayTimeTask = 5000
- +
- +# This is the default corpse time (in seconds).
- +# Default: 7
- +DefaultCorpseTime = 7
- +
- +# This is the time that will be added to spoiled corpse time (in seconds).
- +# Default: 10
- +SpoiledCorpseExtendTime = 10
- +
- +# The time allowed to use a corpse consume skill before the corpse decays.
- +# Default: 2000
- +CorpseConsumeSkillAllowedTimeBeforeDecay = 2000
- +
- +# ---------------------------------------------------------------------------
- +# Guards
- +# ---------------------------------------------------------------------------
- +
- +# True - Allows guards to attack aggressive mobs within range.
- +# Default: False
- +GuardAttackAggroMob = False
- +
- +
- +# ---------------------------------------------------------------------------
- +# Pets
- +# ---------------------------------------------------------------------------
- +
- +# This option enables or disables the Wyvern manager located in every castle
- +# to train Wyverns and Striders from Hatchlings.
- +# Default: False
- +AllowWyvernUpgrader = False
- +
- +# Pets that can be rented.
- +# Example: 30827, 32471, 34486, 36547
- +# Default: 30827
- +ListPetRentNpc = 30827
- +
- +# This will control the inventory space limit for pets (NOT WEIGHT LIMIT).
- +# Default: 12
- +MaximumSlotsForPet = 12
- +
- +# HP/MP Regen Multiplier for Pets
- +# Default: 100, 100
- +PetHpRegenMultiplier = 100
- +PetMpRegenMultiplier = 100
- +
- +# ---------------------------------------------------------------------------
- +# Raid Bosses
- +# ---------------------------------------------------------------------------
- +
- +# Percent of HP and MP regeneration for raid bosses.
- +# Example: Setting HP to 10 will cause raid boss HP to regenerate 90% slower than normal.
- +# Default: 100, 100
- +RaidHpRegenMultiplier = 100
- +RaidMpRegenMultiplier = 100
- +
- +# Percent of physical and magical defense for raid bosses.
- +# Example: A setting of 10 will cause defense to be 90% lower than normal,
- +# while 110 will cause defense to be 10% higher than normal.
- +# Default: 100, 100
- +RaidPDefenceMultiplier = 100
- +RaidMDefenceMultiplier = 100
- +
- +# Percent of physical and magical attack for raid bosses.
- +# Example: A setting of 10 will cause attack to be 90% lower than normal,
- +# while 110 will cause attack to be 10% higher than normal.
- +# Default: 100, 100
- +RaidPAttackMultiplier = 100
- +RaidMAttackMultiplier = 100
- +
- +# Configure Minimum and Maximum time multiplier between raid boss re-spawn.
- +# By default 12Hours*1.0 for Minimum Time and 24Hours*1.0 for Maximum Time.
- +# Example: Setting RaidMaxRespawnMultiplier to 2 will make the time between
- +# re-spawn 24 hours to 48 hours.
- +# Default: 1.0, 1.0
- +RaidMinRespawnMultiplier = 1.0
- +RaidMaxRespawnMultiplier = 1.0
- +
- +# Configure the interval at which raid boss minions will re-spawn.
- +# This time is in milliseconds, 1 minute is 60000 milliseconds.
- +# Default: 300000
- +RaidMinionRespawnTime = 300000
- +
- +# Let's make handling of minions with non-standard static respawn easier - no additional code, just config.
- +# Format: minionId1,timeInSec1;minionId2,timeInSec2
- +CustomMinionsRespawnTime = 22450,30;22371,120;22543,0;25545,0;22424,30;22425,30;22426,30;22427,30;22428,30;22429,30;22430,30;22432,30;22433,30;22434,30;22435,30;22436,30;22437,30;22438,30;25596,30;25605,0;25606,0;25607,0;25608,0
- +
- +# Disable Raid Curse if raid more than 8 levels lower.
- +# Caution: drop will be reduced or even absent if DeepBlue drop rules enabled.
- +# Default: False
- +DisableRaidCurse = False
- +
- +# Configure the interval at which raid bosses and minions wont reconsider their target
- +# This time is in seconds, 1 minute is 60 seconds.
- +# Default: 10,10,10
- +RaidChaosTime = 10
- +GrandChaosTime = 10
- +MinionChaosTime = 10
- +
- +# ---------------------------------------------------------------------------
- +# Drops
- +# ---------------------------------------------------------------------------
- +
- +# If True, activates bellow level gap rules for standard mobs:
- +# Default: True
- +UseDeepBlueDropRules = True
- +
- +# If True, activates bellow level gap rules for raid bosses:
- +# Default: True
- +UseDeepBlueDropRulesRaid = True
- +
- +
- +# The min and max level difference used for level gap calculation
- +# this is only for how many levels higher the player is than the monster
- +# Default: 8
- +DropAdenaMinLevelDifference=8
- +# Default: 15
- +DropAdenaMaxLevelDifference=15
- +
- +# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
- +# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
- +# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
- +# Default: 10
- +DropAdenaMinLevelGapChance=10
- +
- +# The min and max level difference used for level gap calculation
- +# this is only for how many levels higher the player is than the monster
- +# Default: 5
- +DropItemMinLevelDifference=5
- +# Default: 10
- +DropItemMaxLevelDifference=10
- +
- +# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
- +# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
- +# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
- +# Default: 10
- +DropItemMinLevelGapChance=10
- \ No newline at end of file
- diff --git a/dist/game/config/default/Olympiad.properties b/dist/game/config/default/Olympiad.properties
- new file mode 100644
- index 0000000..8940338
- --- /dev/null
- +++ b/dist/game/config/default/Olympiad.properties
- @@ -0,0 +1,166 @@
- +# ---------------------------------------------------------------------------
- +# Olympiad Settings
- +# ---------------------------------------------------------------------------
- +
- +# The defaults are set to be retail-like.
- +# If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything.
- +# Also please understand what you are changing before you do so on a live server.
- +# ---------------------------------------------------------------------------
- +
- +# Olympiad Start Time in Military hours Default 6pm (18)
- +# Default: 18
- +AltOlyStartTime = 18
- +
- +# Olympiad Start Time for Min's, Default 00 so at the start of the hour.
- +# Default: 00
- +AltOlyMin = 00
- +
- +# Maximum number of buffs.
- +# Default: 5
- +AltOlyMaxBuffs = 5
- +
- +# Olympiad Competition Period, Default 6 hours.
- +# (If set different, should be increment by 10mins)
- +# Default: 21600000
- +AltOlyCPeriod = 21600000
- +
- +# Olympiad Battle Period, Default 5 minutes.
- +# Default: 300000
- +AltOlyBattle = 300000
- +
- +# Olympiad Weekly Period, Default 1 week
- +# Used for adding points to nobles
- +# Default: 604800000
- +AltOlyWPeriod = 604800000
- +
- +# Olympiad Validation Period, Default 24 Hours.
- +# Default: 86400000
- +AltOlyVPeriod = 86400000
- +
- +# Points for reaching Noblesse for the first time
- +# Default: 10
- +AltOlyStartPoints = 10
- +
- +# Points every week
- +# Default: 10
- +AltOlyWeeklyPoints = 10
- +
- +# Required number of participants for the class based games
- +# Default: 11
- +AltOlyClassedParticipants = 11
- +
- +# Required number of participants for the non-class based games
- +# Default: 11
- +AltOlyNonClassedParticipants = 11
- +
- +# Required number of participants for the 3x3 teams games
- +# Default: 6
- +AltOlyTeamsParticipants = 6
- +
- +# Number used for displaying amount of registered participants, messages "Fewer than ..." or "More than ...".
- +# 0 for displaying digits instead of text phrase (old style).
- +# Default: 100
- +AltOlyRegistrationDisplayNumber = 100
- +
- +# Reward for the class based games
- +# Format: itemId1,itemNum1;itemId2,itemNum2...
- +# Default: 13722,50
- +AltOlyClassedReward = 13722,50
- +
- +# Reward for the non-class based games
- +# Format: itemId1,itemNum1;itemId2,itemNum2...
- +# Default: 13722,40
- +AltOlyNonClassedReward = 13722,40
- +
- +# Reward for the 3x3 teams games
- +# Format: itemId1,itemNum1;itemId2,itemNum2...
- +# Default: 13722,85
- +AltOlyTeamReward = 13722,85
- +
- +# ItemId used for exchanging to the points.
- +# Default: 13722
- +AltOlyCompRewItem = 13722
- +
- +# The minimal matches you need to participate to receive point rewards
- +# Default: 15
- +AltOlyMinMatchesForPoints = 15
- +
- +# Rate to exchange points to reward item.
- +# Default: 1000
- +AltOlyGPPerPoint = 1000
- +
- +# Noblesse points awarded to Heroes.
- +# Default: 200
- +AltOlyHeroPoints = 200
- +
- +# Noblesse points awarded to Rank 1 members.
- +# Default: 100
- +AltOlyRank1Points = 100
- +
- +# Noblesse points awarded to Rank 2 members.
- +# Default: 75
- +AltOlyRank2Points = 75
- +
- +# Noblesse points awarded to Rank 3 members.
- +# Default: 55
- +AltOlyRank3Points = 55
- +
- +# Noblesse points awarded to Rank 4 members.
- +# Default: 40
- +AltOlyRank4Points = 40
- +
- +# Noblesse points awarded to Rank 5 members.
- +# Default: 30
- +AltOlyRank5Points = 30
- +
- +# Maximum points that player can gain/lose on a match.
- +# Default: 10
- +AltOlyMaxPoints = 10
- +
- +# Hero tables show last month's winners or current status.
- +# Default: True
- +AltOlyShowMonthlyWinners = True
- +
- +# Olympiad Managers announce each start of fight.
- +# Default: True
- +AltOlyAnnounceGames = True
- +
- +# Restrict specified items in Olympiad. ItemID's need to be separated with a comma (ex. 1,200,350)
- +# Equipped items will be moved to inventory during port.
- +# Default: 6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,9388,9389,9390,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,20759,20775,20776,20777,20778,14774
- +AltOlyRestrictedItems = 6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,9388,9389,9390,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,20759,20775,20776,20777,20778,14774
- +
- +# Enchant limit for items during Olympiad battles. Disabled = -1.
- +# Default: -1
- +AltOlyEnchantLimit = -1
- +
- +# Log all Olympiad fights and outcome to olympiad.csv file.
- +# Default: False
- +AltOlyLogFights = False
- +
- +# Time to wait before teleported to arena.
- +# Default: 120
- +AltOlyWaitTime = 120
- +
- +# Divider for points in classed and non-classed games
- +# Default: 5, 5
- +AltOlyDividerClassed = 5
- +AltOlyDividerNonClassed = 5
- +
- +# Maximum number of matches a Noblesse character can join per week
- +# Default: 70
- +AltOlyMaxWeeklyMatches = 70
- +
- +# Maximum number of Class-Irrelevant Individual matches a character can join per week
- +# Default: 60
- +AltOlyMaxWeeklyMatchesNonClassed = 60
- +
- +# Maximum number of Class Individual matches a character can join per week
- +# Default: 30
- +AltOlyMaxWeeklyMatchesClassed = 30
- +
- +# Maximum number of Class-Irrelevant Team matches a character can join per week
- +# Default: 10
- +AltOlyMaxWeeklyMatchesTeam = 10
- \ No newline at end of file
- diff --git a/dist/game/config/default/PVP.properties b/dist/game/config/default/PVP.properties
- new file mode 100644
- index 0000000..b9a6ab4
- --- /dev/null
- +++ b/dist/game/config/default/PVP.properties
- @@ -0,0 +1,43 @@
- +# ---------------------------------------------------------------------------
- +# PvP Related Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +# ---------------------------------------------------------------------------
- +# PK'er Drop Settings
- +# ---------------------------------------------------------------------------
- +
- +# Default: False
- +CanGMDropEquipment = False
- +
- +# Warning: Make sure the lists do NOT CONTAIN
- +# trailing spaces or spaces between the numbers!
- +# List of pet items we cannot drop.
- +# Default: 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
- +ListOfPetItems = 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
- +
- +# Lists of items which should NEVER be dropped (note, Adena will
- +# never be dropped) whether on this list or not
- +# Default: 57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390
- +ListOfNonDroppableItems = 57,1147,425,1146,461,10,2368,7,6,2370,2369,6842,6611,6612,6613,6614,6615,6616,6617,6618,6619,6620,6621,7694,8181,5575,7694,9388,9389,9390
- +
- +# Default: 6
- +MinimumPKRequiredToDrop = 6
- +
- +
- +# ---------------------------------------------------------------------------
- +# Misc.
- +# ---------------------------------------------------------------------------
- +
- +# Should we award a pvp point for killing a player with karma?
- +# Default: False
- +AwardPKKillPVPPoint = False
- +
- +# How much time one stays in PvP mode after hitting an innocent (in ms)
- +# Default: 120000
- +PvPVsNormalTime = 120000
- +
- +# Length one stays in PvP mode after hitting a purple player (in ms)
- +# Default: 60000
- +PvPVsPvPTime = 60000
- \ No newline at end of file
- diff --git a/dist/game/config/default/Rates.properties b/dist/game/config/default/Rates.properties
- new file mode 100644
- index 0000000..909c6a9
- --- /dev/null
- +++ b/dist/game/config/default/Rates.properties
- @@ -0,0 +1,166 @@
- +# ---------------------------------------------------------------------------
- +# Rate Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# Item Rates
- +# ---------------------------------------------------------------------------
- +# Warning: Remember if you increase both chance and amount you will have higher rates than expected
- +# Example: if amount multiplier is 5 and chance multiplier is 5 you will end up with 5*5 = 25 drop rates so be careful!
- +
- +
- +# Multiplies the amount of items dropped from monster on ground when it dies.
- +DeathDropAmountMultiplier = 1
- +# Multiplies the amount of items looted from monster when a skill like Sweeper(Spoil) is used.
- +CorpseDropAmountMultiplier = 1
- +# Multiplies the amount of items dropped from monster on ground when it dies.
- +HerbDropAmountMultiplier = 1
- +RaidDropAmountMultiplier = 1
- +
- +# Multiplies the chance of items that can be dropped from monster on ground when it dies.
- +DeathDropChanceMultiplier = 1
- +# Multiplies the chance of items that can be looted from monster when a skill like Sweeper(Spoil) is used.
- +CorpseDropChanceMultiplier = 1
- +# Multiplies the chance of items that can be dropped from monster on ground when it dies.
- +HerbDropChanceMultiplier = 1
- +RaidDropChanceMultiplier = 1
- +
- +# List of items affected by custom drop rate by id, used now for Adena rate too.
- +# Usage: itemId1,multiplier1;itemId2,multiplier2;...
- +# Note: Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
- +# Example for Raid boss 1x jewelry: 6656,1;6657,1;6658,1;6659,1;6660,1;6661,1;6662,1;8191,1;10170,1;10314,1;
- +# Default: 57,1
- +DropAmountMultiplierByItemId = 57,1
- +DropChanceMultiplierByItemId = 57,1
- +
- +
- +# ---------------------------------------------------------------------------
- +# Standard Settings (Retail value = 1)
- +# ---------------------------------------------------------------------------
- +
- +
- +# Experience multiplier
- +RateXp = 1
- +# Skill points multiplier
- +RateSp = 1
- +# Experience multiplier (Party)
- +RatePartyXp = 1
- +# Skill points multiplier (Party)
- +RatePartySp = 1
- +RateDropManor = 1
- +# Karma decreasing rate
- +# Note: -1 means RateXp so it means it will use retail rate for decreasing karma upon death or receiving exp by farming mobs.
- +# Default: -1
- +RateKarmaLost = -1
- +RateKarmaExpLost = 1
- +RateSiegeGuardsPrice = 1
- +
- +# Modify the rate of reward of all extractable items and skills.
- +# Default: 1.
- +RateExtractable = 1.
- +
- +# Hellbound trust increase/decrease multipliers
- +RateHellboundTrustIncrease = 1
- +RateHellboundTrustDecrease = 1
- +
- +# Quest Multipliers
- +# Warning: Many quests need to be rewritten
- +# for this setting to work properly.
- +
- +# Quest item drop multiplier
- +RateQuestDrop = 1
- +
- +# Exp/SP reward multipliers
- +RateQuestRewardXP = 1
- +RateQuestRewardSP = 1
- +
- +# Adena reward multiplier
- +RateQuestRewardAdena = 1
- +
- +# Use additional item multipliers?
- +# Default: False
- +UseQuestRewardMultipliers = False
- +
- +# Default reward multiplier
- +# When UseRewardMultipliers=False - default multiplier is used for any reward
- +# When UseRewardMultipliers=True - default multiplier is used for all items not affected by additional multipliers
- +# Default: 1
- +RateQuestReward = 1
- +
- +# Additional quest-reward multipliers based on item type
- +RateQuestRewardPotion = 1
- +RateQuestRewardScroll = 1
- +RateQuestRewardRecipe = 1
- +RateQuestRewardMaterial = 1
- +
- +# ---------------------------------------------------------------------------
- +# Vitality system rates. Works only if EnableVitality = True
- +# ---------------------------------------------------------------------------
- +
- +# The following configures the XP multiplier of each vitality level. Basically, you have
- +# 5 levels, the first one being 0. Official rates are:
- +# Level 1: 150%
- +# Level 2: 200%
- +# Level 3: 250%
- +# Level 4: 300%
- +# Take care setting these values according to your server rates, as the can lead to huge differences!
- +# Example with a server rate 15x and a level 4 vitality = 3. => final server rate = 45 (15x3)!
- +RateVitalityLevel1 = 1.5
- +RateVitalityLevel2 = 2.
- +RateVitalityLevel3 = 2.5
- +RateVitalityLevel4 = 3.
- +
- +# These options are to be used if you want to increase the vitality gain/lost for each mob you kills
- +# Default values are 1.
- +RateVitalityGain = 1.
- +RateVitalityLost = 1.
- +
- +# This defines how many times faster do the players regain their vitality when in peace zones
- +RateRecoveryPeaceZone = 1.
- +
- +# This defines how many times faster do the players regain their vitality when offline
- +# Note that you need to turn on "RecoverVitalityOnReconnect" to have this option effective
- +RateRecoveryOnReconnect = 4.
- +
- +
- +# ---------------------------------------------------------------------------
- +# Player Drops (values are set in PERCENTS)
- +# ---------------------------------------------------------------------------
- +
- +PlayerDropLimit = 0
- +# in %
- +PlayerRateDrop = 0
- +# in %
- +PlayerRateDropItem = 0
- +# in %
- +PlayerRateDropEquip = 0
- +# in %
- +PlayerRateDropEquipWeapon = 0
- +
- +# Default: 10
- +KarmaDropLimit = 10
- +
- +# Default: 40
- +KarmaRateDrop = 40
- +
- +# Default: 50
- +KarmaRateDropItem = 50
- +
- +# Default: 40
- +KarmaRateDropEquip = 40
- +
- +# Default: 10
- +KarmaRateDropEquipWeapon = 10
- +
- +
- +# ---------------------------------------------------------------------------
- +# Pets (Default value = 1)
- +# ---------------------------------------------------------------------------
- +
- +PetXpRate = 1
- +PetFoodRate = 1
- +SinEaterXpRate = 1
- +
- diff --git a/dist/game/config/default/SecondaryAuth.xml b/dist/game/config/default/SecondaryAuth.xml
- new file mode 100644
- index 0000000..b5c8476
- --- /dev/null
- +++ b/dist/game/config/default/SecondaryAuth.xml
- @@ -0,0 +1,338 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../data/xsd/SecondaryAuth.xsd">
- + <enabled>false</enabled> <!-- Enable Secondary Authentication on Character Select -->
- + <maxAttempts>5</maxAttempts> <!-- Max Attempts for Second Auth Password (0 to disable) -->
- + <banTime>480</banTime> <!-- Ban time if user reach maxAttempts (in minutes) -->
- + <recoveryLink>http://www.example.com/l2j/charPassRec.php</recoveryLink> <!-- Password Recovery Link -->
- + <forbiddenPasswords> <!-- List of forbidden passwords -->
- + <!-- Client checks for the entries below so you should not remove or edit any of these just add more -->
- + <password>000000</password>
- + <password>111111</password>
- + <password>222222</password>
- + <password>333333</password>
- + <password>444444</password>
- + <password>555555</password>
- + <password>666666</password>
- + <password>777777</password>
- + <password>888888</password>
- + <password>999999</password>
- + <password>123456</password>
- + <password>234567</password>
- + <password>345678</password>
- + <password>456789</password>
- + <password>567890</password>
- + <password>012345</password>
- + <password>098765</password>
- + <password>987654</password>
- + <password>876543</password>
- + <password>765432</password>
- + <password>543210</password>
- + <password>010101</password>
- + <password>020202</password>
- + <password>030303</password>
- + <password>040404</password>
- + <password>050505</password>
- + <password>060606</password>
- + <password>070707</password>
- + <password>080808</password>
- + <password>090909</password>
- + <password>121212</password>
- + <password>131313</password>
- + <password>141414</password>
- + <password>151515</password>
- + <password>161616</password>
- + <password>171717</password>
- + <password>181818</password>
- + <password>191919</password>
- + <password>101010</password>
- + <password>212121</password>
- + <password>232323</password>
- + <password>242424</password>
- + <password>252525</password>
- + <password>262626</password>
- + <password>272727</password>
- + <password>282828</password>
- + <password>292929</password>
- + <password>202020</password>
- + <password>313131</password>
- + <password>323232</password>
- + <password>343434</password>
- + <password>353535</password>
- + <password>363636</password>
- + <password>373737</password>
- + <password>383838</password>
- + <password>393939</password>
- + <password>303030</password>
- + <password>404040</password>
- + <password>414141</password>
- + <password>424242</password>
- + <password>434343</password>
- + <password>454545</password>
- + <password>464646</password>
- + <password>474747</password>
- + <password>484848</password>
- + <password>494949</password>
- + <password>505050</password>
- + <password>515151</password>
- + <password>525252</password>
- + <password>535353</password>
- + <password>545454</password>
- + <password>565656</password>
- + <password>575757</password>
- + <password>585858</password>
- + <password>595959</password>
- + <password>606060</password>
- + <password>616161</password>
- + <password>626262</password>
- + <password>636363</password>
- + <password>646464</password>
- + <password>656565</password>
- + <password>676767</password>
- + <password>686868</password>
- + <password>696969</password>
- + <password>707070</password>
- + <password>717171</password>
- + <password>727272</password>
- + <password>737373</password>
- + <password>747474</password>
- + <password>757575</password>
- + <password>767676</password>
- + <password>787878</password>
- + <password>797979</password>
- + <password>808080</password>
- + <password>818181</password>
- + <password>828282</password>
- + <password>838383</password>
- + <password>848484</password>
- + <password>858585</password>
- + <password>868686</password>
- + <password>878787</password>
- + <password>898989</password>
- + <password>909090</password>
- + <password>919191</password>
- + <password>929292</password>
- + <password>939393</password>
- + <password>949494</password>
- + <password>959595</password>
- + <password>969696</password>
- + <password>979797</password>
- + <password>989898</password>
- + <password>0000000</password>
- + <password>1111111</password>
- + <password>2222222</password>
- + <password>3333333</password>
- + <password>4444444</password>
- + <password>5555555</password>
- + <password>6666666</password>
- + <password>7777777</password>
- + <password>8888888</password>
- + <password>9999999</password>
- + <password>0123456</password>
- + <password>1234567</password>
- + <password>2345678</password>
- + <password>3456789</password>
- + <password>4567890</password>
- + <password>0987654</password>
- + <password>9876543</password>
- + <password>8765432</password>
- + <password>7654321</password>
- + <password>6543210</password>
- + <password>0101010</password>
- + <password>0202020</password>
- + <password>0303030</password>
- + <password>0404040</password>
- + <password>0505050</password>
- + <password>0606060</password>
- + <password>0707070</password>
- + <password>0808080</password>
- + <password>0909090</password>
- + <password>1212121</password>
- + <password>1313131</password>
- + <password>1414141</password>
- + <password>1515151</password>
- + <password>1616161</password>
- + <password>1717171</password>
- + <password>1818181</password>
- + <password>1919191</password>
- + <password>1010101</password>
- + <password>2020202</password>
- + <password>2121212</password>
- + <password>2323232</password>
- + <password>2424242</password>
- + <password>2525252</password>
- + <password>2626262</password>
- + <password>2727272</password>
- + <password>2828282</password>
- + <password>2929292</password>
- + <password>3030303</password>
- + <password>3131313</password>
- + <password>3232323</password>
- + <password>3434343</password>
- + <password>3535353</password>
- + <password>3636363</password>
- + <password>3737373</password>
- + <password>3838383</password>
- + <password>3939393</password>
- + <password>4040404</password>
- + <password>4141414</password>
- + <password>4242424</password>
- + <password>4343434</password>
- + <password>4545454</password>
- + <password>4646464</password>
- + <password>4747474</password>
- + <password>4848484</password>
- + <password>4949494</password>
- + <password>5050505</password>
- + <password>5151515</password>
- + <password>5252525</password>
- + <password>5353535</password>
- + <password>5454545</password>
- + <password>5656565</password>
- + <password>5757575</password>
- + <password>5858585</password>
- + <password>5959595</password>
- + <password>6060606</password>
- + <password>6161616</password>
- + <password>6262626</password>
- + <password>6363636</password>
- + <password>6464646</password>
- + <password>6565656</password>
- + <password>6767676</password>
- + <password>6868686</password>
- + <password>6969696</password>
- + <password>7070707</password>
- + <password>7171717</password>
- + <password>7272727</password>
- + <password>7373737</password>
- + <password>7474747</password>
- + <password>7575757</password>
- + <password>7676767</password>
- + <password>7878787</password>
- + <password>7979797</password>
- + <password>8080808</password>
- + <password>8181818</password>
- + <password>8282828</password>
- + <password>8383838</password>
- + <password>8484848</password>
- + <password>8585858</password>
- + <password>8686868</password>
- + <password>8787878</password>
- + <password>8989898</password>
- + <password>9090909</password>
- + <password>9191919</password>
- + <password>9292929</password>
- + <password>9393939</password>
- + <password>9494949</password>
- + <password>9595959</password>
- + <password>9696969</password>
- + <password>9797979</password>
- + <password>9898989</password>
- + <password>00000000</password>
- + <password>11111111</password>
- + <password>22222222</password>
- + <password>33333333</password>
- + <password>44444444</password>
- + <password>55555555</password>
- + <password>66666666</password>
- + <password>77777777</password>
- + <password>88888888</password>
- + <password>99999999</password>
- + <password>12345678</password>
- + <password>23456789</password>
- + <password>34567890</password>
- + <password>01234567</password>
- + <password>98765432</password>
- + <password>87654321</password>
- + <password>76543210</password>
- + <password>01010101</password>
- + <password>02020202</password>
- + <password>03030303</password>
- + <password>04040404</password>
- + <password>05050505</password>
- + <password>06060606</password>
- + <password>07070707</password>
- + <password>08080808</password>
- + <password>09090909</password>
- + <password>10101010</password>
- + <password>12121212</password>
- + <password>13131313</password>
- + <password>14141414</password>
- + <password>15151515</password>
- + <password>16161616</password>
- + <password>17171717</password>
- + <password>18181818</password>
- + <password>19191919</password>
- + <password>20202020</password>
- + <password>21212121</password>
- + <password>23232323</password>
- + <password>24242424</password>
- + <password>25252525</password>
- + <password>26262626</password>
- + <password>27272727</password>
- + <password>28282828</password>
- + <password>29292929</password>
- + <password>30303030</password>
- + <password>31313131</password>
- + <password>32323232</password>
- + <password>34343434</password>
- + <password>35353535</password>
- + <password>36363636</password>
- + <password>37373737</password>
- + <password>38383838</password>
- + <password>39393939</password>
- + <password>40404040</password>
- + <password>41414141</password>
- + <password>42424242</password>
- + <password>43434343</password>
- + <password>45454545</password>
- + <password>46464646</password>
- + <password>47474747</password>
- + <password>48484848</password>
- + <password>49494949</password>
- + <password>50505050</password>
- + <password>51515151</password>
- + <password>52525252</password>
- + <password>53535353</password>
- + <password>54545454</password>
- + <password>56565656</password>
- + <password>57575757</password>
- + <password>58585858</password>
- + <password>59595959</password>
- + <password>60606060</password>
- + <password>61616161</password>
- + <password>62626262</password>
- + <password>63636363</password>
- + <password>64646464</password>
- + <password>65656565</password>
- + <password>67676767</password>
- + <password>68686868</password>
- + <password>69696969</password>
- + <password>70707070</password>
- + <password>71717171</password>
- + <password>72727272</password>
- + <password>73737373</password>
- + <password>74747474</password>
- + <password>75757575</password>
- + <password>76767676</password>
- + <password>78787878</password>
- + <password>79797979</password>
- + <password>80808080</password>
- + <password>81818181</password>
- + <password>82828282</password>
- + <password>83838383</password>
- + <password>84848484</password>
- + <password>85858585</password>
- + <password>86868686</password>
- + <password>87878787</password>
- + <password>89898989</password>
- + <password>90909090</password>
- + <password>91919191</password>
- + <password>92929292</password>
- + <password>93939393</password>
- + <password>94949494</password>
- + <password>95959595</password>
- + <password>96969696</password>
- + <password>97979797</password>
- + <password>98989898</password>
- + </forbiddenPasswords>
- +</list>
- \ No newline at end of file
- diff --git a/dist/game/config/default/Server.properties b/dist/game/config/default/Server.properties
- new file mode 100644
- index 0000000..79d6934
- --- /dev/null
- +++ b/dist/game/config/default/Server.properties
- @@ -0,0 +1,136 @@
- +# ---------------------------------------------------------------------------
- +# Game Server Settings
- +# ---------------------------------------------------------------------------
- +# This is the server configuration file. Here you can set up the connection information for your server.
- +# This was written with the assumption that you are behind a router.
- +# Dumbed Down Definitions...
- +# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
- +# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
- +# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
- +
- +# ---------------------------------------------------------------------------
- +# Networking
- +# ---------------------------------------------------------------------------
- +
- +# Enables automatic port mapping for game server.
- +# If you have a router game server will request for port forwarding.
- +# Default: True
- +EnableUPnP = True
- +
- +# Where's the Login server this gameserver should connect to
- +# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
- +# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
- +# Default: 127.0.0.1
- +LoginHost = 127.0.0.1
- +
- +# TCP port the login server listen to for gameserver connection requests
- +# Default: 9014
- +LoginPort = 9014
- +
- +# Bind address for gameserver. You should not need to change it in most cases.
- +# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
- +# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
- +# Default: * (0.0.0.0)
- +GameserverHostname = *
- +
- +# Default: 7777
- +GameserverPort = 7777
- +
- +
- +# ---------------------------------------------------------------------------
- +# Database
- +# ---------------------------------------------------------------------------
- +# Database Engine
- +# Available: MySQL, MariaDB
- +# Default: MySQL
- +Database = MySQL
- +
- +# Specify the appropriate driver and url for the database you're using.
- +# Examples:
- +# Driver = com.mysql.jdbc.Driver
- +# Driver = org.hsqldb.jdbcDriver
- +# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
- +# Driver = org.mariadb.jdbc.Driver
- +# Default: com.mysql.jdbc.Driver
- +Driver = com.mysql.jdbc.Driver
- +# Database URL
- +# URL = jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
- +# URL = jdbc:hsqldb:hsql://localhost/l2jgs
- +# URL = jdbc:sqlserver://localhost/database = l2jgs/user = sa/password =
- +# URL = jdbc:mariadb://localhost/l2jgs
- +# Default: jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
- +URL = jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
- +# Database user info (default is "root" but it's not recommended)
- +Login = root
- +# Database connection password
- +Password = toor
- +
- +# Database Connection Pool
- +# Default: HikariCP
- +# Available: BoneCP, C3P0, HikariCP
- +ConnectionPool = HikariCP
- +
- +# Default: 100
- +MaximumDbConnections = 100
- +
- +# Default: 0
- +MaximumDbIdleTime = 0
- +
- +# ---------------------------------------------------------------------------
- +# Misc Server Settings
- +# ---------------------------------------------------------------------------
- +
- +# This is the server ID that the Game Server will request.
- +# Example: 1 = Bartz
- +# Default: 1
- +RequestServerID = 1
- +
- +# True = The Login Server will give an other ID to the server if the requested ID is already reserved.
- +# Default: True
- +AcceptAlternateID = True
- +
- +# Datapack root directory.
- +# Defaults to current directory from which the server is started unless the below line is uncommented.
- +# WARNING: <u><b><font color="red">If the specified path is invalid, it will lead to multiple errors!</font></b></u>
- +#Default: .
- +DatapackRoot = .
- +
- +# Define how many players are allowed to play simultaneously on your server.
- +# Default: 500
- +MaximumOnlineUsers = 500
- +
- +# Numbers of protocol revisions that server allows to connect.
- +# Delimiter is ;
- +# WARNING: <u><b><font color="red">Changing the protocol revision may result in incompatible communication and many errors in game!</font></b></u>
- +# Default: 267;268;271;273
- +AllowedProtocolRevisions = 267;268;271;273
- +
- +
- +# ---------------------------------------------------------------------------
- +# Misc Player Settings
- +# ---------------------------------------------------------------------------
- +
- +# Player name template.
- +# Examples:
- +# PlayerNameTemplate = [A-Z][a-z]{3,3}[A-Za-z0-9]*
- +# The above setting will allow names with first capital letter, next three small letters,
- +# and any letter (case insensitive) or number, like OmfgWTF1
- +# PlayerNameTemplate = [A-Z][a-z]*
- +# The above setting will allow names only of letters with first one capital, like Omfgwtf
- +# The default forces start with a letter and continues either with letters or numbers.
- +# Default: [a-zA-Z0-9]*
- +PlayerNameTemplate = [a-zA-Z0-9]*
- +
- +# This setting restricts names players can give to their pets.
- +# See CnameTemplate for details
- +# Default: [a-zA-Z0-9]*
- +PetNameTemplate = [a-zA-Z0-9]*
- +
- +# This setting restricts clan/subpledge names players can set.
- +# See CnameTemplate for details
- +# Default: [a-zA-Z0-9]+
- +ClanNameTemplate = [a-zA-Z0-9]*
- +
- +# Maximum number of characters per account.
- +# Default: 7 (client limit)
- +CharMaxNumber = 7
- \ No newline at end of file
- diff --git a/dist/game/config/default/Server_APP_Args.txt b/dist/game/config/default/Server_APP_Args.txt
- new file mode 100644
- index 0000000..e69de29
- --- /dev/null
- +++ b/dist/game/config/default/Server_APP_Args.txt
- diff --git a/dist/game/config/default/Server_JVM_Args.txt b/dist/game/config/default/Server_JVM_Args.txt
- new file mode 100644
- index 0000000..c0f2ac3
- --- /dev/null
- +++ b/dist/game/config/default/Server_JVM_Args.txt
- @@ -0,0 +1,3 @@
- +-Dpython.cachedir=../cachedir
- +-Xms1024m
- +-Xmx1792m
- \ No newline at end of file
- diff --git a/dist/game/config/default/Siege.properties b/dist/game/config/default/Siege.properties
- new file mode 100644
- index 0000000..e188432
- --- /dev/null
- +++ b/dist/game/config/default/Siege.properties
- @@ -0,0 +1,130 @@
- +# ---------------------------------------------------------------------------
- +# Siege Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# Standard Settings
- +# ---------------------------------------------------------------------------
- +
- +# Length of siege before the count down (in minutes).
- +# Default: 120
- +SiegeLength = 120
- +
- +# Maximum number of flags per clan.
- +# Default: 1
- +MaxFlags = 1
- +
- +# Minimum level to register.
- +# Default: 5
- +SiegeClanMinLevel = 5
- +
- +# Max number of clans that can register on each side.
- +# Default: 500
- +AttackerMaxClans = 500
- +
- +# Default: 500
- +DefenderMaxClans = 500
- +
- +# Respawn times (in milliseconds).
- +# Default: 0
- +AttackerRespawn = 0
- +
- +# Reward successful siege defense with blood alliance in clan warehouse
- +# Default: 1
- +BloodAllianceReward = 1
- +
- +
- +# ---------------------------------------------------------------------------
- +# Castle Control Tower Spawns
- +# ---------------------------------------------------------------------------
- +
- +# Caste Artifacts and Control Towers spawns
- +#
- +# Control Towers syntax: NameControlTowerN=x,y,z,npc_id,hp
- +# Name - castle name
- +# N - number
- +# x,y,z - coords
- +# npc_id - id of template
- +#
- +# Flame Towers syntax: NameFlameTowerN=x,y,z,npc_id,hp,zoneIds
- +# Name - castle name
- +# N - number
- +# x,y,z - coords
- +# npc_id - id of template
- +# zoneIds - ids of zones related with tower
- +#
- +
- +# Gludio
- +GludioFlameTower1=-18154,107591,-2560,13004,70017,70019
- +GludioFlameTower2=-19329,108154,-2384,13004,70018,70020
- +GludioControlTower1=-18325,112811,-2377,13002
- +GludioControlTower2=-18048,107098,-2378,13002
- +GludioControlTower3=-18113,108597,-2343,13002
- +GludioMaxMercenaries = 100
- +
- +# Giran
- +GiranFlameTower1=118331,145055,-2627,13004,70025,70027
- +GiranFlameTower2=117768,143880,-2451,13004,70026,70028
- +GiranControlTower1=113115,144829,-2446,13002
- +GiranControlTower2=118828,145106,-2447,13002
- +GiranControlTower3=117329,145041,-2412,13002
- +GiranMaxMercenaries = 200
- +
- +# Dion
- +DionFlameTower1=22114,162159,-2754,13004,70021,70023
- +DionFlameTower2=23289,161596,-2578,13004,70022,70024
- +DionControlTower1=22285,156939,-2571,13002
- +DionControlTower2=22008,162652,-2572,13002
- +DionControlTower3=22073,161153,-2537,13002
- +DionMaxMercenaries = 150
- +
- +# Oren
- +OrenFlameTower1=84407,37150,-2354,13004,70029,70031
- +OrenFlameTower2=83844,35975,-2178,13004,70030,70032
- +OrenControlTower1=79193,36977,-2167,13002
- +OrenControlTower2=84906,37254,-2168,13002
- +OrenControlTower3=83407,37189,-2133,13002
- +OrenMaxMercenaries = 300
- +
- +# Aden
- +AdenFlameTower1=149976,1583,-450,13004,70008,70016,70007,70015,70006,70014,70005,70013
- +AdenFlameTower2=144955,1603,-450,13004,70004,70012,70003,70011,70002,70010,70001,70009
- +AdenControlTower1=148774,2351,-389,13002
- +AdenControlTower2=147456,5724,158,13002
- +AdenControlTower3=146137,2352,-389,13002
- +AdenMaxMercenaries = 400
- +
- +# Innadril
- +InnadrilFlameTower1=116065,250938,-850,13004,70033,70035
- +InnadrilFlameTower2=117240,250375,-674,13004,70034,70036
- +InnadrilControlTower1=116236,245718,-667,13002
- +InnadrilControlTower2=115959,251431,-667,13002
- +InnadrilControlTower3=116024,249932,-633,13002
- +InnadrilMaxMercenaries = 400
- +
- +# Goddard
- +GoddardFlameTower1=148144,-46992,-1609,13004,70037,70039
- +GoddardFlameTower2=146784,-46992,-1609,13004,70038,70040
- +GoddardControlTower1=144672,-48832,-1742,13002
- +GoddardControlTower2=150240,-48832,-1742,13002
- +GoddardControlTower3=147456,-49200,-1619,13002
- +GoddardMaxMercenaries = 400
- +
- +# Rune
- +RuneFlameTower1=12864,-47440,-1087,13004,70041,70043
- +RuneFlameTower2=12225,-50767,1248,13004,70042,70044
- +RuneControlTower1=16565,-50318,-641,13002
- +RuneControlTower2=16559,-48000,-641,13002
- +RuneControlTower3=10775,-48481,83,13002
- +RuneMaxMercenaries = 400
- +
- +# Schuttgart
- +SchuttgartFlameTower1=76872,-151043,120,13004,70045,70047
- +SchuttgartFlameTower2=78233,-151037,120,13004,70046,70048
- +SchuttgartControlTower1=80334,-152898,-8,13002
- +SchuttgartControlTower2=74775,-152928,-8,13002
- +SchuttgartControlTower3=77547,-153246,112,13002
- +SchuttgartMaxMercenaries = 400
- diff --git a/dist/game/config/default/SiegeSchedule.xml b/dist/game/config/default/SiegeSchedule.xml
- new file mode 100644
- index 0000000..2e2b6ad
- --- /dev/null
- +++ b/dist/game/config/default/SiegeSchedule.xml
- @@ -0,0 +1,5 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../data/xsd/SiegeSchedule.xsd">
- + <schedule day="SUNDAY" hour="16" maxConcurrent="5" />
- + <schedule day="SUNDAY" hour="20" maxConcurrent="5" />
- +</list>
- \ No newline at end of file
- diff --git a/dist/game/config/default/Telnet.properties b/dist/game/config/default/Telnet.properties
- new file mode 100644
- index 0000000..f375cc8
- --- /dev/null
- +++ b/dist/game/config/default/Telnet.properties
- @@ -0,0 +1,28 @@
- +# ---------------------------------------------------------------------------
- +# Telnet Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +# ---------------------------------------------------------------------------
- +
- +# Allows text based monitoring and administration of L2J GS
- +# by using a telnet client. Communication protocol is insecure
- +# and you should use SSL tunnels, VPN, etc. if you plan to connect
- +# over non-trusted channels.
- +# Default: False
- +EnableTelnet = False
- +
- +# This is the port L2J should listen to for incoming telnet
- +# requests.
- +# Default: 54321
- +StatusPort = 54321
- +
- +# If the following is not set, a random password is generated on server startup.
- +# Usage: StatusPW = somePass
- +StatusPW =
- +
- +# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
- +# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
- +# Default: 127.0.0.1,localhost
- +ListOfHosts = 127.0.0.1,localhost
- \ No newline at end of file
- diff --git a/dist/game/config/default/TerritoryWar.properties b/dist/game/config/default/TerritoryWar.properties
- new file mode 100644
- index 0000000..ce04ff6
- --- /dev/null
- +++ b/dist/game/config/default/TerritoryWar.properties
- @@ -0,0 +1,53 @@
- +# ---------------------------------------------------------------------------
- +# TerritoryWar Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +
- +# ---------------------------------------------------------------------------
- +# Standard Settings
- +# ---------------------------------------------------------------------------
- +
- +# Length of siege before the count down (in minutes).
- +# Default: 120
- +WarLength = 120
- +
- +# Clan Minimum level to register.
- +# Default: 0
- +ClanMinLevel = 0
- +
- +# Player Minimum level to register.
- +# Default: 40
- +PlayerMinLevel = 40
- +
- +# Max number of clans and players that can register for a side.
- +# Default: 500
- +DefenderMaxClans = 500
- +
- +# Default: 500
- +DefenderMaxPlayers = 500
- +
- +# Is Ward holding players can be attacked and killed in peace zone
- +# Default: False
- +PlayerWithWardCanBeKilledInPeaceZone = False
- +
- +# Spawn wards in Castles when Territory War is not in progress
- +# Default: False
- +SpawnWardsWhenTWIsNotInProgress = False
- +
- +# Return all wards to their own castle when Territory War starts
- +# Default: False
- +ReturnWardsWhenTWStarts = False
- +
- +# Territory Badge needed to change nobless
- +# default: 100
- +MinTerritoryBadgeForNobless = 100
- +
- +# Territory Badge needed to buy Strider
- +# default: 50
- +MinTerritoryBadgeForStriders = 50
- +
- +# Territory Badge needed to buy Guardian's Strider
- +# default: 80
- +MinTerritoryBadgeForBigStrider = 80
- \ No newline at end of file
- diff --git a/dist/game/config/default/botreport_punishments.xml b/dist/game/config/default/botreport_punishments.xml
- new file mode 100644
- index 0000000..74f16be
- --- /dev/null
- +++ b/dist/game/config/default/botreport_punishments.xml
- @@ -0,0 +1,12 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../data/xsd/botreport_punishments.xsd">
- + <!-- To add a range punishments (E.G., a debuff which apply if you have 150 reports or more, use negative neededReportCount -->
- + <punishment neededReportCount="25" skillId="6038" skillLevel="1" sysMessageId="2473" />
- + <punishment neededReportCount="75" skillId="6039" skillLevel="1" sysMessageId="2474" />
- + <punishment neededReportCount="100" skillId="6055" skillLevel="1" sysMessageId="2477" />
- + <punishment neededReportCount="125" skillId="6056" skillLevel="1" sysMessageId="2478" />
- + <punishment neededReportCount="150" skillId="6057" skillLevel="1" sysMessageId="2480" />
- + <punishment neededReportCount="175" skillId="6057" skillLevel="1" sysMessageId="2480" />
- + <!-- Range punishment -->
- + <punishment neededReportCount="-150" skillId="6040" skillLevel="1" />
- +</list>
- \ No newline at end of file
- diff --git a/dist/game/config/default/chatfilter.txt b/dist/game/config/default/chatfilter.txt
- new file mode 100644
- index 0000000..033a976
- --- /dev/null
- +++ b/dist/game/config/default/chatfilter.txt
- @@ -0,0 +1,11 @@
- +# Example for <cr> and <lf>
- +# (not allow players to confuse others by writing from beginning of the line)
- +# \\r
- +# \\n
- +#
- +# These words will be replaced:
- +suck
- +gay
- +rape
- +fuck
- +dick
- \ No newline at end of file
- diff --git a/dist/game/config/default/ipconfig.xml b/dist/game/config/default/ipconfig.xml
- new file mode 100644
- index 0000000..68e51dd
- --- /dev/null
- +++ b/dist/game/config/default/ipconfig.xml
- @@ -0,0 +1,13 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +<!-- Note: If file is named "ipconfig.xml" this data will be used as network configuration, otherwise server will configure it automatically! -->
- +<!-- External host here (Internet IP) or Localhost IP for local test -->
- +<gameserver address="127.0.0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../data/xsd/ipconfig.xsd">
- + <!-- Localhost here -->
- + <define subnet="127.0.0.0/8" address="127.0.0.1" />
- + <!-- Internal hosts here (LANs IPs) -->
- + <define subnet="10.0.0.0/8" address="10.0.0.0" />
- + <define subnet="172.16.0.0/19" address="172.16.0.0" />
- + <define subnet="192.168.0.0/16" address="192.168.0.0" />
- + <define subnet="192.168.0.0/24" address="192.168.0.0" />
- + <define subnet="192.168.1.0/24" address="192.168.1.0" />
- +</gameserver>
- diff --git a/dist/game/config/documentation.txt b/dist/game/config/documentation.txt
- new file mode 100644
- index 0000000..22c5fd0
- --- /dev/null
- +++ b/dist/game/config/documentation.txt
- @@ -0,0 +1,15 @@
- +This is your servers configuration folder.
- +
- +All the configuration files inside the ./config/default/ folder are the
- +original default configuration files. The default configuration files should
- +never be changed.
- +
- +To change a config directive from a file inside ./config/default/, create a
- +file with the same name inside the ./config/ folder and only put the configs
- +directives inside it which you want to change.
- +
- +For file formats other than .properties, you need to create a complete
- +configuration file to overwrite the default.
- +
- +This construct enables you to just overwrite with a new server version without
- +overwriting your custom configurations.
- \ No newline at end of file
- diff --git a/dist/game/startGameServer.bat b/dist/game/startGameServer.bat
- index e28128a..a7124cc 100644
- --- a/dist/game/startGameServer.bat
- +++ b/dist/game/startGameServer.bat
- @@ -1,36 +1,103 @@
- @echo off
- -title Game Server Console
- +setlocal enabledelayedexpansion
- -:start
- -echo Starting L2J Game Server.
- +REM ################################################################################
- +REM # Server exit codes: ###########################################################
- +REM # - 0: Shutdown ###########################################################
- +REM # - 1: Error ###########################################################
- +REM # - 2: Restart ###########################################################
- +REM ################################################################################
- +
- +REM ################################################################################
- +REM # Constants ####################################################################
- +REM ################################################################################
- +set APP_JAR=l2jserver.jar
- +set APP_TITLE=L2J Game Server
- +set JVM_ARGS_DEFAULT_PATH=config\default\Server_JVM_Args.txt
- +set APP_ARGS_DEFAULT_PATH=config\default\Server_APP_Args.txt
- +set JVM_ARGS_OVERWRITE_PATH=config\Server_JVM_Args.txt
- +set APP_ARGS_OVERWRITE_PATH=config\Server_APP_Args.txt
- +set LOGDIR_PATH=log\
- +
- +title %APP_TITLE% Console
- +
- +REM ################################################################################
- +REM # :restart_loop ##
- +REM # When the server exits with code 2, the scripts comes back here to restart. ##
- +REM ################################################################################
- +:restart_loop
- +set JVM_ARGS_PATH=%JVM_ARGS_DEFAULT_PATH%
- +set APP_ARGS_PATH=%APP_ARGS_DEFAULT_PATH%
- +
- +rem Determine if the overwrite files are available
- +if exist %JVM_ARGS_OVERWRITE_PATH% set JVM_ARGS_PATH=%JVM_ARGS_OVERWRITE_PATH%
- +if exist %APP_ARGS_OVERWRITE_PATH% set APP_ARGS_PATH=%APP_ARGS_OVERWRITE_PATH%
- +
- +rem Check for the arguments file to be available
- +if not exist %JVM_ARGS_PATH% (
- + echo %JVM_ARGS_PATH% is missing. Aborting launch.
- + echo.
- + goto end
- +) else if not exist %APP_ARGS_PATH% (
- + echo %APP_ARGS_PATH% is missing. Aborting launch.
- + echo.
- + goto end
- +)
- +
- +rem Print used argument files and read them
- +echo JVM arguments file: %JVM_ARGS_PATH%
- +echo APP arguments file: %APP_ARGS_PATH%
- +echo.
- +set JVM_ARGS=
- +set APP_ARGS=
- +for /f "delims=" %%F in (%JVM_ARGS_PATH%) do set JVM_ARGS=!JVM_ARGS! %%F
- +for /f "delims=" %%F in (%APP_ARGS_PATH%) do set APP_ARGS=!APP_ARGS! %%F
- +
- +rem Construct the command line
- +set APP_CMD_LN=java %JVM_ARGS% -jar %APP_JAR% %APP_ARGS%
- +
- +rem Print the command line to execute
- +echo Startup command line: %APP_CMD_LN%
- echo.
- -java -Dpython.cachedir=../cachedir -Xms1024m -Xmx1792m -jar l2jserver.jar
- +rem Delete old *.lck files and archive old logs
- +for /F "skip=1 delims=" %%T in ('wmic os get localdatetime /FORMAT:table') do (
- + if not defined LOCALDT (
- + set LOCALDT=%%T
- + set LOCALDT=!LOCALDT:~0,4!-!LOCALDT:~4,2!-!LOCALDT:~6,2!_!LOCALDT:~8,2!-!LOCALDT:~10,2!-!LOCALDT:~12,2!
- + )
- +)
- -REM NOTE: If you have a powerful machine, you could modify/add some extra parameters for performance, like:
- -REM -Xms1536m
- -REM -Xmx3072m
- -REM -XX:+AggressiveOpts
- -REM Use this parameters carefully, some of them could cause abnormal behavior, deadlocks, etc.
- -REM More info here: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
- +if exist %LOGDIR_PATH%*.lck del /F /Q log\*.lck>nul
- -if ERRORLEVEL 2 goto restart
- -if ERRORLEVEL 1 goto error
- -goto end
- +for /f %%F in ('dir %LOGDIR_PATH% /b ^| findstr /r "^[^0-9]"') do (
- + set LOGFILE_NAME_OLD=%%F
- + set LOGFILE_NAME_NEW=%LOCALDT%_!LOGFILE_NAME_OLD!
- + set LOGFILE_PATH_OLD=%LOGDIR_PATH%!LOGFILE_NAME_OLD!
- + rename !LOGFILE_PATH_OLD! !LOGFILE_NAME_NEW!
- +)
- -:restart
- +rem Execute the command line
- +echo Starting %APP_TITLE%.
- echo.
- -echo Admin Restarted Game Server.
- -echo.
- -goto start
- +%APP_CMD_LN%
- -:error
- -echo.
- -echo Game Server Terminated Abnormally!
- -echo.
- +if ERRORLEVEL 2 (
- + echo.
- + echo Admin Restarted %APP_TITLE%.
- + echo.
- + goto restart_loop
- +)
- +REM ## :restart_loop ###############################################################
- +REM ################################################################################
- -:end
- +if ERRORLEVEL 1 (
- + echo.
- + echo %APP_TITLE% terminated abnormally!
- + echo.
- +)
- +
- echo.
- -echo Game Server Terminated.
- +echo %APP_TITLE% Terminated.
- echo.
- pause
- \ No newline at end of file
- diff --git a/dist/login/LoginServer_loop.sh b/dist/login/LoginServer_loop.sh
- index ef497d5..b46325f 100644
- --- a/dist/login/LoginServer_loop.sh
- +++ b/dist/login/LoginServer_loop.sh
- @@ -1,11 +1,75 @@
- #!/bin/bash
- -err=1
- -until [ $err == 0 ];
- -do
- - [ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
- - [ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
- - java -Xms128m -Xmx256m -jar l2jlogin.jar > log/stdout.log 2>&1
- +################################################################################
- +# Server exit codes: ###########################################################
- +# - 0: Shutdown ###########################################################
- +# - 1: Error ###########################################################
- +# - 2: Restart ###########################################################
- +################################################################################
- +
- +################################################################################
- +# Constants ####################################################################
- +################################################################################
- +APP_JAR="l2jlogin.jar"
- +APP_TITLE="L2J Login Server"
- +JVM_ARGS_DEFAULT_PATH="config/default/Server_JVM_Args.txt"
- +APP_ARGS_DEFAULT_PATH="config/default/Server_APP_Args.txt"
- +JVM_ARGS_OVERWRITE_PATH="config/Server_JVM_Args.txt"
- +APP_ARGS_OVERWRITE_PATH="config/Server_APP_Args.txt"
- +LOGDIR_PATH="log/"
- +
- +err=2
- +while [ $err == 2 ]; do
- + err=0
- + JVM_ARGS_PATH="$JVM_ARGS_DEFAULT_PATH"
- + APP_ARGS_PATH="$APP_ARGS_DEFAULT_PATH"
- +
- + # Determine if the overwrite files are available
- + [ -f "$JVM_ARGS_OVERWRITE_PATH" ] && JVM_ARGS_PATH="$JVM_ARGS_OVERWRITE_PATH"
- + [ -f "$APP_ARGS_OVERWRITE_PATH" ] && APP_ARGS_PATH="$APP_ARGS_OVERWRITE_PATH"
- +
- + # Check for the arguments file to be available
- + if [ ! -f "$JVM_ARGS_PATH" ]; then
- + echo "$JVM_ARGS_PATH is missing. Aborting launch."
- + echo ""
- + break
- + elif [ ! -f "$APP_ARGS_PATH" ]; then
- + echo "$APP_ARGS_PATH is missing. Aborting launch."
- + echo ""
- + break
- + fi
- +
- + # Print used argument files and read them
- + echo "JVM arguments file: $JVM_ARGS_PATH"
- + echo "APP arguments file: $APP_ARGS_PATH"
- + echo ""
- + readarray -t JVM_ARGS < "$JVM_ARGS_PATH"
- + readarray -t APP_ARGS < "$APP_ARGS_PATH"
- +
- + # Construct and print the command line
- + APP_CMD_LN="java ${JVM_ARGS[*]//[$'\r\n']} -jar $APP_JAR ${APP_ARGS[*]//[$'\r\n']}"
- + echo "Startup command line: $APP_CMD_LN"
- + echo ""
- +
- + # rem Delete old *.lck files and archive old logs
- + [ -f "log/*.lck" ] && rm log/*.lck
- + for LOGFILE_PATH in $LOGDIR_PATH*; do
- + [ "$LOGFILE_PATH" == "$LOGDIR_PATH*" ] && continue
- + LOGFILE_NAME="${LOGFILE_PATH#*/}"
- + [[ "$LOGFILE_NAME" == [0-9]* ]] && continue
- + mv "$LOGFILE_PATH" "$LOGDIR_PATH`date +%Y-%m-%d_%H-%M-%S`_$LOGFILE_NAME"
- + done
- +
- + # Execute the command line
- + echo "Starting $APP_TITLE."
- + echo ""
- + $APP_CMD_LN
- +
- err=$?
- + [ $err == 2 ] && echo "Admin Restarted $APP_TITLE."
- +
- sleep 10;
- done
- +
- +[ $err == 1 ] && echo "$APP_TITLE terminated abnormally!"
- +echo "$APP_TITLE terminated."
- \ No newline at end of file
- diff --git a/dist/login/config/Email.properties b/dist/login/config/Email.properties
- deleted file mode 100644
- index 2410feb..0000000
- --- a/dist/login/config/Email.properties
- +++ /dev/null
- @@ -1,65 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Email Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -# ---------------------------------------------------------------------------
- -# Server Information
- -# ---------------------------------------------------------------------------
- -
- -# Server Name
- -# Default: Unconfigured L2J Server
- -ServerInfoName = Unconfigured L2J Server
- -
- -# Contact Address
- -# Default: info@unconfl2j.com
- -ServerInfoAddress = info@myl2jserver.com
- -
- -# ---------------------------------------------------------------------------
- -# E-mail System Settings
- -# ---------------------------------------------------------------------------
- -
- -# Enable Email System
- -# Default: False
- -EmailSystemEnabled = False
- -
- -# Select Query for Email Addresses
- -# Default: SELECT value FROM account_data WHERE account_name=? AND var='email_addr'
- -EmailDBSelectQuery = SELECT value FROM account_data WHERE account_name=? AND var='email_addr'
- -
- -# Email Address Field
- -# Default: value
- -EmailDBField = value
- -
- -# Mail Server Host
- -# Default: smtp.gmail.com
- -SmtpServerHost = smtp.gmail.com
- -
- -# Mail Server Port
- -# Default: 465
- -SmtpServerPort = 465
- -
- -# Auth SMTP
- -# Default: True
- -SmtpAuthRequired = True
- -
- -# Mail Socket Factory
- -# Default: javax.net.ssl.SSLSocketFactory
- -SmtpFactory = javax.net.ssl.SSLSocketFactory
- -
- -# Mail Factory Callback
- -# Default: False
- -SmtpFactoryCallback = False
- -
- -# Mail Server Auth - Username
- -# Default: exampleuser
- -SmtpUsername = user@gmail.com
- -
- -# Mail Server Auth - Password
- -# Default: examplepass
- -SmtpPassword = password
- -
- -# Mail Address
- -# Default: None
- -EmailSystemAddress = noreply@myl2jserver.com
- \ No newline at end of file
- diff --git a/dist/login/config/LoginServer.properties b/dist/login/config/LoginServer.properties
- deleted file mode 100644
- index ff02fda..0000000
- --- a/dist/login/config/LoginServer.properties
- +++ /dev/null
- @@ -1,141 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Login Server Settings
- -# ---------------------------------------------------------------------------
- -# This is the server configuration file. Here you can set up the connection information for your server.
- -# This was written with the assumption that you are behind a router.
- -# Dumbed Down Definitions...
- -# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
- -# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
- -# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
- -# ---------------------------------------------------------------------------
- -# Networking
- -# ---------------------------------------------------------------------------
- -
- -# Enables automatic port mapping for login server.
- -# If you have a router login server will request for port forwarding.
- -# Default: True
- -EnableUPnP = True
- -
- -# Bind ip of the LoginServer, use * to bind on all available IPs
- -# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
- -# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
- -# Default: * (0.0.0.0)
- -LoginserverHostname = *
- -
- -# Default: 2106
- -LoginserverPort = 2106
- -
- -# The address on which login will listen for GameServers, use * to bind on all available IPs
- -# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
- -# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
- -# Default: 127.0.0.1
- -LoginHostname = 127.0.0.1
- -
- -# The port on which login will listen for GameServers
- -# Default: 9014
- -LoginPort = 9014
- -
- -# ---------------------------------------------------------------------------
- -# Security
- -# ---------------------------------------------------------------------------
- -
- -# How many times you can provide an invalid account/pass before the IP gets banned.
- -# Default: 5
- -LoginTryBeforeBan = 5
- -
- -# Time you won't be able to login back again after LoginTryBeforeBan tries to login.
- -# Default: 900 (15 minutes)
- -LoginBlockAfterBan = 900
- -
- -# If set to True any GameServer can register on your login's free slots
- -# Default: True
- -AcceptNewGameServer = True
- -
- -# Flood Protection. All values are in milliseconds.
- -# Default: True
- -EnableFloodProtection = True
- -
- -# Default: 15
- -FastConnectionLimit = 15
- -
- -# Default: 700
- -NormalConnectionTime = 700
- -
- -# Default: 350
- -FastConnectionTime = 350
- -
- -# Default: 50
- -MaxConnectionPerIP = 50
- -
- -# ---------------------------------------------------------------------------
- -# Database
- -# ---------------------------------------------------------------------------
- -
- -# Specify the appropriate driver and url for the database you're using.
- -# Examples:
- -# Driver = com.mysql.jdbc.Driver
- -# Driver = org.hsqldb.jdbcDriver
- -# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
- -# Driver = org.mariadb.jdbc.Driver
- -# Default: com.mysql.jdbc.Driver
- -Driver = com.mysql.jdbc.Driver
- -# Database URL
- -# URL = jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
- -# URL = jdbc:hsqldb:hsql://localhost/l2jls
- -# URL = jdbc:sqlserver://localhost/database = l2jls/user = sa/password =
- -# URL = jdbc:mariadb://localhost/l2jls
- -# Default: jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
- -URL = jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
- -# Database user info (default is "root" but it's not recommended)
- -Login = root
- -# Database connection password
- -Password = toor
- -
- -# Database Connection Pool
- -# Default: HikariCP
- -# Available: BoneCP, C3P0, HikariCP
- -ConnectionPool = HikariCP
- -
- -# Default: 10
- -MaximumDbConnections = 10
- -
- -# Default: 0
- -MaximumDbIdleTime = 0
- -
- -# Connection close time.
- -# Default: 60000
- -ConnectionCloseTime = 60000
- -
- -
- -# ---------------------------------------------------------------------------
- -# Misc.
- -# ---------------------------------------------------------------------------
- -
- -# If False, the license (after the login) will not be shown.
- -# Default: True
- -ShowLicence = True
- -
- -# Default: True
- -AutoCreateAccounts = True
- -
- -# Datapack root directory.
- -# Defaults to current directory from which the server is started.
- -DatapackRoot = .
- -
- -# ---------------------------------------------------------------------------
- -# Developer Settings
- -# ---------------------------------------------------------------------------
- -
- -# Default: False
- -Debug = False
- -
- -# ---------------------------------------------------------------------------
- -# Restart LS every 24 hours?
- -# ---------------------------------------------------------------------------
- -
- -# Enable disable scheduled login restart.
- -# Default: False
- -LoginRestartSchedule = False
- -# Time in hours.
- -# Default: 24
- -LoginRestartTime = 24
- \ No newline at end of file
- diff --git a/dist/login/config/MMO.properties b/dist/login/config/MMO.properties
- deleted file mode 100644
- index 1882ae9..0000000
- --- a/dist/login/config/MMO.properties
- +++ /dev/null
- @@ -1,24 +0,0 @@
- -#---------------------------------------------------------------
- -# MMO
- -#---------------------------------------------------------------
- -
- -# Sleep time for all Selectors
- -# After he finished his job the Selector waits the given time in milliseconds
- -# Lower values will speed up the loop and the Ping is smaller
- -SleepTime = 20
- -
- -# Every loop it send a maximum of the given packages to each connection
- -# Lower values will speed up the loop and the Ping is smaller but cause less output
- -MaxSendPerPass = 12
- -
- -# Every loop it read a maximum of the given packages from each connection
- -# Lower values will speed up the loop and the Ping is smaller but cause less input
- -MaxReadPerPass = 12
- -
- -# Each unfinished read/write need a TEMP storage Buffer
- -# on large player amount we need more Buffers
- -# if there are not enough buffers new ones are generated but not stored for future usage
- -HelperBufferCount = 20
- -
- -# Setting this to True will lower your ping, at the cost of an increase in bandwidth consumption.
- -TcpNoDelay = False
- \ No newline at end of file
- diff --git a/dist/login/config/Telnet.properties b/dist/login/config/Telnet.properties
- deleted file mode 100644
- index b592cbd..0000000
- --- a/dist/login/config/Telnet.properties
- +++ /dev/null
- @@ -1,28 +0,0 @@
- -# ---------------------------------------------------------------------------
- -# Telnet Settings
- -# ---------------------------------------------------------------------------
- -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- -# Warning:
- -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- -# ---------------------------------------------------------------------------
- -
- -# Allows text based monitoring and administration of L2J LS
- -# by using a telnet client. Communication protocol is insecure
- -# and you should use SSL tunnels, VPN, etc. if you plan to connect
- -# over non-trusted channels.
- -# Default: False
- -EnableTelnet = False
- -
- -# This is the port L2J should listen to for incoming telnet
- -# requests.
- -# Default: 12345
- -StatusPort = 12345
- -
- -# If the following is not set, a random password is generated on server startup.
- -# Usage: StatusPW = somePass
- -StatusPW =
- -
- -# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
- -# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
- -# Default: 127.0.0.1,localhost
- -ListOfHosts = 127.0.0.1,localhost
- \ No newline at end of file
- diff --git a/dist/login/config/default/Email.properties b/dist/login/config/default/Email.properties
- new file mode 100644
- index 0000000..2410feb
- --- /dev/null
- +++ b/dist/login/config/default/Email.properties
- @@ -0,0 +1,65 @@
- +# ---------------------------------------------------------------------------
- +# Email Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +# ---------------------------------------------------------------------------
- +# Server Information
- +# ---------------------------------------------------------------------------
- +
- +# Server Name
- +# Default: Unconfigured L2J Server
- +ServerInfoName = Unconfigured L2J Server
- +
- +# Contact Address
- +# Default: info@unconfl2j.com
- +ServerInfoAddress = info@myl2jserver.com
- +
- +# ---------------------------------------------------------------------------
- +# E-mail System Settings
- +# ---------------------------------------------------------------------------
- +
- +# Enable Email System
- +# Default: False
- +EmailSystemEnabled = False
- +
- +# Select Query for Email Addresses
- +# Default: SELECT value FROM account_data WHERE account_name=? AND var='email_addr'
- +EmailDBSelectQuery = SELECT value FROM account_data WHERE account_name=? AND var='email_addr'
- +
- +# Email Address Field
- +# Default: value
- +EmailDBField = value
- +
- +# Mail Server Host
- +# Default: smtp.gmail.com
- +SmtpServerHost = smtp.gmail.com
- +
- +# Mail Server Port
- +# Default: 465
- +SmtpServerPort = 465
- +
- +# Auth SMTP
- +# Default: True
- +SmtpAuthRequired = True
- +
- +# Mail Socket Factory
- +# Default: javax.net.ssl.SSLSocketFactory
- +SmtpFactory = javax.net.ssl.SSLSocketFactory
- +
- +# Mail Factory Callback
- +# Default: False
- +SmtpFactoryCallback = False
- +
- +# Mail Server Auth - Username
- +# Default: exampleuser
- +SmtpUsername = user@gmail.com
- +
- +# Mail Server Auth - Password
- +# Default: examplepass
- +SmtpPassword = password
- +
- +# Mail Address
- +# Default: None
- +EmailSystemAddress = noreply@myl2jserver.com
- \ No newline at end of file
- diff --git a/dist/login/config/default/LoginServer.properties b/dist/login/config/default/LoginServer.properties
- new file mode 100644
- index 0000000..ff02fda
- --- /dev/null
- +++ b/dist/login/config/default/LoginServer.properties
- @@ -0,0 +1,141 @@
- +# ---------------------------------------------------------------------------
- +# Login Server Settings
- +# ---------------------------------------------------------------------------
- +# This is the server configuration file. Here you can set up the connection information for your server.
- +# This was written with the assumption that you are behind a router.
- +# Dumbed Down Definitions...
- +# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
- +# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
- +# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
- +# ---------------------------------------------------------------------------
- +# Networking
- +# ---------------------------------------------------------------------------
- +
- +# Enables automatic port mapping for login server.
- +# If you have a router login server will request for port forwarding.
- +# Default: True
- +EnableUPnP = True
- +
- +# Bind ip of the LoginServer, use * to bind on all available IPs
- +# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
- +# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
- +# Default: * (0.0.0.0)
- +LoginserverHostname = *
- +
- +# Default: 2106
- +LoginserverPort = 2106
- +
- +# The address on which login will listen for GameServers, use * to bind on all available IPs
- +# WARNING: <u><b><font color="red">Please don't change default IPs here if you don't know what are you doing!</font></b></u>
- +# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
- +# Default: 127.0.0.1
- +LoginHostname = 127.0.0.1
- +
- +# The port on which login will listen for GameServers
- +# Default: 9014
- +LoginPort = 9014
- +
- +# ---------------------------------------------------------------------------
- +# Security
- +# ---------------------------------------------------------------------------
- +
- +# How many times you can provide an invalid account/pass before the IP gets banned.
- +# Default: 5
- +LoginTryBeforeBan = 5
- +
- +# Time you won't be able to login back again after LoginTryBeforeBan tries to login.
- +# Default: 900 (15 minutes)
- +LoginBlockAfterBan = 900
- +
- +# If set to True any GameServer can register on your login's free slots
- +# Default: True
- +AcceptNewGameServer = True
- +
- +# Flood Protection. All values are in milliseconds.
- +# Default: True
- +EnableFloodProtection = True
- +
- +# Default: 15
- +FastConnectionLimit = 15
- +
- +# Default: 700
- +NormalConnectionTime = 700
- +
- +# Default: 350
- +FastConnectionTime = 350
- +
- +# Default: 50
- +MaxConnectionPerIP = 50
- +
- +# ---------------------------------------------------------------------------
- +# Database
- +# ---------------------------------------------------------------------------
- +
- +# Specify the appropriate driver and url for the database you're using.
- +# Examples:
- +# Driver = com.mysql.jdbc.Driver
- +# Driver = org.hsqldb.jdbcDriver
- +# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
- +# Driver = org.mariadb.jdbc.Driver
- +# Default: com.mysql.jdbc.Driver
- +Driver = com.mysql.jdbc.Driver
- +# Database URL
- +# URL = jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
- +# URL = jdbc:hsqldb:hsql://localhost/l2jls
- +# URL = jdbc:sqlserver://localhost/database = l2jls/user = sa/password =
- +# URL = jdbc:mariadb://localhost/l2jls
- +# Default: jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
- +URL = jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
- +# Database user info (default is "root" but it's not recommended)
- +Login = root
- +# Database connection password
- +Password = toor
- +
- +# Database Connection Pool
- +# Default: HikariCP
- +# Available: BoneCP, C3P0, HikariCP
- +ConnectionPool = HikariCP
- +
- +# Default: 10
- +MaximumDbConnections = 10
- +
- +# Default: 0
- +MaximumDbIdleTime = 0
- +
- +# Connection close time.
- +# Default: 60000
- +ConnectionCloseTime = 60000
- +
- +
- +# ---------------------------------------------------------------------------
- +# Misc.
- +# ---------------------------------------------------------------------------
- +
- +# If False, the license (after the login) will not be shown.
- +# Default: True
- +ShowLicence = True
- +
- +# Default: True
- +AutoCreateAccounts = True
- +
- +# Datapack root directory.
- +# Defaults to current directory from which the server is started.
- +DatapackRoot = .
- +
- +# ---------------------------------------------------------------------------
- +# Developer Settings
- +# ---------------------------------------------------------------------------
- +
- +# Default: False
- +Debug = False
- +
- +# ---------------------------------------------------------------------------
- +# Restart LS every 24 hours?
- +# ---------------------------------------------------------------------------
- +
- +# Enable disable scheduled login restart.
- +# Default: False
- +LoginRestartSchedule = False
- +# Time in hours.
- +# Default: 24
- +LoginRestartTime = 24
- \ No newline at end of file
- diff --git a/dist/login/config/default/MMO.properties b/dist/login/config/default/MMO.properties
- new file mode 100644
- index 0000000..1882ae9
- --- /dev/null
- +++ b/dist/login/config/default/MMO.properties
- @@ -0,0 +1,24 @@
- +#---------------------------------------------------------------
- +# MMO
- +#---------------------------------------------------------------
- +
- +# Sleep time for all Selectors
- +# After he finished his job the Selector waits the given time in milliseconds
- +# Lower values will speed up the loop and the Ping is smaller
- +SleepTime = 20
- +
- +# Every loop it send a maximum of the given packages to each connection
- +# Lower values will speed up the loop and the Ping is smaller but cause less output
- +MaxSendPerPass = 12
- +
- +# Every loop it read a maximum of the given packages from each connection
- +# Lower values will speed up the loop and the Ping is smaller but cause less input
- +MaxReadPerPass = 12
- +
- +# Each unfinished read/write need a TEMP storage Buffer
- +# on large player amount we need more Buffers
- +# if there are not enough buffers new ones are generated but not stored for future usage
- +HelperBufferCount = 20
- +
- +# Setting this to True will lower your ping, at the cost of an increase in bandwidth consumption.
- +TcpNoDelay = False
- \ No newline at end of file
- diff --git a/dist/login/config/default/Server_APP_Args.txt b/dist/login/config/default/Server_APP_Args.txt
- new file mode 100644
- index 0000000..e69de29
- --- /dev/null
- +++ b/dist/login/config/default/Server_APP_Args.txt
- diff --git a/dist/login/config/default/Server_JVM_Args.txt b/dist/login/config/default/Server_JVM_Args.txt
- new file mode 100644
- index 0000000..429e76f
- --- /dev/null
- +++ b/dist/login/config/default/Server_JVM_Args.txt
- @@ -0,0 +1,2 @@
- +-Xms128m
- +-Xmx256m
- \ No newline at end of file
- diff --git a/dist/login/config/default/Telnet.properties b/dist/login/config/default/Telnet.properties
- new file mode 100644
- index 0000000..b592cbd
- --- /dev/null
- +++ b/dist/login/config/default/Telnet.properties
- @@ -0,0 +1,28 @@
- +# ---------------------------------------------------------------------------
- +# Telnet Settings
- +# ---------------------------------------------------------------------------
- +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
- +# Warning:
- +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
- +# ---------------------------------------------------------------------------
- +
- +# Allows text based monitoring and administration of L2J LS
- +# by using a telnet client. Communication protocol is insecure
- +# and you should use SSL tunnels, VPN, etc. if you plan to connect
- +# over non-trusted channels.
- +# Default: False
- +EnableTelnet = False
- +
- +# This is the port L2J should listen to for incoming telnet
- +# requests.
- +# Default: 12345
- +StatusPort = 12345
- +
- +# If the following is not set, a random password is generated on server startup.
- +# Usage: StatusPW = somePass
- +StatusPW =
- +
- +# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
- +# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
- +# Default: 127.0.0.1,localhost
- +ListOfHosts = 127.0.0.1,localhost
- \ No newline at end of file
- diff --git a/dist/login/config/documentation.txt b/dist/login/config/documentation.txt
- new file mode 100644
- index 0000000..22c5fd0
- --- /dev/null
- +++ b/dist/login/config/documentation.txt
- @@ -0,0 +1,15 @@
- +This is your servers configuration folder.
- +
- +All the configuration files inside the ./config/default/ folder are the
- +original default configuration files. The default configuration files should
- +never be changed.
- +
- +To change a config directive from a file inside ./config/default/, create a
- +file with the same name inside the ./config/ folder and only put the configs
- +directives inside it which you want to change.
- +
- +For file formats other than .properties, you need to create a complete
- +configuration file to overwrite the default.
- +
- +This construct enables you to just overwrite with a new server version without
- +overwriting your custom configurations.
- \ No newline at end of file
- diff --git a/dist/login/startLoginServer.bat b/dist/login/startLoginServer.bat
- index 3b022e1..ce36425 100644
- --- a/dist/login/startLoginServer.bat
- +++ b/dist/login/startLoginServer.bat
- @@ -1,29 +1,103 @@
- @echo off
- -title Login Server Console
- +setlocal enabledelayedexpansion
- -:start
- -echo Starting L2J Login Server.
- +REM ################################################################################
- +REM # Server exit codes: ###########################################################
- +REM # - 0: Shutdown ###########################################################
- +REM # - 1: Error ###########################################################
- +REM # - 2: Restart ###########################################################
- +REM ################################################################################
- +
- +REM ################################################################################
- +REM # Constants ####################################################################
- +REM ################################################################################
- +set APP_JAR=l2jlogin.jar
- +set APP_TITLE=L2J Login Server
- +set JVM_ARGS_DEFAULT_PATH=config\default\Server_JVM_Args.txt
- +set APP_ARGS_DEFAULT_PATH=config\default\Server_APP_Args.txt
- +set JVM_ARGS_OVERWRITE_PATH=config\Server_JVM_Args.txt
- +set APP_ARGS_OVERWRITE_PATH=config\Server_APP_Args.txt
- +set LOGDIR_PATH=log\
- +
- +title %APP_TITLE% Console
- +
- +REM ################################################################################
- +REM # :restart_loop ##
- +REM # When the server exits with code 2, the scripts comes back here to restart. ##
- +REM ################################################################################
- +:restart_loop
- +set JVM_ARGS_PATH=%JVM_ARGS_DEFAULT_PATH%
- +set APP_ARGS_PATH=%APP_ARGS_DEFAULT_PATH%
- +
- +rem Determine if the overwrite files are available
- +if exist %JVM_ARGS_OVERWRITE_PATH% set JVM_ARGS_PATH=%JVM_ARGS_OVERWRITE_PATH%
- +if exist %APP_ARGS_OVERWRITE_PATH% set APP_ARGS_PATH=%APP_ARGS_OVERWRITE_PATH%
- +
- +rem Check for the arguments file to be available
- +if not exist %JVM_ARGS_PATH% (
- + echo %JVM_ARGS_PATH% is missing. Aborting launch.
- + echo.
- + goto end
- +) else if not exist %APP_ARGS_PATH% (
- + echo %APP_ARGS_PATH% is missing. Aborting launch.
- + echo.
- + goto end
- +)
- +
- +rem Print used argument files and read them
- +echo JVM arguments file: %JVM_ARGS_PATH%
- +echo APP arguments file: %APP_ARGS_PATH%
- +echo.
- +set JVM_ARGS=
- +set APP_ARGS=
- +for /f "delims=" %%F in (%JVM_ARGS_PATH%) do set JVM_ARGS=!JVM_ARGS! %%F
- +for /f "delims=" %%F in (%APP_ARGS_PATH%) do set APP_ARGS=!APP_ARGS! %%F
- +
- +rem Construct the command line
- +set APP_CMD_LN=java %JVM_ARGS% -jar %APP_JAR% %APP_ARGS%
- +
- +rem Print the command line to execute
- +echo Startup command line: %APP_CMD_LN%
- echo.
- -java -Xms128m -Xmx256m -jar l2jlogin.jar
- +rem Delete old *.lck files and archive old logs
- +for /F "skip=1 delims=" %%T in ('wmic os get localdatetime /FORMAT:table') do (
- + if not defined LOCALDT (
- + set LOCALDT=%%T
- + set LOCALDT=!LOCALDT:~0,4!-!LOCALDT:~4,2!-!LOCALDT:~6,2!_!LOCALDT:~8,2!-!LOCALDT:~10,2!-!LOCALDT:~12,2!
- + )
- +)
- -if ERRORLEVEL 2 goto restart
- -if ERRORLEVEL 1 goto error
- -goto end
- +if exist %LOGDIR_PATH%*.lck del /F /Q log\*.lck>nul
- -:restart
- -echo.
- -echo Admin Restarted Login Server.
- -echo.
- -goto start
- +for /f %%F in ('dir %LOGDIR_PATH% /b ^| findstr /r "^[^0-9]"') do (
- + set LOGFILE_NAME_OLD=%%F
- + set LOGFILE_NAME_NEW=%LOCALDT%_!LOGFILE_NAME_OLD!
- + set LOGFILE_PATH_OLD=%LOGDIR_PATH%!LOGFILE_NAME_OLD!
- + rename !LOGFILE_PATH_OLD! !LOGFILE_NAME_NEW!
- +)
- -:error
- +rem Execute the command line
- +echo Starting %APP_TITLE%.
- echo.
- -echo Login Server terminated abnormally!
- -echo.
- +%APP_CMD_LN%
- -:end
- +if ERRORLEVEL 2 (
- + echo.
- + echo Admin Restarted %APP_TITLE%.
- + echo.
- + goto restart_loop
- +)
- +REM ## :restart_loop ###############################################################
- +REM ################################################################################
- +
- +if ERRORLEVEL 1 (
- + echo.
- + echo %APP_TITLE% terminated abnormally!
- + echo.
- +)
- +
- echo.
- -echo Login Server Terminated.
- +echo %APP_TITLE% Terminated.
- echo.
- pause
- \ No newline at end of file
- diff --git a/src/main/java/com/l2jserver/Config.java b/src/main/java/com/l2jserver/Config.java
- index 06c664c..d2b5115 100644
- --- a/src/main/java/com/l2jserver/Config.java
- +++ b/src/main/java/com/l2jserver/Config.java
- @@ -20,7 +20,6 @@
- import java.io.BufferedReader;
- import java.io.File;
- -import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.OutputStream;
- @@ -38,6 +37,7 @@
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.nio.file.Paths;
- +import java.nio.file.StandardOpenOption;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Enumeration;
- @@ -82,35 +82,43 @@
- // Constants
- // --------------------------------------------------
- public static final String EOL = System.lineSeparator();
- + public static final Path CONFIG_FOLDER = Paths.get("config");
- + public static final Path CONFIG_DEFAULT_FOLDER = CONFIG_FOLDER.resolve("default");
- + public static final Path CONFIG_OVERWRITE_FOLDER = CONFIG_FOLDER;
- + public static final Path CONFIG_GENERATED_FOLDER = CONFIG_FOLDER;
- // --------------------------------------------------
- - // L2J Property File Definitions
- + // L2J Config File Names
- // --------------------------------------------------
- - public static final String CHARACTER_CONFIG_FILE = "./config/Character.properties";
- - public static final String FEATURE_CONFIG_FILE = "./config/Feature.properties";
- - public static final String FORTSIEGE_CONFIGURATION_FILE = "./config/FortSiege.properties";
- - public static final String GENERAL_CONFIG_FILE = "./config/General.properties";
- - public static final String HEXID_FILE = "./config/hexid.txt";
- - public static final String ID_CONFIG_FILE = "./config/IdFactory.properties";
- - public static final String L2JMOD_CONFIG_FILE = "./config/L2JMods.properties";
- - public static final String LOGIN_CONFIGURATION_FILE = "./config/LoginServer.properties";
- - public static final String NPC_CONFIG_FILE = "./config/NPC.properties";
- - public static final String PVP_CONFIG_FILE = "./config/PVP.properties";
- - public static final String RATES_CONFIG_FILE = "./config/Rates.properties";
- - public static final String CONFIGURATION_FILE = "./config/Server.properties";
- - public static final String IP_CONFIG_FILE = "./config/ipconfig.xml";
- - public static final String SIEGE_CONFIGURATION_FILE = "./config/Siege.properties";
- - public static final String TW_CONFIGURATION_FILE = "./config/TerritoryWar.properties";
- - public static final String TELNET_FILE = "./config/Telnet.properties";
- - public static final String FLOOD_PROTECTOR_FILE = "./config/FloodProtector.properties";
- - public static final String MMO_CONFIG_FILE = "./config/MMO.properties";
- - public static final String OLYMPIAD_CONFIG_FILE = "./config/Olympiad.properties";
- - public static final String GRANDBOSS_CONFIG_FILE = "./config/GrandBoss.properties";
- - public static final String GRACIASEEDS_CONFIG_FILE = "./config/GraciaSeeds.properties";
- - public static final String CHAT_FILTER_FILE = "./config/chatfilter.txt";
- - public static final String EMAIL_CONFIG_FILE = "./config/Email.properties";
- - public static final String CH_SIEGE_FILE = "./config/ConquerableHallSiege.properties";
- - public static final String GEODATA_FILE = "./config/GeoData.properties";
- + public static final String CHARACTER_CONFIG_FILE = "Character.properties";
- + public static final String FEATURE_CONFIG_FILE = "Feature.properties";
- + public static final String FORTSIEGE_CONFIGURATION_FILE = "FortSiege.properties";
- + public static final String GENERAL_CONFIG_FILE = "General.properties";
- + public static final String HEXID_FILE = "hexid.txt";
- + public static final String ID_CONFIG_FILE = "IdFactory.properties";
- + public static final String L2JMOD_CONFIG_FILE = "L2JMods.properties";
- + public static final String LOGIN_CONFIGURATION_FILE = "LoginServer.properties";
- + public static final String NPC_CONFIG_FILE = "NPC.properties";
- + public static final String PVP_CONFIG_FILE = "PVP.properties";
- + public static final String RATES_CONFIG_FILE = "Rates.properties";
- + public static final String CONFIGURATION_FILE = "Server.properties";
- + public static final String SIEGE_CONFIGURATION_FILE = "Siege.properties";
- + public static final String TW_CONFIGURATION_FILE = "TerritoryWar.properties";
- + public static final String TELNET_FILE = "Telnet.properties";
- + public static final String FLOOD_PROTECTOR_FILE = "FloodProtector.properties";
- + public static final String MMO_CONFIG_FILE = "MMO.properties";
- + public static final String OLYMPIAD_CONFIG_FILE = "Olympiad.properties";
- + public static final String GRANDBOSS_CONFIG_FILE = "GrandBoss.properties";
- + public static final String GRACIASEEDS_CONFIG_FILE = "GraciaSeeds.properties";
- + public static final String EMAIL_CONFIG_FILE = "Email.properties";
- + public static final String CH_SIEGE_FILE = "ConquerableHallSiege.properties";
- + public static final String GEODATA_FILE = "GeoData.properties";
- + // another format than .properties
- + public static final String IP_CONFIG_FILE = "ipconfig.xml";
- + public static final String CHAT_FILTER_FILE = "chatfilter.txt";
- + public static final String BOTREPORT_PUNISHMENTS_FILE = "botreport_punishments.xml";
- + public static final String SECONDARY_AUTH_FILE = "SecondaryAuth.xml";
- + public static final String SIEGE_SCHEDULE_FILE = "SiegeSchedule.xml";
- // --------------------------------------------------
- // L2J Variable Definitions
- // --------------------------------------------------
- @@ -2596,31 +2604,31 @@
- ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1);
- ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 120);
- - final File hexIdFile = new File(HEXID_FILE);
- - if (hexIdFile.exists())
- + final Path hexIdFile = Paths.get(HEXID_FILE);
- + if (Files.exists(CONFIG_FOLDER.resolve(hexIdFile)))
- {
- final PropertiesParser hexId = new PropertiesParser(hexIdFile);
- - if (hexId.containskey("ServerID") && hexId.containskey("HexID"))
- + if (hexId.containsNonEmptyKey("ServerID") && hexId.containsNonEmptyKey("HexID"))
- {
- SERVER_ID = hexId.getInt("ServerID", 1);
- try
- {
- - HEX_ID = new BigInteger(hexId.getString("HexID", null), 16).toByteArray();
- + HEX_ID = new BigInteger(hexId.getString("HexID", ""), 16).toByteArray();
- }
- catch (Exception e)
- {
- - LOG.warn("Could not load HexID file ({}). Hopefully login will give us one.", HEXID_FILE);
- + LOG.warn("Could not load HexID file ({})! Failed to convert HexID. Hopefully login will give us one.", HEXID_FILE, e);
- }
- }
- else
- {
- - LOG.warn("Could not load HexID file ({}). Hopefully login will give us one.", HEXID_FILE);
- + LOG.warn("Could not load HexID file ({})! Missing properties. Hopefully login will give us one.", HEXID_FILE);
- }
- }
- else
- {
- - LOG.warn("Could not load HexID file ({}). Hopefully login will give us one.", HEXID_FILE);
- + LOG.warn("Could not load HexID file ({}). File is missing. Hopefully login will give us one.", HEXID_FILE);
- }
- // Grand bosses
- @@ -2659,13 +2667,17 @@
- try
- {
- - //@formatter:off
- - FILTER_LIST = Files.lines(Paths.get(CHAT_FILTER_FILE), StandardCharsets.UTF_8)
- - .map(String::trim)
- - .filter(line -> (!line.isEmpty() && (line.charAt(0) != '#')))
- - .collect(Collectors.toList());
- - //@formatter:on
- - LOG.info("Loaded {} filter words.", FILTER_LIST.size());
- + Path chatfilterFile = getPathOfConfigFile(CHAT_FILTER_FILE, "Using empty chatfilter list.");
- + if (chatfilterFile != null)
- + {
- + //@formatter:offconfig
- + FILTER_LIST = Files.lines(chatfilterFile, StandardCharsets.UTF_8)
- + .map(String::trim)
- + .filter(line -> (!line.isEmpty() && (line.charAt(0) != '#')))
- + .collect(Collectors.toList());
- + //@formatter:on
- + LOG.info("Loaded {} filter words.", FILTER_LIST.size());
- + }
- }
- catch (IOException ioe)
- {
- @@ -3671,18 +3683,14 @@
- */
- public static void saveHexid(int serverId, String hexId, String fileName)
- {
- - try
- + Properties hexSetting = new Properties();
- + Path p = CONFIG_GENERATED_FOLDER.resolve(fileName);
- + // Create a new empty file only if it doesn't exist
- + try (OutputStream os = Files.newOutputStream(p, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING))
- {
- - Properties hexSetting = new Properties();
- - File file = new File(fileName);
- - // Create a new empty file only if it doesn't exist
- - file.createNewFile();
- - try (OutputStream out = new FileOutputStream(file))
- - {
- - hexSetting.setProperty("ServerID", String.valueOf(serverId));
- - hexSetting.setProperty("HexID", hexId);
- - hexSetting.store(out, "the hexID to auth into login");
- - }
- + hexSetting.setProperty("ServerID", String.valueOf(serverId));
- + hexSetting.setProperty("HexID", hexId);
- + hexSetting.store(os, "the hexID to auth into login");
- }
- catch (Exception e)
- {
- @@ -3916,6 +3924,46 @@
- return result;
- }
- + public static Path getPathOfConfigFile(String filename, String missingMessage)
- + {
- + Path p = CONFIG_OVERWRITE_FOLDER.resolve(filename);
- + if (Files.exists(p))
- + {
- + LOG.info("Using overwrite {}.", filename);
- + return p;
- + }
- +
- + p = CONFIG_DEFAULT_FOLDER.resolve(filename);
- + if (Files.exists(p))
- + {
- + LOG.info("Using default {}.", filename);
- + return p;
- + }
- +
- + LOG.warn("{} is missing! {}", missingMessage);
- + return null;
- + }
- +
- + public static File getFileOfConfigFile(String filename, String missingMessage)
- + {
- + File f = new File(CONFIG_OVERWRITE_FOLDER.resolve(filename).toString());
- + if (f.exists())
- + {
- + LOG.info("Using overwrite {}.", filename);
- + return f;
- + }
- +
- + f = new File(CONFIG_DEFAULT_FOLDER.resolve(filename).toString());
- + if (f.exists())
- + {
- + LOG.info("Using default {}.", filename);
- + return f;
- + }
- +
- + LOG.warn("{} is missing! {}", missingMessage);
- + return null;
- + }
- +
- private static class IPConfigData implements IXmlReader
- {
- private static final List<String> _subnets = new ArrayList<>(5);
- @@ -3930,16 +3978,13 @@
- public void load()
- {
- GameServer.printSection("Network Configuration");
- - final File f = new File(IP_CONFIG_FILE);
- - if (f.exists())
- + File f = getFileOfConfigFile(IP_CONFIG_FILE, "Using automatic network configuration.");
- + if (f != null)
- {
- - LOG.info("Using existing ipconfig.xml.");
- - parseFile(new File(IP_CONFIG_FILE));
- + parseFile(f);
- }
- else
- - // Auto configuration...
- {
- - LOG.info("Using automatic network configuration.");
- autoIpConfig();
- }
- }
- diff --git a/src/main/java/com/l2jserver/gameserver/data/xml/impl/SecondaryAuthData.java b/src/main/java/com/l2jserver/gameserver/data/xml/impl/SecondaryAuthData.java
- index e851e67..f830bee 100644
- --- a/src/main/java/com/l2jserver/gameserver/data/xml/impl/SecondaryAuthData.java
- +++ b/src/main/java/com/l2jserver/gameserver/data/xml/impl/SecondaryAuthData.java
- @@ -25,6 +25,7 @@
- import org.w3c.dom.Document;
- import org.w3c.dom.Node;
- +import com.l2jserver.Config;
- import com.l2jserver.util.data.xml.IXmlReader;
- /**
- @@ -48,8 +49,12 @@
- public synchronized void load()
- {
- _forbiddenPasswords.clear();
- - parseFile(new File("config/SecondaryAuth.xml"));
- - LOG.info("{}: Loaded {} forbidden passwords.", getClass().getSimpleName(), _forbiddenPasswords.size());
- + File f = Config.getFileOfConfigFile(Config.SECONDARY_AUTH_FILE, "Secondary auth stays disabled!");
- + if (f != null)
- + {
- + parseFile(f);
- + LOG.info("{}: Loaded {} forbidden passwords.", getClass().getSimpleName(), _forbiddenPasswords.size());
- + }
- }
- @Override
- diff --git a/src/main/java/com/l2jserver/gameserver/data/xml/impl/SiegeScheduleData.java b/src/main/java/com/l2jserver/gameserver/data/xml/impl/SiegeScheduleData.java
- index fdf12a9..384b1cd 100644
- --- a/src/main/java/com/l2jserver/gameserver/data/xml/impl/SiegeScheduleData.java
- +++ b/src/main/java/com/l2jserver/gameserver/data/xml/impl/SiegeScheduleData.java
- @@ -18,6 +18,7 @@
- */
- package com.l2jserver.gameserver.data.xml.impl;
- +import java.io.File;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.List;
- @@ -26,6 +27,7 @@
- import org.w3c.dom.NamedNodeMap;
- import org.w3c.dom.Node;
- +import com.l2jserver.Config;
- import com.l2jserver.gameserver.model.SiegeScheduleDate;
- import com.l2jserver.gameserver.model.StatsSet;
- import com.l2jserver.gameserver.util.Util;
- @@ -48,8 +50,12 @@
- public synchronized void load()
- {
- _scheduleData.clear();
- - parseDatapackFile("config/SiegeSchedule.xml");
- - LOG.info("{}: Loaded: {} siege schedulers.", getClass().getSimpleName(), _scheduleData.size());
- + File f = Config.getFileOfConfigFile(Config.SIEGE_SCHEDULE_FILE, "Using emergency siege schedule data.");
- + if (f != null)
- + {
- + parseFile(f);
- + LOG.info("{}: Loaded: {} siege schedulers.", getClass().getSimpleName(), _scheduleData.size());
- + }
- if (_scheduleData.isEmpty())
- {
- _scheduleData.add(new SiegeScheduleDate(new StatsSet()));
- diff --git a/src/main/java/com/l2jserver/gameserver/datatables/BotReportTable.java b/src/main/java/com/l2jserver/gameserver/datatables/BotReportTable.java
- index 3ec8c88..62ec249 100644
- --- a/src/main/java/com/l2jserver/gameserver/datatables/BotReportTable.java
- +++ b/src/main/java/com/l2jserver/gameserver/datatables/BotReportTable.java
- @@ -19,7 +19,6 @@
- package com.l2jserver.gameserver.datatables;
- import java.io.File;
- -import java.io.FileNotFoundException;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- @@ -28,12 +27,12 @@
- import java.util.HashMap;
- import java.util.Map;
- import java.util.concurrent.ConcurrentHashMap;
- -import java.util.logging.Level;
- -import java.util.logging.Logger;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- +import org.slf4j.Logger;
- +import org.slf4j.LoggerFactory;
- import org.xml.sax.Attributes;
- import org.xml.sax.helpers.DefaultHandler;
- @@ -54,7 +53,7 @@
- public final class BotReportTable
- {
- // Zoey76: TODO: Split XML parsing from SQL operations, use IXmlReader instead of SAXParser.
- - private static final Logger LOGGER = Logger.getLogger(BotReportTable.class.getName());
- + private static final Logger LOGGER = LoggerFactory.getLogger(BotReportTable.class.getName());
- private static final int COLUMN_BOT_ID = 1;
- private static final int COLUMN_REPORTER_ID = 2;
- @@ -86,18 +85,16 @@
- try
- {
- - File punishments = new File("./config/botreport_punishments.xml");
- - if (!punishments.exists())
- + File punishments = Config.getFileOfConfigFile(Config.BOTREPORT_PUNISHMENTS_FILE, "Using empty list of botreport punishments.");
- + if (punishments != null)
- {
- - throw new FileNotFoundException(punishments.getName());
- + SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
- + parser.parse(punishments, new PunishmentsLoader());
- }
- -
- - SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
- - parser.parse(punishments, new PunishmentsLoader());
- }
- catch (Exception e)
- {
- - LOGGER.log(Level.WARNING, "BotReportTable: Could not load punishments from /config/botreport_punishments.xml", e);
- + LOGGER.warn("BotReportTable: Could not load punishments from {}", Config.BOTREPORT_PUNISHMENTS_FILE, e);
- }
- loadReportedCharData();
- @@ -167,11 +164,11 @@
- }
- }
- - LOGGER.info("BotReportTable: Loaded " + _reports.size() + " bot reports");
- + LOGGER.info("BotReportTable: Loaded {} bot reports", _reports.size());
- }
- catch (Exception e)
- {
- - LOGGER.log(Level.WARNING, "BotReportTable: Could not load reported char data!", e);
- + LOGGER.warn("BotReportTable: Could not load reported char data!", e);
- }
- }
- @@ -201,7 +198,7 @@
- }
- catch (Exception e)
- {
- - LOGGER.log(Level.SEVERE, "BotReportTable: Could not update reported char data in database!", e);
- + LOGGER.error("BotReportTable: Could not update reported char data in database!", e);
- }
- }
- @@ -380,8 +377,8 @@
- /**
- * Adds a debuff punishment into the punishments record. If skill does not exist, will log it and return
- * @param neededReports (report count to trigger this debuff)
- - * @param skillId
- - * @param skillLevel
- + * @param skillId skill effects to apply
- + * @param skillLevel the level of the skill to apply effects from
- * @param sysMsg (id of a system message to send when applying the punish)
- */
- void addPunishment(int neededReports, int skillId, int skillLevel, int sysMsg)
- @@ -393,7 +390,7 @@
- }
- else
- {
- - LOGGER.warning("BotReportTable: Could not add punishment for " + neededReports + " report(s): Skill " + skillId + "-" + skillLevel + " does not exist!");
- + LOGGER.warn("BotReportTable: Could not add punishment for {} report(s): Skill {}-{} does not exist!", neededReports, skillId, skillLevel);
- }
- }
- @@ -429,7 +426,7 @@
- catch (Exception e)
- {
- ThreadPoolManager.getInstance().scheduleGeneral(new ResetPointTask(), 24 * 3600 * 1000);
- - LOGGER.log(Level.WARNING, "BotReportTable: Could not properly schedule bot report points reset task. Scheduled in 24 hours.", e);
- + LOGGER.warn("BotReportTable: Could not properly schedule bot report points reset task. Scheduled in 24 hours.", e);
- }
- }
- @@ -554,7 +551,7 @@
- }
- /**
- - * SAX loader to parse /config/botreport_punishments.xml file
- + * SAX loader to parse botreport_punishments.xml file
- */
- private final class PunishmentsLoader extends DefaultHandler
- {
- diff --git a/src/main/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java b/src/main/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java
- index 243ffcc..4e11d48 100644
- --- a/src/main/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java
- +++ b/src/main/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java
- @@ -18,16 +18,12 @@
- */
- package com.l2jserver.gameserver.instancemanager;
- -import java.io.File;
- -import java.io.FileInputStream;
- -import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- -import java.util.Properties;
- import java.util.StringTokenizer;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.logging.Level;
- @@ -46,6 +42,7 @@
- import com.l2jserver.gameserver.model.skills.CommonSkill;
- import com.l2jserver.gameserver.network.SystemMessageId;
- import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
- +import com.l2jserver.util.PropertiesParser;
- public final class FortSiegeManager
- {
- @@ -77,7 +74,7 @@
- /**
- * @param clan The L2Clan of the player
- - * @param fortid
- + * @param fortid the fortress id
- * @return true if the clan is registered or owner of a fort
- */
- public final boolean checkIsRegistered(L2Clan clan, int fortid)
- @@ -117,25 +114,16 @@
- private final void load()
- {
- - final Properties siegeSettings = new Properties();
- - final File file = new File(Config.FORTSIEGE_CONFIGURATION_FILE);
- - try (InputStream is = new FileInputStream(file))
- - {
- - siegeSettings.load(is);
- - }
- - catch (Exception e)
- - {
- - _log.log(Level.WARNING, "Error while loading Fort Siege Manager settings!", e);
- - }
- + final PropertiesParser siegeSettings = new PropertiesParser(Config.FORTSIEGE_CONFIGURATION_FILE);
- // Siege setting
- - _justToTerritory = Boolean.parseBoolean(siegeSettings.getProperty("JustToTerritory", "true"));
- - _attackerMaxClans = Integer.decode(siegeSettings.getProperty("AttackerMaxClans", "500"));
- - _flagMaxCount = Integer.decode(siegeSettings.getProperty("MaxFlags", "1"));
- - _siegeClanMinLevel = Integer.decode(siegeSettings.getProperty("SiegeClanMinLevel", "4"));
- - _siegeLength = Integer.decode(siegeSettings.getProperty("SiegeLength", "60"));
- - _countDownLength = Integer.decode(siegeSettings.getProperty("CountDownLength", "10"));
- - _suspiciousMerchantRespawnDelay = Integer.decode(siegeSettings.getProperty("SuspiciousMerchantRespawnDelay", "180"));
- + _justToTerritory = siegeSettings.getBoolean("JustToTerritory", true);
- + _attackerMaxClans = siegeSettings.getInt("AttackerMaxClans", 500);
- + _flagMaxCount = siegeSettings.getInt("MaxFlags", 1);
- + _siegeClanMinLevel = siegeSettings.getInt("SiegeClanMinLevel", 4);
- + _siegeLength = siegeSettings.getInt("SiegeLength", 60);
- + _countDownLength = siegeSettings.getInt("CountDownLength", 10);
- + _suspiciousMerchantRespawnDelay = siegeSettings.getInt("SuspiciousMerchantRespawnDelay", 180);
- // Siege spawns settings
- _commanderSpawnList = new ConcurrentHashMap<>();
- @@ -147,7 +135,7 @@
- List<CombatFlag> flagSpawns = new ArrayList<>();
- for (int i = 1; i < 5; i++)
- {
- - final String _spawnParams = siegeSettings.getProperty(fort.getName().replace(" ", "") + "Commander" + i, "");
- + final String _spawnParams = siegeSettings.getString(fort.getName().replace(" ", "") + "Commander" + i, "");
- if (_spawnParams.isEmpty())
- {
- break;
- @@ -174,7 +162,7 @@
- for (int i = 1; i < 4; i++)
- {
- - final String _spawnParams = siegeSettings.getProperty(fort.getName().replace(" ", "") + "Flag" + i, "");
- + final String _spawnParams = siegeSettings.getString(fort.getName().replace(" ", "") + "Flag" + i, "");
- if (_spawnParams.isEmpty())
- {
- break;
- diff --git a/src/main/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java b/src/main/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java
- index d7c6407..7bb1135 100644
- --- a/src/main/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java
- +++ b/src/main/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java
- @@ -73,7 +73,7 @@
- /**
- * @param clan The L2Clan of the player
- - * @param castleid
- + * @param castleid the castle id
- * @return true if the clan is registered or owner of a castle
- */
- public final boolean checkIsRegistered(L2Clan clan, int castleid)
- diff --git a/src/main/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java b/src/main/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
- index 8fc70aa..02d2393 100644
- --- a/src/main/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
- +++ b/src/main/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
- @@ -169,7 +169,7 @@
- }
- /**
- - * @param castleId
- + * @param castleId the castle id
- * @param clan The L2Clan of the player
- * @return true if the clan is registered
- */
- @@ -200,8 +200,8 @@
- }
- /**
- - * @param castleId
- - * @param objId
- + * @param castleId the castle id
- + * @param objId player object id
- * @return true if the player is registered
- */
- public final boolean checkIsRegistered(int castleId, int objId)
- diff --git a/src/main/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java b/src/main/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java
- index 117cf9a..8251fd7 100644
- --- a/src/main/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java
- +++ b/src/main/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java
- @@ -18,8 +18,6 @@
- */
- package com.l2jserver.gameserver.model.olympiad;
- -import java.io.FileInputStream;
- -import java.io.InputStream;
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- @@ -31,7 +29,6 @@
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- -import java.util.Properties;
- import java.util.concurrent.ConcurrentHashMap;
- import java.util.concurrent.ScheduledFuture;
- import java.util.logging.Level;
- @@ -50,6 +47,7 @@
- import com.l2jserver.gameserver.network.SystemMessageId;
- import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
- import com.l2jserver.gameserver.util.Broadcast;
- +import com.l2jserver.util.PropertiesParser;
- /**
- * @author godson
- @@ -65,16 +63,26 @@
- public static final String OLYMPIAD_HTML_PATH = "data/html/olympiad/";
- private static final String OLYMPIAD_LOAD_DATA = "SELECT current_cycle, period, olympiad_end, validation_end, " + "next_weekly_change FROM olympiad_data WHERE id = 0";
- - private static final String OLYMPIAD_SAVE_DATA = "INSERT INTO olympiad_data (id, current_cycle, " + "period, olympiad_end, validation_end, next_weekly_change) VALUES (0,?,?,?,?,?) " + "ON DUPLICATE KEY UPDATE current_cycle=?, period=?, olympiad_end=?, " + "validation_end=?, next_weekly_change=?";
- - private static final String OLYMPIAD_LOAD_NOBLES = "SELECT olympiad_nobles.charId, olympiad_nobles.class_id, " + "characters.char_name, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_done, " + "olympiad_nobles.competitions_won, olympiad_nobles.competitions_lost, olympiad_nobles.competitions_drawn, " + "olympiad_nobles.competitions_done_week, olympiad_nobles.competitions_done_week_classed, olympiad_nobles.competitions_done_week_non_classed, olympiad_nobles.competitions_done_week_team " + "FROM olympiad_nobles, characters WHERE characters.charId = olympiad_nobles.charId";
- - private static final String OLYMPIAD_SAVE_NOBLES = "INSERT INTO olympiad_nobles " + "(`charId`,`class_id`,`olympiad_points`,`competitions_done`,`competitions_won`,`competitions_lost`," + "`competitions_drawn`, `competitions_done_week`, `competitions_done_week_classed`, `competitions_done_week_non_classed`, `competitions_done_week_team`) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
- - private static final String OLYMPIAD_UPDATE_NOBLES = "UPDATE olympiad_nobles SET " + "olympiad_points = ?, competitions_done = ?, competitions_won = ?, competitions_lost = ?, competitions_drawn = ?, competitions_done_week = ?, competitions_done_week_classed = ?, competitions_done_week_non_classed = ?, competitions_done_week_team = ? WHERE charId = ?";
- - private static final String OLYMPIAD_GET_HEROS = "SELECT olympiad_nobles.charId, characters.char_name " + "FROM olympiad_nobles, characters WHERE characters.charId = olympiad_nobles.charId " + "AND olympiad_nobles.class_id = ? AND olympiad_nobles.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " AND olympiad_nobles.competitions_won > 0 " + "ORDER BY olympiad_nobles.olympiad_points DESC, olympiad_nobles.competitions_done DESC, olympiad_nobles.competitions_won DESC";
- + private static final String OLYMPIAD_SAVE_DATA = "INSERT INTO olympiad_data (id, current_cycle, " + "period, olympiad_end, validation_end, next_weekly_change) VALUES (0,?,?,?,?,?) " + "ON DUPLICATE KEY UPDATE current_cycle=?, period=?, olympiad_end=?, "
- + + "validation_end=?, next_weekly_change=?";
- + private static final String OLYMPIAD_LOAD_NOBLES = "SELECT olympiad_nobles.charId, olympiad_nobles.class_id, " + "characters.char_name, olympiad_nobles.olympiad_points, olympiad_nobles.competitions_done, "
- + + "olympiad_nobles.competitions_won, olympiad_nobles.competitions_lost, olympiad_nobles.competitions_drawn, "
- + + "olympiad_nobles.competitions_done_week, olympiad_nobles.competitions_done_week_classed, olympiad_nobles.competitions_done_week_non_classed, olympiad_nobles.competitions_done_week_team " + "FROM olympiad_nobles, characters WHERE characters.charId = olympiad_nobles.charId";
- + private static final String OLYMPIAD_SAVE_NOBLES = "INSERT INTO olympiad_nobles " + "(`charId`,`class_id`,`olympiad_points`,`competitions_done`,`competitions_won`,`competitions_lost`,"
- + + "`competitions_drawn`, `competitions_done_week`, `competitions_done_week_classed`, `competitions_done_week_non_classed`, `competitions_done_week_team`) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
- + private static final String OLYMPIAD_UPDATE_NOBLES = "UPDATE olympiad_nobles SET "
- + + "olympiad_points = ?, competitions_done = ?, competitions_won = ?, competitions_lost = ?, competitions_drawn = ?, competitions_done_week = ?, competitions_done_week_classed = ?, competitions_done_week_non_classed = ?, competitions_done_week_team = ? WHERE charId = ?";
- + private static final String OLYMPIAD_GET_HEROS = "SELECT olympiad_nobles.charId, characters.char_name " + "FROM olympiad_nobles, characters WHERE characters.charId = olympiad_nobles.charId " + "AND olympiad_nobles.class_id = ? AND olympiad_nobles.competitions_done >= "
- + + Config.ALT_OLY_MIN_MATCHES + " AND olympiad_nobles.competitions_won > 0 " + "ORDER BY olympiad_nobles.olympiad_points DESC, olympiad_nobles.competitions_done DESC, olympiad_nobles.competitions_won DESC";
- private static final String GET_ALL_CLASSIFIED_NOBLESS = "SELECT charId from olympiad_nobles_eom " + "WHERE competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " ORDER BY olympiad_points DESC, competitions_done DESC, competitions_won DESC";
- - private static final String GET_EACH_CLASS_LEADER = "SELECT characters.char_name from olympiad_nobles_eom, characters " + "WHERE characters.charId = olympiad_nobles_eom.charId AND olympiad_nobles_eom.class_id = ? " + "AND olympiad_nobles_eom.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " " + "ORDER BY olympiad_nobles_eom.olympiad_points DESC, olympiad_nobles_eom.competitions_done DESC, olympiad_nobles_eom.competitions_won DESC LIMIT 10";
- - private static final String GET_EACH_CLASS_LEADER_CURRENT = "SELECT characters.char_name from olympiad_nobles, characters " + "WHERE characters.charId = olympiad_nobles.charId AND olympiad_nobles.class_id = ? " + "AND olympiad_nobles.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " " + "ORDER BY olympiad_nobles.olympiad_points DESC, olympiad_nobles.competitions_done DESC, olympiad_nobles.competitions_won DESC LIMIT 10";
- - private static final String GET_EACH_CLASS_LEADER_SOULHOUND = "SELECT characters.char_name from olympiad_nobles_eom, characters " + "WHERE characters.charId = olympiad_nobles_eom.charId AND (olympiad_nobles_eom.class_id = ? OR olympiad_nobles_eom.class_id = 133) " + "AND olympiad_nobles_eom.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " " + "ORDER BY olympiad_nobles_eom.olympiad_points DESC, olympiad_nobles_eom.competitions_done DESC, olympiad_nobles_eom.competitions_won DESC LIMIT 10";
- - private static final String GET_EACH_CLASS_LEADER_CURRENT_SOULHOUND = "SELECT characters.char_name from olympiad_nobles, characters " + "WHERE characters.charId = olympiad_nobles.charId AND (olympiad_nobles.class_id = ? OR olympiad_nobles.class_id = 133) " + "AND olympiad_nobles.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " " + "ORDER BY olympiad_nobles.olympiad_points DESC, olympiad_nobles.competitions_done DESC, olympiad_nobles.competitions_won DESC LIMIT 10";
- + private static final String GET_EACH_CLASS_LEADER = "SELECT characters.char_name from olympiad_nobles_eom, characters " + "WHERE characters.charId = olympiad_nobles_eom.charId AND olympiad_nobles_eom.class_id = ? " + "AND olympiad_nobles_eom.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES
- + + " " + "ORDER BY olympiad_nobles_eom.olympiad_points DESC, olympiad_nobles_eom.competitions_done DESC, olympiad_nobles_eom.competitions_won DESC LIMIT 10";
- + private static final String GET_EACH_CLASS_LEADER_CURRENT = "SELECT characters.char_name from olympiad_nobles, characters " + "WHERE characters.charId = olympiad_nobles.charId AND olympiad_nobles.class_id = ? " + "AND olympiad_nobles.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " "
- + + "ORDER BY olympiad_nobles.olympiad_points DESC, olympiad_nobles.competitions_done DESC, olympiad_nobles.competitions_won DESC LIMIT 10";
- + private static final String GET_EACH_CLASS_LEADER_SOULHOUND = "SELECT characters.char_name from olympiad_nobles_eom, characters " + "WHERE characters.charId = olympiad_nobles_eom.charId AND (olympiad_nobles_eom.class_id = ? OR olympiad_nobles_eom.class_id = 133) "
- + + "AND olympiad_nobles_eom.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " " + "ORDER BY olympiad_nobles_eom.olympiad_points DESC, olympiad_nobles_eom.competitions_done DESC, olympiad_nobles_eom.competitions_won DESC LIMIT 10";
- + private static final String GET_EACH_CLASS_LEADER_CURRENT_SOULHOUND = "SELECT characters.char_name from olympiad_nobles, characters " + "WHERE characters.charId = olympiad_nobles.charId AND (olympiad_nobles.class_id = ? OR olympiad_nobles.class_id = 133) "
- + + "AND olympiad_nobles.competitions_done >= " + Config.ALT_OLY_MIN_MATCHES + " " + "ORDER BY olympiad_nobles.olympiad_points DESC, olympiad_nobles.competitions_done DESC, olympiad_nobles.competitions_won DESC LIMIT 10";
- private static final String OLYMPIAD_DELETE_ALL = "TRUNCATE olympiad_nobles";
- private static final String OLYMPIAD_MONTH_CLEAR = "TRUNCATE olympiad_nobles_eom";
- @@ -201,23 +209,12 @@
- {
- _log.log(Level.INFO, "Olympiad System: failed to load data from database, trying to load from file.");
- - Properties OlympiadProperties = new Properties();
- - try (InputStream is = new FileInputStream(Config.OLYMPIAD_CONFIG_FILE))
- - {
- -
- - OlympiadProperties.load(is);
- - }
- - catch (Exception e)
- - {
- - _log.log(Level.SEVERE, "Olympiad System: Error loading olympiad properties: ", e);
- - return;
- - }
- -
- - _currentCycle = Integer.parseInt(OlympiadProperties.getProperty("CurrentCycle", "1"));
- - _period = Integer.parseInt(OlympiadProperties.getProperty("Period", "0"));
- - _olympiadEnd = Long.parseLong(OlympiadProperties.getProperty("OlympiadEnd", "0"));
- - _validationEnd = Long.parseLong(OlympiadProperties.getProperty("ValidationEnd", "0"));
- - _nextWeeklyChange = Long.parseLong(OlympiadProperties.getProperty("NextWeeklyChange", "0"));
- + final PropertiesParser OlympiadProperties = new PropertiesParser(Config.OLYMPIAD_CONFIG_FILE);
- + _currentCycle = OlympiadProperties.getInt("CurrentCycle", 1);
- + _period = OlympiadProperties.getInt("Period", 0);
- + _olympiadEnd = OlympiadProperties.getInt("OlympiadEnd", 0);
- + _validationEnd = OlympiadProperties.getInt("ValidationEnd", 0);
- + _nextWeeklyChange = OlympiadProperties.getInt("NextWeeklyChange", 0);
- }
- switch (_period)
- @@ -540,8 +537,8 @@
- saveOlympiadStatus();
- init();
- - } , getMillisToCompEnd());
- - } , getMillisToCompBegin());
- + }, getMillisToCompEnd());
- + }, getMillisToCompBegin());
- }
- private long getMillisToOlympiadEnd()
- @@ -656,7 +653,7 @@
- Calendar nextChange = Calendar.getInstance();
- _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD;
- - } , getMillisToWeekChange(), WEEKLY_PERIOD);
- + }, getMillisToWeekChange(), WEEKLY_PERIOD);
- }
- protected synchronized void addWeeklyPoints()
- diff --git a/src/main/java/com/l2jserver/status/GameStatusThread.java b/src/main/java/com/l2jserver/status/GameStatusThread.java
- index 26e9aee..8cfc407 100644
- --- a/src/main/java/com/l2jserver/status/GameStatusThread.java
- +++ b/src/main/java/com/l2jserver/status/GameStatusThread.java
- @@ -19,20 +19,18 @@
- package com.l2jserver.status;
- import java.io.BufferedReader;
- -import java.io.File;
- -import java.io.FileInputStream;
- import java.io.IOException;
- -import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.InetAddress;
- import java.net.Socket;
- -import java.util.Properties;
- +import java.net.UnknownHostException;
- import java.util.logging.Logger;
- import com.l2jserver.Config;
- import com.l2jserver.gameserver.handler.ITelnetHandler;
- import com.l2jserver.gameserver.handler.TelnetHandler;
- +import com.l2jserver.util.PropertiesParser;
- public final class GameStatusThread extends Thread
- {
- @@ -96,24 +94,21 @@
- telnetOutput(2, "");
- }
- - final File file = new File(Config.TELNET_FILE);
- - try (InputStream telnetIS = new FileInputStream(file))
- + PropertiesParser telnetSettings = new PropertiesParser(Config.TELNET_FILE);
- + String HostList = telnetSettings.getString("ListOfHosts", "127.0.0.1,localhost,::1");
- +
- + if (Config.DEVELOPER)
- {
- - Properties telnetSettings = new Properties();
- - telnetSettings.load(telnetIS);
- -
- - String HostList = telnetSettings.getProperty("ListOfHosts", "127.0.0.1,localhost,::1");
- -
- - if (Config.DEVELOPER)
- + telnetOutput(3, "Comparing ip to list...");
- + }
- +
- + // compare
- + String ipToCompare = null;
- + for (String ip : HostList.split(","))
- + {
- + if (!result)
- {
- - telnetOutput(3, "Comparing ip to list...");
- - }
- -
- - // compare
- - String ipToCompare = null;
- - for (String ip : HostList.split(","))
- - {
- - if (!result)
- + try
- {
- ipToCompare = InetAddress.getByName(ip).getHostAddress();
- if (clientStringIP.equals(ipToCompare))
- @@ -125,16 +120,17 @@
- telnetOutput(3, clientStringIP + " = " + ipToCompare + "(" + ip + ") = " + result);
- }
- }
- + catch (UnknownHostException e)
- + {
- + if (Config.DEVELOPER)
- + {
- + telnetOutput(4, "");
- + }
- +
- + telnetOutput(1, "Error: " + e);
- + }
- }
- }
- - catch (IOException e)
- - {
- - if (Config.DEVELOPER)
- - {
- - telnetOutput(4, "");
- - }
- - telnetOutput(1, "Error: " + e);
- - }
- if (Config.DEVELOPER)
- {
- diff --git a/src/main/java/com/l2jserver/status/LoginStatusThread.java b/src/main/java/com/l2jserver/status/LoginStatusThread.java
- index fa56502..98ae91e 100644
- --- a/src/main/java/com/l2jserver/status/LoginStatusThread.java
- +++ b/src/main/java/com/l2jserver/status/LoginStatusThread.java
- @@ -19,21 +19,19 @@
- package com.l2jserver.status;
- import java.io.BufferedReader;
- -import java.io.File;
- -import java.io.FileInputStream;
- import java.io.IOException;
- -import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.io.PrintWriter;
- import java.net.InetAddress;
- import java.net.Socket;
- -import java.util.Properties;
- +import java.net.UnknownHostException;
- import java.util.logging.Logger;
- import com.l2jserver.Config;
- import com.l2jserver.loginserver.GameServerTable;
- import com.l2jserver.loginserver.L2LoginServer;
- import com.l2jserver.loginserver.LoginController;
- +import com.l2jserver.util.PropertiesParser;
- public final class LoginStatusThread extends Thread
- {
- @@ -86,24 +84,21 @@
- telnetOutput(2, "");
- }
- - final File file = new File(Config.TELNET_FILE);
- - try (InputStream telnetIS = new FileInputStream(file))
- + PropertiesParser telnetSettings = new PropertiesParser(Config.TELNET_FILE);
- + String HostList = telnetSettings.getString("ListOfHosts", "127.0.0.1,localhost,::1");
- +
- + if (Config.DEVELOPER)
- {
- - Properties telnetSettings = new Properties();
- - telnetSettings.load(telnetIS);
- -
- - String HostList = telnetSettings.getProperty("ListOfHosts", "127.0.0.1,localhost,::1");
- -
- - if (Config.DEVELOPER)
- + telnetOutput(3, "Comparing ip to list...");
- + }
- +
- + // compare
- + String ipToCompare = null;
- + for (String ip : HostList.split(","))
- + {
- + if (!result)
- {
- - telnetOutput(3, "Comparing ip to list...");
- - }
- -
- - // compare
- - String ipToCompare = null;
- - for (String ip : HostList.split(","))
- - {
- - if (!result)
- + try
- {
- ipToCompare = InetAddress.getByName(ip).getHostAddress();
- if (clientStringIP.equals(ipToCompare))
- @@ -115,16 +110,17 @@
- telnetOutput(3, clientStringIP + " = " + ipToCompare + "(" + ip + ") = " + result);
- }
- }
- + catch (UnknownHostException e)
- + {
- + if (Config.DEVELOPER)
- + {
- + telnetOutput(4, "");
- + }
- +
- + telnetOutput(1, "Error: " + e);
- + }
- }
- }
- - catch (IOException e)
- - {
- - if (Config.DEVELOPER)
- - {
- - telnetOutput(4, "");
- - }
- - telnetOutput(1, "Error: " + e);
- - }
- if (Config.DEVELOPER)
- {
- diff --git a/src/main/java/com/l2jserver/status/Status.java b/src/main/java/com/l2jserver/status/Status.java
- index e6521d3..5f4f692 100644
- --- a/src/main/java/com/l2jserver/status/Status.java
- +++ b/src/main/java/com/l2jserver/status/Status.java
- @@ -18,19 +18,16 @@
- */
- package com.l2jserver.status;
- -import java.io.File;
- -import java.io.FileInputStream;
- import java.io.IOException;
- -import java.io.InputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.ArrayList;
- import java.util.List;
- -import java.util.Properties;
- import java.util.logging.Logger;
- import com.l2jserver.Config;
- import com.l2jserver.Server;
- +import com.l2jserver.util.PropertiesParser;
- import com.l2jserver.util.Rnd;
- public class Status extends Thread
- @@ -101,13 +98,9 @@
- {
- super("Status");
- _mode = mode;
- - Properties telnetSettings = new Properties();
- - try (InputStream is = new FileInputStream(new File(Config.TELNET_FILE)))
- - {
- - telnetSettings.load(is);
- - }
- - int statusPort = Integer.parseInt(telnetSettings.getProperty("StatusPort", "12345"));
- - _statusPw = telnetSettings.getProperty("StatusPW");
- + PropertiesParser telnetSettings = new PropertiesParser(Config.TELNET_FILE);
- + int statusPort = telnetSettings.getInt("StatusPort", 12345);
- + _statusPw = telnetSettings.getString("StatusPW", "");
- if ((_mode == Server.MODE_GAMESERVER) || (_mode == Server.MODE_LOGINSERVER))
- {
- diff --git a/src/main/java/com/l2jserver/tools/configurator/ConfigUserInterface.java b/src/main/java/com/l2jserver/tools/configurator/ConfigUserInterface.java
- index a789f89..938b792 100644
- --- a/src/main/java/com/l2jserver/tools/configurator/ConfigUserInterface.java
- +++ b/src/main/java/com/l2jserver/tools/configurator/ConfigUserInterface.java
- @@ -83,9 +83,6 @@
- private ResourceBundle _bundle;
- - /**
- - * @param args
- - */
- public static void main(String[] args)
- {
- try
- @@ -251,10 +248,6 @@
- }
- }
- - /**
- - * @param file
- - * @throws IOException
- - */
- private void parsePropertiesFile(File file) throws IOException
- {
- try (FileInputStream fis = new FileInputStream(file);
- diff --git a/src/main/java/com/l2jserver/tools/configurator/Configurator.java b/src/main/java/com/l2jserver/tools/configurator/Configurator.java
- new file mode 100644
- index 0000000..325f70e
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/Configurator.java
- @@ -0,0 +1,58 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator;
- +
- +import java.util.ResourceBundle;
- +
- +import com.l2jserver.tools.configurator.frontend.jfx.JfxApplication;
- +
- +import javafx.application.Application;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public final class Configurator
- +{
- + private static final ResourceBundle RESOURCES = ResourceBundle.getBundle("com.l2jserver.tools.configurator.res.Configurator");
- +
- + public static final String STRING_APP_NAME = "AppName";
- +
- + public static final String LOADING_CONFIGS = "LoadingConfigs";
- + public static final String LOADING_CONFIGS_SUCCESSFUL = "LoadingConfigsSuccessful";
- + public static final String LOADING_CONFIGS_ERROR = "LoadingConfigsError";
- +
- + public static final String SAVING_CONFIGS = "SavingConfigs";
- + public static final String SAVING_CONFIGS_SUCCESSFUL = "SavingConfigsSuccessful";
- + public static final String SAVING_CONFIGS_ERROR = "SavingConfigsError";
- +
- + public static String getString(String key)
- + {
- + return RESOURCES.getString(key);
- + }
- +
- + public static String getAppName()
- + {
- + return getString(STRING_APP_NAME);
- + }
- +
- + public static void main(String[] args)
- + {
- + Application.launch(JfxApplication.class, args);
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/JfxApplication.java b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/JfxApplication.java
- new file mode 100644
- index 0000000..0f1a2e3
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/JfxApplication.java
- @@ -0,0 +1,70 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.frontend.jfx;
- +
- +import com.l2jserver.tools.configurator.frontend.jfx.stage.mainstage.MainStage;
- +
- +import javafx.application.Application;
- +import javafx.stage.Stage;
- +import javafx.stage.WindowEvent;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public class JfxApplication extends Application
- +{
- + private static MainStage _mainStage = null;
- +
- + @Override
- + public void start(Stage primaryStage)
- + {
- + primaryStage.close();
- +
- + _mainStage = new MainStage();
- + _mainStage.addEventHandler(WindowEvent.WINDOW_SHOWN, this::mainStageShown);
- + _mainStage.show();
- + }
- +
- + private void mainStageShown(WindowEvent e)
- + {
- + _mainStage.removeEventHandler(WindowEvent.WINDOW_SHOWN, this::mainStageShown);
- + _mainStage.layout();
- + _mainStage.loadConfigs();
- + }
- +
- + public static void loadConfigs()
- + {
- + _mainStage.loadConfigs();
- + }
- +
- + public static void saveConfigs()
- + {
- + _mainStage.saveConfigs();
- + }
- +
- + public static void quit()
- + {
- + _mainStage.close();
- + }
- +
- + public static void about()
- + {
- + _mainStage.about();
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/ConfigDirectiveTable.java b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/ConfigDirectiveTable.java
- new file mode 100644
- index 0000000..220ff70
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/ConfigDirectiveTable.java
- @@ -0,0 +1,89 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.frontend.jfx.control.configdirectivetable;
- +
- +import java.io.IOException;
- +import java.util.Collection;
- +import java.util.ResourceBundle;
- +
- +import com.l2jserver.tools.configurator.model.ConfigDirective;
- +import com.l2jserver.tools.util.JfxUtil;
- +
- +import javafx.beans.property.ReadOnlyObjectWrapper;
- +import javafx.fxml.FXML;
- +import javafx.fxml.FXMLLoader;
- +import javafx.scene.control.TableColumn;
- +import javafx.scene.control.TableView;
- +import javafx.scene.control.cell.PropertyValueFactory;
- +import javafx.scene.control.cell.TextFieldTableCell;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public class ConfigDirectiveTable extends TableView<ConfigDirective>
- +{
- + private static final String FXML_RESOURCE_PATH = "/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.fxml";
- + private static final String RESOURCE_BUNDLE_NAME = "com.l2jserver.tools.configurator.res.jfx.control.configdirectivetable.ConfigDirectiveTable";
- + private static final FXMLLoader LOADER = JfxUtil.createFxmlLoader(FXML_RESOURCE_PATH, RESOURCE_BUNDLE_NAME);
- +
- + @FXML
- + private ResourceBundle resources;
- +
- + @FXML
- + private TableColumn<ConfigDirective, String> _nameColumn;
- + @FXML
- + private TableColumn<ConfigDirective, String> _valueColumn;
- + @FXML
- + private TableColumn<ConfigDirective, String> _valueCurrentColumn;
- + @FXML
- + private TableColumn<ConfigDirective, String> _valueDefaultColumn;
- + @FXML
- + private TableColumn<ConfigDirective, ConfigDirective> _preserveColumn;
- + @FXML
- + private TableColumn<ConfigDirective, ConfigDirective> _resetColumn;
- +
- + @FXML
- + void initialize()
- + {
- + _nameColumn.setCellValueFactory(new PropertyValueFactory<ConfigDirective, String>("name"));
- + _valueCurrentColumn.setCellValueFactory(new PropertyValueFactory<>("value"));
- + _valueCurrentColumn.setCellFactory(TextFieldTableCell.forTableColumn());
- + _valueDefaultColumn.setCellValueFactory(new PropertyValueFactory<>("defaultValue"));
- + _preserveColumn.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper<>(cellData.getValue()));
- + _preserveColumn.setCellFactory(col -> new OverwriteCell());
- + _resetColumn.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper<>(cellData.getValue()));
- + _resetColumn.setCellFactory(col -> new ResetCell(resources));
- + }
- +
- + public static ConfigDirectiveTable create() throws IOException
- + {
- + ConfigDirectiveTable ctrl = new ConfigDirectiveTable();
- + JfxUtil.loadFxml(LOADER, ctrl, ctrl);
- + return ctrl;
- + }
- +
- + private ConfigDirectiveTable()
- + {
- + }
- +
- + public void addConfigDirectives(Collection<ConfigDirective> directives)
- + {
- + getItems().addAll(directives);
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/OverwriteCell.java b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/OverwriteCell.java
- new file mode 100644
- index 0000000..248242d
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/OverwriteCell.java
- @@ -0,0 +1,78 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.frontend.jfx.control.configdirectivetable;
- +
- +import com.l2jserver.tools.configurator.model.ConfigDirective;
- +
- +import javafx.beans.value.ChangeListener;
- +import javafx.geometry.Pos;
- +import javafx.scene.control.CheckBox;
- +import javafx.scene.control.TableCell;
- +
- +/**
- + * @author HorridoJoho
- + */
- +final class OverwriteCell extends TableCell<ConfigDirective, ConfigDirective>
- +{
- + private final CheckBox _preserveBox = new CheckBox();
- + private final ChangeListener<String> _valueChangeListener = (observable, oldValue, newValue) ->
- + {
- + if (!getItem().isDefault())
- + {
- + _preserveBox.selectedProperty().set(true);
- + }
- + };
- +
- + OverwriteCell()
- + {
- + setAlignment(Pos.CENTER);
- + }
- +
- + @Override
- + public void updateItem(ConfigDirective item, boolean empty)
- + {
- + _preserveBox.disableProperty().unbind();
- + _preserveBox.selectedProperty().unbind();
- +
- + ConfigDirective oldItem = getItem();
- + if (oldItem != null)
- + {
- + oldItem.preserveProperty().unbind();
- + oldItem.valueProperty().removeListener(_valueChangeListener);
- + }
- +
- + super.updateItem(item, empty);
- +
- + if (empty || (item == null))
- + {
- + setText(null);
- + setGraphic(null);
- + }
- + else
- + {
- + _preserveBox.disableProperty().bind(item.valueProperty().isNotEqualTo(item.getDefaultValue()));
- + _preserveBox.selectedProperty().set(item.preserveProperty().get());
- +
- + item.preserveProperty().bind(_preserveBox.selectedProperty());
- + item.valueProperty().addListener(_valueChangeListener);
- +
- + setGraphic(_preserveBox);
- + }
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/ResetCell.java b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/ResetCell.java
- new file mode 100644
- index 0000000..d607c52
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/ResetCell.java
- @@ -0,0 +1,65 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.frontend.jfx.control.configdirectivetable;
- +
- +import java.util.ResourceBundle;
- +
- +import com.l2jserver.tools.configurator.model.ConfigDirective;
- +
- +import javafx.geometry.Pos;
- +import javafx.scene.control.Button;
- +import javafx.scene.control.TableCell;
- +
- +/**
- + * @author HorridoJoho
- + */
- +final class ResetCell extends TableCell<ConfigDirective, ConfigDirective>
- +{
- + private final ResourceBundle _resources;
- + Button _resetButton = new Button();
- +
- + ResetCell(ResourceBundle resources)
- + {
- + _resources = resources;
- + setAlignment(Pos.CENTER);
- + }
- +
- + @Override
- + public void updateItem(ConfigDirective item, boolean empty)
- + {
- + _resetButton.disableProperty().unbind();
- + _resetButton.setOnAction(null);
- +
- + super.updateItem(item, empty);
- +
- + if (empty || (item == null))
- + {
- + setText(null);
- + setGraphic(null);
- + }
- + else
- + {
- + _resetButton.setText(_resources.getString("Reset"));
- + _resetButton.disableProperty().bind(item.valueProperty().isEqualTo(item.getDefaultValue()));
- + _resetButton.setOnAction(e -> item.reset());
- +
- + setGraphic(_resetButton);
- + }
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/stage/mainstage/MainStage.java b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/stage/mainstage/MainStage.java
- new file mode 100644
- index 0000000..f121453
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/stage/mainstage/MainStage.java
- @@ -0,0 +1,236 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.frontend.jfx.stage.mainstage;
- +
- +import java.io.IOException;
- +import java.io.InputStream;
- +import java.io.OutputStream;
- +import java.nio.file.DirectoryStream;
- +import java.nio.file.Files;
- +import java.nio.file.Path;
- +import java.nio.file.Paths;
- +import java.util.ArrayList;
- +import java.util.Collection;
- +import java.util.List;
- +import java.util.Map;
- +import java.util.Properties;
- +
- +import com.l2jserver.tools.configurator.Configurator;
- +import com.l2jserver.tools.configurator.frontend.jfx.control.configdirectivetable.ConfigDirectiveTable;
- +import com.l2jserver.tools.configurator.model.Config;
- +import com.l2jserver.tools.configurator.model.ConfigDirective;
- +import com.l2jserver.tools.util.JfxUtil;
- +import com.l2jserver.tools.util.jfx.BackgroundTask;
- +import com.l2jserver.tools.util.jfx.stage.ApplicationStage;
- +import com.l2jserver.tools.util.jfx.stage.msgbox.MsgBox;
- +import com.l2jserver.tools.util.jfx.stage.msgbox.MsgBoxButton;
- +import com.l2jserver.tools.util.jfx.stage.msgbox.MsgBoxResult;
- +
- +import javafx.scene.control.Tab;
- +import javafx.scene.layout.BorderPane;
- +import javafx.stage.Modality;
- +import javafx.stage.StageStyle;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public final class MainStage extends ApplicationStage<BorderPane, MainStageController>
- +{
- + private static final String FXML_RESOURCE_PATH = "/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.fxml";
- + private static final String RESOURCE_BUNDLE_NAME = "com.l2jserver.tools.configurator.res.jfx.stage.mainstage.MainStage";
- + private final List<Config> _configs = new ArrayList<>();
- +
- + public MainStage()
- + {
- + super(null, Modality.NONE, StageStyle.DECORATED, Configurator.getAppName(), FXML_RESOURCE_PATH, RESOURCE_BUNDLE_NAME, null);
- + }
- +
- + private MsgBoxResult showMessageBox(String message, MsgBoxButton... buttons)
- + {
- + MsgBox mb = new MsgBox(this, Modality.WINDOW_MODAL, null, Configurator.getAppName(), message, buttons);
- + mb.initStyle(StageStyle.UTILITY);
- + mb.setResizable(false);
- + mb.showAndWait();
- + mb.close();
- + return mb.getResult();
- + }
- +
- + private <T> T runTask(String message, String successMessage, String errorMessage, BackgroundTask<T> task)
- + {
- + MsgBox mb = new MsgBox(this, Modality.WINDOW_MODAL, null, Configurator.getAppName(), message, MsgBoxButton.ABORT);
- + mb.initStyle(StageStyle.UTILITY);
- + mb.setResizable(false);
- + try
- + {
- + T result = JfxUtil.runBackgroundTaskWithDialog(mb, task);
- + showMessageBox(successMessage, MsgBoxButton.OK);
- + return result;
- + }
- + catch (Throwable e)
- + {
- + showMessageBox(errorMessage + "\n\n" + e.toString(), MsgBoxButton.OK);
- + }
- + finally
- + {
- + mb.close();
- + }
- +
- + return null;
- + }
- +
- + private Collection<Tab> loadConfigsTask() throws IOException
- + {
- + Path configPath = Paths.get("dist", "game", "config");
- + Path defaultPath = configPath.resolve("default");
- + try (DirectoryStream<Path> ds = Files.newDirectoryStream(defaultPath, "*.properties"))
- + {
- + List<Config> configs = new ArrayList<>();
- +
- + for (Path entry : ds)
- + {
- + if (Files.isDirectory(entry))
- + {
- + continue;
- + }
- +
- + Path fileName = entry.getFileName();
- + Config config = new Config(fileName.toString());
- + configs.add(config);
- +
- + Properties defaultProps = new Properties();
- + try (InputStream is = Files.newInputStream(entry))
- + {
- + defaultProps.load(is);
- + }
- +
- + for (Map.Entry<Object, Object> directiveEntry : defaultProps.entrySet())
- + {
- + config.addDirective((String) directiveEntry.getKey(), String.class, (String) directiveEntry.getValue());
- + }
- +
- + Path overwritePath = configPath.resolve(fileName);
- + if (Files.exists(overwritePath) && !Files.isDirectory(overwritePath))
- + {
- + Properties overwriteProps = new Properties();
- + try (InputStream is = Files.newInputStream(overwritePath))
- + {
- + overwriteProps.load(is);
- + }
- +
- + for (Map.Entry<Object, Object> directiveEntry : overwriteProps.entrySet())
- + {
- + ConfigDirective cd = config.getDirective((String) directiveEntry.getKey());
- + if (cd == null)
- + {
- + continue;
- + }
- + cd.valueProperty().set((String) directiveEntry.getValue());
- + cd.preserveProperty().set(true);
- + }
- + }
- + }
- +
- + _configs.clear();
- + _configs.addAll(configs);
- + }
- +
- + List<Tab> configTabs = new ArrayList<>(_configs.size());
- + for (Config config : _configs)
- + {
- + Tab configTab = new Tab(config.getName());
- + configTab.setUserData(config);
- + ConfigDirectiveTable directiveList = ConfigDirectiveTable.create();
- +
- + for (Map.Entry<String, ConfigDirective> directiveEntry : config.getDirectives().entrySet())
- + {
- + directiveList.getItems().add(directiveEntry.getValue());
- + }
- +
- + configTab.setContent(directiveList);
- + configTabs.add(configTab);
- + }
- +
- + return configTabs;
- + }
- +
- + private Void saveConfigsTask() throws IOException
- + {
- + Path configPath = Paths.get("dist", "game", "config");
- +
- + for (Config config : _configs)
- + {
- + Properties props = null;
- + for (Map.Entry<String, ConfigDirective> directiveEntry : config.getDirectives().entrySet())
- + {
- + ConfigDirective directive = directiveEntry.getValue();
- + if (!directive.preserveProperty().get() && directive.valueProperty().get().equals(directive.getDefaultValue()))
- + {
- + continue;
- + }
- +
- + if (props == null)
- + {
- + props = new Properties();
- + }
- +
- + props.setProperty(directive.getName(), directive.valueProperty().get());
- + }
- +
- + Path overwritePath = configPath.resolve(config.getName());
- + if (props != null)
- + {
- + try (OutputStream os = Files.newOutputStream(overwritePath))
- + {
- + props.store(os, null);
- + }
- + }
- + else
- + {
- + Files.deleteIfExists(overwritePath);
- + }
- + }
- +
- + return null;
- + }
- +
- + public void loadConfigs()
- + {
- + Collection<Tab> configTabs = runTask(Configurator.getString(Configurator.LOADING_CONFIGS), Configurator.getString(Configurator.LOADING_CONFIGS_SUCCESSFUL), Configurator.getString(Configurator.LOADING_CONFIGS_ERROR), this::loadConfigsTask);
- + if (configTabs != null)
- + {
- + getController().clearConfigTabs();
- + getController().addConfigTabs(configTabs);
- + }
- + }
- +
- + public void saveConfigs()
- + {
- + runTask(Configurator.getString(Configurator.SAVING_CONFIGS), Configurator.getString(Configurator.SAVING_CONFIGS_SUCCESSFUL), Configurator.getString(Configurator.SAVING_CONFIGS_ERROR), this::saveConfigsTask);
- + }
- +
- + public void quit()
- + {
- + close();
- + }
- +
- + public void about()
- + {
- + showMessageBox("Server Configurator\nJavaFX Version 1.0\nby HorridoJoho", MsgBoxButton.OK);
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/stage/mainstage/MainStageController.java b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/stage/mainstage/MainStageController.java
- new file mode 100644
- index 0000000..5d3b154
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/stage/mainstage/MainStageController.java
- @@ -0,0 +1,92 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.frontend.jfx.stage.mainstage;
- +
- +import java.util.Collection;
- +
- +import com.l2jserver.tools.configurator.frontend.jfx.JfxApplication;
- +import com.l2jserver.tools.util.jfx.StageController;
- +
- +import javafx.event.ActionEvent;
- +import javafx.fxml.FXML;
- +import javafx.scene.control.MenuItem;
- +import javafx.scene.control.Tab;
- +import javafx.scene.control.TabPane;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public class MainStageController implements StageController
- +{
- + @FXML
- + private MenuItem _menuFileLoad;
- + @FXML
- + private MenuItem _menuFileSave;
- + @FXML
- + private MenuItem _menuFileQuit;
- + @FXML
- + private MenuItem _menuHelpAbout;
- + @FXML
- + private TabPane _tabsConfigurations;
- +
- + @FXML
- + private void onMenuFileLoad(ActionEvent event)
- + {
- + JfxApplication.loadConfigs();
- + }
- +
- + @FXML
- + private void onMenuFileSave(ActionEvent event)
- + {
- + JfxApplication.saveConfigs();
- + }
- +
- + @FXML
- + private void onMenuFileQuit(ActionEvent event)
- + {
- + JfxApplication.quit();
- + }
- +
- + @FXML
- + private void onMenuHelpAbout(ActionEvent event)
- + {
- + JfxApplication.about();
- + }
- +
- + void clearConfigTabs()
- + {
- + _tabsConfigurations.getTabs().clear();
- + }
- +
- + void addConfigTab(Tab configTab)
- + {
- + _tabsConfigurations.getTabs().add(configTab);
- + }
- +
- + void addConfigTabs(Collection<Tab> configTabs)
- + {
- + _tabsConfigurations.getTabs().addAll(configTabs);
- + }
- +
- + @Override
- + public boolean onRequestClose()
- + {
- + return true;
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/model/Config.java b/src/main/java/com/l2jserver/tools/configurator/model/Config.java
- new file mode 100644
- index 0000000..611562a
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/model/Config.java
- @@ -0,0 +1,69 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.model;
- +
- +import java.util.Collections;
- +import java.util.LinkedHashMap;
- +import java.util.Map;
- +import java.util.Objects;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public final class Config
- +{
- + private final String _name;
- + private final Map<String, ConfigDirective> _directives;
- +
- + public Config(String name)
- + {
- + Objects.requireNonNull(name);
- + _name = name;
- + _directives = new LinkedHashMap<>();
- + }
- +
- + public ConfigDirective addDirective(String name, Class<?> type, String defaultValue, String value)
- + {
- + ConfigDirective cd = new ConfigDirective(name, type, defaultValue, value, false);
- + _directives.put(name, cd);
- + return cd;
- + }
- +
- + public ConfigDirective addDirective(String name, Class<?> type, String defaultValue)
- + {
- + ConfigDirective cd = new ConfigDirective(name, type, defaultValue, false);
- + _directives.put(name, cd);
- + return cd;
- + }
- +
- + public String getName()
- + {
- + return _name;
- + }
- +
- + public Map<String, ConfigDirective> getDirectives()
- + {
- + return Collections.unmodifiableMap(_directives);
- + }
- +
- + public ConfigDirective getDirective(String name)
- + {
- + return _directives.get(name);
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirective.java b/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirective.java
- new file mode 100644
- index 0000000..9c52a59
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirective.java
- @@ -0,0 +1,73 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.model;
- +
- +import java.util.Objects;
- +
- +import javafx.beans.property.SimpleBooleanProperty;
- +import javafx.beans.property.SimpleStringProperty;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public final class ConfigDirective extends ConfigDirectiveDefinition implements Cloneable
- +{
- + private final SimpleStringProperty _value;
- + private final SimpleBooleanProperty _preserve;
- +
- + public ConfigDirective(String name, Class<?> type, String defaultValue, String value, boolean preserve)
- + {
- + super(name, type, defaultValue);
- + Objects.requireNonNull(value);
- +
- + _value = new SimpleStringProperty(value);
- + _preserve = new SimpleBooleanProperty(preserve);
- + }
- +
- + public ConfigDirective(String name, Class<?> type, String defaultValue, boolean preserve)
- + {
- + this(name, type, defaultValue, defaultValue, preserve);
- + }
- +
- + public void reset()
- + {
- + valueProperty().set(getDefaultValue());
- + }
- +
- + public SimpleStringProperty valueProperty()
- + {
- + return _value;
- + }
- +
- + public SimpleBooleanProperty preserveProperty()
- + {
- + return _preserve;
- + }
- +
- + public boolean isDefault()
- + {
- + return valueProperty().get().equals(getDefaultValue());
- + }
- +
- + @Override
- + public ConfigDirective clone()
- + {
- + return new ConfigDirective(getName(), getType(), getDefaultValue(), valueProperty().get(), preserveProperty().get());
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirectiveDefinition.java b/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirectiveDefinition.java
- new file mode 100644
- index 0000000..cfb3d5c
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirectiveDefinition.java
- @@ -0,0 +1,63 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.configurator.model;
- +
- +import java.util.Objects;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public class ConfigDirectiveDefinition
- +{
- + private final String _name;
- + private final Class<?> _type;
- + private final String _defaultValue;
- +
- + public ConfigDirectiveDefinition(String name, Class<?> type, String defaultValue)
- + {
- + Objects.requireNonNull(name);
- + Objects.requireNonNull(type);
- + Objects.requireNonNull(defaultValue);
- +
- + _name = name;
- + _type = type;
- + _defaultValue = defaultValue;
- + }
- +
- + public String getName()
- + {
- + return _name;
- + }
- +
- + public Class<?> getType()
- + {
- + return _type;
- + }
- +
- + public String getDefaultValue()
- + {
- + return _defaultValue;
- + }
- +
- + @Override
- + public ConfigDirectiveDefinition clone()
- + {
- + return this;
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/configurator/res/Configurator.properties b/src/main/java/com/l2jserver/tools/configurator/res/Configurator.properties
- new file mode 100644
- index 0000000..67a618c
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/res/Configurator.properties
- @@ -0,0 +1,9 @@
- +AppName=Server Configurator
- +
- +LoadingConfigs=Loading configurations...
- +LoadingConfigsSuccessful=Loading configuration finishes successful.
- +LoadingConfigsError=There was an error loading the configurations!
- +
- +SavingConfigs=Saving configurations...
- +SavingConfigsSuccessful=Saving configurations finished successful.
- +SavingConfigsError=There was an error saving the configurations!
- diff --git a/src/main/java/com/l2jserver/tools/configurator/res/Configurator_de.properties b/src/main/java/com/l2jserver/tools/configurator/res/Configurator_de.properties
- new file mode 100644
- index 0000000..1e97638
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/res/Configurator_de.properties
- @@ -0,0 +1,9 @@
- +AppName=Server Konfigurator
- +
- +LoadingConfigs=Lade Konfigurationen...
- +LoadingConfigsSuccessful=Das Laden der Konfigurationen wurde erfolgreich abgeschlossen.
- +LoadingConfigsError=Beim laden der Konfigurationen trat ein Fehler auf!
- +
- +SavingConfigs=Speichere Konfigurationen...
- +SavingConfigsSuccessful=Das Speichern der Konfigurationen wurde erfolgreich abgeschlossen.
- +SavingConfigsError=Beim speichern der Konfigurationen trat ein Fehler auf!
- \ No newline at end of file
- diff --git a/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.fxml b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.fxml
- new file mode 100644
- index 0000000..dac67da
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.fxml
- @@ -0,0 +1,17 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +
- +<?import javafx.scene.control.TableColumn?>
- +<?import javafx.scene.control.TableView?>
- +
- +<fx:root editable="true" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" type="TableView" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1">
- + <columns>
- + <TableColumn fx:id="_nameColumn" editable="false" maxWidth="1.7976931348623157E308" minWidth="200.0" prefWidth="-1.0" sortable="false" text="%Name" />
- + <TableColumn fx:id="_valueColumn" maxWidth="1.7976931348623157E308" minWidth="200.0" prefWidth="-1.0" sortable="false" text="%Value">
- + <columns>
- + <TableColumn fx:id="_valueCurrentColumn" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" sortable="false" text="%CurrentValue" />
- + <TableColumn fx:id="_valueDefaultColumn" editable="false" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" sortable="false" text="%DefaultValue" />
- + </columns></TableColumn>
- + <TableColumn fx:id="_preserveColumn" editable="false" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" resizable="false" sortable="false" text="%Overwrite" />
- + <TableColumn fx:id="_resetColumn" editable="false" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" resizable="false" sortable="false" text="%Reset" />
- + </columns>
- +</fx:root>
- diff --git a/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.properties b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.properties
- new file mode 100644
- index 0000000..2a661f1
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.properties
- @@ -0,0 +1,6 @@
- +Name=Name
- +Value=Value
- +DefaultValue=Default
- +CurrentValue=Current
- +Overwrite=Overwrite
- +Reset=Reset
- \ No newline at end of file
- diff --git a/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable_de.properties b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable_de.properties
- new file mode 100644
- index 0000000..fb0399c
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable_de.properties
- @@ -0,0 +1,6 @@
- +Name=Name
- +Value=Wert
- +DefaultValue=Standard
- +CurrentValue=Aktuell
- +Overwrite=�berschreiben
- +Reset=Zur�cksetzen
- \ No newline at end of file
- diff --git a/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.fxml b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.fxml
- new file mode 100644
- index 0000000..8c319b8
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.fxml
- @@ -0,0 +1,31 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +
- +<?import javafx.scene.control.Menu?>
- +<?import javafx.scene.control.MenuBar?>
- +<?import javafx.scene.control.MenuItem?>
- +<?import javafx.scene.control.TabPane?>
- +<?import javafx.scene.layout.BorderPane?>
- +
- +<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="480.0" minWidth="640.0" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.l2jserver.tools.configurator.frontend.jfx.stage.mainstage.MainStageController">
- + <top>
- + <MenuBar BorderPane.alignment="CENTER">
- + <menus>
- + <Menu mnemonicParsing="false" text="%MenuFile">
- + <items>
- + <MenuItem fx:id="_menuFileLoad" mnemonicParsing="false" onAction="#onMenuFileLoad" text="%MenuFileLoad" />
- + <MenuItem fx:id="_menuFileSave" mnemonicParsing="false" onAction="#onMenuFileSave" text="%MenuFileSave" />
- + <MenuItem fx:id="_menuFileQuit" mnemonicParsing="false" onAction="#onMenuFileQuit" text="%MenuFileQuit" />
- + </items>
- + </Menu>
- + <Menu mnemonicParsing="false" text="%MenuHelp">
- + <items>
- + <MenuItem fx:id="_menuHelpAbout" mnemonicParsing="false" onAction="#onMenuHelpAbout" text="%MenuHelpAbout" />
- + </items>
- + </Menu>
- + </menus>
- + </MenuBar>
- + </top>
- + <center>
- + <TabPane fx:id="_tabsConfigurations" prefHeight="200.0" prefWidth="200.0" tabClosingPolicy="UNAVAILABLE" BorderPane.alignment="CENTER" />
- + </center>
- +</BorderPane>
- diff --git a/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.properties b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.properties
- new file mode 100644
- index 0000000..d0c09a6
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.properties
- @@ -0,0 +1,8 @@
- +MenuFile=File
- +MenuHelp=Help
- +
- +MenuFileLoad=Load Configurations
- +MenuFileSave=Save
- +MenuFileQuit=Quit
- +
- +MenuHelpAbout=About Server Configurator...
- \ No newline at end of file
- diff --git a/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage_de.properties b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage_de.properties
- new file mode 100644
- index 0000000..4d4702f
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage_de.properties
- @@ -0,0 +1,8 @@
- +MenuFile=Datei
- +MenuHelp=Hilfe
- +
- +MenuFileLoad=Lade Konfigurationen
- +MenuFileSave=Speichern
- +MenuFileQuit=Beenden
- +
- +MenuHelpAbout=�ber Server Konfigurator...
- \ No newline at end of file
- diff --git a/src/main/java/com/l2jserver/tools/util/JfxUtil.java b/src/main/java/com/l2jserver/tools/util/JfxUtil.java
- new file mode 100644
- index 0000000..92b4db6
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/JfxUtil.java
- @@ -0,0 +1,84 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.util;
- +
- +import java.io.IOException;
- +import java.nio.charset.StandardCharsets;
- +import java.util.ResourceBundle;
- +
- +import com.l2jserver.tools.util.jfx.BackgroundTask;
- +import com.l2jserver.tools.util.jfx.BackgroundTaskRunner;
- +
- +import javafx.fxml.FXMLLoader;
- +import javafx.scene.Parent;
- +import javafx.scene.Scene;
- +import javafx.stage.Modality;
- +import javafx.stage.Stage;
- +import javafx.stage.StageStyle;
- +import javafx.stage.Window;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public final class JfxUtil
- +{
- + public static FXMLLoader createFxmlLoader(String fxml, String resources)
- + {
- + FXMLLoader loader = new FXMLLoader();
- + loader.setCharset(StandardCharsets.UTF_8);
- + loader.setLocation(JfxUtil.class.getResource(fxml));
- + loader.setResources(ResourceBundle.getBundle(resources));
- + return loader;
- + }
- +
- + public static void loadFxml(FXMLLoader loader, Object root, Object controller) throws IOException
- + {
- + loader.setRoot(root);
- + loader.setController(controller);
- + loader.load();
- + }
- +
- + public static <T> T runBackgroundTaskWithDialog(Window owner, String title, Parent root, BackgroundTask<T> task) throws Throwable
- + {
- + Stage s = new Stage();
- + s.initOwner(owner);
- + s.initModality(Modality.WINDOW_MODAL);
- + s.initStyle(StageStyle.DECORATED);
- +
- + s.setTitle(title);
- + s.setScene(new Scene(root));
- +
- + return runBackgroundTaskWithDialog(s, task);
- + }
- +
- + public static <T> T runBackgroundTaskWithDialog(Stage s, BackgroundTask<T> task) throws Throwable
- + {
- + s.initModality(Modality.WINDOW_MODAL);
- + s.initStyle(StageStyle.UTILITY);
- + s.setResizable(false);
- +
- + BackgroundTaskRunner<T> runner = new BackgroundTaskRunner<>(s, task);
- + s.close();
- + if (runner.getThrown() != null)
- + {
- + throw runner.getThrown();
- + }
- + return runner.getResult();
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTask.java b/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTask.java
- new file mode 100644
- index 0000000..f7a1434
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTask.java
- @@ -0,0 +1,28 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.util.jfx;
- +
- +/**
- + * @author HorridoJoho
- + */
- +@FunctionalInterface
- +public interface BackgroundTask<T>
- +{
- + T get() throws Throwable;
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTaskRunner.java b/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTaskRunner.java
- new file mode 100644
- index 0000000..7696c91
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTaskRunner.java
- @@ -0,0 +1,101 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.util.jfx;
- +
- +import java.util.Objects;
- +
- +import javafx.application.Platform;
- +import javafx.stage.Modality;
- +import javafx.stage.Stage;
- +import javafx.stage.WindowEvent;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public class BackgroundTaskRunner<T> implements Runnable
- +{
- + private final Stage _dialog;
- + private final BackgroundTask<T> _task;
- + private final Thread _thread;
- +
- + private Throwable _thrown;
- + private T _result;
- +
- + public BackgroundTaskRunner(Stage dialog, BackgroundTask<T> task)
- + {
- + Objects.requireNonNull(dialog);
- + Objects.requireNonNull(task);
- + _dialog = dialog;
- + _task = task;
- + _thread = new Thread(this, "L2J-TOOLS-JFX-BackgroundTaskRunner");
- +
- + _dialog.initModality(Modality.WINDOW_MODAL);
- + _dialog.addEventHandler(WindowEvent.WINDOW_SHOWN, this::dialogShown);
- + _dialog.showAndWait();
- + }
- +
- + @Override
- + public void run()
- + {
- + try
- + {
- + _result = _task.get();
- + }
- + catch (Throwable t)
- + {
- + _thrown = t;
- + }
- + finally
- + {
- + finishDialog();
- + }
- + }
- +
- + private void finishDialog()
- + {
- + if (_dialog != null)
- + {
- + Platform.runLater(() -> _dialog.close());
- + }
- + }
- +
- + public Throwable getThrown()
- + {
- + return _thrown;
- + }
- +
- + public T getResult()
- + {
- + return _result;
- + }
- +
- + private void dialogShown(WindowEvent e)
- + {
- + _dialog.removeEventHandler(WindowEvent.WINDOW_SHOWN, this::dialogShown);
- + try
- + {
- + _thread.start();
- + }
- + catch (Throwable t)
- + {
- + _thrown = t;
- + finishDialog();
- + }
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/StageController.java b/src/main/java/com/l2jserver/tools/util/jfx/StageController.java
- new file mode 100644
- index 0000000..61c3b91
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/StageController.java
- @@ -0,0 +1,6 @@
- +package com.l2jserver.tools.util.jfx;
- +
- +public interface StageController
- +{
- + boolean onRequestClose();
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.fxml b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.fxml
- new file mode 100644
- index 0000000..98a3df5
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.fxml
- @@ -0,0 +1,30 @@
- +<?xml version="1.0" encoding="UTF-8"?>
- +
- +<?import java.lang.*?>
- +<?import javafx.geometry.*?>
- +<?import javafx.scene.control.*?>
- +<?import javafx.scene.image.*?>
- +<?import javafx.scene.layout.*?>
- +
- +<GridPane prefHeight="-1.0" prefWidth="-1.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.l2jserver.tools.util.jfx.stage.msgbox.MsgBoxController">
- + <children>
- + <ImageView fx:id="ivImage" fitHeight="32.0" fitWidth="32.0" pickOnBounds="true" preserveRatio="false" translateX="0.0" translateY="0.0" translateZ="0.0" x="0.0" GridPane.columnIndex="0" GridPane.halignment="LEFT" GridPane.hgrow="ALWAYS" GridPane.rowIndex="0" GridPane.valignment="TOP" GridPane.vgrow="ALWAYS" />
- + <Label fx:id="lblText" text="Text" GridPane.columnIndex="1" GridPane.halignment="LEFT" GridPane.hgrow="ALWAYS" GridPane.rowIndex="0" GridPane.valignment="TOP" GridPane.vgrow="ALWAYS" />
- + <HBox fx:id="hboxButtons" alignment="CENTER_RIGHT" fillHeight="true" prefHeight="-1.0" prefWidth="-1.0" spacing="3.0" GridPane.columnIndex="1" GridPane.halignment="LEFT" GridPane.hgrow="ALWAYS" GridPane.rowIndex="1" GridPane.valignment="TOP" GridPane.vgrow="ALWAYS">
- + <padding>
- + <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
- + </padding>
- + </HBox>
- + </children>
- + <columnConstraints>
- + <ColumnConstraints halignment="LEFT" hgrow="NEVER" maxWidth="-1.0" minWidth="-1.0" prefWidth="-1.0" />
- + <ColumnConstraints halignment="LEFT" hgrow="ALWAYS" maxWidth="-1.0" minWidth="-1.0" prefWidth="-1.0" />
- + </columnConstraints>
- + <padding>
- + <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
- + </padding>
- + <rowConstraints>
- + <RowConstraints maxHeight="-1.0" prefHeight="-1.0" valignment="TOP" vgrow="ALWAYS" />
- + <RowConstraints maxHeight="-1.0" minHeight="-1.0" prefHeight="-1.0" valignment="TOP" vgrow="ALWAYS" />
- + </rowConstraints>
- +</GridPane>
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.properties b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.properties
- new file mode 100644
- index 0000000..48d3a9b
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.properties
- @@ -0,0 +1,9 @@
- +BUTTON_OK=OK
- +BUTTON_YES=Yes
- +BUTTON_RETRY=Retry
- +BUTTON_TRY_AGAIN=Try Again
- +BUTTON_CONTINUE=Continue
- +BUTTON_IGNORE=Ignore
- +BUTTON_CANCEL=Cancel
- +BUTTON_NO=No
- +BUTTON_ABORT=Abort
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox_de.properties b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox_de.properties
- new file mode 100644
- index 0000000..3f9301c
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox_de.properties
- @@ -0,0 +1,9 @@
- +BUTTON_OK=OK
- +BUTTON_YES=Ja
- +BUTTON_RETRY=Wiederholen
- +BUTTON_TRY_AGAIN=Nochmal Versuchen
- +BUTTON_CONTINUE=Fortsetzen
- +BUTTON_IGNORE=Ignorieren
- +BUTTON_CANCEL=Abbrechen
- +BUTTON_NO=Nein
- +BUTTON_ABORT=Abbrechen
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/stage/ApplicationStage.java b/src/main/java/com/l2jserver/tools/util/jfx/stage/ApplicationStage.java
- new file mode 100644
- index 0000000..5f7cdc8
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/ApplicationStage.java
- @@ -0,0 +1,110 @@
- +package com.l2jserver.tools.util.jfx.stage;
- +
- +import java.io.IOException;
- +import java.io.UncheckedIOException;
- +import java.nio.charset.StandardCharsets;
- +import java.util.ResourceBundle;
- +import java.util.function.BiConsumer;
- +
- +import com.l2jserver.tools.util.jfx.StageController;
- +
- +import javafx.fxml.FXMLLoader;
- +import javafx.scene.Scene;
- +import javafx.scene.layout.Region;
- +import javafx.stage.Modality;
- +import javafx.stage.Stage;
- +import javafx.stage.StageStyle;
- +import javafx.stage.Window;
- +
- +public abstract class ApplicationStage<T extends Region, V extends StageController> extends Stage
- +{
- + private final T _root;
- + private final V _controller;
- +
- + public ApplicationStage(Window owner, Modality modality, StageStyle style, String title, String fxml, String resources, BiConsumer<ApplicationStage<T, V>, V> initializer)
- + {
- + super();
- + initOwner(owner);
- + initModality(modality);
- + initStyle(style);
- +
- + FXMLLoader loader = new FXMLLoader();
- + loader.setCharset(StandardCharsets.UTF_8);
- + loader.setLocation(getClass().getResource(fxml));
- + loader.setResources(ResourceBundle.getBundle(resources));
- + try
- + {
- + loader.load();
- + }
- + catch (IOException e)
- + {
- + throw new UncheckedIOException(e);
- + }
- +
- + _root = loader.getRoot();
- + _controller = loader.getController();
- + if (initializer != null)
- + {
- + initializer.accept(this, _controller);
- + }
- +
- + setTitle(title);
- + setScene(new Scene(_root));
- + }
- +
- + private double computeStageSizeUnit(double value, double pref, double cur)
- + {
- + if (value == Region.USE_COMPUTED_SIZE)
- + {
- + return cur;
- + }
- +
- + if (value == Region.USE_PREF_SIZE)
- + {
- + value = pref;
- + }
- +
- + if (value == Region.USE_COMPUTED_SIZE)
- + {
- + return cur;
- + }
- +
- + return value;
- + }
- +
- + private final void layoutMinMax()
- + {
- + double decoWidth = getWidth() - _root.getWidth();
- + double decoHeight = getHeight() - _root.getHeight();
- + _root.layout();
- + // TODO: account for max value overflow
- + setMinWidth(computeStageSizeUnit(_root.getMinWidth(), _root.getPrefWidth(), _root.getWidth()) + decoWidth);
- + setMinHeight(computeStageSizeUnit(_root.getMinHeight(), _root.getPrefHeight(), _root.getHeight()) + decoHeight);
- + setMaxWidth(computeStageSizeUnit(_root.getMaxWidth(), _root.getPrefWidth(), _root.getWidth()) + decoWidth);
- + setMaxHeight(computeStageSizeUnit(_root.getMaxHeight(), _root.getPrefHeight(), _root.getHeight()) + decoHeight);
- + }
- +
- + public final void layout()
- + {
- + layoutMinMax();
- + setWidth(getMinWidth());
- + setHeight(getMinHeight());
- + }
- +
- + public final void layout(double width, double height)
- + {
- + layoutMinMax();
- + setWidth(width);
- + setHeight(height);
- + }
- +
- + public final T getRoot()
- + {
- + return _root;
- + }
- +
- + public final V getController()
- + {
- + return _controller;
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBox.java b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBox.java
- new file mode 100644
- index 0000000..dd4c297
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBox.java
- @@ -0,0 +1,27 @@
- +package com.l2jserver.tools.util.jfx.stage.msgbox;
- +
- +import com.l2jserver.tools.util.jfx.stage.ApplicationStage;
- +
- +import javafx.scene.image.Image;
- +import javafx.scene.layout.GridPane;
- +import javafx.stage.Modality;
- +import javafx.stage.StageStyle;
- +import javafx.stage.Window;
- +
- +public final class MsgBox extends ApplicationStage<GridPane, MsgBoxController>
- +{
- + public MsgBox(Window owner, Modality modality, Image image, String title, String message, MsgBoxButton... buttons)
- + {
- + super(owner, modality, StageStyle.DECORATED, title, "/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.fxml", "com.l2jserver.tools.util.jfx.res.stage.msgbox.MsgBox", (stage, controller) ->
- + {
- + controller.setImage(image);
- + controller.setMessage(message);
- + controller.setButtons(stage, buttons);
- + });
- + }
- +
- + public MsgBoxResult getResult()
- + {
- + return getController().getResult();
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxButton.java b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxButton.java
- new file mode 100644
- index 0000000..ed42778
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxButton.java
- @@ -0,0 +1,56 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.util.jfx.stage.msgbox;
- +
- +import java.util.ResourceBundle;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public enum MsgBoxButton
- +{
- + /** Result: {@link MsgBoxResult#OK} */
- + OK,
- + /** Result: {@link MsgBoxResult#OK} */
- + YES,
- +
- + /** Result: {@link MsgBoxResult#RETRY} */
- + RETRY,
- + /** Result: {@link MsgBoxResult#RETRY} */
- + TRY_AGAIN,
- +
- + /** Result: {@link MsgBoxResult#CONTINUE} */
- + CONTINUE,
- + /** Result: {@link MsgBoxResult#CONTINUE} */
- + IGNORE,
- +
- + /** Result: {@link MsgBoxResult#CANCEL} */
- + CANCEL,
- + /** Result: {@link MsgBoxResult#CANCEL} */
- + NO,
- + /** Result: {@link MsgBoxResult#CANCEL} */
- + ABORT;
- +
- + private final String _localizationKey = "BUTTON_" + toString();
- +
- + public String getButtonText(ResourceBundle resources)
- + {
- + return resources.getString(_localizationKey);
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxController.java b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxController.java
- new file mode 100644
- index 0000000..3483005
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxController.java
- @@ -0,0 +1,109 @@
- +package com.l2jserver.tools.util.jfx.stage.msgbox;
- +
- +import java.util.ResourceBundle;
- +
- +import com.l2jserver.tools.util.jfx.StageController;
- +
- +import javafx.event.ActionEvent;
- +import javafx.fxml.FXML;
- +import javafx.scene.control.Button;
- +import javafx.scene.control.Label;
- +import javafx.scene.image.Image;
- +import javafx.scene.image.ImageView;
- +import javafx.scene.layout.HBox;
- +import javafx.scene.layout.Region;
- +import javafx.stage.Stage;
- +
- +public final class MsgBoxController implements StageController
- +{
- + @FXML
- + private ResourceBundle resources;
- +
- + @FXML
- + private HBox hboxButtons;
- + @FXML
- + private ImageView ivImage;
- + @FXML
- + private Label lblText;
- +
- + private MsgBoxResult _result;
- +
- + @FXML
- + void initialize()
- + {
- + _result = MsgBoxResult.CANCEL;
- + ivImage.setFitWidth(Region.USE_COMPUTED_SIZE);
- + ivImage.setFitHeight(Region.USE_COMPUTED_SIZE);
- + }
- +
- + public void setImage(Image image)
- + {
- + ivImage.setImage(image);
- + }
- +
- + public void setMessage(String message)
- + {
- + lblText.setText(message);
- + }
- +
- + public void setButtons(Stage stage, MsgBoxButton... buttons)
- + {
- + for (MsgBoxButton button : buttons)
- + {
- + Button btn = new Button(button.getButtonText(resources));
- +
- + switch (button)
- + {
- + case OK:
- + case YES:
- + btn.addEventHandler(ActionEvent.ACTION, e ->
- + {
- + _result = MsgBoxResult.OK;
- + stage.close();
- + });
- + break;
- + case RETRY:
- + case TRY_AGAIN:
- + btn.addEventHandler(ActionEvent.ACTION, e ->
- + {
- + _result = MsgBoxResult.RETRY;
- + stage.close();
- + });
- + break;
- + case CONTINUE:
- + case IGNORE:
- + btn.addEventHandler(ActionEvent.ACTION, e ->
- + {
- + _result = MsgBoxResult.CONTINUE;
- + stage.close();
- + });
- + break;
- + case CANCEL:
- + case NO:
- + case ABORT:
- + btn.addEventHandler(ActionEvent.ACTION, (ActionEvent event) ->
- + {
- + _result = MsgBoxResult.CANCEL;
- + stage.close();
- + });
- + break;
- + }
- +
- + btn.setMinSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
- + btn.setPrefSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
- + btn.setMaxSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
- + hboxButtons.getChildren().add(btn);
- + }
- + }
- +
- + @Override
- + public boolean onRequestClose()
- + {
- + return true;
- + }
- +
- + public MsgBoxResult getResult()
- + {
- + return _result;
- + }
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxResult.java b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxResult.java
- new file mode 100644
- index 0000000..3311ea6
- --- /dev/null
- +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxResult.java
- @@ -0,0 +1,49 @@
- +/*
- + * Copyright (C) 2004-2017 L2J Server
- + *
- + * This file is part of L2J Server.
- + *
- + * L2J Server is free software: you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation, either version 3 of the License, or
- + * (at your option) any later version.
- + *
- + * L2J Server is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- + * General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program. If not, see <http://www.gnu.org/licenses/>.
- + */
- +package com.l2jserver.tools.util.jfx.stage.msgbox;
- +
- +/**
- + * @author HorridoJoho
- + */
- +public enum MsgBoxResult
- +{
- + /**
- + * Action event buttons:<br>
- + * {@link MsgBoxButton#OK}, {@link MsgBoxButton#YES}
- + */
- + OK,
- + /**
- + * Action event buttons:<br>
- + * {@link MsgBoxButton#RETRY}, {@link MsgBoxButton#TRY_AGAIN}
- + */
- + RETRY,
- + /**
- + * Action event buttons:<br>
- + * {@link MsgBoxButton#CONTINUE}, {@link MsgBoxButton#IGNORE}
- + */
- + CONTINUE,
- + /**
- + * This is the default message box result. When a message box is<br>
- + * closed without one of it's buttons, this will be the result.<br>
- + * <br>
- + * Action event buttons:<br>
- + * {@link MsgBoxButton#CANCEL}, {@link MsgBoxButton#NO}, {@link MsgBoxButton#ABORT}<br>
- + */
- + CANCEL
- +}
- diff --git a/src/main/java/com/l2jserver/tools/util/swing/BackgroundTaskRunner.java b/src/main/java/com/l2jserver/tools/util/swing/BackgroundTaskRunner.java
- index 27e63c9..3f4329d 100644
- --- a/src/main/java/com/l2jserver/tools/util/swing/BackgroundTaskRunner.java
- +++ b/src/main/java/com/l2jserver/tools/util/swing/BackgroundTaskRunner.java
- @@ -42,7 +42,7 @@
- Objects.requireNonNull(task);
- _dialog = dialog;
- _task = task;
- - _thread = new Thread(this, "L2J-TOOLS-BackgroundTaskRunner");
- + _thread = new Thread(this, "L2J-TOOLS-SWING-BackgroundTaskRunner");
- _dialog.setModalityType(ModalityType.APPLICATION_MODAL);
- _dialog.addComponentListener(this);
- diff --git a/src/main/java/com/l2jserver/util/PropertiesParser.java b/src/main/java/com/l2jserver/util/PropertiesParser.java
- index 6f7adaa..4cd7315 100644
- --- a/src/main/java/com/l2jserver/util/PropertiesParser.java
- +++ b/src/main/java/com/l2jserver/util/PropertiesParser.java
- @@ -18,228 +18,227 @@
- */
- package com.l2jserver.util;
- -import java.io.File;
- -import java.io.FileInputStream;
- -import java.io.InputStreamReader;
- -import java.nio.charset.Charset;
- +import java.io.FileNotFoundException;
- +import java.io.IOException;
- +import java.io.InputStream;
- +import java.lang.reflect.InvocationTargetException;
- +import java.nio.file.Files;
- +import java.nio.file.NoSuchFileException;
- +import java.nio.file.Path;
- +import java.nio.file.Paths;
- +import java.nio.file.StandardOpenOption;
- +import java.util.Map;
- +import java.util.Objects;
- import java.util.Properties;
- -import java.util.logging.Logger;
- +
- +import org.slf4j.Logger;
- +import org.slf4j.LoggerFactory;
- +
- +import com.l2jserver.Config;
- /**
- * Simplifies loading of property files and adds logging if a non existing property is requested.
- - * @author NosBit
- + * @author NosBit, HorridoJoho
- */
- public final class PropertiesParser
- {
- - private static final Logger _log = Logger.getLogger(PropertiesParser.class.getName());
- + private static final Logger _LOG = LoggerFactory.getLogger(PropertiesParser.class.getName());
- + private static final Path[] _GENERATED_CONFIG_FILES =
- + {
- + Config.CONFIG_GENERATED_FOLDER.resolve(Config.HEXID_FILE)
- + };
- private final Properties _properties = new Properties();
- - private final File _file;
- + private final Path _file;
- public PropertiesParser(String name)
- {
- - this(new File(name));
- + this(Paths.get(name));
- }
- - public PropertiesParser(File file)
- + public PropertiesParser(Path file)
- {
- _file = file;
- - try (FileInputStream fileInputStream = new FileInputStream(file))
- +
- + boolean isGeneratedFile = isGeneratedProperties(Config.CONFIG_GENERATED_FOLDER.resolve(file));
- + if (!isGeneratedFile)
- {
- - try (InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, Charset.defaultCharset()))
- + try (InputStream is = Files.newInputStream(Config.CONFIG_DEFAULT_FOLDER.resolve(file), StandardOpenOption.READ))
- {
- - _properties.load(inputStreamReader);
- + _properties.load(is);
- + }
- + catch (FileNotFoundException | NoSuchFileException e)
- + {
- + _LOG.warn("Default config {} could not be found!", file, e);
- + }
- + catch (Exception e)
- + {
- + _LOG.warn("Default config {} could not be loaded!", file, e);
- + }
- + }
- +
- + Path fileFolder = isGeneratedFile ? Config.CONFIG_GENERATED_FOLDER : Config.CONFIG_OVERWRITE_FOLDER;
- + try (InputStream is = Files.newInputStream(fileFolder.resolve(file), StandardOpenOption.READ))
- + {
- + Properties overwriteProps = new Properties();
- + overwriteProps.load(is);
- +
- + for (Map.Entry<Object, Object> e : overwriteProps.entrySet())
- + {
- + if (!_properties.containsKey(e.getKey()) && !isGeneratedFile)
- + {
- + _LOG.info("{}: Overwrite config has deprecated property {}.", file, e.getKey());
- + }
- +
- + _properties.put(e.getKey(), e.getValue());
- + }
- + }
- + catch (FileNotFoundException | NoSuchFileException e)
- + {
- + if (isGeneratedFile)
- + {
- + _LOG.warn("Generated config {} couldn't be found!", file, e);
- }
- }
- catch (Exception e)
- {
- - _log.warning("[" + _file.getName() + "] There was an error loading config reason: " + e.getMessage());
- + if (isGeneratedFile)
- + {
- + _LOG.warn("Generated config {} couldn't be loaded!", file, e);
- + }
- + else
- + {
- + _LOG.warn("Overwrite config {} couldn't be loaded!", file, e);
- + }
- }
- }
- + private boolean isGeneratedProperties(Path file)
- + {
- + for (Path generatedConfigFile : _GENERATED_CONFIG_FILES)
- + {
- + try
- + {
- + if (Files.isSameFile(file, generatedConfigFile))
- + {
- + return true;
- + }
- + }
- + catch (IOException e)
- + {
- + _LOG.debug("Failed to check for same file!", e);
- + }
- + }
- +
- + return false;
- + }
- +
- public boolean containskey(String key)
- {
- return _properties.containsKey(key);
- }
- - private String getValue(String key)
- + public boolean containsNonEmptyKey(String key)
- {
- + return _properties.containsKey(key) && !_properties.getProperty(key).trim().isEmpty();
- + }
- +
- + /**
- + * @param <T> the defaultValue type
- + * @param key the property key
- + * @param defaultValue the default value
- + * @return the trimmed value or null if the specified property key does not exist
- + */
- + private <T> String getStringValue(String key, T defaultValue)
- + {
- + Objects.requireNonNull(key);
- + Objects.requireNonNull(defaultValue);
- +
- String value = _properties.getProperty(key);
- - return value != null ? value.trim() : null;
- + if (value == null)
- + {
- + _LOG.warn("{}: The property {} is missing! Using default value {}.", _file, key, defaultValue);
- + return null;
- + }
- + return value.trim();
- + }
- +
- + @SuppressWarnings("unchecked")
- + private <T> T getGenericValue(String key, T defaultValue)
- + {
- + Objects.requireNonNull(key);
- +
- + String value = getStringValue(key, defaultValue);
- + if (value == null)
- + {
- + return defaultValue;
- + }
- +
- + Class<?> defaultValueClass = defaultValue.getClass();
- + try
- + {
- + return (T) defaultValue.getClass().getMethod("valueOf", String.class).invoke(null, value);
- + }
- + catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e)
- + {
- + _LOG.warn("{}: The property {} could not be parsed! Failed to call {}#valueOf. Using default value {}.", _file, key, defaultValueClass.getSimpleName(), defaultValue, e);
- + return defaultValue;
- + }
- + catch (Exception e)
- + {
- + _LOG.warn("{}: The value {} for the property {} is invalid! The type is {}. Using default value {}.", _file, value, key, defaultValueClass.getSimpleName(), defaultValue, e);
- + return defaultValue;
- + }
- }
- public boolean getBoolean(String key, boolean defaultValue)
- {
- - String value = getValue(key);
- - if (value == null)
- - {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- - return defaultValue;
- - }
- -
- - if (value.equalsIgnoreCase("true"))
- - {
- - return true;
- - }
- - else if (value.equalsIgnoreCase("false"))
- - {
- - return false;
- - }
- - else
- - {
- - _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"boolean\" using default value: " + defaultValue);
- - return defaultValue;
- - }
- + return getGenericValue(key, defaultValue);
- }
- public byte getByte(String key, byte defaultValue)
- {
- - String value = getValue(key);
- - if (value == null)
- - {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- - return defaultValue;
- - }
- -
- - try
- - {
- - return Byte.parseByte(value);
- - }
- - catch (NumberFormatException e)
- - {
- - _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"byte\" using default value: " + defaultValue);
- - return defaultValue;
- - }
- + return getGenericValue(key, defaultValue);
- }
- public short getShort(String key, short defaultValue)
- {
- - String value = getValue(key);
- - if (value == null)
- - {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- - return defaultValue;
- - }
- -
- - try
- - {
- - return Short.parseShort(value);
- - }
- - catch (NumberFormatException e)
- - {
- - _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"short\" using default value: " + defaultValue);
- - return defaultValue;
- - }
- + return getGenericValue(key, defaultValue);
- }
- public int getInt(String key, int defaultValue)
- {
- - String value = getValue(key);
- - if (value == null)
- - {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- - return defaultValue;
- - }
- -
- - try
- - {
- - return Integer.parseInt(value);
- - }
- - catch (NumberFormatException e)
- - {
- - _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"int\" using default value: " + defaultValue);
- - return defaultValue;
- - }
- + return getGenericValue(key, defaultValue);
- }
- public long getLong(String key, long defaultValue)
- {
- - String value = getValue(key);
- - if (value == null)
- - {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- - return defaultValue;
- - }
- -
- - try
- - {
- - return Long.parseLong(value);
- - }
- - catch (NumberFormatException e)
- - {
- - _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"long\" using default value: " + defaultValue);
- - return defaultValue;
- - }
- + return getGenericValue(key, defaultValue);
- }
- public float getFloat(String key, float defaultValue)
- {
- - String value = getValue(key);
- - if (value == null)
- - {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- - return defaultValue;
- - }
- -
- - try
- - {
- - return Float.parseFloat(value);
- - }
- - catch (NumberFormatException e)
- - {
- - _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"float\" using default value: " + defaultValue);
- - return defaultValue;
- - }
- + return getGenericValue(key, defaultValue);
- }
- public double getDouble(String key, double defaultValue)
- {
- - String value = getValue(key);
- - if (value == null)
- - {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- - return defaultValue;
- - }
- -
- - try
- - {
- - return Double.parseDouble(value);
- - }
- - catch (NumberFormatException e)
- - {
- - _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"double\" using default value: " + defaultValue);
- - return defaultValue;
- - }
- + return getGenericValue(key, defaultValue);
- }
- public String getString(String key, String defaultValue)
- {
- - String value = getValue(key);
- + String value = getStringValue(key, defaultValue);
- if (value == null)
- {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- return defaultValue;
- }
- +
- return value;
- }
- public <T extends Enum<T>> T getEnum(String key, Class<T> clazz, T defaultValue)
- {
- - String value = getValue(key);
- - if (value == null)
- - {
- - _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
- - return defaultValue;
- - }
- -
- - try
- - {
- - return Enum.valueOf(clazz, value);
- - }
- - catch (IllegalArgumentException e)
- - {
- - _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be enum value of \"" + clazz.getSimpleName() + "\" using default value: " + defaultValue);
- - return defaultValue;
- - }
- + return getGenericValue(key, defaultValue);
- }
- }
Add Comment
Please, Sign In to add comment