Guest User

Overwrite configs, Startup scripts, Configurator tool

a guest
Nov 26th, 2017
1,179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 471.96 KB | None | 0 0
  1. diff --git a/dist/game/GameServer_loop.sh b/dist/game/GameServer_loop.sh
  2. index a1c11c9..09adfb6 100644
  3. --- a/dist/game/GameServer_loop.sh
  4. +++ b/dist/game/GameServer_loop.sh
  5. @@ -1,14 +1,75 @@
  6.  #!/bin/bash
  7.  
  8. -# exit codes of GameServer:
  9. -#  0 normal shutdown
  10. -#  2 reboot attempt
  11. +################################################################################
  12. +# Server exit codes: ###########################################################
  13. +# - 0: Shutdown      ###########################################################
  14. +# - 1: Error         ###########################################################
  15. +# - 2: Restart       ###########################################################
  16. +################################################################################
  17.  
  18. -while :; do
  19. -   [ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
  20. -   [ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
  21. -   java -Dpython.cachedir=../cachedir -Xms1024m -Xmx1792m -jar l2jserver.jar > log/stdout.log 2>&1
  22. -   [ $? -ne 2 ] && break
  23. -#  /etc/init.d/mysql restart
  24. -   sleep 10
  25. +################################################################################
  26. +# Constants ####################################################################
  27. +################################################################################
  28. +APP_JAR="l2jserver.jar"
  29. +APP_TITLE="L2J Game Server"
  30. +JVM_ARGS_DEFAULT_PATH="config/default/Server_JVM_Args.txt"
  31. +APP_ARGS_DEFAULT_PATH="config/default/Server_APP_Args.txt"
  32. +JVM_ARGS_OVERWRITE_PATH="config/Server_JVM_Args.txt"
  33. +APP_ARGS_OVERWRITE_PATH="config/Server_APP_Args.txt"
  34. +LOGDIR_PATH="log/"
  35. +
  36. +err=2
  37. +while [ $err == 2 ]; do
  38. +   err=0
  39. +   JVM_ARGS_PATH="$JVM_ARGS_DEFAULT_PATH"
  40. +   APP_ARGS_PATH="$APP_ARGS_DEFAULT_PATH"
  41. +
  42. +   # Determine if the overwrite files are available
  43. +   [ -f "$JVM_ARGS_OVERWRITE_PATH" ] && JVM_ARGS_PATH="$JVM_ARGS_OVERWRITE_PATH"
  44. +   [ -f "$APP_ARGS_OVERWRITE_PATH" ] && APP_ARGS_PATH="$APP_ARGS_OVERWRITE_PATH"
  45. +
  46. +   # Check for the arguments file to be available
  47. +   if [ ! -f "$JVM_ARGS_PATH" ]; then
  48. +       echo "$JVM_ARGS_PATH is missing. Aborting launch."
  49. +       echo ""
  50. +       break
  51. +   elif [ ! -f "$APP_ARGS_PATH" ]; then
  52. +       echo "$APP_ARGS_PATH is missing. Aborting launch."
  53. +       echo ""
  54. +       break
  55. +   fi
  56. +  
  57. +   # Print used argument files and read them
  58. +   echo "JVM arguments file: $JVM_ARGS_PATH"
  59. +   echo "APP arguments file: $APP_ARGS_PATH"
  60. +   echo ""
  61. +   readarray -t JVM_ARGS < "$JVM_ARGS_PATH"
  62. +   readarray -t APP_ARGS < "$APP_ARGS_PATH"
  63. +
  64. +   # Construct and print the command line
  65. +   APP_CMD_LN="java ${JVM_ARGS[*]//[$'\r\n']} -jar $APP_JAR ${APP_ARGS[*]//[$'\r\n']}"
  66. +   echo "Startup command line: $APP_CMD_LN"
  67. +   echo ""
  68. +
  69. +   # rem Delete old *.lck files and archive old logs
  70. +   [ -f "log/*.lck" ] && rm log/*.lck
  71. +   for LOGFILE_PATH in $LOGDIR_PATH*; do
  72. +       [ "$LOGFILE_PATH" == "$LOGDIR_PATH*" ] && continue
  73. +       LOGFILE_NAME="${LOGFILE_PATH#*/}"
  74. +       [[ "$LOGFILE_NAME" == [0-9]* ]] && continue
  75. +       mv "$LOGFILE_PATH" "$LOGDIR_PATH`date +%Y-%m-%d_%H-%M-%S`_$LOGFILE_NAME"
  76. +   done
  77. +
  78. +   # Execute the command line
  79. +   echo "Starting $APP_TITLE."
  80. +   echo ""
  81. +   $APP_CMD_LN
  82. +
  83. +   err=$?
  84. +   [ $err == 2 ] && echo "Admin Restarted $APP_TITLE."
  85. +
  86. +   sleep 10;
  87.  done
  88. +
  89. +[ $err == 1 ] && echo "$APP_TITLE terminated abnormally!"
  90. +echo "$APP_TITLE terminated."
  91. \ No newline at end of file
  92. diff --git a/dist/game/config/Character.properties b/dist/game/config/Character.properties
  93. deleted file mode 100644
  94. index fcb612f..0000000
  95. --- a/dist/game/config/Character.properties
  96. +++ /dev/null
  97. @@ -1,822 +0,0 @@
  98. -# ---------------------------------------------------------------------------
  99. -# Alternative Character Settings
  100. -# ---------------------------------------------------------------------------
  101. -# This properties file is solely for the purpose of Character modifications that directly influence them.
  102. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  103. -# Warning:
  104. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  105. -
  106. -# ---------------------------------------------------------------------------
  107. -# Statistics
  108. -# ---------------------------------------------------------------------------
  109. -
  110. -# This option, if enabled, will force a character to de-level if the characters' experience is below their level after losing experience on death.
  111. -# If this is set to False, the character will not de-level even if their Experience is below their level after death.
  112. -# Default: True
  113. -Delevel = True
  114. -
  115. -# This option enable check for all player skills for skill level.
  116. -# If player level is lower than skill learn level - 9, skill level is decreased to next possible level.
  117. -# If there is no possible level, skill is removed from player.
  118. -DecreaseSkillOnDelevel = True
  119. -
  120. -# Weight limit multiplier. Example: Setting this to 5 will give players 5x the normal weight limit.
  121. -# Default: 1
  122. -AltWeightLimit = 1
  123. -
  124. -# Run speed modifier. Example: Setting this to 5 will give players +5 to their running speed.
  125. -# Default: 0
  126. -RunSpeedBoost = 0
  127. -
  128. -# Chance of receiving the Death Penalty debuff when killed by a mob.
  129. -# Default: 20
  130. -DeathPenaltyChance = 20
  131. -
  132. -# Percent of HP, MP, and CP which is restored on character revival.
  133. -# Use 0 to disable restore
  134. -# Default: 0, 65, 0
  135. -RespawnRestoreCP = 0
  136. -RespawnRestoreHP = 65
  137. -RespawnRestoreMP = 0
  138. -
  139. -# Percent of HP, MP, and CP regeneration for players.
  140. -# Example: Setting HP to 10 will cause player HP to regenerate 90% slower than normal.
  141. -# Default: 100, 100, 100
  142. -HpRegenMultiplier = 100
  143. -MpRegenMultiplier = 100
  144. -CpRegenMultiplier = 100
  145. -
  146. -# ---------------------------------------------------------------------------
  147. -# Skills & Effects
  148. -# ---------------------------------------------------------------------------
  149. -
  150. -# When this is enabled it will read the "SkillDurationList" option.
  151. -# 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.
  152. -# Default: False
  153. -EnableModifySkillDuration = False
  154. -# Skill duration list
  155. -# Format: skillid,newtime;skillid2,newtime2...
  156. -# Example:
  157. -#  This enable 1h(3600) duration for songs, the "\"indicates new line,
  158. -#  and is only set for formating purposes.
  159. -#  SkillDurationList = 264,3600;265,3600;266,3600;267,3600;268,3600;\
  160. -#  269,3600;270,3600;304,3600;305,1200;306,3600;308,3600;349,3600;\
  161. -#  363,3600;364,3600
  162. -SkillDurationList =
  163. -
  164. -# When this is enabled it will read the "SkillReuseList" option.
  165. -EnableModifySkillReuse = False
  166. -# Format: skillid,newDelayTime;skillid,newDelayTime2 (See skillDuration for examples)
  167. -SkillReuseList =
  168. -
  169. -# If it's true all class skills will be delivered upon level up and login.
  170. -# Default: False
  171. -AutoLearnSkills = False
  172. -
  173. -# If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills.
  174. -# Default: False
  175. -AutoLearnForgottenScrollSkills = False
  176. -
  177. -# Default: False
  178. -AutoLootHerbs = False
  179. -
  180. -# Maximum number of buffs and songs/dances.
  181. -# Remember that Divine Inspiration will give players 4 additional buff slots on top of the number specified in "maxbuffamount".
  182. -# Default: 20, 12, 12
  183. -MaxBuffAmount = 20
  184. -MaxTriggeredBuffAmount = 12
  185. -MaxDanceAmount = 12
  186. -
  187. -# Allow players to cancel dances/songs via Alt+click on buff icon
  188. -# Default: False
  189. -DanceCancelBuff = False
  190. -
  191. -# This option enables/disables additional MP consume for dances and songs.
  192. -# Default: True
  193. -DanceConsumeAdditionalMP = True
  194. -
  195. -# Allow players to have all dances/songs stored when logout.
  196. -# Default: False
  197. -AltStoreDances = False
  198. -
  199. -# This option allows a player to automatically learn Divine Inspiration.
  200. -# This is not included in AutoLearnSkills above.
  201. -# Default: False
  202. -AutoLearnDivineInspiration = False
  203. -
  204. -# This is to allow a character to be canceled during bow use, skill use, or both.
  205. -# Available Options: bow, cast, all
  206. -# Default: cast
  207. -AltGameCancelByHit = cast
  208. -
  209. -# This option, if enabled, will allow magic to fail, and if disabled magic damage will always succeed with a 100% chance.
  210. -# Default: True
  211. -MagicFailures = True
  212. -
  213. -# Protection from aggressive mobs after getting up from fake death.
  214. -# The value is specified in seconds.
  215. -# Default: 0
  216. -PlayerFakeDeathUpProtection = 0
  217. -
  218. -# This option is to enable or disable the storage of buffs/debuffs among other effects.
  219. -# Default: True
  220. -StoreSkillCooltime = True
  221. -
  222. -# This option is to enable or disable the storage of buffs/debuffs among other effects during
  223. -# a subclass change
  224. -# Default: False
  225. -SubclassStoreSkillCooltime = False
  226. -
  227. -# These are alternative rules for shields.
  228. -# If True and they block:
  229. -#  The damage is powerAtk-shieldDef,
  230. -# If False and they block:
  231. -#  The damage is powerAtk / (shieldDef + powerDef)
  232. -# Default: False
  233. -AltShieldBlocks = False
  234. -
  235. -# This is the percentage for perfect shield block rate.
  236. -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  237. -# Default: 10
  238. -AltPerfectShieldBlockRate = 10
  239. -
  240. -# This is the value ticks are multiplied with to result in interval per tick in milliseconds.
  241. -# Note: Editing this will not affect how much the over-time effects heals since heal scales with that value too.
  242. -# Default: 666
  243. -EffectTickRatio = 666
  244. -
  245. -# ---------------------------------------------------------------------------
  246. -# Class, Sub-class and skill learning options
  247. -# ---------------------------------------------------------------------------
  248. -
  249. -# Allow use of Event Managers for changing occupation without any quests.
  250. -# Default: False
  251. -AllowClassMasters = False
  252. -
  253. -# ConfigClassMaster=1;[57(100000)];[];2;[57(1000000)];[];3;[57(10000000)],[5575(1000000)];[6622(1)]
  254. -# 1st occupation change for 100.000 Adena (item id 57)
  255. -# 2nd occupation change for 1.000.0000 Adena (item id 57)
  256. -# 3rd occupation change for 10.000.0000 Adena (item id 57) and 1.000.000 Ancient Adena (item id 5575)
  257. -# on 3rd occupation change player will be rewarded with 1 Book of Giants (item id 6622)
  258. -# ConfigClassMaster=1;[];[];2;[];[];3;[];[]
  259. -# 1st, 2nd, 3rd occupation change for free, without rewards.
  260. -# ConfigClassMaster=1;[];[];2;[];[]
  261. -# Allow only first and second change.
  262. -ConfigClassMaster = 1;[];[];2;[];[];3;[];[]
  263. -
  264. -# Class Masters will allow changing to any occupation on any level inside class tree
  265. -# For example, Dwarven Fighter will be able to advance to:
  266. -# Artisan, Scavenger, Warsmith, Bounty Hunter, Maestro, Fortune Seeker.
  267. -# But Warsmith will be able to change only to Maestro.
  268. -# Default = False
  269. -AllowEntireTree = False
  270. -
  271. -# When character reach levels 20,40,76 he will receive tutorial page
  272. -# with list of the all possible variants, and can select and immediately
  273. -# change to the new occupation, or decide to choose later (on next login).
  274. -# Can be used with or without classic Class Masters.
  275. -# Default = False
  276. -AlternateClassMaster = False
  277. -
  278. -# Require life crystal needed to learn clan skills.
  279. -# Default: True
  280. -LifeCrystalNeeded = True
  281. -
  282. -# Require book needed to enchant skills.
  283. -# Default: True
  284. -EnchantSkillSpBookNeeded = True
  285. -
  286. -# Require spell book needed to learn Divine Inspiration.
  287. -# Default: True
  288. -DivineInspirationSpBookNeeded = True
  289. -
  290. -# When enabled, the following will be true:
  291. -#  All classes can learn all skills.
  292. -#  Skills of another class costs x2 SP to learn.
  293. -#  Skills of another race costs x2 SP to learn.
  294. -#  Skills of fighters/mages costs x3 SP to learn.
  295. -# Default: False
  296. -AltGameSkillLearn = False
  297. -
  298. -# Allow player to sub-class without checking for unique quest items.
  299. -# Default: False
  300. -AltSubClassWithoutQuests = False
  301. -
  302. -# Allow player to add/change subclass at all village master
  303. -# Default: False
  304. -AltSubclassEverywhere = False
  305. -
  306. -# Allow player to learn transformations without quest.
  307. -# Default: False
  308. -AltTransformationWithoutQuest = False
  309. -
  310. -# Fee to remove Transfer skills.
  311. -# Default: 10000000
  312. -FeeDeleteTransferSkills = 10000000
  313. -
  314. -# Fee to remove Sub-Class skills.
  315. -# Default: 10000000
  316. -FeeDeleteSubClassSkills = 10000000
  317. -
  318. -# ---------------------------------------------------------------------------
  319. -# Summons configuration
  320. -# ---------------------------------------------------------------------------
  321. -
  322. -# This option is to enable or disable the storage of buffs/debuffs among other effects on pets/invocations
  323. -# Default: True
  324. -SummonStoreSkillCooltime = True
  325. -
  326. -# Servitor summons on login if player had it summoned before logout
  327. -# Default: True
  328. -RestoreServitorOnReconnect = True
  329. -
  330. -# Pet summons on login if player had it summoned before logout
  331. -# Default: True
  332. -RestorePetOnReconnect = True
  333. -
  334. -# ---------------------------------------------------------------------------
  335. -# Vitality configuration
  336. -# ---------------------------------------------------------------------------
  337. -
  338. -# Enables vitality system
  339. -# Default: True
  340. -EnableVitality = True
  341. -
  342. -# Do you want players to recover their vitality when they reconnect?
  343. -# This is calculated with the time they've been offline
  344. -# Actual Time - Last Time Online / 1000 x rate recovery on reconnect
  345. -# Notes:
  346. -#  Works only if EnableVitality = True
  347. -# Default: True
  348. -RecoverVitalityOnReconnect = True
  349. -
  350. -# Option to set a lower vitality at character creation.
  351. -# Vitality needs to be enabled, and startingpoints needs to be lower
  352. -# than max-vitality points.
  353. -# Default: 20000
  354. -StartingVitalityPoints = 20000
  355. -
  356. -
  357. -# ---------------------------------------------------------------------------
  358. -# Limits
  359. -# ---------------------------------------------------------------------------
  360. -
  361. -# Maximum Exp Bonus.
  362. -# from vitality + nevit's hunting bonus, and etc..
  363. -# Default: 3.5
  364. -MaxExpBonus = 3.5
  365. -
  366. -# Maximum Sp Bonus.
  367. -# from vitality + nevit's hunting bonus, and etc..
  368. -# Default: 3.5
  369. -MaxSpBonus = 3.5
  370. -
  371. -# Maximum character running speed.
  372. -# Default: 250
  373. -MaxRunSpeed = 250
  374. -
  375. -# Maximum character Physical Critical Rate. (10 = 1%)
  376. -# Default: 500
  377. -MaxPCritRate = 500
  378. -
  379. -# Maximum character Magic Critical Rate. (10 = 1%)
  380. -# Default: 200
  381. -MaxMCritRate = 200
  382. -
  383. -# Maximum character Attack Speed.
  384. -# Default: 1500
  385. -MaxPAtkSpeed = 1500
  386. -
  387. -# Maximum character Cast Speed.
  388. -# Default: 1999
  389. -MaxMAtkSpeed = 1999
  390. -
  391. -# Maximum character Evasion.
  392. -# Default: 250
  393. -MaxEvasion = 250
  394. -
  395. -# Minimum and Maximum Abnormal State Success Rate.
  396. -# This affect all skills/effects chances, except in skills where minChance or maxChance parameters are defined.
  397. -# Default: H5 minimum of 10% and maximum of 90%.
  398. -MinAbnormalStateSuccessRate = 10
  399. -MaxAbnormalStateSuccessRate = 90
  400. -
  401. -# It's possible to customize the maximum level
  402. -# Above the default requires extra data
  403. -
  404. -# Maximum player level
  405. -# Default: 85
  406. -MaxPlayerLevel = 85
  407. -
  408. -# Maximum pet level
  409. -# Default: 86
  410. -MaxPetLevel = 86
  411. -
  412. -# Maximum number of allowed subclasses for every player.
  413. -# Default: 3
  414. -MaxSubclass = 3
  415. -
  416. -# Starting level for subclasses.
  417. -# Default: 40
  418. -BaseSubclassLevel = 40
  419. -
  420. -# Maximum subclass level.
  421. -# Default: 80
  422. -MaxSubclassLevel = 80
  423. -
  424. -# Maximum number of allowed slots for Private Stores Sell.
  425. -# Other means all the other races aside from Dwarf.
  426. -# Default: 4, 3
  427. -MaxPvtStoreSellSlotsDwarf = 4
  428. -MaxPvtStoreSellSlotsOther = 3
  429. -
  430. -# Maximum number of allowed slots for Private Stores Buy.
  431. -# Other means all the other races aside from Dwarf.
  432. -# Default: 5, 4
  433. -MaxPvtStoreBuySlotsDwarf = 5
  434. -MaxPvtStoreBuySlotsOther = 4
  435. -
  436. -# This will control the inventory space limit (NOT WEIGHT LIMIT).
  437. -# Default: 80, 100, 250
  438. -MaximumSlotsForNoDwarf = 80
  439. -MaximumSlotsForDwarf = 100
  440. -MaximumSlotsForGMPlayer = 250
  441. -MaximumSlotsForQuestItems = 100
  442. -
  443. -# This will control a character's warehouse capacity.
  444. -# Notes:
  445. -#  This must be LESS then 300 or the client will crash.
  446. -# Default: 120, 100, 200, 20
  447. -MaximumWarehouseSlotsForDwarf = 120
  448. -MaximumWarehouseSlotsForNoDwarf = 100
  449. -MaximumWarehouseSlotsForClan = 200
  450. -
  451. -# Freight
  452. -# Maximum items that can be placed in Freight
  453. -# Default: 200
  454. -MaximumFreightSlots = 200
  455. -# The price for each item that's deposited
  456. -# Default: 1000
  457. -FreightPrice = 1000
  458. -
  459. -# Npc talk blockage. When a player talks to a NPC, he must wait some secs
  460. -# before being able to walk again. In seconds
  461. -# Default: 3
  462. -# Set to 0 to disable it
  463. -NpcTalkBlockingTime = 3
  464. -
  465. -# ---------------------------------------------------------------------------
  466. -# Enchanting
  467. -# ---------------------------------------------------------------------------
  468. -# This controls the chance an item has to break if it is enchanted.
  469. -# This chance is in %, so if you set this to 100%, enchants will always succeed.
  470. -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  471. -EnchantChanceElementStone = 50
  472. -EnchantChanceElementCrystal = 30
  473. -EnchantChanceElementJewel = 20
  474. -EnchantChanceElementEnergy = 10
  475. -
  476. -# List of non-enchantable items.
  477. -# Currently apprentice, travelers weapons and Pailaka items
  478. -# Default: 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
  479. -EnchantBlackList = 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
  480. -
  481. -# ---------------------------------------------------------------------------
  482. -# Augmenting
  483. -# ---------------------------------------------------------------------------
  484. -# These control the chance to get a skill in the augmentation process.
  485. -# Default: 15, 30, 45, 60
  486. -AugmentationNGSkillChance = 15
  487. -AugmentationMidSkillChance = 30
  488. -AugmentationHighSkillChance = 45
  489. -AugmentationTopSkillChance = 60
  490. -# Accessory augmentation skills currently disabled
  491. -AugmentationAccSkillChance = 0
  492. -
  493. -# This controls the chance to get a base stat modifier in the augmentation process.
  494. -# Notes:
  495. -#  This has no dependency on the grade of Life Stone.
  496. -# Default: 1
  497. -AugmentationBaseStatChance = 1
  498. -
  499. -# These control the chance to get a glow effect in the augmentation process.
  500. -# Notes:
  501. -#  No/Mid Grade Life Stone can not have glow effect if you do not get a skill or base stat modifier.
  502. -# Default: 0, 40, 70, 100
  503. -AugmentationNGGlowChance = 0
  504. -AugmentationMidGlowChance = 40
  505. -AugmentationHighGlowChance = 70
  506. -AugmentationTopGlowChance = 100
  507. -
  508. -# This will enable retail like weapon augmentation, but then you cant change
  509. -# weapon glow, base stat chance, because it wouldnt be retail like again.
  510. -RetailLikeAugmentation = True
  511. -
  512. -# This will have effect ONLY when RetailLikeAugmentation is True. The sum of 4 numbers must be 100!
  513. -# You can change probability (in %) of augment color chances - in order yellow, blue, purple, red
  514. -# Purple and Red always give skill. Default is 55%,35%,7%,3% for all lifestone grades (ie 7+3=10%
  515. -# for skill, not counting blue ones, that are very rare and not useful anyway).
  516. -RetailLikeAugmentationNoGradeChance = 55,35,7,3
  517. -RetailLikeAugmentationMidGradeChance = 55,35,7,3
  518. -RetailLikeAugmentationHighGradeChance = 55,35,7,3
  519. -RetailLikeAugmentationTopGradeChance = 55,35,7,3
  520. -
  521. -# This will enable retail like accessory augmentation, but then you cant change skill chances for accessory augments
  522. -RetailLikeAugmentationAccessory = True
  523. -
  524. -# List of non-augmentable items, currently contains only Grand Boss jewels
  525. -# Shadow, common, time-limited, hero, pvp, wear items are hardcoded, as well as all etcitems.
  526. -# Rods can't be augmented too.
  527. -# Default: 6656,6657,6658,6659,6660,6661,6662,8191,10170,10314
  528. -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
  529. -
  530. -# Allows alternative augmentation of PvP items.
  531. -# Default: False
  532. -AltAllowAugmentPvPItems = false
  533. -
  534. -# ---------------------------------------------------------------------------
  535. -# Karma
  536. -# ---------------------------------------------------------------------------
  537. -
  538. -# Karma player can be killed in Peace zone.
  539. -# Default: False
  540. -AltKarmaPlayerCanBeKilledInPeaceZone = False
  541. -
  542. -# Karma player can use GateKeeper.
  543. -# Default: False
  544. -AltKarmaPlayerCanUseGK = False
  545. -
  546. -# Karma player can use escape and recall skills.
  547. -# Default: True
  548. -AltKarmaPlayerCanTeleport = True
  549. -
  550. -# Karma player can shop.
  551. -# Default: True
  552. -AltKarmaPlayerCanShop = True
  553. -
  554. -# Karma player can trade.
  555. -# Default: True
  556. -AltKarmaPlayerCanTrade = True
  557. -
  558. -# Karma player can use warehouse.
  559. -# Default: True
  560. -AltKarmaPlayerCanUseWareHouse = True
  561. -
  562. -
  563. -# ---------------------------------------------------------------------------
  564. -# Fame
  565. -# ---------------------------------------------------------------------------
  566. -
  567. -# The maximum number of Fame points a player can have
  568. -# Default: 100000
  569. -MaxPersonalFamePoints = 100000
  570. -
  571. -# How frequently the player gets Fame points while in a Fortress Siege zone
  572. -# Default: 300s (5 min)
  573. -FortressZoneFameTaskFrequency = 300
  574. -
  575. -# How much Fame aquired while in a Fortress Siege Zone
  576. -# Default: 31
  577. -FortressZoneFameAquirePoints = 31
  578. -
  579. -# How frequently the player gets Fame points while in a Castle Siege zone
  580. -# Default: 300s (5 min)
  581. -CastleZoneFameTaskFrequency = 300
  582. -
  583. -# How much Fame acquired while in a Castle Siege Zone
  584. -# Default: 125
  585. -CastleZoneFameAquirePoints = 125
  586. -
  587. -# Dead players can receive fame.
  588. -# Default: True
  589. -FameForDeadPlayers = True
  590. -
  591. -# ---------------------------------------------------------------------------
  592. -# Crafting
  593. -# ---------------------------------------------------------------------------
  594. -
  595. -# Option to enable or disable crafting.
  596. -# Default: True
  597. -CraftingEnabled = True
  598. -
  599. -# Enable/Disable crafting of Masterwork items (If set to true, masterwork items can be created when crafting).
  600. -# Default: True
  601. -CraftMasterwork = True
  602. -
  603. -# Limits for recipes
  604. -# Default: 50, 50
  605. -DwarfRecipeLimit = 50
  606. -CommonRecipeLimit = 50
  607. -
  608. -# Alternative crafting rules. If enabled, the following will be true:
  609. -#  Crafting takes time.
  610. -#  Players get EXP/SP for crafting.
  611. -# Default: False
  612. -AltGameCreation = False
  613. -
  614. -# Crafting Time multiplier.
  615. -# The higher the number, the more time the crafting process takes. XP/SP reward increases with time.
  616. -# Default: 1
  617. -AltGameCreationSpeed = 1
  618. -
  619. -# Additional crafting XP/SP rate multiplier.
  620. -# Default: 1, 1
  621. -AltGameCreationXpRate = 1
  622. -AltGameCreationSpRate = 1
  623. -
  624. -# Additional XP/SP rate multiplier when creating rare item.
  625. -# Default: 2
  626. -AltGameCreationRareXpSpRate = 2
  627. -
  628. -# If set to False, blacksmiths don't take recipes from players inventory when crafting.
  629. -# Default: True
  630. -AltBlacksmithUseRecipes = True
  631. -
  632. -# Store/Restore Dwarven Manufacture list
  633. -# Keep manufacture shoplist after relog
  634. -# Default: False
  635. -StoreRecipeShopList = False
  636. -
  637. -# ---------------------------------------------------------------------------
  638. -# Clan
  639. -# ---------------------------------------------------------------------------
  640. -
  641. -# Day on which all pending clan leader requests will be applied:
  642. -# Possible values:
  643. -# 1 - Sunday
  644. -# 2 - Monday
  645. -# 3 - Tuesday
  646. -# 4 - Wednesday
  647. -# 5 - Thursday
  648. -# 6 - Friday
  649. -# 7 - Saturday
  650. -# Default: 3
  651. -AltClanLeaderDateChange = 3
  652. -
  653. -# Hour on which all pending data requests will be applied:
  654. -# Format: Hour:Minute:Second
  655. -# Default: 00:00:00
  656. -AltClanLeaderHourChange = 00:00:00
  657. -
  658. -# When enabled all clan leader requests will be performed instantly.
  659. -# Default: False
  660. -AltClanLeaderInstantActivation = False
  661. -
  662. -# Number of days you have to wait before joining another clan.
  663. -# Default: 1
  664. -DaysBeforeJoinAClan = 1
  665. -
  666. -# Number of days you have to wait before creating a new clan.
  667. -# Default: 10
  668. -DaysBeforeCreateAClan = 10
  669. -
  670. -# Number of days it takes to dissolve a clan.
  671. -# Default: 7
  672. -DaysToPassToDissolveAClan = 7
  673. -
  674. -# Number of days before joining a new alliance when clan voluntarily leave an alliance.
  675. -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  676. -# Default: 1
  677. -DaysBeforeJoinAllyWhenLeaved = 1
  678. -
  679. -# Number of days before joining a new alliance when clan was dismissed from an alliance.
  680. -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  681. -# Default: 1
  682. -DaysBeforeJoinAllyWhenDismissed = 1
  683. -
  684. -# Number of days before accepting a new clan for alliance when clan was dismissed from an alliance.
  685. -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  686. -# Default: 1
  687. -DaysBeforeAcceptNewClanWhenDismissed = 1
  688. -
  689. -# Number of days before creating a new alliance after dissolving an old alliance.
  690. -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  691. -# Default: 1
  692. -DaysBeforeCreateNewAllyWhenDissolved = 1
  693. -
  694. -# Maximum number of clans in alliance.
  695. -# Default: 3
  696. -AltMaxNumOfClansInAlly = 3
  697. -
  698. -# Allow clan members to withdraw from the clan warehouse.
  699. -# Default: False
  700. -AltMembersCanWithdrawFromClanWH = False
  701. -
  702. -# Remove castle circlets after a clan loses their castle or a player leaves a clan.
  703. -# Default: True
  704. -RemoveCastleCirclets = True
  705. -
  706. -# Number of members needed to request a clan war.
  707. -# Default: 15
  708. -AltClanMembersForWar = 15
  709. -
  710. -
  711. -# ---------------------------------------------------------------------------
  712. -# Party
  713. -# ---------------------------------------------------------------------------
  714. -
  715. -# CONFUSING(nothing to do with party) -> When you made damage to a mob
  716. -# and are inside this range, you will be considered as player to reward.
  717. -# Checks for party range to mob to calculate rewards(exp, items).
  718. -# Default: 1600
  719. -AltPartyRange = 1600
  720. -
  721. -# 1. Used for Adena distribution in party
  722. -# 2. Used to handle random and by turn party loot
  723. -# Default: 1400
  724. -AltPartyRange2 = 1400
  725. -
  726. -# If true, when party leader leaves party, next member in party will be the leader.
  727. -# If false the party be will dispersed.
  728. -# Default: False
  729. -AltLeavePartyLeader = False
  730. -
  731. -
  732. -# ---------------------------------------------------------------------------
  733. -# Initial Settings:
  734. -# ---------------------------------------------------------------------------
  735. -
  736. -#Initial Equipment Events is to enable a special settings for the items that a new character starts with.
  737. -#Default: False
  738. -InitialEquipmentEvent = False
  739. -
  740. -# This is the amount of Adena that a new character starts their character with.
  741. -# Default: 0
  742. -StartingAdena = 0
  743. -
  744. -# This is the starting level of the new character.
  745. -# Default: 1
  746. -StartingLevel = 1
  747. -
  748. -# This is the amount of SP that a new character starts their character with.
  749. -# Default: 0
  750. -StartingSP = 0
  751. -
  752. -# ---------------------------------------------------------------------------
  753. -# Other Settings:
  754. -# ---------------------------------------------------------------------------
  755. -
  756. -# This is the maximum amount of Adena that character can have in his inventory or warehouse.
  757. -# The maximum input amount is 9,223,372,036,854,775,807. (nine quintillion
  758. -# two hundred twenty three quadrillion three hundred seventy two trillion thirty six billion
  759. -# eight hundred fifty four million seven hundred seventy five thousand eight hundred seven)
  760. -# Setting negative values (-1 or others) will result in maximum amount available.
  761. -# Big values do not cause critical errors, although only 16 digits are visible in the inventory
  762. -# (example: 3,372,036,854,775,807 is visible out of 9,223,372,036,854,775,807)
  763. -# Default: 99900000000 (99 bilion and 900 milion)
  764. -MaxAdena = 99900000000
  765. -
  766. -# This option, when set to True, will enable automatically picking up items.
  767. -# If set False it will force the player to pickup dropped items from mobs.
  768. -# This excludes herbs mentioned above and items from Raid/GrandBosses with minions.
  769. -# Default: False
  770. -AutoLoot = False
  771. -
  772. -# This option, when set to True, will enable automatically picking up items from Raid/GrandBosses with minions.
  773. -# If set False it will force the player to pickup dropped items from bosses.
  774. -# This excludes herbs mentioned above and items from mobs.
  775. -# Default: False
  776. -AutoLootRaids = False
  777. -
  778. -# Delay for raid drop items loot privilege
  779. -# Require Command Channel , check next option
  780. -# Value is in seconds
  781. -# Default: 900 (15min)
  782. -RaidLootRightsInterval = 900
  783. -
  784. -# Minimal size of Command Channel for apply raid loot privilege
  785. -# Default: 45
  786. -RaidLootRightsCCSize = 45
  787. -
  788. -# This is the time in seconds that it will take for the player command "/unstuck" to activate.
  789. -# Default: 300
  790. -UnstuckInterval = 300
  791. -
  792. -# Teleport Watchdog Timeout (seconds)
  793. -# Player forced to appear if remain in teleported state longer than timeout
  794. -# Does not set too low, recommended value 60s.
  795. -# This time is in seconds, leave it at 0 if you want this feature disabled.
  796. -# Default: 0
  797. -TeleportWatchdogTimeout = 0
  798. -
  799. -# After a player teleports, this is the time the player is protected.
  800. -# This time is in seconds, leave it at 0 if you want this feature disabled.
  801. -# Retail (Since GE): 600 (10 minutes)
  802. -# Default: 600
  803. -PlayerSpawnProtection = 600
  804. -
  805. -# Spawn protection should disappear with any action with the exception
  806. -# of the item usage from items in this list.
  807. -# Format: itemId,itemId,itemId,....
  808. -# Default: 0
  809. -PlayerSpawnProtectionAllowedItems =
  810. -
  811. -# Teleport spawn protection time. It will protect the player in the
  812. -# teleport spawn for the given time. 0 to disable feature
  813. -PlayerTeleportProtection = 0
  814. -
  815. -# If enabled, players respawn in town on different locations defined in zone.xml for given town.
  816. -# If disabled the first spawn location from zone.xml is used.
  817. -# Default: True
  818. -RandomRespawnInTownEnabled = True
  819. -
  820. -# This will allow a random offset from the base teleport location coordinates based on a maximum offset.
  821. -# Default: True
  822. -OffsetOnTeleportEnabled = True
  823. -
  824. -# Maximum offset for base teleport location when OffsetOnTeleportEnabled is enabled .
  825. -# Default: 50
  826. -MaxOffsetOnTeleport = 50
  827. -
  828. -# This option is to enable or disable the use of in game petitions.
  829. -# The MaxPetitionsPerPlayer is the amount of petitions a player can make.
  830. -# The MaximumPendingPetitions is the total amount of petitions in the server.
  831. -# Note:
  832. -#  Logically, MaximumPendingPetitions must be higher then MaxPetitionsPerPlayer.
  833. -# Default: True, 5, 25
  834. -PetitioningAllowed = True
  835. -MaxPetitionsPerPlayer = 5
  836. -MaxPetitionsPending = 25
  837. -
  838. -# Free teleporting around the world.
  839. -# Default: False
  840. -AltFreeTeleporting = False
  841. -
  842. -# Allow character deletion after days set below. To disallow character deletion, set this equal to 0.
  843. -# Default: 7
  844. -DeleteCharAfterDays = 7
  845. -
  846. -# Alternative Xp/Sp rewards, if not 0, then calculated as 2^((mob.level-player.level) / coef). Coef are the 2 numbers set below.
  847. -# A few examples for "AltGameExponentXp = 5." and "AltGameExponentSp = 3.":
  848. -#  diff = 0 (player and mob has the same level), XP bonus rate = 1, SP bonus rate = 1
  849. -#  diff = 3 (mob is 3 levels above), XP bonus rate = 1.52, SP bonus rate = 2
  850. -#  diff = 5 (mob is 5 levels above), XP bonus rate = 2, SP bonus rate = 3.17
  851. -#  diff = -8 (mob is 8 levels below), XP bonus rate = 0.4, SP bonus rate = 0.16
  852. -# Default: 0, 0
  853. -AltGameExponentXp = 0
  854. -AltGameExponentSp = 0
  855. -
  856. -
  857. -# PARTY XP DISTRIBUTION
  858. -# 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).
  859. -# In that case he will not receive any Exp/SP from party and is not counted for party bonus.
  860. -# If you don't want to have a cutoff point for party members' XP distribution, set the first option to "none".
  861. -# Available Options: highfive, auto, level, percentage, none
  862. -# Default: highfive
  863. -PartyXpCutoffMethod = highfive
  864. -
  865. -# This option takes effect when "percentage" method is chosen. Don't use high values for this!
  866. -# Default: 3.0
  867. -PartyXpCutoffPercent = 3.0
  868. -
  869. -# This option takes effect when "level" method is chosen. Don't use low values for this!
  870. -# Default: 20
  871. -PartyXpCutoffLevel = 20
  872. -
  873. -# This option takes effect when "highfive" method is chosen.
  874. -# Each pair of numbers represent a level range.
  875. -# If the gap is between the first pair, there is no penalty.
  876. -# If the gap is between the second pair, the lowest party member will gain only 30% of the XP that others receive.
  877. -# If the gap is between the last pair, the lowest party member will not receive any XP.
  878. -# Default: 0,9;10,14;15,99
  879. -PartyXpCutoffGaps = 0,9;10,14;15,99
  880. -
  881. -# This option takes effect when "highfive" method is chosen.
  882. -# Each number represent the XP percent gain at that level gap.
  883. -# For the first gap, the lowest party member will gain 100% XP as there is no penalty.
  884. -# For the second gap, the lowest party member will gain only 30% of the XP that others receive.
  885. -# For the last gap, the lowest party member will not receive any XP.
  886. -# Default: 100;30;0
  887. -PartyXpCutoffGapPercent = 100;30;0
  888. -
  889. -# Disable tutorial on new player enter into Game
  890. -# Please remember its sometimes important to novice players
  891. -# Default: False
  892. -DisableTutorial = False
  893. -
  894. -# Expertise penalty
  895. -# If disabled, player will not receive penalty for equip higher grade items
  896. -# Default: True
  897. -ExpertisePenalty = True
  898. -
  899. -# Player can in client define his own key mapping and for save it must be stored server side.
  900. -# Disabled until confirmed as working.
  901. -# Default: False
  902. -StoreCharUiSettings = False
  903. -
  904. -# Character name restriction
  905. -# Disallow characters to have a name which contains the words.
  906. -# Split them with ",". Use lowercase. Example: announcements,announce...
  907. -# Default: annou,ammou,amnou,anmou,anou,amou,announcements,announce
  908. -ForbiddenNames = annou,ammou,amnou,anmou,anou,amou,announcements,announce
  909. -
  910. -# If enabled, when character in silence (block PMs) mode sends a PM to a character, silence mode no longer blocks this character,
  911. -# allowing both characters send each other PMs even with enabled silence mode.
  912. -# The exclude list is cleared each time the character goes into silence mode.
  913. -SilenceModeExclude = False
  914. -
  915. -# Enables alternative validation of triggering skills.
  916. -# When enabled pvp skills will not be casted on non flagged player.
  917. -# Sadly its non-retail
  918. -# Default: False
  919. -AltValidateTriggerSkills = False
  920. diff --git a/dist/game/config/ConquerableHallSiege.properties b/dist/game/config/ConquerableHallSiege.properties
  921. deleted file mode 100644
  922. index 583d5d5..0000000
  923. --- a/dist/game/config/ConquerableHallSiege.properties
  924. +++ /dev/null
  925. @@ -1,24 +0,0 @@
  926. -# --------------------------------------------------
  927. -# Contestable halls general configuration
  928. -# --------------------------------------------------
  929. -
  930. -# Min level that each clan needs to register
  931. -# for the siege
  932. -MinClanLevel = 4
  933. -
  934. -# Max number of clans allowed to register for
  935. -# the battle
  936. -MaxAttackers = 500
  937. -
  938. -# Max numbers of flags that each clan is allowed
  939. -# to put
  940. -MaxFlagsPerClan = 1
  941. -
  942. -# Enable the fame reward
  943. -EnableFame = false
  944. -
  945. -# Fame amount
  946. -FameAmount = 0
  947. -
  948. -# Fame Frequency
  949. -FameFrequency = 0
  950. diff --git a/dist/game/config/Feature.properties b/dist/game/config/Feature.properties
  951. deleted file mode 100644
  952. index d8a6bf0..0000000
  953. --- a/dist/game/config/Feature.properties
  954. +++ /dev/null
  955. @@ -1,396 +0,0 @@
  956. -# ---------------------------------------------------------------------------
  957. -# Alternative Feature Settings
  958. -# ---------------------------------------------------------------------------
  959. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  960. -# Warning:
  961. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  962. -# ---------------------------------------------------------------------------
  963. -# Castle
  964. -# ---------------------------------------------------------------------------
  965. -
  966. -# Siege Time rules
  967. -# Which hours can change Castle Lords
  968. -# Default: 16,20
  969. -SiegeHourList = 16,20
  970. -
  971. -# Teleport Function price
  972. -# Price = 7 days
  973. -CastleTeleportFunctionFeeRatio = 604800000
  974. -CastleTeleportFunctionFeeLvl1 = 1000
  975. -CastleTeleportFunctionFeeLvl2 = 10000
  976. -
  977. -# Support magic buff price
  978. -# Price = 7 day
  979. -CastleSupportFunctionFeeRatio = 604800000
  980. -CastleSupportFeeLvl1 = 49000
  981. -CastleSupportFeeLvl2 = 120000
  982. -
  983. -# MP Regeneration price
  984. -# Price = 7 day
  985. -CastleMpRegenerationFunctionFeeRatio = 604800000
  986. -CastleMpRegenerationFeeLvl1 = 45000
  987. -CastleMpRegenerationFeeLvl2 = 65000
  988. -
  989. -# Hp Regeneration price
  990. -# Price = 7 day
  991. -CastleHpRegenerationFunctionFeeRatio = 604800000
  992. -CastleHpRegenerationFeeLvl1 = 12000
  993. -CastleHpRegenerationFeeLvl2 = 20000
  994. -
  995. -# Exp Regeneration price
  996. -# Price = 7 day
  997. -CastleExpRegenerationFunctionFeeRatio = 604800000
  998. -CastleExpRegenerationFeeLvl1 = 63000
  999. -CastleExpRegenerationFeeLvl2 = 70000
  1000. -
  1001. -# Outer Door upgrade price
  1002. -OuterDoorUpgradePriceLvl2 = 3000000
  1003. -OuterDoorUpgradePriceLvl3 = 4000000
  1004. -OuterDoorUpgradePriceLvl5 = 5000000
  1005. -
  1006. -# Inner Door upgrade price
  1007. -InnerDoorUpgradePriceLvl2 = 750000
  1008. -InnerDoorUpgradePriceLvl3 = 900000
  1009. -InnerDoorUpgradePriceLvl5 = 1000000
  1010. -
  1011. -# Wall upgrade price
  1012. -WallUpgradePriceLvl2 = 1600000
  1013. -WallUpgradePriceLvl3 = 1800000
  1014. -WallUpgradePriceLvl5 = 2000000
  1015. -
  1016. -# Trap upgrade price
  1017. -TrapUpgradePriceLvl1 = 3000000
  1018. -TrapUpgradePriceLvl2 = 4000000
  1019. -TrapUpgradePriceLvl3 = 5000000
  1020. -TrapUpgradePriceLvl4 = 6000000
  1021. -
  1022. -# ---------------------------------------------------------------------------
  1023. -# Clan Hall
  1024. -# ---------------------------------------------------------------------------
  1025. -
  1026. -# Teleport Function price
  1027. -# Price = 7 days
  1028. -ClanHallTeleportFunctionFeeRatio = 604800000
  1029. -ClanHallTeleportFunctionFeeLvl1 = 7000
  1030. -ClanHallTeleportFunctionFeeLvl2 = 14000
  1031. -
  1032. -# Support magic buff price
  1033. -# Price = 1 day
  1034. -ClanHallSupportFunctionFeeRatio = 86400000
  1035. -ClanHallSupportFeeLvl1 = 2500
  1036. -ClanHallSupportFeeLvl2 = 5000
  1037. -ClanHallSupportFeeLvl3 = 7000
  1038. -ClanHallSupportFeeLvl4 = 11000
  1039. -ClanHallSupportFeeLvl5 = 21000
  1040. -ClanHallSupportFeeLvl6 = 36000
  1041. -ClanHallSupportFeeLvl7 = 37000
  1042. -ClanHallSupportFeeLvl8 = 364000
  1043. -
  1044. -# MP Regeneration price
  1045. -# Price = 1 day
  1046. -ClanHallMpRegenerationFunctionFeeRatio = 86400000
  1047. -ClanHallMpRegenerationFeeLvl1 = 2000
  1048. -ClanHallMpRegenerationFeeLvl2 = 3750
  1049. -ClanHallMpRegenerationFeeLvl3 = 6500
  1050. -ClanHallMpRegenerationFeeLvl4 = 13750
  1051. -ClanHallMpRegenerationFeeLvl5 = 20000
  1052. -
  1053. -# Hp Regeneration price
  1054. -# Price = 1 day
  1055. -ClanHallHpRegenerationFunctionFeeRatio = 86400000
  1056. -ClanHallHpRegenerationFeeLvl1 = 700
  1057. -ClanHallHpRegenerationFeeLvl2 = 800
  1058. -ClanHallHpRegenerationFeeLvl3 = 1000
  1059. -ClanHallHpRegenerationFeeLvl4 = 1166
  1060. -ClanHallHpRegenerationFeeLvl5 = 1500
  1061. -ClanHallHpRegenerationFeeLvl6 = 1750
  1062. -ClanHallHpRegenerationFeeLvl7 = 2000
  1063. -ClanHallHpRegenerationFeeLvl8 = 2250
  1064. -ClanHallHpRegenerationFeeLvl9 = 2500
  1065. -ClanHallHpRegenerationFeeLvl10 = 3250
  1066. -ClanHallHpRegenerationFeeLvl11 = 3750
  1067. -ClanHallHpRegenerationFeeLvl12 = 4250
  1068. -ClanHallHpRegenerationFeeLvl13 = 5166
  1069. -
  1070. -# Exp Regeneration price
  1071. -# Price = 1 day
  1072. -ClanHallExpRegenerationFunctionFeeRatio = 86400000
  1073. -ClanHallExpRegenerationFeeLvl1 = 3000
  1074. -ClanHallExpRegenerationFeeLvl2 = 6000
  1075. -ClanHallExpRegenerationFeeLvl3 = 9000
  1076. -ClanHallExpRegenerationFeeLvl4 = 15000
  1077. -ClanHallExpRegenerationFeeLvl5 = 21000
  1078. -ClanHallExpRegenerationFeeLvl6 = 23330
  1079. -ClanHallExpRegenerationFeeLvl7 = 30000
  1080. -
  1081. -# Creation item function
  1082. -# Price = 1 day
  1083. -ClanHallItemCreationFunctionFeeRatio = 86400000
  1084. -ClanHallItemCreationFunctionFeeLvl1 = 30000
  1085. -ClanHallItemCreationFunctionFeeLvl2 = 70000
  1086. -ClanHallItemCreationFunctionFeeLvl3 = 140000
  1087. -
  1088. -# Curtains Decoration
  1089. -# Price = 7 days
  1090. -ClanHallCurtainFunctionFeeRatio = 604800000
  1091. -ClanHallCurtainFunctionFeeLvl1 = 2000
  1092. -ClanHallCurtainFunctionFeeLvl2 = 2500
  1093. -
  1094. -# Fixtures Decoration
  1095. -# Price = 3 days
  1096. -ClanHallFrontPlatformFunctionFeeRatio = 259200000
  1097. -ClanHallFrontPlatformFunctionFeeLvl1 = 1300
  1098. -ClanHallFrontPlatformFunctionFeeLvl2 = 4000
  1099. -
  1100. -# If true Clan Hall buff cost 0 mp.
  1101. -# Default: False
  1102. -AltClanHallMpBuffFree = False
  1103. -
  1104. -# ---------------------------------------------------------------------------
  1105. -# Fortress
  1106. -# ---------------------------------------------------------------------------
  1107. -
  1108. -# Teleport Function price
  1109. -# Price = 7 days
  1110. -FortressTeleportFunctionFeeRatio = 604800000
  1111. -FortressTeleportFunctionFeeLvl1 = 1000
  1112. -FortressTeleportFunctionFeeLvl2 = 10000
  1113. -
  1114. -# Support magic buff price
  1115. -# Price = 1 day
  1116. -FortressSupportFunctionFeeRatio = 86400000
  1117. -FortressSupportFeeLvl1 = 7000
  1118. -FortressSupportFeeLvl2 = 17000
  1119. -
  1120. -# MP Regeneration price
  1121. -# Price = 1 day
  1122. -FortressMpRegenerationFunctionFeeRatio = 86400000
  1123. -FortressMpRegenerationFeeLvl1 = 6500
  1124. -FortressMpRegenerationFeeLvl2 = 9300
  1125. -
  1126. -# Hp Regeneration price
  1127. -# Price = 1 day
  1128. -FortressHpRegenerationFunctionFeeRatio = 86400000
  1129. -FortressHpRegenerationFeeLvl1 = 2000
  1130. -FortressHpRegenerationFeeLvl2 = 3500
  1131. -
  1132. -# Exp Regeneration price
  1133. -# Price = 1 day
  1134. -FortressExpRegenerationFunctionFeeRatio = 86400000
  1135. -FortressExpRegenerationFeeLvl1 = 9000
  1136. -FortressExpRegenerationFeeLvl2 = 10000
  1137. -
  1138. -# This is the time frequently when Fort owner gets Blood Oath, supply level raised and Fort fee is payed
  1139. -# Default 360 mins
  1140. -FortressPeriodicUpdateFrequency = 360
  1141. -
  1142. -# The number of Blood Oath which given to the Fort owner clan when Fort Updater runs
  1143. -# Default: 1
  1144. -FortressBloodOathCount = 1
  1145. -
  1146. -# The maximum Fort supply level
  1147. -# Max lvl what you can define here is 21!
  1148. -# Default: 6
  1149. -FortressMaxSupplyLevel = 6
  1150. -
  1151. -# Fort fee which payed to the Castle
  1152. -# Default: 25000
  1153. -FortressFeeForCastle = 25000
  1154. -
  1155. -# The maximum time while a clan can own a fortress
  1156. -# Deafault: 168 hours
  1157. -FortressMaximumOwnTime = 168
  1158. -
  1159. -
  1160. -# ---------------------------------------------------------------------------
  1161. -# Seven Signs
  1162. -# ---------------------------------------------------------------------------
  1163. -
  1164. -# Determines whether castle ownership is determined by clan or by alliance.
  1165. -# Default is by alliance, as on official servers.
  1166. -AltRequireClanCastle = False
  1167. -
  1168. -# Dawn:
  1169. -# True - Players not owning castle need pay participation fee
  1170. -# False - Anyone can join Dawn
  1171. -AltCastleForDawn = True
  1172. -
  1173. -# Dusk:
  1174. -# True - Players owning castle can not join Dusk side
  1175. -# False - Anyone can join Dusk
  1176. -AltCastleForDusk = True
  1177. -
  1178. -# Minimum Players for participate in SevenSigns Festival.
  1179. -# Default: 5
  1180. -AltFestivalMinPlayer = 5
  1181. -
  1182. -# Maximum seal stone contribution per player during festival.
  1183. -# Default: 1000000
  1184. -AltMaxPlayerContrib = 1000000
  1185. -
  1186. -# Festival Manager Start time (set in milliseconds; 1000 = 1 second).
  1187. -# Default: 2 minutes
  1188. -AltFestivalManagerStart = 120000
  1189. -
  1190. -# Festival Length (set in milliseconds; 1000 = 1 second).
  1191. -# Default: 18 minutes
  1192. -AltFestivalLength = 1080000
  1193. -
  1194. -# Festival Cycle Length.
  1195. -# Default: 38 Minutes (20 minutes wait time + Festival Length) (set in milliseconds; 1000 = 1 second).
  1196. -AltFestivalCycleLength = 2280000
  1197. -
  1198. -# At what point the first festival spawn occurs.
  1199. -# Default: 2 minutes (set in milliseconds; 1000 = 1 second).
  1200. -AltFestivalFirstSpawn = 120000
  1201. -
  1202. -# At what Point the first festival swarm occurs.
  1203. -# Default: 5 minutes (set in milliseconds; 1000 = 1 second).
  1204. -AltFestivalFirstSwarm = 300000
  1205. -
  1206. -# At what Point the second festival spawn occurs.
  1207. -# Default: 9 minutes (set in milliseconds; 1000 = 1 second).
  1208. -AltFestivalSecondSpawn = 540000
  1209. -
  1210. -# At what Point the second festival spawn occurs.
  1211. -# Default: 12 minutes (set in milliseconds; 1000 = 1 second).
  1212. -AltFestivalSecondSwarm = 720000
  1213. -
  1214. -# At what point the chests spawn in.
  1215. -# Default: 15 minutes (set in milliseconds; 1000 = 1 second).
  1216. -AltFestivalChestSpawn = 900000
  1217. -
  1218. -# 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.
  1219. -# Default: 1.1,0.8,1.1,0.8
  1220. -AltDawnGatesPdefMult = 1.1
  1221. -AltDuskGatesPdefMult = 0.8
  1222. -AltDawnGatesMdefMult = 1.1
  1223. -AltDuskGatesMdefMult = 0.8
  1224. -
  1225. -# If this = true only cabal period owners can use merchant and blacksmith of mammon.
  1226. -# If false any player can use.
  1227. -# Default: True
  1228. -StrictSevenSigns = True
  1229. -
  1230. -# Save SevenSigns status only each 30 minutes and after period change.
  1231. -# Player info saved only during periodic data store (set by CharacterDataStoreInterval) and logout.
  1232. -# If False then save info and status immediately after changes.
  1233. -# Default: True
  1234. -AltSevenSignsLazyUpdate = True
  1235. -
  1236. -# Total count of available tickets.
  1237. -# Default: 300
  1238. -SevenSignsDawnTicketQuantity = 300
  1239. -
  1240. -# Price of each ticket.
  1241. -# Default: 1000
  1242. -SevenSignsDawnTicketPrice = 1000
  1243. -
  1244. -# Tickets bundle (exchanged in amounts of).
  1245. -# Default: 10
  1246. -SevenSignsDawnTicketBundle = 10
  1247. -
  1248. -# Ticket item Id.
  1249. -# Default: 6388
  1250. -SevenSignsManorsAgreementId = 6388
  1251. -
  1252. -# Fee for joining Dawn
  1253. -SevenSignsJoinDawnFee = 50000
  1254. -
  1255. -
  1256. -# ---------------------------------------------------------------------------
  1257. -# Clan Reputation Points
  1258. -# ---------------------------------------------------------------------------
  1259. -# Reputation score gained by taking Fortress.
  1260. -TakeFortPoints = 200
  1261. -
  1262. -# Reputation score gained by taking Castle.
  1263. -TakeCastlePoints = 1500
  1264. -
  1265. -# Reputation score gained by defended Castle.
  1266. -CastleDefendedPoints = 750
  1267. -
  1268. -# Reputation score gained per clan members of festival winning party.
  1269. -FestivalOfDarknessWin = 200
  1270. -
  1271. -# Reputation score gained for per hero clan members.
  1272. -HeroPoints = 1000
  1273. -
  1274. -# Minimum Reputation score gained after completing 2nd class transfer under Academy.
  1275. -CompleteAcademyMinPoints = 190
  1276. -
  1277. -# Maximum Reputation score gained after completing 2nd class transfer under Academy.
  1278. -CompleteAcademyMaxPoints = 650
  1279. -
  1280. -# Reputation score gained per killed ballista.
  1281. -KillBallistaPoints = 30
  1282. -
  1283. -# Reputation score gained for one Blood Alliance.
  1284. -BloodAlliancePoints = 500
  1285. -
  1286. -# Reputation score gained for 10 Blood Oaths.
  1287. -BloodOathPoints = 200
  1288. -
  1289. -# Reputation score gained for 100 Knight's Epaulettes.
  1290. -KnightsEpaulettePoints = 20
  1291. -
  1292. -# Reputation score gained per clan member listed as top raid killers.
  1293. -1stRaidRankingPoints = 1250
  1294. -2ndRaidRankingPoints = 900
  1295. -3rdRaidRankingPoints = 700
  1296. -4thRaidRankingPoints = 600
  1297. -5thRaidRankingPoints = 450
  1298. -6thRaidRankingPoints = 350
  1299. -7thRaidRankingPoints = 300
  1300. -8thRaidRankingPoints = 200
  1301. -9thRaidRankingPoints = 150
  1302. -10thRaidRankingPoints = 100
  1303. -UpTo50thRaidRankingPoints = 25
  1304. -UpTo100thRaidRankingPoints = 12
  1305. -
  1306. -# Reputation score gained/reduced per kill during a clan war or siege war.
  1307. -ReputationScorePerKill = 1
  1308. -
  1309. -# Reputation score reduced by loosing Fortress in battle.
  1310. -LooseFortPoints = 0
  1311. -
  1312. -# Reputation score reduced by loosing Castle in battle.
  1313. -LooseCastlePoints = 3000
  1314. -
  1315. -# Reputation score reduced by creating Royal Guard.
  1316. -CreateRoyalGuardCost = 5000
  1317. -
  1318. -# Reputation score reduced by creating Knight Unit.
  1319. -CreateKnightUnitCost = 10000
  1320. -
  1321. -# Reputation score reduced by reinforcing Knight Unit (if clan level is 9 or more).
  1322. -ReinforceKnightUnitCost = 5000
  1323. -
  1324. -# Reputation score reduced by increasing clan level.
  1325. -ClanLevel6Cost = 5000
  1326. -ClanLevel7Cost = 10000
  1327. -ClanLevel8Cost = 20000
  1328. -ClanLevel9Cost = 40000
  1329. -ClanLevel10Cost = 40000
  1330. -ClanLevel11Cost = 75000
  1331. -
  1332. -# Number of clan members needed to increase clan level.
  1333. -ClanLevel6Requirement = 30
  1334. -ClanLevel7Requirement = 50
  1335. -ClanLevel8Requirement = 80
  1336. -ClanLevel9Requirement = 120
  1337. -ClanLevel10Requirement = 140
  1338. -ClanLevel11Requirement = 170
  1339. -
  1340. -# ---------------------------------------------------------------------------
  1341. -# Other
  1342. -# ---------------------------------------------------------------------------
  1343. -
  1344. -# Allow riding wyvern ignoring 7 Signs status
  1345. -# This will allow Castle Lords to ride wyvern even when Dusk has won Seal of Strife
  1346. -# Default: False
  1347. -AllowRideWyvernAlways = False
  1348. -
  1349. -# Allow riding wyvern during Castle/Fort Siege
  1350. -# Default: True
  1351. -AllowRideWyvernDuringSiege = True
  1352. \ No newline at end of file
  1353. diff --git a/dist/game/config/FloodProtector.properties b/dist/game/config/FloodProtector.properties
  1354. deleted file mode 100644
  1355. index 44aa685..0000000
  1356. --- a/dist/game/config/FloodProtector.properties
  1357. +++ /dev/null
  1358. @@ -1,124 +0,0 @@
  1359. -# ---------------------------------------------------------------------------
  1360. -# Floodprotector Options
  1361. -# ---------------------------------------------------------------------------
  1362. -# The following settings can be applied to each feature:
  1363. -# Interval - interval in gameserver ticks (1 tick = 100ms) in which only one request is allowed
  1364. -# LogFlooding - whether flooding should be logged (only first occurrence of flooding and total count of flood requests is logged)
  1365. -# PunishmentLimit - if number of requests within single interval exceeds specified number then the specified punishment is applied (0 = disables punishment feature)
  1366. -# PunishmentType - type of the punishment ('none', 'kick', 'ban', 'jail'), valid only if PunishmentLimit is greater than 0
  1367. -# PunishmentTime - for how many minutes should the player(jail)/account(ban) be punished (0 = forever), valid only for PunishmentType 'jail' or 'ban'
  1368. -
  1369. -# UseItem - item usage flooding
  1370. -# Item usage interval
  1371. -# Disabled to match retail, if you want to enable this protection change the value to 4 for example.
  1372. -# Default: 0
  1373. -FloodProtectorUseItemInterval = 0
  1374. -FloodProtectorUseItemLogFlooding = False
  1375. -FloodProtectorUseItemPunishmentLimit = 0
  1376. -FloodProtectorUseItemPunishmentType = none
  1377. -FloodProtectorUseItemPunishmentTime = 0
  1378. -
  1379. -# RollDice - rolling dice flooding
  1380. -FloodProtectorRollDiceInterval = 42
  1381. -FloodProtectorRollDiceLogFlooding = False
  1382. -FloodProtectorRollDicePunishmentLimit = 0
  1383. -FloodProtectorRollDicePunishmentType = none
  1384. -FloodProtectorRollDicePunishmentTime = 0
  1385. -
  1386. -# Firework - firework flooding
  1387. -FloodProtectorFireworkInterval = 42
  1388. -FloodProtectorFireworkLogFlooding = False
  1389. -FloodProtectorFireworkPunishmentLimit = 0
  1390. -FloodProtectorFireworkPunishmentType = none
  1391. -FloodProtectorFireworkPunishmentTime = 0
  1392. -
  1393. -# ItemPetSummon - item summoning and pet mounting flooding
  1394. -FloodProtectorItemPetSummonInterval = 16
  1395. -FloodProtectorItemPetSummonLogFlooding = False
  1396. -FloodProtectorItemPetSummonPunishmentLimit = 0
  1397. -FloodProtectorItemPetSummonPunishmentType = none
  1398. -FloodProtectorItemPetSummonPunishmentTime = 0
  1399. -
  1400. -# HeroVoice - hero voice flooding
  1401. -FloodProtectorHeroVoiceInterval = 100
  1402. -FloodProtectorHeroVoiceLogFlooding = False
  1403. -FloodProtectorHeroVoicePunishmentLimit = 0
  1404. -FloodProtectorHeroVoicePunishmentType = none
  1405. -FloodProtectorHeroVoicePunishmentTime = 0
  1406. -
  1407. -# GlobalChat - global chat flooding
  1408. -FloodProtectorGlobalChatInterval = 5
  1409. -FloodProtectorGlobalChatLogFlooding = False
  1410. -FloodProtectorGlobalChatPunishmentLimit = 0
  1411. -FloodProtectorGlobalChatPunishmentType = none
  1412. -FloodProtectorGlobalChatPunishmentTime = 0
  1413. -
  1414. -# Subclass - subclass flooding
  1415. -FloodProtectorSubclassInterval = 20
  1416. -FloodProtectorSubclassLogFlooding = False
  1417. -FloodProtectorSubclassPunishmentLimit = 0
  1418. -FloodProtectorSubclassPunishmentType = none
  1419. -FloodProtectorSubclassPunishmentTime = 0
  1420. -
  1421. -# DropItem - drop item flooding
  1422. -FloodProtectorDropItemInterval = 10
  1423. -FloodProtectorDropItemLogFlooding = False
  1424. -FloodProtectorDropItemPunishmentLimit = 0
  1425. -FloodProtectorDropItemPunishmentType = none
  1426. -FloodProtectorDropItemPunishmentTime = 0
  1427. -
  1428. -# ServerBypass - server bypass flooding
  1429. -FloodProtectorServerBypassInterval = 5
  1430. -FloodProtectorServerBypassLogFlooding = False
  1431. -FloodProtectorServerBypassPunishmentLimit = 0
  1432. -FloodProtectorServerBypassPunishmentType = none
  1433. -FloodProtectorServerBypassPunishmentTime = 0
  1434. -
  1435. -# ServerBypass - multisell list request flooding
  1436. -FloodProtectorMultiSellInterval = 1
  1437. -FloodProtectorMultiSellLogFlooding = False
  1438. -FloodProtectorMultiSellPunishmentLimit = 0
  1439. -FloodProtectorMultiSellPunishmentType = none
  1440. -FloodProtectorMultiSellPunishmentTime = 0
  1441. -
  1442. -# All kind of other transactions - to/from pet, private store, warehouse, destroy
  1443. -FloodProtectorTransactionInterval = 10
  1444. -FloodProtectorTransactionLogFlooding = False
  1445. -FloodProtectorTransactionPunishmentLimit = 0
  1446. -FloodProtectorTransactionPunishmentType = none
  1447. -FloodProtectorTransactionPunishmentTime = 0
  1448. -
  1449. -# Manufacture
  1450. -FloodProtectorManufactureInterval = 3
  1451. -FloodProtectorManufactureLogFlooding = False
  1452. -FloodProtectorManufacturePunishmentLimit = 0
  1453. -FloodProtectorManufacturePunishmentType = none
  1454. -FloodProtectorManufacturePunishmentTime = 0
  1455. -
  1456. -# Manor
  1457. -FloodProtectorManorInterval = 30
  1458. -FloodProtectorManorLogFlooding = False
  1459. -FloodProtectorManorPunishmentLimit = 0
  1460. -FloodProtectorManorPunishmentType = none
  1461. -FloodProtectorManorPunishmentTime = 0
  1462. -
  1463. -# SendMail - sending mail interval, 10s on retail
  1464. -FloodProtectorSendMailInterval = 100
  1465. -FloodProtectorSendMailLogFlooding = False
  1466. -FloodProtectorSendMailPunishmentLimit = 0
  1467. -FloodProtectorSendMailPunishmentType = none
  1468. -FloodProtectorSendMailPunishmentTime = 0
  1469. -
  1470. -# CharacterSelect - attempts to load character
  1471. -FloodProtectorCharacterSelectInterval = 30
  1472. -FloodProtectorCharacterSelectLogFlooding = False
  1473. -FloodProtectorCharacterSelectPunishmentLimit = 0
  1474. -FloodProtectorCharacterSelectPunishmentType = none
  1475. -FloodProtectorCharacterSelectPunishmentTime = 0
  1476. -
  1477. -# Item Auction - Request for refresh
  1478. -FloodProtectorItemAuctionInterval = 9
  1479. -FloodProtectorItemAuctionLogFlooding = False
  1480. -FloodProtectorItemAuctionPunishmentLimit = 0
  1481. -FloodProtectorItemAuctionPunishmentType = none
  1482. -FloodProtectorItemAuctionPunishmentTime = 0
  1483. diff --git a/dist/game/config/FortSiege.properties b/dist/game/config/FortSiege.properties
  1484. deleted file mode 100644
  1485. index a1ba061..0000000
  1486. --- a/dist/game/config/FortSiege.properties
  1487. +++ /dev/null
  1488. @@ -1,277 +0,0 @@
  1489. -# ---------------------------------------------------------------------------
  1490. -# Fort Siege Settings
  1491. -# ---------------------------------------------------------------------------
  1492. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  1493. -# Warning:
  1494. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  1495. -
  1496. -# ---------------------------------------------------------------------------
  1497. -# Standard Settings
  1498. -# ---------------------------------------------------------------------------
  1499. -
  1500. -# Length of siege before the count down (in minutes).
  1501. -SiegeLength = 60
  1502. -
  1503. -# This defines how long you need to wait until the suspicious merchant will spawn after siege ends (in minutes).
  1504. -# Keep in mind when merchant spawns, the fort can be immediately sieged.
  1505. -# Default: 180
  1506. -SuspiciousMerchantRespawnDelay = 180
  1507. -
  1508. -# This defines how long you have to kill all commanders once you kill the first one (in minutes).
  1509. -# After that time (if all commanders not killed) all commanders and doors get respawned.
  1510. -CountDownLength = 10
  1511. -
  1512. -# Max number of flags per clan.
  1513. -MaxFlags = 1
  1514. -
  1515. -# Minimum clan level needed to sign up.
  1516. -SiegeClanMinLevel = 4
  1517. -
  1518. -#Max number of clans that can register on each side.
  1519. -AttackerMaxClans = 500
  1520. -
  1521. -# This option, if enabled, will enable register Fortress Siege to Castle owners just in territory.
  1522. -# Default: True
  1523. -JustToTerritory = True
  1524. -
  1525. -# ---------------------------------------------------------------------------
  1526. -# Fortress Commander Spawns
  1527. -# ---------------------------------------------------------------------------
  1528. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1529. -# Name - fortress name
  1530. -# N - number - 1: Archer Comander
  1531. -#            - 2: Guard Commander
  1532. -#            - 3: Support Unit Commander
  1533. -#            - 4: Main Machine - not supported yet, used General
  1534. -#            - 5: General - not used yet, will be used once control room is supported
  1535. -# Please keep the correct order of commanders, otherwise client will show wrong occupied barracks.
  1536. -# Control room (main machine) currently emulated in client.
  1537. -# x,y,z - coords
  1538. -# heading
  1539. -# npc_id - id of template
  1540. -
  1541. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1542. -# Name - fortress name
  1543. -# N - number
  1544. -# x,y,z - coords
  1545. -# flag_id - id of combat flag
  1546. -
  1547. -# Shanty Fortress
  1548. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1549. -ShantyCommander1 = -52435,155188,-1768,20000,35683
  1550. -ShantyCommander2 = -52128,157752,-2024,29864,35677
  1551. -ShantyCommander3 = -53944,155433,-2024,7304,35680
  1552. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1553. -ShantyFlag1 = -53086,156493,-1896,9819
  1554. -ShantyFlag2 = -53054,156605,-1896,9819
  1555. -ShantyFlag3 = -53032,156689,-1896,9819
  1556. -
  1557. -# Southern Fortress
  1558. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1559. -SouthernCommander1 = -21328,218864,-2952,0,35719
  1560. -SouthernCommander2 = -22992,218160,-3208,0,35713
  1561. -SouthernCommander3 = -21520,221504,-3208,45328,35716
  1562. -SouthernCommander4 = -22728,221746,-3200,33168,35721
  1563. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1564. -SouthernFlag1 = -22386,219917,-3079,9819
  1565. -SouthernFlag2 = -22386,219798,-3079,9819
  1566. -SouthernFlag3 = -22386,219679,-3079,9819
  1567. -
  1568. -# Hive Fortress
  1569. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1570. -HiveCommander1 = 15152,188128,-2640,0,35752
  1571. -HiveCommander2 = 17984,187536,-2896,45056,35746
  1572. -HiveCommander3 = 16016,189520,-2888,0,35749
  1573. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1574. -HiveFlag1 = 16685,188358,-2770,9819
  1575. -HiveFlag2 = 16761,188306,-2770,9819
  1576. -HiveFlag3 = 16847,188257,-2770,9819
  1577. -
  1578. -# Valley Fortress
  1579. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1580. -ValleyCommander1 = 124768,121856,-2296,0,35788
  1581. -ValleyCommander2 = 124299,123614,-2552,49192,35782
  1582. -ValleyCommander3 = 124768,124640,-2552,54480,35785
  1583. -ValleyCommander4 = 128048,123344,-2536,35028,35790
  1584. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1585. -ValleyFlag1 = 125970,123653,-2429,9819
  1586. -ValleyFlag2 = 126092,123650,-2429,9819
  1587. -ValleyFlag3 = 126205,123648,-2429,9819
  1588. -
  1589. -# Ivory Fortress
  1590. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1591. -IvoryCommander1 = 72400,2896,-2760,0,35821
  1592. -IvoryCommander2 = 73788,5479,-3016,55136,35815
  1593. -IvoryCommander3 = 71264,4144,-3008,0,35818
  1594. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1595. -IvoryFlag1 = 72565,4436,-2888,9819
  1596. -IvoryFlag2 = 72660,4512,-2888,9819
  1597. -IvoryFlag3 = 72759,4594,-2888,9819
  1598. -
  1599. -# Narsell Fortress
  1600. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1601. -NarsellCommander1 = 154704,53856,-2968,0,35852
  1602. -NarsellCommander2 = 155576,56592,-3224,59224,35846
  1603. -NarsellCommander3 = 153328,54848,-3216,5512,35849
  1604. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1605. -NarsellFlag1 = 154567,55397,-3097,9819
  1606. -NarsellFlag2 = 154650,55493,-3097,9819
  1607. -NarsellFlag3 = 154715,55587,-3097,9819
  1608. -
  1609. -# Bayou Fortress
  1610. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1611. -BayouCommander1 = 188624,38240,-3128,0,35888
  1612. -BayouCommander2 = 188160,39920,-3376,49284,35882
  1613. -BayouCommander3 = 188626,41066,-3376,57140,35885
  1614. -BayouCommander4 = 191846,39764,-3368,33020,35890
  1615. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1616. -BayouFlag1 = 189838,40063,-3253,9819
  1617. -BayouFlag2 = 189931,40060,-3253,9819
  1618. -BayouFlag3 = 190052,40062,-3253,9819
  1619. -
  1620. -# White Sands Fortress
  1621. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1622. -WhiteSandsCommander1 = 117216,205648,-3048,0,35921
  1623. -WhiteSandsCommander2 = 118880,203568,-3304,5396,35915
  1624. -WhiteSandsCommander3 = 118560,206560,-3304,48872,35918
  1625. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1626. -WhiteSandsFlag1 = 118640,205151,-3176,9819
  1627. -WhiteSandsFlag2 = 118690,205062,-3176,9819
  1628. -WhiteSandsFlag3 = 118742,204968,-3176,9819
  1629. -
  1630. -# Borderland Fortress
  1631. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1632. -BorderlandCommander1 = 159664,-72224,-2584,0,35957
  1633. -BorderlandCommander2 = 157968,-71659,-2832,59020,35951
  1634. -BorderlandCommander3 = 157312,-70640,-2832,0,35954
  1635. -BorderlandCommander4 = 160194,-68688,-2824,43272,35959
  1636. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1637. -BorderlandFlag1 = 158817,-70229,-2708,9819
  1638. -BorderlandFlag2 = 158883,-70145,-2708,9819
  1639. -BorderlandFlag3 = 158946,-70045,-2708,9819
  1640. -
  1641. -# Swamp Fortress
  1642. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1643. -SwampCommander1 = 71264,-60512,-2504,0,35995
  1644. -SwampCommander2 = 71248,-62352,-2752,12388,35989
  1645. -SwampCommander3 = 68688,-59648,-2752,56012,35992
  1646. -SwampCommander4 = 68005,-60866,-2744,5424,35997
  1647. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1648. -SwampFlag1 = 69829,-61087,-2629,9819
  1649. -SwampFlag2 = 69979,-61144,-2632,9819
  1650. -SwampFlag3 = 70069,-61182,-2629,9819
  1651. -
  1652. -# Archaic Fortress
  1653. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1654. -ArchaicCommander1 = 109856,-142640,-2672,0,36028
  1655. -ArchaicCommander2 = 109600,-139735,-2928,62612,36022
  1656. -ArchaicCommander3 = 108223,-142209,-2920,8524,36025
  1657. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1658. -ArchaicFlag1 = 109142,-141243,-2801,9819
  1659. -ArchaicFlag2 = 109184,-141129,-2801,9819
  1660. -ArchaicFlag3 = 109214,-141016,-2801,9819
  1661. -
  1662. -# Floran Fortress
  1663. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1664. -FloranCommander1 = 6528,151872,-2608,0,36064
  1665. -FloranCommander2 = 7006,148242,-2856,32768,36058
  1666. -FloranCommander3 = 4384,150992,-2856,0,36061
  1667. -FloranCommander4 = 5246,152319,-2848,49151,36066
  1668. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1669. -FloranFlag1 = 5293,149624,-2732,9819
  1670. -FloranFlag2 = 5306,149743,-2732,9819
  1671. -FloranFlag3 = 5299,149870,-2732,9819
  1672. -
  1673. -# Cloud Mountain Fortress
  1674. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1675. -CloudMountainCommander1 = -55248,90496,-2536,0,36102
  1676. -CloudMountainCommander2 = -55791,91856,-2792,0,36096
  1677. -CloudMountainCommander3 = -54168,92604,-2784,49196,36099
  1678. -CloudMountainCommander4 = -50913,92259,-2776,41188,36104
  1679. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1680. -CloudMountainFlag1 = -53354,91537,-2664,9819
  1681. -CloudMountainFlag2 = -53237,91537,-2664,9819
  1682. -CloudMountainFlag3 = -53112,91537,-2664,9819
  1683. -
  1684. -# Tanor Fortress
  1685. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1686. -TanorCommander1 = 58480,139648,-1464,0,36135
  1687. -TanorCommander2 = 61864,139257,-1728,46896,36129
  1688. -TanorCommander3 = 59436,140834,-1720,47296,36132
  1689. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1690. -TanorFlag1 = 60225,139771,-1597,9819
  1691. -TanorFlag2 = 60362,139742,-1597,9819
  1692. -TanorFlag3 = 60467,139727,-1597,9819
  1693. -
  1694. -# DragonSpine Fortress
  1695. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1696. -DragonspineCommander1 = 13184,94928,-3144,0,36166
  1697. -DragonspineCommander2 = 9472,94992,-3392,0,36160
  1698. -DragonspineCommander3 = 12829,96214,-3392,49152,36163
  1699. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1700. -DragonspineFlag1 = 11459,95308,-3264,9819
  1701. -DragonspineFlag2 = 11527,95301,-3264,9819
  1702. -DragonspineFlag3 = 11623,95311,-3264,9819
  1703. -
  1704. -# Antharas Fortress
  1705. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1706. -AntharasCommander1 = 79440,88752,-2600,0,36202
  1707. -AntharasCommander2 = 77262,91704,-2856,5112,36196
  1708. -AntharasCommander3 = 80929,90510,-2856,40192,36199
  1709. -AntharasCommander4 = 80755,89002,-2848,21984,36204
  1710. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1711. -AntharasFlag1 = 79470,91299,-2728,9819
  1712. -AntharasFlag2 = 79528,91187,-2728,9819
  1713. -AntharasFlag3 = 79580,91095,-2728,9819
  1714. -
  1715. -# Western Fortress
  1716. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1717. -WesternCommander1 = 113481,-16058,-712,0,36240
  1718. -WesternCommander2 = 109872,-16624,-968,16384,36234
  1719. -WesternCommander3 = 112601,-13933,-960,49152,36237
  1720. -WesternCommander4 = 113929,-14801,-960,32768,36242
  1721. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1722. -WesternFlag1 = 111280,-14820,-839,9819
  1723. -WesternFlag2 = 111380,-14820,-839,9819
  1724. -WesternFlag3 = 111480,-14820,-839,9819
  1725. -
  1726. -# Hunters Fortress
  1727. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1728. -HuntersCommander1 = 123232,94400,-1856,0,36278
  1729. -HuntersCommander2 = 122688,95760,-2112,0,36272
  1730. -HuntersCommander3 = 124305,96528,-2104,49151,36275
  1731. -HuntersCommander4 = 127632,96240,-2096,40892,36280
  1732. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1733. -HuntersFlag1 = 125155,95455,-1984,9819
  1734. -HuntersFlag2 = 125255,95455,-1984,9819
  1735. -HuntersFlag3 = 125355,95455,-1984,9819
  1736. -
  1737. -# Aaru Fortress
  1738. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1739. -AaruCommander1 = 74288,186912,-2296,0,36311
  1740. -AaruCommander2 = 71392,184720,-2552,5528,36305
  1741. -AaruCommander3 = 71542,186410,-2552,55088,36308
  1742. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1743. -AaruFlag1 = 73029,186303,-2424,9819
  1744. -AaruFlag2 = 73923,186247,-2424,9819
  1745. -AaruFlag3 = 72833,186178,-2424,9819
  1746. -
  1747. -# Demon Fortress
  1748. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1749. -DemonCommander1 = 100752,-53664,-360,0,36347
  1750. -DemonCommander2 = 100688,-57440,-616,16384,36341
  1751. -DemonCommander3 = 99484,-54027,-616,0,36344
  1752. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1753. -DemonFlag1 = 100400,-55401,-488,9819
  1754. -DemonFlag2 = 100400,-55301,-488,9819
  1755. -DemonFlag3 = 100400,-55201,-488,9819
  1756. -
  1757. -# Monastic Fortress
  1758. -# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  1759. -MonasticCommander1 = 73680,-95456,-1144,0,36385
  1760. -MonasticCommander2 = 70189,-93935,-1400,61576,36379
  1761. -MonasticCommander3 = 73831,-94119,-1400,45536,36382
  1762. -# Flag syntax:  NameFlagN = x,y,z,flag_id
  1763. -MonasticFlag1 = 72174,-94437,-1271,9819
  1764. -MonasticFlag2 = 72294,-94481,-1271,9819
  1765. -MonasticFlag3 = 72401,-94526,-1271,9819
  1766. \ No newline at end of file
  1767. diff --git a/dist/game/config/General.properties b/dist/game/config/General.properties
  1768. deleted file mode 100644
  1769. index 65b341c..0000000
  1770. --- a/dist/game/config/General.properties
  1771. +++ /dev/null
  1772. @@ -1,898 +0,0 @@
  1773. -# ---------------------------------------------------------------------------
  1774. -# General Server Settings
  1775. -# ---------------------------------------------------------------------------
  1776. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  1777. -# Warning:
  1778. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  1779. -
  1780. -# ---------------------------------------------------------------------------
  1781. -# Administrator
  1782. -# ---------------------------------------------------------------------------
  1783. -
  1784. -# 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.
  1785. -# Default: False
  1786. -EverybodyHasAdminRights = False
  1787. -
  1788. -# Setting for serverList
  1789. -# Displays [] in front of server name on character selection
  1790. -# Default: False
  1791. -ServerListBrackets = False
  1792. -
  1793. -# Displays server type next to the server name on character selection.
  1794. -# Notes:
  1795. -#  Accepted Values: Normal, Relax, Test, NoLabel, Restricted, Event, Free
  1796. -# Default: Normal
  1797. -ServerListType = Normal
  1798. -
  1799. -# Displays server minimum age to the server name on character selection.
  1800. -# Notes:
  1801. -#  Accepted values: 0, 15, 18
  1802. -# Default: 0
  1803. -ServerListAge = 0
  1804. -
  1805. -
  1806. -# If True, only accounts with GM access can enter the server.
  1807. -# Default: False
  1808. -ServerGMOnly = False
  1809. -
  1810. -# Enable GMs to have the glowing aura of a Hero character on login.
  1811. -# Notes:
  1812. -#  GMs can do "///hero" on themselves and get this aura voluntarily.
  1813. -#  It's advised to keep this off due to graphic lag.
  1814. -# Default: False
  1815. -GMHeroAura = False
  1816. -
  1817. -# Auto set invulnerable status to a GM on login.
  1818. -# Default: False
  1819. -GMStartupInvulnerable = False
  1820. -
  1821. -# Auto set invisible status to a GM on login.
  1822. -# Default: False
  1823. -GMStartupInvisible = False
  1824. -
  1825. -# Auto block private messages to a GM on login.
  1826. -# Default: False
  1827. -GMStartupSilence = False
  1828. -
  1829. -# Auto list GMs in GM list (/gmlist) on login.
  1830. -# Default: False
  1831. -GMStartupAutoList = False
  1832. -
  1833. -# Auto set diet mode on to a GM on login (affects your weight penalty).
  1834. -# Default: False
  1835. -GMStartupDietMode = False
  1836. -
  1837. -# Item restrictions apply to GMs as well? (True = restricted usage)
  1838. -# Default: True
  1839. -GMItemRestriction = True
  1840. -
  1841. -# Skill restrictions apply to GMs as well? (True = restricted usage)
  1842. -# Default: True
  1843. -GMSkillRestriction = True
  1844. -
  1845. -# Allow GMs to drop/trade non-tradable and quest(drop only) items
  1846. -# Default: False
  1847. -GMTradeRestrictedItems = False
  1848. -
  1849. -# Allow GMs to restart/exit while is fighting stance
  1850. -# Default: True
  1851. -GMRestartFighting = True
  1852. -
  1853. -# Show the GM's name behind an announcement made by him
  1854. -# example: "Announce: hi (HanWik)"
  1855. -GMShowAnnouncerName = False
  1856. -
  1857. -# Show the GM's name before an announcement made by him
  1858. -# example: "Nyaran: hi"
  1859. -GMShowCritAnnouncerName = False
  1860. -
  1861. -# Give special skills for every GM
  1862. -# 7029,7041-7064,7088-7096,23238-23249 (Master's Blessing)
  1863. -# Default: False
  1864. -GMGiveSpecialSkills = False
  1865. -
  1866. -# Give special aura skills for every GM
  1867. -# 7029,23238-23249,23253-23296 (Master's Blessing)
  1868. -# Default: False
  1869. -GMGiveSpecialAuraSkills = False
  1870. -
  1871. -
  1872. -# ---------------------------------------------------------------------------
  1873. -# Server Security
  1874. -# ---------------------------------------------------------------------------
  1875. -
  1876. -# Enforce gameguard for clients. Sends a gameguard query on character login.
  1877. -# Default: False
  1878. -GameGuardEnforce = False
  1879. -
  1880. -# Don't allow player to perform trade, talk with npc, or move until gameguard reply is received.
  1881. -# Default: False
  1882. -GameGuardProhibitAction = False
  1883. -
  1884. -#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.
  1885. -# Default: False
  1886. -LogChat = False
  1887. -
  1888. -# Default: False
  1889. -LogAutoAnnouncements = False
  1890. -
  1891. -# Default: False
  1892. -LogItems = False
  1893. -
  1894. -# Log only Adena and equippable items if LogItems is enabled
  1895. -LogItemsSmallLog = False
  1896. -
  1897. -# Default: False
  1898. -LogItemEnchants = False
  1899. -
  1900. -# Default: False
  1901. -LogSkillEnchants = False
  1902. -
  1903. -# Default: False
  1904. -GMAudit = False
  1905. -
  1906. -# Check players for non-allowed skills
  1907. -# Default: False
  1908. -SkillCheckEnable = False
  1909. -
  1910. -# If true, remove invalid skills from player and database.
  1911. -# Report only, if false.
  1912. -# Default: False
  1913. -SkillCheckRemove = False
  1914. -
  1915. -# Check also GM characters (only if SkillCheckEnable = True)
  1916. -# Default: True
  1917. -SkillCheckGM = True
  1918. -
  1919. -
  1920. -# ---------------------------------------------------------------------------
  1921. -# Thread Configuration
  1922. -# ---------------------------------------------------------------------------
  1923. -
  1924. -# Extreme caution should be here, set to defaults if you do not know what you are doing.
  1925. -# These could possibly hurt your servers performance or improve it depending on your server's configuration, size, and other factors.
  1926. -# Default: 10
  1927. -ThreadPoolSizeEffects = 10
  1928. -
  1929. -# Default: 13
  1930. -ThreadPoolSizeGeneral = 13
  1931. -
  1932. -# Default: 2
  1933. -ThreadPoolSizeEvents = 2
  1934. -
  1935. -# Default: 2
  1936. -UrgentPacketThreadCoreSize = 2
  1937. -
  1938. -# Default: 4
  1939. -GeneralPacketThreadCoreSize = 4
  1940. -
  1941. -# Default: 4
  1942. -GeneralThreadCoreSize = 4
  1943. -
  1944. -# Default: 6
  1945. -AiMaxThread = 6
  1946. -
  1947. -# Default: 5
  1948. -EventsMaxThread = 5
  1949. -
  1950. -# Dead Lock Detector (a separate thread for detecting deadlocks).
  1951. -# For improved crash logs and automatic restart in deadlock case if enabled.
  1952. -# Check interval is in seconds.
  1953. -# Default: True
  1954. -DeadLockDetector = True
  1955. -
  1956. -# Default: 20
  1957. -DeadLockCheckInterval = 20
  1958. -
  1959. -# Default: False
  1960. -RestartOnDeadlock = False
  1961. -
  1962. -
  1963. -# ---------------------------------------------------------------------------
  1964. -# Client packet queue tuning
  1965. -# ---------------------------------------------------------------------------
  1966. -
  1967. -# Queue size, do not set it too low !
  1968. -# 0 - use value MaxReadPerPass + 2 (from mmo.properties)
  1969. -# Default: 0
  1970. -ClientPacketQueueSize = 0
  1971. -
  1972. -# Maximum number of packets in burst.
  1973. -# Execution will be aborted and thread released if more packets executed in raw.
  1974. -# 0 - use value MaxReadPerPass + 1 (from mmo.properties)
  1975. -# Default: 0
  1976. -ClientPacketQueueMaxBurstSize = 0
  1977. -
  1978. -# Maximum number of packets per second.
  1979. -# Flood detector will be triggered if more packets received.
  1980. -# After triggering all incoming packets will be dropped until flooding stopped.
  1981. -# Default: 80
  1982. -ClientPacketQueueMaxPacketsPerSecond = 80
  1983. -
  1984. -# Average number of packets per second calculated during this interval.
  1985. -# Using larger value decrease number of false kicks, but slower reaction to flood.
  1986. -# Avoid using too low or too high values, recommended between 3 and 10.
  1987. -# Default: 5
  1988. -ClientPacketQueueMeasureInterval = 5
  1989. -
  1990. -# Maximum average number of packets per second during measure interval.
  1991. -# Flood detector will be triggered if more packets received.
  1992. -# After triggering all incoming packets will be dropped until flooding stopped.
  1993. -# Default: 40
  1994. -ClientPacketQueueMaxAveragePacketsPerSecond = 40
  1995. -
  1996. -# Maximum number of flood triggers per minute.
  1997. -# Client will be kicked if more floods detected.
  1998. -# Default: 2
  1999. -ClientPacketQueueMaxFloodsPerMin = 2
  2000. -
  2001. -# Maximum number of queue overflows per minute.
  2002. -# After overflow all incoming packets from client are dropped until queue is flushed.
  2003. -# Client will be kicked if more queue overflows detected.
  2004. -# Default: 1
  2005. -ClientPacketQueueMaxOverflowsPerMin = 1
  2006. -
  2007. -# Maximum number of buffer underflows per minute.
  2008. -# Client will be kicked if more underflow exceptions detected.
  2009. -# Default: 1
  2010. -ClientPacketQueueMaxUnderflowsPerMin = 1
  2011. -
  2012. -# Maximum number of unknown packets per minute.
  2013. -# Client will be kicked if more unknown packets received.
  2014. -# Default: 5
  2015. -ClientPacketQueueMaxUnknownPerMin = 5
  2016. -
  2017. -
  2018. -# ---------------------------------------------------------------------------
  2019. -# Optimization
  2020. -# ---------------------------------------------------------------------------
  2021. -
  2022. -# Items on ground management.
  2023. -# Allow players to drop items on the ground.
  2024. -# Default: True
  2025. -AllowDiscardItem = True
  2026. -
  2027. -# Delete dropped reward items from world after a specified amount of seconds. Disabled = 0.
  2028. -# Default: 600
  2029. -AutoDestroyDroppedItemAfter = 600
  2030. -
  2031. -# Time in seconds after which dropped herb will be auto-destroyed
  2032. -# Default: 60
  2033. -AutoDestroyHerbTime = 60
  2034. -
  2035. -# List of item id that will not be destroyed (separated by "," like 57,5575,6673).
  2036. -# Notes:
  2037. -#  Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
  2038. -#  Items on this list will be protected regardless of the following options.
  2039. -# Default: 0
  2040. -ListOfProtectedItems = 0
  2041. -
  2042. -# Cleans up the server database on startup.
  2043. -# The bigger the database is, the longer it will take to clean up the database(the slower the server will start).
  2044. -# Sometimes this ends up with 0 elements cleaned up, and a lot of wasted time on the server startup.
  2045. -# If you want a faster server startup, set this to 'false', but its recommended to clean up the database from time to time.
  2046. -# Default: True
  2047. -DatabaseCleanUp = True
  2048. -
  2049. -# The time before a database connection closes (in milliseconds)
  2050. -# If a query takes longer to execute than the time defined here, the server will throw "Unclosed Connection!" error.
  2051. -# If you get often this error message, try increasing this.
  2052. -# Default: 60000ms
  2053. -ConnectionCloseTime = 60000
  2054. -
  2055. -# This is the interval (in minutes), that the gameserver will update a players information such as location.
  2056. -# 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).
  2057. -# 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).
  2058. -# A value of 0 disables periodic saving.
  2059. -# Independent of this setting the character is always saved after leaving the world.
  2060. -# Default: 15
  2061. -CharacterDataStoreInterval = 15
  2062. -
  2063. -# This enables the server to only update items when saving the character.
  2064. -# Enabling this greatly reduces DB usage and improves performance.
  2065. -# WARNING: This option causes item loss during crashes.
  2066. -# Default: False
  2067. -LazyItemsUpdate = False
  2068. -
  2069. -# 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.
  2070. -# Default: False
  2071. -UpdateItemsOnCharStore = False
  2072. -
  2073. -# Also delete from world misc. items dropped by players (all except equip-able items).
  2074. -# Notes:
  2075. -#  Works only if AutoDestroyDroppedItemAfter is greater than 0.
  2076. -# Default: False
  2077. -DestroyPlayerDroppedItem = False
  2078. -
  2079. -# Destroy dropped equippable items (armor, weapon, jewelry).
  2080. -# Notes:
  2081. -#  Works only if DestroyPlayerDroppedItem = True
  2082. -# Default: False
  2083. -DestroyEquipableItem = False
  2084. -
  2085. -# Save dropped items into the database for restoring after restart.
  2086. -# Default: False
  2087. -SaveDroppedItem = False
  2088. -
  2089. -# Enable/Disable the emptying of the stored dropped items table after items are loaded into memory (safety setting).
  2090. -# 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.
  2091. -# Default: False
  2092. -EmptyDroppedItemTableAfterLoad = False
  2093. -
  2094. -# Time interval in minutes to save in DB items on ground. Disabled = 0.
  2095. -# Notes:
  2096. -#  If SaveDroppedItemInterval is disabled, items will be saved into the database only at server shutdown.
  2097. -# Default: 60
  2098. -SaveDroppedItemInterval = 60
  2099. -
  2100. -# Delete all saved items from the database on next restart?
  2101. -# Notes:
  2102. -#  Works only if SaveDroppedItem = False.
  2103. -# Default: False
  2104. -ClearDroppedItemTable = False
  2105. -
  2106. -# Delete invalid quest from players.
  2107. -# Default: False
  2108. -AutoDeleteInvalidQuestData = False
  2109. -
  2110. -# If True, allows a special handling for drops when chance raises over 100% (eg. when applying chance rates).
  2111. -# True value causes better drop handling at higher rates.  
  2112. -# Default: True
  2113. -PreciseDropCalculation = True
  2114. -
  2115. -# Allow creating multiple non-stackable items at one time?
  2116. -# Default: True
  2117. -MultipleItemDrop = True
  2118. -
  2119. -# Forces full item inventory packet to be sent for any item change.
  2120. -# Notes:
  2121. -#  This can increase network traffic
  2122. -# Default: False
  2123. -ForceInventoryUpdate = False
  2124. -
  2125. -# True = Load html's into cache only on first time html is requested.
  2126. -# False = Load all html's into cache on server startup.
  2127. -# Default: True
  2128. -LazyCache = True
  2129. -
  2130. -# Cache all character names in to memory on server startup
  2131. -# False - names are loaded from Db when they are requested
  2132. -# True - decrease Db usage , increase memory consumption
  2133. -# Default: True
  2134. -CacheCharNames = True
  2135. -
  2136. -# Minimum and maximum variables in seconds for npc animation delay.
  2137. -# You must keep MinNPCAnimation < = MaxNPCAnimation.
  2138. -# Default: 10
  2139. -MinNPCAnimation = 10
  2140. -
  2141. -# Default: 20
  2142. -MaxNPCAnimation = 20
  2143. -
  2144. -# Default: 5
  2145. -MinMonsterAnimation = 5
  2146. -
  2147. -# Default: 20
  2148. -MaxMonsterAnimation = 20
  2149. -
  2150. -# 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.
  2151. -# Default: False
  2152. -MoveBasedKnownlist = False
  2153. -
  2154. -# Interval (in milliseconds) in which the knownlist does full updates.
  2155. -# For move based updates its used for intermediate updates.
  2156. -# WARNING!
  2157. -#  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.
  2158. -# Default: 1250
  2159. -KnownListUpdateInterval = 1250
  2160. -
  2161. -# 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.
  2162. -# 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.
  2163. -# 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.
  2164. -# The always on option allows to ignore all this and let all grids be active at all times (not suggested).
  2165. -# Default: False
  2166. -GridsAlwaysOn = False
  2167. -
  2168. -# Default: 1
  2169. -GridNeighborTurnOnTime = 1
  2170. -
  2171. -# Default: 90
  2172. -GridNeighborTurnOffTime = 90
  2173. -
  2174. -# ---------------------------------------------------------------------------
  2175. -# Falling Damage
  2176. -# ---------------------------------------------------------------------------
  2177. -
  2178. -# Allow characters to receive damage from falling.
  2179. -# CoordSynchronize = 2 is recommended.
  2180. -# Default: True
  2181. -EnableFallingDamage = True
  2182. -
  2183. -
  2184. -# ---------------------------------------------------------------------------
  2185. -# Features
  2186. -# ---------------------------------------------------------------------------
  2187. -
  2188. -# Peace Zone Modes:
  2189. -# 0 = Peace All the Time
  2190. -# 1 = PVP During Siege for siege participants
  2191. -# 2 = PVP All the Time
  2192. -# Default: 0
  2193. -PeaceZoneMode = 0
  2194. -
  2195. -# Global Chat.
  2196. -# Available Options: ON, OFF, GM, GLOBAL
  2197. -# Default: ON
  2198. -GlobalChat = ON
  2199. -
  2200. -# Trade Chat.
  2201. -# Available Options: ON, OFF, GM, GLOBAL
  2202. -# Default: ON
  2203. -TradeChat = ON
  2204. -
  2205. -# If you are experiencing problems with Warehouse transactions, feel free to disable them here.
  2206. -# Default: True
  2207. -AllowWarehouse = True
  2208. -
  2209. -# Enable Warehouse Cache. If warehouse is not used will server clear memory used by this warehouse.
  2210. -# Default: False
  2211. -WarehouseCache = False
  2212. -
  2213. -# How long warehouse should be stored in memory.
  2214. -# Default: 15
  2215. -WarehouseCacheTime = 15
  2216. -
  2217. -# Default: True
  2218. -AllowRefund = True
  2219. -
  2220. -# Default: True
  2221. -AllowMail = True
  2222. -
  2223. -# Default: True
  2224. -AllowAttachments = True
  2225. -
  2226. -# If True player can try on weapon and armor in shop.
  2227. -# Default: True
  2228. -AllowWear = True
  2229. -
  2230. -# Default: 5
  2231. -WearDelay = 5
  2232. -
  2233. -#Adena cost to try on an item.
  2234. -# Default: 10
  2235. -WearPrice = 10
  2236. -
  2237. -
  2238. -# ---------------------------------------------------------------------------
  2239. -# Instances
  2240. -# ---------------------------------------------------------------------------
  2241. -# Restores the player to their previous instance (ie. an instanced area/dungeon) on EnterWorld.
  2242. -# Default: False
  2243. -RestorePlayerInstance = False
  2244. -
  2245. -# Set whether summon skills can be used to summon players inside an instance.
  2246. -# When enabled individual instances can have summoning disabled in instance xml's.
  2247. -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  2248. -# Default: False
  2249. -AllowSummonInInstance = False
  2250. -
  2251. -# When a player dies, is removed from instance after a fixed period of time.
  2252. -# Time in seconds.
  2253. -# Default: 60
  2254. -EjectDeadPlayerTime = 60
  2255. -
  2256. -# When is instance finished, is set time to destruction currency instance.
  2257. -# Time in seconds.
  2258. -# Default: 300
  2259. -DefaultFinishTime = 300
  2260. -
  2261. -
  2262. -# ---------------------------------------------------------------------------
  2263. -# Misc Settings
  2264. -# ---------------------------------------------------------------------------
  2265. -
  2266. -# Default: True
  2267. -AllowRace = True
  2268. -
  2269. -# Default: True
  2270. -AllowWater = True
  2271. -
  2272. -# Enable pets for rent (wyvern & strider) from pet managers.
  2273. -# Default: False
  2274. -AllowRentPet = False
  2275. -
  2276. -# Default: True
  2277. -AllowFishing = True
  2278. -
  2279. -# Default: True
  2280. -AllowBoat = True
  2281. -
  2282. -# Boat broadcast radius.
  2283. -# If players getting annoyed by boat shouts then radius can be decreased.
  2284. -# Default: 20000
  2285. -BoatBroadcastRadius = 20000
  2286. -
  2287. -# Default: True
  2288. -AllowCursedWeapons = True
  2289. -
  2290. -#Allow Pet manager's pets to walk around.
  2291. -# Default: True
  2292. -AllowPetWalkers = True
  2293. -
  2294. -# Show "data/html/servnews.htm" when a character enters world.
  2295. -# Default: False
  2296. -ShowServerNews = False
  2297. -
  2298. -# Enable the Community Board.
  2299. -# Default: True
  2300. -EnableCommunityBoard = True
  2301. -
  2302. -# Default Community Board page.
  2303. -# Default: _bbshome
  2304. -BBSDefault = _bbshome
  2305. -
  2306. -# Enable chat filter
  2307. -# Default = False
  2308. -UseChatFilter = False
  2309. -
  2310. -# Replace filter words with following chars
  2311. -ChatFilterChars = ^_^
  2312. -
  2313. -# Banchat for channels, split ";"
  2314. -# 0 = ALL (white)
  2315. -# 1 = SHOUT (!)
  2316. -# 2 = TELL (")
  2317. -# 3 = PARTY (#)
  2318. -# 4 = CLAN (@)
  2319. -# 5 = GM (//gmchat)
  2320. -# 6 = PETITION_PLAYER (*)
  2321. -# 7 = PETITION_GM (*)
  2322. -# 8 = TRADE (+)
  2323. -# 9 = ALLIANCE ($)
  2324. -# 10 = ANNOUNCEMENT
  2325. -# 11 = BOAT
  2326. -# 12 = L2FRIEND
  2327. -# 13 = MSNCHAT
  2328. -# 14 = PARTYMATCH_ROOM
  2329. -# 15 = PARTYROOM_COMMANDER (Yellow)
  2330. -# 16 = PARTYROOM_ALL (Red)
  2331. -# 17 = HERO_VOICE (&)
  2332. -# 18 = CRITICAL_ANNOUNCE
  2333. -# 19 = SCREEN_ANNOUNCE
  2334. -# 20 = BATTLEFIELD
  2335. -# 21 = MPCC_ROOM
  2336. -# Default: 0;1;8;17
  2337. -BanChatChannels = 0;1;8;17
  2338. -
  2339. -# ---------------------------------------------------------------------------
  2340. -# Manor
  2341. -# ---------------------------------------------------------------------------
  2342. -
  2343. -# Default: True
  2344. -AllowManor = True
  2345. -
  2346. -# Manor refresh time in military hours.
  2347. -# Default: 20 (8pm)
  2348. -AltManorRefreshTime = 20
  2349. -
  2350. -# Manor refresh time (minutes).
  2351. -# Default: 00 (start of the hour)
  2352. -AltManorRefreshMin = 00
  2353. -
  2354. -# Manor period approve time in military hours.
  2355. -# Default: 4 (4am)
  2356. -AltManorApproveTime = 4
  2357. -
  2358. -# Manor period approve time (minutes).
  2359. -# Default: 30
  2360. -AltManorApproveMin = 30
  2361. -
  2362. -# Manor maintenance time (minutes).
  2363. -# Default: 6
  2364. -AltManorMaintenanceMin = 6
  2365. -
  2366. -# Manor Save Type.
  2367. -# True = Save data into the database after every action
  2368. -# Default: False
  2369. -AltManorSaveAllActions = False
  2370. -
  2371. -# Manor Save Period (used only if AltManorSaveAllActions = False)
  2372. -# Default: 2 (hour)
  2373. -AltManorSavePeriodRate = 2
  2374. -
  2375. -
  2376. -# ---------------------------------------------------------------------------
  2377. -# Lottery
  2378. -# ---------------------------------------------------------------------------
  2379. -
  2380. -# Default: True
  2381. -AllowLottery = True
  2382. -
  2383. -# Initial Lottery prize.
  2384. -# Default: 50000
  2385. -AltLotteryPrize = 50000
  2386. -
  2387. -# Lottery Ticket Price
  2388. -# Default: 2000
  2389. -AltLotteryTicketPrice = 2000
  2390. -
  2391. -# What part of jackpot amount should receive characters who pick 5 wining numbers
  2392. -# Default: 0.6
  2393. -AltLottery5NumberRate = 0.6
  2394. -
  2395. -# What part of jackpot amount should receive characters who pick 4 wining numbers
  2396. -# Default: 0.2
  2397. -AltLottery4NumberRate = 0.2
  2398. -
  2399. -# What part of jackpot amount should receive characters who pick 3 wining numbers
  2400. -# Default: 0.2
  2401. -AltLottery3NumberRate = 0.2
  2402. -
  2403. -# How much Adena receive characters who pick two or less of the winning number
  2404. -# Default: 200
  2405. -AltLottery2and1NumberPrize = 200
  2406. -
  2407. -
  2408. -# ---------------------------------------------------------------------------
  2409. -# Item Auction
  2410. -# ---------------------------------------------------------------------------
  2411. -
  2412. -#
  2413. -AltItemAuctionEnabled = True
  2414. -
  2415. -# Number of days before auction cleared from database with all bids.
  2416. -# Default: 14
  2417. -AltItemAuctionExpiredAfter = 14
  2418. -
  2419. -# Auction extends to specified amount of seconds if one or more new bids added.
  2420. -# By default auction extends only two times, by 5 and 3 minutes, this custom value used after it.
  2421. -# Values higher than 60s is not recommended.
  2422. -# Default: 0
  2423. -AltItemAuctionTimeExtendsOnBid = 0
  2424. -
  2425. -
  2426. -# ---------------------------------------------------------------------------
  2427. -# Dimension Rift
  2428. -# ---------------------------------------------------------------------------
  2429. -
  2430. -# Minimal party size to enter rift. Min = 2, Max = 9.
  2431. -# If while inside the rift, the party becomes smaller, all members will be teleported back.
  2432. -# Default: 2
  2433. -RiftMinPartySize = 2
  2434. -
  2435. -# Number of maximum jumps between rooms allowed, after this time party will be teleported back
  2436. -# Default: 4
  2437. -MaxRiftJumps = 4
  2438. -
  2439. -# Time in ms the party has to wait until the mobs spawn when entering a room. C4 retail: 10s
  2440. -# Default: 10000
  2441. -RiftSpawnDelay = 10000
  2442. -
  2443. -# Time between automatic jumps in seconds
  2444. -# Default: 480
  2445. -AutoJumpsDelayMin = 480
  2446. -
  2447. -# Default: 600
  2448. -AutoJumpsDelayMax = 600
  2449. -
  2450. -# Time Multiplier for stay in the boss room
  2451. -# Default: 1.5
  2452. -BossRoomTimeMultiply = 1.5
  2453. -
  2454. -# Cost in dimension fragments to enter the rift, each party member must own this amount
  2455. -# Default: 18
  2456. -RecruitCost = 18
  2457. -
  2458. -# Default: 21
  2459. -SoldierCost = 21
  2460. -
  2461. -# Default: 24
  2462. -OfficerCost = 24
  2463. -
  2464. -# Default: 27
  2465. -CaptainCost = 27
  2466. -
  2467. -# Default: 30
  2468. -CommanderCost = 30
  2469. -
  2470. -# Default: 33
  2471. -HeroCost = 33
  2472. -
  2473. -
  2474. -# ---------------------------------------------------------------------------
  2475. -# Four Sepulchers
  2476. -# ---------------------------------------------------------------------------
  2477. -
  2478. -# Default: 50
  2479. -TimeOfAttack = 50
  2480. -
  2481. -# Default: 5
  2482. -TimeOfCoolDown = 5
  2483. -
  2484. -# Default: 3
  2485. -TimeOfEntry = 3
  2486. -
  2487. -# Default: 2
  2488. -TimeOfWarmUp = 2
  2489. -
  2490. -# Default: 4
  2491. -NumberOfNecessaryPartyMembers = 4
  2492. -
  2493. -
  2494. -# ---------------------------------------------------------------------------
  2495. -# Punishment
  2496. -# ---------------------------------------------------------------------------
  2497. -
  2498. -# Player punishment for illegal actions:
  2499. -# 1 - broadcast warning to gms only
  2500. -# 2 - kick player(default)
  2501. -# 3 - kick & ban player
  2502. -# 4 - jail player (define minutes of jail with param: 0 = infinite)
  2503. -# Default: 2
  2504. -DefaultPunish = 2
  2505. -
  2506. -# This setting typically specifies the duration of the above punishment.
  2507. -# Default: 0
  2508. -DefaultPunishParam = 0
  2509. -
  2510. -# Apply default punish if player buy items for zero Adena.
  2511. -# Default: True
  2512. -OnlyGMItemsFree = True
  2513. -
  2514. -# Jail is a PvP zone.
  2515. -# Default: False
  2516. -JailIsPvp = False
  2517. -
  2518. -# Disable all chat in jail (except normal one)
  2519. -# Default: True
  2520. -JailDisableChat = True
  2521. -
  2522. -# Disable all transaction in jail
  2523. -# Trade/Store/Drop
  2524. -# Default: False
  2525. -JailDisableTransaction = False
  2526. -
  2527. -# Enchant Skill Details Settings
  2528. -# Default: 1,5
  2529. -NormalEnchantCostMultipiler = 1
  2530. -SafeEnchantCostMultipiler = 5
  2531. -
  2532. -# ---------------------------------------------------------------------------
  2533. -# Custom Components
  2534. -# ---------------------------------------------------------------------------
  2535. -
  2536. -# Default: False
  2537. -CustomSpawnlistTable = False
  2538. -
  2539. -# Option to save GM spawn only in the custom table.
  2540. -# Default: False
  2541. -SaveGmSpawnOnCustom = False
  2542. -
  2543. -# Default: False
  2544. -CustomNpcData = False
  2545. -
  2546. -# Default: False
  2547. -CustomTeleportTable = False
  2548. -
  2549. -# Default: False
  2550. -CustomNpcBufferTables = False
  2551. -
  2552. -# Default: False
  2553. -CustomSkillsLoad = False
  2554. -
  2555. -# Default: False
  2556. -CustomItemsLoad = False
  2557. -
  2558. -# Default: False
  2559. -CustomMultisellLoad = False
  2560. -
  2561. -# Default: False
  2562. -CustomBuyListLoad = False
  2563. -
  2564. -# ---------------------------------------------------------------------------
  2565. -# Birthday Event Settings
  2566. -# ---------------------------------------------------------------------------
  2567. -
  2568. -# Gift sent with Mail System
  2569. -# Default: 22187
  2570. -AltBirthdayGift = 22187
  2571. -
  2572. -# Mail Subject
  2573. -AltBirthdayMailSubject = Happy Birthday!
  2574. -
  2575. -# Mail Content
  2576. -# $c1: Player name
  2577. -# $s1: Age
  2578. -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
  2579. -
  2580. -# ---------------------------------------------------------------------------
  2581. -# Handy's Block Checker Event Settings
  2582. -# ---------------------------------------------------------------------------
  2583. -
  2584. -# Enable the Handy's Block Checker event
  2585. -# Default: True
  2586. -EnableBlockCheckerEvent = True
  2587. -
  2588. -# Minimum number of members on each team before
  2589. -# be able to start the event
  2590. -# Min: 1
  2591. -# Max: 6
  2592. -# Retail: 2
  2593. -BlockCheckerMinTeamMembers = 2
  2594. -
  2595. -# Fair play
  2596. -# Players can choose what team to play. However, by
  2597. -# enabling this property to true, the teams will be
  2598. -# balanced in the teleport to the arena
  2599. -HBCEFairPlay = True
  2600. -
  2601. -# ---------------------------------------------------------------------------
  2602. -# Hellbound Settings
  2603. -# ---------------------------------------------------------------------------
  2604. -# If true, players can enter the Hellbound island without any quests
  2605. -# Default: False
  2606. -HellboundWithoutQuest = False
  2607. -
  2608. -# ---------------------------------------------------------------------------
  2609. -# Bot Report Button settings
  2610. -# ---------------------------------------------------------------------------
  2611. -
  2612. -# Enable the bot report button on the desired game servers.
  2613. -# Default: True
  2614. -EnableBotReportButton = True
  2615. -
  2616. -# Report points restart hour. Format: HH:MM ( PM mode, 24 hours clock)
  2617. -# Default: 00:00
  2618. -BotReportPointsResetHour = 00:00
  2619. -
  2620. -# Delay between reports from the same player (in minutes)
  2621. -# Default: 30 minutes
  2622. -BotReportDelay = 30
  2623. -
  2624. -# Allow players from the same clan to report the same bot
  2625. -# Default: False
  2626. -AllowReportsFromSameClanMembers = False
  2627. -
  2628. -# ---------------------------------------------------------------------------
  2629. -# Developer Settings
  2630. -# ---------------------------------------------------------------------------
  2631. -# Do not touch these if you do not know what you are doing.
  2632. -# These settings are for debugging servers ONLY. They are not meant for LIVE servers.
  2633. -
  2634. -# Default: False
  2635. -Debug = False
  2636. -
  2637. -# Instances debugging
  2638. -# Default: False
  2639. -InstanceDebug = False
  2640. -
  2641. -# Html action cache debugging
  2642. -# Default: False
  2643. -HtmlActionCacheDebug = False
  2644. -
  2645. -# Packet handler debug output
  2646. -# Default: False
  2647. -PacketHandlerDebug = False
  2648. -
  2649. -# Default: False
  2650. -Developer = False
  2651. -
  2652. -# Don't load Handlers
  2653. -# Default: False
  2654. -AltDevNoHandlers = False
  2655. -
  2656. -# Don't load quests.
  2657. -# Default: False
  2658. -AltDevNoQuests = False
  2659. -
  2660. -# Don't load spawntable.
  2661. -# Default: False
  2662. -AltDevNoSpawns = False
  2663. -
  2664. -# Show quests while loading them.
  2665. -# Default: False
  2666. -AltDevShowQuestsLoadInLogs = False
  2667. -
  2668. -# Show scripts while loading them.
  2669. -# Default: False
  2670. -AltDevShowScriptsLoadInLogs = False
  2671. diff --git a/dist/game/config/GeoData.properties b/dist/game/config/GeoData.properties
  2672. deleted file mode 100644
  2673. index 3511380..0000000
  2674. --- a/dist/game/config/GeoData.properties
  2675. +++ /dev/null
  2676. @@ -1,75 +0,0 @@
  2677. -# ---------------------------------------------------------------------------
  2678. -# GeoData
  2679. -# ---------------------------------------------------------------------------
  2680. -
  2681. -# Pathfinding options:
  2682. -# 0 = Disabled
  2683. -# 1 = Enabled using path node files
  2684. -# 2 = Enabled using geodata cells at runtime
  2685. -# Default: 0
  2686. -PathFinding = 0
  2687. -
  2688. -# Pathnode directory
  2689. -# Default: data/pathnode
  2690. -PathnodeDirectory = data/pathnode
  2691. -
  2692. -# Pathfinding array buffers configuration
  2693. -PathFindBuffers = 100x6;128x6;192x6;256x4;320x4;384x4;500x2
  2694. -
  2695. -# Weight for nodes without obstacles far from walls
  2696. -LowWeight = 0.5
  2697. -
  2698. -# Weight for nodes near walls
  2699. -MediumWeight = 2
  2700. -
  2701. -# Weight for nodes with obstacles
  2702. -HighWeight = 3
  2703. -
  2704. -# Angle paths will be more "smart", but in cost of higher CPU utilization
  2705. -AdvancedDiagonalStrategy = True
  2706. -
  2707. -# Weight for diagonal movement. Used only with AdvancedDiagonalStrategy = True
  2708. -# Default: LowWeight * sqrt(2)
  2709. -DiagonalWeight = 0.707
  2710. -
  2711. -# Maximum number of LOS postfilter passes, 0 will disable postfilter.
  2712. -# Default: 3
  2713. -MaxPostfilterPasses = 3
  2714. -
  2715. -# Path debug function.
  2716. -# Nodes known to pathfinder will be displayed as adena, constructed path as antidots.
  2717. -# Number of the items show node cost * 10
  2718. -# Potions display path after first stage filter
  2719. -# Red potions - actual waypoints. Green potions - nodes removed by LOS postfilter
  2720. -# This function FOR DEBUG PURPOSES ONLY, never use it on the live server !
  2721. -DebugPath = False
  2722. -
  2723. -# True = Loads GeoData buffer's content into physical memory.
  2724. -# False = Does not necessarily imply that the GeoData buffer's content is not resident in physical memory.
  2725. -# Default: True
  2726. -ForceGeoData = True
  2727. -
  2728. -# This setting controls Client <--> Server Player coordinates synchronization:
  2729. -# -1 - Will synchronize only Z from Client --> Server. Default when no geodata.
  2730. -# 1 - Synchronization Client --> Server only. Using this option (without geodata) makes it more difficult for players to bypass obstacles.
  2731. -# 2 - Intended for geodata (at least with cell-level pathfinding, otherwise can you try -1).
  2732. -# Server sends validation packet if client goes too far from server calculated coordinates.
  2733. -# Default: -1
  2734. -CoordSynchronize = -1
  2735. -
  2736. -# Geodata files folder
  2737. -GeoDataPath = ./data/geodata
  2738. -
  2739. -# True: Try to load regions not specified below(won't disturb server startup when file does not exist)
  2740. -# False: Don't load any regions other than the ones specified with True below
  2741. -TryLoadUnspecifiedRegions = True
  2742. -
  2743. -# List of regions to be required to load
  2744. -# eg.:
  2745. -# Both regions required
  2746. -# 22_22=True
  2747. -# 19_20=true
  2748. -# Exclude region from loading
  2749. -# 25_26=false
  2750. -# True: Region is required for the server to startup
  2751. -# False: Region is not considered to be loaded
  2752. diff --git a/dist/game/config/GraciaSeeds.properties b/dist/game/config/GraciaSeeds.properties
  2753. deleted file mode 100644
  2754. index 1542f29..0000000
  2755. --- a/dist/game/config/GraciaSeeds.properties
  2756. +++ /dev/null
  2757. @@ -1,18 +0,0 @@
  2758. -# ---------------------------------------------------------------------------
  2759. -# Gracia Seeds Settings
  2760. -# ---------------------------------------------------------------------------
  2761. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  2762. -# Warning:
  2763. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  2764. -
  2765. -# ---------------------------------------------------------------------------
  2766. -# Seed of Destruction Settings
  2767. -# ---------------------------------------------------------------------------
  2768. -
  2769. -# Count of Kills which needed for Stage 2
  2770. -# Default: 10
  2771. -TiatKillCountForNextState = 10
  2772. -
  2773. -# Length of Stage 2 before the Defense state starts (in minutes).
  2774. -# Default: 720min (12h)
  2775. -Stage2Length = 720
  2776. diff --git a/dist/game/config/GrandBoss.properties b/dist/game/config/GrandBoss.properties
  2777. deleted file mode 100644
  2778. index cf21798..0000000
  2779. --- a/dist/game/config/GrandBoss.properties
  2780. +++ /dev/null
  2781. @@ -1,78 +0,0 @@
  2782. -# ---------------------------------------------------------------------------
  2783. -# Antharas
  2784. -# ---------------------------------------------------------------------------
  2785. -
  2786. -# Delay of appearance time of Antharas. Value is minute. Range 3-60
  2787. -AntharasWaitTime = 20
  2788. -
  2789. -# Interval time of Antharas. Value is hour. Range 1-480
  2790. -IntervalOfAntharasSpawn = 264
  2791. -
  2792. -# Random interval. Range 1-192
  2793. -RandomOfAntharasSpawn = 72
  2794. -
  2795. -# ---------------------------------------------------------------------------
  2796. -# Valakas
  2797. -# ---------------------------------------------------------------------------
  2798. -
  2799. -# Delay of appearance time of Valakas. Value is minute. Range 3-60
  2800. -ValakasWaitTime = 30
  2801. -
  2802. -# Interval time of Valakas. Value is hour. Range 1-480
  2803. -IntervalOfValakasSpawn = 264
  2804. -
  2805. -# Random interval. Range 1-192
  2806. -RandomOfValakasSpawn = 72
  2807. -
  2808. -# ---------------------------------------------------------------------------
  2809. -# Baium
  2810. -# ---------------------------------------------------------------------------
  2811. -
  2812. -# Interval time of Baium. Value is hour. Range 1-480
  2813. -IntervalOfBaiumSpawn = 168
  2814. -
  2815. -# Random interval. Range 1-192
  2816. -RandomOfBaiumSpawn = 48
  2817. -
  2818. -# ---------------------------------------------------------------------------
  2819. -# Core
  2820. -# ---------------------------------------------------------------------------
  2821. -
  2822. -# Interval time of Core. Value is hour. Range 1-480
  2823. -IntervalOfCoreSpawn = 60
  2824. -
  2825. -# Random interval. Range 1-192
  2826. -RandomOfCoreSpawn = 24
  2827. -
  2828. -# ---------------------------------------------------------------------------
  2829. -# Orfen
  2830. -# ---------------------------------------------------------------------------
  2831. -
  2832. -# Interval time of Orfen. Value is hour. Range 1-480
  2833. -IntervalOfOrfenSpawn = 48
  2834. -
  2835. -# Random interval. Range 1-192
  2836. -RandomOfOrfenSpawn = 20
  2837. -
  2838. -# ---------------------------------------------------------------------------
  2839. -# Queen Ant
  2840. -# ---------------------------------------------------------------------------
  2841. -
  2842. -# Interval time of QueenAnt. Value is hour. Range 1-480
  2843. -IntervalOfQueenAntSpawn = 36
  2844. -
  2845. -# Random interval. Range 1-192
  2846. -RandomOfQueenAntSpawn = 17
  2847. -
  2848. -# ---------------------------------------------------------------------------
  2849. -# Beleth
  2850. -# ---------------------------------------------------------------------------
  2851. -
  2852. -# Interval time of Beleth. Value is hour. Range 1-480. Retail: 192
  2853. -IntervalOfBelethSpawn = 192
  2854. -
  2855. -# Random interval. Range 1-192. Retail: 148
  2856. -RandomOfBelethSpawn = 148
  2857. -
  2858. -#Minimal count of players for enter to Beleth. Retail: 36
  2859. -BelethMinPlayers = 36
  2860. \ No newline at end of file
  2861. diff --git a/dist/game/config/IdFactory.properties b/dist/game/config/IdFactory.properties
  2862. deleted file mode 100644
  2863. index b3d0922..0000000
  2864. --- a/dist/game/config/IdFactory.properties
  2865. +++ /dev/null
  2866. @@ -1,21 +0,0 @@
  2867. -# ---------------------------------------------------------------------------
  2868. -# ID Factory Settings
  2869. -# ---------------------------------------------------------------------------
  2870. -# Warning:
  2871. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  2872. -
  2873. -# ---------------------------------------------------------------------------
  2874. -# Standard Settings
  2875. -# ---------------------------------------------------------------------------
  2876. -
  2877. -# Tell server which IDFactory Class to use:
  2878. -# Compaction = Original method
  2879. -# BitSet = One non compaction method
  2880. -# Stack = Another non compaction method
  2881. -# Default: BitSet
  2882. -IDFactory = BitSet
  2883. -
  2884. -# Check for bad ids in the database on server boot up.
  2885. -# Much faster load time without it, but may cause problems.
  2886. -# Default: True
  2887. -BadIdChecking = True
  2888. \ No newline at end of file
  2889. diff --git a/dist/game/config/L2JMods.properties b/dist/game/config/L2JMods.properties
  2890. deleted file mode 100644
  2891. index 439eed9..0000000
  2892. --- a/dist/game/config/L2JMods.properties
  2893. +++ /dev/null
  2894. @@ -1,510 +0,0 @@
  2895. -# ---------------------------------------------------------------------------
  2896. -# L2JMODS - non-retail-like systems that have been integrated into the L2J project.
  2897. -# Be warned that there may be no support for these mods beyond the original author's assistance.
  2898. -
  2899. -# ---------------------------------------------------------------------------
  2900. -# Champion mobs - Turn random mobs into Champions
  2901. -# ---------------------------------------------------------------------------
  2902. -
  2903. -# Enable/Disable Champion Mob System.
  2904. -ChampionEnable = False
  2905. -
  2906. -# Force Champion mobs to be passive?
  2907. -# To leave champion mobs to default/Aggressive, set to False.
  2908. -# To set all champion mobs to Passive, set True.
  2909. -ChampionPassive = False
  2910. -
  2911. -# % chance for a mob to became champion (-1 to disable).
  2912. -ChampionFrequency = -1
  2913. -
  2914. -# Title of all Champion Mobs.
  2915. -ChampionTitle = Champion
  2916. -
  2917. -# Min and max levels allowed for a mob to be a Champion mob.
  2918. -ChampionMinLevel = 20
  2919. -ChampionMaxLevel = 78
  2920. -
  2921. -# Hp multiplier for Champion mobs.
  2922. -ChampionHp = 8
  2923. -
  2924. -# Hp Regen Multiplier for Champion mobs.
  2925. -ChampionHpRegen = 1.0
  2926. -
  2927. -# Exp/Sp rewards multiplier for Champion mobs.
  2928. -ChampionRewardsExpSp = 8.0
  2929. -
  2930. -# Standard rewards chance multiplier for Champion mobs.
  2931. -ChampionRewardsChance = 8.0
  2932. -
  2933. -# Standard rewards amount multiplier for Champion mobs.
  2934. -ChampionRewardsAmount = 1.0
  2935. -
  2936. -# Adena & Seal Stone rewards chance multiplier for Champion mobs.
  2937. -ChampionAdenasRewardsChance = 1.0
  2938. -
  2939. -# Adena & Seal Stone rewards amount multiplier for Champion mobs.
  2940. -ChampionAdenasRewardsAmount = 1.0
  2941. -
  2942. -# P. Attack and M. Attack bonus for Champion mobs.
  2943. -ChampionAtk = 1.0
  2944. -
  2945. -# Physical/Magical Attack Speed bonus for Champion mobs.
  2946. -ChampionSpdAtk = 1.0
  2947. -
  2948. -# Specified reward item ID
  2949. -ChampionRewardItemID = 6393
  2950. -
  2951. -# The amount of the specified reward a player will receive if they are awarded the item.
  2952. -ChampionRewardItemQty = 1
  2953. -
  2954. -# % Chance to obtain a specified reward item from a higher level Champion mob.
  2955. -# Default: 0
  2956. -ChampionRewardLowerLvlItemChance = 0
  2957. -
  2958. -# % Chance to obtain a specified reward item from a lower level Champion mob.
  2959. -# Default: 0
  2960. -ChampionRewardHigherLvlItemChance = 0
  2961. -
  2962. -# Do you want to enable the vitality calculation when killing champion mobs?
  2963. -# Be aware that it can lead to huge unbalance on your server, your rate for that mob would
  2964. -# then be "mobXP x serverRate x vitalityRate x championXpRate
  2965. -# Notes:
  2966. -#  Works only if EnableVitality = True
  2967. -# Default: False
  2968. -ChampionEnableVitality = False
  2969. -
  2970. -# Enable spawning of the champions in instances
  2971. -# Default = False
  2972. -ChampionEnableInInstances = False
  2973. -
  2974. -# ---------------------------------------------------------------------------
  2975. -# Wedding System (by evill33t)
  2976. -# ---------------------------------------------------------------------------
  2977. -# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
  2978. -# CustomNpcTable = True in General.properties
  2979. -# ---------------------------------------------------------------------------
  2980. -# Wedding Manager ID: 50007
  2981. -#
  2982. -# First part - "Engagement"
  2983. -# 1) Target the player that you want to make a couple with.
  2984. -# 2) Use the voice command ".engage nameofyourpartner" then press enter.
  2985. -# 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.
  2986. -# 4) If the target player accepts the engagement invitation, you will be engaged.
  2987. -#
  2988. -# Second part - "Marriage"
  2989. -# 1) Once two players are engaged, they can speak to Andromeda, the Wedding Priest in the Hot Springs Guild House (Goddard Area).
  2990. -#    (You may need Formal Wear and Adena to pay wedding fees!)
  2991. -# 2) Each player needs to speak to the NPC and make the request to be married.
  2992. -# 3) Once done, fireworks will display and the two players will be married.
  2993. -#
  2994. -# 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)
  2995. -#
  2996. -# If you want to cancel your Engagement/Marriage, use the voice command ".divorce nameofyourpartner".
  2997. -#
  2998. -# If you're married you have to pay a specified % of your adena to your partner.
  2999. -#
  3000. -# If a player attempts to become engaged to another player while married they may suffer a penalty if it's enabled below.
  3001. -# ---------------------------------------------------------------------------
  3002. -# Enable/Disable Wedding System
  3003. -AllowWedding = False
  3004. -
  3005. -# Amount of Adena required to get married
  3006. -WeddingPrice = 250000000
  3007. -
  3008. -# Enable/Disable punishing of players who attempt to be engaged to other players while married.
  3009. -WeddingPunishInfidelity = True
  3010. -
  3011. -# Enable/Disable teleport function for married couples.
  3012. -WeddingTeleport = True
  3013. -
  3014. -# Amount of Adena required to teleport to spouse.
  3015. -WeddingTeleportPrice = 50000
  3016. -
  3017. -# Time before character is teleported after using the skill.
  3018. -WeddingTeleportDuration = 60
  3019. -
  3020. -# Enable/Disable same sex marriages.
  3021. -WeddingAllowSameSex = False
  3022. -
  3023. -# Require players to wear formal wear to be married?
  3024. -WeddingFormalWear = True
  3025. -
  3026. -# Amount of Adena (%) a player must pay to the other to get divorced.
  3027. -WeddingDivorceCosts = 20
  3028. -
  3029. -
  3030. -# ---------------------------------------------------------------------------
  3031. -# Team vs. Team Event Engine (by HorridoJoho)
  3032. -# ---------------------------------------------------------------------------
  3033. -
  3034. -# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
  3035. -# CustomNpcTable = True in General.properties
  3036. -# ---------------------------------------------------------------------------
  3037. -# Enable/Disable TvTEvent System
  3038. -# Default: False
  3039. -TvTEventEnabled = False
  3040. -
  3041. -# TvT in instance
  3042. -# Default: False
  3043. -TvTEventInInstance = False
  3044. -
  3045. -# Name of the instance file for TvT
  3046. -# Default: coliseum.xml
  3047. -TvTEventInstanceFile = coliseum.xml
  3048. -
  3049. -# Times TvT will occur (24h format).
  3050. -# Default: 9:00,15:00,21:00,3:00
  3051. -TvTEventInterval = 9:00,15:00,21:00,3:00
  3052. -
  3053. -# Registration timer from start of event (in minutes).
  3054. -# Default: 30
  3055. -TvTEventParticipationTime = 30
  3056. -
  3057. -# Event running time (in minutes).
  3058. -# Default: 20
  3059. -TvTEventRunningTime = 20
  3060. -
  3061. -# TvT Event NPC (create a custom npc of type L2TvTEventNpc).
  3062. -# Default: 70010
  3063. -TvTEventParticipationNpcId = 70010
  3064. -
  3065. -# TvT Event Participation Fee (itemId, number). Fee is not returned.
  3066. -# Example: 57,100000
  3067. -# Default: 0,0
  3068. -TvTEventParticipationFee = 0,0
  3069. -
  3070. -# Location for TvTEvent NPC to spawn in form x,y,z[,heading]
  3071. -# Default: 83425,148585,-3406
  3072. -TvTEventParticipationNpcCoordinates = 83425,148585,-3406
  3073. -
  3074. -# Minimum amount of players allowed in each team.
  3075. -# Default: 1
  3076. -TvTEventMinPlayersInTeams = 1
  3077. -# Maximum amount of players allowed in each team.
  3078. -# Default: 20
  3079. -TvTEventMaxPlayersInTeams = 20
  3080. -
  3081. -# Minimum level of players that may join the event.
  3082. -# Default: 1
  3083. -TvTEventMinPlayerLevel = 1
  3084. -# Maximum level of players that may join the event.
  3085. -# Default: 85
  3086. -TvTEventMaxPlayerLevel = 85
  3087. -
  3088. -# Respawn delay timer (in seconds).
  3089. -# Default: 10
  3090. -TvTEventRespawnTeleportDelay = 10
  3091. -# Exit delay timer (in seconds).
  3092. -# Default: 10
  3093. -TvTEventStartLeaveTeleportDelay = 10
  3094. -
  3095. -# First Team - Name, Start/Death x,y,z location.
  3096. -TvTEventTeam1Name = Team1
  3097. -TvTEventTeam1Coordinates = 148695,46725,-3414
  3098. -
  3099. -# Second Team - Name, Start/Death x,y,z location.
  3100. -TvTEventTeam2Name = Team2
  3101. -TvTEventTeam2Coordinates = 149999,46728,-3414
  3102. -
  3103. -# Reward for winning team.
  3104. -# Example: TvTEventReward = itemId,amount;itemId,amount;itemId,amount
  3105. -TvTEventReward = 57,100000
  3106. -
  3107. -# TvTEvent Rules
  3108. -TvTEventTargetTeamMembersAllowed = True
  3109. -TvTEventScrollsAllowed = False
  3110. -TvTEventPotionsAllowed = False
  3111. -TvTEventSummonByItemAllowed = False
  3112. -
  3113. -# Door ID's to open/close on start/end.
  3114. -# Not supported in instance, use xml template for defining doors.
  3115. -# Example: TvTDoorsToOpen = 1;2;3;4;5;6
  3116. -TvTDoorsToOpen =
  3117. -TvTDoorsToClose =
  3118. -
  3119. -# Should both teams get reward if there's a tie?
  3120. -TvTRewardTeamTie = False
  3121. -
  3122. -# Participant's effects handling on teleport/death.
  3123. -# Effects lasting through death never removed.
  3124. -# 0 - always remove all effects.
  3125. -# 1 - remove all effects only during port to event (noblesse blessing can be used)
  3126. -# 2 - never remove any effect
  3127. -# Default: 0
  3128. -TvTEventEffectsRemoval = 0
  3129. -
  3130. -# Fighter-class participants will be buffed with those buffs each respawn
  3131. -# Format: skill1Id,skill1Level;skill2Id,skill2Level...
  3132. -# Example: 1504,1;1501,1;1502,1;1499,1
  3133. -TvTEventFighterBuffs =
  3134. -
  3135. -# Mage-class participants will be buffed with those buffs each respawn
  3136. -# Format: skill1Id,skill1Level;skill2Id,skill2Level...
  3137. -# Example: 1504,1;1500,1;1501,1;1085,3
  3138. -TvTEventMageBuffs =
  3139. -
  3140. -# Maximum number of allowed participants per IP address (dualbox check)
  3141. -# Default: 0 (no limits)
  3142. -TvTEventMaxParticipantsPerIP = 0
  3143. -
  3144. -# Voiced command (.tvt) working during TVT event to get information about event status
  3145. -TvTAllowVoicedInfoCommand = false
  3146. -
  3147. -
  3148. -# ---------------------------------------------------------------------------
  3149. -# L2J Banking System
  3150. -# ---------------------------------------------------------------------------
  3151. -
  3152. -# Enable/Disable Banking System
  3153. -BankingEnabled = False
  3154. -
  3155. -# Amount of Goldbars a player gets when they use the ".deposit" command. Also the same amount they will lose with ".withdraw".
  3156. -BankingGoldbarCount = 1
  3157. -
  3158. -# Amount of Adena a player gets when they use the ".withdraw" command. Also the same amount they will lose with ".deposit".
  3159. -BankingAdenaCount = 500000000
  3160. -
  3161. -
  3162. -# ---------------------------------------------------------------------------
  3163. -# Warehouse Sorting
  3164. -# Shows Withdraw Window sorted by ItemType (Armor/Weapon/Spellbook....)
  3165. -# ---------------------------------------------------------------------------
  3166. -
  3167. -EnableWarehouseSortingClan = False
  3168. -EnableWarehouseSortingPrivate = False
  3169. -
  3170. -
  3171. -# ---------------------------------------------------------------------------
  3172. -# Offline trade/craft
  3173. -# ---------------------------------------------------------------------------
  3174. -
  3175. -# Option to enable or disable offline trade feature.
  3176. -# Enable -> true, Disable -> false
  3177. -OfflineTradeEnable = False
  3178. -
  3179. -# Option to enable or disable offline craft feature.
  3180. -# Enable -> true, Disable -> false
  3181. -OfflineCraftEnable = False
  3182. -
  3183. -# If set to True, off-line shops will be possible only peace zones.
  3184. -# Default: False
  3185. -OfflineModeInPeaceZone = False
  3186. -
  3187. -# If set to True, players in off-line shop mode wont take any damage, thus they cannot be killed.
  3188. -# Default: False
  3189. -OfflineModeNoDamage = False
  3190. -
  3191. -# If set to True, name color will be changed then entering offline mode
  3192. -OfflineSetNameColor = False
  3193. -
  3194. -# Color of the name in offline mode (if OfflineSetNameColor = True)
  3195. -OfflineNameColor = 808080
  3196. -
  3197. -# Allow fame for characters in offline mode
  3198. -# Enable -> true, Disable -> false
  3199. -OfflineFame = True
  3200. -
  3201. -#Restore offline traders/crafters after restart/shutdown. Default: false.
  3202. -RestoreOffliners = False
  3203. -
  3204. -#Do not restore offline characters, after OfflineMaxDays days spent from first restore.
  3205. -#Require server restart to disconnect expired shops.
  3206. -#0 = disabled (always restore).
  3207. -#Default: 10
  3208. -OfflineMaxDays = 10
  3209. -
  3210. -#Disconnect shop after finished selling, buying.
  3211. -#Default: True
  3212. -OfflineDisconnectFinished = True
  3213. -
  3214. -# ---------------------------------------------------------------------------
  3215. -# Mana Drugs/Potions
  3216. -# ---------------------------------------------------------------------------
  3217. -
  3218. -# This option will enable core support for:
  3219. -# Mana Drug (item ID 726), using skill ID 10000.
  3220. -# Mana Potion (item ID 728), using skill ID 10001.
  3221. -EnableManaPotionSupport = False
  3222. -
  3223. -
  3224. -# ---------------------------------------------------------------------------
  3225. -# Display Server Time
  3226. -# ---------------------------------------------------------------------------
  3227. -
  3228. -# This option will enable displaying of the local server time for /time command.
  3229. -DisplayServerTime = False
  3230. -
  3231. -
  3232. -# ---------------------------------------------------------------------------
  3233. -# Welcome message
  3234. -# ---------------------------------------------------------------------------
  3235. -
  3236. -# Show screen welcome message on character login
  3237. -# Default: False
  3238. -ScreenWelcomeMessageEnable = False
  3239. -
  3240. -# Screen welcome message text to show on character login if enabled
  3241. -# ('#' for a new line, but message can have max 2 lines)
  3242. -ScreenWelcomeMessageText = Welcome to L2J server!
  3243. -
  3244. -# Show screen welcome message for x seconds when character log in to game if enabled
  3245. -ScreenWelcomeMessageTime = 10
  3246. -
  3247. -
  3248. -# ---------------------------------------------------------------------------
  3249. -# AntiFeed
  3250. -# ---------------------------------------------------------------------------
  3251. -
  3252. -# This option will enable antifeed for pvp/pk/clanrep points.
  3253. -# Default: False
  3254. -AntiFeedEnable = False
  3255. -
  3256. -# If set to True, kills from dualbox will not increase pvp/pk points
  3257. -# and clan reputation will not be transferred.
  3258. -# Default: True
  3259. -AntiFeedDualbox = True
  3260. -
  3261. -# If set to True, server will count disconnected (unable to determine ip address)
  3262. -# as dualbox.
  3263. -# Default: True
  3264. -AntiFeedDisconnectedAsDualbox = True
  3265. -
  3266. -# If character died faster than timeout - pvp/pk points for killer will not increase
  3267. -# and clan reputation will not be transferred.
  3268. -# Setting to 0 will disable this feature.
  3269. -# Default: 120 seconds.
  3270. -AntiFeedInterval = 120
  3271. -
  3272. -
  3273. -# ---------------------------------------------------------------------------
  3274. -# Pvp/pk Announce
  3275. -# ---------------------------------------------------------------------------
  3276. -
  3277. -# Default: False
  3278. -AnnouncePkPvP = False
  3279. -
  3280. -# Announce this as normal system message
  3281. -# Default: True
  3282. -AnnouncePkPvPNormalMessage = True
  3283. -
  3284. -# PK message template
  3285. -# variables: $killer, $target
  3286. -AnnouncePkMsg = $killer has slaughtered $target
  3287. -
  3288. -# Pvp message template
  3289. -# variables: $killer, $target
  3290. -AnnouncePvpMsg = $killer has defeated $target
  3291. -
  3292. -
  3293. -# ---------------------------------------------------------------------------
  3294. -# Chat Moderation
  3295. -# ---------------------------------------------------------------------------
  3296. -
  3297. -# This option will enable using of the voice commands .banchat and .unbanchat
  3298. -# for players with corresponding access level (default: 7).
  3299. -# Check access_levels.sql and admin_command_access_rights for details.
  3300. -# Default: False
  3301. -ChatAdmin = False
  3302. -
  3303. -
  3304. -# ---------------------------------------------------------------------------
  3305. -# Hellbound Status Voice Command
  3306. -# ---------------------------------------------------------------------------
  3307. -
  3308. -# This option will enable using of the voice commands .hellbound
  3309. -# for retrieving information about current Hellbound level and trust.
  3310. -# Default: False
  3311. -HellboundStatus = False
  3312. -
  3313. -
  3314. -# ---------------------------------------------------------------------------
  3315. -# Multilingual support
  3316. -# ---------------------------------------------------------------------------
  3317. -
  3318. -# Enable or disable multilingual support.
  3319. -# Default: False
  3320. -MultiLangEnable = False
  3321. -
  3322. -# Default language, if not defined.
  3323. -# Default: en
  3324. -MultiLangDefault = en
  3325. -
  3326. -# List of allowed languages, semicolon separated.
  3327. -# Default: en;ru
  3328. -MultiLangAllowed = en;ru
  3329. -
  3330. -# Enable or disable voice command .lang for changing languages on the fly.
  3331. -# Default: True
  3332. -MultiLangVoiceCommand = True
  3333. -
  3334. -# Enable or disable multilingual SystemMessages support.
  3335. -# Default: False
  3336. -MultiLangSystemMessageEnable = False
  3337. -
  3338. -# List of allowed languages for SystemMessages, semicolon separated.
  3339. -# Default:
  3340. -MultiLangSystemMessageAllowed =
  3341. -
  3342. -# Enable or disable multilingual NpcStrings support.
  3343. -# Default: False
  3344. -MultiLangNpcStringEnable = False
  3345. -
  3346. -# List of allowed languages for NpcStrings, semicolon separated.
  3347. -# Default:
  3348. -MultiLangNpcStringAllowed =
  3349. -
  3350. -
  3351. -# ---------------------------------------------------------------------------
  3352. -# Walker/Bot protection
  3353. -# ---------------------------------------------------------------------------
  3354. -
  3355. -# Basic protection against L2Walker.
  3356. -# Default: False
  3357. -L2WalkerProtection = False
  3358. -
  3359. -
  3360. -# ---------------------------------------------------------------------------
  3361. -# Debug enable/disable voice command
  3362. -# ---------------------------------------------------------------------------
  3363. -
  3364. -# This option will enable voice command .debug allowing players
  3365. -# to turn on/off debugging on self only.
  3366. -# (admin command //debug can enable debugging on any character)
  3367. -# Use admin_command_access_rights table for defining access rights.
  3368. -# Default: False
  3369. -DebugVoiceCommand = False
  3370. -
  3371. -
  3372. -# ---------------------------------------------------------------------------
  3373. -# Dualbox Check
  3374. -# ---------------------------------------------------------------------------
  3375. -
  3376. -# Maximum number of players per IP address allowed to enter game.
  3377. -# Default: 0 (unlimited)
  3378. -DualboxCheckMaxPlayersPerIP = 0
  3379. -
  3380. -# Maximum number of players per IP address allowed to participate in olympiad.
  3381. -# Default: 0 (unlimited)
  3382. -DualboxCheckMaxOlympiadParticipantsPerIP = 0
  3383. -
  3384. -# Maximum number of players per IP address allowed to participate in events using L2J Event Engine (//event).
  3385. -# Default: 0 (unlimited)
  3386. -DualboxCheckMaxL2EventParticipantsPerIP = 0
  3387. -
  3388. -# Whitelist of the addresses for dualbox checks.
  3389. -# Format: Address1,Number1;Address2,Number2...
  3390. -# Network address can be number (127.0.0.1) or symbolic (localhost) formats.
  3391. -# Additional connection number added to the global limits for this address.
  3392. -# For example, if number of TvT event participants per IP address set to the 1 (no dualbox)
  3393. -# and whitelist contains "l2jserver.com,2" then number of allowed participants from l2jserver.com
  3394. -# will be 1+2=3. Use 0 or negative value for unlimited number of connections.
  3395. -# Default: 127.0.0.1,0 (no limits from localhost)
  3396. -DualboxCheckWhitelist = 127.0.0.1,0
  3397. -
  3398. -# ---------------------------------------------------------------------------
  3399. -# Password Change
  3400. -# ---------------------------------------------------------------------------
  3401. -
  3402. -# Enables .changepassword voiced command which allows the players to change their account's password ingame.
  3403. -# Default: False
  3404. -AllowChangePassword = False
  3405. \ No newline at end of file
  3406. diff --git a/dist/game/config/MMO.properties b/dist/game/config/MMO.properties
  3407. deleted file mode 100644
  3408. index 1882ae9..0000000
  3409. --- a/dist/game/config/MMO.properties
  3410. +++ /dev/null
  3411. @@ -1,24 +0,0 @@
  3412. -#---------------------------------------------------------------
  3413. -# MMO
  3414. -#---------------------------------------------------------------
  3415. -
  3416. -# Sleep time for all Selectors
  3417. -# After he finished his job the Selector waits the given time in milliseconds
  3418. -# Lower values will speed up the loop and the Ping is smaller
  3419. -SleepTime = 20
  3420. -
  3421. -# Every loop it send a maximum of the given packages to each connection
  3422. -# Lower values will speed up the loop and the Ping is smaller but cause less output
  3423. -MaxSendPerPass = 12
  3424. -
  3425. -# Every loop it read a maximum of the given packages from each connection
  3426. -# Lower values will speed up the loop and the Ping is smaller but cause less input
  3427. -MaxReadPerPass = 12
  3428. -
  3429. -# Each unfinished read/write need a TEMP storage Buffer
  3430. -# on large player amount we need more Buffers
  3431. -# if there are not enough buffers new ones are generated but not stored for future usage
  3432. -HelperBufferCount = 20
  3433. -
  3434. -# Setting this to True will lower your ping, at the cost of an increase in bandwidth consumption.
  3435. -TcpNoDelay = False
  3436. \ No newline at end of file
  3437. diff --git a/dist/game/config/NPC.properties b/dist/game/config/NPC.properties
  3438. deleted file mode 100644
  3439. index 5ee254c..0000000
  3440. --- a/dist/game/config/NPC.properties
  3441. +++ /dev/null
  3442. @@ -1,218 +0,0 @@
  3443. -# ---------------------------------------------------------------------------
  3444. -# NPC Settings
  3445. -# ---------------------------------------------------------------------------
  3446. -# This properties file is solely for the purpose of NPC modifications and settings that directly influence them.
  3447. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  3448. -# Warning:
  3449. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  3450. -
  3451. -# ---------------------------------------------------------------------------
  3452. -# General
  3453. -# ---------------------------------------------------------------------------
  3454. -
  3455. -# Global announcements will be made indicating Blacksmith/Merchant of Mammon
  3456. -# Spawning points.
  3457. -# Default: False
  3458. -AnnounceMammonSpawn = False
  3459. -
  3460. -# True - Mobs can be aggressive while in peace zones.
  3461. -# False - Mobs can NOT be aggressive while in peace zones.
  3462. -# Default: True
  3463. -AltMobAgroInPeaceZone = True
  3464. -
  3465. -# Defines whether NPCs are attackable by default
  3466. -# Retail: True
  3467. -AltAttackableNpcs = True
  3468. -
  3469. -# Allows non-GM players to view NPC stats via shift-click
  3470. -# Default: False
  3471. -AltGameViewNpc = False
  3472. -
  3473. -# Maximum distance mobs can randomly go from spawn point.
  3474. -# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  3475. -# Default: 300
  3476. -MaxDriftRange = 300
  3477. -
  3478. -# Default: False
  3479. -ShowNpcLevel = False
  3480. -
  3481. -# Show clan, alliance crests for territory NPCs without quests
  3482. -# Default: False
  3483. -ShowCrestWithoutQuest = False
  3484. -
  3485. -# Custom random EnchantEffect
  3486. -# All npcs with weapons get random weapon enchanted value
  3487. -# Enchantment is only visual, range is 4-21
  3488. -# Default: False
  3489. -EnableRandomEnchantEffect = False
  3490. -
  3491. -# The minimum NPC level for the Gracia Epilogue rule:
  3492. -# "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."
  3493. -# Notes:
  3494. -#  If you want to disable this feature then set it 99
  3495. -# Default: 78
  3496. -MinNPCLevelForDmgPenalty = 78
  3497. -
  3498. -# The penalty in percent for -2 till -5 level differences
  3499. -# default:
  3500. -# normal - 0.7, 0.6, 0.6, 0.55
  3501. -# critical - 0.75, 0.65, 0.6, 0.58
  3502. -# skill - 0.8, 0.7, 0.65, 0.62
  3503. -DmgPenaltyForLvLDifferences = 0.7, 0.6, 0.6, 0.55
  3504. -CritDmgPenaltyForLvLDifferences = 0.75, 0.65, 0.6, 0.58
  3505. -SkillDmgPenaltyForLvLDifferences = 0.8, 0.7, 0.65, 0.62
  3506. -
  3507. -# The minimum NPC level for the Gracia Epilogue rule:
  3508. -# "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."
  3509. -# Notes:
  3510. -#  If you want to disable this feature then set it 99
  3511. -# Default: 78
  3512. -MinNPCLevelForMagicPenalty = 78
  3513. -
  3514. -# The penalty in percent for -3 till -6 level differences
  3515. -# Default: unknown
  3516. -SkillChancePenaltyForLvLDifferences = 2.5, 3.0, 3.25, 3.5
  3517. -
  3518. -# ---------------------------------------------------------------------------
  3519. -# Monsters
  3520. -# ---------------------------------------------------------------------------
  3521. -
  3522. -# Decay Time Task (don't set it too low!) (in milliseconds):
  3523. -# Default: 5000
  3524. -DecayTimeTask = 5000
  3525. -
  3526. -# This is the default corpse time (in seconds).
  3527. -# Default: 7
  3528. -DefaultCorpseTime = 7
  3529. -
  3530. -# This is the time that will be added to spoiled corpse time (in seconds).
  3531. -# Default: 10
  3532. -SpoiledCorpseExtendTime = 10
  3533. -
  3534. -# The time allowed to use a corpse consume skill before the corpse decays.
  3535. -# Default: 2000
  3536. -CorpseConsumeSkillAllowedTimeBeforeDecay = 2000
  3537. -
  3538. -# ---------------------------------------------------------------------------
  3539. -# Guards
  3540. -# ---------------------------------------------------------------------------
  3541. -
  3542. -# True - Allows guards to attack aggressive mobs within range.
  3543. -# Default: False
  3544. -GuardAttackAggroMob = False
  3545. -
  3546. -
  3547. -# ---------------------------------------------------------------------------
  3548. -# Pets
  3549. -# ---------------------------------------------------------------------------
  3550. -
  3551. -# This option enables or disables the Wyvern manager located in every castle
  3552. -# to train Wyverns and Striders from Hatchlings.
  3553. -# Default: False
  3554. -AllowWyvernUpgrader = False
  3555. -
  3556. -# Pets that can be rented.
  3557. -# Example: 30827, 32471, 34486, 36547
  3558. -# Default: 30827
  3559. -ListPetRentNpc = 30827
  3560. -
  3561. -# This will control the inventory space limit for pets (NOT WEIGHT LIMIT).
  3562. -# Default: 12
  3563. -MaximumSlotsForPet = 12
  3564. -
  3565. -# HP/MP Regen Multiplier for Pets
  3566. -# Default: 100, 100
  3567. -PetHpRegenMultiplier = 100
  3568. -PetMpRegenMultiplier = 100
  3569. -
  3570. -# ---------------------------------------------------------------------------
  3571. -# Raid Bosses
  3572. -# ---------------------------------------------------------------------------
  3573. -
  3574. -# Percent of HP and MP regeneration for raid bosses.
  3575. -# Example: Setting HP to 10 will cause raid boss HP to regenerate 90% slower than normal.
  3576. -# Default: 100, 100
  3577. -RaidHpRegenMultiplier = 100
  3578. -RaidMpRegenMultiplier = 100
  3579. -
  3580. -# Percent of physical and magical defense for raid bosses.
  3581. -# Example: A setting of 10 will cause defense to be 90% lower than normal,
  3582. -# while 110 will cause defense to be 10% higher than normal.
  3583. -# Default: 100, 100
  3584. -RaidPDefenceMultiplier = 100
  3585. -RaidMDefenceMultiplier = 100
  3586. -
  3587. -# Percent of physical and magical attack for raid bosses.
  3588. -# Example: A setting of 10 will cause attack to be 90% lower than normal,
  3589. -# while 110 will cause attack to be 10% higher than normal.
  3590. -# Default: 100, 100
  3591. -RaidPAttackMultiplier = 100
  3592. -RaidMAttackMultiplier = 100
  3593. -
  3594. -# Configure Minimum and Maximum time multiplier between raid boss re-spawn.
  3595. -# By default 12Hours*1.0 for Minimum Time and 24Hours*1.0 for Maximum Time.
  3596. -# Example: Setting RaidMaxRespawnMultiplier to 2 will make the time between
  3597. -# re-spawn 24 hours to 48 hours.
  3598. -# Default: 1.0, 1.0
  3599. -RaidMinRespawnMultiplier = 1.0
  3600. -RaidMaxRespawnMultiplier = 1.0
  3601. -
  3602. -# Configure the interval at which raid boss minions will re-spawn.
  3603. -# This time is in milliseconds, 1 minute is 60000 milliseconds.
  3604. -# Default: 300000
  3605. -RaidMinionRespawnTime = 300000
  3606. -
  3607. -# Let's make handling of minions with non-standard static respawn easier - no additional code, just config.
  3608. -# Format: minionId1,timeInSec1;minionId2,timeInSec2
  3609. -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
  3610. -
  3611. -# Disable Raid Curse if raid more than 8 levels lower.
  3612. -# Caution: drop will be reduced or even absent if DeepBlue drop rules enabled.  
  3613. -# Default: False
  3614. -DisableRaidCurse = False
  3615. -
  3616. -# Configure the interval at which raid bosses and minions wont reconsider their target
  3617. -# This time is in seconds, 1 minute is 60 seconds.
  3618. -# Default: 10,10,10
  3619. -RaidChaosTime = 10
  3620. -GrandChaosTime = 10
  3621. -MinionChaosTime = 10
  3622. -
  3623. -# ---------------------------------------------------------------------------
  3624. -# Drops
  3625. -# ---------------------------------------------------------------------------
  3626. -
  3627. -# If True, activates bellow level gap rules for standard mobs:
  3628. -# Default: True
  3629. -UseDeepBlueDropRules = True
  3630. -
  3631. -# If True, activates bellow level gap rules for raid bosses:
  3632. -# Default: True
  3633. -UseDeepBlueDropRulesRaid = True
  3634. -
  3635. -
  3636. -# The min and max level difference used for level gap calculation
  3637. -# this is only for how many levels higher the player is than the monster
  3638. -# Default: 8
  3639. -DropAdenaMinLevelDifference=8
  3640. -# Default: 15
  3641. -DropAdenaMaxLevelDifference=15
  3642. -
  3643. -# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
  3644. -# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
  3645. -# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
  3646. -# Default: 10
  3647. -DropAdenaMinLevelGapChance=10
  3648. -
  3649. -# The min and max level difference used for level gap calculation
  3650. -# this is only for how many levels higher the player is than the monster
  3651. -# Default: 5
  3652. -DropItemMinLevelDifference=5
  3653. -# Default: 10
  3654. -DropItemMaxLevelDifference=10
  3655. -
  3656. -# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
  3657. -# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
  3658. -# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
  3659. -# Default: 10
  3660. -DropItemMinLevelGapChance=10
  3661. \ No newline at end of file
  3662. diff --git a/dist/game/config/Olympiad.properties b/dist/game/config/Olympiad.properties
  3663. deleted file mode 100644
  3664. index 8940338..0000000
  3665. --- a/dist/game/config/Olympiad.properties
  3666. +++ /dev/null
  3667. @@ -1,166 +0,0 @@
  3668. -# ---------------------------------------------------------------------------
  3669. -# Olympiad Settings
  3670. -# ---------------------------------------------------------------------------
  3671. -
  3672. -# The defaults are set to be retail-like.
  3673. -# If you modify any of these settings your server will deviate from being retail-like.
  3674. -# Warning:
  3675. -# Please take extreme caution when changing anything.
  3676. -# Also please understand what you are changing before you do so on a live server.
  3677. -# ---------------------------------------------------------------------------
  3678. -
  3679. -# Olympiad Start Time in Military hours Default 6pm (18)
  3680. -# Default: 18
  3681. -AltOlyStartTime = 18
  3682. -
  3683. -# Olympiad Start Time for Min's, Default 00 so at the start of the hour.
  3684. -# Default: 00
  3685. -AltOlyMin = 00
  3686. -
  3687. -# Maximum number of buffs.
  3688. -# Default: 5
  3689. -AltOlyMaxBuffs = 5
  3690. -
  3691. -# Olympiad Competition Period, Default 6 hours.
  3692. -# (If set different, should be increment by 10mins)
  3693. -# Default: 21600000
  3694. -AltOlyCPeriod = 21600000
  3695. -
  3696. -# Olympiad Battle Period, Default 5 minutes.
  3697. -# Default: 300000
  3698. -AltOlyBattle = 300000
  3699. -
  3700. -# Olympiad Weekly Period, Default 1 week
  3701. -# Used for adding points to nobles
  3702. -# Default: 604800000
  3703. -AltOlyWPeriod = 604800000
  3704. -
  3705. -# Olympiad Validation Period, Default 24 Hours.
  3706. -# Default: 86400000
  3707. -AltOlyVPeriod = 86400000
  3708. -
  3709. -# Points for reaching Noblesse for the first time
  3710. -# Default: 10
  3711. -AltOlyStartPoints = 10
  3712. -
  3713. -# Points every week
  3714. -# Default: 10
  3715. -AltOlyWeeklyPoints = 10
  3716. -
  3717. -# Required number of participants for the class based games
  3718. -# Default: 11
  3719. -AltOlyClassedParticipants = 11
  3720. -
  3721. -# Required number of participants for the non-class based games
  3722. -# Default: 11
  3723. -AltOlyNonClassedParticipants = 11
  3724. -
  3725. -# Required number of participants for the 3x3 teams games
  3726. -# Default: 6
  3727. -AltOlyTeamsParticipants = 6
  3728. -
  3729. -# Number used for displaying amount of registered participants, messages "Fewer than ..." or "More than ...".
  3730. -# 0 for displaying digits instead of text phrase (old style).
  3731. -# Default: 100
  3732. -AltOlyRegistrationDisplayNumber = 100
  3733. -
  3734. -# Reward for the class based games
  3735. -# Format: itemId1,itemNum1;itemId2,itemNum2...
  3736. -# Default: 13722,50
  3737. -AltOlyClassedReward = 13722,50
  3738. -
  3739. -# Reward for the non-class based games
  3740. -# Format: itemId1,itemNum1;itemId2,itemNum2...
  3741. -# Default: 13722,40
  3742. -AltOlyNonClassedReward = 13722,40
  3743. -
  3744. -# Reward for the 3x3 teams games
  3745. -# Format: itemId1,itemNum1;itemId2,itemNum2...
  3746. -# Default: 13722,85
  3747. -AltOlyTeamReward = 13722,85
  3748. -
  3749. -# ItemId used for exchanging to the points.
  3750. -# Default: 13722
  3751. -AltOlyCompRewItem = 13722
  3752. -
  3753. -# The minimal matches you need to participate to receive point rewards
  3754. -# Default: 15
  3755. -AltOlyMinMatchesForPoints = 15
  3756. -
  3757. -# Rate to exchange points to reward item.
  3758. -# Default: 1000
  3759. -AltOlyGPPerPoint = 1000
  3760. -
  3761. -# Noblesse points awarded to Heroes.
  3762. -# Default: 200
  3763. -AltOlyHeroPoints = 200
  3764. -
  3765. -# Noblesse points awarded to Rank 1 members.
  3766. -# Default: 100
  3767. -AltOlyRank1Points = 100
  3768. -
  3769. -# Noblesse points awarded to Rank 2 members.
  3770. -# Default: 75
  3771. -AltOlyRank2Points = 75
  3772. -
  3773. -# Noblesse points awarded to Rank 3 members.
  3774. -# Default: 55
  3775. -AltOlyRank3Points = 55
  3776. -
  3777. -# Noblesse points awarded to Rank 4 members.
  3778. -# Default: 40
  3779. -AltOlyRank4Points = 40
  3780. -
  3781. -# Noblesse points awarded to Rank 5 members.
  3782. -# Default: 30
  3783. -AltOlyRank5Points = 30
  3784. -
  3785. -# Maximum points that player can gain/lose on a match.
  3786. -# Default: 10
  3787. -AltOlyMaxPoints = 10
  3788. -
  3789. -# Hero tables show last month's winners or current status.
  3790. -# Default: True
  3791. -AltOlyShowMonthlyWinners = True
  3792. -
  3793. -# Olympiad Managers announce each start of fight.
  3794. -# Default: True
  3795. -AltOlyAnnounceGames = True
  3796. -
  3797. -# Restrict specified items in Olympiad. ItemID's need to be separated with a comma (ex. 1,200,350)
  3798. -# Equipped items will be moved to inventory during port.
  3799. -# 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
  3800. -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
  3801. -
  3802. -# Enchant limit for items during Olympiad battles. Disabled = -1.
  3803. -# Default: -1
  3804. -AltOlyEnchantLimit = -1
  3805. -
  3806. -# Log all Olympiad fights and outcome to olympiad.csv file.
  3807. -# Default: False
  3808. -AltOlyLogFights = False
  3809. -
  3810. -# Time to wait before teleported to arena.
  3811. -# Default: 120
  3812. -AltOlyWaitTime = 120
  3813. -
  3814. -# Divider for points in classed and non-classed games
  3815. -# Default: 5, 5
  3816. -AltOlyDividerClassed = 5
  3817. -AltOlyDividerNonClassed = 5
  3818. -
  3819. -# Maximum number of matches a Noblesse character can join per week
  3820. -# Default: 70
  3821. -AltOlyMaxWeeklyMatches = 70
  3822. -
  3823. -# Maximum number of Class-Irrelevant Individual matches a character can join per week
  3824. -# Default: 60
  3825. -AltOlyMaxWeeklyMatchesNonClassed = 60
  3826. -
  3827. -# Maximum number of Class Individual matches a character can join per week
  3828. -# Default: 30
  3829. -AltOlyMaxWeeklyMatchesClassed = 30
  3830. -
  3831. -# Maximum number of Class-Irrelevant Team matches a character can join per week
  3832. -# Default: 10
  3833. -AltOlyMaxWeeklyMatchesTeam = 10
  3834. \ No newline at end of file
  3835. diff --git a/dist/game/config/PVP.properties b/dist/game/config/PVP.properties
  3836. deleted file mode 100644
  3837. index b9a6ab4..0000000
  3838. --- a/dist/game/config/PVP.properties
  3839. +++ /dev/null
  3840. @@ -1,43 +0,0 @@
  3841. -# ---------------------------------------------------------------------------
  3842. -# PvP Related Settings
  3843. -# ---------------------------------------------------------------------------
  3844. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  3845. -# Warning:
  3846. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  3847. -# ---------------------------------------------------------------------------
  3848. -# PK'er Drop Settings
  3849. -# ---------------------------------------------------------------------------
  3850. -
  3851. -# Default: False
  3852. -CanGMDropEquipment = False
  3853. -
  3854. -# Warning: Make sure the lists do NOT CONTAIN
  3855. -# trailing spaces or spaces between the numbers!
  3856. -# List of pet items we cannot drop.
  3857. -# Default: 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
  3858. -ListOfPetItems = 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
  3859. -
  3860. -# Lists of items which should NEVER be dropped (note, Adena will
  3861. -# never be dropped) whether on this list or not
  3862. -# 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
  3863. -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
  3864. -
  3865. -# Default: 6
  3866. -MinimumPKRequiredToDrop = 6
  3867. -
  3868. -
  3869. -# ---------------------------------------------------------------------------
  3870. -# Misc.
  3871. -# ---------------------------------------------------------------------------
  3872. -
  3873. -# Should we award a pvp point for killing a player with karma?
  3874. -# Default: False
  3875. -AwardPKKillPVPPoint = False
  3876. -
  3877. -# How much time one stays in PvP mode after hitting an innocent (in ms)
  3878. -# Default: 120000
  3879. -PvPVsNormalTime = 120000
  3880. -
  3881. -# Length one stays in PvP mode after hitting a purple player (in ms)
  3882. -# Default: 60000
  3883. -PvPVsPvPTime = 60000
  3884. \ No newline at end of file
  3885. diff --git a/dist/game/config/Rates.properties b/dist/game/config/Rates.properties
  3886. deleted file mode 100644
  3887. index 909c6a9..0000000
  3888. --- a/dist/game/config/Rates.properties
  3889. +++ /dev/null
  3890. @@ -1,166 +0,0 @@
  3891. -# ---------------------------------------------------------------------------
  3892. -# Rate Settings
  3893. -# ---------------------------------------------------------------------------
  3894. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  3895. -# Warning:
  3896. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  3897. -
  3898. -# ---------------------------------------------------------------------------
  3899. -# Item Rates
  3900. -# ---------------------------------------------------------------------------
  3901. -# Warning: Remember if you increase both chance and amount you will have higher rates than expected
  3902. -# Example: if amount multiplier is 5 and chance multiplier is 5 you will end up with 5*5 = 25 drop rates so be careful!
  3903. -
  3904. -
  3905. -# Multiplies the amount of items dropped from monster on ground when it dies.
  3906. -DeathDropAmountMultiplier = 1
  3907. -# Multiplies the amount of items looted from monster when a skill like Sweeper(Spoil) is used.
  3908. -CorpseDropAmountMultiplier = 1
  3909. -# Multiplies the amount of items dropped from monster on ground when it dies.
  3910. -HerbDropAmountMultiplier = 1
  3911. -RaidDropAmountMultiplier = 1
  3912. -
  3913. -# Multiplies the chance of items that can be dropped from monster on ground when it dies.
  3914. -DeathDropChanceMultiplier = 1
  3915. -# Multiplies the chance of items that can be looted from monster when a skill like Sweeper(Spoil) is used.
  3916. -CorpseDropChanceMultiplier = 1
  3917. -# Multiplies the chance of items that can be dropped from monster on ground when it dies.
  3918. -HerbDropChanceMultiplier = 1
  3919. -RaidDropChanceMultiplier = 1
  3920. -
  3921. -# List of items affected by custom drop rate by id, used now for Adena rate too.
  3922. -# Usage: itemId1,multiplier1;itemId2,multiplier2;...
  3923. -# Note: Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
  3924. -# 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;
  3925. -# Default: 57,1
  3926. -DropAmountMultiplierByItemId = 57,1
  3927. -DropChanceMultiplierByItemId = 57,1
  3928. -
  3929. -
  3930. -# ---------------------------------------------------------------------------
  3931. -# Standard Settings (Retail value = 1)
  3932. -# ---------------------------------------------------------------------------
  3933. -
  3934. -
  3935. -# Experience multiplier
  3936. -RateXp = 1
  3937. -# Skill points multiplier
  3938. -RateSp = 1
  3939. -# Experience multiplier (Party)
  3940. -RatePartyXp = 1
  3941. -# Skill points multiplier (Party)
  3942. -RatePartySp = 1
  3943. -RateDropManor = 1
  3944. -# Karma decreasing rate
  3945. -# Note: -1 means RateXp so it means it will use retail rate for decreasing karma upon death or receiving exp by farming mobs.
  3946. -# Default: -1
  3947. -RateKarmaLost = -1
  3948. -RateKarmaExpLost = 1
  3949. -RateSiegeGuardsPrice = 1
  3950. -
  3951. -# Modify the rate of reward of all extractable items and skills.
  3952. -# Default: 1.
  3953. -RateExtractable = 1.
  3954. -
  3955. -# Hellbound trust increase/decrease multipliers
  3956. -RateHellboundTrustIncrease = 1
  3957. -RateHellboundTrustDecrease = 1
  3958. -
  3959. -# Quest Multipliers
  3960. -# Warning: Many quests need to be rewritten
  3961. -# for this setting to work properly.
  3962. -
  3963. -# Quest item drop multiplier
  3964. -RateQuestDrop = 1
  3965. -
  3966. -# Exp/SP reward multipliers
  3967. -RateQuestRewardXP = 1
  3968. -RateQuestRewardSP = 1
  3969. -
  3970. -# Adena reward multiplier
  3971. -RateQuestRewardAdena = 1
  3972. -
  3973. -# Use additional item multipliers?
  3974. -# Default: False
  3975. -UseQuestRewardMultipliers = False
  3976. -
  3977. -# Default reward multiplier
  3978. -# When UseRewardMultipliers=False - default multiplier is used for any reward
  3979. -# When UseRewardMultipliers=True  - default multiplier is used for all items not affected by additional multipliers
  3980. -# Default: 1
  3981. -RateQuestReward = 1
  3982. -
  3983. -# Additional quest-reward multipliers based on item type
  3984. -RateQuestRewardPotion = 1
  3985. -RateQuestRewardScroll = 1
  3986. -RateQuestRewardRecipe = 1
  3987. -RateQuestRewardMaterial = 1
  3988. -
  3989. -# ---------------------------------------------------------------------------
  3990. -# Vitality system rates. Works only if EnableVitality = True
  3991. -# ---------------------------------------------------------------------------
  3992. -
  3993. -# The following configures the XP multiplier of each vitality level. Basically, you have
  3994. -# 5 levels, the first one being 0. Official rates are:
  3995. -# Level 1: 150%
  3996. -# Level 2: 200%
  3997. -# Level 3: 250%
  3998. -# Level 4: 300%
  3999. -# Take care setting these values according to your server rates, as the can lead to huge differences!
  4000. -# Example with a server rate 15x and a level 4 vitality = 3. => final server rate = 45 (15x3)!
  4001. -RateVitalityLevel1 = 1.5
  4002. -RateVitalityLevel2 = 2.
  4003. -RateVitalityLevel3 = 2.5
  4004. -RateVitalityLevel4 = 3.
  4005. -
  4006. -# These options are to be used if you want to increase the vitality gain/lost for each mob you kills
  4007. -# Default values are 1.
  4008. -RateVitalityGain = 1.
  4009. -RateVitalityLost = 1.
  4010. -
  4011. -# This defines how many times faster do the players regain their vitality when in peace zones
  4012. -RateRecoveryPeaceZone = 1.
  4013. -
  4014. -# This defines how many times faster do the players regain their vitality when offline
  4015. -# Note that you need to turn on "RecoverVitalityOnReconnect" to have this option effective
  4016. -RateRecoveryOnReconnect = 4.
  4017. -
  4018. -
  4019. -# ---------------------------------------------------------------------------
  4020. -# Player Drops (values are set in PERCENTS)
  4021. -# ---------------------------------------------------------------------------
  4022. -
  4023. -PlayerDropLimit = 0
  4024. -# in %
  4025. -PlayerRateDrop = 0
  4026. -# in %
  4027. -PlayerRateDropItem = 0
  4028. -# in %
  4029. -PlayerRateDropEquip = 0
  4030. -# in %
  4031. -PlayerRateDropEquipWeapon = 0
  4032. -
  4033. -# Default: 10
  4034. -KarmaDropLimit = 10
  4035. -
  4036. -# Default: 40
  4037. -KarmaRateDrop = 40
  4038. -
  4039. -# Default: 50
  4040. -KarmaRateDropItem = 50
  4041. -
  4042. -# Default: 40
  4043. -KarmaRateDropEquip = 40
  4044. -
  4045. -# Default: 10
  4046. -KarmaRateDropEquipWeapon = 10
  4047. -
  4048. -
  4049. -# ---------------------------------------------------------------------------
  4050. -# Pets (Default value = 1)
  4051. -# ---------------------------------------------------------------------------
  4052. -
  4053. -PetXpRate = 1
  4054. -PetFoodRate = 1
  4055. -SinEaterXpRate = 1
  4056. -
  4057. diff --git a/dist/game/config/Server.properties b/dist/game/config/Server.properties
  4058. deleted file mode 100644
  4059. index 79d6934..0000000
  4060. --- a/dist/game/config/Server.properties
  4061. +++ /dev/null
  4062. @@ -1,136 +0,0 @@
  4063. -# ---------------------------------------------------------------------------
  4064. -# Game Server Settings
  4065. -# ---------------------------------------------------------------------------
  4066. -# This is the server configuration file. Here you can set up the connection information for your server.
  4067. -# This was written with the assumption that you are behind a router.
  4068. -# Dumbed Down Definitions...
  4069. -# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
  4070. -# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
  4071. -# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
  4072. -
  4073. -# ---------------------------------------------------------------------------
  4074. -# Networking
  4075. -# ---------------------------------------------------------------------------
  4076. -
  4077. -# Enables automatic port mapping for game server.
  4078. -# If you have a router game server will request for port forwarding.
  4079. -# Default: True
  4080. -EnableUPnP = True
  4081. -
  4082. -# Where's the Login server this gameserver should connect to
  4083. -# 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>
  4084. -# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
  4085. -# Default: 127.0.0.1
  4086. -LoginHost = 127.0.0.1
  4087. -
  4088. -# TCP port the login server listen to for gameserver connection requests
  4089. -# Default: 9014
  4090. -LoginPort = 9014
  4091. -
  4092. -# Bind address for gameserver. You should not need to change it in most cases.
  4093. -# 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>
  4094. -# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
  4095. -# Default: * (0.0.0.0)
  4096. -GameserverHostname = *
  4097. -
  4098. -# Default: 7777
  4099. -GameserverPort = 7777
  4100. -
  4101. -
  4102. -# ---------------------------------------------------------------------------
  4103. -# Database
  4104. -# ---------------------------------------------------------------------------
  4105. -# Database Engine
  4106. -# Available: MySQL, MariaDB
  4107. -# Default: MySQL
  4108. -Database = MySQL
  4109. -
  4110. -# Specify the appropriate driver and url for the database you're using.
  4111. -# Examples:
  4112. -# Driver = com.mysql.jdbc.Driver
  4113. -# Driver = org.hsqldb.jdbcDriver
  4114. -# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
  4115. -# Driver = org.mariadb.jdbc.Driver
  4116. -# Default: com.mysql.jdbc.Driver
  4117. -Driver = com.mysql.jdbc.Driver
  4118. -# Database URL
  4119. -# URL = jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
  4120. -# URL = jdbc:hsqldb:hsql://localhost/l2jgs
  4121. -# URL = jdbc:sqlserver://localhost/database = l2jgs/user = sa/password =
  4122. -# URL = jdbc:mariadb://localhost/l2jgs
  4123. -# Default: jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
  4124. -URL = jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
  4125. -# Database user info (default is "root" but it's not recommended)
  4126. -Login = root
  4127. -# Database connection password
  4128. -Password = toor
  4129. -
  4130. -# Database Connection Pool
  4131. -# Default: HikariCP
  4132. -# Available: BoneCP, C3P0, HikariCP
  4133. -ConnectionPool = HikariCP
  4134. -
  4135. -# Default: 100
  4136. -MaximumDbConnections = 100
  4137. -
  4138. -# Default: 0
  4139. -MaximumDbIdleTime = 0
  4140. -
  4141. -# ---------------------------------------------------------------------------
  4142. -# Misc Server Settings
  4143. -# ---------------------------------------------------------------------------
  4144. -
  4145. -# This is the server ID that the Game Server will request.
  4146. -# Example: 1 = Bartz
  4147. -# Default: 1
  4148. -RequestServerID = 1
  4149. -
  4150. -# True = The Login Server will give an other ID to the server if the requested ID is already reserved.
  4151. -# Default: True
  4152. -AcceptAlternateID = True
  4153. -
  4154. -# Datapack root directory.
  4155. -# Defaults to current directory from which the server is started unless the below line is uncommented.
  4156. -# WARNING: <u><b><font color="red">If the specified path is invalid, it will lead to multiple errors!</font></b></u>
  4157. -#Default: .
  4158. -DatapackRoot = .
  4159. -
  4160. -# Define how many players are allowed to play simultaneously on your server.
  4161. -# Default: 500
  4162. -MaximumOnlineUsers = 500
  4163. -
  4164. -# Numbers of protocol revisions that server allows to connect.
  4165. -# Delimiter is ;
  4166. -# WARNING: <u><b><font color="red">Changing the protocol revision may result in incompatible communication and many errors in game!</font></b></u>
  4167. -# Default: 267;268;271;273
  4168. -AllowedProtocolRevisions = 267;268;271;273
  4169. -
  4170. -
  4171. -# ---------------------------------------------------------------------------
  4172. -# Misc Player Settings
  4173. -# ---------------------------------------------------------------------------
  4174. -
  4175. -# Player name template.
  4176. -# Examples:
  4177. -# PlayerNameTemplate = [A-Z][a-z]{3,3}[A-Za-z0-9]*
  4178. -# The above setting will allow names with first capital letter, next three small letters,
  4179. -# and any letter (case insensitive) or number, like OmfgWTF1
  4180. -# PlayerNameTemplate = [A-Z][a-z]*
  4181. -# The above setting will allow names only of letters with first one capital, like Omfgwtf
  4182. -# The default forces start with a letter and continues either with letters or numbers.
  4183. -# Default: [a-zA-Z0-9]*
  4184. -PlayerNameTemplate = [a-zA-Z0-9]*
  4185. -
  4186. -# This setting restricts names players can give to their pets.
  4187. -# See CnameTemplate for details
  4188. -# Default: [a-zA-Z0-9]*
  4189. -PetNameTemplate = [a-zA-Z0-9]*
  4190. -
  4191. -# This setting restricts clan/subpledge names players can set.
  4192. -# See CnameTemplate for details
  4193. -# Default: [a-zA-Z0-9]+
  4194. -ClanNameTemplate = [a-zA-Z0-9]*
  4195. -
  4196. -# Maximum number of characters per account.
  4197. -# Default: 7 (client limit)
  4198. -CharMaxNumber = 7
  4199. \ No newline at end of file
  4200. diff --git a/dist/game/config/Siege.properties b/dist/game/config/Siege.properties
  4201. deleted file mode 100644
  4202. index e188432..0000000
  4203. --- a/dist/game/config/Siege.properties
  4204. +++ /dev/null
  4205. @@ -1,130 +0,0 @@
  4206. -# ---------------------------------------------------------------------------
  4207. -# Siege Settings
  4208. -# ---------------------------------------------------------------------------
  4209. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  4210. -# Warning:
  4211. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  4212. -
  4213. -# ---------------------------------------------------------------------------
  4214. -# Standard Settings
  4215. -# ---------------------------------------------------------------------------
  4216. -
  4217. -# Length of siege before the count down (in minutes).
  4218. -# Default: 120
  4219. -SiegeLength = 120
  4220. -
  4221. -# Maximum number of flags per clan.
  4222. -# Default: 1
  4223. -MaxFlags = 1
  4224. -
  4225. -# Minimum level to register.
  4226. -# Default: 5
  4227. -SiegeClanMinLevel = 5
  4228. -
  4229. -# Max number of clans that can register on each side.
  4230. -# Default: 500
  4231. -AttackerMaxClans = 500
  4232. -
  4233. -# Default: 500
  4234. -DefenderMaxClans = 500
  4235. -
  4236. -# Respawn times (in milliseconds).
  4237. -# Default: 0
  4238. -AttackerRespawn = 0
  4239. -
  4240. -# Reward successful siege defense with blood alliance in clan warehouse
  4241. -# Default: 1
  4242. -BloodAllianceReward = 1
  4243. -
  4244. -
  4245. -# ---------------------------------------------------------------------------
  4246. -# Castle Control Tower Spawns
  4247. -# ---------------------------------------------------------------------------
  4248. -
  4249. -# Caste Artifacts and Control Towers spawns
  4250. -#
  4251. -# Control Towers syntax:  NameControlTowerN=x,y,z,npc_id,hp
  4252. -# Name - castle name
  4253. -# N - number
  4254. -# x,y,z - coords
  4255. -# npc_id - id of template
  4256. -#
  4257. -# Flame Towers syntax:  NameFlameTowerN=x,y,z,npc_id,hp,zoneIds
  4258. -# Name - castle name
  4259. -# N - number
  4260. -# x,y,z - coords
  4261. -# npc_id - id of template
  4262. -# zoneIds - ids of zones related with tower
  4263. -#
  4264. -
  4265. -# Gludio
  4266. -GludioFlameTower1=-18154,107591,-2560,13004,70017,70019
  4267. -GludioFlameTower2=-19329,108154,-2384,13004,70018,70020
  4268. -GludioControlTower1=-18325,112811,-2377,13002
  4269. -GludioControlTower2=-18048,107098,-2378,13002
  4270. -GludioControlTower3=-18113,108597,-2343,13002
  4271. -GludioMaxMercenaries = 100
  4272. -
  4273. -# Giran
  4274. -GiranFlameTower1=118331,145055,-2627,13004,70025,70027
  4275. -GiranFlameTower2=117768,143880,-2451,13004,70026,70028
  4276. -GiranControlTower1=113115,144829,-2446,13002
  4277. -GiranControlTower2=118828,145106,-2447,13002
  4278. -GiranControlTower3=117329,145041,-2412,13002
  4279. -GiranMaxMercenaries = 200
  4280. -
  4281. -# Dion
  4282. -DionFlameTower1=22114,162159,-2754,13004,70021,70023
  4283. -DionFlameTower2=23289,161596,-2578,13004,70022,70024
  4284. -DionControlTower1=22285,156939,-2571,13002
  4285. -DionControlTower2=22008,162652,-2572,13002
  4286. -DionControlTower3=22073,161153,-2537,13002
  4287. -DionMaxMercenaries = 150
  4288. -
  4289. -# Oren
  4290. -OrenFlameTower1=84407,37150,-2354,13004,70029,70031
  4291. -OrenFlameTower2=83844,35975,-2178,13004,70030,70032
  4292. -OrenControlTower1=79193,36977,-2167,13002
  4293. -OrenControlTower2=84906,37254,-2168,13002
  4294. -OrenControlTower3=83407,37189,-2133,13002
  4295. -OrenMaxMercenaries = 300
  4296. -
  4297. -# Aden
  4298. -AdenFlameTower1=149976,1583,-450,13004,70008,70016,70007,70015,70006,70014,70005,70013
  4299. -AdenFlameTower2=144955,1603,-450,13004,70004,70012,70003,70011,70002,70010,70001,70009
  4300. -AdenControlTower1=148774,2351,-389,13002
  4301. -AdenControlTower2=147456,5724,158,13002
  4302. -AdenControlTower3=146137,2352,-389,13002
  4303. -AdenMaxMercenaries = 400
  4304. -
  4305. -# Innadril
  4306. -InnadrilFlameTower1=116065,250938,-850,13004,70033,70035
  4307. -InnadrilFlameTower2=117240,250375,-674,13004,70034,70036
  4308. -InnadrilControlTower1=116236,245718,-667,13002
  4309. -InnadrilControlTower2=115959,251431,-667,13002
  4310. -InnadrilControlTower3=116024,249932,-633,13002
  4311. -InnadrilMaxMercenaries = 400
  4312. -
  4313. -# Goddard
  4314. -GoddardFlameTower1=148144,-46992,-1609,13004,70037,70039
  4315. -GoddardFlameTower2=146784,-46992,-1609,13004,70038,70040
  4316. -GoddardControlTower1=144672,-48832,-1742,13002
  4317. -GoddardControlTower2=150240,-48832,-1742,13002
  4318. -GoddardControlTower3=147456,-49200,-1619,13002
  4319. -GoddardMaxMercenaries = 400
  4320. -
  4321. -# Rune
  4322. -RuneFlameTower1=12864,-47440,-1087,13004,70041,70043
  4323. -RuneFlameTower2=12225,-50767,1248,13004,70042,70044
  4324. -RuneControlTower1=16565,-50318,-641,13002
  4325. -RuneControlTower2=16559,-48000,-641,13002
  4326. -RuneControlTower3=10775,-48481,83,13002
  4327. -RuneMaxMercenaries = 400
  4328. -
  4329. -# Schuttgart
  4330. -SchuttgartFlameTower1=76872,-151043,120,13004,70045,70047
  4331. -SchuttgartFlameTower2=78233,-151037,120,13004,70046,70048
  4332. -SchuttgartControlTower1=80334,-152898,-8,13002
  4333. -SchuttgartControlTower2=74775,-152928,-8,13002
  4334. -SchuttgartControlTower3=77547,-153246,112,13002
  4335. -SchuttgartMaxMercenaries = 400
  4336. diff --git a/dist/game/config/Telnet.properties b/dist/game/config/Telnet.properties
  4337. deleted file mode 100644
  4338. index f375cc8..0000000
  4339. --- a/dist/game/config/Telnet.properties
  4340. +++ /dev/null
  4341. @@ -1,28 +0,0 @@
  4342. -# ---------------------------------------------------------------------------
  4343. -# Telnet Settings
  4344. -# ---------------------------------------------------------------------------
  4345. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  4346. -# Warning:
  4347. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  4348. -# ---------------------------------------------------------------------------
  4349. -
  4350. -# Allows text based monitoring and administration of L2J GS
  4351. -# by using a telnet client. Communication protocol is insecure
  4352. -# and you should use SSL tunnels, VPN, etc. if you plan to connect
  4353. -# over non-trusted channels.
  4354. -# Default: False
  4355. -EnableTelnet = False
  4356. -
  4357. -# This is the port L2J should listen to for incoming telnet
  4358. -# requests.
  4359. -# Default: 54321
  4360. -StatusPort = 54321
  4361. -
  4362. -# If the following is not set, a random password is generated on server startup.
  4363. -# Usage: StatusPW = somePass
  4364. -StatusPW =
  4365. -
  4366. -# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
  4367. -# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
  4368. -# Default: 127.0.0.1,localhost
  4369. -ListOfHosts = 127.0.0.1,localhost
  4370. \ No newline at end of file
  4371. diff --git a/dist/game/config/TerritoryWar.properties b/dist/game/config/TerritoryWar.properties
  4372. deleted file mode 100644
  4373. index ce04ff6..0000000
  4374. --- a/dist/game/config/TerritoryWar.properties
  4375. +++ /dev/null
  4376. @@ -1,53 +0,0 @@
  4377. -# ---------------------------------------------------------------------------
  4378. -# TerritoryWar Settings
  4379. -# ---------------------------------------------------------------------------
  4380. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  4381. -# Warning:
  4382. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  4383. -
  4384. -# ---------------------------------------------------------------------------
  4385. -# Standard Settings
  4386. -# ---------------------------------------------------------------------------
  4387. -
  4388. -# Length of siege before the count down (in minutes).
  4389. -# Default: 120
  4390. -WarLength = 120
  4391. -
  4392. -# Clan Minimum level to register.
  4393. -# Default: 0
  4394. -ClanMinLevel = 0
  4395. -
  4396. -# Player Minimum level to register.
  4397. -# Default: 40
  4398. -PlayerMinLevel = 40
  4399. -
  4400. -# Max number of clans and players that can register for a side.
  4401. -# Default: 500
  4402. -DefenderMaxClans = 500
  4403. -
  4404. -# Default: 500
  4405. -DefenderMaxPlayers = 500
  4406. -
  4407. -# Is Ward holding players can be attacked and killed in peace zone
  4408. -# Default: False
  4409. -PlayerWithWardCanBeKilledInPeaceZone = False
  4410. -
  4411. -# Spawn wards in Castles when Territory War is not in progress
  4412. -# Default: False
  4413. -SpawnWardsWhenTWIsNotInProgress = False
  4414. -
  4415. -# Return all wards to their own castle when Territory War starts
  4416. -# Default: False
  4417. -ReturnWardsWhenTWStarts = False
  4418. -
  4419. -# Territory Badge needed to change nobless
  4420. -# default: 100
  4421. -MinTerritoryBadgeForNobless = 100
  4422. -
  4423. -# Territory Badge needed to buy Strider
  4424. -# default: 50
  4425. -MinTerritoryBadgeForStriders = 50
  4426. -
  4427. -# Territory Badge needed to buy Guardian's Strider
  4428. -# default: 80
  4429. -MinTerritoryBadgeForBigStrider = 80
  4430. \ No newline at end of file
  4431. diff --git a/dist/game/config/default/Character.properties b/dist/game/config/default/Character.properties
  4432. new file mode 100644
  4433. index 0000000..fcb612f
  4434. --- /dev/null
  4435. +++ b/dist/game/config/default/Character.properties
  4436. @@ -0,0 +1,822 @@
  4437. +# ---------------------------------------------------------------------------
  4438. +# Alternative Character Settings
  4439. +# ---------------------------------------------------------------------------
  4440. +# This properties file is solely for the purpose of Character modifications that directly influence them.
  4441. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  4442. +# Warning:
  4443. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  4444. +
  4445. +# ---------------------------------------------------------------------------
  4446. +# Statistics
  4447. +# ---------------------------------------------------------------------------
  4448. +
  4449. +# This option, if enabled, will force a character to de-level if the characters' experience is below their level after losing experience on death.
  4450. +# If this is set to False, the character will not de-level even if their Experience is below their level after death.
  4451. +# Default: True
  4452. +Delevel = True
  4453. +
  4454. +# This option enable check for all player skills for skill level.
  4455. +# If player level is lower than skill learn level - 9, skill level is decreased to next possible level.
  4456. +# If there is no possible level, skill is removed from player.
  4457. +DecreaseSkillOnDelevel = True
  4458. +
  4459. +# Weight limit multiplier. Example: Setting this to 5 will give players 5x the normal weight limit.
  4460. +# Default: 1
  4461. +AltWeightLimit = 1
  4462. +
  4463. +# Run speed modifier. Example: Setting this to 5 will give players +5 to their running speed.
  4464. +# Default: 0
  4465. +RunSpeedBoost = 0
  4466. +
  4467. +# Chance of receiving the Death Penalty debuff when killed by a mob.
  4468. +# Default: 20
  4469. +DeathPenaltyChance = 20
  4470. +
  4471. +# Percent of HP, MP, and CP which is restored on character revival.
  4472. +# Use 0 to disable restore
  4473. +# Default: 0, 65, 0
  4474. +RespawnRestoreCP = 0
  4475. +RespawnRestoreHP = 65
  4476. +RespawnRestoreMP = 0
  4477. +
  4478. +# Percent of HP, MP, and CP regeneration for players.
  4479. +# Example: Setting HP to 10 will cause player HP to regenerate 90% slower than normal.
  4480. +# Default: 100, 100, 100
  4481. +HpRegenMultiplier = 100
  4482. +MpRegenMultiplier = 100
  4483. +CpRegenMultiplier = 100
  4484. +
  4485. +# ---------------------------------------------------------------------------
  4486. +# Skills & Effects
  4487. +# ---------------------------------------------------------------------------
  4488. +
  4489. +# When this is enabled it will read the "SkillDurationList" option.
  4490. +# 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.
  4491. +# Default: False
  4492. +EnableModifySkillDuration = False
  4493. +# Skill duration list
  4494. +# Format: skillid,newtime;skillid2,newtime2...
  4495. +# Example:
  4496. +#  This enable 1h(3600) duration for songs, the "\"indicates new line,
  4497. +#  and is only set for formating purposes.
  4498. +#  SkillDurationList = 264,3600;265,3600;266,3600;267,3600;268,3600;\
  4499. +#  269,3600;270,3600;304,3600;305,1200;306,3600;308,3600;349,3600;\
  4500. +#  363,3600;364,3600
  4501. +SkillDurationList =
  4502. +
  4503. +# When this is enabled it will read the "SkillReuseList" option.
  4504. +EnableModifySkillReuse = False
  4505. +# Format: skillid,newDelayTime;skillid,newDelayTime2 (See skillDuration for examples)
  4506. +SkillReuseList =
  4507. +
  4508. +# If it's true all class skills will be delivered upon level up and login.
  4509. +# Default: False
  4510. +AutoLearnSkills = False
  4511. +
  4512. +# If it's true skills from forgotten scrolls will be delivered upon level up and login, require AutoLearnSkills.
  4513. +# Default: False
  4514. +AutoLearnForgottenScrollSkills = False
  4515. +
  4516. +# Default: False
  4517. +AutoLootHerbs = False
  4518. +
  4519. +# Maximum number of buffs and songs/dances.
  4520. +# Remember that Divine Inspiration will give players 4 additional buff slots on top of the number specified in "maxbuffamount".
  4521. +# Default: 20, 12, 12
  4522. +MaxBuffAmount = 20
  4523. +MaxTriggeredBuffAmount = 12
  4524. +MaxDanceAmount = 12
  4525. +
  4526. +# Allow players to cancel dances/songs via Alt+click on buff icon
  4527. +# Default: False
  4528. +DanceCancelBuff = False
  4529. +
  4530. +# This option enables/disables additional MP consume for dances and songs.
  4531. +# Default: True
  4532. +DanceConsumeAdditionalMP = True
  4533. +
  4534. +# Allow players to have all dances/songs stored when logout.
  4535. +# Default: False
  4536. +AltStoreDances = False
  4537. +
  4538. +# This option allows a player to automatically learn Divine Inspiration.
  4539. +# This is not included in AutoLearnSkills above.
  4540. +# Default: False
  4541. +AutoLearnDivineInspiration = False
  4542. +
  4543. +# This is to allow a character to be canceled during bow use, skill use, or both.
  4544. +# Available Options: bow, cast, all
  4545. +# Default: cast
  4546. +AltGameCancelByHit = cast
  4547. +
  4548. +# This option, if enabled, will allow magic to fail, and if disabled magic damage will always succeed with a 100% chance.
  4549. +# Default: True
  4550. +MagicFailures = True
  4551. +
  4552. +# Protection from aggressive mobs after getting up from fake death.
  4553. +# The value is specified in seconds.
  4554. +# Default: 0
  4555. +PlayerFakeDeathUpProtection = 0
  4556. +
  4557. +# This option is to enable or disable the storage of buffs/debuffs among other effects.
  4558. +# Default: True
  4559. +StoreSkillCooltime = True
  4560. +
  4561. +# This option is to enable or disable the storage of buffs/debuffs among other effects during
  4562. +# a subclass change
  4563. +# Default: False
  4564. +SubclassStoreSkillCooltime = False
  4565. +
  4566. +# These are alternative rules for shields.
  4567. +# If True and they block:
  4568. +#  The damage is powerAtk-shieldDef,
  4569. +# If False and they block:
  4570. +#  The damage is powerAtk / (shieldDef + powerDef)
  4571. +# Default: False
  4572. +AltShieldBlocks = False
  4573. +
  4574. +# This is the percentage for perfect shield block rate.
  4575. +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  4576. +# Default: 10
  4577. +AltPerfectShieldBlockRate = 10
  4578. +
  4579. +# This is the value ticks are multiplied with to result in interval per tick in milliseconds.
  4580. +# Note: Editing this will not affect how much the over-time effects heals since heal scales with that value too.
  4581. +# Default: 666
  4582. +EffectTickRatio = 666
  4583. +
  4584. +# ---------------------------------------------------------------------------
  4585. +# Class, Sub-class and skill learning options
  4586. +# ---------------------------------------------------------------------------
  4587. +
  4588. +# Allow use of Event Managers for changing occupation without any quests.
  4589. +# Default: False
  4590. +AllowClassMasters = False
  4591. +
  4592. +# ConfigClassMaster=1;[57(100000)];[];2;[57(1000000)];[];3;[57(10000000)],[5575(1000000)];[6622(1)]
  4593. +# 1st occupation change for 100.000 Adena (item id 57)
  4594. +# 2nd occupation change for 1.000.0000 Adena (item id 57)
  4595. +# 3rd occupation change for 10.000.0000 Adena (item id 57) and 1.000.000 Ancient Adena (item id 5575)
  4596. +# on 3rd occupation change player will be rewarded with 1 Book of Giants (item id 6622)
  4597. +# ConfigClassMaster=1;[];[];2;[];[];3;[];[]
  4598. +# 1st, 2nd, 3rd occupation change for free, without rewards.
  4599. +# ConfigClassMaster=1;[];[];2;[];[]
  4600. +# Allow only first and second change.
  4601. +ConfigClassMaster = 1;[];[];2;[];[];3;[];[]
  4602. +
  4603. +# Class Masters will allow changing to any occupation on any level inside class tree
  4604. +# For example, Dwarven Fighter will be able to advance to:
  4605. +# Artisan, Scavenger, Warsmith, Bounty Hunter, Maestro, Fortune Seeker.
  4606. +# But Warsmith will be able to change only to Maestro.
  4607. +# Default = False
  4608. +AllowEntireTree = False
  4609. +
  4610. +# When character reach levels 20,40,76 he will receive tutorial page
  4611. +# with list of the all possible variants, and can select and immediately
  4612. +# change to the new occupation, or decide to choose later (on next login).
  4613. +# Can be used with or without classic Class Masters.
  4614. +# Default = False
  4615. +AlternateClassMaster = False
  4616. +
  4617. +# Require life crystal needed to learn clan skills.
  4618. +# Default: True
  4619. +LifeCrystalNeeded = True
  4620. +
  4621. +# Require book needed to enchant skills.
  4622. +# Default: True
  4623. +EnchantSkillSpBookNeeded = True
  4624. +
  4625. +# Require spell book needed to learn Divine Inspiration.
  4626. +# Default: True
  4627. +DivineInspirationSpBookNeeded = True
  4628. +
  4629. +# When enabled, the following will be true:
  4630. +#  All classes can learn all skills.
  4631. +#  Skills of another class costs x2 SP to learn.
  4632. +#  Skills of another race costs x2 SP to learn.
  4633. +#  Skills of fighters/mages costs x3 SP to learn.
  4634. +# Default: False
  4635. +AltGameSkillLearn = False
  4636. +
  4637. +# Allow player to sub-class without checking for unique quest items.
  4638. +# Default: False
  4639. +AltSubClassWithoutQuests = False
  4640. +
  4641. +# Allow player to add/change subclass at all village master
  4642. +# Default: False
  4643. +AltSubclassEverywhere = False
  4644. +
  4645. +# Allow player to learn transformations without quest.
  4646. +# Default: False
  4647. +AltTransformationWithoutQuest = False
  4648. +
  4649. +# Fee to remove Transfer skills.
  4650. +# Default: 10000000
  4651. +FeeDeleteTransferSkills = 10000000
  4652. +
  4653. +# Fee to remove Sub-Class skills.
  4654. +# Default: 10000000
  4655. +FeeDeleteSubClassSkills = 10000000
  4656. +
  4657. +# ---------------------------------------------------------------------------
  4658. +# Summons configuration
  4659. +# ---------------------------------------------------------------------------
  4660. +
  4661. +# This option is to enable or disable the storage of buffs/debuffs among other effects on pets/invocations
  4662. +# Default: True
  4663. +SummonStoreSkillCooltime = True
  4664. +
  4665. +# Servitor summons on login if player had it summoned before logout
  4666. +# Default: True
  4667. +RestoreServitorOnReconnect = True
  4668. +
  4669. +# Pet summons on login if player had it summoned before logout
  4670. +# Default: True
  4671. +RestorePetOnReconnect = True
  4672. +
  4673. +# ---------------------------------------------------------------------------
  4674. +# Vitality configuration
  4675. +# ---------------------------------------------------------------------------
  4676. +
  4677. +# Enables vitality system
  4678. +# Default: True
  4679. +EnableVitality = True
  4680. +
  4681. +# Do you want players to recover their vitality when they reconnect?
  4682. +# This is calculated with the time they've been offline
  4683. +# Actual Time - Last Time Online / 1000 x rate recovery on reconnect
  4684. +# Notes:
  4685. +#  Works only if EnableVitality = True
  4686. +# Default: True
  4687. +RecoverVitalityOnReconnect = True
  4688. +
  4689. +# Option to set a lower vitality at character creation.
  4690. +# Vitality needs to be enabled, and startingpoints needs to be lower
  4691. +# than max-vitality points.
  4692. +# Default: 20000
  4693. +StartingVitalityPoints = 20000
  4694. +
  4695. +
  4696. +# ---------------------------------------------------------------------------
  4697. +# Limits
  4698. +# ---------------------------------------------------------------------------
  4699. +
  4700. +# Maximum Exp Bonus.
  4701. +# from vitality + nevit's hunting bonus, and etc..
  4702. +# Default: 3.5
  4703. +MaxExpBonus = 3.5
  4704. +
  4705. +# Maximum Sp Bonus.
  4706. +# from vitality + nevit's hunting bonus, and etc..
  4707. +# Default: 3.5
  4708. +MaxSpBonus = 3.5
  4709. +
  4710. +# Maximum character running speed.
  4711. +# Default: 250
  4712. +MaxRunSpeed = 250
  4713. +
  4714. +# Maximum character Physical Critical Rate. (10 = 1%)
  4715. +# Default: 500
  4716. +MaxPCritRate = 500
  4717. +
  4718. +# Maximum character Magic Critical Rate. (10 = 1%)
  4719. +# Default: 200
  4720. +MaxMCritRate = 200
  4721. +
  4722. +# Maximum character Attack Speed.
  4723. +# Default: 1500
  4724. +MaxPAtkSpeed = 1500
  4725. +
  4726. +# Maximum character Cast Speed.
  4727. +# Default: 1999
  4728. +MaxMAtkSpeed = 1999
  4729. +
  4730. +# Maximum character Evasion.
  4731. +# Default: 250
  4732. +MaxEvasion = 250
  4733. +
  4734. +# Minimum and Maximum Abnormal State Success Rate.
  4735. +# This affect all skills/effects chances, except in skills where minChance or maxChance parameters are defined.
  4736. +# Default: H5 minimum of 10% and maximum of 90%.
  4737. +MinAbnormalStateSuccessRate = 10
  4738. +MaxAbnormalStateSuccessRate = 90
  4739. +
  4740. +# It's possible to customize the maximum level
  4741. +# Above the default requires extra data
  4742. +
  4743. +# Maximum player level
  4744. +# Default: 85
  4745. +MaxPlayerLevel = 85
  4746. +
  4747. +# Maximum pet level
  4748. +# Default: 86
  4749. +MaxPetLevel = 86
  4750. +
  4751. +# Maximum number of allowed subclasses for every player.
  4752. +# Default: 3
  4753. +MaxSubclass = 3
  4754. +
  4755. +# Starting level for subclasses.
  4756. +# Default: 40
  4757. +BaseSubclassLevel = 40
  4758. +
  4759. +# Maximum subclass level.
  4760. +# Default: 80
  4761. +MaxSubclassLevel = 80
  4762. +
  4763. +# Maximum number of allowed slots for Private Stores Sell.
  4764. +# Other means all the other races aside from Dwarf.
  4765. +# Default: 4, 3
  4766. +MaxPvtStoreSellSlotsDwarf = 4
  4767. +MaxPvtStoreSellSlotsOther = 3
  4768. +
  4769. +# Maximum number of allowed slots for Private Stores Buy.
  4770. +# Other means all the other races aside from Dwarf.
  4771. +# Default: 5, 4
  4772. +MaxPvtStoreBuySlotsDwarf = 5
  4773. +MaxPvtStoreBuySlotsOther = 4
  4774. +
  4775. +# This will control the inventory space limit (NOT WEIGHT LIMIT).
  4776. +# Default: 80, 100, 250
  4777. +MaximumSlotsForNoDwarf = 80
  4778. +MaximumSlotsForDwarf = 100
  4779. +MaximumSlotsForGMPlayer = 250
  4780. +MaximumSlotsForQuestItems = 100
  4781. +
  4782. +# This will control a character's warehouse capacity.
  4783. +# Notes:
  4784. +#  This must be LESS then 300 or the client will crash.
  4785. +# Default: 120, 100, 200, 20
  4786. +MaximumWarehouseSlotsForDwarf = 120
  4787. +MaximumWarehouseSlotsForNoDwarf = 100
  4788. +MaximumWarehouseSlotsForClan = 200
  4789. +
  4790. +# Freight
  4791. +# Maximum items that can be placed in Freight
  4792. +# Default: 200
  4793. +MaximumFreightSlots = 200
  4794. +# The price for each item that's deposited
  4795. +# Default: 1000
  4796. +FreightPrice = 1000
  4797. +
  4798. +# Npc talk blockage. When a player talks to a NPC, he must wait some secs
  4799. +# before being able to walk again. In seconds
  4800. +# Default: 3
  4801. +# Set to 0 to disable it
  4802. +NpcTalkBlockingTime = 3
  4803. +
  4804. +# ---------------------------------------------------------------------------
  4805. +# Enchanting
  4806. +# ---------------------------------------------------------------------------
  4807. +# This controls the chance an item has to break if it is enchanted.
  4808. +# This chance is in %, so if you set this to 100%, enchants will always succeed.
  4809. +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  4810. +EnchantChanceElementStone = 50
  4811. +EnchantChanceElementCrystal = 30
  4812. +EnchantChanceElementJewel = 20
  4813. +EnchantChanceElementEnergy = 10
  4814. +
  4815. +# List of non-enchantable items.
  4816. +# Currently apprentice, travelers weapons and Pailaka items
  4817. +# Default: 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
  4818. +EnchantBlackList = 7816,7817,7818,7819,7820,7821,7822,7823,7824,7825,7826,7827,7828,7829,7830,7831,13293,13294,13296
  4819. +
  4820. +# ---------------------------------------------------------------------------
  4821. +# Augmenting
  4822. +# ---------------------------------------------------------------------------
  4823. +# These control the chance to get a skill in the augmentation process.
  4824. +# Default: 15, 30, 45, 60
  4825. +AugmentationNGSkillChance = 15
  4826. +AugmentationMidSkillChance = 30
  4827. +AugmentationHighSkillChance = 45
  4828. +AugmentationTopSkillChance = 60
  4829. +# Accessory augmentation skills currently disabled
  4830. +AugmentationAccSkillChance = 0
  4831. +
  4832. +# This controls the chance to get a base stat modifier in the augmentation process.
  4833. +# Notes:
  4834. +#  This has no dependency on the grade of Life Stone.
  4835. +# Default: 1
  4836. +AugmentationBaseStatChance = 1
  4837. +
  4838. +# These control the chance to get a glow effect in the augmentation process.
  4839. +# Notes:
  4840. +#  No/Mid Grade Life Stone can not have glow effect if you do not get a skill or base stat modifier.
  4841. +# Default: 0, 40, 70, 100
  4842. +AugmentationNGGlowChance = 0
  4843. +AugmentationMidGlowChance = 40
  4844. +AugmentationHighGlowChance = 70
  4845. +AugmentationTopGlowChance = 100
  4846. +
  4847. +# This will enable retail like weapon augmentation, but then you cant change
  4848. +# weapon glow, base stat chance, because it wouldnt be retail like again.
  4849. +RetailLikeAugmentation = True
  4850. +
  4851. +# This will have effect ONLY when RetailLikeAugmentation is True. The sum of 4 numbers must be 100!
  4852. +# You can change probability (in %) of augment color chances - in order yellow, blue, purple, red
  4853. +# Purple and Red always give skill. Default is 55%,35%,7%,3% for all lifestone grades (ie 7+3=10%
  4854. +# for skill, not counting blue ones, that are very rare and not useful anyway).
  4855. +RetailLikeAugmentationNoGradeChance = 55,35,7,3
  4856. +RetailLikeAugmentationMidGradeChance = 55,35,7,3
  4857. +RetailLikeAugmentationHighGradeChance = 55,35,7,3
  4858. +RetailLikeAugmentationTopGradeChance = 55,35,7,3
  4859. +
  4860. +# This will enable retail like accessory augmentation, but then you cant change skill chances for accessory augments
  4861. +RetailLikeAugmentationAccessory = True
  4862. +
  4863. +# List of non-augmentable items, currently contains only Grand Boss jewels
  4864. +# Shadow, common, time-limited, hero, pvp, wear items are hardcoded, as well as all etcitems.
  4865. +# Rods can't be augmented too.
  4866. +# Default: 6656,6657,6658,6659,6660,6661,6662,8191,10170,10314
  4867. +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
  4868. +
  4869. +# Allows alternative augmentation of PvP items.
  4870. +# Default: False
  4871. +AltAllowAugmentPvPItems = false
  4872. +
  4873. +# ---------------------------------------------------------------------------
  4874. +# Karma
  4875. +# ---------------------------------------------------------------------------
  4876. +
  4877. +# Karma player can be killed in Peace zone.
  4878. +# Default: False
  4879. +AltKarmaPlayerCanBeKilledInPeaceZone = False
  4880. +
  4881. +# Karma player can use GateKeeper.
  4882. +# Default: False
  4883. +AltKarmaPlayerCanUseGK = False
  4884. +
  4885. +# Karma player can use escape and recall skills.
  4886. +# Default: True
  4887. +AltKarmaPlayerCanTeleport = True
  4888. +
  4889. +# Karma player can shop.
  4890. +# Default: True
  4891. +AltKarmaPlayerCanShop = True
  4892. +
  4893. +# Karma player can trade.
  4894. +# Default: True
  4895. +AltKarmaPlayerCanTrade = True
  4896. +
  4897. +# Karma player can use warehouse.
  4898. +# Default: True
  4899. +AltKarmaPlayerCanUseWareHouse = True
  4900. +
  4901. +
  4902. +# ---------------------------------------------------------------------------
  4903. +# Fame
  4904. +# ---------------------------------------------------------------------------
  4905. +
  4906. +# The maximum number of Fame points a player can have
  4907. +# Default: 100000
  4908. +MaxPersonalFamePoints = 100000
  4909. +
  4910. +# How frequently the player gets Fame points while in a Fortress Siege zone
  4911. +# Default: 300s (5 min)
  4912. +FortressZoneFameTaskFrequency = 300
  4913. +
  4914. +# How much Fame aquired while in a Fortress Siege Zone
  4915. +# Default: 31
  4916. +FortressZoneFameAquirePoints = 31
  4917. +
  4918. +# How frequently the player gets Fame points while in a Castle Siege zone
  4919. +# Default: 300s (5 min)
  4920. +CastleZoneFameTaskFrequency = 300
  4921. +
  4922. +# How much Fame acquired while in a Castle Siege Zone
  4923. +# Default: 125
  4924. +CastleZoneFameAquirePoints = 125
  4925. +
  4926. +# Dead players can receive fame.
  4927. +# Default: True
  4928. +FameForDeadPlayers = True
  4929. +
  4930. +# ---------------------------------------------------------------------------
  4931. +# Crafting
  4932. +# ---------------------------------------------------------------------------
  4933. +
  4934. +# Option to enable or disable crafting.
  4935. +# Default: True
  4936. +CraftingEnabled = True
  4937. +
  4938. +# Enable/Disable crafting of Masterwork items (If set to true, masterwork items can be created when crafting).
  4939. +# Default: True
  4940. +CraftMasterwork = True
  4941. +
  4942. +# Limits for recipes
  4943. +# Default: 50, 50
  4944. +DwarfRecipeLimit = 50
  4945. +CommonRecipeLimit = 50
  4946. +
  4947. +# Alternative crafting rules. If enabled, the following will be true:
  4948. +#  Crafting takes time.
  4949. +#  Players get EXP/SP for crafting.
  4950. +# Default: False
  4951. +AltGameCreation = False
  4952. +
  4953. +# Crafting Time multiplier.
  4954. +# The higher the number, the more time the crafting process takes. XP/SP reward increases with time.
  4955. +# Default: 1
  4956. +AltGameCreationSpeed = 1
  4957. +
  4958. +# Additional crafting XP/SP rate multiplier.
  4959. +# Default: 1, 1
  4960. +AltGameCreationXpRate = 1
  4961. +AltGameCreationSpRate = 1
  4962. +
  4963. +# Additional XP/SP rate multiplier when creating rare item.
  4964. +# Default: 2
  4965. +AltGameCreationRareXpSpRate = 2
  4966. +
  4967. +# If set to False, blacksmiths don't take recipes from players inventory when crafting.
  4968. +# Default: True
  4969. +AltBlacksmithUseRecipes = True
  4970. +
  4971. +# Store/Restore Dwarven Manufacture list
  4972. +# Keep manufacture shoplist after relog
  4973. +# Default: False
  4974. +StoreRecipeShopList = False
  4975. +
  4976. +# ---------------------------------------------------------------------------
  4977. +# Clan
  4978. +# ---------------------------------------------------------------------------
  4979. +
  4980. +# Day on which all pending clan leader requests will be applied:
  4981. +# Possible values:
  4982. +# 1 - Sunday
  4983. +# 2 - Monday
  4984. +# 3 - Tuesday
  4985. +# 4 - Wednesday
  4986. +# 5 - Thursday
  4987. +# 6 - Friday
  4988. +# 7 - Saturday
  4989. +# Default: 3
  4990. +AltClanLeaderDateChange = 3
  4991. +
  4992. +# Hour on which all pending data requests will be applied:
  4993. +# Format: Hour:Minute:Second
  4994. +# Default: 00:00:00
  4995. +AltClanLeaderHourChange = 00:00:00
  4996. +
  4997. +# When enabled all clan leader requests will be performed instantly.
  4998. +# Default: False
  4999. +AltClanLeaderInstantActivation = False
  5000. +
  5001. +# Number of days you have to wait before joining another clan.
  5002. +# Default: 1
  5003. +DaysBeforeJoinAClan = 1
  5004. +
  5005. +# Number of days you have to wait before creating a new clan.
  5006. +# Default: 10
  5007. +DaysBeforeCreateAClan = 10
  5008. +
  5009. +# Number of days it takes to dissolve a clan.
  5010. +# Default: 7
  5011. +DaysToPassToDissolveAClan = 7
  5012. +
  5013. +# Number of days before joining a new alliance when clan voluntarily leave an alliance.
  5014. +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  5015. +# Default: 1
  5016. +DaysBeforeJoinAllyWhenLeaved = 1
  5017. +
  5018. +# Number of days before joining a new alliance when clan was dismissed from an alliance.
  5019. +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  5020. +# Default: 1
  5021. +DaysBeforeJoinAllyWhenDismissed = 1
  5022. +
  5023. +# Number of days before accepting a new clan for alliance when clan was dismissed from an alliance.
  5024. +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  5025. +# Default: 1
  5026. +DaysBeforeAcceptNewClanWhenDismissed = 1
  5027. +
  5028. +# Number of days before creating a new alliance after dissolving an old alliance.
  5029. +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  5030. +# Default: 1
  5031. +DaysBeforeCreateNewAllyWhenDissolved = 1
  5032. +
  5033. +# Maximum number of clans in alliance.
  5034. +# Default: 3
  5035. +AltMaxNumOfClansInAlly = 3
  5036. +
  5037. +# Allow clan members to withdraw from the clan warehouse.
  5038. +# Default: False
  5039. +AltMembersCanWithdrawFromClanWH = False
  5040. +
  5041. +# Remove castle circlets after a clan loses their castle or a player leaves a clan.
  5042. +# Default: True
  5043. +RemoveCastleCirclets = True
  5044. +
  5045. +# Number of members needed to request a clan war.
  5046. +# Default: 15
  5047. +AltClanMembersForWar = 15
  5048. +
  5049. +
  5050. +# ---------------------------------------------------------------------------
  5051. +# Party
  5052. +# ---------------------------------------------------------------------------
  5053. +
  5054. +# CONFUSING(nothing to do with party) -> When you made damage to a mob
  5055. +# and are inside this range, you will be considered as player to reward.
  5056. +# Checks for party range to mob to calculate rewards(exp, items).
  5057. +# Default: 1600
  5058. +AltPartyRange = 1600
  5059. +
  5060. +# 1. Used for Adena distribution in party
  5061. +# 2. Used to handle random and by turn party loot
  5062. +# Default: 1400
  5063. +AltPartyRange2 = 1400
  5064. +
  5065. +# If true, when party leader leaves party, next member in party will be the leader.
  5066. +# If false the party be will dispersed.
  5067. +# Default: False
  5068. +AltLeavePartyLeader = False
  5069. +
  5070. +
  5071. +# ---------------------------------------------------------------------------
  5072. +# Initial Settings:
  5073. +# ---------------------------------------------------------------------------
  5074. +
  5075. +#Initial Equipment Events is to enable a special settings for the items that a new character starts with.
  5076. +#Default: False
  5077. +InitialEquipmentEvent = False
  5078. +
  5079. +# This is the amount of Adena that a new character starts their character with.
  5080. +# Default: 0
  5081. +StartingAdena = 0
  5082. +
  5083. +# This is the starting level of the new character.
  5084. +# Default: 1
  5085. +StartingLevel = 1
  5086. +
  5087. +# This is the amount of SP that a new character starts their character with.
  5088. +# Default: 0
  5089. +StartingSP = 0
  5090. +
  5091. +# ---------------------------------------------------------------------------
  5092. +# Other Settings:
  5093. +# ---------------------------------------------------------------------------
  5094. +
  5095. +# This is the maximum amount of Adena that character can have in his inventory or warehouse.
  5096. +# The maximum input amount is 9,223,372,036,854,775,807. (nine quintillion
  5097. +# two hundred twenty three quadrillion three hundred seventy two trillion thirty six billion
  5098. +# eight hundred fifty four million seven hundred seventy five thousand eight hundred seven)
  5099. +# Setting negative values (-1 or others) will result in maximum amount available.
  5100. +# Big values do not cause critical errors, although only 16 digits are visible in the inventory
  5101. +# (example: 3,372,036,854,775,807 is visible out of 9,223,372,036,854,775,807)
  5102. +# Default: 99900000000 (99 bilion and 900 milion)
  5103. +MaxAdena = 99900000000
  5104. +
  5105. +# This option, when set to True, will enable automatically picking up items.
  5106. +# If set False it will force the player to pickup dropped items from mobs.
  5107. +# This excludes herbs mentioned above and items from Raid/GrandBosses with minions.
  5108. +# Default: False
  5109. +AutoLoot = False
  5110. +
  5111. +# This option, when set to True, will enable automatically picking up items from Raid/GrandBosses with minions.
  5112. +# If set False it will force the player to pickup dropped items from bosses.
  5113. +# This excludes herbs mentioned above and items from mobs.
  5114. +# Default: False
  5115. +AutoLootRaids = False
  5116. +
  5117. +# Delay for raid drop items loot privilege
  5118. +# Require Command Channel , check next option
  5119. +# Value is in seconds
  5120. +# Default: 900 (15min)
  5121. +RaidLootRightsInterval = 900
  5122. +
  5123. +# Minimal size of Command Channel for apply raid loot privilege
  5124. +# Default: 45
  5125. +RaidLootRightsCCSize = 45
  5126. +
  5127. +# This is the time in seconds that it will take for the player command "/unstuck" to activate.
  5128. +# Default: 300
  5129. +UnstuckInterval = 300
  5130. +
  5131. +# Teleport Watchdog Timeout (seconds)
  5132. +# Player forced to appear if remain in teleported state longer than timeout
  5133. +# Does not set too low, recommended value 60s.
  5134. +# This time is in seconds, leave it at 0 if you want this feature disabled.
  5135. +# Default: 0
  5136. +TeleportWatchdogTimeout = 0
  5137. +
  5138. +# After a player teleports, this is the time the player is protected.
  5139. +# This time is in seconds, leave it at 0 if you want this feature disabled.
  5140. +# Retail (Since GE): 600 (10 minutes)
  5141. +# Default: 600
  5142. +PlayerSpawnProtection = 600
  5143. +
  5144. +# Spawn protection should disappear with any action with the exception
  5145. +# of the item usage from items in this list.
  5146. +# Format: itemId,itemId,itemId,....
  5147. +# Default: 0
  5148. +PlayerSpawnProtectionAllowedItems =
  5149. +
  5150. +# Teleport spawn protection time. It will protect the player in the
  5151. +# teleport spawn for the given time. 0 to disable feature
  5152. +PlayerTeleportProtection = 0
  5153. +
  5154. +# If enabled, players respawn in town on different locations defined in zone.xml for given town.
  5155. +# If disabled the first spawn location from zone.xml is used.
  5156. +# Default: True
  5157. +RandomRespawnInTownEnabled = True
  5158. +
  5159. +# This will allow a random offset from the base teleport location coordinates based on a maximum offset.
  5160. +# Default: True
  5161. +OffsetOnTeleportEnabled = True
  5162. +
  5163. +# Maximum offset for base teleport location when OffsetOnTeleportEnabled is enabled .
  5164. +# Default: 50
  5165. +MaxOffsetOnTeleport = 50
  5166. +
  5167. +# This option is to enable or disable the use of in game petitions.
  5168. +# The MaxPetitionsPerPlayer is the amount of petitions a player can make.
  5169. +# The MaximumPendingPetitions is the total amount of petitions in the server.
  5170. +# Note:
  5171. +#  Logically, MaximumPendingPetitions must be higher then MaxPetitionsPerPlayer.
  5172. +# Default: True, 5, 25
  5173. +PetitioningAllowed = True
  5174. +MaxPetitionsPerPlayer = 5
  5175. +MaxPetitionsPending = 25
  5176. +
  5177. +# Free teleporting around the world.
  5178. +# Default: False
  5179. +AltFreeTeleporting = False
  5180. +
  5181. +# Allow character deletion after days set below. To disallow character deletion, set this equal to 0.
  5182. +# Default: 7
  5183. +DeleteCharAfterDays = 7
  5184. +
  5185. +# Alternative Xp/Sp rewards, if not 0, then calculated as 2^((mob.level-player.level) / coef). Coef are the 2 numbers set below.
  5186. +# A few examples for "AltGameExponentXp = 5." and "AltGameExponentSp = 3.":
  5187. +#  diff = 0 (player and mob has the same level), XP bonus rate = 1, SP bonus rate = 1
  5188. +#  diff = 3 (mob is 3 levels above), XP bonus rate = 1.52, SP bonus rate = 2
  5189. +#  diff = 5 (mob is 5 levels above), XP bonus rate = 2, SP bonus rate = 3.17
  5190. +#  diff = -8 (mob is 8 levels below), XP bonus rate = 0.4, SP bonus rate = 0.16
  5191. +# Default: 0, 0
  5192. +AltGameExponentXp = 0
  5193. +AltGameExponentSp = 0
  5194. +
  5195. +
  5196. +# PARTY XP DISTRIBUTION
  5197. +# 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).
  5198. +# In that case he will not receive any Exp/SP from party and is not counted for party bonus.
  5199. +# If you don't want to have a cutoff point for party members' XP distribution, set the first option to "none".
  5200. +# Available Options: highfive, auto, level, percentage, none
  5201. +# Default: highfive
  5202. +PartyXpCutoffMethod = highfive
  5203. +
  5204. +# This option takes effect when "percentage" method is chosen. Don't use high values for this!
  5205. +# Default: 3.0
  5206. +PartyXpCutoffPercent = 3.0
  5207. +
  5208. +# This option takes effect when "level" method is chosen. Don't use low values for this!
  5209. +# Default: 20
  5210. +PartyXpCutoffLevel = 20
  5211. +
  5212. +# This option takes effect when "highfive" method is chosen.
  5213. +# Each pair of numbers represent a level range.
  5214. +# If the gap is between the first pair, there is no penalty.
  5215. +# If the gap is between the second pair, the lowest party member will gain only 30% of the XP that others receive.
  5216. +# If the gap is between the last pair, the lowest party member will not receive any XP.
  5217. +# Default: 0,9;10,14;15,99
  5218. +PartyXpCutoffGaps = 0,9;10,14;15,99
  5219. +
  5220. +# This option takes effect when "highfive" method is chosen.
  5221. +# Each number represent the XP percent gain at that level gap.
  5222. +# For the first gap, the lowest party member will gain 100% XP as there is no penalty.
  5223. +# For the second gap, the lowest party member will gain only 30% of the XP that others receive.
  5224. +# For the last gap, the lowest party member will not receive any XP.
  5225. +# Default: 100;30;0
  5226. +PartyXpCutoffGapPercent = 100;30;0
  5227. +
  5228. +# Disable tutorial on new player enter into Game
  5229. +# Please remember its sometimes important to novice players
  5230. +# Default: False
  5231. +DisableTutorial = False
  5232. +
  5233. +# Expertise penalty
  5234. +# If disabled, player will not receive penalty for equip higher grade items
  5235. +# Default: True
  5236. +ExpertisePenalty = True
  5237. +
  5238. +# Player can in client define his own key mapping and for save it must be stored server side.
  5239. +# Disabled until confirmed as working.
  5240. +# Default: False
  5241. +StoreCharUiSettings = False
  5242. +
  5243. +# Character name restriction
  5244. +# Disallow characters to have a name which contains the words.
  5245. +# Split them with ",". Use lowercase. Example: announcements,announce...
  5246. +# Default: annou,ammou,amnou,anmou,anou,amou,announcements,announce
  5247. +ForbiddenNames = annou,ammou,amnou,anmou,anou,amou,announcements,announce
  5248. +
  5249. +# If enabled, when character in silence (block PMs) mode sends a PM to a character, silence mode no longer blocks this character,
  5250. +# allowing both characters send each other PMs even with enabled silence mode.
  5251. +# The exclude list is cleared each time the character goes into silence mode.
  5252. +SilenceModeExclude = False
  5253. +
  5254. +# Enables alternative validation of triggering skills.
  5255. +# When enabled pvp skills will not be casted on non flagged player.
  5256. +# Sadly its non-retail
  5257. +# Default: False
  5258. +AltValidateTriggerSkills = False
  5259. diff --git a/dist/game/config/default/ConquerableHallSiege.properties b/dist/game/config/default/ConquerableHallSiege.properties
  5260. new file mode 100644
  5261. index 0000000..583d5d5
  5262. --- /dev/null
  5263. +++ b/dist/game/config/default/ConquerableHallSiege.properties
  5264. @@ -0,0 +1,24 @@
  5265. +# --------------------------------------------------
  5266. +# Contestable halls general configuration
  5267. +# --------------------------------------------------
  5268. +
  5269. +# Min level that each clan needs to register
  5270. +# for the siege
  5271. +MinClanLevel = 4
  5272. +
  5273. +# Max number of clans allowed to register for
  5274. +# the battle
  5275. +MaxAttackers = 500
  5276. +
  5277. +# Max numbers of flags that each clan is allowed
  5278. +# to put
  5279. +MaxFlagsPerClan = 1
  5280. +
  5281. +# Enable the fame reward
  5282. +EnableFame = false
  5283. +
  5284. +# Fame amount
  5285. +FameAmount = 0
  5286. +
  5287. +# Fame Frequency
  5288. +FameFrequency = 0
  5289. diff --git a/dist/game/config/default/Feature.properties b/dist/game/config/default/Feature.properties
  5290. new file mode 100644
  5291. index 0000000..d8a6bf0
  5292. --- /dev/null
  5293. +++ b/dist/game/config/default/Feature.properties
  5294. @@ -0,0 +1,396 @@
  5295. +# ---------------------------------------------------------------------------
  5296. +# Alternative Feature Settings
  5297. +# ---------------------------------------------------------------------------
  5298. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  5299. +# Warning:
  5300. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  5301. +# ---------------------------------------------------------------------------
  5302. +# Castle
  5303. +# ---------------------------------------------------------------------------
  5304. +
  5305. +# Siege Time rules
  5306. +# Which hours can change Castle Lords
  5307. +# Default: 16,20
  5308. +SiegeHourList = 16,20
  5309. +
  5310. +# Teleport Function price
  5311. +# Price = 7 days
  5312. +CastleTeleportFunctionFeeRatio = 604800000
  5313. +CastleTeleportFunctionFeeLvl1 = 1000
  5314. +CastleTeleportFunctionFeeLvl2 = 10000
  5315. +
  5316. +# Support magic buff price
  5317. +# Price = 7 day
  5318. +CastleSupportFunctionFeeRatio = 604800000
  5319. +CastleSupportFeeLvl1 = 49000
  5320. +CastleSupportFeeLvl2 = 120000
  5321. +
  5322. +# MP Regeneration price
  5323. +# Price = 7 day
  5324. +CastleMpRegenerationFunctionFeeRatio = 604800000
  5325. +CastleMpRegenerationFeeLvl1 = 45000
  5326. +CastleMpRegenerationFeeLvl2 = 65000
  5327. +
  5328. +# Hp Regeneration price
  5329. +# Price = 7 day
  5330. +CastleHpRegenerationFunctionFeeRatio = 604800000
  5331. +CastleHpRegenerationFeeLvl1 = 12000
  5332. +CastleHpRegenerationFeeLvl2 = 20000
  5333. +
  5334. +# Exp Regeneration price
  5335. +# Price = 7 day
  5336. +CastleExpRegenerationFunctionFeeRatio = 604800000
  5337. +CastleExpRegenerationFeeLvl1 = 63000
  5338. +CastleExpRegenerationFeeLvl2 = 70000
  5339. +
  5340. +# Outer Door upgrade price
  5341. +OuterDoorUpgradePriceLvl2 = 3000000
  5342. +OuterDoorUpgradePriceLvl3 = 4000000
  5343. +OuterDoorUpgradePriceLvl5 = 5000000
  5344. +
  5345. +# Inner Door upgrade price
  5346. +InnerDoorUpgradePriceLvl2 = 750000
  5347. +InnerDoorUpgradePriceLvl3 = 900000
  5348. +InnerDoorUpgradePriceLvl5 = 1000000
  5349. +
  5350. +# Wall upgrade price
  5351. +WallUpgradePriceLvl2 = 1600000
  5352. +WallUpgradePriceLvl3 = 1800000
  5353. +WallUpgradePriceLvl5 = 2000000
  5354. +
  5355. +# Trap upgrade price
  5356. +TrapUpgradePriceLvl1 = 3000000
  5357. +TrapUpgradePriceLvl2 = 4000000
  5358. +TrapUpgradePriceLvl3 = 5000000
  5359. +TrapUpgradePriceLvl4 = 6000000
  5360. +
  5361. +# ---------------------------------------------------------------------------
  5362. +# Clan Hall
  5363. +# ---------------------------------------------------------------------------
  5364. +
  5365. +# Teleport Function price
  5366. +# Price = 7 days
  5367. +ClanHallTeleportFunctionFeeRatio = 604800000
  5368. +ClanHallTeleportFunctionFeeLvl1 = 7000
  5369. +ClanHallTeleportFunctionFeeLvl2 = 14000
  5370. +
  5371. +# Support magic buff price
  5372. +# Price = 1 day
  5373. +ClanHallSupportFunctionFeeRatio = 86400000
  5374. +ClanHallSupportFeeLvl1 = 2500
  5375. +ClanHallSupportFeeLvl2 = 5000
  5376. +ClanHallSupportFeeLvl3 = 7000
  5377. +ClanHallSupportFeeLvl4 = 11000
  5378. +ClanHallSupportFeeLvl5 = 21000
  5379. +ClanHallSupportFeeLvl6 = 36000
  5380. +ClanHallSupportFeeLvl7 = 37000
  5381. +ClanHallSupportFeeLvl8 = 364000
  5382. +
  5383. +# MP Regeneration price
  5384. +# Price = 1 day
  5385. +ClanHallMpRegenerationFunctionFeeRatio = 86400000
  5386. +ClanHallMpRegenerationFeeLvl1 = 2000
  5387. +ClanHallMpRegenerationFeeLvl2 = 3750
  5388. +ClanHallMpRegenerationFeeLvl3 = 6500
  5389. +ClanHallMpRegenerationFeeLvl4 = 13750
  5390. +ClanHallMpRegenerationFeeLvl5 = 20000
  5391. +
  5392. +# Hp Regeneration price
  5393. +# Price = 1 day
  5394. +ClanHallHpRegenerationFunctionFeeRatio = 86400000
  5395. +ClanHallHpRegenerationFeeLvl1 = 700
  5396. +ClanHallHpRegenerationFeeLvl2 = 800
  5397. +ClanHallHpRegenerationFeeLvl3 = 1000
  5398. +ClanHallHpRegenerationFeeLvl4 = 1166
  5399. +ClanHallHpRegenerationFeeLvl5 = 1500
  5400. +ClanHallHpRegenerationFeeLvl6 = 1750
  5401. +ClanHallHpRegenerationFeeLvl7 = 2000
  5402. +ClanHallHpRegenerationFeeLvl8 = 2250
  5403. +ClanHallHpRegenerationFeeLvl9 = 2500
  5404. +ClanHallHpRegenerationFeeLvl10 = 3250
  5405. +ClanHallHpRegenerationFeeLvl11 = 3750
  5406. +ClanHallHpRegenerationFeeLvl12 = 4250
  5407. +ClanHallHpRegenerationFeeLvl13 = 5166
  5408. +
  5409. +# Exp Regeneration price
  5410. +# Price = 1 day
  5411. +ClanHallExpRegenerationFunctionFeeRatio = 86400000
  5412. +ClanHallExpRegenerationFeeLvl1 = 3000
  5413. +ClanHallExpRegenerationFeeLvl2 = 6000
  5414. +ClanHallExpRegenerationFeeLvl3 = 9000
  5415. +ClanHallExpRegenerationFeeLvl4 = 15000
  5416. +ClanHallExpRegenerationFeeLvl5 = 21000
  5417. +ClanHallExpRegenerationFeeLvl6 = 23330
  5418. +ClanHallExpRegenerationFeeLvl7 = 30000
  5419. +
  5420. +# Creation item function
  5421. +# Price = 1 day
  5422. +ClanHallItemCreationFunctionFeeRatio = 86400000
  5423. +ClanHallItemCreationFunctionFeeLvl1 = 30000
  5424. +ClanHallItemCreationFunctionFeeLvl2 = 70000
  5425. +ClanHallItemCreationFunctionFeeLvl3 = 140000
  5426. +
  5427. +# Curtains Decoration
  5428. +# Price = 7 days
  5429. +ClanHallCurtainFunctionFeeRatio = 604800000
  5430. +ClanHallCurtainFunctionFeeLvl1 = 2000
  5431. +ClanHallCurtainFunctionFeeLvl2 = 2500
  5432. +
  5433. +# Fixtures Decoration
  5434. +# Price = 3 days
  5435. +ClanHallFrontPlatformFunctionFeeRatio = 259200000
  5436. +ClanHallFrontPlatformFunctionFeeLvl1 = 1300
  5437. +ClanHallFrontPlatformFunctionFeeLvl2 = 4000
  5438. +
  5439. +# If true Clan Hall buff cost 0 mp.
  5440. +# Default: False
  5441. +AltClanHallMpBuffFree = False
  5442. +
  5443. +# ---------------------------------------------------------------------------
  5444. +# Fortress
  5445. +# ---------------------------------------------------------------------------
  5446. +
  5447. +# Teleport Function price
  5448. +# Price = 7 days
  5449. +FortressTeleportFunctionFeeRatio = 604800000
  5450. +FortressTeleportFunctionFeeLvl1 = 1000
  5451. +FortressTeleportFunctionFeeLvl2 = 10000
  5452. +
  5453. +# Support magic buff price
  5454. +# Price = 1 day
  5455. +FortressSupportFunctionFeeRatio = 86400000
  5456. +FortressSupportFeeLvl1 = 7000
  5457. +FortressSupportFeeLvl2 = 17000
  5458. +
  5459. +# MP Regeneration price
  5460. +# Price = 1 day
  5461. +FortressMpRegenerationFunctionFeeRatio = 86400000
  5462. +FortressMpRegenerationFeeLvl1 = 6500
  5463. +FortressMpRegenerationFeeLvl2 = 9300
  5464. +
  5465. +# Hp Regeneration price
  5466. +# Price = 1 day
  5467. +FortressHpRegenerationFunctionFeeRatio = 86400000
  5468. +FortressHpRegenerationFeeLvl1 = 2000
  5469. +FortressHpRegenerationFeeLvl2 = 3500
  5470. +
  5471. +# Exp Regeneration price
  5472. +# Price = 1 day
  5473. +FortressExpRegenerationFunctionFeeRatio = 86400000
  5474. +FortressExpRegenerationFeeLvl1 = 9000
  5475. +FortressExpRegenerationFeeLvl2 = 10000
  5476. +
  5477. +# This is the time frequently when Fort owner gets Blood Oath, supply level raised and Fort fee is payed
  5478. +# Default 360 mins
  5479. +FortressPeriodicUpdateFrequency = 360
  5480. +
  5481. +# The number of Blood Oath which given to the Fort owner clan when Fort Updater runs
  5482. +# Default: 1
  5483. +FortressBloodOathCount = 1
  5484. +
  5485. +# The maximum Fort supply level
  5486. +# Max lvl what you can define here is 21!
  5487. +# Default: 6
  5488. +FortressMaxSupplyLevel = 6
  5489. +
  5490. +# Fort fee which payed to the Castle
  5491. +# Default: 25000
  5492. +FortressFeeForCastle = 25000
  5493. +
  5494. +# The maximum time while a clan can own a fortress
  5495. +# Deafault: 168 hours
  5496. +FortressMaximumOwnTime = 168
  5497. +
  5498. +
  5499. +# ---------------------------------------------------------------------------
  5500. +# Seven Signs
  5501. +# ---------------------------------------------------------------------------
  5502. +
  5503. +# Determines whether castle ownership is determined by clan or by alliance.
  5504. +# Default is by alliance, as on official servers.
  5505. +AltRequireClanCastle = False
  5506. +
  5507. +# Dawn:
  5508. +# True - Players not owning castle need pay participation fee
  5509. +# False - Anyone can join Dawn
  5510. +AltCastleForDawn = True
  5511. +
  5512. +# Dusk:
  5513. +# True - Players owning castle can not join Dusk side
  5514. +# False - Anyone can join Dusk
  5515. +AltCastleForDusk = True
  5516. +
  5517. +# Minimum Players for participate in SevenSigns Festival.
  5518. +# Default: 5
  5519. +AltFestivalMinPlayer = 5
  5520. +
  5521. +# Maximum seal stone contribution per player during festival.
  5522. +# Default: 1000000
  5523. +AltMaxPlayerContrib = 1000000
  5524. +
  5525. +# Festival Manager Start time (set in milliseconds; 1000 = 1 second).
  5526. +# Default: 2 minutes
  5527. +AltFestivalManagerStart = 120000
  5528. +
  5529. +# Festival Length (set in milliseconds; 1000 = 1 second).
  5530. +# Default: 18 minutes
  5531. +AltFestivalLength = 1080000
  5532. +
  5533. +# Festival Cycle Length.
  5534. +# Default: 38 Minutes (20 minutes wait time + Festival Length) (set in milliseconds; 1000 = 1 second).
  5535. +AltFestivalCycleLength = 2280000
  5536. +
  5537. +# At what point the first festival spawn occurs.
  5538. +# Default: 2 minutes (set in milliseconds; 1000 = 1 second).
  5539. +AltFestivalFirstSpawn = 120000
  5540. +
  5541. +# At what Point the first festival swarm occurs.
  5542. +# Default: 5 minutes (set in milliseconds; 1000 = 1 second).
  5543. +AltFestivalFirstSwarm = 300000
  5544. +
  5545. +# At what Point the second festival spawn occurs.
  5546. +# Default: 9 minutes (set in milliseconds; 1000 = 1 second).
  5547. +AltFestivalSecondSpawn = 540000
  5548. +
  5549. +# At what Point the second festival spawn occurs.
  5550. +# Default: 12 minutes (set in milliseconds; 1000 = 1 second).
  5551. +AltFestivalSecondSwarm = 720000
  5552. +
  5553. +# At what point the chests spawn in.
  5554. +# Default: 15 minutes (set in milliseconds; 1000 = 1 second).
  5555. +AltFestivalChestSpawn = 900000
  5556. +
  5557. +# 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.
  5558. +# Default: 1.1,0.8,1.1,0.8
  5559. +AltDawnGatesPdefMult = 1.1
  5560. +AltDuskGatesPdefMult = 0.8
  5561. +AltDawnGatesMdefMult = 1.1
  5562. +AltDuskGatesMdefMult = 0.8
  5563. +
  5564. +# If this = true only cabal period owners can use merchant and blacksmith of mammon.
  5565. +# If false any player can use.
  5566. +# Default: True
  5567. +StrictSevenSigns = True
  5568. +
  5569. +# Save SevenSigns status only each 30 minutes and after period change.
  5570. +# Player info saved only during periodic data store (set by CharacterDataStoreInterval) and logout.
  5571. +# If False then save info and status immediately after changes.
  5572. +# Default: True
  5573. +AltSevenSignsLazyUpdate = True
  5574. +
  5575. +# Total count of available tickets.
  5576. +# Default: 300
  5577. +SevenSignsDawnTicketQuantity = 300
  5578. +
  5579. +# Price of each ticket.
  5580. +# Default: 1000
  5581. +SevenSignsDawnTicketPrice = 1000
  5582. +
  5583. +# Tickets bundle (exchanged in amounts of).
  5584. +# Default: 10
  5585. +SevenSignsDawnTicketBundle = 10
  5586. +
  5587. +# Ticket item Id.
  5588. +# Default: 6388
  5589. +SevenSignsManorsAgreementId = 6388
  5590. +
  5591. +# Fee for joining Dawn
  5592. +SevenSignsJoinDawnFee = 50000
  5593. +
  5594. +
  5595. +# ---------------------------------------------------------------------------
  5596. +# Clan Reputation Points
  5597. +# ---------------------------------------------------------------------------
  5598. +# Reputation score gained by taking Fortress.
  5599. +TakeFortPoints = 200
  5600. +
  5601. +# Reputation score gained by taking Castle.
  5602. +TakeCastlePoints = 1500
  5603. +
  5604. +# Reputation score gained by defended Castle.
  5605. +CastleDefendedPoints = 750
  5606. +
  5607. +# Reputation score gained per clan members of festival winning party.
  5608. +FestivalOfDarknessWin = 200
  5609. +
  5610. +# Reputation score gained for per hero clan members.
  5611. +HeroPoints = 1000
  5612. +
  5613. +# Minimum Reputation score gained after completing 2nd class transfer under Academy.
  5614. +CompleteAcademyMinPoints = 190
  5615. +
  5616. +# Maximum Reputation score gained after completing 2nd class transfer under Academy.
  5617. +CompleteAcademyMaxPoints = 650
  5618. +
  5619. +# Reputation score gained per killed ballista.
  5620. +KillBallistaPoints = 30
  5621. +
  5622. +# Reputation score gained for one Blood Alliance.
  5623. +BloodAlliancePoints = 500
  5624. +
  5625. +# Reputation score gained for 10 Blood Oaths.
  5626. +BloodOathPoints = 200
  5627. +
  5628. +# Reputation score gained for 100 Knight's Epaulettes.
  5629. +KnightsEpaulettePoints = 20
  5630. +
  5631. +# Reputation score gained per clan member listed as top raid killers.
  5632. +1stRaidRankingPoints = 1250
  5633. +2ndRaidRankingPoints = 900
  5634. +3rdRaidRankingPoints = 700
  5635. +4thRaidRankingPoints = 600
  5636. +5thRaidRankingPoints = 450
  5637. +6thRaidRankingPoints = 350
  5638. +7thRaidRankingPoints = 300
  5639. +8thRaidRankingPoints = 200
  5640. +9thRaidRankingPoints = 150
  5641. +10thRaidRankingPoints = 100
  5642. +UpTo50thRaidRankingPoints = 25
  5643. +UpTo100thRaidRankingPoints = 12
  5644. +
  5645. +# Reputation score gained/reduced per kill during a clan war or siege war.
  5646. +ReputationScorePerKill = 1
  5647. +
  5648. +# Reputation score reduced by loosing Fortress in battle.
  5649. +LooseFortPoints = 0
  5650. +
  5651. +# Reputation score reduced by loosing Castle in battle.
  5652. +LooseCastlePoints = 3000
  5653. +
  5654. +# Reputation score reduced by creating Royal Guard.
  5655. +CreateRoyalGuardCost = 5000
  5656. +
  5657. +# Reputation score reduced by creating Knight Unit.
  5658. +CreateKnightUnitCost = 10000
  5659. +
  5660. +# Reputation score reduced by reinforcing Knight Unit (if clan level is 9 or more).
  5661. +ReinforceKnightUnitCost = 5000
  5662. +
  5663. +# Reputation score reduced by increasing clan level.
  5664. +ClanLevel6Cost = 5000
  5665. +ClanLevel7Cost = 10000
  5666. +ClanLevel8Cost = 20000
  5667. +ClanLevel9Cost = 40000
  5668. +ClanLevel10Cost = 40000
  5669. +ClanLevel11Cost = 75000
  5670. +
  5671. +# Number of clan members needed to increase clan level.
  5672. +ClanLevel6Requirement = 30
  5673. +ClanLevel7Requirement = 50
  5674. +ClanLevel8Requirement = 80
  5675. +ClanLevel9Requirement = 120
  5676. +ClanLevel10Requirement = 140
  5677. +ClanLevel11Requirement = 170
  5678. +
  5679. +# ---------------------------------------------------------------------------
  5680. +# Other
  5681. +# ---------------------------------------------------------------------------
  5682. +
  5683. +# Allow riding wyvern ignoring 7 Signs status
  5684. +# This will allow Castle Lords to ride wyvern even when Dusk has won Seal of Strife
  5685. +# Default: False
  5686. +AllowRideWyvernAlways = False
  5687. +
  5688. +# Allow riding wyvern during Castle/Fort Siege
  5689. +# Default: True
  5690. +AllowRideWyvernDuringSiege = True
  5691. \ No newline at end of file
  5692. diff --git a/dist/game/config/default/FloodProtector.properties b/dist/game/config/default/FloodProtector.properties
  5693. new file mode 100644
  5694. index 0000000..44aa685
  5695. --- /dev/null
  5696. +++ b/dist/game/config/default/FloodProtector.properties
  5697. @@ -0,0 +1,124 @@
  5698. +# ---------------------------------------------------------------------------
  5699. +# Floodprotector Options
  5700. +# ---------------------------------------------------------------------------
  5701. +# The following settings can be applied to each feature:
  5702. +# Interval - interval in gameserver ticks (1 tick = 100ms) in which only one request is allowed
  5703. +# LogFlooding - whether flooding should be logged (only first occurrence of flooding and total count of flood requests is logged)
  5704. +# PunishmentLimit - if number of requests within single interval exceeds specified number then the specified punishment is applied (0 = disables punishment feature)
  5705. +# PunishmentType - type of the punishment ('none', 'kick', 'ban', 'jail'), valid only if PunishmentLimit is greater than 0
  5706. +# PunishmentTime - for how many minutes should the player(jail)/account(ban) be punished (0 = forever), valid only for PunishmentType 'jail' or 'ban'
  5707. +
  5708. +# UseItem - item usage flooding
  5709. +# Item usage interval
  5710. +# Disabled to match retail, if you want to enable this protection change the value to 4 for example.
  5711. +# Default: 0
  5712. +FloodProtectorUseItemInterval = 0
  5713. +FloodProtectorUseItemLogFlooding = False
  5714. +FloodProtectorUseItemPunishmentLimit = 0
  5715. +FloodProtectorUseItemPunishmentType = none
  5716. +FloodProtectorUseItemPunishmentTime = 0
  5717. +
  5718. +# RollDice - rolling dice flooding
  5719. +FloodProtectorRollDiceInterval = 42
  5720. +FloodProtectorRollDiceLogFlooding = False
  5721. +FloodProtectorRollDicePunishmentLimit = 0
  5722. +FloodProtectorRollDicePunishmentType = none
  5723. +FloodProtectorRollDicePunishmentTime = 0
  5724. +
  5725. +# Firework - firework flooding
  5726. +FloodProtectorFireworkInterval = 42
  5727. +FloodProtectorFireworkLogFlooding = False
  5728. +FloodProtectorFireworkPunishmentLimit = 0
  5729. +FloodProtectorFireworkPunishmentType = none
  5730. +FloodProtectorFireworkPunishmentTime = 0
  5731. +
  5732. +# ItemPetSummon - item summoning and pet mounting flooding
  5733. +FloodProtectorItemPetSummonInterval = 16
  5734. +FloodProtectorItemPetSummonLogFlooding = False
  5735. +FloodProtectorItemPetSummonPunishmentLimit = 0
  5736. +FloodProtectorItemPetSummonPunishmentType = none
  5737. +FloodProtectorItemPetSummonPunishmentTime = 0
  5738. +
  5739. +# HeroVoice - hero voice flooding
  5740. +FloodProtectorHeroVoiceInterval = 100
  5741. +FloodProtectorHeroVoiceLogFlooding = False
  5742. +FloodProtectorHeroVoicePunishmentLimit = 0
  5743. +FloodProtectorHeroVoicePunishmentType = none
  5744. +FloodProtectorHeroVoicePunishmentTime = 0
  5745. +
  5746. +# GlobalChat - global chat flooding
  5747. +FloodProtectorGlobalChatInterval = 5
  5748. +FloodProtectorGlobalChatLogFlooding = False
  5749. +FloodProtectorGlobalChatPunishmentLimit = 0
  5750. +FloodProtectorGlobalChatPunishmentType = none
  5751. +FloodProtectorGlobalChatPunishmentTime = 0
  5752. +
  5753. +# Subclass - subclass flooding
  5754. +FloodProtectorSubclassInterval = 20
  5755. +FloodProtectorSubclassLogFlooding = False
  5756. +FloodProtectorSubclassPunishmentLimit = 0
  5757. +FloodProtectorSubclassPunishmentType = none
  5758. +FloodProtectorSubclassPunishmentTime = 0
  5759. +
  5760. +# DropItem - drop item flooding
  5761. +FloodProtectorDropItemInterval = 10
  5762. +FloodProtectorDropItemLogFlooding = False
  5763. +FloodProtectorDropItemPunishmentLimit = 0
  5764. +FloodProtectorDropItemPunishmentType = none
  5765. +FloodProtectorDropItemPunishmentTime = 0
  5766. +
  5767. +# ServerBypass - server bypass flooding
  5768. +FloodProtectorServerBypassInterval = 5
  5769. +FloodProtectorServerBypassLogFlooding = False
  5770. +FloodProtectorServerBypassPunishmentLimit = 0
  5771. +FloodProtectorServerBypassPunishmentType = none
  5772. +FloodProtectorServerBypassPunishmentTime = 0
  5773. +
  5774. +# ServerBypass - multisell list request flooding
  5775. +FloodProtectorMultiSellInterval = 1
  5776. +FloodProtectorMultiSellLogFlooding = False
  5777. +FloodProtectorMultiSellPunishmentLimit = 0
  5778. +FloodProtectorMultiSellPunishmentType = none
  5779. +FloodProtectorMultiSellPunishmentTime = 0
  5780. +
  5781. +# All kind of other transactions - to/from pet, private store, warehouse, destroy
  5782. +FloodProtectorTransactionInterval = 10
  5783. +FloodProtectorTransactionLogFlooding = False
  5784. +FloodProtectorTransactionPunishmentLimit = 0
  5785. +FloodProtectorTransactionPunishmentType = none
  5786. +FloodProtectorTransactionPunishmentTime = 0
  5787. +
  5788. +# Manufacture
  5789. +FloodProtectorManufactureInterval = 3
  5790. +FloodProtectorManufactureLogFlooding = False
  5791. +FloodProtectorManufacturePunishmentLimit = 0
  5792. +FloodProtectorManufacturePunishmentType = none
  5793. +FloodProtectorManufacturePunishmentTime = 0
  5794. +
  5795. +# Manor
  5796. +FloodProtectorManorInterval = 30
  5797. +FloodProtectorManorLogFlooding = False
  5798. +FloodProtectorManorPunishmentLimit = 0
  5799. +FloodProtectorManorPunishmentType = none
  5800. +FloodProtectorManorPunishmentTime = 0
  5801. +
  5802. +# SendMail - sending mail interval, 10s on retail
  5803. +FloodProtectorSendMailInterval = 100
  5804. +FloodProtectorSendMailLogFlooding = False
  5805. +FloodProtectorSendMailPunishmentLimit = 0
  5806. +FloodProtectorSendMailPunishmentType = none
  5807. +FloodProtectorSendMailPunishmentTime = 0
  5808. +
  5809. +# CharacterSelect - attempts to load character
  5810. +FloodProtectorCharacterSelectInterval = 30
  5811. +FloodProtectorCharacterSelectLogFlooding = False
  5812. +FloodProtectorCharacterSelectPunishmentLimit = 0
  5813. +FloodProtectorCharacterSelectPunishmentType = none
  5814. +FloodProtectorCharacterSelectPunishmentTime = 0
  5815. +
  5816. +# Item Auction - Request for refresh
  5817. +FloodProtectorItemAuctionInterval = 9
  5818. +FloodProtectorItemAuctionLogFlooding = False
  5819. +FloodProtectorItemAuctionPunishmentLimit = 0
  5820. +FloodProtectorItemAuctionPunishmentType = none
  5821. +FloodProtectorItemAuctionPunishmentTime = 0
  5822. diff --git a/dist/game/config/default/FortSiege.properties b/dist/game/config/default/FortSiege.properties
  5823. new file mode 100644
  5824. index 0000000..a1ba061
  5825. --- /dev/null
  5826. +++ b/dist/game/config/default/FortSiege.properties
  5827. @@ -0,0 +1,277 @@
  5828. +# ---------------------------------------------------------------------------
  5829. +# Fort Siege Settings
  5830. +# ---------------------------------------------------------------------------
  5831. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  5832. +# Warning:
  5833. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  5834. +
  5835. +# ---------------------------------------------------------------------------
  5836. +# Standard Settings
  5837. +# ---------------------------------------------------------------------------
  5838. +
  5839. +# Length of siege before the count down (in minutes).
  5840. +SiegeLength = 60
  5841. +
  5842. +# This defines how long you need to wait until the suspicious merchant will spawn after siege ends (in minutes).
  5843. +# Keep in mind when merchant spawns, the fort can be immediately sieged.
  5844. +# Default: 180
  5845. +SuspiciousMerchantRespawnDelay = 180
  5846. +
  5847. +# This defines how long you have to kill all commanders once you kill the first one (in minutes).
  5848. +# After that time (if all commanders not killed) all commanders and doors get respawned.
  5849. +CountDownLength = 10
  5850. +
  5851. +# Max number of flags per clan.
  5852. +MaxFlags = 1
  5853. +
  5854. +# Minimum clan level needed to sign up.
  5855. +SiegeClanMinLevel = 4
  5856. +
  5857. +#Max number of clans that can register on each side.
  5858. +AttackerMaxClans = 500
  5859. +
  5860. +# This option, if enabled, will enable register Fortress Siege to Castle owners just in territory.
  5861. +# Default: True
  5862. +JustToTerritory = True
  5863. +
  5864. +# ---------------------------------------------------------------------------
  5865. +# Fortress Commander Spawns
  5866. +# ---------------------------------------------------------------------------
  5867. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5868. +# Name - fortress name
  5869. +# N - number - 1: Archer Comander
  5870. +#            - 2: Guard Commander
  5871. +#            - 3: Support Unit Commander
  5872. +#            - 4: Main Machine - not supported yet, used General
  5873. +#            - 5: General - not used yet, will be used once control room is supported
  5874. +# Please keep the correct order of commanders, otherwise client will show wrong occupied barracks.
  5875. +# Control room (main machine) currently emulated in client.
  5876. +# x,y,z - coords
  5877. +# heading
  5878. +# npc_id - id of template
  5879. +
  5880. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5881. +# Name - fortress name
  5882. +# N - number
  5883. +# x,y,z - coords
  5884. +# flag_id - id of combat flag
  5885. +
  5886. +# Shanty Fortress
  5887. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5888. +ShantyCommander1 = -52435,155188,-1768,20000,35683
  5889. +ShantyCommander2 = -52128,157752,-2024,29864,35677
  5890. +ShantyCommander3 = -53944,155433,-2024,7304,35680
  5891. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5892. +ShantyFlag1 = -53086,156493,-1896,9819
  5893. +ShantyFlag2 = -53054,156605,-1896,9819
  5894. +ShantyFlag3 = -53032,156689,-1896,9819
  5895. +
  5896. +# Southern Fortress
  5897. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5898. +SouthernCommander1 = -21328,218864,-2952,0,35719
  5899. +SouthernCommander2 = -22992,218160,-3208,0,35713
  5900. +SouthernCommander3 = -21520,221504,-3208,45328,35716
  5901. +SouthernCommander4 = -22728,221746,-3200,33168,35721
  5902. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5903. +SouthernFlag1 = -22386,219917,-3079,9819
  5904. +SouthernFlag2 = -22386,219798,-3079,9819
  5905. +SouthernFlag3 = -22386,219679,-3079,9819
  5906. +
  5907. +# Hive Fortress
  5908. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5909. +HiveCommander1 = 15152,188128,-2640,0,35752
  5910. +HiveCommander2 = 17984,187536,-2896,45056,35746
  5911. +HiveCommander3 = 16016,189520,-2888,0,35749
  5912. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5913. +HiveFlag1 = 16685,188358,-2770,9819
  5914. +HiveFlag2 = 16761,188306,-2770,9819
  5915. +HiveFlag3 = 16847,188257,-2770,9819
  5916. +
  5917. +# Valley Fortress
  5918. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5919. +ValleyCommander1 = 124768,121856,-2296,0,35788
  5920. +ValleyCommander2 = 124299,123614,-2552,49192,35782
  5921. +ValleyCommander3 = 124768,124640,-2552,54480,35785
  5922. +ValleyCommander4 = 128048,123344,-2536,35028,35790
  5923. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5924. +ValleyFlag1 = 125970,123653,-2429,9819
  5925. +ValleyFlag2 = 126092,123650,-2429,9819
  5926. +ValleyFlag3 = 126205,123648,-2429,9819
  5927. +
  5928. +# Ivory Fortress
  5929. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5930. +IvoryCommander1 = 72400,2896,-2760,0,35821
  5931. +IvoryCommander2 = 73788,5479,-3016,55136,35815
  5932. +IvoryCommander3 = 71264,4144,-3008,0,35818
  5933. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5934. +IvoryFlag1 = 72565,4436,-2888,9819
  5935. +IvoryFlag2 = 72660,4512,-2888,9819
  5936. +IvoryFlag3 = 72759,4594,-2888,9819
  5937. +
  5938. +# Narsell Fortress
  5939. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5940. +NarsellCommander1 = 154704,53856,-2968,0,35852
  5941. +NarsellCommander2 = 155576,56592,-3224,59224,35846
  5942. +NarsellCommander3 = 153328,54848,-3216,5512,35849
  5943. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5944. +NarsellFlag1 = 154567,55397,-3097,9819
  5945. +NarsellFlag2 = 154650,55493,-3097,9819
  5946. +NarsellFlag3 = 154715,55587,-3097,9819
  5947. +
  5948. +# Bayou Fortress
  5949. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5950. +BayouCommander1 = 188624,38240,-3128,0,35888
  5951. +BayouCommander2 = 188160,39920,-3376,49284,35882
  5952. +BayouCommander3 = 188626,41066,-3376,57140,35885
  5953. +BayouCommander4 = 191846,39764,-3368,33020,35890
  5954. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5955. +BayouFlag1 = 189838,40063,-3253,9819
  5956. +BayouFlag2 = 189931,40060,-3253,9819
  5957. +BayouFlag3 = 190052,40062,-3253,9819
  5958. +
  5959. +# White Sands Fortress
  5960. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5961. +WhiteSandsCommander1 = 117216,205648,-3048,0,35921
  5962. +WhiteSandsCommander2 = 118880,203568,-3304,5396,35915
  5963. +WhiteSandsCommander3 = 118560,206560,-3304,48872,35918
  5964. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5965. +WhiteSandsFlag1 = 118640,205151,-3176,9819
  5966. +WhiteSandsFlag2 = 118690,205062,-3176,9819
  5967. +WhiteSandsFlag3 = 118742,204968,-3176,9819
  5968. +
  5969. +# Borderland Fortress
  5970. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5971. +BorderlandCommander1 = 159664,-72224,-2584,0,35957
  5972. +BorderlandCommander2 = 157968,-71659,-2832,59020,35951
  5973. +BorderlandCommander3 = 157312,-70640,-2832,0,35954
  5974. +BorderlandCommander4 = 160194,-68688,-2824,43272,35959
  5975. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5976. +BorderlandFlag1 = 158817,-70229,-2708,9819
  5977. +BorderlandFlag2 = 158883,-70145,-2708,9819
  5978. +BorderlandFlag3 = 158946,-70045,-2708,9819
  5979. +
  5980. +# Swamp Fortress
  5981. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5982. +SwampCommander1 = 71264,-60512,-2504,0,35995
  5983. +SwampCommander2 = 71248,-62352,-2752,12388,35989
  5984. +SwampCommander3 = 68688,-59648,-2752,56012,35992
  5985. +SwampCommander4 = 68005,-60866,-2744,5424,35997
  5986. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5987. +SwampFlag1 = 69829,-61087,-2629,9819
  5988. +SwampFlag2 = 69979,-61144,-2632,9819
  5989. +SwampFlag3 = 70069,-61182,-2629,9819
  5990. +
  5991. +# Archaic Fortress
  5992. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  5993. +ArchaicCommander1 = 109856,-142640,-2672,0,36028
  5994. +ArchaicCommander2 = 109600,-139735,-2928,62612,36022
  5995. +ArchaicCommander3 = 108223,-142209,-2920,8524,36025
  5996. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  5997. +ArchaicFlag1 = 109142,-141243,-2801,9819
  5998. +ArchaicFlag2 = 109184,-141129,-2801,9819
  5999. +ArchaicFlag3 = 109214,-141016,-2801,9819
  6000. +
  6001. +# Floran Fortress
  6002. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6003. +FloranCommander1 = 6528,151872,-2608,0,36064
  6004. +FloranCommander2 = 7006,148242,-2856,32768,36058
  6005. +FloranCommander3 = 4384,150992,-2856,0,36061
  6006. +FloranCommander4 = 5246,152319,-2848,49151,36066
  6007. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6008. +FloranFlag1 = 5293,149624,-2732,9819
  6009. +FloranFlag2 = 5306,149743,-2732,9819
  6010. +FloranFlag3 = 5299,149870,-2732,9819
  6011. +
  6012. +# Cloud Mountain Fortress
  6013. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6014. +CloudMountainCommander1 = -55248,90496,-2536,0,36102
  6015. +CloudMountainCommander2 = -55791,91856,-2792,0,36096
  6016. +CloudMountainCommander3 = -54168,92604,-2784,49196,36099
  6017. +CloudMountainCommander4 = -50913,92259,-2776,41188,36104
  6018. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6019. +CloudMountainFlag1 = -53354,91537,-2664,9819
  6020. +CloudMountainFlag2 = -53237,91537,-2664,9819
  6021. +CloudMountainFlag3 = -53112,91537,-2664,9819
  6022. +
  6023. +# Tanor Fortress
  6024. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6025. +TanorCommander1 = 58480,139648,-1464,0,36135
  6026. +TanorCommander2 = 61864,139257,-1728,46896,36129
  6027. +TanorCommander3 = 59436,140834,-1720,47296,36132
  6028. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6029. +TanorFlag1 = 60225,139771,-1597,9819
  6030. +TanorFlag2 = 60362,139742,-1597,9819
  6031. +TanorFlag3 = 60467,139727,-1597,9819
  6032. +
  6033. +# DragonSpine Fortress
  6034. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6035. +DragonspineCommander1 = 13184,94928,-3144,0,36166
  6036. +DragonspineCommander2 = 9472,94992,-3392,0,36160
  6037. +DragonspineCommander3 = 12829,96214,-3392,49152,36163
  6038. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6039. +DragonspineFlag1 = 11459,95308,-3264,9819
  6040. +DragonspineFlag2 = 11527,95301,-3264,9819
  6041. +DragonspineFlag3 = 11623,95311,-3264,9819
  6042. +
  6043. +# Antharas Fortress
  6044. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6045. +AntharasCommander1 = 79440,88752,-2600,0,36202
  6046. +AntharasCommander2 = 77262,91704,-2856,5112,36196
  6047. +AntharasCommander3 = 80929,90510,-2856,40192,36199
  6048. +AntharasCommander4 = 80755,89002,-2848,21984,36204
  6049. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6050. +AntharasFlag1 = 79470,91299,-2728,9819
  6051. +AntharasFlag2 = 79528,91187,-2728,9819
  6052. +AntharasFlag3 = 79580,91095,-2728,9819
  6053. +
  6054. +# Western Fortress
  6055. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6056. +WesternCommander1 = 113481,-16058,-712,0,36240
  6057. +WesternCommander2 = 109872,-16624,-968,16384,36234
  6058. +WesternCommander3 = 112601,-13933,-960,49152,36237
  6059. +WesternCommander4 = 113929,-14801,-960,32768,36242
  6060. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6061. +WesternFlag1 = 111280,-14820,-839,9819
  6062. +WesternFlag2 = 111380,-14820,-839,9819
  6063. +WesternFlag3 = 111480,-14820,-839,9819
  6064. +
  6065. +# Hunters Fortress
  6066. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6067. +HuntersCommander1 = 123232,94400,-1856,0,36278
  6068. +HuntersCommander2 = 122688,95760,-2112,0,36272
  6069. +HuntersCommander3 = 124305,96528,-2104,49151,36275
  6070. +HuntersCommander4 = 127632,96240,-2096,40892,36280
  6071. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6072. +HuntersFlag1 = 125155,95455,-1984,9819
  6073. +HuntersFlag2 = 125255,95455,-1984,9819
  6074. +HuntersFlag3 = 125355,95455,-1984,9819
  6075. +
  6076. +# Aaru Fortress
  6077. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6078. +AaruCommander1 = 74288,186912,-2296,0,36311
  6079. +AaruCommander2 = 71392,184720,-2552,5528,36305
  6080. +AaruCommander3 = 71542,186410,-2552,55088,36308
  6081. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6082. +AaruFlag1 = 73029,186303,-2424,9819
  6083. +AaruFlag2 = 73923,186247,-2424,9819
  6084. +AaruFlag3 = 72833,186178,-2424,9819
  6085. +
  6086. +# Demon Fortress
  6087. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6088. +DemonCommander1 = 100752,-53664,-360,0,36347
  6089. +DemonCommander2 = 100688,-57440,-616,16384,36341
  6090. +DemonCommander3 = 99484,-54027,-616,0,36344
  6091. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6092. +DemonFlag1 = 100400,-55401,-488,9819
  6093. +DemonFlag2 = 100400,-55301,-488,9819
  6094. +DemonFlag3 = 100400,-55201,-488,9819
  6095. +
  6096. +# Monastic Fortress
  6097. +# Commander syntax:  NameCommanderN = x,y,z,heading,npc_id
  6098. +MonasticCommander1 = 73680,-95456,-1144,0,36385
  6099. +MonasticCommander2 = 70189,-93935,-1400,61576,36379
  6100. +MonasticCommander3 = 73831,-94119,-1400,45536,36382
  6101. +# Flag syntax:  NameFlagN = x,y,z,flag_id
  6102. +MonasticFlag1 = 72174,-94437,-1271,9819
  6103. +MonasticFlag2 = 72294,-94481,-1271,9819
  6104. +MonasticFlag3 = 72401,-94526,-1271,9819
  6105. \ No newline at end of file
  6106. diff --git a/dist/game/config/default/General.properties b/dist/game/config/default/General.properties
  6107. new file mode 100644
  6108. index 0000000..4b2e309
  6109. --- /dev/null
  6110. +++ b/dist/game/config/default/General.properties
  6111. @@ -0,0 +1,898 @@
  6112. +# ---------------------------------------------------------------------------
  6113. +# General Server Settings
  6114. +# ---------------------------------------------------------------------------
  6115. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  6116. +# Warning:
  6117. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  6118. +
  6119. +# ---------------------------------------------------------------------------
  6120. +# Administrator
  6121. +# ---------------------------------------------------------------------------
  6122. +
  6123. +# 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.
  6124. +# Default: False
  6125. +EverybodyHasAdminRights = False
  6126. +
  6127. +# Setting for serverList
  6128. +# Displays [] in front of server name on character selection
  6129. +# Default: False
  6130. +ServerListBrackets = False
  6131. +
  6132. +# Displays server type next to the server name on character selection.
  6133. +# Notes:
  6134. +#  Accepted Values: Normal, Relax, Test, NoLabel, Restricted, Event, Free
  6135. +# Default: Normal
  6136. +ServerListType = Normal
  6137. +
  6138. +# Displays server minimum age to the server name on character selection.
  6139. +# Notes:
  6140. +#  Accepted values: 0, 15, 18
  6141. +# Default: 0
  6142. +ServerListAge = 0
  6143. +
  6144. +
  6145. +# If True, only accounts with GM access can enter the server.
  6146. +# Default: False
  6147. +ServerGMOnly = False
  6148. +
  6149. +# Enable GMs to have the glowing aura of a Hero character on login.
  6150. +# Notes:
  6151. +#  GMs can do "///hero" on themselves and get this aura voluntarily.
  6152. +#  It's advised to keep this off due to graphic lag.
  6153. +# Default: False
  6154. +GMHeroAura = False
  6155. +
  6156. +# Auto set invulnerable status to a GM on login.
  6157. +# Default: False
  6158. +GMStartupInvulnerable = False
  6159. +
  6160. +# Auto set invisible status to a GM on login.
  6161. +# Default: False
  6162. +GMStartupInvisible = False
  6163. +
  6164. +# Auto block private messages to a GM on login.
  6165. +# Default: False
  6166. +GMStartupSilence = False
  6167. +
  6168. +# Auto list GMs in GM list (/gmlist) on login.
  6169. +# Default: False
  6170. +GMStartupAutoList = False
  6171. +
  6172. +# Auto set diet mode on to a GM on login (affects your weight penalty).
  6173. +# Default: False
  6174. +GMStartupDietMode = False
  6175. +
  6176. +# Item restrictions apply to GMs as well? (True = restricted usage)
  6177. +# Default: True
  6178. +GMItemRestriction = True
  6179. +
  6180. +# Skill restrictions apply to GMs as well? (True = restricted usage)
  6181. +# Default: True
  6182. +GMSkillRestriction = True
  6183. +
  6184. +# Allow GMs to drop/trade non-tradable and quest(drop only) items
  6185. +# Default: False
  6186. +GMTradeRestrictedItems = False
  6187. +
  6188. +# Allow GMs to restart/exit while is fighting stance
  6189. +# Default: True
  6190. +GMRestartFighting = True
  6191. +
  6192. +# Show the GM's name behind an announcement made by him
  6193. +# example: "Announce: hi (HanWik)"
  6194. +GMShowAnnouncerName = False
  6195. +
  6196. +# Show the GM's name before an announcement made by him
  6197. +# example: "Nyaran: hi"
  6198. +GMShowCritAnnouncerName = False
  6199. +
  6200. +# Give special skills for every GM
  6201. +# 7029,7041-7064,7088-7096,23238-23249 (Master's Blessing)
  6202. +# Default: False
  6203. +GMGiveSpecialSkills = False
  6204. +
  6205. +# Give special aura skills for every GM
  6206. +# 7029,23238-23249,23253-23296 (Master's Blessing)
  6207. +# Default: False
  6208. +GMGiveSpecialAuraSkills = False
  6209. +
  6210. +
  6211. +# ---------------------------------------------------------------------------
  6212. +# Server Security
  6213. +# ---------------------------------------------------------------------------
  6214. +
  6215. +# Enforce gameguard for clients. Sends a gameguard query on character login.
  6216. +# Default: False
  6217. +GameGuardEnforce = False
  6218. +
  6219. +# Don't allow player to perform trade, talk with npc, or move until gameguard reply is received.
  6220. +# Default: False
  6221. +GameGuardProhibitAction = False
  6222. +
  6223. +#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.
  6224. +# Default: False
  6225. +LogChat = False
  6226. +
  6227. +# Default: False
  6228. +LogAutoAnnouncements = False
  6229. +
  6230. +# Default: False
  6231. +LogItems = False
  6232. +
  6233. +# Log only Adena and equippable items if LogItems is enabled
  6234. +LogItemsSmallLog = False
  6235. +
  6236. +# Default: False
  6237. +LogItemEnchants = False
  6238. +
  6239. +# Default: False
  6240. +LogSkillEnchants = False
  6241. +
  6242. +# Default: False
  6243. +GMAudit = False
  6244. +
  6245. +# Check players for non-allowed skills
  6246. +# Default: False
  6247. +SkillCheckEnable = False
  6248. +
  6249. +# If true, remove invalid skills from player and database.
  6250. +# Report only, if false.
  6251. +# Default: False
  6252. +SkillCheckRemove = False
  6253. +
  6254. +# Check also GM characters (only if SkillCheckEnable = True)
  6255. +# Default: True
  6256. +SkillCheckGM = True
  6257. +
  6258. +
  6259. +# ---------------------------------------------------------------------------
  6260. +# Thread Configuration
  6261. +# ---------------------------------------------------------------------------
  6262. +
  6263. +# Extreme caution should be here, set to defaults if you do not know what you are doing.
  6264. +# These could possibly hurt your servers performance or improve it depending on your server's configuration, size, and other factors.
  6265. +# Default: 10
  6266. +ThreadPoolSizeEffects = 10
  6267. +
  6268. +# Default: 13
  6269. +ThreadPoolSizeGeneral = 13
  6270. +
  6271. +# Default: 2
  6272. +ThreadPoolSizeEvents = 2
  6273. +
  6274. +# Default: 2
  6275. +UrgentPacketThreadCoreSize = 2
  6276. +
  6277. +# Default: 4
  6278. +GeneralPacketThreadCoreSize = 4
  6279. +
  6280. +# Default: 4
  6281. +GeneralThreadCoreSize = 4
  6282. +
  6283. +# Default: 6
  6284. +AiMaxThread = 6
  6285. +
  6286. +# Default: 5
  6287. +EventsMaxThread = 5
  6288. +
  6289. +# Dead Lock Detector (a separate thread for detecting deadlocks).
  6290. +# For improved crash logs and automatic restart in deadlock case if enabled.
  6291. +# Check interval is in seconds.
  6292. +# Default: True
  6293. +DeadLockDetector = True
  6294. +
  6295. +# Default: 20
  6296. +DeadLockCheckInterval = 20
  6297. +
  6298. +# Default: False
  6299. +RestartOnDeadlock = False
  6300. +
  6301. +
  6302. +# ---------------------------------------------------------------------------
  6303. +# Client packet queue tuning
  6304. +# ---------------------------------------------------------------------------
  6305. +
  6306. +# Queue size, do not set it too low !
  6307. +# 0 - use value MaxReadPerPass + 2 (from mmo.properties)
  6308. +# Default: 0
  6309. +ClientPacketQueueSize = 0
  6310. +
  6311. +# Maximum number of packets in burst.
  6312. +# Execution will be aborted and thread released if more packets executed in raw.
  6313. +# 0 - use value MaxReadPerPass + 1 (from mmo.properties)
  6314. +# Default: 0
  6315. +ClientPacketQueueMaxBurstSize = 0
  6316. +
  6317. +# Maximum number of packets per second.
  6318. +# Flood detector will be triggered if more packets received.
  6319. +# After triggering all incoming packets will be dropped until flooding stopped.
  6320. +# Default: 80
  6321. +ClientPacketQueueMaxPacketsPerSecond = 80
  6322. +
  6323. +# Average number of packets per second calculated during this interval.
  6324. +# Using larger value decrease number of false kicks, but slower reaction to flood.
  6325. +# Avoid using too low or too high values, recommended between 3 and 10.
  6326. +# Default: 5
  6327. +ClientPacketQueueMeasureInterval = 5
  6328. +
  6329. +# Maximum average number of packets per second during measure interval.
  6330. +# Flood detector will be triggered if more packets received.
  6331. +# After triggering all incoming packets will be dropped until flooding stopped.
  6332. +# Default: 40
  6333. +ClientPacketQueueMaxAveragePacketsPerSecond = 40
  6334. +
  6335. +# Maximum number of flood triggers per minute.
  6336. +# Client will be kicked if more floods detected.
  6337. +# Default: 2
  6338. +ClientPacketQueueMaxFloodsPerMin = 2
  6339. +
  6340. +# Maximum number of queue overflows per minute.
  6341. +# After overflow all incoming packets from client are dropped until queue is flushed.
  6342. +# Client will be kicked if more queue overflows detected.
  6343. +# Default: 1
  6344. +ClientPacketQueueMaxOverflowsPerMin = 1
  6345. +
  6346. +# Maximum number of buffer underflows per minute.
  6347. +# Client will be kicked if more underflow exceptions detected.
  6348. +# Default: 1
  6349. +ClientPacketQueueMaxUnderflowsPerMin = 1
  6350. +
  6351. +# Maximum number of unknown packets per minute.
  6352. +# Client will be kicked if more unknown packets received.
  6353. +# Default: 5
  6354. +ClientPacketQueueMaxUnknownPerMin = 5
  6355. +
  6356. +
  6357. +# ---------------------------------------------------------------------------
  6358. +# Optimization
  6359. +# ---------------------------------------------------------------------------
  6360. +
  6361. +# Items on ground management.
  6362. +# Allow players to drop items on the ground.
  6363. +# Default: True
  6364. +AllowDiscardItem = True
  6365. +
  6366. +# Delete dropped reward items from world after a specified amount of seconds. Disabled = 0.
  6367. +# Default: 600
  6368. +AutoDestroyDroppedItemAfter = 600
  6369. +
  6370. +# Time in seconds after which dropped herb will be auto-destroyed
  6371. +# Default: 60
  6372. +AutoDestroyHerbTime = 60
  6373. +
  6374. +# List of item id that will not be destroyed (separated by "," like 57,5575,6673).
  6375. +# Notes:
  6376. +#  Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
  6377. +#  Items on this list will be protected regardless of the following options.
  6378. +# Default: 0
  6379. +ListOfProtectedItems = 0
  6380. +
  6381. +# Cleans up the server database on startup.
  6382. +# The bigger the database is, the longer it will take to clean up the database(the slower the server will start).
  6383. +# Sometimes this ends up with 0 elements cleaned up, and a lot of wasted time on the server startup.
  6384. +# If you want a faster server startup, set this to 'false', but its recommended to clean up the database from time to time.
  6385. +# Default: True
  6386. +DatabaseCleanUp = True
  6387. +
  6388. +# The time before a database connection closes (in milliseconds)
  6389. +# If a query takes longer to execute than the time defined here, the server will throw "Unclosed Connection!" error.
  6390. +# If you get often this error message, try increasing this.
  6391. +# Default: 60000ms
  6392. +ConnectionCloseTime = 60000
  6393. +
  6394. +# This is the interval (in minutes), that the gameserver will update a players information such as location.
  6395. +# 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).
  6396. +# 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).
  6397. +# A value of 0 disables periodic saving.
  6398. +# Independent of this setting the character is always saved after leaving the world.
  6399. +# Default: 15
  6400. +CharacterDataStoreInterval = 15
  6401. +
  6402. +# This enables the server to only update items when saving the character.
  6403. +# Enabling this greatly reduces DB usage and improves performance.
  6404. +# WARNING: This option causes item loss during crashes.
  6405. +# Default: False
  6406. +LazyItemsUpdate = False
  6407. +
  6408. +# 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.
  6409. +# Default: False
  6410. +UpdateItemsOnCharStore = False
  6411. +
  6412. +# Also delete from world misc. items dropped by players (all except equip-able items).
  6413. +# Notes:
  6414. +#  Works only if AutoDestroyDroppedItemAfter is greater than 0.
  6415. +# Default: False
  6416. +DestroyPlayerDroppedItem = False
  6417. +
  6418. +# Destroy dropped equippable items (armor, weapon, jewelry).
  6419. +# Notes:
  6420. +#  Works only if DestroyPlayerDroppedItem = True
  6421. +# Default: False
  6422. +DestroyEquipableItem = False
  6423. +
  6424. +# Save dropped items into the database for restoring after restart.
  6425. +# Default: False
  6426. +SaveDroppedItem = False
  6427. +
  6428. +# Enable/Disable the emptying of the stored dropped items table after items are loaded into memory (safety setting).
  6429. +# 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.
  6430. +# Default: False
  6431. +EmptyDroppedItemTableAfterLoad = False
  6432. +
  6433. +# Time interval in minutes to save in DB items on ground. Disabled = 0.
  6434. +# Notes:
  6435. +#  If SaveDroppedItemInterval is disabled, items will be saved into the database only at server shutdown.
  6436. +# Default: 60
  6437. +SaveDroppedItemInterval = 60
  6438. +
  6439. +# Delete all saved items from the database on next restart?
  6440. +# Notes:
  6441. +#  Works only if SaveDroppedItem = False.
  6442. +# Default: False
  6443. +ClearDroppedItemTable = False
  6444. +
  6445. +# Delete invalid quest from players.
  6446. +# Default: False
  6447. +AutoDeleteInvalidQuestData = False
  6448. +
  6449. +# If True, allows a special handling for drops when chance raises over 100% (eg. when applying chance rates).
  6450. +# True value causes better drop handling at higher rates.  
  6451. +# Default: True
  6452. +PreciseDropCalculation = True
  6453. +
  6454. +# Allow creating multiple non-stackable items at one time?
  6455. +# Default: True
  6456. +MultipleItemDrop = True
  6457. +
  6458. +# Forces full item inventory packet to be sent for any item change.
  6459. +# Notes:
  6460. +#  This can increase network traffic
  6461. +# Default: False
  6462. +ForceInventoryUpdate = False
  6463. +
  6464. +# True = Load html's into cache only on first time html is requested.
  6465. +# False = Load all html's into cache on server startup.
  6466. +# Default: True
  6467. +LazyCache = True
  6468. +
  6469. +# Cache all character names in to memory on server startup
  6470. +# False - names are loaded from Db when they are requested
  6471. +# True - decrease Db usage , increase memory consumption
  6472. +# Default: True
  6473. +CacheCharNames = True
  6474. +
  6475. +# Minimum and maximum variables in seconds for npc animation delay.
  6476. +# You must keep MinNPCAnimation < = MaxNPCAnimation.
  6477. +# Default: 10
  6478. +MinNPCAnimation = 10
  6479. +
  6480. +# Default: 20
  6481. +MaxNPCAnimation = 20
  6482. +
  6483. +# Default: 5
  6484. +MinMonsterAnimation = 5
  6485. +
  6486. +# Default: 20
  6487. +MaxMonsterAnimation = 20
  6488. +
  6489. +# 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.
  6490. +# Default: False
  6491. +MoveBasedKnownlist = False
  6492. +
  6493. +# Interval (in milliseconds) in which the knownlist does full updates.
  6494. +# For move based updates its used for intermediate updates.
  6495. +# WARNING!
  6496. +#  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.
  6497. +# Default: 1250
  6498. +KnownListUpdateInterval = 1250
  6499. +
  6500. +# 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.
  6501. +# 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.
  6502. +# 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.
  6503. +# The always on option allows to ignore all this and let all grids be active at all times (not suggested).
  6504. +# Default: False
  6505. +GridsAlwaysOn = False
  6506. +
  6507. +# Default: 1
  6508. +GridNeighborTurnOnTime = 1
  6509. +
  6510. +# Default: 90
  6511. +GridNeighborTurnOffTime = 90
  6512. +
  6513. +# ---------------------------------------------------------------------------
  6514. +# Falling Damage
  6515. +# ---------------------------------------------------------------------------
  6516. +
  6517. +# Allow characters to receive damage from falling.
  6518. +# CoordSynchronize = 2 is recommended.
  6519. +# Default: True
  6520. +EnableFallingDamage = True
  6521. +
  6522. +
  6523. +# ---------------------------------------------------------------------------
  6524. +# Features
  6525. +# ---------------------------------------------------------------------------
  6526. +
  6527. +# Peace Zone Modes:
  6528. +# 0 = Peace All the Time
  6529. +# 1 = PVP During Siege for siege participants
  6530. +# 2 = PVP All the Time
  6531. +# Default: 0
  6532. +PeaceZoneMode = 0
  6533. +
  6534. +# Global Chat.
  6535. +# Available Options: ON, OFF, GM, GLOBAL
  6536. +# Default: ON
  6537. +GlobalChat = ON
  6538. +
  6539. +# Trade Chat.
  6540. +# Available Options: ON, OFF, GM, GLOBAL
  6541. +# Default: ON
  6542. +TradeChat = ON
  6543. +
  6544. +# If you are experiencing problems with Warehouse transactions, feel free to disable them here.
  6545. +# Default: True
  6546. +AllowWarehouse = True
  6547. +
  6548. +# Enable Warehouse Cache. If warehouse is not used will server clear memory used by this warehouse.
  6549. +# Default: False
  6550. +WarehouseCache = False
  6551. +
  6552. +# How long warehouse should be stored in memory.
  6553. +# Default: 15
  6554. +WarehouseCacheTime = 15
  6555. +
  6556. +# Default: True
  6557. +AllowRefund = True
  6558. +
  6559. +# Default: True
  6560. +AllowMail = True
  6561. +
  6562. +# Default: True
  6563. +AllowAttachments = True
  6564. +
  6565. +# If True player can try on weapon and armor in shop.
  6566. +# Default: True
  6567. +AllowWear = True
  6568. +
  6569. +# Default: 5
  6570. +WearDelay = 5
  6571. +
  6572. +#Adena cost to try on an item.
  6573. +# Default: 10
  6574. +WearPrice = 10
  6575. +
  6576. +
  6577. +# ---------------------------------------------------------------------------
  6578. +# Instances
  6579. +# ---------------------------------------------------------------------------
  6580. +# Restores the player to their previous instance (ie. an instanced area/dungeon) on EnterWorld.
  6581. +# Default: False
  6582. +RestorePlayerInstance = False
  6583. +
  6584. +# Set whether summon skills can be used to summon players inside an instance.
  6585. +# When enabled individual instances can have summoning disabled in instance xml's.
  6586. +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  6587. +# Default: False
  6588. +AllowSummonInInstance = False
  6589. +
  6590. +# When a player dies, is removed from instance after a fixed period of time.
  6591. +# Time in seconds.
  6592. +# Default: 60
  6593. +EjectDeadPlayerTime = 60
  6594. +
  6595. +# When is instance finished, is set time to destruction currency instance.
  6596. +# Time in seconds.
  6597. +# Default: 300
  6598. +DefaultFinishTime = 300
  6599. +
  6600. +
  6601. +# ---------------------------------------------------------------------------
  6602. +# Misc Settings
  6603. +# ---------------------------------------------------------------------------
  6604. +
  6605. +# Default: True
  6606. +AllowRace = True
  6607. +
  6608. +# Default: True
  6609. +AllowWater = True
  6610. +
  6611. +# Enable pets for rent (wyvern & strider) from pet managers.
  6612. +# Default: False
  6613. +AllowRentPet = False
  6614. +
  6615. +# Default: True
  6616. +AllowFishing = True
  6617. +
  6618. +# Default: True
  6619. +AllowBoat = True
  6620. +
  6621. +# Boat broadcast radius.
  6622. +# If players getting annoyed by boat shouts then radius can be decreased.
  6623. +# Default: 20000
  6624. +BoatBroadcastRadius = 20000
  6625. +
  6626. +# Default: True
  6627. +AllowCursedWeapons = True
  6628. +
  6629. +#Allow Pet manager's pets to walk around.
  6630. +# Default: True
  6631. +AllowPetWalkers = True
  6632. +
  6633. +# Show "data/html/servnews.htm" when a character enters world.
  6634. +# Default: False
  6635. +ShowServerNews = False
  6636. +
  6637. +# Enable the Community Board.
  6638. +# Default: True
  6639. +EnableCommunityBoard = True
  6640. +
  6641. +# Default Community Board page.
  6642. +# Default: _bbshome
  6643. +BBSDefault = _bbshome
  6644. +
  6645. +# Enable chat filter
  6646. +# Default = False
  6647. +UseChatFilter = False
  6648. +
  6649. +# Replace filter words with following chars
  6650. +ChatFilterChars = ^_^
  6651. +
  6652. +# Banchat for channels, split ";"
  6653. +# 0 = ALL (white)
  6654. +# 1 = SHOUT (!)
  6655. +# 2 = TELL (")
  6656. +# 3 = PARTY (#)
  6657. +# 4 = CLAN (@)
  6658. +# 5 = GM (//gmchat)
  6659. +# 6 = PETITION_PLAYER (*)
  6660. +# 7 = PETITION_GM (*)
  6661. +# 8 = TRADE (+)
  6662. +# 9 = ALLIANCE ($)
  6663. +# 10 = ANNOUNCEMENT
  6664. +# 11 = BOAT
  6665. +# 12 = L2FRIEND
  6666. +# 13 = MSNCHAT
  6667. +# 14 = PARTYMATCH_ROOM
  6668. +# 15 = PARTYROOM_COMMANDER (Yellow)
  6669. +# 16 = PARTYROOM_ALL (Red)
  6670. +# 17 = HERO_VOICE (&)
  6671. +# 18 = CRITICAL_ANNOUNCE
  6672. +# 19 = SCREEN_ANNOUNCE
  6673. +# 20 = BATTLEFIELD
  6674. +# 21 = MPCC_ROOM
  6675. +# Default: 0;1;8;17
  6676. +BanChatChannels = 0;1;8;17
  6677. +
  6678. +# ---------------------------------------------------------------------------
  6679. +# Manor
  6680. +# ---------------------------------------------------------------------------
  6681. +
  6682. +# Default: True
  6683. +AllowManor = True
  6684. +
  6685. +# Manor refresh time in military hours.
  6686. +# Default: 20 (8pm)
  6687. +AltManorRefreshTime = 20
  6688. +
  6689. +# Manor refresh time (minutes).
  6690. +# Default: 00 (start of the hour)
  6691. +AltManorRefreshMin = 00
  6692. +
  6693. +# Manor period approve time in military hours.
  6694. +# Default: 4 (4am)
  6695. +AltManorApproveTime = 4
  6696. +
  6697. +# Manor period approve time (minutes).
  6698. +# Default: 30
  6699. +AltManorApproveMin = 30
  6700. +
  6701. +# Manor maintenance time (minutes).
  6702. +# Default: 6
  6703. +AltManorMaintenanceMin = 6
  6704. +
  6705. +# Manor Save Type.
  6706. +# True = Save data into the database after every action
  6707. +# Default: False
  6708. +AltManorSaveAllActions = False
  6709. +
  6710. +# Manor Save Period (used only if AltManorSaveAllActions = False)
  6711. +# Default: 2 (hour)
  6712. +AltManorSavePeriodRate = 2
  6713. +
  6714. +
  6715. +# ---------------------------------------------------------------------------
  6716. +# Lottery
  6717. +# ---------------------------------------------------------------------------
  6718. +
  6719. +# Default: True
  6720. +AllowLottery = True
  6721. +
  6722. +# Initial Lottery prize.
  6723. +# Default: 50000
  6724. +AltLotteryPrize = 50000
  6725. +
  6726. +# Lottery Ticket Price
  6727. +# Default: 2000
  6728. +AltLotteryTicketPrice = 2000
  6729. +
  6730. +# What part of jackpot amount should receive characters who pick 5 wining numbers
  6731. +# Default: 0.6
  6732. +AltLottery5NumberRate = 0.6
  6733. +
  6734. +# What part of jackpot amount should receive characters who pick 4 wining numbers
  6735. +# Default: 0.2
  6736. +AltLottery4NumberRate = 0.2
  6737. +
  6738. +# What part of jackpot amount should receive characters who pick 3 wining numbers
  6739. +# Default: 0.2
  6740. +AltLottery3NumberRate = 0.2
  6741. +
  6742. +# How much Adena receive characters who pick two or less of the winning number
  6743. +# Default: 200
  6744. +AltLottery2and1NumberPrize = 200
  6745. +
  6746. +
  6747. +# ---------------------------------------------------------------------------
  6748. +# Item Auction
  6749. +# ---------------------------------------------------------------------------
  6750. +
  6751. +#
  6752. +AltItemAuctionEnabled = True
  6753. +
  6754. +# Number of days before auction cleared from database with all bids.
  6755. +# Default: 14
  6756. +AltItemAuctionExpiredAfter = 14
  6757. +
  6758. +# Auction extends to specified amount of seconds if one or more new bids added.
  6759. +# By default auction extends only two times, by 5 and 3 minutes, this custom value used after it.
  6760. +# Values higher than 60s is not recommended.
  6761. +# Default: 0
  6762. +AltItemAuctionTimeExtendsOnBid = 0
  6763. +
  6764. +
  6765. +# ---------------------------------------------------------------------------
  6766. +# Dimension Rift
  6767. +# ---------------------------------------------------------------------------
  6768. +
  6769. +# Minimal party size to enter rift. Min = 2, Max = 9.
  6770. +# If while inside the rift, the party becomes smaller, all members will be teleported back.
  6771. +# Default: 2
  6772. +RiftMinPartySize = 2
  6773. +
  6774. +# Number of maximum jumps between rooms allowed, after this time party will be teleported back
  6775. +# Default: 4
  6776. +MaxRiftJumps = 4
  6777. +
  6778. +# Time in ms the party has to wait until the mobs spawn when entering a room. C4 retail: 10s
  6779. +# Default: 10000
  6780. +RiftSpawnDelay = 10000
  6781. +
  6782. +# Time between automatic jumps in seconds
  6783. +# Default: 480
  6784. +AutoJumpsDelayMin = 480
  6785. +
  6786. +# Default: 600
  6787. +AutoJumpsDelayMax = 600
  6788. +
  6789. +# Time Multiplier for stay in the boss room
  6790. +# Default: 1.5
  6791. +BossRoomTimeMultiply = 1.5
  6792. +
  6793. +# Cost in dimension fragments to enter the rift, each party member must own this amount
  6794. +# Default: 18
  6795. +RecruitCost = 18
  6796. +
  6797. +# Default: 21
  6798. +SoldierCost = 21
  6799. +
  6800. +# Default: 24
  6801. +OfficerCost = 24
  6802. +
  6803. +# Default: 27
  6804. +CaptainCost = 27
  6805. +
  6806. +# Default: 30
  6807. +CommanderCost = 30
  6808. +
  6809. +# Default: 33
  6810. +HeroCost = 33
  6811. +
  6812. +
  6813. +# ---------------------------------------------------------------------------
  6814. +# Four Sepulchers
  6815. +# ---------------------------------------------------------------------------
  6816. +
  6817. +# Default: 50
  6818. +TimeOfAttack = 50
  6819. +
  6820. +# Default: 5
  6821. +TimeOfCoolDown = 5
  6822. +
  6823. +# Default: 3
  6824. +TimeOfEntry = 3
  6825. +
  6826. +# Default: 2
  6827. +TimeOfWarmUp = 2
  6828. +
  6829. +# Default: 4
  6830. +NumberOfNecessaryPartyMembers = 4
  6831. +
  6832. +
  6833. +# ---------------------------------------------------------------------------
  6834. +# Punishment
  6835. +# ---------------------------------------------------------------------------
  6836. +
  6837. +# Player punishment for illegal actions:
  6838. +# 1 - broadcast warning to gms only
  6839. +# 2 - kick player(default)
  6840. +# 3 - kick & ban player
  6841. +# 4 - jail player (define minutes of jail with param: 0 = infinite)
  6842. +# Default: 2
  6843. +DefaultPunish = 2
  6844. +
  6845. +# This setting typically specifies the duration of the above punishment.
  6846. +# Default: 0
  6847. +DefaultPunishParam = 0
  6848. +
  6849. +# Apply default punish if player buy items for zero Adena.
  6850. +# Default: True
  6851. +OnlyGMItemsFree = True
  6852. +
  6853. +# Jail is a PvP zone.
  6854. +# Default: False
  6855. +JailIsPvp = False
  6856. +
  6857. +# Disable all chat in jail (except normal one)
  6858. +# Default: True
  6859. +JailDisableChat = True
  6860. +
  6861. +# Disable all transaction in jail
  6862. +# Trade/Store/Drop
  6863. +# Default: False
  6864. +JailDisableTransaction = False
  6865. +
  6866. +# Enchant Skill Details Settings
  6867. +# Default: 1,5
  6868. +NormalEnchantCostMultipiler = 1
  6869. +SafeEnchantCostMultipiler = 5
  6870. +
  6871. +# ---------------------------------------------------------------------------
  6872. +# Custom Components
  6873. +# ---------------------------------------------------------------------------
  6874. +
  6875. +# Default: False
  6876. +CustomSpawnlistTable = False
  6877. +
  6878. +# Option to save GM spawn only in the custom table.
  6879. +# Default: False
  6880. +SaveGmSpawnOnCustom = False
  6881. +
  6882. +# Default: False
  6883. +CustomNpcData = False
  6884. +
  6885. +# Default: False
  6886. +CustomTeleportTable = False
  6887. +
  6888. +# Default: False
  6889. +CustomNpcBufferTables = False
  6890. +
  6891. +# Default: False
  6892. +CustomSkillsLoad = False
  6893. +
  6894. +# Default: False
  6895. +CustomItemsLoad = False
  6896. +
  6897. +# Default: False
  6898. +CustomMultisellLoad = False
  6899. +
  6900. +# Default: False
  6901. +CustomBuyListLoad = False
  6902. +
  6903. +# ---------------------------------------------------------------------------
  6904. +# Birthday Event Settings
  6905. +# ---------------------------------------------------------------------------
  6906. +
  6907. +# Gift sent with Mail System
  6908. +# Default: 22187
  6909. +AltBirthdayGift = 22187
  6910. +
  6911. +# Mail Subject
  6912. +AltBirthdayMailSubject = Happy Birthday!
  6913. +
  6914. +# Mail Content
  6915. +# $c1: Player name
  6916. +# $s1: Age
  6917. +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
  6918. +
  6919. +# ---------------------------------------------------------------------------
  6920. +# Handy's Block Checker Event Settings
  6921. +# ---------------------------------------------------------------------------
  6922. +
  6923. +# Enable the Handy's Block Checker event
  6924. +# Default: True
  6925. +EnableBlockCheckerEvent = True
  6926. +
  6927. +# Minimum number of members on each team before
  6928. +# be able to start the event
  6929. +# Min: 1
  6930. +# Max: 6
  6931. +# Retail: 2
  6932. +BlockCheckerMinTeamMembers = 2
  6933. +
  6934. +# Fair play
  6935. +# Players can choose what team to play. However, by
  6936. +# enabling this property to true, the teams will be
  6937. +# balanced in the teleport to the arena
  6938. +HBCEFairPlay = True
  6939. +
  6940. +# ---------------------------------------------------------------------------
  6941. +# Hellbound Settings
  6942. +# ---------------------------------------------------------------------------
  6943. +# If true, players can enter the Hellbound island without any quests
  6944. +# Default: False
  6945. +HellboundWithoutQuest = False
  6946. +
  6947. +# ---------------------------------------------------------------------------
  6948. +# Bot Report Button settings
  6949. +# ---------------------------------------------------------------------------
  6950. +
  6951. +# Enable the bot report button on the desired game servers.
  6952. +# Default: True
  6953. +EnableBotReportButton = True
  6954. +
  6955. +# Report points restart hour. Format: HH:MM ( PM mode, 24 hours clock)
  6956. +# Default: 00:00
  6957. +BotReportPointsResetHour = 00:00
  6958. +
  6959. +# Delay between reports from the same player (in minutes)
  6960. +# Default: 30 minutes
  6961. +BotReportDelay = 30
  6962. +
  6963. +# Allow players from the same clan to report the same bot
  6964. +# Default: False
  6965. +AllowReportsFromSameClanMembers = False
  6966. +
  6967. +# ---------------------------------------------------------------------------
  6968. +# Developer Settings
  6969. +# ---------------------------------------------------------------------------
  6970. +# Do not touch these if you do not know what you are doing.
  6971. +# These settings are for debugging servers ONLY. They are not meant for LIVE servers.
  6972. +
  6973. +# Default: False
  6974. +Debug = False
  6975. +
  6976. +# Instances debugging
  6977. +# Default: False
  6978. +InstanceDebug = False
  6979. +
  6980. +# Html action cache debugging
  6981. +# Default: False
  6982. +HtmlActionCacheDebug = False
  6983. +
  6984. +# Packet handler debug output
  6985. +# Default: False
  6986. +PacketHandlerDebug = False
  6987. +
  6988. +# Default: False
  6989. +Developer = False
  6990. +
  6991. +# Don't load Handlers
  6992. +# Default: False
  6993. +AltDevNoHandlers = False
  6994. +
  6995. +# Don't load quests.
  6996. +# Default: False
  6997. +AltDevNoQuests = False
  6998. +
  6999. +# Don't load spawntable.
  7000. +# Default: False
  7001. +AltDevNoSpawns = False
  7002. +
  7003. +# Show quests while loading them.
  7004. +# Default: False
  7005. +AltDevShowQuestsLoadInLogs = False
  7006. +
  7007. +# Show scripts while loading them.
  7008. +# Default: False
  7009. +AltDevShowScriptsLoadInLogs = False
  7010. diff --git a/dist/game/config/default/GeoData.properties b/dist/game/config/default/GeoData.properties
  7011. new file mode 100644
  7012. index 0000000..3511380
  7013. --- /dev/null
  7014. +++ b/dist/game/config/default/GeoData.properties
  7015. @@ -0,0 +1,75 @@
  7016. +# ---------------------------------------------------------------------------
  7017. +# GeoData
  7018. +# ---------------------------------------------------------------------------
  7019. +
  7020. +# Pathfinding options:
  7021. +# 0 = Disabled
  7022. +# 1 = Enabled using path node files
  7023. +# 2 = Enabled using geodata cells at runtime
  7024. +# Default: 0
  7025. +PathFinding = 0
  7026. +
  7027. +# Pathnode directory
  7028. +# Default: data/pathnode
  7029. +PathnodeDirectory = data/pathnode
  7030. +
  7031. +# Pathfinding array buffers configuration
  7032. +PathFindBuffers = 100x6;128x6;192x6;256x4;320x4;384x4;500x2
  7033. +
  7034. +# Weight for nodes without obstacles far from walls
  7035. +LowWeight = 0.5
  7036. +
  7037. +# Weight for nodes near walls
  7038. +MediumWeight = 2
  7039. +
  7040. +# Weight for nodes with obstacles
  7041. +HighWeight = 3
  7042. +
  7043. +# Angle paths will be more "smart", but in cost of higher CPU utilization
  7044. +AdvancedDiagonalStrategy = True
  7045. +
  7046. +# Weight for diagonal movement. Used only with AdvancedDiagonalStrategy = True
  7047. +# Default: LowWeight * sqrt(2)
  7048. +DiagonalWeight = 0.707
  7049. +
  7050. +# Maximum number of LOS postfilter passes, 0 will disable postfilter.
  7051. +# Default: 3
  7052. +MaxPostfilterPasses = 3
  7053. +
  7054. +# Path debug function.
  7055. +# Nodes known to pathfinder will be displayed as adena, constructed path as antidots.
  7056. +# Number of the items show node cost * 10
  7057. +# Potions display path after first stage filter
  7058. +# Red potions - actual waypoints. Green potions - nodes removed by LOS postfilter
  7059. +# This function FOR DEBUG PURPOSES ONLY, never use it on the live server !
  7060. +DebugPath = False
  7061. +
  7062. +# True = Loads GeoData buffer's content into physical memory.
  7063. +# False = Does not necessarily imply that the GeoData buffer's content is not resident in physical memory.
  7064. +# Default: True
  7065. +ForceGeoData = True
  7066. +
  7067. +# This setting controls Client <--> Server Player coordinates synchronization:
  7068. +# -1 - Will synchronize only Z from Client --> Server. Default when no geodata.
  7069. +# 1 - Synchronization Client --> Server only. Using this option (without geodata) makes it more difficult for players to bypass obstacles.
  7070. +# 2 - Intended for geodata (at least with cell-level pathfinding, otherwise can you try -1).
  7071. +# Server sends validation packet if client goes too far from server calculated coordinates.
  7072. +# Default: -1
  7073. +CoordSynchronize = -1
  7074. +
  7075. +# Geodata files folder
  7076. +GeoDataPath = ./data/geodata
  7077. +
  7078. +# True: Try to load regions not specified below(won't disturb server startup when file does not exist)
  7079. +# False: Don't load any regions other than the ones specified with True below
  7080. +TryLoadUnspecifiedRegions = True
  7081. +
  7082. +# List of regions to be required to load
  7083. +# eg.:
  7084. +# Both regions required
  7085. +# 22_22=True
  7086. +# 19_20=true
  7087. +# Exclude region from loading
  7088. +# 25_26=false
  7089. +# True: Region is required for the server to startup
  7090. +# False: Region is not considered to be loaded
  7091. diff --git a/dist/game/config/default/GraciaSeeds.properties b/dist/game/config/default/GraciaSeeds.properties
  7092. new file mode 100644
  7093. index 0000000..1542f29
  7094. --- /dev/null
  7095. +++ b/dist/game/config/default/GraciaSeeds.properties
  7096. @@ -0,0 +1,18 @@
  7097. +# ---------------------------------------------------------------------------
  7098. +# Gracia Seeds Settings
  7099. +# ---------------------------------------------------------------------------
  7100. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  7101. +# Warning:
  7102. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  7103. +
  7104. +# ---------------------------------------------------------------------------
  7105. +# Seed of Destruction Settings
  7106. +# ---------------------------------------------------------------------------
  7107. +
  7108. +# Count of Kills which needed for Stage 2
  7109. +# Default: 10
  7110. +TiatKillCountForNextState = 10
  7111. +
  7112. +# Length of Stage 2 before the Defense state starts (in minutes).
  7113. +# Default: 720min (12h)
  7114. +Stage2Length = 720
  7115. diff --git a/dist/game/config/default/GrandBoss.properties b/dist/game/config/default/GrandBoss.properties
  7116. new file mode 100644
  7117. index 0000000..cf21798
  7118. --- /dev/null
  7119. +++ b/dist/game/config/default/GrandBoss.properties
  7120. @@ -0,0 +1,78 @@
  7121. +# ---------------------------------------------------------------------------
  7122. +# Antharas
  7123. +# ---------------------------------------------------------------------------
  7124. +
  7125. +# Delay of appearance time of Antharas. Value is minute. Range 3-60
  7126. +AntharasWaitTime = 20
  7127. +
  7128. +# Interval time of Antharas. Value is hour. Range 1-480
  7129. +IntervalOfAntharasSpawn = 264
  7130. +
  7131. +# Random interval. Range 1-192
  7132. +RandomOfAntharasSpawn = 72
  7133. +
  7134. +# ---------------------------------------------------------------------------
  7135. +# Valakas
  7136. +# ---------------------------------------------------------------------------
  7137. +
  7138. +# Delay of appearance time of Valakas. Value is minute. Range 3-60
  7139. +ValakasWaitTime = 30
  7140. +
  7141. +# Interval time of Valakas. Value is hour. Range 1-480
  7142. +IntervalOfValakasSpawn = 264
  7143. +
  7144. +# Random interval. Range 1-192
  7145. +RandomOfValakasSpawn = 72
  7146. +
  7147. +# ---------------------------------------------------------------------------
  7148. +# Baium
  7149. +# ---------------------------------------------------------------------------
  7150. +
  7151. +# Interval time of Baium. Value is hour. Range 1-480
  7152. +IntervalOfBaiumSpawn = 168
  7153. +
  7154. +# Random interval. Range 1-192
  7155. +RandomOfBaiumSpawn = 48
  7156. +
  7157. +# ---------------------------------------------------------------------------
  7158. +# Core
  7159. +# ---------------------------------------------------------------------------
  7160. +
  7161. +# Interval time of Core. Value is hour. Range 1-480
  7162. +IntervalOfCoreSpawn = 60
  7163. +
  7164. +# Random interval. Range 1-192
  7165. +RandomOfCoreSpawn = 24
  7166. +
  7167. +# ---------------------------------------------------------------------------
  7168. +# Orfen
  7169. +# ---------------------------------------------------------------------------
  7170. +
  7171. +# Interval time of Orfen. Value is hour. Range 1-480
  7172. +IntervalOfOrfenSpawn = 48
  7173. +
  7174. +# Random interval. Range 1-192
  7175. +RandomOfOrfenSpawn = 20
  7176. +
  7177. +# ---------------------------------------------------------------------------
  7178. +# Queen Ant
  7179. +# ---------------------------------------------------------------------------
  7180. +
  7181. +# Interval time of QueenAnt. Value is hour. Range 1-480
  7182. +IntervalOfQueenAntSpawn = 36
  7183. +
  7184. +# Random interval. Range 1-192
  7185. +RandomOfQueenAntSpawn = 17
  7186. +
  7187. +# ---------------------------------------------------------------------------
  7188. +# Beleth
  7189. +# ---------------------------------------------------------------------------
  7190. +
  7191. +# Interval time of Beleth. Value is hour. Range 1-480. Retail: 192
  7192. +IntervalOfBelethSpawn = 192
  7193. +
  7194. +# Random interval. Range 1-192. Retail: 148
  7195. +RandomOfBelethSpawn = 148
  7196. +
  7197. +#Minimal count of players for enter to Beleth. Retail: 36
  7198. +BelethMinPlayers = 36
  7199. \ No newline at end of file
  7200. diff --git a/dist/game/config/default/IdFactory.properties b/dist/game/config/default/IdFactory.properties
  7201. new file mode 100644
  7202. index 0000000..b3d0922
  7203. --- /dev/null
  7204. +++ b/dist/game/config/default/IdFactory.properties
  7205. @@ -0,0 +1,21 @@
  7206. +# ---------------------------------------------------------------------------
  7207. +# ID Factory Settings
  7208. +# ---------------------------------------------------------------------------
  7209. +# Warning:
  7210. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  7211. +
  7212. +# ---------------------------------------------------------------------------
  7213. +# Standard Settings
  7214. +# ---------------------------------------------------------------------------
  7215. +
  7216. +# Tell server which IDFactory Class to use:
  7217. +# Compaction = Original method
  7218. +# BitSet = One non compaction method
  7219. +# Stack = Another non compaction method
  7220. +# Default: BitSet
  7221. +IDFactory = BitSet
  7222. +
  7223. +# Check for bad ids in the database on server boot up.
  7224. +# Much faster load time without it, but may cause problems.
  7225. +# Default: True
  7226. +BadIdChecking = True
  7227. \ No newline at end of file
  7228. diff --git a/dist/game/config/default/L2JMods.properties b/dist/game/config/default/L2JMods.properties
  7229. new file mode 100644
  7230. index 0000000..439eed9
  7231. --- /dev/null
  7232. +++ b/dist/game/config/default/L2JMods.properties
  7233. @@ -0,0 +1,510 @@
  7234. +# ---------------------------------------------------------------------------
  7235. +# L2JMODS - non-retail-like systems that have been integrated into the L2J project.
  7236. +# Be warned that there may be no support for these mods beyond the original author's assistance.
  7237. +
  7238. +# ---------------------------------------------------------------------------
  7239. +# Champion mobs - Turn random mobs into Champions
  7240. +# ---------------------------------------------------------------------------
  7241. +
  7242. +# Enable/Disable Champion Mob System.
  7243. +ChampionEnable = False
  7244. +
  7245. +# Force Champion mobs to be passive?
  7246. +# To leave champion mobs to default/Aggressive, set to False.
  7247. +# To set all champion mobs to Passive, set True.
  7248. +ChampionPassive = False
  7249. +
  7250. +# % chance for a mob to became champion (-1 to disable).
  7251. +ChampionFrequency = -1
  7252. +
  7253. +# Title of all Champion Mobs.
  7254. +ChampionTitle = Champion
  7255. +
  7256. +# Min and max levels allowed for a mob to be a Champion mob.
  7257. +ChampionMinLevel = 20
  7258. +ChampionMaxLevel = 78
  7259. +
  7260. +# Hp multiplier for Champion mobs.
  7261. +ChampionHp = 8
  7262. +
  7263. +# Hp Regen Multiplier for Champion mobs.
  7264. +ChampionHpRegen = 1.0
  7265. +
  7266. +# Exp/Sp rewards multiplier for Champion mobs.
  7267. +ChampionRewardsExpSp = 8.0
  7268. +
  7269. +# Standard rewards chance multiplier for Champion mobs.
  7270. +ChampionRewardsChance = 8.0
  7271. +
  7272. +# Standard rewards amount multiplier for Champion mobs.
  7273. +ChampionRewardsAmount = 1.0
  7274. +
  7275. +# Adena & Seal Stone rewards chance multiplier for Champion mobs.
  7276. +ChampionAdenasRewardsChance = 1.0
  7277. +
  7278. +# Adena & Seal Stone rewards amount multiplier for Champion mobs.
  7279. +ChampionAdenasRewardsAmount = 1.0
  7280. +
  7281. +# P. Attack and M. Attack bonus for Champion mobs.
  7282. +ChampionAtk = 1.0
  7283. +
  7284. +# Physical/Magical Attack Speed bonus for Champion mobs.
  7285. +ChampionSpdAtk = 1.0
  7286. +
  7287. +# Specified reward item ID
  7288. +ChampionRewardItemID = 6393
  7289. +
  7290. +# The amount of the specified reward a player will receive if they are awarded the item.
  7291. +ChampionRewardItemQty = 1
  7292. +
  7293. +# % Chance to obtain a specified reward item from a higher level Champion mob.
  7294. +# Default: 0
  7295. +ChampionRewardLowerLvlItemChance = 0
  7296. +
  7297. +# % Chance to obtain a specified reward item from a lower level Champion mob.
  7298. +# Default: 0
  7299. +ChampionRewardHigherLvlItemChance = 0
  7300. +
  7301. +# Do you want to enable the vitality calculation when killing champion mobs?
  7302. +# Be aware that it can lead to huge unbalance on your server, your rate for that mob would
  7303. +# then be "mobXP x serverRate x vitalityRate x championXpRate
  7304. +# Notes:
  7305. +#  Works only if EnableVitality = True
  7306. +# Default: False
  7307. +ChampionEnableVitality = False
  7308. +
  7309. +# Enable spawning of the champions in instances
  7310. +# Default = False
  7311. +ChampionEnableInInstances = False
  7312. +
  7313. +# ---------------------------------------------------------------------------
  7314. +# Wedding System (by evill33t)
  7315. +# ---------------------------------------------------------------------------
  7316. +# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
  7317. +# CustomNpcTable = True in General.properties
  7318. +# ---------------------------------------------------------------------------
  7319. +# Wedding Manager ID: 50007
  7320. +#
  7321. +# First part - "Engagement"
  7322. +# 1) Target the player that you want to make a couple with.
  7323. +# 2) Use the voice command ".engage nameofyourpartner" then press enter.
  7324. +# 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.
  7325. +# 4) If the target player accepts the engagement invitation, you will be engaged.
  7326. +#
  7327. +# Second part - "Marriage"
  7328. +# 1) Once two players are engaged, they can speak to Andromeda, the Wedding Priest in the Hot Springs Guild House (Goddard Area).
  7329. +#    (You may need Formal Wear and Adena to pay wedding fees!)
  7330. +# 2) Each player needs to speak to the NPC and make the request to be married.
  7331. +# 3) Once done, fireworks will display and the two players will be married.
  7332. +#
  7333. +# 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)
  7334. +#
  7335. +# If you want to cancel your Engagement/Marriage, use the voice command ".divorce nameofyourpartner".
  7336. +#
  7337. +# If you're married you have to pay a specified % of your adena to your partner.
  7338. +#
  7339. +# If a player attempts to become engaged to another player while married they may suffer a penalty if it's enabled below.
  7340. +# ---------------------------------------------------------------------------
  7341. +# Enable/Disable Wedding System
  7342. +AllowWedding = False
  7343. +
  7344. +# Amount of Adena required to get married
  7345. +WeddingPrice = 250000000
  7346. +
  7347. +# Enable/Disable punishing of players who attempt to be engaged to other players while married.
  7348. +WeddingPunishInfidelity = True
  7349. +
  7350. +# Enable/Disable teleport function for married couples.
  7351. +WeddingTeleport = True
  7352. +
  7353. +# Amount of Adena required to teleport to spouse.
  7354. +WeddingTeleportPrice = 50000
  7355. +
  7356. +# Time before character is teleported after using the skill.
  7357. +WeddingTeleportDuration = 60
  7358. +
  7359. +# Enable/Disable same sex marriages.
  7360. +WeddingAllowSameSex = False
  7361. +
  7362. +# Require players to wear formal wear to be married?
  7363. +WeddingFormalWear = True
  7364. +
  7365. +# Amount of Adena (%) a player must pay to the other to get divorced.
  7366. +WeddingDivorceCosts = 20
  7367. +
  7368. +
  7369. +# ---------------------------------------------------------------------------
  7370. +# Team vs. Team Event Engine (by HorridoJoho)
  7371. +# ---------------------------------------------------------------------------
  7372. +
  7373. +# <u><b><font color="red">WARNING: this mod require custom NPC table support turned on !</font></b></u>
  7374. +# CustomNpcTable = True in General.properties
  7375. +# ---------------------------------------------------------------------------
  7376. +# Enable/Disable TvTEvent System
  7377. +# Default: False
  7378. +TvTEventEnabled = False
  7379. +
  7380. +# TvT in instance
  7381. +# Default: False
  7382. +TvTEventInInstance = False
  7383. +
  7384. +# Name of the instance file for TvT
  7385. +# Default: coliseum.xml
  7386. +TvTEventInstanceFile = coliseum.xml
  7387. +
  7388. +# Times TvT will occur (24h format).
  7389. +# Default: 9:00,15:00,21:00,3:00
  7390. +TvTEventInterval = 9:00,15:00,21:00,3:00
  7391. +
  7392. +# Registration timer from start of event (in minutes).
  7393. +# Default: 30
  7394. +TvTEventParticipationTime = 30
  7395. +
  7396. +# Event running time (in minutes).
  7397. +# Default: 20
  7398. +TvTEventRunningTime = 20
  7399. +
  7400. +# TvT Event NPC (create a custom npc of type L2TvTEventNpc).
  7401. +# Default: 70010
  7402. +TvTEventParticipationNpcId = 70010
  7403. +
  7404. +# TvT Event Participation Fee (itemId, number). Fee is not returned.
  7405. +# Example: 57,100000
  7406. +# Default: 0,0
  7407. +TvTEventParticipationFee = 0,0
  7408. +
  7409. +# Location for TvTEvent NPC to spawn in form x,y,z[,heading]
  7410. +# Default: 83425,148585,-3406
  7411. +TvTEventParticipationNpcCoordinates = 83425,148585,-3406
  7412. +
  7413. +# Minimum amount of players allowed in each team.
  7414. +# Default: 1
  7415. +TvTEventMinPlayersInTeams = 1
  7416. +# Maximum amount of players allowed in each team.
  7417. +# Default: 20
  7418. +TvTEventMaxPlayersInTeams = 20
  7419. +
  7420. +# Minimum level of players that may join the event.
  7421. +# Default: 1
  7422. +TvTEventMinPlayerLevel = 1
  7423. +# Maximum level of players that may join the event.
  7424. +# Default: 85
  7425. +TvTEventMaxPlayerLevel = 85
  7426. +
  7427. +# Respawn delay timer (in seconds).
  7428. +# Default: 10
  7429. +TvTEventRespawnTeleportDelay = 10
  7430. +# Exit delay timer (in seconds).
  7431. +# Default: 10
  7432. +TvTEventStartLeaveTeleportDelay = 10
  7433. +
  7434. +# First Team - Name, Start/Death x,y,z location.
  7435. +TvTEventTeam1Name = Team1
  7436. +TvTEventTeam1Coordinates = 148695,46725,-3414
  7437. +
  7438. +# Second Team - Name, Start/Death x,y,z location.
  7439. +TvTEventTeam2Name = Team2
  7440. +TvTEventTeam2Coordinates = 149999,46728,-3414
  7441. +
  7442. +# Reward for winning team.
  7443. +# Example: TvTEventReward = itemId,amount;itemId,amount;itemId,amount
  7444. +TvTEventReward = 57,100000
  7445. +
  7446. +# TvTEvent Rules
  7447. +TvTEventTargetTeamMembersAllowed = True
  7448. +TvTEventScrollsAllowed = False
  7449. +TvTEventPotionsAllowed = False
  7450. +TvTEventSummonByItemAllowed = False
  7451. +
  7452. +# Door ID's to open/close on start/end.
  7453. +# Not supported in instance, use xml template for defining doors.
  7454. +# Example: TvTDoorsToOpen = 1;2;3;4;5;6
  7455. +TvTDoorsToOpen =
  7456. +TvTDoorsToClose =
  7457. +
  7458. +# Should both teams get reward if there's a tie?
  7459. +TvTRewardTeamTie = False
  7460. +
  7461. +# Participant's effects handling on teleport/death.
  7462. +# Effects lasting through death never removed.
  7463. +# 0 - always remove all effects.
  7464. +# 1 - remove all effects only during port to event (noblesse blessing can be used)
  7465. +# 2 - never remove any effect
  7466. +# Default: 0
  7467. +TvTEventEffectsRemoval = 0
  7468. +
  7469. +# Fighter-class participants will be buffed with those buffs each respawn
  7470. +# Format: skill1Id,skill1Level;skill2Id,skill2Level...
  7471. +# Example: 1504,1;1501,1;1502,1;1499,1
  7472. +TvTEventFighterBuffs =
  7473. +
  7474. +# Mage-class participants will be buffed with those buffs each respawn
  7475. +# Format: skill1Id,skill1Level;skill2Id,skill2Level...
  7476. +# Example: 1504,1;1500,1;1501,1;1085,3
  7477. +TvTEventMageBuffs =
  7478. +
  7479. +# Maximum number of allowed participants per IP address (dualbox check)
  7480. +# Default: 0 (no limits)
  7481. +TvTEventMaxParticipantsPerIP = 0
  7482. +
  7483. +# Voiced command (.tvt) working during TVT event to get information about event status
  7484. +TvTAllowVoicedInfoCommand = false
  7485. +
  7486. +
  7487. +# ---------------------------------------------------------------------------
  7488. +# L2J Banking System
  7489. +# ---------------------------------------------------------------------------
  7490. +
  7491. +# Enable/Disable Banking System
  7492. +BankingEnabled = False
  7493. +
  7494. +# Amount of Goldbars a player gets when they use the ".deposit" command. Also the same amount they will lose with ".withdraw".
  7495. +BankingGoldbarCount = 1
  7496. +
  7497. +# Amount of Adena a player gets when they use the ".withdraw" command. Also the same amount they will lose with ".deposit".
  7498. +BankingAdenaCount = 500000000
  7499. +
  7500. +
  7501. +# ---------------------------------------------------------------------------
  7502. +# Warehouse Sorting
  7503. +# Shows Withdraw Window sorted by ItemType (Armor/Weapon/Spellbook....)
  7504. +# ---------------------------------------------------------------------------
  7505. +
  7506. +EnableWarehouseSortingClan = False
  7507. +EnableWarehouseSortingPrivate = False
  7508. +
  7509. +
  7510. +# ---------------------------------------------------------------------------
  7511. +# Offline trade/craft
  7512. +# ---------------------------------------------------------------------------
  7513. +
  7514. +# Option to enable or disable offline trade feature.
  7515. +# Enable -> true, Disable -> false
  7516. +OfflineTradeEnable = False
  7517. +
  7518. +# Option to enable or disable offline craft feature.
  7519. +# Enable -> true, Disable -> false
  7520. +OfflineCraftEnable = False
  7521. +
  7522. +# If set to True, off-line shops will be possible only peace zones.
  7523. +# Default: False
  7524. +OfflineModeInPeaceZone = False
  7525. +
  7526. +# If set to True, players in off-line shop mode wont take any damage, thus they cannot be killed.
  7527. +# Default: False
  7528. +OfflineModeNoDamage = False
  7529. +
  7530. +# If set to True, name color will be changed then entering offline mode
  7531. +OfflineSetNameColor = False
  7532. +
  7533. +# Color of the name in offline mode (if OfflineSetNameColor = True)
  7534. +OfflineNameColor = 808080
  7535. +
  7536. +# Allow fame for characters in offline mode
  7537. +# Enable -> true, Disable -> false
  7538. +OfflineFame = True
  7539. +
  7540. +#Restore offline traders/crafters after restart/shutdown. Default: false.
  7541. +RestoreOffliners = False
  7542. +
  7543. +#Do not restore offline characters, after OfflineMaxDays days spent from first restore.
  7544. +#Require server restart to disconnect expired shops.
  7545. +#0 = disabled (always restore).
  7546. +#Default: 10
  7547. +OfflineMaxDays = 10
  7548. +
  7549. +#Disconnect shop after finished selling, buying.
  7550. +#Default: True
  7551. +OfflineDisconnectFinished = True
  7552. +
  7553. +# ---------------------------------------------------------------------------
  7554. +# Mana Drugs/Potions
  7555. +# ---------------------------------------------------------------------------
  7556. +
  7557. +# This option will enable core support for:
  7558. +# Mana Drug (item ID 726), using skill ID 10000.
  7559. +# Mana Potion (item ID 728), using skill ID 10001.
  7560. +EnableManaPotionSupport = False
  7561. +
  7562. +
  7563. +# ---------------------------------------------------------------------------
  7564. +# Display Server Time
  7565. +# ---------------------------------------------------------------------------
  7566. +
  7567. +# This option will enable displaying of the local server time for /time command.
  7568. +DisplayServerTime = False
  7569. +
  7570. +
  7571. +# ---------------------------------------------------------------------------
  7572. +# Welcome message
  7573. +# ---------------------------------------------------------------------------
  7574. +
  7575. +# Show screen welcome message on character login
  7576. +# Default: False
  7577. +ScreenWelcomeMessageEnable = False
  7578. +
  7579. +# Screen welcome message text to show on character login if enabled
  7580. +# ('#' for a new line, but message can have max 2 lines)
  7581. +ScreenWelcomeMessageText = Welcome to L2J server!
  7582. +
  7583. +# Show screen welcome message for x seconds when character log in to game if enabled
  7584. +ScreenWelcomeMessageTime = 10
  7585. +
  7586. +
  7587. +# ---------------------------------------------------------------------------
  7588. +# AntiFeed
  7589. +# ---------------------------------------------------------------------------
  7590. +
  7591. +# This option will enable antifeed for pvp/pk/clanrep points.
  7592. +# Default: False
  7593. +AntiFeedEnable = False
  7594. +
  7595. +# If set to True, kills from dualbox will not increase pvp/pk points
  7596. +# and clan reputation will not be transferred.
  7597. +# Default: True
  7598. +AntiFeedDualbox = True
  7599. +
  7600. +# If set to True, server will count disconnected (unable to determine ip address)
  7601. +# as dualbox.
  7602. +# Default: True
  7603. +AntiFeedDisconnectedAsDualbox = True
  7604. +
  7605. +# If character died faster than timeout - pvp/pk points for killer will not increase
  7606. +# and clan reputation will not be transferred.
  7607. +# Setting to 0 will disable this feature.
  7608. +# Default: 120 seconds.
  7609. +AntiFeedInterval = 120
  7610. +
  7611. +
  7612. +# ---------------------------------------------------------------------------
  7613. +# Pvp/pk Announce
  7614. +# ---------------------------------------------------------------------------
  7615. +
  7616. +# Default: False
  7617. +AnnouncePkPvP = False
  7618. +
  7619. +# Announce this as normal system message
  7620. +# Default: True
  7621. +AnnouncePkPvPNormalMessage = True
  7622. +
  7623. +# PK message template
  7624. +# variables: $killer, $target
  7625. +AnnouncePkMsg = $killer has slaughtered $target
  7626. +
  7627. +# Pvp message template
  7628. +# variables: $killer, $target
  7629. +AnnouncePvpMsg = $killer has defeated $target
  7630. +
  7631. +
  7632. +# ---------------------------------------------------------------------------
  7633. +# Chat Moderation
  7634. +# ---------------------------------------------------------------------------
  7635. +
  7636. +# This option will enable using of the voice commands .banchat and .unbanchat
  7637. +# for players with corresponding access level (default: 7).
  7638. +# Check access_levels.sql and admin_command_access_rights for details.
  7639. +# Default: False
  7640. +ChatAdmin = False
  7641. +
  7642. +
  7643. +# ---------------------------------------------------------------------------
  7644. +# Hellbound Status Voice Command
  7645. +# ---------------------------------------------------------------------------
  7646. +
  7647. +# This option will enable using of the voice commands .hellbound
  7648. +# for retrieving information about current Hellbound level and trust.
  7649. +# Default: False
  7650. +HellboundStatus = False
  7651. +
  7652. +
  7653. +# ---------------------------------------------------------------------------
  7654. +# Multilingual support
  7655. +# ---------------------------------------------------------------------------
  7656. +
  7657. +# Enable or disable multilingual support.
  7658. +# Default: False
  7659. +MultiLangEnable = False
  7660. +
  7661. +# Default language, if not defined.
  7662. +# Default: en
  7663. +MultiLangDefault = en
  7664. +
  7665. +# List of allowed languages, semicolon separated.
  7666. +# Default: en;ru
  7667. +MultiLangAllowed = en;ru
  7668. +
  7669. +# Enable or disable voice command .lang for changing languages on the fly.
  7670. +# Default: True
  7671. +MultiLangVoiceCommand = True
  7672. +
  7673. +# Enable or disable multilingual SystemMessages support.
  7674. +# Default: False
  7675. +MultiLangSystemMessageEnable = False
  7676. +
  7677. +# List of allowed languages for SystemMessages, semicolon separated.
  7678. +# Default:
  7679. +MultiLangSystemMessageAllowed =
  7680. +
  7681. +# Enable or disable multilingual NpcStrings support.
  7682. +# Default: False
  7683. +MultiLangNpcStringEnable = False
  7684. +
  7685. +# List of allowed languages for NpcStrings, semicolon separated.
  7686. +# Default:
  7687. +MultiLangNpcStringAllowed =
  7688. +
  7689. +
  7690. +# ---------------------------------------------------------------------------
  7691. +# Walker/Bot protection
  7692. +# ---------------------------------------------------------------------------
  7693. +
  7694. +# Basic protection against L2Walker.
  7695. +# Default: False
  7696. +L2WalkerProtection = False
  7697. +
  7698. +
  7699. +# ---------------------------------------------------------------------------
  7700. +# Debug enable/disable voice command
  7701. +# ---------------------------------------------------------------------------
  7702. +
  7703. +# This option will enable voice command .debug allowing players
  7704. +# to turn on/off debugging on self only.
  7705. +# (admin command //debug can enable debugging on any character)
  7706. +# Use admin_command_access_rights table for defining access rights.
  7707. +# Default: False
  7708. +DebugVoiceCommand = False
  7709. +
  7710. +
  7711. +# ---------------------------------------------------------------------------
  7712. +# Dualbox Check
  7713. +# ---------------------------------------------------------------------------
  7714. +
  7715. +# Maximum number of players per IP address allowed to enter game.
  7716. +# Default: 0 (unlimited)
  7717. +DualboxCheckMaxPlayersPerIP = 0
  7718. +
  7719. +# Maximum number of players per IP address allowed to participate in olympiad.
  7720. +# Default: 0 (unlimited)
  7721. +DualboxCheckMaxOlympiadParticipantsPerIP = 0
  7722. +
  7723. +# Maximum number of players per IP address allowed to participate in events using L2J Event Engine (//event).
  7724. +# Default: 0 (unlimited)
  7725. +DualboxCheckMaxL2EventParticipantsPerIP = 0
  7726. +
  7727. +# Whitelist of the addresses for dualbox checks.
  7728. +# Format: Address1,Number1;Address2,Number2...
  7729. +# Network address can be number (127.0.0.1) or symbolic (localhost) formats.
  7730. +# Additional connection number added to the global limits for this address.
  7731. +# For example, if number of TvT event participants per IP address set to the 1 (no dualbox)
  7732. +# and whitelist contains "l2jserver.com,2" then number of allowed participants from l2jserver.com
  7733. +# will be 1+2=3. Use 0 or negative value for unlimited number of connections.
  7734. +# Default: 127.0.0.1,0 (no limits from localhost)
  7735. +DualboxCheckWhitelist = 127.0.0.1,0
  7736. +
  7737. +# ---------------------------------------------------------------------------
  7738. +# Password Change
  7739. +# ---------------------------------------------------------------------------
  7740. +
  7741. +# Enables .changepassword voiced command which allows the players to change their account's password ingame.
  7742. +# Default: False
  7743. +AllowChangePassword = False
  7744. \ No newline at end of file
  7745. diff --git a/dist/game/config/default/MMO.properties b/dist/game/config/default/MMO.properties
  7746. new file mode 100644
  7747. index 0000000..1882ae9
  7748. --- /dev/null
  7749. +++ b/dist/game/config/default/MMO.properties
  7750. @@ -0,0 +1,24 @@
  7751. +#---------------------------------------------------------------
  7752. +# MMO
  7753. +#---------------------------------------------------------------
  7754. +
  7755. +# Sleep time for all Selectors
  7756. +# After he finished his job the Selector waits the given time in milliseconds
  7757. +# Lower values will speed up the loop and the Ping is smaller
  7758. +SleepTime = 20
  7759. +
  7760. +# Every loop it send a maximum of the given packages to each connection
  7761. +# Lower values will speed up the loop and the Ping is smaller but cause less output
  7762. +MaxSendPerPass = 12
  7763. +
  7764. +# Every loop it read a maximum of the given packages from each connection
  7765. +# Lower values will speed up the loop and the Ping is smaller but cause less input
  7766. +MaxReadPerPass = 12
  7767. +
  7768. +# Each unfinished read/write need a TEMP storage Buffer
  7769. +# on large player amount we need more Buffers
  7770. +# if there are not enough buffers new ones are generated but not stored for future usage
  7771. +HelperBufferCount = 20
  7772. +
  7773. +# Setting this to True will lower your ping, at the cost of an increase in bandwidth consumption.
  7774. +TcpNoDelay = False
  7775. \ No newline at end of file
  7776. diff --git a/dist/game/config/default/NPC.properties b/dist/game/config/default/NPC.properties
  7777. new file mode 100644
  7778. index 0000000..5ee254c
  7779. --- /dev/null
  7780. +++ b/dist/game/config/default/NPC.properties
  7781. @@ -0,0 +1,218 @@
  7782. +# ---------------------------------------------------------------------------
  7783. +# NPC Settings
  7784. +# ---------------------------------------------------------------------------
  7785. +# This properties file is solely for the purpose of NPC modifications and settings that directly influence them.
  7786. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  7787. +# Warning:
  7788. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  7789. +
  7790. +# ---------------------------------------------------------------------------
  7791. +# General
  7792. +# ---------------------------------------------------------------------------
  7793. +
  7794. +# Global announcements will be made indicating Blacksmith/Merchant of Mammon
  7795. +# Spawning points.
  7796. +# Default: False
  7797. +AnnounceMammonSpawn = False
  7798. +
  7799. +# True - Mobs can be aggressive while in peace zones.
  7800. +# False - Mobs can NOT be aggressive while in peace zones.
  7801. +# Default: True
  7802. +AltMobAgroInPeaceZone = True
  7803. +
  7804. +# Defines whether NPCs are attackable by default
  7805. +# Retail: True
  7806. +AltAttackableNpcs = True
  7807. +
  7808. +# Allows non-GM players to view NPC stats via shift-click
  7809. +# Default: False
  7810. +AltGameViewNpc = False
  7811. +
  7812. +# Maximum distance mobs can randomly go from spawn point.
  7813. +# DEFAULT NEEDS TO BE VERIFIED, MUST BE CHANGED HERE AND IN CONFIG.JAVA IF NOT CORRECT
  7814. +# Default: 300
  7815. +MaxDriftRange = 300
  7816. +
  7817. +# Default: False
  7818. +ShowNpcLevel = False
  7819. +
  7820. +# Show clan, alliance crests for territory NPCs without quests
  7821. +# Default: False
  7822. +ShowCrestWithoutQuest = False
  7823. +
  7824. +# Custom random EnchantEffect
  7825. +# All npcs with weapons get random weapon enchanted value
  7826. +# Enchantment is only visual, range is 4-21
  7827. +# Default: False
  7828. +EnableRandomEnchantEffect = False
  7829. +
  7830. +# The minimum NPC level for the Gracia Epilogue rule:
  7831. +# "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."
  7832. +# Notes:
  7833. +#  If you want to disable this feature then set it 99
  7834. +# Default: 78
  7835. +MinNPCLevelForDmgPenalty = 78
  7836. +
  7837. +# The penalty in percent for -2 till -5 level differences
  7838. +# default:
  7839. +# normal - 0.7, 0.6, 0.6, 0.55
  7840. +# critical - 0.75, 0.65, 0.6, 0.58
  7841. +# skill - 0.8, 0.7, 0.65, 0.62
  7842. +DmgPenaltyForLvLDifferences = 0.7, 0.6, 0.6, 0.55
  7843. +CritDmgPenaltyForLvLDifferences = 0.75, 0.65, 0.6, 0.58
  7844. +SkillDmgPenaltyForLvLDifferences = 0.8, 0.7, 0.65, 0.62
  7845. +
  7846. +# The minimum NPC level for the Gracia Epilogue rule:
  7847. +# "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."
  7848. +# Notes:
  7849. +#  If you want to disable this feature then set it 99
  7850. +# Default: 78
  7851. +MinNPCLevelForMagicPenalty = 78
  7852. +
  7853. +# The penalty in percent for -3 till -6 level differences
  7854. +# Default: unknown
  7855. +SkillChancePenaltyForLvLDifferences = 2.5, 3.0, 3.25, 3.5
  7856. +
  7857. +# ---------------------------------------------------------------------------
  7858. +# Monsters
  7859. +# ---------------------------------------------------------------------------
  7860. +
  7861. +# Decay Time Task (don't set it too low!) (in milliseconds):
  7862. +# Default: 5000
  7863. +DecayTimeTask = 5000
  7864. +
  7865. +# This is the default corpse time (in seconds).
  7866. +# Default: 7
  7867. +DefaultCorpseTime = 7
  7868. +
  7869. +# This is the time that will be added to spoiled corpse time (in seconds).
  7870. +# Default: 10
  7871. +SpoiledCorpseExtendTime = 10
  7872. +
  7873. +# The time allowed to use a corpse consume skill before the corpse decays.
  7874. +# Default: 2000
  7875. +CorpseConsumeSkillAllowedTimeBeforeDecay = 2000
  7876. +
  7877. +# ---------------------------------------------------------------------------
  7878. +# Guards
  7879. +# ---------------------------------------------------------------------------
  7880. +
  7881. +# True - Allows guards to attack aggressive mobs within range.
  7882. +# Default: False
  7883. +GuardAttackAggroMob = False
  7884. +
  7885. +
  7886. +# ---------------------------------------------------------------------------
  7887. +# Pets
  7888. +# ---------------------------------------------------------------------------
  7889. +
  7890. +# This option enables or disables the Wyvern manager located in every castle
  7891. +# to train Wyverns and Striders from Hatchlings.
  7892. +# Default: False
  7893. +AllowWyvernUpgrader = False
  7894. +
  7895. +# Pets that can be rented.
  7896. +# Example: 30827, 32471, 34486, 36547
  7897. +# Default: 30827
  7898. +ListPetRentNpc = 30827
  7899. +
  7900. +# This will control the inventory space limit for pets (NOT WEIGHT LIMIT).
  7901. +# Default: 12
  7902. +MaximumSlotsForPet = 12
  7903. +
  7904. +# HP/MP Regen Multiplier for Pets
  7905. +# Default: 100, 100
  7906. +PetHpRegenMultiplier = 100
  7907. +PetMpRegenMultiplier = 100
  7908. +
  7909. +# ---------------------------------------------------------------------------
  7910. +# Raid Bosses
  7911. +# ---------------------------------------------------------------------------
  7912. +
  7913. +# Percent of HP and MP regeneration for raid bosses.
  7914. +# Example: Setting HP to 10 will cause raid boss HP to regenerate 90% slower than normal.
  7915. +# Default: 100, 100
  7916. +RaidHpRegenMultiplier = 100
  7917. +RaidMpRegenMultiplier = 100
  7918. +
  7919. +# Percent of physical and magical defense for raid bosses.
  7920. +# Example: A setting of 10 will cause defense to be 90% lower than normal,
  7921. +# while 110 will cause defense to be 10% higher than normal.
  7922. +# Default: 100, 100
  7923. +RaidPDefenceMultiplier = 100
  7924. +RaidMDefenceMultiplier = 100
  7925. +
  7926. +# Percent of physical and magical attack for raid bosses.
  7927. +# Example: A setting of 10 will cause attack to be 90% lower than normal,
  7928. +# while 110 will cause attack to be 10% higher than normal.
  7929. +# Default: 100, 100
  7930. +RaidPAttackMultiplier = 100
  7931. +RaidMAttackMultiplier = 100
  7932. +
  7933. +# Configure Minimum and Maximum time multiplier between raid boss re-spawn.
  7934. +# By default 12Hours*1.0 for Minimum Time and 24Hours*1.0 for Maximum Time.
  7935. +# Example: Setting RaidMaxRespawnMultiplier to 2 will make the time between
  7936. +# re-spawn 24 hours to 48 hours.
  7937. +# Default: 1.0, 1.0
  7938. +RaidMinRespawnMultiplier = 1.0
  7939. +RaidMaxRespawnMultiplier = 1.0
  7940. +
  7941. +# Configure the interval at which raid boss minions will re-spawn.
  7942. +# This time is in milliseconds, 1 minute is 60000 milliseconds.
  7943. +# Default: 300000
  7944. +RaidMinionRespawnTime = 300000
  7945. +
  7946. +# Let's make handling of minions with non-standard static respawn easier - no additional code, just config.
  7947. +# Format: minionId1,timeInSec1;minionId2,timeInSec2
  7948. +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
  7949. +
  7950. +# Disable Raid Curse if raid more than 8 levels lower.
  7951. +# Caution: drop will be reduced or even absent if DeepBlue drop rules enabled.  
  7952. +# Default: False
  7953. +DisableRaidCurse = False
  7954. +
  7955. +# Configure the interval at which raid bosses and minions wont reconsider their target
  7956. +# This time is in seconds, 1 minute is 60 seconds.
  7957. +# Default: 10,10,10
  7958. +RaidChaosTime = 10
  7959. +GrandChaosTime = 10
  7960. +MinionChaosTime = 10
  7961. +
  7962. +# ---------------------------------------------------------------------------
  7963. +# Drops
  7964. +# ---------------------------------------------------------------------------
  7965. +
  7966. +# If True, activates bellow level gap rules for standard mobs:
  7967. +# Default: True
  7968. +UseDeepBlueDropRules = True
  7969. +
  7970. +# If True, activates bellow level gap rules for raid bosses:
  7971. +# Default: True
  7972. +UseDeepBlueDropRulesRaid = True
  7973. +
  7974. +
  7975. +# The min and max level difference used for level gap calculation
  7976. +# this is only for how many levels higher the player is than the monster
  7977. +# Default: 8
  7978. +DropAdenaMinLevelDifference=8
  7979. +# Default: 15
  7980. +DropAdenaMaxLevelDifference=15
  7981. +
  7982. +# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
  7983. +# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
  7984. +# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
  7985. +# Default: 10
  7986. +DropAdenaMinLevelGapChance=10
  7987. +
  7988. +# The min and max level difference used for level gap calculation
  7989. +# this is only for how many levels higher the player is than the monster
  7990. +# Default: 5
  7991. +DropItemMinLevelDifference=5
  7992. +# Default: 10
  7993. +DropItemMaxLevelDifference=10
  7994. +
  7995. +# This is the minimum level gap chance meaning for 10 that the monster will have 10% chance
  7996. +# to allow dropping the item if level difference is bigger than DropAdenaMaxLevelDifference
  7997. +# Note: This value is scalling from 100 to the specified value for DropAdenaMinLevelDifference to DropAdenaMaxLevelDifference limits
  7998. +# Default: 10
  7999. +DropItemMinLevelGapChance=10
  8000. \ No newline at end of file
  8001. diff --git a/dist/game/config/default/Olympiad.properties b/dist/game/config/default/Olympiad.properties
  8002. new file mode 100644
  8003. index 0000000..8940338
  8004. --- /dev/null
  8005. +++ b/dist/game/config/default/Olympiad.properties
  8006. @@ -0,0 +1,166 @@
  8007. +# ---------------------------------------------------------------------------
  8008. +# Olympiad Settings
  8009. +# ---------------------------------------------------------------------------
  8010. +
  8011. +# The defaults are set to be retail-like.
  8012. +# If you modify any of these settings your server will deviate from being retail-like.
  8013. +# Warning:
  8014. +# Please take extreme caution when changing anything.
  8015. +# Also please understand what you are changing before you do so on a live server.
  8016. +# ---------------------------------------------------------------------------
  8017. +
  8018. +# Olympiad Start Time in Military hours Default 6pm (18)
  8019. +# Default: 18
  8020. +AltOlyStartTime = 18
  8021. +
  8022. +# Olympiad Start Time for Min's, Default 00 so at the start of the hour.
  8023. +# Default: 00
  8024. +AltOlyMin = 00
  8025. +
  8026. +# Maximum number of buffs.
  8027. +# Default: 5
  8028. +AltOlyMaxBuffs = 5
  8029. +
  8030. +# Olympiad Competition Period, Default 6 hours.
  8031. +# (If set different, should be increment by 10mins)
  8032. +# Default: 21600000
  8033. +AltOlyCPeriod = 21600000
  8034. +
  8035. +# Olympiad Battle Period, Default 5 minutes.
  8036. +# Default: 300000
  8037. +AltOlyBattle = 300000
  8038. +
  8039. +# Olympiad Weekly Period, Default 1 week
  8040. +# Used for adding points to nobles
  8041. +# Default: 604800000
  8042. +AltOlyWPeriod = 604800000
  8043. +
  8044. +# Olympiad Validation Period, Default 24 Hours.
  8045. +# Default: 86400000
  8046. +AltOlyVPeriod = 86400000
  8047. +
  8048. +# Points for reaching Noblesse for the first time
  8049. +# Default: 10
  8050. +AltOlyStartPoints = 10
  8051. +
  8052. +# Points every week
  8053. +# Default: 10
  8054. +AltOlyWeeklyPoints = 10
  8055. +
  8056. +# Required number of participants for the class based games
  8057. +# Default: 11
  8058. +AltOlyClassedParticipants = 11
  8059. +
  8060. +# Required number of participants for the non-class based games
  8061. +# Default: 11
  8062. +AltOlyNonClassedParticipants = 11
  8063. +
  8064. +# Required number of participants for the 3x3 teams games
  8065. +# Default: 6
  8066. +AltOlyTeamsParticipants = 6
  8067. +
  8068. +# Number used for displaying amount of registered participants, messages "Fewer than ..." or "More than ...".
  8069. +# 0 for displaying digits instead of text phrase (old style).
  8070. +# Default: 100
  8071. +AltOlyRegistrationDisplayNumber = 100
  8072. +
  8073. +# Reward for the class based games
  8074. +# Format: itemId1,itemNum1;itemId2,itemNum2...
  8075. +# Default: 13722,50
  8076. +AltOlyClassedReward = 13722,50
  8077. +
  8078. +# Reward for the non-class based games
  8079. +# Format: itemId1,itemNum1;itemId2,itemNum2...
  8080. +# Default: 13722,40
  8081. +AltOlyNonClassedReward = 13722,40
  8082. +
  8083. +# Reward for the 3x3 teams games
  8084. +# Format: itemId1,itemNum1;itemId2,itemNum2...
  8085. +# Default: 13722,85
  8086. +AltOlyTeamReward = 13722,85
  8087. +
  8088. +# ItemId used for exchanging to the points.
  8089. +# Default: 13722
  8090. +AltOlyCompRewItem = 13722
  8091. +
  8092. +# The minimal matches you need to participate to receive point rewards
  8093. +# Default: 15
  8094. +AltOlyMinMatchesForPoints = 15
  8095. +
  8096. +# Rate to exchange points to reward item.
  8097. +# Default: 1000
  8098. +AltOlyGPPerPoint = 1000
  8099. +
  8100. +# Noblesse points awarded to Heroes.
  8101. +# Default: 200
  8102. +AltOlyHeroPoints = 200
  8103. +
  8104. +# Noblesse points awarded to Rank 1 members.
  8105. +# Default: 100
  8106. +AltOlyRank1Points = 100
  8107. +
  8108. +# Noblesse points awarded to Rank 2 members.
  8109. +# Default: 75
  8110. +AltOlyRank2Points = 75
  8111. +
  8112. +# Noblesse points awarded to Rank 3 members.
  8113. +# Default: 55
  8114. +AltOlyRank3Points = 55
  8115. +
  8116. +# Noblesse points awarded to Rank 4 members.
  8117. +# Default: 40
  8118. +AltOlyRank4Points = 40
  8119. +
  8120. +# Noblesse points awarded to Rank 5 members.
  8121. +# Default: 30
  8122. +AltOlyRank5Points = 30
  8123. +
  8124. +# Maximum points that player can gain/lose on a match.
  8125. +# Default: 10
  8126. +AltOlyMaxPoints = 10
  8127. +
  8128. +# Hero tables show last month's winners or current status.
  8129. +# Default: True
  8130. +AltOlyShowMonthlyWinners = True
  8131. +
  8132. +# Olympiad Managers announce each start of fight.
  8133. +# Default: True
  8134. +AltOlyAnnounceGames = True
  8135. +
  8136. +# Restrict specified items in Olympiad. ItemID's need to be separated with a comma (ex. 1,200,350)
  8137. +# Equipped items will be moved to inventory during port.
  8138. +# 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
  8139. +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
  8140. +
  8141. +# Enchant limit for items during Olympiad battles. Disabled = -1.
  8142. +# Default: -1
  8143. +AltOlyEnchantLimit = -1
  8144. +
  8145. +# Log all Olympiad fights and outcome to olympiad.csv file.
  8146. +# Default: False
  8147. +AltOlyLogFights = False
  8148. +
  8149. +# Time to wait before teleported to arena.
  8150. +# Default: 120
  8151. +AltOlyWaitTime = 120
  8152. +
  8153. +# Divider for points in classed and non-classed games
  8154. +# Default: 5, 5
  8155. +AltOlyDividerClassed = 5
  8156. +AltOlyDividerNonClassed = 5
  8157. +
  8158. +# Maximum number of matches a Noblesse character can join per week
  8159. +# Default: 70
  8160. +AltOlyMaxWeeklyMatches = 70
  8161. +
  8162. +# Maximum number of Class-Irrelevant Individual matches a character can join per week
  8163. +# Default: 60
  8164. +AltOlyMaxWeeklyMatchesNonClassed = 60
  8165. +
  8166. +# Maximum number of Class Individual matches a character can join per week
  8167. +# Default: 30
  8168. +AltOlyMaxWeeklyMatchesClassed = 30
  8169. +
  8170. +# Maximum number of Class-Irrelevant Team matches a character can join per week
  8171. +# Default: 10
  8172. +AltOlyMaxWeeklyMatchesTeam = 10
  8173. \ No newline at end of file
  8174. diff --git a/dist/game/config/default/PVP.properties b/dist/game/config/default/PVP.properties
  8175. new file mode 100644
  8176. index 0000000..b9a6ab4
  8177. --- /dev/null
  8178. +++ b/dist/game/config/default/PVP.properties
  8179. @@ -0,0 +1,43 @@
  8180. +# ---------------------------------------------------------------------------
  8181. +# PvP Related Settings
  8182. +# ---------------------------------------------------------------------------
  8183. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  8184. +# Warning:
  8185. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  8186. +# ---------------------------------------------------------------------------
  8187. +# PK'er Drop Settings
  8188. +# ---------------------------------------------------------------------------
  8189. +
  8190. +# Default: False
  8191. +CanGMDropEquipment = False
  8192. +
  8193. +# Warning: Make sure the lists do NOT CONTAIN
  8194. +# trailing spaces or spaces between the numbers!
  8195. +# List of pet items we cannot drop.
  8196. +# Default: 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
  8197. +ListOfPetItems = 2375,3500,3501,3502,4422,4423,4424,4425,6648,6649,6650
  8198. +
  8199. +# Lists of items which should NEVER be dropped (note, Adena will
  8200. +# never be dropped) whether on this list or not
  8201. +# 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
  8202. +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
  8203. +
  8204. +# Default: 6
  8205. +MinimumPKRequiredToDrop = 6
  8206. +
  8207. +
  8208. +# ---------------------------------------------------------------------------
  8209. +# Misc.
  8210. +# ---------------------------------------------------------------------------
  8211. +
  8212. +# Should we award a pvp point for killing a player with karma?
  8213. +# Default: False
  8214. +AwardPKKillPVPPoint = False
  8215. +
  8216. +# How much time one stays in PvP mode after hitting an innocent (in ms)
  8217. +# Default: 120000
  8218. +PvPVsNormalTime = 120000
  8219. +
  8220. +# Length one stays in PvP mode after hitting a purple player (in ms)
  8221. +# Default: 60000
  8222. +PvPVsPvPTime = 60000
  8223. \ No newline at end of file
  8224. diff --git a/dist/game/config/default/Rates.properties b/dist/game/config/default/Rates.properties
  8225. new file mode 100644
  8226. index 0000000..909c6a9
  8227. --- /dev/null
  8228. +++ b/dist/game/config/default/Rates.properties
  8229. @@ -0,0 +1,166 @@
  8230. +# ---------------------------------------------------------------------------
  8231. +# Rate Settings
  8232. +# ---------------------------------------------------------------------------
  8233. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  8234. +# Warning:
  8235. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  8236. +
  8237. +# ---------------------------------------------------------------------------
  8238. +# Item Rates
  8239. +# ---------------------------------------------------------------------------
  8240. +# Warning: Remember if you increase both chance and amount you will have higher rates than expected
  8241. +# Example: if amount multiplier is 5 and chance multiplier is 5 you will end up with 5*5 = 25 drop rates so be careful!
  8242. +
  8243. +
  8244. +# Multiplies the amount of items dropped from monster on ground when it dies.
  8245. +DeathDropAmountMultiplier = 1
  8246. +# Multiplies the amount of items looted from monster when a skill like Sweeper(Spoil) is used.
  8247. +CorpseDropAmountMultiplier = 1
  8248. +# Multiplies the amount of items dropped from monster on ground when it dies.
  8249. +HerbDropAmountMultiplier = 1
  8250. +RaidDropAmountMultiplier = 1
  8251. +
  8252. +# Multiplies the chance of items that can be dropped from monster on ground when it dies.
  8253. +DeathDropChanceMultiplier = 1
  8254. +# Multiplies the chance of items that can be looted from monster when a skill like Sweeper(Spoil) is used.
  8255. +CorpseDropChanceMultiplier = 1
  8256. +# Multiplies the chance of items that can be dropped from monster on ground when it dies.
  8257. +HerbDropChanceMultiplier = 1
  8258. +RaidDropChanceMultiplier = 1
  8259. +
  8260. +# List of items affected by custom drop rate by id, used now for Adena rate too.
  8261. +# Usage: itemId1,multiplier1;itemId2,multiplier2;...
  8262. +# Note: Make sure the lists do NOT CONTAIN trailing spaces or spaces between the numbers!
  8263. +# 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;
  8264. +# Default: 57,1
  8265. +DropAmountMultiplierByItemId = 57,1
  8266. +DropChanceMultiplierByItemId = 57,1
  8267. +
  8268. +
  8269. +# ---------------------------------------------------------------------------
  8270. +# Standard Settings (Retail value = 1)
  8271. +# ---------------------------------------------------------------------------
  8272. +
  8273. +
  8274. +# Experience multiplier
  8275. +RateXp = 1
  8276. +# Skill points multiplier
  8277. +RateSp = 1
  8278. +# Experience multiplier (Party)
  8279. +RatePartyXp = 1
  8280. +# Skill points multiplier (Party)
  8281. +RatePartySp = 1
  8282. +RateDropManor = 1
  8283. +# Karma decreasing rate
  8284. +# Note: -1 means RateXp so it means it will use retail rate for decreasing karma upon death or receiving exp by farming mobs.
  8285. +# Default: -1
  8286. +RateKarmaLost = -1
  8287. +RateKarmaExpLost = 1
  8288. +RateSiegeGuardsPrice = 1
  8289. +
  8290. +# Modify the rate of reward of all extractable items and skills.
  8291. +# Default: 1.
  8292. +RateExtractable = 1.
  8293. +
  8294. +# Hellbound trust increase/decrease multipliers
  8295. +RateHellboundTrustIncrease = 1
  8296. +RateHellboundTrustDecrease = 1
  8297. +
  8298. +# Quest Multipliers
  8299. +# Warning: Many quests need to be rewritten
  8300. +# for this setting to work properly.
  8301. +
  8302. +# Quest item drop multiplier
  8303. +RateQuestDrop = 1
  8304. +
  8305. +# Exp/SP reward multipliers
  8306. +RateQuestRewardXP = 1
  8307. +RateQuestRewardSP = 1
  8308. +
  8309. +# Adena reward multiplier
  8310. +RateQuestRewardAdena = 1
  8311. +
  8312. +# Use additional item multipliers?
  8313. +# Default: False
  8314. +UseQuestRewardMultipliers = False
  8315. +
  8316. +# Default reward multiplier
  8317. +# When UseRewardMultipliers=False - default multiplier is used for any reward
  8318. +# When UseRewardMultipliers=True  - default multiplier is used for all items not affected by additional multipliers
  8319. +# Default: 1
  8320. +RateQuestReward = 1
  8321. +
  8322. +# Additional quest-reward multipliers based on item type
  8323. +RateQuestRewardPotion = 1
  8324. +RateQuestRewardScroll = 1
  8325. +RateQuestRewardRecipe = 1
  8326. +RateQuestRewardMaterial = 1
  8327. +
  8328. +# ---------------------------------------------------------------------------
  8329. +# Vitality system rates. Works only if EnableVitality = True
  8330. +# ---------------------------------------------------------------------------
  8331. +
  8332. +# The following configures the XP multiplier of each vitality level. Basically, you have
  8333. +# 5 levels, the first one being 0. Official rates are:
  8334. +# Level 1: 150%
  8335. +# Level 2: 200%
  8336. +# Level 3: 250%
  8337. +# Level 4: 300%
  8338. +# Take care setting these values according to your server rates, as the can lead to huge differences!
  8339. +# Example with a server rate 15x and a level 4 vitality = 3. => final server rate = 45 (15x3)!
  8340. +RateVitalityLevel1 = 1.5
  8341. +RateVitalityLevel2 = 2.
  8342. +RateVitalityLevel3 = 2.5
  8343. +RateVitalityLevel4 = 3.
  8344. +
  8345. +# These options are to be used if you want to increase the vitality gain/lost for each mob you kills
  8346. +# Default values are 1.
  8347. +RateVitalityGain = 1.
  8348. +RateVitalityLost = 1.
  8349. +
  8350. +# This defines how many times faster do the players regain their vitality when in peace zones
  8351. +RateRecoveryPeaceZone = 1.
  8352. +
  8353. +# This defines how many times faster do the players regain their vitality when offline
  8354. +# Note that you need to turn on "RecoverVitalityOnReconnect" to have this option effective
  8355. +RateRecoveryOnReconnect = 4.
  8356. +
  8357. +
  8358. +# ---------------------------------------------------------------------------
  8359. +# Player Drops (values are set in PERCENTS)
  8360. +# ---------------------------------------------------------------------------
  8361. +
  8362. +PlayerDropLimit = 0
  8363. +# in %
  8364. +PlayerRateDrop = 0
  8365. +# in %
  8366. +PlayerRateDropItem = 0
  8367. +# in %
  8368. +PlayerRateDropEquip = 0
  8369. +# in %
  8370. +PlayerRateDropEquipWeapon = 0
  8371. +
  8372. +# Default: 10
  8373. +KarmaDropLimit = 10
  8374. +
  8375. +# Default: 40
  8376. +KarmaRateDrop = 40
  8377. +
  8378. +# Default: 50
  8379. +KarmaRateDropItem = 50
  8380. +
  8381. +# Default: 40
  8382. +KarmaRateDropEquip = 40
  8383. +
  8384. +# Default: 10
  8385. +KarmaRateDropEquipWeapon = 10
  8386. +
  8387. +
  8388. +# ---------------------------------------------------------------------------
  8389. +# Pets (Default value = 1)
  8390. +# ---------------------------------------------------------------------------
  8391. +
  8392. +PetXpRate = 1
  8393. +PetFoodRate = 1
  8394. +SinEaterXpRate = 1
  8395. +
  8396. diff --git a/dist/game/config/default/SecondaryAuth.xml b/dist/game/config/default/SecondaryAuth.xml
  8397. new file mode 100644
  8398. index 0000000..b5c8476
  8399. --- /dev/null
  8400. +++ b/dist/game/config/default/SecondaryAuth.xml
  8401. @@ -0,0 +1,338 @@
  8402. +<?xml version="1.0" encoding="UTF-8"?>
  8403. +<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../data/xsd/SecondaryAuth.xsd">
  8404. +   <enabled>false</enabled> <!-- Enable Secondary Authentication on Character Select -->
  8405. +   <maxAttempts>5</maxAttempts> <!-- Max Attempts for Second Auth Password (0 to disable) -->
  8406. +   <banTime>480</banTime> <!-- Ban time if user reach maxAttempts (in minutes) -->
  8407. +   <recoveryLink>http://www.example.com/l2j/charPassRec.php</recoveryLink> <!-- Password Recovery Link -->
  8408. +   <forbiddenPasswords> <!-- List of forbidden passwords -->
  8409. +       <!-- Client checks for the entries below so you should not remove or edit any of these just add more -->
  8410. +       <password>000000</password>
  8411. +       <password>111111</password>
  8412. +       <password>222222</password>
  8413. +       <password>333333</password>
  8414. +       <password>444444</password>
  8415. +       <password>555555</password>
  8416. +       <password>666666</password>
  8417. +       <password>777777</password>
  8418. +       <password>888888</password>
  8419. +       <password>999999</password>
  8420. +       <password>123456</password>
  8421. +       <password>234567</password>
  8422. +       <password>345678</password>
  8423. +       <password>456789</password>
  8424. +       <password>567890</password>
  8425. +       <password>012345</password>
  8426. +       <password>098765</password>
  8427. +       <password>987654</password>
  8428. +       <password>876543</password>
  8429. +       <password>765432</password>
  8430. +       <password>543210</password>
  8431. +       <password>010101</password>
  8432. +       <password>020202</password>
  8433. +       <password>030303</password>
  8434. +       <password>040404</password>
  8435. +       <password>050505</password>
  8436. +       <password>060606</password>
  8437. +       <password>070707</password>
  8438. +       <password>080808</password>
  8439. +       <password>090909</password>
  8440. +       <password>121212</password>
  8441. +       <password>131313</password>
  8442. +       <password>141414</password>
  8443. +       <password>151515</password>
  8444. +       <password>161616</password>
  8445. +       <password>171717</password>
  8446. +       <password>181818</password>
  8447. +       <password>191919</password>
  8448. +       <password>101010</password>
  8449. +       <password>212121</password>
  8450. +       <password>232323</password>
  8451. +       <password>242424</password>
  8452. +       <password>252525</password>
  8453. +       <password>262626</password>
  8454. +       <password>272727</password>
  8455. +       <password>282828</password>
  8456. +       <password>292929</password>
  8457. +       <password>202020</password>
  8458. +       <password>313131</password>
  8459. +       <password>323232</password>
  8460. +       <password>343434</password>
  8461. +       <password>353535</password>
  8462. +       <password>363636</password>
  8463. +       <password>373737</password>
  8464. +       <password>383838</password>
  8465. +       <password>393939</password>
  8466. +       <password>303030</password>
  8467. +       <password>404040</password>
  8468. +       <password>414141</password>
  8469. +       <password>424242</password>
  8470. +       <password>434343</password>
  8471. +       <password>454545</password>
  8472. +       <password>464646</password>
  8473. +       <password>474747</password>
  8474. +       <password>484848</password>
  8475. +       <password>494949</password>
  8476. +       <password>505050</password>
  8477. +       <password>515151</password>
  8478. +       <password>525252</password>
  8479. +       <password>535353</password>
  8480. +       <password>545454</password>
  8481. +       <password>565656</password>
  8482. +       <password>575757</password>
  8483. +       <password>585858</password>
  8484. +       <password>595959</password>
  8485. +       <password>606060</password>
  8486. +       <password>616161</password>
  8487. +       <password>626262</password>
  8488. +       <password>636363</password>
  8489. +       <password>646464</password>
  8490. +       <password>656565</password>
  8491. +       <password>676767</password>
  8492. +       <password>686868</password>
  8493. +       <password>696969</password>
  8494. +       <password>707070</password>
  8495. +       <password>717171</password>
  8496. +       <password>727272</password>
  8497. +       <password>737373</password>
  8498. +       <password>747474</password>
  8499. +       <password>757575</password>
  8500. +       <password>767676</password>
  8501. +       <password>787878</password>
  8502. +       <password>797979</password>
  8503. +       <password>808080</password>
  8504. +       <password>818181</password>
  8505. +       <password>828282</password>
  8506. +       <password>838383</password>
  8507. +       <password>848484</password>
  8508. +       <password>858585</password>
  8509. +       <password>868686</password>
  8510. +       <password>878787</password>
  8511. +       <password>898989</password>
  8512. +       <password>909090</password>
  8513. +       <password>919191</password>
  8514. +       <password>929292</password>
  8515. +       <password>939393</password>
  8516. +       <password>949494</password>
  8517. +       <password>959595</password>
  8518. +       <password>969696</password>
  8519. +       <password>979797</password>
  8520. +       <password>989898</password>
  8521. +       <password>0000000</password>
  8522. +       <password>1111111</password>
  8523. +       <password>2222222</password>
  8524. +       <password>3333333</password>
  8525. +       <password>4444444</password>
  8526. +       <password>5555555</password>
  8527. +       <password>6666666</password>
  8528. +       <password>7777777</password>
  8529. +       <password>8888888</password>
  8530. +       <password>9999999</password>
  8531. +       <password>0123456</password>
  8532. +       <password>1234567</password>
  8533. +       <password>2345678</password>
  8534. +       <password>3456789</password>
  8535. +       <password>4567890</password>
  8536. +       <password>0987654</password>
  8537. +       <password>9876543</password>
  8538. +       <password>8765432</password>
  8539. +       <password>7654321</password>
  8540. +       <password>6543210</password>
  8541. +       <password>0101010</password>
  8542. +       <password>0202020</password>
  8543. +       <password>0303030</password>
  8544. +       <password>0404040</password>
  8545. +       <password>0505050</password>
  8546. +       <password>0606060</password>
  8547. +       <password>0707070</password>
  8548. +       <password>0808080</password>
  8549. +       <password>0909090</password>
  8550. +       <password>1212121</password>
  8551. +       <password>1313131</password>
  8552. +       <password>1414141</password>
  8553. +       <password>1515151</password>
  8554. +       <password>1616161</password>
  8555. +       <password>1717171</password>
  8556. +       <password>1818181</password>
  8557. +       <password>1919191</password>
  8558. +       <password>1010101</password>
  8559. +       <password>2020202</password>
  8560. +       <password>2121212</password>
  8561. +       <password>2323232</password>
  8562. +       <password>2424242</password>
  8563. +       <password>2525252</password>
  8564. +       <password>2626262</password>
  8565. +       <password>2727272</password>
  8566. +       <password>2828282</password>
  8567. +       <password>2929292</password>
  8568. +       <password>3030303</password>
  8569. +       <password>3131313</password>
  8570. +       <password>3232323</password>
  8571. +       <password>3434343</password>
  8572. +       <password>3535353</password>
  8573. +       <password>3636363</password>
  8574. +       <password>3737373</password>
  8575. +       <password>3838383</password>
  8576. +       <password>3939393</password>
  8577. +       <password>4040404</password>
  8578. +       <password>4141414</password>
  8579. +       <password>4242424</password>
  8580. +       <password>4343434</password>
  8581. +       <password>4545454</password>
  8582. +       <password>4646464</password>
  8583. +       <password>4747474</password>
  8584. +       <password>4848484</password>
  8585. +       <password>4949494</password>
  8586. +       <password>5050505</password>
  8587. +       <password>5151515</password>
  8588. +       <password>5252525</password>
  8589. +       <password>5353535</password>
  8590. +       <password>5454545</password>
  8591. +       <password>5656565</password>
  8592. +       <password>5757575</password>
  8593. +       <password>5858585</password>
  8594. +       <password>5959595</password>
  8595. +       <password>6060606</password>
  8596. +       <password>6161616</password>
  8597. +       <password>6262626</password>
  8598. +       <password>6363636</password>
  8599. +       <password>6464646</password>
  8600. +       <password>6565656</password>
  8601. +       <password>6767676</password>
  8602. +       <password>6868686</password>
  8603. +       <password>6969696</password>
  8604. +       <password>7070707</password>
  8605. +       <password>7171717</password>
  8606. +       <password>7272727</password>
  8607. +       <password>7373737</password>
  8608. +       <password>7474747</password>
  8609. +       <password>7575757</password>
  8610. +       <password>7676767</password>
  8611. +       <password>7878787</password>
  8612. +       <password>7979797</password>
  8613. +       <password>8080808</password>
  8614. +       <password>8181818</password>
  8615. +       <password>8282828</password>
  8616. +       <password>8383838</password>
  8617. +       <password>8484848</password>
  8618. +       <password>8585858</password>
  8619. +       <password>8686868</password>
  8620. +       <password>8787878</password>
  8621. +       <password>8989898</password>
  8622. +       <password>9090909</password>
  8623. +       <password>9191919</password>
  8624. +       <password>9292929</password>
  8625. +       <password>9393939</password>
  8626. +       <password>9494949</password>
  8627. +       <password>9595959</password>
  8628. +       <password>9696969</password>
  8629. +       <password>9797979</password>
  8630. +       <password>9898989</password>
  8631. +       <password>00000000</password>
  8632. +       <password>11111111</password>
  8633. +       <password>22222222</password>
  8634. +       <password>33333333</password>
  8635. +       <password>44444444</password>
  8636. +       <password>55555555</password>
  8637. +       <password>66666666</password>
  8638. +       <password>77777777</password>
  8639. +       <password>88888888</password>
  8640. +       <password>99999999</password>
  8641. +       <password>12345678</password>
  8642. +       <password>23456789</password>
  8643. +       <password>34567890</password>
  8644. +       <password>01234567</password>
  8645. +       <password>98765432</password>
  8646. +       <password>87654321</password>
  8647. +       <password>76543210</password>
  8648. +       <password>01010101</password>
  8649. +       <password>02020202</password>
  8650. +       <password>03030303</password>
  8651. +       <password>04040404</password>
  8652. +       <password>05050505</password>
  8653. +       <password>06060606</password>
  8654. +       <password>07070707</password>
  8655. +       <password>08080808</password>
  8656. +       <password>09090909</password>
  8657. +       <password>10101010</password>
  8658. +       <password>12121212</password>
  8659. +       <password>13131313</password>
  8660. +       <password>14141414</password>
  8661. +       <password>15151515</password>
  8662. +       <password>16161616</password>
  8663. +       <password>17171717</password>
  8664. +       <password>18181818</password>
  8665. +       <password>19191919</password>
  8666. +       <password>20202020</password>
  8667. +       <password>21212121</password>
  8668. +       <password>23232323</password>
  8669. +       <password>24242424</password>
  8670. +       <password>25252525</password>
  8671. +       <password>26262626</password>
  8672. +       <password>27272727</password>
  8673. +       <password>28282828</password>
  8674. +       <password>29292929</password>
  8675. +       <password>30303030</password>
  8676. +       <password>31313131</password>
  8677. +       <password>32323232</password>
  8678. +       <password>34343434</password>
  8679. +       <password>35353535</password>
  8680. +       <password>36363636</password>
  8681. +       <password>37373737</password>
  8682. +       <password>38383838</password>
  8683. +       <password>39393939</password>
  8684. +       <password>40404040</password>
  8685. +       <password>41414141</password>
  8686. +       <password>42424242</password>
  8687. +       <password>43434343</password>
  8688. +       <password>45454545</password>
  8689. +       <password>46464646</password>
  8690. +       <password>47474747</password>
  8691. +       <password>48484848</password>
  8692. +       <password>49494949</password>
  8693. +       <password>50505050</password>
  8694. +       <password>51515151</password>
  8695. +       <password>52525252</password>
  8696. +       <password>53535353</password>
  8697. +       <password>54545454</password>
  8698. +       <password>56565656</password>
  8699. +       <password>57575757</password>
  8700. +       <password>58585858</password>
  8701. +       <password>59595959</password>
  8702. +       <password>60606060</password>
  8703. +       <password>61616161</password>
  8704. +       <password>62626262</password>
  8705. +       <password>63636363</password>
  8706. +       <password>64646464</password>
  8707. +       <password>65656565</password>
  8708. +       <password>67676767</password>
  8709. +       <password>68686868</password>
  8710. +       <password>69696969</password>
  8711. +       <password>70707070</password>
  8712. +       <password>71717171</password>
  8713. +       <password>72727272</password>
  8714. +       <password>73737373</password>
  8715. +       <password>74747474</password>
  8716. +       <password>75757575</password>
  8717. +       <password>76767676</password>
  8718. +       <password>78787878</password>
  8719. +       <password>79797979</password>
  8720. +       <password>80808080</password>
  8721. +       <password>81818181</password>
  8722. +       <password>82828282</password>
  8723. +       <password>83838383</password>
  8724. +       <password>84848484</password>
  8725. +       <password>85858585</password>
  8726. +       <password>86868686</password>
  8727. +       <password>87878787</password>
  8728. +       <password>89898989</password>
  8729. +       <password>90909090</password>
  8730. +       <password>91919191</password>
  8731. +       <password>92929292</password>
  8732. +       <password>93939393</password>
  8733. +       <password>94949494</password>
  8734. +       <password>95959595</password>
  8735. +       <password>96969696</password>
  8736. +       <password>97979797</password>
  8737. +       <password>98989898</password>
  8738. +   </forbiddenPasswords>
  8739. +</list>
  8740. \ No newline at end of file
  8741. diff --git a/dist/game/config/default/Server.properties b/dist/game/config/default/Server.properties
  8742. new file mode 100644
  8743. index 0000000..79d6934
  8744. --- /dev/null
  8745. +++ b/dist/game/config/default/Server.properties
  8746. @@ -0,0 +1,136 @@
  8747. +# ---------------------------------------------------------------------------
  8748. +# Game Server Settings
  8749. +# ---------------------------------------------------------------------------
  8750. +# This is the server configuration file. Here you can set up the connection information for your server.
  8751. +# This was written with the assumption that you are behind a router.
  8752. +# Dumbed Down Definitions...
  8753. +# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
  8754. +# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
  8755. +# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
  8756. +
  8757. +# ---------------------------------------------------------------------------
  8758. +# Networking
  8759. +# ---------------------------------------------------------------------------
  8760. +
  8761. +# Enables automatic port mapping for game server.
  8762. +# If you have a router game server will request for port forwarding.
  8763. +# Default: True
  8764. +EnableUPnP = True
  8765. +
  8766. +# Where's the Login server this gameserver should connect to
  8767. +# 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>
  8768. +# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
  8769. +# Default: 127.0.0.1
  8770. +LoginHost = 127.0.0.1
  8771. +
  8772. +# TCP port the login server listen to for gameserver connection requests
  8773. +# Default: 9014
  8774. +LoginPort = 9014
  8775. +
  8776. +# Bind address for gameserver. You should not need to change it in most cases.
  8777. +# 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>
  8778. +# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
  8779. +# Default: * (0.0.0.0)
  8780. +GameserverHostname = *
  8781. +
  8782. +# Default: 7777
  8783. +GameserverPort = 7777
  8784. +
  8785. +
  8786. +# ---------------------------------------------------------------------------
  8787. +# Database
  8788. +# ---------------------------------------------------------------------------
  8789. +# Database Engine
  8790. +# Available: MySQL, MariaDB
  8791. +# Default: MySQL
  8792. +Database = MySQL
  8793. +
  8794. +# Specify the appropriate driver and url for the database you're using.
  8795. +# Examples:
  8796. +# Driver = com.mysql.jdbc.Driver
  8797. +# Driver = org.hsqldb.jdbcDriver
  8798. +# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
  8799. +# Driver = org.mariadb.jdbc.Driver
  8800. +# Default: com.mysql.jdbc.Driver
  8801. +Driver = com.mysql.jdbc.Driver
  8802. +# Database URL
  8803. +# URL = jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
  8804. +# URL = jdbc:hsqldb:hsql://localhost/l2jgs
  8805. +# URL = jdbc:sqlserver://localhost/database = l2jgs/user = sa/password =
  8806. +# URL = jdbc:mariadb://localhost/l2jgs
  8807. +# Default: jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
  8808. +URL = jdbc:mysql://localhost/l2jgs?useSSL=false&serverTimezone=UTC
  8809. +# Database user info (default is "root" but it's not recommended)
  8810. +Login = root
  8811. +# Database connection password
  8812. +Password = toor
  8813. +
  8814. +# Database Connection Pool
  8815. +# Default: HikariCP
  8816. +# Available: BoneCP, C3P0, HikariCP
  8817. +ConnectionPool = HikariCP
  8818. +
  8819. +# Default: 100
  8820. +MaximumDbConnections = 100
  8821. +
  8822. +# Default: 0
  8823. +MaximumDbIdleTime = 0
  8824. +
  8825. +# ---------------------------------------------------------------------------
  8826. +# Misc Server Settings
  8827. +# ---------------------------------------------------------------------------
  8828. +
  8829. +# This is the server ID that the Game Server will request.
  8830. +# Example: 1 = Bartz
  8831. +# Default: 1
  8832. +RequestServerID = 1
  8833. +
  8834. +# True = The Login Server will give an other ID to the server if the requested ID is already reserved.
  8835. +# Default: True
  8836. +AcceptAlternateID = True
  8837. +
  8838. +# Datapack root directory.
  8839. +# Defaults to current directory from which the server is started unless the below line is uncommented.
  8840. +# WARNING: <u><b><font color="red">If the specified path is invalid, it will lead to multiple errors!</font></b></u>
  8841. +#Default: .
  8842. +DatapackRoot = .
  8843. +
  8844. +# Define how many players are allowed to play simultaneously on your server.
  8845. +# Default: 500
  8846. +MaximumOnlineUsers = 500
  8847. +
  8848. +# Numbers of protocol revisions that server allows to connect.
  8849. +# Delimiter is ;
  8850. +# WARNING: <u><b><font color="red">Changing the protocol revision may result in incompatible communication and many errors in game!</font></b></u>
  8851. +# Default: 267;268;271;273
  8852. +AllowedProtocolRevisions = 267;268;271;273
  8853. +
  8854. +
  8855. +# ---------------------------------------------------------------------------
  8856. +# Misc Player Settings
  8857. +# ---------------------------------------------------------------------------
  8858. +
  8859. +# Player name template.
  8860. +# Examples:
  8861. +# PlayerNameTemplate = [A-Z][a-z]{3,3}[A-Za-z0-9]*
  8862. +# The above setting will allow names with first capital letter, next three small letters,
  8863. +# and any letter (case insensitive) or number, like OmfgWTF1
  8864. +# PlayerNameTemplate = [A-Z][a-z]*
  8865. +# The above setting will allow names only of letters with first one capital, like Omfgwtf
  8866. +# The default forces start with a letter and continues either with letters or numbers.
  8867. +# Default: [a-zA-Z0-9]*
  8868. +PlayerNameTemplate = [a-zA-Z0-9]*
  8869. +
  8870. +# This setting restricts names players can give to their pets.
  8871. +# See CnameTemplate for details
  8872. +# Default: [a-zA-Z0-9]*
  8873. +PetNameTemplate = [a-zA-Z0-9]*
  8874. +
  8875. +# This setting restricts clan/subpledge names players can set.
  8876. +# See CnameTemplate for details
  8877. +# Default: [a-zA-Z0-9]+
  8878. +ClanNameTemplate = [a-zA-Z0-9]*
  8879. +
  8880. +# Maximum number of characters per account.
  8881. +# Default: 7 (client limit)
  8882. +CharMaxNumber = 7
  8883. \ No newline at end of file
  8884. diff --git a/dist/game/config/default/Server_APP_Args.txt b/dist/game/config/default/Server_APP_Args.txt
  8885. new file mode 100644
  8886. index 0000000..e69de29
  8887. --- /dev/null
  8888. +++ b/dist/game/config/default/Server_APP_Args.txt
  8889. diff --git a/dist/game/config/default/Server_JVM_Args.txt b/dist/game/config/default/Server_JVM_Args.txt
  8890. new file mode 100644
  8891. index 0000000..c0f2ac3
  8892. --- /dev/null
  8893. +++ b/dist/game/config/default/Server_JVM_Args.txt
  8894. @@ -0,0 +1,3 @@
  8895. +-Dpython.cachedir=../cachedir
  8896. +-Xms1024m
  8897. +-Xmx1792m
  8898. \ No newline at end of file
  8899. diff --git a/dist/game/config/default/Siege.properties b/dist/game/config/default/Siege.properties
  8900. new file mode 100644
  8901. index 0000000..e188432
  8902. --- /dev/null
  8903. +++ b/dist/game/config/default/Siege.properties
  8904. @@ -0,0 +1,130 @@
  8905. +# ---------------------------------------------------------------------------
  8906. +# Siege Settings
  8907. +# ---------------------------------------------------------------------------
  8908. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  8909. +# Warning:
  8910. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  8911. +
  8912. +# ---------------------------------------------------------------------------
  8913. +# Standard Settings
  8914. +# ---------------------------------------------------------------------------
  8915. +
  8916. +# Length of siege before the count down (in minutes).
  8917. +# Default: 120
  8918. +SiegeLength = 120
  8919. +
  8920. +# Maximum number of flags per clan.
  8921. +# Default: 1
  8922. +MaxFlags = 1
  8923. +
  8924. +# Minimum level to register.
  8925. +# Default: 5
  8926. +SiegeClanMinLevel = 5
  8927. +
  8928. +# Max number of clans that can register on each side.
  8929. +# Default: 500
  8930. +AttackerMaxClans = 500
  8931. +
  8932. +# Default: 500
  8933. +DefenderMaxClans = 500
  8934. +
  8935. +# Respawn times (in milliseconds).
  8936. +# Default: 0
  8937. +AttackerRespawn = 0
  8938. +
  8939. +# Reward successful siege defense with blood alliance in clan warehouse
  8940. +# Default: 1
  8941. +BloodAllianceReward = 1
  8942. +
  8943. +
  8944. +# ---------------------------------------------------------------------------
  8945. +# Castle Control Tower Spawns
  8946. +# ---------------------------------------------------------------------------
  8947. +
  8948. +# Caste Artifacts and Control Towers spawns
  8949. +#
  8950. +# Control Towers syntax:  NameControlTowerN=x,y,z,npc_id,hp
  8951. +# Name - castle name
  8952. +# N - number
  8953. +# x,y,z - coords
  8954. +# npc_id - id of template
  8955. +#
  8956. +# Flame Towers syntax:  NameFlameTowerN=x,y,z,npc_id,hp,zoneIds
  8957. +# Name - castle name
  8958. +# N - number
  8959. +# x,y,z - coords
  8960. +# npc_id - id of template
  8961. +# zoneIds - ids of zones related with tower
  8962. +#
  8963. +
  8964. +# Gludio
  8965. +GludioFlameTower1=-18154,107591,-2560,13004,70017,70019
  8966. +GludioFlameTower2=-19329,108154,-2384,13004,70018,70020
  8967. +GludioControlTower1=-18325,112811,-2377,13002
  8968. +GludioControlTower2=-18048,107098,-2378,13002
  8969. +GludioControlTower3=-18113,108597,-2343,13002
  8970. +GludioMaxMercenaries = 100
  8971. +
  8972. +# Giran
  8973. +GiranFlameTower1=118331,145055,-2627,13004,70025,70027
  8974. +GiranFlameTower2=117768,143880,-2451,13004,70026,70028
  8975. +GiranControlTower1=113115,144829,-2446,13002
  8976. +GiranControlTower2=118828,145106,-2447,13002
  8977. +GiranControlTower3=117329,145041,-2412,13002
  8978. +GiranMaxMercenaries = 200
  8979. +
  8980. +# Dion
  8981. +DionFlameTower1=22114,162159,-2754,13004,70021,70023
  8982. +DionFlameTower2=23289,161596,-2578,13004,70022,70024
  8983. +DionControlTower1=22285,156939,-2571,13002
  8984. +DionControlTower2=22008,162652,-2572,13002
  8985. +DionControlTower3=22073,161153,-2537,13002
  8986. +DionMaxMercenaries = 150
  8987. +
  8988. +# Oren
  8989. +OrenFlameTower1=84407,37150,-2354,13004,70029,70031
  8990. +OrenFlameTower2=83844,35975,-2178,13004,70030,70032
  8991. +OrenControlTower1=79193,36977,-2167,13002
  8992. +OrenControlTower2=84906,37254,-2168,13002
  8993. +OrenControlTower3=83407,37189,-2133,13002
  8994. +OrenMaxMercenaries = 300
  8995. +
  8996. +# Aden
  8997. +AdenFlameTower1=149976,1583,-450,13004,70008,70016,70007,70015,70006,70014,70005,70013
  8998. +AdenFlameTower2=144955,1603,-450,13004,70004,70012,70003,70011,70002,70010,70001,70009
  8999. +AdenControlTower1=148774,2351,-389,13002
  9000. +AdenControlTower2=147456,5724,158,13002
  9001. +AdenControlTower3=146137,2352,-389,13002
  9002. +AdenMaxMercenaries = 400
  9003. +
  9004. +# Innadril
  9005. +InnadrilFlameTower1=116065,250938,-850,13004,70033,70035
  9006. +InnadrilFlameTower2=117240,250375,-674,13004,70034,70036
  9007. +InnadrilControlTower1=116236,245718,-667,13002
  9008. +InnadrilControlTower2=115959,251431,-667,13002
  9009. +InnadrilControlTower3=116024,249932,-633,13002
  9010. +InnadrilMaxMercenaries = 400
  9011. +
  9012. +# Goddard
  9013. +GoddardFlameTower1=148144,-46992,-1609,13004,70037,70039
  9014. +GoddardFlameTower2=146784,-46992,-1609,13004,70038,70040
  9015. +GoddardControlTower1=144672,-48832,-1742,13002
  9016. +GoddardControlTower2=150240,-48832,-1742,13002
  9017. +GoddardControlTower3=147456,-49200,-1619,13002
  9018. +GoddardMaxMercenaries = 400
  9019. +
  9020. +# Rune
  9021. +RuneFlameTower1=12864,-47440,-1087,13004,70041,70043
  9022. +RuneFlameTower2=12225,-50767,1248,13004,70042,70044
  9023. +RuneControlTower1=16565,-50318,-641,13002
  9024. +RuneControlTower2=16559,-48000,-641,13002
  9025. +RuneControlTower3=10775,-48481,83,13002
  9026. +RuneMaxMercenaries = 400
  9027. +
  9028. +# Schuttgart
  9029. +SchuttgartFlameTower1=76872,-151043,120,13004,70045,70047
  9030. +SchuttgartFlameTower2=78233,-151037,120,13004,70046,70048
  9031. +SchuttgartControlTower1=80334,-152898,-8,13002
  9032. +SchuttgartControlTower2=74775,-152928,-8,13002
  9033. +SchuttgartControlTower3=77547,-153246,112,13002
  9034. +SchuttgartMaxMercenaries = 400
  9035. diff --git a/dist/game/config/default/SiegeSchedule.xml b/dist/game/config/default/SiegeSchedule.xml
  9036. new file mode 100644
  9037. index 0000000..2e2b6ad
  9038. --- /dev/null
  9039. +++ b/dist/game/config/default/SiegeSchedule.xml
  9040. @@ -0,0 +1,5 @@
  9041. +<?xml version="1.0" encoding="UTF-8"?>
  9042. +<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../data/xsd/SiegeSchedule.xsd">
  9043. +   <schedule day="SUNDAY" hour="16" maxConcurrent="5" />
  9044. +   <schedule day="SUNDAY" hour="20" maxConcurrent="5" />
  9045. +</list>
  9046. \ No newline at end of file
  9047. diff --git a/dist/game/config/default/Telnet.properties b/dist/game/config/default/Telnet.properties
  9048. new file mode 100644
  9049. index 0000000..f375cc8
  9050. --- /dev/null
  9051. +++ b/dist/game/config/default/Telnet.properties
  9052. @@ -0,0 +1,28 @@
  9053. +# ---------------------------------------------------------------------------
  9054. +# Telnet Settings
  9055. +# ---------------------------------------------------------------------------
  9056. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  9057. +# Warning:
  9058. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  9059. +# ---------------------------------------------------------------------------
  9060. +
  9061. +# Allows text based monitoring and administration of L2J GS
  9062. +# by using a telnet client. Communication protocol is insecure
  9063. +# and you should use SSL tunnels, VPN, etc. if you plan to connect
  9064. +# over non-trusted channels.
  9065. +# Default: False
  9066. +EnableTelnet = False
  9067. +
  9068. +# This is the port L2J should listen to for incoming telnet
  9069. +# requests.
  9070. +# Default: 54321
  9071. +StatusPort = 54321
  9072. +
  9073. +# If the following is not set, a random password is generated on server startup.
  9074. +# Usage: StatusPW = somePass
  9075. +StatusPW =
  9076. +
  9077. +# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
  9078. +# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
  9079. +# Default: 127.0.0.1,localhost
  9080. +ListOfHosts = 127.0.0.1,localhost
  9081. \ No newline at end of file
  9082. diff --git a/dist/game/config/default/TerritoryWar.properties b/dist/game/config/default/TerritoryWar.properties
  9083. new file mode 100644
  9084. index 0000000..ce04ff6
  9085. --- /dev/null
  9086. +++ b/dist/game/config/default/TerritoryWar.properties
  9087. @@ -0,0 +1,53 @@
  9088. +# ---------------------------------------------------------------------------
  9089. +# TerritoryWar Settings
  9090. +# ---------------------------------------------------------------------------
  9091. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  9092. +# Warning:
  9093. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  9094. +
  9095. +# ---------------------------------------------------------------------------
  9096. +# Standard Settings
  9097. +# ---------------------------------------------------------------------------
  9098. +
  9099. +# Length of siege before the count down (in minutes).
  9100. +# Default: 120
  9101. +WarLength = 120
  9102. +
  9103. +# Clan Minimum level to register.
  9104. +# Default: 0
  9105. +ClanMinLevel = 0
  9106. +
  9107. +# Player Minimum level to register.
  9108. +# Default: 40
  9109. +PlayerMinLevel = 40
  9110. +
  9111. +# Max number of clans and players that can register for a side.
  9112. +# Default: 500
  9113. +DefenderMaxClans = 500
  9114. +
  9115. +# Default: 500
  9116. +DefenderMaxPlayers = 500
  9117. +
  9118. +# Is Ward holding players can be attacked and killed in peace zone
  9119. +# Default: False
  9120. +PlayerWithWardCanBeKilledInPeaceZone = False
  9121. +
  9122. +# Spawn wards in Castles when Territory War is not in progress
  9123. +# Default: False
  9124. +SpawnWardsWhenTWIsNotInProgress = False
  9125. +
  9126. +# Return all wards to their own castle when Territory War starts
  9127. +# Default: False
  9128. +ReturnWardsWhenTWStarts = False
  9129. +
  9130. +# Territory Badge needed to change nobless
  9131. +# default: 100
  9132. +MinTerritoryBadgeForNobless = 100
  9133. +
  9134. +# Territory Badge needed to buy Strider
  9135. +# default: 50
  9136. +MinTerritoryBadgeForStriders = 50
  9137. +
  9138. +# Territory Badge needed to buy Guardian's Strider
  9139. +# default: 80
  9140. +MinTerritoryBadgeForBigStrider = 80
  9141. \ No newline at end of file
  9142. diff --git a/dist/game/config/default/botreport_punishments.xml b/dist/game/config/default/botreport_punishments.xml
  9143. new file mode 100644
  9144. index 0000000..74f16be
  9145. --- /dev/null
  9146. +++ b/dist/game/config/default/botreport_punishments.xml
  9147. @@ -0,0 +1,12 @@
  9148. +<?xml version="1.0" encoding="UTF-8"?>
  9149. +<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../data/xsd/botreport_punishments.xsd">
  9150. +   <!-- To add a range punishments (E.G., a debuff which apply if you have 150 reports or more, use negative neededReportCount -->
  9151. +   <punishment neededReportCount="25" skillId="6038" skillLevel="1" sysMessageId="2473" />
  9152. +   <punishment neededReportCount="75" skillId="6039" skillLevel="1" sysMessageId="2474" />
  9153. +   <punishment neededReportCount="100" skillId="6055" skillLevel="1" sysMessageId="2477" />
  9154. +   <punishment neededReportCount="125" skillId="6056" skillLevel="1" sysMessageId="2478" />
  9155. +   <punishment neededReportCount="150" skillId="6057" skillLevel="1" sysMessageId="2480" />
  9156. +   <punishment neededReportCount="175" skillId="6057" skillLevel="1" sysMessageId="2480" />
  9157. +   <!-- Range punishment -->
  9158. +   <punishment neededReportCount="-150" skillId="6040" skillLevel="1" />
  9159. +</list>
  9160. \ No newline at end of file
  9161. diff --git a/dist/game/config/default/chatfilter.txt b/dist/game/config/default/chatfilter.txt
  9162. new file mode 100644
  9163. index 0000000..033a976
  9164. --- /dev/null
  9165. +++ b/dist/game/config/default/chatfilter.txt
  9166. @@ -0,0 +1,11 @@
  9167. +# Example for <cr> and <lf>
  9168. +# (not allow players to confuse others by writing from beginning of the line)
  9169. +# \\r
  9170. +# \\n
  9171. +#
  9172. +# These words will be replaced:
  9173. +suck
  9174. +gay
  9175. +rape
  9176. +fuck
  9177. +dick
  9178. \ No newline at end of file
  9179. diff --git a/dist/game/config/default/ipconfig.xml b/dist/game/config/default/ipconfig.xml
  9180. new file mode 100644
  9181. index 0000000..68e51dd
  9182. --- /dev/null
  9183. +++ b/dist/game/config/default/ipconfig.xml
  9184. @@ -0,0 +1,13 @@
  9185. +<?xml version="1.0" encoding="UTF-8"?>
  9186. +<!-- Note: If file is named "ipconfig.xml" this data will be used as network configuration, otherwise server will configure it automatically! -->
  9187. +<!-- External host here (Internet IP) or Localhost IP for local test -->
  9188. +<gameserver address="127.0.0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../data/xsd/ipconfig.xsd">
  9189. +   <!-- Localhost here -->
  9190. +   <define subnet="127.0.0.0/8" address="127.0.0.1" />
  9191. +   <!-- Internal hosts here (LANs IPs) -->
  9192. +   <define subnet="10.0.0.0/8" address="10.0.0.0" />
  9193. +   <define subnet="172.16.0.0/19" address="172.16.0.0" />
  9194. +   <define subnet="192.168.0.0/16" address="192.168.0.0" />
  9195. +   <define subnet="192.168.0.0/24" address="192.168.0.0" />
  9196. +   <define subnet="192.168.1.0/24" address="192.168.1.0" />
  9197. +</gameserver>
  9198. diff --git a/dist/game/config/documentation.txt b/dist/game/config/documentation.txt
  9199. new file mode 100644
  9200. index 0000000..22c5fd0
  9201. --- /dev/null
  9202. +++ b/dist/game/config/documentation.txt
  9203. @@ -0,0 +1,15 @@
  9204. +This is your servers configuration folder.
  9205. +
  9206. +All the configuration files inside the ./config/default/ folder are the
  9207. +original default configuration files. The default configuration files should
  9208. +never be changed.
  9209. +
  9210. +To change a config directive from a file inside ./config/default/, create a
  9211. +file with the same name inside the ./config/ folder and only put the configs
  9212. +directives inside it which you want to change.
  9213. +
  9214. +For file formats other than .properties, you need to create a complete
  9215. +configuration file to overwrite the default.
  9216. +
  9217. +This construct enables you to just overwrite with a new server version without
  9218. +overwriting your custom configurations.
  9219. \ No newline at end of file
  9220. diff --git a/dist/game/startGameServer.bat b/dist/game/startGameServer.bat
  9221. index e28128a..a7124cc 100644
  9222. --- a/dist/game/startGameServer.bat
  9223. +++ b/dist/game/startGameServer.bat
  9224. @@ -1,36 +1,103 @@
  9225.  @echo off
  9226. -title Game Server Console
  9227. +setlocal enabledelayedexpansion
  9228.  
  9229. -:start
  9230. -echo Starting L2J Game Server.
  9231. +REM ################################################################################
  9232. +REM # Server exit codes: ###########################################################
  9233. +REM # - 0: Shutdown      ###########################################################
  9234. +REM # - 1: Error         ###########################################################
  9235. +REM # - 2: Restart       ###########################################################
  9236. +REM ################################################################################
  9237. +
  9238. +REM ################################################################################
  9239. +REM # Constants ####################################################################
  9240. +REM ################################################################################
  9241. +set APP_JAR=l2jserver.jar
  9242. +set APP_TITLE=L2J Game Server
  9243. +set JVM_ARGS_DEFAULT_PATH=config\default\Server_JVM_Args.txt
  9244. +set APP_ARGS_DEFAULT_PATH=config\default\Server_APP_Args.txt
  9245. +set JVM_ARGS_OVERWRITE_PATH=config\Server_JVM_Args.txt
  9246. +set APP_ARGS_OVERWRITE_PATH=config\Server_APP_Args.txt
  9247. +set LOGDIR_PATH=log\
  9248. +
  9249. +title %APP_TITLE% Console
  9250. +
  9251. +REM ################################################################################
  9252. +REM # :restart_loop                                                               ##
  9253. +REM # When the server exits with code 2, the scripts comes back here to restart.  ##
  9254. +REM ################################################################################
  9255. +:restart_loop
  9256. +set JVM_ARGS_PATH=%JVM_ARGS_DEFAULT_PATH%
  9257. +set APP_ARGS_PATH=%APP_ARGS_DEFAULT_PATH%
  9258. +
  9259. +rem Determine if the overwrite files are available
  9260. +if exist %JVM_ARGS_OVERWRITE_PATH% set JVM_ARGS_PATH=%JVM_ARGS_OVERWRITE_PATH%
  9261. +if exist %APP_ARGS_OVERWRITE_PATH% set APP_ARGS_PATH=%APP_ARGS_OVERWRITE_PATH%
  9262. +
  9263. +rem Check for the arguments file to be available
  9264. +if not exist %JVM_ARGS_PATH% (
  9265. +   echo %JVM_ARGS_PATH% is missing. Aborting launch.
  9266. +   echo.
  9267. +   goto end
  9268. +) else if not exist %APP_ARGS_PATH% (
  9269. +   echo %APP_ARGS_PATH% is missing. Aborting launch.
  9270. +   echo.
  9271. +   goto end
  9272. +)
  9273. +
  9274. +rem Print used argument files and read them
  9275. +echo JVM arguments file: %JVM_ARGS_PATH%
  9276. +echo APP arguments file: %APP_ARGS_PATH%
  9277. +echo.
  9278. +set JVM_ARGS=
  9279. +set APP_ARGS=
  9280. +for /f "delims=" %%F in (%JVM_ARGS_PATH%) do set JVM_ARGS=!JVM_ARGS! %%F
  9281. +for /f "delims=" %%F in (%APP_ARGS_PATH%) do set APP_ARGS=!APP_ARGS! %%F
  9282. +
  9283. +rem Construct the command line
  9284. +set APP_CMD_LN=java %JVM_ARGS% -jar %APP_JAR% %APP_ARGS%
  9285. +
  9286. +rem Print the command line to execute
  9287. +echo Startup command line: %APP_CMD_LN%
  9288.  echo.
  9289.  
  9290. -java -Dpython.cachedir=../cachedir -Xms1024m -Xmx1792m -jar l2jserver.jar
  9291. +rem Delete old *.lck files and archive old logs
  9292. +for /F "skip=1 delims=" %%T in ('wmic os get localdatetime /FORMAT:table') do (
  9293. +   if not defined LOCALDT (
  9294. +       set LOCALDT=%%T
  9295. +       set LOCALDT=!LOCALDT:~0,4!-!LOCALDT:~4,2!-!LOCALDT:~6,2!_!LOCALDT:~8,2!-!LOCALDT:~10,2!-!LOCALDT:~12,2!
  9296. +   )
  9297. +)
  9298.  
  9299. -REM NOTE: If you have a powerful machine, you could modify/add some extra parameters for performance, like:
  9300. -REM -Xms1536m
  9301. -REM -Xmx3072m
  9302. -REM -XX:+AggressiveOpts
  9303. -REM Use this parameters carefully, some of them could cause abnormal behavior, deadlocks, etc.
  9304. -REM More info here: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
  9305. +if exist %LOGDIR_PATH%*.lck del /F /Q log\*.lck>nul
  9306.  
  9307. -if ERRORLEVEL 2 goto restart
  9308. -if ERRORLEVEL 1 goto error
  9309. -goto end
  9310. +for /f %%F in ('dir %LOGDIR_PATH% /b ^| findstr /r "^[^0-9]"') do (
  9311. +   set LOGFILE_NAME_OLD=%%F
  9312. +   set LOGFILE_NAME_NEW=%LOCALDT%_!LOGFILE_NAME_OLD!
  9313. +   set LOGFILE_PATH_OLD=%LOGDIR_PATH%!LOGFILE_NAME_OLD!
  9314. +   rename !LOGFILE_PATH_OLD! !LOGFILE_NAME_NEW!
  9315. +)
  9316.  
  9317. -:restart
  9318. +rem Execute the command line
  9319. +echo Starting %APP_TITLE%.
  9320.  echo.
  9321. -echo Admin Restarted Game Server.
  9322. -echo.
  9323. -goto start
  9324. +%APP_CMD_LN%
  9325.  
  9326. -:error
  9327. -echo.
  9328. -echo Game Server Terminated Abnormally!
  9329. -echo.
  9330. +if ERRORLEVEL 2 (
  9331. +   echo.
  9332. +   echo Admin Restarted %APP_TITLE%.
  9333. +   echo.
  9334. +   goto restart_loop
  9335. +)
  9336. +REM ## :restart_loop ###############################################################
  9337. +REM ################################################################################
  9338.  
  9339. -:end
  9340. +if ERRORLEVEL 1 (
  9341. +   echo.
  9342. +   echo %APP_TITLE% terminated abnormally!
  9343. +   echo.
  9344. +)
  9345. +
  9346.  echo.
  9347. -echo Game Server Terminated.
  9348. +echo %APP_TITLE% Terminated.
  9349.  echo.
  9350.  pause
  9351. \ No newline at end of file
  9352. diff --git a/dist/login/LoginServer_loop.sh b/dist/login/LoginServer_loop.sh
  9353. index ef497d5..b46325f 100644
  9354. --- a/dist/login/LoginServer_loop.sh
  9355. +++ b/dist/login/LoginServer_loop.sh
  9356. @@ -1,11 +1,75 @@
  9357.  #!/bin/bash
  9358.  
  9359. -err=1
  9360. -until [ $err == 0 ];
  9361. -do
  9362. -   [ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
  9363. -   [ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
  9364. -   java -Xms128m -Xmx256m -jar l2jlogin.jar > log/stdout.log 2>&1
  9365. +################################################################################
  9366. +# Server exit codes: ###########################################################
  9367. +# - 0: Shutdown      ###########################################################
  9368. +# - 1: Error         ###########################################################
  9369. +# - 2: Restart       ###########################################################
  9370. +################################################################################
  9371. +
  9372. +################################################################################
  9373. +# Constants ####################################################################
  9374. +################################################################################
  9375. +APP_JAR="l2jlogin.jar"
  9376. +APP_TITLE="L2J Login Server"
  9377. +JVM_ARGS_DEFAULT_PATH="config/default/Server_JVM_Args.txt"
  9378. +APP_ARGS_DEFAULT_PATH="config/default/Server_APP_Args.txt"
  9379. +JVM_ARGS_OVERWRITE_PATH="config/Server_JVM_Args.txt"
  9380. +APP_ARGS_OVERWRITE_PATH="config/Server_APP_Args.txt"
  9381. +LOGDIR_PATH="log/"
  9382. +
  9383. +err=2
  9384. +while [ $err == 2 ]; do
  9385. +   err=0
  9386. +   JVM_ARGS_PATH="$JVM_ARGS_DEFAULT_PATH"
  9387. +   APP_ARGS_PATH="$APP_ARGS_DEFAULT_PATH"
  9388. +
  9389. +   # Determine if the overwrite files are available
  9390. +   [ -f "$JVM_ARGS_OVERWRITE_PATH" ] && JVM_ARGS_PATH="$JVM_ARGS_OVERWRITE_PATH"
  9391. +   [ -f "$APP_ARGS_OVERWRITE_PATH" ] && APP_ARGS_PATH="$APP_ARGS_OVERWRITE_PATH"
  9392. +
  9393. +   # Check for the arguments file to be available
  9394. +   if [ ! -f "$JVM_ARGS_PATH" ]; then
  9395. +       echo "$JVM_ARGS_PATH is missing. Aborting launch."
  9396. +       echo ""
  9397. +       break
  9398. +   elif [ ! -f "$APP_ARGS_PATH" ]; then
  9399. +       echo "$APP_ARGS_PATH is missing. Aborting launch."
  9400. +       echo ""
  9401. +       break
  9402. +   fi
  9403. +  
  9404. +   # Print used argument files and read them
  9405. +   echo "JVM arguments file: $JVM_ARGS_PATH"
  9406. +   echo "APP arguments file: $APP_ARGS_PATH"
  9407. +   echo ""
  9408. +   readarray -t JVM_ARGS < "$JVM_ARGS_PATH"
  9409. +   readarray -t APP_ARGS < "$APP_ARGS_PATH"
  9410. +
  9411. +   # Construct and print the command line
  9412. +   APP_CMD_LN="java ${JVM_ARGS[*]//[$'\r\n']} -jar $APP_JAR ${APP_ARGS[*]//[$'\r\n']}"
  9413. +   echo "Startup command line: $APP_CMD_LN"
  9414. +   echo ""
  9415. +
  9416. +   # rem Delete old *.lck files and archive old logs
  9417. +   [ -f "log/*.lck" ] && rm log/*.lck
  9418. +   for LOGFILE_PATH in $LOGDIR_PATH*; do
  9419. +       [ "$LOGFILE_PATH" == "$LOGDIR_PATH*" ] && continue
  9420. +       LOGFILE_NAME="${LOGFILE_PATH#*/}"
  9421. +       [[ "$LOGFILE_NAME" == [0-9]* ]] && continue
  9422. +       mv "$LOGFILE_PATH" "$LOGDIR_PATH`date +%Y-%m-%d_%H-%M-%S`_$LOGFILE_NAME"
  9423. +   done
  9424. +
  9425. +   # Execute the command line
  9426. +   echo "Starting $APP_TITLE."
  9427. +   echo ""
  9428. +   $APP_CMD_LN
  9429. +
  9430.     err=$?
  9431. +   [ $err == 2 ] && echo "Admin Restarted $APP_TITLE."
  9432. +
  9433.     sleep 10;
  9434.  done
  9435. +
  9436. +[ $err == 1 ] && echo "$APP_TITLE terminated abnormally!"
  9437. +echo "$APP_TITLE terminated."
  9438. \ No newline at end of file
  9439. diff --git a/dist/login/config/Email.properties b/dist/login/config/Email.properties
  9440. deleted file mode 100644
  9441. index 2410feb..0000000
  9442. --- a/dist/login/config/Email.properties
  9443. +++ /dev/null
  9444. @@ -1,65 +0,0 @@
  9445. -# ---------------------------------------------------------------------------
  9446. -# Email Settings
  9447. -# ---------------------------------------------------------------------------
  9448. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  9449. -# Warning:
  9450. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  9451. -# ---------------------------------------------------------------------------
  9452. -# Server Information
  9453. -# ---------------------------------------------------------------------------
  9454. -
  9455. -# Server Name
  9456. -# Default: Unconfigured L2J Server
  9457. -ServerInfoName = Unconfigured L2J Server
  9458. -
  9459. -# Contact Address
  9460. -# Default: info@unconfl2j.com
  9461. -ServerInfoAddress = info@myl2jserver.com
  9462. -
  9463. -# ---------------------------------------------------------------------------
  9464. -# E-mail System Settings
  9465. -# ---------------------------------------------------------------------------
  9466. -
  9467. -# Enable Email System
  9468. -# Default: False
  9469. -EmailSystemEnabled = False
  9470. -
  9471. -# Select Query for Email Addresses
  9472. -# Default: SELECT value FROM account_data WHERE account_name=? AND var='email_addr'
  9473. -EmailDBSelectQuery = SELECT value FROM account_data WHERE account_name=? AND var='email_addr'
  9474. -
  9475. -# Email Address Field
  9476. -# Default: value
  9477. -EmailDBField = value
  9478. -
  9479. -# Mail Server Host
  9480. -# Default: smtp.gmail.com
  9481. -SmtpServerHost = smtp.gmail.com
  9482. -
  9483. -# Mail Server Port
  9484. -# Default: 465
  9485. -SmtpServerPort = 465
  9486. -
  9487. -# Auth SMTP
  9488. -# Default: True
  9489. -SmtpAuthRequired = True
  9490. -
  9491. -# Mail Socket Factory
  9492. -# Default: javax.net.ssl.SSLSocketFactory
  9493. -SmtpFactory = javax.net.ssl.SSLSocketFactory
  9494. -
  9495. -# Mail Factory Callback
  9496. -# Default: False
  9497. -SmtpFactoryCallback = False
  9498. -
  9499. -# Mail Server Auth - Username
  9500. -# Default: exampleuser
  9501. -SmtpUsername = user@gmail.com
  9502. -
  9503. -# Mail Server Auth - Password
  9504. -# Default: examplepass
  9505. -SmtpPassword = password
  9506. -
  9507. -# Mail Address
  9508. -# Default: None
  9509. -EmailSystemAddress = noreply@myl2jserver.com
  9510. \ No newline at end of file
  9511. diff --git a/dist/login/config/LoginServer.properties b/dist/login/config/LoginServer.properties
  9512. deleted file mode 100644
  9513. index ff02fda..0000000
  9514. --- a/dist/login/config/LoginServer.properties
  9515. +++ /dev/null
  9516. @@ -1,141 +0,0 @@
  9517. -# ---------------------------------------------------------------------------
  9518. -# Login Server Settings
  9519. -# ---------------------------------------------------------------------------
  9520. -# This is the server configuration file. Here you can set up the connection information for your server.
  9521. -# This was written with the assumption that you are behind a router.
  9522. -# Dumbed Down Definitions...
  9523. -# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
  9524. -# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
  9525. -# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
  9526. -# ---------------------------------------------------------------------------
  9527. -# Networking
  9528. -# ---------------------------------------------------------------------------
  9529. -
  9530. -# Enables automatic port mapping for login server.
  9531. -# If you have a router login server will request for port forwarding.
  9532. -# Default: True
  9533. -EnableUPnP = True
  9534. -
  9535. -# Bind ip of the LoginServer, use * to bind on all available IPs
  9536. -# 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>
  9537. -# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
  9538. -# Default: * (0.0.0.0)
  9539. -LoginserverHostname = *
  9540. -
  9541. -# Default: 2106
  9542. -LoginserverPort = 2106
  9543. -
  9544. -# The address on which login will listen for GameServers, use * to bind on all available IPs
  9545. -# 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>
  9546. -# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
  9547. -# Default: 127.0.0.1
  9548. -LoginHostname = 127.0.0.1
  9549. -
  9550. -# The port on which login will listen for GameServers
  9551. -# Default: 9014
  9552. -LoginPort = 9014
  9553. -
  9554. -# ---------------------------------------------------------------------------
  9555. -# Security
  9556. -# ---------------------------------------------------------------------------
  9557. -
  9558. -# How many times you can provide an invalid account/pass before the IP gets banned.
  9559. -# Default: 5
  9560. -LoginTryBeforeBan = 5
  9561. -
  9562. -# Time you won't be able to login back again after LoginTryBeforeBan tries to login.
  9563. -# Default: 900 (15 minutes)
  9564. -LoginBlockAfterBan = 900
  9565. -
  9566. -# If set to True any GameServer can register on your login's free slots
  9567. -# Default: True
  9568. -AcceptNewGameServer = True
  9569. -
  9570. -# Flood Protection. All values are in milliseconds.
  9571. -# Default: True
  9572. -EnableFloodProtection = True
  9573. -
  9574. -# Default: 15
  9575. -FastConnectionLimit = 15
  9576. -
  9577. -# Default: 700
  9578. -NormalConnectionTime = 700
  9579. -
  9580. -# Default: 350
  9581. -FastConnectionTime = 350
  9582. -
  9583. -# Default: 50
  9584. -MaxConnectionPerIP = 50
  9585. -
  9586. -# ---------------------------------------------------------------------------
  9587. -# Database
  9588. -# ---------------------------------------------------------------------------
  9589. -
  9590. -# Specify the appropriate driver and url for the database you're using.
  9591. -# Examples:
  9592. -# Driver = com.mysql.jdbc.Driver
  9593. -# Driver = org.hsqldb.jdbcDriver
  9594. -# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
  9595. -# Driver = org.mariadb.jdbc.Driver
  9596. -# Default: com.mysql.jdbc.Driver
  9597. -Driver = com.mysql.jdbc.Driver
  9598. -# Database URL
  9599. -# URL = jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
  9600. -# URL = jdbc:hsqldb:hsql://localhost/l2jls
  9601. -# URL = jdbc:sqlserver://localhost/database = l2jls/user = sa/password =
  9602. -# URL = jdbc:mariadb://localhost/l2jls
  9603. -# Default: jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
  9604. -URL = jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
  9605. -# Database user info (default is "root" but it's not recommended)
  9606. -Login = root
  9607. -# Database connection password
  9608. -Password = toor
  9609. -
  9610. -# Database Connection Pool
  9611. -# Default: HikariCP
  9612. -# Available: BoneCP, C3P0, HikariCP
  9613. -ConnectionPool = HikariCP
  9614. -
  9615. -# Default: 10
  9616. -MaximumDbConnections = 10
  9617. -
  9618. -# Default: 0
  9619. -MaximumDbIdleTime = 0
  9620. -
  9621. -# Connection close time.
  9622. -# Default: 60000
  9623. -ConnectionCloseTime = 60000
  9624. -
  9625. -
  9626. -# ---------------------------------------------------------------------------
  9627. -# Misc.
  9628. -# ---------------------------------------------------------------------------
  9629. -
  9630. -# If False, the license (after the login) will not be shown.
  9631. -# Default: True
  9632. -ShowLicence = True
  9633. -
  9634. -# Default: True
  9635. -AutoCreateAccounts = True
  9636. -
  9637. -# Datapack root directory.
  9638. -# Defaults to current directory from which the server is started.
  9639. -DatapackRoot = .
  9640. -
  9641. -# ---------------------------------------------------------------------------
  9642. -# Developer Settings
  9643. -# ---------------------------------------------------------------------------
  9644. -
  9645. -# Default: False
  9646. -Debug = False
  9647. -
  9648. -# ---------------------------------------------------------------------------
  9649. -# Restart LS every 24 hours?
  9650. -# ---------------------------------------------------------------------------
  9651. -
  9652. -# Enable disable scheduled login restart.
  9653. -# Default: False
  9654. -LoginRestartSchedule = False
  9655. -# Time in hours.
  9656. -# Default: 24
  9657. -LoginRestartTime = 24
  9658. \ No newline at end of file
  9659. diff --git a/dist/login/config/MMO.properties b/dist/login/config/MMO.properties
  9660. deleted file mode 100644
  9661. index 1882ae9..0000000
  9662. --- a/dist/login/config/MMO.properties
  9663. +++ /dev/null
  9664. @@ -1,24 +0,0 @@
  9665. -#---------------------------------------------------------------
  9666. -# MMO
  9667. -#---------------------------------------------------------------
  9668. -
  9669. -# Sleep time for all Selectors
  9670. -# After he finished his job the Selector waits the given time in milliseconds
  9671. -# Lower values will speed up the loop and the Ping is smaller
  9672. -SleepTime = 20
  9673. -
  9674. -# Every loop it send a maximum of the given packages to each connection
  9675. -# Lower values will speed up the loop and the Ping is smaller but cause less output
  9676. -MaxSendPerPass = 12
  9677. -
  9678. -# Every loop it read a maximum of the given packages from each connection
  9679. -# Lower values will speed up the loop and the Ping is smaller but cause less input
  9680. -MaxReadPerPass = 12
  9681. -
  9682. -# Each unfinished read/write need a TEMP storage Buffer
  9683. -# on large player amount we need more Buffers
  9684. -# if there are not enough buffers new ones are generated but not stored for future usage
  9685. -HelperBufferCount = 20
  9686. -
  9687. -# Setting this to True will lower your ping, at the cost of an increase in bandwidth consumption.
  9688. -TcpNoDelay = False
  9689. \ No newline at end of file
  9690. diff --git a/dist/login/config/Telnet.properties b/dist/login/config/Telnet.properties
  9691. deleted file mode 100644
  9692. index b592cbd..0000000
  9693. --- a/dist/login/config/Telnet.properties
  9694. +++ /dev/null
  9695. @@ -1,28 +0,0 @@
  9696. -# ---------------------------------------------------------------------------
  9697. -# Telnet Settings
  9698. -# ---------------------------------------------------------------------------
  9699. -# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  9700. -# Warning:
  9701. -# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  9702. -# ---------------------------------------------------------------------------
  9703. -
  9704. -# Allows text based monitoring and administration of L2J LS
  9705. -# by using a telnet client. Communication protocol is insecure
  9706. -# and you should use SSL tunnels, VPN, etc. if you plan to connect
  9707. -# over non-trusted channels.
  9708. -# Default: False
  9709. -EnableTelnet = False
  9710. -
  9711. -# This is the port L2J should listen to for incoming telnet
  9712. -# requests.
  9713. -# Default: 12345
  9714. -StatusPort = 12345
  9715. -
  9716. -# If the following is not set, a random password is generated on server startup.
  9717. -# Usage: StatusPW = somePass
  9718. -StatusPW =
  9719. -
  9720. -# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
  9721. -# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
  9722. -# Default: 127.0.0.1,localhost
  9723. -ListOfHosts = 127.0.0.1,localhost
  9724. \ No newline at end of file
  9725. diff --git a/dist/login/config/default/Email.properties b/dist/login/config/default/Email.properties
  9726. new file mode 100644
  9727. index 0000000..2410feb
  9728. --- /dev/null
  9729. +++ b/dist/login/config/default/Email.properties
  9730. @@ -0,0 +1,65 @@
  9731. +# ---------------------------------------------------------------------------
  9732. +# Email Settings
  9733. +# ---------------------------------------------------------------------------
  9734. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  9735. +# Warning:
  9736. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  9737. +# ---------------------------------------------------------------------------
  9738. +# Server Information
  9739. +# ---------------------------------------------------------------------------
  9740. +
  9741. +# Server Name
  9742. +# Default: Unconfigured L2J Server
  9743. +ServerInfoName = Unconfigured L2J Server
  9744. +
  9745. +# Contact Address
  9746. +# Default: info@unconfl2j.com
  9747. +ServerInfoAddress = info@myl2jserver.com
  9748. +
  9749. +# ---------------------------------------------------------------------------
  9750. +# E-mail System Settings
  9751. +# ---------------------------------------------------------------------------
  9752. +
  9753. +# Enable Email System
  9754. +# Default: False
  9755. +EmailSystemEnabled = False
  9756. +
  9757. +# Select Query for Email Addresses
  9758. +# Default: SELECT value FROM account_data WHERE account_name=? AND var='email_addr'
  9759. +EmailDBSelectQuery = SELECT value FROM account_data WHERE account_name=? AND var='email_addr'
  9760. +
  9761. +# Email Address Field
  9762. +# Default: value
  9763. +EmailDBField = value
  9764. +
  9765. +# Mail Server Host
  9766. +# Default: smtp.gmail.com
  9767. +SmtpServerHost = smtp.gmail.com
  9768. +
  9769. +# Mail Server Port
  9770. +# Default: 465
  9771. +SmtpServerPort = 465
  9772. +
  9773. +# Auth SMTP
  9774. +# Default: True
  9775. +SmtpAuthRequired = True
  9776. +
  9777. +# Mail Socket Factory
  9778. +# Default: javax.net.ssl.SSLSocketFactory
  9779. +SmtpFactory = javax.net.ssl.SSLSocketFactory
  9780. +
  9781. +# Mail Factory Callback
  9782. +# Default: False
  9783. +SmtpFactoryCallback = False
  9784. +
  9785. +# Mail Server Auth - Username
  9786. +# Default: exampleuser
  9787. +SmtpUsername = user@gmail.com
  9788. +
  9789. +# Mail Server Auth - Password
  9790. +# Default: examplepass
  9791. +SmtpPassword = password
  9792. +
  9793. +# Mail Address
  9794. +# Default: None
  9795. +EmailSystemAddress = noreply@myl2jserver.com
  9796. \ No newline at end of file
  9797. diff --git a/dist/login/config/default/LoginServer.properties b/dist/login/config/default/LoginServer.properties
  9798. new file mode 100644
  9799. index 0000000..ff02fda
  9800. --- /dev/null
  9801. +++ b/dist/login/config/default/LoginServer.properties
  9802. @@ -0,0 +1,141 @@
  9803. +# ---------------------------------------------------------------------------
  9804. +# Login Server Settings
  9805. +# ---------------------------------------------------------------------------
  9806. +# This is the server configuration file. Here you can set up the connection information for your server.
  9807. +# This was written with the assumption that you are behind a router.
  9808. +# Dumbed Down Definitions...
  9809. +# LAN (LOCAL area network) - typically consists of computers connected to the same router as you.
  9810. +# WAN (WIDE area network) - typically consists of computers OUTSIDE of your router (ie. the internet).
  9811. +# x.x.x.x - Format of an IP address. Do not include the x'es into settings. Must be real numbers.
  9812. +# ---------------------------------------------------------------------------
  9813. +# Networking
  9814. +# ---------------------------------------------------------------------------
  9815. +
  9816. +# Enables automatic port mapping for login server.
  9817. +# If you have a router login server will request for port forwarding.
  9818. +# Default: True
  9819. +EnableUPnP = True
  9820. +
  9821. +# Bind ip of the LoginServer, use * to bind on all available IPs
  9822. +# 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>
  9823. +# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
  9824. +# Default: * (0.0.0.0)
  9825. +LoginserverHostname = *
  9826. +
  9827. +# Default: 2106
  9828. +LoginserverPort = 2106
  9829. +
  9830. +# The address on which login will listen for GameServers, use * to bind on all available IPs
  9831. +# 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>
  9832. +# WARNING: <u><b><font color="red">External/Internal IPs are now inside "ipconfig.xml" file.</font></b></u>
  9833. +# Default: 127.0.0.1
  9834. +LoginHostname = 127.0.0.1
  9835. +
  9836. +# The port on which login will listen for GameServers
  9837. +# Default: 9014
  9838. +LoginPort = 9014
  9839. +
  9840. +# ---------------------------------------------------------------------------
  9841. +# Security
  9842. +# ---------------------------------------------------------------------------
  9843. +
  9844. +# How many times you can provide an invalid account/pass before the IP gets banned.
  9845. +# Default: 5
  9846. +LoginTryBeforeBan = 5
  9847. +
  9848. +# Time you won't be able to login back again after LoginTryBeforeBan tries to login.
  9849. +# Default: 900 (15 minutes)
  9850. +LoginBlockAfterBan = 900
  9851. +
  9852. +# If set to True any GameServer can register on your login's free slots
  9853. +# Default: True
  9854. +AcceptNewGameServer = True
  9855. +
  9856. +# Flood Protection. All values are in milliseconds.
  9857. +# Default: True
  9858. +EnableFloodProtection = True
  9859. +
  9860. +# Default: 15
  9861. +FastConnectionLimit = 15
  9862. +
  9863. +# Default: 700
  9864. +NormalConnectionTime = 700
  9865. +
  9866. +# Default: 350
  9867. +FastConnectionTime = 350
  9868. +
  9869. +# Default: 50
  9870. +MaxConnectionPerIP = 50
  9871. +
  9872. +# ---------------------------------------------------------------------------
  9873. +# Database
  9874. +# ---------------------------------------------------------------------------
  9875. +
  9876. +# Specify the appropriate driver and url for the database you're using.
  9877. +# Examples:
  9878. +# Driver = com.mysql.jdbc.Driver
  9879. +# Driver = org.hsqldb.jdbcDriver
  9880. +# Driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
  9881. +# Driver = org.mariadb.jdbc.Driver
  9882. +# Default: com.mysql.jdbc.Driver
  9883. +Driver = com.mysql.jdbc.Driver
  9884. +# Database URL
  9885. +# URL = jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
  9886. +# URL = jdbc:hsqldb:hsql://localhost/l2jls
  9887. +# URL = jdbc:sqlserver://localhost/database = l2jls/user = sa/password =
  9888. +# URL = jdbc:mariadb://localhost/l2jls
  9889. +# Default: jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
  9890. +URL = jdbc:mysql://localhost/l2jls?useSSL=false&serverTimezone=UTC
  9891. +# Database user info (default is "root" but it's not recommended)
  9892. +Login = root
  9893. +# Database connection password
  9894. +Password = toor
  9895. +
  9896. +# Database Connection Pool
  9897. +# Default: HikariCP
  9898. +# Available: BoneCP, C3P0, HikariCP
  9899. +ConnectionPool = HikariCP
  9900. +
  9901. +# Default: 10
  9902. +MaximumDbConnections = 10
  9903. +
  9904. +# Default: 0
  9905. +MaximumDbIdleTime = 0
  9906. +
  9907. +# Connection close time.
  9908. +# Default: 60000
  9909. +ConnectionCloseTime = 60000
  9910. +
  9911. +
  9912. +# ---------------------------------------------------------------------------
  9913. +# Misc.
  9914. +# ---------------------------------------------------------------------------
  9915. +
  9916. +# If False, the license (after the login) will not be shown.
  9917. +# Default: True
  9918. +ShowLicence = True
  9919. +
  9920. +# Default: True
  9921. +AutoCreateAccounts = True
  9922. +
  9923. +# Datapack root directory.
  9924. +# Defaults to current directory from which the server is started.
  9925. +DatapackRoot = .
  9926. +
  9927. +# ---------------------------------------------------------------------------
  9928. +# Developer Settings
  9929. +# ---------------------------------------------------------------------------
  9930. +
  9931. +# Default: False
  9932. +Debug = False
  9933. +
  9934. +# ---------------------------------------------------------------------------
  9935. +# Restart LS every 24 hours?
  9936. +# ---------------------------------------------------------------------------
  9937. +
  9938. +# Enable disable scheduled login restart.
  9939. +# Default: False
  9940. +LoginRestartSchedule = False
  9941. +# Time in hours.
  9942. +# Default: 24
  9943. +LoginRestartTime = 24
  9944. \ No newline at end of file
  9945. diff --git a/dist/login/config/default/MMO.properties b/dist/login/config/default/MMO.properties
  9946. new file mode 100644
  9947. index 0000000..1882ae9
  9948. --- /dev/null
  9949. +++ b/dist/login/config/default/MMO.properties
  9950. @@ -0,0 +1,24 @@
  9951. +#---------------------------------------------------------------
  9952. +# MMO
  9953. +#---------------------------------------------------------------
  9954. +
  9955. +# Sleep time for all Selectors
  9956. +# After he finished his job the Selector waits the given time in milliseconds
  9957. +# Lower values will speed up the loop and the Ping is smaller
  9958. +SleepTime = 20
  9959. +
  9960. +# Every loop it send a maximum of the given packages to each connection
  9961. +# Lower values will speed up the loop and the Ping is smaller but cause less output
  9962. +MaxSendPerPass = 12
  9963. +
  9964. +# Every loop it read a maximum of the given packages from each connection
  9965. +# Lower values will speed up the loop and the Ping is smaller but cause less input
  9966. +MaxReadPerPass = 12
  9967. +
  9968. +# Each unfinished read/write need a TEMP storage Buffer
  9969. +# on large player amount we need more Buffers
  9970. +# if there are not enough buffers new ones are generated but not stored for future usage
  9971. +HelperBufferCount = 20
  9972. +
  9973. +# Setting this to True will lower your ping, at the cost of an increase in bandwidth consumption.
  9974. +TcpNoDelay = False
  9975. \ No newline at end of file
  9976. diff --git a/dist/login/config/default/Server_APP_Args.txt b/dist/login/config/default/Server_APP_Args.txt
  9977. new file mode 100644
  9978. index 0000000..e69de29
  9979. --- /dev/null
  9980. +++ b/dist/login/config/default/Server_APP_Args.txt
  9981. diff --git a/dist/login/config/default/Server_JVM_Args.txt b/dist/login/config/default/Server_JVM_Args.txt
  9982. new file mode 100644
  9983. index 0000000..429e76f
  9984. --- /dev/null
  9985. +++ b/dist/login/config/default/Server_JVM_Args.txt
  9986. @@ -0,0 +1,2 @@
  9987. +-Xms128m
  9988. +-Xmx256m
  9989. \ No newline at end of file
  9990. diff --git a/dist/login/config/default/Telnet.properties b/dist/login/config/default/Telnet.properties
  9991. new file mode 100644
  9992. index 0000000..b592cbd
  9993. --- /dev/null
  9994. +++ b/dist/login/config/default/Telnet.properties
  9995. @@ -0,0 +1,28 @@
  9996. +# ---------------------------------------------------------------------------
  9997. +# Telnet Settings
  9998. +# ---------------------------------------------------------------------------
  9999. +# The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
  10000. +# Warning:
  10001. +# Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
  10002. +# ---------------------------------------------------------------------------
  10003. +
  10004. +# Allows text based monitoring and administration of L2J LS
  10005. +# by using a telnet client. Communication protocol is insecure
  10006. +# and you should use SSL tunnels, VPN, etc. if you plan to connect
  10007. +# over non-trusted channels.
  10008. +# Default: False
  10009. +EnableTelnet = False
  10010. +
  10011. +# This is the port L2J should listen to for incoming telnet
  10012. +# requests.
  10013. +# Default: 12345
  10014. +StatusPort = 12345
  10015. +
  10016. +# If the following is not set, a random password is generated on server startup.
  10017. +# Usage: StatusPW = somePass
  10018. +StatusPW =
  10019. +
  10020. +# This list can contain IPs or Hosts of clients you wish to allow. Hostnames must be resolvable to an IP.
  10021. +# Example: 0.0.0.0,host,0.0.0.1,host2,host3,host4,0.0.0.3
  10022. +# Default: 127.0.0.1,localhost
  10023. +ListOfHosts = 127.0.0.1,localhost
  10024. \ No newline at end of file
  10025. diff --git a/dist/login/config/documentation.txt b/dist/login/config/documentation.txt
  10026. new file mode 100644
  10027. index 0000000..22c5fd0
  10028. --- /dev/null
  10029. +++ b/dist/login/config/documentation.txt
  10030. @@ -0,0 +1,15 @@
  10031. +This is your servers configuration folder.
  10032. +
  10033. +All the configuration files inside the ./config/default/ folder are the
  10034. +original default configuration files. The default configuration files should
  10035. +never be changed.
  10036. +
  10037. +To change a config directive from a file inside ./config/default/, create a
  10038. +file with the same name inside the ./config/ folder and only put the configs
  10039. +directives inside it which you want to change.
  10040. +
  10041. +For file formats other than .properties, you need to create a complete
  10042. +configuration file to overwrite the default.
  10043. +
  10044. +This construct enables you to just overwrite with a new server version without
  10045. +overwriting your custom configurations.
  10046. \ No newline at end of file
  10047. diff --git a/dist/login/startLoginServer.bat b/dist/login/startLoginServer.bat
  10048. index 3b022e1..ce36425 100644
  10049. --- a/dist/login/startLoginServer.bat
  10050. +++ b/dist/login/startLoginServer.bat
  10051. @@ -1,29 +1,103 @@
  10052.  @echo off
  10053. -title Login Server Console
  10054. +setlocal enabledelayedexpansion
  10055.  
  10056. -:start
  10057. -echo Starting L2J Login Server.
  10058. +REM ################################################################################
  10059. +REM # Server exit codes: ###########################################################
  10060. +REM # - 0: Shutdown      ###########################################################
  10061. +REM # - 1: Error         ###########################################################
  10062. +REM # - 2: Restart       ###########################################################
  10063. +REM ################################################################################
  10064. +
  10065. +REM ################################################################################
  10066. +REM # Constants ####################################################################
  10067. +REM ################################################################################
  10068. +set APP_JAR=l2jlogin.jar
  10069. +set APP_TITLE=L2J Login Server
  10070. +set JVM_ARGS_DEFAULT_PATH=config\default\Server_JVM_Args.txt
  10071. +set APP_ARGS_DEFAULT_PATH=config\default\Server_APP_Args.txt
  10072. +set JVM_ARGS_OVERWRITE_PATH=config\Server_JVM_Args.txt
  10073. +set APP_ARGS_OVERWRITE_PATH=config\Server_APP_Args.txt
  10074. +set LOGDIR_PATH=log\
  10075. +
  10076. +title %APP_TITLE% Console
  10077. +
  10078. +REM ################################################################################
  10079. +REM # :restart_loop                                                               ##
  10080. +REM # When the server exits with code 2, the scripts comes back here to restart.  ##
  10081. +REM ################################################################################
  10082. +:restart_loop
  10083. +set JVM_ARGS_PATH=%JVM_ARGS_DEFAULT_PATH%
  10084. +set APP_ARGS_PATH=%APP_ARGS_DEFAULT_PATH%
  10085. +
  10086. +rem Determine if the overwrite files are available
  10087. +if exist %JVM_ARGS_OVERWRITE_PATH% set JVM_ARGS_PATH=%JVM_ARGS_OVERWRITE_PATH%
  10088. +if exist %APP_ARGS_OVERWRITE_PATH% set APP_ARGS_PATH=%APP_ARGS_OVERWRITE_PATH%
  10089. +
  10090. +rem Check for the arguments file to be available
  10091. +if not exist %JVM_ARGS_PATH% (
  10092. +   echo %JVM_ARGS_PATH% is missing. Aborting launch.
  10093. +   echo.
  10094. +   goto end
  10095. +) else if not exist %APP_ARGS_PATH% (
  10096. +   echo %APP_ARGS_PATH% is missing. Aborting launch.
  10097. +   echo.
  10098. +   goto end
  10099. +)
  10100. +
  10101. +rem Print used argument files and read them
  10102. +echo JVM arguments file: %JVM_ARGS_PATH%
  10103. +echo APP arguments file: %APP_ARGS_PATH%
  10104. +echo.
  10105. +set JVM_ARGS=
  10106. +set APP_ARGS=
  10107. +for /f "delims=" %%F in (%JVM_ARGS_PATH%) do set JVM_ARGS=!JVM_ARGS! %%F
  10108. +for /f "delims=" %%F in (%APP_ARGS_PATH%) do set APP_ARGS=!APP_ARGS! %%F
  10109. +
  10110. +rem Construct the command line
  10111. +set APP_CMD_LN=java %JVM_ARGS% -jar %APP_JAR% %APP_ARGS%
  10112. +
  10113. +rem Print the command line to execute
  10114. +echo Startup command line: %APP_CMD_LN%
  10115.  echo.
  10116.  
  10117. -java -Xms128m -Xmx256m -jar l2jlogin.jar
  10118. +rem Delete old *.lck files and archive old logs
  10119. +for /F "skip=1 delims=" %%T in ('wmic os get localdatetime /FORMAT:table') do (
  10120. +   if not defined LOCALDT (
  10121. +       set LOCALDT=%%T
  10122. +       set LOCALDT=!LOCALDT:~0,4!-!LOCALDT:~4,2!-!LOCALDT:~6,2!_!LOCALDT:~8,2!-!LOCALDT:~10,2!-!LOCALDT:~12,2!
  10123. +   )
  10124. +)
  10125.  
  10126. -if ERRORLEVEL 2 goto restart
  10127. -if ERRORLEVEL 1 goto error
  10128. -goto end
  10129. +if exist %LOGDIR_PATH%*.lck del /F /Q log\*.lck>nul
  10130.  
  10131. -:restart
  10132. -echo.
  10133. -echo Admin Restarted Login Server.
  10134. -echo.
  10135. -goto start
  10136. +for /f %%F in ('dir %LOGDIR_PATH% /b ^| findstr /r "^[^0-9]"') do (
  10137. +   set LOGFILE_NAME_OLD=%%F
  10138. +   set LOGFILE_NAME_NEW=%LOCALDT%_!LOGFILE_NAME_OLD!
  10139. +   set LOGFILE_PATH_OLD=%LOGDIR_PATH%!LOGFILE_NAME_OLD!
  10140. +   rename !LOGFILE_PATH_OLD! !LOGFILE_NAME_NEW!
  10141. +)
  10142.  
  10143. -:error
  10144. +rem Execute the command line
  10145. +echo Starting %APP_TITLE%.
  10146.  echo.
  10147. -echo Login Server terminated abnormally!
  10148. -echo.
  10149. +%APP_CMD_LN%
  10150.  
  10151. -:end
  10152. +if ERRORLEVEL 2 (
  10153. +   echo.
  10154. +   echo Admin Restarted %APP_TITLE%.
  10155. +   echo.
  10156. +   goto restart_loop
  10157. +)
  10158. +REM ## :restart_loop ###############################################################
  10159. +REM ################################################################################
  10160. +
  10161. +if ERRORLEVEL 1 (
  10162. +   echo.
  10163. +   echo %APP_TITLE% terminated abnormally!
  10164. +   echo.
  10165. +)
  10166. +
  10167.  echo.
  10168. -echo Login Server Terminated.
  10169. +echo %APP_TITLE% Terminated.
  10170.  echo.
  10171.  pause
  10172. \ No newline at end of file
  10173. diff --git a/src/main/java/com/l2jserver/Config.java b/src/main/java/com/l2jserver/Config.java
  10174. index 06c664c..d2b5115 100644
  10175. --- a/src/main/java/com/l2jserver/Config.java
  10176. +++ b/src/main/java/com/l2jserver/Config.java
  10177. @@ -20,7 +20,6 @@
  10178.  
  10179.  import java.io.BufferedReader;
  10180.  import java.io.File;
  10181. -import java.io.FileOutputStream;
  10182.  import java.io.IOException;
  10183.  import java.io.InputStreamReader;
  10184.  import java.io.OutputStream;
  10185. @@ -38,6 +37,7 @@
  10186.  import java.nio.file.Files;
  10187.  import java.nio.file.Path;
  10188.  import java.nio.file.Paths;
  10189. +import java.nio.file.StandardOpenOption;
  10190.  import java.util.ArrayList;
  10191.  import java.util.Arrays;
  10192.  import java.util.Enumeration;
  10193. @@ -82,35 +82,43 @@
  10194.     // Constants
  10195.     // --------------------------------------------------
  10196.     public static final String EOL = System.lineSeparator();
  10197. +   public static final Path CONFIG_FOLDER = Paths.get("config");
  10198. +   public static final Path CONFIG_DEFAULT_FOLDER = CONFIG_FOLDER.resolve("default");
  10199. +   public static final Path CONFIG_OVERWRITE_FOLDER = CONFIG_FOLDER;
  10200. +   public static final Path CONFIG_GENERATED_FOLDER = CONFIG_FOLDER;
  10201.    
  10202.     // --------------------------------------------------
  10203. -   // L2J Property File Definitions
  10204. +   // L2J Config File Names
  10205.     // --------------------------------------------------
  10206. -   public static final String CHARACTER_CONFIG_FILE = "./config/Character.properties";
  10207. -   public static final String FEATURE_CONFIG_FILE = "./config/Feature.properties";
  10208. -   public static final String FORTSIEGE_CONFIGURATION_FILE = "./config/FortSiege.properties";
  10209. -   public static final String GENERAL_CONFIG_FILE = "./config/General.properties";
  10210. -   public static final String HEXID_FILE = "./config/hexid.txt";
  10211. -   public static final String ID_CONFIG_FILE = "./config/IdFactory.properties";
  10212. -   public static final String L2JMOD_CONFIG_FILE = "./config/L2JMods.properties";
  10213. -   public static final String LOGIN_CONFIGURATION_FILE = "./config/LoginServer.properties";
  10214. -   public static final String NPC_CONFIG_FILE = "./config/NPC.properties";
  10215. -   public static final String PVP_CONFIG_FILE = "./config/PVP.properties";
  10216. -   public static final String RATES_CONFIG_FILE = "./config/Rates.properties";
  10217. -   public static final String CONFIGURATION_FILE = "./config/Server.properties";
  10218. -   public static final String IP_CONFIG_FILE = "./config/ipconfig.xml";
  10219. -   public static final String SIEGE_CONFIGURATION_FILE = "./config/Siege.properties";
  10220. -   public static final String TW_CONFIGURATION_FILE = "./config/TerritoryWar.properties";
  10221. -   public static final String TELNET_FILE = "./config/Telnet.properties";
  10222. -   public static final String FLOOD_PROTECTOR_FILE = "./config/FloodProtector.properties";
  10223. -   public static final String MMO_CONFIG_FILE = "./config/MMO.properties";
  10224. -   public static final String OLYMPIAD_CONFIG_FILE = "./config/Olympiad.properties";
  10225. -   public static final String GRANDBOSS_CONFIG_FILE = "./config/GrandBoss.properties";
  10226. -   public static final String GRACIASEEDS_CONFIG_FILE = "./config/GraciaSeeds.properties";
  10227. -   public static final String CHAT_FILTER_FILE = "./config/chatfilter.txt";
  10228. -   public static final String EMAIL_CONFIG_FILE = "./config/Email.properties";
  10229. -   public static final String CH_SIEGE_FILE = "./config/ConquerableHallSiege.properties";
  10230. -   public static final String GEODATA_FILE = "./config/GeoData.properties";
  10231. +   public static final String CHARACTER_CONFIG_FILE = "Character.properties";
  10232. +   public static final String FEATURE_CONFIG_FILE = "Feature.properties";
  10233. +   public static final String FORTSIEGE_CONFIGURATION_FILE = "FortSiege.properties";
  10234. +   public static final String GENERAL_CONFIG_FILE = "General.properties";
  10235. +   public static final String HEXID_FILE = "hexid.txt";
  10236. +   public static final String ID_CONFIG_FILE = "IdFactory.properties";
  10237. +   public static final String L2JMOD_CONFIG_FILE = "L2JMods.properties";
  10238. +   public static final String LOGIN_CONFIGURATION_FILE = "LoginServer.properties";
  10239. +   public static final String NPC_CONFIG_FILE = "NPC.properties";
  10240. +   public static final String PVP_CONFIG_FILE = "PVP.properties";
  10241. +   public static final String RATES_CONFIG_FILE = "Rates.properties";
  10242. +   public static final String CONFIGURATION_FILE = "Server.properties";
  10243. +   public static final String SIEGE_CONFIGURATION_FILE = "Siege.properties";
  10244. +   public static final String TW_CONFIGURATION_FILE = "TerritoryWar.properties";
  10245. +   public static final String TELNET_FILE = "Telnet.properties";
  10246. +   public static final String FLOOD_PROTECTOR_FILE = "FloodProtector.properties";
  10247. +   public static final String MMO_CONFIG_FILE = "MMO.properties";
  10248. +   public static final String OLYMPIAD_CONFIG_FILE = "Olympiad.properties";
  10249. +   public static final String GRANDBOSS_CONFIG_FILE = "GrandBoss.properties";
  10250. +   public static final String GRACIASEEDS_CONFIG_FILE = "GraciaSeeds.properties";
  10251. +   public static final String EMAIL_CONFIG_FILE = "Email.properties";
  10252. +   public static final String CH_SIEGE_FILE = "ConquerableHallSiege.properties";
  10253. +   public static final String GEODATA_FILE = "GeoData.properties";
  10254. +   // another format than .properties
  10255. +   public static final String IP_CONFIG_FILE = "ipconfig.xml";
  10256. +   public static final String CHAT_FILTER_FILE = "chatfilter.txt";
  10257. +   public static final String BOTREPORT_PUNISHMENTS_FILE = "botreport_punishments.xml";
  10258. +   public static final String SECONDARY_AUTH_FILE = "SecondaryAuth.xml";
  10259. +   public static final String SIEGE_SCHEDULE_FILE = "SiegeSchedule.xml";
  10260.     // --------------------------------------------------
  10261.     // L2J Variable Definitions
  10262.     // --------------------------------------------------
  10263. @@ -2596,31 +2604,31 @@
  10264.             ALT_OLY_ENCHANT_LIMIT = Olympiad.getInt("AltOlyEnchantLimit", -1);
  10265.             ALT_OLY_WAIT_TIME = Olympiad.getInt("AltOlyWaitTime", 120);
  10266.            
  10267. -           final File hexIdFile = new File(HEXID_FILE);
  10268. -           if (hexIdFile.exists())
  10269. +           final Path hexIdFile = Paths.get(HEXID_FILE);
  10270. +           if (Files.exists(CONFIG_FOLDER.resolve(hexIdFile)))
  10271.             {
  10272.                 final PropertiesParser hexId = new PropertiesParser(hexIdFile);
  10273.                
  10274. -               if (hexId.containskey("ServerID") && hexId.containskey("HexID"))
  10275. +               if (hexId.containsNonEmptyKey("ServerID") && hexId.containsNonEmptyKey("HexID"))
  10276.                 {
  10277.                     SERVER_ID = hexId.getInt("ServerID", 1);
  10278.                     try
  10279.                     {
  10280. -                       HEX_ID = new BigInteger(hexId.getString("HexID", null), 16).toByteArray();
  10281. +                       HEX_ID = new BigInteger(hexId.getString("HexID", ""), 16).toByteArray();
  10282.                     }
  10283.                     catch (Exception e)
  10284.                     {
  10285. -                       LOG.warn("Could not load HexID file ({}). Hopefully login will give us one.", HEXID_FILE);
  10286. +                       LOG.warn("Could not load HexID file ({})! Failed to convert HexID. Hopefully login will give us one.", HEXID_FILE, e);
  10287.                     }
  10288.                 }
  10289.                 else
  10290.                 {
  10291. -                   LOG.warn("Could not load HexID file ({}). Hopefully login will give us one.", HEXID_FILE);
  10292. +                   LOG.warn("Could not load HexID file ({})! Missing properties. Hopefully login will give us one.", HEXID_FILE);
  10293.                 }
  10294.             }
  10295.             else
  10296.             {
  10297. -               LOG.warn("Could not load HexID file ({}). Hopefully login will give us one.", HEXID_FILE);
  10298. +               LOG.warn("Could not load HexID file ({}). File is missing. Hopefully login will give us one.", HEXID_FILE);
  10299.             }
  10300.            
  10301.             // Grand bosses
  10302. @@ -2659,13 +2667,17 @@
  10303.            
  10304.             try
  10305.             {
  10306. -               //@formatter:off
  10307. -               FILTER_LIST = Files.lines(Paths.get(CHAT_FILTER_FILE), StandardCharsets.UTF_8)
  10308. -                   .map(String::trim)
  10309. -                   .filter(line -> (!line.isEmpty() && (line.charAt(0) != '#')))
  10310. -                   .collect(Collectors.toList());
  10311. -               //@formatter:on
  10312. -               LOG.info("Loaded {} filter words.", FILTER_LIST.size());
  10313. +               Path chatfilterFile = getPathOfConfigFile(CHAT_FILTER_FILE, "Using empty chatfilter list.");
  10314. +               if (chatfilterFile != null)
  10315. +               {
  10316. +                   //@formatter:offconfig
  10317. +                   FILTER_LIST = Files.lines(chatfilterFile, StandardCharsets.UTF_8)
  10318. +                       .map(String::trim)
  10319. +                       .filter(line -> (!line.isEmpty() && (line.charAt(0) != '#')))
  10320. +                       .collect(Collectors.toList());
  10321. +                   //@formatter:on
  10322. +                   LOG.info("Loaded {} filter words.", FILTER_LIST.size());
  10323. +               }
  10324.             }
  10325.             catch (IOException ioe)
  10326.             {
  10327. @@ -3671,18 +3683,14 @@
  10328.      */
  10329.     public static void saveHexid(int serverId, String hexId, String fileName)
  10330.     {
  10331. -       try
  10332. +       Properties hexSetting = new Properties();
  10333. +       Path p = CONFIG_GENERATED_FOLDER.resolve(fileName);
  10334. +       // Create a new empty file only if it doesn't exist
  10335. +       try (OutputStream os = Files.newOutputStream(p, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING))
  10336.         {
  10337. -           Properties hexSetting = new Properties();
  10338. -           File file = new File(fileName);
  10339. -           // Create a new empty file only if it doesn't exist
  10340. -           file.createNewFile();
  10341. -           try (OutputStream out = new FileOutputStream(file))
  10342. -           {
  10343. -               hexSetting.setProperty("ServerID", String.valueOf(serverId));
  10344. -               hexSetting.setProperty("HexID", hexId);
  10345. -               hexSetting.store(out, "the hexID to auth into login");
  10346. -           }
  10347. +           hexSetting.setProperty("ServerID", String.valueOf(serverId));
  10348. +           hexSetting.setProperty("HexID", hexId);
  10349. +           hexSetting.store(os, "the hexID to auth into login");
  10350.         }
  10351.         catch (Exception e)
  10352.         {
  10353. @@ -3916,6 +3924,46 @@
  10354.         return result;
  10355.     }
  10356.    
  10357. +   public static Path getPathOfConfigFile(String filename, String missingMessage)
  10358. +   {
  10359. +       Path p = CONFIG_OVERWRITE_FOLDER.resolve(filename);
  10360. +       if (Files.exists(p))
  10361. +       {
  10362. +           LOG.info("Using overwrite {}.", filename);
  10363. +           return p;
  10364. +       }
  10365. +      
  10366. +       p = CONFIG_DEFAULT_FOLDER.resolve(filename);
  10367. +       if (Files.exists(p))
  10368. +       {
  10369. +           LOG.info("Using default {}.", filename);
  10370. +           return p;
  10371. +       }
  10372. +      
  10373. +       LOG.warn("{} is missing! {}", missingMessage);
  10374. +       return null;
  10375. +   }
  10376. +  
  10377. +   public static File getFileOfConfigFile(String filename, String missingMessage)
  10378. +   {
  10379. +       File f = new File(CONFIG_OVERWRITE_FOLDER.resolve(filename).toString());
  10380. +       if (f.exists())
  10381. +       {
  10382. +           LOG.info("Using overwrite {}.", filename);
  10383. +           return f;
  10384. +       }
  10385. +      
  10386. +       f = new File(CONFIG_DEFAULT_FOLDER.resolve(filename).toString());
  10387. +       if (f.exists())
  10388. +       {
  10389. +           LOG.info("Using default {}.", filename);
  10390. +           return f;
  10391. +       }
  10392. +      
  10393. +       LOG.warn("{} is missing! {}", missingMessage);
  10394. +       return null;
  10395. +   }
  10396. +  
  10397.     private static class IPConfigData implements IXmlReader
  10398.     {
  10399.         private static final List<String> _subnets = new ArrayList<>(5);
  10400. @@ -3930,16 +3978,13 @@
  10401.         public void load()
  10402.         {
  10403.             GameServer.printSection("Network Configuration");
  10404. -           final File f = new File(IP_CONFIG_FILE);
  10405. -           if (f.exists())
  10406. +           File f = getFileOfConfigFile(IP_CONFIG_FILE, "Using automatic network configuration.");
  10407. +           if (f != null)
  10408.             {
  10409. -               LOG.info("Using existing ipconfig.xml.");
  10410. -               parseFile(new File(IP_CONFIG_FILE));
  10411. +               parseFile(f);
  10412.             }
  10413.             else
  10414. -           // Auto configuration...
  10415.             {
  10416. -               LOG.info("Using automatic network configuration.");
  10417.                 autoIpConfig();
  10418.             }
  10419.         }
  10420. 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
  10421. index e851e67..f830bee 100644
  10422. --- a/src/main/java/com/l2jserver/gameserver/data/xml/impl/SecondaryAuthData.java
  10423. +++ b/src/main/java/com/l2jserver/gameserver/data/xml/impl/SecondaryAuthData.java
  10424. @@ -25,6 +25,7 @@
  10425.  import org.w3c.dom.Document;
  10426.  import org.w3c.dom.Node;
  10427.  
  10428. +import com.l2jserver.Config;
  10429.  import com.l2jserver.util.data.xml.IXmlReader;
  10430.  
  10431.  /**
  10432. @@ -48,8 +49,12 @@
  10433.     public synchronized void load()
  10434.     {
  10435.         _forbiddenPasswords.clear();
  10436. -       parseFile(new File("config/SecondaryAuth.xml"));
  10437. -       LOG.info("{}: Loaded {} forbidden passwords.", getClass().getSimpleName(), _forbiddenPasswords.size());
  10438. +       File f = Config.getFileOfConfigFile(Config.SECONDARY_AUTH_FILE, "Secondary auth stays disabled!");
  10439. +       if (f != null)
  10440. +       {
  10441. +           parseFile(f);
  10442. +           LOG.info("{}: Loaded {} forbidden passwords.", getClass().getSimpleName(), _forbiddenPasswords.size());
  10443. +       }
  10444.     }
  10445.    
  10446.     @Override
  10447. 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
  10448. index fdf12a9..384b1cd 100644
  10449. --- a/src/main/java/com/l2jserver/gameserver/data/xml/impl/SiegeScheduleData.java
  10450. +++ b/src/main/java/com/l2jserver/gameserver/data/xml/impl/SiegeScheduleData.java
  10451. @@ -18,6 +18,7 @@
  10452.   */
  10453.  package com.l2jserver.gameserver.data.xml.impl;
  10454.  
  10455. +import java.io.File;
  10456.  import java.util.ArrayList;
  10457.  import java.util.Calendar;
  10458.  import java.util.List;
  10459. @@ -26,6 +27,7 @@
  10460.  import org.w3c.dom.NamedNodeMap;
  10461.  import org.w3c.dom.Node;
  10462.  
  10463. +import com.l2jserver.Config;
  10464.  import com.l2jserver.gameserver.model.SiegeScheduleDate;
  10465.  import com.l2jserver.gameserver.model.StatsSet;
  10466.  import com.l2jserver.gameserver.util.Util;
  10467. @@ -48,8 +50,12 @@
  10468.     public synchronized void load()
  10469.     {
  10470.         _scheduleData.clear();
  10471. -       parseDatapackFile("config/SiegeSchedule.xml");
  10472. -       LOG.info("{}: Loaded: {} siege schedulers.", getClass().getSimpleName(), _scheduleData.size());
  10473. +       File f = Config.getFileOfConfigFile(Config.SIEGE_SCHEDULE_FILE, "Using emergency siege schedule data.");
  10474. +       if (f != null)
  10475. +       {
  10476. +           parseFile(f);
  10477. +           LOG.info("{}: Loaded: {} siege schedulers.", getClass().getSimpleName(), _scheduleData.size());
  10478. +       }
  10479.         if (_scheduleData.isEmpty())
  10480.         {
  10481.             _scheduleData.add(new SiegeScheduleDate(new StatsSet()));
  10482. diff --git a/src/main/java/com/l2jserver/gameserver/datatables/BotReportTable.java b/src/main/java/com/l2jserver/gameserver/datatables/BotReportTable.java
  10483. index 3ec8c88..62ec249 100644
  10484. --- a/src/main/java/com/l2jserver/gameserver/datatables/BotReportTable.java
  10485. +++ b/src/main/java/com/l2jserver/gameserver/datatables/BotReportTable.java
  10486. @@ -19,7 +19,6 @@
  10487.  package com.l2jserver.gameserver.datatables;
  10488.  
  10489.  import java.io.File;
  10490. -import java.io.FileNotFoundException;
  10491.  import java.sql.Connection;
  10492.  import java.sql.PreparedStatement;
  10493.  import java.sql.ResultSet;
  10494. @@ -28,12 +27,12 @@
  10495.  import java.util.HashMap;
  10496.  import java.util.Map;
  10497.  import java.util.concurrent.ConcurrentHashMap;
  10498. -import java.util.logging.Level;
  10499. -import java.util.logging.Logger;
  10500.  
  10501.  import javax.xml.parsers.SAXParser;
  10502.  import javax.xml.parsers.SAXParserFactory;
  10503.  
  10504. +import org.slf4j.Logger;
  10505. +import org.slf4j.LoggerFactory;
  10506.  import org.xml.sax.Attributes;
  10507.  import org.xml.sax.helpers.DefaultHandler;
  10508.  
  10509. @@ -54,7 +53,7 @@
  10510.  public final class BotReportTable
  10511.  {
  10512.     // Zoey76: TODO: Split XML parsing from SQL operations, use IXmlReader instead of SAXParser.
  10513. -   private static final Logger LOGGER = Logger.getLogger(BotReportTable.class.getName());
  10514. +   private static final Logger LOGGER = LoggerFactory.getLogger(BotReportTable.class.getName());
  10515.    
  10516.     private static final int COLUMN_BOT_ID = 1;
  10517.     private static final int COLUMN_REPORTER_ID = 2;
  10518. @@ -86,18 +85,16 @@
  10519.            
  10520.             try
  10521.             {
  10522. -               File punishments = new File("./config/botreport_punishments.xml");
  10523. -               if (!punishments.exists())
  10524. +               File punishments = Config.getFileOfConfigFile(Config.BOTREPORT_PUNISHMENTS_FILE, "Using empty list of botreport punishments.");
  10525. +               if (punishments != null)
  10526.                 {
  10527. -                   throw new FileNotFoundException(punishments.getName());
  10528. +                   SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
  10529. +                   parser.parse(punishments, new PunishmentsLoader());
  10530.                 }
  10531. -              
  10532. -               SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
  10533. -               parser.parse(punishments, new PunishmentsLoader());
  10534.             }
  10535.             catch (Exception e)
  10536.             {
  10537. -               LOGGER.log(Level.WARNING, "BotReportTable: Could not load punishments from /config/botreport_punishments.xml", e);
  10538. +               LOGGER.warn("BotReportTable: Could not load punishments from {}", Config.BOTREPORT_PUNISHMENTS_FILE, e);
  10539.             }
  10540.            
  10541.             loadReportedCharData();
  10542. @@ -167,11 +164,11 @@
  10543.                 }
  10544.             }
  10545.            
  10546. -           LOGGER.info("BotReportTable: Loaded " + _reports.size() + " bot reports");
  10547. +           LOGGER.info("BotReportTable: Loaded {} bot reports", _reports.size());
  10548.         }
  10549.         catch (Exception e)
  10550.         {
  10551. -           LOGGER.log(Level.WARNING, "BotReportTable: Could not load reported char data!", e);
  10552. +           LOGGER.warn("BotReportTable: Could not load reported char data!", e);
  10553.         }
  10554.     }
  10555.    
  10556. @@ -201,7 +198,7 @@
  10557.         }
  10558.         catch (Exception e)
  10559.         {
  10560. -           LOGGER.log(Level.SEVERE, "BotReportTable: Could not update reported char data in database!", e);
  10561. +           LOGGER.error("BotReportTable: Could not update reported char data in database!", e);
  10562.         }
  10563.     }
  10564.    
  10565. @@ -380,8 +377,8 @@
  10566.     /**
  10567.      * Adds a debuff punishment into the punishments record. If skill does not exist, will log it and return
  10568.      * @param neededReports (report count to trigger this debuff)
  10569. -    * @param skillId
  10570. -    * @param skillLevel
  10571. +    * @param skillId skill effects to apply
  10572. +    * @param skillLevel the level of the skill to apply effects from
  10573.      * @param sysMsg (id of a system message to send when applying the punish)
  10574.      */
  10575.     void addPunishment(int neededReports, int skillId, int skillLevel, int sysMsg)
  10576. @@ -393,7 +390,7 @@
  10577.         }
  10578.         else
  10579.         {
  10580. -           LOGGER.warning("BotReportTable: Could not add punishment for " + neededReports + " report(s): Skill " + skillId + "-" + skillLevel + " does not exist!");
  10581. +           LOGGER.warn("BotReportTable: Could not add punishment for {} report(s): Skill {}-{} does not exist!", neededReports, skillId, skillLevel);
  10582.         }
  10583.     }
  10584.    
  10585. @@ -429,7 +426,7 @@
  10586.         catch (Exception e)
  10587.         {
  10588.             ThreadPoolManager.getInstance().scheduleGeneral(new ResetPointTask(), 24 * 3600 * 1000);
  10589. -           LOGGER.log(Level.WARNING, "BotReportTable: Could not properly schedule bot report points reset task. Scheduled in 24 hours.", e);
  10590. +           LOGGER.warn("BotReportTable: Could not properly schedule bot report points reset task. Scheduled in 24 hours.", e);
  10591.         }
  10592.     }
  10593.    
  10594. @@ -554,7 +551,7 @@
  10595.     }
  10596.    
  10597.     /**
  10598. -    * SAX loader to parse /config/botreport_punishments.xml file
  10599. +    * SAX loader to parse botreport_punishments.xml file
  10600.      */
  10601.     private final class PunishmentsLoader extends DefaultHandler
  10602.     {
  10603. diff --git a/src/main/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java b/src/main/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java
  10604. index 243ffcc..4e11d48 100644
  10605. --- a/src/main/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java
  10606. +++ b/src/main/java/com/l2jserver/gameserver/instancemanager/FortSiegeManager.java
  10607. @@ -18,16 +18,12 @@
  10608.   */
  10609.  package com.l2jserver.gameserver.instancemanager;
  10610.  
  10611. -import java.io.File;
  10612. -import java.io.FileInputStream;
  10613. -import java.io.InputStream;
  10614.  import java.sql.Connection;
  10615.  import java.sql.PreparedStatement;
  10616.  import java.sql.ResultSet;
  10617.  import java.util.ArrayList;
  10618.  import java.util.List;
  10619.  import java.util.Map;
  10620. -import java.util.Properties;
  10621.  import java.util.StringTokenizer;
  10622.  import java.util.concurrent.ConcurrentHashMap;
  10623.  import java.util.logging.Level;
  10624. @@ -46,6 +42,7 @@
  10625.  import com.l2jserver.gameserver.model.skills.CommonSkill;
  10626.  import com.l2jserver.gameserver.network.SystemMessageId;
  10627.  import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  10628. +import com.l2jserver.util.PropertiesParser;
  10629.  
  10630.  public final class FortSiegeManager
  10631.  {
  10632. @@ -77,7 +74,7 @@
  10633.    
  10634.     /**
  10635.      * @param clan The L2Clan of the player
  10636. -    * @param fortid
  10637. +    * @param fortid the fortress id
  10638.      * @return true if the clan is registered or owner of a fort
  10639.      */
  10640.     public final boolean checkIsRegistered(L2Clan clan, int fortid)
  10641. @@ -117,25 +114,16 @@
  10642.    
  10643.     private final void load()
  10644.     {
  10645. -       final Properties siegeSettings = new Properties();
  10646. -       final File file = new File(Config.FORTSIEGE_CONFIGURATION_FILE);
  10647. -       try (InputStream is = new FileInputStream(file))
  10648. -       {
  10649. -           siegeSettings.load(is);
  10650. -       }
  10651. -       catch (Exception e)
  10652. -       {
  10653. -           _log.log(Level.WARNING, "Error while loading Fort Siege Manager settings!", e);
  10654. -       }
  10655. +       final PropertiesParser siegeSettings = new PropertiesParser(Config.FORTSIEGE_CONFIGURATION_FILE);
  10656.        
  10657.         // Siege setting
  10658. -       _justToTerritory = Boolean.parseBoolean(siegeSettings.getProperty("JustToTerritory", "true"));
  10659. -       _attackerMaxClans = Integer.decode(siegeSettings.getProperty("AttackerMaxClans", "500"));
  10660. -       _flagMaxCount = Integer.decode(siegeSettings.getProperty("MaxFlags", "1"));
  10661. -       _siegeClanMinLevel = Integer.decode(siegeSettings.getProperty("SiegeClanMinLevel", "4"));
  10662. -       _siegeLength = Integer.decode(siegeSettings.getProperty("SiegeLength", "60"));
  10663. -       _countDownLength = Integer.decode(siegeSettings.getProperty("CountDownLength", "10"));
  10664. -       _suspiciousMerchantRespawnDelay = Integer.decode(siegeSettings.getProperty("SuspiciousMerchantRespawnDelay", "180"));
  10665. +       _justToTerritory = siegeSettings.getBoolean("JustToTerritory", true);
  10666. +       _attackerMaxClans = siegeSettings.getInt("AttackerMaxClans", 500);
  10667. +       _flagMaxCount = siegeSettings.getInt("MaxFlags", 1);
  10668. +       _siegeClanMinLevel = siegeSettings.getInt("SiegeClanMinLevel", 4);
  10669. +       _siegeLength = siegeSettings.getInt("SiegeLength", 60);
  10670. +       _countDownLength = siegeSettings.getInt("CountDownLength", 10);
  10671. +       _suspiciousMerchantRespawnDelay = siegeSettings.getInt("SuspiciousMerchantRespawnDelay", 180);
  10672.        
  10673.         // Siege spawns settings
  10674.         _commanderSpawnList = new ConcurrentHashMap<>();
  10675. @@ -147,7 +135,7 @@
  10676.             List<CombatFlag> flagSpawns = new ArrayList<>();
  10677.             for (int i = 1; i < 5; i++)
  10678.             {
  10679. -               final String _spawnParams = siegeSettings.getProperty(fort.getName().replace(" ", "") + "Commander" + i, "");
  10680. +               final String _spawnParams = siegeSettings.getString(fort.getName().replace(" ", "") + "Commander" + i, "");
  10681.                 if (_spawnParams.isEmpty())
  10682.                 {
  10683.                     break;
  10684. @@ -174,7 +162,7 @@
  10685.            
  10686.             for (int i = 1; i < 4; i++)
  10687.             {
  10688. -               final String _spawnParams = siegeSettings.getProperty(fort.getName().replace(" ", "") + "Flag" + i, "");
  10689. +               final String _spawnParams = siegeSettings.getString(fort.getName().replace(" ", "") + "Flag" + i, "");
  10690.                 if (_spawnParams.isEmpty())
  10691.                 {
  10692.                     break;
  10693. diff --git a/src/main/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java b/src/main/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java
  10694. index d7c6407..7bb1135 100644
  10695. --- a/src/main/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java
  10696. +++ b/src/main/java/com/l2jserver/gameserver/instancemanager/SiegeManager.java
  10697. @@ -73,7 +73,7 @@
  10698.    
  10699.     /**
  10700.      * @param clan The L2Clan of the player
  10701. -    * @param castleid
  10702. +    * @param castleid the castle id
  10703.      * @return true if the clan is registered or owner of a castle
  10704.      */
  10705.     public final boolean checkIsRegistered(L2Clan clan, int castleid)
  10706. diff --git a/src/main/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java b/src/main/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
  10707. index 8fc70aa..02d2393 100644
  10708. --- a/src/main/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
  10709. +++ b/src/main/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
  10710. @@ -169,7 +169,7 @@
  10711.     }
  10712.    
  10713.     /**
  10714. -    * @param castleId
  10715. +    * @param castleId the castle id
  10716.      * @param clan The L2Clan of the player
  10717.      * @return true if the clan is registered
  10718.      */
  10719. @@ -200,8 +200,8 @@
  10720.     }
  10721.    
  10722.     /**
  10723. -    * @param castleId
  10724. -    * @param objId
  10725. +    * @param castleId the castle id
  10726. +    * @param objId player object id
  10727.      * @return true if the player is registered
  10728.      */
  10729.     public final boolean checkIsRegistered(int castleId, int objId)
  10730. diff --git a/src/main/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java b/src/main/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java
  10731. index 117cf9a..8251fd7 100644
  10732. --- a/src/main/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java
  10733. +++ b/src/main/java/com/l2jserver/gameserver/model/olympiad/Olympiad.java
  10734. @@ -18,8 +18,6 @@
  10735.   */
  10736.  package com.l2jserver.gameserver.model.olympiad;
  10737.  
  10738. -import java.io.FileInputStream;
  10739. -import java.io.InputStream;
  10740.  import java.sql.Connection;
  10741.  import java.sql.PreparedStatement;
  10742.  import java.sql.ResultSet;
  10743. @@ -31,7 +29,6 @@
  10744.  import java.util.List;
  10745.  import java.util.Map;
  10746.  import java.util.Map.Entry;
  10747. -import java.util.Properties;
  10748.  import java.util.concurrent.ConcurrentHashMap;
  10749.  import java.util.concurrent.ScheduledFuture;
  10750.  import java.util.logging.Level;
  10751. @@ -50,6 +47,7 @@
  10752.  import com.l2jserver.gameserver.network.SystemMessageId;
  10753.  import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  10754.  import com.l2jserver.gameserver.util.Broadcast;
  10755. +import com.l2jserver.util.PropertiesParser;
  10756.  
  10757.  /**
  10758.   * @author godson
  10759. @@ -65,16 +63,26 @@
  10760.    
  10761.     public static final String OLYMPIAD_HTML_PATH = "data/html/olympiad/";
  10762.     private static final String OLYMPIAD_LOAD_DATA = "SELECT current_cycle, period, olympiad_end, validation_end, " + "next_weekly_change FROM olympiad_data WHERE id = 0";
  10763. -   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=?";
  10764. -   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";
  10765. -   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 (?,?,?,?,?,?,?,?,?,?,?)";
  10766. -   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 = ?";
  10767. -   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";
  10768. +   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=?, "
  10769. +       + "validation_end=?, next_weekly_change=?";
  10770. +   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, "
  10771. +       + "olympiad_nobles.competitions_won, olympiad_nobles.competitions_lost, olympiad_nobles.competitions_drawn, "
  10772. +       + "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";
  10773. +   private static final String OLYMPIAD_SAVE_NOBLES = "INSERT INTO olympiad_nobles " + "(`charId`,`class_id`,`olympiad_points`,`competitions_done`,`competitions_won`,`competitions_lost`,"
  10774. +       + "`competitions_drawn`, `competitions_done_week`, `competitions_done_week_classed`, `competitions_done_week_non_classed`, `competitions_done_week_team`) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
  10775. +   private static final String OLYMPIAD_UPDATE_NOBLES = "UPDATE olympiad_nobles SET "
  10776. +       + "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 = ?";
  10777. +   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 >= "
  10778. +       + 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";
  10779.     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";
  10780. -   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";
  10781. -   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";
  10782. -   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";
  10783. -   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";
  10784. +   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
  10785. +       + " " + "ORDER BY olympiad_nobles_eom.olympiad_points DESC, olympiad_nobles_eom.competitions_done DESC, olympiad_nobles_eom.competitions_won DESC LIMIT 10";
  10786. +   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 + " "
  10787. +       + "ORDER BY olympiad_nobles.olympiad_points DESC, olympiad_nobles.competitions_done DESC, olympiad_nobles.competitions_won DESC LIMIT 10";
  10788. +   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) "
  10789. +       + "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";
  10790. +   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) "
  10791. +       + "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";
  10792.    
  10793.     private static final String OLYMPIAD_DELETE_ALL = "TRUNCATE olympiad_nobles";
  10794.     private static final String OLYMPIAD_MONTH_CLEAR = "TRUNCATE olympiad_nobles_eom";
  10795. @@ -201,23 +209,12 @@
  10796.         {
  10797.             _log.log(Level.INFO, "Olympiad System: failed to load data from database, trying to load from file.");
  10798.            
  10799. -           Properties OlympiadProperties = new Properties();
  10800. -           try (InputStream is = new FileInputStream(Config.OLYMPIAD_CONFIG_FILE))
  10801. -           {
  10802. -              
  10803. -               OlympiadProperties.load(is);
  10804. -           }
  10805. -           catch (Exception e)
  10806. -           {
  10807. -               _log.log(Level.SEVERE, "Olympiad System: Error loading olympiad properties: ", e);
  10808. -               return;
  10809. -           }
  10810. -          
  10811. -           _currentCycle = Integer.parseInt(OlympiadProperties.getProperty("CurrentCycle", "1"));
  10812. -           _period = Integer.parseInt(OlympiadProperties.getProperty("Period", "0"));
  10813. -           _olympiadEnd = Long.parseLong(OlympiadProperties.getProperty("OlympiadEnd", "0"));
  10814. -           _validationEnd = Long.parseLong(OlympiadProperties.getProperty("ValidationEnd", "0"));
  10815. -           _nextWeeklyChange = Long.parseLong(OlympiadProperties.getProperty("NextWeeklyChange", "0"));
  10816. +           final PropertiesParser OlympiadProperties = new PropertiesParser(Config.OLYMPIAD_CONFIG_FILE);
  10817. +           _currentCycle = OlympiadProperties.getInt("CurrentCycle", 1);
  10818. +           _period = OlympiadProperties.getInt("Period", 0);
  10819. +           _olympiadEnd = OlympiadProperties.getInt("OlympiadEnd", 0);
  10820. +           _validationEnd = OlympiadProperties.getInt("ValidationEnd", 0);
  10821. +           _nextWeeklyChange = OlympiadProperties.getInt("NextWeeklyChange", 0);
  10822.         }
  10823.        
  10824.         switch (_period)
  10825. @@ -540,8 +537,8 @@
  10826.                 saveOlympiadStatus();
  10827.                
  10828.                 init();
  10829. -           } , getMillisToCompEnd());
  10830. -       } , getMillisToCompBegin());
  10831. +           }, getMillisToCompEnd());
  10832. +       }, getMillisToCompBegin());
  10833.     }
  10834.    
  10835.     private long getMillisToOlympiadEnd()
  10836. @@ -656,7 +653,7 @@
  10837.            
  10838.             Calendar nextChange = Calendar.getInstance();
  10839.             _nextWeeklyChange = nextChange.getTimeInMillis() + WEEKLY_PERIOD;
  10840. -       } , getMillisToWeekChange(), WEEKLY_PERIOD);
  10841. +       }, getMillisToWeekChange(), WEEKLY_PERIOD);
  10842.     }
  10843.    
  10844.     protected synchronized void addWeeklyPoints()
  10845. diff --git a/src/main/java/com/l2jserver/status/GameStatusThread.java b/src/main/java/com/l2jserver/status/GameStatusThread.java
  10846. index 26e9aee..8cfc407 100644
  10847. --- a/src/main/java/com/l2jserver/status/GameStatusThread.java
  10848. +++ b/src/main/java/com/l2jserver/status/GameStatusThread.java
  10849. @@ -19,20 +19,18 @@
  10850.  package com.l2jserver.status;
  10851.  
  10852.  import java.io.BufferedReader;
  10853. -import java.io.File;
  10854. -import java.io.FileInputStream;
  10855.  import java.io.IOException;
  10856. -import java.io.InputStream;
  10857.  import java.io.InputStreamReader;
  10858.  import java.io.PrintWriter;
  10859.  import java.net.InetAddress;
  10860.  import java.net.Socket;
  10861. -import java.util.Properties;
  10862. +import java.net.UnknownHostException;
  10863.  import java.util.logging.Logger;
  10864.  
  10865.  import com.l2jserver.Config;
  10866.  import com.l2jserver.gameserver.handler.ITelnetHandler;
  10867.  import com.l2jserver.gameserver.handler.TelnetHandler;
  10868. +import com.l2jserver.util.PropertiesParser;
  10869.  
  10870.  public final class GameStatusThread extends Thread
  10871.  {
  10872. @@ -96,24 +94,21 @@
  10873.             telnetOutput(2, "");
  10874.         }
  10875.        
  10876. -       final File file = new File(Config.TELNET_FILE);
  10877. -       try (InputStream telnetIS = new FileInputStream(file))
  10878. +       PropertiesParser telnetSettings = new PropertiesParser(Config.TELNET_FILE);
  10879. +       String HostList = telnetSettings.getString("ListOfHosts", "127.0.0.1,localhost,::1");
  10880. +      
  10881. +       if (Config.DEVELOPER)
  10882.         {
  10883. -           Properties telnetSettings = new Properties();
  10884. -           telnetSettings.load(telnetIS);
  10885. -          
  10886. -           String HostList = telnetSettings.getProperty("ListOfHosts", "127.0.0.1,localhost,::1");
  10887. -          
  10888. -           if (Config.DEVELOPER)
  10889. +           telnetOutput(3, "Comparing ip to list...");
  10890. +       }
  10891. +      
  10892. +       // compare
  10893. +       String ipToCompare = null;
  10894. +       for (String ip : HostList.split(","))
  10895. +       {
  10896. +           if (!result)
  10897.             {
  10898. -               telnetOutput(3, "Comparing ip to list...");
  10899. -           }
  10900. -          
  10901. -           // compare
  10902. -           String ipToCompare = null;
  10903. -           for (String ip : HostList.split(","))
  10904. -           {
  10905. -               if (!result)
  10906. +               try
  10907.                 {
  10908.                     ipToCompare = InetAddress.getByName(ip).getHostAddress();
  10909.                     if (clientStringIP.equals(ipToCompare))
  10910. @@ -125,16 +120,17 @@
  10911.                         telnetOutput(3, clientStringIP + " = " + ipToCompare + "(" + ip + ") = " + result);
  10912.                     }
  10913.                 }
  10914. +               catch (UnknownHostException e)
  10915. +               {
  10916. +                   if (Config.DEVELOPER)
  10917. +                   {
  10918. +                       telnetOutput(4, "");
  10919. +                   }
  10920. +                  
  10921. +                   telnetOutput(1, "Error: " + e);
  10922. +               }
  10923.             }
  10924.         }
  10925. -       catch (IOException e)
  10926. -       {
  10927. -           if (Config.DEVELOPER)
  10928. -           {
  10929. -               telnetOutput(4, "");
  10930. -           }
  10931. -           telnetOutput(1, "Error: " + e);
  10932. -       }
  10933.        
  10934.         if (Config.DEVELOPER)
  10935.         {
  10936. diff --git a/src/main/java/com/l2jserver/status/LoginStatusThread.java b/src/main/java/com/l2jserver/status/LoginStatusThread.java
  10937. index fa56502..98ae91e 100644
  10938. --- a/src/main/java/com/l2jserver/status/LoginStatusThread.java
  10939. +++ b/src/main/java/com/l2jserver/status/LoginStatusThread.java
  10940. @@ -19,21 +19,19 @@
  10941.  package com.l2jserver.status;
  10942.  
  10943.  import java.io.BufferedReader;
  10944. -import java.io.File;
  10945. -import java.io.FileInputStream;
  10946.  import java.io.IOException;
  10947. -import java.io.InputStream;
  10948.  import java.io.InputStreamReader;
  10949.  import java.io.PrintWriter;
  10950.  import java.net.InetAddress;
  10951.  import java.net.Socket;
  10952. -import java.util.Properties;
  10953. +import java.net.UnknownHostException;
  10954.  import java.util.logging.Logger;
  10955.  
  10956.  import com.l2jserver.Config;
  10957.  import com.l2jserver.loginserver.GameServerTable;
  10958.  import com.l2jserver.loginserver.L2LoginServer;
  10959.  import com.l2jserver.loginserver.LoginController;
  10960. +import com.l2jserver.util.PropertiesParser;
  10961.  
  10962.  public final class LoginStatusThread extends Thread
  10963.  {
  10964. @@ -86,24 +84,21 @@
  10965.             telnetOutput(2, "");
  10966.         }
  10967.        
  10968. -       final File file = new File(Config.TELNET_FILE);
  10969. -       try (InputStream telnetIS = new FileInputStream(file))
  10970. +       PropertiesParser telnetSettings = new PropertiesParser(Config.TELNET_FILE);
  10971. +       String HostList = telnetSettings.getString("ListOfHosts", "127.0.0.1,localhost,::1");
  10972. +      
  10973. +       if (Config.DEVELOPER)
  10974.         {
  10975. -           Properties telnetSettings = new Properties();
  10976. -           telnetSettings.load(telnetIS);
  10977. -          
  10978. -           String HostList = telnetSettings.getProperty("ListOfHosts", "127.0.0.1,localhost,::1");
  10979. -          
  10980. -           if (Config.DEVELOPER)
  10981. +           telnetOutput(3, "Comparing ip to list...");
  10982. +       }
  10983. +      
  10984. +       // compare
  10985. +       String ipToCompare = null;
  10986. +       for (String ip : HostList.split(","))
  10987. +       {
  10988. +           if (!result)
  10989.             {
  10990. -               telnetOutput(3, "Comparing ip to list...");
  10991. -           }
  10992. -          
  10993. -           // compare
  10994. -           String ipToCompare = null;
  10995. -           for (String ip : HostList.split(","))
  10996. -           {
  10997. -               if (!result)
  10998. +               try
  10999.                 {
  11000.                     ipToCompare = InetAddress.getByName(ip).getHostAddress();
  11001.                     if (clientStringIP.equals(ipToCompare))
  11002. @@ -115,16 +110,17 @@
  11003.                         telnetOutput(3, clientStringIP + " = " + ipToCompare + "(" + ip + ") = " + result);
  11004.                     }
  11005.                 }
  11006. +               catch (UnknownHostException e)
  11007. +               {
  11008. +                   if (Config.DEVELOPER)
  11009. +                   {
  11010. +                       telnetOutput(4, "");
  11011. +                   }
  11012. +                  
  11013. +                   telnetOutput(1, "Error: " + e);
  11014. +               }
  11015.             }
  11016.         }
  11017. -       catch (IOException e)
  11018. -       {
  11019. -           if (Config.DEVELOPER)
  11020. -           {
  11021. -               telnetOutput(4, "");
  11022. -           }
  11023. -           telnetOutput(1, "Error: " + e);
  11024. -       }
  11025.        
  11026.         if (Config.DEVELOPER)
  11027.         {
  11028. diff --git a/src/main/java/com/l2jserver/status/Status.java b/src/main/java/com/l2jserver/status/Status.java
  11029. index e6521d3..5f4f692 100644
  11030. --- a/src/main/java/com/l2jserver/status/Status.java
  11031. +++ b/src/main/java/com/l2jserver/status/Status.java
  11032. @@ -18,19 +18,16 @@
  11033.   */
  11034.  package com.l2jserver.status;
  11035.  
  11036. -import java.io.File;
  11037. -import java.io.FileInputStream;
  11038.  import java.io.IOException;
  11039. -import java.io.InputStream;
  11040.  import java.net.ServerSocket;
  11041.  import java.net.Socket;
  11042.  import java.util.ArrayList;
  11043.  import java.util.List;
  11044. -import java.util.Properties;
  11045.  import java.util.logging.Logger;
  11046.  
  11047.  import com.l2jserver.Config;
  11048.  import com.l2jserver.Server;
  11049. +import com.l2jserver.util.PropertiesParser;
  11050.  import com.l2jserver.util.Rnd;
  11051.  
  11052.  public class Status extends Thread
  11053. @@ -101,13 +98,9 @@
  11054.     {
  11055.         super("Status");
  11056.         _mode = mode;
  11057. -       Properties telnetSettings = new Properties();
  11058. -       try (InputStream is = new FileInputStream(new File(Config.TELNET_FILE)))
  11059. -       {
  11060. -           telnetSettings.load(is);
  11061. -       }
  11062. -       int statusPort = Integer.parseInt(telnetSettings.getProperty("StatusPort", "12345"));
  11063. -       _statusPw = telnetSettings.getProperty("StatusPW");
  11064. +       PropertiesParser telnetSettings = new PropertiesParser(Config.TELNET_FILE);
  11065. +       int statusPort = telnetSettings.getInt("StatusPort", 12345);
  11066. +       _statusPw = telnetSettings.getString("StatusPW", "");
  11067.        
  11068.         if ((_mode == Server.MODE_GAMESERVER) || (_mode == Server.MODE_LOGINSERVER))
  11069.         {
  11070. diff --git a/src/main/java/com/l2jserver/tools/configurator/ConfigUserInterface.java b/src/main/java/com/l2jserver/tools/configurator/ConfigUserInterface.java
  11071. index a789f89..938b792 100644
  11072. --- a/src/main/java/com/l2jserver/tools/configurator/ConfigUserInterface.java
  11073. +++ b/src/main/java/com/l2jserver/tools/configurator/ConfigUserInterface.java
  11074. @@ -83,9 +83,6 @@
  11075.    
  11076.     private ResourceBundle _bundle;
  11077.    
  11078. -   /**
  11079. -    * @param args
  11080. -    */
  11081.     public static void main(String[] args)
  11082.     {
  11083.         try
  11084. @@ -251,10 +248,6 @@
  11085.         }
  11086.     }
  11087.    
  11088. -   /**
  11089. -    * @param file
  11090. -    * @throws IOException
  11091. -    */
  11092.     private void parsePropertiesFile(File file) throws IOException
  11093.     {
  11094.         try (FileInputStream fis = new FileInputStream(file);
  11095. diff --git a/src/main/java/com/l2jserver/tools/configurator/Configurator.java b/src/main/java/com/l2jserver/tools/configurator/Configurator.java
  11096. new file mode 100644
  11097. index 0000000..325f70e
  11098. --- /dev/null
  11099. +++ b/src/main/java/com/l2jserver/tools/configurator/Configurator.java
  11100. @@ -0,0 +1,58 @@
  11101. +/*
  11102. + * Copyright (C) 2004-2017 L2J Server
  11103. + *
  11104. + * This file is part of L2J Server.
  11105. + *
  11106. + * L2J Server is free software: you can redistribute it and/or modify
  11107. + * it under the terms of the GNU General Public License as published by
  11108. + * the Free Software Foundation, either version 3 of the License, or
  11109. + * (at your option) any later version.
  11110. + *
  11111. + * L2J Server is distributed in the hope that it will be useful,
  11112. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11113. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11114. + * General Public License for more details.
  11115. + *
  11116. + * You should have received a copy of the GNU General Public License
  11117. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11118. + */
  11119. +package com.l2jserver.tools.configurator;
  11120. +
  11121. +import java.util.ResourceBundle;
  11122. +
  11123. +import com.l2jserver.tools.configurator.frontend.jfx.JfxApplication;
  11124. +
  11125. +import javafx.application.Application;
  11126. +
  11127. +/**
  11128. + * @author HorridoJoho
  11129. + */
  11130. +public final class Configurator
  11131. +{
  11132. +   private static final ResourceBundle RESOURCES = ResourceBundle.getBundle("com.l2jserver.tools.configurator.res.Configurator");
  11133. +  
  11134. +   public static final String STRING_APP_NAME = "AppName";
  11135. +  
  11136. +   public static final String LOADING_CONFIGS = "LoadingConfigs";
  11137. +   public static final String LOADING_CONFIGS_SUCCESSFUL = "LoadingConfigsSuccessful";
  11138. +   public static final String LOADING_CONFIGS_ERROR = "LoadingConfigsError";
  11139. +  
  11140. +   public static final String SAVING_CONFIGS = "SavingConfigs";
  11141. +   public static final String SAVING_CONFIGS_SUCCESSFUL = "SavingConfigsSuccessful";
  11142. +   public static final String SAVING_CONFIGS_ERROR = "SavingConfigsError";
  11143. +  
  11144. +   public static String getString(String key)
  11145. +   {
  11146. +       return RESOURCES.getString(key);
  11147. +   }
  11148. +  
  11149. +   public static String getAppName()
  11150. +   {
  11151. +       return getString(STRING_APP_NAME);
  11152. +   }
  11153. +  
  11154. +   public static void main(String[] args)
  11155. +   {
  11156. +       Application.launch(JfxApplication.class, args);
  11157. +   }
  11158. +}
  11159. 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
  11160. new file mode 100644
  11161. index 0000000..0f1a2e3
  11162. --- /dev/null
  11163. +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/JfxApplication.java
  11164. @@ -0,0 +1,70 @@
  11165. +/*
  11166. + * Copyright (C) 2004-2017 L2J Server
  11167. + *
  11168. + * This file is part of L2J Server.
  11169. + *
  11170. + * L2J Server is free software: you can redistribute it and/or modify
  11171. + * it under the terms of the GNU General Public License as published by
  11172. + * the Free Software Foundation, either version 3 of the License, or
  11173. + * (at your option) any later version.
  11174. + *
  11175. + * L2J Server is distributed in the hope that it will be useful,
  11176. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11177. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11178. + * General Public License for more details.
  11179. + *
  11180. + * You should have received a copy of the GNU General Public License
  11181. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11182. + */
  11183. +package com.l2jserver.tools.configurator.frontend.jfx;
  11184. +
  11185. +import com.l2jserver.tools.configurator.frontend.jfx.stage.mainstage.MainStage;
  11186. +
  11187. +import javafx.application.Application;
  11188. +import javafx.stage.Stage;
  11189. +import javafx.stage.WindowEvent;
  11190. +
  11191. +/**
  11192. + * @author HorridoJoho
  11193. + */
  11194. +public class JfxApplication extends Application
  11195. +{
  11196. +   private static MainStage _mainStage = null;
  11197. +  
  11198. +   @Override
  11199. +   public void start(Stage primaryStage)
  11200. +   {
  11201. +       primaryStage.close();
  11202. +      
  11203. +       _mainStage = new MainStage();
  11204. +       _mainStage.addEventHandler(WindowEvent.WINDOW_SHOWN, this::mainStageShown);
  11205. +       _mainStage.show();
  11206. +   }
  11207. +  
  11208. +   private void mainStageShown(WindowEvent e)
  11209. +   {
  11210. +       _mainStage.removeEventHandler(WindowEvent.WINDOW_SHOWN, this::mainStageShown);
  11211. +       _mainStage.layout();
  11212. +       _mainStage.loadConfigs();
  11213. +   }
  11214. +  
  11215. +   public static void loadConfigs()
  11216. +   {
  11217. +       _mainStage.loadConfigs();
  11218. +   }
  11219. +  
  11220. +   public static void saveConfigs()
  11221. +   {
  11222. +       _mainStage.saveConfigs();
  11223. +   }
  11224. +  
  11225. +   public static void quit()
  11226. +   {
  11227. +       _mainStage.close();
  11228. +   }
  11229. +  
  11230. +   public static void about()
  11231. +   {
  11232. +       _mainStage.about();
  11233. +   }
  11234. +}
  11235. 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
  11236. new file mode 100644
  11237. index 0000000..220ff70
  11238. --- /dev/null
  11239. +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/ConfigDirectiveTable.java
  11240. @@ -0,0 +1,89 @@
  11241. +/*
  11242. + * Copyright (C) 2004-2017 L2J Server
  11243. + *
  11244. + * This file is part of L2J Server.
  11245. + *
  11246. + * L2J Server is free software: you can redistribute it and/or modify
  11247. + * it under the terms of the GNU General Public License as published by
  11248. + * the Free Software Foundation, either version 3 of the License, or
  11249. + * (at your option) any later version.
  11250. + *
  11251. + * L2J Server is distributed in the hope that it will be useful,
  11252. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11253. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11254. + * General Public License for more details.
  11255. + *
  11256. + * You should have received a copy of the GNU General Public License
  11257. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11258. + */
  11259. +package com.l2jserver.tools.configurator.frontend.jfx.control.configdirectivetable;
  11260. +
  11261. +import java.io.IOException;
  11262. +import java.util.Collection;
  11263. +import java.util.ResourceBundle;
  11264. +
  11265. +import com.l2jserver.tools.configurator.model.ConfigDirective;
  11266. +import com.l2jserver.tools.util.JfxUtil;
  11267. +
  11268. +import javafx.beans.property.ReadOnlyObjectWrapper;
  11269. +import javafx.fxml.FXML;
  11270. +import javafx.fxml.FXMLLoader;
  11271. +import javafx.scene.control.TableColumn;
  11272. +import javafx.scene.control.TableView;
  11273. +import javafx.scene.control.cell.PropertyValueFactory;
  11274. +import javafx.scene.control.cell.TextFieldTableCell;
  11275. +
  11276. +/**
  11277. + * @author HorridoJoho
  11278. + */
  11279. +public class ConfigDirectiveTable extends TableView<ConfigDirective>
  11280. +{
  11281. +   private static final String FXML_RESOURCE_PATH = "/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.fxml";
  11282. +   private static final String RESOURCE_BUNDLE_NAME = "com.l2jserver.tools.configurator.res.jfx.control.configdirectivetable.ConfigDirectiveTable";
  11283. +   private static final FXMLLoader LOADER = JfxUtil.createFxmlLoader(FXML_RESOURCE_PATH, RESOURCE_BUNDLE_NAME);
  11284. +  
  11285. +   @FXML
  11286. +   private ResourceBundle resources;
  11287. +  
  11288. +   @FXML
  11289. +   private TableColumn<ConfigDirective, String> _nameColumn;
  11290. +   @FXML
  11291. +   private TableColumn<ConfigDirective, String> _valueColumn;
  11292. +   @FXML
  11293. +   private TableColumn<ConfigDirective, String> _valueCurrentColumn;
  11294. +   @FXML
  11295. +   private TableColumn<ConfigDirective, String> _valueDefaultColumn;
  11296. +   @FXML
  11297. +   private TableColumn<ConfigDirective, ConfigDirective> _preserveColumn;
  11298. +   @FXML
  11299. +   private TableColumn<ConfigDirective, ConfigDirective> _resetColumn;
  11300. +  
  11301. +   @FXML
  11302. +   void initialize()
  11303. +   {
  11304. +       _nameColumn.setCellValueFactory(new PropertyValueFactory<ConfigDirective, String>("name"));
  11305. +       _valueCurrentColumn.setCellValueFactory(new PropertyValueFactory<>("value"));
  11306. +       _valueCurrentColumn.setCellFactory(TextFieldTableCell.forTableColumn());
  11307. +       _valueDefaultColumn.setCellValueFactory(new PropertyValueFactory<>("defaultValue"));
  11308. +       _preserveColumn.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper<>(cellData.getValue()));
  11309. +       _preserveColumn.setCellFactory(col -> new OverwriteCell());
  11310. +       _resetColumn.setCellValueFactory(cellData -> new ReadOnlyObjectWrapper<>(cellData.getValue()));
  11311. +       _resetColumn.setCellFactory(col -> new ResetCell(resources));
  11312. +   }
  11313. +  
  11314. +   public static ConfigDirectiveTable create() throws IOException
  11315. +   {
  11316. +       ConfigDirectiveTable ctrl = new ConfigDirectiveTable();
  11317. +       JfxUtil.loadFxml(LOADER, ctrl, ctrl);
  11318. +       return ctrl;
  11319. +   }
  11320. +  
  11321. +   private ConfigDirectiveTable()
  11322. +   {
  11323. +   }
  11324. +  
  11325. +   public void addConfigDirectives(Collection<ConfigDirective> directives)
  11326. +   {
  11327. +       getItems().addAll(directives);
  11328. +   }
  11329. +}
  11330. 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
  11331. new file mode 100644
  11332. index 0000000..248242d
  11333. --- /dev/null
  11334. +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/OverwriteCell.java
  11335. @@ -0,0 +1,78 @@
  11336. +/*
  11337. + * Copyright (C) 2004-2017 L2J Server
  11338. + *
  11339. + * This file is part of L2J Server.
  11340. + *
  11341. + * L2J Server is free software: you can redistribute it and/or modify
  11342. + * it under the terms of the GNU General Public License as published by
  11343. + * the Free Software Foundation, either version 3 of the License, or
  11344. + * (at your option) any later version.
  11345. + *
  11346. + * L2J Server is distributed in the hope that it will be useful,
  11347. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11348. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11349. + * General Public License for more details.
  11350. + *
  11351. + * You should have received a copy of the GNU General Public License
  11352. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11353. + */
  11354. +package com.l2jserver.tools.configurator.frontend.jfx.control.configdirectivetable;
  11355. +
  11356. +import com.l2jserver.tools.configurator.model.ConfigDirective;
  11357. +
  11358. +import javafx.beans.value.ChangeListener;
  11359. +import javafx.geometry.Pos;
  11360. +import javafx.scene.control.CheckBox;
  11361. +import javafx.scene.control.TableCell;
  11362. +
  11363. +/**
  11364. + * @author HorridoJoho
  11365. + */
  11366. +final class OverwriteCell extends TableCell<ConfigDirective, ConfigDirective>
  11367. +{
  11368. +   private final CheckBox _preserveBox = new CheckBox();
  11369. +   private final ChangeListener<String> _valueChangeListener = (observable, oldValue, newValue) ->
  11370. +   {
  11371. +       if (!getItem().isDefault())
  11372. +       {
  11373. +           _preserveBox.selectedProperty().set(true);
  11374. +       }
  11375. +   };
  11376. +  
  11377. +   OverwriteCell()
  11378. +   {
  11379. +       setAlignment(Pos.CENTER);
  11380. +   }
  11381. +  
  11382. +   @Override
  11383. +   public void updateItem(ConfigDirective item, boolean empty)
  11384. +   {
  11385. +       _preserveBox.disableProperty().unbind();
  11386. +       _preserveBox.selectedProperty().unbind();
  11387. +      
  11388. +       ConfigDirective oldItem = getItem();
  11389. +       if (oldItem != null)
  11390. +       {
  11391. +           oldItem.preserveProperty().unbind();
  11392. +           oldItem.valueProperty().removeListener(_valueChangeListener);
  11393. +       }
  11394. +      
  11395. +       super.updateItem(item, empty);
  11396. +      
  11397. +       if (empty || (item == null))
  11398. +       {
  11399. +           setText(null);
  11400. +           setGraphic(null);
  11401. +       }
  11402. +       else
  11403. +       {
  11404. +           _preserveBox.disableProperty().bind(item.valueProperty().isNotEqualTo(item.getDefaultValue()));
  11405. +           _preserveBox.selectedProperty().set(item.preserveProperty().get());
  11406. +          
  11407. +           item.preserveProperty().bind(_preserveBox.selectedProperty());
  11408. +           item.valueProperty().addListener(_valueChangeListener);
  11409. +          
  11410. +           setGraphic(_preserveBox);
  11411. +       }
  11412. +   }
  11413. +}
  11414. 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
  11415. new file mode 100644
  11416. index 0000000..d607c52
  11417. --- /dev/null
  11418. +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/control/configdirectivetable/ResetCell.java
  11419. @@ -0,0 +1,65 @@
  11420. +/*
  11421. + * Copyright (C) 2004-2017 L2J Server
  11422. + *
  11423. + * This file is part of L2J Server.
  11424. + *
  11425. + * L2J Server is free software: you can redistribute it and/or modify
  11426. + * it under the terms of the GNU General Public License as published by
  11427. + * the Free Software Foundation, either version 3 of the License, or
  11428. + * (at your option) any later version.
  11429. + *
  11430. + * L2J Server is distributed in the hope that it will be useful,
  11431. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11432. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11433. + * General Public License for more details.
  11434. + *
  11435. + * You should have received a copy of the GNU General Public License
  11436. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11437. + */
  11438. +package com.l2jserver.tools.configurator.frontend.jfx.control.configdirectivetable;
  11439. +
  11440. +import java.util.ResourceBundle;
  11441. +
  11442. +import com.l2jserver.tools.configurator.model.ConfigDirective;
  11443. +
  11444. +import javafx.geometry.Pos;
  11445. +import javafx.scene.control.Button;
  11446. +import javafx.scene.control.TableCell;
  11447. +
  11448. +/**
  11449. + * @author HorridoJoho
  11450. + */
  11451. +final class ResetCell extends TableCell<ConfigDirective, ConfigDirective>
  11452. +{
  11453. +   private final ResourceBundle _resources;
  11454. +   Button _resetButton = new Button();
  11455. +  
  11456. +   ResetCell(ResourceBundle resources)
  11457. +   {
  11458. +       _resources = resources;
  11459. +       setAlignment(Pos.CENTER);
  11460. +   }
  11461. +  
  11462. +   @Override
  11463. +   public void updateItem(ConfigDirective item, boolean empty)
  11464. +   {
  11465. +       _resetButton.disableProperty().unbind();
  11466. +       _resetButton.setOnAction(null);
  11467. +      
  11468. +       super.updateItem(item, empty);
  11469. +      
  11470. +       if (empty || (item == null))
  11471. +       {
  11472. +           setText(null);
  11473. +           setGraphic(null);
  11474. +       }
  11475. +       else
  11476. +       {
  11477. +           _resetButton.setText(_resources.getString("Reset"));
  11478. +           _resetButton.disableProperty().bind(item.valueProperty().isEqualTo(item.getDefaultValue()));
  11479. +           _resetButton.setOnAction(e -> item.reset());
  11480. +          
  11481. +           setGraphic(_resetButton);
  11482. +       }
  11483. +   }
  11484. +}
  11485. 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
  11486. new file mode 100644
  11487. index 0000000..f121453
  11488. --- /dev/null
  11489. +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/stage/mainstage/MainStage.java
  11490. @@ -0,0 +1,236 @@
  11491. +/*
  11492. + * Copyright (C) 2004-2017 L2J Server
  11493. + *
  11494. + * This file is part of L2J Server.
  11495. + *
  11496. + * L2J Server is free software: you can redistribute it and/or modify
  11497. + * it under the terms of the GNU General Public License as published by
  11498. + * the Free Software Foundation, either version 3 of the License, or
  11499. + * (at your option) any later version.
  11500. + *
  11501. + * L2J Server is distributed in the hope that it will be useful,
  11502. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11503. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11504. + * General Public License for more details.
  11505. + *
  11506. + * You should have received a copy of the GNU General Public License
  11507. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11508. + */
  11509. +package com.l2jserver.tools.configurator.frontend.jfx.stage.mainstage;
  11510. +
  11511. +import java.io.IOException;
  11512. +import java.io.InputStream;
  11513. +import java.io.OutputStream;
  11514. +import java.nio.file.DirectoryStream;
  11515. +import java.nio.file.Files;
  11516. +import java.nio.file.Path;
  11517. +import java.nio.file.Paths;
  11518. +import java.util.ArrayList;
  11519. +import java.util.Collection;
  11520. +import java.util.List;
  11521. +import java.util.Map;
  11522. +import java.util.Properties;
  11523. +
  11524. +import com.l2jserver.tools.configurator.Configurator;
  11525. +import com.l2jserver.tools.configurator.frontend.jfx.control.configdirectivetable.ConfigDirectiveTable;
  11526. +import com.l2jserver.tools.configurator.model.Config;
  11527. +import com.l2jserver.tools.configurator.model.ConfigDirective;
  11528. +import com.l2jserver.tools.util.JfxUtil;
  11529. +import com.l2jserver.tools.util.jfx.BackgroundTask;
  11530. +import com.l2jserver.tools.util.jfx.stage.ApplicationStage;
  11531. +import com.l2jserver.tools.util.jfx.stage.msgbox.MsgBox;
  11532. +import com.l2jserver.tools.util.jfx.stage.msgbox.MsgBoxButton;
  11533. +import com.l2jserver.tools.util.jfx.stage.msgbox.MsgBoxResult;
  11534. +
  11535. +import javafx.scene.control.Tab;
  11536. +import javafx.scene.layout.BorderPane;
  11537. +import javafx.stage.Modality;
  11538. +import javafx.stage.StageStyle;
  11539. +
  11540. +/**
  11541. + * @author HorridoJoho
  11542. + */
  11543. +public final class MainStage extends ApplicationStage<BorderPane, MainStageController>
  11544. +{
  11545. +   private static final String FXML_RESOURCE_PATH = "/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.fxml";
  11546. +   private static final String RESOURCE_BUNDLE_NAME = "com.l2jserver.tools.configurator.res.jfx.stage.mainstage.MainStage";
  11547. +   private final List<Config> _configs = new ArrayList<>();
  11548. +  
  11549. +   public MainStage()
  11550. +   {
  11551. +       super(null, Modality.NONE, StageStyle.DECORATED, Configurator.getAppName(), FXML_RESOURCE_PATH, RESOURCE_BUNDLE_NAME, null);
  11552. +   }
  11553. +  
  11554. +   private MsgBoxResult showMessageBox(String message, MsgBoxButton... buttons)
  11555. +   {
  11556. +       MsgBox mb = new MsgBox(this, Modality.WINDOW_MODAL, null, Configurator.getAppName(), message, buttons);
  11557. +       mb.initStyle(StageStyle.UTILITY);
  11558. +       mb.setResizable(false);
  11559. +       mb.showAndWait();
  11560. +       mb.close();
  11561. +       return mb.getResult();
  11562. +   }
  11563. +  
  11564. +   private <T> T runTask(String message, String successMessage, String errorMessage, BackgroundTask<T> task)
  11565. +   {
  11566. +       MsgBox mb = new MsgBox(this, Modality.WINDOW_MODAL, null, Configurator.getAppName(), message, MsgBoxButton.ABORT);
  11567. +       mb.initStyle(StageStyle.UTILITY);
  11568. +       mb.setResizable(false);
  11569. +       try
  11570. +       {
  11571. +           T result = JfxUtil.runBackgroundTaskWithDialog(mb, task);
  11572. +           showMessageBox(successMessage, MsgBoxButton.OK);
  11573. +           return result;
  11574. +       }
  11575. +       catch (Throwable e)
  11576. +       {
  11577. +           showMessageBox(errorMessage + "\n\n" + e.toString(), MsgBoxButton.OK);
  11578. +       }
  11579. +       finally
  11580. +       {
  11581. +           mb.close();
  11582. +       }
  11583. +      
  11584. +       return null;
  11585. +   }
  11586. +  
  11587. +   private Collection<Tab> loadConfigsTask() throws IOException
  11588. +   {
  11589. +       Path configPath = Paths.get("dist", "game", "config");
  11590. +       Path defaultPath = configPath.resolve("default");
  11591. +       try (DirectoryStream<Path> ds = Files.newDirectoryStream(defaultPath, "*.properties"))
  11592. +       {
  11593. +           List<Config> configs = new ArrayList<>();
  11594. +          
  11595. +           for (Path entry : ds)
  11596. +           {
  11597. +               if (Files.isDirectory(entry))
  11598. +               {
  11599. +                   continue;
  11600. +               }
  11601. +              
  11602. +               Path fileName = entry.getFileName();
  11603. +               Config config = new Config(fileName.toString());
  11604. +               configs.add(config);
  11605. +              
  11606. +               Properties defaultProps = new Properties();
  11607. +               try (InputStream is = Files.newInputStream(entry))
  11608. +               {
  11609. +                   defaultProps.load(is);
  11610. +               }
  11611. +              
  11612. +               for (Map.Entry<Object, Object> directiveEntry : defaultProps.entrySet())
  11613. +               {
  11614. +                   config.addDirective((String) directiveEntry.getKey(), String.class, (String) directiveEntry.getValue());
  11615. +               }
  11616. +              
  11617. +               Path overwritePath = configPath.resolve(fileName);
  11618. +               if (Files.exists(overwritePath) && !Files.isDirectory(overwritePath))
  11619. +               {
  11620. +                   Properties overwriteProps = new Properties();
  11621. +                   try (InputStream is = Files.newInputStream(overwritePath))
  11622. +                   {
  11623. +                       overwriteProps.load(is);
  11624. +                   }
  11625. +                  
  11626. +                   for (Map.Entry<Object, Object> directiveEntry : overwriteProps.entrySet())
  11627. +                   {
  11628. +                       ConfigDirective cd = config.getDirective((String) directiveEntry.getKey());
  11629. +                       if (cd == null)
  11630. +                       {
  11631. +                           continue;
  11632. +                       }
  11633. +                       cd.valueProperty().set((String) directiveEntry.getValue());
  11634. +                       cd.preserveProperty().set(true);
  11635. +                   }
  11636. +               }
  11637. +           }
  11638. +          
  11639. +           _configs.clear();
  11640. +           _configs.addAll(configs);
  11641. +       }
  11642. +      
  11643. +       List<Tab> configTabs = new ArrayList<>(_configs.size());
  11644. +       for (Config config : _configs)
  11645. +       {
  11646. +           Tab configTab = new Tab(config.getName());
  11647. +           configTab.setUserData(config);
  11648. +           ConfigDirectiveTable directiveList = ConfigDirectiveTable.create();
  11649. +          
  11650. +           for (Map.Entry<String, ConfigDirective> directiveEntry : config.getDirectives().entrySet())
  11651. +           {
  11652. +               directiveList.getItems().add(directiveEntry.getValue());
  11653. +           }
  11654. +          
  11655. +           configTab.setContent(directiveList);
  11656. +           configTabs.add(configTab);
  11657. +       }
  11658. +      
  11659. +       return configTabs;
  11660. +   }
  11661. +  
  11662. +   private Void saveConfigsTask() throws IOException
  11663. +   {
  11664. +       Path configPath = Paths.get("dist", "game", "config");
  11665. +      
  11666. +       for (Config config : _configs)
  11667. +       {
  11668. +           Properties props = null;
  11669. +           for (Map.Entry<String, ConfigDirective> directiveEntry : config.getDirectives().entrySet())
  11670. +           {
  11671. +               ConfigDirective directive = directiveEntry.getValue();
  11672. +               if (!directive.preserveProperty().get() && directive.valueProperty().get().equals(directive.getDefaultValue()))
  11673. +               {
  11674. +                   continue;
  11675. +               }
  11676. +              
  11677. +               if (props == null)
  11678. +               {
  11679. +                   props = new Properties();
  11680. +               }
  11681. +              
  11682. +               props.setProperty(directive.getName(), directive.valueProperty().get());
  11683. +           }
  11684. +          
  11685. +           Path overwritePath = configPath.resolve(config.getName());
  11686. +           if (props != null)
  11687. +           {
  11688. +               try (OutputStream os = Files.newOutputStream(overwritePath))
  11689. +               {
  11690. +                   props.store(os, null);
  11691. +               }
  11692. +           }
  11693. +           else
  11694. +           {
  11695. +               Files.deleteIfExists(overwritePath);
  11696. +           }
  11697. +       }
  11698. +      
  11699. +       return null;
  11700. +   }
  11701. +  
  11702. +   public void loadConfigs()
  11703. +   {
  11704. +       Collection<Tab> configTabs = runTask(Configurator.getString(Configurator.LOADING_CONFIGS), Configurator.getString(Configurator.LOADING_CONFIGS_SUCCESSFUL), Configurator.getString(Configurator.LOADING_CONFIGS_ERROR), this::loadConfigsTask);
  11705. +       if (configTabs != null)
  11706. +       {
  11707. +           getController().clearConfigTabs();
  11708. +           getController().addConfigTabs(configTabs);
  11709. +       }
  11710. +   }
  11711. +  
  11712. +   public void saveConfigs()
  11713. +   {
  11714. +       runTask(Configurator.getString(Configurator.SAVING_CONFIGS), Configurator.getString(Configurator.SAVING_CONFIGS_SUCCESSFUL), Configurator.getString(Configurator.SAVING_CONFIGS_ERROR), this::saveConfigsTask);
  11715. +   }
  11716. +  
  11717. +   public void quit()
  11718. +   {
  11719. +       close();
  11720. +   }
  11721. +  
  11722. +   public void about()
  11723. +   {
  11724. +       showMessageBox("Server Configurator\nJavaFX Version 1.0\nby HorridoJoho", MsgBoxButton.OK);
  11725. +   }
  11726. +}
  11727. 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
  11728. new file mode 100644
  11729. index 0000000..5d3b154
  11730. --- /dev/null
  11731. +++ b/src/main/java/com/l2jserver/tools/configurator/frontend/jfx/stage/mainstage/MainStageController.java
  11732. @@ -0,0 +1,92 @@
  11733. +/*
  11734. + * Copyright (C) 2004-2017 L2J Server
  11735. + *
  11736. + * This file is part of L2J Server.
  11737. + *
  11738. + * L2J Server is free software: you can redistribute it and/or modify
  11739. + * it under the terms of the GNU General Public License as published by
  11740. + * the Free Software Foundation, either version 3 of the License, or
  11741. + * (at your option) any later version.
  11742. + *
  11743. + * L2J Server is distributed in the hope that it will be useful,
  11744. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11745. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11746. + * General Public License for more details.
  11747. + *
  11748. + * You should have received a copy of the GNU General Public License
  11749. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11750. + */
  11751. +package com.l2jserver.tools.configurator.frontend.jfx.stage.mainstage;
  11752. +
  11753. +import java.util.Collection;
  11754. +
  11755. +import com.l2jserver.tools.configurator.frontend.jfx.JfxApplication;
  11756. +import com.l2jserver.tools.util.jfx.StageController;
  11757. +
  11758. +import javafx.event.ActionEvent;
  11759. +import javafx.fxml.FXML;
  11760. +import javafx.scene.control.MenuItem;
  11761. +import javafx.scene.control.Tab;
  11762. +import javafx.scene.control.TabPane;
  11763. +
  11764. +/**
  11765. + * @author HorridoJoho
  11766. + */
  11767. +public class MainStageController implements StageController
  11768. +{
  11769. +   @FXML
  11770. +   private MenuItem _menuFileLoad;
  11771. +   @FXML
  11772. +   private MenuItem _menuFileSave;
  11773. +   @FXML
  11774. +   private MenuItem _menuFileQuit;
  11775. +   @FXML
  11776. +   private MenuItem _menuHelpAbout;
  11777. +   @FXML
  11778. +   private TabPane _tabsConfigurations;
  11779. +  
  11780. +   @FXML
  11781. +   private void onMenuFileLoad(ActionEvent event)
  11782. +   {
  11783. +       JfxApplication.loadConfigs();
  11784. +   }
  11785. +  
  11786. +   @FXML
  11787. +   private void onMenuFileSave(ActionEvent event)
  11788. +   {
  11789. +       JfxApplication.saveConfigs();
  11790. +   }
  11791. +  
  11792. +   @FXML
  11793. +   private void onMenuFileQuit(ActionEvent event)
  11794. +   {
  11795. +       JfxApplication.quit();
  11796. +   }
  11797. +  
  11798. +   @FXML
  11799. +   private void onMenuHelpAbout(ActionEvent event)
  11800. +   {
  11801. +       JfxApplication.about();
  11802. +   }
  11803. +  
  11804. +   void clearConfigTabs()
  11805. +   {
  11806. +       _tabsConfigurations.getTabs().clear();
  11807. +   }
  11808. +  
  11809. +   void addConfigTab(Tab configTab)
  11810. +   {
  11811. +       _tabsConfigurations.getTabs().add(configTab);
  11812. +   }
  11813. +  
  11814. +   void addConfigTabs(Collection<Tab> configTabs)
  11815. +   {
  11816. +       _tabsConfigurations.getTabs().addAll(configTabs);
  11817. +   }
  11818. +  
  11819. +   @Override
  11820. +   public boolean onRequestClose()
  11821. +   {
  11822. +       return true;
  11823. +   }
  11824. +}
  11825. diff --git a/src/main/java/com/l2jserver/tools/configurator/model/Config.java b/src/main/java/com/l2jserver/tools/configurator/model/Config.java
  11826. new file mode 100644
  11827. index 0000000..611562a
  11828. --- /dev/null
  11829. +++ b/src/main/java/com/l2jserver/tools/configurator/model/Config.java
  11830. @@ -0,0 +1,69 @@
  11831. +/*
  11832. + * Copyright (C) 2004-2017 L2J Server
  11833. + *
  11834. + * This file is part of L2J Server.
  11835. + *
  11836. + * L2J Server is free software: you can redistribute it and/or modify
  11837. + * it under the terms of the GNU General Public License as published by
  11838. + * the Free Software Foundation, either version 3 of the License, or
  11839. + * (at your option) any later version.
  11840. + *
  11841. + * L2J Server is distributed in the hope that it will be useful,
  11842. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11843. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11844. + * General Public License for more details.
  11845. + *
  11846. + * You should have received a copy of the GNU General Public License
  11847. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11848. + */
  11849. +package com.l2jserver.tools.configurator.model;
  11850. +
  11851. +import java.util.Collections;
  11852. +import java.util.LinkedHashMap;
  11853. +import java.util.Map;
  11854. +import java.util.Objects;
  11855. +
  11856. +/**
  11857. + * @author HorridoJoho
  11858. + */
  11859. +public final class Config
  11860. +{
  11861. +   private final String _name;
  11862. +   private final Map<String, ConfigDirective> _directives;
  11863. +  
  11864. +   public Config(String name)
  11865. +   {
  11866. +       Objects.requireNonNull(name);
  11867. +       _name = name;
  11868. +       _directives = new LinkedHashMap<>();
  11869. +   }
  11870. +  
  11871. +   public ConfigDirective addDirective(String name, Class<?> type, String defaultValue, String value)
  11872. +   {
  11873. +       ConfigDirective cd = new ConfigDirective(name, type, defaultValue, value, false);
  11874. +       _directives.put(name, cd);
  11875. +       return cd;
  11876. +   }
  11877. +  
  11878. +   public ConfigDirective addDirective(String name, Class<?> type, String defaultValue)
  11879. +   {
  11880. +       ConfigDirective cd = new ConfigDirective(name, type, defaultValue, false);
  11881. +       _directives.put(name, cd);
  11882. +       return cd;
  11883. +   }
  11884. +  
  11885. +   public String getName()
  11886. +   {
  11887. +       return _name;
  11888. +   }
  11889. +  
  11890. +   public Map<String, ConfigDirective> getDirectives()
  11891. +   {
  11892. +       return Collections.unmodifiableMap(_directives);
  11893. +   }
  11894. +  
  11895. +   public ConfigDirective getDirective(String name)
  11896. +   {
  11897. +       return _directives.get(name);
  11898. +   }
  11899. +}
  11900. diff --git a/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirective.java b/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirective.java
  11901. new file mode 100644
  11902. index 0000000..9c52a59
  11903. --- /dev/null
  11904. +++ b/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirective.java
  11905. @@ -0,0 +1,73 @@
  11906. +/*
  11907. + * Copyright (C) 2004-2017 L2J Server
  11908. + *
  11909. + * This file is part of L2J Server.
  11910. + *
  11911. + * L2J Server is free software: you can redistribute it and/or modify
  11912. + * it under the terms of the GNU General Public License as published by
  11913. + * the Free Software Foundation, either version 3 of the License, or
  11914. + * (at your option) any later version.
  11915. + *
  11916. + * L2J Server is distributed in the hope that it will be useful,
  11917. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11918. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11919. + * General Public License for more details.
  11920. + *
  11921. + * You should have received a copy of the GNU General Public License
  11922. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  11923. + */
  11924. +package com.l2jserver.tools.configurator.model;
  11925. +
  11926. +import java.util.Objects;
  11927. +
  11928. +import javafx.beans.property.SimpleBooleanProperty;
  11929. +import javafx.beans.property.SimpleStringProperty;
  11930. +
  11931. +/**
  11932. + * @author HorridoJoho
  11933. + */
  11934. +public final class ConfigDirective extends ConfigDirectiveDefinition implements Cloneable
  11935. +{
  11936. +   private final SimpleStringProperty _value;
  11937. +   private final SimpleBooleanProperty _preserve;
  11938. +  
  11939. +   public ConfigDirective(String name, Class<?> type, String defaultValue, String value, boolean preserve)
  11940. +   {
  11941. +       super(name, type, defaultValue);
  11942. +       Objects.requireNonNull(value);
  11943. +      
  11944. +       _value = new SimpleStringProperty(value);
  11945. +       _preserve = new SimpleBooleanProperty(preserve);
  11946. +   }
  11947. +  
  11948. +   public ConfigDirective(String name, Class<?> type, String defaultValue, boolean preserve)
  11949. +   {
  11950. +       this(name, type, defaultValue, defaultValue, preserve);
  11951. +   }
  11952. +  
  11953. +   public void reset()
  11954. +   {
  11955. +       valueProperty().set(getDefaultValue());
  11956. +   }
  11957. +  
  11958. +   public SimpleStringProperty valueProperty()
  11959. +   {
  11960. +       return _value;
  11961. +   }
  11962. +  
  11963. +   public SimpleBooleanProperty preserveProperty()
  11964. +   {
  11965. +       return _preserve;
  11966. +   }
  11967. +  
  11968. +   public boolean isDefault()
  11969. +   {
  11970. +       return valueProperty().get().equals(getDefaultValue());
  11971. +   }
  11972. +  
  11973. +   @Override
  11974. +   public ConfigDirective clone()
  11975. +   {
  11976. +       return new ConfigDirective(getName(), getType(), getDefaultValue(), valueProperty().get(), preserveProperty().get());
  11977. +   }
  11978. +}
  11979. diff --git a/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirectiveDefinition.java b/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirectiveDefinition.java
  11980. new file mode 100644
  11981. index 0000000..cfb3d5c
  11982. --- /dev/null
  11983. +++ b/src/main/java/com/l2jserver/tools/configurator/model/ConfigDirectiveDefinition.java
  11984. @@ -0,0 +1,63 @@
  11985. +/*
  11986. + * Copyright (C) 2004-2017 L2J Server
  11987. + *
  11988. + * This file is part of L2J Server.
  11989. + *
  11990. + * L2J Server is free software: you can redistribute it and/or modify
  11991. + * it under the terms of the GNU General Public License as published by
  11992. + * the Free Software Foundation, either version 3 of the License, or
  11993. + * (at your option) any later version.
  11994. + *
  11995. + * L2J Server is distributed in the hope that it will be useful,
  11996. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11997. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11998. + * General Public License for more details.
  11999. + *
  12000. + * You should have received a copy of the GNU General Public License
  12001. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  12002. + */
  12003. +package com.l2jserver.tools.configurator.model;
  12004. +
  12005. +import java.util.Objects;
  12006. +
  12007. +/**
  12008. + * @author HorridoJoho
  12009. + */
  12010. +public class ConfigDirectiveDefinition
  12011. +{
  12012. +   private final String _name;
  12013. +   private final Class<?> _type;
  12014. +   private final String _defaultValue;
  12015. +  
  12016. +   public ConfigDirectiveDefinition(String name, Class<?> type, String defaultValue)
  12017. +   {
  12018. +       Objects.requireNonNull(name);
  12019. +       Objects.requireNonNull(type);
  12020. +       Objects.requireNonNull(defaultValue);
  12021. +      
  12022. +       _name = name;
  12023. +       _type = type;
  12024. +       _defaultValue = defaultValue;
  12025. +   }
  12026. +  
  12027. +   public String getName()
  12028. +   {
  12029. +       return _name;
  12030. +   }
  12031. +  
  12032. +   public Class<?> getType()
  12033. +   {
  12034. +       return _type;
  12035. +   }
  12036. +  
  12037. +   public String getDefaultValue()
  12038. +   {
  12039. +       return _defaultValue;
  12040. +   }
  12041. +  
  12042. +   @Override
  12043. +   public ConfigDirectiveDefinition clone()
  12044. +   {
  12045. +       return this;
  12046. +   }
  12047. +}
  12048. diff --git a/src/main/java/com/l2jserver/tools/configurator/res/Configurator.properties b/src/main/java/com/l2jserver/tools/configurator/res/Configurator.properties
  12049. new file mode 100644
  12050. index 0000000..67a618c
  12051. --- /dev/null
  12052. +++ b/src/main/java/com/l2jserver/tools/configurator/res/Configurator.properties
  12053. @@ -0,0 +1,9 @@
  12054. +AppName=Server Configurator
  12055. +
  12056. +LoadingConfigs=Loading configurations...
  12057. +LoadingConfigsSuccessful=Loading configuration finishes successful.
  12058. +LoadingConfigsError=There was an error loading the configurations!
  12059. +
  12060. +SavingConfigs=Saving configurations...
  12061. +SavingConfigsSuccessful=Saving configurations finished successful.
  12062. +SavingConfigsError=There was an error saving the configurations!
  12063. 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
  12064. new file mode 100644
  12065. index 0000000..1e97638
  12066. --- /dev/null
  12067. +++ b/src/main/java/com/l2jserver/tools/configurator/res/Configurator_de.properties
  12068. @@ -0,0 +1,9 @@
  12069. +AppName=Server Konfigurator
  12070. +
  12071. +LoadingConfigs=Lade Konfigurationen...
  12072. +LoadingConfigsSuccessful=Das Laden der Konfigurationen wurde erfolgreich abgeschlossen.
  12073. +LoadingConfigsError=Beim laden der Konfigurationen trat ein Fehler auf!
  12074. +
  12075. +SavingConfigs=Speichere Konfigurationen...
  12076. +SavingConfigsSuccessful=Das Speichern der Konfigurationen wurde erfolgreich abgeschlossen.
  12077. +SavingConfigsError=Beim speichern der Konfigurationen trat ein Fehler auf!
  12078. \ No newline at end of file
  12079. 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
  12080. new file mode 100644
  12081. index 0000000..dac67da
  12082. --- /dev/null
  12083. +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.fxml
  12084. @@ -0,0 +1,17 @@
  12085. +<?xml version="1.0" encoding="UTF-8"?>
  12086. +
  12087. +<?import javafx.scene.control.TableColumn?>
  12088. +<?import javafx.scene.control.TableView?>
  12089. +
  12090. +<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">
  12091. +  <columns>
  12092. +    <TableColumn fx:id="_nameColumn" editable="false" maxWidth="1.7976931348623157E308" minWidth="200.0" prefWidth="-1.0" sortable="false" text="%Name" />
  12093. +    <TableColumn fx:id="_valueColumn" maxWidth="1.7976931348623157E308" minWidth="200.0" prefWidth="-1.0" sortable="false" text="%Value">
  12094. +         <columns>
  12095. +            <TableColumn fx:id="_valueCurrentColumn" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" sortable="false" text="%CurrentValue" />
  12096. +            <TableColumn fx:id="_valueDefaultColumn" editable="false" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" sortable="false" text="%DefaultValue" />
  12097. +         </columns></TableColumn>
  12098. +      <TableColumn fx:id="_preserveColumn" editable="false" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" resizable="false" sortable="false" text="%Overwrite" />
  12099. +      <TableColumn fx:id="_resetColumn" editable="false" maxWidth="1.7976931348623157E308" minWidth="100.0" prefWidth="-1.0" resizable="false" sortable="false" text="%Reset" />
  12100. +  </columns>
  12101. +</fx:root>
  12102. 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
  12103. new file mode 100644
  12104. index 0000000..2a661f1
  12105. --- /dev/null
  12106. +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable.properties
  12107. @@ -0,0 +1,6 @@
  12108. +Name=Name
  12109. +Value=Value
  12110. +DefaultValue=Default
  12111. +CurrentValue=Current
  12112. +Overwrite=Overwrite
  12113. +Reset=Reset
  12114. \ No newline at end of file
  12115. 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
  12116. new file mode 100644
  12117. index 0000000..fb0399c
  12118. --- /dev/null
  12119. +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/control/configdirectivetable/ConfigDirectiveTable_de.properties
  12120. @@ -0,0 +1,6 @@
  12121. +Name=Name
  12122. +Value=Wert
  12123. +DefaultValue=Standard
  12124. +CurrentValue=Aktuell
  12125. +Overwrite=�berschreiben
  12126. +Reset=Zur�cksetzen
  12127. \ No newline at end of file
  12128. 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
  12129. new file mode 100644
  12130. index 0000000..8c319b8
  12131. --- /dev/null
  12132. +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.fxml
  12133. @@ -0,0 +1,31 @@
  12134. +<?xml version="1.0" encoding="UTF-8"?>
  12135. +
  12136. +<?import javafx.scene.control.Menu?>
  12137. +<?import javafx.scene.control.MenuBar?>
  12138. +<?import javafx.scene.control.MenuItem?>
  12139. +<?import javafx.scene.control.TabPane?>
  12140. +<?import javafx.scene.layout.BorderPane?>
  12141. +
  12142. +<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">
  12143. +   <top>
  12144. +      <MenuBar BorderPane.alignment="CENTER">
  12145. +         <menus>
  12146. +            <Menu mnemonicParsing="false" text="%MenuFile">
  12147. +              <items>
  12148. +                  <MenuItem fx:id="_menuFileLoad" mnemonicParsing="false" onAction="#onMenuFileLoad" text="%MenuFileLoad" />
  12149. +                <MenuItem fx:id="_menuFileSave" mnemonicParsing="false" onAction="#onMenuFileSave" text="%MenuFileSave" />
  12150. +                  <MenuItem fx:id="_menuFileQuit" mnemonicParsing="false" onAction="#onMenuFileQuit" text="%MenuFileQuit" />
  12151. +              </items>
  12152. +            </Menu>
  12153. +            <Menu mnemonicParsing="false" text="%MenuHelp">
  12154. +               <items>
  12155. +                  <MenuItem fx:id="_menuHelpAbout" mnemonicParsing="false" onAction="#onMenuHelpAbout" text="%MenuHelpAbout" />
  12156. +               </items>
  12157. +            </Menu>
  12158. +         </menus>
  12159. +      </MenuBar>
  12160. +   </top>
  12161. +   <center>
  12162. +      <TabPane fx:id="_tabsConfigurations" prefHeight="200.0" prefWidth="200.0" tabClosingPolicy="UNAVAILABLE" BorderPane.alignment="CENTER" />
  12163. +   </center>
  12164. +</BorderPane>
  12165. 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
  12166. new file mode 100644
  12167. index 0000000..d0c09a6
  12168. --- /dev/null
  12169. +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage.properties
  12170. @@ -0,0 +1,8 @@
  12171. +MenuFile=File
  12172. +MenuHelp=Help
  12173. +
  12174. +MenuFileLoad=Load Configurations
  12175. +MenuFileSave=Save
  12176. +MenuFileQuit=Quit
  12177. +
  12178. +MenuHelpAbout=About Server Configurator...
  12179. \ No newline at end of file
  12180. 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
  12181. new file mode 100644
  12182. index 0000000..4d4702f
  12183. --- /dev/null
  12184. +++ b/src/main/java/com/l2jserver/tools/configurator/res/jfx/stage/mainstage/MainStage_de.properties
  12185. @@ -0,0 +1,8 @@
  12186. +MenuFile=Datei
  12187. +MenuHelp=Hilfe
  12188. +
  12189. +MenuFileLoad=Lade Konfigurationen
  12190. +MenuFileSave=Speichern
  12191. +MenuFileQuit=Beenden
  12192. +
  12193. +MenuHelpAbout=�ber Server Konfigurator...
  12194. \ No newline at end of file
  12195. diff --git a/src/main/java/com/l2jserver/tools/util/JfxUtil.java b/src/main/java/com/l2jserver/tools/util/JfxUtil.java
  12196. new file mode 100644
  12197. index 0000000..92b4db6
  12198. --- /dev/null
  12199. +++ b/src/main/java/com/l2jserver/tools/util/JfxUtil.java
  12200. @@ -0,0 +1,84 @@
  12201. +/*
  12202. + * Copyright (C) 2004-2017 L2J Server
  12203. + *
  12204. + * This file is part of L2J Server.
  12205. + *
  12206. + * L2J Server is free software: you can redistribute it and/or modify
  12207. + * it under the terms of the GNU General Public License as published by
  12208. + * the Free Software Foundation, either version 3 of the License, or
  12209. + * (at your option) any later version.
  12210. + *
  12211. + * L2J Server is distributed in the hope that it will be useful,
  12212. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12213. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12214. + * General Public License for more details.
  12215. + *
  12216. + * You should have received a copy of the GNU General Public License
  12217. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  12218. + */
  12219. +package com.l2jserver.tools.util;
  12220. +
  12221. +import java.io.IOException;
  12222. +import java.nio.charset.StandardCharsets;
  12223. +import java.util.ResourceBundle;
  12224. +
  12225. +import com.l2jserver.tools.util.jfx.BackgroundTask;
  12226. +import com.l2jserver.tools.util.jfx.BackgroundTaskRunner;
  12227. +
  12228. +import javafx.fxml.FXMLLoader;
  12229. +import javafx.scene.Parent;
  12230. +import javafx.scene.Scene;
  12231. +import javafx.stage.Modality;
  12232. +import javafx.stage.Stage;
  12233. +import javafx.stage.StageStyle;
  12234. +import javafx.stage.Window;
  12235. +
  12236. +/**
  12237. + * @author HorridoJoho
  12238. + */
  12239. +public final class JfxUtil
  12240. +{
  12241. +   public static FXMLLoader createFxmlLoader(String fxml, String resources)
  12242. +   {
  12243. +       FXMLLoader loader = new FXMLLoader();
  12244. +       loader.setCharset(StandardCharsets.UTF_8);
  12245. +       loader.setLocation(JfxUtil.class.getResource(fxml));
  12246. +       loader.setResources(ResourceBundle.getBundle(resources));
  12247. +       return loader;
  12248. +   }
  12249. +  
  12250. +   public static void loadFxml(FXMLLoader loader, Object root, Object controller) throws IOException
  12251. +   {
  12252. +       loader.setRoot(root);
  12253. +       loader.setController(controller);
  12254. +       loader.load();
  12255. +   }
  12256. +  
  12257. +   public static <T> T runBackgroundTaskWithDialog(Window owner, String title, Parent root, BackgroundTask<T> task) throws Throwable
  12258. +   {
  12259. +       Stage s = new Stage();
  12260. +       s.initOwner(owner);
  12261. +       s.initModality(Modality.WINDOW_MODAL);
  12262. +       s.initStyle(StageStyle.DECORATED);
  12263. +      
  12264. +       s.setTitle(title);
  12265. +       s.setScene(new Scene(root));
  12266. +      
  12267. +       return runBackgroundTaskWithDialog(s, task);
  12268. +   }
  12269. +  
  12270. +   public static <T> T runBackgroundTaskWithDialog(Stage s, BackgroundTask<T> task) throws Throwable
  12271. +   {
  12272. +       s.initModality(Modality.WINDOW_MODAL);
  12273. +       s.initStyle(StageStyle.UTILITY);
  12274. +       s.setResizable(false);
  12275. +      
  12276. +       BackgroundTaskRunner<T> runner = new BackgroundTaskRunner<>(s, task);
  12277. +       s.close();
  12278. +       if (runner.getThrown() != null)
  12279. +       {
  12280. +           throw runner.getThrown();
  12281. +       }
  12282. +       return runner.getResult();
  12283. +   }
  12284. +}
  12285. diff --git a/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTask.java b/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTask.java
  12286. new file mode 100644
  12287. index 0000000..f7a1434
  12288. --- /dev/null
  12289. +++ b/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTask.java
  12290. @@ -0,0 +1,28 @@
  12291. +/*
  12292. + * Copyright (C) 2004-2017 L2J Server
  12293. + *
  12294. + * This file is part of L2J Server.
  12295. + *
  12296. + * L2J Server is free software: you can redistribute it and/or modify
  12297. + * it under the terms of the GNU General Public License as published by
  12298. + * the Free Software Foundation, either version 3 of the License, or
  12299. + * (at your option) any later version.
  12300. + *
  12301. + * L2J Server is distributed in the hope that it will be useful,
  12302. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12303. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12304. + * General Public License for more details.
  12305. + *
  12306. + * You should have received a copy of the GNU General Public License
  12307. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  12308. + */
  12309. +package com.l2jserver.tools.util.jfx;
  12310. +
  12311. +/**
  12312. + * @author HorridoJoho
  12313. + */
  12314. +@FunctionalInterface
  12315. +public interface BackgroundTask<T>
  12316. +{
  12317. +   T get() throws Throwable;
  12318. +}
  12319. diff --git a/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTaskRunner.java b/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTaskRunner.java
  12320. new file mode 100644
  12321. index 0000000..7696c91
  12322. --- /dev/null
  12323. +++ b/src/main/java/com/l2jserver/tools/util/jfx/BackgroundTaskRunner.java
  12324. @@ -0,0 +1,101 @@
  12325. +/*
  12326. + * Copyright (C) 2004-2017 L2J Server
  12327. + *
  12328. + * This file is part of L2J Server.
  12329. + *
  12330. + * L2J Server is free software: you can redistribute it and/or modify
  12331. + * it under the terms of the GNU General Public License as published by
  12332. + * the Free Software Foundation, either version 3 of the License, or
  12333. + * (at your option) any later version.
  12334. + *
  12335. + * L2J Server is distributed in the hope that it will be useful,
  12336. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12337. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12338. + * General Public License for more details.
  12339. + *
  12340. + * You should have received a copy of the GNU General Public License
  12341. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  12342. + */
  12343. +package com.l2jserver.tools.util.jfx;
  12344. +
  12345. +import java.util.Objects;
  12346. +
  12347. +import javafx.application.Platform;
  12348. +import javafx.stage.Modality;
  12349. +import javafx.stage.Stage;
  12350. +import javafx.stage.WindowEvent;
  12351. +
  12352. +/**
  12353. + * @author HorridoJoho
  12354. + */
  12355. +public class BackgroundTaskRunner<T> implements Runnable
  12356. +{
  12357. +   private final Stage _dialog;
  12358. +   private final BackgroundTask<T> _task;
  12359. +   private final Thread _thread;
  12360. +  
  12361. +   private Throwable _thrown;
  12362. +   private T _result;
  12363. +  
  12364. +   public BackgroundTaskRunner(Stage dialog, BackgroundTask<T> task)
  12365. +   {
  12366. +       Objects.requireNonNull(dialog);
  12367. +       Objects.requireNonNull(task);
  12368. +       _dialog = dialog;
  12369. +       _task = task;
  12370. +       _thread = new Thread(this, "L2J-TOOLS-JFX-BackgroundTaskRunner");
  12371. +      
  12372. +       _dialog.initModality(Modality.WINDOW_MODAL);
  12373. +       _dialog.addEventHandler(WindowEvent.WINDOW_SHOWN, this::dialogShown);
  12374. +       _dialog.showAndWait();
  12375. +   }
  12376. +  
  12377. +   @Override
  12378. +   public void run()
  12379. +   {
  12380. +       try
  12381. +       {
  12382. +           _result = _task.get();
  12383. +       }
  12384. +       catch (Throwable t)
  12385. +       {
  12386. +           _thrown = t;
  12387. +       }
  12388. +       finally
  12389. +       {
  12390. +           finishDialog();
  12391. +       }
  12392. +   }
  12393. +  
  12394. +   private void finishDialog()
  12395. +   {
  12396. +       if (_dialog != null)
  12397. +       {
  12398. +           Platform.runLater(() -> _dialog.close());
  12399. +       }
  12400. +   }
  12401. +  
  12402. +   public Throwable getThrown()
  12403. +   {
  12404. +       return _thrown;
  12405. +   }
  12406. +  
  12407. +   public T getResult()
  12408. +   {
  12409. +       return _result;
  12410. +   }
  12411. +  
  12412. +   private void dialogShown(WindowEvent e)
  12413. +   {
  12414. +       _dialog.removeEventHandler(WindowEvent.WINDOW_SHOWN, this::dialogShown);
  12415. +       try
  12416. +       {
  12417. +           _thread.start();
  12418. +       }
  12419. +       catch (Throwable t)
  12420. +       {
  12421. +           _thrown = t;
  12422. +           finishDialog();
  12423. +       }
  12424. +   }
  12425. +}
  12426. diff --git a/src/main/java/com/l2jserver/tools/util/jfx/StageController.java b/src/main/java/com/l2jserver/tools/util/jfx/StageController.java
  12427. new file mode 100644
  12428. index 0000000..61c3b91
  12429. --- /dev/null
  12430. +++ b/src/main/java/com/l2jserver/tools/util/jfx/StageController.java
  12431. @@ -0,0 +1,6 @@
  12432. +package com.l2jserver.tools.util.jfx;
  12433. +
  12434. +public interface StageController
  12435. +{
  12436. +   boolean onRequestClose();
  12437. +}
  12438. 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
  12439. new file mode 100644
  12440. index 0000000..98a3df5
  12441. --- /dev/null
  12442. +++ b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.fxml
  12443. @@ -0,0 +1,30 @@
  12444. +<?xml version="1.0" encoding="UTF-8"?>
  12445. +
  12446. +<?import java.lang.*?>
  12447. +<?import javafx.geometry.*?>
  12448. +<?import javafx.scene.control.*?>
  12449. +<?import javafx.scene.image.*?>
  12450. +<?import javafx.scene.layout.*?>
  12451. +
  12452. +<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">
  12453. +  <children>
  12454. +    <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" />
  12455. +    <Label fx:id="lblText" text="Text" GridPane.columnIndex="1" GridPane.halignment="LEFT" GridPane.hgrow="ALWAYS" GridPane.rowIndex="0" GridPane.valignment="TOP" GridPane.vgrow="ALWAYS" />
  12456. +    <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">
  12457. +      <padding>
  12458. +        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
  12459. +      </padding>
  12460. +    </HBox>
  12461. +  </children>
  12462. +  <columnConstraints>
  12463. +    <ColumnConstraints halignment="LEFT" hgrow="NEVER" maxWidth="-1.0" minWidth="-1.0" prefWidth="-1.0" />
  12464. +    <ColumnConstraints halignment="LEFT" hgrow="ALWAYS" maxWidth="-1.0" minWidth="-1.0" prefWidth="-1.0" />
  12465. +  </columnConstraints>
  12466. +  <padding>
  12467. +    <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
  12468. +  </padding>
  12469. +  <rowConstraints>
  12470. +    <RowConstraints maxHeight="-1.0" prefHeight="-1.0" valignment="TOP" vgrow="ALWAYS" />
  12471. +    <RowConstraints maxHeight="-1.0" minHeight="-1.0" prefHeight="-1.0" valignment="TOP" vgrow="ALWAYS" />
  12472. +  </rowConstraints>
  12473. +</GridPane>
  12474. 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
  12475. new file mode 100644
  12476. index 0000000..48d3a9b
  12477. --- /dev/null
  12478. +++ b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox.properties
  12479. @@ -0,0 +1,9 @@
  12480. +BUTTON_OK=OK
  12481. +BUTTON_YES=Yes
  12482. +BUTTON_RETRY=Retry
  12483. +BUTTON_TRY_AGAIN=Try Again
  12484. +BUTTON_CONTINUE=Continue
  12485. +BUTTON_IGNORE=Ignore
  12486. +BUTTON_CANCEL=Cancel
  12487. +BUTTON_NO=No
  12488. +BUTTON_ABORT=Abort
  12489. 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
  12490. new file mode 100644
  12491. index 0000000..3f9301c
  12492. --- /dev/null
  12493. +++ b/src/main/java/com/l2jserver/tools/util/jfx/res/stage/msgbox/MsgBox_de.properties
  12494. @@ -0,0 +1,9 @@
  12495. +BUTTON_OK=OK
  12496. +BUTTON_YES=Ja
  12497. +BUTTON_RETRY=Wiederholen
  12498. +BUTTON_TRY_AGAIN=Nochmal Versuchen
  12499. +BUTTON_CONTINUE=Fortsetzen
  12500. +BUTTON_IGNORE=Ignorieren
  12501. +BUTTON_CANCEL=Abbrechen
  12502. +BUTTON_NO=Nein
  12503. +BUTTON_ABORT=Abbrechen
  12504. 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
  12505. new file mode 100644
  12506. index 0000000..5f7cdc8
  12507. --- /dev/null
  12508. +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/ApplicationStage.java
  12509. @@ -0,0 +1,110 @@
  12510. +package com.l2jserver.tools.util.jfx.stage;
  12511. +
  12512. +import java.io.IOException;
  12513. +import java.io.UncheckedIOException;
  12514. +import java.nio.charset.StandardCharsets;
  12515. +import java.util.ResourceBundle;
  12516. +import java.util.function.BiConsumer;
  12517. +
  12518. +import com.l2jserver.tools.util.jfx.StageController;
  12519. +
  12520. +import javafx.fxml.FXMLLoader;
  12521. +import javafx.scene.Scene;
  12522. +import javafx.scene.layout.Region;
  12523. +import javafx.stage.Modality;
  12524. +import javafx.stage.Stage;
  12525. +import javafx.stage.StageStyle;
  12526. +import javafx.stage.Window;
  12527. +
  12528. +public abstract class ApplicationStage<T extends Region, V extends StageController> extends Stage
  12529. +{
  12530. +   private final T _root;
  12531. +   private final V _controller;
  12532. +  
  12533. +   public ApplicationStage(Window owner, Modality modality, StageStyle style, String title, String fxml, String resources, BiConsumer<ApplicationStage<T, V>, V> initializer)
  12534. +   {
  12535. +       super();
  12536. +       initOwner(owner);
  12537. +       initModality(modality);
  12538. +       initStyle(style);
  12539. +      
  12540. +       FXMLLoader loader = new FXMLLoader();
  12541. +       loader.setCharset(StandardCharsets.UTF_8);
  12542. +       loader.setLocation(getClass().getResource(fxml));
  12543. +       loader.setResources(ResourceBundle.getBundle(resources));
  12544. +       try
  12545. +       {
  12546. +           loader.load();
  12547. +       }
  12548. +       catch (IOException e)
  12549. +       {
  12550. +           throw new UncheckedIOException(e);
  12551. +       }
  12552. +      
  12553. +       _root = loader.getRoot();
  12554. +       _controller = loader.getController();
  12555. +       if (initializer != null)
  12556. +       {
  12557. +           initializer.accept(this, _controller);
  12558. +       }
  12559. +      
  12560. +       setTitle(title);
  12561. +       setScene(new Scene(_root));
  12562. +   }
  12563. +  
  12564. +   private double computeStageSizeUnit(double value, double pref, double cur)
  12565. +   {
  12566. +       if (value == Region.USE_COMPUTED_SIZE)
  12567. +       {
  12568. +           return cur;
  12569. +       }
  12570. +      
  12571. +       if (value == Region.USE_PREF_SIZE)
  12572. +       {
  12573. +           value = pref;
  12574. +       }
  12575. +      
  12576. +       if (value == Region.USE_COMPUTED_SIZE)
  12577. +       {
  12578. +           return cur;
  12579. +       }
  12580. +      
  12581. +       return value;
  12582. +   }
  12583. +  
  12584. +   private final void layoutMinMax()
  12585. +   {
  12586. +       double decoWidth = getWidth() - _root.getWidth();
  12587. +       double decoHeight = getHeight() - _root.getHeight();
  12588. +       _root.layout();
  12589. +       // TODO: account for max value overflow
  12590. +       setMinWidth(computeStageSizeUnit(_root.getMinWidth(), _root.getPrefWidth(), _root.getWidth()) + decoWidth);
  12591. +       setMinHeight(computeStageSizeUnit(_root.getMinHeight(), _root.getPrefHeight(), _root.getHeight()) + decoHeight);
  12592. +       setMaxWidth(computeStageSizeUnit(_root.getMaxWidth(), _root.getPrefWidth(), _root.getWidth()) + decoWidth);
  12593. +       setMaxHeight(computeStageSizeUnit(_root.getMaxHeight(), _root.getPrefHeight(), _root.getHeight()) + decoHeight);
  12594. +   }
  12595. +  
  12596. +   public final void layout()
  12597. +   {
  12598. +       layoutMinMax();
  12599. +       setWidth(getMinWidth());
  12600. +       setHeight(getMinHeight());
  12601. +   }
  12602. +  
  12603. +   public final void layout(double width, double height)
  12604. +   {
  12605. +       layoutMinMax();
  12606. +       setWidth(width);
  12607. +       setHeight(height);
  12608. +   }
  12609. +  
  12610. +   public final T getRoot()
  12611. +   {
  12612. +       return _root;
  12613. +   }
  12614. +  
  12615. +   public final V getController()
  12616. +   {
  12617. +       return _controller;
  12618. +   }
  12619. +}
  12620. 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
  12621. new file mode 100644
  12622. index 0000000..dd4c297
  12623. --- /dev/null
  12624. +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBox.java
  12625. @@ -0,0 +1,27 @@
  12626. +package com.l2jserver.tools.util.jfx.stage.msgbox;
  12627. +
  12628. +import com.l2jserver.tools.util.jfx.stage.ApplicationStage;
  12629. +
  12630. +import javafx.scene.image.Image;
  12631. +import javafx.scene.layout.GridPane;
  12632. +import javafx.stage.Modality;
  12633. +import javafx.stage.StageStyle;
  12634. +import javafx.stage.Window;
  12635. +
  12636. +public final class MsgBox extends ApplicationStage<GridPane, MsgBoxController>
  12637. +{
  12638. +   public MsgBox(Window owner, Modality modality, Image image, String title, String message, MsgBoxButton... buttons)
  12639. +   {
  12640. +       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) ->
  12641. +       {
  12642. +           controller.setImage(image);
  12643. +           controller.setMessage(message);
  12644. +           controller.setButtons(stage, buttons);
  12645. +       });
  12646. +   }
  12647. +  
  12648. +   public MsgBoxResult getResult()
  12649. +   {
  12650. +       return getController().getResult();
  12651. +   }
  12652. +}
  12653. 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
  12654. new file mode 100644
  12655. index 0000000..ed42778
  12656. --- /dev/null
  12657. +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxButton.java
  12658. @@ -0,0 +1,56 @@
  12659. +/*
  12660. + * Copyright (C) 2004-2017 L2J Server
  12661. + *
  12662. + * This file is part of L2J Server.
  12663. + *
  12664. + * L2J Server is free software: you can redistribute it and/or modify
  12665. + * it under the terms of the GNU General Public License as published by
  12666. + * the Free Software Foundation, either version 3 of the License, or
  12667. + * (at your option) any later version.
  12668. + *
  12669. + * L2J Server is distributed in the hope that it will be useful,
  12670. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12671. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12672. + * General Public License for more details.
  12673. + *
  12674. + * You should have received a copy of the GNU General Public License
  12675. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  12676. + */
  12677. +package com.l2jserver.tools.util.jfx.stage.msgbox;
  12678. +
  12679. +import java.util.ResourceBundle;
  12680. +
  12681. +/**
  12682. + * @author HorridoJoho
  12683. + */
  12684. +public enum MsgBoxButton
  12685. +{
  12686. +   /** Result: {@link MsgBoxResult#OK} */
  12687. +   OK,
  12688. +   /** Result: {@link MsgBoxResult#OK} */
  12689. +   YES,
  12690. +  
  12691. +   /** Result: {@link MsgBoxResult#RETRY} */
  12692. +   RETRY,
  12693. +   /** Result: {@link MsgBoxResult#RETRY} */
  12694. +   TRY_AGAIN,
  12695. +  
  12696. +   /** Result: {@link MsgBoxResult#CONTINUE} */
  12697. +   CONTINUE,
  12698. +   /** Result: {@link MsgBoxResult#CONTINUE} */
  12699. +   IGNORE,
  12700. +  
  12701. +   /** Result: {@link MsgBoxResult#CANCEL} */
  12702. +   CANCEL,
  12703. +   /** Result: {@link MsgBoxResult#CANCEL} */
  12704. +   NO,
  12705. +   /** Result: {@link MsgBoxResult#CANCEL} */
  12706. +   ABORT;
  12707. +  
  12708. +   private final String _localizationKey = "BUTTON_" + toString();
  12709. +  
  12710. +   public String getButtonText(ResourceBundle resources)
  12711. +   {
  12712. +       return resources.getString(_localizationKey);
  12713. +   }
  12714. +}
  12715. 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
  12716. new file mode 100644
  12717. index 0000000..3483005
  12718. --- /dev/null
  12719. +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxController.java
  12720. @@ -0,0 +1,109 @@
  12721. +package com.l2jserver.tools.util.jfx.stage.msgbox;
  12722. +
  12723. +import java.util.ResourceBundle;
  12724. +
  12725. +import com.l2jserver.tools.util.jfx.StageController;
  12726. +
  12727. +import javafx.event.ActionEvent;
  12728. +import javafx.fxml.FXML;
  12729. +import javafx.scene.control.Button;
  12730. +import javafx.scene.control.Label;
  12731. +import javafx.scene.image.Image;
  12732. +import javafx.scene.image.ImageView;
  12733. +import javafx.scene.layout.HBox;
  12734. +import javafx.scene.layout.Region;
  12735. +import javafx.stage.Stage;
  12736. +
  12737. +public final class MsgBoxController implements StageController
  12738. +{
  12739. +   @FXML
  12740. +   private ResourceBundle resources;
  12741. +  
  12742. +   @FXML
  12743. +   private HBox hboxButtons;
  12744. +   @FXML
  12745. +   private ImageView ivImage;
  12746. +   @FXML
  12747. +   private Label lblText;
  12748. +  
  12749. +   private MsgBoxResult _result;
  12750. +  
  12751. +   @FXML
  12752. +   void initialize()
  12753. +   {
  12754. +       _result = MsgBoxResult.CANCEL;
  12755. +       ivImage.setFitWidth(Region.USE_COMPUTED_SIZE);
  12756. +       ivImage.setFitHeight(Region.USE_COMPUTED_SIZE);
  12757. +   }
  12758. +  
  12759. +   public void setImage(Image image)
  12760. +   {
  12761. +       ivImage.setImage(image);
  12762. +   }
  12763. +  
  12764. +   public void setMessage(String message)
  12765. +   {
  12766. +       lblText.setText(message);
  12767. +   }
  12768. +  
  12769. +   public void setButtons(Stage stage, MsgBoxButton... buttons)
  12770. +   {
  12771. +       for (MsgBoxButton button : buttons)
  12772. +       {
  12773. +           Button btn = new Button(button.getButtonText(resources));
  12774. +          
  12775. +           switch (button)
  12776. +           {
  12777. +               case OK:
  12778. +               case YES:
  12779. +                   btn.addEventHandler(ActionEvent.ACTION, e ->
  12780. +                   {
  12781. +                       _result = MsgBoxResult.OK;
  12782. +                       stage.close();
  12783. +                   });
  12784. +                   break;
  12785. +               case RETRY:
  12786. +               case TRY_AGAIN:
  12787. +                   btn.addEventHandler(ActionEvent.ACTION, e ->
  12788. +                   {
  12789. +                       _result = MsgBoxResult.RETRY;
  12790. +                       stage.close();
  12791. +                   });
  12792. +                   break;
  12793. +               case CONTINUE:
  12794. +               case IGNORE:
  12795. +                   btn.addEventHandler(ActionEvent.ACTION, e ->
  12796. +                   {
  12797. +                       _result = MsgBoxResult.CONTINUE;
  12798. +                       stage.close();
  12799. +                   });
  12800. +                   break;
  12801. +               case CANCEL:
  12802. +               case NO:
  12803. +               case ABORT:
  12804. +                   btn.addEventHandler(ActionEvent.ACTION, (ActionEvent event) ->
  12805. +                   {
  12806. +                       _result = MsgBoxResult.CANCEL;
  12807. +                       stage.close();
  12808. +                   });
  12809. +                   break;
  12810. +           }
  12811. +          
  12812. +           btn.setMinSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
  12813. +           btn.setPrefSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
  12814. +           btn.setMaxSize(Region.USE_COMPUTED_SIZE, Region.USE_COMPUTED_SIZE);
  12815. +           hboxButtons.getChildren().add(btn);
  12816. +       }
  12817. +   }
  12818. +  
  12819. +   @Override
  12820. +   public boolean onRequestClose()
  12821. +   {
  12822. +       return true;
  12823. +   }
  12824. +  
  12825. +   public MsgBoxResult getResult()
  12826. +   {
  12827. +       return _result;
  12828. +   }
  12829. +}
  12830. 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
  12831. new file mode 100644
  12832. index 0000000..3311ea6
  12833. --- /dev/null
  12834. +++ b/src/main/java/com/l2jserver/tools/util/jfx/stage/msgbox/MsgBoxResult.java
  12835. @@ -0,0 +1,49 @@
  12836. +/*
  12837. + * Copyright (C) 2004-2017 L2J Server
  12838. + *
  12839. + * This file is part of L2J Server.
  12840. + *
  12841. + * L2J Server is free software: you can redistribute it and/or modify
  12842. + * it under the terms of the GNU General Public License as published by
  12843. + * the Free Software Foundation, either version 3 of the License, or
  12844. + * (at your option) any later version.
  12845. + *
  12846. + * L2J Server is distributed in the hope that it will be useful,
  12847. + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12848. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12849. + * General Public License for more details.
  12850. + *
  12851. + * You should have received a copy of the GNU General Public License
  12852. + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  12853. + */
  12854. +package com.l2jserver.tools.util.jfx.stage.msgbox;
  12855. +
  12856. +/**
  12857. + * @author HorridoJoho
  12858. + */
  12859. +public enum MsgBoxResult
  12860. +{
  12861. +   /**
  12862. +    * Action event buttons:<br>
  12863. +    * {@link MsgBoxButton#OK}, {@link MsgBoxButton#YES}
  12864. +    */
  12865. +   OK,
  12866. +   /**
  12867. +    * Action event buttons:<br>
  12868. +    * {@link MsgBoxButton#RETRY}, {@link MsgBoxButton#TRY_AGAIN}
  12869. +    */
  12870. +   RETRY,
  12871. +   /**
  12872. +    * Action event buttons:<br>
  12873. +    * {@link MsgBoxButton#CONTINUE}, {@link MsgBoxButton#IGNORE}
  12874. +    */
  12875. +   CONTINUE,
  12876. +   /**
  12877. +    * This is the default message box result. When a message box is<br>
  12878. +    * closed without one of it's buttons, this will be the result.<br>
  12879. +    * <br>
  12880. +    * Action event buttons:<br>
  12881. +    * {@link MsgBoxButton#CANCEL}, {@link MsgBoxButton#NO}, {@link MsgBoxButton#ABORT}<br>
  12882. +    */
  12883. +   CANCEL
  12884. +}
  12885. diff --git a/src/main/java/com/l2jserver/tools/util/swing/BackgroundTaskRunner.java b/src/main/java/com/l2jserver/tools/util/swing/BackgroundTaskRunner.java
  12886. index 27e63c9..3f4329d 100644
  12887. --- a/src/main/java/com/l2jserver/tools/util/swing/BackgroundTaskRunner.java
  12888. +++ b/src/main/java/com/l2jserver/tools/util/swing/BackgroundTaskRunner.java
  12889. @@ -42,7 +42,7 @@
  12890.         Objects.requireNonNull(task);
  12891.         _dialog = dialog;
  12892.         _task = task;
  12893. -       _thread = new Thread(this, "L2J-TOOLS-BackgroundTaskRunner");
  12894. +       _thread = new Thread(this, "L2J-TOOLS-SWING-BackgroundTaskRunner");
  12895.        
  12896.         _dialog.setModalityType(ModalityType.APPLICATION_MODAL);
  12897.         _dialog.addComponentListener(this);
  12898. diff --git a/src/main/java/com/l2jserver/util/PropertiesParser.java b/src/main/java/com/l2jserver/util/PropertiesParser.java
  12899. index 6f7adaa..4cd7315 100644
  12900. --- a/src/main/java/com/l2jserver/util/PropertiesParser.java
  12901. +++ b/src/main/java/com/l2jserver/util/PropertiesParser.java
  12902. @@ -18,228 +18,227 @@
  12903.   */
  12904.  package com.l2jserver.util;
  12905.  
  12906. -import java.io.File;
  12907. -import java.io.FileInputStream;
  12908. -import java.io.InputStreamReader;
  12909. -import java.nio.charset.Charset;
  12910. +import java.io.FileNotFoundException;
  12911. +import java.io.IOException;
  12912. +import java.io.InputStream;
  12913. +import java.lang.reflect.InvocationTargetException;
  12914. +import java.nio.file.Files;
  12915. +import java.nio.file.NoSuchFileException;
  12916. +import java.nio.file.Path;
  12917. +import java.nio.file.Paths;
  12918. +import java.nio.file.StandardOpenOption;
  12919. +import java.util.Map;
  12920. +import java.util.Objects;
  12921.  import java.util.Properties;
  12922. -import java.util.logging.Logger;
  12923. +
  12924. +import org.slf4j.Logger;
  12925. +import org.slf4j.LoggerFactory;
  12926. +
  12927. +import com.l2jserver.Config;
  12928.  
  12929.  /**
  12930.   * Simplifies loading of property files and adds logging if a non existing property is requested.
  12931. - * @author NosBit
  12932. + * @author NosBit, HorridoJoho
  12933.   */
  12934.  public final class PropertiesParser
  12935.  {
  12936. -   private static final Logger _log = Logger.getLogger(PropertiesParser.class.getName());
  12937. +   private static final Logger _LOG = LoggerFactory.getLogger(PropertiesParser.class.getName());
  12938. +   private static final Path[] _GENERATED_CONFIG_FILES =
  12939. +   {
  12940. +       Config.CONFIG_GENERATED_FOLDER.resolve(Config.HEXID_FILE)
  12941. +   };
  12942.    
  12943.     private final Properties _properties = new Properties();
  12944. -   private final File _file;
  12945. +   private final Path _file;
  12946.    
  12947.     public PropertiesParser(String name)
  12948.     {
  12949. -       this(new File(name));
  12950. +       this(Paths.get(name));
  12951.     }
  12952.    
  12953. -   public PropertiesParser(File file)
  12954. +   public PropertiesParser(Path file)
  12955.     {
  12956.         _file = file;
  12957. -       try (FileInputStream fileInputStream = new FileInputStream(file))
  12958. +      
  12959. +       boolean isGeneratedFile = isGeneratedProperties(Config.CONFIG_GENERATED_FOLDER.resolve(file));
  12960. +       if (!isGeneratedFile)
  12961.         {
  12962. -           try (InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, Charset.defaultCharset()))
  12963. +           try (InputStream is = Files.newInputStream(Config.CONFIG_DEFAULT_FOLDER.resolve(file), StandardOpenOption.READ))
  12964.             {
  12965. -               _properties.load(inputStreamReader);
  12966. +               _properties.load(is);
  12967. +           }
  12968. +           catch (FileNotFoundException | NoSuchFileException e)
  12969. +           {
  12970. +               _LOG.warn("Default config {} could not be found!", file, e);
  12971. +           }
  12972. +           catch (Exception e)
  12973. +           {
  12974. +               _LOG.warn("Default config {} could not be loaded!", file, e);
  12975. +           }
  12976. +       }
  12977. +      
  12978. +       Path fileFolder = isGeneratedFile ? Config.CONFIG_GENERATED_FOLDER : Config.CONFIG_OVERWRITE_FOLDER;
  12979. +       try (InputStream is = Files.newInputStream(fileFolder.resolve(file), StandardOpenOption.READ))
  12980. +       {
  12981. +           Properties overwriteProps = new Properties();
  12982. +           overwriteProps.load(is);
  12983. +          
  12984. +           for (Map.Entry<Object, Object> e : overwriteProps.entrySet())
  12985. +           {
  12986. +               if (!_properties.containsKey(e.getKey()) && !isGeneratedFile)
  12987. +               {
  12988. +                   _LOG.info("{}: Overwrite config has deprecated property {}.", file, e.getKey());
  12989. +               }
  12990. +              
  12991. +               _properties.put(e.getKey(), e.getValue());
  12992. +           }
  12993. +       }
  12994. +       catch (FileNotFoundException | NoSuchFileException e)
  12995. +       {
  12996. +           if (isGeneratedFile)
  12997. +           {
  12998. +               _LOG.warn("Generated config {} couldn't be found!", file, e);
  12999.             }
  13000.         }
  13001.         catch (Exception e)
  13002.         {
  13003. -           _log.warning("[" + _file.getName() + "] There was an error loading config reason: " + e.getMessage());
  13004. +           if (isGeneratedFile)
  13005. +           {
  13006. +               _LOG.warn("Generated config {} couldn't be loaded!", file, e);
  13007. +           }
  13008. +           else
  13009. +           {
  13010. +               _LOG.warn("Overwrite config {} couldn't be loaded!", file, e);
  13011. +           }
  13012.         }
  13013.     }
  13014.    
  13015. +   private boolean isGeneratedProperties(Path file)
  13016. +   {
  13017. +       for (Path generatedConfigFile : _GENERATED_CONFIG_FILES)
  13018. +       {
  13019. +           try
  13020. +           {
  13021. +               if (Files.isSameFile(file, generatedConfigFile))
  13022. +               {
  13023. +                   return true;
  13024. +               }
  13025. +           }
  13026. +           catch (IOException e)
  13027. +           {
  13028. +               _LOG.debug("Failed to check for same file!", e);
  13029. +           }
  13030. +       }
  13031. +      
  13032. +       return false;
  13033. +   }
  13034. +  
  13035.     public boolean containskey(String key)
  13036.     {
  13037.         return _properties.containsKey(key);
  13038.     }
  13039.    
  13040. -   private String getValue(String key)
  13041. +   public boolean containsNonEmptyKey(String key)
  13042.     {
  13043. +       return _properties.containsKey(key) && !_properties.getProperty(key).trim().isEmpty();
  13044. +   }
  13045. +  
  13046. +   /**
  13047. +    * @param <T> the defaultValue type
  13048. +    * @param key the property key
  13049. +    * @param defaultValue the default value
  13050. +    * @return the trimmed value or null if the specified property key does not exist
  13051. +    */
  13052. +   private <T> String getStringValue(String key, T defaultValue)
  13053. +   {
  13054. +       Objects.requireNonNull(key);
  13055. +       Objects.requireNonNull(defaultValue);
  13056. +      
  13057.         String value = _properties.getProperty(key);
  13058. -       return value != null ? value.trim() : null;
  13059. +       if (value == null)
  13060. +       {
  13061. +           _LOG.warn("{}: The property {} is missing! Using default value {}.", _file, key, defaultValue);
  13062. +           return null;
  13063. +       }
  13064. +       return value.trim();
  13065. +   }
  13066. +  
  13067. +   @SuppressWarnings("unchecked")
  13068. +   private <T> T getGenericValue(String key, T defaultValue)
  13069. +   {
  13070. +       Objects.requireNonNull(key);
  13071. +      
  13072. +       String value = getStringValue(key, defaultValue);
  13073. +       if (value == null)
  13074. +       {
  13075. +           return defaultValue;
  13076. +       }
  13077. +      
  13078. +       Class<?> defaultValueClass = defaultValue.getClass();
  13079. +       try
  13080. +       {
  13081. +           return (T) defaultValue.getClass().getMethod("valueOf", String.class).invoke(null, value);
  13082. +       }
  13083. +       catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e)
  13084. +       {
  13085. +           _LOG.warn("{}: The property {} could not be parsed! Failed to call {}#valueOf. Using default value {}.", _file, key, defaultValueClass.getSimpleName(), defaultValue, e);
  13086. +           return defaultValue;
  13087. +       }
  13088. +       catch (Exception e)
  13089. +       {
  13090. +           _LOG.warn("{}: The value {} for the property {} is invalid! The type is {}. Using default value {}.", _file, value, key, defaultValueClass.getSimpleName(), defaultValue, e);
  13091. +           return defaultValue;
  13092. +       }
  13093.     }
  13094.    
  13095.     public boolean getBoolean(String key, boolean defaultValue)
  13096.     {
  13097. -       String value = getValue(key);
  13098. -       if (value == null)
  13099. -       {
  13100. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13101. -           return defaultValue;
  13102. -       }
  13103. -      
  13104. -       if (value.equalsIgnoreCase("true"))
  13105. -       {
  13106. -           return true;
  13107. -       }
  13108. -       else if (value.equalsIgnoreCase("false"))
  13109. -       {
  13110. -           return false;
  13111. -       }
  13112. -       else
  13113. -       {
  13114. -           _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"boolean\" using default value: " + defaultValue);
  13115. -           return defaultValue;
  13116. -       }
  13117. +       return getGenericValue(key, defaultValue);
  13118.     }
  13119.    
  13120.     public byte getByte(String key, byte defaultValue)
  13121.     {
  13122. -       String value = getValue(key);
  13123. -       if (value == null)
  13124. -       {
  13125. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13126. -           return defaultValue;
  13127. -       }
  13128. -      
  13129. -       try
  13130. -       {
  13131. -           return Byte.parseByte(value);
  13132. -       }
  13133. -       catch (NumberFormatException e)
  13134. -       {
  13135. -           _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"byte\" using default value: " + defaultValue);
  13136. -           return defaultValue;
  13137. -       }
  13138. +       return getGenericValue(key, defaultValue);
  13139.     }
  13140.    
  13141.     public short getShort(String key, short defaultValue)
  13142.     {
  13143. -       String value = getValue(key);
  13144. -       if (value == null)
  13145. -       {
  13146. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13147. -           return defaultValue;
  13148. -       }
  13149. -      
  13150. -       try
  13151. -       {
  13152. -           return Short.parseShort(value);
  13153. -       }
  13154. -       catch (NumberFormatException e)
  13155. -       {
  13156. -           _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"short\" using default value: " + defaultValue);
  13157. -           return defaultValue;
  13158. -       }
  13159. +       return getGenericValue(key, defaultValue);
  13160.     }
  13161.    
  13162.     public int getInt(String key, int defaultValue)
  13163.     {
  13164. -       String value = getValue(key);
  13165. -       if (value == null)
  13166. -       {
  13167. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13168. -           return defaultValue;
  13169. -       }
  13170. -      
  13171. -       try
  13172. -       {
  13173. -           return Integer.parseInt(value);
  13174. -       }
  13175. -       catch (NumberFormatException e)
  13176. -       {
  13177. -           _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"int\" using default value: " + defaultValue);
  13178. -           return defaultValue;
  13179. -       }
  13180. +       return getGenericValue(key, defaultValue);
  13181.     }
  13182.    
  13183.     public long getLong(String key, long defaultValue)
  13184.     {
  13185. -       String value = getValue(key);
  13186. -       if (value == null)
  13187. -       {
  13188. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13189. -           return defaultValue;
  13190. -       }
  13191. -      
  13192. -       try
  13193. -       {
  13194. -           return Long.parseLong(value);
  13195. -       }
  13196. -       catch (NumberFormatException e)
  13197. -       {
  13198. -           _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"long\" using default value: " + defaultValue);
  13199. -           return defaultValue;
  13200. -       }
  13201. +       return getGenericValue(key, defaultValue);
  13202.     }
  13203.    
  13204.     public float getFloat(String key, float defaultValue)
  13205.     {
  13206. -       String value = getValue(key);
  13207. -       if (value == null)
  13208. -       {
  13209. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13210. -           return defaultValue;
  13211. -       }
  13212. -      
  13213. -       try
  13214. -       {
  13215. -           return Float.parseFloat(value);
  13216. -       }
  13217. -       catch (NumberFormatException e)
  13218. -       {
  13219. -           _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"float\" using default value: " + defaultValue);
  13220. -           return defaultValue;
  13221. -       }
  13222. +       return getGenericValue(key, defaultValue);
  13223.     }
  13224.    
  13225.     public double getDouble(String key, double defaultValue)
  13226.     {
  13227. -       String value = getValue(key);
  13228. -       if (value == null)
  13229. -       {
  13230. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13231. -           return defaultValue;
  13232. -       }
  13233. -      
  13234. -       try
  13235. -       {
  13236. -           return Double.parseDouble(value);
  13237. -       }
  13238. -       catch (NumberFormatException e)
  13239. -       {
  13240. -           _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be \"double\" using default value: " + defaultValue);
  13241. -           return defaultValue;
  13242. -       }
  13243. +       return getGenericValue(key, defaultValue);
  13244.     }
  13245.    
  13246.     public String getString(String key, String defaultValue)
  13247.     {
  13248. -       String value = getValue(key);
  13249. +       String value = getStringValue(key, defaultValue);
  13250.         if (value == null)
  13251.         {
  13252. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13253.             return defaultValue;
  13254.         }
  13255. +      
  13256.         return value;
  13257.     }
  13258.    
  13259.     public <T extends Enum<T>> T getEnum(String key, Class<T> clazz, T defaultValue)
  13260.     {
  13261. -       String value = getValue(key);
  13262. -       if (value == null)
  13263. -       {
  13264. -           _log.warning("[" + _file.getName() + "] missing property for key: " + key + " using default value: " + defaultValue);
  13265. -           return defaultValue;
  13266. -       }
  13267. -      
  13268. -       try
  13269. -       {
  13270. -           return Enum.valueOf(clazz, value);
  13271. -       }
  13272. -       catch (IllegalArgumentException e)
  13273. -       {
  13274. -           _log.warning("[" + _file.getName() + "] Invalid value specified for key: " + key + " specified value: " + value + " should be enum value of \"" + clazz.getSimpleName() + "\" using default value: " + defaultValue);
  13275. -           return defaultValue;
  13276. -       }
  13277. +       return getGenericValue(key, defaultValue);
  13278.     }
  13279.  }
Add Comment
Please, Sign In to add comment