viewing paste ra_config-init+msg_conf-s | Diff

Posted on the
  1. # This patch file was generated by NetBeans IDE
  2. # Following Index: paths are relative to: /home/lighta/Documents/Myscript/RO/Servs/rathena
  3. # This patch can be applied using context Tools: Patch action on respective folder.
  4. # It uses platform neutral UTF-8 encoding and \n newlines.
  5. # Above lines and this line are ignored by the patching process.
  6. Index: conf/msg_conf/char_msg.conf
  7. --- conf/msg_conf/char_msg.conf No Base Revision
  8. +++ conf/msg_conf/char_msg.conf Locally New
  9. @@ -0,0 +1,129 @@
  10. +// rAthena msg_athena.conf
  11. +// Message Configuration of char-server
  12. +// -----------------------
  13. +0: Novice
  14. +1: Swordsman
  15. +2: Magician
  16. +3: Archer
  17. +4: Acolyte
  18. +5: Merchant
  19. +6: Thief
  20. +7: Knight
  21. +8: Priest
  22. +9: Wizard
  23. +10: Blacksmith
  24. +11: Hunter
  25. +12: Assassin
  26. +13: Crusader
  27. +14: Monk
  28. +15: Sage
  29. +16: Rogue
  30. +17: Alchemist
  31. +18: Bard
  32. +19: Dancer
  33. +20: Wedding
  34. +21: Super Novice
  35. +22: Gunslinger
  36. +23: Ninja
  37. +24: Christmas
  38. +25: High Novice
  39. +26: High Swordsman
  40. +27: High Magician
  41. +28: High Archer
  42. +29: High Acolyte
  43. +30: High Merchant
  44. +31: High Thief
  45. +32: Lord Knight
  46. +33: High Priest
  47. +34: High Wizard
  48. +35: Whitesmith
  49. +//35: Mastersmith //IRO name
  50. +36: Sniper
  51. +37: Assassin Cross
  52. +38: Paladin
  53. +39: Champion
  54. +40: Professor
  55. +//40: Scholar //IRO name
  56. +41: Stalker
  57. +42: Creator
  58. +//42: Biochemist //IRO Name
  59. +43: Clown
  60. +//43: Minstrel //IRO Name
  61. +44: Gypsy
  62. +45: Baby Novice
  63. +46: Baby Swordsman
  64. +47: Baby Magician
  65. +48: Baby Archer
  66. +49: Baby Acolyte
  67. +50: Baby Merchant
  68. +51: Baby Thief
  69. +52: Baby Knight
  70. +53: Baby Priest
  71. +54: Baby Wizard
  72. +55: Baby Blacksmith
  73. +56: Baby Hunter
  74. +57: Baby Assassin
  75. +58: Baby Crusader
  76. +59: Baby Monk
  77. +60: Baby Sage
  78. +61: Baby Rogue
  79. +62: Baby Alchemist
  80. +63: Baby Bard
  81. +64: Baby Dancer
  82. +65: Super Baby
  83. +66: Taekwon
  84. +67: Star Gladiator
  85. +68: Soul Linker
  86. +//79: FREE
  87. +//70: FREE
  88. +71: Summer
  89. +72: Gangsi
  90. +73: Death Knight
  91. +74: Dark Collector
  92. +75: Rune Knight
  93. +76: Warlock
  94. +77: Ranger
  95. +78: Arch Bishop
  96. +79: Mechanic
  97. +80: Guillotine Cross
  98. +81: Royal Guard
  99. +82: Sorcerer
  100. +83: Minstrel
  101. +//83: Maestro //IRO Name
  102. +84: Wanderer
  103. +85: Sura
  104. +86: Genetic
  105. +//86: Geneticist //IRO Name
  106. +87: Shadow Chaser
  107. +88: Baby Rune Knight
  108. +89: Baby Warlock
  109. +90: Baby Ranger
  110. +91: Baby Arch Bishop
  111. +92: Baby Mechanic
  112. +93: Baby Guillotine Cross
  113. +94: Baby Royal Guard
  114. +95: Baby Sorcerer
  115. +96: Baby Minstrel
  116. +97: Baby Wanderer
  117. +98: Baby Sura
  118. +99: Baby Genetic
  119. +100: Baby Shadow Chaser
  120. +101: Expanded Super Novice
  121. +102: Expanded Super Baby
  122. +103: Kagerou
  123. +104: Oboro
  124. +105: Unknown Job
  125. +
  126. +//Auction
  127. +200: Auction Manager
  128. +201: Auction
  129. +202: Thanks, you won the auction!.
  130. +203: Payment for your auction!.
  131. +204: No buyers have been found for your auction.
  132. +205: Auction canceled.
  133. +206: Auction closed.
  134. +207: Auction winner.
  135. +208: Someone has placed a higher bid.
  136. +209: You have placed a higher bid.
  137. +210: You have won the auction.
  138. +211: Payment for your auction!.
  139. Index: conf/msg_conf/login_msg.conf
  140. --- conf/msg_conf/login_msg.conf No Base Revision
  141. +++ conf/msg_conf/login_msg.conf Locally New
  142. @@ -0,0 +1,26 @@
  143. +// rAthena msg_athena.conf
  144. +// Message Configuration of login-server
  145. +// -----------------------
  146. +0: Unregistered ID.
  147. +1: Incorrect Password.
  148. +2: Account Expired.
  149. +3: Rejected from server.
  150. +4: Blocked by GM.
  151. +5: Not latest game EXE.
  152. +6: Banned.
  153. +7: Server Over-population.
  154. +8: Account limit from company
  155. +9: Ban by DBA
  156. +10: Email not confirmed
  157. +11: Ban by GM
  158. +12: Working in DB
  159. +13: Self Lock
  160. +14: Not Permitted Group
  161. +15: Not Permitted Group
  162. +16: Account gone.
  163. +17: Login info remains.
  164. +18: Hacking investigation.
  165. +19: Bug investigation.
  166. +20: Deleting char.
  167. +21: Deleting spouse char.
  168. +22: Unknown Error.
  169. Index: conf/msg_conf/map_msg.conf
  170. --- conf/msg_conf/map_msg.conf No Base Revision
  171. +++ conf/msg_conf/map_msg.conf Locally New
  172. @@ -0,0 +1,1413 @@
  173. +// rAthena msg_athena.conf
  174. +// Message Configuration
  175. +// For translation, just change msg here (second line), no need to modify source code,
  176. +// or alternatively, use conf/import/msg_conf.txt
  177. +// Format:
  178. +// // English message
  179. +// msg_number: translated message
  180. +
  181. +//   0-410: reserved for GM commands
  182. +// 500-900 reserved for others
  183. +// 900-1300: @atcommand
  184. +
  185. +// To disable a string (%s) field, make it's max length 0:
  186. +// eg:
  187. +// 270: *%s %s* (@me format)
  188. +// 270: *%.0s%s* (remove the character's name from it)
  189. +
  190. +// Messages of GM commands
  191. +// -----------------------
  192. +
  193. +0: Warped.
  194. +1: Map not found.
  195. +2: Invalid coordinates, using random target cell.
  196. +3: Character not found.
  197. +4: Jump to %s
  198. +5: Jump to %d %d
  199. +6: Your save point has been changed.
  200. +7: Warping to save point.
  201. +8: Speed changed.
  202. +9: Options changed.
  203. +10: Invisible: Off
  204. +11: Invisible: On
  205. +12: Your job has been changed.
  206. +13: You've died.
  207. +14: Character killed.
  208. +15: Player warped (message sent to player too).
  209. +16: You've been revived!
  210. +17: HP, SP recovered.
  211. +18: Item created.
  212. +19: Invalid item ID or name.
  213. +20: All of your items have been removed.
  214. +21: Base level raised.
  215. +22: Base level lowered.
  216. +23: Job level can't go any higher.
  217. +24: Job level raised.
  218. +25: Job level lowered.
  219. +26: Help commands:
  220. +27: Commands help is not available.
  221. +28: No player found.
  222. +29: 1 player found.
  223. +30: %d players found.
  224. +31: PvP: Off.
  225. +32: PvP: On.
  226. +33: GvG: Off.
  227. +34: GvG: On.
  228. +35: You can't use this command with this class.
  229. +36: Appearance changed.
  230. +37: An invalid number was specified.
  231. +38: Invalid location number, or name.
  232. +39: All monsters summoned!
  233. +40: Invalid monster ID or name.
  234. +41: Unable to decrease the number/value.
  235. +42: Stat changed.
  236. +43: You're not in a guild.
  237. +44: You're not the master of your guild.
  238. +45: Guild level change failed.
  239. +46: %s recalled!
  240. +47: Base level can't go any higher.
  241. +48: Character's job changed.
  242. +49: Invalid job ID.
  243. +50: You already have some GM powers.
  244. +51: Character revived.
  245. +52: This option cannot be used in PK Mode.
  246. +53: '%s' stats:
  247. +54: No player found in map '%s'.
  248. +55: 1 player found in map '%s'.
  249. +56: %d players found in map '%s'.
  250. +57: Character's save point changed.
  251. +58: Character's options changed.
  252. +59: Night Mode Activated.
  253. +60: Day Mode Activated.
  254. +61: The holy messenger has given judgement.
  255. +62: Judgement has passed.
  256. +63: Mercy has been shown.
  257. +64: Mercy has been granted.
  258. +65: Character's base level raised.
  259. +66: Character's base level lowered.
  260. +67: Character's job level can't go any higher.
  261. +68: character's job level raised.
  262. +69: Character's job level lowered.
  263. +70: You have learned the skill.
  264. +71: You have forgotten the skill.
  265. +72: War of Emperium has been initiated.
  266. +73: War of Emperium is currently in progress.
  267. +74: War of Emperium has been ended.
  268. +75: War of Emperium is currently not in progress.
  269. +76: All skills have been added to your skill tree.
  270. +77: The reference result of '%s' (name: id):
  271. +78: %s: %d
  272. +79: It is %d affair above.
  273. +80: Give the display name or monster name/id please.
  274. +81: Your GM level doesn't authorize you to preform this action on the specified player.
  275. +82: Please provide a name or number from the list provided:
  276. +83: Monster 'Emperium' cannot be spawned.
  277. +84: All stats changed!
  278. +85: Invalid time for ban command.
  279. +86: Sorry, player names have to be at least 4 characters.
  280. +87: Sorry, player names can be no longer than 23 characters.
  281. +88: Sending request to login server...
  282. +89: Night mode is already enabled.
  283. +90: Day mode is already enabled.
  284. +91: Character's base level can't go any higher.
  285. +92: All characters recalled!
  286. +93: All online characters of the %s guild have been recalled to your position.
  287. +94: Incorrect name/ID, or no one from the specified guild is online.
  288. +95: All online characters of the %s party have been recalled to your position.
  289. +96: Incorrect name/ID, or no one from the specified party is online.
  290. +97: Item database has been reloaded.
  291. +98: Monster database has been reloaded.
  292. +99: Skill database has been reloaded.
  293. +100: Scripts have been reloaded.
  294. +101: Login-server asked to reload GM accounts and their level.
  295. +102: You have mounted a Peco Peco.
  296. +103: No longer spying on the %s guild.
  297. +104: Spying on the %s guild.
  298. +105: No longer spying on the %s party.
  299. +106: Spying on the %s party.
  300. +107: All items have been repaired.
  301. +108: No item need to be repaired.
  302. +109: Player has been nuked!
  303. +110: NPC Enabled.
  304. +111: This NPC doesn't exist.
  305. +112: NPC Disabled.
  306. +113: %d item(s) removed by a GM.
  307. +114: %d item(s) removed from the player.
  308. +115: %d item(s) removed. Player had only %d on %d items.
  309. +116: Character does not have the specified item.
  310. +117: You have been placed in jail by a GM.
  311. +118: Player warped to jail.
  312. +119: This player is not in jail.
  313. +120: A GM has discharged you from jail.
  314. +121: Player unjailed.
  315. +122: Disguise applied.
  316. +123: Invalid Monster/NPC name/ID specified.
  317. +124: Undisguise applied.
  318. +125: You're not disguised.
  319. +//Clone Messages
  320. +126: Cannot clone a player of higher GM level than yourself.
  321. +127: You've reached your slave clones limit.
  322. +128: Evil clone spawned.
  323. +129: Unable to spawn evil clone.
  324. +130: Clone spawned.
  325. +131: Unable to spawn clone.
  326. +132: Slave clone spawned.
  327. +133: Unable to spawn slave clone.
  328. +//Messages 134-139 are no longer used, available for future reuse (preferrable for more variations of @clone)
  329. +140: Character's disguise applied.
  330. +141: Character's undisguise applied.
  331. +142: Character is not disguised.
  332. +143: Commands are disabled on this map.
  333. +144: Invalid e-mail. If you have default e-mail, type [email protected].
  334. +145: Invalid new e-mail. Please enter a real e-mail.
  335. +146: New e-mail must be a real e-mail.
  336. +147: New e-mail must be different from the current e-mail.
  337. +148: Information sent to login-server via char-server.
  338. +149: Impossible to increase the number/value.
  339. +150: No GM found.
  340. +151: 1 GM found.
  341. +152: %d GMs found.
  342. +153: %s is Unknown Command.
  343. +154: %s failed.
  344. +155: You are unable to change your job.
  345. +156: HP or/and SP modified.
  346. +157: HP and SP have already been recovered.
  347. +158: Base level can't go any lower.
  348. +159: Job level can't go any lower.
  349. +160: PvP is already Off.
  350. +161: PvP is already On.
  351. +162: GvG is already Off.
  352. +163: GvG is already On.
  353. +164: Your memo point #%d doesn't exist.
  354. +165: All monsters killed!
  355. +166: No item has been refined.
  356. +167: 1 item has been refined.
  357. +168: %d items have been refined.
  358. +169: The item (%d: '%s') is not equipable.
  359. +170: The item is not equipable.
  360. +171: %d - void
  361. +//172: You replace previous memo position %d - %s (%d,%d).
  362. +//173: Note: you don't have the 'Warp' skill level to use it.
  363. +174: Number of status points changed.
  364. +175: Number of skill points changed.
  365. +176: Current amount of zeny changed.
  366. +177: You cannot decrease that stat anymore.
  367. +178: You cannot increase that stat anymore.
  368. +179: Guild level changed.
  369. +180: The monster/egg name/ID doesn't exist.
  370. +181: You already have a pet.
  371. +182: Pet intimacy changed.
  372. +183: Pet intimacy is already at maximum.
  373. +184: Sorry, but you have no pet.
  374. +185: Pet hunger changed.
  375. +186: Pet hunger is already at maximum.
  376. +187: You can now rename your pet.
  377. +188: You can already rename your pet.
  378. +189: This player can now rename his/her pet.
  379. +190: This player can already rename his/her pet.
  380. +191: Sorry, but this player has no pet.
  381. +192: Unable to change the specified character's job.
  382. +193: Character's base level can't go any lower.
  383. +194: Character's job level can't go any lower.
  384. +195: All players have been kicked!
  385. +196: You already have this quest skill.
  386. +197: This skill number doesn't exist or isn't a quest skill.
  387. +198: This skill number doesn't exist.
  388. +199: This player has learned the skill.
  389. +200: This player already has this quest skill.
  390. +201: You don't have this quest skill.
  391. +202: This player has forgotten the skill.
  392. +203: This player doesn't have this quest skill.
  393. +204: You can't open a shop on this cell.
  394. +205: Maybe you meant: 
  395. +206: '%s' skill points reset.
  396. +207: '%s' stats points reset.
  397. +208: '%s' skill and stat points have been reset.
  398. +209: Character's skill points changed.
  399. +210: Character's status points changed.
  400. +211: Character's current zeny changed.
  401. +212: Cannot mount while in disguise.
  402. +213: You can not mount a Peco Peco with your current job.
  403. +214: You have released your Peco Peco.
  404. +215: This player cannot mount a Peco Peco while in disguise.
  405. +216: This player has mounted a Peco Peco.
  406. +217: This player cannot mount a Peco Peco with his/her current job.
  407. +218: This player's Peco Peco has been released.
  408. +219: %d day
  409. +220: %d days
  410. +221: %s %d hour
  411. +222: %s %d hours
  412. +223: %s %d minute
  413. +224: %s %d minutes
  414. +225: %s and %d second
  415. +226: %s and %d seconds
  416. +227: Party modification is disabled on this map.
  417. +228: Guild modification is disabled on this map.
  418. +229: Your effect has changed.
  419. +230: Server time (normal time): %A, %B %d %Y %X.
  420. +231: Game time: The game is in permanent daylight.
  421. +232: Game time: The game is in permanent night.
  422. +233: Game time: The game is in night for %s.
  423. +234: Game time: After, the game will be in permanent daylight.
  424. +235: Game time: The game is in daylight for %s.
  425. +236: Game time: After, the game will be in permanent night.
  426. +237: Game time: After, the game will be in night for %s.
  427. +238: Game time: A day cycle has a normal duration of %s.
  428. +239: Game time: After, the game will be in daylight for %s.
  429. +240: %d monster(s) summoned!
  430. +241: You can now attack and kill players freely.
  431. +242: You can now be attacked and killed by players.
  432. +243: Skills have been disabled on this map.
  433. +244: Skills have been enabled on this map.
  434. +245: Server Uptime: %ld days, %ld hours, %ld minutes, %ld seconds.
  435. +246: Your GM level doesn't authorize you to preform this action.
  436. +247: You are not authorized to warp to this map.
  437. +248: You are not authorized to warp from your current map.
  438. +249: You are not authorized to warp to your save map.
  439. +250: You have already opened your storage. Close it first.
  440. +251: You have already opened your guild storage. Close it first.
  441. +252: You are not in a guild.
  442. +//253: You are not authorized to memo this map.
  443. +254: GM command configuration has been reloaded.
  444. +255: Battle configuration has been reloaded.
  445. +256: Status database has been reloaded.
  446. +257: Player database has been reloaded.
  447. +258: Sent packet 0x%x (%d)
  448. +259: Invalid packet
  449. +260: This item cannot be traded.
  450. +261: Script could not be loaded.
  451. +262: Script loaded.
  452. +263: This item cannot be dropped.
  453. +264: This item cannot be stored.
  454. +265: %s has bought your item(s).
  455. +266: Some of your items cannot be vended and were removed from the shop.
  456. +267: '%s' designated maps reset.
  457. +268: Reloaded the Message of the Day.
  458. +269: Displaying first %d out of %d matches
  459. +//@me output format
  460. +270: * :%s %s: *
  461. +271: You can't drop items on this map
  462. +272: You can't trade on this map
  463. +273: Commands available:
  464. +274: %d commands found.
  465. +275: No commands found.
  466. +276: You can't open a shop on this map
  467. +277: Usage: @request <petition/message to online GMs>.
  468. +278: (@request): %s
  469. +279: @request sent.
  470. +280: Invalid name.
  471. +281: You can't create chat rooms on this map
  472. +//Party-related
  473. +282: You need to be a party leader to use this command.
  474. +283: Target character must be online and in your current party.
  475. +284: Leadership transferred.
  476. +285: You've become the party leader.
  477. +286: There's been no change in the setting.
  478. +287: You cannot change party leaders on this map.
  479. +//Missing stuff for @killer related commands.
  480. +288: You are no longer killable.
  481. +289: The player is now killable.
  482. +290: The player is no longer killable.
  483. +291: Weather effects will dispell on warp/refresh
  484. +292: Killer state reset.
  485. +// Guild Castles Number
  486. +// --------------------
  487. +//299: ?? Castles
  488. +300: None Taken
  489. +301: One Castle
  490. +302: Two Castles
  491. +303: Three Castles
  492. +304: Four Castles
  493. +305: Five Castles
  494. +306: Six Castles
  495. +307: Seven Castles
  496. +308: Eight Castles
  497. +309: Nine Castles
  498. +310: Ten Castles
  499. +311: Eleven Castles
  500. +312: Twelve Castles
  501. +313: Thirteen Castles
  502. +314: Fourteen Castles
  503. +315: Fifteen Castles
  504. +316: Sixteen Castles
  505. +317: Seventeen Castles
  506. +318: Eighteen Castles
  507. +319: Nineteen Castles
  508. +320: Twenty Castles
  509. +321: Twenty-One Castles
  510. +322: Twenty-Two Castles
  511. +323: Twenty-Three Castles
  512. +324: Twenty-Four Castles
  513. +325: Twenty-Five Castles
  514. +326: Twenty-Six Castles
  515. +327: Twenty-Seven Castles
  516. +328: Twenty-Eight Castles
  517. +329: Twenty-Nine Castles
  518. +330: Thirty Castles
  519. +331: Thirty-One Castles
  520. +332: Thirty-Two Castles
  521. +333: Thirty-Three Castles
  522. +// 334: Thirty-Four Castles
  523. +334: Total Domination
  524. +
  525. +// Templates for @who output
  526. +343: Name: %s 
  527. +344: (%s) 
  528. +345: | Party: '%s' 
  529. +346: | Guild: '%s'
  530. +//You may ommit the last %s, then you won't see players job name
  531. +347: | Lv:%d/%d | Job: %s
  532. +//You may ommit 2 last %d, then you won't see players coords, just map name
  533. +348: | Location: %s %d %d
  534. +
  535. +// @duel (part 1)
  536. +350: Duel: You can't use @invite. You aren't a duelist.
  537. +351: Duel: The limit of players has been reached.
  538. +352: Duel: Player name not found.
  539. +353: Duel: The Player is in the duel already.
  540. +354: Duel: Invitation has been sent.
  541. +355: Duel: You can't use @duel without @reject.
  542. +356: Duel: You can take part in duel once per %d minutes.
  543. +357: Duel: Invalid value.
  544. +358: Duel: You can't use @leave. You aren't a duelist.
  545. +359: Duel: You've left the duel.
  546. +360: Duel: You can't use @accept without a duel invitation.
  547. +361: Duel: The duel invitation has been accepted.
  548. +362: Duel: You can't use @reject without a duel invitation.
  549. +363: Duel: The duel invitation has been rejected.
  550. +364: Duel: You can't invite %s because he/she isn't on the same map.
  551. +365: Duel: Can't use %s in duel. 
  552. +// @duel (part 2)
  553. +370:  -- Duels: %d/%d, Members: %d/%d, Max players: %d --
  554. +371:  -- Duels: %d/%d, Members: %d/%d --
  555. +372:  -- Duel has been created (Use @invite/@leave) --
  556. +373:  -- Player %s invites %s to duel --
  557. +374: Blue -- Player %s invites you to PVP duel (Use @accept/@reject) --
  558. +375:  <- Player %s has left the duel --
  559. +376:  -> Player %s has accepted the duel --
  560. +377:  -- Player %s has rejected the duel --
  561. +// Main chat
  562. +380: Main chat has been activated.
  563. +381: Main chat already activated.
  564. +382: Main chat has been disabled.
  565. +383: Main chat already disabled.
  566. +384: Main chat is currently enabled. Usage: @main <on|off>, @main <message>.
  567. +385: Main chat is currently disabled. Usage: @main <on|off>, @main <message>.
  568. +386: %s :Main: %s
  569. +387: You cannot use Main chat while muted.
  570. +388: You should enable main chat with "@main on" command.
  571. +//NoAsk
  572. +390: Autorejecting is activated.
  573. +391: Autorejecting is deactivated.
  574. +392: You request has been rejected by autoreject option.
  575. +393: Autorejected trade request from %s.
  576. +394: Autorejected party invite from %s.
  577. +395: Autorejected guild invite from %s.
  578. +396: Autorejected alliance request from %s.
  579. +397: Autorejected opposition request from %s.
  580. +398: Autorejected friend request from %s.
  581. +400: Usage: @jailfor <time> <character name>
  582. +401: You have been jailed for %d years, %d months, %d days, %d hours and %d minutes
  583. +402: %s in jail for %d years, %d months, %d days, %d hours and %d minutes
  584. +// WoE SE (@agitstart2)
  585. +403: War of Emperium SE has been initiated.
  586. +404: War of Emperium SE is currently in progress.
  587. +405: War of Emperium SE has been ended.
  588. +406: War of Emperium SE is currently not in progress.
  589. +//407 free
  590. +//chrif related
  591. +408: Need disconnection to perform change-sex request...
  592. +409: Your sex has been changed (need disconnection by the server)...
  593. +//410-411 used by cash shop
  594. +412: Your account has 'Unregistered'.
  595. +413: Your account has an 'Incorrect Password'...
  596. +414: Your account has expired.
  597. +415: Your account has been rejected from server.
  598. +416: Your account has been blocked by the GM Team.
  599. +417: Your Game's EXE file is not the latest version.
  600. +418: Your account has been prohibited to log in.
  601. +419: Server is jammed due to over populated.
  602. +420: Your account has not more authorised.
  603. +421: Your account has been totally erased.
  604. +423: Your account has been banished until 
  605. +424: Login-server has been asked to %s the player '%.*s'.
  606. +425: The player '%.*s' doesn't exist.
  607. +426: Your GM level don't authorise you to %s the player '%.*s'.
  608. +427: Login-server is offline. Impossible to %s the player '%.*s'.
  609. +428: block
  610. +429: ban
  611. +430: unblock
  612. +431: unban
  613. +432: change the sex of
  614. +
  615. +// Homunculus messages
  616. +450: You already have a homunculus
  617. +
  618. +// Messages of others (not for GM commands)
  619. +// ----------------------------------------
  620. +
  621. +//500: FREE
  622. +501: Your account time limit is: %d-%m-%Y %H:%M:%S.
  623. +502: Day Mode is activated
  624. +503: Night Mode is activated
  625. +
  626. +// Cash point change messages
  627. +504: Used %d kafra points and %d cash points. %d kafra and %d cash points remaining.
  628. +505: Gained %d cash points. Total %d points.
  629. +506: Gained %d kafra points. Total %d points.
  630. +410: Removed %d cash points. Total %d points.
  631. +411: Removed %d kafra points. Total %d points.
  632. +
  633. +// Trade Spoof Messages
  634. +507: This player has been banned for %d minute(s).
  635. +508: This player hasn't been banned (Ban option is disabled).
  636. +//509 Available....
  637. +
  638. +// mail system
  639. +//----------------------
  640. +510: You have %d new emails (%d unread)
  641. +
  642. +// Bot detect messages (currently unused)
  643. +535: Possible use of BOT (99%% of chance) or modified client by '%s' (account: %d, char_id: %d). This player ask your name when you are hidden.
  644. +
  645. +536: Character '%s' (account: %d) is trying to use a bot (it tries to detect a fake player).
  646. +537: Character '%s' (account: %d) is trying to use a bot (it tries to detect a fake mob).
  647. +// Trade Spoof Messages
  648. +538: Hack on trade: character '%s' (account: %d) try to trade more items that he has.
  649. +539: This player has %d of a kind of item (id: %d), and tried to trade %d of them.
  650. +540: This player has been definitivly blocked.
  651. +// Rare Items Drop/Steal announce
  652. +541: '%s' got %s's %s (chance: %0.02f%%)
  653. +//541: %.0s%.0sSomeone got %s
  654. +542: '%s' stole %s's %s (chance: %0.02f%%)
  655. +//542: %.0s%.0sSomeone stole %s
  656. +// 543~548 are not used (previously @away messages)
  657. +// @Autotrade
  658. +549: You should have a shop open to use @autotrade.
  659. +
  660. +//550 -> 650: Job Names
  661. +550: Novice
  662. +551: Swordsman
  663. +552: Magician
  664. +553: Archer
  665. +554: Acolyte
  666. +555: Merchant
  667. +556: Thief
  668. +557: Knight
  669. +558: Priest
  670. +559: Wizard
  671. +560: Blacksmith
  672. +561: Hunter
  673. +562: Assassin
  674. +563: Crusader
  675. +564: Monk
  676. +565: Sage
  677. +566: Rogue
  678. +567: Alchemist
  679. +568: Bard
  680. +569: Dancer
  681. +570: Wedding
  682. +571: Super Novice
  683. +572: Gunslinger
  684. +573: Ninja
  685. +574: Christmas
  686. +575: High Novice
  687. +576: High Swordsman
  688. +577: High Magician
  689. +578: High Archer
  690. +579: High Acolyte
  691. +580: High Merchant
  692. +581: High Thief
  693. +582: Lord Knight
  694. +583: High Priest
  695. +584: High Wizard
  696. +585: Whitesmith
  697. +//585: Mastersmith //IRO name
  698. +586: Sniper
  699. +587: Assassin Cross
  700. +588: Paladin
  701. +589: Champion
  702. +590: Professor
  703. +//590: Scholar //IRO name
  704. +591: Stalker
  705. +592: Creator
  706. +//592: Biochemist //IRO Name
  707. +593: Clown
  708. +//593: Minstrel //IRO Name
  709. +594: Gypsy
  710. +595: Baby Novice
  711. +596: Baby Swordsman
  712. +597: Baby Magician
  713. +598: Baby Archer
  714. +599: Baby Acolyte
  715. +600: Baby Merchant
  716. +601: Baby Thief
  717. +602: Baby Knight
  718. +603: Baby Priest
  719. +604: Baby Wizard
  720. +605: Baby Blacksmith
  721. +606: Baby Hunter
  722. +607: Baby Assassin
  723. +608: Baby Crusader
  724. +609: Baby Monk
  725. +610: Baby Sage
  726. +611: Baby Rogue
  727. +612: Baby Alchemist
  728. +613: Baby Bard
  729. +614: Baby Dancer
  730. +615: Super Baby
  731. +616: Taekwon
  732. +617: Star Gladiator
  733. +618: Soul Linker
  734. +//619: FREE
  735. +//620: FREE
  736. +621: Summer
  737. +622: Gangsi
  738. +623: Death Knight
  739. +624: Dark Collector
  740. +625: Rune Knight
  741. +626: Warlock
  742. +627: Ranger
  743. +628: Arch Bishop
  744. +629: Mechanic
  745. +630: Guillotine Cross
  746. +631: Royal Guard
  747. +632: Sorcerer
  748. +633: Minstrel
  749. +//633: Maestro //IRO Name
  750. +634: Wanderer
  751. +635: Sura
  752. +636: Genetic
  753. +//636: Geneticist //IRO Name
  754. +637: Shadow Chaser
  755. +638: Baby Rune Knight
  756. +639: Baby Warlock
  757. +640: Baby Ranger
  758. +641: Baby Arch Bishop
  759. +642: Baby Mechanic
  760. +643: Baby Guillotine Cross
  761. +644: Baby Royal Guard
  762. +645: Baby Sorcerer
  763. +646: Baby Minstrel
  764. +647: Baby Wanderer
  765. +648: Baby Sura
  766. +649: Baby Genetic
  767. +650: Baby Shadow Chaser
  768. +651: Expanded Super Novice
  769. +652: Expanded Super Baby
  770. +653: Kagerou
  771. +654: Oboro
  772. +655: Unknown Job
  773. +
  774. +// MvP Tomb
  775. +// Added here so it can be easily translated
  776. +656: Tomb
  777. +657: [ ^EE0000%s^000000 ]
  778. +658: Has met its demise
  779. +659: Time of death : ^EE0000%s^000000
  780. +660: Defeated by
  781. +661: [^EE0000%s^000000]
  782. +
  783. +// Etc messages from source
  784. +662: You're too close to a NPC, you must be at least %d cells away from any NPC.
  785. +663: Duel: Can't use this item in duel.
  786. +664: You cannot use this command when dead.
  787. +665: Can't create chat rooms in this area.
  788. +666: Pets are not allowed in Guild Wars.
  789. +667: You're not dead.
  790. +668: Your actual memo positions are:
  791. +669: You broke the target's weapon.
  792. +670: You can't leave battleground guilds.
  793. +671: Friend already exists.
  794. +672: Name not found in list.
  795. +673: This action can't be performed at the moment. Please try again later.
  796. +674: Friend removed.
  797. +675: Cannot send mails too fast!!
  798. +676: Alliances cannot be made during Guild Wars!
  799. +677: Alliances cannot be broken during Guild Wars!
  800. +678: You are no longer the Guild Master.
  801. +679: You have become the Guild Master!
  802. +680: You have been recovered!
  803. +//681-899 free
  804. +
  805. +681: Rune Knight T
  806. +682: Warlock T
  807. +683: Ranger T
  808. +684: Arch Bishop T
  809. +685: Mechanic T
  810. +686: Guillotine Cross T
  811. +687: Royal Guard T
  812. +688: Sorcerer T
  813. +689: Minstrel T
  814. +690: Wanderer T
  815. +691: Sura T
  816. +692: Genetic T
  817. +693: Shadow Chaser T
  818. +
  819. +
  820. +//------------------------------------
  821. +// More atcommands message
  822. +//------------------------------------
  823. +
  824. +// @send
  825. +900: Usage:
  826. +901:	@send len <packet hex number>
  827. +902: 	@send <packet hex number> {<value>}*
  828. +903: 	Value: <type=B(default),W,L><number> or S<length>"<string>"
  829. +904: Packet 0x%x length: %d
  830. +905: Unknown packet: 0x%x
  831. +906: Not a string:
  832. +907: Not a hexadecimal digit:
  833. +908: Unknown type of value in:
  834. +
  835. +// @rura
  836. +909: Please enter a map (usage: @warp/@rura/@mapmove <mapname> <x> <y>).
  837. +
  838. +// @where
  839. +910: Please enter a player name (usage: @where <char name>).
  840. +
  841. +// @jumpto
  842. +911: Please enter a player name (usage: @jumpto/@warpto/@goto <char name/ID>).
  843. +
  844. +// @who
  845. +912: (CID:%d/AID:%d) 
  846. +
  847. +// @whogm
  848. +913: Name: %s (GM)
  849. +914: Name: %s (GM:%d) | Location: %s %d %d
  850. +915:       BLvl: %d | Job: %s (Lvl: %d)
  851. +916:       Party: '%s' | Guild: '%s'
  852. +917: None
  853. +
  854. +// @speed
  855. +918: Please enter a speed value (usage: @speed <%d-%d>).
  856. +
  857. +// @storage
  858. +919: Storage opened.
  859. +
  860. +// @guildstorage
  861. +920: Guild storage opened.
  862. +
  863. +// @option
  864. +921: Please enter at least one option.
  865. +
  866. +// @jobchange
  867. +922: Please enter a job ID.
  868. +923: You can not change to this job by command.
  869. +//924-979 free (future jobs?)
  870. +
  871. +// @kami
  872. +980: Please enter a message (usage: @kami <message>).
  873. +981: Please enter color and message (usage: @kamic <color> <message>).
  874. +982: Invalid color.
  875. +
  876. +// @item
  877. +983: Please enter an item name or ID (usage: @item <item name/ID> <quantity>).
  878. +
  879. +// @item2
  880. +984: Please enter all parameters (usage: @item2 <item name/ID> <quantity>
  881. +985:   <identify_flag> <refine> <attribute> <card1> <card2> <card3> <card4>).
  882. +
  883. +// @baselevelup
  884. +986: Please enter a level adjustment (usage: @lvup/@blevel/@baselvlup <number of levels>).
  885. +
  886. +// @joblevelup
  887. +987: Please enter a level adjustment (usage: @joblvup/@jlevel/@joblvlup <number of levels>).
  888. +
  889. +// @help
  890. +988: There is no help for %c%s.
  891. +989: Help for command %c%s:
  892. +990: Available aliases:
  893. +
  894. +// @model
  895. +991: Please enter at least one value (usage: @model <hair ID: %d-%d> <hair color: %d-%d> <clothes color: %d-%d>).
  896. +
  897. +// @dye
  898. +992: Please enter a clothes color (usage: @dye/@ccolor <clothes color: %d-%d>).
  899. +
  900. +// @hairstyle
  901. +993: Please enter a hair style (usage: @hairstyle/@hstyle <hair ID: %d-%d>).
  902. +
  903. +// @haircolor
  904. +994: Please enter a hair color (usage: @haircolor/@hcolor <hair color: %d-%d>).
  905. +
  906. +// @go
  907. +995: You cannot use @go on this map.
  908. +
  909. +// @refine
  910. +996: Please enter a position and an amount (usage: @refine <equip position> <+/- amount>).
  911. +997: %d: Lower Headgear
  912. +998: %d: Right Hand
  913. +999: %d: Garment
  914. +1000: %d: Left Accessory
  915. +1001: %d: Body Armor
  916. +1002: %d: Left Hand
  917. +1003: %d: Shoes
  918. +1004: %d: Right Accessory
  919. +1005: %d: Top Headgear
  920. +1006: %d: Mid Headgear
  921. +
  922. +// @produce
  923. +1007: Please enter at least one item name/ID (usage: @produce <equip name/ID> <element> <# of very's>).
  924. +
  925. +// @memo
  926. +1008: Please enter a valid position (usage: @memo <memo_position:%d-%d>).
  927. +
  928. +// @displaystatus
  929. +1009: Please enter a status type/flag (usage: @displaystatus <status type> <flag> <tick> {<val1> {<val2> {<val3>}}}).
  930. +
  931. +// @stpoint
  932. +1010: Please enter a number (usage: @stpoint <number of points>).
  933. +
  934. +// @skpoint
  935. +1011: Please enter a number (usage: @skpoint <number of points>).
  936. +
  937. +// @zeny
  938. +1012: Please enter an amount (usage: @zeny <amount>).
  939. +
  940. +// @param
  941. +1013: Please enter a valid value (usage: @str/@agi/@vit/@int/@dex/@luk <+/-adjustment>).
  942. +
  943. +// @guildlevelup
  944. +1014: Please enter a valid level (usage: @guildlvup/@guildlvlup <# of levels>).
  945. +
  946. +// @makeeg
  947. +1015: Please enter a monster/egg name/ID (usage: @makeegg <pet>).
  948. +
  949. +// @petfriendly
  950. +1016: Please enter a valid value (usage: @petfriendly <0-1000>).
  951. +
  952. +// @pethungry
  953. +1017: Please enter a valid number (usage: @pethungry <0-100>).
  954. +
  955. +// @recall
  956. +1018: Please enter a player name (usage: @recall <char name/ID>).
  957. +1019: You are not authorized to warp someone to this map.
  958. +
  959. +// @recall
  960. +1020: You are not authorized to warp this player from their map.
  961. +
  962. +// @charblock
  963. +1021: Please enter a player name (usage: @charblock/@block <char name>).
  964. +
  965. +// @charban
  966. +1022: Please enter ban time and a player name (usage: @charban/@ban/@banish/@charbanish <time> <char name>).
  967. +1023: You are not allowed to reduce the length of a ban.
  968. +
  969. +// @charunblock
  970. +1024: Please enter a player name (usage: @charunblock <char name>).
  971. +
  972. +// @charunban
  973. +1025: Please enter a player name (usage: @charunban <char name>).
  974. +
  975. +// @kick
  976. +1026: Please enter a player name (usage: @kick <char name/ID>).
  977. +
  978. +// @questskill / @lostskill
  979. +1027: Please enter a quest skill number.
  980. +
  981. +// @spiritball
  982. +1028: Please enter an amount (usage: @spiritball <number: 0-%d>).
  983. +
  984. +// @party
  985. +1029: Please enter a party name (usage: @party <party_name>).
  986. +
  987. +// @guild
  988. +1030: Please enter a guild name (usage: @guild <guild_name>).
  989. +
  990. +// @idsearch
  991. +1031: Please enter part of an item name (usage: @idsearch <part_of_item_name>).
  992. +
  993. +// @recallall / @guildrecall / @partyrecall
  994. +1032: You are not authorized to warp somenone to your current map.
  995. +1033: Because you are not authorized to warp from some maps, %d player(s) have not been recalled.
  996. +
  997. +// @guildrecall
  998. +1034: Please enter a guild name/ID (usage: @guildrecall <guild_name/ID>).
  999. +
  1000. +// @partyrecall
  1001. +1035: Please enter a party name/ID (usage: @partyrecall <party_name/ID>).
  1002. +
  1003. +// @reloadatcommand
  1004. +1036: Error reading groups.conf, reload failed.
  1005. +1037: Error reading atcommand_athena.conf, reload failed.
  1006. +
  1007. +// @mapinfo
  1008. +1038: Please enter at least one valid list number (usage: @mapinfo <0-3> <map>).
  1009. +1039: ------ Map Info ------
  1010. +1040: Map Name: %s | Players In Map: %d | NPCs In Map: %d | Chats In Map: %d
  1011. +1041: ------ Map Flags ------
  1012. +1042: Town Map
  1013. +1043: Autotrade Enabled
  1014. +1044: Autotrade Disabled
  1015. +1045: Battlegrounds ON
  1016. +1046: PvP Flags: 
  1017. +1047: Pvp ON | 
  1018. +1048: NoGuild | 
  1019. +1049: NoParty | 
  1020. +1050: NightmareDrop | 
  1021. +1051: NoCalcRank | 
  1022. +1052: GvG Flags: 
  1023. +1053: GvG ON | 
  1024. +1054: GvG Dungeon | 
  1025. +1055: GvG Castle | 
  1026. +1056: NoParty | 
  1027. +1057: Teleport Flags: 
  1028. +1058: NoTeleport | 
  1029. +1059: Monster NoTeleport | 
  1030. +1060: NoWarp | 
  1031. +1061: NoWarpTo | 
  1032. +1062: NoReturn | 
  1033. +1063: NoGo | 
  1034. +1064: NoMemo | 
  1035. +1065: No Exp Penalty: %s | No Zeny Penalty: %s
  1036. +1066: On
  1037. +1067: Off
  1038. +1068: No Save (Return to last Save Point)
  1039. +1069: No Save, Save Point: %s,Random
  1040. +1070: No Save, Save Point: %s,%d,%d
  1041. +1071: Weather Flags: 
  1042. +1072: Snow | 
  1043. +1073: Fog | 
  1044. +1074: Sakura | 
  1045. +1075: Clouds | 
  1046. +1076: Clouds2 | 
  1047. +1077: Fireworks | 
  1048. +1078: Leaves | 
  1049. +//1079: Rain | 
  1050. +1080: Displays Night | 
  1051. +1081: Other Flags: 
  1052. +1082: NoBranch | 
  1053. +1083: NoTrade | 
  1054. +1084: NoVending | 
  1055. +1085: NoDrop | 
  1056. +1086: NoSkill | 
  1057. +1087: NoIcewall | 
  1058. +1088: AllowKS | 
  1059. +1089: Reset | 
  1060. +1090: Other Flags: 
  1061. +1091: NoCommand | 
  1062. +1092: NoBaseEXP | 
  1063. +1093: NoJobEXP | 
  1064. +1094: NoMobLoot | 
  1065. +1095: NoMVPLoot | 
  1066. +1096: PartyLock | 
  1067. +1097: GuildLock | 
  1068. +1098: ----- Players in Map -----
  1069. +1099: Player '%s' (session #%d) | Location: %d,%d
  1070. +1100: ----- NPCs in Map -----
  1071. +1101: North
  1072. +1102: North West
  1073. +1103: West
  1074. +1104: South West
  1075. +1105: South
  1076. +1106: South East
  1077. +1107: East
  1078. +1108: North East
  1079. +1109: North
  1080. +1110: Unknown
  1081. +1111: NPC %d: %s | Direction: %s | Sprite: %d | Location: %d %d
  1082. +1112: NPC %d: %s::%s | Direction: %s | Sprite: %d | Location: %d %d 
  1083. +1113: ----- Chats in Map -----
  1084. +1114: Chat: %s | Player: %s | Location: %d %d
  1085. +1115:    Users: %d/%d | Password: %s | Public: %s
  1086. +1116: Yes
  1087. +1117: No
  1088. +1118: Please enter at least one valid list number (usage: @mapinfo <0-3> <map>).
  1089. +
  1090. +// @mount
  1091. +1119: You have mounted your Dragon.
  1092. +1120: You have released your Dragon.
  1093. +1121: You have mounted your Warg.
  1094. +1122: You have released your Warg.
  1095. +1123: You have mounted your Mado Gear.
  1096. +1124: You have released your Mado Gear.
  1097. +
  1098. +// @guildspy
  1099. +1125: The mapserver has spy command support disabled.
  1100. +1126: Please enter a guild name/ID (usage: @guildspy <guild_name/ID>).
  1101. +
  1102. +// @partyspy
  1103. +1127: Please enter a party name/ID (usage: @partyspy <party_name/ID>).
  1104. +
  1105. +// @nuke
  1106. +1128: Please enter a player name (usage: @nuke <char name>).
  1107. +
  1108. +// @tonpc
  1109. +1129: Please enter a NPC name (usage: @tonpc <NPC_name>).
  1110. +
  1111. +// @enablenpc
  1112. +1130: Please enter a NPC name (usage: @enablenpc <NPC_name>).
  1113. +
  1114. +// @hidenpc
  1115. +1131: Please enter a NPC name (usage: @hidenpc <NPC_name>).
  1116. +
  1117. +// @loadnpc
  1118. +1132: Please enter a script file name (usage: @loadnpc <file name>).
  1119. +
  1120. +// @npcoff
  1121. +1133: Please enter a NPC name (usage: @npcoff <NPC_name>).
  1122. +
  1123. +// @jail
  1124. +1134: Please enter a player name (usage: @jail <char_name>).
  1125. +
  1126. +// @unjail
  1127. +1135: Please enter a player name (usage: @unjail/@discharge <char_name>).
  1128. +
  1129. +// @jailfor
  1130. +1136: Invalid time for jail command.
  1131. +1137: You are now
  1132. +1138: This player is now
  1133. +
  1134. +// @jailtime
  1135. +1139: You are not in jail.
  1136. +1140: You have been jailed indefinitely.
  1137. +1141: You have been jailed for an unknown amount of time.
  1138. +1142: You will remain
  1139. +
  1140. +// @disguise
  1141. +1143: Please enter a Monster/NPC name/ID (usage: @disguise <name/ID>).
  1142. +1144: Character cannot be disguised while mounted.
  1143. +
  1144. +// @disguiseall
  1145. +1145: Please enter a Monster/NPC name/ID (usage: @disguiseall <name/ID>).
  1146. +
  1147. +// @disguiseguild
  1148. +1146: Please enter a mob name/ID and guild name/ID (usage: @disguiseguild <mob name/ID>, <guild name/ID>).
  1149. +
  1150. +// @undisguiseguild
  1151. +1147: Please enter guild name/ID (usage: @undisguiseguild <guild name/ID>).
  1152. +
  1153. +// @exp
  1154. +1148: Base Level: %d (%.3f%%) | Job Level: %d (%.3f%%)
  1155. +
  1156. +// @broadcast
  1157. +1149: Please enter a message (usage: @broadcast <message>).
  1158. +
  1159. +// @localbroadcast
  1160. +1150: Please enter a message (usage: @localbroadcast <message>).
  1161. +
  1162. +// @email
  1163. +1151: Please enter 2 emails (usage: @email <actual@email> <new@email>).
  1164. +
  1165. +// @effect
  1166. +1152: Please enter an effect number (usage: @effect <effect number>).
  1167. +
  1168. +// @npcmove
  1169. +1153: Usage: @npcmove <X> <Y> <npc_name>
  1170. +1154: NPC is not on this map.
  1171. +1155: NPC moved.
  1172. +
  1173. +// @addwarp
  1174. +1156: Usage: @addwarp <mapname> <X> <Y> <npc name>
  1175. +1157: Unknown map '%s'.
  1176. +1158: New warp NPC '%s' created.
  1177. +
  1178. +// @follow
  1179. +1159: Follow mode OFF.
  1180. +1160: Follow mode ON.
  1181. +
  1182. +// @storeall
  1183. +1161: You currently cannot open your storage.
  1184. +1162: All items stored.
  1185. +
  1186. +// @skillid
  1187. +1163: Please enter a skill name to look up (usage: @skillid <skill name>).
  1188. +1164: skill %d: %s (%s)
  1189. +
  1190. +// @useskill
  1191. +1165: Usage: @useskill <skill ID> <skill level> <target>
  1192. +
  1193. +// @displayskill
  1194. +1166: Usage: @displayskill <skill ID> {<skill level>}
  1195. +
  1196. +// @skilltree
  1197. +1167: Usage: @skilltree <skill ID> <target>
  1198. +1168: Player is using %s skill tree (%d basic points).
  1199. +1169: The player cannot use that skill.
  1200. +1170: Player requires level %d of skill %s.
  1201. +1171: The player meets all the requirements for that skill.
  1202. +
  1203. +// @marry
  1204. +1172: Usage: @marry <char name>
  1205. +1173: They are married... wish them well.
  1206. +1174: The two cannot wed because one is either a baby or already married.
  1207. +
  1208. +// @divorce
  1209. +1175: '%s' is not married.
  1210. +1176: '%s' and his/her partner are now divorced.
  1211. +
  1212. +// @changelook
  1213. +1177: Usage: @changelook {<position>} <view id>
  1214. +1178: Position: 1-Top 2-Middle 3-Bottom 4-Weapon 5-Shield 6-Shoes 7-Robe
  1215. +
  1216. +// @autotrade
  1217. +1179: Autotrade is not allowed on this map.
  1218. +1180: You cannot autotrade when dead.
  1219. +
  1220. +// @changegm
  1221. +1181: You need to be a Guild Master to use this command.
  1222. +1182: You cannot change guild leaders on this map.
  1223. +1183: Usage: @changegm <guild_member_name>
  1224. +1184: Target character must be online and be a guild member.
  1225. +
  1226. +// @changeleader
  1227. +1185: Usage: @changeleader <party_member_name>
  1228. +
  1229. +// @partyoption
  1230. +1186: Usage: @partyoption <pickup share: yes/no> <item distribution: yes/no>
  1231. +
  1232. +// @autoloot
  1233. +1187: Autolooting items with drop rates of %0.02f%% and below.
  1234. +1188: Autoloot is now off.
  1235. +
  1236. +// @autolootitem
  1237. +1189: Item not found.
  1238. +1190: You're already autolooting this item.
  1239. +1191: Your autolootitem list is full. Remove some items first with @autolootid -<item name or ID>.
  1240. +1192: Autolooting item: '%s'/'%s' {%d}
  1241. +1193: You're currently not autolooting this item.
  1242. +1194: Removed item: '%s'/'%s' {%d} from your autolootitem list.
  1243. +1195: You can have %d items on your autolootitem list.
  1244. +1196: To add an item to the list, use "@alootid +<item name or ID>". To remove an item, use "@alootid -<item name or ID>".
  1245. +1197: "@alootid reset" will clear your autolootitem list.
  1246. +1198: Your autolootitem list is empty.
  1247. +1199: Items on your autolootitem list:
  1248. +1200: Your autolootitem list has been reset.
  1249. +
  1250. +// @rain
  1251. +//1201: The rain has stopped.
  1252. +//1202: It has started to rain.
  1253. +
  1254. +// @snow
  1255. +1203: Snow has stopped falling.
  1256. +1204: It has started to snow.
  1257. +
  1258. +// @sakura
  1259. +1205: Cherry tree leaves no longer fall.
  1260. +1206: Cherry tree leaves have begun to fall.
  1261. +
  1262. +// @clouds
  1263. +1207: The clouds has disappear.
  1264. +1208: Clouds appear.
  1265. +
  1266. +// @clouds2
  1267. +1209: The alternative clouds disappear.
  1268. +1210: Alternative clouds appear.
  1269. +
  1270. +// @fog
  1271. +1211: The fog has gone.
  1272. +1212: Fog hangs over.
  1273. +
  1274. +// @leaves
  1275. +1213: Leaves no longer fall.
  1276. +1214: Fallen leaves fall.
  1277. +
  1278. +// @fireworks
  1279. +1215: Fireworks have ended.
  1280. +1216: Fireworks are launched.
  1281. +
  1282. +// @sound
  1283. +1217: Please enter a sound filename (usage: @sound <filename>).
  1284. +
  1285. +// @mobsearch
  1286. +1218: Please enter a monster name (usage: @mobsearch <monster name>).
  1287. +1219: Invalid mob ID %s!
  1288. +1220: Mob Search... %s %s
  1289. +
  1290. +// @cleanmap
  1291. +1221: All dropped items have been cleaned up.
  1292. +
  1293. +// @npctalk
  1294. +1222: Please enter the correct parameters (usage: @npctalk <npc name>, <message>).
  1295. +1223: Please enter the correct parameters (usage: @npctalkc <color> <npc name>, <message>).
  1296. +
  1297. +// @pettalk
  1298. +1224: Please enter a message (usage: @pettalk <message>).
  1299. +
  1300. +// @summon
  1301. +1225: Please enter a monster name (usage: @summon <monster name> {duration}).
  1302. +
  1303. +// @adjgroup
  1304. +1226: Usage: @adjgroup <group_id>
  1305. +1227: Specified group does not exist.
  1306. +1228: Group changed successfully.
  1307. +1229: Your group has changed.
  1308. +
  1309. +// @trade
  1310. +1230: Please enter a player name (usage: @trade <char name>).
  1311. +
  1312. +// @setbattleflag
  1313. +1231: Usage: @setbattleflag <flag> <value>
  1314. +1232: Unknown battle_config flag.
  1315. +1233: Set battle_config as requested.
  1316. +
  1317. +// @unmute
  1318. +1234: Please enter a player name (usage: @unmute <char name>).
  1319. +1235: Player is not muted.
  1320. +1236: Player unmuted.
  1321. +
  1322. +// @mute
  1323. +1237: Usage: @mute <time> <char name>
  1324. +
  1325. +// @identify
  1326. +1238: There are no items to appraise.
  1327. +
  1328. +// @mobinfo
  1329. +1239: Please enter a monster name/ID (usage: @mobinfo <monster_name_or_monster_ID>).
  1330. +1240: MVP Monster: '%s'/'%s'/'%s' (%d)
  1331. +1241: Monster: '%s'/'%s'/'%s' (%d)
  1332. +1242:  Lv:%d  HP:%d  Base EXP:%u  Job EXP:%u  HIT:%d  FLEE:%d
  1333. +1243:  DEF:%d  MDEF:%d  STR:%d  AGI:%d  VIT:%d  INT:%d  DEX:%d  LUK:%d
  1334. +1244:  ATK:%d~%d  Range:%d~%d~%d  Size:%s  Race: %s  Element: %s (Lv:%d)
  1335. +1245:  Drops:
  1336. +1246: This monster has no drops.
  1337. +1247:  MVP Bonus EXP:%u
  1338. +1248:  MVP Items:
  1339. +1249: This monster has no MVP prizes.
  1340. +
  1341. +// @showmobs
  1342. +1250: Invalid mob id %s!
  1343. +1251: Can't show boss mobs!
  1344. +1252: Mob Search... %s %s
  1345. +
  1346. +// @homlevel
  1347. +1253: Please enter a level adjustment (usage: @homlevel <number of levels>).
  1348. +
  1349. +// @homlevel / @homevolve / @homfriendly / @homhungry / @homtalk / @hominfo / @homstats
  1350. +1254: You do not have a homunculus.
  1351. +
  1352. +// @homevolve
  1353. +1255: Your homunculus doesn't evolve.
  1354. +
  1355. +// @makehomun
  1356. +1256: Please enter a homunculus ID (usage: @makehomun <homunculus id>).
  1357. +1257: Invalid Homunculus ID.
  1358. +
  1359. +// @homfriendly
  1360. +1258: Please enter a friendly value (usage: @homfriendly <friendly value [0-1000]>).
  1361. +
  1362. +// @homhungry
  1363. +1259: Please enter a hunger value (usage: @homhungry <hunger value [0-100]>).
  1364. +
  1365. +// @homtalk
  1366. +1260: Please enter a message (usage: @homtalk <message>).
  1367. +
  1368. +// @hominfo
  1369. +1261: Homunculus stats:
  1370. +1262: HP: %d/%d - SP: %d/%d
  1371. +1263: ATK: %d - MATK: %d~%d
  1372. +1264: Hungry: %d - Intimacy: %u
  1373. +1265: Stats: Str %d / Agi %d / Vit %d / Int %d / Dex %d / Luk %d
  1374. +
  1375. +// @homstats
  1376. +1266: Homunculus growth stats (Lv %d %s):
  1377. +1267: Max HP: %d (%d~%d)
  1378. +1268: Max SP: %d (%d~%d)
  1379. +1269: Str: %d (%d~%d)
  1380. +1270: Agi: %d (%d~%d)
  1381. +1271: Vit: %d (%d~%d)
  1382. +1272: Int: %d (%d~%d)
  1383. +1273: Dex: %d (%d~%d)
  1384. +1274: Luk: %d (%d~%d)
  1385. +
  1386. +// @homshuffle
  1387. +1275: Homunculus stats altered.
  1388. +
  1389. +// @iteminfo
  1390. +1276: Please enter an item name/ID (usage: @ii/@iteminfo <item name/ID>).
  1391. +1277: Item: '%s'/'%s'[%d] (%d) Type: %s | Extra Effect: %s
  1392. +1278: None
  1393. +1279: With script
  1394. +1280: NPC Buy:%dz, Sell:%dz | Weight: %.1f 
  1395. +1281:  - Available in the shops only.
  1396. +1282:  - Maximal monsters drop chance: %02.02f%%
  1397. +1283:  - Monsters don't drop this item.
  1398. +
  1399. +// @whodrops
  1400. +1284: Please enter item name/ID (usage: @whodrops <item name/ID>).
  1401. +1285: Item: '%s'[%d]
  1402. +1286:  - Item is not dropped by mobs.
  1403. +1287:  - Common mobs with highest drop chance (only max %d are listed):
  1404. +
  1405. +// @whereis
  1406. +1288: Please enter a monster name/ID (usage: @whereis <monster_name_or_monster_ID>).
  1407. +1289: %s spawns in:
  1408. +1290: This monster does not spawn normally.
  1409. +
  1410. +// @adopt
  1411. +1291: Usage: @adopt <father>,<mother>,<child>
  1412. +1292: Adopting: --%s--%s--%s--\n
  1413. +1293: Cannot find player %s online.
  1414. +1294: They are family... wish them luck.
  1415. +
  1416. +// @version
  1417. +1295: rAthena Version SVN r%s
  1418. +1296: Cannot determine SVN revision.
  1419. +
  1420. +// @mutearea
  1421. +1297: Please enter a time in minutes (usage: @mutearea/@stfu <time in minutes>).
  1422. +
  1423. +// @rates
  1424. +1298: Experience rates: Base %.2fx / Job %.2fx
  1425. +1299: Normal Drop Rates: Common %.2fx / Healing %.2fx / Usable %.2fx / Equipment %.2fx / Card %.2fx
  1426. +1300: Boss Drop Rates: Common %.2fx / Healing %.2fx / Usable %.2fx / Equipment %.2fx / Card %.2fx
  1427. +1301: Other Drop Rates: MvP %.2fx / Card-Based %.2fx / Treasure %.2fx
  1428. +
  1429. +// @me
  1430. +1302: Please enter a message (usage: @me <message>).
  1431. +
  1432. +// @size / @sizeall / @sizeguild
  1433. +1303: Size change applied.
  1434. +
  1435. +// @sizeguild
  1436. +1304: Please enter guild name/ID (usage: @sizeguild <size> <guild name/ID>).
  1437. +
  1438. +// @monsterignore
  1439. +1305: You are now immune to attacks.
  1440. +1306: Returned to normal state.
  1441. +
  1442. +// @fakename
  1443. +1307: Returned to real name.
  1444. +1308: You must enter a name.
  1445. +1309: Fake name must be at least two characters.
  1446. +1310: Fake name enabled.
  1447. +
  1448. +// @mapflag
  1449. +1311: Enabled Mapflags in this map:
  1450. +1312: Usage: "@mapflag monster_noteleport 1" (0=Off | 1=On)
  1451. +1313: Type "@mapflag available" to list the available mapflags.
  1452. +1314: Invalid flag name or flag.
  1453. +1315: Available Flags:
  1454. +
  1455. +// @showexp
  1456. +1316: Gained exp will not be shown.  
  1457. +1317: Gained exp is now shown.
  1458. +
  1459. +// @showzeny
  1460. +1318: Gained zeny will not be shown.
  1461. +1319: Gained zeny is now shown.
  1462. +
  1463. +// @showdelay
  1464. +1320: Skill delay failures will not be shown.
  1465. +1321: Skill delay failures are now shown.
  1466. +
  1467. +// @cash
  1468. +1322: Please enter an amount.
  1469. +
  1470. +// @clone
  1471. +1323: You must enter a player name or ID.
  1472. +
  1473. +// @feelreset
  1474. +1324: Reset 'Feeling' maps.
  1475. +
  1476. +// @noks
  1477. +1325: [ K.S Protection Inactive ]
  1478. +1326: [ K.S Protection Active - Option: Party ]
  1479. +1327: [ K.S Protection Active - Option: Self ]
  1480. +1328: [ K.S Protection Active - Option: Guild ]
  1481. +1329: Usage: @noks <self|party|guild>
  1482. +
  1483. +// @allowks
  1484. +1330: [ Map K.S Protection Active ]
  1485. +1331: [ Map K.S Protection Inactive ]
  1486. +
  1487. +// @itemlist
  1488. +1332: ------ %s items list of '%s' ------
  1489. +1333:  | equipped: 
  1490. +1334: garment, 
  1491. +1335: left accessory, 
  1492. +1336: body/armor, 
  1493. +1337: right hand, 
  1494. +1338: left hand, 
  1495. +1339: both hands, 
  1496. +1340: feet, 
  1497. +1341: right accessory, 
  1498. +1342: lower head, 
  1499. +1343: top head, 
  1500. +1344: lower/top head, 
  1501. +1345: mid head, 
  1502. +1346: lower/mid head, 
  1503. +1347: lower/mid/top head, 
  1504. +1348:  -> (pet egg, pet id: %u, named)
  1505. +1349:  -> (pet egg, pet id: %u, unnamed)
  1506. +1350:  -> (crafted item, creator id: %u, star crumbs %d, element %d)
  1507. +1351:  -> (produced item, creator id: %u)
  1508. +1352:  -> (card(s): 
  1509. +1353: No item found in this player's %s.
  1510. +1354: %d item(s) found in %d %s slots.
  1511. +
  1512. +// @delitem
  1513. +1355: Please enter an item name/ID, a quantity, and a player name (usage: #delitem <player> <item_name_or_ID> <quantity>).
  1514. +
  1515. +// @font
  1516. +1356: Returning to normal font.
  1517. +1357: Use @font <1-9> to change your message font.
  1518. +1358: Use 0 or no parameter to return to normal font.
  1519. +1359: Invalid font. Use a value from 0 to 9.
  1520. +1360: Font changed.
  1521. +1361: Already using this font.
  1522. +
  1523. +// @new_mount
  1524. +1362: NOTICE: If you crash with mount your LUA is outdated.
  1525. +1363: You have mounted.
  1526. +1364: You have released your mount.
  1527. +
  1528. +// @accinfo
  1529. +1365: Usage: @accinfo/@accountinfo <account_id/char name>
  1530. +1366: You may search partial name by making use of '%' in the search, ex. "@accinfo %Mario%" lists all characters whose name contains "Mario".
  1531. +
  1532. +// @set
  1533. +1367: Usage: @set <variable name> <value>
  1534. +1368: Usage: ex. "@set PoringCharVar 50"
  1535. +1369: Usage: ex. "@set PoringCharVarSTR$ Super Duper String"
  1536. +1370: Usage: ex. "@set PoringCharVarSTR$" outputs its value, Super Duper String.
  1537. +1371: NPC variables may not be used with @set.
  1538. +1372: Instance variables may not be used with @set.
  1539. +1373: %s value is now :%d
  1540. +1374: %s value is now :%s
  1541. +1375: %s is empty
  1542. +1376: %s data type is not supported :%u
  1543. +
  1544. +// @reloadquestdb
  1545. +1377: Quest database has been reloaded.
  1546. +
  1547. +// @addperm
  1548. +1378: Usage: %s <permission_name>
  1549. +1379: -- Permission List
  1550. +1380: '%s' is not a known permission.
  1551. +1381: User '%s' already possesses the '%s' permission.
  1552. +1382: User '%s' doesn't possess the '%s' permission.
  1553. +1383: -- User '%s' Permissions
  1554. +1384: User '%s' permissions updated successfully. The changes are temporary.
  1555. +
  1556. +// @unloadnpcfile
  1557. +1385: Usage: @unloadnpcfile <file name>
  1558. +1386: File unloaded. Be aware that mapflags and monsters spawned directly are not removed.
  1559. +1387: File not found.
  1560. +
  1561. +// General command messages
  1562. +1388: Charcommand failed (usage: %c<command> <char name> <parameters>).
  1563. +1389: %s failed. Player not found.
  1564. +
  1565. +// @cart
  1566. +1390: Unknown Cart (usage: %s <0-%d>).
  1567. +1391: You do not possess a cart to be removed
  1568. +1392: Cart Added.
  1569. +
  1570. +// atcommand.c::is_atcommand
  1571. +1393: You can't use commands while dead.
  1572. +
  1573. +// @clearstorage
  1574. +1394: Your storage was cleaned.
  1575. +1395: Your guild storage was cleaned.
  1576. +
  1577. +// @clearcart
  1578. +1396: You do not have a cart to be cleaned.
  1579. +1397: Your cart was cleaned.
  1580. +
  1581. +// @skillid (extension)
  1582. +1398: -- Displaying first %d partial matches:
  1583. +
  1584. +//Custom translations
  1585. +import: conf/import/msg_conf.txt
  1586. Index: src/char/char.c
  1587. --- src/char/char.c Base (BASE)
  1588. +++ src/char/char.c Locally Modified (Based On LOCAL)
  1589. @@ -30,10 +30,14 @@
  1590.  #include <stdlib.h>
  1591.  
  1592.  // private declarations
  1593. -#define CHAR_CONF_NAME	"conf/char_athena.conf"
  1594. -#define LAN_CONF_NAME	"conf/subnet_athena.conf"
  1595. -#define SQL_CONF_NAME	"conf/inter_athena.conf"
  1596. +char* CHAR_CONF_NAME;
  1597. +char* LAN_CONF_NAME;
  1598. +char* SQL_CONF_NAME;
  1599. +char* MSG_CONF_NAME;
  1600.  
  1601. +#define CHAR_MAX_MSG 200
  1602. +static char* msg_table[CHAR_MAX_MSG]; // Login Server messages_conf
  1603. +
  1604.  char char_db[256] = "char";
  1605.  char scdata_db[256] = "sc_data";
  1606.  char cart_db[256] = "cart_inventory";
  1607. @@ -4701,6 +4705,7 @@
  1608.  
  1609.  	flush_fifos();
  1610.  
  1611. +	do_final_msg();
  1612.  	do_final_mapif();
  1613.  	do_final_loginif();
  1614.  
  1615. @@ -4755,14 +4760,116 @@
  1616.  }
  1617.  
  1618.  
  1619. +/*======================================================
  1620. + * Login-Server help option info
  1621. + *------------------------------------------------------*/
  1622. +static void char_helpscreen(bool do_exit)
  1623. +{
  1624. +	ShowInfo("Usage: %s [options]\n", SERVER_NAME);
  1625. +	ShowInfo("\n");
  1626. +	ShowInfo("Options:\n");
  1627. +	ShowInfo("  -?, -h [--help]\t\tDisplays this help screen.\n");
  1628. +	ShowInfo("  -v [--version]\t\tDisplays the server's version.\n");
  1629. +	ShowInfo("  --run-once\t\t\tCloses server after loading (testing).\n");
  1630. +	ShowInfo("  --char-config <file>\t\tAlternative char-server configuration.\n");
  1631. +	ShowInfo("  --lan-config <file>\tAlternative lag configuration.\n");
  1632. +	ShowInfo("  --inter-config <file>\t\tAlternative inter-server configuration.\n");
  1633. +	ShowInfo("  --msg-config <file>\t\tAlternative message configuration.\n");
  1634. +	if( do_exit )
  1635. +		exit(EXIT_SUCCESS);
  1636. +}
  1637. +
  1638.  int do_init(int argc, char **argv)
  1639.  {
  1640. +	int i=0;
  1641.  	//Read map indexes
  1642.  	mapindex_init();
  1643.  	start_point.map = mapindex_name2id("new_zone01");
  1644.  
  1645. -	char_config_read((argc < 2) ? CHAR_CONF_NAME : argv[1]);
  1646. -	char_lan_config_read((argc > 3) ? argv[3] : LAN_CONF_NAME);
  1647. +	CHAR_CONF_NAME = "conf/char_athena.conf";
  1648. +	LAN_CONF_NAME =	"conf/subnet_athena.conf";
  1649. +	SQL_CONF_NAME =	"conf/inter_athena.conf";
  1650. +	MSG_CONF_NAME =	"conf/msg_conf/char_msg.conf";
  1651. +
  1652. +	msg_config_read(MSG_CONF_NAME); //for debug test
  1653. +
  1654. +	for( i = 1; i < argc ; i++ )
  1655. +	{
  1656. +		const char* arg = argv[i];
  1657. +
  1658. +		if( arg[0] != '-' && ( arg[0] != '/' || arg[1] == '-' ) )
  1659. +		{// -, -- and /
  1660. +			ShowError("Unknown option '%s'.\n", argv[i]);
  1661. +			exit(EXIT_FAILURE);
  1662. +		}
  1663. +		else if( (++arg)[0] == '-' )
  1664. +		{// long option
  1665. +			arg++;
  1666. +
  1667. +			if( strcmp(arg, "help") == 0 )
  1668. +			{
  1669. +				char_helpscreen(true);
  1670. +			}
  1671. +			else if( strcmp(arg, "version") == 0 )
  1672. +			{
  1673. +				display_versionscreen(true);
  1674. +			}
  1675. +			else if( strcmp(arg, "char-config") == 0 )
  1676. +			{
  1677. +				if( opt_has_next_value(arg, i, argc) )
  1678. +					CHAR_CONF_NAME = argv[++i];
  1679. +			}
  1680. +			else if( strcmp(arg, "lan-config") == 0 )
  1681. +			{
  1682. +				if( opt_has_next_value(arg, i, argc) )
  1683. +					LAN_CONF_NAME = argv[++i];
  1684. +			}
  1685. +			else if( strcmp(arg, "inter-config") == 0 )
  1686. +			{
  1687. +				if( opt_has_next_value(arg, i, argc) )
  1688. +					SQL_CONF_NAME = argv[++i];
  1689. +			}
  1690. +			else if( strcmp(arg, "msg-config") == 0 )
  1691. +			{
  1692. +				if( opt_has_next_value(arg, i, argc) )
  1693. +					MSG_CONF_NAME = argv[++i];
  1694. +			}
  1695. +			else if( strcmp(arg, "run-once") == 0 ) // close the login-server as soon as its done.. for testing [Celest]
  1696. +			{
  1697. +				runflag = CORE_ST_STOP;
  1698. +			}
  1699. +			else if( strcmp(arg, "display_msg") == 0 ) // close the login-server as soon as its done.. for testing [Celest]
  1700. +			{
  1701. +			    int j;
  1702. +			    ShowInfo("My msg_conf are\n");
  1703. +			    for(j=0; j<10; j++){
  1704. +				ShowInfo("j=%i => %s\n",j,msg_txt(j));
  1705. +			    }
  1706. +			    exit(EXIT_SUCCESS);
  1707. +			}
  1708. +			else
  1709. +			{
  1710. +				ShowError("Unknown option '%s'.\n", argv[i]);
  1711. +				exit(EXIT_FAILURE);
  1712. +			}
  1713. +		}
  1714. +		else switch( arg[0] )
  1715. +		{// short option
  1716. +			case '?':
  1717. +			case 'h':
  1718. +				char_helpscreen(true);
  1719. +				break;
  1720. +			case 'v':
  1721. +				display_versionscreen(true);
  1722. +				break;
  1723. +			default:
  1724. +				ShowError("Unknown option '%s'.\n", argv[i]);
  1725. +				exit(EXIT_FAILURE);
  1726. +		}
  1727. +	}
  1728. +	msg_config_read(MSG_CONF_NAME);
  1729. +	char_config_read(CHAR_CONF_NAME);
  1730. +	char_lan_config_read(LAN_CONF_NAME);
  1731.  	sql_config_read(SQL_CONF_NAME);
  1732.  
  1733.  	if (strcmp(userid, "s1")==0 && strcmp(passwd, "p1")==0) {
  1734. @@ -4846,3 +4953,13 @@
  1735.  
  1736.  	return 0;
  1737.  }
  1738. +
  1739. +int char_msg_config_read(char *cfgName){
  1740. +	return _msg_config_read(cfgName,CHAR_MAX_MSG,msg_table);
  1741. +}
  1742. +const char* char_msg_txt(int msg_number){
  1743. +	return _msg_txt(msg_number,CHAR_MAX_MSG,msg_table);
  1744. +}
  1745. +void char_do_final_msg(void){
  1746. +	return _do_final_msg(CHAR_MAX_MSG,msg_table);
  1747. +}
  1748. \ No newline at end of file
  1749. Index: src/char/char.h
  1750. --- src/char/char.h Base (BASE)
  1751. +++ src/char/char.h Locally Modified (Based On LOCAL)
  1752. @@ -6,6 +6,7 @@
  1753.  
  1754.  #include "../config/core.h"
  1755.  #include "../common/core.h" // CORE_ST_LAST
  1756. +#include "../common/msg_conf.h"
  1757.  
  1758.  enum E_CHARSERVER_ST
  1759.  {
  1760. @@ -20,6 +21,13 @@
  1761.  
  1762.  #define DEFAULT_AUTOSAVE_INTERVAL 300*1000
  1763.  
  1764. +#define msg_config_read(cfgName) char_msg_config_read(cfgName)
  1765. +#define msg_txt(msg_number) char_msg_txt(msg_number)
  1766. +#define do_final_msg() char_do_final_msg()
  1767. +int char_msg_config_read(char *cfgName);
  1768. +const char* char_msg_txt(int msg_number);
  1769. +void char_do_final_msg(void);
  1770. +
  1771.  enum {
  1772.  	TABLE_INVENTORY,
  1773.  	TABLE_CART,
  1774. Index: src/char/int_auction.c
  1775. --- src/char/int_auction.c Base (BASE)
  1776. +++ src/char/int_auction.c Locally Modified (Based On LOCAL)
  1777. @@ -145,12 +145,12 @@
  1778.  	{
  1779.  		if( auction->buyer_id )
  1780.  		{
  1781. -			mail_sendmail(0, "Auction Manager", auction->buyer_id, auction->buyer_name, "Auction", "Thanks, you won the auction!.", 0, &auction->item);
  1782. +			mail_sendmail(0, msg_txt(200), auction->buyer_id, auction->buyer_name, msg_txt(201), msg_txt(202), 0, &auction->item);
  1783.  			mapif_Auction_message(auction->buyer_id, 6); // You have won the auction
  1784. -			mail_sendmail(0, "Auction Manager", auction->seller_id, auction->seller_name, "Auction", "Payment for your auction!.", auction->price, NULL);
  1785. +			mail_sendmail(0, msg_txt(200), auction->seller_id, auction->seller_name, msg_txt(201), msg_txt(203), auction->price, NULL);
  1786.  		}
  1787.  		else
  1788. -			mail_sendmail(0, "Auction Manager", auction->seller_id, auction->seller_name, "Auction", "No buyers have been found for your auction.", 0, &auction->item);
  1789. +			mail_sendmail(0, msg_txt(200), auction->seller_id, auction->seller_name, msg_txt(201), msg_txt(204), 0, &auction->item);
  1790.  
  1791.  		ShowInfo("Auction End: id %u.\n", auction->auction_id);
  1792.  
  1793. @@ -353,7 +353,7 @@
  1794.  		return;
  1795.  	}
  1796.  
  1797. -	mail_sendmail(0, "Auction Manager", auction->seller_id, auction->seller_name, "Auction", "Auction canceled.", 0, &auction->item);
  1798. +	mail_sendmail(0, msg_txt(200), auction->seller_id, auction->seller_name, msg_txt(201), msg_txt(205), 0, &auction->item);
  1799.  	auction_delete(auction);
  1800.  
  1801.  	mapif_Auction_cancel(fd, char_id, 0); // The auction has been canceled
  1802. @@ -392,9 +392,9 @@
  1803.  	}
  1804.  
  1805.  	// Send Money to Seller
  1806. -	mail_sendmail(0, "Auction Manager", auction->seller_id, auction->seller_name, "Auction", "Auction closed.", auction->price, NULL);
  1807. +	mail_sendmail(0, msg_txt(200), auction->seller_id, auction->seller_name, msg_txt(201), msg_txt(206), auction->price, NULL);
  1808.  	// Send Item to Buyer
  1809. -	mail_sendmail(0, "Auction Manager", auction->buyer_id, auction->buyer_name, "Auction", "Auction winner.", 0, &auction->item);
  1810. +	mail_sendmail(0, msg_txt(200), auction->buyer_id, auction->buyer_name, msg_txt(201), msg_txt(207), 0, &auction->item);
  1811.  	mapif_Auction_message(auction->buyer_id, 6); // You have won the auction
  1812.  	auction_delete(auction);
  1813.  
  1814. @@ -433,11 +433,11 @@
  1815.  	{ // Send Money back to the previous Buyer
  1816.  		if( auction->buyer_id != char_id )
  1817.  		{
  1818. -			mail_sendmail(0, "Auction Manager", auction->buyer_id, auction->buyer_name, "Auction", "Someone has placed a higher bid.", auction->price, NULL);
  1819. +			mail_sendmail(0, msg_txt(200), auction->buyer_id, auction->buyer_name, msg_txt(201), msg_txt(208), auction->price, NULL);
  1820.  			mapif_Auction_message(auction->buyer_id, 7); // You have failed to win the auction
  1821.  		}
  1822.  		else
  1823. -			mail_sendmail(0, "Auction Manager", auction->buyer_id, auction->buyer_name, "Auction", "You have placed a higher bid.", auction->price, NULL);
  1824. +			mail_sendmail(0, msg_txt(200), auction->buyer_id, auction->buyer_name, msg_txt(201), msg_txt(209), auction->price, NULL);
  1825.  	}
  1826.  
  1827.  	auction->buyer_id = char_id;
  1828. @@ -448,9 +448,9 @@
  1829.  	{ // Automatic won the auction
  1830.  		mapif_Auction_bid(fd, char_id, bid - auction->buynow, 1); // You have successfully bid in the auction
  1831.  
  1832. -		mail_sendmail(0, "Auction Manager", auction->buyer_id, auction->buyer_name, "Auction", "You have won the auction.", 0, &auction->item);
  1833. +		mail_sendmail(0, msg_txt(200), auction->buyer_id, auction->buyer_name, msg_txt(201), msg_txt(210), 0, &auction->item);
  1834.  		mapif_Auction_message(char_id, 6); // You have won the auction
  1835. -		mail_sendmail(0, "Auction Manager", auction->seller_id, auction->seller_name, "Auction", "Payment for your auction!.", auction->buynow, NULL);
  1836. +		mail_sendmail(0, msg_txt(200), auction->seller_id, auction->seller_name, msg_txt(201), msg_txt(211), auction->buynow, NULL);
  1837.  
  1838.  		auction_delete(auction);
  1839.  		return;
  1840. Index: src/char/inter.c
  1841. --- src/char/inter.c Base (BASE)
  1842. +++ src/char/inter.c Locally Modified (Based On LOCAL)
  1843. @@ -67,70 +67,6 @@
  1844.  static DBMap* wis_db = NULL; // int wis_id -> struct WisData*
  1845.  static int wis_dellist[WISDELLIST_MAX], wis_delnum;
  1846.  
  1847. -#define MAX_JOB_NAMES 106
  1848. -static char* msg_table[MAX_JOB_NAMES]; //  messages 550 ~ 655 are job names
  1849. -
  1850. -const char* msg_txt(int msg_number) {
  1851. -	msg_number -= 550;
  1852. -	if (msg_number >= 0 && msg_number < MAX_JOB_NAMES &&
  1853. -	    msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0')
  1854. -		return msg_table[msg_number];
  1855. -
  1856. -	return "Unknown";
  1857. -}
  1858. -
  1859. -/*==========================================
  1860. - * Read Message Data -- at char server we only keep job names.
  1861. - *------------------------------------------*/
  1862. -int msg_config_read(const char* cfgName) {
  1863. -	int msg_number;
  1864. -	char line[1024], w1[1024], w2[1024];
  1865. -	FILE *fp;
  1866. -	static int called = 1;
  1867. -
  1868. -	if ((fp = fopen(cfgName, "r")) == NULL) {
  1869. -		ShowError("Messages file not found: %s\n", cfgName);
  1870. -		return 1;
  1871. -	}
  1872. -
  1873. -	if ((--called) == 0)
  1874. -		memset(msg_table, 0, sizeof(msg_table[0]) * MAX_JOB_NAMES);
  1875. -
  1876. -	while(fgets(line, sizeof(line), fp) ) {
  1877. -		if (line[0] == '/' && line[1] == '/')
  1878. -			continue;
  1879. -		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
  1880. -			continue;
  1881. -
  1882. -		if (strcmpi(w1, "import") == 0)
  1883. -			msg_config_read(w2);
  1884. -		else {
  1885. -			msg_number = atoi(w1);
  1886. -			if( msg_number < 550 || msg_number > (550+MAX_JOB_NAMES) )
  1887. -				continue;
  1888. -			msg_number -= 550;
  1889. -			if (msg_number >= 0 && msg_number < MAX_JOB_NAMES) {
  1890. -				if (msg_table[msg_number] != NULL)
  1891. -					aFree(msg_table[msg_number]);
  1892. -				msg_table[msg_number] = (char *)aMalloc((strlen(w2) + 1)*sizeof (char));
  1893. -				strcpy(msg_table[msg_number],w2);
  1894. -			}
  1895. -		}
  1896. -	}
  1897. -
  1898. -	fclose(fp);
  1899. -
  1900. -	return 0;
  1901. -}
  1902. -
  1903. -/*==========================================
  1904. - * Cleanup Message Data
  1905. - *------------------------------------------*/
  1906. -void do_final_msg(void) {
  1907. -	int i;
  1908. -	for (i = 0; i < MAX_JOB_NAMES; i++)
  1909. -		aFree(msg_table[i]);
  1910. -}
  1911.  /* from pc.c due to @accinfo. any ideas to replace this crap are more than welcome. */
  1912.  const char* job_name(int class_) {
  1913.  	switch (class_) {
  1914. @@ -141,7 +77,7 @@
  1915.  		case JOB_ACOLYTE:
  1916.  		case JOB_MERCHANT:
  1917.  		case JOB_THIEF:
  1918. -			return msg_txt(550 - JOB_NOVICE+class_);
  1919. +			return msg_txt(JOB_NOVICE+class_);
  1920.  
  1921.  		case JOB_KNIGHT:
  1922.  		case JOB_PRIEST:
  1923. @@ -149,10 +85,10 @@
  1924.  		case JOB_BLACKSMITH:
  1925.  		case JOB_HUNTER:
  1926.  		case JOB_ASSASSIN:
  1927. -			return msg_txt(557 - JOB_KNIGHT+class_);
  1928. +			return msg_txt(7 - JOB_KNIGHT+class_);
  1929.  
  1930.  		case JOB_KNIGHT2:
  1931. -			return msg_txt(557);
  1932. +			return msg_txt(7);
  1933.  
  1934.  		case JOB_CRUSADER:
  1935.  		case JOB_MONK:
  1936. @@ -161,20 +97,20 @@
  1937.  		case JOB_ALCHEMIST:
  1938.  		case JOB_BARD:
  1939.  		case JOB_DANCER:
  1940. -			return msg_txt(563 - JOB_CRUSADER+class_);
  1941. +			return msg_txt(13 - JOB_CRUSADER+class_);
  1942.  
  1943.  		case JOB_CRUSADER2:
  1944. -			return msg_txt(563);
  1945. +			return msg_txt(13);
  1946.  
  1947.  		case JOB_WEDDING:
  1948.  		case JOB_SUPER_NOVICE:
  1949.  		case JOB_GUNSLINGER:
  1950.  		case JOB_NINJA:
  1951.  		case JOB_XMAS:
  1952. -			return msg_txt(570 - JOB_WEDDING+class_);
  1953. +			return msg_txt(20 - JOB_WEDDING+class_);
  1954.  
  1955.  		case JOB_SUMMER:
  1956. -			return msg_txt(621);
  1957. +			return msg_txt(71);
  1958.  
  1959.  		case JOB_NOVICE_HIGH:
  1960.  		case JOB_SWORDMAN_HIGH:
  1961. @@ -183,7 +119,7 @@
  1962.  		case JOB_ACOLYTE_HIGH:
  1963.  		case JOB_MERCHANT_HIGH:
  1964.  		case JOB_THIEF_HIGH:
  1965. -			return msg_txt(575 - JOB_NOVICE_HIGH+class_);
  1966. +			return msg_txt(25 - JOB_NOVICE_HIGH+class_);
  1967.  
  1968.  		case JOB_LORD_KNIGHT:
  1969.  		case JOB_HIGH_PRIEST:
  1970. @@ -191,10 +127,10 @@
  1971.  		case JOB_WHITESMITH:
  1972.  		case JOB_SNIPER:
  1973.  		case JOB_ASSASSIN_CROSS:
  1974. -			return msg_txt(582 - JOB_LORD_KNIGHT+class_);
  1975. +			return msg_txt(32 - JOB_LORD_KNIGHT+class_);
  1976.  
  1977.  		case JOB_LORD_KNIGHT2:
  1978. -			return msg_txt(582);
  1979. +			return msg_txt(32);
  1980.  
  1981.  		case JOB_PALADIN:
  1982.  		case JOB_CHAMPION:
  1983. @@ -203,10 +139,10 @@
  1984.  		case JOB_CREATOR:
  1985.  		case JOB_CLOWN:
  1986.  		case JOB_GYPSY:
  1987. -			return msg_txt(588 - JOB_PALADIN + class_);
  1988. +			return msg_txt(38 - JOB_PALADIN + class_);
  1989.  
  1990.  		case JOB_PALADIN2:
  1991. -			return msg_txt(588);
  1992. +			return msg_txt(38);
  1993.  
  1994.  		case JOB_BABY:
  1995.  		case JOB_BABY_SWORDMAN:
  1996. @@ -215,7 +151,7 @@
  1997.  		case JOB_BABY_ACOLYTE:
  1998.  		case JOB_BABY_MERCHANT:
  1999.  		case JOB_BABY_THIEF:
  2000. -			return msg_txt(595 - JOB_BABY + class_);
  2001. +			return msg_txt(45 - JOB_BABY + class_);
  2002.  
  2003.  		case JOB_BABY_KNIGHT:
  2004.  		case JOB_BABY_PRIEST:
  2005. @@ -223,10 +159,10 @@
  2006.  		case JOB_BABY_BLACKSMITH:
  2007.  		case JOB_BABY_HUNTER:
  2008.  		case JOB_BABY_ASSASSIN:
  2009. -			return msg_txt(602 - JOB_BABY_KNIGHT + class_);
  2010. +			return msg_txt(52 - JOB_BABY_KNIGHT + class_);
  2011.  
  2012.  		case JOB_BABY_KNIGHT2:
  2013. -			return msg_txt(602);
  2014. +			return msg_txt(52);
  2015.  
  2016.  		case JOB_BABY_CRUSADER:
  2017.  		case JOB_BABY_MONK:
  2018. @@ -235,26 +171,26 @@
  2019.  		case JOB_BABY_ALCHEMIST:
  2020.  		case JOB_BABY_BARD:
  2021.  		case JOB_BABY_DANCER:
  2022. -			return msg_txt(608 - JOB_BABY_CRUSADER + class_);
  2023. +			return msg_txt(58 - JOB_BABY_CRUSADER + class_);
  2024.  
  2025.  		case JOB_BABY_CRUSADER2:
  2026. -			return msg_txt(608);
  2027. +			return msg_txt(58);
  2028.  
  2029.  		case JOB_SUPER_BABY:
  2030. -			return msg_txt(615);
  2031. +			return msg_txt(65);
  2032.  
  2033.  		case JOB_TAEKWON:
  2034. -			return msg_txt(616);
  2035. +			return msg_txt(66);
  2036.  		case JOB_STAR_GLADIATOR:
  2037.  		case JOB_STAR_GLADIATOR2:
  2038. -			return msg_txt(617);
  2039. +			return msg_txt(67);
  2040.  		case JOB_SOUL_LINKER:
  2041. -			return msg_txt(618);
  2042. +			return msg_txt(68);
  2043.  
  2044.  		case JOB_GANGSI:
  2045.  		case JOB_DEATH_KNIGHT:
  2046.  		case JOB_DARK_COLLECTOR:
  2047. -			return msg_txt(622 - JOB_GANGSI+class_);
  2048. +			return msg_txt(72 - JOB_GANGSI+class_);
  2049.  
  2050.  		case JOB_RUNE_KNIGHT:
  2051.  		case JOB_WARLOCK:
  2052. @@ -262,7 +198,7 @@
  2053.  		case JOB_ARCH_BISHOP:
  2054.  		case JOB_MECHANIC:
  2055.  		case JOB_GUILLOTINE_CROSS:
  2056. -			return msg_txt(625 - JOB_RUNE_KNIGHT+class_);
  2057. +			return msg_txt(75 - JOB_RUNE_KNIGHT+class_);
  2058.  
  2059.  		case JOB_RUNE_KNIGHT_T:
  2060.  		case JOB_WARLOCK_T:
  2061. @@ -270,7 +206,7 @@
  2062.  		case JOB_ARCH_BISHOP_T:
  2063.  		case JOB_MECHANIC_T:
  2064.  		case JOB_GUILLOTINE_CROSS_T:
  2065. -			return msg_txt(625 - JOB_RUNE_KNIGHT_T+class_);
  2066. +			return msg_txt(75 - JOB_RUNE_KNIGHT_T+class_);
  2067.  
  2068.  		case JOB_ROYAL_GUARD:
  2069.  		case JOB_SORCERER:
  2070. @@ -279,7 +215,7 @@
  2071.  		case JOB_SURA:
  2072.  		case JOB_GENETIC:
  2073.  		case JOB_SHADOW_CHASER:
  2074. -			return msg_txt(631 - JOB_ROYAL_GUARD+class_);
  2075. +			return msg_txt(81 - JOB_ROYAL_GUARD+class_);
  2076.  
  2077.  		case JOB_ROYAL_GUARD_T:
  2078.  		case JOB_SORCERER_T:
  2079. @@ -288,23 +224,23 @@
  2080.  		case JOB_SURA_T:
  2081.  		case JOB_GENETIC_T:
  2082.  		case JOB_SHADOW_CHASER_T:
  2083. -			return msg_txt(631 - JOB_ROYAL_GUARD_T+class_);
  2084. +			return msg_txt(81 - JOB_ROYAL_GUARD_T+class_);
  2085.  
  2086.  		case JOB_RUNE_KNIGHT2:
  2087.  		case JOB_RUNE_KNIGHT_T2:
  2088. -			return msg_txt(625);
  2089. +			return msg_txt(75);
  2090.  
  2091.  		case JOB_ROYAL_GUARD2:
  2092.  		case JOB_ROYAL_GUARD_T2:
  2093. -			return msg_txt(631);
  2094. +			return msg_txt(81);
  2095.  
  2096.  		case JOB_RANGER2:
  2097.  		case JOB_RANGER_T2:
  2098. -			return msg_txt(627);
  2099. +			return msg_txt(77);
  2100.  
  2101.  		case JOB_MECHANIC2:
  2102.  		case JOB_MECHANIC_T2:
  2103. -			return msg_txt(629);
  2104. +			return msg_txt(79);
  2105.  
  2106.  		case JOB_BABY_RUNE:
  2107.  		case JOB_BABY_WARLOCK:
  2108. @@ -319,30 +255,30 @@
  2109.  		case JOB_BABY_SURA:
  2110.  		case JOB_BABY_GENETIC:
  2111.  		case JOB_BABY_CHASER:
  2112. -			return msg_txt(638 - JOB_BABY_RUNE+class_);
  2113. +			return msg_txt(88 - JOB_BABY_RUNE+class_);
  2114.  
  2115.  		case JOB_BABY_RUNE2:
  2116. -			return msg_txt(638);
  2117. +			return msg_txt(88);
  2118.  
  2119.  		case JOB_BABY_GUARD2:
  2120. -			return msg_txt(644);
  2121. +			return msg_txt(94);
  2122.  
  2123.  		case JOB_BABY_RANGER2:
  2124. -			return msg_txt(640);
  2125. +			return msg_txt(90);
  2126.  
  2127.  		case JOB_BABY_MECHANIC2:
  2128. -			return msg_txt(642);
  2129. +			return msg_txt(92);
  2130.  
  2131.  		case JOB_SUPER_NOVICE_E:
  2132.  		case JOB_SUPER_BABY_E:
  2133. -			return msg_txt(651 - JOB_SUPER_NOVICE_E+class_);
  2134. +			return msg_txt(101 - JOB_SUPER_NOVICE_E+class_);
  2135.  
  2136.  		case JOB_KAGEROU:
  2137.  		case JOB_OBORO:
  2138. -			return msg_txt(653 - JOB_KAGEROU+class_);
  2139. +			return msg_txt(103 - JOB_KAGEROU+class_);
  2140.  
  2141.  		default:
  2142. -			return msg_txt(655);
  2143. +			return msg_txt(105);
  2144.  	}
  2145.  }
  2146.  
  2147. @@ -791,7 +727,6 @@
  2148.  	inter_auction_sql_init();
  2149.  
  2150.  	geoip_readdb();
  2151. -	msg_config_read("conf/msg_athena.conf");
  2152.  	return 0;
  2153.  }
  2154.  
  2155. @@ -812,7 +747,6 @@
  2156.  
  2157.  	if (accreg_pt) aFree(accreg_pt);
  2158.  
  2159. -	do_final_msg();
  2160.  	return;
  2161.  }
  2162.  
  2163. Index: src/common/Makefile.in
  2164. --- src/common/Makefile.in Base (BASE)
  2165. +++ src/common/Makefile.in Locally Modified (Based On LOCAL)
  2166. @@ -3,7 +3,8 @@
  2167.  	obj_all/nullpo.o obj_all/malloc.o obj_all/showmsg.o obj_all/strlib.o obj_all/utils.o \
  2168.  	obj_all/grfio.o obj_all/mapindex.o obj_all/ers.o obj_all/md5calc.o \
  2169.  	obj_all/minicore.o obj_all/minisocket.o obj_all/minimalloc.o obj_all/random.o obj_all/des.o \
  2170. -	obj_all/conf.o obj_all/thread.o obj_all/mutex.o obj_all/raconf.o obj_all/mempool.o
  2171. +	obj_all/conf.o obj_all/thread.o obj_all/mutex.o obj_all/raconf.o obj_all/mempool.o \
  2172. +	obj_all/msg_conf.o
  2173.  
  2174.  COMMON_H = $(shell ls ../common/*.h)
  2175.  
  2176. Index: src/common/core.c
  2177. --- src/common/core.c Base (BASE)
  2178. +++ src/common/core.c Locally Modified (Based On LOCAL)
  2179. @@ -1,17 +1,19 @@
  2180.  // Copyright (c) Athena Dev Teams - Licensed under GNU GPL
  2181.  // For more information, see LICENCE in the main folder
  2182.  
  2183. -#include "../common/mmo.h"
  2184. -#include "../common/showmsg.h"
  2185. -#include "../common/malloc.h"
  2186. +#include "mmo.h"
  2187. +#include "showmsg.h"
  2188. +#include "malloc.h"
  2189.  #include "core.h"
  2190.  #ifndef MINICORE
  2191. -#include "../common/db.h"
  2192. -#include "../common/socket.h"
  2193. -#include "../common/timer.h"
  2194. -#include "../common/thread.h"
  2195. -#include "../common/mempool.h"
  2196. -#include "../common/sql.h"
  2197. +#include "db.h"
  2198. +#include "socket.h"
  2199. +#include "timer.h"
  2200. +#include "thread.h"
  2201. +#include "mempool.h"
  2202. +#include "sql.h"
  2203. +#include "cbasetypes.h"
  2204. +#include "msg_conf.h"
  2205.  #endif
  2206.  
  2207.  #include <stdio.h>
  2208. @@ -258,6 +260,30 @@
  2209.  }
  2210.  #endif
  2211.  
  2212. +
  2213. +bool opt_has_next_value(const char* option, int i, int argc)
  2214. +{
  2215. +	if( i >= argc-1 )
  2216. +	{
  2217. +		ShowWarning("Missing value for option '%s'.\n", option);
  2218. +		return false;
  2219. +	}
  2220. +
  2221. +	return true;
  2222. +}
  2223. +
  2224. +/*======================================================
  2225. + * Servers Version Screen [MC Cameri]
  2226. + *------------------------------------------------------*/
  2227. +void display_versionscreen(bool do_exit)
  2228. +{
  2229. +	ShowInfo(CL_WHITE"rAthena SVN version: %s" CL_RESET"\n", get_svn_revision());
  2230. +	ShowInfo(CL_GREEN"Website/Forum:"CL_RESET"\thttp://rathena.org/\n");
  2231. +	ShowInfo(CL_GREEN"IRC Channel:"CL_RESET"\tirc://irc.rathena.net/#rathena\n");
  2232. +	ShowInfo("Open "CL_WHITE"readme.txt"CL_RESET" for more information.\n");
  2233. +	if( do_exit )
  2234. +		exit(EXIT_SUCCESS);
  2235. +}
  2236.  /*======================================
  2237.   *	CORE : Display title
  2238.   *  ASCII By CalciumKid 1/12/2011
  2239. @@ -324,7 +350,6 @@
  2240.  	mempool_init();
  2241.  	db_init();
  2242.  	signals_init();
  2243. -
  2244.  #ifdef _WIN32
  2245.  	cevents_init();
  2246.  #endif
  2247. Index: src/common/core.h
  2248. --- src/common/core.h Base (BASE)
  2249. +++ src/common/core.h Locally Modified (Based On LOCAL)
  2250. @@ -4,6 +4,8 @@
  2251.  #ifndef	_CORE_H_
  2252.  #define	_CORE_H_
  2253.  
  2254. +#include "cbasetypes.h"
  2255. +
  2256.  /* so that developers with --enable-debug can raise signals from any section of the code they'd like */
  2257.  #ifdef DEBUG
  2258.  	#include <signal.h>
  2259. @@ -31,6 +33,8 @@
  2260.  extern char SERVER_TYPE;
  2261.  
  2262.  extern int parse_console(const char* buf);
  2263. +bool opt_has_next_value(const char* option, int i, int argc);
  2264. +void display_versionscreen(bool do_exit);
  2265.  extern const char *get_svn_revision(void);
  2266.  extern int do_init(int,char**);
  2267.  extern void set_server_type(void);
  2268. Index: src/common/msg_conf.c
  2269. --- src/common/msg_conf.c No Base Revision
  2270. +++ src/common/msg_conf.c Locally New
  2271. @@ -0,0 +1,72 @@
  2272. +#include <stdio.h>
  2273. +#include <string.h>
  2274. +#include <stdlib.h>
  2275. +
  2276. +#include "malloc.h"
  2277. +#include "msg_conf.h"
  2278. +#include "showmsg.h"
  2279. +
  2280. +//-----------------------------------------------------------
  2281. +// Return the message string of the specified number by [Yor]
  2282. +//-----------------------------------------------------------
  2283. +
  2284. +const char* _msg_txt(int msg_number,int size, char ** msg_table)
  2285. +{
  2286. +    if (msg_number >= 0 && msg_number < size &&
  2287. +	    msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0')
  2288. +	return msg_table[msg_number];
  2289. +
  2290. +    return "??";
  2291. +}
  2292. +
  2293. +/*==========================================
  2294. + * Read Message Data
  2295. + *------------------------------------------*/
  2296. +int _msg_config_read(const char* cfgName,int size, char ** msg_table)
  2297. +{
  2298. +    int msg_number;
  2299. +    char line[1024], w1[1024], w2[1024];
  2300. +    FILE *fp;
  2301. +    static int called = 1;
  2302. +
  2303. +    if ((fp = fopen(cfgName, "r")) == NULL) {
  2304. +	ShowError("Messages file not found: %s\n", cfgName);
  2305. +	return 1;
  2306. +    }
  2307. +
  2308. +    if ((--called) == 0)
  2309. +	memset(msg_table, 0, sizeof (msg_table[0]) * size);
  2310. +
  2311. +    while (fgets(line, sizeof (line), fp)) {
  2312. +	if (line[0] == '/' && line[1] == '/')
  2313. +	    continue;
  2314. +	if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
  2315. +	    continue;
  2316. +
  2317. +	if (strcmpi(w1, "import") == 0)
  2318. +	    _msg_config_read(w2,size,msg_table);
  2319. +	else {
  2320. +	    msg_number = atoi(w1);
  2321. +	    if (msg_number >= 0 && msg_number < size) {
  2322. +		if (msg_table[msg_number] != NULL)
  2323. +		    aFree(msg_table[msg_number]);
  2324. +		msg_table[msg_number] = (char *) aMalloc((strlen(w2) + 1) * sizeof (char));
  2325. +		strcpy(msg_table[msg_number], w2);
  2326. +	    }
  2327. +	}
  2328. +    }
  2329. +
  2330. +    fclose(fp);
  2331. +    ShowInfo("Finished reading %s.\n",cfgName);
  2332. +
  2333. +    return 0;
  2334. +}
  2335. +
  2336. +/*==========================================
  2337. + * Cleanup Message Data
  2338. + *------------------------------------------*/
  2339. +void _do_final_msg(int size, char ** msg_table){
  2340. +    int i;
  2341. +    for (i = 0; i < size; i++)
  2342. +	aFree(msg_table[i]);
  2343. +}
  2344. \ No newline at end of file
  2345. Index: src/common/msg_conf.h
  2346. --- src/common/msg_conf.h No Base Revision
  2347. +++ src/common/msg_conf.h Locally New
  2348. @@ -0,0 +1,20 @@
  2349. +// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
  2350. +// For more information, see LICENCE in the main folder
  2351. +
  2352. +#ifndef MSG_CONF_H
  2353. +#define	MSG_CONF_H
  2354. +
  2355. +#ifdef	__cplusplus
  2356. +extern "C" {
  2357. +#endif
  2358. +
  2359. +const char* _msg_txt(int msg_number,int size, char ** msg_table);
  2360. +int _msg_config_read(const char* cfgName,int size, char ** msg_table);
  2361. +void _do_final_msg(int size, char ** msg_table);
  2362. +
  2363. +#ifdef	__cplusplus
  2364. +}
  2365. +#endif
  2366. +
  2367. +#endif	/* MSG_CONF_H */
  2368. +
  2369. Index: src/common/sql.c
  2370. --- src/common/sql.c Base (BASE)
  2371. +++ src/common/sql.c Locally Modified (Based On LOCAL)
  2372. @@ -15,6 +15,8 @@
  2373.  #include <string.h>// strlen/strnlen/memcpy/memset
  2374.  #include <stdlib.h>// strtoul
  2375.  
  2376. +#define SQL_CONF_NAME "conf/inter_athena.conf"
  2377. +
  2378.  void ra_mysql_error_handler(unsigned int ecode);
  2379.  
  2380.  int mysql_reconnect_type;
  2381. @@ -1020,5 +1022,5 @@
  2382.  }
  2383.  
  2384.  void Sql_Init(void) {
  2385. -	Sql_inter_server_read("conf/inter_athena.conf",true);
  2386. +	Sql_inter_server_read(SQL_CONF_NAME,true);
  2387.  }
  2388. Index: src/login/login.c
  2389. --- src/login/login.c Base (BASE)
  2390. +++ src/login/login.c Locally Modified (Based On LOCAL)
  2391. @@ -10,6 +10,7 @@
  2392.  #include "../common/socket.h"
  2393.  #include "../common/strlib.h"
  2394.  #include "../common/timer.h"
  2395. +#include "../common/msg_conf.h"
  2396.  #include "account.h"
  2397.  #include "ipban.h"
  2398.  #include "login.h"
  2399. @@ -19,6 +20,12 @@
  2400.  #include <stdlib.h>
  2401.  #include <string.h>
  2402.  
  2403. +char* LOGIN_CONF_NAME;
  2404. +char* LAN_CONF_NAME;
  2405. +char* MSG_CONF_NAME;
  2406. +
  2407. +#define LOGIN_MAX_MSG 30
  2408. +static char* msg_table[LOGIN_MAX_MSG]; // Login Server messages_conf
  2409.  struct Login_Config login_config;
  2410.  
  2411.  int login_fd; // login server socket
  2412. @@ -1238,6 +1245,32 @@
  2413.  	}
  2414.  }
  2415.  
  2416. +/* Log the result of a failed connection attempt by sd
  2417. + * result: nb (msg define in conf)
  2418. +    0 = Unregistered ID
  2419. +    1 = Incorrect Password
  2420. +    2 = This ID is expired
  2421. +    3 = Rejected from Server
  2422. +    4 = You have been blocked by the GM Team
  2423. +    5 = Your Game's EXE file is not the latest version
  2424. +    6 = Your are Prohibited to log in until %s
  2425. +    7 = Server is jammed due to over populated
  2426. +    8 = No more accounts may be connected from this company
  2427. +    9 = MSI_REFUSE_BAN_BY_DBA
  2428. +    10 = MSI_REFUSE_EMAIL_NOT_CONFIRMED
  2429. +    11 = MSI_REFUSE_BAN_BY_GM
  2430. +    12 = MSI_REFUSE_TEMP_BAN_FOR_DBWORK
  2431. +    13 = MSI_REFUSE_SELF_LOCK
  2432. +    14 = MSI_REFUSE_NOT_PERMITTED_GROUP
  2433. +    15 = MSI_REFUSE_NOT_PERMITTED_GROUP
  2434. +    99 = This ID has been totally erased
  2435. +    100 = Login information remains at %s
  2436. +    101 = Account has been locked for a hacking investigation. Please contact the GM Team for more information
  2437. +    102 = This account has been temporarily prohibited from login due to a bug-related investigation
  2438. +    103 = This character is being deleted. Login is temporarily unavailable for the time being
  2439. +    104 = This character is being deleted. Login is temporarily unavailable for the time being
  2440. +     default = Unknown Error.
  2441. + */
  2442.  void login_auth_failed(struct login_session_data* sd, int result)
  2443.  {
  2444.  	int fd = sd->fd;
  2445. @@ -1245,36 +1278,14 @@
  2446.  
  2447.  	if (login_config.log_login)
  2448.  	{
  2449. -		const char* error;
  2450. -		switch( result ) {
  2451. -		case   0: error = "Unregistered ID."; break; // 0 = Unregistered ID
  2452. -		case   1: error = "Incorrect Password."; break; // 1 = Incorrect Password
  2453. -		case   2: error = "Account Expired."; break; // 2 = This ID is expired
  2454. -		case   3: error = "Rejected from server."; break; // 3 = Rejected from Server
  2455. -		case   4: error = "Blocked by GM."; break; // 4 = You have been blocked by the GM Team
  2456. -		case   5: error = "Not latest game EXE."; break; // 5 = Your Game's EXE file is not the latest version
  2457. -		case   6: error = "Banned."; break; // 6 = Your are Prohibited to log in until %s
  2458. -		case   7: error = "Server Over-population."; break; // 7 = Server is jammed due to over populated
  2459. -		case   8: error = "Account limit from company"; break; // 8 = No more accounts may be connected from this company
  2460. -		case   9: error = "Ban by DBA"; break; // 9 = MSI_REFUSE_BAN_BY_DBA
  2461. -		case  10: error = "Email not confirmed"; break; // 10 = MSI_REFUSE_EMAIL_NOT_CONFIRMED
  2462. -		case  11: error = "Ban by GM"; break; // 11 = MSI_REFUSE_BAN_BY_GM
  2463. -		case  12: error = "Working in DB"; break; // 12 = MSI_REFUSE_TEMP_BAN_FOR_DBWORK
  2464. -		case  13: error = "Self Lock"; break; // 13 = MSI_REFUSE_SELF_LOCK
  2465. -		case  14: error = "Not Permitted Group"; break; // 14 = MSI_REFUSE_NOT_PERMITTED_GROUP
  2466. -		case  15: error = "Not Permitted Group"; break; // 15 = MSI_REFUSE_NOT_PERMITTED_GROUP
  2467. -		case  99: error = "Account gone."; break; // 99 = This ID has been totally erased
  2468. -		case 100: error = "Login info remains."; break; // 100 = Login information remains at %s
  2469. -		case 101: error = "Hacking investigation."; break; // 101 = Account has been locked for a hacking investigation. Please contact the GM Team for more information
  2470. -		case 102: error = "Bug investigation."; break; // 102 = This account has been temporarily prohibited from login due to a bug-related investigation
  2471. -		case 103: error = "Deleting char."; break; // 103 = This character is being deleted. Login is temporarily unavailable for the time being
  2472. -		case 104: error = "Deleting spouse char."; break; // 104 = This character is being deleted. Login is temporarily unavailable for the time being
  2473. -		default : error = "Unknown Error."; break;
  2474. +		if(result >= 0 && result <= 15)
  2475. +		    login_log(ip, sd->userid, result, msg_txt(result));
  2476. +		else if(result >= 99 && result <= 104)
  2477. +		    login_log(ip, sd->userid, result, msg_txt(result-83)); //-83 offset
  2478. +		else
  2479. +		    login_log(ip, sd->userid, result, msg_txt(22)); //unknow error
  2480.  		}
  2481.  
  2482. -		login_log(ip, sd->userid, result, error);
  2483. -	}
  2484. -
  2485.  	if( result == 1 && login_config.dynamic_pass_failure_ban )
  2486.  		ipban_log(ip); // log failed password attempt
  2487.  
  2488. @@ -1744,6 +1755,7 @@
  2489.  	if( login_config.log_login )
  2490.  		loginlog_final();
  2491.  
  2492. +	do_final_msg();
  2493.  	ipban_final();
  2494.  
  2495.  	for( i = 0; account_engines[i].constructor; ++i )
  2496. @@ -1802,6 +1814,26 @@
  2497.  }
  2498.  
  2499.  
  2500. +/*======================================================
  2501. + * Login-Server help option info
  2502. + *------------------------------------------------------*/
  2503. +static void login_helpscreen(bool do_exit)
  2504. +{
  2505. +	ShowInfo("Usage: %s [options]\n", SERVER_NAME);
  2506. +	ShowInfo("\n");
  2507. +	ShowInfo("Options:\n");
  2508. +	ShowInfo("  -?, -h [--help]\t\tDisplays this help screen.\n");
  2509. +	ShowInfo("  -v [--version]\t\tDisplays the server's version.\n");
  2510. +	ShowInfo("  --run-once\t\t\tCloses server after loading (testing).\n");
  2511. +	ShowInfo("  --login-config <file>\t\tAlternative login-server configuration.\n");
  2512. +	ShowInfo("  --lan-config <file>\tAlternative lag configuration.\n");
  2513. +	ShowInfo("  --msg-config <file>\t\tAlternative message configuration.\n");
  2514. +	if( do_exit )
  2515. +		exit(EXIT_SUCCESS);
  2516. +}
  2517. +
  2518. +
  2519. +
  2520.  //------------------------------
  2521.  // Login server initialization
  2522.  //------------------------------
  2523. @@ -1815,9 +1847,86 @@
  2524.  
  2525.  	// read login-server configuration
  2526.  	login_set_defaults();
  2527. -	login_config_read((argc > 1) ? argv[1] : LOGIN_CONF_NAME);
  2528. -	login_lan_config_read((argc > 2) ? argv[2] : LAN_CONF_NAME);
  2529.  
  2530. +	LOGIN_CONF_NAME = "conf/login_athena.conf";
  2531. +	LAN_CONF_NAME = "conf/subnet_athena.conf";
  2532. +	MSG_CONF_NAME = "conf/msg_conf/login_msg.conf";
  2533. +
  2534. +	msg_config_read(MSG_CONF_NAME); //for debug test
  2535. +
  2536. +	for( i = 1; i < argc ; i++ )
  2537. +	{
  2538. +		const char* arg = argv[i];
  2539. +
  2540. +		if( arg[0] != '-' && ( arg[0] != '/' || arg[1] == '-' ) )
  2541. +		{// -, -- and /
  2542. +			ShowError("Unknown option '%s'.\n", argv[i]);
  2543. +			exit(EXIT_FAILURE);
  2544. +		}
  2545. +		else if( (++arg)[0] == '-' )
  2546. +		{// long option
  2547. +			arg++;
  2548. +
  2549. +			if( strcmp(arg, "help") == 0 )
  2550. +			{
  2551. +				login_helpscreen(true);
  2552. +			}
  2553. +			else if( strcmp(arg, "version") == 0 )
  2554. +			{
  2555. +				display_versionscreen(true);
  2556. +			}
  2557. +			else if( strcmp(arg, "login-config") == 0 )
  2558. +			{
  2559. +				if( opt_has_next_value(arg, i, argc) )
  2560. +					LOGIN_CONF_NAME = argv[++i];
  2561. +			}
  2562. +			else if( strcmp(arg, "lan-config") == 0 )
  2563. +			{
  2564. +				if( opt_has_next_value(arg, i, argc) )
  2565. +					LAN_CONF_NAME = argv[++i];
  2566. +			}
  2567. +			else if( strcmp(arg, "msg-config") == 0 )
  2568. +			{
  2569. +				if( opt_has_next_value(arg, i, argc) )
  2570. +					MSG_CONF_NAME = argv[++i];
  2571. +			}
  2572. +			else if( strcmp(arg, "run-once") == 0 ) // close the login-server as soon as its done.. for testing [Celest]
  2573. +			{
  2574. +				runflag = CORE_ST_STOP;
  2575. +			}
  2576. +			else if( strcmp(arg, "display_msg") == 0 ) // close the login-server as soon as its done.. for testing [Celest]
  2577. +			{
  2578. +			    int j;
  2579. +			    ShowInfo("My msg_conf are\n");
  2580. +			    for(j=0; j<10; j++){
  2581. +				ShowInfo("j=%i => %s\n",j,msg_txt(j));
  2582. +			    }
  2583. +			    exit(EXIT_SUCCESS);
  2584. +			}
  2585. +			else
  2586. +			{
  2587. +				ShowError("Unknown option '%s'.\n", argv[i]);
  2588. +				exit(EXIT_FAILURE);
  2589. +			}
  2590. +		}
  2591. +		else switch( arg[0] )
  2592. +		{// short option
  2593. +			case '?':
  2594. +			case 'h':
  2595. +				login_helpscreen(true);
  2596. +				break;
  2597. +			case 'v':
  2598. +				display_versionscreen(true);
  2599. +				break;
  2600. +			default:
  2601. +				ShowError("Unknown option '%s'.\n", argv[i]);
  2602. +				exit(EXIT_FAILURE);
  2603. +		}
  2604. +	}
  2605. +	msg_config_read(MSG_CONF_NAME);
  2606. +	login_config_read(LOGIN_CONF_NAME);
  2607. +	login_lan_config_read(LAN_CONF_NAME);
  2608. +
  2609.  	rnd_init();
  2610.  
  2611.  	for( i = 0; i < ARRAYLENGTH(server); ++i )
  2612. @@ -1883,3 +1992,14 @@
  2613.  
  2614.  	return 0;
  2615.  }
  2616. +
  2617. +int login_msg_config_read(char *cfgName){
  2618. +	return _msg_config_read(cfgName,LOGIN_MAX_MSG,msg_table);
  2619. +}
  2620. +const char* login_msg_txt(int msg_number){
  2621. +	return _msg_txt(msg_number,LOGIN_MAX_MSG,msg_table);
  2622. +}
  2623. +void login_do_final_msg(void){
  2624. +	return _do_final_msg(LOGIN_MAX_MSG,msg_table);
  2625. +}
  2626. +
  2627. Index: src/login/login.h
  2628. --- src/login/login.h Base (BASE)
  2629. +++ src/login/login.h Locally Modified (Based On LOCAL)
  2630. @@ -14,9 +14,6 @@
  2631.  	LOGINSERVER_ST_LAST
  2632.  };
  2633.  
  2634. -#define LOGIN_CONF_NAME "conf/login_athena.conf"
  2635. -#define LAN_CONF_NAME "conf/subnet_athena.conf"
  2636. -
  2637.  // supported encryption types: 1- passwordencrypt, 2- passwordencrypt2, 3- both
  2638.  #define PASSWORDENC 3
  2639.  
  2640. @@ -94,6 +91,15 @@
  2641.  #define sex_num2str(num) ( (num ==  SEX_FEMALE  ) ? 'F' : (num ==  SEX_MALE  ) ? 'M' : 'S' )
  2642.  #define sex_str2num(str) ( (str == 'F' ) ?  SEX_FEMALE  : (str == 'M' ) ?  SEX_MALE  :  SEX_SERVER  )
  2643.  
  2644. +#define msg_config_read(cfgName) login_msg_config_read(cfgName)
  2645. +#define msg_txt(msg_number) login_msg_txt(msg_number)
  2646. +#define do_final_msg() login_do_final_msg()
  2647. +
  2648. +int login_msg_config_read(char *cfgName);
  2649. +const char* login_msg_txt(int msg_number);
  2650. +void login_do_final_msg(void);
  2651. +
  2652. +
  2653.  #define MAX_SERVERS 30
  2654.  extern struct mmo_char_server server[MAX_SERVERS];
  2655.  extern struct Login_Config login_config;
  2656. Index: src/map/atcommand.c
  2657. --- src/map/atcommand.c Base (BASE)
  2658. +++ src/map/atcommand.c Locally Modified (Based On LOCAL)
  2659. @@ -100,73 +100,6 @@
  2660.  	return ( i < atcmd_binding_count ) ? atcmd_binding[i] : NULL;
  2661.  }
  2662.  
  2663. -//-----------------------------------------------------------
  2664. -// Return the message string of the specified number by [Yor]
  2665. -//-----------------------------------------------------------
  2666. -const char* msg_txt(int msg_number)
  2667. -{
  2668. -	if (msg_number >= 0 && msg_number < MAX_MSG &&
  2669. -	    msg_table[msg_number] != NULL && msg_table[msg_number][0] != '\0')
  2670. -		return msg_table[msg_number];
  2671. -
  2672. -	return "??";
  2673. -}
  2674. -
  2675. -/*==========================================
  2676. - * Read Message Data
  2677. - *------------------------------------------*/
  2678. -int msg_config_read(const char* cfgName)
  2679. -{
  2680. -	int msg_number;
  2681. -	char line[1024], w1[1024], w2[1024];
  2682. -	FILE *fp;
  2683. -	static int called = 1;
  2684. -
  2685. -	if ((fp = fopen(cfgName, "r")) == NULL) {
  2686. -		ShowError("Messages file not found: %s\n", cfgName);
  2687. -		return 1;
  2688. -	}
  2689. -
  2690. -	if ((--called) == 0)
  2691. -		memset(msg_table, 0, sizeof(msg_table[0]) * MAX_MSG);
  2692. -
  2693. -	while(fgets(line, sizeof(line), fp))
  2694. -	{
  2695. -		if (line[0] == '/' && line[1] == '/')
  2696. -			continue;
  2697. -		if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
  2698. -			continue;
  2699. -
  2700. -		if (strcmpi(w1, "import") == 0)
  2701. -			msg_config_read(w2);
  2702. -		else
  2703. -		{
  2704. -			msg_number = atoi(w1);
  2705. -			if (msg_number >= 0 && msg_number < MAX_MSG)
  2706. -			{
  2707. -				if (msg_table[msg_number] != NULL)
  2708. -					aFree(msg_table[msg_number]);
  2709. -				msg_table[msg_number] = (char *)aMalloc((strlen(w2) + 1)*sizeof (char));
  2710. -				strcpy(msg_table[msg_number],w2);
  2711. -			}
  2712. -		}
  2713. -	}
  2714. -
  2715. -	fclose(fp);
  2716. -
  2717. -	return 0;
  2718. -}
  2719. -
  2720. -/*==========================================
  2721. - * Cleanup Message Data
  2722. - *------------------------------------------*/
  2723. -void do_final_msg(void)
  2724. -{
  2725. -	int i;
  2726. -	for (i = 0; i < MAX_MSG; i++)
  2727. -		aFree(msg_table[i]);
  2728. -}
  2729. -
  2730.  /**
  2731.   * retrieves the help string associated with a given command.
  2732.   *
  2733. Index: src/map/atcommand.h
  2734. --- src/map/atcommand.h Base (BASE)
  2735. +++ src/map/atcommand.h Locally Modified (Based On LOCAL)
  2736. @@ -30,10 +30,6 @@
  2737.  
  2738.  bool atcommand_exists(const char* name);
  2739.  
  2740. -const char* msg_txt(int msg_number);
  2741. -int msg_config_read(const char* cfgName);
  2742. -void do_final_msg(void);
  2743. -
  2744.  extern int atcmd_binding_count;
  2745.  
  2746.  // @commands (script based)
  2747. Index: src/map/map.c
  2748. --- src/map/map.c Base (BASE)
  2749. +++ src/map/map.c Locally Modified (Based On LOCAL)
  2750. @@ -114,6 +114,9 @@
  2751.  static struct block_list *bl_list[BL_LIST_MAX];
  2752.  static int bl_list_count = 0;
  2753.  
  2754. +#define MAX_MSG 1500
  2755. +static char* msg_table[MAX_MSG]; // map Server messages
  2756. +
  2757.  struct map_data map[MAX_MAP_PER_SERVER];
  2758.  int map_num = 0;
  2759.  int map_port=0;
  2760. @@ -3666,7 +3669,7 @@
  2761.  }
  2762.  
  2763.  /*======================================================
  2764. - * Map-Server Version Screen [MC Cameri]
  2765. + * Map-Server help options screen
  2766.   *------------------------------------------------------*/
  2767.  static void map_helpscreen(bool do_exit)
  2768.  {
  2769. @@ -3689,19 +3692,6 @@
  2770.  }
  2771.  
  2772.  /*======================================================
  2773. - * Map-Server Version Screen [MC Cameri]
  2774. - *------------------------------------------------------*/
  2775. -static void map_versionscreen(bool do_exit)
  2776. -{
  2777. -	ShowInfo(CL_WHITE"rAthena SVN version: %s" CL_RESET"\n", get_svn_revision());
  2778. -	ShowInfo(CL_GREEN"Website/Forum:"CL_RESET"\thttp://rathena.org/\n");
  2779. -	ShowInfo(CL_GREEN"IRC Channel:"CL_RESET"\tirc://irc.rathena.net/#rathena\n");
  2780. -	ShowInfo("Open "CL_WHITE"readme.txt"CL_RESET" for more information.\n");
  2781. -	if( do_exit )
  2782. -		exit(EXIT_SUCCESS);
  2783. -}
  2784. -
  2785. -/*======================================================
  2786.   * Map-Server Init and Command-line Arguments [Valaris]
  2787.   *------------------------------------------------------*/
  2788.  void set_server_type(void)
  2789. @@ -3729,17 +3719,6 @@
  2790.  	}
  2791.  }
  2792.  
  2793. -static bool map_arg_next_value(const char* option, int i, int argc)
  2794. -{
  2795. -	if( i >= argc-1 )
  2796. -	{
  2797. -		ShowWarning("Missing value for option '%s'.\n", option);
  2798. -		return false;
  2799. -	}
  2800. -
  2801. -	return true;
  2802. -}
  2803. -
  2804.  int do_init(int argc, char *argv[])
  2805.  {
  2806.  	int i;
  2807. @@ -3754,10 +3733,10 @@
  2808.  	BATTLE_CONF_FILENAME = "conf/battle_athena.conf";
  2809.  	ATCOMMAND_CONF_FILENAME = "conf/atcommand_athena.conf";
  2810.  	SCRIPT_CONF_NAME = "conf/script_athena.conf";
  2811. -	MSG_CONF_NAME = "conf/msg_athena.conf";
  2812. +	MSG_CONF_NAME = "conf/msg_conf/map_msg.conf";
  2813.  	GRF_PATH_FILENAME = "conf/grf-files.txt";
  2814.  
  2815. -	rnd_init();
  2816. +	msg_config_read(MSG_CONF_NAME); //for debug test
  2817.  
  2818.  	for( i = 1; i < argc ; i++ )
  2819.  	{
  2820. @@ -3778,52 +3757,61 @@
  2821.  			}
  2822.  			else if( strcmp(arg, "version") == 0 )
  2823.  			{
  2824. -				map_versionscreen(true);
  2825. +				display_versionscreen(true);
  2826.  			}
  2827.  			else if( strcmp(arg, "map-config") == 0 )
  2828.  			{
  2829. -				if( map_arg_next_value(arg, i, argc) )
  2830. +				if( opt_has_next_value(arg, i, argc) )
  2831.  					MAP_CONF_NAME = argv[++i];
  2832.  			}
  2833.  			else if( strcmp(arg, "battle-config") == 0 )
  2834.  			{
  2835. -				if( map_arg_next_value(arg, i, argc) )
  2836. +				if( opt_has_next_value(arg, i, argc) )
  2837.  					BATTLE_CONF_FILENAME = argv[++i];
  2838.  			}
  2839.  			else if( strcmp(arg, "atcommand-config") == 0 )
  2840.  			{
  2841. -				if( map_arg_next_value(arg, i, argc) )
  2842. +				if( opt_has_next_value(arg, i, argc) )
  2843.  					ATCOMMAND_CONF_FILENAME = argv[++i];
  2844.  			}
  2845.  			else if( strcmp(arg, "script-config") == 0 )
  2846.  			{
  2847. -				if( map_arg_next_value(arg, i, argc) )
  2848. +				if( opt_has_next_value(arg, i, argc) )
  2849.  					SCRIPT_CONF_NAME = argv[++i];
  2850.  			}
  2851.  			else if( strcmp(arg, "msg-config") == 0 )
  2852.  			{
  2853. -				if( map_arg_next_value(arg, i, argc) )
  2854. +				if( opt_has_next_value(arg, i, argc) )
  2855.  					MSG_CONF_NAME = argv[++i];
  2856.  			}
  2857.  			else if( strcmp(arg, "grf-path-file") == 0 )
  2858.  			{
  2859. -				if( map_arg_next_value(arg, i, argc) )
  2860. +				if( opt_has_next_value(arg, i, argc) )
  2861.  					GRF_PATH_FILENAME = argv[++i];
  2862.  			}
  2863.  			else if( strcmp(arg, "inter-config") == 0 )
  2864.  			{
  2865. -				if( map_arg_next_value(arg, i, argc) )
  2866. +				if( opt_has_next_value(arg, i, argc) )
  2867.  					INTER_CONF_NAME = argv[++i];
  2868.  			}
  2869.  			else if( strcmp(arg, "log-config") == 0 )
  2870.  			{
  2871. -				if( map_arg_next_value(arg, i, argc) )
  2872. +				if( opt_has_next_value(arg, i, argc) )
  2873.  					LOG_CONF_NAME = argv[++i];
  2874.  			}
  2875.  			else if( strcmp(arg, "run-once") == 0 ) // close the map-server as soon as its done.. for testing [Celest]
  2876.  			{
  2877.  				runflag = CORE_ST_STOP;
  2878.  			}
  2879. +			else if( strcmp(arg, "display_msg") == 0 ) // close the login-server as soon as its done.. for testing [Celest]
  2880. +			{
  2881. +			    int j;
  2882. +			    ShowInfo("My msg_conf are\n");
  2883. +			    for(j=0; j<10; j++){
  2884. +				ShowInfo("j=%i => %s\n",j,msg_txt(j));
  2885. +			    }
  2886. +			    exit(EXIT_SUCCESS);
  2887. +			}
  2888.  			else
  2889.  			{
  2890.  				ShowError("Unknown option '%s'.\n", argv[i]);
  2891. @@ -3837,7 +3825,7 @@
  2892.  				map_helpscreen(true);
  2893.  				break;
  2894.  			case 'v':
  2895. -				map_versionscreen(true);
  2896. +				display_versionscreen(true);
  2897.  				break;
  2898.  			default:
  2899.  				ShowError("Unknown option '%s'.\n", argv[i]);
  2900. @@ -3845,6 +3833,7 @@
  2901.  		}
  2902.  	}
  2903.  
  2904. +	rnd_init();
  2905.  	map_config_read(MAP_CONF_NAME);
  2906.  	/* only temporary until sirius's datapack patch is complete  */
  2907.  
  2908. @@ -3952,3 +3941,13 @@
  2909.  
  2910.  	return 0;
  2911.  }
  2912. +
  2913. +int map_msg_config_read(char *cfgName){
  2914. +	return _msg_config_read(cfgName,MAX_MSG,msg_table);
  2915. +}
  2916. +const char* map_msg_txt(int msg_number){
  2917. +	return _msg_txt(msg_number,MAX_MSG,msg_table);
  2918. +}
  2919. +void map_do_final_msg(void){
  2920. +	return _do_final_msg(MAX_MSG,msg_table);
  2921. +}
  2922. Index: src/map/map.h
  2923. --- src/map/map.h Base (BASE)
  2924. +++ src/map/map.h Locally Modified (Based On LOCAL)
  2925. @@ -9,6 +9,7 @@
  2926.  #include "../common/mmo.h"
  2927.  #include "../common/mapindex.h"
  2928.  #include "../common/db.h"
  2929. +#include "../common/msg_conf.h"
  2930.  
  2931.  /**
  2932.   * [rAthena.org]
  2933. @@ -27,6 +28,12 @@
  2934.  	MAPSERVER_ST_LAST
  2935.  };
  2936.  
  2937. +#define msg_config_read(cfgName) map_msg_config_read(cfgName)
  2938. +#define msg_txt(msg_number) map_msg_txt(msg_number)
  2939. +#define do_final_msg() map_do_final_msg()
  2940. +int map_msg_config_read(char *cfgName);
  2941. +const char* map_msg_txt(int msg_number);
  2942. +void map_do_final_msg(void);
  2943.  
  2944.  #define MAX_NPC_PER_MAP 512
  2945.  #define AREA_SIZE battle_config.area_size
  2946. Index: tools/config.pl
  2947. --- tools/config.pl Base (BASE)
  2948. +++ tools/config.pl Locally Modified (Based On LOCAL)
  2949. @@ -2,6 +2,9 @@
  2950.  # config script by lighta
  2951.  #TODO list :
  2952.  #- don't always override import/file, sed grep ?
  2953. +#- auto apply updates .sql check version main, log
  2954. +#- auto enable coredump
  2955. +#- auto enable backup
  2956. \ No newline at end of file
  2957.  
  2958.  use CPAN;
  2959.  use strict;
Viewed 1768 times, submitted by lighta.