summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaru <haru@dotalux.com>2014-02-27 00:18:36 +0100
committerHaru <haru@dotalux.com>2014-02-27 00:55:59 +0100
commit87b6c8f196897b72d98de2b1d4716bee1af99c3b (patch)
tree3dbedf03385adcd92673a6932d85150571c1daf0
parent5cbbcedd588b7eaad2df99f1a2cf9648b8d9ea64 (diff)
downloadhercules-87b6c8f196897b72d98de2b1d4716bee1af99c3b.tar.gz
hercules-87b6c8f196897b72d98de2b1d4716bee1af99c3b.tar.bz2
hercules-87b6c8f196897b72d98de2b1d4716bee1af99c3b.tar.xz
hercules-87b6c8f196897b72d98de2b1d4716bee1af99c3b.zip
Cleaned up messages.conf
- Removed some unused messages. - Re-mapped some duplicate IDs - fixes bugreport:8057, thanks to AnnieRuru http://hercules.ws/board/tracker/issue-8057-jobname-with-invalid-id-return-tomb/ - Fixed some issues with the message range loaded by the char server. - Reworded some messages, fixed typos in others. Note for translation users: some messages have been remapped to new IDs. You'll need to remap them in your custom translations as well. The list of changes is as follows: - Removed messages (you can safely remove them from your translations): 15, 26-27, 35, 48-52, 57-58, 65-69, 82-83, 86-87, 91, 101, 140-142, 164, 189-194, 199-200, 202-203, 209-211, 215-218, 267-268, 275, 289-290, 380-385, 387-388, 401, 497, 499, 535-537, 922, 995, 1063, 1079, 1291-1294 - New messages (you need to add them to your translations): 15 - Moved messages (you need to change their IDs in your translations file): * [Unknown Job] 656 -> 620, * [Job names] 681~693 -> 656~668 * [Tombstone related] 656~661 -> 856~861 * [Etc messages] 662~680 -> 862~880 * [@version] 1436 -> 1294 * [Hercules Chat] 1475 -> 1436 Signed-off-by: Haru <haru@dotalux.com>
-rw-r--r--conf/messages.conf389
-rw-r--r--src/char/inter.c281
-rw-r--r--src/map/atcommand.c101
-rw-r--r--src/map/atcommand.h2
-rw-r--r--src/map/chat.c2
-rw-r--r--src/map/chrif.c6
-rw-r--r--src/map/clif.c18
-rw-r--r--src/map/guild.c8
-rw-r--r--src/map/map.c2
-rw-r--r--src/map/mob.c2
-rw-r--r--src/map/npc.c25
-rw-r--r--src/map/pc.c251
-rw-r--r--src/map/script.c2
-rw-r--r--src/map/skill.c4
14 files changed, 543 insertions, 550 deletions
diff --git a/conf/messages.conf b/conf/messages.conf
index 8b3daa684..2eba688cd 100644
--- a/conf/messages.conf
+++ b/conf/messages.conf
@@ -12,9 +12,10 @@
// msg_number: translated message
//============================================================
-// 0-410: reserved for GM commands
-// 500-900 reserved for others
-// 900-1300: @atcommand
+// 0-499: reserved for GM commands
+// 500-549: reserved for others
+// 550-699: reserved for job names (also loaded by char server)
+// 900-1500: @atcommand
// To disable a string (%s) field, make it's max length 0:
// eg:
@@ -39,7 +40,7 @@
12: Your job has been changed.
13: You've died.
14: Character killed.
-15: Player warped (message sent to player too).
+15: Unknown
16: You've been revived!
17: HP, SP recovered.
18: Item created.
@@ -50,8 +51,7 @@
23: Job level can't go any higher.
24: Job level raised.
25: Job level lowered.
-26: Help commands:
-27: Commands help is not available.
+//26-27 FREE
28: No player found.
29: 1 player found.
30: %d players found.
@@ -59,7 +59,7 @@
32: PvP: On.
33: GvG: Off.
34: GvG: On.
-35: You can't use this command with this class.
+//35 FREE
36: Appearance changed.
37: An invalid number was specified.
38: Invalid location number, or name.
@@ -72,28 +72,19 @@
45: Guild level change failed.
46: %s recalled!
47: Base level can't go any higher.
-48: Character's job changed.
-49: Invalid job ID.
-50: You already have some GM powers.
-51: Character revived.
-52: This option cannot be used in PK Mode.
+//48-52 FREE
53: '%s' stats:
54: No player found in map '%s'.
55: 1 player found in map '%s'.
56: %d players found in map '%s'.
-57: Character's save point changed.
-58: Character's options changed.
+//57-58 FREE
59: Night Mode Activated.
60: Day Mode Activated.
61: The holy messenger has given judgement.
62: Judgement has passed.
63: Mercy has been shown.
64: Mercy has been granted.
-65: Character's base level raised.
-66: Character's base level lowered.
-67: Character's job level can't go any higher.
-68: character's job level raised.
-69: Character's job level lowered.
+//65-69 FREE
70: You have learned the skill.
71: You have forgotten the skill.
72: War of Emperium has been initiated.
@@ -101,21 +92,19 @@
74: War of Emperium has been ended.
75: War of Emperium is currently not in progress.
76: All skills have been added to your skill tree.
-77: The reference result of '%s' (name: id):
+77: Search results for '%s' (name: id):
78: %s: %d
-79: It is %d affair above.
-80: Give the display name or monster name/id please.
-81: Your GM level doesn't authorize you to preform this action on the specified player.
-82: Please provide a name or number from the list provided:
-83: Monster 'Emperium' cannot be spawned.
+79: %d results found.
+80: Please specify a display name or monster name/id.
+81: Your GM level doesn't authorize you to perform this action on the specified player.
+//82-83 FREE
84: All stats changed!
85: Invalid time for ban command.
-86: Sorry, player names have to be at least 4 characters.
-87: Sorry, player names can be no longer than 23 characters.
+//86-87 FREE
88: Sending request to login server...
89: Night mode is already enabled.
90: Day mode is already enabled.
-91: Character's base level can't go any higher.
+//91 FREE
92: All characters recalled!
93: All online characters of the %s guild have been recalled to your position.
94: Incorrect name/ID, or no one from the specified guild is online.
@@ -125,7 +114,7 @@
98: Monster database has been reloaded.
99: Skill database has been reloaded.
100: Scripts have been reloaded.
-101: Login-server asked to reload GM accounts and their level.
+//101 FREE
102: You have mounted a Peco Peco.
103: No longer spying on the %s guild.
104: Spying on the %s guild.
@@ -141,14 +130,14 @@
114: %d item(s) removed from the player.
115: %d item(s) removed. Player had only %d on %d items.
116: Character does not have the specified item.
-117: You have been placed in jail by a GM.
+117: You have been jailed by a GM.
118: Player warped to jail.
119: This player is not in jail.
120: A GM has discharged you from jail.
121: Player unjailed.
122: Disguise applied.
123: Invalid Monster/NPC name/ID specified.
-124: Undisguise applied.
+124: Disguise removed.
125: You're not disguised.
//Clone Messages
126: Cannot clone a player of higher GM level than yourself.
@@ -159,15 +148,12 @@
131: Unable to spawn clone.
132: Slave clone spawned.
133: Unable to spawn slave clone.
-//Messages 134-139 are no longer used, available for future reuse (preferrable for more variations of @clone)
-140: Character's disguise applied.
-141: Character's undisguise applied.
-142: Character is not disguised.
-143: Commands are disabled on this map.
-144: Invalid e-mail. If you have default e-mail, type a@a.com.
-145: Invalid new e-mail. Please enter a real e-mail.
-146: New e-mail must be a real e-mail.
-147: New e-mail must be different from the current e-mail.
+//134-142 FREE (possibly for other clone types)
+143: Commands are disabled in this map.
+144: Invalid e-mail. If your email hasn't been set, use a@a.com.
+145: Invalid new e-mail. Please enter a real e-mail address.
+146: New e-mail must be a real e-mail address.
+147: New e-mail must be different from the current e-mail address.
148: Information sent to login-server via char-server.
149: Impossible to increase the number/value.
150: No GM found.
@@ -184,7 +170,7 @@
161: PvP is already On.
162: GvG is already Off.
163: GvG is already On.
-164: Your memo point #%d doesn't exist.
+//164 FREE
165: All monsters killed!
166: No item has been refined.
167: 1 item has been refined.
@@ -193,7 +179,7 @@
170: The item is not equipable.
171: %d - void
172: Speed returned to normal.
-//173: Note: you don't have the 'Warp' skill level to use it.
+//173 FREE
174: Number of status points changed.
175: Number of skill points changed.
176: Current amount of zeny changed.
@@ -209,36 +195,24 @@
186: Pet hunger is already at maximum.
187: You can now rename your pet.
188: You can already rename your pet.
-189: This player can now rename his/her pet.
-190: This player can already rename his/her pet.
-191: Sorry, but this player has no pet.
-192: Unable to change the specified character's job.
-193: Character's base level can't go any lower.
-194: Character's job level can't go any lower.
+//189-194 FREE
195: All players have been kicked!
196: You already have this quest skill.
197: This skill number doesn't exist or isn't a quest skill.
198: This skill number doesn't exist.
-199: This player has learned the skill.
-200: This player already has this quest skill.
+//199-200 FREE
201: You don't have this quest skill.
-202: This player has forgotten the skill.
-203: This player doesn't have this quest skill.
+//202-203 FREE
204: You can't open a shop on this cell.
205: Maybe you meant:
206: '%s' skill points reset.
207: '%s' stats points reset.
208: '%s' skill and stat points have been reset.
-209: Character's skill points changed.
-210: Character's status points changed.
-211: Character's current zeny changed.
+//209-211 FREE
212: Cannot mount while in disguise.
213: You can not mount a Peco Peco with your current job.
214: You have released your Peco Peco.
-215: This player cannot mount a Peco Peco while in disguise.
-216: This player has mounted a Peco Peco.
-217: This player cannot mount a Peco Peco with his/her current job.
-218: This player's Peco Peco has been released.
+//215-218 FREE
219: %d day
220: %d days
221: %d hour
@@ -247,33 +221,33 @@
224: %d minutes
225: and %d second
226: and %d seconds
-227: Party modification is disabled on this map.
-228: Guild modification is disabled on this map.
+227: Party modification is disabled in this map.
+228: Guild modification is disabled in this map.
229: Your effect has changed.
230: Server time (normal time): %A, %B %d %Y %X.
231: Game time: The game is in permanent daylight.
232: Game time: The game is in permanent night.
233: Game time: The game is in night for %s.
-//234:
+//234 FREE
235: Game time: The game is in daylight for %s.
-//236:
+//236 FREE
237: Game time: After, the game will be in night for %s.
238: Game time: A day cycle has a normal duration of %s.
239: Game time: After, the game will be in daylight for %s.
240: %d monster(s) summoned!
241: You can now attack and kill players freely.
242: You can now be attacked and killed by players.
-243: Skills have been disabled on this map.
-244: Skills have been enabled on this map.
+243: Skills have been disabled in this map.
+244: Skills have been enabled in this map.
245: Server Uptime: %ld days, %ld hours, %ld minutes, %ld seconds.
-246: Your GM level doesn't authorize you to preform this action.
+246: Your GM level doesn't authorize you to perform this action.
247: You are not authorized to warp to this map.
248: You are not authorized to warp from your current map.
249: You are not authorized to warp to your save map.
250: You have already opened your storage. Close it first.
251: You have already opened your guild storage. Close it first.
252: You are not in a guild.
-//253: You are not authorized to memo this map.
+//253 FREE
254: GM command configuration has been reloaded.
255: Battle configuration has been reloaded.
256: Status database has been reloaded.
@@ -287,34 +261,32 @@
264: This item cannot be stored.
265: %s has bought your item(s).
266: Some of your items cannot be vended and were removed from the shop.
-267: '%s' designated maps reset.
-268: Reloaded the Message of the Day.
+//267-268 FREE
269: Displaying first %d out of %d matches
//@me output format
270: * :%s %s: *
-271: You can't drop items on this map
-272: You can't trade on this map
-273: Commands available:
+271: You can't drop items in this map
+272: You can't trade in this map
+273: Available commands:
274: %d commands found.
-275: No commands found.
-276: You can't open a shop on this map
+//275 FREE
+276: You can't open a shop in this map
277: Usage: @request <petition/message to online GMs>.
278: (@request): %s
279: @request sent.
280: Invalid name.
-281: You can't create chat rooms on this map
+281: You can't create chat rooms in this map
//Party-related
282: You need to be a party leader to use this command.
283: Target character must be online and in your current party.
284: Leadership transferred.
285: You've become the party leader.
286: There's been no change in the setting.
-287: You cannot change party leaders on this map.
+287: You cannot change party leaders in this map.
//Missing stuff for @killer related commands.
288: You are no longer killable.
-289: The player is now killable.
-290: The player is no longer killable.
-291: Weather effects will dispell on warp/refresh
+//289-290 FREE
+291: Weather effects will disappear after teleporting or refreshing.
292: Killer state reset.
//Item Bind System
293: This bound item cannot be traded to that character.
@@ -323,9 +295,9 @@
296: Please enter all parameters (usage: @itembound2 <item name/ID> <quantity>
297: <identify_flag> <refine> <attribute> <card1> <card2> <card3> <card4> <bound_type>).
298: Invalid bound type. Valid types are - 1:Account 2:Guild 3:Party 4:Character
+//299 FREE
// Guild Castles Number
// --------------------
-//299: ?? Castles
300: None Taken
301: One Castle
302: Two Castles
@@ -363,17 +335,20 @@
// 334: Thirty-Four Castles
334: Total Domination
+//335-342 FREE
+
// Templates for @who output
343: Name: %s
344: (%s)
345: | Party: '%s'
346: | Guild: '%s'
-//You may ommit the last %s, then you won't see players job name
+//You may omit the last %s, then you won't see players job name
347: | Lv:%d/%d | Job: %s
-//You may ommit 2 last %d, then you won't see players coords, just map name
+//You may omit 2 last %d, then you won't see players coordinates, just map name
348: | Location: %s %d %d
+//349 FREE
-// @duel (part 1)
+// @duel
350: Duel: You can't use @invite. You aren't a duelist.
351: Duel: The limit of players has been reached.
352: Duel: Player name not found.
@@ -388,9 +363,9 @@
361: Duel: The duel invitation has been accepted.
362: Duel: You can't use @reject without a duel invitation.
363: Duel: The duel invitation has been rejected.
-364: Duel: You can't invite %s because he/she isn't on the same map.
-365: Duel: Can't use %s in duel.
-// @duel (part 2)
+364: Duel: You can't invite %s because he/she isn't in the same map.
+365: Duel: Can't use %s in duel.
+//366-369 FREE
370: -- Duels: %d/%d, Members: %d/%d, Max players: %d --
371: -- Duels: %d/%d, Members: %d/%d --
372: -- Duel has been created (Use @invite/@leave) --
@@ -399,16 +374,10 @@
375: <- Player %s has left the duel --
376: -> Player %s has accepted the duel --
377: -- Player %s has rejected the duel --
+//378-385 FREE
// Main chat
-380: Main chat has been activated.
-381: Main chat already activated.
-382: Main chat has been disabled.
-383: Main chat already disabled.
-384: Main chat is currently enabled. Usage: @main <on|off>, @main <message>.
-385: Main chat is currently disabled. Usage: @main <on|off>, @main <message>.
386: %s :Main: %s
-387: You cannot use Main chat while muted.
-388: You should enable main chat with "@main on" command.
+//387-389 FREE
//NoAsk
390: Autorejecting is activated.
391: Autorejecting is deactivated.
@@ -419,18 +388,19 @@
396: Autorejected alliance request from %s.
397: Autorejected opposition request from %s.
398: Autorejected friend request from %s.
+//399 FREE
400: Usage: @jailfor <time> <character name>
-401: You have been jailed for %d years, %d months, %d days, %d hours and %d minutes
+//401 FREE
402: %s in jail for %d years, %d months, %d days, %d hours and %d minutes
// WoE SE (@agitstart2)
403: War of Emperium SE has been initiated.
404: War of Emperium SE is currently in progress.
405: War of Emperium SE has been ended.
406: War of Emperium SE is currently not in progress.
-//407 free
+//407 FREE
//chrif related
-408: Need disconnection to perform change-sex request...
-409: Your sex has been changed (need disconnection by the server)...
+408: Disconnecting to perform change-sex request...
+409: Your sex has been changed (disconnection required to complete the process)...
//410-411 used by cash shop
412: Your account has 'Unregistered'.
413: Your account has an 'Incorrect Password'...
@@ -442,10 +412,11 @@
419: Server is jammed due to over populated.
420: Your account has not more authorised.
421: Your account has been totally erased.
+//422 FREE
423: Your account has been banished until
424: Login-server has been asked to %s the player '%.*s'.
425: The player '%.*s' doesn't exist.
-426: Your GM level don't authorise you to %s the player '%.*s'.
+426: Your GM level doesn't authorize you to %s the player '%.*s'.
427: Login-server is offline. Impossible to %s the player '%.*s'.
428: block
429: ban
@@ -454,62 +425,56 @@
432: change the sex of
433: This character has been banned until
434: Char-server has been asked to %s the character '%.*s'.
+//435-449 FREE
// Homunculus messages
450: You already have a homunculus
// Return pet to egg message
451: You can't return your pet because your inventory is full.
+//452-497 FREE
// Messages of others (not for GM commands)
// ----------------------------------------
-// Account-Bound Items
-497: You cannot distribute this item - it is an account bounded item!
-
// @itembound / @itembound2
-498: Cannot create bounded pet eggs or pet armors.
-499: Cannot create bounded stackable items.
+498: Cannot create bound pet eggs or pet armors.
-//500: FREE
+//499-500 FREE
501: Your account time limit is: %d-%m-%Y %H:%M:%S.
502: Day Mode is activated
503: Night Mode is activated
// Cash point change messages
-504: Used %d kafra points and %d cash points. %d kafra and %d cash points remaining.
+504: Used %d Kafra points and %d cash points. %d Kafra and %d cash points remaining.
505: Gained %d cash points. Total %d points.
-506: Gained %d kafra points. Total %d points.
+506: Gained %d Kafra points. Total %d points.
410: Removed %d cash points. Total %d points.
-411: Removed %d kafra points. Total %d points.
+411: Removed %d Kafra points. Total %d points.
// Trade Spoof Messages
507: This player has been banned for %d minute(s).
508: This player hasn't been banned (Ban option is disabled).
-//509 Available....
+//509 FREE
// mail system
//----------------------
510: You have %d new emails (%d unread)
+//511-537 FREE
-// Bot detect messages (currently unused)
-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.
-
-536: Character '%s' (account: %d) is trying to use a bot (it tries to detect a fake player).
-537: Character '%s' (account: %d) is trying to use a bot (it tries to detect a fake mob).
// Trade Spoof Messages
538: Hack on trade: character '%s' (account: %d) try to trade more items that he has.
539: This player has %d of a kind of item (id: %d), and tried to trade %d of them.
-540: This player has been definitivly blocked.
+540: This player has been definitively blocked.
// Rare Items Drop/Steal announce
541: '%s' got %s's %s (chance: %0.02f%%)
//541: %.0s%.0sSomeone got %s
542: '%s' stole %s's %s (chance: %0.02f%%)
//542: %.0s%.0sSomeone stole %s
-// 543~548 are not used (previously @away messages)
+//543-548 FREE
// @Autotrade
-549: You should have a shop open to use @autotrade.
+549: You should have a shop open in order to use @autotrade.
-//550 -> 650: Job Names
+//550 -> 699: Job Names
550: Novice
551: Swordsman
552: Magician
@@ -546,18 +511,18 @@
583: High Priest
584: High Wizard
585: Whitesmith
-//585: Mastersmith //IRO name
+//585: Mastersmith //iRO name
586: Sniper
587: Assassin Cross
588: Paladin
589: Champion
590: Professor
-//590: Scholar //IRO name
+//590: Scholar //iRO name
591: Stalker
592: Creator
-//592: Biochemist //IRO Name
+//592: Biochemist //iRO Name
593: Clown
-//593: Minstrel //IRO Name
+//593: Minstrel //iRO Name
594: Gypsy
595: Baby Novice
596: Baby Swordsman
@@ -583,8 +548,8 @@
616: Taekwon
617: Star Gladiator
618: Soul Linker
-//619: FREE
-//620: FREE
+//619 FREE
+620: Unknown Job
621: Summer
622: Gangsi
623: Death Knight
@@ -598,11 +563,11 @@
631: Royal Guard
632: Sorcerer
633: Minstrel
-//633: Maestro //IRO Name
+//633: Maestro //iRO Name
634: Wanderer
635: Sura
636: Genetic
-//636: Geneticist //IRO Name
+//636: Geneticist //iRO Name
637: Shadow Chaser
638: Baby Rune Knight
639: Baby Warlock
@@ -622,53 +587,53 @@
653: Kagerou
654: Oboro
655: Rebellion
-656: Unknown Job
+
+656: Rune Knight T
+657: Warlock T
+658: Ranger T
+659: Arch Bishop T
+660: Mechanic T
+661: Guillotine Cross T
+662: Royal Guard T
+663: Sorcerer T
+664: Minstrel T
+665: Wanderer T
+666: Sura T
+667: Genetic T
+668: Shadow Chaser T
+
+//669-855 FREE (please start using from the top if you need, leave the 669+ range for new jobs)
// MvP Tomb
-// Added here so it can be easily translated
-656: Tomb
-657: [ ^EE0000%s^000000 ]
-658: Has met its demise
-659: Time of death : ^EE0000%s^000000
-660: Defeated by
-661: [^EE0000%s^000000]
+856: Tomb
+857: [ ^EE0000%s^000000 ]
+858: Has met its demise
+859: Time of death : ^EE0000%s^000000
+860: Defeated by
+861: [^EE0000%s^000000]
// Etc messages from source
-662: You're too close to a NPC, you must be at least %d cells away from any NPC.
-663: Duel: Can't use this item in duel.
-664: You cannot use this command when dead.
-665: Can't create chat rooms in this area.
-666: Pets are not allowed in Guild Wars.
-667: You're not dead.
-668: Your actual memo positions are:
-669: You broke the target's weapon.
-670: You can't leave battleground guilds.
-671: Friend already exists.
-672: Name not found in list.
-673: This action can't be performed at the moment. Please try again later.
-674: Friend removed.
-675: Cannot send mails too fast!!
-676: Alliances cannot be made during Guild Wars!
-677: Alliances cannot be broken during Guild Wars!
-678: You are no longer the Guild Master.
-679: You have become the Guild Master!
-680: You have been recovered!
-//681-899 free
-
-681: Rune Knight T
-682: Warlock T
-683: Ranger T
-684: Arch Bishop T
-685: Mechanic T
-686: Guillotine Cross T
-687: Royal Guard T
-688: Sorcerer T
-689: Minstrel T
-690: Wanderer T
-691: Sura T
-692: Genetic T
-693: Shadow Chaser T
-
+862: You're too close to a NPC, you must be at least %d cells away from any NPC.
+863: Duel: Can't use this item in duel.
+864: You cannot use this command when dead.
+865: Can't create chat rooms in this area.
+866: Pets are not allowed in Guild Wars.
+867: You're not dead.
+868: Your current memo positions are:
+869: You broke the target's weapon.
+870: You can't leave battleground guilds.
+871: Friend already exists.
+872: Name not found in list.
+873: This action can't be performed at the moment. Please try again later.
+874: Friend removed.
+875: Cannot send mails too fast!!
+876: Alliances cannot be made during Guild Wars!
+877: Alliances cannot be broken during Guild Wars!
+878: You are no longer the Guild Master.
+879: You have become the Guild Master!
+880: You have been recovered!
+
+//881-899 FREE
//------------------------------------
// More atcommands message
@@ -676,9 +641,9 @@
// @send
900: Usage:
-901: @send len <packet hex number>
-902: @send <packet hex number> {<value>}*
-903: Value: <type=B(default),W,L><number> or S<length>"<string>"
+901: @send len <packet hex number>
+902: @send <packet hex number> {<value>}*
+903: Value: <type=B(default),W,L><number> or S<length>"<string>"
904: Packet 0x%x length: %d
905: Unknown packet: 0x%x
906: Not a string:
@@ -716,10 +681,11 @@
// @option
921: Please enter at least one option.
+//922 FREE
+
// @jobchange
-922: Please enter a job ID.
923: You can not change to this job by command.
-//924-979 free (future jobs?)
+//924-979 FREE
// @kami
980: Please enter a message (usage: @kami <message>).
@@ -756,8 +722,7 @@
// @haircolor
994: Please enter a hair color (usage: @haircolor/@hcolor <hair color: %d-%d>).
-// @go
-995: You cannot use @go on this map.
+//995 FREE
// @refine
996: Please enter a position and an amount (usage: @refine <equip position> <+/- amount>).
@@ -829,7 +794,7 @@
1026: Please enter a player name (usage: @kick <char name/ID>).
// @questskill / @lostskill
-1027: Please enter a quest skill number.
+1027: Please enter a quest skill ID.
// @spiritball
1028: Please enter an amount (usage: @spiritball <number: 0-%d>).
@@ -883,7 +848,7 @@
1060: NoWarp |
1061: NoWarpTo |
1062: NoReturn |
-1063: NoGo |
+//1063 FREE
1064: NoMemo |
1065: No Exp Penalty: %s | No Zeny Penalty: %s
1066: On
@@ -899,7 +864,7 @@
1076: Clouds2 |
1077: Fireworks |
1078: Leaves |
-//1079: Rain |
+//1079 FREE
1080: Displays Night |
1081: Other Flags:
1082: NoBranch |
@@ -1013,14 +978,14 @@
1150: Please enter a message (usage: @localbroadcast <message>).
// @email
-1151: Please enter 2 emails (usage: @email <actual@email> <new@email>).
+1151: Please enter two e-mail addresses (usage: @email <current@email> <new@email>).
// @effect
1152: Please enter an effect number (usage: @effect <effect number>).
// @npcmove
1153: Usage: @npcmove <X> <Y> <npc_name>
-1154: NPC is not on this map.
+1154: NPC is not in this map.
1155: NPC moved.
// @addwarp
@@ -1064,15 +1029,15 @@
// @changelook
1177: Usage: @changelook {<position>} <view id>
-1178: Position: 1-Top 2-Middle 3-Bottom 4-Weapon 5-Shield 6-Shoes 7-Robe
+1178: Position: 1:Top 2:Middle 3:Bottom 4:Weapon 5:Shield 6:Shoes 7:Robe
// @autotrade
-1179: Autotrade is not allowed on this map.
+1179: Autotrade is not allowed in this map.
1180: You cannot autotrade when dead.
// @changegm
1181: You need to be a Guild Master to use this command.
-1182: You cannot change guild leaders on this map.
+1182: You cannot change guild leaders in this map.
1183: Usage: @changegm <guild_member_name>
1184: Target character must be online and be a guild member.
@@ -1100,9 +1065,7 @@
1199: Items on your autolootitem list:
1200: Your autolootitem list has been reset.
-// @rain
-//1201: The rain has stopped.
-//1202: It has started to rain.
+//1201-1202 FREE
// @snow
1203: Snow has stopped falling.
@@ -1113,20 +1076,20 @@
1206: Cherry tree leaves have begun to fall.
// @clouds
-1207: The clouds has disappear.
-1208: Clouds appear.
+1207: Clouds have disappeared.
+1208: Clouds appeared.
// @clouds2
-1209: The alternative clouds disappear.
-1210: Alternative clouds appear.
+1209: Alternative clouds have disappeared.
+1210: Alternative clouds appeared.
// @fog
1211: The fog has gone.
1212: Fog hangs over.
// @leaves
-1213: Leaves no longer fall.
-1214: Fallen leaves fall.
+1213: Leaves have stopped falling.
+1214: Leaves started falling.
// @fireworks
1215: Fireworks have ended.
@@ -1157,7 +1120,7 @@
1226: Usage: @adjgroup <group_id>
1227: Specified group does not exist.
1228: Group changed successfully.
-1229: Your group has changed.
+1229: Your group has been changed.
// @trade
1230: Please enter a player name (usage: @trade <char name>).
@@ -1210,7 +1173,7 @@
1257: Invalid Homunculus ID.
// @homfriendly
-1258: Please enter a friendly value (usage: @homfriendly <friendly value [0-1000]>).
+1258: Please enter an intimacy value (usage: @homfriendly <intimacy value [0-1000]>).
// @homhungry
1259: Please enter a hunger value (usage: @homhungry <hunger value [0-100]>).
@@ -1245,14 +1208,14 @@
1278: None
1279: With script
1280: NPC Buy:%dz, Sell:%dz | Weight: %.1f
-1281: - Available in the shops only.
+1281: - Available in shops only.
1282: - Maximal monsters drop chance: %02.02f%%
1283: - Monsters don't drop this item.
// @whodrops
1284: Please enter item name/ID (usage: @whodrops <item name/ID>).
1285: Item: '%s'[%d]
-1286: - Item is not dropped by mobs.
+1286: - Item is not dropped by any mobs.
1287: - Common mobs with highest drop chance (only max %d are listed):
// @whereis
@@ -1260,16 +1223,12 @@
1289: %s spawns in:
1290: This monster does not spawn normally.
-// @adopt
-1291: Usage: @adopt <father>,<mother>,<child>
-1292: Adopting: --%s--%s--%s--\n
-1293: Cannot find player %s online.
-1294: They are family... wish them luck.
+//1291-1293 FREE
// @version
+1294: SVN r%s
1295: Git Hash '%s'
1296: Cannot determine version.
-1436: SVN r%s
// @mutearea
1297: Please enter a time in minutes (usage: @mutearea/@stfu <time in minutes>).
@@ -1307,7 +1266,7 @@
1315: Available Flags:
// @showexp
-1316: Gained exp will not be shown.
+1316: Gained exp will not be shown.
1317: Gained exp is now shown.
// @showzeny
@@ -1439,12 +1398,13 @@
1399: Unknown Channel (usage: %s <#channel_name>)
1400: Unknown Channel '%s' (usage: %s <#channel_name>)
1401: '%s' Channel is password protected (usage: %s <#channel_name> <password>)
+//1402 used by hercules chat feature
1403: You're now in the '%s' channel
// Hercules Chat Feature
1402: You're not in that channel, type '@join <#channel_name>'
-1475: You're already in the '%s' channel
1435: You're now in the '#%s' channel for '%s'
+1436: You're already in the '%s' channel
// @channel
1404: %s failed
@@ -1474,16 +1434,17 @@
1428: - binds your global chat to <channel name>, making anything you type in global be sent to the channel
1429: -- %s unbind
1430: - unbinds your global chat from its attached channel (if binded)
-1431: Your global chat is now binded to the '%s' channel
-1432: Your global chat is not binded to any channel
-1433: Your global chat is now unbinded from the '#%s' channel
+1431: Your global chat is now bound to the '%s' channel
+1432: Your global chat is not bound to any channel
+1433: Your global chat is no longer bound to the '#%s' channel
1434: Player '%s' was not found
-1437: Player '%s' has now been banned from '%s' channel
+//1435-1436 used by hercules chat feature
+1437: Player '%s' has now been banned from the '%s' channel
1438: You cannot join the '%s' channel because you've been banned from it
1439: Channel '%s' has no banned players
1440: Player '%s' is not banned from this channel
1441: Player '%s' has now been unbanned from the '%s' channel
-1442: Removed all bans from '%s' channel
+1442: Removed all bans from the '%s' channel
1443: -- '%s' ban list
1444: - %s
1445: - %s (%d)
@@ -1505,7 +1466,7 @@
1461: - unbans <character name> from <channel name> channel
1462: -- %s setopt <channel name> <option name> <option value>
1463: - adds or removes <option name> with <option value> to <channel name> channel
-1464: Ban failed, not possible to ban this user.
+1464: Ban failed, it is not possible to ban this user.
1465: Player '%s' is already banned from this channel
1466: For '%s' you need the amount of seconds (from 0 to 10)
1467: -- %s unbanall <channel name>
@@ -1520,15 +1481,15 @@
//src/map/pc.c::pc_isUseitem
1474: You cannot use this item while sitting
-1475: You cannot use this item while storage is open
+1475: You cannot use this item while your storage is open
1476: You are already mounting something else
//src/map/pc.c::pc_isUseitem
-1477: Item cannot be open when inventory is full
+1477: Item cannot be opened when inventory is full
//@homlv
-1478: Homun reached its maximum level of '%d'
+1478: Homunculus reached its maximum level of '%d'
//src/map/clif.c::clif_parse_GlobalMessage
1479: Dear angel, can you hear my voice?
diff --git a/src/char/inter.c b/src/char/inter.c
index ff99865f8..e1deb1a07 100644
--- a/src/char/inter.c
+++ b/src/char/inter.c
@@ -66,8 +66,8 @@ struct WisData {
static DBMap* wis_db = NULL; // int wis_id -> struct WisData*
static int wis_dellist[WISDELLIST_MAX], wis_delnum;
-#define MAX_JOB_NAMES 106
-static char* msg_table[MAX_JOB_NAMES]; // messages 550 ~ 655 are job names
+#define MAX_JOB_NAMES 150
+static char* msg_table[MAX_JOB_NAMES]; // messages 550 ~ 699 are job names
const char* msg_txt(int msg_number) {
msg_number -= 550;
@@ -78,17 +78,24 @@ const char* msg_txt(int msg_number) {
return "Unknown";
}
-/*==========================================
- * Read Message Data -- at char server we only keep job names.
- *------------------------------------------*/
-int msg_config_read(const char* cfgName) {
+/**
+ * Reads Message Data.
+ *
+ * This is a modified version of the mapserver's msg_config_read to
+ * only read messages with IDs between 550 and 550+MAX_JOB_NAMES.
+ *
+ * @param[in] cfg_name configuration filename to read.
+ * @param[in] allow_override whether to allow duplicate message IDs to override the original value.
+ * @return success state.
+ */
+bool msg_config_read(const char *cfg_name, bool allow_override) {
int msg_number;
char line[1024], w1[1024], w2[1024];
FILE *fp;
static int called = 1;
- if ((fp = fopen(cfgName, "r")) == NULL) {
- ShowError("Messages file not found: %s\n", cfgName);
+ if ((fp = fopen(cfg_name, "r")) == NULL) {
+ ShowError("Messages file not found: %s\n", cfg_name);
return 1;
}
@@ -102,15 +109,21 @@ int msg_config_read(const char* cfgName) {
continue;
if (strcmpi(w1, "import") == 0)
- msg_config_read(w2);
+ msg_config_read(w2, true);
else {
msg_number = atoi(w1);
if( msg_number < 550 || msg_number > (550+MAX_JOB_NAMES) )
continue;
msg_number -= 550;
if (msg_number >= 0 && msg_number < MAX_JOB_NAMES) {
- if (msg_table[msg_number] != NULL)
+ if (msg_table[msg_number] != NULL) {
+ if (!allow_override) {
+ ShowError("Duplicate message: ID '%d' was already used for '%s'. Message '%s' will be ignored.\n",
+ msg_number, w2, msg_table[msg_number]);
+ continue;
+ }
aFree(msg_table[msg_number]);
+ }
msg_table[msg_number] = (char *)aMalloc((strlen(w2) + 1)*sizeof (char));
strcpy(msg_table[msg_number],w2);
}
@@ -133,107 +146,107 @@ void do_final_msg(void) {
/* from pc.c due to @accinfo. any ideas to replace this crap are more than welcome. */
const char* job_name(int class_) {
switch (class_) {
- case JOB_NOVICE:
- case JOB_SWORDMAN:
- case JOB_MAGE:
- case JOB_ARCHER:
- case JOB_ACOLYTE:
- case JOB_MERCHANT:
- case JOB_THIEF:
+ case JOB_NOVICE: // 550
+ case JOB_SWORDMAN: // 551
+ case JOB_MAGE: // 552
+ case JOB_ARCHER: // 553
+ case JOB_ACOLYTE: // 554
+ case JOB_MERCHANT: // 555
+ case JOB_THIEF: // 556
return msg_txt(550 - JOB_NOVICE+class_);
- case JOB_KNIGHT:
- case JOB_PRIEST:
- case JOB_WIZARD:
- case JOB_BLACKSMITH:
- case JOB_HUNTER:
- case JOB_ASSASSIN:
+ case JOB_KNIGHT: // 557
+ case JOB_PRIEST: // 558
+ case JOB_WIZARD: // 559
+ case JOB_BLACKSMITH: // 560
+ case JOB_HUNTER: // 561
+ case JOB_ASSASSIN: // 562
return msg_txt(557 - JOB_KNIGHT+class_);
case JOB_KNIGHT2:
return msg_txt(557);
- case JOB_CRUSADER:
- case JOB_MONK:
- case JOB_SAGE:
- case JOB_ROGUE:
- case JOB_ALCHEMIST:
- case JOB_BARD:
- case JOB_DANCER:
+ case JOB_CRUSADER: // 563
+ case JOB_MONK: // 564
+ case JOB_SAGE: // 565
+ case JOB_ROGUE: // 566
+ case JOB_ALCHEMIST: // 567
+ case JOB_BARD: // 568
+ case JOB_DANCER: // 569
return msg_txt(563 - JOB_CRUSADER+class_);
case JOB_CRUSADER2:
return msg_txt(563);
- case JOB_WEDDING:
- case JOB_SUPER_NOVICE:
- case JOB_GUNSLINGER:
- case JOB_NINJA:
- case JOB_XMAS:
+ case JOB_WEDDING: // 570
+ case JOB_SUPER_NOVICE: // 571
+ case JOB_GUNSLINGER: // 572
+ case JOB_NINJA: // 573
+ case JOB_XMAS: // 574
return msg_txt(570 - JOB_WEDDING+class_);
case JOB_SUMMER:
return msg_txt(621);
- case JOB_NOVICE_HIGH:
- case JOB_SWORDMAN_HIGH:
- case JOB_MAGE_HIGH:
- case JOB_ARCHER_HIGH:
- case JOB_ACOLYTE_HIGH:
- case JOB_MERCHANT_HIGH:
- case JOB_THIEF_HIGH:
+ case JOB_NOVICE_HIGH: // 575
+ case JOB_SWORDMAN_HIGH: // 576
+ case JOB_MAGE_HIGH: // 577
+ case JOB_ARCHER_HIGH: // 578
+ case JOB_ACOLYTE_HIGH: // 579
+ case JOB_MERCHANT_HIGH: // 580
+ case JOB_THIEF_HIGH: // 581
return msg_txt(575 - JOB_NOVICE_HIGH+class_);
- case JOB_LORD_KNIGHT:
- case JOB_HIGH_PRIEST:
- case JOB_HIGH_WIZARD:
- case JOB_WHITESMITH:
- case JOB_SNIPER:
- case JOB_ASSASSIN_CROSS:
+ case JOB_LORD_KNIGHT: // 582
+ case JOB_HIGH_PRIEST: // 583
+ case JOB_HIGH_WIZARD: // 584
+ case JOB_WHITESMITH: // 585
+ case JOB_SNIPER: // 586
+ case JOB_ASSASSIN_CROSS: // 587
return msg_txt(582 - JOB_LORD_KNIGHT+class_);
case JOB_LORD_KNIGHT2:
return msg_txt(582);
- case JOB_PALADIN:
- case JOB_CHAMPION:
- case JOB_PROFESSOR:
- case JOB_STALKER:
- case JOB_CREATOR:
- case JOB_CLOWN:
- case JOB_GYPSY:
+ case JOB_PALADIN: // 588
+ case JOB_CHAMPION: // 589
+ case JOB_PROFESSOR: // 590
+ case JOB_STALKER: // 591
+ case JOB_CREATOR: // 592
+ case JOB_CLOWN: // 593
+ case JOB_GYPSY: // 594
return msg_txt(588 - JOB_PALADIN + class_);
case JOB_PALADIN2:
return msg_txt(588);
- case JOB_BABY:
- case JOB_BABY_SWORDMAN:
- case JOB_BABY_MAGE:
- case JOB_BABY_ARCHER:
- case JOB_BABY_ACOLYTE:
- case JOB_BABY_MERCHANT:
- case JOB_BABY_THIEF:
+ case JOB_BABY: // 595
+ case JOB_BABY_SWORDMAN: // 596
+ case JOB_BABY_MAGE: // 597
+ case JOB_BABY_ARCHER: // 598
+ case JOB_BABY_ACOLYTE: // 599
+ case JOB_BABY_MERCHANT: // 600
+ case JOB_BABY_THIEF: // 601
return msg_txt(595 - JOB_BABY + class_);
- case JOB_BABY_KNIGHT:
- case JOB_BABY_PRIEST:
- case JOB_BABY_WIZARD:
- case JOB_BABY_BLACKSMITH:
- case JOB_BABY_HUNTER:
- case JOB_BABY_ASSASSIN:
+ case JOB_BABY_KNIGHT: // 602
+ case JOB_BABY_PRIEST: // 603
+ case JOB_BABY_WIZARD: // 604
+ case JOB_BABY_BLACKSMITH: // 605
+ case JOB_BABY_HUNTER: // 606
+ case JOB_BABY_ASSASSIN: // 607
return msg_txt(602 - JOB_BABY_KNIGHT + class_);
case JOB_BABY_KNIGHT2:
return msg_txt(602);
- case JOB_BABY_CRUSADER:
- case JOB_BABY_MONK:
- case JOB_BABY_SAGE:
- case JOB_BABY_ROGUE:
- case JOB_BABY_ALCHEMIST:
- case JOB_BABY_BARD:
- case JOB_BABY_DANCER:
+ case JOB_BABY_CRUSADER: // 608
+ case JOB_BABY_MONK: // 609
+ case JOB_BABY_SAGE: // 610
+ case JOB_BABY_ROGUE: // 611
+ case JOB_BABY_ALCHEMIST: // 612
+ case JOB_BABY_BARD: // 613
+ case JOB_BABY_DANCER: // 614
return msg_txt(608 - JOB_BABY_CRUSADER + class_);
case JOB_BABY_CRUSADER2:
@@ -250,74 +263,82 @@ const char* job_name(int class_) {
case JOB_SOUL_LINKER:
return msg_txt(618);
- case JOB_GANGSI:
- case JOB_DEATH_KNIGHT:
- case JOB_DARK_COLLECTOR:
+ case JOB_GANGSI: // 622
+ case JOB_DEATH_KNIGHT: // 623
+ case JOB_DARK_COLLECTOR: // 624
return msg_txt(622 - JOB_GANGSI+class_);
- case JOB_RUNE_KNIGHT:
- case JOB_WARLOCK:
- case JOB_RANGER:
- case JOB_ARCH_BISHOP:
- case JOB_MECHANIC:
- case JOB_GUILLOTINE_CROSS:
+ case JOB_RUNE_KNIGHT: // 625
+ case JOB_WARLOCK: // 626
+ case JOB_RANGER: // 627
+ case JOB_ARCH_BISHOP: // 628
+ case JOB_MECHANIC: // 629
+ case JOB_GUILLOTINE_CROSS: // 630
return msg_txt(625 - JOB_RUNE_KNIGHT+class_);
- case JOB_RUNE_KNIGHT_T:
- case JOB_WARLOCK_T:
- case JOB_RANGER_T:
- case JOB_ARCH_BISHOP_T:
- case JOB_MECHANIC_T:
- case JOB_GUILLOTINE_CROSS_T:
- return msg_txt(625 - JOB_RUNE_KNIGHT_T+class_);
-
- case JOB_ROYAL_GUARD:
- case JOB_SORCERER:
- case JOB_MINSTREL:
- case JOB_WANDERER:
- case JOB_SURA:
- case JOB_GENETIC:
- case JOB_SHADOW_CHASER:
+ case JOB_RUNE_KNIGHT_T: // 656
+ case JOB_WARLOCK_T: // 657
+ case JOB_RANGER_T: // 658
+ case JOB_ARCH_BISHOP_T: // 659
+ case JOB_MECHANIC_T: // 660
+ case JOB_GUILLOTINE_CROSS_T: // 661
+ return msg_txt(656 - JOB_RUNE_KNIGHT_T+class_);
+
+ case JOB_ROYAL_GUARD: // 631
+ case JOB_SORCERER: // 632
+ case JOB_MINSTREL: // 633
+ case JOB_WANDERER: // 634
+ case JOB_SURA: // 635
+ case JOB_GENETIC: // 636
+ case JOB_SHADOW_CHASER: // 637
return msg_txt(631 - JOB_ROYAL_GUARD+class_);
- case JOB_ROYAL_GUARD_T:
- case JOB_SORCERER_T:
- case JOB_MINSTREL_T:
- case JOB_WANDERER_T:
- case JOB_SURA_T:
- case JOB_GENETIC_T:
- case JOB_SHADOW_CHASER_T:
- return msg_txt(631 - JOB_ROYAL_GUARD_T+class_);
+ case JOB_ROYAL_GUARD_T: // 662
+ case JOB_SORCERER_T: // 663
+ case JOB_MINSTREL_T: // 664
+ case JOB_WANDERER_T: // 665
+ case JOB_SURA_T: // 666
+ case JOB_GENETIC_T: // 667
+ case JOB_SHADOW_CHASER_T: // 668
+ return msg_txt(662 - JOB_ROYAL_GUARD_T+class_);
case JOB_RUNE_KNIGHT2:
- case JOB_RUNE_KNIGHT_T2:
return msg_txt(625);
+ case JOB_RUNE_KNIGHT_T2:
+ return msg_txt(656);
+
case JOB_ROYAL_GUARD2:
- case JOB_ROYAL_GUARD_T2:
return msg_txt(631);
+ case JOB_ROYAL_GUARD_T2:
+ return msg_txt(662);
+
case JOB_RANGER2:
- case JOB_RANGER_T2:
return msg_txt(627);
+ case JOB_RANGER_T2:
+ return msg_txt(658);
+
case JOB_MECHANIC2:
- case JOB_MECHANIC_T2:
return msg_txt(629);
- case JOB_BABY_RUNE:
- case JOB_BABY_WARLOCK:
- case JOB_BABY_RANGER:
- case JOB_BABY_BISHOP:
- case JOB_BABY_MECHANIC:
- case JOB_BABY_CROSS:
- case JOB_BABY_GUARD:
- case JOB_BABY_SORCERER:
- case JOB_BABY_MINSTREL:
- case JOB_BABY_WANDERER:
- case JOB_BABY_SURA:
- case JOB_BABY_GENETIC:
- case JOB_BABY_CHASER:
+ case JOB_MECHANIC_T2:
+ return msg_txt(660);
+
+ case JOB_BABY_RUNE: // 638
+ case JOB_BABY_WARLOCK: // 639
+ case JOB_BABY_RANGER: // 640
+ case JOB_BABY_BISHOP: // 641
+ case JOB_BABY_MECHANIC: // 642
+ case JOB_BABY_CROSS: // 643
+ case JOB_BABY_GUARD: // 644
+ case JOB_BABY_SORCERER: // 645
+ case JOB_BABY_MINSTREL: // 646
+ case JOB_BABY_WANDERER: // 647
+ case JOB_BABY_SURA: // 648
+ case JOB_BABY_GENETIC: // 649
+ case JOB_BABY_CHASER: // 650
return msg_txt(638 - JOB_BABY_RUNE+class_);
case JOB_BABY_RUNE2:
@@ -332,19 +353,19 @@ const char* job_name(int class_) {
case JOB_BABY_MECHANIC2:
return msg_txt(642);
- case JOB_SUPER_NOVICE_E:
- case JOB_SUPER_BABY_E:
+ case JOB_SUPER_NOVICE_E: // 651
+ case JOB_SUPER_BABY_E: // 652
return msg_txt(651 - JOB_SUPER_NOVICE_E+class_);
- case JOB_KAGEROU:
- case JOB_OBORO:
+ case JOB_KAGEROU: // 653
+ case JOB_OBORO: // 654
return msg_txt(653 - JOB_KAGEROU+class_);
case JOB_REBELLION:
return msg_txt(655);
default:
- return msg_txt(656);
+ return msg_txt(620); // "Unknown Job"
}
}
@@ -916,7 +937,7 @@ int inter_init_sql(const char *file)
inter_auction_sql_init();
geoip_readdb();
- msg_config_read("conf/messages.conf");
+ msg_config_read("conf/messages.conf", false);
return 0;
}
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 6a0c75db3..50ec913c4 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -80,40 +80,46 @@ const char* atcommand_msg(int msg_number) {
return "??";
}
-/*==========================================
- * Read Message Data
- *------------------------------------------*/
-bool msg_config_read(const char* cfgName)
-{
+/**
+ * Reads Message Data
+ *
+ * @param[in] cfg_name configuration filename to read.
+ * @param[in] allow_override whether to allow duplicate message IDs to override the original value.
+ * @return success state.
+ */
+bool msg_config_read(const char *cfg_name, bool allow_override) {
int msg_number;
char line[1024], w1[1024], w2[1024];
FILE *fp;
static int called = 1;
- if ((fp = fopen(cfgName, "r")) == NULL) {
- ShowError("Messages file not found: %s\n", cfgName);
+ if ((fp = fopen(cfg_name, "r")) == NULL) {
+ ShowError("Messages file not found: %s\n", cfg_name);
return false;
}
if ((--called) == 0)
memset(atcommand->msg_table, 0, sizeof(atcommand->msg_table[0]) * MAX_MSG);
- while(fgets(line, sizeof(line), fp))
- {
+ while(fgets(line, sizeof(line), fp)) {
if (line[0] == '/' && line[1] == '/')
continue;
if (sscanf(line, "%[^:]: %[^\r\n]", w1, w2) != 2)
continue;
- if (strcmpi(w1, "import") == 0)
- msg_config_read(w2);
- else
- {
+ if (strcmpi(w1, "import") == 0) {
+ msg_config_read(w2, true);
+ } else {
msg_number = atoi(w1);
- if (msg_number >= 0 && msg_number < MAX_MSG)
- {
- if (atcommand->msg_table[msg_number] != NULL)
+ if (msg_number >= 0 && msg_number < MAX_MSG) {
+ if (atcommand->msg_table[msg_number] != NULL) {
+ if (!allow_override) {
+ ShowError("Duplicate message: ID '%d' was already used for '%s'. Message '%s' will be ignored.\n",
+ msg_number, w2, atcommand->msg_table[msg_number]);
+ continue;
+ }
aFree(atcommand->msg_table[msg_number]);
+ }
/* this could easily become consecutive memory like get_str() and save the malloc overhead for over 1k calls [Ind] */
atcommand->msg_table[msg_number] = (char *)aMalloc((strlen(w2) + 1)*sizeof (char));
strcpy(atcommand->msg_table[msg_number],w2);
@@ -156,11 +162,11 @@ ACMD(send)
// read message type as hex number (without the 0x)
if(!message || !*message ||
!((sscanf(message, "len %x", &type)==1 && (len=1))
- || sscanf(message, "%x", &type)==1) )
- {
- int i;
- for (i = 900; i <= 903; ++i)
- clif->message(fd, msg_txt(i));
+ || sscanf(message, "%x", &type)==1) ) {
+ clif->message(fd, msg_txt(900)); // Usage:
+ clif->message(fd, msg_txt(901)); // @send len <packet hex number>
+ clif->message(fd, msg_txt(902)); // @send <packet hex number> {<value>}*
+ clif->message(fd, msg_txt(903)); // Value: <type=B(default),W,L><number> or S<length>"<string>"
return false;
}
@@ -476,7 +482,7 @@ ACMD(jumpto) {
}
if( pc_isdead(sd) ) {
- clif->message(fd, msg_txt(664));
+ clif->message(fd, msg_txt(864)); // "You cannot use this command when dead."
return false;
}
@@ -503,9 +509,8 @@ ACMD(jump)
return false;
}
- if( pc_isdead(sd) )
- {
- clif->message(fd, msg_txt(664));
+ if( pc_isdead(sd) ) {
+ clif->message(fd, msg_txt(864)); // "You cannot use this command when dead."
return false;
}
@@ -980,7 +985,7 @@ ACMD(kill)
ACMD(alive)
{
if (!status->revive(&sd->bl, 100, 100)) {
- clif->message(fd, msg_txt(667));
+ clif->message(fd, msg_txt(867)); // "You're not dead."
return false;
}
clif->skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1);
@@ -1901,7 +1906,7 @@ ACMD(monster)
memset(atcmd_output, '\0', sizeof(atcmd_output));
if (!message || !*message) {
- clif->message(fd, msg_txt(80)); // Give the display name or monster name/id please.
+ clif->message(fd, msg_txt(80)); // Please specify a display name or monster name/id.
return false;
}
if (sscanf(message, "\"%23[^\"]\" %23s %d", name, monster, &number) > 1 ||
@@ -2163,7 +2168,7 @@ ACMD(memo)
if( !message || !*message || sscanf(message, "%d", &position) < 1 )
{
int i;
- clif->message(sd->fd, msg_txt(668));
+ clif->message(sd->fd, msg_txt(868)); // "Your current memo positions are:"
for( i = 0; i < MAX_MEMOPOINTS; i++ )
{
if( sd->status.memo_point[i].map )
@@ -3324,7 +3329,7 @@ ACMD(idsearch)
return false;
}
- sprintf(atcmd_output, msg_txt(77), item_name); // The reference result of '%s' (name: id):
+ sprintf(atcmd_output, msg_txt(77), item_name); // Search results for '%s' (name: id):
clif->message(fd, atcmd_output);
match = itemdb->search_name_array(item_array, MAX_SEARCH, item_name, 0);
if (match > MAX_SEARCH) {
@@ -3336,7 +3341,7 @@ ACMD(idsearch)
sprintf(atcmd_output, msg_txt(78), item_array[i]->jname, item_array[i]->nameid); // %s: %d
clif->message(fd, atcmd_output);
}
- sprintf(atcmd_output, msg_txt(79), match); // It is %d affair above.
+ sprintf(atcmd_output, msg_txt(79), match); // %d results found.
clif->message(fd, atcmd_output);
return true;
@@ -4417,7 +4422,7 @@ ACMD(jail) {
//Duration of INT_MAX to specify infinity.
sc_start4(NULL,&pl_sd->bl,SC_JAILED,100,INT_MAX,m_index,x,y,1000);
- clif->message(pl_sd->fd, msg_txt(117)); // GM has send you in jails.
+ clif->message(pl_sd->fd, msg_txt(117)); // You have been jailed by a GM.
clif->message(fd, msg_txt(118)); // Player warped in jails.
return true;
}
@@ -4734,7 +4739,7 @@ ACMD(undisguise)
{
if (sd->disguise != -1) {
pc->disguise(sd, -1);
- clif->message(fd, msg_txt(124)); // Undisguise applied.
+ clif->message(fd, msg_txt(124)); // Disguise removed.
} else {
clif->message(fd, msg_txt(125)); // You're not disguised.
return false;
@@ -4756,7 +4761,7 @@ ACMD(undisguiseall) {
pc->disguise(pl_sd, -1);
mapit->free(iter);
- clif->message(fd, msg_txt(124)); // Undisguise applied.
+ clif->message(fd, msg_txt(124)); // Disguise removed.
return true;
}
@@ -4787,7 +4792,7 @@ ACMD(undisguiseguild)
if( (pl_sd = g->member[i].sd) && pl_sd->disguise != -1 )
pc->disguise(pl_sd, -1);
- clif->message(fd, msg_txt(124)); // Undisguise applied.
+ clif->message(fd, msg_txt(124)); // Disguise removed.
return true;
}
@@ -4866,21 +4871,21 @@ ACMD(email)
memset(new_email, '\0', sizeof(new_email));
if (!message || !*message || sscanf(message, "%99s %99s", actual_email, new_email) < 2) {
- clif->message(fd, msg_txt(1151)); // Please enter 2 emails (usage: @email <actual@email> <new@email>).
+ clif->message(fd, msg_txt(1151)); // Please enter two e-mail addresses (usage: @email <current@email> <new@email>).
return false;
}
if (e_mail_check(actual_email) == 0) {
- clif->message(fd, msg_txt(144)); // Invalid actual email. If you have default e-mail, give a@a.com.
+ clif->message(fd, msg_txt(144)); // Invalid e-mail. If your email hasn't been set, use a@a.com.
return false;
} else if (e_mail_check(new_email) == 0) {
- clif->message(fd, msg_txt(145)); // Invalid new email. Please enter a real e-mail.
+ clif->message(fd, msg_txt(145)); // Invalid new email. Please enter a real e-mail address.
return false;
} else if (strcmpi(new_email, "a@a.com") == 0) {
- clif->message(fd, msg_txt(146)); // New email must be a real e-mail.
+ clif->message(fd, msg_txt(146)); // New email must be a real e-mail address.
return false;
} else if (strcmpi(actual_email, new_email) == 0) {
- clif->message(fd, msg_txt(147)); // New email must be different of the actual e-mail.
+ clif->message(fd, msg_txt(147)); // New e-mail must be different from the current e-mail address.
return false;
}
@@ -4980,7 +4985,7 @@ ACMD(npcmove) {
}
if ((m=nd->bl.m) < 0 || nd->bl.prev == NULL) {
- clif->message(fd, msg_txt(1154)); // NPC is not on this map.
+ clif->message(fd, msg_txt(1154)); // NPC is not in this map.
return false; //Not on a map.
}
@@ -5460,7 +5465,7 @@ ACMD(changelook)
ACMD(autotrade) {
if( map->list[sd->bl.m].flag.autotrade != battle_config.autotrade_mapflag ) {
- clif->message(fd, msg_txt(1179)); // Autotrade is not allowed on this map.
+ clif->message(fd, msg_txt(1179)); // Autotrade is not allowed in this map.
return false;
}
@@ -5470,7 +5475,7 @@ ACMD(autotrade) {
}
if( !sd->state.vending && !sd->state.buyingstore ) { //check if player is vending or buying
- clif->message(fd, msg_txt(549)); // "You should have a shop open to use @autotrade."
+ clif->message(fd, msg_txt(549)); // "You should have a shop open in order to use @autotrade."
return false;
}
@@ -5508,7 +5513,7 @@ ACMD(changegm) {
}
if( map->list[sd->bl.m].flag.guildlock || map->list[sd->bl.m].flag.gvg_castle ) {
- clif->message(fd, msg_txt(1182)); // You cannot change guild leaders on this map.
+ clif->message(fd, msg_txt(1182)); // You cannot change guild leaders in this map.
return false;
}
@@ -5948,7 +5953,7 @@ ACMD(clearweather) {
map->list[sd->bl.m].flag.fireworks=0;
map->list[sd->bl.m].flag.leaves=0;
clif->weather(sd->bl.m);
- clif->message(fd, msg_txt(291));
+ clif->message(fd, msg_txt(291)); // "Weather effects will disappear after teleporting or refreshing."
return true;
}
@@ -7203,7 +7208,7 @@ ACMD(version) {
sprintf(atcmd_output,msg_txt(1295),git); // Git Hash '%s'
clif->message(fd,atcmd_output);
} else if ( svn[0] != HERC_UNKNOWN_VER ) {
- sprintf(atcmd_output,msg_txt(1436),git); // SVN r%s
+ sprintf(atcmd_output,msg_txt(1294),git); // SVN r%s
clif->message(fd,atcmd_output);
} else
clif->message(fd,msg_txt(1296)); // Cannot determine version
@@ -7622,7 +7627,7 @@ ACMD(invite) {
if(battle_config.duel_only_on_same_map && target_sd->bl.m != sd->bl.m)
{
- // "Duel: You can't invite %s because he/she isn't on the same map."
+ // "Duel: You can't invite %s because he/she isn't in the same map."
sprintf(atcmd_output, msg_txt(364), message);
clif->message(fd, atcmd_output);
return false;
@@ -8294,7 +8299,7 @@ void atcommand_commands_sub(struct map_session_data* sd, const int fd, AtCommand
memset(line_buff,' ',CHATBOX_SIZE);
line_buff[CHATBOX_SIZE-1] = 0;
- clif->message(fd, msg_txt(273)); // "Commands available:"
+ clif->message(fd, msg_txt(273)); // "Available commands:"
for (cmd = dbi_first(iter); dbi_exists(iter); cmd = dbi_next(iter)) {
size_t slen;
@@ -8665,7 +8670,7 @@ ACMD(join) {
if( idb_exists(channel->users, sd->status.char_id) ) {
- sprintf(atcmd_output, msg_txt(1475),name); // You're already in the '%s' channel
+ sprintf(atcmd_output, msg_txt(1436),name); // You're already in the '%s' channel
clif->message(fd, atcmd_output);
return false;
}
diff --git a/src/map/atcommand.h b/src/map/atcommand.h
index 39f7cc2b2..bc4ab30a3 100644
--- a/src/map/atcommand.h
+++ b/src/map/atcommand.h
@@ -86,7 +86,7 @@ struct atcommand_interface {
bool (*can_use2) (struct map_session_data *sd, const char *command, AtCommandType type);
void (*load_groups) (GroupSettings **groups, config_setting_t **commands_, size_t sz);
AtCommandInfo* (*exists) (const char* name);
- bool (*msg_read) (const char* cfgName);
+ bool (*msg_read) (const char *cfg_name, bool allow_override);
void (*final_msg) (void);
/* atcommand binding */
struct atcmd_binding_data* (*get_bind_byname) (const char* name);
diff --git a/src/map/chat.c b/src/map/chat.c
index 549904ca6..08fc4a575 100644
--- a/src/map/chat.c
+++ b/src/map/chat.c
@@ -86,7 +86,7 @@ bool chat_createpcchat(struct map_session_data* sd, const char* title, const cha
}
if( map->getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNOCHAT) ) {
- clif->message (sd->fd, msg_txt(665)); // "Can't create chat rooms in this area."
+ clif->message (sd->fd, msg_txt(865)); // "Can't create chat rooms in this area."
return false;
}
diff --git a/src/map/chrif.c b/src/map/chrif.c
index 301c8ec66..1b87b7b62 100644
--- a/src/map/chrif.c
+++ b/src/map/chrif.c
@@ -782,7 +782,7 @@ bool chrif_changesex(struct map_session_data *sd) {
WFIFOW(chrif->fd,30) = 5;
WFIFOSET(chrif->fd,44);
- clif->message(sd->fd, msg_txt(408)); //"Need disconnection to perform change-sex request..."
+ clif->message(sd->fd, msg_txt(408)); //"Disconnecting to perform change-sex request..."
if (sd->fd)
clif->authfail_fd(sd->fd, 15);
@@ -887,7 +887,7 @@ void chrif_changedsex(int fd) {
// save character
sd->login_id1++; // change identify, because if player come back in char within the 5 seconds, he can change its characters
// do same modify in login-server for the account, but no in char-server (it ask again login_id1 to login, and don't remember it)
- clif->message(sd->fd, msg_txt(409)); //"Your sex has been changed (need disconnection by the server)..."
+ clif->message(sd->fd, msg_txt(409)); //"Your sex has been changed (disconnection required to complete the process)..."
set_eof(sd->fd); // forced to disconnect for the change
map->quit(sd); // Remove leftovers (e.g. autotrading) [Paradox924X]
}
@@ -982,7 +982,7 @@ void chrif_idbanned(int fd) {
if (RFIFOB(fd,6) == 0) { // 0: change of statut
int ret_status = RFIFOL(fd,7); // status or final date of a banishment
if(0<ret_status && ret_status<=9)
- clif->message(sd->fd, msg_txt(411+ret_status));
+ clif->message(sd->fd, msg_txt(411+ret_status)); // Message IDs (for search convenience): 412, 413, 414, 415, 416, 417, 418, 419, 420
else if(ret_status==100)
clif->message(sd->fd, msg_txt(421));
else
diff --git a/src/map/clif.c b/src/map/clif.c
index 5387f8fb8..c61a72597 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -6931,7 +6931,7 @@ void clif_sendegg(struct map_session_data *sd)
fd=sd->fd;
if (battle_config.pet_no_gvg && map_flag_gvg2(sd->bl.m)) { //Disable pet hatching in GvG grounds during Guild Wars [Skotlex]
- clif->message(fd, msg_txt(666));
+ clif->message(fd, msg_txt(866)); // "Pets are not allowed in Guild Wars."
return;
}
WFIFOHEAD(fd, MAX_INVENTORY * 2 + 4);
@@ -9350,7 +9350,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) {
// pet
if( sd->pd ) {
if( battle_config.pet_no_gvg && map_flag_gvg2(sd->bl.m) ) { //Return the pet to egg. [Skotlex]
- clif->message(sd->fd, msg_txt(666));
+ clif->message(sd->fd, msg_txt(866)); // "Pets are not allowed in Guild Wars."
pet->menu(sd, 3); //Option 3 is return to egg.
} else {
map->addblock(&sd->pd->bl);
@@ -10908,7 +10908,7 @@ void clif_parse_CreateChatRoom(int fd, struct map_session_data* sd)
if( npc->isnear(&sd->bl) ) {
// uncomment for more verbose message.
//char output[150];
- //sprintf(output, msg_txt(662), battle_config.min_npc_vendchat_distance);
+ //sprintf(output, msg_txt(862), battle_config.min_npc_vendchat_distance); // "You're too close to a NPC, you must be at least %d cells away from any NPC."
//clif_displaymessage(sd->fd, output);
clif->skill_fail(sd,1,USESKILL_FAIL_THERE_ARE_NPC_AROUND,0);
return;
@@ -13173,7 +13173,7 @@ void clif_parse_GuildLeave(int fd,struct map_session_data *sd) {
return;
}
if( sd->bg_id ) {
- clif->message(fd, msg_txt(670)); //"You can't leave battleground guilds."
+ clif->message(fd, msg_txt(870)); //"You can't leave battleground guilds."
return;
}
@@ -14041,7 +14041,7 @@ void clif_parse_FriendsListAdd(int fd, struct map_session_data *sd) {
// Friend already exists
for (i = 0; i < MAX_FRIENDS && sd->status.friends[i].char_id != 0; i++) {
if (sd->status.friends[i].char_id == f_sd->status.char_id) {
- clif->message(fd, msg_txt(671)); //"Friend already exists."
+ clif->message(fd, msg_txt(871)); //"Friend already exists."
return;
}
}
@@ -14137,7 +14137,7 @@ void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd)
(sd->status.friends[i].char_id != char_id || sd->status.friends[i].account_id != account_id); i++);
if (i == MAX_FRIENDS) {
- clif->message(fd, msg_txt(672)); //"Name not found in list."
+ clif->message(fd, msg_txt(872)); //"Name not found in list."
return;
}
@@ -14162,7 +14162,7 @@ void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd)
} else { //friend not online -- ask char server to delete from his friendlist
if(!chrif->removefriend(char_id,sd->status.char_id)) { // char-server offline, abort
- clif->message(fd, msg_txt(673)); //"This action can't be performed at the moment. Please try again later."
+ clif->message(fd, msg_txt(873)); //"This action can't be performed at the moment. Please try again later."
return;
}
}
@@ -14175,7 +14175,7 @@ void clif_parse_FriendsListRemove(int fd, struct map_session_data *sd)
memcpy(&sd->status.friends[j-1], &sd->status.friends[j], sizeof(sd->status.friends[0]));
memset(&sd->status.friends[MAX_FRIENDS-1], 0, sizeof(sd->status.friends[MAX_FRIENDS-1]));
- clif->message(fd, msg_txt(674)); //"Friend removed"
+ clif->message(fd, msg_txt(874)); //"Friend removed"
WFIFOHEAD(fd,packet_len(0x20a));
WFIFOW(fd,0) = 0x20a;
@@ -15032,7 +15032,7 @@ void clif_parse_Mail_send(int fd, struct map_session_data *sd)
}
if( DIFF_TICK(sd->cansendmail_tick, timer->gettick()) > 0 ) {
- clif->message(sd->fd,msg_txt(675)); //"Cannot send mails too fast!!."
+ clif->message(sd->fd,msg_txt(875)); //"Cannot send mails too fast!!."
clif->mail_send(fd, true); // fail
return;
}
diff --git a/src/map/guild.c b/src/map/guild.c
index 27c3b71a9..562878fb8 100644
--- a/src/map/guild.c
+++ b/src/map/guild.c
@@ -1423,7 +1423,7 @@ int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd)
if(map->agit_flag || map->agit2_flag) {
// Disable alliance creation during woe [Valaris]
- clif->message(sd->fd,msg_txt(676)); //"Alliances cannot be made during Guild Wars!"
+ clif->message(sd->fd,msg_txt(876)); //"Alliances cannot be made during Guild Wars!"
return 0;
}
@@ -1540,7 +1540,7 @@ int guild_delalliance(struct map_session_data *sd,int guild_id,int flag) {
if(map->agit_flag || map->agit2_flag) {
// Disable alliance breaking during woe [Valaris]
- clif->message(sd->fd,msg_txt(677)); //"Alliances cannot be broken during Guild Wars!"
+ clif->message(sd->fd,msg_txt(877)); //"Alliances cannot be broken during Guild Wars!"
return 0;
}
@@ -1822,12 +1822,12 @@ int guild_gm_changed(int guild_id, int account_id, int char_id)
strcpy(g->master, g->member[0].name);
if (g->member[pos].sd && g->member[pos].sd->fd) {
- clif->message(g->member[pos].sd->fd, msg_txt(678)); //"You no longer are the Guild Master."
+ clif->message(g->member[pos].sd->fd, msg_txt(878)); //"You no longer are the Guild Master."
g->member[pos].sd->state.gmaster_flag = 0;
}
if (g->member[0].sd && g->member[0].sd->fd) {
- clif->message(g->member[0].sd->fd, msg_txt(679)); //"You have become the Guild Master!"
+ clif->message(g->member[0].sd->fd, msg_txt(879)); //"You have become the Guild Master!"
g->member[0].sd->state.gmaster_flag = 1;
//Block his skills for 5 minutes to prevent abuse.
guild->block_skill(g->member[0].sd, 300000);
diff --git a/src/map/map.c b/src/map/map.c
index 838a88f01..a7e83cae3 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -5680,7 +5680,7 @@ int do_init(int argc, char *argv[])
}
battle->config_read(map->BATTLE_CONF_FILENAME);
- atcommand->msg_read(map->MSG_CONF_NAME);
+ atcommand->msg_read(map->MSG_CONF_NAME, false);
map->inter_config_read(map->INTER_CONF_NAME);
logs->config_read(map->LOG_CONF_NAME);
}
diff --git a/src/map/mob.c b/src/map/mob.c
index ff63048d1..8f12d4b1b 100644
--- a/src/map/mob.c
+++ b/src/map/mob.c
@@ -146,7 +146,7 @@ void mvptomb_create(struct mob_data *md, char *killer, time_t time)
nd->bl.y = md->bl.y;
nd->bl.type = BL_NPC;
- safestrncpy(nd->name, msg_txt(656), sizeof(nd->name));
+ safestrncpy(nd->name, msg_txt(856), sizeof(nd->name)); // "Tomb"
nd->class_ = 565;
nd->speed = 200;
diff --git a/src/map/npc.c b/src/map/npc.c
index 36efc7267..fa2fa1ead 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -1115,28 +1115,27 @@ int npc_globalmessage(const char* name, const char* mes)
}
// MvP tomb [GreenBox]
-void run_tomb(struct map_session_data* sd, struct npc_data* nd)
-{
+void run_tomb(struct map_session_data* sd, struct npc_data* nd) {
char buffer[200];
- char time[10];
+ char time[10];
- strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time));
+ strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time));
// TODO: Find exact color?
- snprintf(buffer, sizeof(buffer), msg_txt(657), nd->u.tomb.md->db->name);
- clif->scriptmes(sd, nd->bl.id, buffer);
+ snprintf(buffer, sizeof(buffer), msg_txt(857), nd->u.tomb.md->db->name); // "[ ^EE0000%s^000000 ]"
+ clif->scriptmes(sd, nd->bl.id, buffer);
- clif->scriptmes(sd, nd->bl.id, msg_txt(658));
+ clif->scriptmes(sd, nd->bl.id, msg_txt(858)); // "Has met its demise"
- snprintf(buffer, sizeof(buffer), msg_txt(659), time);
- clif->scriptmes(sd, nd->bl.id, buffer);
+ snprintf(buffer, sizeof(buffer), msg_txt(859), time); // "Time of death : ^EE0000%s^000000"
+ clif->scriptmes(sd, nd->bl.id, buffer);
- clif->scriptmes(sd, nd->bl.id, msg_txt(660));
+ clif->scriptmes(sd, nd->bl.id, msg_txt(860)); // "Defeated by"
- snprintf(buffer, sizeof(buffer), msg_txt(661), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : "Unknown");
- clif->scriptmes(sd, nd->bl.id, buffer);
+ snprintf(buffer, sizeof(buffer), msg_txt(861), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : msg_txt(15)); // "[^EE0000%s^000000]" / "Unknown"
+ clif->scriptmes(sd, nd->bl.id, buffer);
- clif->scriptclose(sd, nd->bl.id);
+ clif->scriptclose(sd, nd->bl.id);
}
/*==========================================
diff --git a/src/map/pc.c b/src/map/pc.c
index 284a459e7..31aac3445 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -4221,9 +4221,8 @@ int pc_isUseitem(struct map_session_data *sd,int n)
case ITEMID_WOB_RACHEL: // Red Butterfly Wing
case ITEMID_WOB_LOCAL: // Blue Butterfly Wing
case ITEMID_SIEGE_TELEPORT_SCROLL:
- if( sd->duel_group && !battle_config.duel_allow_teleport )
- {
- clif->message(sd->fd, msg_txt(663));
+ if( sd->duel_group && !battle_config.duel_allow_teleport ) {
+ clif->message(sd->fd, msg_txt(863)); // "Duel: Can't use this item in duel."
return 0;
}
if( nameid != ITEMID_WING_OF_FLY && nameid != ITEMID_GIANT_FLY_WING && map->list[sd->bl.m].flag.noreturn )
@@ -5557,107 +5556,107 @@ int pc_mapid2jobid(unsigned short class_, int sex)
const char* job_name(int class_)
{
switch (class_) {
- case JOB_NOVICE:
- case JOB_SWORDMAN:
- case JOB_MAGE:
- case JOB_ARCHER:
- case JOB_ACOLYTE:
- case JOB_MERCHANT:
- case JOB_THIEF:
+ case JOB_NOVICE: // 550
+ case JOB_SWORDMAN: // 551
+ case JOB_MAGE: // 552
+ case JOB_ARCHER: // 553
+ case JOB_ACOLYTE: // 554
+ case JOB_MERCHANT: // 555
+ case JOB_THIEF: // 556
return msg_txt(550 - JOB_NOVICE+class_);
- case JOB_KNIGHT:
- case JOB_PRIEST:
- case JOB_WIZARD:
- case JOB_BLACKSMITH:
- case JOB_HUNTER:
- case JOB_ASSASSIN:
+ case JOB_KNIGHT: // 557
+ case JOB_PRIEST: // 558
+ case JOB_WIZARD: // 559
+ case JOB_BLACKSMITH: // 560
+ case JOB_HUNTER: // 561
+ case JOB_ASSASSIN: // 562
return msg_txt(557 - JOB_KNIGHT+class_);
case JOB_KNIGHT2:
return msg_txt(557);
- case JOB_CRUSADER:
- case JOB_MONK:
- case JOB_SAGE:
- case JOB_ROGUE:
- case JOB_ALCHEMIST:
- case JOB_BARD:
- case JOB_DANCER:
+ case JOB_CRUSADER: // 563
+ case JOB_MONK: // 564
+ case JOB_SAGE: // 565
+ case JOB_ROGUE: // 566
+ case JOB_ALCHEMIST: // 567
+ case JOB_BARD: // 568
+ case JOB_DANCER: // 569
return msg_txt(563 - JOB_CRUSADER+class_);
case JOB_CRUSADER2:
return msg_txt(563);
- case JOB_WEDDING:
- case JOB_SUPER_NOVICE:
- case JOB_GUNSLINGER:
- case JOB_NINJA:
- case JOB_XMAS:
+ case JOB_WEDDING: // 570
+ case JOB_SUPER_NOVICE: // 571
+ case JOB_GUNSLINGER: // 572
+ case JOB_NINJA: // 573
+ case JOB_XMAS: // 574
return msg_txt(570 - JOB_WEDDING+class_);
case JOB_SUMMER:
return msg_txt(621);
- case JOB_NOVICE_HIGH:
- case JOB_SWORDMAN_HIGH:
- case JOB_MAGE_HIGH:
- case JOB_ARCHER_HIGH:
- case JOB_ACOLYTE_HIGH:
- case JOB_MERCHANT_HIGH:
- case JOB_THIEF_HIGH:
+ case JOB_NOVICE_HIGH: // 575
+ case JOB_SWORDMAN_HIGH: // 576
+ case JOB_MAGE_HIGH: // 577
+ case JOB_ARCHER_HIGH: // 578
+ case JOB_ACOLYTE_HIGH: // 579
+ case JOB_MERCHANT_HIGH: // 580
+ case JOB_THIEF_HIGH: // 581
return msg_txt(575 - JOB_NOVICE_HIGH+class_);
- case JOB_LORD_KNIGHT:
- case JOB_HIGH_PRIEST:
- case JOB_HIGH_WIZARD:
- case JOB_WHITESMITH:
- case JOB_SNIPER:
- case JOB_ASSASSIN_CROSS:
+ case JOB_LORD_KNIGHT: // 582
+ case JOB_HIGH_PRIEST: // 583
+ case JOB_HIGH_WIZARD: // 584
+ case JOB_WHITESMITH: // 585
+ case JOB_SNIPER: // 586
+ case JOB_ASSASSIN_CROSS: // 587
return msg_txt(582 - JOB_LORD_KNIGHT+class_);
case JOB_LORD_KNIGHT2:
return msg_txt(582);
- case JOB_PALADIN:
- case JOB_CHAMPION:
- case JOB_PROFESSOR:
- case JOB_STALKER:
- case JOB_CREATOR:
- case JOB_CLOWN:
- case JOB_GYPSY:
+ case JOB_PALADIN: // 588
+ case JOB_CHAMPION: // 589
+ case JOB_PROFESSOR: // 590
+ case JOB_STALKER: // 591
+ case JOB_CREATOR: // 592
+ case JOB_CLOWN: // 593
+ case JOB_GYPSY: // 594
return msg_txt(588 - JOB_PALADIN + class_);
case JOB_PALADIN2:
return msg_txt(588);
- case JOB_BABY:
- case JOB_BABY_SWORDMAN:
- case JOB_BABY_MAGE:
- case JOB_BABY_ARCHER:
- case JOB_BABY_ACOLYTE:
- case JOB_BABY_MERCHANT:
- case JOB_BABY_THIEF:
+ case JOB_BABY: // 595
+ case JOB_BABY_SWORDMAN: // 596
+ case JOB_BABY_MAGE: // 597
+ case JOB_BABY_ARCHER: // 598
+ case JOB_BABY_ACOLYTE: // 599
+ case JOB_BABY_MERCHANT: // 600
+ case JOB_BABY_THIEF: // 601
return msg_txt(595 - JOB_BABY + class_);
- case JOB_BABY_KNIGHT:
- case JOB_BABY_PRIEST:
- case JOB_BABY_WIZARD:
- case JOB_BABY_BLACKSMITH:
- case JOB_BABY_HUNTER:
- case JOB_BABY_ASSASSIN:
+ case JOB_BABY_KNIGHT: // 602
+ case JOB_BABY_PRIEST: // 603
+ case JOB_BABY_WIZARD: // 604
+ case JOB_BABY_BLACKSMITH: // 605
+ case JOB_BABY_HUNTER: // 606
+ case JOB_BABY_ASSASSIN: // 607
return msg_txt(602 - JOB_BABY_KNIGHT + class_);
case JOB_BABY_KNIGHT2:
return msg_txt(602);
- case JOB_BABY_CRUSADER:
- case JOB_BABY_MONK:
- case JOB_BABY_SAGE:
- case JOB_BABY_ROGUE:
- case JOB_BABY_ALCHEMIST:
- case JOB_BABY_BARD:
- case JOB_BABY_DANCER:
+ case JOB_BABY_CRUSADER: // 608
+ case JOB_BABY_MONK: // 609
+ case JOB_BABY_SAGE: // 610
+ case JOB_BABY_ROGUE: // 611
+ case JOB_BABY_ALCHEMIST: // 612
+ case JOB_BABY_BARD: // 613
+ case JOB_BABY_DANCER: // 614
return msg_txt(608 - JOB_BABY_CRUSADER + class_);
case JOB_BABY_CRUSADER2:
@@ -5674,74 +5673,82 @@ const char* job_name(int class_)
case JOB_SOUL_LINKER:
return msg_txt(618);
- case JOB_GANGSI:
- case JOB_DEATH_KNIGHT:
- case JOB_DARK_COLLECTOR:
+ case JOB_GANGSI: // 622
+ case JOB_DEATH_KNIGHT: // 623
+ case JOB_DARK_COLLECTOR: // 624
return msg_txt(622 - JOB_GANGSI+class_);
- case JOB_RUNE_KNIGHT:
- case JOB_WARLOCK:
- case JOB_RANGER:
- case JOB_ARCH_BISHOP:
- case JOB_MECHANIC:
- case JOB_GUILLOTINE_CROSS:
+ case JOB_RUNE_KNIGHT: // 625
+ case JOB_WARLOCK: // 626
+ case JOB_RANGER: // 627
+ case JOB_ARCH_BISHOP: // 628
+ case JOB_MECHANIC: // 629
+ case JOB_GUILLOTINE_CROSS: // 630
return msg_txt(625 - JOB_RUNE_KNIGHT+class_);
- case JOB_RUNE_KNIGHT_T:
- case JOB_WARLOCK_T:
- case JOB_RANGER_T:
- case JOB_ARCH_BISHOP_T:
- case JOB_MECHANIC_T:
- case JOB_GUILLOTINE_CROSS_T:
- return msg_txt(681 - JOB_RUNE_KNIGHT_T+class_);
-
- case JOB_ROYAL_GUARD:
- case JOB_SORCERER:
- case JOB_MINSTREL:
- case JOB_WANDERER:
- case JOB_SURA:
- case JOB_GENETIC:
- case JOB_SHADOW_CHASER:
+ case JOB_RUNE_KNIGHT_T: // 656
+ case JOB_WARLOCK_T: // 657
+ case JOB_RANGER_T: // 658
+ case JOB_ARCH_BISHOP_T: // 659
+ case JOB_MECHANIC_T: // 660
+ case JOB_GUILLOTINE_CROSS_T: // 661
+ return msg_txt(656 - JOB_RUNE_KNIGHT_T+class_);
+
+ case JOB_ROYAL_GUARD: // 631
+ case JOB_SORCERER: // 632
+ case JOB_MINSTREL: // 633
+ case JOB_WANDERER: // 634
+ case JOB_SURA: // 635
+ case JOB_GENETIC: // 636
+ case JOB_SHADOW_CHASER: // 637
return msg_txt(631 - JOB_ROYAL_GUARD+class_);
- case JOB_ROYAL_GUARD_T:
- case JOB_SORCERER_T:
- case JOB_MINSTREL_T:
- case JOB_WANDERER_T:
- case JOB_SURA_T:
- case JOB_GENETIC_T:
- case JOB_SHADOW_CHASER_T:
- return msg_txt(687 - JOB_ROYAL_GUARD_T+class_);
+ case JOB_ROYAL_GUARD_T: // 662
+ case JOB_SORCERER_T: // 663
+ case JOB_MINSTREL_T: // 664
+ case JOB_WANDERER_T: // 665
+ case JOB_SURA_T: // 666
+ case JOB_GENETIC_T: // 667
+ case JOB_SHADOW_CHASER_T: // 668
+ return msg_txt(662 - JOB_ROYAL_GUARD_T+class_);
case JOB_RUNE_KNIGHT2:
- case JOB_RUNE_KNIGHT_T2:
return msg_txt(625);
+ case JOB_RUNE_KNIGHT_T2:
+ return msg_txt(656);
+
case JOB_ROYAL_GUARD2:
- case JOB_ROYAL_GUARD_T2:
return msg_txt(631);
+ case JOB_ROYAL_GUARD_T2:
+ return msg_txt(662);
+
case JOB_RANGER2:
- case JOB_RANGER_T2:
return msg_txt(627);
+ case JOB_RANGER_T2:
+ return msg_txt(658);
+
case JOB_MECHANIC2:
- case JOB_MECHANIC_T2:
return msg_txt(629);
- case JOB_BABY_RUNE:
- case JOB_BABY_WARLOCK:
- case JOB_BABY_RANGER:
- case JOB_BABY_BISHOP:
- case JOB_BABY_MECHANIC:
- case JOB_BABY_CROSS:
- case JOB_BABY_GUARD:
- case JOB_BABY_SORCERER:
- case JOB_BABY_MINSTREL:
- case JOB_BABY_WANDERER:
- case JOB_BABY_SURA:
- case JOB_BABY_GENETIC:
- case JOB_BABY_CHASER:
+ case JOB_MECHANIC_T2:
+ return msg_txt(660);
+
+ case JOB_BABY_RUNE: // 638
+ case JOB_BABY_WARLOCK: // 639
+ case JOB_BABY_RANGER: // 640
+ case JOB_BABY_BISHOP: // 641
+ case JOB_BABY_MECHANIC: // 642
+ case JOB_BABY_CROSS: // 643
+ case JOB_BABY_GUARD: // 644
+ case JOB_BABY_SORCERER: // 645
+ case JOB_BABY_MINSTREL: // 646
+ case JOB_BABY_WANDERER: // 647
+ case JOB_BABY_SURA: // 648
+ case JOB_BABY_GENETIC: // 649
+ case JOB_BABY_CHASER: // 650
return msg_txt(638 - JOB_BABY_RUNE+class_);
case JOB_BABY_RUNE2:
@@ -5756,19 +5763,19 @@ const char* job_name(int class_)
case JOB_BABY_MECHANIC2:
return msg_txt(642);
- case JOB_SUPER_NOVICE_E:
- case JOB_SUPER_BABY_E:
+ case JOB_SUPER_NOVICE_E: // 651
+ case JOB_SUPER_BABY_E: // 652
return msg_txt(651 - JOB_SUPER_NOVICE_E+class_);
- case JOB_KAGEROU:
- case JOB_OBORO:
+ case JOB_KAGEROU: // 653
+ case JOB_OBORO: // 654
return msg_txt(653 - JOB_KAGEROU+class_);
case JOB_REBELLION:
return msg_txt(655);
default:
- return msg_txt(656);
+ return msg_txt(620); // "Unknown Job"
}
}
diff --git a/src/map/script.c b/src/map/script.c
index 03ebb80a3..54ca37e9f 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -12732,7 +12732,7 @@ BUILDIN(recovery)
status->revive(&sd->bl, 100, 100);
else
status_percent_heal(&sd->bl, 100, 100);
- clif->message(sd->fd,msg_txt(680));
+ clif->message(sd->fd,msg_txt(880)); // "You have been recovered!"
}
mapit->free(iter);
return true;
diff --git a/src/map/skill.c b/src/map/skill.c
index 37ee297ca..064b18bdf 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -512,7 +512,7 @@ int skillnotok (uint16 skill_id, struct map_session_data *sd)
if( npc->isnear(&sd->bl) ) {
// uncomment for more verbose message.
//char output[150];
- //sprintf(output, msg_txt(662), battle_config.min_npc_vendchat_distance);
+ //sprintf(output, msg_txt(862), battle_config.min_npc_vendchat_distance); // "You're too close to a NPC, you must be at least %d cells away from any NPC."
//clif->message(sd->fd, output);
clif->skill_fail(sd,skill_id,USESKILL_FAIL_THERE_ARE_NPC_AROUND,0);
return 1;
@@ -5503,7 +5503,7 @@ int skill_castend_nodamage_id(struct block_list *src, struct block_list *bl, uin
if (sd)
clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
if (skill->break_equip(bl, EQP_WEAPON, 10000, BCT_PARTY) && sd && sd != dstsd)
- clif->message(sd->fd, msg_txt(669));
+ clif->message(sd->fd, msg_txt(869)); // "You broke the target's weapon."
}
break;