diff options
-rw-r--r-- | conf/messages.conf | 389 | ||||
-rw-r--r-- | src/char/inter.c | 281 | ||||
-rw-r--r-- | src/map/atcommand.c | 101 | ||||
-rw-r--r-- | src/map/atcommand.h | 2 | ||||
-rw-r--r-- | src/map/chat.c | 2 | ||||
-rw-r--r-- | src/map/chrif.c | 6 | ||||
-rw-r--r-- | src/map/clif.c | 18 | ||||
-rw-r--r-- | src/map/guild.c | 8 | ||||
-rw-r--r-- | src/map/map.c | 2 | ||||
-rw-r--r-- | src/map/mob.c | 2 | ||||
-rw-r--r-- | src/map/npc.c | 25 | ||||
-rw-r--r-- | src/map/pc.c | 251 | ||||
-rw-r--r-- | src/map/script.c | 2 | ||||
-rw-r--r-- | src/map/skill.c | 4 |
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; |