From e17d1bfa00dcde02180df01edf7b028bf1c46432 Mon Sep 17 00:00:00 2001 From: FlavioJS Date: Mon, 24 Sep 2007 09:13:50 +0000 Subject: * Limited manual detection of data truncation to string/enum/blob columns. * Renamed conf-tmpl to conf. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11284 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 764 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 764 insertions(+) create mode 100644 conf/atcommand_athena.conf (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf new file mode 100644 index 000000000..183278246 --- /dev/null +++ b/conf/atcommand_athena.conf @@ -0,0 +1,764 @@ +// Athena atcommand Configuration file. +// Translated by Peter Kieser + +// Set here the symbol that you want to use for your commands +// Only 1 character is get (default is character_savecharacter_save'@'). You can set any character, +// except control-character (0x00-0x1f), '%' (party chat speaking) and '/' (standard ragnarok GM commands) +// With default character, all commands begin by a '@': @revive +command_symbol: @ + + +// Sets the level of the users that can use the GM commands. +// : level +// When battle_athena.conf has atcommand_gm_only set to no, +// normal players (gm level 0) can use GM commands if you set 0 to the command level. +// Max GM level is 99. If you want forbid a command to all people, set it with level 100. + +// Default values are set to define different GM levels like follow: +// 0: normal player +// -> no special advantage (only @time to know time and if at_command_gm_only is disabled) +// 1: Super player +// -> some (very) little advantages: storage, petrename, etc... +// 10: Super player+ +// -> same of Super player with !go (very super player) +// 20: Mediator +// -> it's a GM that only need to know people, and move to their to speak with them (they can access to any command about wisps) +// 40: Sub-GM +// -> This GM can help a GM, and can not create item or zeny or modify a character (can have some information commands) +// 50: Sub-GM+ +// -> This GM can change some non-important things on a character +// 60: GM +// -> can do almost anything (excep administration, and mass commands) +// GM is the first level where we can modify a character with important value, create items or create zenys +// 80: GM Chief +// -> can do anything, except administration commands +// 99: Administrator +// -> can do anything! +// 100: Disabled +// -> Commands that aren't used. Note: You must use command level 100 to disable command. Commenting doesn't enough. + + +//-------------------------- +// 0: normal player commands +// None for security purposes. + +//------------------------- +// 1: Super player commands + +// Enables/disables autolooting from killed mobs. +autoloot: 1 + +// Allows you continue vending offline. +autotrade: 1 +at: 1 + +// Away messsage +away: 1 +aw: 1 + +// Change Guild Master of your Guild +changegm: 1 + +// Change the leader of your party. +changeleader: 1 + +//Displays a list of @ commands available to the player. +commands: 1 + +// Duel organizing commands +duel: 1 +invite: 1 +accept: 1 +reject: 1 +leave: 1 + +// To change your (own) email (characters protection) +// note: this command doesn't check email itself, but check structure of the email (xxx@xxx) +// if you want be sure of each e-mail disable this option (value: 100) +email: 1 + +//Displays current levels and % progress. +exp: 1 + +//Homunculus commands for players +homtalk: 1 +hominfo: 1 + +// Show Item info (type, price, etc) +iteminfo: 1 +ii: 1 + +// Displays remaining jail time +jailtime: 1 + +// Main chat +main: 1 + +// Displays the text as a normal message with the format "*name message*" +// instead of "name : message" (Like the /me command in IRC) +me: 1 + +// Saves a warp point. +memo: 1 + +// Show Monster info (rates, stats, drops, MVP stuff) +mobinfo: 1 +monsterinfo: 1 +mi: 1 + +// Autorejecting Deals/Invites +noask: 1 + +//Create a party +party: 1 + +// Change the party item share rules. +partyoption: 1 + +// Enables you to rename your pet. +petrename: 1 + +// Command what the player's pet will say. +pettalk: 1 + +//Displays the server rates. +rates: 1 + +// Syncs the position of the player on the client with the one stored in the server. +refresh: 1 + +// Sends a request to all connected GMs (via the gm whisper system) +request: 1 + +//Shows/Hides the "there is a delay after a skill" message. +showdelay: 1 + +//Displays/Hides Experience gained +showexp: 1 + +//Displays/Hides Zeny gained +showzeny: 1 + +// Give server time. (6 same commands) +time: 1 +date: 1 +server_date: 1 +serverdate: 1 +server_time: 1 +servertime: 1 + +// Show server uptime +uptime: 1 + +// Displays SVN version of the server. +version: 1 + +// Show who drops an item (mobs with highest drop rate) +whodrops: 1 + +//--------------------------------------------------------------- +// 0: Mail System - SQL Only commands - Must be enabled + +// Check # of messages. +checkmail: 1 + +// List all messages. +listmail: 1 + +// List only new mail. +listnewmail: 1 + +// Read a message. +readmail: 1 + +// Send mail. +sendmail: 1 + +// Send priority mail (tagged with Priority and cannot be deleted until read) +sendprioritymail: 80 + +// Delete a message. +deletemail: 1 + +//--------------------------- +// 10: Super player+ commands + +// Suicide your character. +die: 10 + +// Spawns you to set points in major cities. +go: 10 + +// Brings up your guild storage wherever you are. +gstorage: 10 + +// Create a guild +guild: 10 + +// Brings up your personal storage wherever you are. +storage: 10 + +// Locate someone on a map, returns your coordinates if the person isn't on. +where: 10 + +// Locates and displays the position of a certain mob on the current map. +mobsearch: 10 + +// Changes your apperance. +model: 10 + +// Locates and displays the position of a certain mob on your mini-map +showmobs: 10 + +// Prints out in which maps a monster normally spawns at (does not count script-invoked mobs) +whereis: 10 + +// Changes your size. +size: 10 + +//---------------------- +// 20: Mediator commands + +// Change your appearence to other players to a mob. +disguise: 20 + +// Changes GM clothes color (2 same commands) +dye: 20 +ccolor: 20 + +// Do some visual effect on your character +effect: 20 + +// Changes your name to your choice temporarly. +fakename: 20 + +// follow a player (including warping to them) +follow: 20 + +// Displays the motd file to all players +gmotd: 20 + +// Displays helpfile in Athena base directory (2 same commands). +help: 20 +h: 20 +help2: 20 +h2: 20 + +// Changes GM hair color (2 same commands) +haircolor: 20 +hcolor: 20 + +// Changes GM hair style (2 same commands) +hairstyle: 20 +hstyle: 20 + +// Warp yourself to a person (3 same commands + /shift). +jumpto: 20 +goto: 20 +warpto: 20 + +// Warp yourself to a person by PID (similar to above, cept you us the PID) +jumptoid2: 20 +gotoid2: 20 +warptoid2: 20 + +// allow other players to hit you out of pvp +killable: 20 + +// To get a peco to (un)ride +mountpeco: 20 + +// Can command what other npcs (by name) can say. +npctalk: 20 + +// Sets the speed you can walk/attack at. Default is 150. +speed: 20 + +//Restore your normal appearance. +undisguise: 20 + +// Displays distribution of players on the server per map (% on each map which has players) +users: 20 + +// Returns list of logged in characters with their position (2 same commands). +who: 20 +whois: 20 + +// Returns list of logged in characters with their job. +who2: 20 + +// Returns list of logged in characters with their party/guild. +who3: 20 + +// Returns list of logged in characters with their position in a specifical map. +whomap: 20 + +// Returns list of logged in characters with their job in a specifical map. +whomap2: 20 + +// Returns list of logged in characters with their party/guild in a specifical map. +whomap3: 20 + +// Displays GMs online. For those who are higher GM level than yourself, +// only the name is shown, for the rest, it displays the same info of +// @who+@who2+who3 +whogm: 20 + +//-------------------- +// 40: Sub-GM commands + + +// Resurects yourself. +alive: 40 + +// Levels your character to specified level (adds to your level) (3 same commands). +blvl: 40 +blevel: 40 +baselvl: 40 +baselevel: 40 + +// Broadcast to the whole server. Using (1 command + /nb, /b). +broadcast: 40 + +// Changes the sex of yourself +changesex: 40 + +// Deletes floor items in your range of sight +cleanmap: 40 + +// drop all your items +dropall: 40 + +//Hatches an egg +hatch: 60 + +// Heals yourself to full HP/SP. +heal: 40 + +// GM Hide (enables you to be invisible to characters, and most monsters) (1 command + /hide). +hide: 40 + +//Homunculus commands for gms +homlvup: 40 +homevolution: 40 +makehomun: 40 +homfriendly: 40 +homhungry: 40 + +// Deletes all your items. +itemreset: 40 + +// Changes your job to one you specify (2 same commands). +job: 40 +jobchange: 40 + +// Enables you to to jump randomly on a map (that you are already on). +jump: 40 + +// Broadcast (with or without name). +kami: 40 +kamib: 40 + +// Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). +kick: 40 + +// Disconnects a user from the server using their PID. +kickid2: 40 + +// Kill all monsters in map (without drops) +killmonster2: 40 + +// Warps you to your last save point (2 same commands). +load: 40 +return: 40 + +// Broadcast to the map you are on (1 command + /lb, /nlb). +localbroadcast: 40 + +// To send specified character in jails +jail: 40 + +// To discharge a prisoner (2 same commands) +unjail: 40 +discharge: 40 + +// Timed jailing +jailfor: 40 + +// Raises your job level (3 same commands). +jlvl: 40 +jlevel: 40 +joblvl: 40 +joblevel: 40 + +// Creates yourself a pet egg, have to use Pet ID. +makeegg: 60 + +// Warp yourself to a certain map, at (x,y) coordinates (2 same commands). /mm or /mapmove +mapmove: 40 +rura: 40 +warp: 40 + +// Marriage skills +marry: 40 +divorce: 40 + +// Set your character display options. (Visual effects of your character) +option: 40 + +// Sets the level of intemecy of your pet. +petfriendly: 40 + +// Sets hunger level of your pet. +pethungry: 40 + +// Permanently adds/removes a quest skill +questskill: 40 +lostskill: 40 + +// Does a skill/stat reset. +reset: 40 + +// Sets your spawn point (aka save point). +save: 40 + +// look up a skill by name +skillid: 40 + +// What skills are required to get this skill +skilltree: 40 + +// Play a Sound! +sound: 40 + +// Enables spirit sphere balls. +spiritball: 40 + +// Change Status of your character +str: 40 +agi: 40 +vit: 40 +int: 40 +dex: 40 +luk: 40 + +// Gets all skills (4 same commands) +allskill: 40 +allskills: 40 +skillall: 40 +skillsall: 40 + +// sets GM stats to maximum (4 same commands) +statall: 40 +statsall: 40 +allstats: 40 +allstat: 40 + +// Gives you job points. +stpoint: 40 + +// Gives you skill points of desired amount. +skpoint: 40 + +// store all your items +storeall: 40 + +// use a skill by id +useskill: 40 + +//--------------------- +// 50: Sub-GM+ commands + +// Spawns a monster, and a certain amount (3 same commands + /monster). +spawn: 50 +monster: 50 +summon: 50 + +// Spawns a smaller sized version of a monster. +monstersmall: 50 + +// Spawns a larger sized version of a monster. +monsterbig: 50 + +// It will spawn a supportive clone of the given player. +clone: 50 + +// It will spawn a supportive clone of the given player that follows the creator around. +slaveclone: 50 + +// It will spawn an aggresive clone of the given player. +evilclone: 50 + + +//---------------- +// 60: GM commands + +// Create a static warp portal that lasts until the next reboot +addwarp: 60 + +// To block definitively a player (only administrator can unblock the account) (2 same commands) +block: 60 +charblock: 60 + +// To unblock a player (2 same commands) +unblock: 60 +charunblock: 60 + +// To ban a player for a limited time (only administrator can unban the account) (4 same commands) +ban: 60 +banish: 60 +charban: 60 +charbanish: 60 + +// To unban a player (4 same commands) +unban: 60 +unbanish: 60 +charunban: 60 +charunbanish: 60 + +// Levels your guild to specified level (2 same commands). +guildlvup: 60 +guildlvlup: 60 + +// Warps all online character of a guild to you. (at least one member of that guild must be on.) +guildrecall: 60 + +// Allows you to spy on any Guilds Guild chat. (at least one member of that guild must be on.) +// NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) +guildspy: 60 + +// Find an itemID based on item name +idsearch: 60 + +// Creates an item of your choosing, either Item ID or Name (1 command + /item). +item: 60 + +// Creates a complet item (card, etc...) of your choosing, either Item ID or Name. +item2: 60 + +// Kill another character without hitting them. +kill: 60 + +// Same as above, cept uses PID. +killid2: 60 + +// Kill all monsters in map (with drops) +killmonster: 60 + +// Enable hitting a player even when not in pvp +killer: 60 + +// Mute a player (prevents talking, usage of skills and commands) +mute: 80 + +// Warps all online character of a party to you. (at least one party member must be online.) +partyrecall: 60 + +//Allows you to spy on any party's party chat. (at least one party member must be online.) +// NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) +partyspy: 60 + +// Creates weapon of desired element. +produce: 60 + +// Turns PVP (Person v. Person) off on a map. +pvpoff: 60 + +// Enables PVP on a map. +pvpon: 60 + +// Warps a character to you (1 command + /recall). +recall: 60 + +// Warps a character to you using their PID. +recallid2: 60 + +// Refines all weapons in your items list. +refine: 60 + +// Will repair all broken items in inventory. +repairall: 60 + +// Revives a character using their PID. +reviveid2: 60 + +// Unmute a player +unmute: 60 + +// Gives you money (zeny) of desired amount. +zeny: 60 + +//---------------------- +// 80: GM Chief commands + +// Starts Guild Wars +agitstart: 60 + +// Ends Guild Wars +agitend: 60 + +// Set the map you are on to day. +day: 80 + +// [Un]Disguise All Players (admin command) +disguiseall: 99 +undisguiseall: 99 + +// Kills everyone on the server. +doom: 80 + +// Kills everyone on the map you are on. +doommap: 80 + +// Enables GVG on a map (2 same commands). +gvgon: 40 +gpvpon: 40 + +// Turns GVG (Guild v. Guild) off on a map (2 same commands). +gvgoff: 40 +gpvpoff: 40 + +// Set the map you are currently on to night. +night: 80 + +// Recalls Everyone To Your Coordinates +recallall: 80 + +// Revives all players on the map. +raisemap: 80 + +// Revives all players on the server. +raise: 80 + +// Hides a NPC. +hidenpc: 80 + +// Unhides a NPC. +shownpc: 80 + +// Loads a Script +loadnpc: 80 + +// Unloads a NPC +unloadnpc: 80 + +// Move a NPC +npcmove: 80 + +// turn skills on for a map +skillon: 80 + +// turn skills off for a map +skilloff: 80 + +//--------------------------- +// 99: Administrator commands + +// Changes the required GM level of an @ command +// (effect lasts until restart or command reload) +adjcmdlvl: 99 + +// Changes the GM level of another character +// (lasts until reboot, or gm list reload) +adjgmlvl: 99 + +// Give information about terrain/area (debug function) +gat: 99 + +// Disconnect all users from the server +kickall: 99 + +// Closes Map-Server +mapexit: 99 + +// Displays a status change without really applying it (debug function) +displaystatus: 99 + +// Displays the animation of a skill without really using it (debug function) +displayskill: 99 + +// Shows information about the map +mapinfo: 99 + +// Set Map Flags (WIP) +mapflag: 99 + +// Mutes every player on screen (admin command) +mutearea: 99 +stfu: 99 + +// Re-load item database (admin command) +reloaditemdb: 99 + +// Re-load monsters database (admin command) +reloadmobdb: 99 + +// Re-load skills database (admin command) +reloadskilldb: 99 + +// Re-load scripts (admin command) +reloadscript: 99 + +// Re-load GM level (admin command) +reloadgmdb: 99 + +// Refresh online status of players - SQL Only +refreshonline: 99 + +// Re-load gm command config (admin command) +reloadatcommand: 99 + +// Re-load battle config (admin command) +// Note that some player config settings won't take effect until relog +// (display exp, display zeny, display skill delay fail, ...) +reloadbattleconf: 99 + +// Re-load status database (admin command) +reloadstatusdb: 99 + +// Re-load player info database (admin command) +reloadpcdb: 99 + +// Re-load the Message of the Day (admin command) +reloadmotd: 99 + +// Used for testing packet sends from the client (debug function) +send: 99 + +// change a battle_config flag without rebooting server +setbattleflag: 99 + +// Makes you immune to attacks (monsters/players/skills cannot target/hit you, admin command) +monsterignore: 99 +battleignore: 99 + +//--------------------------------------------------------------- +// 99: Weather effects + +snow: 99 + +clouds: 99 + +clouds2: 99 + +fog: 99 + +fireworks: 99 + +sakura: 99 + +leaves:99 + +// Stop all weather effects +clearweather: 99 + +//--------------------------------------------------------------- +// 100: Disabled commands +gm: 100 +nuke: 100 + + +//--------------------- +// OTHER: not a command + +import: conf/import/atcommand_conf.txt -- cgit v1.2.3-70-g09d2 From 3aaaaa86887209c21dd16875e3e39237e953db2e Mon Sep 17 00:00:00 2001 From: zephyrus Date: Mon, 22 Oct 2007 21:24:15 +0000 Subject: - Removed some mail config settings and atcommands not required anymore. - Added documentation for script commands: openmail and homshuffle. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11554 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 2 ++ conf/Changelog.txt | 1 + conf/atcommand_athena.conf | 24 +++--------------------- conf/inter_athena.conf | 3 --- doc/script_commands.txt | 18 ++++++++++++++++++ 5 files changed, 24 insertions(+), 24 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 3eca6b5ae..b56589762 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -9,6 +9,8 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. * Added the new mail system implementation (Requires more test and optimizations) [Zephyrus] - Updated the mail DB structure. + * Removed some mail config settings and atcommands not required anymore. + - Added documentation for script commands: openmail and homshuffle. 2007/10/21 * Fixed a small mistake in r11503 causing a fatal error&exit on unix when you try to do a graceful exit (by ctrl+c for example) [ultramage] diff --git a/conf/Changelog.txt b/conf/Changelog.txt index 776e569dc..457952988 100644 --- a/conf/Changelog.txt +++ b/conf/Changelog.txt @@ -3,6 +3,7 @@ Date Added 2007/10/22 * Rev. 11551 Fixed nopenalty entries for Turbo Track maps. [L0ne_W0lf] * Rev. 11546 Added Turbo Track map flags. [L0ne_W0lf] + * Removed the mail_server_enable setting as it's not required. [Zephyrus] 2007/10/13 * Renamed the config default_skill_delay to default_walk_delay as that is the only thing it does now. diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 183278246..06fec590e 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -157,28 +157,10 @@ version: 1 whodrops: 1 //--------------------------------------------------------------- -// 0: Mail System - SQL Only commands - Must be enabled +// 0: Mail System - SQL Only commands -// Check # of messages. -checkmail: 1 - -// List all messages. -listmail: 1 - -// List only new mail. -listnewmail: 1 - -// Read a message. -readmail: 1 - -// Send mail. -sendmail: 1 - -// Send priority mail (tagged with Priority and cannot be deleted until read) -sendprioritymail: 80 - -// Delete a message. -deletemail: 1 +// Opens mail Window. +mail: 1 //--------------------------- // 10: Super player+ commands diff --git a/conf/inter_athena.conf b/conf/inter_athena.conf index 29bdb7aa2..904a56433 100644 --- a/conf/inter_athena.conf +++ b/conf/inter_athena.conf @@ -151,9 +151,6 @@ mail_db: mail //Use SQL item_db and mob_db for the map server use_sql_db: no -// Use SQL Mail Server -mail_server_enable: no - // Nick for sending mainchat // messages like whisper main_chat_nick: Main diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 8566fbf9c..6d9213b5e 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -6087,5 +6087,23 @@ server and the egg will disappear when anyone tries to hatch it. --------------------------------------- +*openmail; + +This will open a character's Mail window on the client connected to the +invoking character. + + mes "Close this window to open your mail inbox."; + close2; + openmail; + end; + +--------------------------------------- + +*homshuffle + +This will recalculate the homunculus stats acording to its level, of the +current invoking character. + +--------------------------------------- Whew. That's about all of them. -- cgit v1.2.3-70-g09d2 From 8f36123ac4f0dad6a9c2428b0b01a3ffd81017a4 Mon Sep 17 00:00:00 2001 From: ultramage Date: Mon, 29 Oct 2007 09:16:39 +0000 Subject: Command code cleaning (refer to topic:169759) * separated the execution part of command code into interface part and internal part to better see which checks are done and when (fixes problem where 'nocommand' mapflag blocked server npcs) * moved the internal commands list (array) to the end of the file, this let me discard that long block of ACMD_FUNC() declarations * removed enum AtCommandType from command headers and commands array; its purpose was perhaps to identify aliased commands, but apparently it was never finished because the rest of the code doesn't use it (also doing aliases like this is not a very good idea) * internally, commands are now referenced to using their function name * removed the @/# symbols from the command lists; all lookup functions will now properly deal with strings with- and without a command symbol (commands interface still requires the symbol tho', so TODO for later) * removed several unneeded commands (*id2 code, dmalloc debug commands) * reverted atcommand config from alphabetically-sorted to how it was before (with additional fixes; see /conf changelog) * added missing code for #dropall / #storeall * added a warning when trying to set gm level of an undefined command The structure of the commands table has changed, please adjust docs/guides to match the new format (sorry for the inconvenience). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11607 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 22 + conf/Changelog.txt | 8 + conf/atcommand_athena.conf | 764 ++++++++++---------- conf/charcommand_athena.conf | 19 +- src/map/atcommand.c | 1569 +++++++++++++++--------------------------- src/map/atcommand.h | 299 +------- src/map/charcommand.c | 732 ++++++++++---------- src/map/charcommand.h | 101 +-- src/map/clif.c | 85 +-- src/map/map.c | 2 +- src/map/pc.c | 2 +- src/map/script.c | 94 +-- 12 files changed, 1464 insertions(+), 2233 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 8bae71d38..bc418daf2 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,28 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2007/10/29 + * command code cleaning (refer to topic:169759) [ultramage] + - separated the execution part of command code into interface part + and internal part to better see which checks are done and when + (fixes problem where 'nocommand' mapflag blocked server npcs) + - moved the internal commands list (array) to the end of the file, + this let me discard that long block of ACMD_FUNC() declarations + - removed enum AtCommandType from command headers and commands array; + its purpose was perhaps to identify aliased commands, but apparently + it was never finished because the rest of the code doesn't use it + (also doing aliases like this is not a very good idea) + - internally, commands are now referenced to using their function name + - removed the @/# symbols from the command lists; all lookup functions + will now properly deal with strings with- and without a command symbol + (commands interface still requires the symbol tho', so TODO for later) + - removed several unneeded commands (*id2 code, dmalloc debug commands) + - reverted atcommand config from alphabetically-sorted to how it was + before (with additional fixes; see /conf changelog) + - added missing code for #dropall / #storeall + - added a warning when trying to set gm level of an undefined command + * The structure of the commands table has changed, please adjust + docs/guides to match the new format (sorry for the inconvenience) 2007/10/28 * Minor adjustment to take into account the end of line. * Fixed the line count in the new error message of npc_parse_function. diff --git a/conf/Changelog.txt b/conf/Changelog.txt index 16f89f004..b9da37380 100644 --- a/conf/Changelog.txt +++ b/conf/Changelog.txt @@ -1,5 +1,13 @@ Date Added +2007/10/29 + * Removed petid command (not needed because commands understand names) + * Removed *id2 commands (messy, useless and redundant) + * Added missing @misceffect, @feelreset and #dropall/#storeall setting + * AGAIN added conf entries for @whozeny, @kamic, @tonpc, @identify, + @adopt, @trade, @changelook, @send, @displayskill + * Reverted atcommand conf (alphabetically-sorted = failure) [ultramage] + 2007/10/26 * Removed the config setting firewall_hits_on_undead setting. The code handles this now using the delay defined in skill_unit_db. [Skotlex] diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 06fec590e..92ecf2bf5 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -1,41 +1,41 @@ -// Athena atcommand Configuration file. -// Translated by Peter Kieser - -// Set here the symbol that you want to use for your commands -// Only 1 character is get (default is character_savecharacter_save'@'). You can set any character, -// except control-character (0x00-0x1f), '%' (party chat speaking) and '/' (standard ragnarok GM commands) -// With default character, all commands begin by a '@': @revive +//-------------------------------------------------------------- +// eAthena atcommand configuration file. +// Originally translated by Peter Kieser +//-------------------------------------------------------------- + +// The symbol that will be used to recognize commands. +// You can set any one character except control-characters (0x00-0x1f), +// '%', '$' (party/guild chat speaking) and '/' (standard client commands). +// The symbol must also be different from from the GM charcommand symbol. command_symbol: @ +// The following settings in this file use the format ": level". +// They define the minimum GM level required to execute the associated command. +// Adjust values as you like. Note that to activate commands for normal players, +// (GM level 0), you also need to change the 'atcommand_gm_only' option to 'no'. +// To completely disable a command, set its required GM level to 100. -// Sets the level of the users that can use the GM commands. -// : level -// When battle_athena.conf has atcommand_gm_only set to no, -// normal players (gm level 0) can use GM commands if you set 0 to the command level. -// Max GM level is 99. If you want forbid a command to all people, set it with level 100. - -// Default values are set to define different GM levels like follow: -// 0: normal player -// -> no special advantage (only @time to know time and if at_command_gm_only is disabled) +// Default levels were chosen so that they form the following hierarchy: +// 0: Normal player +// -> no commands accessible // 1: Super player -// -> some (very) little advantages: storage, petrename, etc... +// -> some minor advantage: storage, petrename, etc... // 10: Super player+ -// -> same of Super player with !go (very super player) +// -> more powerful commands, like mobsearch and changegm // 20: Mediator -// -> it's a GM that only need to know people, and move to their to speak with them (they can access to any command about wisps) +// -> GM commands for finding players and moving to them (also kicking them) // 40: Sub-GM -// -> This GM can help a GM, and can not create item or zeny or modify a character (can have some information commands) +// -> GM commands for basic tasks, no significant impact on other players // 50: Sub-GM+ -// -> This GM can change some non-important things on a character +// -> GM commands to spawn mobs and create guilds // 60: GM -// -> can do almost anything (excep administration, and mass commands) -// GM is the first level where we can modify a character with important value, create items or create zenys +// -> almost all commands available (except administration and mass commands) // 80: GM Chief // -> can do anything, except administration commands // 99: Administrator // -> can do anything! // 100: Disabled -// -> Commands that aren't used. Note: You must use command level 100 to disable command. Commenting doesn't enough. +// -> commands that will not be available to anyone //-------------------------- @@ -45,222 +45,168 @@ command_symbol: @ //------------------------- // 1: Super player commands -// Enables/disables autolooting from killed mobs. -autoloot: 1 - -// Allows you continue vending offline. -autotrade: 1 -at: 1 - -// Away messsage -away: 1 -aw: 1 +// Displays a list of @ commands available to the player. +commands: 1 -// Change Guild Master of your Guild -changegm: 1 +// Displays the server rates. +rates: 1 -// Change the leader of your party. -changeleader: 1 +// Show server uptime +uptime: 1 -//Displays a list of @ commands available to the player. -commands: 1 +// Shows/Hides the "there is a delay after a skill" message. +showdelay: 1 -// Duel organizing commands -duel: 1 -invite: 1 -accept: 1 -reject: 1 -leave: 1 +// Displays current levels and % progress. +exp: 1 // To change your (own) email (characters protection) // note: this command doesn't check email itself, but check structure of the email (xxx@xxx) // if you want be sure of each e-mail disable this option (value: 100) email: 1 -//Displays current levels and % progress. -exp: 1 - -//Homunculus commands for players -homtalk: 1 -hominfo: 1 +// Show Monster info (rates, stats, drops, MVP stuff) +mobinfo: 1 +monsterinfo: 1 +mi: 1 // Show Item info (type, price, etc) iteminfo: 1 ii: 1 -// Displays remaining jail time -jailtime: 1 - -// Main chat -main: 1 - -// Displays the text as a normal message with the format "*name message*" -// instead of "name : message" (Like the /me command in IRC) -me: 1 - -// Saves a warp point. -memo: 1 +// Show who drops an item (mobs with highest drop rate) +whodrops: 1 -// Show Monster info (rates, stats, drops, MVP stuff) -mobinfo: 1 -monsterinfo: 1 -mi: 1 +// Syncs the player's position on the client with the one stored on the server. +refresh: 1 -// Autorejecting Deals/Invites -noask: 1 +// Give server time. (6 same commands) +time: 1 +date: 1 +serverdate: 1 +servertime: 1 -//Create a party -party: 1 +// Displays SVN version of the server. +version: 1 -// Change the party item share rules. -partyoption: 1 +// Suicide your character. +die: 1 // Enables you to rename your pet. petrename: 1 -// Command what the player's pet will say. -pettalk: 1 - -//Displays the server rates. -rates: 1 - -// Syncs the position of the player on the client with the one stored in the server. -refresh: 1 - -// Sends a request to all connected GMs (via the gm whisper system) -request: 1 +// Organize a new party, with you as the party leader. +party: 1 -//Shows/Hides the "there is a delay after a skill" message. -showdelay: 1 +// Brings up your personal storage wherever you are. +storage: 1 -//Displays/Hides Experience gained -showexp: 1 +// Opens your mailbox. +mail: 1 -//Displays/Hides Zeny gained -showzeny: 1 +// Locate someone on a map, returns your coordinates if the person isn't on. +where: 1 -// Give server time. (6 same commands) -time: 1 -date: 1 -server_date: 1 -serverdate: 1 -server_time: 1 -servertime: 1 +// Duel organizing commands +duel: 1 +invite: 1 +accept: 1 +reject: 1 +leave: 1 -// Show server uptime -uptime: 1 +// Away messsage +away: 1 +aw: 1 -// Displays SVN version of the server. -version: 1 +// Main chat +main: 1 -// Show who drops an item (mobs with highest drop rate) -whodrops: 1 +// Autorejecting Deals/Invites +noask: 1 -//--------------------------------------------------------------- -// 0: Mail System - SQL Only commands +// Displays remaining jail time +jailtime: 1 -// Opens mail Window. -mail: 1 +// Homunculus commands for players +hominfo: 1 +homstats: 1 //--------------------------- // 10: Super player+ commands -// Suicide your character. -die: 10 +// Displays/Hides Experience gained +showexp: 10 -// Spawns you to set points in major cities. +// Displays/Hides Zeny gained +showzeny: 10 + +// Warps you to predefined locations in major cities. go: 10 -// Brings up your guild storage wherever you are. -gstorage: 10 +// Enables/disables autolooting from killed mobs. +autoloot: 10 -// Create a guild -guild: 10 +// Allows you continue vending offline. +autotrade: 10 +at: 10 -// Brings up your personal storage wherever you are. -storage: 10 +// Change Guild Master of your Guild +changegm: 10 -// Locate someone on a map, returns your coordinates if the person isn't on. -where: 10 +// Change the leader of your party. +changeleader: 10 -// Locates and displays the position of a certain mob on the current map. -mobsearch: 10 +// Change the party exp- and item share rules. +partyoption: 10 -// Changes your apperance. -model: 10 +// Command what the player's pet will say. +pettalk: 10 + +// Command what the player's homunculus will say. +homtalk: 10 +// Locates and displays the position of a certain mob on the current map. +mobsearch: 10 // Locates and displays the position of a certain mob on your mini-map showmobs: 10 - // Prints out in which maps a monster normally spawns at (does not count script-invoked mobs) whereis: 10 -// Changes your size. -size: 10 +// Resets a Star Gladiator's marked maps +feelreset: 10 //---------------------- // 20: Mediator commands -// Change your appearence to other players to a mob. -disguise: 20 - -// Changes GM clothes color (2 same commands) -dye: 20 -ccolor: 20 - -// Do some visual effect on your character -effect: 20 - -// Changes your name to your choice temporarly. -fakename: 20 - -// follow a player (including warping to them) -follow: 20 - -// Displays the motd file to all players -gmotd: 20 - -// Displays helpfile in Athena base directory (2 same commands). +// Displays helpfile in eAthena base directory (2 same commands). help: 20 h: 20 help2: 20 h2: 20 -// Changes GM hair color (2 same commands) -haircolor: 20 -hcolor: 20 - -// Changes GM hair style (2 same commands) -hairstyle: 20 -hstyle: 20 - // Warp yourself to a person (3 same commands + /shift). jumpto: 20 goto: 20 warpto: 20 -// Warp yourself to a person by PID (similar to above, cept you us the PID) -jumptoid2: 20 -gotoid2: 20 -warptoid2: 20 - -// allow other players to hit you out of pvp -killable: 20 +// Displays the motd file to all players +gmotd: 20 -// To get a peco to (un)ride -mountpeco: 20 +// Follow a player (including warping to them) +follow: 20 -// Can command what other npcs (by name) can say. -npctalk: 20 +// Sends a request to all connected GMs (via the gm whisper system) +request: 20 -// Sets the speed you can walk/attack at. Default is 150. -speed: 20 +// Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). +kick: 20 -//Restore your normal appearance. -undisguise: 20 +// Changes your appearance. +model: 20 -// Displays distribution of players on the server per map (% on each map which has players) -users: 20 +// To get a peco to (un)ride (2 same commands). +mountpeco: 20 +mount: 20 // Returns list of logged in characters with their position (2 same commands). who: 20 @@ -286,50 +232,58 @@ whomap3: 20 // @who+@who2+who3 whogm: 20 -//-------------------- -// 40: Sub-GM commands +// Displays a sorted list of the ammount of zeny each conected player has at hand. +whozeny: 20 +// Change your appearence to other players to a mob. +disguise: 20 -// Resurects yourself. -alive: 40 +// Restore your normal appearance. +undisguise: 20 + +// Displays the text as a normal message with the format "*name message*" +// instead of "name : message" (Like the /me command in IRC) +me: 20 + +// Changes your name to your choice temporarily. +fakename: 20 + +// Changes your size. +size: 20 -// Levels your character to specified level (adds to your level) (3 same commands). -blvl: 40 -blevel: 40 -baselvl: 40 -baselevel: 40 +// Can command what other npcs (by name) can say. +npctalk: 20 + +//-------------------- +// 40: Sub-GM commands // Broadcast to the whole server. Using (1 command + /nb, /b). broadcast: 40 -// Changes the sex of yourself -changesex: 40 +// Broadcast to the map you are on (1 command + /lb, /nlb). +localbroadcast: 40 -// Deletes floor items in your range of sight -cleanmap: 40 +// Broadcast (with or without name) +kami: 40 +// Same as kami but with blue color +kamib: 40 +// Same as kami but you can choose the color (uses different packet) +kamic: 40 -// drop all your items -dropall: 40 +// Enables GvG on a map (2 same commands). +gvgon: 40 +gpvpon: 40 -//Hatches an egg -hatch: 60 +// Turns GvG (Guild vs. Guild) off on a map (2 same commands). +gvgoff: 40 +gpvpoff: 40 -// Heals yourself to full HP/SP. +// Modifies your HP/SP. heal: 40 -// GM Hide (enables you to be invisible to characters, and most monsters) (1 command + /hide). +// GM Hide (total invisibility to characters and monsters) (1 command + /hide). hide: 40 -//Homunculus commands for gms -homlvup: 40 -homevolution: 40 -makehomun: 40 -homfriendly: 40 -homhungry: 40 - -// Deletes all your items. -itemreset: 40 - // Changes your job to one you specify (2 same commands). job: 40 jobchange: 40 @@ -337,53 +291,15 @@ jobchange: 40 // Enables you to to jump randomly on a map (that you are already on). jump: 40 -// Broadcast (with or without name). -kami: 40 -kamib: 40 - -// Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). -kick: 40 - -// Disconnects a user from the server using their PID. -kickid2: 40 - -// Kill all monsters in map (without drops) -killmonster2: 40 - // Warps you to your last save point (2 same commands). load: 40 return: 40 -// Broadcast to the map you are on (1 command + /lb, /nlb). -localbroadcast: 40 - -// To send specified character in jails -jail: 40 - -// To discharge a prisoner (2 same commands) -unjail: 40 -discharge: 40 - -// Timed jailing -jailfor: 40 - -// Raises your job level (3 same commands). -jlvl: 40 -jlevel: 40 -joblvl: 40 -joblevel: 40 - -// Creates yourself a pet egg, have to use Pet ID. -makeegg: 60 +// Warps you to a specific npc +tonpc: 40 -// Warp yourself to a certain map, at (x,y) coordinates (2 same commands). /mm or /mapmove -mapmove: 40 -rura: 40 -warp: 40 - -// Marriage skills -marry: 40 -divorce: 40 +// Saves a warp point. +memo: 40 // Set your character display options. (Visual effects of your character) option: 40 @@ -394,67 +310,106 @@ petfriendly: 40 // Sets hunger level of your pet. pethungry: 40 +// Turns PvP (Person vs. Person) off on a map. +pvpoff: 40 + +// Enables PvP on a map. +pvpon: 40 + // Permanently adds/removes a quest skill questskill: 40 lostskill: 40 +// Sets the speed you can walk/attack at. Default is 150. +speed: 40 + +// Summons spirit spheres around you. +spiritball: 40 + +// Warp yourself to a certain map, at (x,y) coordinates (2 same commands). +mapmove: 40 // (also /mm or /mapmove) +rura: 40 +warp: 40 + +// Changes GM clothes color (2 same commands) +dye: 40 +ccolor: 40 + +// Changes GM hair style (2 same commands) +hairstyle: 40 +hstyle: 40 + +// Changes GM hair color (2 same commands) +haircolor: 40 +hcolor: 40 + +// Deletes all your items. +itemreset: 40 + // Does a skill/stat reset. reset: 40 +// Displays distribution of players on the server per map (% on each map which has players) +users: 40 + +// Deletes floor items in your range of sight +cleanmap: 40 + +// Kill all monsters in map (without drops) +killmonster2: 40 + // Sets your spawn point (aka save point). save: 40 -// look up a skill by name -skillid: 40 +// Do some visual effect on your character +effect: 40 -// What skills are required to get this skill -skilltree: 40 +// Do some visual effect on your character (misceffect) +misceffect: 40 -// Play a Sound! -sound: 40 +// GM's magnifier +identify: 40 -// Enables spirit sphere balls. -spiritball: 40 +// Drop all your items +dropall: 40 -// Change Status of your character -str: 40 -agi: 40 -vit: 40 -int: 40 -dex: 40 -luk: 40 +// Store all your items +storeall: 40 -// Gets all skills (4 same commands) -allskill: 40 -allskills: 40 -skillall: 40 -skillsall: 40 +// Allow other players to hit you out of PvP +killable: 40 -// sets GM stats to maximum (4 same commands) -statall: 40 -statsall: 40 -allstats: 40 -allstat: 40 +// Look up a skill by name +skillid: 40 -// Gives you job points. -stpoint: 40 +// Use a skill by id +useskill: 40 -// Gives you skill points of desired amount. -skpoint: 40 +// What skills are required to get this skill +skilltree: 40 -// store all your items -storeall: 40 +// Marriage commands +marry: 40 +divorce: 40 -// use a skill by id -useskill: 40 +// Adopt a novice into a family +adopt: 40 + +// Play a Sound! +sound: 40 //--------------------- // 50: Sub-GM+ commands -// Spawns a monster, and a certain amount (3 same commands + /monster). -spawn: 50 +// Creates a new guild, with you as the guildmaster. +guild: 50 + +// Brings up your guild storage wherever you are. +gstorage: 50 + +// Spawns a monster, and a certain amount (2 same commands + /monster). monster: 50 -summon: 50 +spawn: 50 // Spawns a smaller sized version of a monster. monstersmall: 50 @@ -462,6 +417,9 @@ monstersmall: 50 // Spawns a larger sized version of a monster. monsterbig: 50 +// Spawns mobs that treat you as their master (they disappear after some time) +summon: 50 + // It will spawn a supportive clone of the given player. clone: 50 @@ -475,40 +433,43 @@ evilclone: 50 //---------------- // 60: GM commands -// Create a static warp portal that lasts until the next reboot -addwarp: 60 - -// To block definitively a player (only administrator can unblock the account) (2 same commands) -block: 60 -charblock: 60 +// Starts Guild Wars +agitstart: 60 -// To unblock a player (2 same commands) -unblock: 60 -charunblock: 60 +// Ends Guild Wars +agitend: 60 -// To ban a player for a limited time (only administrator can unban the account) (4 same commands) -ban: 60 -banish: 60 -charban: 60 -charbanish: 60 +// Resurects yourself. +alive: 60 + +// Levels your character to specified level (adds to your level) (7 same commands). +blvl: 60 +lvup: 60 +blevel: 60 +baselvl: 60 +baselvup: 60 +baselevel: 60 +baselvlup: 60 + +// Raises your job level (6 same commands). +jlvl: 60 +jlevel: 60 +joblvl: 60 +joblvup: 60 +joblevel: 60 +joblvlup: 60 -// To unban a player (4 same commands) -unban: 60 -unbanish: 60 -charunban: 60 -charunbanish: 60 +// Changes the sex of yourself +changesex: 60 // Levels your guild to specified level (2 same commands). +glvl: 60 +glevel: 60 +guildlvl: 60 guildlvup: 60 +guildlevel: 60 guildlvlup: 60 -// Warps all online character of a guild to you. (at least one member of that guild must be on.) -guildrecall: 60 - -// Allows you to spy on any Guilds Guild chat. (at least one member of that guild must be on.) -// NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) -guildspy: 60 - // Find an itemID based on item name idsearch: 60 @@ -521,85 +482,142 @@ item2: 60 // Kill another character without hitting them. kill: 60 -// Same as above, cept uses PID. -killid2: 60 - // Kill all monsters in map (with drops) killmonster: 60 -// Enable hitting a player even when not in pvp -killer: 60 +// Creates yourself a pet egg. +makeegg: 60 -// Mute a player (prevents talking, usage of skills and commands) -mute: 80 +// Hatches an egg +hatch: 60 -// Warps all online character of a party to you. (at least one party member must be online.) -partyrecall: 60 +// Instantly kills player whose name is entered and deals insane damage to everything around +nuke: 60 -//Allows you to spy on any party's party chat. (at least one party member must be online.) -// NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) -partyspy: 60 +// Enable hitting a player even when not in PvP +killer: 60 // Creates weapon of desired element. produce: 60 -// Turns PVP (Person v. Person) off on a map. -pvpoff: 60 - -// Enables PVP on a map. -pvpon: 60 - // Warps a character to you (1 command + /recall). recall: 60 -// Warps a character to you using their PID. -recallid2: 60 - // Refines all weapons in your items list. refine: 60 // Will repair all broken items in inventory. repairall: 60 -// Revives a character using their PID. -reviveid2: 60 +// Change Status of your character +str: 60 +agi: 60 +vit: 60 +int: 60 +dex: 60 +luk: 60 -// Unmute a player -unmute: 60 +// Gets all skills (4 same commands) +allskill: 60 +allskills: 60 +skillall: 60 +skillsall: 60 + +// Sets GM stats to maximum (4 same commands) +statall: 60 +statsall: 60 +allstats: 60 +allstat: 60 + +// Gives you job points. +stpoint: 60 + +// Gives you skill points of desired amount. +skpoint: 60 + +// Warps all online character of a guild to you. (at least one member of that guild must be on.) +guildrecall: 60 + +// Warps all online character of a party to you. (at least one party member must be online.) +partyrecall: 60 + +// Allows you to spy on any Guilds Guild chat. (at least one member of that guild must be on.) +// NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) +guildspy: 60 + +// Allows you to spy on any party's party chat. (at least one party member must be online.) +// NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) +partyspy: 60 // Gives you money (zeny) of desired amount. zeny: 60 -//---------------------- -// 80: GM Chief commands +// To block definitively a player (2 same commands) +block: 60 +charblock: 60 -// Starts Guild Wars -agitstart: 60 +// To unblock a player (2 same commands) +unblock: 60 +charunblock: 60 -// Ends Guild Wars -agitend: 60 +// To ban a player for a limited time (4 same commands) +ban: 60 +banish: 60 +charban: 60 +charbanish: 60 + +// To unban a player (4 same commands) +unban: 60 +unbanish: 60 +charunban: 60 +charunbanish: 60 + +// To send specified character in jails +jail: 60 + +// To discharge a prisoner (2 same commands) +unjail: 60 +discharge: 60 + +// Timed jailing +jailfor: 60 + +// Create a static warp portal that lasts until the next reboot +addwarp: 60 + +// Open a trade window with any player +trade: 60 + +// Changes the player's appearance (headgear) +changelook: 60 + +// Homunculus commands for GMs +hlvl: 60 +hlevel: 60 +homlvl: 60 +homlvup: 60 +homlevel: 60 +homevolve: 60 +homevolution: 60 +makehomun: 60 +homfriendly: 60 +homhungry: 60 + +// Re-calculates stats, as if the homun was sent back to level 1 and re-leveled +homshuffle: 60 + +//---------------------- +// 80: GM Chief commands // Set the map you are on to day. day: 80 -// [Un]Disguise All Players (admin command) -disguiseall: 99 -undisguiseall: 99 - // Kills everyone on the server. doom: 80 // Kills everyone on the map you are on. doommap: 80 -// Enables GVG on a map (2 same commands). -gvgon: 40 -gpvpon: 40 - -// Turns GVG (Guild v. Guild) off on a map (2 same commands). -gvgoff: 40 -gpvpoff: 40 - // Set the map you are currently on to night. night: 80 @@ -633,19 +651,14 @@ skillon: 80 // turn skills off for a map skilloff: 80 -//--------------------------- -// 99: Administrator commands - -// Changes the required GM level of an @ command -// (effect lasts until restart or command reload) -adjcmdlvl: 99 +// Mute a player (prevents talking, usage of skills and commands) +mute: 80 -// Changes the GM level of another character -// (lasts until reboot, or gm list reload) -adjgmlvl: 99 +// Unmute a player +unmute: 80 -// Give information about terrain/area (debug function) -gat: 99 +//--------------------------- +// 99: Administrator commands // Disconnect all users from the server kickall: 99 @@ -653,6 +666,12 @@ kickall: 99 // Closes Map-Server mapexit: 99 +// Used for testing packet sends from the client (debug function) +send: 99 + +// Give information about terrain/area (debug function) +gat: 99 + // Displays a status change without really applying it (debug function) displaystatus: 99 @@ -665,10 +684,6 @@ mapinfo: 99 // Set Map Flags (WIP) mapflag: 99 -// Mutes every player on screen (admin command) -mutearea: 99 -stfu: 99 - // Re-load item database (admin command) reloaditemdb: 99 @@ -684,7 +699,10 @@ reloadscript: 99 // Re-load GM level (admin command) reloadgmdb: 99 -// Refresh online status of players - SQL Only +// Change a battle_config flag without rebooting server +setbattleflag: 99 + +// Refresh only status of players - SQL Only refreshonline: 99 // Re-load gm command config (admin command) @@ -704,11 +722,21 @@ reloadpcdb: 99 // Re-load the Message of the Day (admin command) reloadmotd: 99 -// Used for testing packet sends from the client (debug function) -send: 99 +// Changes the GM level of another character +// (lasts until reboot, or gm list reload) +adjgmlvl: 99 -// change a battle_config flag without rebooting server -setbattleflag: 99 +// Changes the required GM level of an @ command +// (effect lasts until restart or command reload) +adjcmdlvl: 99 + +// [Un]Disguise All Players (admin command) +disguiseall: 99 +undisguiseall: 99 + +// Mutes every player on screen (admin command) +mutearea: 99 +stfu: 99 // Makes you immune to attacks (monsters/players/skills cannot target/hit you, admin command) monsterignore: 99 @@ -737,8 +765,6 @@ clearweather: 99 //--------------------------------------------------------------- // 100: Disabled commands gm: 100 -nuke: 100 - //--------------------- // OTHER: not a command diff --git a/conf/charcommand_athena.conf b/conf/charcommand_athena.conf index acd89779a..20e0c2427 100644 --- a/conf/charcommand_athena.conf +++ b/conf/charcommand_athena.conf @@ -1,10 +1,12 @@ -// Athena charcommand Configuration file. -// Translated by Peter Kieser +//-------------------------------------------------------------- +// eAthena charcommand configuration file. +// Originally translated by Peter Kieser +//-------------------------------------------------------------- // The symbol that will be used to recognize commands. -// You can set any one character, except control-characters (0x00-0x1f), +// You can set any one character except control-characters (0x00-0x1f), // '%', '$' (party/guild chat speaking) and '/' (standard client commands). -// The symbol must be different from from the standard GM command symbol. +// The symbol must also be different from from the GM atcommand symbol. command_symbol: # @@ -21,6 +23,9 @@ command_symbol: # //---------------------- // 20: Mediator commands +// Displays helpfile in eAthena base directory +help: 20 + //-------------------- // 40: Sub-GM commands @@ -120,6 +125,12 @@ delitem: 60 disguise: 60 undisguise: 60 +// Drop a players possessions on the ground +dropall: 60 + +// Put a players possessions in storage +storeall: 60 + // Resets another character's designated maps feelreset: 60 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 8a23c9d05..a93bddb3d 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -13,11 +13,12 @@ #include "../common/utils.h" #include "atcommand.h" -#include "log.h" +#include "battle.h" #include "clif.h" #include "chrif.h" #include "intif.h" #include "itemdb.h" +#include "log.h" #include "map.h" #include "pc.h" #include "status.h" @@ -25,12 +26,10 @@ #include "mob.h" #include "npc.h" #include "pet.h" -#include "mercenary.h" //[orn] -#include "battle.h" +#include "mercenary.h" #include "party.h" #include "guild.h" #include "script.h" -#include "npc.h" #include "trade.h" #include "unit.h" @@ -43,539 +42,25 @@ #include #include -char atcommand_symbol = '@'; // first char of the commands (by [Yor]) - -char *msg_table[MAX_MSG]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others) +// extern variables +char atcommand_symbol = '@'; // first char of the commands +char* msg_table[MAX_MSG]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others) +// local declarations #define ACMD_FUNC(x) int atcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message) -ACMD_FUNC(broadcast); -ACMD_FUNC(localbroadcast); -ACMD_FUNC(rura); -ACMD_FUNC(where); -ACMD_FUNC(jumpto); -ACMD_FUNC(jump); -ACMD_FUNC(who); -ACMD_FUNC(who2); -ACMD_FUNC(who3); -ACMD_FUNC(whomap); -ACMD_FUNC(whomap2); -ACMD_FUNC(whomap3); -ACMD_FUNC(whogm); // by Yor -ACMD_FUNC(whozeny); // [Valaris] -ACMD_FUNC(save); -ACMD_FUNC(load); -ACMD_FUNC(speed); -ACMD_FUNC(storage); -ACMD_FUNC(guildstorage); -ACMD_FUNC(option); -ACMD_FUNC(hide); -ACMD_FUNC(jobchange); -ACMD_FUNC(die); -ACMD_FUNC(kill); -ACMD_FUNC(alive); -ACMD_FUNC(kami); -ACMD_FUNC(heal); -ACMD_FUNC(item); -ACMD_FUNC(item2); -ACMD_FUNC(itemreset); -ACMD_FUNC(baselevelup); -ACMD_FUNC(joblevelup); -ACMD_FUNC(help); -ACMD_FUNC(help2); -ACMD_FUNC(gm); -ACMD_FUNC(pvpoff); -ACMD_FUNC(pvpon); -ACMD_FUNC(gvgoff); -ACMD_FUNC(gvgon); -ACMD_FUNC(model); -ACMD_FUNC(go); -ACMD_FUNC(monster); -ACMD_FUNC(monstersmall); -ACMD_FUNC(monsterbig); -ACMD_FUNC(spawn); -ACMD_FUNC(killmonster); -ACMD_FUNC(killmonster2); -ACMD_FUNC(refine); -ACMD_FUNC(produce); -ACMD_FUNC(memo); -ACMD_FUNC(gat); -ACMD_FUNC(displaystatus); -ACMD_FUNC(statuspoint); -ACMD_FUNC(skillpoint); -ACMD_FUNC(zeny); -ACMD_FUNC(param); -ACMD_FUNC(guildlevelup); -ACMD_FUNC(makeegg); -ACMD_FUNC(hatch); -ACMD_FUNC(petfriendly); -ACMD_FUNC(pethungry); -ACMD_FUNC(petrename); -ACMD_FUNC(recall); -ACMD_FUNC(recallall); -ACMD_FUNC(night); -ACMD_FUNC(day); -ACMD_FUNC(doom); -ACMD_FUNC(doommap); -ACMD_FUNC(raise); -ACMD_FUNC(raisemap); -ACMD_FUNC(kick); -ACMD_FUNC(kickall); -ACMD_FUNC(allskill); -ACMD_FUNC(questskill); -ACMD_FUNC(lostskill); -ACMD_FUNC(spiritball); -ACMD_FUNC(party); -ACMD_FUNC(guild); -ACMD_FUNC(agitstart); -ACMD_FUNC(agitend); -ACMD_FUNC(reloaditemdb); -ACMD_FUNC(reloadmobdb); -ACMD_FUNC(reloadskilldb); -ACMD_FUNC(reloadscript); -ACMD_FUNC(reloadgmdb); // by Yor -ACMD_FUNC(reloadatcommand); -ACMD_FUNC(reloadbattleconf); -ACMD_FUNC(reloadstatusdb); -ACMD_FUNC(reloadpcdb); -ACMD_FUNC(reloadmotd); // [Valaris] -ACMD_FUNC(mapexit); -ACMD_FUNC(idsearch); -ACMD_FUNC(mapinfo); -ACMD_FUNC(dye); //** by fritz -ACMD_FUNC(hair_style); //** by fritz -ACMD_FUNC(hair_color); //** by fritz -ACMD_FUNC(stat_all); //** by fritz -ACMD_FUNC(char_block); // by Yor -ACMD_FUNC(char_ban); // by Yor -ACMD_FUNC(char_unblock); // by Yor -ACMD_FUNC(char_unban); // by Yor -ACMD_FUNC(mount_peco); // by Valaris -ACMD_FUNC(guildspy); // [Syrus22] -ACMD_FUNC(partyspy); // [Syrus22] -ACMD_FUNC(repairall); // [Valaris] -ACMD_FUNC(guildrecall); // by Yor -ACMD_FUNC(partyrecall); // by Yor -ACMD_FUNC(nuke); // [Valaris] -ACMD_FUNC(shownpc); -ACMD_FUNC(hidenpc); -ACMD_FUNC(loadnpc); -ACMD_FUNC(unloadnpc); -ACMD_FUNC(servertime); // by Yor -ACMD_FUNC(jail); // by Yor -ACMD_FUNC(unjail); // by Yor -ACMD_FUNC(jailfor); // Alias Meruru -ACMD_FUNC(jailtime); // Coltaro -ACMD_FUNC(disguise); // [Valaris] -ACMD_FUNC(undisguise); // by Yor -ACMD_FUNC(email); // by Yor -ACMD_FUNC(effect);//by Apple -ACMD_FUNC(addwarp); // by MouseJstr -ACMD_FUNC(follow); // by MouseJstr -ACMD_FUNC(skillon); // by MouseJstr -ACMD_FUNC(skilloff); // by MouseJstr -ACMD_FUNC(killer); // by MouseJstr -ACMD_FUNC(npcmove); // by MouseJstr -ACMD_FUNC(killable); // by MouseJstr -ACMD_FUNC(dropall); // by MouseJstr -ACMD_FUNC(storeall); // by MouseJstr -ACMD_FUNC(skillid); // by MouseJstr -ACMD_FUNC(useskill); // by MouseJstr -ACMD_FUNC(displayskill); //[Skotlex] -ACMD_FUNC(summon); -ACMD_FUNC(rain); -ACMD_FUNC(snow); -ACMD_FUNC(sakura); -ACMD_FUNC(clouds); -ACMD_FUNC(clouds2); // [Valaris] -ACMD_FUNC(fog); -ACMD_FUNC(fireworks); -ACMD_FUNC(leaves); -ACMD_FUNC(adjgmlvl); // by MouseJstr -ACMD_FUNC(adjcmdlvl); // by MouseJstr -ACMD_FUNC(trade); // by MouseJstr -ACMD_FUNC(send); // by davidsiaw -ACMD_FUNC(setbattleflag); // by MouseJstr -ACMD_FUNC(unmute); // [Valaris] -ACMD_FUNC(clearweather); // Dexity -ACMD_FUNC(uptime); // by MC Cameri -ACMD_FUNC(changesex); // by MC Cameri -ACMD_FUNC(mute); // celest -ACMD_FUNC(refresh); // by MC Cameri -ACMD_FUNC(identify); // by MC Cameri -ACMD_FUNC(gmotd); // Added by MC Cameri, created by davidsiaw -ACMD_FUNC(misceffect); // by MC Cameri -ACMD_FUNC(mobsearch); -ACMD_FUNC(cleanmap); -ACMD_FUNC(npctalk); -ACMD_FUNC(pettalk); -ACMD_FUNC(users); -ACMD_FUNC(reset); -ACMD_FUNC(autoloot); // Improved version imported from Freya. -ACMD_FUNC(skilltree); // by MouseJstr -ACMD_FUNC(marry); // by MouseJstr -ACMD_FUNC(divorce); // by MouseJstr -ACMD_FUNC(jumptoid2); // by Dino9021 -ACMD_FUNC(recallid2); // by Dino9021 -ACMD_FUNC(kickid2); // by Dino9021 -ACMD_FUNC(reviveid2); // by Dino9021 -ACMD_FUNC(killid2); // by Dino9021 -ACMD_FUNC(sound); -ACMD_FUNC(undisguiseall); -ACMD_FUNC(disguiseall); -ACMD_FUNC(changelook); -ACMD_FUNC(mobinfo); //by Lupus -ACMD_FUNC(exp); // by Skotlex -ACMD_FUNC(adopt); // by Veider -ACMD_FUNC(version); // by Ancyker -ACMD_FUNC(mutearea); // by MouseJstr -ACMD_FUNC(rates); // by MouseJstr -ACMD_FUNC(iteminfo); // Lupus -ACMD_FUNC(whodrops); //Skotlex -ACMD_FUNC(whereis); //Skotlex -ACMD_FUNC(mapflag); // Lupus -ACMD_FUNC(me); //added by massdriller, code by lordalfa -ACMD_FUNC(monsterignore); // [Valaris] -ACMD_FUNC(fakename); //[Valaris] -ACMD_FUNC(size); //[Valaris] -ACMD_FUNC(showexp); //moved from charcommand [Kevin] -ACMD_FUNC(showzeny); -ACMD_FUNC(showdelay); //moved from charcommand [Kevin] -ACMD_FUNC(autotrade);// durf -ACMD_FUNC(changeleader);// [Skotlex] -ACMD_FUNC(partyoption);// [Skotlex] -ACMD_FUNC(changegm);// durf -// Duel [LuzZza] -ACMD_FUNC(invite); -ACMD_FUNC(duel); -ACMD_FUNC(leave); -ACMD_FUNC(accept); -ACMD_FUNC(reject); -ACMD_FUNC(away); // LuzZza -ACMD_FUNC(main); // LuzZza -ACMD_FUNC(clone); // [Valaris] -ACMD_FUNC(tonpc); // LuzZza -ACMD_FUNC(commands); // [Skotlex] -ACMD_FUNC(noask); //LuzZza -ACMD_FUNC(request); //[Skotlex] -ACMD_FUNC(homlevel); //[orn] -ACMD_FUNC(homevolution); //[orn] -ACMD_FUNC(makehomun); //[orn] -ACMD_FUNC(homfriendly); //[orn] -ACMD_FUNC(homhungry); //[orn] -ACMD_FUNC(homtalk); //[orn] -ACMD_FUNC(hominfo); //[Toms] -ACMD_FUNC(homstats); //[Skotlex] -ACMD_FUNC(homshuffle); //[Skotlex] -ACMD_FUNC(showmobs); //KarLaeda -ACMD_FUNC(feelreset); //[HiddenDragon] -#ifndef TXT_ONLY -ACMD_FUNC(mail); // [MAIL SYSTEM] -ACMD_FUNC(refreshonline); // [Valaris] -#endif -#ifdef DMALLOC -ACMD_FUNC(dmstart); // by MouseJstr -ACMD_FUNC(dmtick); // by MouseJstr -#endif -/*========================================== - *AtCommandInfo atcommand_info[] structure definition - *------------------------------------------*/ - -// First char of commands is configured in atcommand_athena.conf. Leave @ in this list for default value. -// to set default level, read atcommand_athena.conf first please. -static AtCommandInfo atcommand_info[] = { - { AtCommand_Rura, "@rura", 40, atcommand_rura }, - { AtCommand_Warp, "@warp", 40, atcommand_rura }, - { AtCommand_MapMove, "@mapmove", 40, atcommand_rura }, // /mm command - { AtCommand_Where, "@where", 1, atcommand_where }, - { AtCommand_JumpTo, "@jumpto", 20, atcommand_jumpto }, // + /shift - { AtCommand_JumpTo, "@warpto", 20, atcommand_jumpto }, - { AtCommand_JumpTo, "@goto", 20, atcommand_jumpto }, - { AtCommand_Jump, "@jump", 40, atcommand_jump }, - { AtCommand_Who, "@who", 20, atcommand_who }, - { AtCommand_Who, "@whois", 20, atcommand_who }, - { AtCommand_Who2, "@who2", 20, atcommand_who2 }, - { AtCommand_Who3, "@who3", 20, atcommand_who3 }, - { AtCommand_WhoMap, "@whomap", 20, atcommand_whomap }, - { AtCommand_WhoMap2, "@whomap2", 20, atcommand_whomap2 }, - { AtCommand_WhoMap3, "@whomap3", 20, atcommand_whomap3 }, - { AtCommand_WhoGM, "@whogm", 20, atcommand_whogm }, // by Yor - { AtCommand_Save, "@save", 40, atcommand_save }, - { AtCommand_Load, "@return", 40, atcommand_load }, - { AtCommand_Load, "@load", 40, atcommand_load }, - { AtCommand_Speed, "@speed", 40, atcommand_speed }, - { AtCommand_Storage, "@storage", 1, atcommand_storage }, - { AtCommand_GuildStorage, "@gstorage", 50, atcommand_guildstorage }, - { AtCommand_Option, "@option", 40, atcommand_option }, - { AtCommand_Hide, "@hide", 40, atcommand_hide }, // + /hide - { AtCommand_JobChange, "@jobchange", 40, atcommand_jobchange }, - { AtCommand_JobChange, "@job", 40, atcommand_jobchange }, - { AtCommand_Die, "@die", 1, atcommand_die }, - { AtCommand_Kill, "@kill", 60, atcommand_kill }, - { AtCommand_Alive, "@alive", 60, atcommand_alive }, - { AtCommand_Kami, "@kami", 40, atcommand_kami }, - { AtCommand_KamiB, "@kamib", 40, atcommand_kami }, - { AtCommand_KamiC, "@kamic", 40, atcommand_kami }, //[LuzZza] - { AtCommand_Heal, "@heal", 40, atcommand_heal }, - { AtCommand_Item, "@item", 60, atcommand_item }, - { AtCommand_Item2, "@item2", 60, atcommand_item2 }, - { AtCommand_ItemReset, "@itemreset", 40, atcommand_itemreset }, - { AtCommand_BaseLevelUp, "@baselvl", 60, atcommand_baselevelup }, - { AtCommand_BaseLevelUp, "@baselevel", 60, atcommand_baselevelup }, - { AtCommand_BaseLevelUp, "@blevel", 60, atcommand_baselevelup }, - { AtCommand_BaseLevelUp, "@blvl", 60, atcommand_baselevelup }, - { AtCommand_JobLevelUp, "@jlvl", 60, atcommand_joblevelup }, - { AtCommand_JobLevelUp, "@jlevel", 60, atcommand_joblevelup }, - { AtCommand_JobLevelUp, "@joblvl", 60, atcommand_joblevelup }, - { AtCommand_JobLevelUp, "@joblevel", 60, atcommand_joblevelup }, - { AtCommand_H, "@h", 20, atcommand_help }, - { AtCommand_Help, "@help", 20, atcommand_help }, - { AtCommand_H2, "@h2", 20, atcommand_help2 }, - { AtCommand_Help2, "@help2", 20, atcommand_help2 }, - { AtCommand_GM, "@gm", 100,atcommand_gm }, - { AtCommand_PvPOff, "@pvpoff", 40, atcommand_pvpoff }, - { AtCommand_PvPOn, "@pvpon", 40, atcommand_pvpon }, - { AtCommand_GvGOff, "@gvgoff", 40, atcommand_gvgoff }, - { AtCommand_GvGOff, "@gpvpoff", 40, atcommand_gvgoff }, - { AtCommand_GvGOn, "@gvgon", 40, atcommand_gvgon }, - { AtCommand_GvGOn, "@gpvpon", 40, atcommand_gvgon }, - { AtCommand_Model, "@model", 20, atcommand_model }, - { AtCommand_Go, "@go", 10, atcommand_go }, - { AtCommand_Spawn, "@monster", 50, atcommand_monster }, - { AtCommand_Spawn, "@spawn", 50, atcommand_monster }, - { AtCommand_MonsterSmall, "@monstersmall", 50, atcommand_monstersmall }, - { AtCommand_MonsterBig, "@monsterbig", 50, atcommand_monsterbig }, - { AtCommand_KillMonster, "@killmonster", 60, atcommand_killmonster }, - { AtCommand_KillMonster2, "@killmonster2", 40, atcommand_killmonster2 }, - { AtCommand_Refine, "@refine", 60, atcommand_refine }, - { AtCommand_Produce, "@produce", 60, atcommand_produce }, - { AtCommand_Memo, "@memo", 40, atcommand_memo }, - { AtCommand_GAT, "@gat", 99, atcommand_gat }, - { AtCommand_DisplayStatus, "@displaystatus", 99, atcommand_displaystatus }, - { AtCommand_StatusPoint, "@stpoint", 60, atcommand_statuspoint }, - { AtCommand_SkillPoint, "@skpoint", 60, atcommand_skillpoint }, - { AtCommand_Zeny, "@zeny", 60, atcommand_zeny }, - { AtCommand_Strength, "@str", 60, atcommand_param }, - { AtCommand_Agility, "@agi", 60, atcommand_param }, - { AtCommand_Vitality, "@vit", 60, atcommand_param }, - { AtCommand_Intelligence, "@int", 60, atcommand_param }, - { AtCommand_Dexterity, "@dex", 60, atcommand_param }, - { AtCommand_Luck, "@luk", 60, atcommand_param }, - { AtCommand_GuildLevelUp, "@glvl", 60, atcommand_guildlevelup }, - { AtCommand_GuildLevelUp, "@glevel", 60, atcommand_guildlevelup }, - { AtCommand_GuildLevelUp, "@guildlvl", 60, atcommand_guildlevelup }, - { AtCommand_GuildLevelUp, "@guildlevel", 60, atcommand_guildlevelup }, - { AtCommand_MakeEgg, "@makeegg", 60, atcommand_makeegg }, - { AtCommand_Hatch, "@hatch", 60, atcommand_hatch }, - { AtCommand_PetFriendly, "@petfriendly", 40, atcommand_petfriendly }, - { AtCommand_PetHungry, "@pethungry", 40, atcommand_pethungry }, - { AtCommand_PetRename, "@petrename", 1, atcommand_petrename }, - { AtCommand_Recall, "@recall", 60, atcommand_recall }, // + /recall - { AtCommand_Night, "@night", 80, atcommand_night }, - { AtCommand_Day, "@day", 80, atcommand_day }, - { AtCommand_Doom, "@doom", 80, atcommand_doom }, - { AtCommand_DoomMap, "@doommap", 80, atcommand_doommap }, - { AtCommand_Raise, "@raise", 80, atcommand_raise }, - { AtCommand_RaiseMap, "@raisemap", 80, atcommand_raisemap }, - { AtCommand_Kick, "@kick", 20, atcommand_kick }, // + right click menu for GM "(name) force to quit" - { AtCommand_KickAll, "@kickall", 99, atcommand_kickall }, - { AtCommand_AllSkill, "@allskill", 60, atcommand_allskill }, - { AtCommand_AllSkill, "@allskills", 60, atcommand_allskill }, - { AtCommand_AllSkill, "@skillall", 60, atcommand_allskill }, - { AtCommand_AllSkill, "@skillsall", 60, atcommand_allskill }, - { AtCommand_QuestSkill, "@questskill", 40, atcommand_questskill }, - { AtCommand_LostSkill, "@lostskill", 40, atcommand_lostskill }, - { AtCommand_SpiritBall, "@spiritball", 40, atcommand_spiritball }, - { AtCommand_Party, "@party", 1, atcommand_party }, - { AtCommand_Guild, "@guild", 50, atcommand_guild }, - { AtCommand_AgitStart, "@agitstart", 60, atcommand_agitstart }, - { AtCommand_AgitEnd, "@agitend", 60, atcommand_agitend }, - { AtCommand_MapExit, "@mapexit", 99, atcommand_mapexit }, - { AtCommand_IDSearch, "@idsearch", 60, atcommand_idsearch }, - { AtCommand_Broadcast, "@broadcast", 40, atcommand_broadcast }, // /b and /nb command - { AtCommand_LocalBroadcast, "@localbroadcast", 40, atcommand_localbroadcast }, // /lb and /nlb command - { AtCommand_RecallAll, "@recallall", 80, atcommand_recallall }, - { AtCommand_ReloadItemDB, "@reloaditemdb", 99, atcommand_reloaditemdb }, // admin command - { AtCommand_ReloadMobDB, "@reloadmobdb", 99, atcommand_reloadmobdb }, // admin command - { AtCommand_ReloadSkillDB, "@reloadskilldb", 99, atcommand_reloadskilldb }, // admin command - { AtCommand_ReloadScript, "@reloadscript", 99, atcommand_reloadscript }, // admin command - { AtCommand_ReloadGMDB, "@reloadgmdb", 99, atcommand_reloadgmdb }, // admin command - { AtCommand_ReloadAtcommand, "@reloadatcommand", 99, atcommand_reloadatcommand }, - { AtCommand_ReloadBattleConf, "@reloadbattleconf",99, atcommand_reloadbattleconf }, - { AtCommand_ReloadStatusDB, "@reloadstatusdb", 99, atcommand_reloadstatusdb }, - { AtCommand_ReloadPcDB, "@reloadpcdb", 99, atcommand_reloadpcdb }, - { AtCommand_ReloadMOTD, "@reloadmotd", 99, atcommand_reloadmotd }, // [Valaris] - { AtCommand_MapInfo, "@mapinfo", 99, atcommand_mapinfo }, - { AtCommand_Dye, "@dye", 40, atcommand_dye }, // by fritz - { AtCommand_Dye, "@ccolor", 40, atcommand_dye }, // by fritz - { AtCommand_Hstyle, "@hairstyle", 40, atcommand_hair_style }, // by fritz - { AtCommand_Hstyle, "@hstyle", 40, atcommand_hair_style }, // by fritz - { AtCommand_Hcolor, "@haircolor", 40, atcommand_hair_color }, // by fritz - { AtCommand_Hcolor, "@hcolor", 40, atcommand_hair_color }, // by fritz - { AtCommand_StatAll, "@statall", 60, atcommand_stat_all }, // by fritz - { AtCommand_StatAll, "@statsall", 60, atcommand_stat_all }, - { AtCommand_StatAll, "@allstats", 60, atcommand_stat_all }, // by fritz - { AtCommand_StatAll, "@allstat", 60, atcommand_stat_all }, // by fritz - { AtCommand_CharBlock, "@block", 60, atcommand_char_block }, // by Yor - { AtCommand_CharBlock, "@charblock", 60, atcommand_char_block }, // by Yor - { AtCommand_CharBan, "@ban", 60, atcommand_char_ban }, // by Yor - { AtCommand_CharBan, "@banish", 60, atcommand_char_ban }, // by Yor - { AtCommand_CharBan, "@charban", 60, atcommand_char_ban }, // by Yor - { AtCommand_CharBan, "@charbanish", 60, atcommand_char_ban }, // by Yor - { AtCommand_CharUnBlock, "@unblock", 60, atcommand_char_unblock }, // by Yor - { AtCommand_CharUnBlock, "@charunblock", 60, atcommand_char_unblock }, // by Yor - { AtCommand_CharUnBan, "@unban", 60, atcommand_char_unban }, // by Yor - { AtCommand_CharUnBan, "@unbanish", 60, atcommand_char_unban }, // by Yor - { AtCommand_CharUnBan, "@charunban", 60, atcommand_char_unban }, // by Yor - { AtCommand_CharUnBan, "@charunbanish", 60, atcommand_char_unban }, // by Yor - { AtCommand_MountPeco, "@mount", 20, atcommand_mount_peco }, // by Valaris - { AtCommand_MountPeco, "@mountpeco", 20, atcommand_mount_peco }, // by Valaris - { AtCommand_GuildSpy, "@guildspy", 60, atcommand_guildspy }, // [Syrus22] - { AtCommand_PartySpy, "@partyspy", 60, atcommand_partyspy }, // [Syrus22] - { AtCommand_RepairAll, "@repairall", 60, atcommand_repairall }, // [Valaris] - { AtCommand_GuildRecall, "@guildrecall", 60, atcommand_guildrecall }, // by Yor - { AtCommand_PartyRecall, "@partyrecall", 60, atcommand_partyrecall }, // by Yor - { AtCommand_Nuke, "@nuke", 60, atcommand_nuke }, // [Valaris] - { AtCommand_Shownpc, "@shownpc", 80, atcommand_shownpc }, // [] - { AtCommand_Hidenpc, "@hidenpc", 80, atcommand_hidenpc }, // [] - { AtCommand_Loadnpc, "@loadnpc", 80, atcommand_loadnpc }, // [] - { AtCommand_Unloadnpc, "@unloadnpc", 80, atcommand_unloadnpc }, // [] - { AtCommand_ServerTime, "@time", 1, atcommand_servertime }, // by Yor - { AtCommand_ServerTime, "@date", 1, atcommand_servertime }, // by Yor - { AtCommand_ServerTime, "@serverdate", 1, atcommand_servertime }, // by Yor - { AtCommand_ServerTime, "@servertime", 1, atcommand_servertime }, // by Yor - { AtCommand_Jail, "@jail", 60, atcommand_jail }, // by Yor - { AtCommand_UnJail, "@unjail", 60, atcommand_unjail }, // by Yor - { AtCommand_UnJail, "@discharge", 60, atcommand_unjail }, // by Yor - { AtCommand_JailFor, "@jailfor", 60, atcommand_jailfor }, //Meruru - { AtCommand_JailTime, "@jailtime", 1, atcommand_jailtime }, //Change this to 0 in atcommand_conf.txt if you want it accessible to players (you most likely will ;)) - { AtCommand_Disguise, "@disguise", 20, atcommand_disguise }, // [Valaris] - { AtCommand_UnDisguise, "@undisguise", 20, atcommand_undisguise }, // by Yor - { AtCommand_EMail, "@email", 1, atcommand_email }, // by Yor - { AtCommand_Effect, "@effect", 40, atcommand_effect }, // by Apple - { AtCommand_Follow, "@follow", 20, atcommand_follow }, // by MouseJstr - { AtCommand_AddWarp, "@addwarp", 60, atcommand_addwarp }, // by MouseJstr - { AtCommand_SkillOn, "@skillon", 80, atcommand_skillon }, // by MouseJstr - { AtCommand_SkillOff, "@skilloff", 80, atcommand_skilloff }, // by MouseJstr - { AtCommand_Killer, "@killer", 60, atcommand_killer }, // by MouseJstr - { AtCommand_NpcMove, "@npcmove", 80, atcommand_npcmove }, // by MouseJstr - { AtCommand_Killable, "@killable", 40, atcommand_killable }, // by MouseJstr - { AtCommand_Dropall, "@dropall", 40, atcommand_dropall }, // MouseJstr - { AtCommand_Storeall, "@storeall", 40, atcommand_storeall }, // MouseJstr - { AtCommand_Skillid, "@skillid", 40, atcommand_skillid }, // MouseJstr - { AtCommand_Useskill, "@useskill", 40, atcommand_useskill }, // MouseJstr - { AtCommand_DisplaySkill, "@displayskill", 99, atcommand_displayskill }, // Skotlex - { AtCommand_Snow, "@snow", 99, atcommand_snow }, - { AtCommand_Sakura, "@sakura", 99, atcommand_sakura }, - { AtCommand_Clouds, "@clouds", 99, atcommand_clouds }, - { AtCommand_Clouds2, "@clouds2", 99, atcommand_clouds2 }, - { AtCommand_Fog, "@fog", 99, atcommand_fog }, - { AtCommand_Fireworks, "@fireworks", 99, atcommand_fireworks }, - { AtCommand_Leaves, "@leaves", 99, atcommand_leaves }, - { AtCommand_Summon, "@summon", 60, atcommand_summon }, - { AtCommand_AdjGmLvl, "@adjgmlvl", 99, atcommand_adjgmlvl }, - { AtCommand_AdjCmdLvl, "@adjcmdlvl", 99, atcommand_adjcmdlvl }, - { AtCommand_Trade, "@trade", 60, atcommand_trade }, - { AtCommand_Send, "@send", 99, atcommand_send }, - { AtCommand_SetBattleFlag, "@setbattleflag", 99, atcommand_setbattleflag }, - { AtCommand_UnMute, "@unmute", 80, atcommand_unmute }, // [Valaris] - { AtCommand_Clearweather, "@clearweather", 99, atcommand_clearweather }, // Dexity - { AtCommand_UpTime, "@uptime", 1, atcommand_uptime }, // by MC Cameri - { AtCommand_ChangeSex, "@changesex", 60, atcommand_changesex }, // by MC Cameri <- do we still need this? [Foruken] <- why not? [Skotlex] - { AtCommand_Mute, "@mute", 80, atcommand_mute }, // [celest] - { AtCommand_WhoZeny, "@whozeny", 20, atcommand_whozeny }, // [Valaris] - { AtCommand_Refresh, "@refresh", 1, atcommand_refresh }, // by MC Cameri - { AtCommand_Identify, "@identify", 40, atcommand_identify }, // by MC Cameri - { AtCommand_Gmotd, "@gmotd", 20, atcommand_gmotd }, // Added by MC Cameri, created by davidsiaw - { AtCommand_MiscEffect, "@misceffect", 50, atcommand_misceffect }, // by MC Cameri - { AtCommand_MobSearch, "@mobsearch", 10, atcommand_mobsearch }, - { AtCommand_CleanMap, "@cleanmap", 40, atcommand_cleanmap }, - { AtCommand_NpcTalk, "@npctalk", 20, atcommand_npctalk }, - { AtCommand_PetTalk, "@pettalk", 10, atcommand_pettalk }, - { AtCommand_Users, "@users", 40, atcommand_users }, - { AtCommand_ResetState, "@reset", 40, atcommand_reset }, - { AtCommand_SkillTree, "@skilltree", 40, atcommand_skilltree }, // [MouseJstr] - { AtCommand_Marry, "@marry", 40, atcommand_marry }, // [MouseJstr] - { AtCommand_Divorce, "@divorce", 40, atcommand_divorce }, // [MouseJstr] - { AtCommand_JumpToId2, "@jumptoid2", 20, atcommand_jumptoid2 }, // [Dino9021] - { AtCommand_JumpToId2, "@warptoid2", 20, atcommand_jumptoid2 }, // [Dino9021] - { AtCommand_JumpToId2, "@gotoid2", 20, atcommand_jumptoid2 }, // [Dino9021] - { AtCommand_RecallId2, "@recallid2", 60, atcommand_recallid2 }, // [Dino9021] - { AtCommand_KickId2, "@kickid2", 99, atcommand_kickid2 }, // [Dino9021] - { AtCommand_ReviveId2, "@reviveid2", 60, atcommand_reviveid2 }, // [Dino9021] - { AtCommand_KillId2, "@killid2", 60, atcommand_killid2 }, // [Dino9021] - { AtCommand_Sound, "@sound", 40, atcommand_sound }, - { AtCommand_UndisguiseAll, "@undisguiseall", 99, atcommand_undisguiseall }, - { AtCommand_DisguiseAll, "@disguiseall", 99, atcommand_disguiseall }, - { AtCommand_ChangeLook, "@changelook", 60, atcommand_changelook }, - { AtCommand_AutoLoot, "@autoloot", 10, atcommand_autoloot }, // Upa-Kun - { AtCommand_MobInfo, "@mobinfo", 1, atcommand_mobinfo }, // [Lupus] - { AtCommand_MobInfo, "@monsterinfo", 1, atcommand_mobinfo }, // [Lupus] - { AtCommand_MobInfo, "@mi", 1, atcommand_mobinfo }, // [Lupus] - { AtCommand_Exp, "@exp", 1, atcommand_exp }, // [Skotlex] - { AtCommand_Adopt, "@adopt", 40, atcommand_adopt }, // [Veider] - { AtCommand_Version, "@version", 1, atcommand_version }, - { AtCommand_MuteArea, "@mutearea", 99, atcommand_mutearea }, // MouseJstr - { AtCommand_MuteArea, "@stfu", 99, atcommand_mutearea }, // MouseJstr - { AtCommand_Rates, "@rates", 1, atcommand_rates }, // MouseJstr - { AtCommand_ItemInfo, "@iteminfo", 1, atcommand_iteminfo }, // [Lupus] - { AtCommand_ItemInfo, "@ii", 1, atcommand_iteminfo }, // [Lupus] - { AtCommand_WhoDrops, "@whodrops", 1, atcommand_whodrops }, // [Skotlex] - { AtCommand_WhereIs, "@whereis", 10, atcommand_whereis }, // [Skotlex] - { AtCommand_MapFlag, "@mapflag", 99, atcommand_mapflag }, // [Lupus] - { AtCommand_Me, "@me", 20, atcommand_me }, //added by massdriller, code by lordalfa - { AtCommand_MonsterIgnore, "@monsterignore", 99, atcommand_monsterignore }, // [Valaris] - { AtCommand_MonsterIgnore, "@battleignore", 99, atcommand_monsterignore }, - { AtCommand_FakeName, "@fakename", 20, atcommand_fakename }, // [Valaris] - { AtCommand_Size, "@size", 20, atcommand_size }, - { AtCommand_ShowExp, "@showexp", 10, atcommand_showexp}, - { AtCommand_ShowZeny, "@showzeny", 10, atcommand_showzeny}, - { AtCommand_ShowDelay, "@showdelay", 1, atcommand_showdelay}, - { AtCommand_AutoTrade, "@autotrade", 10, atcommand_autotrade }, // durf - { AtCommand_AutoTrade, "@at", 10, atcommand_autotrade }, - { AtCommand_ChangeGM, "@changegm", 10, atcommand_changegm }, // durf - { AtCommand_ChangeLeader, "@changeleader", 10, atcommand_changeleader }, // durf - { AtCommand_PartyOption, "@partyoption", 10, atcommand_partyoption}, // durf - { AtCommand_Invite, "@invite", 1, atcommand_invite }, // By LuzZza - { AtCommand_Duel, "@duel", 1, atcommand_duel }, // By LuzZza - { AtCommand_Leave, "@leave", 1, atcommand_leave }, // By LuzZza - { AtCommand_Accept, "@accept", 1, atcommand_accept }, // By LuzZza - { AtCommand_Reject, "@reject", 1, atcommand_reject }, // By LuzZza - { AtCommand_Away, "@away", 1, atcommand_away }, // [LuzZza] - { AtCommand_Away, "@aw", 1, atcommand_away }, // [LuzZza] - { AtCommand_Main, "@main", 1, atcommand_main }, // [LuzZza] - { AtCommand_Clone, "@clone", 50, atcommand_clone }, - { AtCommand_Clone, "@slaveclone", 50, atcommand_clone }, - { AtCommand_Clone, "@evilclone", 50, atcommand_clone }, // [Valaris] - { AtCommand_ToNPC, "@tonpc", 40, atcommand_tonpc }, // LuzZza - { AtCommand_Commands, "@commands", 1, atcommand_commands }, // [Skotlex] - { AtCommand_NoAsk, "@noask", 1, atcommand_noask }, // [LuzZza] - { AtCommand_Request, "@request", 20, atcommand_request }, // [Skotlex] - { AtCommand_HomLevel, "@hlvl", 60, atcommand_homlevel }, - { AtCommand_HomLevel, "@hlevel", 60, atcommand_homlevel }, - { AtCommand_HomLevel, "@homlvl", 60, atcommand_homlevel }, - { AtCommand_HomLevel, "@homlevel", 60, atcommand_homlevel }, - { AtCommand_HomEvolution, "@homevolution", 60, atcommand_homevolution }, - { AtCommand_MakeHomun, "@makehomun", 60, atcommand_makehomun }, - { AtCommand_HomFriendly, "@homfriendly", 60, atcommand_homfriendly }, - { AtCommand_HomHungry, "@homhungry", 60, atcommand_homhungry }, - { AtCommand_HomTalk, "@homtalk", 10, atcommand_homtalk }, - { AtCommand_HomInfo, "@hominfo", 1, atcommand_hominfo }, - { AtCommand_HomStats, "@homstats", 1, atcommand_homstats }, - { AtCommand_HomShuffle, "@homshuffle", 60, atcommand_homshuffle }, - { AtCommand_ShowMobs, "@showmobs", 10, atcommand_showmobs }, //KarLaeda - { AtCommand_FeelReset, "@feelreset", 10, atcommand_feelreset }, //[HiddenDragon] -#ifndef TXT_ONLY // sql-only commands - { AtCommand_Mail, "@mail", 1, atcommand_mail }, // [Mail System] - { AtCommand_RefreshOnline, "@refreshonline", 99, atcommand_refreshonline }, // [Valaris] -#endif -#ifdef DMALLOC - { AtCommand_DMStart, "@dmstart", 99, atcommand_dmstart }, // [MouseJstr] - { AtCommand_DMTick, "@dmtick", 99, atcommand_dmtick }, // [MouseJstr] -#endif -// add new commands before this line - { AtCommand_Unknown, NULL, 1, NULL } -}; +typedef struct AtCommandInfo +{ + const char* command; + int level; + AtCommandFunc func; +} AtCommandInfo; + +static AtCommandInfo* get_atcommandinfo_byname(const char* name); +static AtCommandInfo* get_atcommandinfo_byfunc(const AtCommandFunc func); + +int atcommand_commands(const int fd, struct map_session_data* sd, const char* command, const char* message); + /*========================================= * Generic variables @@ -627,151 +112,6 @@ static char* player_title_txt(int level) return atcmd_temp; } -/*========================================== - * Retrieve the atcommand's required gm level - *------------------------------------------*/ -int get_atcommand_level(const AtCommandType type) -{ - int i; - - for (i = 0; atcommand_info[i].type != AtCommand_None; i++) - if (atcommand_info[i].type == type) - return atcommand_info[i].level; - - return 100; // 100: command can not be used -} - -AtCommandType is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl) -{ - AtCommandInfo info; - AtCommandType type; - - memset(&info, 0, sizeof(info)); - - type = atcommand(sd, gmlvl, str, &info); - if (type != AtCommand_None) { - char command[100]; - const char* p = str; - - if (map[sd->bl.m].nocommand && - gmlvl < map[sd->bl.m].nocommand) - { //Command not allowed on this map. - sprintf(atcmd_output, msg_txt(143)); - clif_displaymessage(fd, atcmd_output); - return AtCommand_None; - } - - memset(command, '\0', sizeof(command)); - memset(atcmd_output, '\0', sizeof(atcmd_output)); - while (*p && !ISSPACE(*p)) - p++; - if (p - str >= sizeof(command)) // too long - return AtCommand_Unknown; - strncpy(command, str, p - str); - while (ISSPACE(*p)) - p++; - - if (type == AtCommand_Unknown || info.proc == NULL) { - sprintf(atcmd_output, msg_txt(153), command); // %s is Unknown Command. - clif_displaymessage(fd, atcmd_output); - } else { - if (info.proc(fd, sd, command, p) != 0) { - // Command can not be executed - sprintf(atcmd_output, msg_txt(154), command); // %s failed. - clif_displaymessage(fd, atcmd_output); - } - } - - return info.type; - } - - return AtCommand_None; -} - -/*========================================== - * - *------------------------------------------*/ -AtCommandType is_atcommand(const int fd, struct map_session_data* sd, const char* message) -{ - const char* str = message; - int s_flag = 0; - - nullpo_retr(AtCommand_None, sd); - - if (sd->sc.count && sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCOMMAND) { - return AtCommand_Unknown; - } - - if (!message || !*message) - return AtCommand_None; - - // temporary compatibility layer for previous implementation - if( *message != atcommand_symbol ) - { - str += strlen(sd->status.name); - while (*str && (ISSPACE(*str) || (s_flag == 0 && *str == ':'))) { - if (*str == ':') - s_flag = 1; - str++; - } - } - - if (!*str) - return AtCommand_None; - - if(str[0] == '|' && strlen(str) >= 4 && str[3] == atcommand_symbol) - str += 3; // skip 10/11-langtype's codepage indicator, if detected - - return is_atcommand_sub(fd,sd,str,pc_isGM(sd)); -} - -/*========================================== - * - *------------------------------------------*/ -AtCommandType atcommand(struct map_session_data* sd, const int level, const char* message, struct AtCommandInfo* info) -{ - char* p = (char *)message; // it's 'char' and not 'const char' to have possibility to modify the first character if necessary - - if (!info) - return AtCommand_None; - if (battle_config.atc_gmonly != 0 && !level) // level = pc_isGM(sd) - return AtCommand_None; - if (!p || !*p) { - ShowError("at command message is empty\n"); - return AtCommand_None; - } - - if (*p == atcommand_symbol) { // check first char - char command[101]; - int i = 0; - memset(info, 0, sizeof(AtCommandInfo)); - sscanf(p, "%100s", command); - command[100] = '\0'; - - while (atcommand_info[i].type != AtCommand_Unknown) { - if (strcmpi(command+1, atcommand_info[i].command+1) == 0 && level >= atcommand_info[i].level) { - p[0] = atcommand_info[i].command[0]; // set correct first symbol for after. - break; - } - i++; - } - - if (atcommand_info[i].type == AtCommand_Unknown) { - // doesn't return Unknown if player is normal player (display the text, not display: unknown command) - if (level == 0) - return AtCommand_None; - else - return AtCommand_Unknown; - } else if((log_config.gm) && (atcommand_info[i].level >= log_config.gm)) { - log_atcommand(sd, message); - } - memcpy(info, &atcommand_info[i], sizeof atcommand_info[i]); - } else { - return AtCommand_None; - } - - return info->type; -} /*========================================== * Read Message Data @@ -826,114 +166,8 @@ void do_final_msg(void) int i; for (i = 0; i < MAX_MSG; i++) aFree(msg_table[i]); - return; } -/*========================================== - * - *------------------------------------------*/ -static AtCommandInfo* get_atcommandinfo_byname(const char* name) -{ - int i; - - for (i = 0; atcommand_info[i].type != AtCommand_Unknown; i++) - if (strcmpi(atcommand_info[i].command + 1, name) == 0) - return &atcommand_info[i]; - - return NULL; -} - -/*========================================== - * - *------------------------------------------*/ -int atcommand_config_read(const char *cfgName) -{ - char line[1024], w1[1024], w2[1024]; - AtCommandInfo* p; - FILE* fp; - - if ((fp = fopen(cfgName, "r")) == NULL) { - ShowError("At commands configuration file not found: %s\n", cfgName); - return 1; - } - - while(fgets(line, sizeof(line), fp)) - { - if (line[0] == '/' && line[1] == '/') - continue; - - if (sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2) - continue; - p = get_atcommandinfo_byname(w1); - if (p != NULL) { - p->level = atoi(w2); - if (p->level > 100) - p->level = 100; - else if (p->level < 0) - p->level = 0; - } - - if (strcmpi(w1, "import") == 0) - atcommand_config_read(w2); - else if (strcmpi(w1, "command_symbol") == 0 && w2[0] > 31 && - w2[0] != '/' && // symbol of standard ragnarok GM commands - w2[0] != '%' && // symbol of party chat speaking - w2[0] != '$' && // symbol of guild chat - w2[0] != '#') // symbol of charcommand - atcommand_symbol = w2[0]; - } - fclose(fp); - - return 0; -} - -/*========================================== -// @ command processing functions - *------------------------------------------*/ - -/*========================================== - * @commands Lists available @ commands to you (code 98% from Meruru) - *------------------------------------------*/ -int atcommand_commands(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char cz_line_buff[CHATBOX_SIZE]; - - register char *lpcz_cur = cz_line_buff; - register unsigned int ui_slen; - - int i_cur_cmd,gm_lvl = pc_isGM(sd), count = 0; - - memset(cz_line_buff,' ',CHATBOX_SIZE); - cz_line_buff[CHATBOX_SIZE-1] = 0; - - clif_displaymessage(fd, msg_txt(273)); - - for (i_cur_cmd = 0;atcommand_info[i_cur_cmd].type != AtCommand_Unknown;i_cur_cmd++) - { - if(gm_lvl < atcommand_info[i_cur_cmd].level) - continue; - - count++; - ui_slen = (unsigned int)strlen(atcommand_info[i_cur_cmd].command); - - //remember not <= bc we need null terminator - if(((CHATBOX_SIZE+(int)cz_line_buff)-(int)lpcz_cur) < (int)ui_slen) - { - clif_displaymessage(fd,(char*)cz_line_buff); - lpcz_cur = cz_line_buff; - memset(cz_line_buff,' ',CHATBOX_SIZE); - cz_line_buff[CHATBOX_SIZE-1] = 0; - } - - memcpy(lpcz_cur,atcommand_info[i_cur_cmd].command,ui_slen); - lpcz_cur += ui_slen+(10-ui_slen%10); - } - - clif_displaymessage(fd,(char*)cz_line_buff); - sprintf(atcmd_output, msg_txt(274), count); //There will always be at least 1 command (@commands) - clif_displaymessage(fd, atcmd_output); - return 0; -} /*========================================== * @send (used for testing packet sends from the client) @@ -1171,9 +405,9 @@ int atcommand_send(const int fd, struct map_session_data* sd, const char* comman } /*========================================== - * @rura + * @rura, @warp, @mapmove *------------------------------------------*/ -int atcommand_rura( const int fd, struct map_session_data* sd, const char* command, const char* message) +int atcommand_mapmove(const int fd, struct map_session_data* sd, const char* command, const char* message) { char map_name[MAP_NAME_LENGTH_EXT]; unsigned short mapindex; @@ -3984,13 +3218,16 @@ int atcommand_makeegg(const int fd, struct map_session_data* sd, const char* com nullpo_retr(-1, sd); if (!message || !*message) { - clif_displaymessage(fd, "Please, enter a monster/egg name/id (usage: @makeegg )."); + clif_displaymessage(fd, "Please, enter a monster/egg name/id (usage: @makeegg )."); return -1; } if ((item_data = itemdb_searchname(message)) != NULL) // for egg name id = item_data->nameid; - else if ((id = mobdb_searchname(message)) == 0) // for monster name + else + if ((id = mobdb_searchname(message)) != 0) // for monster name + ; + else id = atoi(message); pet_id = search_petDB_index(id, PET_CLASS); @@ -4531,12 +3768,12 @@ int atcommand_questskill(const int fd, struct map_session_data* sd, const char* if (!(skill_get_inf2(skill_id) & INF2_QUEST_SKILL)) { clif_displaymessage(fd, msg_txt(197)); // This skill number doesn't exist or isn't a quest skill. return -1; - } + } if (pc_checkskill(sd, skill_id) > 0) { clif_displaymessage(fd, msg_txt(196)); // You already have this quest skill. return -1; } - + pc_skill(sd, skill_id, 1, 0); clif_displaymessage(fd, msg_txt(70)); // You have learned the skill. @@ -6272,9 +5509,6 @@ int atcommand_npcmove(const int fd, struct map_session_data* sd, const char* com return -1; } - //Who's idea was this? nullpo's are meant to check pointers that SHOULDN'T be null unless there's a bug... [Skotlex] -// nullpo_retr(-1, (nd = npc_name2id(atcmd_player_name))); - if ((nd = npc_name2id(atcmd_player_name)) == NULL) { clif_displaymessage(fd, msg_txt(111)); // This NPC doesn't exist. @@ -6308,13 +5542,13 @@ int atcommand_addwarp(const int fd, struct map_session_data* sd, const char* com nullpo_retr(-1, sd); if (!message || !*message || sscanf(message, "%23s %d %d[^\n]", atcmd_player_name, &x, &y) < 3) { - clif_displaymessage(fd, "usage: @addwarp ."); + clif_displaymessage(fd, "usage: @addwarp ."); return -1; } sprintf(w1,"%s,%d,%d", mapindex_id2name(sd->mapindex), sd->bl.x, sd->bl.y); sprintf(w3,"%s%d%d%d%d", atcmd_player_name,sd->bl.x, sd->bl.y, x, y); - sprintf(w4,"1,1,%s.gat,%d,%d", atcmd_player_name, x, y); + sprintf(w4,"1,1,%s,%d,%d", atcmd_player_name, x, y); // FIXME check if it failed [FlavioJS] npc_parse_warp(w1, "warp", w3, w4, NULL, NULL, "console"); @@ -6677,28 +5911,6 @@ int atcommand_divorce(const int fd, struct map_session_data* sd, const char* com return 0; } - -#ifdef DMALLOC -unsigned long dmark_; -int atcommand_dmstart(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - dmark_ = dmalloc_mark(); - - clif_displaymessage(fd, "debug mark set"); - - return 0; -} - -int atcommand_dmtick(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - dmalloc_log_changed ( dmark_, 1, 0, 1 ) ; - dmark_ = dmalloc_mark(); - clif_displaymessage(fd, "malloc changes logged"); - - return 0; -} -#endif - /*========================================== * @changelook by [Celest] *------------------------------------------*/ @@ -7369,38 +6581,40 @@ int atcommand_summon(const int fd, struct map_session_data* sd, const char* comm *------------------------------------------*/ int atcommand_adjcmdlvl(const int fd, struct map_session_data* sd, const char* command, const char* message) { - int i, newlev; - char cmd[100]; + int newlev; + char name[100]; + AtCommandInfo* cmd; + nullpo_retr(-1, sd); - if (!message || !*message || sscanf(message, "%d %99s", &newlev, cmd) != 2) + if (!message || !*message || sscanf(message, "%d %99s", &newlev, name) != 2) { clif_displaymessage(fd, "Usage: @adjcmdlvl ."); return -1; } - if (newlev > pc_isGM(sd)) + cmd = get_atcommandinfo_byname(name); + if (cmd == NULL) + { + clif_displaymessage(fd, "@command not found."); + return -1; + } + else if (newlev > pc_isGM(sd)) { clif_displaymessage(fd, "You can't make a command require higher GM level than your own."); return -1; } - - for (i = 0; atcommand_info[i].command && atcommand_info[i].type != AtCommand_None; i++) + else if (cmd->level > pc_isGM(sd)) { - if (strcmpi(cmd, atcommand_info[i].command+1) != 0) - continue; - if (atcommand_info[i].level > pc_isGM(sd)) - { - clif_displaymessage(fd, "You can't adjust the level of a command which's level is above your own."); - return -1; - } - atcommand_info[i].level = newlev; + clif_displaymessage(fd, "You can't adjust the level of a command which's level is above your own."); + return -1; + } + else + { + cmd->level = newlev; clif_displaymessage(fd, "@command level changed."); return 0; } - - clif_displaymessage(fd, "@command not found."); - return -1; } /*========================================== @@ -7653,185 +6867,6 @@ int atcommand_misceffect(const int fd, struct map_session_data* sd, const char* return 0; } -/*========================================== - * Jump to a player by PID number - * Original by Dino9021 - * Added in by nsstrunks - *------------------------------------------*/ -int atcommand_jumptoid2(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int aid=0; - struct map_session_data *pl_sd; - - memset(atcmd_output, '\0', sizeof(atcmd_output)); - - if (!message || (aid = atoi(message)) == 0) { - clif_displaymessage(fd, "Please, enter a player AID (usage: @jumptoid/@warptoid/@gotoid )."); - return -1; - } - - pl_sd = map_id2sd(aid); - if (!pl_sd) { - clif_displaymessage(fd, msg_txt(154)); // Character not found. - return -1; - } - - if (map[pl_sd->bl.m].flag.nowarpto && - battle_config.any_warp_GM_min_level > pc_isGM(sd)) - { - clif_displaymessage(fd, msg_txt(247)); - return -1; - } - if (map[sd->bl.m].flag.nowarp && - battle_config.any_warp_GM_min_level > pc_isGM(sd)) - { - clif_displaymessage(fd, msg_txt(248)); - return -1; - } - pc_setpos(sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, 3); - sprintf(atcmd_output, msg_txt(4), pl_sd->status.name); // Jump to %s - clif_displaymessage(fd, atcmd_output); - return 0; -} - -/*========================================== - * Recall a player by PID number - * Original by Dino9021 - * Added in by nsstrunks - *------------------------------------------*/ -int atcommand_recallid2(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int aid=0; - struct map_session_data *pl_sd; - - memset(atcmd_output, '\0', sizeof(atcmd_output)); - - if (!message || (aid = atoi(message)) == 0) { - clif_displaymessage(fd, "Please, enter a player AID (usage: @recallid2 )."); - return -1; - } - - pl_sd = map_id2sd(aid); - if (!pl_sd) { - clif_displaymessage(fd, msg_txt(154)); // Character not found. - return -1; - } - if (pc_isGM(sd) < pc_isGM(pl_sd)) - { // you can recall only lower or same level - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (map[pl_sd->bl.m].flag.nowarpto && - battle_config.any_warp_GM_min_level > pc_isGM(sd)) - { - clif_displaymessage(fd, msg_txt(247)); - return -1; - } - if (map[sd->bl.m].flag.nowarp && - battle_config.any_warp_GM_min_level > pc_isGM(sd)) - { - clif_displaymessage(fd, msg_txt(248)); - return -1; - } - - pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2); - sprintf(atcmd_output, msg_txt(46), pl_sd->status.name); // Jump to %s - clif_displaymessage(fd, atcmd_output); - return 0; -} - -/*========================================== - * Kick a player by PID number - * Original by Dino9021 - * Added in by nsstrunks - *------------------------------------------*/ -int atcommand_kickid2(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - int aid=0; - - if (!message || (aid = atoi(message)) == 0) { - clif_displaymessage(fd, "Please, enter a player AID (usage: @kickid2 )."); - return -1; - } - - pl_sd = map_id2sd(aid); - if (!pl_sd) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - if (pc_isGM(sd) < pc_isGM(pl_sd)) - { // you can kick only lower or same gm level - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - clif_GM_kick(sd, pl_sd, 1); - return 0; -} - -/*========================================== - * Revive a player by PID number - * Original by Dino9021 - * Added in by nsstrunks - *------------------------------------------*/ -int atcommand_reviveid2(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int aid=0; - struct map_session_data *pl_sd; - - if (!message || (aid = atoi(message)) == 0) { - clif_displaymessage(fd, "Please, enter a player AID (usage: @reviveid2 )."); - return -1; - } - - pl_sd = map_id2sd(aid); - - if(!pl_sd) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if(!status_revive(&pl_sd->bl, 100, 100)) - return -1; - - clif_skill_nodamage(&pl_sd->bl,&pl_sd->bl,ALL_RESURRECTION,4,1); - clif_displaymessage(fd, msg_txt(51)); // Character revived. - return 0; -} - -/*========================================== - * Kill a player by PID number - * Original by Dino9021 - * Added in by nsstrunks - *------------------------------------------*/ -int atcommand_killid2(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int aid=0; - struct map_session_data *pl_sd; - - if (!message || (aid = atoi(message)) == 0) { - clif_displaymessage(fd, "Please, enter a player AID (usage: @killid2 )."); - return -1; - } - - pl_sd = map_id2sd(aid); - if (!pl_sd) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if (pc_isGM(sd) < pc_isGM(pl_sd)) - { // you can kill only lower or same level - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - status_kill(&pl_sd->bl); - clif_displaymessage(fd, msg_txt(14)); // Character killed. - return 0; -} - #ifndef TXT_ONLY /* Begin SQL-Only commands */ /*========================================== @@ -8089,7 +7124,7 @@ int atcommand_homlevel(const int fd, struct map_session_data* sd, const char* co int atcommand_homevolution(const int fd, struct map_session_data* sd, const char* command, const char* message) { nullpo_retr(-1, sd); - + if ( !merc_is_hom_active(sd->hd) ) { clif_displaymessage(fd, "You do not have a homunculus."); return -1; @@ -8099,7 +7134,7 @@ int atcommand_homevolution(const int fd, struct map_session_data* sd, const char clif_displaymessage(fd, "Your homunculus doesn't evolve."); return -1; } - + return 0; } @@ -8110,7 +7145,7 @@ int atcommand_makehomun(const int fd, struct map_session_data* sd, const char* c { int homunid; nullpo_retr(-1, sd); - + if ( merc_is_hom_active(sd->hd) ) { clif_displaymessage(fd, msg_txt(450)); return -1; @@ -8120,7 +7155,7 @@ int atcommand_makehomun(const int fd, struct map_session_data* sd, const char* c clif_displaymessage(fd, "Please, enter a homunculus id: (usage: @makehomun ."); return -1; } - + homunid = atoi(message); if( homunid < HM_CLASS_BASE || homunid > HM_CLASS_BASE + MAX_HOMUNCULUS_CLASS - 1 ) { @@ -9117,6 +8152,456 @@ int atcommand_feelreset(const int fd, struct map_session_data* sd, const char* c return 0; } + + + +/*========================================== + * atcommand_info[] structure definition + *------------------------------------------*/ + +AtCommandInfo atcommand_info[] = { + { "rura", 40, atcommand_mapmove }, + { "warp", 40, atcommand_mapmove }, + { "mapmove", 40, atcommand_mapmove }, // + /mm + { "where", 1, atcommand_where }, + { "jumpto", 20, atcommand_jumpto }, // + /shift + { "warpto", 20, atcommand_jumpto }, + { "goto", 20, atcommand_jumpto }, + { "jump", 40, atcommand_jump }, + { "who", 20, atcommand_who }, + { "whois", 20, atcommand_who }, + { "who2", 20, atcommand_who2 }, + { "who3", 20, atcommand_who3 }, + { "whomap", 20, atcommand_whomap }, + { "whomap2", 20, atcommand_whomap2 }, + { "whomap3", 20, atcommand_whomap3 }, + { "whogm", 20, atcommand_whogm }, + { "save", 40, atcommand_save }, + { "return", 40, atcommand_load }, + { "load", 40, atcommand_load }, + { "speed", 40, atcommand_speed }, + { "storage", 1, atcommand_storage }, + { "gstorage", 50, atcommand_guildstorage }, + { "option", 40, atcommand_option }, + { "hide", 40, atcommand_hide }, // + /hide + { "jobchange", 40, atcommand_jobchange }, + { "job", 40, atcommand_jobchange }, + { "die", 1, atcommand_die }, + { "kill", 60, atcommand_kill }, + { "alive", 60, atcommand_alive }, + { "kami", 40, atcommand_kami }, + { "kamib", 40, atcommand_kami }, + { "kamic", 40, atcommand_kami }, + { "heal", 40, atcommand_heal }, + { "item", 60, atcommand_item }, + { "item2", 60, atcommand_item2 }, + { "itemreset", 40, atcommand_itemreset }, + { "blvl", 60, atcommand_baselevelup }, + { "lvup", 60, atcommand_baselevelup }, + { "blevel", 60, atcommand_baselevelup }, + { "baselvl", 60, atcommand_baselevelup }, + { "baselvup", 60, atcommand_baselevelup }, + { "baselevel", 60, atcommand_baselevelup }, + { "baselvlup", 60, atcommand_baselevelup }, + { "jlvl", 60, atcommand_joblevelup }, + { "jlevel", 60, atcommand_joblevelup }, + { "joblvl", 60, atcommand_joblevelup }, + { "joblevel", 60, atcommand_joblevelup }, + { "joblvup", 60, atcommand_joblevelup }, + { "joblvlup", 60, atcommand_joblevelup }, + { "h", 20, atcommand_help }, + { "help", 20, atcommand_help }, + { "h2", 20, atcommand_help2 }, + { "help2", 20, atcommand_help2 }, + { "gm", 100, atcommand_gm }, + { "pvpoff", 40, atcommand_pvpoff }, + { "pvpon", 40, atcommand_pvpon }, + { "gvgoff", 40, atcommand_gvgoff }, + { "gpvpoff", 40, atcommand_gvgoff }, + { "gvgon", 40, atcommand_gvgon }, + { "gpvpon", 40, atcommand_gvgon }, + { "model", 20, atcommand_model }, + { "go", 10, atcommand_go }, + { "monster", 50, atcommand_monster }, + { "spawn", 50, atcommand_monster }, + { "monstersmall", 50, atcommand_monstersmall }, + { "monsterbig", 50, atcommand_monsterbig }, + { "killmonster", 60, atcommand_killmonster }, + { "killmonster2", 40, atcommand_killmonster2 }, + { "refine", 60, atcommand_refine }, + { "produce", 60, atcommand_produce }, + { "memo", 40, atcommand_memo }, + { "gat", 99, atcommand_gat }, + { "displaystatus", 99, atcommand_displaystatus }, + { "stpoint", 60, atcommand_statuspoint }, + { "skpoint", 60, atcommand_skillpoint }, + { "zeny", 60, atcommand_zeny }, + { "str", 60, atcommand_param }, + { "agi", 60, atcommand_param }, + { "vit", 60, atcommand_param }, + { "int", 60, atcommand_param }, + { "dex", 60, atcommand_param }, + { "luk", 60, atcommand_param }, + { "glvl", 60, atcommand_guildlevelup }, + { "glevel", 60, atcommand_guildlevelup }, + { "guildlvl", 60, atcommand_guildlevelup }, + { "guildlvup", 60, atcommand_guildlevelup }, + { "guildlevel", 60, atcommand_guildlevelup }, + { "guildlvlup", 60, atcommand_guildlevelup }, + { "makeegg", 60, atcommand_makeegg }, + { "hatch", 60, atcommand_hatch }, + { "petfriendly", 40, atcommand_petfriendly }, + { "pethungry", 40, atcommand_pethungry }, + { "petrename", 1, atcommand_petrename }, + { "recall", 60, atcommand_recall }, // + /recall + { "night", 80, atcommand_night }, + { "day", 80, atcommand_day }, + { "doom", 80, atcommand_doom }, + { "doommap", 80, atcommand_doommap }, + { "raise", 80, atcommand_raise }, + { "raisemap", 80, atcommand_raisemap }, + { "kick", 20, atcommand_kick }, // + right click menu for GM "(name) force to quit" + { "kickall", 99, atcommand_kickall }, + { "allskill", 60, atcommand_allskill }, + { "allskills", 60, atcommand_allskill }, + { "skillall", 60, atcommand_allskill }, + { "skillsall", 60, atcommand_allskill }, + { "questskill", 40, atcommand_questskill }, + { "lostskill", 40, atcommand_lostskill }, + { "spiritball", 40, atcommand_spiritball }, + { "party", 1, atcommand_party }, + { "guild", 50, atcommand_guild }, + { "agitstart", 60, atcommand_agitstart }, + { "agitend", 60, atcommand_agitend }, + { "mapexit", 99, atcommand_mapexit }, + { "idsearch", 60, atcommand_idsearch }, + { "broadcast", 40, atcommand_broadcast }, // + /b and /nb + { "localbroadcast", 40, atcommand_localbroadcast }, // + /lb and /nlb + { "recallall", 80, atcommand_recallall }, + { "reloaditemdb", 99, atcommand_reloaditemdb }, + { "reloadmobdb", 99, atcommand_reloadmobdb }, + { "reloadskilldb", 99, atcommand_reloadskilldb }, + { "reloadscript", 99, atcommand_reloadscript }, + { "reloadgmdb", 99, atcommand_reloadgmdb }, + { "reloadatcommand", 99, atcommand_reloadatcommand }, + { "reloadbattleconf", 99, atcommand_reloadbattleconf }, + { "reloadstatusdb", 99, atcommand_reloadstatusdb }, + { "reloadpcdb", 99, atcommand_reloadpcdb }, + { "reloadmotd", 99, atcommand_reloadmotd }, + { "mapinfo", 99, atcommand_mapinfo }, + { "dye", 40, atcommand_dye }, + { "ccolor", 40, atcommand_dye }, + { "hairstyle", 40, atcommand_hair_style }, + { "hstyle", 40, atcommand_hair_style }, + { "haircolor", 40, atcommand_hair_color }, + { "hcolor", 40, atcommand_hair_color }, + { "statall", 60, atcommand_stat_all }, + { "statsall", 60, atcommand_stat_all }, + { "allstats", 60, atcommand_stat_all }, + { "allstat", 60, atcommand_stat_all }, + { "block", 60, atcommand_char_block }, + { "charblock", 60, atcommand_char_block }, + { "ban", 60, atcommand_char_ban }, + { "banish", 60, atcommand_char_ban }, + { "charban", 60, atcommand_char_ban }, + { "charbanish", 60, atcommand_char_ban }, + { "unblock", 60, atcommand_char_unblock }, + { "charunblock", 60, atcommand_char_unblock }, + { "unban", 60, atcommand_char_unban }, + { "unbanish", 60, atcommand_char_unban }, + { "charunban", 60, atcommand_char_unban }, + { "charunbanish", 60, atcommand_char_unban }, + { "mount", 20, atcommand_mount_peco }, + { "mountpeco", 20, atcommand_mount_peco }, + { "guildspy", 60, atcommand_guildspy }, + { "partyspy", 60, atcommand_partyspy }, + { "repairall", 60, atcommand_repairall }, + { "guildrecall", 60, atcommand_guildrecall }, + { "partyrecall", 60, atcommand_partyrecall }, + { "nuke", 60, atcommand_nuke }, + { "shownpc", 80, atcommand_shownpc }, + { "hidenpc", 80, atcommand_hidenpc }, + { "loadnpc", 80, atcommand_loadnpc }, + { "unloadnpc", 80, atcommand_unloadnpc }, + { "time", 1, atcommand_servertime }, + { "date", 1, atcommand_servertime }, + { "serverdate", 1, atcommand_servertime }, + { "servertime", 1, atcommand_servertime }, + { "jail", 60, atcommand_jail }, + { "unjail", 60, atcommand_unjail }, + { "discharge", 60, atcommand_unjail }, + { "jailfor", 60, atcommand_jailfor }, + { "jailtime", 1, atcommand_jailtime }, + { "disguise", 20, atcommand_disguise }, + { "undisguise", 20, atcommand_undisguise }, + { "email", 1, atcommand_email }, + { "effect", 40, atcommand_effect }, + { "follow", 20, atcommand_follow }, + { "addwarp", 60, atcommand_addwarp }, + { "skillon", 80, atcommand_skillon }, + { "skilloff", 80, atcommand_skilloff }, + { "killer", 60, atcommand_killer }, + { "npcmove", 80, atcommand_npcmove }, + { "killable", 40, atcommand_killable }, + { "dropall", 40, atcommand_dropall }, + { "storeall", 40, atcommand_storeall }, + { "skillid", 40, atcommand_skillid }, + { "useskill", 40, atcommand_useskill }, + { "displayskill", 99, atcommand_displayskill }, + { "snow", 99, atcommand_snow }, + { "sakura", 99, atcommand_sakura }, + { "clouds", 99, atcommand_clouds }, + { "clouds2", 99, atcommand_clouds2 }, + { "fog", 99, atcommand_fog }, + { "fireworks", 99, atcommand_fireworks }, + { "leaves", 99, atcommand_leaves }, + { "summon", 60, atcommand_summon }, + { "adjgmlvl", 99, atcommand_adjgmlvl }, + { "adjcmdlvl", 99, atcommand_adjcmdlvl }, + { "trade", 60, atcommand_trade }, + { "send", 99, atcommand_send }, + { "setbattleflag", 99, atcommand_setbattleflag }, + { "unmute", 80, atcommand_unmute }, + { "clearweather", 99, atcommand_clearweather }, + { "uptime", 1, atcommand_uptime }, + { "changesex", 60, atcommand_changesex }, + { "mute", 80, atcommand_mute }, + { "whozeny", 20, atcommand_whozeny }, + { "refresh", 1, atcommand_refresh }, + { "identify", 40, atcommand_identify }, + { "gmotd", 20, atcommand_gmotd }, + { "misceffect", 50, atcommand_misceffect }, + { "mobsearch", 10, atcommand_mobsearch }, + { "cleanmap", 40, atcommand_cleanmap }, + { "npctalk", 20, atcommand_npctalk }, + { "pettalk", 10, atcommand_pettalk }, + { "users", 40, atcommand_users }, + { "reset", 40, atcommand_reset }, + { "skilltree", 40, atcommand_skilltree }, + { "marry", 40, atcommand_marry }, + { "divorce", 40, atcommand_divorce }, + { "sound", 40, atcommand_sound }, + { "undisguiseall", 99, atcommand_undisguiseall }, + { "disguiseall", 99, atcommand_disguiseall }, + { "changelook", 60, atcommand_changelook }, + { "autoloot", 10, atcommand_autoloot }, + { "mobinfo", 1, atcommand_mobinfo }, + { "monsterinfo", 1, atcommand_mobinfo }, + { "mi", 1, atcommand_mobinfo }, + { "exp", 1, atcommand_exp }, + { "adopt", 40, atcommand_adopt }, + { "version", 1, atcommand_version }, + { "mutearea", 99, atcommand_mutearea }, + { "stfu", 99, atcommand_mutearea }, + { "rates", 1, atcommand_rates }, + { "iteminfo", 1, atcommand_iteminfo }, + { "ii", 1, atcommand_iteminfo }, + { "whodrops", 1, atcommand_whodrops }, + { "whereis", 10, atcommand_whereis }, + { "mapflag", 99, atcommand_mapflag }, + { "me", 20, atcommand_me }, + { "monsterignore", 99, atcommand_monsterignore }, + { "battleignore", 99, atcommand_monsterignore }, + { "fakename", 20, atcommand_fakename }, + { "size", 20, atcommand_size }, + { "showexp", 10, atcommand_showexp}, + { "showzeny", 10, atcommand_showzeny}, + { "showdelay", 1, atcommand_showdelay}, + { "autotrade", 10, atcommand_autotrade }, + { "at", 10, atcommand_autotrade }, + { "changegm", 10, atcommand_changegm }, + { "changeleader", 10, atcommand_changeleader }, + { "partyoption", 10, atcommand_partyoption}, + { "invite", 1, atcommand_invite }, + { "duel", 1, atcommand_duel }, + { "leave", 1, atcommand_leave }, + { "accept", 1, atcommand_accept }, + { "reject", 1, atcommand_reject }, + { "away", 1, atcommand_away }, + { "aw", 1, atcommand_away }, + { "main", 1, atcommand_main }, + { "clone", 50, atcommand_clone }, + { "slaveclone", 50, atcommand_clone }, + { "evilclone", 50, atcommand_clone }, + { "tonpc", 40, atcommand_tonpc }, + { "commands", 1, atcommand_commands }, + { "noask", 1, atcommand_noask }, + { "request", 20, atcommand_request }, + { "hlvl", 60, atcommand_homlevel }, + { "hlevel", 60, atcommand_homlevel }, + { "homlvl", 60, atcommand_homlevel }, + { "homlvup", 60, atcommand_homlevel }, + { "homlevel", 60, atcommand_homlevel }, + { "homevolve", 60, atcommand_homevolution }, + { "homevolution", 60, atcommand_homevolution }, + { "makehomun", 60, atcommand_makehomun }, + { "homfriendly", 60, atcommand_homfriendly }, + { "homhungry", 60, atcommand_homhungry }, + { "homtalk", 10, atcommand_homtalk }, + { "hominfo", 1, atcommand_hominfo }, + { "homstats", 1, atcommand_homstats }, + { "homshuffle", 60, atcommand_homshuffle }, + { "showmobs", 10, atcommand_showmobs }, + { "feelreset", 10, atcommand_feelreset }, +#ifndef TXT_ONLY + { "mail", 1, atcommand_mail }, + { "refreshonline", 99, atcommand_refreshonline }, +#endif +}; + + +/*========================================== + * Command lookup functions + *------------------------------------------*/ +static AtCommandInfo* get_atcommandinfo_byname(const char* name) +{ + int i; + if( *name == atcommand_symbol ) name++; // for backwards compatibility + ARR_FIND( 0, ARRAYLENGTH(atcommand_info), i, strcmpi(atcommand_info[i].command, name) == 0 ); + return ( i != ARRAYLENGTH(atcommand_info) ) ? &atcommand_info[i] : NULL; +} + +static AtCommandInfo* get_atcommandinfo_byfunc(const AtCommandFunc func) +{ + int i; + ARR_FIND( 0, ARRAYLENGTH(atcommand_info), i, atcommand_info[i].func == func ); + return ( i != ARRAYLENGTH(atcommand_info) ) ? &atcommand_info[i] : NULL; +} + + +/*========================================== + * Retrieve the command's required gm level + *------------------------------------------*/ +int get_atcommand_level(const AtCommandFunc func) +{ + AtCommandInfo* info = get_atcommandinfo_byfunc(func); + return ( info != NULL ) ? info->level : 100; // 100: command can not be used +} + + +/// Executes an at-command. +/// To be called by internal server code (bypasses various restrictions). +bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl) +{ + AtCommandInfo* info; + char command[100]; + char args[100]; + char output[200]; + + if( !str || !*str ) + return false; + + if( *str != atcommand_symbol ) // check first char + return false; + + if( sscanf(str, "%99s %99[^\n]", command, args) < 2 ) + args[0] = '\0'; + + info = get_atcommandinfo_byname(command); + if( info == NULL || info->func == NULL || gmlvl < info->level ) + { + if( gmlvl == 0 ) + return false; // will just display as normal text + else + { + sprintf(output, msg_txt(153), command); // "%s is Unknown Command." + clif_displaymessage(fd, output); + return true; + } + } + + if( log_config.gm && info->level >= log_config.gm ) + log_atcommand(sd, str); + + if( info->func(fd, sd, command, args) != 0 ) + { + sprintf(output, msg_txt(154), command); // "%s failed." + clif_displaymessage(fd, output); + } + + return true; +} + +/// Executes an at-command. +/// To be used by player-invoked code (restrictions will be applied). +bool is_atcommand(const int fd, struct map_session_data* sd, const char* message) +{ + int gmlvl = pc_isGM(sd); + int s_flag = 0; + + nullpo_retr(false, sd); + + if( !message || !*message ) + return false; // shouldn't happen + + if( sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCOMMAND ) + return true; // so that it won't display as normal message + + if( battle_config.atc_gmonly != 0 && gmlvl == 0 ) + return false; + + if( map[sd->bl.m].nocommand && gmlvl < map[sd->bl.m].nocommand ) + { + clif_displaymessage(fd, msg_txt(143)); // "Commands are disabled on this map." + return false; + } + + // skip 10/11-langtype's codepage indicator, if detected + if( message[0] == '|' && strlen(message) >= 4 && message[3] == atcommand_symbol ) + message += 3; + + return is_atcommand_sub(fd,sd,message,gmlvl); +} + + +/*========================================== + * + *------------------------------------------*/ +int atcommand_config_read(const char* cfgName) +{ + char line[1024], w1[1024], w2[1024]; + AtCommandInfo* p; + FILE* fp; + + if( (fp = fopen(cfgName, "r")) == NULL ) + { + ShowError("AtCommand configuration file not found: %s\n", cfgName); + return 1; + } + + while( fgets(line, sizeof(line), fp) ) + { + if( line[0] == '/' && line[1] == '/' ) + continue; + + if( sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2 ) + continue; + + p = get_atcommandinfo_byname(w1); + if( p != NULL ) + { + p->level = atoi(w2); + p->level = cap_value(p->level, 0, 100); + } + else + if( strcmpi(w1, "import") == 0 ) + atcommand_config_read(w2); + else + if( strcmpi(w1, "command_symbol") == 0 && + w2[0] > 31 && // control characters + w2[0] != '/' && // symbol of standard ragnarok GM commands + w2[0] != '%' && // symbol of party chat speaking + w2[0] != '$' && // symbol of guild chat speaking + w2[0] != '#' ) // symbol of charcommand + atcommand_symbol = w2[0]; + else + ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); + } + fclose(fp); + + return 0; +} + void do_init_atcommand() { users_db = db_alloc(__FILE__,__LINE__,DB_UINT,DB_OPT_BASE,sizeof(int)); @@ -9130,3 +8615,51 @@ void do_final_atcommand() { users_db->destroy(users_db,NULL); } + + +// commands that need to go _after_ the commands table + +/*========================================== + * @commands Lists available @ commands to you + *------------------------------------------*/ +int atcommand_commands(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + char line_buff[CHATBOX_SIZE]; + int i, gm_lvl = pc_isGM(sd), count = 0; + char* cur = line_buff; + + memset(line_buff,' ',CHATBOX_SIZE); + line_buff[CHATBOX_SIZE-1] = 0; + + clif_displaymessage(fd, msg_txt(273)); // "Commands available:" + + for( i = 0; i < ARRAYLENGTH(atcommand_info); i++ ) + { + unsigned int slen; + + if( gm_lvl < atcommand_info[i].level ) + continue; + + slen = (unsigned int)strlen(atcommand_info[i].command); + + // flush the text buffer if this command won't fit into it + if( ((CHATBOX_SIZE-1+(int)line_buff)-(int)cur) < (int)slen ) + { + clif_displaymessage(fd,line_buff); + cur = line_buff; + memset(line_buff,' ',CHATBOX_SIZE); + line_buff[CHATBOX_SIZE-1] = 0; + } + + memcpy(cur,atcommand_info[i].command,slen); + cur += slen+(10-slen%10); + + count++; + } + clif_displaymessage(fd,line_buff); + + sprintf(atcmd_output, msg_txt(274), count); // "%d commands found." + clif_displaymessage(fd, atcmd_output); + + return 0; +} diff --git a/src/map/atcommand.h b/src/map/atcommand.h index d2532fda7..c8823b38e 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -4,297 +4,42 @@ #ifndef _ATCOMMAND_H_ #define _ATCOMMAND_H_ +//#include "map.h" +struct map_session_data; + //This is the distance at which @autoloot works, //if the item drops farther from the player than this, //it will not be autolooted. [Skotlex] //Note: The range is unlimited unless this define is set. //#define AUTOLOOT_DISTANCE AREA_SIZE -//#include "map.h" -struct map_session_data; - -enum AtCommandType { - AtCommand_None = -1, - AtCommand_Broadcast = 0, - AtCommand_LocalBroadcast, - AtCommand_MapMove, - AtCommand_ResetState, - AtCommand_RuraP, - AtCommand_Rura, - AtCommand_Warp, - AtCommand_Where, - AtCommand_JumpTo, - AtCommand_Jump, - AtCommand_Who, - AtCommand_Who2, - AtCommand_Who3, - AtCommand_WhoMap, - AtCommand_WhoMap2, - AtCommand_WhoMap3, - AtCommand_WhoGM, - AtCommand_Save, - AtCommand_Load, - AtCommand_Speed, - AtCommand_CharSpeed, - AtCommand_Storage, - AtCommand_GuildStorage, - AtCommand_Option, - AtCommand_Hide, - AtCommand_JobChange, - AtCommand_JobChange2, - AtCommand_JobChange3, - AtCommand_Die, - AtCommand_Kill, - AtCommand_Alive, - AtCommand_Kami, - AtCommand_KamiB, - AtCommand_KamiC, //LuzZza - AtCommand_Heal, - AtCommand_Item, - AtCommand_Item2, - AtCommand_ItemReset, - AtCommand_BaseLevelUp, - AtCommand_JobLevelUp, - AtCommand_H, - AtCommand_Help, - AtCommand_H2, - AtCommand_Help2, - AtCommand_GM, - AtCommand_PvPOff, - AtCommand_PvPOn, - AtCommand_GvGOff, - AtCommand_GvGOn, - AtCommand_Model, - AtCommand_Go, - AtCommand_Spawn, - AtCommand_MonsterSmall, - AtCommand_MonsterBig, - AtCommand_KillMonster, - AtCommand_KillMonster2, - AtCommand_Refine, - AtCommand_Produce, - AtCommand_Memo, - AtCommand_GAT, - AtCommand_DisplayStatus, - AtCommand_StatusPoint, - AtCommand_SkillPoint, - AtCommand_Zeny, - AtCommand_Param, - AtCommand_Strength, - AtCommand_Agility, - AtCommand_Vitality, - AtCommand_Intelligence, - AtCommand_Dexterity, - AtCommand_Luck, - AtCommand_GuildLevelUp, - AtCommand_MakeEgg, - AtCommand_PetFriendly, - AtCommand_PetHungry, - AtCommand_PetRename, - AtCommand_Recall, - AtCommand_Night, - AtCommand_Day, - AtCommand_Doom, - AtCommand_DoomMap, - AtCommand_Raise, - AtCommand_RaiseMap, - AtCommand_Kick, - AtCommand_KickAll, - AtCommand_AllSkill, - AtCommand_QuestSkill, - AtCommand_LostSkill, - AtCommand_SpiritBall, - AtCommand_Party, - AtCommand_Guild, - AtCommand_AgitStart, - AtCommand_AgitEnd, - AtCommand_MapExit, - AtCommand_IDSearch, - AtCommand_RecallAll, - AtCommand_ReloadItemDB, - AtCommand_ReloadMobDB, - AtCommand_ReloadSkillDB, - AtCommand_ReloadScript, - AtCommand_ReloadGMDB, - AtCommand_ReloadAtcommand, - AtCommand_ReloadBattleConf, - AtCommand_ReloadStatusDB, - AtCommand_ReloadPcDB, - AtCommand_ReloadMOTD, // [Valaris] - AtCommand_MapInfo, - AtCommand_Dye, - AtCommand_Hstyle, - AtCommand_Hcolor, - AtCommand_StatAll, - AtCommand_CharBlock, // by Yor - AtCommand_CharBan, // by Yor - AtCommand_CharUnBlock, // by Yor - AtCommand_CharUnBan, // by Yor - AtCommand_MountPeco, // by Valaris - AtCommand_GuildSpy, // [Syrus22] - AtCommand_PartySpy, // [Syrus22] - AtCommand_RepairAll, // [Valaris] - AtCommand_GuildRecall, // by Yor - AtCommand_PartyRecall, // by Yor - AtCommand_Nuke, // [Valaris] - AtCommand_Shownpc, - AtCommand_Hidenpc, - AtCommand_Loadnpc, - AtCommand_Unloadnpc, - AtCommand_ServerTime, // by Yor - AtCommand_Jail, // by Yor - AtCommand_UnJail, // by Yor - AtCommand_JailFor, // Meruru - AtCommand_JailTime, // Coltaro - AtCommand_Disguise, // [Valaris] - AtCommand_UnDisguise, // by Yor - AtCommand_EMail, // by Yor - AtCommand_Hatch, - AtCommand_Effect, // by Apple - AtCommand_AddWarp, // by MouseJstr - AtCommand_Follow, // by MouseJstr - AtCommand_SkillOn, // by MouseJstr - AtCommand_SkillOff, // by MouseJstr - AtCommand_Killer, // by MouseJstr - AtCommand_NpcMove, // by MouseJstr - AtCommand_Killable, // by MouseJstr - AtCommand_Dropall, // by MouseJstr - AtCommand_Storeall, // by MouseJstr - AtCommand_Skillid, // by MouseJstr - AtCommand_Useskill, // by MouseJstr - AtCommand_DisplaySkill, - AtCommand_Summon, - AtCommand_Rain, - AtCommand_Snow, - AtCommand_Sakura, - AtCommand_Clouds, - AtCommand_Clouds2, // [Valaris] - AtCommand_Fog, - AtCommand_Fireworks, - AtCommand_Leaves, - AtCommand_AdjGmLvl, // MouseJstr - AtCommand_AdjCmdLvl, // MouseJstr - AtCommand_Trade, // MouseJstr - AtCommand_Send, - AtCommand_SetBattleFlag, - AtCommand_UnMute, - AtCommand_Clearweather, // by Dexity - AtCommand_UpTime, // by MC Cameri - AtCommand_ChangeSex, // by MC Cameri - AtCommand_Mute, // [celest] - AtCommand_WhoZeny, // [Valaris] <-- LOL...(MC Cameri) worth it. - AtCommand_Refresh, // by MC Cameri - AtCommand_PetId, // by MC Cameri - AtCommand_Identify, // by MC Cameri - AtCommand_Gmotd, // Added by MC Cameri, created by davidsiaw - AtCommand_MiscEffect, // by MC Cameri - AtCommand_MobSearch, - AtCommand_CleanMap, - AtCommand_NpcTalk, - AtCommand_PetTalk, - AtCommand_Users, - AtCommand_SkillTree, // by MouseJstr - AtCommand_Marry, // by MouseJstr - AtCommand_Divorce, // by MouseJstr - AtCommand_Me, //added by massdriller, code by lordalfa - AtCommand_DMStart, // by MouseJstr - AtCommand_DMTick, // by MouseJstr - AtCommand_JumpToId2, // by Dino9021 - AtCommand_RecallId2, // by Dino9021 - AtCommand_KickId2, // by Dino9021 - AtCommand_ReviveId2, // by Dino9021 - AtCommand_KillId2, // by Dino9021 - AtCommand_Sound, - AtCommand_UndisguiseAll, - AtCommand_DisguiseAll, - AtCommand_ChangeLook, - AtCommand_AutoLoot, //by Upa-Kun - AtCommand_MobInfo, //by Lupus - AtCommand_Exp, // by Skotlex - AtCommand_Adopt, // by Veider - AtCommand_Version, // by Ancyker - AtCommand_MuteArea, // MouseJstr - AtCommand_Rates, // MouseJstr - AtCommand_ItemInfo, // Lupus - AtCommand_WhoDrops, // Skotlex - AtCommand_WhereIs, // Skotlex - AtCommand_MapFlag, // Lupus - AtCommand_MonsterIgnore, // [Valaris] - AtCommand_FakeName, // [Valaris] - AtCommand_Size, // [Valaris] - AtCommand_ShowDelay, - AtCommand_ShowExp, - AtCommand_ShowZeny, - AtCommand_AutoTrade,//durf - AtCommand_ChangeGM,//durf - AtCommand_ChangeLeader, - AtCommand_PartyOption, - AtCommand_Invite, // By LuzZza - AtCommand_Duel, // By LuzZza - AtCommand_Leave, // By LuzZza - AtCommand_Accept, // By LuzZza - AtCommand_Reject, // By LuzZza - AtCommand_Away, // LuzZza - AtCommand_Main, // LuzZza - AtCommand_Clone, // [Valaris] - AtCommand_ToNPC, // LuzZza - AtCommand_Commands, // [Skotlex] - AtCommand_NoAsk, // [LuzZza] - AtCommand_Request, // [Skotlex] - AtCommand_HomLevel, //[orn] - AtCommand_HomEvolution, //[orn] - AtCommand_MakeHomun, //[orn] - AtCommand_HomFriendly, //[orn] - AtCommand_HomHungry, //[orn] - AtCommand_HomTalk, //[orn] - AtCommand_HomInfo, //[Toms] - AtCommand_HomStats, //[Skotlex] - AtCommand_HomShuffle, //[Skotlex] - AtCommand_ShowMobs, //KarLaeda - AtCommand_FeelReset, //[HiddenDragon] - AtCommand_HappyHappyJoyJoy, - // SQL-only commands start -#ifndef TXT_ONLY - AtCommand_Mail, // [Mail System] - AtCommand_RefreshOnline, // [Valaris] - // SQL-only commands end -#endif - // No more commands after this line - AtCommand_Unknown, - AtCommand_MAX -}; - -typedef enum AtCommandType AtCommandType; - -typedef struct AtCommandInfo { - AtCommandType type; - const char* command; - int level; - int (*proc)(const int fd, struct map_session_data* sd, const char* command, const char* message); -} AtCommandInfo; - -AtCommandType is_atcommand(const int fd, struct map_session_data* sd, const char* message); -AtCommandType is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl); -AtCommandType atcommand(struct map_session_data *sd, const int level, const char* message, AtCommandInfo* info); -int get_atcommand_level(const AtCommandType type); +extern char atcommand_symbol; +typedef int (*AtCommandFunc)(const int fd, struct map_session_data* sd, const char* command, const char* message); -char* msg_txt(int msg_number); // [Yor] +bool is_atcommand(const int fd, struct map_session_data* sd, const char* message); +bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl); +int get_atcommand_level(const AtCommandFunc func); void do_init_atcommand(void); void do_final_atcommand(void); +int atcommand_config_read(const char *cfgName); -int atcommand_item(const int fd, struct map_session_data* sd,const char* command, const char* message); // [Valaris] -int atcommand_rura(const int fd, struct map_session_data* sd,const char* command, const char* message); // [Yor] -int atcommand_jumpto(const int fd, struct map_session_data* sd, const char* command, const char* message); // [Yor] -int atcommand_recall(const int fd, struct map_session_data* sd, const char* command, const char* message); // [Yor] +int atcommand_item(const int fd, struct map_session_data* sd,const char* command, const char* message); +int atcommand_mapmove(const int fd, struct map_session_data* sd,const char* command, const char* message); int atcommand_monster(const int fd, struct map_session_data* sd, const char* command, const char* message); +int atcommand_jumpto(const int fd, struct map_session_data* sd, const char* command, const char* message); +int atcommand_recall(const int fd, struct map_session_data* sd, const char* command, const char* message); +int atcommand_hide(const int fd, struct map_session_data* sd, const char* command, const char* message); +int atcommand_mute(const int fd, struct map_session_data* sd, const char* command, const char* message); +int atcommand_kick(const int fd, struct map_session_data* sd, const char* command, const char* message); +int atcommand_broadcast(const int fd, struct map_session_data* sd,const char* command, const char* message); +int atcommand_localbroadcast(const int fd, struct map_session_data* sd,const char* command, const char* message); +int atcommand_reset(const int fd, struct map_session_data* sd,const char* command, const char* message); -int atcommand_config_read(const char *cfgName); -int msg_config_read(const char *cfgName); -void do_final_msg(void); - -extern char atcommand_symbol; #define MAX_MSG 1000 extern char* msg_table[MAX_MSG]; +char* msg_txt(int msg_number); +int msg_config_read(const char* cfgName); +void do_final_msg(void); #endif /* _ATCOMMAND_H_ */ diff --git a/src/map/charcommand.c b/src/map/charcommand.c index c2689b8e8..d5746d379 100644 --- a/src/map/charcommand.c +++ b/src/map/charcommand.c @@ -1,32 +1,31 @@ // Copyright (c) Athena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder -#include "../common/cbasetypes.h" -#include "../common/socket.h" #include "../common/timer.h" #include "../common/nullpo.h" #include "../common/showmsg.h" +#include "../common/strlib.h" #include "../common/utils.h" -#include "log.h" +#include "atcommand.h" // msg_txt() +#include "charcommand.h" +#include "battle.h" #include "clif.h" #include "chrif.h" #include "intif.h" #include "itemdb.h" +#include "log.h" #include "map.h" #include "pc.h" #include "status.h" #include "skill.h" #include "mob.h" +#include "npc.h" #include "pet.h" -#include "mercenary.h" //[orn] -#include "battle.h" -#include "charcommand.h" -#include "atcommand.h" +#include "mercenary.h" #include "party.h" #include "guild.h" #include "script.h" -#include "npc.h" #include "trade.h" #include "unit.h" @@ -40,379 +39,16 @@ char charcommand_symbol = '#'; extern char *msg_table[1000]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others) #define CCMD_FUNC(x) int charcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message) -CCMD_FUNC(jobchange); -CCMD_FUNC(petrename); -CCMD_FUNC(petfriendly); -CCMD_FUNC(stats); -CCMD_FUNC(option); -CCMD_FUNC(save); -CCMD_FUNC(stats_all); -CCMD_FUNC(reset); -CCMD_FUNC(spiritball); -CCMD_FUNC(itemlist); -CCMD_FUNC(effect); -CCMD_FUNC(storagelist); -CCMD_FUNC(item); -CCMD_FUNC(warp); -CCMD_FUNC(zeny); -CCMD_FUNC(fakename); -CCMD_FUNC(baselevel); -CCMD_FUNC(joblevel); -CCMD_FUNC(questskill); -CCMD_FUNC(lostskill); -CCMD_FUNC(skreset); -CCMD_FUNC(streset); -CCMD_FUNC(model); -CCMD_FUNC(stpoint); -CCMD_FUNC(skpoint); -CCMD_FUNC(changesex); -CCMD_FUNC(feelreset); -CCMD_FUNC(help); -CCMD_FUNC(load); -CCMD_FUNC(speed); -CCMD_FUNC(storage); -CCMD_FUNC(guildstorage); -CCMD_FUNC(hide); -CCMD_FUNC(alive); -CCMD_FUNC(heal); -CCMD_FUNC(item2); -CCMD_FUNC(itemreset); -CCMD_FUNC(refine); -CCMD_FUNC(produce); -CCMD_FUNC(param); -CCMD_FUNC(guildlevelup); -CCMD_FUNC(hatch); -CCMD_FUNC(pethungry); -CCMD_FUNC(allskill); -CCMD_FUNC(dye); -CCMD_FUNC(hair_style); -CCMD_FUNC(hair_color); -CCMD_FUNC(allstats); -CCMD_FUNC(mount_peco); -CCMD_FUNC(delitem); -CCMD_FUNC(jailtime); -CCMD_FUNC(disguise); -CCMD_FUNC(undisguise); -CCMD_FUNC(cart_list); -CCMD_FUNC(killer); -CCMD_FUNC(killable); -CCMD_FUNC(refresh); -CCMD_FUNC(exp); -CCMD_FUNC(monsterignore); -CCMD_FUNC(size); -CCMD_FUNC(homlevel); -CCMD_FUNC(homevolution); -CCMD_FUNC(homfriendly); -CCMD_FUNC(homhungry); -CCMD_FUNC(hominfo); - -/*========================================== - *CharCommandInfo charcommand_info[]\‘¢‘Ì‚Ì’è‹` - *------------------------------------------*/ - -// First char of commands is configured in charcommand_athena.conf. Leave # in this list for default value. -// to set default level, read charcommand_athena.conf first please. -static CharCommandInfo charcommand_info[] = { - { CharCommandJobChange, "#job", 60, charcommand_jobchange }, - { CharCommandJobChange, "#jobchange", 60, charcommand_jobchange }, - { CharCommandPetRename, "#petrename", 50, charcommand_petrename }, - { CharCommandPetFriendly, "#petfriendly", 50, charcommand_petfriendly }, - { CharCommandStats, "#stats", 40, charcommand_stats }, - { CharCommandOption, "#option", 60, charcommand_option }, - { CharCommandReset, "#reset", 60, charcommand_reset }, - { CharCommandSave, "#save", 60, charcommand_save }, - { CharCommandSpiritball, "#spiritball", 40, charcommand_spiritball }, - { CharCommandItemList, "#itemlist", 40, charcommand_itemlist }, - { CharCommandEffect, "#effect", 40, charcommand_effect }, - { CharCommandStorageList, "#storagelist", 40, charcommand_storagelist }, - { CharCommandItem, "#item", 60, charcommand_item }, - { CharCommandWarp, "#warp", 60, charcommand_warp }, - { CharCommandWarp, "#rura", 60, charcommand_warp }, - { CharCommandWarp, "#rura+", 60, charcommand_warp }, - { CharCommandZeny, "#zeny", 60, charcommand_zeny }, - { CharCommandFakeName, "#fakename", 50, charcommand_fakename}, - { CharCommandBaseLevel, "#baselvl", 60, charcommand_baselevel}, - { CharCommandBaseLevel, "#baselevel", 60, charcommand_baselevel}, - { CharCommandBaseLevel, "#blvl", 60, charcommand_baselevel}, - { CharCommandBaseLevel, "#blevel", 60, charcommand_baselevel}, - { CharCommandJobLevel, "#joblvl", 60, charcommand_joblevel}, - { CharCommandJobLevel, "#joblevel", 60, charcommand_joblevel}, - { CharCommandJobLevel, "#jlvl", 60, charcommand_joblevel}, - { CharCommandJobLevel, "#jlevel", 60, charcommand_joblevel}, - { CharCommandQuestSkill, "#questskill", 60, charcommand_questskill }, - { CharCommandLostSkill, "#lostskill", 60, charcommand_lostskill }, - { CharCommandSkReset, "#skreset", 60, charcommand_skreset }, - { CharCommandStReset, "#streset", 60, charcommand_streset }, - { CharCommandModel, "#model", 50, charcommand_model }, - { CharCommandSKPoint, "#skpoint", 60, charcommand_skpoint }, - { CharCommandSTPoint, "#stpoint", 60, charcommand_stpoint }, - { CharCommandChangeSex, "#changesex", 60, charcommand_changesex }, - { CharCommandFeelReset, "#feelreset", 60, charcommand_feelreset }, - { CharCommandHelp, "#help", 20, charcommand_help }, - { CharCommandLoad, "#load", 60, charcommand_load }, - { CharCommandSpeed, "#speed", 60, charcommand_speed }, - { CharCommandStorage, "#storage", 60, charcommand_storage }, - { CharCommandGStorage, "#gstorage", 60, charcommand_guildstorage }, - { CharCommandHide, "#hide", 60, charcommand_hide }, - { CharCommandAlive, "#alive", 60, charcommand_alive }, - { CharCommandHeal, "#heal", 60, charcommand_heal }, - { CharCommandItem2, "#item2", 60, charcommand_item2 }, - { CharCommandItemReset, "#itemreset", 60, charcommand_itemreset }, - { CharCommandRefine, "#refine", 60, charcommand_refine }, - { CharCommandProduce, "#produce", 60, charcommand_produce }, - { CharCommandStrength, "#str", 60, charcommand_param }, - { CharCommandAgility, "#agi", 60, charcommand_param }, - { CharCommandVitality, "#vit", 60, charcommand_param }, - { CharCommandIntelligence, "#int", 60, charcommand_param }, - { CharCommandDexterity, "#dex", 60, charcommand_param }, - { CharCommandLuck, "#luk", 60, charcommand_param }, - { CharCommandGuildLevelUp, "#glvl", 60, charcommand_guildlevelup }, - { CharCommandGuildLevelUp, "#glevel", 60, charcommand_guildlevelup }, - { CharCommandGuildLevelUp, "#guildlvl", 60, charcommand_guildlevelup }, - { CharCommandGuildLevelUp, "#guildlevel", 60, charcommand_guildlevelup }, - { CharCommandHatch, "#hatch", 50, charcommand_hatch }, - { CharCommandPetHungry, "#pethungry", 60, charcommand_pethungry }, - { CharCommandAllSkill, "#allskill", 60, charcommand_allskill }, - { CharCommandAllSkill, "#allskills", 60, charcommand_allskill }, - { CharCommandAllSkill, "#skillall", 60, charcommand_allskill }, - { CharCommandAllSkill, "#skillsall", 60, charcommand_allskill }, - { CharCommandDye, "#dye", 50, charcommand_dye }, - { CharCommandHStyle, "#hairstyle", 50, charcommand_hair_style }, - { CharCommandHStyle, "#hstyle", 50, charcommand_hair_style }, - { CharCommandHColor, "#haircolor", 50, charcommand_hair_color }, - { CharCommandHColor, "#hcolor", 50, charcommand_hair_color }, - { CharCommandAllStats, "#allstat", 60, charcommand_allstats }, - { CharCommandAllStats, "#allstats", 60, charcommand_allstats }, - { CharCommandAllStats, "#statall", 60, charcommand_allstats }, - { CharCommandAllStats, "#statsall", 60, charcommand_allstats }, - { CharCommandMountPeco, "#mount", 50, charcommand_mount_peco }, - { CharCommandMountPeco, "#mountpeco", 50, charcommand_mount_peco }, - { CharCommandDelItem, "#delitem", 60, charcommand_delitem }, - { CharCommandJailTime, "#jailtime", 40, charcommand_jailtime }, - { CharCommandDisguie, "#disguise", 60, charcommand_disguise }, - { CharCommandUnDisguise, "#undisguise", 60, charcommand_undisguise }, - { CharCommandCartList, "#cartlist", 40, charcommand_cart_list }, - { CharCommandKiller, "#killer", 60, charcommand_killer }, - { CharCommandKillable, "#killable", 60, charcommand_killable }, - { CharCommandRefresh, "#refresh", 40, charcommand_refresh }, - { CharCommandExp, "#exp", 1, charcommand_exp }, - { CharCommandMonsterIgnore, "#monsterignore", 60, charcommand_monsterignore }, - { CharCommandSize, "#size", 50, charcommand_size }, - { CharCommandHomLevel, "#hlvl", 60, charcommand_homlevel }, - { CharCommandHomLevel, "#hlevel", 60, charcommand_homlevel }, - { CharCommandHomLevel, "#homlvl", 60, charcommand_homlevel }, - { CharCommandHomLevel, "#homlevel", 60, charcommand_homlevel }, - { CharCommandHomEvolve, "#homevolve", 60, charcommand_homevolution }, - { CharCommandHomEvolve, "#homevolvution", 60, charcommand_homevolution }, - { CharCommandHomFriendly, "#homfriendly", 60, charcommand_homfriendly }, - { CharCommandHomHungry, "#homhungry", 60, charcommand_homhungry }, - { CharCommandHomInfo, "#hominfo", 40, charcommand_hominfo }, - -// add new commands before this line - { CharCommand_Unknown, NULL, 1, NULL } -}; - -int get_charcommand_level(const CharCommandType type) -{ - int i; - - for (i = 0; charcommand_info[i].type != CharCommand_None; i++) - if (charcommand_info[i].type == type) - return charcommand_info[i].level; - - return 100; // 100: command can not be used -} - -CharCommandType is_charcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl) -{ - CharCommandInfo info; - CharCommandType type; - - memset(&info, 0, sizeof(info)); - - type = charcommand(sd, gmlvl, str, &info); - if (type != CharCommand_None) { - char command[100]; - char output[200]; - const char* p = str; - - if (map[sd->bl.m].nocommand && - gmlvl < map[sd->bl.m].nocommand) - { //Command not allowed on this map. - sprintf(output, msg_txt(143)); - clif_displaymessage(fd, output); - return AtCommand_None; - } - - memset(command, '\0', sizeof(command)); - memset(output, '\0', sizeof(output)); - while (*p && !ISSPACE(*p)) - p++; - if (p - str >= sizeof(command)) // too long - return CharCommand_Unknown; - strncpy(command, str, p - str); - while (ISSPACE(*p)) - p++; - - if (type == CharCommand_Unknown || info.proc == NULL) { - snprintf(output, sizeof(output),msg_txt(153), command); // %s is Unknown Command. - clif_displaymessage(fd, output); - } else { - if (info.proc(fd, sd, command, p) != 0) { - // Command can not be executed - snprintf(output, sizeof(output), msg_txt(154), command); // %s failed. - clif_displaymessage(fd, output); - } - } - - return info.type; - } - - return CharCommand_None; -} - -/*========================================== - *is_charcommand @ƒRƒ}ƒ“ƒh‚É‘¶Ý‚·‚é‚©‚Ç‚¤‚©Šm”F‚·‚é - *------------------------------------------*/ -CharCommandType is_charcommand(const int fd, struct map_session_data* sd, const char* message) -{ - const char* str = message; - int s_flag = 0; - - nullpo_retr(CharCommand_None, sd); - - if (sd->sc.count && sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCOMMAND) - return CharCommand_None; - - if (!message || !*message) - return CharCommand_None; - - // temporary compatibility layer for previous implementation - if( *message != charcommand_symbol ) - { - str += strlen(sd->status.name); - while (*str && (ISSPACE(*str) || (s_flag == 0 && *str == ':'))) { - if (*str == ':') - s_flag = 1; - str++; - } - } - - if (!*str) - return CharCommand_None; - - if(str[0] == '|' && strlen(str) >= 4 && str[3] == charcommand_symbol) - str += 3; // skip 10/11-langtype's codepage indicator, if detected - - return is_charcommand_sub(fd,sd,str,pc_isGM(sd)); -} - -/*========================================== - * - *------------------------------------------*/ -CharCommandType charcommand(struct map_session_data* sd, const int level, const char* message, CharCommandInfo* info) -{ - char* p = (char *)message; - - if (!info) - return CharCommand_None; - if (battle_config.atc_gmonly != 0 && !level) // level = pc_isGM(sd) - return CharCommand_None; - if (!p || !*p) { - ShowError("char command message is empty\n"); - return CharCommand_None; - } - - if (*p == charcommand_symbol) { // check first char - char command[101]; - int i = 0; - memset(info, 0, sizeof(CharCommandInfo)); - sscanf(p, "%100s", command); - command[100] = '\0'; - - while (charcommand_info[i].type != CharCommand_Unknown) { - if (strcmpi(command+1, charcommand_info[i].command+1) == 0 && level >= charcommand_info[i].level) { - p[0] = charcommand_info[i].command[0]; // set correct first symbol for after. - break; - } - i++; - } - if (charcommand_info[i].type == CharCommand_Unknown) { - // doesn't return Unknown if player is normal player (display the text, not display: unknown command) - if (level == 0) - return CharCommand_None; - else - return CharCommand_Unknown; - } else if((log_config.gm) && (charcommand_info[i].level >= log_config.gm)) { - log_atcommand(sd, message); - } - memcpy(info, &charcommand_info[i], sizeof charcommand_info[i]); - } else { - return CharCommand_None; - } - - return info->type; -} - - -/*========================================== - * - *------------------------------------------*/ -static CharCommandInfo* get_charcommandinfo_byname(const char* name) -{ - int i; - - for (i = 0; charcommand_info[i].type != CharCommand_Unknown; i++) - if (strcmpi(charcommand_info[i].command + 1, name) == 0) - return &charcommand_info[i]; - - return NULL; -} - -/*========================================== - * - *------------------------------------------*/ -int charcommand_config_read(const char *cfgName) -{ - char line[1024], w1[1024], w2[1024]; - CharCommandInfo* p; - FILE* fp; - - if ((fp = fopen(cfgName, "r")) == NULL) { - ShowError("CharCommands configuration file not found: %s\n", cfgName); - return 1; - } - - while (fgets(line, sizeof(line), fp)) - { - if (line[0] == '/' && line[1] == '/') - continue; +typedef struct CharCommandInfo { + const char* command; + int level; + CharCommandFunc func; +} CharCommandInfo; - if (sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2) - continue; - p = get_charcommandinfo_byname(w1); - if (p != NULL) { - p->level = atoi(w2); - if (p->level > 100) - p->level = 100; - else if (p->level < 0) - p->level = 0; - } +static CharCommandInfo* get_charcommandinfo_byname(const char* name); +static CharCommandInfo* get_charcommandinfo_byfunc(const CharCommandFunc func); - if (strcmpi(w1, "import") == 0) - charcommand_config_read(w2); - else if (strcmpi(w1, "command_symbol") == 0 && w2[0] > 31 && - w2[0] != '/' && // symbol of standard ragnarok GM commands - w2[0] != '%' && // symbol of party chat speaking - w2[0] != '$' && // symbol of guild chat speaking - w2[0] != '@') // symbol of atcommand - charcommand_symbol = w2[0]; - } - fclose(fp); - - return 0; -} /*========================================== * ‘ÎÛƒLƒƒƒ‰ƒNƒ^[‚ð“]E‚³‚¹‚é upperŽw’è‚Å“]¶‚â—{Žq‚à‰Â”\ @@ -1558,9 +1194,9 @@ int charcommand_lostskill(const int fd, struct map_session_data* sd, const char* } if (skill_id < 0 && skill_id >= MAX_SKILL) { - clif_displaymessage(fd, msg_txt(198)); // This skill number doesn't exist. - return -1; - } + clif_displaymessage(fd, msg_txt(198)); // This skill number doesn't exist. + return -1; + } if (!(skill_get_inf2(skill_id) & INF2_QUEST_SKILL)) { clif_displaymessage(fd, msg_txt(197)); // This skill number doesn't exist or isn't a quest skill. return -1; @@ -3497,6 +3133,78 @@ int charcommand_killable(const int fd, struct map_session_data* sd, const char* return 0; } +/*========================================== + * Drop all of the target's possessions on the ground + *------------------------------------------*/ +int charcommand_dropall(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + int i; + struct map_session_data *pl_sd = NULL; + nullpo_retr(-1, sd); + + if (!message || !*message) + return -1; + if((pl_sd=map_nick2sd((char *) message)) == NULL) + return -1; + for (i = 0; i < MAX_INVENTORY; i++) { + if (pl_sd->status.inventory[i].amount) { + if(pl_sd->status.inventory[i].equip != 0) + pc_unequipitem(pl_sd, i, 3); + pc_dropitem(pl_sd, i, pl_sd->status.inventory[i].amount); + } + } + + clif_displaymessage(pl_sd->fd, "All items dropped"); + clif_displaymessage(fd, "It is done"); + + return 0; +} + +/*========================================== + * Put all of the target's possessions into storage + *------------------------------------------*/ +int charcommand_storeall(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + int i; + struct map_session_data *pl_sd = NULL; + nullpo_retr(-1, sd); + + if (!message || !*message) + return -1; + if((pl_sd=map_nick2sd((char *) message)) == NULL) + return -1; + + if (pl_sd->state.storage_flag != 1) + { //Open storage. + switch (storage_storageopen(pl_sd)) { + case 2: //Try again + clif_displaymessage(fd, "Had to open the characters storage window..."); + clif_displaymessage(fd, "run this command again.."); + return 0; + case 1: //Failure + clif_displaymessage(fd, "The character currently can't use the storage."); + return 1; + } + } + + for (i = 0; i < MAX_INVENTORY; i++) { + if (pl_sd->status.inventory[i].amount) { + if(pl_sd->status.inventory[i].equip != 0) + pc_unequipitem(pl_sd, i, 3); + storage_storageadd(pl_sd, i, sd->status.inventory[i].amount); + } + } + storage_storageclose(pl_sd); + + clif_displaymessage(pl_sd->fd, "Everything you own has been put away for safe keeping."); + clif_displaymessage(pl_sd->fd, "go to the nearest kafka to retrieve it.."); + clif_displaymessage(pl_sd->fd, " -- the management"); + + clif_displaymessage(fd, "It is done"); + + return 0; +} + /*========================================== * Refreshes target [HiddenDragon] *------------------------------------------*/ @@ -3734,7 +3442,7 @@ int charcommand_homevolution(const int fd, struct map_session_data* sd, const ch clif_displaymessage(fd, "Please, enter a player name (usage: #homevolution )."); return -1; } - + if ( (pl_sd = map_nick2sd(character)) == NULL ) { clif_displaymessage(fd, msg_txt(3)); // Character not found. @@ -3746,7 +3454,7 @@ int charcommand_homevolution(const int fd, struct map_session_data* sd, const ch clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. return -1; } - + if ( !merc_is_hom_active(pl_sd->hd) ) { clif_displaymessage(fd, "Target player does not have a homunculus."); return -1; @@ -3961,3 +3669,261 @@ int charcommand_hominfo(const int fd, struct map_session_data* sd, const char* c return 0; } + + +/*========================================== + * charcommand_info[] structure definition + *------------------------------------------*/ + +CharCommandInfo charcommand_info[] = { + { "job", 60, charcommand_jobchange }, + { "jobchange", 60, charcommand_jobchange }, + { "petrename", 50, charcommand_petrename }, + { "petfriendly", 50, charcommand_petfriendly }, + { "stats", 40, charcommand_stats }, + { "option", 60, charcommand_option }, + { "reset", 60, charcommand_reset }, + { "save", 60, charcommand_save }, + { "spiritball", 40, charcommand_spiritball }, + { "itemlist", 40, charcommand_itemlist }, + { "effect", 40, charcommand_effect }, + { "storagelist", 40, charcommand_storagelist }, + { "item", 60, charcommand_item }, + { "warp", 60, charcommand_warp }, + { "rura", 60, charcommand_warp }, + { "rura+", 60, charcommand_warp }, + { "zeny", 60, charcommand_zeny }, + { "fakename", 50, charcommand_fakename }, + { "baselvl", 60, charcommand_baselevel }, + { "baselevel", 60, charcommand_baselevel }, + { "blvl", 60, charcommand_baselevel }, + { "blevel", 60, charcommand_baselevel }, + { "joblvl", 60, charcommand_joblevel }, + { "joblevel", 60, charcommand_joblevel }, + { "jlvl", 60, charcommand_joblevel }, + { "jlevel", 60, charcommand_joblevel }, + { "questskill", 60, charcommand_questskill }, + { "lostskill", 60, charcommand_lostskill }, + { "skreset", 60, charcommand_skreset }, + { "streset", 60, charcommand_streset }, + { "model", 50, charcommand_model }, + { "skpoint", 60, charcommand_skpoint }, + { "stpoint", 60, charcommand_stpoint }, + { "changesex", 60, charcommand_changesex }, + { "feelreset", 60, charcommand_feelreset }, + { "help", 20, charcommand_help }, + { "load", 60, charcommand_load }, + { "speed", 60, charcommand_speed }, + { "storage", 60, charcommand_storage }, + { "gstorage", 60, charcommand_guildstorage }, + { "hide", 60, charcommand_hide }, + { "alive", 60, charcommand_alive }, + { "revive", 60, charcommand_alive }, + { "heal", 60, charcommand_heal }, + { "item2", 60, charcommand_item2 }, + { "itemreset", 60, charcommand_itemreset }, + { "refine", 60, charcommand_refine }, + { "produce", 60, charcommand_produce }, + { "str", 60, charcommand_param }, + { "agi", 60, charcommand_param }, + { "vit", 60, charcommand_param }, + { "int", 60, charcommand_param }, + { "dex", 60, charcommand_param }, + { "luk", 60, charcommand_param }, + { "glvl", 60, charcommand_guildlevelup }, + { "glevel", 60, charcommand_guildlevelup }, + { "guildlvl", 60, charcommand_guildlevelup }, + { "guildlevel", 60, charcommand_guildlevelup }, + { "hatch", 50, charcommand_hatch }, + { "pethungry", 60, charcommand_pethungry }, + { "allskill", 60, charcommand_allskill }, + { "allskills", 60, charcommand_allskill }, + { "skillall", 60, charcommand_allskill }, + { "skillsall", 60, charcommand_allskill }, + { "dye", 50, charcommand_dye }, + { "hairstyle", 50, charcommand_hair_style }, + { "hstyle", 50, charcommand_hair_style }, + { "haircolor", 50, charcommand_hair_color }, + { "hcolor", 50, charcommand_hair_color }, + { "allstat", 60, charcommand_allstats }, + { "allstats", 60, charcommand_allstats }, + { "statall", 60, charcommand_allstats }, + { "statsall", 60, charcommand_allstats }, + { "mount", 50, charcommand_mount_peco }, + { "mountpeco", 50, charcommand_mount_peco }, + { "delitem", 60, charcommand_delitem }, + { "jailtime", 40, charcommand_jailtime }, + { "disguise", 60, charcommand_disguise }, + { "undisguise", 60, charcommand_undisguise }, + { "cartlist", 40, charcommand_cart_list }, + { "killer", 60, charcommand_killer }, + { "killable", 60, charcommand_killable }, + { "dropall", 60, charcommand_dropall }, + { "storeall", 60, charcommand_storeall }, + { "refresh", 40, charcommand_refresh }, + { "exp", 1, charcommand_exp }, + { "monsterignore", 60, charcommand_monsterignore }, + { "size", 50, charcommand_size }, + { "hlvl", 60, charcommand_homlevel }, + { "hlevel", 60, charcommand_homlevel }, + { "homlvl", 60, charcommand_homlevel }, + { "homlevel", 60, charcommand_homlevel }, + { "homevolve", 60, charcommand_homevolution }, + { "homevolution", 60, charcommand_homevolution }, + { "homfriendly", 60, charcommand_homfriendly }, + { "homhungry", 60, charcommand_homhungry }, + { "hominfo", 40, charcommand_hominfo }, +}; + + +/*========================================== + * Command lookup functions + *------------------------------------------*/ +static CharCommandInfo* get_charcommandinfo_byname(const char* name) +{ + int i; + if( *name == charcommand_symbol ) name++; // for backwards compatibility + ARR_FIND( 0, ARRAYLENGTH(charcommand_info), i, strcmpi(charcommand_info[i].command, name) == 0 ); + return ( i != ARRAYLENGTH(charcommand_info) ) ? &charcommand_info[i] : NULL; +} + +static CharCommandInfo* get_charcommandinfo_byfunc(const CharCommandFunc func) +{ + int i; + ARR_FIND( 0, ARRAYLENGTH(charcommand_info), i, charcommand_info[i].func == func ); + return ( i != ARRAYLENGTH(charcommand_info) ) ? &charcommand_info[i] : NULL; +} + + +/*========================================== + * Retrieve the command's required gm level + *------------------------------------------*/ +int get_charcommand_level(const CharCommandFunc func) +{ + CharCommandInfo* info = get_charcommandinfo_byfunc(func); + return ( info != NULL ) ? info->level : 100; // 100: command can not be used +} + + +/// Executes a char-command. +/// To be called by internal server code (bypasses various restrictions). +bool is_charcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl) +{ + CharCommandInfo* info; + char command[100]; + char args[100]; + char output[200]; + + if( !str || !*str ) + return false; + + if( *str != charcommand_symbol ) // check first char + return false; + + if( sscanf(str, "%99s %99[^\n]", command, args) < 2 ) + args[0] = '\0'; + + info = get_charcommandinfo_byname(command); + if( info == NULL || info->func == NULL || gmlvl < info->level ) + { + if( gmlvl == 0 ) + return false; // will just display as normal text + else + { + sprintf(output, msg_txt(153), command); // "%s is Unknown Command." + clif_displaymessage(fd, output); + return true; + } + } + + if( log_config.gm && info->level >= log_config.gm ) + log_atcommand(sd, str); + + if( info->func(fd, sd, command, args) != 0 ) + { + sprintf(output, msg_txt(154), command); // "%s failed." + clif_displaymessage(fd, output); + } + + return true; +} + +/// Executes a char-command. +/// To be used by player-invoked code (restrictions will be applied) +bool is_charcommand(const int fd, struct map_session_data* sd, const char* message) +{ + int gmlvl = pc_isGM(sd); + int s_flag = 0; + + nullpo_retr(false, sd); + + if( !message || !*message ) + return false; + + if( sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCOMMAND ) + return true; + + if( battle_config.atc_gmonly != 0 && gmlvl == 0 ) + return false; + + if( map[sd->bl.m].nocommand && gmlvl < map[sd->bl.m].nocommand ) + { + clif_displaymessage(fd, msg_txt(143)); // "Commands are disabled on this map." + return false; + } + + // skip 10/11-langtype's codepage indicator, if detected + if( message[0] == '|' && strlen(message) >= 4 && message[3] == charcommand_symbol ) + message += 3; + + return is_atcommand_sub(fd,sd,message,gmlvl); +} + + +/*========================================== + * + *------------------------------------------*/ +int charcommand_config_read(const char* cfgName) +{ + char line[1024], w1[1024], w2[1024]; + CharCommandInfo* p; + FILE* fp; + + if( (fp = fopen(cfgName, "r")) == NULL ) + { + ShowError("CharCommand configuration file not found: %s\n", cfgName); + return 1; + } + + while( fgets(line, sizeof(line), fp) ) + { + if( line[0] == '/' && line[1] == '/' ) + continue; + + if( sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2 ) + continue; + + p = get_charcommandinfo_byname(w1); + if( p != NULL ) + { + p->level = atoi(w2); + p->level = cap_value(p->level, 0, 100); + } + else + if( strcmpi(w1, "import") == 0 ) + charcommand_config_read(w2); + else + if( strcmpi(w1, "command_symbol") == 0 && + w2[0] > 31 && // control characters + w2[0] != '/' && // symbol of standard ragnarok GM commands + w2[0] != '%' && // symbol of party chat speaking + w2[0] != '$' && // symbol of guild chat speaking + w2[0] != '@' ) // symbol of atcommand + charcommand_symbol = w2[0]; + else + ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); + } + fclose(fp); + + return 0; +} diff --git a/src/map/charcommand.h b/src/map/charcommand.h index 754989d4b..25a27b732 100644 --- a/src/map/charcommand.h +++ b/src/map/charcommand.h @@ -4,101 +4,16 @@ #ifndef _CHARCOMMAND_H_ #define _CHARCOMMAND_H_ -enum CharCommandType { - CharCommand_None = -1, - CharCommandJobChange, - CharCommandPetRename, - CharCommandPetFriendly, - CharCommandReset, - CharCommandStats, - CharCommandOption, - CharCommandSave, - CharCommandSpiritball, - CharCommandItemList, - CharCommandEffect, - CharCommandStorageList, - CharCommandItem, // by MC Cameri - CharCommandWarp, - CharCommandZeny, - CharCommandFakeName, - CharCommandBaseLevel, - CharCommandJobLevel, - CharCommandQuestSkill, - CharCommandLostSkill, - CharCommandSkReset, - CharCommandStReset, - CharCommandModel, - CharCommandSKPoint, - CharCommandSTPoint, - CharCommandChangeSex, - CharCommandFeelReset, // Komurka - CharCommandHelp, - CharCommandLoad, - CharCommandSpeed, - CharCommandStorage, - CharCommandGStorage, - CharCommandHide, - CharCommandAlive, - CharCommandHeal, - CharCommandItem2, - CharCommandItemReset, - CharCommandRefine, - CharCommandProduce, - CharCommandStrength, - CharCommandAgility, - CharCommandVitality, - CharCommandIntelligence, - CharCommandDexterity, - CharCommandLuck, - CharCommandGuildLevelUp, - CharCommandHatch, - CharCommandPetHungry, - CharCommandAllSkill, - CharCommandDye, - CharCommandHStyle, - CharCommandHColor, - CharCommandAllStats, - CharCommandMountPeco, - CharCommandDelItem, - CharCommandJailTime, - CharCommandDisguie, - CharCommandUnDisguise, - CharCommandCartList, - CharCommandKiller, - CharCommandKillable, - CharCommandRefresh, - CharCommandExp, - CharCommandMonsterIgnore, - CharCommandSize, - CharCommandHomLevel, - CharCommandHomEvolve, - CharCommandHomFriendly, - CharCommandHomHungry, - CharCommandHomInfo, - // No more commands after this line - CharCommand_Unknown, - CharCommand_MAX -}; +//#include "map.h" +struct map_session_data; -typedef enum CharCommandType CharCommandType; -typedef struct CharCommandInfo { - CharCommandType type; - const char* command; - int level; - int (*proc)(const int, struct map_session_data*, - const char* command, const char* message); -} CharCommandInfo; - -CharCommandType -is_charcommand(const int fd, struct map_session_data* sd, const char* message); -CharCommandType -is_charcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl); +extern char charcommand_symbol; +typedef int (*CharCommandFunc)(const int fd, struct map_session_data* sd, const char* command, const char* message); -CharCommandType charcommand( - struct map_session_data* sd, const int level, const char* message, CharCommandInfo* info); -int get_charcommand_level(const CharCommandType type); +bool is_charcommand(const int fd, struct map_session_data* sd, const char* message); +bool is_charcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl); +int get_charcommand_level(const CharCommandFunc func); -int charcommand_config_read(const char *cfgName); -extern char charcommand_symbol; +int charcommand_config_read(const char* cfgName); #endif /* _CHARCOMMAND_H_ */ diff --git a/src/map/clif.c b/src/map/clif.c index c020d5760..8f86ddc6b 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -8248,7 +8248,7 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data* sd) if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) ) return; - if( is_atcommand(fd, sd, message) != AtCommand_None || is_charcommand(fd, sd, message) != CharCommand_None ) + if( is_atcommand(fd, sd, message) || is_charcommand(fd, sd, message) ) return; if( sd->sc.data[SC_BERSERK].timer != -1 || (sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT) ) @@ -8331,14 +8331,14 @@ void clif_parse_MapMove(int fd, struct map_session_data *sd) if (battle_config.atc_gmonly && !pc_isGM(sd)) return; - if(pc_isGM(sd) < get_atcommand_level(AtCommand_MapMove)) + if(pc_isGM(sd) < get_atcommand_level(atcommand_mapmove)) return; map_name = (char*)RFIFOP(fd,2); map_name[MAP_NAME_LENGTH_EXT-1]='\0'; sprintf(output, "%s %d %d", map_name, RFIFOW(fd,18), RFIFOW(fd,20)); - atcommand_rura(fd, sd, "@rura", output); - if(log_config.gm && get_atcommand_level(AtCommand_MapMove) >= log_config.gm) + atcommand_mapmove(fd, sd, "@mapmove", output); + if( log_config.gm && get_atcommand_level(atcommand_mapmove) >= log_config.gm ) { sprintf(message, "/mm %s", output); log_atcommand(sd, message); @@ -8559,7 +8559,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) if( !clif_process_message(sd, 1, &target, &namelen, &message, &messagelen) ) return; - if (is_atcommand(fd, sd, message) != AtCommand_None || is_charcommand(fd, sd, message) != CharCommand_None ) + if (is_atcommand(fd, sd, message) || is_charcommand(fd, sd, message) ) return; if (sd->sc.data[SC_BERSERK].timer!=-1 || (sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)) @@ -8694,9 +8694,9 @@ void clif_parse_GMmessage(int fd, struct map_session_data* sd) unsigned int len = RFIFOW(fd,2)-4; int lv; - if (battle_config.atc_gmonly && !pc_isGM(sd)) + if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if (pc_isGM(sd) < (lv=get_atcommand_level(AtCommand_Broadcast))) + if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_broadcast)) ) return; // as the length varies depending on the command used, just block unreasonably long strings @@ -9674,17 +9674,18 @@ void clif_parse_SolveCharName(int fd, struct map_session_data *sd) *------------------------------------------*/ void clif_parse_ResetChar(int fd, struct map_session_data *sd) { - if (battle_config.atc_gmonly && !pc_isGM(sd)) + if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if (pc_isGM(sd) < get_atcommand_level(AtCommand_ResetState)) + + if( pc_isGM(sd) < get_atcommand_level(atcommand_reset) ) return; - if (RFIFOW(fd,2)) + if( RFIFOW(fd,2) ) pc_resetskill(sd,1); else pc_resetstate(sd); - if(log_config.gm && get_atcommand_level(AtCommand_ResetState >= log_config.gm)) + if( log_config.gm && get_atcommand_level(atcommand_reset) >= log_config.gm ) log_atcommand(sd, RFIFOW(fd,2) ? "/resetskill" : "/resetstate"); } @@ -9698,9 +9699,10 @@ void clif_parse_LGMmessage(int fd, struct map_session_data* sd) unsigned int len = RFIFOW(fd,2)-4; int lv; - if (battle_config.atc_gmonly && !pc_isGM(sd)) + if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if (pc_isGM(sd) < (lv=get_atcommand_level(AtCommand_LocalBroadcast))) + + if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_localbroadcast)) ) return; // as the length varies depending on the command used, just block unreasonably long strings @@ -9708,7 +9710,7 @@ void clif_parse_LGMmessage(int fd, struct map_session_data* sd) clif_GMmessage(&sd->bl, msg, len, 1); - if(log_config.gm && lv >= log_config.gm) { + if( log_config.gm && lv >= log_config.gm ) { char logmsg[CHAT_SIZE_MAX+5]; sprintf(logmsg, "/lb %s", msg); log_atcommand(sd, logmsg); @@ -9963,13 +9965,13 @@ void clif_parse_PartyMessage(int fd, struct map_session_data* sd) if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) ) return; - if (is_charcommand(fd, sd, message) != CharCommand_None || is_atcommand(fd, sd, message) != AtCommand_None) + if( is_atcommand(fd, sd, message) || is_charcommand(fd, sd, message) ) return; - if (sd->sc.data[SC_BERSERK].timer!=-1 || (sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)) + if( sd->sc.data[SC_BERSERK].timer!=-1 || (sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT) ) return; - if (battle_config.min_chat_delay) + if( battle_config.min_chat_delay ) { //[Skotlex] if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0) return; @@ -10236,13 +10238,13 @@ void clif_parse_GuildMessage(int fd, struct map_session_data* sd) if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) ) return; - if (is_charcommand(fd, sd, message) != CharCommand_None || is_atcommand(fd, sd, message) != AtCommand_None) + if( is_atcommand(fd, sd, message) || is_charcommand(fd, sd, message) ) return; - if (sd->sc.data[SC_BERSERK].timer!=-1 || (sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)) + if( sd->sc.data[SC_BERSERK].timer!=-1 || (sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT) ) return; - if (battle_config.min_chat_delay) + if( battle_config.min_chat_delay ) { //[Skotlex] if (DIFF_TICK(sd->cantalk_tick, gettick()) > 0) return; @@ -10379,10 +10381,10 @@ void clif_parse_GMKick(int fd, struct map_session_data *sd) struct block_list *target; int tid,lv; - if (battle_config.atc_gmonly && !pc_isGM(sd)) + if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if (pc_isGM(sd) < (lv=get_atcommand_level(AtCommand_Kick))) + if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_kick)) ) return; tid = RFIFOL(fd,2); @@ -10429,15 +10431,15 @@ void clif_parse_Shift(int fd, struct map_session_data *sd) char *player_name; int lv; - if (battle_config.atc_gmonly && !pc_isGM(sd)) + if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if (pc_isGM(sd) < (lv=get_atcommand_level(AtCommand_JumpTo))) + if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_jumpto)) ) return; player_name = (char*)RFIFOP(fd,2); player_name[NAME_LENGTH-1] = '\0'; atcommand_jumpto(fd, sd, "@jumpto", player_name); // as @jumpto - if(log_config.gm && lv >= log_config.gm) { + if( log_config.gm && lv >= log_config.gm ) { char message[NAME_LENGTH+7]; sprintf(message, "/shift %s", player_name); log_atcommand(sd, message); @@ -10453,16 +10455,16 @@ void clif_parse_Recall(int fd, struct map_session_data *sd) char *player_name; int lv; - if (battle_config.atc_gmonly && !pc_isGM(sd)) + if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if (pc_isGM(sd) < (lv=get_atcommand_level(AtCommand_Recall))) + if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_recall)) ) return; player_name = (char*)RFIFOP(fd,2); player_name[NAME_LENGTH-1] = '\0'; atcommand_recall(fd, sd, "@recall", player_name); // as @recall - if(log_config.gm && lv >= log_config.gm) { + if( log_config.gm && lv >= log_config.gm ) { char message[NAME_LENGTH+8]; sprintf(message, "/recall %s", player_name); log_atcommand(sd, message); @@ -10479,29 +10481,29 @@ void clif_parse_GM_Monster_Item(int fd, struct map_session_data *sd) char message[NAME_LENGTH+10]; //For logging. int level; - if (battle_config.atc_gmonly && !pc_isGM(sd)) + if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; monster_item_name = (char*)RFIFOP(fd,2); monster_item_name[NAME_LENGTH-1] = '\0'; - if (mobdb_searchname(monster_item_name)) { - if (pc_isGM(sd) < (level=get_atcommand_level(AtCommand_Spawn))) + if( mobdb_searchname(monster_item_name) ) { + if( pc_isGM(sd) < (level=get_atcommand_level(atcommand_monster)) ) return; - atcommand_monster(fd, sd, "@spawn", monster_item_name); // as @spawn - if(log_config.gm && level >= log_config.gm) + atcommand_monster(fd, sd, "@monster", monster_item_name); // as @monster + if( log_config.gm && level >= log_config.gm ) { //Log action. [Skotlex] snprintf(message, sizeof(message)-1, "@spawn %s", monster_item_name); log_atcommand(sd, message); } return; } - if (itemdb_searchname(monster_item_name) == NULL) + if( itemdb_searchname(monster_item_name) == NULL ) return; - if (pc_isGM(sd) < (level = get_atcommand_level(AtCommand_Item))) + if( pc_isGM(sd) < (level = get_atcommand_level(atcommand_item)) ) return; atcommand_item(fd, sd, "@item", monster_item_name); // as @item - if(log_config.gm && level >= log_config.gm) + if( log_config.gm && level >= log_config.gm ) { //Log action. [Skotlex] sprintf(message, "@item %s", monster_item_name); log_atcommand(sd, message); @@ -10513,12 +10515,13 @@ void clif_parse_GM_Monster_Item(int fd, struct map_session_data *sd) *------------------------------------------*/ void clif_parse_GMHide(int fd, struct map_session_data *sd) { - if (battle_config.atc_gmonly && !pc_isGM(sd)) + if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if (pc_isGM(sd) < get_atcommand_level(AtCommand_Hide)) + + if( pc_isGM(sd) < get_atcommand_level(atcommand_hide) ) return; - if (sd->sc.option & OPTION_INVISIBLE) { + if( sd->sc.option & OPTION_INVISIBLE ) { sd->sc.option &= ~OPTION_INVISIBLE; if (sd->disguise) status_set_viewdata(&sd->bl, sd->disguise); @@ -10529,7 +10532,7 @@ void clif_parse_GMHide(int fd, struct map_session_data *sd) sd->sc.option |= OPTION_INVISIBLE; sd->vd.class_ = INVISIBLE_CLASS; clif_displaymessage(fd, "Invisible: On."); - if(log_config.gm && get_atcommand_level(AtCommand_Hide) >= log_config.gm) + if( log_config.gm && get_atcommand_level(atcommand_hide) >= log_config.gm ) log_atcommand(sd, "/hide"); } clif_changeoption(&sd->bl); @@ -10560,7 +10563,7 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd) return; if ( - ((level = pc_isGM(sd)) > pc_isGM(dstsd) && level >= get_atcommand_level(AtCommand_Mute)) + ((level = pc_isGM(sd)) > pc_isGM(dstsd) && level >= get_atcommand_level(atcommand_mute)) || (type == 2 && !level)) { clif_GM_silence(sd, dstsd, ((type == 2) ? 1 : type)); diff --git a/src/map/map.c b/src/map/map.c index fd50012e4..cc09132f5 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -2691,7 +2691,7 @@ int parse_console(char* buf) ShowInfo("Type of command: '%s' || Command: '%s' || Map: '%s' Coords: %d %d\n", type, command, map, x, y); if( n == 5 && strcmpi("admin",type) == 0 ){ - if( is_atcommand_sub(sd.fd,&sd,command,99) == AtCommand_None ) + if( !is_atcommand_sub(sd.fd,&sd,command,99) ) printf("Console: not atcommand\n"); } else if( n == 2 && strcmpi("server",type) == 0 ){ if( strcmpi("shutdown",command) == 0 || diff --git a/src/map/pc.c b/src/map/pc.c index 2b218586d..5db1502c1 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -666,7 +666,7 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t pc_checkitem(sd); status_change_init(&sd->bl); - if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) && (pc_isGM(sd) >= get_atcommand_level(AtCommand_Hide))) + if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) && (pc_isGM(sd) >= get_atcommand_level(atcommand_hide))) sd->status.option &= (OPTION_MASK | OPTION_INVISIBLE); else sd->status.option &= OPTION_MASK; diff --git a/src/map/script.c b/src/map/script.c index 8b2464be4..28cb7ed7e 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -11006,80 +11006,82 @@ BUILDIN_FUNC(nude) *------------------------------------------*/ BUILDIN_FUNC(atcommand) { - TBL_PC *sd=NULL; - const char *cmd; + TBL_PC dummy_sd; + TBL_PC* sd; + int fd; + const char* cmd; cmd = script_getstr(st,2); - if (st->rid) - sd = script_rid2sd(st); - if (sd){ - if(cmd[0] != atcommand_symbol){ - cmd += strlen(sd->status.name); - while(*cmd != atcommand_symbol && *cmd != 0) - cmd++; - } - is_atcommand_sub(sd->fd, sd, cmd, 99); + if (st->rid) { + sd = script_rid2sd(st); + fd = sd->fd; } else { //Use a dummy character. - TBL_PC dummy_sd; - struct block_list *bl = NULL; + sd = &dummy_sd; + fd = 0; + memset(&dummy_sd, 0, sizeof(TBL_PC)); - if (st->oid) bl = map_id2bl(st->oid); - if (bl) { + if (st->oid) + { + struct block_list* bl = map_id2bl(st->oid); memcpy(&dummy_sd.bl, bl, sizeof(struct block_list)); if (bl->type == BL_NPC) - strncpy(dummy_sd.status.name, ((TBL_NPC*)bl)->name, NAME_LENGTH); + safestrncpy(dummy_sd.status.name, ((TBL_NPC*)bl)->name, NAME_LENGTH); } - if(cmd[0] != atcommand_symbol){ - cmd += strlen(dummy_sd.status.name); - while(*cmd != atcommand_symbol && *cmd != 0) - cmd++; - } - is_atcommand_sub(0, &dummy_sd, cmd, 99); } + // compatibility with previous implementation (deprecated!) + if(cmd[0] != atcommand_symbol) + { + cmd += strlen(sd->status.name); + while(*cmd != atcommand_symbol && *cmd != 0) + cmd++; + } + + is_atcommand_sub(fd, sd, cmd, 99); + return 0; } BUILDIN_FUNC(charcommand) { - TBL_PC *sd=NULL; - const char *cmd; - + TBL_PC dummy_sd; + TBL_PC* sd; + int fd; + const char* cmd; + cmd = script_getstr(st,2); - if (st->rid) + if (st->rid) { sd = script_rid2sd(st); - - if (sd){ - if(cmd[0] != charcommand_symbol){ - cmd += strlen(sd->status.name); - while(*cmd != charcommand_symbol && *cmd != 0) - cmd++; - } - is_charcommand_sub(sd->fd, sd, cmd,99); + fd = sd->fd; } else { //Use a dummy character. - TBL_PC dummy_sd; - struct block_list *bl = NULL; + sd = &dummy_sd; + fd = 0; + memset(&dummy_sd, 0, sizeof(TBL_PC)); - if (st->oid) bl = map_id2bl(st->oid); - if (bl) { + if (st->oid) + { + struct block_list* bl = map_id2bl(st->oid); memcpy(&dummy_sd.bl, bl, sizeof(struct block_list)); if (bl->type == BL_NPC) - strncpy(dummy_sd.status.name, ((TBL_NPC*)bl)->name, NAME_LENGTH); + safestrncpy(dummy_sd.status.name, ((TBL_NPC*)bl)->name, NAME_LENGTH); } - if(cmd[0] != charcommand_symbol){ - cmd += strlen(dummy_sd.status.name); - while(*cmd != charcommand_symbol && *cmd != 0) - cmd++; - } - is_charcommand_sub(0, &dummy_sd, cmd, 99); } + // compatibility with previous implementation (deprecated!) + if(cmd[0] != charcommand_symbol) + { + cmd += strlen(sd->status.name); + while(*cmd != charcommand_symbol && *cmd != 0) + cmd++; + } + + is_charcommand_sub(fd, sd, cmd, 99); + return 0; } - /*========================================== * Displays a message for the player only (like system messages like "you got an apple" ) *------------------------------------------*/ -- cgit v1.2.3-70-g09d2 From b397f7c6615f68f044100168eeaf157f6c60227c Mon Sep 17 00:00:00 2001 From: ultramage Date: Fri, 9 Nov 2007 21:44:29 +0000 Subject: * Re-worked the login-char-map packet spam mechanism - mapserver no longer sends entire user list to charserver every 10 seconds; similar change done to the char-login connection - user count updates are only sent when the value actually changes instead of servers polling each other every few seconds - the servers now prevent interserver connection timeout explicitly by sending ping/ack packet pairs instead of relying on the usercount polling to do so; keepalive is sent every 'stall_time'-2 seconds - removed the @refreshonline command as refresh happens automatically every 5 seconds git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11703 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 8 +++ conf/Changelog.txt | 2 + conf/atcommand_athena.conf | 3 -- src/char/char.c | 127 +++++++++++++++++++++++++++++---------------- src/char_sql/char.c | 112 ++++++++++++++++++++++++++------------- src/login/login.c | 18 +++++-- src/login_sql/login.c | 20 ++++--- src/map/atcommand.c | 20 +------ src/map/chrif.c | 110 +++++++++++++++++++++++---------------- src/map/chrif.h | 2 +- src/map/map.c | 11 ++-- 11 files changed, 264 insertions(+), 169 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 5b7e17434..ac449cd23 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,14 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2007/11/09 + * Re-worked the login-char-map packet spam mechanism + - mapserver no longer sends entire user list to charserver every + 10 seconds; similar change done to the char-login connection + - user count updates are only sent when the value actually changes + instead of servers polling each other every few seconds + - the servers now prevent interserver connection timeout explicitly by + sending ping/ack packet pairs instead of relying on the usercount + polling to do so; keepalive is sent every 'stall_time'-2 seconds * Fixed socket.c checking time() incorrectly (bugreport:394) [ultramage] * Added a database iterator to db.c/db.h. [FlavioJS] 2007/11/08 diff --git a/conf/Changelog.txt b/conf/Changelog.txt index b9da37380..ae89cac7e 100644 --- a/conf/Changelog.txt +++ b/conf/Changelog.txt @@ -1,5 +1,7 @@ Date Added +2007/11/08 + * Removed the unneccessary @refreshonline command 2007/10/29 * Removed petid command (not needed because commands understand names) * Removed *id2 commands (messy, useless and redundant) diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 92ecf2bf5..622ee3be6 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -702,9 +702,6 @@ reloadgmdb: 99 // Change a battle_config flag without rebooting server setbattleflag: 99 -// Refresh only status of players - SQL Only -refreshonline: 99 - // Re-load gm command config (admin command) reloadatcommand: 99 diff --git a/src/char/char.c b/src/char/char.c index 0e7d5782d..f7881a33b 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -172,8 +172,6 @@ struct online_char_data { // Holds all online characters. static DBMap* online_char_db; // int account_id -> struct online_char_data* -time_t update_online; // to update online files when we receiving information from a server (not less than 8 seconds) - int console = 0; //------------------------------ @@ -344,6 +342,9 @@ void set_char_online(int map_id, int char_id, int account_id) character->char_id = (char_id==99)?-1:char_id; character->server = (char_id==99)?-1:map_id; + if( character->server > -1 ) + server[character->server].users++; + if(character->waiting_disconnect != -1) { delete_timer(character->waiting_disconnect, chardb_waiting_disconnect); character->waiting_disconnect = -1; @@ -363,6 +364,9 @@ void set_char_offline(int char_id, int account_id) if ((character = idb_get(online_char_db, account_id)) != NULL) { //We don't free yet to avoid aCalloc/aFree spamming during char change. [Skotlex] + if( character->server > -1 ) + server[character->server].users--; + character->char_id = -1; character->server = -1; if(character->waiting_disconnect != -1){ @@ -2305,7 +2309,6 @@ int parse_fromlogin(int fd) } ShowStatus("From login-server: receiving information of %d GM accounts.\n", GM_num); char_log("From login-server: receiving information of %d GM accounts.\n", GM_num); - create_online_files(); // update online players files (perhaps some online players change of GM level) // send new gm acccounts level to map-servers memcpy(buf, RFIFOP(fd,0), RFIFOW(fd,2)); WBUFW(buf,0) = 0x2b15; @@ -2639,10 +2642,6 @@ int parse_frommap(int fd) switch(RFIFOW(fd,0)) { - case 0x2718: // map-server alive packet - RFIFOSKIP(fd,2); - break; - case 0x2af7: // request from map-server to reload GM accounts. Transmission to login-server if (login_fd > 0) { // don't send request if no login-server WFIFOHEAD(login_fd,2); @@ -2672,10 +2671,11 @@ int parse_frommap(int fd) if (max_account_id != DEFAULT_MAX_ACCOUNT_ID || max_char_id != DEFAULT_MAX_CHAR_ID) mapif_send_maxid(max_account_id, max_char_id); //Send the current max ids to the server to keep in sync [Skotlex] + // send name for wisp to player WFIFOHEAD(fd, 3 + NAME_LENGTH); WFIFOW(fd,0) = 0x2afb; WFIFOB(fd,2) = 0; - memcpy(WFIFOP(fd,3), wisp_server_name, NAME_LENGTH); // name for wisp to player + memcpy(WFIFOP(fd,3), wisp_server_name, NAME_LENGTH); WFIFOSET(fd,3+NAME_LENGTH); char_send_fame_list(fd); //Send fame list. @@ -2774,11 +2774,6 @@ int parse_frommap(int fd) character->char_id = cid; character->server = id; } - if (update_online < time(NULL)) { // Time is done - update_online = time(NULL) + 8; - create_online_files(); // only every 8 sec. (normally, 1 server send users every 5 sec.) Don't update every time, because that takes time, but only every 2 connection. - // it set to 8 sec because is more than 5 (sec) and if we have more than 1 map-server, informations can be received in shifted. - } //If any chars remain in -2, they will be cleaned in the cleanup timer. RFIFOSKIP(fd,6+i*8); break; @@ -3033,8 +3028,6 @@ int parse_frommap(int fd) } break; -// case 0x2b0f: Not used anymore, available for future use - case 0x2b10: // Update and send fame ranking list if (RFIFOREST(fd) < 11) return 0; @@ -3147,6 +3140,13 @@ int parse_frommap(int fd) } break; + case 0x2b23: // map-server alive packet + WFIFOHEAD(fd,2); + WFIFOW(fd,0) = 0x2b24; + WFIFOSET(fd,2); + RFIFOSKIP(fd,2); + break; + case 0x2736: // ip address update if (RFIFOREST(fd) < 6) return 0; server[id].ip = ntohl(RFIFOL(fd, 2)); @@ -3783,22 +3783,33 @@ int mapif_send(int fd, unsigned char *buf, unsigned int len) return 0; } -int send_users_tologin(int tid, unsigned int tick, int id, int data) +int broadcast_user_count(int tid, unsigned int tick, int id, int data) { + uint8 buf[6]; int users = count_users(); - unsigned char buf[16]; - if (login_fd > 0 && session[login_fd]) { + // only send an update when needed + static prev_users = 0; + if( prev_users == users ) + return 0; + prev_users = users; + + if( login_fd > 0 && session[login_fd] ) + { // send number of user to login server WFIFOHEAD(login_fd,6); WFIFOW(login_fd,0) = 0x2714; WFIFOL(login_fd,2) = users; WFIFOSET(login_fd,6); } + // send number of players to all map-servers WBUFW(buf,0) = 0x2b00; WBUFL(buf,2) = users; - mapif_sendall(buf, 6); + mapif_sendall(buf,6); + + // refresh online files (txt and html) + create_online_files(); return 0; } @@ -3868,6 +3879,18 @@ int check_connect_login_server(int tid, unsigned int tick, int id, int data) return 1; } +// sends a ping packet to login server (will receive pong 0x2718) +int ping_login_server(int tid, unsigned int tick, int id, int data) +{ + if (login_fd > 0 && session[login_fd] != NULL) + { + WFIFOHEAD(login_fd,2); + WFIFOW(login_fd,0) = 0x2719; + WFIFOSET(login_fd,2); + } + return 0; +} + //------------------------------------------------ //Invoked 15 seconds after mapif_disconnectplayer in case the map server doesn't //replies/disconnect the player we tried to kick. [Skotlex] @@ -3883,6 +3906,23 @@ static int chardb_waiting_disconnect(int tid, unsigned int tick, int id, int dat return 0; } +static int online_data_cleanup_sub(DBKey key, void *data, va_list ap) +{ + struct online_char_data *character= (struct online_char_data*)data; + if (character->server == -2) //Unknown server.. set them offline + set_char_offline(character->char_id, character->account_id); + if (character->server < 0) + //Free data from players that have not been online for a while. + db_remove(online_char_db, key); + return 0; +} + +static int online_data_cleanup(int tid, unsigned int tick, int id, int data) +{ + online_char_db->foreach(online_char_db, online_data_cleanup_sub); + return 0; +} + //---------------------------------- // Reading Lan Support configuration // Rewrote: Anvanced subnet check [LuzZza] @@ -3931,10 +3971,10 @@ int char_lan_config_read(const char *lancfgName) subnet_count++; } - - ShowStatus("Read information about %d subnetworks.\n", subnet_count); } + ShowStatus("Read information about %d subnetworks.\n", subnet_count); + fclose(fp); return 0; } @@ -4181,23 +4221,6 @@ void set_server_type(void) SERVER_TYPE = ATHENA_SERVER_CHAR; } -static int online_data_cleanup_sub(DBKey key, void *data, va_list ap) -{ - struct online_char_data *character= (struct online_char_data*)data; - if (character->server == -2) //Unknown server.. set them offline - set_char_offline(character->char_id, character->account_id); - if (character->server < 0) - //Free data from players that have not been online for a while. - db_remove(online_char_db, key); - return 0; -} - -static int online_data_cleanup(int tid, unsigned int tick, int id, int data) -{ - online_char_db->foreach(online_char_db, online_data_cleanup_sub); - return 0; -} - int do_init(int argc, char **argv) { int i; @@ -4258,18 +4281,32 @@ int do_init(int argc, char **argv) } } + // establish char-login connection if not present add_timer_func_list(check_connect_login_server, "check_connect_login_server"); - add_timer_func_list(send_users_tologin, "send_users_tologin"); + add_timer_interval(gettick() + 1000, check_connect_login_server, 0, 0, 10 * 1000); + + // keep the char-login connection alive + add_timer_func_list(ping_login_server, "ping_login_server"); + add_timer_interval(gettick() + 1000, ping_login_server, 0, 0, ((int)stall_time-2) * 1000); + + // periodically update the overall user count on all mapservers + login server + add_timer_func_list(broadcast_user_count, "broadcast_user_count"); + add_timer_interval(gettick() + 1000, broadcast_user_count, 0, 0, 5 * 1000); + + // send a list of all online account IDs to login server add_timer_func_list(send_accounts_tologin, "send_accounts_tologin"); + add_timer_interval(gettick() + 1000, send_accounts_tologin, 0, 0, 3600 * 1000); //Sync online accounts every hour + + // ??? add_timer_func_list(chardb_waiting_disconnect, "chardb_waiting_disconnect"); + + // ??? add_timer_func_list(online_data_cleanup, "online_data_cleanup"); + add_timer_interval(gettick() + 1000, online_data_cleanup, 0, 0, 600 * 1000); + + // periodic flush of all saved data to disk add_timer_func_list(mmo_char_sync_timer, "mmo_char_sync_timer"); - - add_timer_interval(gettick() + 1000, check_connect_login_server, 0, 0, 10*1000); - add_timer_interval(gettick() + 1000, send_users_tologin, 0, 0, 5*1000); - add_timer_interval(gettick() + 3600*1000, send_accounts_tologin, 0, 0, 3600*1000); //Sync online accounts every hour - add_timer_interval(gettick() + 600*1000, online_data_cleanup, 0, 0, 600*1000); - add_timer_interval(gettick() + autosave_interval, mmo_char_sync_timer, 0, 0, autosave_interval); + add_timer_interval(gettick() + 1000, mmo_char_sync_timer, 0, 0, autosave_interval); if( console ) { diff --git a/src/char_sql/char.c b/src/char_sql/char.c index 89f31e2c1..e48ecc9e4 100644 --- a/src/char_sql/char.c +++ b/src/char_sql/char.c @@ -246,6 +246,9 @@ void set_char_online(int map_id, int char_id, int account_id) character->char_id = (char_id==99)?-1:char_id; character->server = (char_id==99)?-1:map_id; + if( character->server > -1 ) + server[character->server].users++; + if(character->waiting_disconnect != -1) { delete_timer(character->waiting_disconnect, chardb_waiting_disconnect); character->waiting_disconnect = -1; @@ -289,6 +292,9 @@ void set_char_offline(int char_id, int account_id) if ((character = idb_get(online_char_db, account_id)) != NULL) { //We don't free yet to avoid aCalloc/aFree spamming during char change. [Skotlex] + if( character->server > -1 ) + server[character->server].users--; + character->char_id = -1; character->server = -1; if(character->waiting_disconnect != -1){ @@ -2098,10 +2104,6 @@ int parse_frommap(int fd) switch(RFIFOW(fd, 0)) { - case 0x2718: // map-server alive packet - RFIFOSKIP(fd,2); - break; - case 0x2af7: // request from map-server to reload GM accounts. Transmission to login-server if(char_gm_read) //Re-read gm accounts. read_gm_account(); @@ -2132,10 +2134,11 @@ int parse_frommap(int fd) if (max_account_id != DEFAULT_MAX_ACCOUNT_ID || max_char_id != DEFAULT_MAX_CHAR_ID) mapif_send_maxid(max_account_id, max_char_id); //Send the current max ids to the server to keep in sync [Skotlex] + // send name for wisp to player WFIFOHEAD(fd, 3 + NAME_LENGTH); WFIFOW(fd,0) = 0x2afb; WFIFOB(fd,2) = 0; - memcpy(WFIFOP(fd,3), wisp_server_name, NAME_LENGTH); // name for wisp to player + memcpy(WFIFOP(fd,3), wisp_server_name, NAME_LENGTH); WFIFOSET(fd,3+NAME_LENGTH); char_send_fame_list(fd); //Send fame list. @@ -2519,8 +2522,6 @@ int parse_frommap(int fd) } break; -// case 0x2b0f: Not used anymore, available for future use - case 0x2b10: // Update and send fame ranking list if (RFIFOREST(fd) < 11) return 0; @@ -2657,6 +2658,13 @@ int parse_frommap(int fd) } break; + case 0x2b23: // map-server alive packet + WFIFOHEAD(fd,2); + WFIFOW(fd,0) = 0x2b24; + WFIFOSET(fd,2); + RFIFOSKIP(fd,2); + break; + case 0x2736: // ip address update if (RFIFOREST(fd) < 6) return 0; server[id].ip = ntohl(RFIFOL(fd, 2)); @@ -3266,22 +3274,30 @@ int mapif_send(int fd, unsigned char *buf, unsigned int len) return 0; } -int send_users_tologin(int tid, unsigned int tick, int id, int data) +int broadcast_user_count(int tid, unsigned int tick, int id, int data) { + uint8 buf[6]; int users = count_users(); - unsigned char buf[16]; - if (login_fd > 0 && session[login_fd]) { + // only send an update when needed + static prev_users = 0; + if( prev_users == users ) + return 0; + prev_users = users; + + if( login_fd > 0 && session[login_fd] ) + { // send number of user to login server WFIFOHEAD(login_fd,6); WFIFOW(login_fd,0) = 0x2714; WFIFOL(login_fd,2) = users; WFIFOSET(login_fd,6); } + // send number of players to all map-servers WBUFW(buf,0) = 0x2b00; WBUFL(buf,2) = users; - mapif_sendall(buf, 6); + mapif_sendall(buf,6); return 0; } @@ -3351,6 +3367,18 @@ int check_connect_login_server(int tid, unsigned int tick, int id, int data) return 1; } +// sends a ping packet to login server (will receive pong 0x2718) +int ping_login_server(int tid, unsigned int tick, int id, int data) +{ + if (login_fd > 0 && session[login_fd] != NULL) + { + WFIFOHEAD(login_fd,2); + WFIFOW(login_fd,0) = 0x2719; + WFIFOSET(login_fd,2); + } + return 0; +} + //------------------------------------------------ //Invoked 15 seconds after mapif_disconnectplayer in case the map server doesn't //replies/disconnect the player we tried to kick. [Skotlex] @@ -3366,6 +3394,23 @@ static int chardb_waiting_disconnect(int tid, unsigned int tick, int id, int dat return 0; } +static int online_data_cleanup_sub(DBKey key, void *data, va_list ap) +{ + struct online_char_data *character= (struct online_char_data*)data; + if (character->server == -2) //Unknown server.. set them offline + set_char_offline(character->char_id, character->account_id); + if (character->server < 0) + //Free data from players that have not been online for a while. + db_remove(online_char_db, key); + return 0; +} + +static int online_data_cleanup(int tid, unsigned int tick, int id, int data) +{ + online_char_db->foreach(online_char_db, online_data_cleanup_sub); + return 0; +} + //---------------------------------- // Reading Lan Support configuration // Rewrote: Anvanced subnet check [LuzZza] @@ -3414,10 +3459,10 @@ int char_lan_config_read(const char *lancfgName) subnet_count++; } - - ShowStatus("Read information about %d subnetworks.\n", subnet_count); } + ShowStatus("Read information about %d subnetworks.\n", subnet_count); + fclose(fp); return 0; } @@ -3726,23 +3771,6 @@ void set_server_type(void) SERVER_TYPE = ATHENA_SERVER_CHAR; } -static int online_data_cleanup_sub(DBKey key, void *data, va_list ap) -{ - struct online_char_data *character= (struct online_char_data*)data; - if (character->server == -2) //Unknown server.. set them offline - set_char_offline(character->char_id, character->account_id); - if (character->server < 0) - //Free data from players that have not been online for a while. - db_remove(online_char_db, key); - return 0; -} - -static int online_data_cleanup(int tid, unsigned int tick, int id, int data) -{ - online_char_db->foreach(online_char_db, online_data_cleanup_sub); - return 0; -} - int do_init(int argc, char **argv) { int i; @@ -3800,16 +3828,28 @@ int do_init(int argc, char **argv) } } + // establish char-login connection if not present add_timer_func_list(check_connect_login_server, "check_connect_login_server"); - add_timer_func_list(send_users_tologin, "send_users_tologin"); + add_timer_interval(gettick() + 1000, check_connect_login_server, 0, 0, 10 * 1000); + + // keep the char-login connection alive + add_timer_func_list(ping_login_server, "ping_login_server"); + add_timer_interval(gettick() + 1000, ping_login_server, 0, 0, ((int)stall_time-2) * 1000); + + // periodically update the overall user count on all mapservers + login server + add_timer_func_list(broadcast_user_count, "broadcast_user_count"); + add_timer_interval(gettick() + 1000, broadcast_user_count, 0, 0, 5 * 1000); + + // send a list of all online account IDs to login server add_timer_func_list(send_accounts_tologin, "send_accounts_tologin"); + add_timer_interval(gettick() + 1000, send_accounts_tologin, 0, 0, 3600 * 1000); //Sync online accounts every hour. + + // ??? add_timer_func_list(chardb_waiting_disconnect, "chardb_waiting_disconnect"); - add_timer_func_list(online_data_cleanup, "online_data_cleanup"); - add_timer_interval(gettick() + 1000, check_connect_login_server, 0, 0, 10*1000); - add_timer_interval(gettick() + 1000, send_users_tologin, 0, 0, 5*1000); - add_timer_interval(gettick() + 3600*1000, send_accounts_tologin, 0, 0, 3600*1000); //Sync online accounts every hour. - add_timer_interval(gettick() + 600*1000, online_data_cleanup, 0, 0, 600*1000); + // ??? + add_timer_func_list(online_data_cleanup, "online_data_cleanup"); + add_timer_interval(gettick() + 1000, online_data_cleanup, 0, 0, 600 * 1000); if( console ) { diff --git a/src/login/login.c b/src/login/login.c index 2b1650e2c..91a2f1996 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -1441,10 +1441,6 @@ int parse_fromchar(int fd) return 0; //printf("parse_fromchar: Receiving of the users number of the server '%s': %d\n", server[id].name, RFIFOL(fd,2)); server[id].users = RFIFOL(fd,2); - // send some answer - WFIFOHEAD(fd,2); - WFIFOW(fd,0) = 0x2718; - WFIFOSET(fd,2); RFIFOSKIP(fd,6); break; @@ -1500,6 +1496,17 @@ int parse_fromchar(int fd) RFIFOSKIP(fd,6); break; + case 0x2719: // ping request from charserver + if( RFIFOREST(fd) < 2 ) + return 0; + + WFIFOHEAD(fd,2); + WFIFOW(fd,0) = 0x2718; + WFIFOSET(fd,2); + + RFIFOSKIP(fd,2); + break; + case 0x2720: // Request to become a GM if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2)) return 0; @@ -3419,9 +3426,10 @@ int login_lan_config_read(const char *lancfgName) subnet_count++; } - ShowStatus("Read information about %d subnetworks.\n", subnet_count); } + ShowStatus("Read information about %d subnetworks.\n", subnet_count); + fclose(fp); return 0; } diff --git a/src/login_sql/login.c b/src/login_sql/login.c index 7139c0b2c..f72590bac 100644 --- a/src/login_sql/login.c +++ b/src/login_sql/login.c @@ -764,11 +764,6 @@ int parse_fromchar(int fd) if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `sstatus` SET `user` = '%d' WHERE `index` = '%d'", server[id].users, id) ) Sql_ShowDebug(sql_handle); } - // send some answer - WFIFOHEAD(fd,2); - WFIFOW(fd,0) = 0x2718; - WFIFOSET(fd,2); - RFIFOSKIP(fd,6); break; @@ -817,6 +812,17 @@ int parse_fromchar(int fd) } break; + case 0x2719: // ping request from charserver + if( RFIFOREST(fd) < 2 ) + return 0; + + WFIFOHEAD(fd,2); + WFIFOW(fd,0) = 0x2718; + WFIFOSET(fd,2); + + RFIFOSKIP(fd,2); + break; + case 0x2720: // Request to become a GM (TXT only!) if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2)) return 0; @@ -1691,10 +1697,10 @@ int login_lan_config_read(const char *lancfgName) subnet_count++; } - - ShowStatus("Read information about %d subnetworks.\n", subnet_count); } + ShowStatus("Read information about %d subnetworks.\n", subnet_count); + fclose(fp); return 0; } diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 7a590c2d2..32a07e132 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -6818,31 +6818,18 @@ int atcommand_misceffect(const int fd, struct map_session_data* sd, const char* return 0; } -#ifndef TXT_ONLY /* Begin SQL-Only commands */ - /*========================================== * MAIL SYSTEM *------------------------------------------*/ int atcommand_mail(const int fd, struct map_session_data* sd, const char* command, const char* message) { nullpo_retr(0,sd); - +#ifndef TXT_ONLY mail_openmail(sd); +#endif return 0; } -/*========================================== - * Refresh online command for SQL [Valaris] - * Will refresh and check online column of players and set correctly. - *------------------------------------------*/ -int atcommand_refreshonline(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - send_users_tochar(-1, gettick(), 0, 0); - return 0; -} - -#endif /* end sql only */ - /*========================================== * Show Monster DB Info v 1.0 * originally by [Lupus] eAthena @@ -8394,10 +8381,7 @@ AtCommandInfo atcommand_info[] = { { "homshuffle", 60, atcommand_homshuffle }, { "showmobs", 10, atcommand_showmobs }, { "feelreset", 10, atcommand_feelreset }, -#ifndef TXT_ONLY { "mail", 1, atcommand_mail }, - { "refreshonline", 99, atcommand_refreshonline }, -#endif }; diff --git a/src/map/chrif.c b/src/map/chrif.c index 6369a6745..52fcc5ca3 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -31,56 +31,58 @@ static const int packet_len_table[0x3d] = { // U - used, F - free 60, 3,-1,27,10,-1, 6,-1, // 2af8-2aff: U->2af8, U->2af9, U->2afa, U->2afb, U->2afc, U->2afd, U->2afe, U->2aff 6,-1,18, 7,-1,35,30,10, // 2b00-2b07: U->2b00, U->2b01, U->2b02, U->2b03, U->2b04, U->2b05, U->2b06, U->2b07 6,30,-1,10,86, 7,44,34, // 2b08-2b0f: U->2b08, U->2b09, U->2b0a, U->2b0b, U->2b0c, U->2b0d, U->2b0e, U->2b0f - 11,-1,10, 6,11,-1, 0,10, // 2b10-2b17: U->2b10, U->2b11, U->2b12, U->2b13, U->2b14, U->2b15, U->2b16, U->2b17 - -1,-1,-1,-1,-1,-1, 2, 7, // 2b18-2b1f: U->2b18, U->2b19, U->2b1a, U->2b1b, U->2b1c, U->2b1d, U->2b1e, U->2b1f - -1,10, 8,-1,-1,-1,-1,-1, // 2b20-2b27: U->2b20, U->2b21, U->2b22, U->2b23, F->2b24, F->2b25, F->2b26, F->2b27 + 11, 9,10, 6,11,-1,266,10, // 2b10-2b17: U->2b10, U->2b11, U->2b12, U->2b13, U->2b14, U->2b15, U->2b16, U->2b17 + 2,10, 2,-1,-1,-1, 2, 7, // 2b18-2b1f: U->2b18, U->2b19, U->2b1a, U->2b1b, U->2b1c, U->2b1d, U->2b1e, U->2b1f + -1,10, 8, 2, 2,-1,-1,-1, // 2b20-2b27: U->2b20, U->2b21, U->2b22, U->2b23, U->2b24, F->2b25, F->2b26, F->2b27 }; //Used Packets: //2af8: Outgoing, chrif_connect -> 'connect to charserver / auth @ charserver' -//2af9: Incomming, chrif_connectack -> 'answer of the 2af8 login(ok / fail)' +//2af9: Incoming, chrif_connectack -> 'answer of the 2af8 login(ok / fail)' //2afa: Outgoing, chrif_sendmap -> 'sending our maps' -//2afb: Incomming, chrif_sendmapack -> 'Maps received successfully / or not ..' +//2afb: Incoming, chrif_sendmapack -> 'Maps received successfully / or not ..' //2afc: Outgoing, chrif_scdata_request -> request sc_data for pc_authok'ed char. <- new command reuses previous one. -//2afd: Incomming, chrif_authok -> 'character selected, add to auth db' +//2afd: Incoming, chrif_authok -> 'character selected, add to auth db' //2afe: Outgoing, send_usercount_tochar -> 'sends player count of this map server to charserver' //2aff: Outgoing, send_users_tochar -> 'sends all actual connected character ids to charserver' -//2b00: Incomming, map_setusers -> 'set the actual usercount? PACKET.2B COUNT.L.. ?' (not sure) +//2b00: Incoming, map_setusers -> 'set the actual usercount? PACKET.2B COUNT.L.. ?' (not sure) //2b01: Outgoing, chrif_save -> 'charsave of char XY account XY (complete struct)' //2b02: Outgoing, chrif_charselectreq -> 'player returns from ingame to charserver to select another char.., this packets includes sessid etc' ? (not 100% sure) -//2b03: Incomming, clif_charselectok -> '' (i think its the packet after enterworld?) (not sure) -//2b04: Incomming, chrif_recvmap -> 'getting maps from charserver of other mapserver's' +//2b03: Incoming, clif_charselectok -> '' (i think its the packet after enterworld?) (not sure) +//2b04: Incoming, chrif_recvmap -> 'getting maps from charserver of other mapserver's' //2b05: Outgoing, chrif_changemapserver -> 'Tell the charserver the mapchange / quest for ok...' -//2b06: Incomming, chrif_changemapserverack -> 'awnser of 2b05, ok/fail, data: dunno^^' +//2b06: Incoming, chrif_changemapserverack -> 'awnser of 2b05, ok/fail, data: dunno^^' //2b07: Incoming, clif_updatemaxid -> Received when updating the max account/char known //2b08: Outgoing, chrif_searchcharid -> '...' -//2b09: Incomming, map_addchariddb -> 'Adds a name to the nick db' +//2b09: Incoming, map_addchariddb -> 'Adds a name to the nick db' //2b0a: Outgoing, chrif_changegm -> 'level change of acc/char XY' -//2b0b: Incomming, chrif_changedgm -> 'answer of 2b0a..' +//2b0b: Incoming, chrif_changedgm -> 'answer of 2b0a..' //2b0c: Outgoing, chrif_changeemail -> 'change mail address ...' -//2b0d: Incomming, chrif_changedsex -> 'Change sex of acc XY' +//2b0d: Incoming, chrif_changedsex -> 'Change sex of acc XY' //2b0e: Outgoing, chrif_char_ask_name -> 'Do some operations (change sex, ban / unban etc)' -//2b0f: Incomming, chrif_char_ask_name_answer -> 'answer of the 2b0e' +//2b0f: Incoming, chrif_char_ask_name_answer -> 'answer of the 2b0e' //2b10: Outgoing, chrif_updatefamelist -> 'Update the fame ranking lists and send them' //2b11: Outgoing, chrif_changesex -> 'change sex of acc X' -//2b12: Incomming, chrif_divorce -> 'divorce a wedding of charid X and partner id X' -//2b13: Incomming, chrif_accountdeletion -> 'Delete acc XX, if the player is on, kick ....' -//2b14: Incomming, chrif_accountban -> 'not sure: kick the player with message XY' -//2b15: Incomming, chrif_recvgmaccounts -> 'receive gm accs from charserver (seems to be incomplete !)' +//2b12: Incoming, chrif_divorce -> 'divorce a wedding of charid X and partner id X' +//2b13: Incoming, chrif_accountdeletion -> 'Delete acc XX, if the player is on, kick ....' +//2b14: Incoming, chrif_accountban -> 'not sure: kick the player with message XY' +//2b15: Incoming, chrif_recvgmaccounts -> 'receive gm accs from charserver (seems to be incomplete !)' //2b16: Outgoing, chrif_ragsrvinfo -> 'sends motd / rates ....' //2b17: Outgoing, chrif_char_offline -> 'tell the charserver that the char is now offline' //2b18: Outgoing, chrif_char_reset_offline -> 'set all players OFF!' //2b19: Outgoing, chrif_char_online -> 'tell the charserver that the char .. is online' //2b1a: Outgoing, chrif_buildfamelist -> 'Build the fame ranking lists and send them' -//2b1b: Incomming, chrif_recvfamelist -> 'Receive fame ranking lists' +//2b1b: Incoming, chrif_recvfamelist -> 'Receive fame ranking lists' //2b1c: Outgoing, chrif_save_scdata -> 'Send sc_data of player for saving.' -//2b1d: Incomming, chrif_load_scdata -> 'received sc_data of player for loading.' +//2b1d: Incoming, chrif_load_scdata -> 'received sc_data of player for loading.' //2b1e: Incoming, chrif_update_ip -> 'Reqest forwarded from char-server for interserver IP sync.' [Lance] -//2b1f: Incomming, chrif_disconnectplayer -> 'disconnects a player (aid X) with the message XY ... 0x81 ..' [Sirius] -//2b20: Incomming, chrif_removemap -> 'remove maps of a server (sample: its going offline)' [Sirius] -//2b21: Incomming, chrif_save_ack. Returned after a character has been "final saved" on the char-server. [Skotlex] -//2b22: Incomming, chrif_updatefamelist_ack. Updated one position in the fame list. -//2b24-2b27: FREE +//2b1f: Incoming, chrif_disconnectplayer -> 'disconnects a player (aid X) with the message XY ... 0x81 ..' [Sirius] +//2b20: Incoming, chrif_removemap -> 'remove maps of a server (sample: its going offline)' [Sirius] +//2b21: Incoming, chrif_save_ack. Returned after a character has been "final saved" on the char-server. [Skotlex] +//2b22: Incoming, chrif_updatefamelist_ack. Updated one position in the fame list. +//2b23: Outgoing, chrif_keepalive. charserver ping. +//2b24: Incoming, chrif_keepalive_ack. charserver ping reply. +//2b25-2b27: FREE int chrif_connected = 0; int char_fd = 0; //Using 0 instead of -1 is safer against crashes. [Skotlex] @@ -376,7 +378,7 @@ int chrif_sendmapack(int fd) chrif_state = 2; //If there are players online, send them to the char-server. [Skotlex] - send_users_tochar(-1, gettick(), 0, 0); + send_users_tochar(); //Re-save any storages that were modified in the disconnection time. [Skotlex] do_reconnect_map(); @@ -995,6 +997,8 @@ int chrif_recvfamelist(int fd) return 0; } +/// fame ranking update confirmation +/// R 2b22 .B .B .L int chrif_updatefamelist_ack(int fd) { struct fame_list* list; @@ -1096,6 +1100,7 @@ int chrif_load_scdata(int fd) /*========================================== * Send rates and motd to char server [Wizputer] + * S 2b16 .w .w .w .w .256B *------------------------------------------*/ int chrif_ragsrvinfo(int base_rate, int job_rate, int drop_rate) { @@ -1110,6 +1115,7 @@ int chrif_load_scdata(int fd) WFIFOW(char_fd,2) = base_rate; WFIFOW(char_fd,4) = job_rate; WFIFOW(char_fd,6) = drop_rate; + WFIFOW(char_fd,8) = sizeof(buf) + 10; if ((fp = fopen(motd_txt, "r")) != NULL) { if (fgets(buf, sizeof(buf), fp) != NULL) @@ -1120,13 +1126,11 @@ int chrif_load_scdata(int fd) break; } } - WFIFOW(char_fd,8) = sizeof(buf) + 10; memcpy(WFIFOP(char_fd,10), buf, sizeof(buf)); } fclose(fp); } else { memset(buf, 0, sizeof(buf)); //No data found, send empty packets? - WFIFOW(char_fd,8) = sizeof(buf) + 10; memcpy(WFIFOP(char_fd,10), buf, sizeof(buf)); } WFIFOSET(char_fd,WFIFOW(char_fd,8)); @@ -1226,6 +1230,18 @@ void chrif_update_ip(int fd) WFIFOSET(fd,6); } +// pings the charserver +void chrif_keepalive(int fd) +{ + WFIFOHEAD(fd,2); + WFIFOW(fd,0) = 0x2b23; + WFIFOSET(fd,2); +} + +void chrif_keepalive_ack(int fd) +{ +} + /*========================================== * *------------------------------------------*/ @@ -1283,7 +1299,7 @@ int chrif_parse(int fd) case 0x2af9: chrif_connectack(fd); break; case 0x2afb: chrif_sendmapack(fd); break; case 0x2afd: chrif_authok(fd); break; - case 0x2b00: map_setusers(fd); break; + case 0x2b00: map_setusers(RFIFOL(fd,2)); chrif_keepalive(fd); break; case 0x2b03: clif_charselectok(RFIFOL(fd,2)); break; case 0x2b04: chrif_recvmap(fd); break; case 0x2b06: chrif_changemapserverack(RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), RFIFOW(fd,18), RFIFOW(fd,20), RFIFOW(fd,22), RFIFOL(fd,24), RFIFOW(fd,28)); break; @@ -1303,6 +1319,7 @@ int chrif_parse(int fd) case 0x2b20: chrif_removemap(fd); break; case 0x2b21: chrif_save_ack(fd); break; case 0x2b22: chrif_updatefamelist_ack(fd); break; + case 0x2b24: chrif_keepalive_ack(fd); break; default: if (battle_config.error_log) ShowError("chrif_parse : unknown packet (session #%d): 0x%x. Disconnecting.\n", fd, cmd); @@ -1316,19 +1333,22 @@ int chrif_parse(int fd) return 0; } +int ping_char_server(int tid, unsigned int tick, int id, int data) +{ + chrif_check(-1); + chrif_keepalive(char_fd); + return 0; +} + +// unused int send_usercount_tochar(int tid, unsigned int tick, int id, int data) { int count; - static int last_count = 0; chrif_check(-1); map_getallusers(&count); - if (count == last_count) //No need to waste packets. - return 0; - last_count = count; - WFIFOHEAD(char_fd,4); WFIFOW(char_fd,0) = 0x2afe; WFIFOW(char_fd,2) = count; @@ -1340,7 +1360,7 @@ int send_usercount_tochar(int tid, unsigned int tick, int id, int data) * timerŠÖ” * ¡‚±‚ÌmapŽI‚ÉŒq‚ª‚Á‚Ä‚¢‚éƒNƒ‰ƒCƒAƒ“ƒgl”‚ðcharŽI‚Ö‘—‚é *------------------------------------------*/ -int send_users_tochar(int tid, unsigned int tick, int id, int data) +int send_users_tochar(void) { int count, users=0, i; struct map_session_data **all_sd; @@ -1430,22 +1450,20 @@ int do_final_chrif(void) *------------------------------------------*/ int do_init_chrif(void) { + auth_db = idb_alloc(DB_OPT_RELEASE_DATA); + add_timer_func_list(check_connect_char_server, "check_connect_char_server"); - add_timer_func_list(send_usercount_tochar, "send_usercount_tochar"); - add_timer_func_list(send_users_tochar, "send_users_tochar"); + add_timer_func_list(ping_char_server, "ping_char_server"); add_timer_func_list(auth_db_cleanup, "auth_db_cleanup"); + // establish map-char connection if not present add_timer_interval(gettick() + 1000, check_connect_char_server, 0, 0, 10 * 1000); -#ifdef TXT_ONLY - //Txt needs this more frequently because it is used for the online.html file. - add_timer_interval(gettick() + 1000, send_users_tochar, 0, 0, UPDATE_INTERVAL); -#else - add_timer_interval(gettick() + 1000, send_users_tochar, 0, 0, CHECK_INTERVAL); - add_timer_interval(gettick() + 1000, send_usercount_tochar, 0, 0, UPDATE_INTERVAL); -#endif - add_timer_interval(gettick() + 1000, auth_db_cleanup, 0, 0, 30 * 1000); - auth_db = idb_alloc(DB_OPT_RELEASE_DATA); + // keep the map-char connection alive + add_timer_interval(gettick() + 1000, ping_char_server, 0, 0, ((int)stall_time-2) * 1000); + + // wipe stale data for timed-out client connection requests + add_timer_interval(gettick() + 1000, auth_db_cleanup, 0, 0, 30 * 1000); return 0; } diff --git a/src/map/chrif.h b/src/map/chrif.h index 71f402233..1ae274f57 100644 --- a/src/map/chrif.h +++ b/src/map/chrif.h @@ -44,7 +44,7 @@ int chrif_save_scdata(struct map_session_data *sd); int chrif_ragsrvinfo(int base_rate,int job_rate, int drop_rate); int chrif_char_offline(struct map_session_data *sd); int chrif_char_reset_offline(void); -int send_users_tochar(int tid, unsigned int tick, int id, int data); +int send_users_tochar(void); int chrif_char_online(struct map_session_data *sd); int chrif_changesex(int id, int sex); int chrif_chardisconnect(struct map_session_data *sd); diff --git a/src/map/map.c b/src/map/map.c index 52153c55d..495676082 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -159,16 +159,11 @@ int enable_spy = 0; //To enable/disable @spy commands, which consume too much cp int enable_grf = 0; //To enable/disable reading maps from GRF files, bypassing mapcache [blackhole89] /*========================================== - * ‘SmapŽI?Œv‚Å‚ÌÚ??Ý’è - * (charŽI‚©‚ç‘—‚ç‚ê‚Ä‚­‚é) + * server player count (of all mapservers) *------------------------------------------*/ -void map_setusers(int fd) +void map_setusers(int users) { - map_users = RFIFOL(fd,2); - // send some answer - WFIFOHEAD(fd, 2); - WFIFOW(fd,0) = 0x2718; - WFIFOSET(fd,2); + map_users = users; } /*========================================== -- cgit v1.2.3-70-g09d2 From bcb283d696d5ec4d7b6a2dfd2ba52cf2a3011fb4 Mon Sep 17 00:00:00 2001 From: zephyrus Date: Thu, 14 Feb 2008 01:18:19 +0000 Subject: - Added some new config settings: homunculus_autoloot, idle_no_autoloot, max_guild_alliance. - Added a code to activate a Kill Steal protection and the required mapflags. * (I will explain this later on forums). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12203 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 3 ++ conf/atcommand_athena.conf | 9 +++++ conf/battle/guild.conf | 5 +++ conf/battle/homunc.conf | 3 ++ conf/battle/monster.conf | 6 +++ conf/battle/player.conf | 4 ++ src/map/atcommand.c | 85 ++++++++++++++++++++++++++++++++++++++++- src/map/battle.c | 38 +++++++++++-------- src/map/battle.h | 4 ++ src/map/guild.c | 10 ++--- src/map/map.h | 9 +++++ src/map/mob.c | 94 ++++++++++++++++++++++++++++++++++++++++++---- src/map/mob.h | 1 + src/map/npc.c | 2 + src/map/unit.c | 2 + 15 files changed, 246 insertions(+), 29 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 4fa49f97a..0f54b3368 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -17,6 +17,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. * Added some security checks in mail system [Zephyrus] - This supose to fix a bug reported in 622 to limit to MAX_ZENY. - Also add more checks to free space in your inventory to receive items. + * Added some new config settings: [Zephyrus] + - homunculus_autoloot, idle_no_autoloot, max_guild_alliance. + - Added a code to activate a Kill Steal protection and the required mapflags. 2008/02/11 * 'Forget me Not' no longer blocks ASPD bonuses from working or prevents their re-casting, they are simply dispelled when the effect takes place. diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 622ee3be6..c541b1308 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -131,6 +131,9 @@ jailtime: 1 hominfo: 1 homstats: 1 +// Kill Steal Protection +noks: 1 + //--------------------------- // 10: Super player+ commands @@ -146,6 +149,9 @@ go: 10 // Enables/disables autolooting from killed mobs. autoloot: 10 +// Enables/disables autolooting an item. +alootid: 10 + // Allows you continue vending offline. autotrade: 10 at: 10 @@ -278,6 +284,9 @@ gpvpon: 40 gvgoff: 40 gpvpoff: 40 +// Activate/Deactivate kill steal protection on a map +allowks: 40 + // Modifies your HP/SP. heal: 40 diff --git a/conf/battle/guild.conf b/conf/battle/guild.conf index 9fa3fb424..4f714f8ed 100644 --- a/conf/battle/guild.conf +++ b/conf/battle/guild.conf @@ -62,3 +62,8 @@ gvg_eliminate_time: 7000 // and does changing emblems require it? (Note 1) // P.S: This skill is not implemented on official servers require_glory_guild: no + +// Limit Guild alliances. Value is 0 to 3. +// If you want to change this value, clear the guild alliance table. +// Default is 3 +max_guild_alliance: 3 diff --git a/conf/battle/homunc.conf b/conf/battle/homunc.conf index 2acff0a5e..c57c9f9b0 100644 --- a/conf/battle/homunc.conf +++ b/conf/battle/homunc.conf @@ -43,3 +43,6 @@ hvan_explosion_intimate: 45000 // Show stat growth to the owner when an Homunculus levels up homunculus_show_growth: no + +// If a monster is killed only by homunculus, can autoloot works? +homunculus_autoloot: yes diff --git a/conf/battle/monster.conf b/conf/battle/monster.conf index 58111ab2d..2208d8da3 100644 --- a/conf/battle/monster.conf +++ b/conf/battle/monster.conf @@ -199,3 +199,9 @@ mob_clear_delay: 0 // Type 0: On the player that did the most damage to the mob. // NOTE: This affects who gains the Castle when the Emperium is broken. mob_npc_event_type: 1 + +// Time in milliseconds to actitave protection against Kill Steal +// Set to 0 to disable it. +// If this is activated and a player is using @noks, damage from others players (KS) not in the party +// will be reduced to 0. +ksprotection: 0 diff --git a/conf/battle/player.conf b/conf/battle/player.conf index 58f0f9bb1..b8c1544a5 100644 --- a/conf/battle/player.conf +++ b/conf/battle/player.conf @@ -135,3 +135,7 @@ bone_drop: 0 // 3 = both Normal Classes on Peco have Big Size // and Baby Classes on Peco have Medium Size character_size: 0 + +// Idle characters can receive autoloot? +// Set to the time in seconds where an idle character will stop receiving items from Autoloot. +idle_no_autoloot: 120 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 588eff87b..35e644681 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -6085,9 +6085,55 @@ int atcommand_autoloot(const int fd, struct map_session_data* sd, const char* co clif_displaymessage(fd, atcmd_output); }else clif_displaymessage(fd, "Autoloot is now off."); + + if (sd->state.autoloot && sd->state.autolootid) { + // Autolootitem should be turned off + sd->state.autolootid = 0; + clif_displaymessage(fd, "Autolootitem is now off."); + } + return 0; -} +} +/*========================================== + * @autolootitem + *------------------------------------------*/ +int atcommand_autolootitem(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + struct item_data *item_data = NULL; + + if (!message || !*message) { + if (sd->state.autolootid) { + sd->state.autolootid = 0; + clif_displaymessage(fd, "Autolootitem have been turned OFF."); + } else + clif_displaymessage(fd, "Please, enter Item name or its ID (usage: @autolootitem )."); + return -1; + } + + if ((item_data = itemdb_exists(atoi(message))) == NULL) + item_data = itemdb_searchname(message); + + if (!item_data) { + // No items founds in the DB with Id or Name + clif_displaymessage(fd, "Item not found."); + return -1; + } + + sd->state.autolootid = item_data->nameid; // Autoloot Activated + + sprintf(atcmd_output, "Autolooting Item: '%s'/'%s' {%d}", + item_data->name, item_data->jname, item_data->nameid); + clif_displaymessage(fd, atcmd_output); + + if (sd->state.autolootid && sd->state.autoloot) { + // Autoloot should be turned off + sd->state.autoloot = 0; + clif_displaymessage(fd, "Autoloot is now off (cannot be actitaved together)."); + } + + return 0; +} /*========================================== * It is made to rain. @@ -8115,8 +8161,42 @@ int atcommand_feelreset(const int fd, struct map_session_data* sd, const char* c return 0; } +/*========================================== + * Kill Steal Protection + *------------------------------------------*/ +int atcommand_ksprotection(const int fd, struct map_session_data *sd, const char *command, const char *message) +{ + nullpo_retr(-1,sd); + if( sd->state.noks ) { + sd->state.noks = 0; + sprintf(atcmd_output, "[ K.S Protection Inactive ]"); + } else { + sprintf(atcmd_output, "[ K.S Protection Active ]"); + sd->state.noks = 1; + } + clif_displaymessage(fd, atcmd_output); + return 0; +} +/*========================================== + * Map Kill Steal Protection Setting + *------------------------------------------*/ +int atcommand_allowks(const int fd, struct map_session_data *sd, const char *command, const char *message) +{ + nullpo_retr(-1,sd); + + if( map[sd->bl.m].flag.allowks ) { + map[sd->bl.m].flag.allowks = 0; + sprintf(atcmd_output, "[ Map K.S Protection Active ]"); + } else { + map[sd->bl.m].flag.allowks = 1; + sprintf(atcmd_output, "[ Map K.S Protection Inactive ]"); + } + + clif_displaymessage(fd, atcmd_output); + return 0; +} /*========================================== * atcommand_info[] structure definition @@ -8348,6 +8428,7 @@ AtCommandInfo atcommand_info[] = { { "disguiseall", 99, atcommand_disguiseall }, { "changelook", 60, atcommand_changelook }, { "autoloot", 10, atcommand_autoloot }, + { "alootid", 10, atcommand_autolootitem }, { "mobinfo", 1, atcommand_mobinfo }, { "monsterinfo", 1, atcommand_mobinfo }, { "mi", 1, atcommand_mobinfo }, @@ -8407,6 +8488,8 @@ AtCommandInfo atcommand_info[] = { { "showmobs", 10, atcommand_showmobs }, { "feelreset", 10, atcommand_feelreset }, { "mail", 1, atcommand_mail }, + { "noks", 0, atcommand_ksprotection }, + { "allowks", 6, atcommand_allowks }, }; diff --git a/src/map/battle.c b/src/map/battle.c index cd54a2e39..21c2c751d 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -259,6 +259,9 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i if (!damage) return 0; + if( mob_ksprotected(src, bl) ) + return 0; + if (bl->type == BL_PC) { sd=(struct map_session_data *)bl; //Special no damage states @@ -3139,23 +3142,22 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f case BL_PC: { TBL_PC *sd = (TBL_PC*) s_bl; - if (sd->state.killer && s_bl != t_bl) + if( s_bl != t_bl ) { - state |= BCT_ENEMY; //Is on a killing rampage :O - strip_enemy = 0; - } else - if (sd->duel_group && t_bl != s_bl && // Duel [LuzZza] - !( - (!battle_config.duel_allow_pvp && map[m].flag.pvp) || - (!battle_config.duel_allow_gvg && map_flag_gvg(m)) - )) - { - if (t_bl->type == BL_PC && - (sd->duel_group == ((TBL_PC*)t_bl)->duel_group)) - //Duel targets can ONLY be your enemy, nothing else. - return (BCT_ENEMY&flag)?1:-1; - else // You can't target anything out of your duel - return 0; + if( sd->state.killer ) + { + state |= BCT_ENEMY; //Is on a killing rampage :O + strip_enemy = 0; + } + else if( sd->duel_group && !((!battle_config.duel_allow_pvp && map[m].flag.pvp) || (!battle_config.duel_allow_gvg && map_flag_gvg(m))) ) + { + if (t_bl->type == BL_PC && + (sd->duel_group == ((TBL_PC*)t_bl)->duel_group)) + //Duel targets can ONLY be your enemy, nothing else. + return (BCT_ENEMY&flag)?1:-1; + else // You can't target anything out of your duel + return 0; + } } if (map_flag_gvg(m) && !sd->status.guild_id && t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->guardian_data) @@ -3650,6 +3652,10 @@ static const struct _battle_data { { "sg_miracle_skill_duration", &battle_config.sg_miracle_skill_duration, 3600000, 0, INT_MAX, }, { "hvan_explosion_intimate", &battle_config.hvan_explosion_intimate, 45000, 0, 100000, }, { "quest_exp_rate", &battle_config.quest_exp_rate, 100, 0, INT_MAX, }, + { "homunculus_autoloot", &battle_config.homunculus_autoloot, 0, 0, 1, }, + { "idle_no_autoloot", &battle_config.idle_no_autoloot, 0, 0, INT_MAX, }, + { "max_guild_alliance", &battle_config.max_guild_alliance, 3, 1, 3, }, + { "ksprotection", &battle_config.ksprotection, 5000, 0, INT_MAX, }, }; diff --git a/src/map/battle.h b/src/map/battle.h index cc956453b..1483d8915 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -438,6 +438,10 @@ extern struct Battle_Config int homunculus_show_growth ; //[orn] int homunculus_friendly_rate; int quest_exp_rate; + int homunculus_autoloot; + int idle_no_autoloot; + int max_guild_alliance; + int ksprotection; } battle_config; void do_init_battle(void); diff --git a/src/map/guild.c b/src/map/guild.c index a9670400a..e591fc838 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -1250,11 +1250,11 @@ int guild_reqalliance(struct map_session_data *sd,struct map_session_data *tsd) if(sd->status.guild_id == tsd->status.guild_id) return 0; - if( guild_get_alliance_count(g[0],0)>=3 ) { + if( guild_get_alliance_count(g[0],0) >= battle_config.max_guild_alliance ) { clif_guild_allianceack(sd,4); return 0; } - if( guild_get_alliance_count(g[1],0)>=3 ) { + if( guild_get_alliance_count(g[1],0) >= battle_config.max_guild_alliance ) { clif_guild_allianceack(sd,3); return 0; } @@ -1300,12 +1300,12 @@ int guild_reply_reqalliance(struct map_session_data *sd,int account_id,int flag) g=guild_search(sd->status.guild_id); tg=guild_search(tsd->status.guild_id); - if(g==NULL || guild_get_alliance_count(g,0)>=3){ + if(g==NULL || guild_get_alliance_count(g,0) >= battle_config.max_guild_alliance){ clif_guild_allianceack(sd,4); clif_guild_allianceack(tsd,3); return 0; } - if(tg==NULL || guild_get_alliance_count(tg,0)>=3){ + if(tg==NULL || guild_get_alliance_count(tg,0) >= battle_config.max_guild_alliance){ clif_guild_allianceack(sd,3); clif_guild_allianceack(tsd,4); return 0; @@ -1367,7 +1367,7 @@ int guild_opposition(struct map_session_data *sd,struct map_session_data *tsd) if(sd->status.guild_id == tsd->status.guild_id) return 0; - if( guild_get_alliance_count(g,1)>=3 ) { + if( guild_get_alliance_count(g,1) >= battle_config.max_guild_alliance ) { clif_guild_oppositionack(sd,1); return 0; } diff --git a/src/map/map.h b/src/map/map.h index 84d041569..69f007b60 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -551,6 +551,8 @@ struct map_session_data { unsigned doridori : 1; unsigned ignoreAll : 1; unsigned short autoloot; + unsigned short autolootid; // [Zephyrus] + unsigned noks : 1; // [Zeph Kill Steal Protection] struct guild *gmaster_flag; } state; struct { @@ -612,6 +614,7 @@ struct map_session_data { unsigned int canuseitem_tick; // [Skotlex] unsigned int cantalk_tick; unsigned int cansendmail_tick; // [Mail System Flood Protection] + unsigned int ks_floodprotect_tick; // [Kill Steal Protection] short weapontype1,weapontype2; short disguise; // [Valaris] @@ -911,6 +914,11 @@ struct mob_data { unsigned int tdmg; //Stores total damage given to the mob, for exp calculations. [Skotlex] int level; int target_id,attacked_id; + + // Kill Steal Protection + int owner_id; + unsigned int ks_tick; + unsigned int next_walktime,last_thinktime,last_linktime; short move_fail_count; short lootitem_count; @@ -1168,6 +1176,7 @@ struct map_data { int npc_num; int users; struct map_flag { + unsigned allowks : 1; // [Kill Steal Protection] unsigned nomemo : 1; unsigned noteleport : 1; unsigned noreturn : 1; diff --git a/src/map/mob.c b/src/map/mob.c index 1f78ec8d5..2f1a8f2cc 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -10,6 +10,7 @@ #include "../common/ers.h" #include "../common/strlib.h" #include "../common/utils.h" +#include "../common/socket.h" #include "map.h" #include "path.h" @@ -275,6 +276,80 @@ int mob_get_random_id(int type, int flag, int lv) return class_; } +/*========================================== + * Kill Steal Protection [Zephyrus] + *------------------------------------------*/ +bool mob_ksprotected (struct block_list *src, struct block_list *target) +{ + struct block_list *s_bl; + struct map_session_data *sd, *pl_sd; + struct mob_data *md; + unsigned int tick = gettick(); + char output[128]; + + if( !battle_config.ksprotection ) + return false; // KS Protection Disabled + + if( !(md = BL_CAST(BL_MOB,target)) ) + return false; // Tarjet is not MOB + + if( (s_bl = battle_get_master(src)) == NULL ) + s_bl = src; + + if( !(sd = BL_CAST(BL_PC,s_bl)) ) + return false; // Master is not PC + + do { + if( map[md->bl.m].flag.allowks || map[md->bl.m].flag.gvg || map[md->bl.m].flag.pvp ) + return false; // Ignores GVG, PVP and AllowKS map flags + + if( md->db->mexp || md->master_id ) + return false; // MVP and Slaves ignores KS + + if( sd->bl.id == md->owner_id ) + break; // Same player + + if( !md->owner_id || !(pl_sd = map_id2sd(md->owner_id)) ) + break; // Not owner or owner offline + + if( pl_sd->bl.m != md->bl.m ) + break; // Owner on different map + + if( DIFF_TICK(md->ks_tick, tick) <= 0 ) + break; // Protection Time's Out + + if( !pl_sd->state.noks ) + return false; // No KS Protected, but this is necessary to protect normal players + + if( pl_sd->status.party_id && pl_sd->status.party_id == sd->status.party_id ) + break; // Same Party Allow KS + + // Message to KS + if( DIFF_TICK(sd->ks_floodprotect_tick, tick) <= 0 ) + { + sprintf(output, "[KS Warning!! - Owner : %s]", pl_sd->status.name); + clif_disp_onlyself(sd, output, strlen(output)); + + sd->ks_floodprotect_tick = tick + 2000; + } + + // Message to Owner + if( DIFF_TICK(pl_sd->ks_floodprotect_tick, tick) <= 0 ) + { + sprintf(output, "[Warning!! - %s is KS you]", sd->status.name); + clif_disp_onlyself(pl_sd, output, strlen(output)); + + pl_sd->ks_floodprotect_tick = tick + 2000; + } + + return true; + } while(0); + + md->owner_id = sd->bl.id; + md->ks_tick = tick + battle_config.ksprotection; + + return false; +} struct mob_data *mob_once_spawn_sub(struct block_list *bl, int m, short x, short y, const char *mobname, int class_, const char *event) { @@ -1522,8 +1597,9 @@ static int mob_delay_item_drop(int tid, unsigned int tick, int id, int data) * Sets the item_drop into the item_drop_list. * Also performs logging and autoloot if enabled. * rate is the drop-rate of the item, required for autoloot. + * flag : Killed only by homunculus? *------------------------------------------*/ -static void mob_item_drop(struct mob_data *md, struct item_drop_list *dlist, struct item_drop *ditem, int loot, int drop_rate) +static void mob_item_drop(struct mob_data *md, struct item_drop_list *dlist, struct item_drop *ditem, int loot, int drop_rate, unsigned short flag) { TBL_PC* sd; @@ -1538,7 +1614,7 @@ static void mob_item_drop(struct mob_data *md, struct item_drop_list *dlist, str sd = map_charid2sd(dlist->first_charid); if( sd == NULL ) sd = map_charid2sd(dlist->second_charid); if( sd == NULL ) sd = map_charid2sd(dlist->third_charid); - if( sd && drop_rate <= sd->state.autoloot + if( sd && (drop_rate <= sd->state.autoloot || ditem->item_data.nameid == sd->state.autolootid) && sd->idletime >= (last_tick - battle_config.idle_no_autoloot) && (battle_config.homunculus_autoloot?1:!flag) #ifdef AUTOLOOT_DISTANCE && check_distance_blxy(&sd->bl, dlist->x, dlist->y, AUTOLOOT_DISTANCE) #endif @@ -1777,6 +1853,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) } pt[DAMAGELOG_SIZE]; int i,temp,count,pnum=0,m=md->bl.m; unsigned int mvp_damage, tick = gettick(); + unsigned short flaghom = 1; // [Zephyrus] Does the mob only received damage from homunculus? if(src && src->type == BL_PC) { sd = (struct map_session_data *)src; @@ -1851,6 +1928,9 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) } tmpsd[i] = tsd; // record as valid damage-log entry + + if(!md->dmglog[i].flag && flaghom) + flaghom = 0; // Damage received from other Types != Homunculus } if(!battle_config.exp_calc_type && count > 1) @@ -2045,13 +2125,13 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) } // Announce first, or else ditem will be freed. [Lance] // By popular demand, use base drop rate for autoloot code. [Skotlex] - mob_item_drop(md, dlist, ditem, 0, md->db->dropitem[i].p); + mob_item_drop(md, dlist, ditem, 0, md->db->dropitem[i].p, flaghom); } // Ore Discovery [Celest] if (sd == mvp_sd && pc_checkskill(sd,BS_FINDINGORE)>0 && battle_config.finding_ore_rate/10 >= rand()%10000) { ditem = mob_setdropitem(itemdb_searchrandomid(IG_FINDINGORE), 1); - mob_item_drop(md, dlist, ditem, 0, battle_config.finding_ore_rate/10); + mob_item_drop(md, dlist, ditem, 0, battle_config.finding_ore_rate/10, 0); } if(sd) { @@ -2077,7 +2157,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) if (rand()%10000 >= drop_rate) continue; itemid = (sd->add_drop[i].id > 0) ? sd->add_drop[i].id : itemdb_searchrandomid(sd->add_drop[i].group); - mob_item_drop(md, dlist, mob_setdropitem(itemid,1), 0, drop_rate); + mob_item_drop(md, dlist, mob_setdropitem(itemid,1), 0, drop_rate, 0); } } @@ -2093,7 +2173,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) // process items looted by the mob if(md->lootitem) { for(i = 0; i < md->lootitem_count; i++) - mob_item_drop(md, dlist, mob_setlootitem(&md->lootitem[i]), 1, 10000); + mob_item_drop(md, dlist, mob_setlootitem(&md->lootitem[i]), 1, 10000, 0); } if (dlist->item) //There are drop items. add_timer(tick + (!battle_config.delay_battle_damage?500:0), mob_delay_item_drop, (int)dlist, 0); @@ -2109,7 +2189,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) dlist->third_charid = (third_sd ? third_sd->status.char_id : 0); dlist->item = NULL; for(i = 0; i < md->lootitem_count; i++) - mob_item_drop(md, dlist, mob_setlootitem(&md->lootitem[i]), 1, 10000); + mob_item_drop(md, dlist, mob_setlootitem(&md->lootitem[i]), 1, 10000, 0); add_timer(tick + (!battle_config.delay_battle_damage?500:0), mob_delay_item_drop, (int)dlist, 0); } diff --git a/src/map/mob.h b/src/map/mob.h index bdb35a21f..2590c90ed 100644 --- a/src/map/mob.h +++ b/src/map/mob.h @@ -157,6 +157,7 @@ struct mob_data *mob_once_spawn_sub(struct block_list *bl, int m, int mob_once_spawn(struct map_session_data* sd,int m,short x,short y,const char* mobname,int class_,int amount,const char* event); int mob_once_spawn_area(struct map_session_data* sd,int m,int x0,int y0,int x1,int y1,const char* mobname,int class_,int amount,const char* event); +bool mob_ksprotected (struct block_list *src, struct block_list *target); int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobname, int class_, const char* event, int guardian); // Spawning Guardians [Valaris] int mob_guardian_guildchange(struct block_list *bl,va_list ap); //Change Guardian's ownership. [Skotlex] diff --git a/src/map/npc.c b/src/map/npc.c index dbb190ebb..6f1c59806 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -2318,6 +2318,8 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con } map[m].flag.nosave = state; } + else if (!strcmpi(w3,"allowks")) + map[m].flag.allowks=state; // [Kill Steal Protection] else if (!strcmpi(w3,"nomemo")) map[m].flag.nomemo=state; else if (!strcmpi(w3,"noteleport")) diff --git a/src/map/unit.c b/src/map/unit.c index 3ae4aa091..d0d06ff06 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -807,6 +807,8 @@ int unit_skilluse_id2(struct block_list *src, int target_id, short skill_num, sh if(skillnotok(skill_num, sd)) // [MouseJstr] return 0; + mob_ksprotected(src, map_id2bl(target_id)); + switch(skill_num) { //Check for skills that auto-select target case MO_CHAINCOMBO: -- cgit v1.2.3-70-g09d2 From fc5f99e563e4e88646e0f63f96ad33baba69cfd5 Mon Sep 17 00:00:00 2001 From: ultramage Date: Thu, 14 Feb 2008 19:11:11 +0000 Subject: Removed/replaced all calls to map_getallusers (followup to r12195). Trashed @whozeny (from r269). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12204 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 3 + conf/Changelog.txt | 2 + conf/atcommand_athena.conf | 3 - src/map/atcommand.c | 598 +++++++++++++++++++++------------------------ 4 files changed, 288 insertions(+), 318 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 0f54b3368..08dcff7d1 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,9 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2008/02/14 + * Removed/replaced all calls to map_getallusers (followup to r12195) + * Trashed @whozeny (from r269) [ultramage] 2008/02/13 * Changes to memory manager: [FlavioJS] - fixed blocks that are fully used not being detected (and not freed) in diff --git a/conf/Changelog.txt b/conf/Changelog.txt index 2354eb6d2..f2170eb4c 100644 --- a/conf/Changelog.txt +++ b/conf/Changelog.txt @@ -1,5 +1,7 @@ Date Added +2008/02/14 + * Removed atcommand @whozeny [ultramage] 2008/02/11 * Added 'input_min_value' and 'input_max_value' to script_athena.conf. [FlavioJS] 2008/01/22 diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index c541b1308..69d9e3c71 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -238,9 +238,6 @@ whomap3: 20 // @who+@who2+who3 whogm: 20 -// Displays a sorted list of the ammount of zeny each conected player has at hand. -whozeny: 20 - // Change your appearence to other players to a mob. disguise: 20 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 35e644681..956d32040 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -789,8 +789,9 @@ int atcommand_who(const int fd, struct map_session_data* sd, const char* command *------------------------------------------*/ int atcommand_whomap3(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, count, users; + struct map_session_data *pl_sd; + struct s_mapiterator* iter; + int count; int pl_GM_level, GM_level; int map_id; char map_name[MAP_NAME_LENGTH_EXT]; @@ -808,22 +809,24 @@ int atcommand_whomap3(const int fd, struct map_session_data* sd, const char* com count = 0; GM_level = pc_isGM(sd); - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i])) { - pl_GM_level = pc_isGM(pl_sd); - if (!((battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level - if (pl_sd->bl.m == map_id) { - if (pl_GM_level > 0) - sprintf(atcmd_output, "Name: %s (GM:%d) | Location: %s %d %d", pl_sd->status.name, pl_GM_level, mapindex_id2name(pl_sd->mapindex), pl_sd->bl.x, pl_sd->bl.y); - else - sprintf(atcmd_output, "Name: %s | Location: %s %d %d", pl_sd->status.name, mapindex_id2name(pl_sd->mapindex), pl_sd->bl.x, pl_sd->bl.y); - clif_displaymessage(fd, atcmd_output); - count++; - } - } - } + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + pl_GM_level = pc_isGM(pl_sd); + if( pl_sd->bl.m != map_id ) + continue; + if( (battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level) ) + continue; + + if (pl_GM_level > 0) + sprintf(atcmd_output, "Name: %s (GM:%d) | Location: %s %d %d", pl_sd->status.name, pl_GM_level, mapindex_id2name(pl_sd->mapindex), pl_sd->bl.x, pl_sd->bl.y); + else + sprintf(atcmd_output, "Name: %s | Location: %s %d %d", pl_sd->status.name, mapindex_id2name(pl_sd->mapindex), pl_sd->bl.x, pl_sd->bl.y); + clif_displaymessage(fd, atcmd_output); + count++; } + mapit_free(iter); if (count == 0) sprintf(atcmd_output, msg_txt(54), map[map_id].name); // No player found in map '%s'. @@ -842,8 +845,9 @@ int atcommand_whomap3(const int fd, struct map_session_data* sd, const char* com *------------------------------------------*/ int atcommand_whomap2(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, count, users; + struct map_session_data *pl_sd; + struct s_mapiterator* iter; + int count; int pl_GM_level, GM_level; int map_id = 0; char map_name[MAP_NAME_LENGTH_EXT]; @@ -863,22 +867,24 @@ int atcommand_whomap2(const int fd, struct map_session_data* sd, const char* com count = 0; GM_level = pc_isGM(sd); - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i])) { - pl_GM_level = pc_isGM(pl_sd); - if (!((battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level - if (pl_sd->bl.m == map_id) { - if (pl_GM_level > 0) - sprintf(atcmd_output, "Name: %s (GM:%d) | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_GM_level, pl_sd->status.base_level, job_name(pl_sd->status.class_), pl_sd->status.job_level); - else - sprintf(atcmd_output, "Name: %s | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_sd->status.base_level, job_name(pl_sd->status.class_), pl_sd->status.job_level); - clif_displaymessage(fd, atcmd_output); - count++; - } - } - } + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + pl_GM_level = pc_isGM(pl_sd); + if( pl_sd->bl.m != map_id ) + continue; + if( (battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level) ) + continue; + + if (pl_GM_level > 0) + sprintf(atcmd_output, "Name: %s (GM:%d) | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_GM_level, pl_sd->status.base_level, job_name(pl_sd->status.class_), pl_sd->status.job_level); + else + sprintf(atcmd_output, "Name: %s | BLvl: %d | Job: %s (Lvl: %d)", pl_sd->status.name, pl_sd->status.base_level, job_name(pl_sd->status.class_), pl_sd->status.job_level); + clif_displaymessage(fd, atcmd_output); + count++; } + mapit_free(iter); if (count == 0) sprintf(atcmd_output, msg_txt(54), map[map_id].name); // No player found in map '%s'. @@ -899,8 +905,9 @@ int atcommand_whomap(const int fd, struct map_session_data* sd, const char* comm { char temp0[100]; char temp1[100]; - struct map_session_data *pl_sd, **pl_allsd; - int i, count, users; + struct map_session_data *pl_sd; + struct s_mapiterator* iter; + int count; int pl_GM_level, GM_level; int map_id = 0; char map_name[MAP_NAME_LENGTH_EXT]; @@ -925,31 +932,31 @@ int atcommand_whomap(const int fd, struct map_session_data* sd, const char* comm count = 0; GM_level = pc_isGM(sd); - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i])) { - pl_GM_level = pc_isGM(pl_sd); - if (!((battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level))) { // you can look only lower or same level - if (pl_sd->bl.m == map_id) { - g = guild_search(pl_sd->status.guild_id); - if (g == NULL) - sprintf(temp1, "None"); - else - sprintf(temp1, "%s", g->name); - p = party_search(pl_sd->status.party_id); - if (p == NULL) - sprintf(temp0, "None"); - else - sprintf(temp0, "%s", p->party.name); - if (pl_GM_level > 0) - sprintf(atcmd_output, "Name: %s (GM:%d) | Party: '%s' | Guild: '%s'", pl_sd->status.name, pl_GM_level, temp0, temp1); - else - sprintf(atcmd_output, "Name: %s | Party: '%s' | Guild: '%s'", pl_sd->status.name, temp0, temp1); - clif_displaymessage(fd, atcmd_output); - count++; - } - } - } + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + pl_GM_level = pc_isGM(pl_sd); + if( pl_sd->bl.m != map_id ) + continue; + if( (battle_config.hide_GM_session || (pl_sd->sc.option & OPTION_INVISIBLE)) && (pl_GM_level > GM_level) ) + continue; + + g = guild_search(pl_sd->status.guild_id); + if (g == NULL) + sprintf(temp1, "None"); + else + sprintf(temp1, "%s", g->name); + p = party_search(pl_sd->status.party_id); + if (p == NULL) + sprintf(temp0, "None"); + else + sprintf(temp0, "%s", p->party.name); + if (pl_GM_level > 0) + sprintf(atcmd_output, "Name: %s (GM:%d) | Party: '%s' | Guild: '%s'", pl_sd->status.name, pl_GM_level, temp0, temp1); + else + sprintf(atcmd_output, "Name: %s | Party: '%s' | Guild: '%s'", pl_sd->status.name, temp0, temp1); + clif_displaymessage(fd, atcmd_output); + count++; } if (count == 0) @@ -969,8 +976,9 @@ int atcommand_whomap(const int fd, struct map_session_data* sd, const char* comm *------------------------------------------*/ int atcommand_whogm(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, j, count, users; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; + int j, count; int pl_GM_level, GM_level; char match_text[200]; char player_name[NAME_LENGTH]; @@ -990,9 +998,10 @@ int atcommand_whogm(const int fd, struct map_session_data* sd, const char* comma count = 0; GM_level = pc_isGM(sd); - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - pl_sd = pl_allsd[i]; + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { pl_GM_level = pc_isGM(pl_sd); if (!pl_GM_level) continue; @@ -1034,6 +1043,7 @@ int atcommand_whogm(const int fd, struct map_session_data* sd, const char* comma clif_displaymessage(fd, atcmd_output); count++; } + mapit_free(iter); if (count == 0) clif_displaymessage(fd, msg_txt(150)); // No GM found. @@ -1047,81 +1057,6 @@ int atcommand_whogm(const int fd, struct map_session_data* sd, const char* comma return 0; } -int atcommand_whozeny(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd, **pl_allsd; - int i, j, count,c, users; - char match_text[100]; - char player_name[NAME_LENGTH]; - int *zeny; - int *counted; - - nullpo_retr(-1, sd); - - memset(atcmd_output, '\0', sizeof(atcmd_output)); - memset(match_text, '\0', sizeof(match_text)); - memset(player_name, '\0', sizeof(player_name)); - - if (sscanf(message, "%99[^\n]", match_text) < 1) - strcpy(match_text, ""); - for (j = 0; match_text[j]; j++) - match_text[j] = TOLOWER(match_text[j]); - - count = 0; - pl_allsd = map_getallusers(&users); - if (users < 1) - { - clif_displaymessage(fd, msg_txt(28)); // No player found. - return 0; - } - zeny = (int *)aMallocA(users*sizeof(int)); - counted = (int *)aMallocA(users*sizeof(int)); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i])) { - memcpy(player_name, pl_sd->status.name, NAME_LENGTH); - for (j = 0; player_name[j]; j++) - player_name[j] = TOLOWER(player_name[j]); - if (strstr(player_name, match_text) != NULL) { // search with no case sensitive - zeny[count]=pl_sd->status.zeny; - counted[i]=0; - count++; - } - } - } - - qsort(zeny, count, sizeof(int), hightolow_compare); - for (c = 0; c < count && c < 50; c++) { - if(!zeny[c]) - continue; - for (i = 0; i < users; i++) { - if(!zeny[c]) - continue; - if ((pl_sd = pl_allsd[i]) && counted[i]==0) { - if(pl_sd->status.zeny==zeny[c]) { - sprintf(atcmd_output, "Name: %s | Zeny: %d", pl_sd->status.name, pl_sd->status.zeny); - clif_displaymessage(fd, atcmd_output); - zeny[c]=0; - counted[i]=1; - } - } - } - } - - if (count == 0) - clif_displaymessage(fd, msg_txt(28)); // No player found. - else if (count == 1) - clif_displaymessage(fd, msg_txt(29)); // 1 player found. - else { - sprintf(atcmd_output, msg_txt(30), count); // %d players found. - clif_displaymessage(fd, atcmd_output); - } - - aFree(zeny); - aFree(counted); - - return 0; -} - /*========================================== * *------------------------------------------*/ @@ -2017,11 +1952,6 @@ int atcommand_pvpoff(const int fd, struct map_session_data* sd, const char* comm { nullpo_retr(-1, sd); - //if (battle_config.pk_mode) { //disable command if server is in PK mode [Valaris] - // clif_displaymessage(fd, msg_txt(52)); // This option cannot be used in PK Mode. - // return -1; - //} - if (!map[sd->bl.m].flag.pvp) { clif_displaymessage(fd, msg_txt(160)); // PvP is already Off. return -1; @@ -2040,40 +1970,39 @@ int atcommand_pvpoff(const int fd, struct map_session_data* sd, const char* comm /*========================================== * *------------------------------------------*/ +static int atcommand_pvpon_sub(struct block_list *bl,va_list ap) +{ + TBL_PC* sd = (TBL_PC*)bl; + if (sd->pvp_timer == -1) { + sd->pvp_timer = add_timer(gettick() + 200, pc_calc_pvprank_timer, sd->bl.id, 0); + sd->pvp_rank = 0; + sd->pvp_lastusers = 0; + sd->pvp_point = 5; + sd->pvp_won = 0; + sd->pvp_lost = 0; + } + return 0; +} + int atcommand_pvpon(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, users; nullpo_retr(-1, sd); - //if (battle_config.pk_mode) { //disable command if server is in PK mode [Valaris] - // clif_displaymessage(fd, msg_txt(52)); // This option cannot be used in PK Mode. - // return -1; - //} - - if (!map[sd->bl.m].flag.pvp) { - map[sd->bl.m].flag.pvp = 1; - if (!battle_config.pk_mode) - { - clif_send0199(sd->bl.m, 1); - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && sd->bl.m == pl_sd->bl.m && pl_sd->pvp_timer == -1) { - pl_sd->pvp_timer = add_timer(gettick() + 200, pc_calc_pvprank_timer, pl_sd->bl.id, 0); - pl_sd->pvp_rank = 0; - pl_sd->pvp_lastusers = 0; - pl_sd->pvp_point = 5; - pl_sd->pvp_won = 0; - pl_sd->pvp_lost = 0; - } - } - } - clif_displaymessage(fd, msg_txt(32)); // PvP: On. - } else { + if (map[sd->bl.m].flag.pvp) { clif_displaymessage(fd, msg_txt(161)); // PvP is already On. return -1; } + map[sd->bl.m].flag.pvp = 1; + + if (!battle_config.pk_mode) + {// display pvp circle and rank + clif_send0199(sd->bl.m, 1); + map_foreachinmap(atcommand_pvpon_sub,sd->bl.m, BL_PC); + } + + clif_displaymessage(fd, msg_txt(32)); // PvP: On. + return 0; } @@ -2083,15 +2012,16 @@ int atcommand_pvpon(const int fd, struct map_session_data* sd, const char* comma int atcommand_gvgoff(const int fd, struct map_session_data* sd, const char* command, const char* message) { nullpo_retr(-1, sd); - if (map[sd->bl.m].flag.gvg) { - map[sd->bl.m].flag.gvg = 0; - clif_send0199(sd->bl.m, 0); - map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0); - clif_displaymessage(fd, msg_txt(33)); // GvG: Off. - } else { + + if (!map[sd->bl.m].flag.gvg) { clif_displaymessage(fd, msg_txt(162)); // GvG is already Off. return -1; } + + map[sd->bl.m].flag.gvg = 0; + clif_send0199(sd->bl.m, 0); + map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0); + clif_displaymessage(fd, msg_txt(33)); // GvG: Off. return 0; } @@ -2102,14 +2032,15 @@ int atcommand_gvgoff(const int fd, struct map_session_data* sd, const char* comm int atcommand_gvgon(const int fd, struct map_session_data* sd, const char* command, const char* message) { nullpo_retr(-1, sd); - if (!map[sd->bl.m].flag.gvg) { - map[sd->bl.m].flag.gvg = 1; - clif_send0199(sd->bl.m, 3); - clif_displaymessage(fd, msg_txt(34)); // GvG: On. - } else { + + if (map[sd->bl.m].flag.gvg) { clif_displaymessage(fd, msg_txt(163)); // GvG is already On. return -1; } + + map[sd->bl.m].flag.gvg = 1; + clif_send0199(sd->bl.m, 3); + clif_displaymessage(fd, msg_txt(34)); // GvG: On. return 0; } @@ -3548,17 +3479,23 @@ int atcommand_day(const int fd, struct map_session_data* sd, const char* command *------------------------------------------*/ int atcommand_doom(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, users; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; + nullpo_retr(-1, sd); clif_specialeffect(&sd->bl,450,ALL_SAMEMAP); - pl_allsd = map_getallusers(&users); - for(i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && pl_sd->fd != fd && pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can doom only lower or same gm level + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if (pl_sd->fd != fd && pc_isGM(sd) >= pc_isGM(pl_sd)) + { status_kill(&pl_sd->bl); clif_displaymessage(pl_sd->fd, msg_txt(61)); // The holy messenger has given judgement. } } + mapit_free(iter); + clif_displaymessage(fd, msg_txt(62)); // Judgement was made. return 0; @@ -3569,20 +3506,23 @@ int atcommand_doom(const int fd, struct map_session_data* sd, const char* comman *------------------------------------------*/ int atcommand_doommap(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, users; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; + nullpo_retr(-1, sd); clif_specialeffect(&sd->bl,450,ALL_CLIENT); - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && pl_sd->fd != fd && sd->bl.m == pl_sd->bl.m && - pc_isGM(sd) >= pc_isGM(pl_sd)) // you can doom only lower or same gm level + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if (pl_sd->fd != fd && sd->bl.m == pl_sd->bl.m && pc_isGM(sd) >= pc_isGM(pl_sd)) { status_kill(&pl_sd->bl); -// clif_specialeffect(&pl_sd->bl,450,1); clif_displaymessage(pl_sd->fd, msg_txt(61)); // The holy messenger has given judgement. } } + mapit_free(iter); + clif_displaymessage(fd, msg_txt(62)); // Judgement was made. return 0; @@ -3607,16 +3547,16 @@ static void atcommand_raise_sub(struct map_session_data* sd) *------------------------------------------*/ int atcommand_raise(const int fd, struct map_session_data* sd, const char* command, const char* message) { - int i, users; - struct map_session_data **all_sd; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; nullpo_retr(-1, sd); - all_sd = map_getallusers(&users); + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + atcommand_raise_sub(pl_sd); + mapit_free(iter); - for (i = 0; i < users; i++) { - atcommand_raise_sub(all_sd[i]); - } clif_displaymessage(fd, msg_txt(64)); // Mercy has been granted. return 0; @@ -3627,17 +3567,17 @@ int atcommand_raise(const int fd, struct map_session_data* sd, const char* comma *------------------------------------------*/ int atcommand_raisemap(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data **pl_allsd; - int i, users; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; nullpo_retr(-1, sd); - pl_allsd = map_getallusers(&users); + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + if (sd->bl.m == pl_sd->bl.m) + atcommand_raise_sub(pl_sd); + mapit_free(iter); - for (i = 0; i < users; i++) { - if (sd->bl.m == pl_allsd[i]->bl.m) - atcommand_raise_sub(pl_allsd[i]); - } clif_displaymessage(fd, msg_txt(64)); // Mercy has been granted. return 0; @@ -3680,18 +3620,19 @@ int atcommand_kick(const int fd, struct map_session_data* sd, const char* comman *------------------------------------------*/ int atcommand_kickall(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, users; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; nullpo_retr(-1, sd); - pl_allsd = map_getallusers(&users); - - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kick only lower or same gm level + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kick only lower or same gm level if (sd->status.account_id != pl_sd->status.account_id) clif_GM_kick(NULL, pl_sd); } } + mapit_free(iter); clif_displaymessage(fd, msg_txt(195)); // All players have been kicked! @@ -3899,15 +3840,17 @@ int atcommand_agitend(const int fd, struct map_session_data* sd, const char* com *------------------------------------------*/ int atcommand_mapexit(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, users; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; + nullpo_retr(-1, sd); - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && sd->status.account_id != pl_sd->status.account_id) + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + if (sd->status.account_id != pl_sd->status.account_id) clif_GM_kick(NULL, pl_sd); - } + mapit_free(iter); + clif_GM_kick(NULL, sd); flush_fifos(); @@ -3958,9 +3901,9 @@ int atcommand_idsearch(const int fd, struct map_session_data* sd, const char* co *------------------------------------------*/ int atcommand_recallall(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i; - int count, users; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; + int count; nullpo_retr(-1, sd); memset(atcmd_output, '\0', sizeof(atcmd_output)); @@ -3971,10 +3914,11 @@ int atcommand_recallall(const int fd, struct map_session_data* sd, const char* c } count = 0; - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && sd->status.account_id != pl_sd->status.account_id && - pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can recall only lower or same level + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if (sd->status.account_id != pl_sd->status.account_id && pc_isGM(sd) >= pc_isGM(pl_sd)) + { if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) count++; else { @@ -3986,6 +3930,7 @@ int atcommand_recallall(const int fd, struct map_session_data* sd, const char* c } } } + mapit_free(iter); clif_displaymessage(fd, msg_txt(92)); // All characters recalled! if (count) { @@ -4001,8 +3946,9 @@ int atcommand_recallall(const int fd, struct map_session_data* sd, const char* c *------------------------------------------*/ int atcommand_guildrecall(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, users, count; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; + int count; char guild_name[NAME_LENGTH]; struct guild *g; nullpo_retr(-1, sd); @@ -4020,32 +3966,37 @@ int atcommand_guildrecall(const int fd, struct map_session_data* sd, const char* return -1; } - if ((g = guild_searchname(guild_name)) != NULL || // name first to avoid error when name begin with a number - (g = guild_search(atoi(message))) != NULL) { - count = 0; - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && sd->status.account_id != pl_sd->status.account_id && - pl_sd->status.guild_id == g->guild_id) { - if (pc_isGM(pl_sd) > pc_isGM(sd)) - continue; //Skip GMs greater than you. - if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) - count++; - else - pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2); - } - } - sprintf(atcmd_output, msg_txt(93), g->name); // All online characters of the %s guild are near you. - clif_displaymessage(fd, atcmd_output); - if (count) { - sprintf(atcmd_output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count); - clif_displaymessage(fd, atcmd_output); - } - } else { + if ((g = guild_searchname(guild_name)) == NULL && // name first to avoid error when name begin with a number + (g = guild_search(atoi(message))) == NULL) + { clif_displaymessage(fd, msg_txt(94)); // Incorrect name/ID, or no one from the guild is online. return -1; } + count = 0; + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.guild_id == g->guild_id) + { + if (pc_isGM(pl_sd) > pc_isGM(sd)) + continue; //Skip GMs greater than you. + if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) + count++; + else + pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2); + } + } + mapit_free(iter); + + sprintf(atcmd_output, msg_txt(93), g->name); // All online characters of the %s guild are near you. + clif_displaymessage(fd, atcmd_output); + if (count) { + sprintf(atcmd_output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count); + clif_displaymessage(fd, atcmd_output); + } + return 0; } @@ -4054,11 +4005,11 @@ int atcommand_guildrecall(const int fd, struct map_session_data* sd, const char* *------------------------------------------*/ int atcommand_partyrecall(const int fd, struct map_session_data* sd, const char* command, const char* message) { - int i; - struct map_session_data *pl_sd, **pl_allsd; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; char party_name[NAME_LENGTH]; struct party_data *p; - int count, users; + int count; nullpo_retr(-1, sd); memset(party_name, '\0', sizeof(party_name)); @@ -4074,33 +4025,37 @@ int atcommand_partyrecall(const int fd, struct map_session_data* sd, const char* return -1; } - if ((p = party_searchname(party_name)) != NULL || // name first to avoid error when name begin with a number - (p = party_search(atoi(message))) != NULL) { - count = 0; - - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && sd->status.account_id != pl_sd->status.account_id && - pl_sd->status.party_id == p->party.party_id) { - if (pc_isGM(pl_sd) > pc_isGM(sd)) - continue; //Skip GMs greater than you. - if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) - count++; - else - pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2); - } - } - sprintf(atcmd_output, msg_txt(95), p->party.name); // All online characters of the %s party are near you. - clif_displaymessage(fd, atcmd_output); - if (count) { - sprintf(atcmd_output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count); - clif_displaymessage(fd, atcmd_output); - } - } else { + if ((p = party_searchname(party_name)) == NULL && // name first to avoid error when name begin with a number + (p = party_search(atoi(message))) == NULL) + { clif_displaymessage(fd, msg_txt(96)); // Incorrect name or ID, or no one from the party is online. return -1; } + count = 0; + + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if (sd->status.account_id != pl_sd->status.account_id && pl_sd->status.party_id == p->party.party_id) + { + if (pc_isGM(pl_sd) > pc_isGM(sd)) + continue; //Skip GMs greater than you. + if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) + count++; + else + pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2); + } + } + mapit_free(iter); + + sprintf(atcmd_output, msg_txt(95), p->party.name); // All online characters of the %s party are near you. + clif_displaymessage(fd, atcmd_output); + if (count) { + sprintf(atcmd_output, "Because you are not authorised to warp from some maps, %d player(s) have not been recalled.", count); + clif_displaymessage(fd, atcmd_output); + } + return 0; } @@ -4271,46 +4226,52 @@ int atcommand_reloadgmdb(const int fd, struct map_session_data* sd, const char* *------------------------------------------*/ int atcommand_mapinfo(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; + struct map_session_data* pl_sd; + struct s_mapiterator* iter; struct npc_data *nd = NULL; struct chat_data *cd = NULL; char direction[12]; - int m_id, i, chat_num, users, list = 0; + int i, m_id, chat_num, list = 0; unsigned short m_index; + char mapname[24]; + nullpo_retr(-1, sd); memset(atcmd_output, '\0', sizeof(atcmd_output)); - memset(atcmd_player_name, '\0', sizeof(atcmd_player_name)); + memset(mapname, '\0', sizeof(mapname)); memset(direction, '\0', sizeof(direction)); - sscanf(message, "%d %23[^\n]", &list, atcmd_player_name); + sscanf(message, "%d %23[^\n]", &list, mapname); if (list < 0 || list > 3) { clif_displaymessage(fd, "Please, enter at least a valid list number (usage: @mapinfo <0-3> [map])."); return -1; } - if (atcmd_player_name[0] == '\0') { - safestrncpy(atcmd_player_name, mapindex_id2name(sd->mapindex), MAP_NAME_LENGTH); + if (mapname[0] == '\0') { + safestrncpy(mapname, mapindex_id2name(sd->mapindex), MAP_NAME_LENGTH); m_id = map_mapindex2mapid(sd->mapindex); } else { - m_id = map_mapname2mapid(atcmd_player_name); + m_id = map_mapname2mapid(mapname); } + if (m_id < 0) { clif_displaymessage(fd, msg_txt(1)); // Map not found. return -1; } - m_index = mapindex_name2id(atcmd_player_name); //This one shouldn't fail since the previous seek did not. + m_index = mapindex_name2id(mapname); //This one shouldn't fail since the previous seek did not. clif_displaymessage(fd, "------ Map Info ------"); + + // count chats (for initial message) chat_num = 0; - pl_allsd = map_getallusers(&users); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && (cd = (struct chat_data*)map_id2bl(pl_sd->chatID))) { + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + if( (cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) != NULL && pl_sd->mapindex == m_index && cd->usersd[0] == pl_sd ) chat_num++; - } - } - sprintf(atcmd_output, "Map Name: %s | Players In Map: %d | NPCs In Map: %d | Chats In Map: %d", atcmd_player_name, map[m_id].users, map[m_id].npc_num, chat_num); + mapit_free(iter); + + sprintf(atcmd_output, "Map Name: %s | Players In Map: %d | NPCs In Map: %d | Chats In Map: %d", mapname, map[m_id].users, map[m_id].npc_num, chat_num); clif_displaymessage(fd, atcmd_output); clif_displaymessage(fd, "------ Map Flags ------"); strcpy(atcmd_output,"PvP Flags: "); @@ -4431,17 +4392,21 @@ int atcommand_mapinfo(const int fd, struct map_session_data* sd, const char* com break; case 1: clif_displaymessage(fd, "----- Players in Map -----"); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && pl_sd->mapindex == m_index) { + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if (pl_sd->mapindex == m_index) { sprintf(atcmd_output, "Player '%s' (session #%d) | Location: %d,%d", pl_sd->status.name, pl_sd->fd, pl_sd->bl.x, pl_sd->bl.y); clif_displaymessage(fd, atcmd_output); } } + mapit_free(iter); break; case 2: clif_displaymessage(fd, "----- NPCs in Map -----"); - for (i = 0; i < map[m_id].npc_num;) { + for (i = 0; i < map[m_id].npc_num;) + { nd = map[m_id].npc[i]; switch(nd->ud.dir) { case 0: strcpy(direction, "North"); break; @@ -4462,18 +4427,22 @@ int atcommand_mapinfo(const int fd, struct map_session_data* sd, const char* com break; case 3: clif_displaymessage(fd, "----- Chats in Map -----"); - for (i = 0; i < users; i++) { - if ((pl_sd = pl_allsd[i]) && (cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) && + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + { + if ((cd = (struct chat_data*)map_id2bl(pl_sd->chatID)) != NULL && pl_sd->mapindex == m_index && - cd->usersd[0] == pl_sd) { - sprintf(atcmd_output, "Chat %d: %s | Player: %s | Location: %d %d", - i, cd->title, pl_sd->status.name, cd->bl.x, cd->bl.y); + cd->usersd[0] == pl_sd) + { + sprintf(atcmd_output, "Chat: %s | Player: %s | Location: %d %d", + cd->title, pl_sd->status.name, cd->bl.x, cd->bl.y); clif_displaymessage(fd, atcmd_output); sprintf(atcmd_output, " Users: %d/%d | Password: %s | Public: %s", cd->users, cd->limit, cd->pass, (cd->pub) ? "Yes" : "No"); clif_displaymessage(fd, atcmd_output); } } + mapit_free(iter); break; default: // normally impossible to arrive here clif_displaymessage(fd, "Please, enter at least a valid list number (usage: @mapinfo <0-3> [map])."); @@ -5213,8 +5182,9 @@ int atcommand_disguise(const int fd, struct map_session_data* sd, const char* co *------------------------------------------*/ int atcommand_disguiseall(const int fd, struct map_session_data* sd, const char* command, const char* message) { - int mob_id=0, i=0, users; - struct map_session_data *pl_sd, **pl_allsd; + int mob_id=0, i=0; + struct map_session_data *pl_sd; + struct s_mapiterator* iter; nullpo_retr(-1, sd); if (!message || !*message) { @@ -5230,12 +5200,11 @@ int atcommand_disguiseall(const int fd, struct map_session_data* sd, const char* return -1; } - pl_allsd = map_getallusers(&users); - for(i=0; i < users; i++) - { - if((pl_sd = pl_allsd[i])) - pc_disguise(pl_sd, mob_id); - } + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + pc_disguise(pl_sd, mob_id); + mapit_free(iter); + clif_displaymessage(fd, msg_txt(122)); // Disguise applied. return 0; } @@ -5262,16 +5231,16 @@ int atcommand_undisguise(const int fd, struct map_session_data* sd, const char* *------------------------------------------*/ int atcommand_undisguiseall(const int fd, struct map_session_data* sd, const char* command, const char* message) { - struct map_session_data *pl_sd, **pl_allsd; - int i, users; + struct map_session_data *pl_sd; + struct s_mapiterator* iter; nullpo_retr(-1, sd); - pl_allsd = map_getallusers(&users); - - for(i=0; i < users; i++) { - if((pl_sd = pl_allsd[i]) && pl_sd->disguise) + iter = mapit_getallusers(); + for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) + if( pl_sd->disguise ) pc_disguise(pl_sd, 0); - } + mapit_free(iter); + clif_displaymessage(fd, msg_txt(124)); // Undisguise applied. return 0; @@ -8409,7 +8378,6 @@ AtCommandInfo atcommand_info[] = { { "uptime", 1, atcommand_uptime }, { "changesex", 60, atcommand_changesex }, { "mute", 80, atcommand_mute }, - { "whozeny", 20, atcommand_whozeny }, { "refresh", 1, atcommand_refresh }, { "identify", 40, atcommand_identify }, { "gmotd", 20, atcommand_gmotd }, -- cgit v1.2.3-70-g09d2 From 98bc5a50c724236000263526a0539caeb11a3200 Mon Sep 17 00:00:00 2001 From: zephyrus Date: Fri, 29 Feb 2008 00:05:45 +0000 Subject: - Added @cash and @points command to manage your cash/kafra points. - Optimized code. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12266 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 4 ++++ src/map/atcommand.c | 33 ++++++++++++++++++++++++++++++++ src/map/pc.c | 47 ++++++++++++++++++++++++---------------------- 3 files changed, 62 insertions(+), 22 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 69d9e3c71..933ac35bd 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -439,6 +439,10 @@ evilclone: 50 //---------------- // 60: GM commands +// Add or Remove Cash/Kafra points to yourself +cash: 60 +points: 60 + // Starts Guild Wars agitstart: 60 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 5c3fb80a3..f2947372b 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -7965,6 +7965,37 @@ int atcommand_reject(const int fd, struct map_session_data* sd, const char* comm return 0; } +/*=================================== + * Cash Points + *-----------------------------------*/ +int atcommand_cash(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + int value; + nullpo_retr(-1, sd); + + if( !message || !*message || (value = atoi(message)) == 0 ) { + clif_displaymessage(fd, "Please, enter an amount."); + return -1; + } + + if( !strcmpi(command+1,"cash") ) + { + if( value > 0 ) + pc_getcash(sd, value, 0); + else + pc_paycash(sd, value, 0); + } + else + { // @points + if( value > 0 ) + pc_getcash(sd, 0, value); + else + pc_paycash(sd, value, value); + } + + return 0; +} + /*=================================== * Away message (@away, @aw) [LuzZza] *-----------------------------------*/ @@ -8481,6 +8512,8 @@ AtCommandInfo atcommand_info[] = { { "mail", 1, atcommand_mail }, { "noks", 0, atcommand_ksprotection }, { "allowks", 6, atcommand_allowks }, + { "cash", 60, atcommand_cash }, + { "points", 60, atcommand_cash }, }; diff --git a/src/map/pc.c b/src/map/pc.c index 551fa9c55..3f1128e2a 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2708,21 +2708,25 @@ void pc_paycash(struct map_session_data *sd, int prize, int points) int cash = prize - points; nullpo_retv(sd); - sd->cashPoints -= cash; - sd->kafraPoints -= points; + if( cash > 0 ) + { + if( (sd->cashPoints -= cash) < 0 ) + sd->cashPoints = 0; - pc_setaccountreg(sd,"#CASHPOINTS",sd->cashPoints); - pc_setaccountreg(sd,"#KAFRAPOINTS",sd->kafraPoints); + pc_setaccountreg(sd,"#CASHPOINTS",sd->cashPoints); - if( points ) - { - sprintf(output, "Used %d kafra points. %d points remaining.", points, sd->kafraPoints); + sprintf(output, "Used %d cash points. %d points remaining.", cash, sd->cashPoints); clif_disp_onlyself(sd, output, strlen(output)); } - if( cash ) + if( points > 0 ) { - sprintf(output, "Used %d cash points. %d points remaining.", cash, sd->cashPoints); + if( (sd->kafraPoints -= points) < 0 ) + sd->kafraPoints = 0; + + pc_setaccountreg(sd,"#KAFRAPOINTS",sd->kafraPoints); + + sprintf(output, "Used %d kafra points. %d points remaining.", points, sd->kafraPoints); clif_disp_onlyself(sd, output, strlen(output)); } } @@ -2732,27 +2736,26 @@ void pc_getcash(struct map_session_data *sd, int cash, int points) char output[128]; nullpo_retv(sd); - if( cash > MAX_ZENY - sd->cashPoints ) - cash = MAX_ZENY - sd->cashPoints; - - sd->cashPoints += cash; - - if( points > MAX_ZENY - sd->kafraPoints ) - points = MAX_ZENY - sd->kafraPoints; - - sd->kafraPoints += points; - - pc_setaccountreg(sd,"#CASHPOINTS",sd->cashPoints); - pc_setaccountreg(sd,"#KAFRAPOINTS",sd->kafraPoints); - if( cash > 0 ) { + if( cash > MAX_ZENY - sd->cashPoints ) + cash = MAX_ZENY - sd->cashPoints; + + sd->cashPoints += cash; + pc_setaccountreg(sd,"#CASHPOINTS",sd->cashPoints); + sprintf(output, "Gained %d cash points. Total %d points", points, sd->cashPoints); clif_disp_onlyself(sd, output, strlen(output)); } if( points > 0 ) { + if( points > MAX_ZENY - sd->kafraPoints ) + points = MAX_ZENY - sd->kafraPoints; + + sd->kafraPoints += points; + pc_setaccountreg(sd,"#KAFRAPOINTS",sd->kafraPoints); + sprintf(output, "Gained %d kafra points. Total %d points", points, sd->kafraPoints); clif_disp_onlyself(sd, output, strlen(output)); } -- cgit v1.2.3-70-g09d2 From c14faa2c92a458259abfa14a71e7c05bbdc08027 Mon Sep 17 00:00:00 2001 From: zephyrus Date: Fri, 29 Feb 2008 23:10:29 +0000 Subject: - Starting preparatives for Auctions System. - Added the @auction command to open the auctions. Just to start working on it and if someone wants to help. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12270 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 3 +++ src/char_sql/int_auction.c | 32 ++++++++++++++++++++++++++++++++ src/char_sql/int_auction.h | 8 ++++++++ src/common/mmo.h | 16 ++++++++++++++++ src/map/atcommand.c | 12 ++++++++++++ src/map/clif.c | 18 ++++++++++++++++++ src/map/clif.h | 3 +++ 7 files changed, 92 insertions(+) create mode 100644 src/char_sql/int_auction.c create mode 100644 src/char_sql/int_auction.h (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 933ac35bd..17b58159b 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -104,6 +104,9 @@ storage: 1 // Opens your mailbox. mail: 1 +// Opens auctions window. +auctions: 1 + // Locate someone on a map, returns your coordinates if the person isn't on. where: 1 diff --git a/src/char_sql/int_auction.c b/src/char_sql/int_auction.c new file mode 100644 index 000000000..a3213d647 --- /dev/null +++ b/src/char_sql/int_auction.c @@ -0,0 +1,32 @@ +// Copyright (c) Athena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#include "../common/mmo.h" +#include "../common/malloc.h" +#include "../common/db.h" +#include "../common/showmsg.h" +#include "../common/socket.h" +#include "../common/strlib.h" +#include "../common/sql.h" +#include "char.h" +#include "inter.h" + +#include +#include +#include + +static DBMap* auction_db = NULL; // int auction_id -> struct auction* + +int inter_auction_sql_init(void) +{ + auction_db = idb_alloc(DB_OPT_RELEASE_DATA); + + return 0; +} + +void inter_auction_sql_final(void) +{ + auction_db->destroy(auction_db,NULL); + + return; +} diff --git a/src/char_sql/int_auction.h b/src/char_sql/int_auction.h new file mode 100644 index 000000000..061f0855d --- /dev/null +++ b/src/char_sql/int_auction.h @@ -0,0 +1,8 @@ +// Copyright (c) Athena Dev Teams - Licensed under GNU GPL +// For more information, see LICENCE in the main folder + +#ifndef _INT_AUCTION_SQL_H_ +#define _INT_AUCTION_SQL_H_ + + +#endif /* _INT_AUCTION_SQL_H_ */ diff --git a/src/common/mmo.h b/src/common/mmo.h index ead8c8379..dc5931166 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -272,6 +272,22 @@ struct mail_data { struct mail_message msg[MAIL_MAX_INBOX]; }; +struct auction_data { + unsigned int auction_id; + int seller_id; + char seller_name[NAME_LENGTH]; + int buyer_id; + char buyer_name[NAME_LENGTH]; + + struct item item; + + unsigned short hours; + unsigned int price, buynow; + unsigned int timestamp; + + bool changed; // To know if data have been changed for save +}; + struct registry { int global_num; struct global_reg global[GLOBAL_REG_NUM]; diff --git a/src/map/atcommand.c b/src/map/atcommand.c index f2947372b..e32f288ce 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8169,6 +8169,17 @@ int atcommand_feelreset(const int fd, struct map_session_data* sd, const char* c return 0; } +/*========================================== + * AUCTION SYSTEM + *------------------------------------------*/ +int atcommand_auction(const int fd, struct map_session_data *sd, const char *command, const char *message) +{ + nullpo_retr(0,sd); + + clif_Auction_openwindow(sd); + return 0; +} + /*========================================== * Kill Steal Protection *------------------------------------------*/ @@ -8509,6 +8520,7 @@ AtCommandInfo atcommand_info[] = { { "homshuffle", 60, atcommand_homshuffle }, { "showmobs", 10, atcommand_showmobs }, { "feelreset", 10, atcommand_feelreset }, + { "auction", 60, atcommand_auction }, { "mail", 1, atcommand_mail }, { "noks", 0, atcommand_ksprotection }, { "allowks", 6, atcommand_allowks }, diff --git a/src/map/clif.c b/src/map/clif.c index 4ce9ff3c4..3378d785c 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -11752,6 +11752,24 @@ void clif_parse_cashshop_buy(int fd, struct map_session_data *sd) WFIFOSET(fd,12); } +/*========================================== + * AUCTIONS SYSTEM + *==========================================*/ +void clif_Auction_openwindow(struct map_session_data *sd) +{ + int fd = sd->fd; + + WFIFOHEAD(fd,12); + WFIFOW(fd,0) = 0x25f; + WFIFOL(fd,2) = 0; + WFIFOB(fd,6) = 0xb6; + WFIFOB(fd,7) = 0x00; + WFIFOB(fd,8) = 0xa6; + WFIFOB(fd,9) = 0xde; + WFIFOW(fd,10) = 0; + WFIFOSET(fd,12); +} + /*========================================== * Requesting equip of a player *------------------------------------------*/ diff --git a/src/map/clif.h b/src/map/clif.h index 1aa5edcf6..51dc0c417 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -413,4 +413,7 @@ void clif_Mail_getattachment(int fd, uint8 flag); void clif_cashshop_show(struct map_session_data *sd, struct npc_data *nd); +// AUCTION SYSTEM +void clif_Auction_openwindow(struct map_session_data *sd); + #endif /* _CLIF_H_ */ -- cgit v1.2.3-70-g09d2 From ae2d8225b1cedc01ff591faf8877ac9a3affe1de Mon Sep 17 00:00:00 2001 From: zephyrus Date: Fri, 29 Feb 2008 23:17:38 +0000 Subject: - Oops! Typo. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12271 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 17b58159b..025fc1c5b 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -105,7 +105,7 @@ storage: 1 mail: 1 // Opens auctions window. -auctions: 1 +auction: 1 // Locate someone on a map, returns your coordinates if the person isn't on. where: 1 -- cgit v1.2.3-70-g09d2 From e4ed82286f5f549101a577b455b7584b6fc20270 Mon Sep 17 00:00:00 2001 From: ultramage Date: Fri, 28 Mar 2008 18:53:51 +0000 Subject: Some more txt/sql login server synchronization: - removed the option to specify multiple IPs/subnets for 'ladminallowip' - removed the @gm command and all associated management code - removed the 'save unknown packets' code - removed the lengthy TXT ipban code (which was essentially a copy of what's already handled by the socket layer/packet_athena.conf) - implemented 'start_limited_time' in SQL (expiration for new accounts) - applied some missing TXT changes from the last update git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12446 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 9 + conf/atcommand_athena.conf | 1 - conf/help2.txt | 1 - conf/login_athena.conf | 48 +--- src/char/char.c | 32 --- src/char_sql/char.c | 41 ---- src/login/admin.c | 41 ---- src/login/login.c | 550 +++++++-------------------------------------- src/login/login.h | 43 ++-- src/login_sql/login.c | 56 +++-- src/login_sql/login.h | 43 ++-- src/map/atcommand.c | 25 --- src/map/chrif.c | 52 +---- src/map/chrif.h | 1 - 14 files changed, 161 insertions(+), 782 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 1a5f4f730..4a5fe3c3a 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,15 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2008/03/28 + * Some more txt/sql login server synchronization [ultramage] + - removed the option to specify multiple IPs/subnets for 'ladminallowip' + - removed the @gm command and all associated management code + - removed the 'save unknown packets' code + - removed the lengthy TXT ipban code (which was essentially a copy of + what's already handled by the socket layer/packet_athena.conf) + - implemented 'start_limited_time' in SQL (expiration for new accounts) + - applied some missing TXT changes from the last update 2008/03/27 * Updated SQL Files (item & mobs) [Toms] * Partial rewrite of the login server's auth system. diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 025fc1c5b..d2deb9777 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -774,7 +774,6 @@ clearweather: 99 //--------------------------------------------------------------- // 100: Disabled commands -gm: 100 //--------------------- // OTHER: not a command diff --git a/conf/help2.txt b/conf/help2.txt index 3a0772425..8f8330dbd 100644 --- a/conf/help2.txt +++ b/conf/help2.txt @@ -92,4 +92,3 @@ 99:@gat - For debugging (you inspect around gat) 99:@packet - For debugging (packet variety) 100:@nuke - -100:@GM - it becomes GM! (password is set in login_athena.conf) diff --git a/conf/login_athena.conf b/conf/login_athena.conf index f7ecb22bd..c5a9fb242 100644 --- a/conf/login_athena.conf +++ b/conf/login_athena.conf @@ -43,12 +43,8 @@ admin_state: no // NOTE: ladmin only works on TXT login servers. admin_pass: admin -// Indicate the IP that the server accepts for remote administration. -// put: 'all', or 'xxx.xxx.' (begin of an ip finished by '.' or a complete ip), -// or a network and its mask (example: '123.456.789.012/24' or '123.456.789.012/255.255.255.0') -// or 'clear' to suppress previous parameter (use it in import file mainly) -// Add as many IP's as you wish. -ladminallowip: all +// Indicate the IP/host that the server accepts for remote administration. +admin_allowed_ip: 127.0.0.1 // Console Commands // Allow for console commands to be used on/off @@ -58,19 +54,6 @@ console: off // Are logins case sensitive? (SQL only) case_sensitive: yes -// Gamemaster password, used with the @gm command to obtain GM commands (level of gm set with level_new_gm parameter). -// NOTICE: You should also change this one. -gm_pass: gm - -// Level of new GM created with @gm command. (default: 60) -// If you set to 0, you disable creation of new GM with @gm. -// To be able to create a gm with @gm, you must: -// - give a level to this value (not 0) -// - enable to level 0 the @gm command (atcommand_athena.conf) (default 100) -// - enable gm commands to normal player (battle_athena.conf, atcommand_gm_only parameter) -// - and normal player must give correct password when he use the @gm command -level_new_gm: 60 - // Can you use _M/_F to make new accounts on the server? new_account: yes @@ -93,21 +76,12 @@ gm_account_filename_check_timer: 15 // NOTE: The login-sql server needs the login logs to enable dynamic pass failure bans. log_login: yes -// Name of the file of that logs the unknown packets (for debug or hack check) -login_log_unknown_packets_filename: log/login_unknown_packets.log - //When set to yes, the login server will refuse connections from accounts that are considered online already. //When a login attempt is rejected, the account in question is also kicked from all connected char-servers. //It's safe to turn this off if there's only one char-server connected, or if the char-servers don't share //the same backend (ie: Multiple char servers reading from the same SQL tables) online_check: yes -// Indicate if the unknown packets are saved or not -//(the unknown packets coming from the char-server or ladministration does not relate to, which is always saved) -// Be careful: if you receive an attack, your hard disk can cause lag... -// So, active this option with a speed hard disk or for debug only. -save_unknown_packets: 0 - // Indicate how to display date in logs, to players, etc. date_format: %Y-%m-%d %H:%M:%S @@ -125,24 +99,6 @@ add_to_unlimited_account: off // 0 or more: new accounts was created by addition of the value (in sec) to the actual time (to set first limited time) start_limited_time: -1 -// Ipban features (TXT only): - -// Specify order of IP control if necessary (option: 'deny,allow', 'allow,deny', or 'mutual-failture') -// (how to use 'allow' and 'deny' information) -//order: allow,deny - -// Indicate the IP that the server accept. -// put: 'all', or 'xxx.xxx.' (begin of an ip finished by '.' or a complete ip), -// or a network and its mask (example: '123.456.789.012/24' or '123.456.789.012/255.255.255.0') -// or 'clear' to suppress previous parameter (use it in import file mainly) -// Add as many IP's as you wish. -//allow: all - -// Indicate the IP that the server refuse. -// Add as many IP's as you wish, as long as you put deny: before it. -//deny: 123.123.123.123 -//deny: 234.234.234.234 - // Check The clientversion set in the clientinfo ? check_client_version: no diff --git a/src/char/char.c b/src/char/char.c index 0acb967ad..62ac40338 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -2066,20 +2066,6 @@ int parse_fromlogin(int fd) RFIFOSKIP(fd,2); break; - case 0x2721: // gm reply - if (RFIFOREST(fd) < 10) - return 0; - { - unsigned char buf[10]; - WBUFW(buf,0) = 0x2b0b; - WBUFL(buf,2) = RFIFOL(fd,2); // account - WBUFL(buf,6) = RFIFOL(fd,6); // GM level - mapif_sendall(buf,10); - - RFIFOSKIP(fd,10); - } - break; - case 0x2723: // changesex reply (modified by [Yor]) if (RFIFOREST(fd) < 7) return 0; @@ -2905,24 +2891,6 @@ int parse_frommap(int fd) RFIFOSKIP(fd,6); break; - case 0x2b0a: // request to become GM - if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2)) - return 0; - if (login_fd > 0) { // don't send request if no login-server - WFIFOHEAD(login_fd, RFIFOW(fd,2)); - WFIFOW(login_fd,0) = 0x2720; - memcpy(WFIFOP(login_fd,2), RFIFOP(fd,2), RFIFOW(fd,2)-2); - WFIFOSET(login_fd, RFIFOW(fd,2)); - } else { - WFIFOHEAD(fd,10); - WFIFOW(fd,0) = 0x2b0b; - WFIFOL(fd,2) = RFIFOL(fd,4); - WFIFOL(fd,6) = 0; - WFIFOSET(fd,10); - } - RFIFOSKIP(fd, RFIFOW(fd,2)); - break; - case 0x2b0c: // Map server send information to change an email of an account -> login-server if (RFIFOREST(fd) < 86) return 0; diff --git a/src/char_sql/char.c b/src/char_sql/char.c index 917d0ae93..533946546 100644 --- a/src/char_sql/char.c +++ b/src/char_sql/char.c @@ -1762,35 +1762,6 @@ int parse_fromlogin(int fd) RFIFOSKIP(fd,2); break; - // gm reply. I don't want to support this function. - case 0x2721: - if (RFIFOREST(fd) < 10) - return 0; - -/* Note that this is the code from char-txt! Even uncommenting it will not work. - { - int oldacc, newacc; - unsigned char buf[64]; - if (RFIFOREST(fd) < 10) - return 0; - oldacc = RFIFOL(fd, 2); - newacc = RFIFOL(fd, 6); - RFIFOSKIP(fd, 10); - if (newacc > 0) { - for(i=0;i login-server if (RFIFOREST(fd) < 86) return 0; diff --git a/src/login/admin.c b/src/login/admin.c index 02e7a83ba..652d2368a 100644 --- a/src/login/admin.c +++ b/src/login/admin.c @@ -22,7 +22,6 @@ extern struct mmo_char_server server[MAX_SERVERS]; extern uint32 auth_num; extern int account_id_count; extern char GM_account_filename[1024]; -extern char login_log_unknown_packets_filename[1024]; int charif_sendallwos(int sfd, unsigned char *buf, unsigned int len); int search_account_index(char* account_name); @@ -894,46 +893,6 @@ int parse_admin(int fd) break; default: - { - FILE *logfp; - char tmpstr[24]; - time_t raw_time; - logfp = fopen(login_log_unknown_packets_filename, "a"); - if (logfp) { - time(&raw_time); - strftime(tmpstr, 23, login_config.date_format, localtime(&raw_time)); - fprintf(logfp, "%s: receiving of an unknown packet -> disconnection\n", tmpstr); - fprintf(logfp, "parse_admin: connection #%d (ip: %s), packet: 0x%x (with being read: %lu).\n", fd, ip, command, (unsigned long)RFIFOREST(fd)); - fprintf(logfp, "Detail (in hex):\n"); - fprintf(logfp, "---- 00-01-02-03-04-05-06-07 08-09-0A-0B-0C-0D-0E-0F\n"); - memset(tmpstr, '\0', sizeof(tmpstr)); - for(i = 0; i < RFIFOREST(fd); i++) { - if ((i & 15) == 0) - fprintf(logfp, "%04X ",i); - fprintf(logfp, "%02x ", RFIFOB(fd,i)); - if (RFIFOB(fd,i) > 0x1f) - tmpstr[i % 16] = RFIFOB(fd,i); - else - tmpstr[i % 16] = '.'; - if ((i - 7) % 16 == 0) // -8 + 1 - fprintf(logfp, " "); - else if ((i + 1) % 16 == 0) { - fprintf(logfp, " %s\n", tmpstr); - memset(tmpstr, '\0', sizeof(tmpstr)); - } - } - if (i % 16 != 0) { - for(j = i; j % 16 != 0; j++) { - fprintf(logfp, " "); - if ((j - 7) % 16 == 0) // -8 + 1 - fprintf(logfp, " "); - } - fprintf(logfp, " %s\n", tmpstr); - } - fprintf(logfp, "\n"); - fclose(logfp); - } - } ShowStatus("'ladmin': End of connection, unknown packet (ip: %s)\n", ip); set_eof(fd); return 0; diff --git a/src/login/login.c b/src/login/login.c index 01da9716c..1fefb5831 100644 --- a/src/login/login.c +++ b/src/login/login.c @@ -35,53 +35,26 @@ struct s_subnet { int subnet_count = 0; +// GM account management struct gm_account* gm_account_db = NULL; unsigned int GM_num = 0; // number of gm accounts -unsigned int GM_max = 0; +char GM_account_filename[1024] = "conf/GM_account.txt"; +long creation_time_GM_account_file; // tracks the last-changed timestamp of the gm accounts file +int gm_account_filename_check_timer = 15; // Timer to check if GM_account file has been changed and reload GM account automaticaly (in seconds; default: 15) //Account registration flood protection [Kevin] int allowed_regs = 1; int time_allowed = 10; //in seconds -unsigned int new_reg_tick = 0; -int num_regs = 0; -int account_id_count = START_ACCOUNT_NUM; +// data handling (TXT) char account_filename[1024] = "save/account.txt"; -char GM_account_filename[1024] = "conf/GM_account.txt"; -FILE *log_fp = NULL; -char login_log_unknown_packets_filename[1024] = "log/login_unknown_packets.log"; -int save_unknown_packets = 0; -long creation_time_GM_account_file; // tracks the last-changed timestamp of the gm accounts file -int gm_account_filename_check_timer = 15; // Timer to check if GM_account file has been changed and reload GM account automaticaly (in seconds; default: 15) - - -enum { - ACO_DENY_ALLOW = 0, - ACO_ALLOW_DENY, - ACO_MUTUAL_FAILTURE, - ACO_STRSIZE = 128, -}; - -int access_order = ACO_DENY_ALLOW; -int access_allownum = 0; -int access_denynum = 0; -char *access_allow = NULL; -char *access_deny = NULL; - -int access_ladmin_allownum = 0; -char *access_ladmin_allow = NULL; - -int start_limited_time = -1; // Starting additional sec from now for the limited time at creation of accounts (-1: unlimited time, 0 or more: additional sec from now) - -struct login_session_data { - uint16 md5keylen; - char md5key[20]; -}; // account database struct auth_data* auth_dat = NULL; -uint32 auth_num = 0, auth_max = 0; +unsigned int auth_num = 0, auth_max = 0; + +int account_id_count = START_ACCOUNT_NUM; // define the number of times that some players must authentify them before to save account file. // it's just about normal authentication. If an account is created or modified, save is immediatly done. @@ -92,13 +65,23 @@ uint32 auth_num = 0, auth_max = 0; #define AUTH_SAVE_FILE_DIVIDER 50 int auth_before_save_file = 0; // Counter. First save when 1st char-server do connection. + +// ladmin configuration bool admin_state = false; char admin_pass[24] = ""; -char gm_pass[64] = ""; -int level_new_gm = 60; +uint32 admin_allowed_ip = 0; int parse_admin(int fd); + +//----------------------------------------------------- +// Session data structure +//----------------------------------------------------- +struct login_session_data { + uint16 md5keylen; + char md5key[20]; +}; + //----------------------------------------------------- // Auth database //----------------------------------------------------- @@ -169,7 +152,7 @@ void remove_online_user(int account_id) static int waiting_disconnect_timer(int tid, unsigned int tick, int id, int data) { struct online_login_data* p = (struct online_login_data*)idb_get(online_db, id); - if( p != NULL && p->waiting_disconnect == id ) + if( p != NULL && p->waiting_disconnect == tid && p->account_id == id ) { p->waiting_disconnect = -1; remove_online_user(id); @@ -216,6 +199,7 @@ int isGM(int account_id) //---------------------------------------------------------------------- void addGM(int account_id, int level) { + static unsigned int GM_max = 0; unsigned int i; ARR_FIND( 0, auth_num, i, auth_dat[i].account_id == account_id ); @@ -311,118 +295,6 @@ int read_gm_account(void) return 0; } -//-------------------------------------------------------------- -// Test of the IP mask -// (ip: IP to be tested, str: mask x.x.x.x/# or x.x.x.x/y.y.y.y) -//-------------------------------------------------------------- -int check_ipmask(uint32 ip, const unsigned char *str) -{ - unsigned int i = 0, m = 0; - uint32 ip2, mask = 0; - uint32 a0, a1, a2, a3; - uint8* p = (uint8 *)&ip2, *p2 = (uint8 *)&mask; - - - // scan ip address - if (sscanf((const char*)str, "%u.%u.%u.%u/%n", &a0, &a1, &a2, &a3, &i) != 4 || i == 0) - return 0; - p[0] = (uint8)a3; p[1] = (uint8)a2; p[2] = (uint8)a1; p[3] = (uint8)a0; - - // scan mask - if (sscanf((const char*)str+i, "%u.%u.%u.%u", &a0, &a1, &a2, &a3) == 4) { - p2[0] = (uint8)a3; p2[1] = (uint8)a2; p2[2] = (uint8)a1; p2[3] = (uint8)a0; - } else if (sscanf((const char*)(str+i), "%u", &m) == 1 && m <= 32) { - for(i = 32 - m; i < 32; i++) - mask |= (1 << i); - } else { - ShowError("check_ipmask: invalid mask [%s].\n", str); - return 0; - } - - return ((ip & mask) == (ip2 & mask)); -} - -//--------------------- -// Access control by IP -//--------------------- -int check_ip(uint32 ip) -{ - int i; - char buf[20]; - char * access_ip; - enum { ACF_DEF, ACF_ALLOW, ACF_DENY } flag = ACF_DEF; - - if (access_allownum == 0 && access_denynum == 0) - return 1; // When there is no restriction, all IP are authorised. - -// + 012.345.: front match form, or -// all: all IP are matched, or -// 012.345.678.901/24: network form (mask with # of bits), or -// 012.345.678.901/255.255.255.0: network form (mask with ip mask) -// + Note about the DNS resolution (like www.ne.jp, etc.): -// There is no guarantee to have an answer. -// If we have an answer, there is no guarantee to have a 100% correct value. -// And, the waiting time (to check) can be long (over 1 minute to a timeout). That can block the software. -// So, DNS notation isn't authorised for ip checking. - sprintf(buf, "%u.%u.%u.%u.", CONVIP(ip)); - - for(i = 0; i < access_allownum; i++) { - access_ip = access_allow + i * ACO_STRSIZE; - if (memcmp(access_ip, buf, strlen(access_ip)) == 0 || check_ipmask(ip, (unsigned char*)access_ip)) { - if(access_order == ACO_ALLOW_DENY) - return 1; // With 'allow, deny' (deny if not allow), allow has priority - flag = ACF_ALLOW; - break; - } - } - - for(i = 0; i < access_denynum; i++) { - access_ip = access_deny + i * ACO_STRSIZE; - if (memcmp(access_ip, buf, strlen(access_ip)) == 0 || check_ipmask(ip, (unsigned char*)access_ip)) { - //flag = ACF_DENY; // not necessary to define flag - return 0; // At this point, if it's 'deny', we refuse connection. - } - } - - return (flag == ACF_ALLOW || access_order == ACO_DENY_ALLOW) ? 1:0; - // With 'mutual-failture', only 'allow' and non 'deny' IP are authorised. - // A non 'allow' (even non 'deny') IP is not authorised. It's like: if allowed and not denied, it's authorised. - // So, it's disapproval if you have no description at the time of 'mutual-failture'. - // With 'deny,allow' (allow if not deny), because here it's not deny, we authorise. -} - -//-------------------------------- -// Access control by IP for ladmin -//-------------------------------- -int check_ladminip(uint32 ip) -{ - int i; - char buf[20]; - char * access_ip; - - if (access_ladmin_allownum == 0) - return 1; // When there is no restriction, all IP are authorised. - -// + 012.345.: front match form, or -// all: all IP are matched, or -// 012.345.678.901/24: network form (mask with # of bits), or -// 012.345.678.901/255.255.255.0: network form (mask with ip mask) -// + Note about the DNS resolution (like www.ne.jp, etc.): -// There is no guarantee to have an answer. -// If we have an answer, there is no guarantee to have a 100% correct value. -// And, the waiting time (to check) can be long (over 1 minute to a timeout). That can block the software. -// So, DNS notation isn't authorised for ip checking. - sprintf(buf, "%u.%u.%u.%u.", CONVIP(ip)); - - for(i = 0; i < access_ladmin_allownum; i++) { - access_ip = access_ladmin_allow + i * ACO_STRSIZE; - if (memcmp(access_ip, buf, strlen(access_ip)) == 0 || check_ipmask(ip, (unsigned char*)access_ip)) { - return 1; - } - } - - return 0; -} //----------------------------------------------- // Search an account id @@ -947,6 +819,7 @@ int check_GM_file(int tid, unsigned int tick, int id, int data) bool check_encrypted(const char* str1, const char* str2, const char* passwd) { char md5str[64], md5bin[32]; + snprintf(md5str, sizeof(md5str), "%s%s", str1, str2); md5str[sizeof(md5str)-1] = '\0'; MD5_String2binary(md5str, md5bin); @@ -977,8 +850,7 @@ bool check_password(struct login_session_data* ld, int passwdenc, const char* pa //------------------------------------- int mmo_auth_new(struct mmo_account* account, char sex, char* email) { - time_t timestamp, timestamp_temp; - struct tm *tmtime; + time_t connect_until = 0; int i = auth_num; if (auth_num >= auth_max) { @@ -988,6 +860,7 @@ int mmo_auth_new(struct mmo_account* account, char sex, char* email) memset(&auth_dat[i], '\0', sizeof(struct auth_data)); + // find a suitable non-gm account id while (isGM(account_id_count) > 0) account_id_count++; @@ -1004,19 +877,9 @@ int mmo_auth_new(struct mmo_account* account, char sex, char* email) safestrncpy(auth_dat[i].email, e_mail_check(email) ? email : "a@a.com", sizeof(auth_dat[i].email)); safestrncpy(auth_dat[i].error_message, "-", sizeof(auth_dat[i].error_message)); auth_dat[i].ban_until_time = 0; - if (start_limited_time < 0) - auth_dat[i].connect_until_time = 0; // unlimited - else { // limited time - timestamp = time(NULL) + start_limited_time; - // double conversion to be sure that it is possible - tmtime = localtime(×tamp); - timestamp_temp = mktime(tmtime); - if (timestamp_temp != -1 && (timestamp_temp + 3600) >= timestamp) // check possible value and overflow (and avoid summer/winter hour) - auth_dat[i].connect_until_time = timestamp_temp; - else - auth_dat[i].connect_until_time = 0; // unlimited - } - + if( login_config.start_limited_time != -1 ) + connect_until = time(NULL) + login_config.start_limited_time; + auth_dat[i].connect_until_time = connect_until; strncpy(auth_dat[i].last_ip, "-", 16); strncpy(auth_dat[i].memo, "-", 255); auth_dat[i].account_reg2_num = 0; @@ -1031,6 +894,9 @@ int mmo_auth_new(struct mmo_account* account, char sex, char* email) //----------------------------------------------------- int mmo_auth(struct mmo_account* account, int fd) { + static int num_regs = 0; // registration counter + static unsigned int new_reg_tick = gettick(); + unsigned int i; time_t raw_time; char tmpstr[256]; @@ -1104,7 +970,7 @@ int mmo_auth(struct mmo_account* account, int fd) { int new_id = mmo_auth_new(account, account->userid[len-1], "a@a.com"); unsigned int tick = gettick(); - ShowNotice("Account creation (account %s, id: %d, pass: %s, sex: %c, connection with _F/_M, ip: %s)\n", account->userid, new_id, account->passwd, account->userid[len-1], ip); + ShowNotice("Account creation (account %s, id: %d, pass: %s, sex: %c, connection with _M/_F, ip: %s)\n", account->userid, new_id, account->passwd, account->userid[len-1], ip); auth_before_save_file = 0; // Creation of an account -> save accounts file immediatly if( DIFF_TICK(tick, new_reg_tick) > 0 ) @@ -1214,7 +1080,7 @@ static int online_db_setoffline(DBKey key, void* data, va_list ap) //-------------------------------- int parse_fromchar(int fd) { - uint32 i; + unsigned int i; int j, id; uint32 ipl; char ip[16]; @@ -1328,9 +1194,18 @@ int parse_fromchar(int fd) case 0x2714: if( RFIFOREST(fd) < 6 ) return 0; - //printf("parse_fromchar: Receiving of the users number of the server '%s': %d\n", server[id].name, RFIFOL(fd,2)); - server[id].users = RFIFOL(fd,2); + { + int users = RFIFOL(fd,2); RFIFOSKIP(fd,6); + + // how many users on world? (update) + if( server[id].users != users ) + { + ShowStatus("set users %s : %d\n", server[id].name, users); + + server[id].users = users; + } + } break; case 0x2715: // request from char server to change e-email from default "a@a.com" @@ -1365,7 +1240,7 @@ int parse_fromchar(int fd) return 0; { uint32 connect_until_time = 0; - char* email = ""; + char email[40] = ""; int account_id = RFIFOL(fd,2); RFIFOSKIP(fd,6); @@ -1375,7 +1250,7 @@ int parse_fromchar(int fd) ShowNotice("Char-server '%s': e-mail of the account %d NOT found (ip: %s).\n", server[id].name, RFIFOL(fd,2), ip); else { - email = auth_dat[i].email; + safestrncpy(email, auth_dat[i].email, sizeof(email)); connect_until_time = (uint32)auth_dat[i].connect_until_time; } @@ -1398,53 +1273,6 @@ int parse_fromchar(int fd) WFIFOSET(fd,2); break; - case 0x2720: // Request to become a GM - if( RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2) ) - return 0; - { - int level = 0; - FILE *fp; - - char pass[60]; - int acc = RFIFOL(fd,4); - safestrncpy(pass, (char*)RFIFOP(fd,8), sizeof(pass)); - RFIFOSKIP(fd, RFIFOW(fd,2)); - - if( strcmp(pass, gm_pass) != 0 ) // password check - ShowError("Char-server '%s': Error of GM change (account: %d, invalid password, ip: %s).\n", server[id].name, acc, ip); - else - if( isGM(acc) > 0 ) // only non-GM can become GM - ShowError("Char-server '%s': Error of GM change (account: %d (already GM), correct password, ip: %s).\n", server[id].name, acc, ip); - else - if( level_new_gm == 0 ) // if we autorise creation - ShowError("Char-server '%s': Error of GM change (account: %d, correct password, but GM creation is disable (level_new_gm = 0), ip: %s).\n", server[id].name, acc, ip); - else - if( (fp = fopen(GM_account_filename, "a")) == NULL ) // if we can open the file to add the new GM - ShowError("Char-server '%s': Error of GM change (account: %d, correct password, unable to add a GM account in GM accounts file, ip: %s).\n", server[id].name, acc, ip); - else - { - char tmpstr[24]; - time_t raw_time; - time(&raw_time); - strftime(tmpstr, 23, login_config.date_format, localtime(&raw_time)); - fprintf(fp, "\n// %s: @GM command on account %d\n%d %d\n", tmpstr, acc, acc, level_new_gm); - fclose(fp); - level = level_new_gm; - read_gm_account(); - send_GM_accounts(-1); - - ShowNotice("Char-server '%s': GM Change of the account %d: level 0 -> %d (ip: %s).\n", server[id].name, acc, level_new_gm, ip); - } - - // announce gm level update result - WFIFOHEAD(fd,10); - WFIFOW(fd,0) = 0x2721; - WFIFOL(fd,2) = acc; - WFIFOL(fd,6) = level; // 0:failed, >0:success - WFIFOSET(fd,10); - } - break; - // Map server send information to change an email of an account via char-server case 0x2722: // 0x2722 .L .40B .40B if (RFIFOREST(fd) < 86) @@ -1459,9 +1287,9 @@ int parse_fromchar(int fd) if( e_mail_check(actual_email) == 0 ) ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual email is invalid (account: %d, ip: %s)\n", server[id].name, account_id, ip); - else if (e_mail_check(new_email) == 0) + else if( e_mail_check(new_email) == 0 ) ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a invalid new e-mail (account: %d, ip: %s)\n", server[id].name, account_id, ip); - else if (strcmpi(new_email, "a@a.com") == 0) + else if( strcmpi(new_email, "a@a.com") == 0 ) ShowNotice("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a default e-mail (account: %d, ip: %s)\n", server[id].name, account_id, ip); else { ARR_FIND( 0, auth_num, i, auth_dat[i].account_id == account_id ); @@ -1737,8 +1565,8 @@ int parse_fromchar(int fd) { if( auth_dat[i].account_reg2[j].str[0] != '\0' ) { - off+= sprintf((char*)WFIFOP(fd,off), "%s", auth_dat[i].account_reg2[j].str)+1; //We add 1 to consider the '\0' in place. - off+= sprintf((char*)WFIFOP(fd,off), "%s", auth_dat[i].account_reg2[j].value)+1; + off += sprintf((char*)WFIFOP(fd,off), "%s", auth_dat[i].account_reg2[j].str)+1; //We add 1 to consider the '\0' in place. + off += sprintf((char*)WFIFOP(fd,off), "%s", auth_dat[i].account_reg2[j].value)+1; } } @@ -1765,50 +1593,9 @@ int parse_fromchar(int fd) break; default: - { - FILE* logfp; - char tmpstr[24]; - time_t raw_time; - logfp = fopen(login_log_unknown_packets_filename, "a"); - if (logfp) { - time(&raw_time); - strftime(tmpstr, 23, login_config.date_format, localtime(&raw_time)); - fprintf(logfp, "%s: receiving of an unknown packet -> disconnection\n", tmpstr); - fprintf(logfp, "parse_fromchar: connection #%d (ip: %s), packet: 0x%x (with being read: %lu).\n", fd, ip, command, (unsigned long)RFIFOREST(fd)); - fprintf(logfp, "Detail (in hex):\n"); - fprintf(logfp, "---- 00-01-02-03-04-05-06-07 08-09-0A-0B-0C-0D-0E-0F\n"); - memset(tmpstr, '\0', sizeof(tmpstr)); - for(i = 0; i < RFIFOREST(fd); i++) { - if ((i & 15) == 0) - fprintf(logfp, "%04X ",i); - fprintf(logfp, "%02x ", RFIFOB(fd,i)); - if (RFIFOB(fd,i) > 0x1f) - tmpstr[i % 16] = RFIFOB(fd,i); - else - tmpstr[i % 16] = '.'; - if ((i - 7) % 16 == 0) // -8 + 1 - fprintf(logfp, " "); - else if ((i + 1) % 16 == 0) { - fprintf(logfp, " %s\n", tmpstr); - memset(tmpstr, '\0', sizeof(tmpstr)); - } - } - if (i % 16 != 0) { - for(j = i; j % 16 != 0; j++) { - fprintf(logfp, " "); - if ((j - 7) % 16 == 0) // -8 + 1 - fprintf(logfp, " "); - } - fprintf(logfp, " %s\n", tmpstr); - } - fprintf(logfp, "\n"); - fclose(logfp); - } - ShowError("parse_fromchar: Unknown packet 0x%x from a char-server! Disconnecting!\n", command); set_eof(fd); return 0; - } } // switch } // while @@ -1869,8 +1656,8 @@ void login_auth_ok(struct mmo_account* account, int fd) {// account is already marked as online! if( data->char_server > -1 ) {// Request char servers to kick this account out. [Skotlex] - uint8 buf[8]; - ShowNotice("User '%s' is already online - Rejected.\n", auth_dat[i].userid); + uint8 buf[6]; + ShowNotice("User '%s' is already online - Rejected.\n", account->userid); WBUFW(buf,0) = 0x2734; WBUFL(buf,2) = account->account_id; charif_sendallwos(-1, buf, 6); @@ -1968,10 +1755,9 @@ void login_auth_failed(struct mmo_account* account, int fd, int result) // Default packet parsing (normal players or administation/char-server connection requests) //---------------------------------------------------------------------------------------- int parse_login(int fd) -{ +{ struct mmo_account account; - int result, j; - unsigned int i; + int result; uint32 ipl; char ip[16]; @@ -2010,19 +1796,6 @@ int parse_login(int fd) { size_t packet_len = RFIFOREST(fd); // assume no other packet was sent - // Perform ip-ban check - if (!check_ip(ipl)) - { - ShowStatus("Connection refused: IP isn't authorised (deny/allow, ip: %s).\n", ip); - WFIFOHEAD(fd,23); - WFIFOW(fd,0) = 0x6a; - WFIFOB(fd,2) = 3; // 3 = Rejected from Server - WFIFOSET(fd,23); - RFIFOSKIP(fd,packet_len); - set_eof(fd); - break; - } - if( (command == 0x0064 && packet_len < 55) || (command == 0x01dd && packet_len < 47) || (command == 0x0277 && packet_len < 84) @@ -2038,17 +1811,18 @@ int parse_login(int fd) account.version = RFIFOL(fd,2); safestrncpy(account.userid, (char*)RFIFOP(fd,6), NAME_LENGTH); remove_control_chars(account.userid); if (command != 0x01dd) { - ShowStatus("Request for connection (non encryption mode) of %s (ip: %s).\n", account.userid, ip); + ShowStatus("Request for connection of %s (ip: %s).\n", account.userid, ip); safestrncpy(account.passwd, (char*)RFIFOP(fd,30), NAME_LENGTH); remove_control_chars(account.passwd); + account.passwdenc = 0; } else { ShowStatus("Request for connection (encryption mode) of %s (ip: %s).\n", account.userid, ip); memcpy(account.passwd, RFIFOP(fd,30), 16); account.passwd[16] = '\0'; // raw binary data here! + account.passwdenc = PASSWORDENC; } RFIFOSKIP(fd,packet_len); - account.passwdenc = (command == 0x01dd) ? PASSWORDENC : 0; - result = mmo_auth(&account, fd); + if( result == -1 ) login_auth_ok(&account, fd); else @@ -2061,6 +1835,7 @@ int parse_login(int fd) RFIFOSKIP(fd,2); { struct login_session_data* ld; + unsigned int i; if( session[fd]->session_data ) { ShowWarning("login: abnormal request of MD5 key (already opened session).\n"); @@ -2165,7 +1940,7 @@ int parse_login(int fd) return 0; WFIFOW(fd,0) = 0x7919; WFIFOB(fd,2) = 1; - if (!check_ladminip(session[fd]->client_addr)) { + if( session[fd]->client_addr != admin_allowed_ip ) { ShowNotice("'ladmin'-login: Connection in administration mode refused: IP isn't authorised (ladmin_allow, ip: %s).\n", ip); } else { struct login_session_data *ld = (struct login_session_data*)session[fd]->session_data; @@ -2217,46 +1992,6 @@ int parse_login(int fd) break; default: - if (save_unknown_packets) { - FILE *logfp; - char tmpstr[24]; - time_t raw_time; - logfp = fopen(login_log_unknown_packets_filename, "a"); - if (logfp) { - time(&raw_time); - strftime(tmpstr, 23, login_config.date_format, localtime(&raw_time)); - fprintf(logfp, "%s: receiving of an unknown packet -> disconnection\n", tmpstr); - fprintf(logfp, "parse_login: connection #%d (ip: %s), packet: 0x%x (with being read: %lu).\n", fd, ip, command, (unsigned long)RFIFOREST(fd)); - fprintf(logfp, "Detail (in hex):\n"); - fprintf(logfp, "---- 00-01-02-03-04-05-06-07 08-09-0A-0B-0C-0D-0E-0F\n"); - memset(tmpstr, '\0', sizeof(tmpstr)); - for(i = 0; i < RFIFOREST(fd); i++) { - if ((i & 15) == 0) - fprintf(logfp, "%04X ",i); - fprintf(logfp, "%02x ", RFIFOB(fd,i)); - if (RFIFOB(fd,i) > 0x1f) - tmpstr[i % 16] = RFIFOB(fd,i); - else - tmpstr[i % 16] = '.'; - if ((i - 7) % 16 == 0) // -8 + 1 - fprintf(logfp, " "); - else if ((i + 1) % 16 == 0) { - fprintf(logfp, " %s\n", tmpstr); - memset(tmpstr, '\0', sizeof(tmpstr)); - } - } - if (i % 16 != 0) { - for(j = i; j % 16 != 0; j++) { - fprintf(logfp, " "); - if ((j - 7) % 16 == 0) // -8 + 1 - fprintf(logfp, " "); - } - fprintf(logfp, " %s\n", tmpstr); - } - fprintf(logfp, "\n"); - fclose(logfp); - } - } ShowNotice("Abnormal end of connection (ip: %s): Unknown packet 0x%x\n", ip, command); set_eof(fd); return 0; @@ -2393,43 +2128,6 @@ int login_config_read(const char* cfgName) ShowInfo("Console Silent Setting: %d\n", atoi(w2)); msg_silent = atoi(w2); } - else if (strcmpi(w1, "admin_state") == 0) { - admin_state = (bool)config_switch(w2); - } else if (strcmpi(w1, "admin_pass") == 0) { - memset(admin_pass, 0, sizeof(admin_pass)); - strncpy(admin_pass, w2, sizeof(admin_pass)); - admin_pass[sizeof(admin_pass)-1] = '\0'; - } else if (strcmpi(w1, "ladminallowip") == 0) { - if (strcmpi(w2, "clear") == 0) { - if (access_ladmin_allow) - aFree(access_ladmin_allow); - access_ladmin_allow = NULL; - access_ladmin_allownum = 0; - } else { - if (strcmpi(w2, "all") == 0) { - // reset all previous values - if (access_ladmin_allow) - aFree(access_ladmin_allow); - // set to all - access_ladmin_allow = (char*)aCalloc(ACO_STRSIZE, sizeof(char)); - access_ladmin_allownum = 1; - access_ladmin_allow[0] = '\0'; - } else if (w2[0] && !(access_ladmin_allownum == 1 && access_ladmin_allow[0] == '\0')) { // don't add IP if already 'all' - if (access_ladmin_allow) - access_ladmin_allow = (char*)aRealloc(access_ladmin_allow, (access_ladmin_allownum+1) * ACO_STRSIZE); - else - access_ladmin_allow = (char*)aCalloc(ACO_STRSIZE, sizeof(char)); - strncpy(access_ladmin_allow + (access_ladmin_allownum++) * ACO_STRSIZE, w2, ACO_STRSIZE); - access_ladmin_allow[access_ladmin_allownum * ACO_STRSIZE - 1] = '\0'; - } - } - } else if (strcmpi(w1, "gm_pass") == 0) { - memset(gm_pass, 0, sizeof(gm_pass)); - strncpy(gm_pass, w2, sizeof(gm_pass)); - gm_pass[sizeof(gm_pass)-1] = '\0'; - } else if (strcmpi(w1, "level_new_gm") == 0) { - level_new_gm = atoi(w2); - } else if( !strcmpi(w1, "bind_ip") ) { char ip_str[16]; login_config.login_ip = host2ip(w2); @@ -2440,6 +2138,17 @@ int login_config_read(const char* cfgName) login_config.login_port = (uint16)atoi(w2); ShowStatus("set login_port : %s\n",w2); } + else if(!strcmpi(w1, "log_login")) + login_config.log_login = (bool)config_switch(w2); + + else if (strcmpi(w1, "admin_state") == 0) { + admin_state = (bool)config_switch(w2); + } else if (strcmpi(w1, "admin_pass") == 0) { + memset(admin_pass, 0, sizeof(admin_pass)); + strncpy(admin_pass, w2, sizeof(admin_pass)); + admin_pass[sizeof(admin_pass)-1] = '\0'; + } else if (strcmpi(w1, "admin_allowed_ip") == 0) + admin_allowed_ip = host2ip(w2); else if (strcmpi(w1, "account_filename") == 0) { memset(account_filename, 0, sizeof(account_filename)); strncpy(account_filename, w2, sizeof(account_filename)); @@ -2448,78 +2157,14 @@ int login_config_read(const char* cfgName) memset(GM_account_filename, 0, sizeof(GM_account_filename)); strncpy(GM_account_filename, w2, sizeof(GM_account_filename)); GM_account_filename[sizeof(GM_account_filename)-1] = '\0'; - } else if (strcmpi(w1, "gm_account_filename_check_timer") == 0) { - gm_account_filename_check_timer = atoi(w2); - } else if (strcmpi(w1, "log_login") == 0) { - login_config.log_login = (bool)config_switch(w2); - } else if (strcmpi(w1, "login_log_unknown_packets_filename") == 0) { - memset(login_log_unknown_packets_filename, 0, sizeof(login_log_unknown_packets_filename)); - strncpy(login_log_unknown_packets_filename, w2, sizeof(login_log_unknown_packets_filename)); - login_log_unknown_packets_filename[sizeof(login_log_unknown_packets_filename)-1] = '\0'; - } else if (strcmpi(w1, "save_unknown_packets") == 0) { - save_unknown_packets = config_switch(w2); - } else if (strcmpi(w1, "start_limited_time") == 0) { - start_limited_time = atoi(w2); - } else if (strcmpi(w1, "order") == 0) { - access_order = atoi(w2); - if (strcmpi(w2, "deny,allow") == 0 || - strcmpi(w2, "deny, allow") == 0) access_order = ACO_DENY_ALLOW; - if (strcmpi(w2, "allow,deny") == 0 || - strcmpi(w2, "allow, deny") == 0) access_order = ACO_ALLOW_DENY; - if (strcmpi(w2, "mutual-failture") == 0 || - strcmpi(w2, "mutual-failure") == 0) access_order = ACO_MUTUAL_FAILTURE; - } else if (strcmpi(w1, "allow") == 0) { - if (strcmpi(w2, "clear") == 0) { - if (access_allow) - aFree(access_allow); - access_allow = NULL; - access_allownum = 0; - } else { - if (strcmpi(w2, "all") == 0) { - // reset all previous values - if (access_allow) - aFree(access_allow); - // set to all - access_allow = (char*)aCalloc(ACO_STRSIZE, sizeof(char)); - access_allownum = 1; - access_allow[0] = '\0'; - } else if (w2[0] && !(access_allownum == 1 && access_allow[0] == '\0')) { // don't add IP if already 'all' - if (access_allow) - access_allow = (char*)aRealloc(access_allow, (access_allownum+1) * ACO_STRSIZE); - else - access_allow = (char*)aCalloc(ACO_STRSIZE, sizeof(char)); - strncpy(access_allow + (access_allownum++) * ACO_STRSIZE, w2, ACO_STRSIZE); - access_allow[access_allownum * ACO_STRSIZE - 1] = '\0'; - } - } - } else if (strcmpi(w1, "deny") == 0) { - if (strcmpi(w2, "clear") == 0) { - if (access_deny) - aFree(access_deny); - access_deny = NULL; - access_denynum = 0; - } else { - if (strcmpi(w2, "all") == 0) { - // reset all previous values - if (access_deny) - aFree(access_deny); - // set to all - access_deny = (char*)aCalloc(ACO_STRSIZE, sizeof(char)); - access_denynum = 1; - access_deny[0] = '\0'; - } else if (w2[0] && !(access_denynum == 1 && access_deny[0] == '\0')) { // don't add IP if already 'all' - if (access_deny) - access_deny = (char*)aRealloc(access_deny, (access_denynum+1) * ACO_STRSIZE); - else - access_deny = (char*)aCalloc(ACO_STRSIZE, sizeof(char)); - strncpy(access_deny + (access_denynum++) * ACO_STRSIZE, w2, ACO_STRSIZE); - access_deny[access_denynum * ACO_STRSIZE - 1] = '\0'; - } - } } + else if (strcmpi(w1, "gm_account_filename_check_timer") == 0) + gm_account_filename_check_timer = atoi(w2); else if(!strcmpi(w1, "new_account")) login_config.new_account_flag = (bool)config_switch(w2); + else if(!strcmpi(w1, "start_limited_time")) + login_config.start_limited_time = atoi(w2); else if(!strcmpi(w1, "check_client_version")) login_config.check_client_version = (bool)config_switch(w2); else if(!strcmpi(w1, "client_version_to_connect")) @@ -2568,19 +2213,6 @@ void display_conf_warnings(void) } } - if (gm_pass[0] == '\0') { - ShowWarning("'To GM become' password is void (gm_pass).\n"); - ShowWarning(" We highly recommend that you set one password.\n"); - } else if (strcmp(gm_pass, "gm") == 0) { - ShowWarning("You are using the default GM password (gm_pass).\n"); - ShowWarning(" We highly recommend that you change it.\n"); - } - - if (level_new_gm < 0 || level_new_gm > 99) { - ShowWarning("Invalid value for level_new_gm parameter -> setting to 60 (default).\n"); - level_new_gm = 60; - } - if (gm_account_filename_check_timer < 0) { ShowWarning("Invalid value for gm_account_filename_check_timer parameter. Setting to 15 sec (default).\n"); gm_account_filename_check_timer = 15; @@ -2597,30 +2229,10 @@ void display_conf_warnings(void) login_config.min_level_to_connect = 99; } - if (start_limited_time < -1) { // -1: create unlimited account, 0 or more: additionnal sec from now to create limited time + if (login_config.start_limited_time < -1) { // -1: create unlimited account, 0 or more: additionnal sec from now to create limited time ShowWarning("Invalid value for start_limited_time parameter\n"); ShowWarning(" -> setting to -1 (new accounts are created with unlimited time).\n"); - start_limited_time = -1; - } - - if (access_order == ACO_DENY_ALLOW) { - if (access_denynum == 1 && access_deny[0] == '\0') { - ShowWarning("The IP security order is 'deny,allow' (allow if not deny) and you refuse ALL IP.\n"); - } - } else if (access_order == ACO_ALLOW_DENY) { - if (access_allownum == 0) { - ShowWarning("The IP security order is 'allow,deny' (deny if not allow) but, NO IP IS AUTHORISED!\n"); - } - } else { // ACO_MUTUAL_FAILTURE - if (access_allownum == 0) { - ShowWarning("The IP security order is 'mutual-failture'\n"); - ShowWarning(" (allow if in the allow list and not in the deny list).\n"); - ShowWarning(" But, NO IP IS AUTHORISED!\n"); - } else if (access_denynum == 1 && access_deny[0] == '\0') { - ShowWarning("The IP security order is mutual-failture\n"); - ShowWarning(" (allow if in the allow list and not in the deny list).\n"); - ShowWarning(" But, you refuse ALL IP!\n"); - } + login_config.start_limited_time = -1; } return; @@ -2666,9 +2278,6 @@ void do_final(void) if(auth_dat) aFree(auth_dat); if(gm_account_db) aFree(gm_account_db); - if(access_ladmin_allow) aFree(access_ladmin_allow); - if(access_allow) aFree(access_allow); - if(access_deny) aFree(access_deny); for (i = 0; i < MAX_SERVERS; i++) { if ((fd = server[i].fd) >= 0) { @@ -2679,9 +2288,6 @@ void do_final(void) } do_close(login_fd); - if(log_fp) - fclose(log_fp); - ShowStatus("Finished.\n"); } @@ -2755,8 +2361,6 @@ int do_init(int argc, char** argv) //##TODO invoke a CONSOLE_START plugin event } - new_reg_tick = gettick(); - // server port open & binding login_fd = make_listen_bind(login_config.login_ip, login_config.login_port); diff --git a/src/login/login.h b/src/login/login.h index 2929f7b4f..e34942816 100644 --- a/src/login/login.h +++ b/src/login/login.h @@ -38,28 +38,29 @@ struct mmo_char_server { extern struct Login_Config { - uint32 login_ip; // the address to bind to - uint16 login_port; // the port to bind to - unsigned int ip_sync_interval; // interval (in minutes) to execute a DNS/IP update (for dynamic IPs) - bool log_login; // whether to log login server actions or not - char date_format[32]; // date format used in messages - bool console; // console input system enabled? - bool new_account_flag; // autoregistration via _M/_F ? -// bool case_sensitive; // are logins case sensitive ? - bool use_md5_passwds; // work with password hashes instead of plaintext passwords? -// bool login_gm_read; // should the login server handle info about gm accounts? - int min_level_to_connect; // minimum level of player/GM (0: player, 1-99: GM) to connect - bool online_check; // reject incoming players that are already registered as online ? - bool check_client_version; // check the clientversion set in the clientinfo ? - int client_version_to_connect; // the client version needed to connect (if checking is enabled) + uint32 login_ip; // the address to bind to + uint16 login_port; // the port to bind to + unsigned int ip_sync_interval; // interval (in minutes) to execute a DNS/IP update (for dynamic IPs) + bool log_login; // whether to log login server actions or not + char date_format[32]; // date format used in messages + bool console; // console input system enabled? + bool new_account_flag; // autoregistration via _M/_F ? + int start_limited_time; // new account expiration time (-1: unlimited) +// bool case_sensitive; // are logins case sensitive ? + bool use_md5_passwds; // work with password hashes instead of plaintext passwords? +// bool login_gm_read; // should the login server handle info about gm accounts? + int min_level_to_connect; // minimum level of player/GM (0: player, 1-99: GM) to connect + bool online_check; // reject incoming players that are already registered as online ? + bool check_client_version; // check the clientversion set in the clientinfo ? + int client_version_to_connect; // the client version needed to connect (if checking is enabled) -// bool ipban; // perform IP blocking (via contents of `ipbanlist`) ? -// bool dynamic_pass_failure_ban; // automatic IP blocking due to failed login attemps ? -// unsigned int dynamic_pass_failure_ban_interval; // how far to scan the loginlog for password failures -// unsigned int dynamic_pass_failure_ban_limit; // number of failures needed to trigger the ipban -// unsigned int dynamic_pass_failure_ban_duration; // duration of the ipban - bool use_dnsbl; // dns blacklist blocking ? - char dnsbl_servs[1024]; // comma-separated list of dnsbl servers +// bool ipban; // perform IP blocking (via contents of `ipbanlist`) ? +// bool dynamic_pass_failure_ban; // automatic IP blocking due to failed login attemps ? +// unsigned int dynamic_pass_failure_ban_interval; // how far to scan the loginlog for password failures +// unsigned int dynamic_pass_failure_ban_limit; // number of failures needed to trigger the ipban +// unsigned int dynamic_pass_failure_ban_duration; // duration of the ipban + bool use_dnsbl; // dns blacklist blocking ? + char dnsbl_servs[1024]; // comma-separated list of dnsbl servers } login_config; diff --git a/src/login_sql/login.c b/src/login_sql/login.c index e104d0367..281d2a09b 100644 --- a/src/login_sql/login.c +++ b/src/login_sql/login.c @@ -35,15 +35,16 @@ struct s_subnet { int subnet_count = 0; +// GM account management struct gm_account* gm_account_db = NULL; unsigned int GM_num = 0; // number of gm accounts //Account registration flood protection [Kevin] int allowed_regs = 1; int time_allowed = 10; //in seconds -unsigned int new_reg_tick = 0; -int num_regs = 0; + +// data handling (SQL) Sql* sql_handle; // database parameters @@ -66,6 +67,9 @@ char login_db_user_pass[256] = "user_pass"; char login_db_level[256] = "level"; +//----------------------------------------------------- +// Session data structure +//----------------------------------------------------- struct login_session_data { uint16 md5keylen; char md5key[20]; @@ -386,8 +390,12 @@ bool check_password(struct login_session_data* ld, int passwdenc, const char* pa //----------------------------------------------------- int mmo_auth_new(struct mmo_account* account, char sex) { + static int num_regs = 0; // registration counter + static unsigned int new_reg_tick = gettick(); + unsigned int tick = gettick(); char md5buf[32+1]; + time_t connect_until = 0; SqlStmt* stmt; int result = 0; @@ -413,10 +421,13 @@ int mmo_auth_new(struct mmo_account* account, char sex) if( result ) return result;// error or incorrect user/pass + if( login_config.start_limited_time != -1 ) + connect_until = time(NULL) + login_config.start_limited_time; + // insert new entry into db //TODO: error checking stmt = SqlStmt_Malloc(sql_handle); - SqlStmt_Prepare(stmt, "INSERT INTO `%s` (`%s`, `%s`, `sex`, `email`) VALUES (?, ?, '%c', 'a@a.com')", login_db, login_db_userid, login_db_user_pass, TOUPPER(sex)); + SqlStmt_Prepare(stmt, "INSERT INTO `%s` (`%s`, `%s`, `sex`, `email`, `connect_until`) VALUES (?, ?, '%c', 'a@a.com', '%d')", login_db, login_db_userid, login_db_user_pass, TOUPPER(sex), connect_until); SqlStmt_BindParam(stmt, 0, SQLDT_STRING, account->userid, strnlen(account->userid, NAME_LENGTH)); if( login_config.use_md5_passwds ) { @@ -426,9 +437,9 @@ int mmo_auth_new(struct mmo_account* account, char sex) else SqlStmt_BindParam(stmt, 1, SQLDT_STRING, account->passwd, strnlen(account->passwd, NAME_LENGTH)); SqlStmt_Execute(stmt); - SqlStmt_Free(stmt); - ShowInfo("New account: userid='%s' passwd='%s' sex='%c'\n", account->userid, account->passwd, TOUPPER(sex)); + ShowNotice("Account creation (account %s, id: %d, pass: %s, sex: %c, connection with _M/_F)\n", account->userid, SqlStmt_LastInsertId(stmt), account->passwd, TOUPPER(sex)); + SqlStmt_Free(stmt); if( DIFF_TICK(tick, new_reg_tick) > 0 ) {// Update the registration check. @@ -600,7 +611,8 @@ static int online_db_setoffline(DBKey key, void* data, va_list ap) //-------------------------------- int parse_fromchar(int fd) { - int i, id; + unsigned int i; + int id; uint32 ipl; char ip[16]; @@ -786,25 +798,6 @@ int parse_fromchar(int fd) WFIFOSET(fd,2); break; - case 0x2720: // Request to become a GM - if( RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2) ) - return 0; - { - int acc = RFIFOL(fd,4); - RFIFOSKIP(fd, RFIFOW(fd,2)); - - ShowWarning("change GM isn't supported in this login server version.\n"); - ShowError("change GM error 0 %s\n", RFIFOP(fd,8)); - - // announce gm level update result - WFIFOHEAD(fd,10); - WFIFOW(fd,0) = 0x2721; - WFIFOL(fd,2) = acc; - WFIFOL(fd,6) = 0; // level - WFIFOSET(fd,10); - } - break; - // Map server send information to change an email of an account via char-server case 0x2722: // 0x2722 .L .40B .40B if (RFIFOREST(fd) < 86) @@ -1404,7 +1397,7 @@ void login_auth_failed(struct mmo_account* account, int fd, int result) int parse_login(int fd) { struct mmo_account account; - int result, i; + int result; uint32 ipl; char ip[16]; @@ -1471,14 +1464,16 @@ int parse_login(int fd) account.version = RFIFOL(fd,2); safestrncpy(account.userid, (char*)RFIFOP(fd,6), NAME_LENGTH);//## does it have to be nul-terminated? if (command != 0x01dd) { + ShowStatus("Request for connection of %s (ip: %s).\n", account.userid, ip); safestrncpy(account.passwd, (char*)RFIFOP(fd,30), NAME_LENGTH);//## does it have to be nul-terminated? + account.passwdenc = 0; } else { + ShowStatus("Request for connection (encryption mode) of %s (ip: %s).\n", account.userid, ip); memcpy(account.passwd, RFIFOP(fd,30), 16); account.passwd[16] = '\0'; // raw binary data here! + account.passwdenc = PASSWORDENC; } RFIFOSKIP(fd,packet_len); - account.passwdenc = (command == 0x01dd) ? PASSWORDENC : 0; - result = mmo_auth(&account, fd); if( result == -1 ) @@ -1492,6 +1487,7 @@ int parse_login(int fd) RFIFOSKIP(fd,2); { struct login_session_data* ld; + unsigned int i; if( session[fd]->session_data ) { ShowWarning("login: abnormal request of MD5 key (already opened session).\n"); @@ -1777,6 +1773,8 @@ int login_config_read(const char* cfgName) else if(!strcmpi(w1, "new_account")) login_config.new_account_flag = (bool)config_switch(w2); + else if(!strcmpi(w1, "start_limited_time")) + login_config.start_limited_time = atoi(w2); else if(!strcmpi(w1, "check_client_version")) login_config.check_client_version = (bool)config_switch(w2); else if(!strcmpi(w1, "client_version_to_connect")) @@ -1980,8 +1978,6 @@ int do_init(int argc, char** argv) //##TODO invoke a CONSOLE_START plugin event } - new_reg_tick = gettick(); - // server port open & binding login_fd = make_listen_bind(login_config.login_ip, login_config.login_port); diff --git a/src/login_sql/login.h b/src/login_sql/login.h index 02de3c0e8..babe47b82 100644 --- a/src/login_sql/login.h +++ b/src/login_sql/login.h @@ -39,28 +39,29 @@ struct mmo_char_server { extern struct Login_Config { - uint32 login_ip; // the address to bind to - uint16 login_port; // the port to bind to - unsigned int ip_sync_interval; // interval (in minutes) to execute a DNS/IP update (for dynamic IPs) - bool log_login; // whether to log login server actions or not - char date_format[32]; // date format used in messages - bool console; // console input system enabled? - bool new_account_flag; // autoregistration via _M/_F ? - bool case_sensitive; // are logins case sensitive ? - bool use_md5_passwds; // work with password hashes instead of plaintext passwords? - bool login_gm_read; // should the login server handle info about gm accounts? - int min_level_to_connect; // minimum level of player/GM (0: player, 1-99: GM) to connect - bool online_check; // reject incoming players that are already registered as online ? - bool check_client_version; // check the clientversion set in the clientinfo ? - int client_version_to_connect; // the client version needed to connect (if checking is enabled) + uint32 login_ip; // the address to bind to + uint16 login_port; // the port to bind to + unsigned int ip_sync_interval; // interval (in minutes) to execute a DNS/IP update (for dynamic IPs) + bool log_login; // whether to log login server actions or not + char date_format[32]; // date format used in messages + bool console; // console input system enabled? + bool new_account_flag; // autoregistration via _M/_F ? + int start_limited_time; // new account expiration time (-1: unlimited) + bool case_sensitive; // are logins case sensitive ? + bool use_md5_passwds; // work with password hashes instead of plaintext passwords? + bool login_gm_read; // should the login server handle info about gm accounts? + int min_level_to_connect; // minimum level of player/GM (0: player, 1-99: GM) to connect + bool online_check; // reject incoming players that are already registered as online ? + bool check_client_version; // check the clientversion set in the clientinfo ? + int client_version_to_connect; // the client version needed to connect (if checking is enabled) - bool ipban; // perform IP blocking (via contents of `ipbanlist`) ? - bool dynamic_pass_failure_ban; // automatic IP blocking due to failed login attemps ? - unsigned int dynamic_pass_failure_ban_interval; // how far to scan the loginlog for password failures - unsigned int dynamic_pass_failure_ban_limit; // number of failures needed to trigger the ipban - unsigned int dynamic_pass_failure_ban_duration; // duration of the ipban - bool use_dnsbl; // dns blacklist blocking ? - char dnsbl_servs[1024]; // comma-separated list of dnsbl servers + bool ipban; // perform IP blocking (via contents of `ipbanlist`) ? + bool dynamic_pass_failure_ban; // automatic IP blocking due to failed login attemps ? + unsigned int dynamic_pass_failure_ban_interval; // how far to scan the loginlog for password failures + unsigned int dynamic_pass_failure_ban_limit; // number of failures needed to trigger the ipban + unsigned int dynamic_pass_failure_ban_duration; // duration of the ipban + bool use_dnsbl; // dns blacklist blocking ? + char dnsbl_servs[1024]; // comma-separated list of dnsbl servers } login_config; diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 38de48e57..8cdaab7c1 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -1902,30 +1902,6 @@ int atcommand_help2(const int fd, struct map_session_data* sd, const char* comma } -/*========================================== - * @gm - *------------------------------------------*/ -int atcommand_gm(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char password[100]; - nullpo_retr(-1, sd); - - memset(password, '\0', sizeof(password)); - - if (!message || !*message || sscanf(message, "%99[^\n]", password) < 1) { - clif_displaymessage(fd, "Please, enter a password (usage: @gm )."); - return -1; - } - - if (pc_isGM(sd)) { // a GM can not use this function. only a normal player (become gm is not for gm!) - clif_displaymessage(fd, msg_txt(50)); // You already have some GM powers. - return -1; - } else - chrif_changegm(sd->status.account_id, password, strlen(password) + 1); - - return 0; -} - // helper function, used in foreach calls to stop auto-attack timers // parameter: '0' - everyone, 'id' - only those attacking someone with that id static int atcommand_stopattack(struct block_list *bl,va_list ap) @@ -8333,7 +8309,6 @@ AtCommandInfo atcommand_info[] = { { "help", 20, atcommand_help }, { "h2", 20, atcommand_help2 }, { "help2", 20, atcommand_help2 }, - { "gm", 100, atcommand_gm }, { "pvpoff", 40, atcommand_pvpoff }, { "pvpon", 40, atcommand_pvpon }, { "gvgoff", 40, atcommand_gvgoff }, diff --git a/src/map/chrif.c b/src/map/chrif.c index 7ef032f16..e56ae5a56 100644 --- a/src/map/chrif.c +++ b/src/map/chrif.c @@ -33,7 +33,7 @@ static DBMap* auth_db; // int id -> struct auth_node* static const int packet_len_table[0x3d] = { // U - used, F - free 60, 3,-1,27,10,-1, 6,-1, // 2af8-2aff: U->2af8, U->2af9, U->2afa, U->2afb, U->2afc, U->2afd, U->2afe, U->2aff 6,-1,18, 7,-1,35,30,10, // 2b00-2b07: U->2b00, U->2b01, U->2b02, U->2b03, U->2b04, U->2b05, U->2b06, U->2b07 - 6,30,-1,10,86, 7,44,34, // 2b08-2b0f: U->2b08, U->2b09, U->2b0a, U->2b0b, U->2b0c, U->2b0d, U->2b0e, U->2b0f + 6,30,-1,-1,86, 7,44,34, // 2b08-2b0f: U->2b08, U->2b09, F->2b0a, F->2b0b, U->2b0c, U->2b0d, U->2b0e, U->2b0f 11,10,10, 6,11,-1,266,10, // 2b10-2b17: U->2b10, U->2b11, U->2b12, U->2b13, U->2b14, U->2b15, U->2b16, U->2b17 2,10, 2,-1,-1,-1, 2, 7, // 2b18-2b1f: U->2b18, U->2b19, U->2b1a, U->2b1b, U->2b1c, U->2b1d, U->2b1e, U->2b1f -1,10, 8, 2, 2,14,-1,-1, // 2b20-2b27: U->2b20, U->2b21, U->2b22, U->2b23, U->2b24, U->2b25, F->2b26, F->2b27 @@ -58,8 +58,8 @@ static const int packet_len_table[0x3d] = { // U - used, F - free //2b07: Incoming, clif_updatemaxid -> Received when updating the max account/char known //2b08: Outgoing, chrif_searchcharid -> '...' //2b09: Incoming, map_addchariddb -> 'Adds a name to the nick db' -//2b0a: Outgoing, chrif_changegm -> 'level change of acc/char XY' -//2b0b: Incoming, chrif_changedgm -> 'answer of 2b0a..' +//2b0a: FREE +//2b0b: FREE //2b0c: Outgoing, chrif_changeemail -> 'change mail address ...' //2b0d: Incoming, chrif_changedsex -> 'Change sex of acc XY' //2b0e: Outgoing, chrif_char_ask_name -> 'Do some operations (change sex, ban / unban etc)' @@ -670,26 +670,6 @@ int chrif_searchcharid(int char_id) return 0; } -/*========================================== - * GM‚ɕω»—v‹ - *------------------------------------------*/ -int chrif_changegm(int id, const char *pass, int len) -{ - if (battle_config.etc_log) - ShowInfo("chrif_changegm: account: %d, password: '%s'.\n", id, pass); - - chrif_check(-1); - - WFIFOHEAD(char_fd, len + 8); - WFIFOW(char_fd,0) = 0x2b0a; - WFIFOW(char_fd,2) = len + 8; - WFIFOL(char_fd,4) = id; - memcpy(WFIFOP(char_fd,8), pass, len); - WFIFOSET(char_fd, len + 8); - - return 0; -} - /*========================================== * Change Email *------------------------------------------*/ @@ -795,31 +775,6 @@ static void chrif_char_ask_name_answer(int acc, const char* player_name, uint16 clif_displaymessage(sd->fd, output); } -/*========================================== - * End of GM change (@GM) (modified by Yor) - *------------------------------------------*/ -int chrif_changedgm(int fd) -{ - int acc, level; - struct map_session_data *sd = NULL; - - acc = RFIFOL(fd,2); - level = RFIFOL(fd,6); - - sd = map_id2sd(acc); - - if (battle_config.etc_log) - ShowNotice("chrif_changedgm: account: %d, GM level 0 -> %d.\n", acc, level); - if (sd != NULL) { - if (level > 0) - clif_displaymessage(sd->fd, "GM modification success."); - else - clif_displaymessage(sd->fd, "Failure of GM modification."); - } - - return 0; -} - /*========================================== * «•Ê•Ï‰»I—¹ (modified by Yor) *------------------------------------------*/ @@ -1448,7 +1403,6 @@ int chrif_parse(int fd) case 0x2b06: chrif_changemapserverack(RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10), RFIFOL(fd,14), RFIFOW(fd,18), RFIFOW(fd,20), RFIFOW(fd,22), RFIFOL(fd,24), RFIFOW(fd,28)); break; case 0x2b07: clif_updatemaxid(RFIFOL(fd,2), RFIFOL(fd,6)); break; case 0x2b09: map_addnickdb(RFIFOL(fd,2), (char*)RFIFOP(fd,6)); break; - case 0x2b0b: chrif_changedgm(fd); break; case 0x2b0d: chrif_changedsex(fd); break; case 0x2b0f: chrif_char_ask_name_answer(RFIFOL(fd,2), (char*)RFIFOP(fd,6), RFIFOW(fd,30), RFIFOW(fd,32)); break; case 0x2b12: chrif_divorceack(RFIFOL(fd,2), RFIFOL(fd,6)); break; diff --git a/src/map/chrif.h b/src/map/chrif.h index 661b4c809..05c6a334a 100644 --- a/src/map/chrif.h +++ b/src/map/chrif.h @@ -42,7 +42,6 @@ int chrif_charselectreq(struct map_session_data* sd, uint32 s_ip); int chrif_changemapserver(struct map_session_data* sd, uint32 ip, uint16 port); int chrif_searchcharid(int char_id); -int chrif_changegm(int id,const char *pass,int len); int chrif_changeemail(int id, const char *actual_email, const char *new_email); int chrif_char_ask_name(int acc, const char* character_name, unsigned short operation_type, int year, int month, int day, int hour, int minute, int second); int chrif_reloadGMdb(void); -- cgit v1.2.3-70-g09d2 From 55434bd1ddfeb0b66247dbe4c420048863d44446 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sun, 27 Apr 2008 09:15:05 +0000 Subject: Changed the last commit so it must be called with @reloaditemdb2. @reloaditemdb only removes the item_data from the itemdb subsystem. If you don't like my code you can uncomment the macro I_HATE_KEVIN in item_db.c so it isn't even compiled. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12662 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 3 +++ src/map/atcommand.c | 16 +++++++++++++++- src/map/clif.c | 31 ++++++++++++------------------- src/map/guild.c | 2 +- src/map/itemdb.c | 39 +++++++++++++++++---------------------- src/map/itemdb.h | 2 +- src/map/storage.h | 2 -- 7 files changed, 49 insertions(+), 46 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index d2deb9777..adc41db04 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -700,6 +700,9 @@ mapflag: 99 // Re-load item database (admin command) reloaditemdb: 99 +// Re-load item database and delete all references to it (admin command) +reloaditemdb2: 99 + // Re-load monsters database (admin command) reloadmobdb: 99 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 691035c61..628666df3 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -4049,12 +4049,25 @@ int atcommand_partyrecall(const int fd, struct map_session_data* sd, const char* int atcommand_reloaditemdb(const int fd, struct map_session_data* sd, const char* command, const char* message) { nullpo_retr(-1, sd); - itemdb_reload(); + itemdb_reload(0); clif_displaymessage(fd, msg_txt(97)); // Item database reloaded. return 0; } +/*========================================== + * + *------------------------------------------*/ +int atcommand_reloaditemdb2(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + nullpo_retr(-1, sd); + itemdb_reload(1); + clif_displaymessage(fd, msg_txt(97)); // Item database reloaded. + + return 0; +} + + /*========================================== * *------------------------------------------*/ @@ -8373,6 +8386,7 @@ AtCommandInfo atcommand_info[] = { { "localbroadcast", 40, atcommand_localbroadcast }, // + /lb and /nlb { "recallall", 80, atcommand_recallall }, { "reloaditemdb", 99, atcommand_reloaditemdb }, + { "reloaditemdb2", 99, atcommand_reloaditemdb2 }, { "reloadmobdb", 99, atcommand_reloadmobdb }, { "reloadskilldb", 99, atcommand_reloadskilldb }, { "reloadscript", 99, atcommand_reloadscript }, diff --git a/src/map/clif.c b/src/map/clif.c index 66a01b867..55e9b1776 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1894,27 +1894,20 @@ void clif_storagelist(struct map_session_data *sd,struct storage *stor) if(stor->storage_[i].nameid<=0) continue; id = itemdb_search(stor->storage_[i].nameid); - if(!id) - { - //Item not found, was probably deleted and then map server reloaded/item db reloaded - storage_delitem(sd, stor, i, stor->storage_[i].amount); - return; - } - else - if(!itemdb_isstackable2(id)) - { //Equippable - WBUFW(bufe,ne*20+4)=i+1; - clif_item_sub(bufe, ne*20+6, &stor->storage_[i], id, id->equip); - clif_addcards(WBUFP(bufe, ne*20+16), &stor->storage_[i]); - ne++; - } else { //Stackable - WBUFW(buf,n*s+4)=i+1; - clif_item_sub(buf, n*s+6, &stor->storage_[i], id,-1); + if(!itemdb_isstackable2(id)) + { //Equippable + WBUFW(bufe,ne*20+4)=i+1; + clif_item_sub(bufe, ne*20+6, &stor->storage_[i], id, id->equip); + clif_addcards(WBUFP(bufe, ne*20+16), &stor->storage_[i]); + ne++; + } else { //Stackable + WBUFW(buf,n*s+4)=i+1; + clif_item_sub(buf, n*s+6, &stor->storage_[i], id,-1); #if PACKETVER >= 5 - clif_addcards(WBUFP(buf,n*s+14), &stor->storage_[i]); + clif_addcards(WBUFP(buf,n*s+14), &stor->storage_[i]); #endif - n++; - } + n++; + } } if(n){ #if PACKETVER < 5 diff --git a/src/map/guild.c b/src/map/guild.c index 0f4ec272b..b4104f4d0 100644 --- a/src/map/guild.c +++ b/src/map/guild.c @@ -1594,7 +1594,7 @@ int guild_broken(int guild_id,int flag) if( (gc=guild_castle_search(i)) != NULL ){ if(gc->guild_id == guild_id){ safestrncpy(name, gc->castle_event, 50); - npc_event_do(strcat(name,"::OnGuildBreak")); + npc_event_do("::OnGuildBreak"); } } } diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 6cfbbca97..5fc174989 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -1015,18 +1015,6 @@ static void destroy_item_data(struct item_data* self, int free_self) /*========================================== * Looks for an item, returns NULL if not found *------------------------------------------*/ -struct item_data* itemdb_search2(int nameid) -{ - if( nameid >= 0 && nameid < ARRAYLENGTH(itemdb_array) ) - { - DBKey key; - if( itemdb_array[nameid] ) - return itemdb_array[nameid]; - key.i = nameid; - return NULL; - } - return (struct item_data*)idb_get(itemdb_other,nameid); -} static int itemdb_final_sub(DBKey key,void *data,va_list ap) { @@ -1038,6 +1026,9 @@ static int itemdb_final_sub(DBKey key,void *data,va_list ap) return 0; } +//Uncomment this if you're an elitist jerk who thinks this code is unecessary +//#define I_HATE_KEVIN +#ifndef I_HATE_KEVIN int itemdb_reload_check_npc(DBKey key,void * data,va_list ap) { struct npc_data * nd = (struct npc_data *)data; @@ -1049,7 +1040,7 @@ int itemdb_reload_check_npc(DBKey key,void * data,va_list ap) while(i < nd->u.shop.count) { - if(itemdb_search2(nd->u.shop.shop_item[i].nameid) == NULL) + if(itemdb_exists(nd->u.shop.shop_item[i].nameid) == NULL) { nd->u.shop.count--; @@ -1094,7 +1085,7 @@ static int itemdb_reload_check(DBKey key,void *data,va_list ap) if(!sd->status.inventory[i].nameid) continue; - id = itemdb_search2(sd->status.inventory[i].nameid); + id = itemdb_exists(sd->status.inventory[i].nameid); if(id == NULL) { sd->inventory_data[i] = NULL; @@ -1112,7 +1103,7 @@ static int itemdb_reload_check(DBKey key,void *data,va_list ap) if(!sd->status.cart[i].nameid) continue; - id = itemdb_search2(sd->status.cart[i].nameid); + id = itemdb_exists(sd->status.cart[i].nameid); if(id == NULL) { sd->inventory_data[i] = NULL; @@ -1131,7 +1122,7 @@ static int itemdb_reload_check(DBKey key,void *data,va_list ap) if(!sd->status.inventory[i].nameid) continue; - if(itemdb_search2(sd->status.inventory[i].nameid) == NULL) + if(itemdb_exists(sd->status.inventory[i].nameid) == NULL) storage_delitem(sd, stor, i, stor->storage_[i].amount); } } @@ -1154,7 +1145,7 @@ void itemdb_foreach_mobdb(void) continue; for(j=0; j < MAX_MOB_DROP; j++) { - id = itemdb_search2(mdb->dropitem[j].nameid); + id = itemdb_exists(mdb->dropitem[j].nameid); if(id == NULL) { mdb->dropitem[j].nameid = 0; @@ -1163,17 +1154,21 @@ void itemdb_foreach_mobdb(void) } } } +#endif -void itemdb_reload(void) +void itemdb_reload(int flag) { do_final_itemdb(); do_init_itemdb(); - //Update ALL items on the server - map_foreachpc(itemdb_reload_check); - npc_foreach(itemdb_reload_check_npc); - itemdb_foreach_mobdb(); + if(flag) + { + //Update ALL items on the server + map_foreachpc(itemdb_reload_check); + npc_foreach(itemdb_reload_check_npc); + itemdb_foreach_mobdb(); + } } void do_final_itemdb(void) diff --git a/src/map/itemdb.h b/src/map/itemdb.h index cbbee0932..0ea53748d 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -137,7 +137,7 @@ int itemdb_isidentified(int); int itemdb_isstackable(int); int itemdb_isstackable2(struct item_data *); -void itemdb_reload(void); +void itemdb_reload(int flag); void do_final_itemdb(void); int do_init_itemdb(void); diff --git a/src/map/storage.h b/src/map/storage.h index fa33e2050..0822d37ce 100644 --- a/src/map/storage.h +++ b/src/map/storage.h @@ -11,7 +11,6 @@ struct item; //#include "map.h" struct map_session_data; -struct storage *account2storage2(int account_id); int storage_storageopen(struct map_session_data *sd); int storage_storageadd(struct map_session_data *sd,int index,int amount); int storage_storageget(struct map_session_data *sd,int index,int amount); @@ -24,7 +23,6 @@ void do_final_storage(void); void do_reconnect_storage(void); struct storage* account2storage(int account_id); struct storage* account2storage2(int account_id); -int storage_delete(int account_id); int storage_storage_quit(struct map_session_data *sd, int flag); int storage_storage_save(int account_id, int final); int storage_storage_saved(int account_id); //Ack from char server that guild store was saved. -- cgit v1.2.3-70-g09d2 From af99be9bd11d716e0b8ef8eab4a36c9b9925e4c8 Mon Sep 17 00:00:00 2001 From: ultramage Date: Sun, 27 Apr 2008 11:06:55 +0000 Subject: Cleaning up the itemdb reload mess (see r12635, r12643, r12650, r12661, r12662, r12663) * the player data inventory-itemdb index is now refreshed using pc_setinventorydata() * mobdb will no longer initialize with nonexistent items, and mobs will no longer drop them in case of a reload * the clif_buylist() function once again hides invalid npc shop items * it is no longer possible to purchase nonexistent items from a npc shop * npc shop loading will not abort if there is a nonexistent item entry, it will just skip over it git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12665 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 10 --- conf/atcommand_athena.conf | 3 - src/map/atcommand.c | 16 +---- src/map/clif.c | 23 +++--- src/map/itemdb.c | 172 ++++++--------------------------------------- src/map/itemdb.h | 17 ++--- src/map/mob.c | 5 ++ src/map/mob.h | 5 -- src/map/npc.c | 20 ++---- src/map/npc.h | 2 - src/map/pc.c | 7 +- src/map/pc.h | 1 + src/map/storage.c | 2 +- src/map/storage.h | 1 - 14 files changed, 57 insertions(+), 227 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index bc21c8015..2dfd49ea9 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,16 +3,6 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. -2008/04/27 - * Fixed "suggest parentheses around assignment ..." gcc warning [Toms] - * Some major changes to @reloaditemdb to allow unloading of any item - while map server is running. - - Delete any item from inventory/cart/open storages that went missing - during the reload. - - Delete item from any shop that has this item. - - Refresh item screen for anyone who has a shop open. - - Delete mob db drop table references. - - Delete item from storage during load if it isn't in the item db. [Kevin] 2008/04/26 * Added script function hasquest. [Kevin] * Fixed OnGuildBreak. [Kevin] diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index adc41db04..d2deb9777 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -700,9 +700,6 @@ mapflag: 99 // Re-load item database (admin command) reloaditemdb: 99 -// Re-load item database and delete all references to it (admin command) -reloaditemdb2: 99 - // Re-load monsters database (admin command) reloadmobdb: 99 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 628666df3..691035c61 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -4049,25 +4049,12 @@ int atcommand_partyrecall(const int fd, struct map_session_data* sd, const char* int atcommand_reloaditemdb(const int fd, struct map_session_data* sd, const char* command, const char* message) { nullpo_retr(-1, sd); - itemdb_reload(0); + itemdb_reload(); clif_displaymessage(fd, msg_txt(97)); // Item database reloaded. return 0; } -/*========================================== - * - *------------------------------------------*/ -int atcommand_reloaditemdb2(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - nullpo_retr(-1, sd); - itemdb_reload(1); - clif_displaymessage(fd, msg_txt(97)); // Item database reloaded. - - return 0; -} - - /*========================================== * *------------------------------------------*/ @@ -8386,7 +8373,6 @@ AtCommandInfo atcommand_info[] = { { "localbroadcast", 40, atcommand_localbroadcast }, // + /lb and /nlb { "recallall", 80, atcommand_recallall }, { "reloaditemdb", 99, atcommand_reloaditemdb }, - { "reloaditemdb2", 99, atcommand_reloaditemdb2 }, { "reloadmobdb", 99, atcommand_reloadmobdb }, { "reloadskilldb", 99, atcommand_reloadskilldb }, { "reloadscript", 99, atcommand_reloadscript }, diff --git a/src/map/clif.c b/src/map/clif.c index 55e9b1776..4e6637a5e 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -1389,26 +1389,32 @@ int clif_npcbuysell(struct map_session_data* sd, int id) *------------------------------------------*/ int clif_buylist(struct map_session_data *sd, struct npc_data *nd) { - int fd,i; + int fd,i,c; nullpo_retr(0, sd); nullpo_retr(0, nd); fd = sd->fd; - WFIFOHEAD(fd, 200 * 11 + 4); + WFIFOHEAD(fd, 4 + nd->u.shop.count * 11); WFIFOW(fd,0) = 0xc6; - WFIFOW(fd,2) = 4 + nd->u.shop.count*11; + + c = 0; for( i = 0; i < nd->u.shop.count; i++ ) { - struct item_data* id = itemdb_search(nd->u.shop.shop_item[i].nameid); + struct item_data* id = itemdb_exists(nd->u.shop.shop_item[i].nameid); int val = nd->u.shop.shop_item[i].value; - WFIFOL(fd,4+i*11) = val; + if( id == NULL ) + continue; + WFIFOL(fd, 4+c*11) = val; if (!id->flag.value_notdc) val = pc_modifybuyvalue(sd,val); - WFIFOL(fd,8+i*11) = val; - WFIFOB(fd,12+i*11) = itemtype(id->type); - WFIFOW(fd,13+i*11) = ( id->view_id > 0 ) ? id->view_id : id->nameid; + WFIFOL(fd, 8+c*11) = val; + WFIFOB(fd,12+c*11) = itemtype(id->type); + WFIFOW(fd,13+c*11) = ( id->view_id > 0 ) ? id->view_id : id->nameid; + c++; } + + WFIFOW(fd,2) = 4 + c*11; WFIFOSET(fd,WFIFOW(fd,2)); return 0; @@ -8838,6 +8844,7 @@ void clif_parse_NpcBuyListSend(int fd,struct map_session_data *sd) fail = npc_buylist(sd,n,item_list); sd->npc_shopid = 0; //Clear shop data. + WFIFOHEAD(fd,packet_len(0xca)); WFIFOW(fd,0)=0xca; WFIFOB(fd,2)=fail; diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 979ba4a39..3bcd07cf1 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -10,10 +10,6 @@ #include "battle.h" // struct battle_config #include "script.h" // item script processing #include "pc.h" // W_MUSICAL, W_WHIP -#include "storage.h" -#include "npc.h" -#include "clif.h" -#include "mob.h" #include #include @@ -693,7 +689,7 @@ static int itemdb_gendercheck(struct item_data *id) /*========================================== * processes one itemdb entry *------------------------------------------*/ -static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scriptopt, int db) +static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scriptopt) { /* +----+--------------+---------------+------+-----------+------------+--------+--------+---------+-------+-------+------------+-------------+---------------+-----------------+--------------+-------------+------------+------+--------+--------------+----------------+ @@ -717,9 +713,6 @@ static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scr safestrncpy(id->name, str[1], sizeof(id->name)); safestrncpy(id->jname, str[2], sizeof(id->jname)); - if(db == 1) - id->flag.db2 = 1; - id->type = atoi(str[3]); if (id->type == IT_DELAYCONSUME) { //Items that are consumed only after target confirmation @@ -907,7 +900,8 @@ static int itemdb_readdb(void) } str[21] = p; - if (!itemdb_parse_dbrow(str, path, lines, 0, fi)) + + if (!itemdb_parse_dbrow(str, path, lines, 0)) continue; count++; @@ -954,7 +948,7 @@ static int itemdb_read_sqldb(void) if( str[i] == NULL ) str[i] = dummy; // get rid of NULL columns } - if (!itemdb_parse_dbrow(str, item_db_name[fi], lines, SCRIPT_IGNORE_EXTERNAL_BRACKETS, fi)) + if (!itemdb_parse_dbrow(str, item_db_name[fi], lines, SCRIPT_IGNORE_EXTERNAL_BRACKETS)) continue; ++count; } @@ -1012,13 +1006,6 @@ static void destroy_item_data(struct item_data* self, int free_self) aFree(self); } -/*========================================== - * This comment shall be a monument to cake. - * The cake is NOT a lie in eAthena. - * We are so awesome we have our own cake. - * Please spam Cyxult with endless PMs to get your cake. - *------------------------------------------*/ - static int itemdb_final_sub(DBKey key,void *data,va_list ap) { struct item_data *id = (struct item_data *)data; @@ -1029,149 +1016,30 @@ static int itemdb_final_sub(DBKey key,void *data,va_list ap) return 0; } -//Uncomment this if you're an elitist jerk who thinks this code is unecessary -//#define I_HATE_KEVIN -#ifndef I_HATE_KEVIN -int itemdb_reload_check_npc(DBKey key,void * data,va_list ap) +void itemdb_reload(void) { - struct npc_data * nd = (struct npc_data *)data; - int offset = 0, i = 0; - - if(nd->subtype != SHOP && nd->subtype != CASHSHOP) - return 0; - - while(i < nd->u.shop.count) - { - - if(itemdb_exists(nd->u.shop.shop_item[i].nameid) == NULL) - { - - nd->u.shop.count--; - - //Shift array to left, overwriting old data - for(offset = i; offset+1 < nd->u.shop.count; offset++); - { - nd->u.shop.shop_item[offset].nameid = nd->u.shop.shop_item[offset+1].nameid; - nd->u.shop.shop_item[offset].value = nd->u.shop.shop_item[offset+1].value; - } - - } - //increment counter if we didn't delete something - else - i++; - - } - - //Resize array - RECREATE(nd->u.shop.shop_item, struct npc_item_list, nd->u.shop.count); - - return 0; -} + struct s_mapiterator* iter; + struct map_session_data* sd; -static int itemdb_reload_check(DBKey key,void *data,va_list ap) -{ int i; - struct map_session_data *sd = (struct map_session_data *)data; - struct storage * stor; - struct item_data * id; - struct npc_data * nd; - - if(sd->npc_shopid) - { - nd = (struct npc_data*)map_id2bl(sd->npc_shopid); - clif_buylist(sd, nd); - } - - //First, handle all items in inventories/equiped, cart, and storage - for(i = 0; i < MAX_INVENTORY; i++) - { - if(!sd->status.inventory[i].nameid) - continue; - - id = itemdb_exists(sd->status.inventory[i].nameid); - if(id == NULL) - { - sd->inventory_data[i] = NULL; - pc_delitem(sd, i, sd->status.inventory[i].amount, 4); - } - else - { - sd->inventory_data[i] = id; - } - } - //Delete nonexistant items from cart - for(i = 0; i < MAX_CART; i++) - { - if(!sd->status.cart[i].nameid) - continue; - - id = itemdb_exists(sd->status.cart[i].nameid); - if(id == NULL) - { - sd->inventory_data[i] = NULL; - pc_cart_delitem(sd, i, sd->status.cart[i].amount, 0); - } - } - - //Delete storage - if((stor = account2storage2(sd->status.account_id))) - { - //If storage isn't found, it will be deleted whenever storage is loaded again - if(stor) - { - for(i = 0; i < MAX_STORAGE; i++) - { - if(!sd->status.inventory[i].nameid) - continue; - - if(itemdb_exists(sd->status.inventory[i].nameid) == NULL) - storage_delitem(sd, stor, i, stor->storage_[i].amount); - } - } - } - - return 0; -} - -//Cleanup mob db drop tables -void itemdb_foreach_mobdb(void) -{ - int i = 0, j = 0; - struct item_data * id; - s_mob_db * mdb; + // clear the previous itemdb data + for( i = 0; i < ARRAYLENGTH(itemdb_array); ++i ) + if( itemdb_array[i] ) + destroy_item_data(itemdb_array[i], 1); - for(i=0; i < MAX_MOB_DB; i++) - { - mdb = mob_db(i); - if(mdb == mob_dummy) - continue; - for(j=0; j < MAX_MOB_DROP; j++) - { - id = itemdb_exists(mdb->dropitem[j].nameid); - if(id == NULL) - { - mdb->dropitem[j].nameid = 0; - mdb->dropitem[j].p = 0; - } - } - } -} -#endif + itemdb_other->clear(itemdb_other, itemdb_final_sub); -void itemdb_reload(int flag) -{ + memset(itemdb_array, 0, sizeof(itemdb_array)); - do_final_itemdb(); - do_init_itemdb(); + // read new data + itemdb_read(); - if(flag) - { - //Update ALL items on the server - map_foreachpc(itemdb_reload_check); - npc_foreach(itemdb_reload_check_npc); - itemdb_foreach_mobdb(); - } + // readjust itemdb pointer cache for each player + iter = mapit_geteachpc(); + for( sd = (struct map_session_data*)mapit_first(iter); mapit_exists(iter); sd = (struct map_session_data*)mapit_next(iter) ) + pc_setinventorydata(sd); + mapit_free(iter); } void do_final_itemdb(void) diff --git a/src/map/itemdb.h b/src/map/itemdb.h index 0ea53748d..6be49f3e9 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -34,8 +34,8 @@ #define UNKNOWN_ITEM_ID 512 struct item_data { - char name[ITEM_NAME_LENGTH],jname[ITEM_NAME_LENGTH]; int nameid; + char name[ITEM_NAME_LENGTH],jname[ITEM_NAME_LENGTH]; //Do not add stuff between value_buy and wlv (see how getiteminfo works) int value_buy; int value_sell; @@ -56,27 +56,24 @@ struct item_data { // some script commands should be revised as well... unsigned int class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2) unsigned class_upper : 3; //Specifies if the upper-type can equip it (bitfield, 1: normal, 2: upper, 3: baby) - unsigned unused : 5; struct { unsigned short chance; int id; } mob[MAX_SEARCH]; //Holds the mobs that have the highest drop rate for this item. [Skotlex] + struct script_code *script; //Default script for everything. + struct script_code *equip_script; //Script executed once when equipping. + struct script_code *unequip_script;//Script executed once when unequipping. struct { unsigned available : 1; unsigned value_notdc : 1; unsigned value_notoc : 1; + short no_equip; unsigned no_refine : 1; // [celest] unsigned delay_consume : 1; // Signifies items that are not consumed immediately upon double-click [Skotlex] - unsigned autoequip: 1; - unsigned unused:2; - unsigned db2: 1; //Items from the custom item database (item_db2) unsigned trade_restriction : 7; //Item restrictions mask [Skotlex] - short no_equip; + unsigned autoequip: 1; } flag; short gm_lv_trade_override; //GM-level to override trade_restriction - struct script_code *script; //Default script for everything. - struct script_code *equip_script; //Script executed once when equipping. - struct script_code *unequip_script;//Script executed once when unequipping. }; struct item_group { @@ -137,7 +134,7 @@ int itemdb_isidentified(int); int itemdb_isstackable(int); int itemdb_isstackable2(struct item_data *); -void itemdb_reload(int flag); +void itemdb_reload(void); void do_final_itemdb(void); int do_init_itemdb(void); diff --git a/src/map/mob.c b/src/map/mob.c index 2288227b4..a7fc4a783 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2310,12 +2310,15 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) { if (md->db->dropitem[i].nameid <= 0) continue; + if (!itemdb_exists(md->db->dropitem[i].nameid)) + continue; drop_rate = md->db->dropitem[i].p; if (drop_rate <= 0) { if (battle_config.drop_rate0item) continue; drop_rate = 1; } + // change drops depending on monsters size [Valaris] if(md->special_state.size==1 && drop_rate >= 2) drop_rate/=2; @@ -2456,6 +2459,8 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) if(md->db->mvpitem[i].nameid <= 0) continue; + if(!itemdb_exists(md->db->mvpitem[i].nameid)) + continue; temp = md->db->mvpitem[i].p; if(temp <= 0 && !battle_config.drop_rate0item) diff --git a/src/map/mob.h b/src/map/mob.h index 44fae102e..f01b4fff1 100644 --- a/src/map/mob.h +++ b/src/map/mob.h @@ -83,11 +83,6 @@ struct mob_db { struct spawn_info spawn[10]; }; -typedef struct mob_db s_mob_db; -extern struct mob_db *mob_db_data[MAX_MOB_DB+1]; -struct mob_db *mob_db(int index); -extern struct mob_db *mob_dummy; - struct mob_data { struct block_list bl; struct unit_data ud; diff --git a/src/map/npc.c b/src/map/npc.c index f1ff119da..683be8620 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -150,19 +150,6 @@ struct npc_data* npc_name2id(const char* name) return (struct npc_data *) strdb_get(npcname_db, name); } - -/*========================================== - * Run function for each npc - *------------------------------------------*/ - -void npc_foreach(int (*func)(DBKey, void*, va_list), ...) -{ - va_list ap; - va_start(ap, func); - npcname_db->vforeach(npcname_db, func, ap); - va_end(ap); -} - /*========================================== * ƒCƒxƒ“ƒgƒLƒ…[‚̃Cƒxƒ“ƒgˆ— *------------------------------------------*/ @@ -1128,7 +1115,7 @@ int npc_buylist(struct map_session_data* sd, int n, unsigned short* item_list) itemdb_viewid(nd->u.shop.shop_item[j].nameid)==item_list[i*2+1]) //item_avail replacement break; } - if (nd->u.shop.shop_item[j].nameid == 0) + if (nd->u.shop.shop_item[j].nameid == 0 || !itemdb_exists(nd->u.shop.shop_item[j].nameid)) return 3; if (!itemdb_isstackable(nd->u.shop.shop_item[j].nameid) && item_list[i*2] > 1) @@ -1687,8 +1674,9 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const if( (id = itemdb_exists(nameid)) == NULL ) { - ShowError("npc_parse_shop: Invalid sell item in file '%s', line '%d'. Ignoring the rest of the line...\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,start-buffer), w1, w2, w3, w4); - break; + ShowWarning("npc_parse_shop: Invalid sell item in file '%s', line '%d' (id '%d').\n", filepath, strline(buffer,start-buffer), nameid); + p = strchr(p+1,','); + continue; } if( value < 0 ) diff --git a/src/map/npc.h b/src/map/npc.h index 93fb3fa60..f75ede9c5 100644 --- a/src/map/npc.h +++ b/src/map/npc.h @@ -146,8 +146,6 @@ int npc_script_event(struct map_session_data* sd, enum npce_event type); int npc_cashshop_buy(struct map_session_data *sd, int nameid, int amount, int points); -void npc_foreach(int (*func)(DBKey,void*,va_list), ...); - extern struct npc_data* fake_nd; #endif /* _NPC_H_ */ diff --git a/src/map/pc.c b/src/map/pc.c index 7d268a0f5..0557708cb 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2965,12 +2965,11 @@ int pc_delitem(struct map_session_data *sd,int n,int amount,int type) { nullpo_retr(1, sd); - if(sd->status.inventory[n].nameid==0 || amount <= 0 || sd->status.inventory[n].amountinventory_data[n] == NULL && ~type&4)) + if(sd->status.inventory[n].nameid==0 || amount <= 0 || sd->status.inventory[n].amountinventory_data[n] == NULL) return 1; sd->status.inventory[n].amount -= amount; - if(~type&4) - sd->weight -= sd->inventory_data[n]->weight*amount ; + sd->weight -= sd->inventory_data[n]->weight*amount ; if(sd->status.inventory[n].amount<=0){ if(sd->status.inventory[n].equip) pc_unequipitem(sd,n,3); @@ -3458,7 +3457,7 @@ int pc_steal_item(struct map_session_data *sd,struct block_list *bl, int lv) // Try dropping one item, in the order from first to last possible slot. // Droprate is affected by the skill success rate. for( i = 0; i < MAX_STEAL_DROP; i++ ) - if( md->db->dropitem[i].nameid > 0 && rand() % 10000 < md->db->dropitem[i].p * rate/100. ) + if( md->db->dropitem[i].nameid > 0 && itemdb_exists(md->db->dropitem[i].nameid) && rand() % 10000 < md->db->dropitem[i].p * rate/100. ) break; if( i == MAX_STEAL_DROP ) return 0; diff --git a/src/map/pc.h b/src/map/pc.h index 24a882431..a8f0b57df 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -502,6 +502,7 @@ int pc_reg_received(struct map_session_data *sd); int pc_isequip(struct map_session_data *sd,int n); int pc_equippoint(struct map_session_data *sd,int n); +int pc_setinventorydata(struct map_session_data *sd); int pc_checkskill(struct map_session_data *sd,int skill_id); int pc_checkallowskill(struct map_session_data *sd); diff --git a/src/map/storage.c b/src/map/storage.c index f43ee7f04..c2e4bf5f7 100644 --- a/src/map/storage.c +++ b/src/map/storage.c @@ -224,7 +224,7 @@ static int storage_additem(struct map_session_data *sd,struct storage *stor,stru /*========================================== * Internal del-item function *------------------------------------------*/ -int storage_delitem(struct map_session_data *sd,struct storage *stor,int n,int amount) +static int storage_delitem(struct map_session_data *sd,struct storage *stor,int n,int amount) { if(stor->storage_[n].nameid==0 || stor->storage_[n].amount Date: Sun, 27 Jul 2008 07:07:20 +0000 Subject: * Removed some leftover code that shouldn't have been merged * Possibly corrected a guild saving problem (bugreport:1908) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13003 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 2 ++ conf/atcommand_athena.conf | 3 --- configure | 36 ++---------------------------------- src/common/mmo.h | 5 ++--- vcproj-6/login-server_txt.dsp | 4 ---- vcproj-7.1/login-server_txt.vcproj | 3 --- vcproj-8/login-server_txt.vcproj | 4 ---- 7 files changed, 6 insertions(+), 51 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index f8679cabf..70251b7ba 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2008/07/27 + * Possibly corrected a guild saving problem (bugreport:1908) + * Removed some leftover code that shouldn't have been merged [ultramage] * Fixed a memory leak in mmo_auth_tosql (extra sql statement being allocated). * Added missing option 'log_db_db' to loginlog_config_read(loginlog_sql.c). * Fixed a memory leak in account_db_sql_destroy. [FlavioJS] diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index d2deb9777..af2fd1c26 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -709,9 +709,6 @@ reloadskilldb: 99 // Re-load scripts (admin command) reloadscript: 99 -// Re-load GM level (admin command) -reloadgmdb: 99 - // Change a battle_config flag without rebooting server setbattleflag: 99 diff --git a/configure b/configure index 290958782..c94e71e72 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 12731 . +# From configure.in Revision: 13000 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61. # @@ -663,7 +663,6 @@ OBJEXT CPP GREP EGREP -HAVE_OPENRJ_TXT MYSQL_CONFIG_HOME HAVE_MYSQL MYSQL_VERSION @@ -1261,8 +1260,6 @@ Optional Features: instead of TXT files in the sql map-server. (disabled by default) --enable-debug Compiles extra debug code. (disabled by default) - --disable-openrj-txt Disables the openrj-based account engine in the TXT - login-server (enabled by default) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1810,28 +1807,6 @@ fi -# -# OpenRJ account engine in the txt login server -# -# Check whether --enable-openrj-txt was given. -if test "${enable_openrj_txt+set}" = set; then - enableval=$enable_openrj_txt; - HAVE_OPENRJ_TXT="$enableval" - case $enableval in - no);; - yes);; - *) { { echo "$as_me:$LINENO: error: invalid argument --enable-openrj-txt=$enableval... stopping" >&5 -echo "$as_me: error: invalid argument --enable-openrj-txt=$enableval... stopping" >&2;} - { (exit 1); exit 1; }; };; - esac - -else - HAVE_OPENRJ_TXT="yes" - -fi - - - # # Enable/disable MySql and optionally specify the path to mysql_config (optional library) # @@ -4555,12 +4530,6 @@ if test "$enable_debug" = "yes" ; then fi -# -# OpenRJ account engine in the txt login server -# - - - # # zlib library (required) # @@ -6145,7 +6114,6 @@ OBJEXT!$OBJEXT$ac_delim CPP!$CPP$ac_delim GREP!$GREP$ac_delim EGREP!$EGREP$ac_delim -HAVE_OPENRJ_TXT!$HAVE_OPENRJ_TXT$ac_delim MYSQL_CONFIG_HOME!$MYSQL_CONFIG_HOME$ac_delim HAVE_MYSQL!$HAVE_MYSQL$ac_delim MYSQL_VERSION!$MYSQL_VERSION$ac_delim @@ -6159,7 +6127,7 @@ LIBOBJS!$LIBOBJS$ac_delim LTLIBOBJS!$LTLIBOBJS$ac_delim _ACEOF - if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 60; then + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 59; then break elif $ac_last_try; then { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 diff --git a/src/common/mmo.h b/src/common/mmo.h index 9e419c65b..858a8a513 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -414,9 +414,8 @@ struct guild { struct guild_alliance alliance[MAX_GUILDALLIANCE]; struct guild_expulsion expulsion[MAX_GUILDEXPULSION]; struct guild_skill skill[MAX_GUILDSKILL]; -#ifndef TXT_ONLY - unsigned short save_flag; -#endif + + unsigned short save_flag; // for TXT saving }; struct guild_castle { diff --git a/vcproj-6/login-server_txt.dsp b/vcproj-6/login-server_txt.dsp index 8f93aaa7b..f1d604759 100644 --- a/vcproj-6/login-server_txt.dsp +++ b/vcproj-6/login-server_txt.dsp @@ -191,10 +191,6 @@ SOURCE=..\src\login\account.h # End Source File # Begin Source File -SOURCE=..\src\login\account_rj.c -# End Source File -# Begin Source File - SOURCE=..\src\login\account_txt.c # End Source File # Begin Source File diff --git a/vcproj-7.1/login-server_txt.vcproj b/vcproj-7.1/login-server_txt.vcproj index 266289303..37086403c 100644 --- a/vcproj-7.1/login-server_txt.vcproj +++ b/vcproj-7.1/login-server_txt.vcproj @@ -148,9 +148,6 @@ - - diff --git a/vcproj-8/login-server_txt.vcproj b/vcproj-8/login-server_txt.vcproj index 61e395b30..4ed7a7d61 100644 --- a/vcproj-8/login-server_txt.vcproj +++ b/vcproj-8/login-server_txt.vcproj @@ -205,10 +205,6 @@ RelativePath="..\src\login\account.h" > - - -- cgit v1.2.3-70-g09d2 From 1fe43024299ca9bbe18791a86080b459c96c3227 Mon Sep 17 00:00:00 2001 From: sketchyphoenix Date: Thu, 18 Dec 2008 02:36:01 +0000 Subject: Removed charcommand code while allowing atcommand code to support its functionality. Charcommands still retain their '#' symbol but now looks for a character name as the first parameter instead of last. Atcommand configs now support charcommand level configurations by comma seperation (e.g. 60,99) As a result of this, all atcommands that don't affect multiple users already (@kickall, @doom, @mapexit) are capable of remote usage. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13403 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 5 + conf/atcommand_athena.conf | 575 ++--- conf/charcommand_athena.conf | 275 --- conf/import-tmpl/charcommand_conf.txt | 0 doc/script_commands.txt | 19 +- src/map/Makefile.in | 4 +- src/map/atcommand.c | 721 +++--- src/map/atcommand.h | 3 +- src/map/charcommand.c | 3936 --------------------------------- src/map/charcommand.h | 19 - src/map/chat.c | 1 + src/map/clif.c | 9 +- src/map/map.c | 6 +- src/map/map.h | 1 - src/map/pc.c | 1 + src/map/script.c | 29 +- vcproj-6/map-server_sql.dsp | 8 - vcproj-6/map-server_txt.dsp | 8 - vcproj-7.1/map-server_sql.vcproj | 6 - vcproj-7.1/map-server_txt.vcproj | 6 - vcproj-8/map-server_sql.vcproj | 8 - vcproj-8/map-server_txt.vcproj | 8 - vcproj-9/map-server_sql.vcproj | 8 - vcproj-9/map-server_txt.vcproj | 26 +- 24 files changed, 730 insertions(+), 4952 deletions(-) delete mode 100644 conf/charcommand_athena.conf delete mode 100644 conf/import-tmpl/charcommand_conf.txt delete mode 100644 src/map/charcommand.c delete mode 100644 src/map/charcommand.h (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 8eb1401a0..53b3a613e 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,11 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2008/12/17 + * Removed charcommand code and allowed atcommand code to support its functionality. [SketchyPhoenix] + - Charcommands still retain their '#' symbol but now looks for a character name as the first parameter instead of last. + - Atcommand configs now support charcommand level configurations by comma seperation (e.g. 60,99). + - As a result of this, all atcommands that don't affect multiple users already (@kickall, @doom, @mapexit) are capable of remote usage. 2008/12/01 * Fixed rare crash when using Flying Kick on clones (bugreport:2506) [ultramage] * Corrected Flying Kick's debuff rules to match official servers diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index af2fd1c26..d8ef70652 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -9,8 +9,9 @@ // The symbol must also be different from from the GM charcommand symbol. command_symbol: @ -// The following settings in this file use the format ": level". +// The following settings in this file use the format ": level(@),level(#)". // They define the minimum GM level required to execute the associated command. +// @ = self use, # = useable on other players // Adjust values as you like. Note that to activate commands for normal players, // (GM level 0), you also need to change the 'atcommand_gm_only' option to 'no'. // To completely disable a command, set its required GM level to 100. @@ -46,728 +47,728 @@ command_symbol: @ // 1: Super player commands // Displays a list of @ commands available to the player. -commands: 1 +commands: 1,1 // Displays the server rates. -rates: 1 +rates: 1,1 // Show server uptime -uptime: 1 +uptime: 1,1 // Shows/Hides the "there is a delay after a skill" message. -showdelay: 1 +showdelay: 1,1 // Displays current levels and % progress. -exp: 1 +exp: 1,1 // To change your (own) email (characters protection) // note: this command doesn't check email itself, but check structure of the email (xxx@xxx) // if you want be sure of each e-mail disable this option (value: 100) -email: 1 +email: 1,1 // Show Monster info (rates, stats, drops, MVP stuff) -mobinfo: 1 -monsterinfo: 1 -mi: 1 +mobinfo: 1,1 +monsterinfo: 1,1 +mi: 1,1 // Show Item info (type, price, etc) -iteminfo: 1 -ii: 1 +iteminfo: 1,1 +ii: 1,1 // Show who drops an item (mobs with highest drop rate) -whodrops: 1 +whodrops: 1,1 // Syncs the player's position on the client with the one stored on the server. -refresh: 1 +refresh: 1,1 // Give server time. (6 same commands) -time: 1 -date: 1 -serverdate: 1 -servertime: 1 +time: 1,1 +date: 1,1 +serverdate: 1,1 +servertime: 1,1 // Displays SVN version of the server. -version: 1 +version: 1,1 // Suicide your character. -die: 1 +die: 1,1 // Enables you to rename your pet. -petrename: 1 +petrename: 1,1 // Organize a new party, with you as the party leader. -party: 1 +party: 1,1 // Brings up your personal storage wherever you are. -storage: 1 +storage: 1,1 // Opens your mailbox. -mail: 1 +mail: 1,1 // Opens auctions window. -auction: 1 +auction: 1,1 // Locate someone on a map, returns your coordinates if the person isn't on. -where: 1 +where: 1,1 // Duel organizing commands -duel: 1 -invite: 1 -accept: 1 -reject: 1 -leave: 1 +duel: 1,1 +invite: 1,1 +accept: 1,1 +reject: 1,1 +leave: 1,1 // Away messsage -away: 1 -aw: 1 +away: 1,1 +aw: 1,1 // Main chat -main: 1 +main: 1,1 // Autorejecting Deals/Invites -noask: 1 +noask: 1,1 // Displays remaining jail time -jailtime: 1 +jailtime: 1,1 // Homunculus commands for players -hominfo: 1 -homstats: 1 +hominfo: 1,1 +homstats: 1,1 // Kill Steal Protection -noks: 1 +noks: 1,1 //--------------------------- // 10: Super player+ commands // Displays/Hides Experience gained -showexp: 10 +showexp: 10,10 // Displays/Hides Zeny gained -showzeny: 10 +showzeny: 10,10 // Warps you to predefined locations in major cities. -go: 10 +go: 10,10 // Enables/disables autolooting from killed mobs. -autoloot: 10 +autoloot: 10,10 // Enables/disables autolooting an item. -alootid: 10 +alootid: 10,10 // Allows you continue vending offline. -autotrade: 10 -at: 10 +autotrade: 10,10 +at: 10,10 // Change Guild Master of your Guild -changegm: 10 +changegm: 10,10 // Change the leader of your party. -changeleader: 10 +changeleader: 10,10 // Change the party exp- and item share rules. -partyoption: 10 +partyoption: 10,10 // Command what the player's pet will say. -pettalk: 10 +pettalk: 10,10 // Command what the player's homunculus will say. -homtalk: 10 +homtalk: 10,10 // Locates and displays the position of a certain mob on the current map. -mobsearch: 10 +mobsearch: 10,10 // Locates and displays the position of a certain mob on your mini-map -showmobs: 10 +showmobs: 10,10 // Prints out in which maps a monster normally spawns at (does not count script-invoked mobs) -whereis: 10 +whereis: 10,10 // Resets a Star Gladiator's marked maps -feelreset: 10 +feelreset: 10,10 //---------------------- // 20: Mediator commands // Displays helpfile in eAthena base directory (2 same commands). -help: 20 -h: 20 -help2: 20 -h2: 20 +help: 20,20 +h: 20,20 +help2: 20,20 +h2: 20,20 // Warp yourself to a person (3 same commands + /shift). -jumpto: 20 -goto: 20 -warpto: 20 +jumpto: 20,20 +goto: 20,20 +warpto: 20,20 // Displays the motd file to all players -gmotd: 20 +gmotd: 20,20 // Follow a player (including warping to them) -follow: 20 +follow: 20,20 // Sends a request to all connected GMs (via the gm whisper system) -request: 20 +request: 20,20 // Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). -kick: 20 +kick: 20,20 // Changes your appearance. -model: 20 +model: 20,20 // To get a peco to (un)ride (2 same commands). -mountpeco: 20 -mount: 20 +mountpeco: 20,20 +mount: 20,20 // Returns list of logged in characters with their position (2 same commands). -who: 20 -whois: 20 +who: 20,20 +whois: 20,20 // Returns list of logged in characters with their job. -who2: 20 +who2: 20,20 // Returns list of logged in characters with their party/guild. -who3: 20 +who3: 20,20 // Returns list of logged in characters with their position in a specifical map. -whomap: 20 +whomap: 20,20 // Returns list of logged in characters with their job in a specifical map. -whomap2: 20 +whomap2: 20,20 // Returns list of logged in characters with their party/guild in a specifical map. -whomap3: 20 +whomap3: 20,20 // Displays GMs online. For those who are higher GM level than yourself, // only the name is shown, for the rest, it displays the same info of // @who+@who2+who3 -whogm: 20 +whogm: 20,20 // Change your appearence to other players to a mob. -disguise: 20 +disguise: 20,20 // Restore your normal appearance. -undisguise: 20 +undisguise: 20,20 // Displays the text as a normal message with the format "*name message*" // instead of "name : message" (Like the /me command in IRC) -me: 20 +me: 20,20 // Changes your name to your choice temporarily. -fakename: 20 +fakename: 20,20 // Changes your size. -size: 20 +size: 20,20 // Can command what other npcs (by name) can say. -npctalk: 20 +npctalk: 20,20 //-------------------- // 40: Sub-GM commands // Broadcast to the whole server. Using (1 command + /nb, /b). -broadcast: 40 +broadcast: 40,40 // Broadcast to the map you are on (1 command + /lb, /nlb). -localbroadcast: 40 +localbroadcast: 40,40 // Broadcast (with or without name) -kami: 40 +kami: 40,40 // Same as kami but with blue color -kamib: 40 +kamib: 40,40 // Same as kami but you can choose the color (uses different packet) -kamic: 40 +kamic: 40,40 // Enables GvG on a map (2 same commands). -gvgon: 40 -gpvpon: 40 +gvgon: 40,40 +gpvpon: 40,40 // Turns GvG (Guild vs. Guild) off on a map (2 same commands). -gvgoff: 40 -gpvpoff: 40 +gvgoff: 40,40 +gpvpoff: 40,40 // Activate/Deactivate kill steal protection on a map -allowks: 40 +allowks: 40,40 // Modifies your HP/SP. -heal: 40 +heal: 40,40 // GM Hide (total invisibility to characters and monsters) (1 command + /hide). -hide: 40 +hide: 40,40 // Changes your job to one you specify (2 same commands). -job: 40 -jobchange: 40 +job: 40,40 +jobchange: 40,40 // Enables you to to jump randomly on a map (that you are already on). -jump: 40 +jump: 40,40 // Warps you to your last save point (2 same commands). -load: 40 -return: 40 +load: 40,40 +return: 40,40 // Warps you to a specific npc -tonpc: 40 +tonpc: 40,40 // Saves a warp point. -memo: 40 +memo: 40,40 // Set your character display options. (Visual effects of your character) -option: 40 +option: 40,40 // Sets the level of intemecy of your pet. -petfriendly: 40 +petfriendly: 40,40 // Sets hunger level of your pet. -pethungry: 40 +pethungry: 40,40 // Turns PvP (Person vs. Person) off on a map. -pvpoff: 40 +pvpoff: 40,40 // Enables PvP on a map. -pvpon: 40 +pvpon: 40,40 // Permanently adds/removes a quest skill -questskill: 40 -lostskill: 40 +questskill: 40,40 +lostskill: 40,40 // Sets the speed you can walk/attack at. Default is 150. -speed: 40 +speed: 40,40 // Summons spirit spheres around you. -spiritball: 40 +spiritball: 40,40 // Warp yourself to a certain map, at (x,y) coordinates (2 same commands). -mapmove: 40 // (also /mm or /mapmove) -rura: 40 -warp: 40 +mapmove: 40,40 // (also /mm or /mapmove) +rura: 40,40 +warp: 40,40 // Changes GM clothes color (2 same commands) -dye: 40 -ccolor: 40 +dye: 40,40 +ccolor: 40,40 // Changes GM hair style (2 same commands) -hairstyle: 40 -hstyle: 40 +hairstyle: 40,40 +hstyle: 40,40 // Changes GM hair color (2 same commands) -haircolor: 40 -hcolor: 40 +haircolor: 40,40 +hcolor: 40,40 // Deletes all your items. -itemreset: 40 +itemreset: 40,40 // Does a skill/stat reset. -reset: 40 +reset: 40,40 // Displays distribution of players on the server per map (% on each map which has players) -users: 40 +users: 40,40 // Deletes floor items in your range of sight -cleanmap: 40 +cleanmap: 40,40 // Kill all monsters in map (without drops) -killmonster2: 40 +killmonster2: 40,40 // Sets your spawn point (aka save point). -save: 40 +save: 40,40 // Do some visual effect on your character -effect: 40 +effect: 40,40 // Do some visual effect on your character (misceffect) -misceffect: 40 +misceffect: 40,40 // GM's magnifier -identify: 40 +identify: 40,40 // Drop all your items -dropall: 40 +dropall: 40,40 // Store all your items -storeall: 40 +storeall: 40,40 // Allow other players to hit you out of PvP -killable: 40 +killable: 40,40 // Look up a skill by name -skillid: 40 +skillid: 40,40 // Use a skill by id -useskill: 40 +useskill: 40,40 // What skills are required to get this skill -skilltree: 40 +skilltree: 40,40 // Marriage commands -marry: 40 -divorce: 40 +marry: 40,40 +divorce: 40,40 // Adopt a novice into a family -adopt: 40 +adopt: 40,40 // Play a Sound! -sound: 40 +sound: 40,40 //--------------------- // 50: Sub-GM+ commands // Creates a new guild, with you as the guildmaster. -guild: 50 +guild: 50,50 // Brings up your guild storage wherever you are. -gstorage: 50 +gstorage: 50,50 // Spawns a monster, and a certain amount (2 same commands + /monster). -monster: 50 -spawn: 50 +monster: 50,50 +spawn: 50,50 // Spawns a smaller sized version of a monster. -monstersmall: 50 +monstersmall: 50,50 // Spawns a larger sized version of a monster. -monsterbig: 50 +monsterbig: 50,50 // Spawns mobs that treat you as their master (they disappear after some time) -summon: 50 +summon: 50,50 // It will spawn a supportive clone of the given player. -clone: 50 +clone: 50,50 // It will spawn a supportive clone of the given player that follows the creator around. -slaveclone: 50 +slaveclone: 50,50 // It will spawn an aggresive clone of the given player. -evilclone: 50 +evilclone: 50,50 //---------------- // 60: GM commands // Add or Remove Cash/Kafra points to yourself -cash: 60 -points: 60 +cash: 60,60 +points: 60,60 // Starts Guild Wars -agitstart: 60 +agitstart: 60,60 // Ends Guild Wars -agitend: 60 +agitend: 60,60 // Resurects yourself. -alive: 60 +alive: 60,60 // Levels your character to specified level (adds to your level) (7 same commands). -blvl: 60 -lvup: 60 -blevel: 60 -baselvl: 60 -baselvup: 60 -baselevel: 60 -baselvlup: 60 +blvl: 60,60 +lvup: 60,60 +blevel: 60,60 +baselvl: 60,60 +baselvup: 60,60 +baselevel: 60,60 +baselvlup: 60,60 // Raises your job level (6 same commands). -jlvl: 60 -jlevel: 60 -joblvl: 60 -joblvup: 60 -joblevel: 60 -joblvlup: 60 +jlvl: 60,60 +jlevel: 60,60 +joblvl: 60,60 +joblvup: 60,60 +joblevel: 60,60 +joblvlup: 60,60 // Changes the sex of yourself -changesex: 60 +changesex: 60,60 // Levels your guild to specified level (2 same commands). -glvl: 60 -glevel: 60 -guildlvl: 60 -guildlvup: 60 -guildlevel: 60 -guildlvlup: 60 +glvl: 60,60 +glevel: 60,60 +guildlvl: 60,60 +guildlvup: 60,60 +guildlevel: 60,60 +guildlvlup: 60,60 // Find an itemID based on item name -idsearch: 60 +idsearch: 60,60 // Creates an item of your choosing, either Item ID or Name (1 command + /item). -item: 60 +item: 60,60 // Creates a complet item (card, etc...) of your choosing, either Item ID or Name. -item2: 60 +item2: 60,60 // Kill another character without hitting them. -kill: 60 +kill: 60,60 // Kill all monsters in map (with drops) -killmonster: 60 +killmonster: 60,60 // Creates yourself a pet egg. -makeegg: 60 +makeegg: 60,60 // Hatches an egg -hatch: 60 +hatch: 60,60 // Instantly kills player whose name is entered and deals insane damage to everything around -nuke: 60 +nuke: 60,60 // Enable hitting a player even when not in PvP -killer: 60 +killer: 60,60 // Creates weapon of desired element. -produce: 60 +produce: 60,60 // Warps a character to you (1 command + /recall). -recall: 60 +recall: 60,60 // Refines all weapons in your items list. -refine: 60 +refine: 60,60 // Will repair all broken items in inventory. -repairall: 60 +repairall: 60,60 // Change Status of your character -str: 60 -agi: 60 -vit: 60 -int: 60 -dex: 60 -luk: 60 +str: 60,60 +agi: 60,60 +vit: 60,60 +int: 60,60 +dex: 60,60 +luk: 60,60 // Gets all skills (4 same commands) -allskill: 60 -allskills: 60 -skillall: 60 -skillsall: 60 +allskill: 60,60 +allskills: 60,60 +skillall: 60,60 +skillsall: 60,60 // Sets GM stats to maximum (4 same commands) -statall: 60 -statsall: 60 -allstats: 60 -allstat: 60 +statall: 60,60 +statsall: 60,60 +allstats: 60,60 +allstat: 60,60 // Gives you job points. -stpoint: 60 +stpoint: 60,60 // Gives you skill points of desired amount. -skpoint: 60 +skpoint: 60,60 // Warps all online character of a guild to you. (at least one member of that guild must be on.) -guildrecall: 60 +guildrecall: 60,60 // Warps all online character of a party to you. (at least one party member must be online.) -partyrecall: 60 +partyrecall: 60,60 // Allows you to spy on any Guilds Guild chat. (at least one member of that guild must be on.) // NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) -guildspy: 60 +guildspy: 60,60 // Allows you to spy on any party's party chat. (at least one party member must be online.) // NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) -partyspy: 60 +partyspy: 60,60 // Gives you money (zeny) of desired amount. -zeny: 60 +zeny: 60,60 // To block definitively a player (2 same commands) -block: 60 -charblock: 60 +block: 60,60 +charblock: 60,60 // To unblock a player (2 same commands) -unblock: 60 -charunblock: 60 +unblock: 60,60 +charunblock: 60,60 // To ban a player for a limited time (4 same commands) -ban: 60 -banish: 60 -charban: 60 -charbanish: 60 +ban: 60,60 +banish: 60,60 +charban: 60,60 +charbanish: 60,60 // To unban a player (4 same commands) -unban: 60 -unbanish: 60 -charunban: 60 -charunbanish: 60 +unban: 60,60 +unbanish: 60,60 +charunban: 60,60 +charunbanish: 60,60 // To send specified character in jails -jail: 60 +jail: 60,60 // To discharge a prisoner (2 same commands) -unjail: 60 -discharge: 60 +unjail: 60,60 +discharge: 60,60 // Timed jailing -jailfor: 60 +jailfor: 60,60 // Create a static warp portal that lasts until the next reboot -addwarp: 60 +addwarp: 60,60 // Open a trade window with any player -trade: 60 +trade: 60,60 // Changes the player's appearance (headgear) -changelook: 60 +changelook: 60,60 // Homunculus commands for GMs -hlvl: 60 -hlevel: 60 -homlvl: 60 -homlvup: 60 -homlevel: 60 -homevolve: 60 -homevolution: 60 -makehomun: 60 -homfriendly: 60 -homhungry: 60 +hlvl: 60,60 +hlevel: 60,60 +homlvl: 60,60 +homlvup: 60,60 +homlevel: 60,60 +homevolve: 60,60 +homevolution: 60,60 +makehomun: 60,60 +homfriendly: 60,60 +homhungry: 60,60 // Re-calculates stats, as if the homun was sent back to level 1 and re-leveled -homshuffle: 60 +homshuffle: 60,60 //---------------------- // 80: GM Chief commands // Set the map you are on to day. -day: 80 +day: 80,80 // Kills everyone on the server. -doom: 80 +doom: 80,80 // Kills everyone on the map you are on. -doommap: 80 +doommap: 80,80 // Set the map you are currently on to night. -night: 80 +night: 80,80 // Recalls Everyone To Your Coordinates -recallall: 80 +recallall: 80,80 // Revives all players on the map. -raisemap: 80 +raisemap: 80,80 // Revives all players on the server. -raise: 80 +raise: 80,80 // Hides a NPC. -hidenpc: 80 +hidenpc: 80,80 // Unhides a NPC. -shownpc: 80 +shownpc: 80,80 // Loads a Script -loadnpc: 80 +loadnpc: 80,80 // Unloads a NPC -unloadnpc: 80 +unloadnpc: 80,80 // Move a NPC -npcmove: 80 +npcmove: 80,80 // turn skills on for a map -skillon: 80 +skillon: 80,80 // turn skills off for a map -skilloff: 80 +skilloff: 80,80 // Mute a player (prevents talking, usage of skills and commands) -mute: 80 +mute: 80,80 // Unmute a player -unmute: 80 +unmute: 80,80 //--------------------------- // 99: Administrator commands // Disconnect all users from the server -kickall: 99 +kickall: 99,99 // Closes Map-Server -mapexit: 99 +mapexit: 99,99 // Used for testing packet sends from the client (debug function) -send: 99 +send: 99,99 // Give information about terrain/area (debug function) -gat: 99 +gat: 99,99 // Displays a status change without really applying it (debug function) -displaystatus: 99 +displaystatus: 99,99 // Displays the animation of a skill without really using it (debug function) -displayskill: 99 +displayskill: 99,99 // Shows information about the map -mapinfo: 99 +mapinfo: 99,99 // Set Map Flags (WIP) -mapflag: 99 +mapflag: 99,99 // Re-load item database (admin command) -reloaditemdb: 99 +reloaditemdb: 99,99 // Re-load monsters database (admin command) -reloadmobdb: 99 +reloadmobdb: 99,99 // Re-load skills database (admin command) -reloadskilldb: 99 +reloadskilldb: 99,99 // Re-load scripts (admin command) -reloadscript: 99 +reloadscript: 99,99 // Change a battle_config flag without rebooting server -setbattleflag: 99 +setbattleflag: 99,99 // Re-load gm command config (admin command) -reloadatcommand: 99 +reloadatcommand: 99,99 // Re-load battle config (admin command) // Note that some player config settings won't take effect until relog // (display exp, display zeny, display skill delay fail, ...) -reloadbattleconf: 99 +reloadbattleconf: 99,99 // Re-load status database (admin command) -reloadstatusdb: 99 +reloadstatusdb: 99,99 // Re-load player info database (admin command) -reloadpcdb: 99 +reloadpcdb: 99,99 // Re-load the Message of the Day (admin command) -reloadmotd: 99 +reloadmotd: 99,99 // Changes the GM level of another character // (lasts until reboot, or gm list reload) -adjgmlvl: 99 +adjgmlvl: 99,99 // Changes the required GM level of an @ command // (effect lasts until restart or command reload) -adjcmdlvl: 99 +adjcmdlvl: 99,99 // [Un]Disguise All Players (admin command) -disguiseall: 99 -undisguiseall: 99 +disguiseall: 99,99 +undisguiseall: 99,99 // Mutes every player on screen (admin command) -mutearea: 99 -stfu: 99 +mutearea: 99,99 +stfu: 99,99 // Makes you immune to attacks (monsters/players/skills cannot target/hit you, admin command) -monsterignore: 99 -battleignore: 99 +monsterignore: 99,99 +battleignore: 99,99 //--------------------------------------------------------------- // 99: Weather effects -snow: 99 +snow: 99,99 -clouds: 99 +clouds: 99,99 -clouds2: 99 +clouds2: 99,99 -fog: 99 +fog: 99,99 -fireworks: 99 +fireworks: 99,99 -sakura: 99 +sakura: 99,99 leaves:99 // Stop all weather effects -clearweather: 99 +clearweather: 99,99 //--------------------------------------------------------------- // 100: Disabled commands diff --git a/conf/charcommand_athena.conf b/conf/charcommand_athena.conf deleted file mode 100644 index 4b7bf672f..000000000 --- a/conf/charcommand_athena.conf +++ /dev/null @@ -1,275 +0,0 @@ -//-------------------------------------------------------------- -// eAthena charcommand configuration file. -// Originally translated by Peter Kieser -//-------------------------------------------------------------- - -// The symbol that will be used to recognize commands. -// You can set any one character except control-characters (0x00-0x1f), -// '%', '$' (party/guild chat speaking) and '/' (standard client commands). -// The symbol must also be different from from the GM atcommand symbol. -command_symbol: # - - -//-------------------------- -// 0: normal player commands -// None for security purposes. - -//------------------------- -// 1: Super player commands - -//--------------------------- -// 10: Super player+ commands - -//---------------------- -// 20: Mediator commands - -// Displays helpfile in eAthena base directory -help: 20 - -//-------------------- -// 40: Sub-GM commands - - -// View the items in a character's cart -cartlist: 40 - -// Apply an effect onto another character -effect: 40 - -// View the exp of a character -exp: 40 - -// List a chacter's items -itemlist: 40 - -// View the jail time remaining -jailtime: 40 - -// Refresh a character -refresh: 40 - -// List a chacter's stats -stats: 40 - -// List a chacter's storage items -storagelist: 40 - -//--------------------- -// 50: Sub-GM+ commands - -// Change a character's clothing color -dye: 50 - -// Give another character a fake name -fakename: 50 - -// Open the hatch dialog for a character -hatch: 50 - -// Change a character's hair color -hcolor: 50 -haircolor: 50 - -// Change a character's hair style -hstyle: 50 -hairstyle: 50 - -// Changes character's model -model: 50 - -// Give or remove a peco from a character -mount: 50 -mountpeco: 50 - -// Make another character's pet friendly/not -petfriendly: 50 - -// Rename another character's pet -petrename: 50 - -// Change a character's size -size: 50 - -//---------------- -// 60: GM commands - -// Resurrects a dead character -alive: 60 -revive: 60 - -// Add or removes cash/kafra points to a character -cash: 60 -points: 60 - -// Give a player all the skills available to him/her -allskill: 60 -allskills: 60 -skillall: 60 -skillsall: 60 - -// Give a character the maximum possible stats -allstat: 60 -allstats: 60 -statall: 60 -statsall: 60 - -// Change another character's base level (3 same commands) -blvl: 60 -blevel: 60 -baselvl: 60 -baselevel: 60 - -// Changes the sex of an online player (all characters on the account) -changesex: 60 - -// Delete items from a character -delitem: 60 - -// Disguise a character -disguise: 60 -undisguise: 60 - -// Drop a players possessions on the ground -dropall: 60 - -// Put a players possessions in storage -storeall: 60 - -// Resets another character's designated maps -feelreset: 60 - -// Change the guild level for a character's guild -glvl: 60 -glevel: 60 -guildlvl: 60 -guildlevel: 60 - -// Open guild storage for a character -gstorage: 60 - -// Heal a character -heal: 60 - -// Invoke GM Hide on a character -hide: 60 - -// Increase a character's homunculus' level -hlvl: 60 -hlevel: 60 -homlvl: 60 -homlevel: 60 - -// Evolve a character's homunculus -homevolve: 60 -homevolution: 60 - -// Change a character's homunculus' friendly value -homfriendly: 60 - -// Change a character's homunculus' hunger value -homhungry: 60 - -// View a character's homunculus' stats -hominfo: 40 - -// Give another character an item -item: 60 - -// Create a specific item (with cards, refines, etc -item2: 60 - -// Remove all of a character's possessions -itemreset: 60 - -// Change another character's job (2 same commands) -job: 60 -jobchange: 60 - -// Change another character's job level (3 same commands) -jlvl: 60 -jlevel: 60 -joblvl: 60 -joblevel: 60 - -// Allow a character to attack anybody -killer: 60 - -// Make a character killable by anybody -killable: 60 - -// Return a character to their respawn point -load: 60 - -// Take away a character's platinum skill -lostskill: 60 - -// Make a character immune to monsters -monsterignore: 60 - -// Apply a certain option to another character -option: 60 - -// Change a character's pet's hungry value -pethungry: 60 - -// Produce forged equipment on a character (as if he/she was a blacksmith) -produce: 60 - -// Give another character a platinum skill -questskill: 60 - -// Performs a stat and skill reset on someone else. -reset: 60 - -// Save another character -save: 60 - -// Gives another character skill points -skpoint: 60 - -// Change a character's walking speed -speed: 60 - -// Give another character spiritball effect -spiritball: 60 - -// Open storage for a character -storage: 60 - -// Gives another character status points -stpoint: 60 - -// Change a character's stats -str: 60 -agi: 60 -vit: 60 -int: 60 -dex: 60 -luk: 60 - -// Resets another character's status, skills -streset: 60 -skreset: 60 - -// Warp a player somewhere else (3 same commands) -warp: 60 -rura: 60 -rura+: 60 - -//---------------------- -// 80: GM Chief commands - -// Refine a character's equipment -refine: 80 - -// Give another character zeny -zeny: 80 - -//--------------------------- -// 99: Administrator commands - -//--------------------------------------------------------------- -// 100: Disabled commands - - -import: conf/import/charcommand_conf.txt diff --git a/conf/import-tmpl/charcommand_conf.txt b/conf/import-tmpl/charcommand_conf.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/doc/script_commands.txt b/doc/script_commands.txt index aaed3637c..6a3f6c6ac 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -5770,23 +5770,10 @@ one. *charcommand ; -NOTE: This command is changed a bit on newer trunk versions, -scroll down a bit for the new version! - -On older trunk versions and stable: - -command is the name of the current character (strcharinfo(0)) -followed by ':' and the command and it's parameters. - -Example(s): - -//Will be executed as if a lvl 99 GM done the #option command. - charCommand strcharinfo(0)+":#option 0 0 0 Roy"; - -Newer Trunk version: +This command will run the given command line exactly as if it was typed in from +the keyboard from a character that belonged to an account which had GM level 99. -The big change is that the character name is no longer needed. -This also enabled the commands to run without a player attached (according to Lance). +The commands can also run without an attached rid. Example(s): diff --git a/src/map/Makefile.in b/src/map/Makefile.in index cde66e25b..f1eccdf8d 100644 --- a/src/map/Makefile.in +++ b/src/map/Makefile.in @@ -15,7 +15,7 @@ COMMON_SQL_H = ../common/sql.h MAP_OBJ = map.o chrif.o clif.o pc.o status.o npc.o \ npc_chat.o chat.o path.o itemdb.o mob.o script.o \ - storage.o skill.o atcommand.o charcommand.o battle.o \ + storage.o skill.o atcommand.o battle.o \ intif.o trade.o party.o vending.o guild.o pet.o \ log.o mail.o date.o unit.o homunculus.o mercenary.o quest.o MAP_TXT_OBJ = $(MAP_OBJ:%=obj_txt/%) \ @@ -24,7 +24,7 @@ MAP_SQL_OBJ = $(MAP_OBJ:%=obj_sql/%) \ obj_sql/mapreg_sql.o MAP_H = map.h chrif.h clif.h pc.h status.h npc.h \ chat.h itemdb.h mob.h script.h path.h \ - storage.h skill.h atcommand.h charcommand.h battle.h \ + storage.h skill.h atcommand.h battle.h \ intif.h trade.h party.h vending.h guild.h pet.h \ log.h mail.h date.h unit.h homunculus.h mercenary.h quest.h mapreg.h diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 643c7c1f4..2d336ddf9 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -46,6 +46,7 @@ // extern variables char atcommand_symbol = '@'; // first char of the commands +char charcommand_symbol = '#'; char* msg_table[MAX_MSG]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others) // local declarations @@ -55,6 +56,7 @@ typedef struct AtCommandInfo { const char* command; int level; + int level2; AtCommandFunc func; } AtCommandInfo; @@ -6578,15 +6580,15 @@ int atcommand_summon(const int fd, struct map_session_data* sd, const char* comm *------------------------------------------*/ int atcommand_adjcmdlvl(const int fd, struct map_session_data* sd, const char* command, const char* message) { - int newlev; + int newlev, newremotelev; char name[100]; AtCommandInfo* cmd; nullpo_retr(-1, sd); - if (!message || !*message || sscanf(message, "%d %99s", &newlev, name) != 2) + if (!message || !*message || sscanf(message, "%d %d %99s", &newlev, &newremotelev, name) != 2) { - clif_displaymessage(fd, "Usage: @adjcmdlvl ."); + clif_displaymessage(fd, "Usage: @adjcmdlvl ."); return -1; } @@ -6596,12 +6598,12 @@ int atcommand_adjcmdlvl(const int fd, struct map_session_data* sd, const char* c clif_displaymessage(fd, "@command not found."); return -1; } - else if (newlev > pc_isGM(sd)) + else if (newlev > pc_isGM(sd) || newremotelev > pc_isGM(sd) ) { clif_displaymessage(fd, "You can't make a command require higher GM level than your own."); return -1; } - else if (cmd->level > pc_isGM(sd)) + else if (cmd->level > pc_isGM(sd) || cmd->level2 > pc_isGM(sd) ) { clif_displaymessage(fd, "You can't adjust the level of a command which's level is above your own."); return -1; @@ -6609,6 +6611,7 @@ int atcommand_adjcmdlvl(const int fd, struct map_session_data* sd, const char* c else { cmd->level = newlev; + cmd->level2 = newremotelev; clif_displaymessage(fd, "@command level changed."); return 0; } @@ -8238,295 +8241,295 @@ int atcommand_allowks(const int fd, struct map_session_data *sd, const char *com *------------------------------------------*/ AtCommandInfo atcommand_info[] = { - { "rura", 40, atcommand_mapmove }, - { "warp", 40, atcommand_mapmove }, - { "mapmove", 40, atcommand_mapmove }, // + /mm - { "where", 1, atcommand_where }, - { "jumpto", 20, atcommand_jumpto }, // + /shift - { "warpto", 20, atcommand_jumpto }, - { "goto", 20, atcommand_jumpto }, - { "jump", 40, atcommand_jump }, - { "who", 20, atcommand_who }, - { "whois", 20, atcommand_who }, - { "who2", 20, atcommand_who2 }, - { "who3", 20, atcommand_who3 }, - { "whomap", 20, atcommand_whomap }, - { "whomap2", 20, atcommand_whomap2 }, - { "whomap3", 20, atcommand_whomap3 }, - { "whogm", 20, atcommand_whogm }, - { "save", 40, atcommand_save }, - { "return", 40, atcommand_load }, - { "load", 40, atcommand_load }, - { "speed", 40, atcommand_speed }, - { "storage", 1, atcommand_storage }, - { "gstorage", 50, atcommand_guildstorage }, - { "option", 40, atcommand_option }, - { "hide", 40, atcommand_hide }, // + /hide - { "jobchange", 40, atcommand_jobchange }, - { "job", 40, atcommand_jobchange }, - { "die", 1, atcommand_die }, - { "kill", 60, atcommand_kill }, - { "alive", 60, atcommand_alive }, - { "kami", 40, atcommand_kami }, - { "kamib", 40, atcommand_kami }, - { "kamic", 40, atcommand_kami }, - { "heal", 40, atcommand_heal }, - { "item", 60, atcommand_item }, - { "item2", 60, atcommand_item2 }, - { "itemreset", 40, atcommand_itemreset }, - { "blvl", 60, atcommand_baselevelup }, - { "lvup", 60, atcommand_baselevelup }, - { "blevel", 60, atcommand_baselevelup }, - { "baselvl", 60, atcommand_baselevelup }, - { "baselvup", 60, atcommand_baselevelup }, - { "baselevel", 60, atcommand_baselevelup }, - { "baselvlup", 60, atcommand_baselevelup }, - { "jlvl", 60, atcommand_joblevelup }, - { "jlevel", 60, atcommand_joblevelup }, - { "joblvl", 60, atcommand_joblevelup }, - { "joblevel", 60, atcommand_joblevelup }, - { "joblvup", 60, atcommand_joblevelup }, - { "joblvlup", 60, atcommand_joblevelup }, - { "h", 20, atcommand_help }, - { "help", 20, atcommand_help }, - { "h2", 20, atcommand_help2 }, - { "help2", 20, atcommand_help2 }, - { "pvpoff", 40, atcommand_pvpoff }, - { "pvpon", 40, atcommand_pvpon }, - { "gvgoff", 40, atcommand_gvgoff }, - { "gpvpoff", 40, atcommand_gvgoff }, - { "gvgon", 40, atcommand_gvgon }, - { "gpvpon", 40, atcommand_gvgon }, - { "model", 20, atcommand_model }, - { "go", 10, atcommand_go }, - { "monster", 50, atcommand_monster }, - { "spawn", 50, atcommand_monster }, - { "monstersmall", 50, atcommand_monstersmall }, - { "monsterbig", 50, atcommand_monsterbig }, - { "killmonster", 60, atcommand_killmonster }, - { "killmonster2", 40, atcommand_killmonster2 }, - { "refine", 60, atcommand_refine }, - { "produce", 60, atcommand_produce }, - { "memo", 40, atcommand_memo }, - { "gat", 99, atcommand_gat }, - { "displaystatus", 99, atcommand_displaystatus }, - { "stpoint", 60, atcommand_statuspoint }, - { "skpoint", 60, atcommand_skillpoint }, - { "zeny", 60, atcommand_zeny }, - { "str", 60, atcommand_param }, - { "agi", 60, atcommand_param }, - { "vit", 60, atcommand_param }, - { "int", 60, atcommand_param }, - { "dex", 60, atcommand_param }, - { "luk", 60, atcommand_param }, - { "glvl", 60, atcommand_guildlevelup }, - { "glevel", 60, atcommand_guildlevelup }, - { "guildlvl", 60, atcommand_guildlevelup }, - { "guildlvup", 60, atcommand_guildlevelup }, - { "guildlevel", 60, atcommand_guildlevelup }, - { "guildlvlup", 60, atcommand_guildlevelup }, - { "makeegg", 60, atcommand_makeegg }, - { "hatch", 60, atcommand_hatch }, - { "petfriendly", 40, atcommand_petfriendly }, - { "pethungry", 40, atcommand_pethungry }, - { "petrename", 1, atcommand_petrename }, - { "recall", 60, atcommand_recall }, // + /recall - { "night", 80, atcommand_night }, - { "day", 80, atcommand_day }, - { "doom", 80, atcommand_doom }, - { "doommap", 80, atcommand_doommap }, - { "raise", 80, atcommand_raise }, - { "raisemap", 80, atcommand_raisemap }, - { "kick", 20, atcommand_kick }, // + right click menu for GM "(name) force to quit" - { "kickall", 99, atcommand_kickall }, - { "allskill", 60, atcommand_allskill }, - { "allskills", 60, atcommand_allskill }, - { "skillall", 60, atcommand_allskill }, - { "skillsall", 60, atcommand_allskill }, - { "questskill", 40, atcommand_questskill }, - { "lostskill", 40, atcommand_lostskill }, - { "spiritball", 40, atcommand_spiritball }, - { "party", 1, atcommand_party }, - { "guild", 50, atcommand_guild }, - { "agitstart", 60, atcommand_agitstart }, - { "agitend", 60, atcommand_agitend }, - { "mapexit", 99, atcommand_mapexit }, - { "idsearch", 60, atcommand_idsearch }, - { "broadcast", 40, atcommand_broadcast }, // + /b and /nb - { "localbroadcast", 40, atcommand_localbroadcast }, // + /lb and /nlb - { "recallall", 80, atcommand_recallall }, - { "reloaditemdb", 99, atcommand_reloaditemdb }, - { "reloadmobdb", 99, atcommand_reloadmobdb }, - { "reloadskilldb", 99, atcommand_reloadskilldb }, - { "reloadscript", 99, atcommand_reloadscript }, - { "reloadatcommand", 99, atcommand_reloadatcommand }, - { "reloadbattleconf", 99, atcommand_reloadbattleconf }, - { "reloadstatusdb", 99, atcommand_reloadstatusdb }, - { "reloadpcdb", 99, atcommand_reloadpcdb }, - { "reloadmotd", 99, atcommand_reloadmotd }, - { "mapinfo", 99, atcommand_mapinfo }, - { "dye", 40, atcommand_dye }, - { "ccolor", 40, atcommand_dye }, - { "hairstyle", 40, atcommand_hair_style }, - { "hstyle", 40, atcommand_hair_style }, - { "haircolor", 40, atcommand_hair_color }, - { "hcolor", 40, atcommand_hair_color }, - { "statall", 60, atcommand_stat_all }, - { "statsall", 60, atcommand_stat_all }, - { "allstats", 60, atcommand_stat_all }, - { "allstat", 60, atcommand_stat_all }, - { "block", 60, atcommand_char_block }, - { "charblock", 60, atcommand_char_block }, - { "ban", 60, atcommand_char_ban }, - { "banish", 60, atcommand_char_ban }, - { "charban", 60, atcommand_char_ban }, - { "charbanish", 60, atcommand_char_ban }, - { "unblock", 60, atcommand_char_unblock }, - { "charunblock", 60, atcommand_char_unblock }, - { "unban", 60, atcommand_char_unban }, - { "unbanish", 60, atcommand_char_unban }, - { "charunban", 60, atcommand_char_unban }, - { "charunbanish", 60, atcommand_char_unban }, - { "mount", 20, atcommand_mount_peco }, - { "mountpeco", 20, atcommand_mount_peco }, - { "guildspy", 60, atcommand_guildspy }, - { "partyspy", 60, atcommand_partyspy }, - { "repairall", 60, atcommand_repairall }, - { "guildrecall", 60, atcommand_guildrecall }, - { "partyrecall", 60, atcommand_partyrecall }, - { "nuke", 60, atcommand_nuke }, - { "shownpc", 80, atcommand_shownpc }, - { "hidenpc", 80, atcommand_hidenpc }, - { "loadnpc", 80, atcommand_loadnpc }, - { "unloadnpc", 80, atcommand_unloadnpc }, - { "time", 1, atcommand_servertime }, - { "date", 1, atcommand_servertime }, - { "serverdate", 1, atcommand_servertime }, - { "servertime", 1, atcommand_servertime }, - { "jail", 60, atcommand_jail }, - { "unjail", 60, atcommand_unjail }, - { "discharge", 60, atcommand_unjail }, - { "jailfor", 60, atcommand_jailfor }, - { "jailtime", 1, atcommand_jailtime }, - { "disguise", 20, atcommand_disguise }, - { "undisguise", 20, atcommand_undisguise }, - { "email", 1, atcommand_email }, - { "effect", 40, atcommand_effect }, - { "follow", 20, atcommand_follow }, - { "addwarp", 60, atcommand_addwarp }, - { "skillon", 80, atcommand_skillon }, - { "skilloff", 80, atcommand_skilloff }, - { "killer", 60, atcommand_killer }, - { "npcmove", 80, atcommand_npcmove }, - { "killable", 40, atcommand_killable }, - { "dropall", 40, atcommand_dropall }, - { "storeall", 40, atcommand_storeall }, - { "skillid", 40, atcommand_skillid }, - { "useskill", 40, atcommand_useskill }, - { "displayskill", 99, atcommand_displayskill }, - { "snow", 99, atcommand_snow }, - { "sakura", 99, atcommand_sakura }, - { "clouds", 99, atcommand_clouds }, - { "clouds2", 99, atcommand_clouds2 }, - { "fog", 99, atcommand_fog }, - { "fireworks", 99, atcommand_fireworks }, - { "leaves", 99, atcommand_leaves }, - { "summon", 60, atcommand_summon }, - { "adjgmlvl", 99, atcommand_adjgmlvl }, - { "adjcmdlvl", 99, atcommand_adjcmdlvl }, - { "trade", 60, atcommand_trade }, - { "send", 99, atcommand_send }, - { "setbattleflag", 99, atcommand_setbattleflag }, - { "unmute", 80, atcommand_unmute }, - { "clearweather", 99, atcommand_clearweather }, - { "uptime", 1, atcommand_uptime }, - { "changesex", 60, atcommand_changesex }, - { "mute", 80, atcommand_mute }, - { "refresh", 1, atcommand_refresh }, - { "identify", 40, atcommand_identify }, - { "gmotd", 20, atcommand_gmotd }, - { "misceffect", 50, atcommand_misceffect }, - { "mobsearch", 10, atcommand_mobsearch }, - { "cleanmap", 40, atcommand_cleanmap }, - { "npctalk", 20, atcommand_npctalk }, - { "pettalk", 10, atcommand_pettalk }, - { "users", 40, atcommand_users }, - { "reset", 40, atcommand_reset }, - { "skilltree", 40, atcommand_skilltree }, - { "marry", 40, atcommand_marry }, - { "divorce", 40, atcommand_divorce }, - { "sound", 40, atcommand_sound }, - { "undisguiseall", 99, atcommand_undisguiseall }, - { "disguiseall", 99, atcommand_disguiseall }, - { "changelook", 60, atcommand_changelook }, - { "autoloot", 10, atcommand_autoloot }, - { "alootid", 10, atcommand_autolootitem }, - { "mobinfo", 1, atcommand_mobinfo }, - { "monsterinfo", 1, atcommand_mobinfo }, - { "mi", 1, atcommand_mobinfo }, - { "exp", 1, atcommand_exp }, - { "adopt", 40, atcommand_adopt }, - { "version", 1, atcommand_version }, - { "mutearea", 99, atcommand_mutearea }, - { "stfu", 99, atcommand_mutearea }, - { "rates", 1, atcommand_rates }, - { "iteminfo", 1, atcommand_iteminfo }, - { "ii", 1, atcommand_iteminfo }, - { "whodrops", 1, atcommand_whodrops }, - { "whereis", 10, atcommand_whereis }, - { "mapflag", 99, atcommand_mapflag }, - { "me", 20, atcommand_me }, - { "monsterignore", 99, atcommand_monsterignore }, - { "battleignore", 99, atcommand_monsterignore }, - { "fakename", 20, atcommand_fakename }, - { "size", 20, atcommand_size }, - { "showexp", 10, atcommand_showexp}, - { "showzeny", 10, atcommand_showzeny}, - { "showdelay", 1, atcommand_showdelay}, - { "autotrade", 10, atcommand_autotrade }, - { "at", 10, atcommand_autotrade }, - { "changegm", 10, atcommand_changegm }, - { "changeleader", 10, atcommand_changeleader }, - { "partyoption", 10, atcommand_partyoption}, - { "invite", 1, atcommand_invite }, - { "duel", 1, atcommand_duel }, - { "leave", 1, atcommand_leave }, - { "accept", 1, atcommand_accept }, - { "reject", 1, atcommand_reject }, - { "away", 1, atcommand_away }, - { "aw", 1, atcommand_away }, - { "main", 1, atcommand_main }, - { "clone", 50, atcommand_clone }, - { "slaveclone", 50, atcommand_clone }, - { "evilclone", 50, atcommand_clone }, - { "tonpc", 40, atcommand_tonpc }, - { "commands", 1, atcommand_commands }, - { "noask", 1, atcommand_noask }, - { "request", 20, atcommand_request }, - { "hlvl", 60, atcommand_homlevel }, - { "hlevel", 60, atcommand_homlevel }, - { "homlvl", 60, atcommand_homlevel }, - { "homlvup", 60, atcommand_homlevel }, - { "homlevel", 60, atcommand_homlevel }, - { "homevolve", 60, atcommand_homevolution }, - { "homevolution", 60, atcommand_homevolution }, - { "makehomun", 60, atcommand_makehomun }, - { "homfriendly", 60, atcommand_homfriendly }, - { "homhungry", 60, atcommand_homhungry }, - { "homtalk", 10, atcommand_homtalk }, - { "hominfo", 1, atcommand_hominfo }, - { "homstats", 1, atcommand_homstats }, - { "homshuffle", 60, atcommand_homshuffle }, - { "showmobs", 10, atcommand_showmobs }, - { "feelreset", 10, atcommand_feelreset }, - { "auction", 60, atcommand_auction }, - { "mail", 1, atcommand_mail }, - { "noks", 0, atcommand_ksprotection }, - { "allowks", 6, atcommand_allowks }, - { "cash", 60, atcommand_cash }, - { "points", 60, atcommand_cash }, - { "agitstart2", 60, atcommand_agitstart2 }, - { "agitend2", 60, atcommand_agitend2 }, + { "rura", 40,40, atcommand_mapmove }, + { "warp", 40,40, atcommand_mapmove }, + { "mapmove", 40,40, atcommand_mapmove }, // + /mm + { "where", 1,1, atcommand_where }, + { "jumpto", 20,20, atcommand_jumpto }, // + /shift + { "warpto", 20,20, atcommand_jumpto }, + { "goto", 20,20, atcommand_jumpto }, + { "jump", 40,40, atcommand_jump }, + { "who", 20,20, atcommand_who }, + { "whois", 20,20, atcommand_who }, + { "who2", 20,20, atcommand_who2 }, + { "who3", 20,20, atcommand_who3 }, + { "whomap", 20,20, atcommand_whomap }, + { "whomap2", 20,20, atcommand_whomap2 }, + { "whomap3", 20,20, atcommand_whomap3 }, + { "whogm", 20,20, atcommand_whogm }, + { "save", 40,40, atcommand_save }, + { "return", 40,40, atcommand_load }, + { "load", 40,40, atcommand_load }, + { "speed", 40,40, atcommand_speed }, + { "storage", 1,1, atcommand_storage }, + { "gstorage", 50,50, atcommand_guildstorage }, + { "option", 40,40, atcommand_option }, + { "hide", 40,40, atcommand_hide }, // + /hide + { "jobchange", 40,40, atcommand_jobchange }, + { "job", 40,40, atcommand_jobchange }, + { "die", 1,1, atcommand_die }, + { "kill", 60,60, atcommand_kill }, + { "alive", 60,60, atcommand_alive }, + { "kami", 40,40, atcommand_kami }, + { "kamib", 40,40, atcommand_kami }, + { "kamic", 40,40, atcommand_kami }, + { "heal", 40,60, atcommand_heal }, + { "item", 60,60, atcommand_item }, + { "item2", 60,60, atcommand_item2 }, + { "itemreset", 40,40, atcommand_itemreset }, + { "blvl", 60,60, atcommand_baselevelup }, + { "lvup", 60,60, atcommand_baselevelup }, + { "blevel", 60,60, atcommand_baselevelup }, + { "baselvl", 60,60, atcommand_baselevelup }, + { "baselvup", 60,60, atcommand_baselevelup }, + { "baselevel", 60,60, atcommand_baselevelup }, + { "baselvlup", 60,60, atcommand_baselevelup }, + { "jlvl", 60,60, atcommand_joblevelup }, + { "jlevel", 60,60, atcommand_joblevelup }, + { "joblvl", 60,60, atcommand_joblevelup }, + { "joblevel", 60,60, atcommand_joblevelup }, + { "joblvup", 60,60, atcommand_joblevelup }, + { "joblvlup", 60,60, atcommand_joblevelup }, + { "h", 20,20, atcommand_help }, + { "help", 20,20, atcommand_help }, + { "h2", 20,20, atcommand_help2 }, + { "help2", 20,20, atcommand_help2 }, + { "pvpoff", 40,40, atcommand_pvpoff }, + { "pvpon", 40,40, atcommand_pvpon }, + { "gvgoff", 40,40, atcommand_gvgoff }, + { "gpvpoff", 40,40, atcommand_gvgoff }, + { "gvgon", 40,40, atcommand_gvgon }, + { "gpvpon", 40,40, atcommand_gvgon }, + { "model", 20,20, atcommand_model }, + { "go", 10,10, atcommand_go }, + { "monster", 50,50, atcommand_monster }, + { "spawn", 50,50, atcommand_monster }, + { "monstersmall", 50,50, atcommand_monstersmall }, + { "monsterbig", 50,50, atcommand_monsterbig }, + { "killmonster", 60,60, atcommand_killmonster }, + { "killmonster2", 40,40, atcommand_killmonster2 }, + { "refine", 60,60, atcommand_refine }, + { "produce", 60,60, atcommand_produce }, + { "memo", 40,40, atcommand_memo }, + { "gat", 99,99, atcommand_gat }, + { "displaystatus", 99,99, atcommand_displaystatus }, + { "stpoint", 60,60, atcommand_statuspoint }, + { "skpoint", 60,60, atcommand_skillpoint }, + { "zeny", 60,60, atcommand_zeny }, + { "str", 60,60, atcommand_param }, + { "agi", 60,60, atcommand_param }, + { "vit", 60,60, atcommand_param }, + { "int", 60,60, atcommand_param }, + { "dex", 60,60, atcommand_param }, + { "luk", 60,60, atcommand_param }, + { "glvl", 60,60, atcommand_guildlevelup }, + { "glevel", 60,60, atcommand_guildlevelup }, + { "guildlvl", 60,60, atcommand_guildlevelup }, + { "guildlvup", 60,60, atcommand_guildlevelup }, + { "guildlevel", 60,60, atcommand_guildlevelup }, + { "guildlvlup", 60,60, atcommand_guildlevelup }, + { "makeegg", 60,60, atcommand_makeegg }, + { "hatch", 60,60, atcommand_hatch }, + { "petfriendly", 40,40, atcommand_petfriendly }, + { "pethungry", 40,40, atcommand_pethungry }, + { "petrename", 1,1, atcommand_petrename }, + { "recall", 60,60, atcommand_recall }, // + /recall + { "night", 80,80, atcommand_night }, + { "day", 80,80, atcommand_day }, + { "doom", 80,80, atcommand_doom }, + { "doommap", 80,80, atcommand_doommap }, + { "raise", 80,80, atcommand_raise }, + { "raisemap", 80,80, atcommand_raisemap }, + { "kick", 20,20, atcommand_kick }, // + right click menu for GM "(name) force to quit" + { "kickall", 99,99, atcommand_kickall }, + { "allskill", 60,60, atcommand_allskill }, + { "allskills", 60,60, atcommand_allskill }, + { "skillall", 60,60, atcommand_allskill }, + { "skillsall", 60,60, atcommand_allskill }, + { "questskill", 40,40, atcommand_questskill }, + { "lostskill", 40,40, atcommand_lostskill }, + { "spiritball", 40,40, atcommand_spiritball }, + { "party", 1,1, atcommand_party }, + { "guild", 50,50, atcommand_guild }, + { "agitstart", 60,60, atcommand_agitstart }, + { "agitend", 60,60, atcommand_agitend }, + { "mapexit", 99,99, atcommand_mapexit }, + { "idsearch", 60,60, atcommand_idsearch }, + { "broadcast", 40,40, atcommand_broadcast }, // + /b and /nb + { "localbroadcast", 40,40, atcommand_localbroadcast }, // + /lb and /nlb + { "recallall", 80,80, atcommand_recallall }, + { "reloaditemdb", 99,99, atcommand_reloaditemdb }, + { "reloadmobdb", 99,99, atcommand_reloadmobdb }, + { "reloadskilldb", 99,99, atcommand_reloadskilldb }, + { "reloadscript", 99,99, atcommand_reloadscript }, + { "reloadatcommand", 99,99, atcommand_reloadatcommand }, + { "reloadbattleconf", 99,99, atcommand_reloadbattleconf }, + { "reloadstatusdb", 99,99, atcommand_reloadstatusdb }, + { "reloadpcdb", 99,99, atcommand_reloadpcdb }, + { "reloadmotd", 99,99, atcommand_reloadmotd }, + { "mapinfo", 99,99, atcommand_mapinfo }, + { "dye", 40,40, atcommand_dye }, + { "ccolor", 40,40, atcommand_dye }, + { "hairstyle", 40,40, atcommand_hair_style }, + { "hstyle", 40,40, atcommand_hair_style }, + { "haircolor", 40,40, atcommand_hair_color }, + { "hcolor", 40,40, atcommand_hair_color }, + { "statall", 60,60, atcommand_stat_all }, + { "statsall", 60,60, atcommand_stat_all }, + { "allstats", 60,60, atcommand_stat_all }, + { "allstat", 60,60, atcommand_stat_all }, + { "block", 60,60, atcommand_char_block }, + { "charblock", 60,60, atcommand_char_block }, + { "ban", 60,60, atcommand_char_ban }, + { "banish", 60,60, atcommand_char_ban }, + { "charban", 60,60, atcommand_char_ban }, + { "charbanish", 60,60, atcommand_char_ban }, + { "unblock", 60,60, atcommand_char_unblock }, + { "charunblock", 60,60, atcommand_char_unblock }, + { "unban", 60,60, atcommand_char_unban }, + { "unbanish", 60,60, atcommand_char_unban }, + { "charunban", 60,60, atcommand_char_unban }, + { "charunbanish", 60,60, atcommand_char_unban }, + { "mount", 20,20, atcommand_mount_peco }, + { "mountpeco", 20,20, atcommand_mount_peco }, + { "guildspy", 60,60, atcommand_guildspy }, + { "partyspy", 60,60, atcommand_partyspy }, + { "repairall", 60,60, atcommand_repairall }, + { "guildrecall", 60,60, atcommand_guildrecall }, + { "partyrecall", 60,60, atcommand_partyrecall }, + { "nuke", 60,60, atcommand_nuke }, + { "shownpc", 80,80, atcommand_shownpc }, + { "hidenpc", 80,80, atcommand_hidenpc }, + { "loadnpc", 80,80, atcommand_loadnpc }, + { "unloadnpc", 80,80, atcommand_unloadnpc }, + { "time", 1,1, atcommand_servertime }, + { "date", 1,1, atcommand_servertime }, + { "serverdate", 1,1, atcommand_servertime }, + { "servertime", 1,1, atcommand_servertime }, + { "jail", 60,60, atcommand_jail }, + { "unjail", 60,60, atcommand_unjail }, + { "discharge", 60,60, atcommand_unjail }, + { "jailfor", 60,60, atcommand_jailfor }, + { "jailtime", 1,1, atcommand_jailtime }, + { "disguise", 20,20, atcommand_disguise }, + { "undisguise", 20,20, atcommand_undisguise }, + { "email", 1,1, atcommand_email }, + { "effect", 40,40, atcommand_effect }, + { "follow", 20,20, atcommand_follow }, + { "addwarp", 60,60, atcommand_addwarp }, + { "skillon", 80,80, atcommand_skillon }, + { "skilloff", 80,80, atcommand_skilloff }, + { "killer", 60,60, atcommand_killer }, + { "npcmove", 80,80, atcommand_npcmove }, + { "killable", 40,40, atcommand_killable }, + { "dropall", 40,40, atcommand_dropall }, + { "storeall", 40,40, atcommand_storeall }, + { "skillid", 40,40, atcommand_skillid }, + { "useskill", 40,40, atcommand_useskill }, + { "displayskill", 99,99, atcommand_displayskill }, + { "snow", 99,99, atcommand_snow }, + { "sakura", 99,99, atcommand_sakura }, + { "clouds", 99,99, atcommand_clouds }, + { "clouds2", 99,99, atcommand_clouds2 }, + { "fog", 99,99, atcommand_fog }, + { "fireworks", 99,99, atcommand_fireworks }, + { "leaves", 99,99, atcommand_leaves }, + { "summon", 60,60, atcommand_summon }, + { "adjgmlvl", 99,99, atcommand_adjgmlvl }, + { "adjcmdlvl", 99,99, atcommand_adjcmdlvl }, + { "trade", 60,60, atcommand_trade }, + { "send", 99,99, atcommand_send }, + { "setbattleflag", 99,99, atcommand_setbattleflag }, + { "unmute", 80,80, atcommand_unmute }, + { "clearweather", 99,99, atcommand_clearweather }, + { "uptime", 1,1, atcommand_uptime }, + { "changesex", 60,60, atcommand_changesex }, + { "mute", 80,80, atcommand_mute }, + { "refresh", 1,1, atcommand_refresh }, + { "identify", 40,40, atcommand_identify }, + { "gmotd", 20,20, atcommand_gmotd }, + { "misceffect", 50,50, atcommand_misceffect }, + { "mobsearch", 10,10, atcommand_mobsearch }, + { "cleanmap", 40,40, atcommand_cleanmap }, + { "npctalk", 20,20, atcommand_npctalk }, + { "pettalk", 10,10, atcommand_pettalk }, + { "users", 40,40, atcommand_users }, + { "reset", 40,40, atcommand_reset }, + { "skilltree", 40,40, atcommand_skilltree }, + { "marry", 40,40, atcommand_marry }, + { "divorce", 40,40, atcommand_divorce }, + { "sound", 40,40, atcommand_sound }, + { "undisguiseall", 99,99, atcommand_undisguiseall }, + { "disguiseall", 99,99, atcommand_disguiseall }, + { "changelook", 60,60, atcommand_changelook }, + { "autoloot", 10,10, atcommand_autoloot }, + { "alootid", 10,10, atcommand_autolootitem }, + { "mobinfo", 1,1, atcommand_mobinfo }, + { "monsterinfo", 1,1, atcommand_mobinfo }, + { "mi", 1,1, atcommand_mobinfo }, + { "exp", 1,1, atcommand_exp }, + { "adopt", 40,40, atcommand_adopt }, + { "version", 1,1, atcommand_version }, + { "mutearea", 99,99, atcommand_mutearea }, + { "stfu", 99,99, atcommand_mutearea }, + { "rates", 1,1, atcommand_rates }, + { "iteminfo", 1,1, atcommand_iteminfo }, + { "ii", 1,1, atcommand_iteminfo }, + { "whodrops", 1,1, atcommand_whodrops }, + { "whereis", 10,10, atcommand_whereis }, + { "mapflag", 99,99, atcommand_mapflag }, + { "me", 20,20, atcommand_me }, + { "monsterignore", 99,99, atcommand_monsterignore }, + { "battleignore", 99,99, atcommand_monsterignore }, + { "fakename", 20,20, atcommand_fakename }, + { "size", 20,20, atcommand_size }, + { "showexp", 10,10, atcommand_showexp}, + { "showzeny", 10,10, atcommand_showzeny}, + { "showdelay", 1,1, atcommand_showdelay}, + { "autotrade", 10,10, atcommand_autotrade }, + { "at", 10,10, atcommand_autotrade }, + { "changegm", 10,10, atcommand_changegm }, + { "changeleader", 10,10, atcommand_changeleader }, + { "partyoption", 10,10, atcommand_partyoption}, + { "invite", 1,1, atcommand_invite }, + { "duel", 1,1, atcommand_duel }, + { "leave", 1,1, atcommand_leave }, + { "accept", 1,1, atcommand_accept }, + { "reject", 1,1, atcommand_reject }, + { "away", 1,1, atcommand_away }, + { "aw", 1,1, atcommand_away }, + { "main", 1,1, atcommand_main }, + { "clone", 50,50, atcommand_clone }, + { "slaveclone", 50,50, atcommand_clone }, + { "evilclone", 50,50, atcommand_clone }, + { "tonpc", 40,40, atcommand_tonpc }, + { "commands", 1,1, atcommand_commands }, + { "noask", 1,1, atcommand_noask }, + { "request", 20,20, atcommand_request }, + { "hlvl", 60,60, atcommand_homlevel }, + { "hlevel", 60,60, atcommand_homlevel }, + { "homlvl", 60,60, atcommand_homlevel }, + { "homlvup", 60,60, atcommand_homlevel }, + { "homlevel", 60,60, atcommand_homlevel }, + { "homevolve", 60,60, atcommand_homevolution }, + { "homevolution", 60,60, atcommand_homevolution }, + { "makehomun", 60,60, atcommand_makehomun }, + { "homfriendly", 60,60, atcommand_homfriendly }, + { "homhungry", 60,60, atcommand_homhungry }, + { "homtalk", 10,10, atcommand_homtalk }, + { "hominfo", 1,1, atcommand_hominfo }, + { "homstats", 1,1, atcommand_homstats }, + { "homshuffle", 60,60, atcommand_homshuffle }, + { "showmobs", 10,10, atcommand_showmobs }, + { "feelreset", 10,10, atcommand_feelreset }, + { "auction", 60,60, atcommand_auction }, + { "mail", 1,1, atcommand_mail }, + { "noks", 0,0, atcommand_ksprotection }, + { "allowks", 6,6, atcommand_allowks }, + { "cash", 60,60, atcommand_cash }, + { "points", 60,60, atcommand_cash }, + { "agitstart2", 60,60, atcommand_agitstart2 }, + { "agitend2", 60,60, atcommand_agitend2 }, }; @@ -8536,7 +8539,7 @@ AtCommandInfo atcommand_info[] = { static AtCommandInfo* get_atcommandinfo_byname(const char* name) { int i; - if( *name == atcommand_symbol ) name++; // for backwards compatibility + if( *name == atcommand_symbol || *name == charcommand_symbol ) name++; // for backwards compatibility ARR_FIND( 0, ARRAYLENGTH(atcommand_info), i, strcmpi(atcommand_info[i].command, name) == 0 ); return ( i < ARRAYLENGTH(atcommand_info) ) ? &atcommand_info[i] : NULL; } @@ -8561,8 +8564,9 @@ int get_atcommand_level(const AtCommandFunc func) /// Executes an at-command. /// To be called by internal server code (bypasses various restrictions). -bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl) +bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl, const char charname[NAME_LENGTH]) { + struct map_session_data* ssd; AtCommandInfo* info; char command[100]; char args[100]; @@ -8570,15 +8574,15 @@ bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str if( !str || !*str ) return false; - - if( *str != atcommand_symbol ) // check first char + + if( *str != atcommand_symbol && *str != charcommand_symbol ) // check first char return false; - + if( sscanf(str, "%99s %99[^\n]", command, args) < 2 ) args[0] = '\0'; info = get_atcommandinfo_byname(command); - if( info == NULL || info->func == NULL || gmlvl < info->level ) + if( info == NULL || info->func == NULL || ( *str == atcommand_symbol && gmlvl < info->level ) || ( *str == charcommand_symbol && gmlvl < info->level2 ) ) { if( gmlvl == 0 ) return false; // will just display as normal text @@ -8590,8 +8594,12 @@ bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str } } - if( log_config.gm && info->level >= log_config.gm ) - log_atcommand(sd, str); + if( log_config.gm && info->level >= log_config.gm ) { + if( (ssd = map_nick2sd(charname)) != NULL ) + log_atcommand(ssd, str); + else + log_atcommand(sd, str); + } if( info->func(fd, sd, command, args) != 0 ) { @@ -8606,6 +8614,13 @@ bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str /// To be used by player-invoked code (restrictions will be applied). bool is_atcommand(const int fd, struct map_session_data* sd, const char* message) { + struct map_session_data* pl_sd; + + char charname[NAME_LENGTH]; + char cmd[100]; + char param[100]; + const char* message2; + int gmlvl = pc_isGM(sd); nullpo_retr(false, sd); @@ -8626,10 +8641,32 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message } // skip 10/11-langtype's codepage indicator, if detected - if( message[0] == '|' && strlen(message) >= 4 && message[3] == atcommand_symbol ) + if( message[0] == '|' && strlen(message) >= 4 && (message[3] == atcommand_symbol || message[3] == charcommand_symbol) ) message += 3; + + if (*message == charcommand_symbol) + { + if (sscanf(message, "%99s \"%23[^\"]\" %99[^\n]", cmd, charname, param) > 2 + || sscanf(message, "%99s %23s %99[^\n]", cmd, charname, param) > 2) + { + if ( (pl_sd = map_nick2sd(charname)) == NULL ) + { + sprintf(atcmd_output, "%s failed. Player %s not found.", cmd, charname); + clif_displaymessage(fd, atcmd_output); + return true; + } + else { + //we pass fd instead of pl_sd->fd otherwise command output messages are sent to the target + //also, the name is taken out of the message since it's not needed anymore + sprintf(atcmd_output, "%s %s", cmd, param); + memcpy(atcmd_temp, atcmd_output, sizeof(atcmd_output)); + message2 = atcmd_temp; + return is_atcommand_sub(fd,pl_sd,message2,gmlvl,sd->status.name); + } + } + } - return is_atcommand_sub(fd,sd,message,gmlvl); + return is_atcommand_sub(fd,sd,message,gmlvl,sd->status.name); } @@ -8638,7 +8675,7 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message *------------------------------------------*/ int atcommand_config_read(const char* cfgName) { - char line[1024], w1[1024], w2[1024]; + char line[1024], w1[1024], w2[1024], w3[1024]; AtCommandInfo* p; FILE* fp; @@ -8653,14 +8690,17 @@ int atcommand_config_read(const char* cfgName) if( line[0] == '/' && line[1] == '/' ) continue; - if( sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2 ) + if( (sscanf(line, "%1023[^:]:%1023[^,],%1023s", w1, w2, w3)) != 3 + && ( sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2 && strcmpi(w1, "import") != 0 ) ) continue; - + p = get_atcommandinfo_byname(w1); if( p != NULL ) { p->level = atoi(w2); p->level = cap_value(p->level, 0, 100); + p->level2 = atoi(w3); + p->level2 = cap_value(p->level2, 0, 100); } else if( strcmpi(w1, "import") == 0 ) @@ -8671,7 +8711,7 @@ int atcommand_config_read(const char* cfgName) w2[0] != '/' && // symbol of standard ragnarok GM commands w2[0] != '%' && // symbol of party chat speaking w2[0] != '$' && // symbol of guild chat speaking - w2[0] != '#' ) // symbol of charcommand + w2[0] != '#' ) // remote symbol atcommand_symbol = w2[0]; else ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); @@ -8700,7 +8740,7 @@ void do_final_atcommand() int atcommand_commands(const int fd, struct map_session_data* sd, const char* command, const char* message) { char line_buff[CHATBOX_SIZE]; - int i, gm_lvl = pc_isGM(sd), count = 0; + int i, gm_lvl = pc_isGM(sd), count = 0, count2 = 0; char* cur = line_buff; memset(line_buff,' ',CHATBOX_SIZE); @@ -8708,33 +8748,60 @@ int atcommand_commands(const int fd, struct map_session_data* sd, const char* co clif_displaymessage(fd, msg_txt(273)); // "Commands available:" - for( i = 0; i < ARRAYLENGTH(atcommand_info); i++ ) - { - unsigned int slen; + for( i = 0; i < ARRAYLENGTH(atcommand_info); i++ ) + { + unsigned int slen; - if( gm_lvl < atcommand_info[i].level ) - continue; + if( gm_lvl < atcommand_info[i].level ) + continue; - slen = (unsigned int)strlen(atcommand_info[i].command); + slen = (unsigned int)strlen(atcommand_info[i].command); - // flush the text buffer if this command won't fit into it - if( slen + cur - line_buff >= CHATBOX_SIZE ) - { - clif_displaymessage(fd,line_buff); - cur = line_buff; - memset(line_buff,' ',CHATBOX_SIZE); - line_buff[CHATBOX_SIZE-1] = 0; + // flush the text buffer if this command won't fit into it + if( slen + cur - line_buff >= CHATBOX_SIZE ) + { + clif_displaymessage(fd,line_buff); + cur = line_buff; + memset(line_buff,' ',CHATBOX_SIZE); + line_buff[CHATBOX_SIZE-1] = 0; + } + + memcpy(cur,atcommand_info[i].command,slen); + cur += slen+(10-slen%10); + + count++; } + + for( i = 0; i < ARRAYLENGTH(atcommand_info); i++ ) + { + unsigned int slen; - memcpy(cur,atcommand_info[i].command,slen); - cur += slen+(10-slen%10); + if( gm_lvl < atcommand_info[i].level2 ) + continue; - count++; - } + slen = (unsigned int)strlen(atcommand_info[i].command); + + // flush the text buffer if this command won't fit into it + if( slen + cur - line_buff >= CHATBOX_SIZE ) + { + clif_displaymessage(fd,line_buff); + cur = line_buff; + memset(line_buff,' ',CHATBOX_SIZE); + line_buff[CHATBOX_SIZE-1] = 0; + } + + memcpy(cur,atcommand_info[i].command,slen); + cur += slen+(10-slen%10); + + count2++; + } + clif_displaymessage(fd,line_buff); sprintf(atcmd_output, msg_txt(274), count); // "%d commands found." clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d charcommands found.", count2); + clif_displaymessage(fd, atcmd_output); return 0; -} +} \ No newline at end of file diff --git a/src/map/atcommand.h b/src/map/atcommand.h index 875b014a3..03cbbfaf8 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -14,10 +14,11 @@ struct map_session_data; //#define AUTOLOOT_DISTANCE AREA_SIZE extern char atcommand_symbol; +extern char charcommand_symbol; typedef int (*AtCommandFunc)(const int fd, struct map_session_data* sd, const char* command, const char* message); bool is_atcommand(const int fd, struct map_session_data* sd, const char* message); -bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl); +bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl, const char charname[NAME_LENGTH]); int get_atcommand_level(const AtCommandFunc func); void do_init_atcommand(void); diff --git a/src/map/charcommand.c b/src/map/charcommand.c deleted file mode 100644 index cc25a6d28..000000000 --- a/src/map/charcommand.c +++ /dev/null @@ -1,3936 +0,0 @@ -// Copyright (c) Athena Dev Teams - Licensed under GNU GPL -// For more information, see LICENCE in the main folder - -#include "../common/cbasetypes.h" -#include "../common/mmo.h" -#include "../common/timer.h" -#include "../common/nullpo.h" -#include "../common/showmsg.h" -#include "../common/strlib.h" -#include "../common/utils.h" - -#include "atcommand.h" // msg_txt() -#include "charcommand.h" -#include "battle.h" -#include "clif.h" -#include "chrif.h" -#include "intif.h" -#include "itemdb.h" -#include "log.h" -#include "map.h" -#include "pc.h" -#include "status.h" -#include "skill.h" -#include "mob.h" -#include "npc.h" -#include "pet.h" -#include "homunculus.h" -#include "party.h" -#include "guild.h" -#include "script.h" -#include "trade.h" -#include "unit.h" - -#include -#include -#include -#include - -char charcommand_symbol = '#'; - -extern char *msg_table[1000]; // Server messages (0-499 reserved for GM commands, 500-999 reserved for others) - -#define CCMD_FUNC(x) int charcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message) - -typedef struct CharCommandInfo { - const char* command; - int level; - CharCommandFunc func; -} CharCommandInfo; - -static CharCommandInfo* get_charcommandinfo_byname(const char* name); -static CharCommandInfo* get_charcommandinfo_byfunc(const CharCommandFunc func); - - -/*========================================== - * ‘ÎÛƒLƒƒƒ‰ƒNƒ^[‚ð“]E‚³‚¹‚é upperŽw’è‚Å“]¶‚â—{Žq‚à‰Â”\ - *------------------------------------------*/ -int charcommand_jobchange(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[100]; - struct map_session_data* pl_sd; - int job = 0, upper = -1; - - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &job, character) < 2) { - clif_displaymessage(fd, "Please, enter a job and a player name (usage: #job/#jobchange )."); - clif_displaymessage(fd, " 0 Novice 7 Knight 14 Crusader 21 Peco Crusader"); - clif_displaymessage(fd, " 1 Swordman 8 Priest 15 Monk 22 N/A"); - clif_displaymessage(fd, " 2 Mage 9 Wizard 16 Sage 23 Super Novice"); - clif_displaymessage(fd, " 3 Archer 10 Blacksmith 17 Rogue 24 Gunslinger"); - clif_displaymessage(fd, " 4 Acolyte 11 Hunter 18 Alchemist 25 Ninja"); - clif_displaymessage(fd, " 5 Merchant 12 Assassin 19 Bard 26 N/A"); - clif_displaymessage(fd, " 6 Thief 13 Peco Knight 20 Dancer"); - clif_displaymessage(fd, "4001 Novice High 4008 Lord Knight 4015 Paladin 4022 Peco Paladin"); - clif_displaymessage(fd, "4002 Swordman High 4009 High Priest 4016 Champion"); - clif_displaymessage(fd, "4003 Mage High 4010 High Wizard 4017 Professor"); - clif_displaymessage(fd, "4004 Archer High 4011 Whitesmith 4018 Stalker"); - clif_displaymessage(fd, "4005 Acolyte High 4012 Sniper 4019 Creator"); - clif_displaymessage(fd, "4006 Merchant High 4013 Assassin Cross 4020 Clown"); - clif_displaymessage(fd, "4007 Thief High 4014 Peco Lord Knight 4021 Gypsy"); - clif_displaymessage(fd, "4023 Baby Novice 4030 Baby Knight 4037 Baby Crusader 4044 Baby Peco Crusader"); - clif_displaymessage(fd, "4024 Baby Swordsman 4031 Baby Priest 4038 Baby Monk 4045 Super Baby"); - clif_displaymessage(fd, "4025 Baby Mage 4032 Baby Wizard 4039 Baby Sage 4046 Taekwon Kid"); - clif_displaymessage(fd, "4026 Baby Archer 4033 Baby Blacksmith 4040 Baby Rogue 4047 Taekwon Master"); - clif_displaymessage(fd, "4027 Baby Acolyte 4034 Baby Hunter 4041 Baby Alchemist 4048 N/A"); - clif_displaymessage(fd, "4028 Baby Merchant 4035 Baby Assassin 4042 Baby Bard 4049 Soul Linker"); - clif_displaymessage(fd, "4029 Baby Thief 4036 Baby Peco-Knight 4043 Baby Dancer"); - return -1; - } - - if ((pl_sd = map_nick2sd(character)) == NULL) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (!pcdb_checkid(job)) { - clif_displaymessage(fd, msg_txt(49)); // Invalid job ID. - return -1; - } - - if (pc_jobchange(pl_sd, job, upper) != 0) { - clif_displaymessage(fd, msg_txt(192)); // Unable to change the specified character's job. - return -1; - } - - clif_displaymessage(fd, msg_txt(48)); // Character's job changed. - return 0; -} - -/*========================================== - * - *------------------------------------------*/ -int charcommand_petrename(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - struct pet_data *pd; - - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #petrename )."); - return -1; - } - - if ((pl_sd = map_nick2sd(character)) == NULL) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if (!pl_sd->status.pet_id || !pl_sd->pd) { - clif_displaymessage(fd, msg_txt(191)); // Sorry, but this player has no pet. - return -1; - } - - pd = pl_sd->pd; - - if (pd->pet.rename_flag) { - clif_displaymessage(fd, msg_txt(190)); // This player can already rename his/her pet. - return -1; - } - pd->pet.rename_flag = 0; - intif_save_petdata(pl_sd->status.account_id, &pd->pet); - clif_send_petstatus(pl_sd); - clif_displaymessage(fd, msg_txt(189)); // This player can now rename his/her pet. - return 0; -} - - -/*========================================== - * - *------------------------------------------*/ -int charcommand_petfriendly(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int friendly = 0; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - struct pet_data *pd; - - memset(character, '\0', sizeof(character)); - if (!message || !*message || sscanf(message,"%d %23s",&friendly,character) < 2) { - clif_displaymessage(fd, "Please, enter a valid value (usage: #petfriendly <0-1000> )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (!pl_sd->status.pet_id || !pl_sd->pd) { - clif_displaymessage(fd, msg_txt(191)); // Sorry, but this player has no pet. - return -1; - } - - friendly = cap_value(friendly, 0, 1000); - - pd = pl_sd->pd; - if (friendly == pd->pet.intimate) { - clif_displaymessage(fd, msg_txt(183)); // Pet friendly is already the good value. - return -1; - } - - pd->pet.intimate = friendly; - clif_send_petstatus(pl_sd); - clif_pet_emotion(pd,0); - clif_displaymessage(pl_sd->fd, msg_txt(182)); // Pet friendly value changed! - clif_displaymessage(sd->fd, msg_txt(182)); // Pet friendly value changed! - return 0; -} - -/*========================================== - * - *------------------------------------------*/ -int charcommand_stats(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - char job_jobname[100]; - char output[200]; - struct map_session_data *pl_sd; - int i; - struct { - const char* format; - int value; - } output_table[] = { - { "Base Level - %d", 0 }, - { NULL, 0 }, - { "Hp - %d", 0 }, - { "MaxHp - %d", 0 }, - { "Sp - %d", 0 }, - { "MaxSp - %d", 0 }, - { "Str - %3d", 0 }, - { "Agi - %3d", 0 }, - { "Vit - %3d", 0 }, - { "Int - %3d", 0 }, - { "Dex - %3d", 0 }, - { "Luk - %3d", 0 }, - { "Zeny - %d", 0 }, - { "Free SK Points - %d", 0 }, - { "JobChangeLvl - %d", 0 }, - { NULL, 0 } - }; - - memset(character, '\0', sizeof(character)); - memset(job_jobname, '\0', sizeof(job_jobname)); - memset(output, '\0', sizeof(output)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #stats )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - //direct array initialization with variables is not standard C compliant. - output_table[0].value = pl_sd->status.base_level; - output_table[1].format = job_jobname; - output_table[1].value = pl_sd->status.job_level; - output_table[2].value = pl_sd->status.hp; - output_table[3].value = pl_sd->status.max_hp; - output_table[4].value = pl_sd->status.sp; - output_table[5].value = pl_sd->status.max_sp; - output_table[6].value = pl_sd->status.str; - output_table[7].value = pl_sd->status.agi; - output_table[8].value = pl_sd->status.vit; - output_table[9].value = pl_sd->status.int_; - output_table[10].value = pl_sd->status.dex; - output_table[11].value = pl_sd->status.luk; - output_table[12].value = pl_sd->status.zeny; - output_table[13].value = pl_sd->status.skill_point; - output_table[14].value = pl_sd->change_level; - - sprintf(job_jobname, "Job - %s %s", job_name(pl_sd->status.class_), "(level %d)"); - sprintf(output, msg_txt(53), pl_sd->status.name); // '%s' stats: - - clif_displaymessage(fd, output); - - for (i = 0; output_table[i].format != NULL; i++) { - sprintf(output, output_table[i].format, output_table[i].value); - clif_displaymessage(fd, output); - } - - return 0; -} - -/*========================================== - * Character Reset - *------------------------------------------*/ -int charcommand_reset(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - char output[200]; - struct map_session_data *pl_sd; - - memset(character, '\0', sizeof(character)); - memset(output, '\0', sizeof(output)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #reset )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - pc_resetstate(pl_sd); - pc_resetskill(pl_sd,1); - sprintf(output, msg_txt(208), character); // '%s' skill and stat points have been reset. - clif_displaymessage(fd, output); - - return 0; -} - -/*========================================== - * - *------------------------------------------*/ -int charcommand_option(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - int opt1 = 0, opt2 = 0, opt3 = 0; - struct map_session_data* pl_sd; - - memset(character, '\0', sizeof(character)); - - if (!message || !*message || - sscanf(message, "%d %d %d %23[^\n]", &opt1, &opt2, &opt3, character) < 4 || - opt1 < 0 || opt2 < 0 || opt3 < 0) { - clif_displaymessage(fd, "Please, enter valid options and a player name (usage: #option )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - pl_sd->sc.opt1 = opt1; - pl_sd->sc.opt2 = opt2; - pc_setoption(pl_sd, opt3); - clif_displaymessage(fd, msg_txt(58)); // Character's options changed. - - return 0; -} - -/*========================================== - * - *------------------------------------------*/ -int charcommand_save(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char map_name[MAP_NAME_LENGTH_EXT]; - char character[NAME_LENGTH]; - struct map_session_data* pl_sd; - int x = 0, y = 0; - int m; - - memset(map_name, '\0', sizeof(map_name)); - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%15s %d %d %23[^\n]", map_name, &x, &y, character) < 4 || x < 0 || y < 0) { - clif_displaymessage(fd, "Please, enter a valid save point and a player name (usage: #save )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - m = map_mapname2mapid(map_name); - if (m < 0 && !mapindex_name2id(map_name)) { - clif_displaymessage(fd, msg_txt(1)); // Map not found. - return -1; - } - - //FIXME: What do you do if the map is in another map server with the nowarpto flag? - if (m>=0 && map[m].flag.nosave && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { - clif_displaymessage(fd, "You are not authorised to set this map as a save map."); - return -1; - } - - if (m>=0) - pc_setsavepoint(pl_sd, map[m].index, x, y); - else - pc_setsavepoint(pl_sd, mapindex_name2id(map_name), x, y); - clif_displaymessage(fd, msg_txt(57)); // Character's save point changed. - - return 0; -} - -/*========================================== - * CharSpiritBall Function by PalasX - *------------------------------------------*/ -int charcommand_spiritball(const int fd, struct map_session_data* sd,const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char character[NAME_LENGTH]; - int spirit = 0; - - memset(character, '\0', sizeof(character)); - - if(!message || !*message || sscanf(message, "%d %23[^\n]", &spirit, character) < 2 || spirit < 0 || spirit > 1000) { - clif_displaymessage(fd, "Usage: @spiritball ."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if (spirit >= 0 && spirit <= 0x7FFF) { - if (pl_sd->spiritball != spirit || spirit > 999) { - if (pl_sd->spiritball > 0) - pc_delspiritball(pl_sd, pl_sd->spiritball, 1); - } - pl_sd->spiritball = spirit; - clif_spiritball(pl_sd); - // no message, player can look the difference - if (spirit > 1000) - clif_displaymessage(fd, msg_txt(204)); // WARNING: more than 1000 spiritballs can CRASH your server and/or client! - } else { - clif_displaymessage(fd, msg_txt(205)); // You already have that number of spiritballs. - return -1; - } - - return 0; -} - -/*========================================== - * #itemlist : Displays the list of a player's items. - *------------------------------------------*/ -int charcommand_itemlist(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - struct item_data *item_data, *item_temp; - int i, j, equip, count, counter, counter2; - char character[NAME_LENGTH], output[200], equipstr[100], outputtmp[200]; - struct item *i_item; //Current inventory item. - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - memset(output, '\0', sizeof(output)); - memset(equipstr, '\0', sizeof(equipstr)); - memset(outputtmp, '\0', sizeof(outputtmp)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #itemlist )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - counter = 0; - count = 0; - for (i = 0; i < MAX_INVENTORY; i++) { - i_item = &pl_sd->status.inventory[i]; - if (pl_sd->status.inventory[i].nameid > 0 && (item_data = itemdb_exists(i_item->nameid)) != NULL) { - counter = counter + i_item->amount; - count++; - if (count == 1) { - sprintf(output, "------ Items list of '%s' ------", pl_sd->status.name); - clif_displaymessage(fd, output); - } - if ((equip = i_item->equip)) { - strcpy(equipstr, "| equiped: "); - if (equip & EQP_GARMENT) - strcat(equipstr, "robe/gargment, "); - if (equip & EQP_ACC_L) - strcat(equipstr, "left accessory, "); - if (equip & EQP_ARMOR) - strcat(equipstr, "body/armor, "); - if ((equip & EQP_ARMS) == EQP_HAND_R) - strcat(equipstr, "right hand, "); - if ((equip & EQP_ARMS) == EQP_HAND_L) - strcat(equipstr, "left hand, "); - if ((equip & EQP_ARMS) == EQP_ARMS) - strcat(equipstr, "both hands, "); - if (equip & EQP_SHOES) - strcat(equipstr, "feet, "); - if (equip & EQP_ACC_R) - strcat(equipstr, "right accessory, "); - if ((equip & EQP_HELM) == EQP_HEAD_LOW) - strcat(equipstr, "lower head, "); - if ((equip & EQP_HELM) == EQP_HEAD_TOP) - strcat(equipstr, "top head, "); - if ((equip & EQP_HELM) == (EQP_HEAD_LOW|EQP_HEAD_TOP)) - strcat(equipstr, "lower/top head, "); - if ((equip & EQP_HELM) == EQP_HEAD_MID) - strcat(equipstr, "mid head, "); - if ((equip & EQP_HELM) == (EQP_HEAD_LOW|EQP_HEAD_MID)) - strcat(equipstr, "lower/mid head, "); - if ((equip & EQP_HELM) == EQP_HELM) - strcat(equipstr, "lower/mid/top head, "); - // remove final ', ' - equipstr[strlen(equipstr) - 2] = '\0'; - } else - memset(equipstr, '\0', sizeof(equipstr)); - if (i_item->refine) - sprintf(output, "%d %s %+d (%s %+d, id: %d) %s", i_item->amount, item_data->name, i_item->refine, item_data->jname, i_item->refine, i_item->nameid, equipstr); - else - sprintf(output, "%d %s (%s, id: %d) %s", i_item->amount, item_data->name, item_data->jname, i_item->nameid, equipstr); - clif_displaymessage(fd, output); - memset(output, '\0', sizeof(output)); - counter2 = 0; - - if(i_item->card[0]==CARD0_PET) { //pet eggs - if (i_item->card[3]) - sprintf(outputtmp, " -> (pet egg, pet id: %u, named)", (unsigned int)MakeDWord(i_item->card[1], i_item->card[2])); - else - sprintf(outputtmp, " -> (pet egg, pet id: %u, unnamed)", (unsigned int)MakeDWord(i_item->card[1], i_item->card[2])); - strcat(output, outputtmp); - } else - if(i_item->card[0]==CARD0_FORGE) { //forged items. - sprintf(outputtmp, " -> (crafted item, creator id: %u, star crumbs %d, element %d)", (unsigned int)MakeDWord(i_item->card[2], i_item->card[3]), i_item->card[1]>>8, i_item->card[1]&0x0f); - } else - if(i_item->card[0]==CARD0_CREATE) { //created items. - sprintf(outputtmp, " -> (produced item, creator id: %u)", (unsigned int)MakeDWord(i_item->card[2], i_item->card[3])); - strcat(output, outputtmp); - } else //Normal slots - for (j = 0; j < item_data->slot; j++) { - if (pl_sd->status.inventory[i].card[j]) { - if ((item_temp = itemdb_exists(i_item->card[j])) != NULL) { - if (output[0] == '\0') - sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); - else - sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); - strcat(output, outputtmp); - } - } - } - if (output[0] != '\0') { - output[strlen(output) - 2] = ')'; - output[strlen(output) - 1] = '\0'; - clif_displaymessage(fd, output); - } - } - } - if (count == 0) - { - clif_displaymessage(fd, "No item found on this player."); - return -1; - } - - sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count); - clif_displaymessage(fd, output); - return 0; -} - -/*========================================== - * #effect by [MouseJstr] - * - * Create a effect localized on another character - *------------------------------------------*/ -int charcommand_effect(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd = NULL; - char character[NAME_LENGTH]; - int type = 0; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &type, character) != 2) { - clif_displaymessage(fd, "usage: #effect ."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - clif_specialeffect(&pl_sd->bl, type, AREA); - clif_displaymessage(fd, msg_txt(229)); // Your effect has changed. - - return 0; -} - -/*========================================== - * #storagelist : Displays the items list of a player's storage. - *------------------------------------------*/ -int charcommand_storagelist(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - struct item_data *item_data, *item_temp; - int i, j, count = 0, counter = 0, counter2 = 0; - char character[NAME_LENGTH], output[200], outputtmp[200]; - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - memset(output, '\0', sizeof(output)); - memset(outputtmp, '\0', sizeof(outputtmp)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #itemlist )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - for (i = 0; i < MAX_STORAGE; i++) - { - struct item* it = &pl_sd->status.storage.items[i]; - if( it->nameid > 0 && (item_data = itemdb_search(it->nameid)) != NULL ) - { - counter = counter + it->amount; - count++; - if (count == 1) { - sprintf(output, "------ Storage items list of '%s' ------", pl_sd->status.name); - clif_displaymessage(fd, output); - } - if (it->refine) - sprintf(output, "%d %s %+d (%s %+d, id: %d)", it->amount, item_data->name, it->refine, item_data->jname, it->refine, it->nameid); - else - sprintf(output, "%d %s (%s, id: %d)", it->amount, item_data->name, item_data->jname, it->nameid); - clif_displaymessage(fd, output); - - memset(output, '\0', sizeof(output)); - counter2 = 0; - for (j = 0; j < item_data->slot; j++) { - if (it->card[j]) { - if ((item_temp = itemdb_search(it->card[j])) != NULL) { - if (output[0] == '\0') - sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); - else - sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); - strcat(output, outputtmp); - } - } - } - if (output[0] != '\0') { - output[strlen(output) - 2] = ')'; - output[strlen(output) - 1] = '\0'; - clif_displaymessage(fd, output); - } - } - } - - if (count == 0) - clif_displaymessage(fd, "No item found in the storage of this player."); - else { - sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count); - clif_displaymessage(fd, output); - } - - return 0; -} - -static void charcommand_item_sub(struct map_session_data *sd,struct item_data *item_data,int number) -{ - int loop, get_count, pet_id, i; - - if( sd == NULL || item_data == NULL ) - return; - - if( !itemdb_isstackable2(item_data) ) { - loop = number; get_count = 1; - } else { - loop = 1; get_count = number; - } - - for (i = 0; i < loop; i++) - { - if( (pet_id = search_petDB_index(item_data->nameid, PET_EGG)) >= 0 ) - {// if pet egg - sd->catch_target_class = pet_db[pet_id].class_; - intif_create_pet(sd->status.account_id, sd->status.char_id, - (short)pet_db[pet_id].class_, (short)mob_db(pet_db[pet_id].class_)->lv, - (short)pet_db[pet_id].EggID, 0, (short)pet_db[pet_id].intimate, - 100, 0, 1, pet_db[pet_id].jname); - } - else - {// if not pet egg - int flag = 0; - struct item item_tmp; - memset(&item_tmp, 0, sizeof(item_tmp)); - item_tmp.nameid = item_data->nameid; - item_tmp.identify = 1; - - if ((flag = pc_additem(sd, &item_tmp, get_count))) - clif_additem(sd, 0, 0, flag); - - //Logs (A)dmins items [Lupus] - if(log_config.enable_logs&0x400) - log_pick_pc(sd, "A", item_tmp.nameid, number, &item_tmp); - } - } -} - -/*========================================== - * #item command (usage: #item ) - * by MC Cameri - *------------------------------------------*/ -int charcommand_item(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char item_name[100]; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - int number = 0, item_id; - struct item_data *item_data; - int gmlvl; - char tmp_cmdoutput[1024]; - nullpo_retr(-1, sd); - - memset(item_name, '\0', sizeof(item_name)); - - if (!message || !*message || ( - sscanf(message, "\"%99[^\"]\" %d %23[^\n]", item_name, &number, character) < 3 && - sscanf(message, "%99s %d %23[^\n]", item_name, &number, character) < 3 - )) { - clif_displaymessage(fd, "Please, enter an item name/id (usage: #item )."); - return -1; - } - - if (number <= 0) - number = 1; - - item_id = 0; - if ((item_data = itemdb_searchname(item_name)) != NULL || - (item_data = itemdb_exists(atoi(item_name))) != NULL) - item_id = item_data->nameid; - - if (item_id < 500) { - clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name. - return -1; - } - - gmlvl = pc_isGM(sd); - if( !pc_can_give_items(gmlvl) ) - { - clif_displaymessage(fd, msg_txt(246)); // GM is not allowed to trade - return -1; - } - - if ((pl_sd = map_nick2sd(character)) != NULL) - { - int pl_gmlvl = pc_isGM(pl_sd); - if( gmlvl < pl_gmlvl || !itemdb_cantrade_sub(item_data, gmlvl, pl_gmlvl) ) - {// you can give items only to lower or same level - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - charcommand_item_sub(pl_sd,item_data,number); - clif_displaymessage(fd, msg_txt(18)); // Item created. - } - else if (strcmpi(character,"all")==0 || strcmpi(character,"everyone")==0) - { - struct s_mapiterator* iter = mapit_getallusers(); - for( pl_sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); pl_sd = (TBL_PC*)mapit_next(iter) ) - { - int pl_gmlvl = pc_isGM(pl_sd); - if( gmlvl < pl_gmlvl || !itemdb_cantrade_sub(item_data, gmlvl, pl_gmlvl) ) - continue; - - charcommand_item_sub(pl_sd,item_data,number); - clif_displaymessage(pl_sd->fd, msg_txt(18)); // Item created. - } - mapit_free(iter); - - snprintf(tmp_cmdoutput, sizeof(tmp_cmdoutput), "Everyone received %s %d.",item_name,number); - clif_displaymessage(fd, tmp_cmdoutput); - } - else - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * #warp/#rura/#rura+ - *------------------------------------------*/ -int charcommand_warp(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char map_name[MAP_NAME_LENGTH_EXT]; - char character[NAME_LENGTH]; - int x = 0, y = 0; - struct map_session_data *pl_sd; - int m; - - nullpo_retr(-1, sd); - - memset(map_name, '\0', sizeof(map_name)); - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%15s %d %d %23[^\n]", map_name, &x, &y, character) < 4) { - clif_displaymessage(fd, "Usage: #warp/#rura/#rura+ "); - return -1; - } - - if ((pl_sd = map_nick2sd(character)) == NULL) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - if (pc_isGM(sd) < pc_isGM(pl_sd)) { // you can rura+ only lower or same GM level - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - m = map_mapname2mapid(map_name); - if (m < 0) { - clif_displaymessage(fd, msg_txt(1)); // Map not found. - return -1; - } - if ((x || y) && map_getcell(m, x, y, CELL_CHKNOREACH)) { - clif_displaymessage(fd, msg_txt(2)); // Coordinates out of range. - x = y = 0; - } - if (map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { - clif_displaymessage(fd, "You are not authorised to warp someone to this map."); - return -1; - } - if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { - clif_displaymessage(fd, "You are not authorised to warp this player from its actual map."); - return -1; - } - if (pc_setpos(pl_sd, map[m].index, x, y, 3) == 0) { - clif_displaymessage(pl_sd->fd, msg_txt(0)); // Warped. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(15)); // Player warped (message sends to player too). - return 0; - } - //No error message specified...? - return -1; -} - -/*========================================== - * #zeny - *------------------------------------------*/ -int charcommand_zeny(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char character[NAME_LENGTH]; - int zeny = 0, new_zeny; - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &zeny, character) < 2 || zeny == 0) { - clif_displaymessage(fd, "Please, enter a number and a player name (usage: #zeny )."); - return -1; - } - - if ((pl_sd = map_nick2sd(character)) != NULL) { - new_zeny = pl_sd->status.zeny + zeny; - if (zeny > 0 && (zeny > MAX_ZENY || new_zeny > MAX_ZENY)) // fix positiv overflow - new_zeny = MAX_ZENY; - else if (zeny < 0 && (zeny < -MAX_ZENY || new_zeny < 0)) // fix negativ overflow - new_zeny = 0; - if (new_zeny != pl_sd->status.zeny) { - pl_sd->status.zeny = new_zeny; - clif_updatestatus(pl_sd, SP_ZENY); - clif_displaymessage(fd, msg_txt(211)); // Character's current zeny changed. - } else { - if (zeny < 0) - clif_displaymessage(fd, msg_txt(41)); // Unable to decrease the number/value. - else - clif_displaymessage(fd, msg_txt(149)); // Unable to increase the number/value. - return -1; - } - } else { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * #cash or #points - *------------------------------------------*/ -int charcommand_cash(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char character[NAME_LENGTH]; - int value = 0; - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - - if( !message || !*message || sscanf(message, "%d %23[^\n]", &value, character) < 2 || value == 0 ) - { - clif_displaymessage(fd, "Please, enter a number and a player name (usage: #cash|#points )."); - return -1; - } - - if( (pl_sd = map_nick2sd(character)) != NULL ) - { - if( !strcmpi(command+1,"cash") ) - { - if( value > 0 ) - pc_getcash(pl_sd, value, 0); - else - pc_paycash(pl_sd, -value, 0); - - clif_displaymessage(fd, "Character's Cash Points changed!."); - } - else - { // @points - if( value > 0 ) - pc_getcash(pl_sd, 0, value); - else - pc_paycash(pl_sd, -value, -value); - - clif_displaymessage(fd, "Character's Kafra Points changed!."); - } - } - else - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * #fakename - *------------------------------------------*/ -int charcommand_fakename(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char name[NAME_LENGTH]; - char char_name[NAME_LENGTH]; - - nullpo_retr(-1, sd); - - name[0] = '\0'; //If you don't pass a second word, name is left as garbage, most definitely not a blank name! [Skotlex] - if (!message || !*message || sscanf(message, "%23s %23[^\n]", char_name, name) < 1) { - clif_displaymessage(sd->fd,"Usage: #fakename ."); - clif_displaymessage(sd->fd,"Or: #fakename to disable."); - return 0; - } - - if(!(pl_sd = map_nick2sd(char_name))) { - clif_displaymessage(sd->fd,"Character not found."); - return -1; - } - - if(!name[0]) { - if(strlen(pl_sd->fakename) > 1) { - pl_sd->fakename[0]='\0'; - clif_charnameack(0, &pl_sd->bl); - clif_displaymessage(sd->fd,"Returned to real name."); - } else { - clif_displaymessage(sd->fd,"Character does not has a fake name."); - } - return 0; - } - - if(strlen(name) < 2) { - clif_displaymessage(sd->fd,"Fake name must be at least two characters."); - return 0; - } - - memcpy(pl_sd->fakename, name, NAME_LENGTH); - clif_charnameack(0, &pl_sd->bl); - clif_displaymessage(sd->fd,"Fake name enabled."); - - return 0; -} - - -/*========================================== - * #baselvl <#> - * Transferred by: Kevin - *------------------------------------------*/ -int charcommand_baselevel(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - int level = 0, i, status_point=0; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &level, player) < 2 || level == 0) { - clif_displaymessage(fd, "Please, enter a level adjustment and a player name (usage: #baselvl <#> )."); - return -1; - } - - if ((pl_sd = map_nick2sd(player)) == NULL) { - clif_displaymessage(fd, msg_table[3]); // Character not found. - return -1; - } - if (pc_isGM(sd) < pc_isGM(pl_sd)) { // you can change base level only lower or same gm level - clif_displaymessage(fd, msg_table[81]); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (level > 0) { - if (pl_sd->status.base_level == pc_maxbaselv(pl_sd)) { // check for max level by Valaris - clif_displaymessage(fd, msg_table[91]); // Character's base level can't go any higher. - return 0; - } // End Addition - if ((unsigned int)level > pc_maxbaselv(pl_sd) || - pl_sd->status.base_level > pc_maxbaselv(pl_sd) -level) - level = pc_maxbaselv(pl_sd) - pl_sd->status.base_level; - for (i = 1; i <= level; i++) - status_point += (pl_sd->status.base_level + i + 14) / 5; - - if (pl_sd->status.status_point > USHRT_MAX - status_point) - pl_sd->status.status_point = USHRT_MAX; - else - pl_sd->status.status_point += status_point; - pl_sd->status.base_level += (unsigned int)level; - status_percent_heal(&pl_sd->bl, 100, 100); - clif_misceffect(&pl_sd->bl, 0); - clif_displaymessage(fd, msg_table[65]); // Character's base level raised. - } else { - if (pl_sd->status.base_level == 1) { - clif_displaymessage(fd, msg_table[193]); // Character's base level can't go any lower. - return -1; - } - level *= -1; - if ((unsigned int)level >= pl_sd->status.base_level) - level = pl_sd->status.base_level -1; - for (i = 0; i > -level; i--) - status_point += (pl_sd->status.base_level +i + 14) / 5; - if (pl_sd->status.status_point < status_point) - pc_resetstate(pl_sd); - if (pl_sd->status.status_point < status_point) - pl_sd->status.status_point = 0; - else - pl_sd->status.status_point -= status_point; - pl_sd->status.base_level -= (unsigned int)level; - clif_displaymessage(fd, msg_table[66]); // Character's base level lowered. - } - clif_updatestatus(pl_sd, SP_BASELEVEL); - clif_updatestatus(pl_sd, SP_NEXTBASEEXP); - clif_updatestatus(pl_sd, SP_STATUSPOINT); - status_calc_pc(pl_sd, 0); - if(pl_sd->status.party_id) - party_send_levelup(pl_sd); - return 0; //³íI—¹ -} - -/*========================================== - * #jlvl <#> - * Transferred by: Kevin - *------------------------------------------*/ -int charcommand_joblevel(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - int level = 0; - //“]¶‚â—{Žq‚Ìꇂ̌³‚ÌE‹Æ‚ðŽZo‚·‚é - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &level, player) < 2 || level == 0) { - clif_displaymessage(fd, "Please, enter a level adjustment and a player name (usage: #joblvl <#> )."); - return -1; - } - - if ((pl_sd = map_nick2sd(player)) != NULL) { - if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can change job level only lower or same gm level - if (level > 0) { - if (pl_sd->status.job_level == pc_maxjoblv(pl_sd)) { - clif_displaymessage(fd, msg_txt(67)); // Character's job level can't go any higher. - return -1; - } - if ((unsigned int)level > pc_maxjoblv(pl_sd) || - pl_sd->status.job_level > pc_maxjoblv(pl_sd) -level) - level = pc_maxjoblv(pl_sd) - pl_sd->status.job_level; - pl_sd->status.job_level += (unsigned int)level; - clif_updatestatus(pl_sd, SP_JOBLEVEL); - clif_updatestatus(pl_sd, SP_NEXTJOBEXP); - - if (pl_sd->status.skill_point > USHRT_MAX - level) - pl_sd->status.skill_point = USHRT_MAX; - else - pl_sd->status.skill_point += level; - clif_updatestatus(pl_sd, SP_SKILLPOINT); - status_calc_pc(pl_sd, 0); - clif_misceffect(&pl_sd->bl, 1); - clif_displaymessage(fd, msg_txt(68)); // character's job level raised. - } else { - if (pl_sd->status.job_level == 1) { - clif_displaymessage(fd, msg_txt(194)); // Character's job level can't go any lower. - return -1; - } - level*=-1; - if ((unsigned int)level >= pl_sd->status.job_level) - level = pl_sd->status.job_level-1; - pl_sd->status.job_level -= (unsigned int)level; - clif_updatestatus(pl_sd, SP_JOBLEVEL); - clif_updatestatus(pl_sd, SP_NEXTJOBEXP); - if (pl_sd->status.skill_point < level) - pc_resetskill(pl_sd, 0); //Need more skill points to substract - if (pl_sd->status.skill_point < level) - pl_sd->status.skill_point = 0; - else - pl_sd->status.skill_point -= level; - clif_updatestatus(pl_sd, SP_SKILLPOINT); - status_calc_pc(pl_sd, 0); - clif_displaymessage(fd, msg_txt(69)); // Character's job level lowered. - } - } else { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - } else { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - - -/*========================================== - * #questskill - * Transferred by: Kevin - *------------------------------------------*/ -int charcommand_questskill(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - int skill_id = 0; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &skill_id, player) < 2 || skill_id < 0) { - clif_displaymessage(fd, "Please, enter a quest skill number and a player name (usage: #questskill <#:0+> )."); - return -1; - } - - if (skill_id < 0 && skill_id >= MAX_SKILL_DB) { - clif_displaymessage(fd, msg_txt(198)); // This skill number doesn't exist. - return -1; - } - if (!(skill_get_inf2(skill_id) & INF2_QUEST_SKILL)) { - clif_displaymessage(fd, msg_txt(197)); // This skill number doesn't exist or isn't a quest skill. - return -1; - } - if ((pl_sd = map_nick2sd(player)) == NULL) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - if (pc_checkskill(pl_sd, skill_id) > 0) { - clif_displaymessage(fd, msg_txt(200)); // This player already has this quest skill. - return -1; - } - - pc_skill(pl_sd, skill_id, 1, 0); - clif_displaymessage(fd, msg_txt(199)); // This player has learned the skill. - - return 0; -} - - -/*========================================== - * #lostskill - * Transferred by: Kevin - *------------------------------------------*/ -int charcommand_lostskill(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - int skill_id = 0; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &skill_id, player) < 2 || skill_id < 0) { - clif_displaymessage(fd, "Please, enter a quest skill number and a player name (usage: @charlostskill <#:0+> )."); - return -1; - } - - if (skill_id < 0 && skill_id >= MAX_SKILL) { - clif_displaymessage(fd, msg_txt(198)); // This skill number doesn't exist. - return -1; - } - if (!(skill_get_inf2(skill_id) & INF2_QUEST_SKILL)) { - clif_displaymessage(fd, msg_txt(197)); // This skill number doesn't exist or isn't a quest skill. - return -1; - } - if ((pl_sd = map_nick2sd(player)) == NULL) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - if (pc_checkskill(pl_sd, skill_id) == 0) { - clif_displaymessage(fd, msg_txt(203)); // This player doesn't have this quest skill. - return -1; - } - - pl_sd->status.skill[skill_id].lv = 0; - pl_sd->status.skill[skill_id].flag = 0; - clif_skillinfoblock(pl_sd); - clif_displaymessage(fd, msg_txt(202)); // This player has forgotten the skill. - - return 0; -} - -/*========================================== - * Character Skill Reset - *------------------------------------------*/ -int charcommand_skreset(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - char tmp_cmdoutput[1024]; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%23[^\n]", player) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: @charskreset )."); - return -1; - } - - if ((pl_sd = map_nick2sd(player)) != NULL) { - if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can reset skill points only lower or same gm level - pc_resetskill(pl_sd,1); - sprintf(tmp_cmdoutput, msg_txt(206), player); // '%s' skill points reset. - clif_displaymessage(fd, tmp_cmdoutput); - } else { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - } else { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * Character Stat Reset - *------------------------------------------*/ -int charcommand_streset(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - char tmp_cmdoutput[1024]; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%23[^\n]", player) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: @charstreset )."); - return -1; - } - - if ((pl_sd = map_nick2sd(player)) != NULL) { - if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can reset stats points only lower or same gm level - pc_resetstate(pl_sd); - sprintf(tmp_cmdoutput, msg_txt(207), player); // '%s' stats points reset. - clif_displaymessage(fd, tmp_cmdoutput); - } else { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - } else { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * Character Model by chbrules - *------------------------------------------*/ -int charcommand_model(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int hair_style = 0, hair_color = 0, cloth_color = 0; - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - char tmp_cmdoutput[1024]; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %d %d %23[^\n]", &hair_style, &hair_color, &cloth_color, player) < 4 || hair_style < 0 || hair_color < 0 || cloth_color < 0) { - sprintf(tmp_cmdoutput, "Please, enter a valid model and a player name (usage: @charmodel ).", - MIN_HAIR_STYLE, MAX_HAIR_STYLE, MIN_HAIR_COLOR, MAX_HAIR_COLOR, MIN_CLOTH_COLOR, MAX_CLOTH_COLOR); - clif_displaymessage(fd, tmp_cmdoutput); - return -1; - } - - if ((pl_sd = map_nick2sd(player)) != NULL) { - if (hair_style >= MIN_HAIR_STYLE && hair_style <= MAX_HAIR_STYLE && - hair_color >= MIN_HAIR_COLOR && hair_color <= MAX_HAIR_COLOR && - cloth_color >= MIN_CLOTH_COLOR && cloth_color <= MAX_CLOTH_COLOR) { - pc_changelook(pl_sd, LOOK_HAIR, hair_style); - pc_changelook(pl_sd, LOOK_HAIR_COLOR, hair_color); - pc_changelook(pl_sd, LOOK_CLOTHES_COLOR, cloth_color); - clif_displaymessage(fd, msg_txt(36)); // Appearence changed. - } else { - clif_displaymessage(fd, msg_txt(37)); // An invalid number was specified. - return -1; - } - } else { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * Character Skill Point (Rewritten by [Yor]) - *------------------------------------------*/ -int charcommand_skpoint(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - int new_skill_point; - int point = 0; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &point, player) < 2 || point == 0) { - clif_displaymessage(fd, "Please, enter a number and a player name (usage: @charskpoint )."); - return -1; - } - - if ((pl_sd = map_nick2sd(player)) != NULL) { - if (point > 0 && pl_sd->status.skill_point > USHRT_MAX - point) - new_skill_point = USHRT_MAX; - else if (point < 0 && pl_sd->status.skill_point < -point) - new_skill_point = 0; - else - new_skill_point = pl_sd->status.skill_point + point; - if (new_skill_point != (int)pl_sd->status.skill_point) { - pl_sd->status.skill_point = new_skill_point; - clif_updatestatus(pl_sd, SP_SKILLPOINT); - clif_displaymessage(fd, msg_txt(209)); // Character's skill points changed. - } else { - if (point < 0) - clif_displaymessage(fd, msg_txt(41)); // Unable to decrease the number/value. - else - clif_displaymessage(fd, msg_txt(149)); // Unable to increase the number/value. - return -1; - } - } else { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * Character Status Point (rewritten by [Yor]) - *------------------------------------------*/ -int charcommand_stpoint(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - int new_status_point; - int point = 0; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &point, player) < 2 || point == 0) { - clif_displaymessage(fd, "Please, enter a number and a player name (usage: @charstpoint )."); - return -1; - } - - if ((pl_sd = map_nick2sd(player)) != NULL) { - if (point > 0 && pl_sd->status.status_point > USHRT_MAX - point) - new_status_point = USHRT_MAX; - else if (point < 0 && pl_sd->status.status_point < -point) - new_status_point = 0; - else - new_status_point = pl_sd->status.status_point + point; - if (new_status_point != (int)pl_sd->status.status_point) { - pl_sd->status.status_point = new_status_point; - clif_updatestatus(pl_sd, SP_STATUSPOINT); - clif_displaymessage(fd, msg_txt(210)); // Character's status points changed. - } else { - if (point < 0) - clif_displaymessage(fd, msg_txt(41)); // Unable to decrease the number/value. - else - clif_displaymessage(fd, msg_txt(149)); // Unable to increase the number/value. - return -1; - } - } else { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * charchangesex command (usage: charchangesex ) - *------------------------------------------*/ -int charcommand_changesex(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char player[NAME_LENGTH]; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%23[^\n]", player) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: @charchangesex )."); - return -1; - } - - if ((pl_sd = map_nick2sd(player)) == NULL) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - if (pc_isGM(sd) < pc_isGM(pl_sd)) { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - clif_displaymessage(fd, msg_table[88]); // Character name sent to char-server to ask it. - chrif_changesex(pl_sd); - return 0; -} - -/*========================================== - * Feel (SG save map) Reset - *------------------------------------------*/ -int charcommand_feelreset(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - char output[200]; - struct map_session_data *pl_sd; - - memset(character, '\0', sizeof(character)); - memset(output, '\0', sizeof(output)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #feelreset )."); - return -1; - } - - if ((pl_sd = map_nick2sd(character)) != NULL) { - if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can reset a character only for lower or same GM level - pc_resetfeel(pl_sd); - sprintf(output, msg_txt(267), character); // '%s' designated maps reset. - clif_displaymessage(fd, output); - } else { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - } else { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - return 0; -} - -/*========================================== - * #help - Char commands [Kayla] - *------------------------------------------*/ -int charcommand_help(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char buf[2048], w1[2048], w2[2048]; - int i, gm_level; - FILE* fp; - nullpo_retr(-1, sd); - - memset(buf, '\0', sizeof(buf)); - - if ((fp = fopen(charhelp_txt, "r")) != NULL) { - clif_displaymessage(fd, msg_txt(26)); /* Help commands: */ - gm_level = pc_isGM(sd); - while(fgets(buf, sizeof(buf), fp) != NULL) - { - if (buf[0] == '/' && buf[1] == '/') - continue; - for (i = 0; buf[i] != '\0'; i++) { - if (buf[i] == '\r' || buf[i] == '\n') { - buf[i] = '\0'; - break; - } - } - if (sscanf(buf, "%2047[^:]:%2047[^\n]", w1, w2) < 2) - clif_displaymessage(fd, buf); - else if (gm_level >= atoi(w1)) - clif_displaymessage(fd, w2); - } - fclose(fp); - } else { - clif_displaymessage(fd, msg_txt(27)); /* File help.txt not found. */ - return -1; - } - - return 0; -} - -/*========================================== - * Loads a character back to their save point [HiddenDragon] - *------------------------------------------*/ -int charcommand_load(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int m; - char character[NAME_LENGTH]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #load )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - m = map_mapindex2mapid(pl_sd->status.save_point.map); - if (m >= 0 && map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(pl_sd)) { - clif_displaymessage(fd, "Not authorized to warp to target map."); - return -1; - } - if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(pl_sd)) { - clif_displaymessage(fd, "Not authorized to warp from current map."); - return -1; - } - - pc_setpos(pl_sd, pl_sd->status.save_point.map, pl_sd->status.save_point.x, pl_sd->status.save_point.y, 0); - clif_displaymessage(pl_sd->fd, msg_txt(7)); // Warping to respawn point. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(7)); // Warping to respawn point. - - return 0; -} - -/*========================================== - * Changes the targets speed [HiddenDragon] - *------------------------------------------*/ -int charcommand_speed(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int speed; - char character[NAME_LENGTH]; - char output[200]; - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &speed, character) < 2) { - sprintf(output, "Please, enter proper values (usage: #speed <%d-%d> ).", MIN_WALK_SPEED, MAX_WALK_SPEED); - clif_displaymessage(fd, output); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - pl_sd->base_status.speed = cap_value(speed, MIN_WALK_SPEED, MAX_WALK_SPEED); - status_calc_bl(&pl_sd->bl, SCB_SPEED); - clif_displaymessage(pl_sd->fd, msg_txt(8)); // Speed changed. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(8)); // Speed changed. - return 0; -} - -/*========================================== - * Opens their storage [HiddenDragon] - *------------------------------------------*/ -int charcommand_storage(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #storage )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (pl_sd->npc_id || pl_sd->vender_id || pl_sd->state.trading || pl_sd->state.storage_flag) - return -1; - - if (storage_storageopen(pl_sd) == 1) - { //Already open. - clif_displaymessage(fd, "Players storage already open."); - return -1; - } - - clif_displaymessage(pl_sd->fd, "Storage opened."); - if (pl_sd->fd != fd) - clif_displaymessage(fd, "Player's storage opened."); - - return 0; -} - - -/*========================================== - * Opens their guild storage - *------------------------------------------*/ -int charcommand_guildstorage(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #gstorage )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (pl_sd->npc_id || pl_sd->vender_id || pl_sd->state.trading) - return -1; - - if (pl_sd->status.guild_id == 0) { - clif_displaymessage(fd, "Target player is not in a guild."); - return -1; - } - - if (pl_sd->state.storage_flag) { - clif_displaymessage(fd, "Guild storage is currently in use."); - return -1; - } - - storage_guild_storageopen(pl_sd); - - clif_displaymessage(pl_sd->fd, "Guild storage opened."); - if (pl_sd->fd != fd) - clif_displaymessage(fd, "Player's guild storage opened."); - - return 0; -} - -/*========================================== - * Applies GM Hide to a character [HiddenDragon] - *------------------------------------------*/ -int charcommand_hide(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #hide )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (pl_sd->sc.option & OPTION_INVISIBLE) { - pl_sd->sc.option &= ~OPTION_INVISIBLE; - if (pl_sd->disguise) - status_set_viewdata(&pl_sd->bl, pl_sd->disguise); - else - status_set_viewdata(&pl_sd->bl, pl_sd->status.class_); - clif_changeoption(&pl_sd->bl); - clif_displaymessage(pl_sd->fd, msg_txt(10)); // Invisible: Off - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(10)); // Invisible: Off - } else { - pl_sd->sc.option |= OPTION_INVISIBLE; - pl_sd->vd.class_ = INVISIBLE_CLASS; - clif_changeoption(&pl_sd->bl); - clif_displaymessage(pl_sd->fd, msg_txt(11)); // Invisible: On - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(11)); // Invisible: On - } - - return 0; -} - -/*========================================== - * Resurrects a dead character [HiddenDragon] - *------------------------------------------*/ -int charcommand_alive(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #alive )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (!status_revive(&pl_sd->bl, 100, 100)) - { - clif_displaymessage(fd, "Target player is not dead."); - return -1; - } - clif_skill_nodamage(&pl_sd->bl,&pl_sd->bl,ALL_RESURRECTION,4,1); - clif_displaymessage(pl_sd->fd, msg_txt(16)); // You've been revived! It's a miracle! - return 0; -} - -/*========================================== - * Heals someone's HP and SP [HiddenDragon] - *------------------------------------------*/ -int charcommand_heal(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int hp = 0, sp = 0; // [Valaris] thanks to fov - char character[NAME_LENGTH]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%d %d %23[^\n]", &hp, &sp, character) < 3) { - clif_displaymessage(fd, "Please, enter proper values (usage: #heal )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - // some overflow checks - if( hp == INT_MIN ) hp++; - if( sp == INT_MIN ) sp++; - - if ( hp == 0 && sp == 0 ) { - if (!status_percent_heal(&pl_sd->bl, 100, 100)) - clif_displaymessage(fd, msg_txt(157)); // HP and SP are already with the good value. - else - { - clif_displaymessage(pl_sd->fd, msg_txt(17)); // HP, SP recovered. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(17)); // HP, SP recovered. - } - return 0; - } - - if(hp > 0 && sp >= 0) { - if( !status_heal(&pl_sd->bl, hp, sp, 2) ) - clif_displaymessage(fd, msg_txt(157)); // HP and SP are already with the good value. - else - { - clif_displaymessage(pl_sd->fd, msg_txt(17)); // HP, SP recovered. - if ( pl_sd->fd != fd ) - clif_displaymessage(fd, msg_txt(17)); // HP, SP recovered. - } - return 0; - } - - if( hp < 0 && sp <= 0 ) { - status_damage(NULL, &pl_sd->bl, -hp, -sp, 0, 0); - clif_damage(&pl_sd->bl,&pl_sd->bl, gettick(), 0, 0, -hp, 0 , 4, 0); - clif_displaymessage(pl_sd->fd, msg_txt(156)); // HP or/and SP modified. - if ( pl_sd->fd != fd ) - clif_displaymessage(fd, msg_txt(156)); // HP or/and SP modified. - return 0; - } - - //Opposing signs. - if ( hp ) { - if ( hp > 0 ) - status_heal(&pl_sd->bl, hp, 0, 2); - else { - status_damage(NULL, &pl_sd->bl, -hp, 0, 0, 0); - clif_damage(&pl_sd->bl,&pl_sd->bl, gettick(), 0, 0, -hp, 0 , 4, 0); - } - } - - if ( sp ) { - if ( sp > 0 ) - status_heal(&pl_sd->bl, 0, sp, 2); - else - status_damage(NULL, &pl_sd->bl, 0, -sp, 0, 0); - } - - clif_displaymessage(pl_sd->fd, msg_txt(156)); // HP or/and SP modified. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(156)); // HP or/and SP modified. - return 0; -} - -/*========================================== - * Creates items as specified [HiddenDragon] - *------------------------------------------*/ -int charcommand_item2(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct item item_tmp; - struct item_data *item_data; - char item_name[100]; - int item_id, number = 0; - int identify = 0, refine = 0, attr = 0; - int c1 = 0, c2 = 0, c3 = 0, c4 = 0; - int flag; - int loop, get_count, i; - char character[NAME_LENGTH]; - - struct map_session_data *pl_sd; - - if (!message || !*message || ( - sscanf(message, "\"%99[^\"]\" %d %d %d %d %d %d %d %d %23[^\n]", item_name, &number, &identify, &refine, &attr, &c1, &c2, &c3, &c4, character) < 10 && - sscanf(message, "%99s %d %d %d %d %d %d %d %d %23[^\n]", item_name, &number, &identify, &refine, &attr, &c1, &c2, &c3, &c4, character) < 10 - )) { - clif_displaymessage(fd, "Please, enter all informations (usage: @item2 "); - clif_displaymessage(fd, " )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - if (number <= 0) - number = 1; - - item_id = 0; - if ((item_data = itemdb_searchname(item_name)) != NULL || - (item_data = itemdb_exists(atoi(item_name))) != NULL) - item_id = item_data->nameid; - - if (item_id > 500) { - loop = 1; - get_count = number; - if (item_data->type == 4 || item_data->type == 5 || - item_data->type == 7 || item_data->type == 8) { - loop = number; - get_count = 1; - if (item_data->type == 7) { - identify = 1; - refine = 0; - } - if (item_data->type == 8) - refine = 0; - if (refine > 10) - refine = 10; - } else { - identify = 1; - refine = attr = 0; - } - for (i = 0; i < loop; i++) { - memset(&item_tmp, 0, sizeof(item_tmp)); - item_tmp.nameid = item_id; - item_tmp.identify = identify; - item_tmp.refine = refine; - item_tmp.attribute = attr; - item_tmp.card[0] = c1; - item_tmp.card[1] = c2; - item_tmp.card[2] = c3; - item_tmp.card[3] = c4; - if ((flag = pc_additem(pl_sd, &item_tmp, get_count))) - clif_additem(pl_sd, 0, 0, flag); - } - - //Logs (A)dmins items [Lupus] - if(log_config.enable_logs&0x400) - log_pick_pc(pl_sd, "A", item_tmp.nameid, number, &item_tmp); - - clif_displaymessage(pl_sd->fd, msg_txt(18)); // Item created. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(18)); // Item created. - } else { - clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name. - return -1; - } - - return 0; -} - -/*========================================== - * Reset a character's items [HiddenDragon] - *------------------------------------------*/ -int charcommand_itemreset(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int i, count = 0; - char character[NAME_LENGTH]; - char output[200]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #itemreset )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - for (i = 0; i < MAX_INVENTORY; i++) { - if (pl_sd->status.inventory[i].amount && pl_sd->status.inventory[i].equip == 0) { - - //Logs (A)dmins items [Lupus] - if(log_config.enable_logs&0x400) - log_pick_pc(pl_sd, "A", pl_sd->status.inventory[i].nameid, -pl_sd->status.inventory[i].amount, &pl_sd->status.inventory[i]); - - pc_delitem(pl_sd, i, pl_sd->status.inventory[i].amount, 0); - count++; - } - } - - sprintf(output, msg_txt(114), count); - if (pl_sd->fd != fd) - clif_displaymessage(pl_sd->fd, output); // %d item(s) removed from the player. - clif_displaymessage(fd, msg_txt(20)); // All of your items have been removed. - - return 0; -} - -/*========================================== - * Refine their items [HiddenDragon] - *------------------------------------------*/ -int charcommand_refine(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int i,j, position = 0, refine = 0, current_position, final_refine; - int count; - char character[NAME_LENGTH]; - char output[200]; - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%d %d %23[^\n]", &position, &refine, character) < 3) { - clif_displaymessage(fd, "Please, enter a position and a amount (usage: #refine <+/- amount> )."); - sprintf(output, "%d: Left Accessory", EQI_ACC_L); - clif_displaymessage(fd, output); - sprintf(output, "%d: Right Accessory", EQI_ACC_R); - clif_displaymessage(fd, output); - sprintf(output, "%d: Shoes", EQI_SHOES); - clif_displaymessage(fd, output); - sprintf(output, "%d: Garment", EQI_GARMENT); - clif_displaymessage(fd, output); - sprintf(output, "%d: Lower Headgear", EQI_HEAD_LOW); - clif_displaymessage(fd, output); - sprintf(output, "%d: Mid Headgear", EQI_HEAD_MID); - clif_displaymessage(fd, output); - sprintf(output, "%d: Top Headgear", EQI_HEAD_TOP); - clif_displaymessage(fd, output); - sprintf(output, "%d: Body Armor", EQI_ARMOR); - clif_displaymessage(fd, output); - sprintf(output, "%d: Left Hand", EQI_HAND_L); - clif_displaymessage(fd, output); - sprintf(output, "%d: Right Hand", EQI_HAND_R); - clif_displaymessage(fd, output); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (refine < -MAX_REFINE) - refine = -MAX_REFINE; - else if (refine > MAX_REFINE) - refine = MAX_REFINE; - else if (refine == 0) - refine = 1; - - count = 0; - for (j = 0; j < EQI_MAX-1; j++) { - if ((i = pl_sd->equip_index[j]) < 0) - continue; - if(j == EQI_HAND_R && pl_sd->equip_index[EQI_HAND_L] == i) - continue; - if(j == EQI_HEAD_MID && pl_sd->equip_index[EQI_HEAD_LOW] == i) - continue; - if(j == EQI_HEAD_TOP && (pl_sd->equip_index[EQI_HEAD_MID] == i || pl_sd->equip_index[EQI_HEAD_LOW] == i)) - continue; - - if(position && !(pl_sd->status.inventory[i].equip & position)) - continue; - - final_refine = pl_sd->status.inventory[i].refine + refine; - if (final_refine > MAX_REFINE) - final_refine = MAX_REFINE; - else if (final_refine < 0) - final_refine = 0; - if (pl_sd->status.inventory[i].refine != final_refine) { - pl_sd->status.inventory[i].refine = final_refine; - current_position = pl_sd->status.inventory[i].equip; - pc_unequipitem(pl_sd, i, 3); - clif_refine(fd, 0, i, pl_sd->status.inventory[i].refine); - clif_delitem(pl_sd, i, 1); - clif_additem(pl_sd, i, 1, 0); - pc_equipitem(pl_sd, i, current_position); - clif_misceffect(&pl_sd->bl, 3); - count++; - } - } - - if (count == 0) - clif_displaymessage(fd, msg_txt(166)); // No item has been refined! - else if (count == 1) - { - clif_displaymessage(pl_sd->fd, msg_txt(167)); // 1 item has been refined! - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(167)); // 1 item has been refined! - } - else { - sprintf(output, msg_txt(168), count); // %d items have been refined! - clif_displaymessage(pl_sd->fd, output); - if (pl_sd->fd != fd) - clif_displaymessage(fd, output); - } - - return 0; -} - -/*========================================== - * Produce a manufactured item in their inventory [HiddenDragon] - *------------------------------------------*/ -int charcommand_produce(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char item_name[100]; - int item_id, attribute = 0, star = 0; - int flag = 0; - struct item_data *item_data; - struct item tmp_item; - char character[NAME_LENGTH]; - char output[200]; - - struct map_session_data *pl_sd; - - nullpo_retr(-1, sd); - - if (!message || !*message || ( - sscanf(message, "\"%99[^\"]\" %d %d %23[^\n]", item_name, &attribute, &star, character) < 4 && - sscanf(message, "%99s %d %d %23[^\n]", item_name, &attribute, &star, character) < 4 - )) { - clif_displaymessage(fd, "Please, enter at least an item name/id (usage: #produce <# of very's> )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - item_id = 0; - if ((item_data = itemdb_searchname(item_name)) == NULL && - (item_data = itemdb_exists(atoi(item_name))) == NULL) - { - sprintf(output, msg_txt(170)); // This item is not an equipment. - clif_displaymessage(fd, output); - return -1; - } - item_id = item_data->nameid; - if (itemdb_isequip2(item_data)) { - if (attribute < MIN_ATTRIBUTE || attribute > MAX_ATTRIBUTE) - attribute = ATTRIBUTE_NORMAL; - if (star < MIN_STAR || star > MAX_STAR) - star = 0; - memset(&tmp_item, 0, sizeof tmp_item); - tmp_item.nameid = item_id; - tmp_item.amount = 1; - tmp_item.identify = 1; - tmp_item.card[0] = CARD0_FORGE; - tmp_item.card[1] = item_data->type==IT_WEAPON? - ((star*5) << 8) + attribute:0; - tmp_item.card[2] = GetWord(pl_sd->status.char_id, 0); - tmp_item.card[3] = GetWord(pl_sd->status.char_id, 1); - clif_produceeffect(pl_sd, 0, item_id); - clif_misceffect(&pl_sd->bl, 3); - - //Logs (A)dmins items [Lupus] - if(log_config.enable_logs&0x400) - log_pick_pc(pl_sd, "A", tmp_item.nameid, 1, &tmp_item); - - if ((flag = pc_additem(pl_sd, &tmp_item, 1))) - { - clif_additem(pl_sd, 0, 0, flag); - clif_displaymessage(fd, msg_txt(18)); - } - } else { - sprintf(output, msg_txt(169), item_id, item_data->name); // This item (%d: '%s') is not an equipment. - clif_displaymessage(fd, output); - return -1; - } - - return 0; -} - -/*========================================== - * Changes a character's stats [HiddenDragon - *------------------------------------------*/ -int charcommand_param(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int index, value = 0, new_value; - char character[NAME_LENGTH]; - char output[200]; - struct map_session_data *pl_sd; - const char* param[] = { "#str", "#agi", "#vit", "#int", "#dex", "#luk", NULL }; - short* status[6]; - - - if (!message || !*message || sscanf(message, "%d %s", &value, character) < 2 || value == 0) { - sprintf(output, "Please, enter a valid value (usage: #str,#agi,#vit,#int,#dex,#luk <+/-adjustment> )."); - clif_displaymessage(fd, output); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - status[0] = &pl_sd->status.str; - status[1] = &pl_sd->status.agi; - status[2] = &pl_sd->status.vit; - status[3] = &pl_sd->status.int_; - status[4] = &pl_sd->status.dex; - status[5] = &pl_sd->status.luk; - - index = -1; - for (index = 0; index < ARRAYLENGTH(param); index++) { - if (strcmpi(command, param[index]) == 0) - break; - } - if (index == ARRAYLENGTH(param) || index > MAX_STATUS_TYPE) { - // normaly impossible... - sprintf(output, "Please, enter a valid value (usage: #str,#agi,#vit,#int,#dex,#luk <+/-adjustment> )."); - clif_displaymessage(fd, output); - return -1; - } - - if (value > 0 && *status[index] > 999 - value) - new_value = 999; - else if (value < 0 && *status[index] <= -value) - new_value = 1; - else - new_value = *status[index] + value; - - if (new_value != (int)*status[index]) { - *status[index] = new_value; - clif_updatestatus(pl_sd, SP_STR + index); - clif_updatestatus(pl_sd, SP_USTR + index); - status_calc_pc(pl_sd, 0); - clif_displaymessage(pl_sd->fd, msg_txt(42)); // Stat changed. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(42)); // Stat changed. - } else { - if (value < 0) - clif_displaymessage(fd, msg_txt(41)); // Unable to decrease the number/value. - else - clif_displaymessage(fd, msg_txt(149)); // Unable to increase the number/value. - return -1; - } - - return 0; -} - -/*========================================== - * Levels up a character's guild [HiddenDragon] - *------------------------------------------*/ -int charcommand_guildlevelup(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int level = 0; - short added_level; - struct guild *guild_info; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %s", &level, character) < 2 || level == 0) { - clif_displaymessage(fd, "Please, enter a valid level and player (usage: #guildlvup/@guildlvlup <# of levels> )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (pl_sd->status.guild_id <= 0 || (guild_info = guild_search(pl_sd->status.guild_id)) == NULL) { - clif_displaymessage(fd, "Target player is not in a guild"); // You're not in a guild. - return -1; - } - //if (strcmp(sd->status.name, guild_info->master) != 0) { - // clif_displaymessage(fd, msg_txt(44)); // You're not the master of your guild. - // return -1; - //} - - added_level = (short)level; - if (level > 0 && (level > MAX_GUILDLEVEL || added_level > ((short)MAX_GUILDLEVEL - guild_info->guild_lv))) // fix positiv overflow - added_level = (short)MAX_GUILDLEVEL - guild_info->guild_lv; - else if (level < 0 && (level < -MAX_GUILDLEVEL || added_level < (1 - guild_info->guild_lv))) // fix negativ overflow - added_level = 1 - guild_info->guild_lv; - - if (added_level != 0) { - intif_guild_change_basicinfo(guild_info->guild_id, GBI_GUILDLV, &added_level, 2); - clif_displaymessage(pl_sd->fd, msg_txt(179)); // Guild level changed. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(179)); - } else { - clif_displaymessage(fd, msg_txt(45)); // Guild level change failed. - return -1; - } - - return 0; -} - -/*========================================== - * Opens a hatch window for them [HiddenDragon] - *------------------------------------------*/ -int charcommand_hatch(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #hatch )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (pl_sd->status.pet_id <= 0) - clif_sendegg(sd); - else { - clif_displaymessage(fd, "Target player already has a pet"); // You already have a pet. - return -1; - } - - return 0; -} - -/*========================================== - * Change target pet's hunger [HiddenDragon] - *------------------------------------------*/ -int charcommand_pethungry(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int hungry; - struct pet_data *pd; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &hungry, character) < 2) { - clif_displaymessage(fd, "Please, enter a valid number and player (usage: #pethungry <0-100> )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - pd = pl_sd->pd; - if (!pl_sd->status.pet_id || !pd) { - clif_displaymessage(fd, "Target has no pet"); // Sorry, but you have no pet. - return -1; - } - if (hungry < 0 || hungry > 100) { - clif_displaymessage(fd, msg_txt(37)); // An invalid number was specified. - return -1; - } - if (hungry == pd->pet.hungry) { - clif_displaymessage(fd, msg_txt(186)); // Pet hungry is already the good value. - return -1; - } - - pd->pet.hungry = hungry; - clif_send_petstatus(pl_sd); - clif_displaymessage(pl_sd->fd, msg_txt(185)); // Pet hungry value changed! - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(185)); // Pet hungry value changed! - - return 0; -} - -/*========================================== - * Give all skills to target [HiddenDragon] - *------------------------------------------*/ -int charcommand_allskill(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #allskill )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - pc_allskillup(pl_sd); // all skills - pl_sd->status.skill_point = 0; // 0 skill points - clif_updatestatus(pl_sd, SP_SKILLPOINT); // update - clif_displaymessage(pl_sd->fd, msg_txt(76)); // You have received all skills. - if (pl_sd->fd != fd) - clif_displaymessage(fd, "Player has received all skills for his/her class."); - - return 0; -} - - -/*========================================== - * Change target's clothing color [HiddenDragon] - *------------------------------------------*/ -int charcommand_dye(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int cloth_color = 0; - char character[NAME_LENGTH]; - char output[200]; - - struct map_session_data *pl_sd; - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &cloth_color, character) < 2) { - sprintf(output, "Please, enter a clothes color (usage: #dye/@ccolor ).", MIN_CLOTH_COLOR, MAX_CLOTH_COLOR); - clif_displaymessage(fd,output); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (cloth_color >= MIN_CLOTH_COLOR && cloth_color <= MAX_CLOTH_COLOR) { - pc_changelook(pl_sd, LOOK_CLOTHES_COLOR, cloth_color); - clif_displaymessage(pl_sd->fd, msg_txt(36)); // Appearence changed. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(36)); // Appearence changed. - } else { - clif_displaymessage(fd, msg_txt(37)); // An invalid number was specified. - return -1; - } - - return 0; -} - -/*========================================== - * Change target's hair style [HiddenDragon] - *------------------------------------------*/ -int charcommand_hair_style(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int hair_style = 0; - char character[NAME_LENGTH]; - char output[200]; - struct map_session_data *pl_sd; - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &hair_style, character) < 2) { - sprintf(output, "Please, enter a hair style (usage: #hairstyle/#hstyle .", MIN_HAIR_STYLE, MAX_HAIR_STYLE); - clif_displaymessage(fd, output); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (hair_style >= MIN_HAIR_STYLE && hair_style <= MAX_HAIR_STYLE) { - pc_changelook(pl_sd, LOOK_HAIR, hair_style); - clif_displaymessage(pl_sd->fd, msg_txt(36)); // Appearence changed. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(36)); // Appearence changed. - } else { - clif_displaymessage(fd, msg_txt(37)); // An invalid number was specified. - return -1; - } - - return 0; -} - -/*========================================== - * Change target's hair color [HiddenDragon] - *------------------------------------------*/ -int charcommand_hair_color(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int hair_color = 0; - char character[NAME_LENGTH]; - char output[200]; - struct map_session_data *pl_sd; - nullpo_retr(-1, sd); - - memset(output, '\0', sizeof(output)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &hair_color, character) < 2) { - sprintf(output, "Please, enter a hair color (usage: #haircolor/#hcolor ).", MIN_HAIR_COLOR, MAX_HAIR_COLOR); - clif_displaymessage(fd, output); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (hair_color >= MIN_HAIR_COLOR && hair_color <= MAX_HAIR_COLOR) { - pc_changelook(pl_sd, LOOK_HAIR_COLOR, hair_color); - clif_displaymessage(pl_sd->fd, msg_txt(36)); // Appearence changed. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(36)); // Appearence changed. - } else { - clif_displaymessage(fd, msg_txt(37)); // An invalid number was specified. - return -1; - } - - return 0; -} - -/*========================================== - * Change all target's stats [HiddenDragon] - *------------------------------------------*/ -int charcommand_allstats(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int index, count, value = 0, max, new_value; - short* status[6]; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - - //we don't use direct initialization because it isn't part of the c standard. - nullpo_retr(-1, sd); - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #statall/#statsall/#allstat/#allstats )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - status[0] = &pl_sd->status.str; - status[1] = &pl_sd->status.agi; - status[2] = &pl_sd->status.vit; - status[3] = &pl_sd->status.int_; - status[4] = &pl_sd->status.dex; - status[5] = &pl_sd->status.luk; - - count = 0; - max = pc_maxparameter(pl_sd); - for (index = 0; index < ARRAYLENGTH(status); index++) { - - if (value > 0 && *status[index] > max - value) - new_value = max; - else if (value < 0 && *status[index] <= -value) - new_value = 1; - else - new_value = *status[index] +value; - - if (new_value != (int)*status[index]) { - *status[index] = new_value; - clif_updatestatus(pl_sd, SP_STR + index); - clif_updatestatus(pl_sd, SP_USTR + index); - status_calc_pc(pl_sd, 0); - count++; - } - } - - if (count > 0) // if at least 1 stat modified - { - clif_displaymessage(pl_sd->fd, msg_txt(84)); // All stats changed! - if (fd != pl_sd->fd) - clif_displaymessage(fd, "Player's stats changed"); // All stats changed! - } - else { - if (value < 0) - clif_displaymessage(fd, msg_txt(177)); // Impossible to decrease a stat. - else - clif_displaymessage(fd, msg_txt(178)); // Impossible to increase a stat. - return -1; - } - - return 0; -} - -/*========================================== - * Gives/Removes a peco from a player [HiddenDragon] - *------------------------------------------*/ -int charcommand_mount_peco(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char character[NAME_LENGTH]; - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #mount/#mountpeco )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (!pc_isriding(pl_sd)) - { // if actually no peco - if (!pc_checkskill(pl_sd, KN_RIDING)) - { - clif_displaymessage(fd, msg_txt(217)); // This player cannot mount a Peco Peco with his/her current job. - return -1; - } - - if (pl_sd->disguise) - { - clif_displaymessage(fd, msg_txt(215)); // This player cannot mount a Peco Peco while in disguise. - return -1; - } - - pc_setoption(pl_sd, pl_sd->sc.option | OPTION_RIDING); - if (pl_sd->fd != fd) - clif_displaymessage(fd, "Player mounted a peco."); - clif_displaymessage(pl_sd->fd, msg_txt(216)); // This player has mounted a Peco Peco. - } - else - { //Dismount - pc_setoption(pl_sd, pl_sd->sc.option & ~OPTION_RIDING); - clif_displaymessage(pl_sd->fd, msg_txt(218)); // This player's Peco Peco has been released. - if (pl_sd->fd != fd) - clif_displaymessage(fd, "Player unmounted a peco."); - } - - return 0; -} - -/*========================================== - * Remove items from a player (now a char command) [HiddenDragon] - *------------------------------------------*/ -int charcommand_delitem(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - char item_name[100]; - int i, number = 0, item_id, item_position, count; - struct item_data *item_data; - char character[NAME_LENGTH]; - char output[200]; - - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - memset(item_name, '\0', sizeof(item_name)); - memset(output, '\0', sizeof(output)); - - if (!message || !*message || ( - sscanf(message, "\"%99[^\"]\" %d %23[^\n]", item_name, &number, character) < 3 && - sscanf(message, "%s %d %23[^\n]", item_name, &number, character) < 3 - ) || number < 1) { - clif_displaymessage(fd, "Please, enter an item name/id, a quantity and a player name (usage: #delitem )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - item_id = 0; - if ((item_data = itemdb_searchname(item_name)) != NULL || - (item_data = itemdb_exists(atoi(item_name))) != NULL) - item_id = item_data->nameid; - - if (item_id > 500) { - item_position = pc_search_inventory(pl_sd, item_id); - if (item_position >= 0) { - count = 0; - for(i = 0; i < number && item_position >= 0; i++) { - - //Logs (A)dmins items [Lupus] - if(log_config.enable_logs&0x400) - log_pick_pc(pl_sd, "A", pl_sd->status.inventory[item_position].nameid, -1, &pl_sd->status.inventory[item_position]); - - pc_delitem(pl_sd, item_position, 1, 0); - count++; - item_position = pc_search_inventory(pl_sd, item_id); // for next loop - } - sprintf(output, msg_txt(113), count); // %d item(s) removed by a GM. - clif_displaymessage(pl_sd->fd, output); - if (number == count) - sprintf(output, msg_txt(114), count); // %d item(s) removed from the player. - else - sprintf(output, msg_txt(115), count, count, number); // %d item(s) removed. Player had only %d on %d items. - clif_displaymessage(fd, output); - } else { - clif_displaymessage(fd, msg_txt(116)); // Character does not have the specified item. - return -1; - } - } - else - { - clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name. - return -1; - } - - return 0; -} - -//Added by Coltaro -//We're using this function here instead of using time_t so that it only counts player's jail time when he/she's online (and since the idea is to reduce the amount of minutes one by one in status_change_timer...). -//Well, using time_t could still work but for some reason that looks like more coding x_x -static void get_jail_time(int jailtime, int* year, int* month, int* day, int* hour, int* minute) { - const int factor_year = 518400; //12*30*24*60 = 518400 - const int factor_month = 43200; //30*24*60 = 43200 - const int factor_day = 1440; //24*60 = 1440 - const int factor_hour = 60; - - *year = jailtime/factor_year; - jailtime -= *year*factor_year; - *month = jailtime/factor_month; - jailtime -= *month*factor_month; - *day = jailtime/factor_day; - jailtime -= *day*factor_day; - *hour = jailtime/factor_hour; - jailtime -= *hour*factor_hour; - *minute = jailtime; - - *year = *year > 0? *year : 0; - *month = *month > 0? *month : 0; - *day = *day > 0? *day : 0; - *hour = *hour > 0? *hour : 0; - *minute = *minute > 0? *minute : 0; - return; -} - -/*========================================== - * Jail a player for a certain amount of time [Coltaro] - *------------------------------------------*/ -int charcommand_jailtime(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data* pl_sd; - int year, month, day, hour, minute; - char character[NAME_LENGTH]; - char output[200]; - memset(character, '\0', sizeof(character)); - - nullpo_retr(-1, sd); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #jailtime )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (!pl_sd->sc.data[SC_JAILED]) { - clif_displaymessage(fd, "This player is not in jail."); - return -1; - } - - if (pl_sd->sc.data[SC_JAILED]->val1 == INT_MAX) { - clif_displaymessage(fd, "This player has been jailed indefinitely."); - return 0; - } - - if (pl_sd->sc.data[SC_JAILED]->val1 <= 0) { // Was not jailed with @jailfor (maybe @jail? or warped there? or got recalled?) - clif_displaymessage(fd, "This player has been jailed for an unknown amount of time."); - return -1; - } - //Get remaining jail time - get_jail_time(pl_sd->sc.data[SC_JAILED]->val1,&year,&month,&day,&hour,&minute); - sprintf(output,msg_txt(402),"This player will remain",year,month,day,hour,minute); - clif_displaymessage(fd, output); - - return 0; -} - -/*========================================== - * Disguises a player [HiddenDragon] - *------------------------------------------*/ -int charcommand_disguise(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int mob_id; - char mob_name[NAME_LENGTH]; - struct map_session_data* pl_sd; - char character[NAME_LENGTH]; - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - memset(mob_name, '\0', sizeof(mob_name)); - - if (!message || !*message || sscanf(message, "%s %23[^\n]", mob_name, character) < 2) { - clif_displaymessage(fd, "Please, enter a Monster/NPC name/id and a player name (usage: #disguise )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if ((mob_id = atoi(mob_name)) > 0) - { //Acquired an ID - if (!mobdb_checkid(mob_id) && !npcdb_checkid(mob_id)) - mob_id = 0; //Invalid id for either mobs or npcs. - } else { //Acquired a Name - if ((mob_id = mobdb_searchname(mob_name)) == 0) - { - struct npc_data* nd = npc_name2id(mob_name); - if (nd != NULL) - mob_id = nd->class_; - } - } - - if (mob_id == 0) - { - clif_displaymessage(fd, msg_txt(123)); // Monster/NPC name/id hasn't been found. - return -1; - } - - if(pc_isriding(pl_sd)) - { - //FIXME: wrong message [ultramage] - //clif_displaymessage(fd, msg_txt(228)); // Character cannot wear disguise while riding a PecoPeco. - return -1; - } - - pc_disguise(pl_sd, mob_id); - clif_displaymessage(pl_sd->fd, msg_txt(122)); // Disguise applied. - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(140)); // Character's disguise applied. - - - return 0; -} - -/*========================================== - * Undisguises a player [HiddenDragon] - *------------------------------------------*/ -int charcommand_undisguise(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - struct map_session_data* pl_sd; - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #undisguise )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (pl_sd->disguise) - { - pc_disguise(pl_sd, 0); - clif_displaymessage(pl_sd->fd, msg_txt(124)); // Disguise removed from character - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(141)); // Undisguise applied - } - else { - clif_displaymessage(fd, msg_txt(142)); // Character is not disguised. - return -1; - } - - return 0; -} - -/*========================================== - * Displays contents of target's cart [HiddenDragon] - *------------------------------------------*/ -int charcommand_cart_list(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char outputtmp[200]; - char output[200]; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - struct item_data *item_data, *item_temp; - int i, j, count = 0, counter = 0, counter2; - nullpo_retr(-1, sd); - - memset(character, '\0', sizeof(character)); - memset(output, '\0', sizeof(output)); - memset(outputtmp, '\0', sizeof(outputtmp)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #cartlist )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - for (i = 0; i < MAX_CART; i++) { - if (pl_sd->status.cart[i].nameid > 0 && (item_data = itemdb_search(pl_sd->status.cart[i].nameid)) != NULL) { - counter = counter + pl_sd->status.cart[i].amount; - count++; - if (count == 1) { - sprintf(output, "------ Cart items list of '%s' ------", pl_sd->status.name); - clif_displaymessage(fd, output); - } - if (pl_sd->status.cart[i].refine) - sprintf(output, "%d %s %+d (%s %+d, id: %d)", pl_sd->status.cart[i].amount, item_data->name, pl_sd->status.cart[i].refine, item_data->jname, pl_sd->status.cart[i].refine, pl_sd->status.cart[i].nameid); - else - sprintf(output, "%d %s (%s, id: %d)", pl_sd->status.cart[i].amount, item_data->name, item_data->jname, pl_sd->status.cart[i].nameid); - clif_displaymessage(fd, output); - memset(output, '\0', sizeof(output)); - counter2 = 0; - for (j = 0; j < item_data->slot; j++) { - if (pl_sd->status.cart[i].card[j]) { - if ( (item_temp = itemdb_search(pl_sd->status.cart[i].card[j])) != NULL) { - if (output[0] == '\0') - sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); - else - sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); - strcat(output, outputtmp); - } - } - } - if (output[0] != '\0') { - output[strlen(output) - 2] = ')'; - output[strlen(output) - 1] = '\0'; - clif_displaymessage(fd, output); - } - } - } - if (count == 0) - clif_displaymessage(fd, "No item found in the cart of this player."); - else { - sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count); - clif_displaymessage(fd, output); - } - - return 0; -} - -static int charcommand_stopattack(struct block_list *bl,va_list ap) -{ - struct unit_data *ud = unit_bl2ud(bl); - int id = va_arg(ap, int); - if (ud && ud->attacktimer != INVALID_TIMER && (!id || id == ud->target)) - { - unit_stop_attack(bl); - return 1; - } - return 0; -} - -/*========================================== - * Enable a player to kill players even when not in pvp [HiddenDragon] - *------------------------------------------*/ -int charcommand_killer(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #killer )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - pl_sd->state.killer = !pl_sd->state.killer; - - if(pl_sd->state.killer) - { - clif_displaymessage(pl_sd->fd, msg_txt(241)); - if (pl_sd->fd != fd) - clif_displaymessage(fd, "Target player can now kill anybody."); - } - else - { - clif_displaymessage(pl_sd->fd, msg_txt(287)); - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(287)); - pc_stop_attack(pl_sd); - } - - return 0; -} - -/*========================================== - * Enable other players to kill target even when not in pvp [HiddenDragon] - *------------------------------------------*/ -int charcommand_killable(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #killable )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - pl_sd->state.killable = !pl_sd->state.killable; - - if(pl_sd->state.killable) - { - clif_displaymessage(pl_sd->fd, msg_txt(242)); - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(289)); - } - else - { - clif_displaymessage(pl_sd->fd, msg_txt(288)); - if (pl_sd->fd != fd) - clif_displaymessage(fd, msg_txt(290)); - map_foreachinrange(charcommand_stopattack,&pl_sd->bl, AREA_SIZE, BL_CHAR, pl_sd->bl.id); - } - - return 0; -} - -/*========================================== - * Drop all of the target's possessions on the ground - *------------------------------------------*/ -int charcommand_dropall(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int i; - struct map_session_data *pl_sd = NULL; - nullpo_retr(-1, sd); - - if (!message || !*message) - return -1; - if((pl_sd=map_nick2sd((char *) message)) == NULL) - return -1; - for (i = 0; i < MAX_INVENTORY; i++) { - if (pl_sd->status.inventory[i].amount) { - if(pl_sd->status.inventory[i].equip != 0) - pc_unequipitem(pl_sd, i, 3); - pc_dropitem(pl_sd, i, pl_sd->status.inventory[i].amount); - } - } - - clif_displaymessage(pl_sd->fd, "All items dropped"); - clif_displaymessage(fd, "It is done"); - - return 0; -} - -/*========================================== - * Put all of the target's possessions into storage - *------------------------------------------*/ -int charcommand_storeall(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int i; - struct map_session_data *pl_sd = NULL; - nullpo_retr(-1, sd); - - if (!message || !*message) - return -1; - if((pl_sd=map_nick2sd((char *) message)) == NULL) - return -1; - - if (pl_sd->state.storage_flag != 1) - { //Open storage. - if( storage_storageopen(pl_sd) == 1 ) { - clif_displaymessage(fd, "The character currently can't use the storage."); - return 1; - } - } - - for (i = 0; i < MAX_INVENTORY; i++) { - if (pl_sd->status.inventory[i].amount) { - if(pl_sd->status.inventory[i].equip != 0) - pc_unequipitem(pl_sd, i, 3); - storage_storageadd(pl_sd, i, sd->status.inventory[i].amount); - } - } - storage_storageclose(pl_sd); - - clif_displaymessage(pl_sd->fd, "Everything you own has been put away for safe keeping."); - clif_displaymessage(pl_sd->fd, "go to the nearest kafka to retrieve it.."); - clif_displaymessage(pl_sd->fd, " -- the management"); - - clif_displaymessage(fd, "It is done"); - - return 0; -} - -/*========================================== - * Refreshes target [HiddenDragon] - *------------------------------------------*/ -int charcommand_refresh(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #refresh )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - clif_refresh(pl_sd); - return 0; -} - - -/*========================================== - * View target's exp [HiddenDragon] - *------------------------------------------*/ -int charcommand_exp(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char output[200]; - double nextb, nextj; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - - memset(character, '\0', sizeof(character)); - memset(output, '\0', sizeof(output)); - - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #exp )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - nextb = pc_nextbaseexp(pl_sd); - if (nextb) - nextb = pl_sd->status.base_exp*100.0/nextb; - - nextj = pc_nextjobexp(pl_sd); - if (nextj) - nextj = pl_sd->status.job_exp*100.0/nextj; - - sprintf(output, "Base Level: %d (%.3f%%) | Job Level: %d (%.3f%%)", pl_sd->status.base_level, nextb, pl_sd->status.job_level, nextj); - clif_displaymessage(fd, output); - return 0; -} - -/*========================================== - * Makes monsters ignore target [HiddenDragon] - *------------------------------------------*/ -int charcommand_monsterignore(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #monsterignore/#battleignore )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (!pl_sd->state.monster_ignore) { - pl_sd->state.monster_ignore = 1; - clif_displaymessage(pl_sd->fd, "You are now immune to attacks."); - if (fd != pl_sd->fd) - clif_displaymessage(pl_sd->fd, "Target player is now immune to attacks."); - } else { - pl_sd->state.monster_ignore = 0; - clif_displaymessage(sd->fd, "You are no longer immune to attacks."); - if (fd != pl_sd->fd) - clif_displaymessage(pl_sd->fd, "Target player is no longer immune to attacks."); - - } - - return 0; -} - -/*========================================== - * Change target's size [HiddenDragon] - *------------------------------------------*/ -int charcommand_size(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int size=0; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &size, character) < 2) { - clif_displaymessage(fd, "Please, enter a player name (usage: #size <0-2> )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if(pl_sd->state.size) { - pl_sd->state.size=0; - pc_setpos(pl_sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, 3); - } - - if(size==1) { - pl_sd->state.size=1; - clif_specialeffect(&pl_sd->bl,420,AREA); - clif_displaymessage(fd, "Size changed."); - if (fd != pl_sd->fd) - clif_displaymessage(pl_sd->fd, "Size changed."); - } else if(size==2) { - pl_sd->state.size=2; - clif_specialeffect(&pl_sd->bl,422,AREA); - clif_displaymessage(fd, "Size changed."); - if (fd != pl_sd->fd) - clif_displaymessage(pl_sd->fd, "Size changed."); - } - else - { - clif_displaymessage(fd, "Size restored."); - if (fd != pl_sd->fd) - clif_displaymessage(pl_sd->fd, "Size restored."); - } - - - return 0; -} - -/*========================================== - * Level up target's homunculus [HiddenDragon] - *------------------------------------------*/ -int charcommand_homlevel(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - TBL_HOM * hd; - int level = 0, i = 0; - - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &level, character) < 2) { - clif_displaymessage(fd, "Please, enter a player name and level (usage: #homlevel <# of levels> )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if ( !merc_is_hom_active(pl_sd->hd) ) - { - clif_displaymessage(fd, "Target player does not have a homunculus."); - return 1; - } - - hd = pl_sd->hd; - - for (i = 1; i <= level && hd->exp_next; i++){ - hd->homunculus.exp += hd->exp_next; - merc_hom_levelup(hd); - } - status_calc_homunculus(hd,0); - status_percent_heal(&hd->bl, 100, 100); - clif_misceffect2(&hd->bl,568); - clif_displaymessage(pl_sd->fd, "Homunculus level changed."); - if (pl_sd->fd != fd) - clif_displaymessage(fd, "Player's homunculus level changed."); - - return 0; -} - -/*========================================== - * Evolve target's homunculus [HiddenDragon] - *------------------------------------------*/ -int charcommand_homevolution(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #homevolution )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if ( !merc_is_hom_active(pl_sd->hd) ) { - clif_displaymessage(fd, "Target player does not have a homunculus."); - return -1; - } - - if ( !merc_hom_evolution(pl_sd->hd) ) { - clif_displaymessage(fd, "Target homunculus cannot evolve."); - return -1; - } - - clif_displaymessage(pl_sd->fd, "Homunculus evolution initiated."); - if (pl_sd->fd != fd) - clif_displaymessage(fd, "Homunculus evolution initiated."); - return 0; -} - -/*========================================== - * Create a homunculus for target [HiddenDragon] - *------------------------------------------*/ -int charcommand_makehomun(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int homunid; - - char character[NAME_LENGTH]; - char output[200]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - memset(output, '\0', sizeof(output)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &homunid, character) < 2) { - sprintf(output, "Please, enter a player name (usage: #makehomun ).", HM_CLASS_BASE, HM_CLASS_BASE + MAX_HOMUNCULUS_CLASS - 1); - clif_displaymessage(fd, output); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if( homunid < HM_CLASS_BASE || homunid > HM_CLASS_BASE + MAX_HOMUNCULUS_CLASS - 1 ) - { - clif_displaymessage(fd, "Invalid homunculus ID."); - return -1; - } - - if(pl_sd->status.hom_id == 0) - { - merc_create_homunculus_request(pl_sd,homunid); - } - else - { - clif_displaymessage(fd, "Target player already has a homunculus."); - } - return 0; -} - -/*========================================== - * Change Target's homunculus' friendlyness [HiddenDragon] - *------------------------------------------*/ -int charcommand_homfriendly(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int friendly = 0; - - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &friendly, character) < 2) { - clif_displaymessage(fd, "Please, enter a player name and friendly value (usage: #homfriendly <0-1000> )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (merc_is_hom_active(pl_sd->hd)) { - if (friendly > 0 && friendly <= 1000) { - pl_sd->hd->homunculus.intimacy = friendly * 100 ; - clif_send_homdata(pl_sd,SP_INTIMATE,friendly); - clif_displaymessage(pl_sd->fd, "Homunculus friendly value changed."); - if (fd != pl_sd->fd) - clif_displaymessage(fd, "Homunculus friendly value changed."); - } else { - clif_displaymessage(fd, "Invalid friendly value."); - } - } - else - { - clif_displaymessage(fd, "Target player's homunculus does not exist."); - return -1; - } - - return 0; -} - -/*========================================== - * Modify target's homunculus hunger [HiddenDragon] - *------------------------------------------*/ -int charcommand_homhungry(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - int hungry = 0; - - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &hungry, character) < 2) { - clif_displaymessage(fd, "Please, enter a player name (usage: #homhungry <0-100> )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if (pl_sd->status.hom_id > 0 && pl_sd->hd) { - struct homun_data *hd = pl_sd->hd; - if (hungry >= 0 && hungry <= 100) { - hd->homunculus.hunger = hungry; - clif_send_homdata(pl_sd,SP_HUNGRY,hd->homunculus.hunger); - clif_displaymessage(pl_sd->fd, "Homunculus hungry value changed."); - if (fd != pl_sd->fd) - clif_displaymessage(fd, "Homunculus hungry value changed."); - } else { - clif_displaymessage(fd, "Invalid hungry value."); - return -1; - } - } - else - { - clif_displaymessage(fd, "Target player does not have a homunculus."); - return -1; - } - - - return 0; -} - -/*========================================== - * Show target's homunculus stats [HiddenDragon] - *------------------------------------------*/ -int charcommand_hominfo(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct homun_data *hd; - struct status_data *status; - char output[200]; - char character[NAME_LENGTH]; - struct map_session_data *pl_sd; - memset(character, '\0', sizeof(character)); - memset(output, '\0', sizeof(output)); - - if (!message || !*message || sscanf(message, "%23[^\n]", character) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: #hominfo )."); - return -1; - } - - if ( (pl_sd = map_nick2sd(character)) == NULL ) - { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if ( pc_isGM(sd) < pc_isGM(pl_sd) ) - { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - - if(!merc_is_hom_active(pl_sd->hd)) - return -1; - - hd = pl_sd->hd; - status = status_get_status_data(&hd->bl); - clif_displaymessage(fd, "Homunculus stats :"); - - snprintf(output, sizeof(output), "HP : %d/%d - SP : %d/%d", status->hp, status->max_hp, status->sp, status->max_sp); - clif_displaymessage(fd, output); - - snprintf(output, sizeof(output), "ATK : %d - MATK : %d~%d", status->rhw.atk2 +status->batk, status->matk_min, status->matk_max); - clif_displaymessage(fd, output); - - snprintf(output, sizeof(output), "Hungry : %d - Intimacy : %u", hd->homunculus.hunger, hd->homunculus.intimacy/100); - clif_displaymessage(fd, output); - - snprintf(output, sizeof(output), "Stats: Str %d / Agi %d / Vit %d / Int %d / Dex %d / Luk %d", status->str, status->agi, status->vit, status->int_, status->dex, status->luk); - clif_displaymessage(fd, output); - - return 0; -} - - -/*========================================== - * charcommand_info[] structure definition - *------------------------------------------*/ - -CharCommandInfo charcommand_info[] = { - { "job", 60, charcommand_jobchange }, - { "jobchange", 60, charcommand_jobchange }, - { "petrename", 50, charcommand_petrename }, - { "petfriendly", 50, charcommand_petfriendly }, - { "stats", 40, charcommand_stats }, - { "option", 60, charcommand_option }, - { "reset", 60, charcommand_reset }, - { "save", 60, charcommand_save }, - { "spiritball", 40, charcommand_spiritball }, - { "itemlist", 40, charcommand_itemlist }, - { "effect", 40, charcommand_effect }, - { "storagelist", 40, charcommand_storagelist }, - { "item", 60, charcommand_item }, - { "warp", 60, charcommand_warp }, - { "rura", 60, charcommand_warp }, - { "rura+", 60, charcommand_warp }, - { "zeny", 60, charcommand_zeny }, - { "fakename", 50, charcommand_fakename }, - { "baselvl", 60, charcommand_baselevel }, - { "baselevel", 60, charcommand_baselevel }, - { "blvl", 60, charcommand_baselevel }, - { "blevel", 60, charcommand_baselevel }, - { "joblvl", 60, charcommand_joblevel }, - { "joblevel", 60, charcommand_joblevel }, - { "jlvl", 60, charcommand_joblevel }, - { "jlevel", 60, charcommand_joblevel }, - { "questskill", 60, charcommand_questskill }, - { "lostskill", 60, charcommand_lostskill }, - { "skreset", 60, charcommand_skreset }, - { "streset", 60, charcommand_streset }, - { "model", 50, charcommand_model }, - { "skpoint", 60, charcommand_skpoint }, - { "stpoint", 60, charcommand_stpoint }, - { "changesex", 60, charcommand_changesex }, - { "feelreset", 60, charcommand_feelreset }, - { "help", 20, charcommand_help }, - { "load", 60, charcommand_load }, - { "speed", 60, charcommand_speed }, - { "storage", 60, charcommand_storage }, - { "gstorage", 60, charcommand_guildstorage }, - { "hide", 60, charcommand_hide }, - { "alive", 60, charcommand_alive }, - { "revive", 60, charcommand_alive }, - { "heal", 60, charcommand_heal }, - { "item2", 60, charcommand_item2 }, - { "itemreset", 60, charcommand_itemreset }, - { "refine", 60, charcommand_refine }, - { "produce", 60, charcommand_produce }, - { "str", 60, charcommand_param }, - { "agi", 60, charcommand_param }, - { "vit", 60, charcommand_param }, - { "int", 60, charcommand_param }, - { "dex", 60, charcommand_param }, - { "luk", 60, charcommand_param }, - { "glvl", 60, charcommand_guildlevelup }, - { "glevel", 60, charcommand_guildlevelup }, - { "guildlvl", 60, charcommand_guildlevelup }, - { "guildlevel", 60, charcommand_guildlevelup }, - { "hatch", 50, charcommand_hatch }, - { "pethungry", 60, charcommand_pethungry }, - { "allskill", 60, charcommand_allskill }, - { "allskills", 60, charcommand_allskill }, - { "skillall", 60, charcommand_allskill }, - { "skillsall", 60, charcommand_allskill }, - { "dye", 50, charcommand_dye }, - { "hairstyle", 50, charcommand_hair_style }, - { "hstyle", 50, charcommand_hair_style }, - { "haircolor", 50, charcommand_hair_color }, - { "hcolor", 50, charcommand_hair_color }, - { "allstat", 60, charcommand_allstats }, - { "allstats", 60, charcommand_allstats }, - { "statall", 60, charcommand_allstats }, - { "statsall", 60, charcommand_allstats }, - { "mount", 50, charcommand_mount_peco }, - { "mountpeco", 50, charcommand_mount_peco }, - { "delitem", 60, charcommand_delitem }, - { "jailtime", 40, charcommand_jailtime }, - { "disguise", 60, charcommand_disguise }, - { "undisguise", 60, charcommand_undisguise }, - { "cartlist", 40, charcommand_cart_list }, - { "killer", 60, charcommand_killer }, - { "killable", 60, charcommand_killable }, - { "dropall", 60, charcommand_dropall }, - { "storeall", 60, charcommand_storeall }, - { "refresh", 40, charcommand_refresh }, - { "exp", 1, charcommand_exp }, - { "monsterignore", 60, charcommand_monsterignore }, - { "size", 50, charcommand_size }, - { "hlvl", 60, charcommand_homlevel }, - { "hlevel", 60, charcommand_homlevel }, - { "homlvl", 60, charcommand_homlevel }, - { "homlevel", 60, charcommand_homlevel }, - { "homevolve", 60, charcommand_homevolution }, - { "homevolution", 60, charcommand_homevolution }, - { "homfriendly", 60, charcommand_homfriendly }, - { "homhungry", 60, charcommand_homhungry }, - { "hominfo", 40, charcommand_hominfo }, - { "cash", 60, charcommand_cash }, - { "points", 60, charcommand_cash }, -}; - - -/*========================================== - * Command lookup functions - *------------------------------------------*/ -static CharCommandInfo* get_charcommandinfo_byname(const char* name) -{ - int i; - if( *name == charcommand_symbol ) name++; // for backwards compatibility - ARR_FIND( 0, ARRAYLENGTH(charcommand_info), i, strcmpi(charcommand_info[i].command, name) == 0 ); - return ( i < ARRAYLENGTH(charcommand_info) ) ? &charcommand_info[i] : NULL; -} - -static CharCommandInfo* get_charcommandinfo_byfunc(const CharCommandFunc func) -{ - int i; - ARR_FIND( 0, ARRAYLENGTH(charcommand_info), i, charcommand_info[i].func == func ); - return ( i < ARRAYLENGTH(charcommand_info) ) ? &charcommand_info[i] : NULL; -} - - -/*========================================== - * Retrieve the command's required gm level - *------------------------------------------*/ -int get_charcommand_level(const CharCommandFunc func) -{ - CharCommandInfo* info = get_charcommandinfo_byfunc(func); - return ( info != NULL ) ? info->level : 100; // 100: command can not be used -} - - -/// Executes a char-command. -/// To be called by internal server code (bypasses various restrictions). -bool is_charcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl) -{ - CharCommandInfo* info; - char command[100]; - char args[100]; - char output[200]; - - if( !str || !*str ) - return false; - - if( *str != charcommand_symbol ) // check first char - return false; - - if( sscanf(str, "%99s %99[^\n]", command, args) < 2 ) - args[0] = '\0'; - - info = get_charcommandinfo_byname(command); - if( info == NULL || info->func == NULL || gmlvl < info->level ) - { - if( gmlvl == 0 ) - return false; // will just display as normal text - else - { - sprintf(output, msg_txt(153), command); // "%s is Unknown Command." - clif_displaymessage(fd, output); - return true; - } - } - - if( log_config.gm && info->level >= log_config.gm ) - log_atcommand(sd, str); - - if( info->func(fd, sd, command, args) != 0 ) - { - sprintf(output, msg_txt(154), command); // "%s failed." - clif_displaymessage(fd, output); - } - - return true; -} - -/// Executes a char-command. -/// To be used by player-invoked code (restrictions will be applied) -bool is_charcommand(const int fd, struct map_session_data* sd, const char* message) -{ - int gmlvl = pc_isGM(sd); - - nullpo_retr(false, sd); - - if( !message || !*message ) - return false; - - if( sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCOMMAND ) - return true; // so that it won't display as normal message - - if( battle_config.atc_gmonly != 0 && gmlvl == 0 ) - return false; - - if( map[sd->bl.m].nocommand && gmlvl < map[sd->bl.m].nocommand ) - { - clif_displaymessage(fd, msg_txt(143)); // "Commands are disabled on this map." - return false; - } - - // skip 10/11-langtype's codepage indicator, if detected - if( message[0] == '|' && strlen(message) >= 4 && message[3] == charcommand_symbol ) - message += 3; - - return is_charcommand_sub(fd,sd,message,gmlvl); -} - - -/*========================================== - * - *------------------------------------------*/ -int charcommand_config_read(const char* cfgName) -{ - char line[1024], w1[1024], w2[1024]; - CharCommandInfo* p; - FILE* fp; - - if( (fp = fopen(cfgName, "r")) == NULL ) - { - ShowError("CharCommand configuration file not found: %s\n", cfgName); - return 1; - } - - while( fgets(line, sizeof(line), fp) ) - { - if( line[0] == '/' && line[1] == '/' ) - continue; - - if( sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2 ) - continue; - - p = get_charcommandinfo_byname(w1); - if( p != NULL ) - { - p->level = atoi(w2); - p->level = cap_value(p->level, 0, 100); - } - else - if( strcmpi(w1, "import") == 0 ) - charcommand_config_read(w2); - else - if( strcmpi(w1, "command_symbol") == 0 && - w2[0] > 31 && // control characters - w2[0] != '/' && // symbol of standard ragnarok GM commands - w2[0] != '%' && // symbol of party chat speaking - w2[0] != '$' && // symbol of guild chat speaking - w2[0] != '@' ) // symbol of atcommand - charcommand_symbol = w2[0]; - else - ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); - } - fclose(fp); - - return 0; -} diff --git a/src/map/charcommand.h b/src/map/charcommand.h deleted file mode 100644 index 25a27b732..000000000 --- a/src/map/charcommand.h +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Athena Dev Teams - Licensed under GNU GPL -// For more information, see LICENCE in the main folder - -#ifndef _CHARCOMMAND_H_ -#define _CHARCOMMAND_H_ - -//#include "map.h" -struct map_session_data; - -extern char charcommand_symbol; -typedef int (*CharCommandFunc)(const int fd, struct map_session_data* sd, const char* command, const char* message); - -bool is_charcommand(const int fd, struct map_session_data* sd, const char* message); -bool is_charcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl); -int get_charcommand_level(const CharCommandFunc func); - -int charcommand_config_read(const char* cfgName); - -#endif /* _CHARCOMMAND_H_ */ diff --git a/src/map/chat.c b/src/map/chat.c index 2572e5083..8446596e6 100644 --- a/src/map/chat.c +++ b/src/map/chat.c @@ -6,6 +6,7 @@ #include "../common/nullpo.h" #include "../common/showmsg.h" #include "../common/strlib.h" +#include "../common/mmo.h" #include "atcommand.h" // msg_txt() #include "battle.h" // struct battle_config #include "clif.h" diff --git a/src/map/clif.c b/src/map/clif.c index 8e9ec4cf9..5f258a5fa 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -23,7 +23,6 @@ #include "script.h" #include "skill.h" #include "atcommand.h" -#include "charcommand.h" #include "intif.h" #include "battle.h" #include "mob.h" @@ -8215,7 +8214,7 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data* sd) if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) ) return; - if( is_atcommand(fd, sd, message) || is_charcommand(fd, sd, message) ) + if( is_atcommand(fd, sd, message) ) return; if( sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) @@ -8526,7 +8525,7 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) if( !clif_process_message(sd, 1, &target, &namelen, &message, &messagelen) ) return; - if (is_atcommand(fd, sd, message) || is_charcommand(fd, sd, message) ) + if (is_atcommand(fd, sd, message) ) return; if (sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT)) @@ -10053,7 +10052,7 @@ void clif_parse_PartyMessage(int fd, struct map_session_data* sd) if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) ) return; - if( is_atcommand(fd, sd, message) || is_charcommand(fd, sd, message) ) + if( is_atcommand(fd, sd, message) ) return; if( sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) @@ -10331,7 +10330,7 @@ void clif_parse_GuildMessage(int fd, struct map_session_data* sd) if( !clif_process_message(sd, 0, &name, &namelen, &message, &messagelen) ) return; - if( is_atcommand(fd, sd, message) || is_charcommand(fd, sd, message) ) + if( is_atcommand(fd, sd, message) ) return; if( sd->sc.data[SC_BERSERK] || (sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOCHAT) ) diff --git a/src/map/map.c b/src/map/map.c index 21239a78b..dfefa7671 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -38,7 +38,6 @@ #include "homunculus.h" #include "mercenary.h" #include "atcommand.h" -#include "charcommand.h" #include "log.h" #ifndef TXT_ONLY #include "mail.h" @@ -2935,7 +2934,7 @@ int parse_console(char* buf) ShowInfo("Type of command: '%s' || Command: '%s' || Map: '%s' Coords: %d %d\n", type, command, map, x, y); if( n == 5 && strcmpi("admin",type) == 0 ){ - if( !is_atcommand_sub(sd.fd,&sd,command,99) ) + if( !is_atcommand_sub(sd.fd,&sd,command,99,sd.status.name) ) ShowInfo("Console: not atcommand\n"); } else if( n == 2 && strcmpi("server",type) == 0 ){ if( strcmpi("shutdown",command) == 0 || @@ -3468,8 +3467,6 @@ int do_init(int argc, char *argv[]) BATTLE_CONF_FILENAME = argv[i+1]; else if (strcmp(argv[i],"--atcommand_config") == 0 || strcmp(argv[i],"--atcommand-config") == 0) ATCOMMAND_CONF_FILENAME = argv[i+1]; - else if (strcmp(argv[i],"--charcommand_config") == 0 || strcmp(argv[i],"--charcommand-config") == 0) - CHARCOMMAND_CONF_FILENAME = argv[i+1]; else if (strcmp(argv[i],"--script_config") == 0 || strcmp(argv[i],"--script-config") == 0) SCRIPT_CONF_NAME = argv[i+1]; else if (strcmp(argv[i],"--msg_config") == 0 || strcmp(argv[i],"--msg-config") == 0) @@ -3511,7 +3508,6 @@ int do_init(int argc, char *argv[]) battle_config_read(BATTLE_CONF_FILENAME); msg_config_read(MSG_CONF_NAME); atcommand_config_read(ATCOMMAND_CONF_FILENAME); - charcommand_config_read(CHARCOMMAND_CONF_FILENAME); script_config_read(SCRIPT_CONF_NAME); inter_config_read(INTER_CONF_NAME); log_config_read(LOG_CONF_NAME); diff --git a/src/map/map.h b/src/map/map.h index 01ac74cba..49b71b786 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -620,7 +620,6 @@ extern char *LOG_CONF_NAME; extern char *MAP_CONF_NAME; extern char *BATTLE_CONF_FILENAME; extern char *ATCOMMAND_CONF_FILENAME; -extern char *CHARCOMMAND_CONF_FILENAME; extern char *SCRIPT_CONF_NAME; extern char *MSG_CONF_NAME; extern char *GRF_PATH_FILENAME; diff --git a/src/map/pc.c b/src/map/pc.c index d4483a3f7..8ff23cc90 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -10,6 +10,7 @@ #include "../common/strlib.h" // safestrncpy() #include "../common/timer.h" #include "../common/utils.h" +#include "../common/mmo.h" //NAME_LENGTH #include "atcommand.h" // get_atcommand_level() #include "battle.h" // battle_config diff --git a/src/map/script.c b/src/map/script.c index 4cc7f36a2..64047d46d 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -37,7 +37,6 @@ #include "party.h" #include "guild.h" #include "atcommand.h" -#include "charcommand.h" #include "log.h" #include "unit.h" #include "pet.h" @@ -10686,7 +10685,7 @@ BUILDIN_FUNC(atcommand) cmd++; } - is_atcommand_sub(fd, sd, cmd, 99); + is_atcommand_sub(fd, sd, cmd, 99, sd->status.name); return 0; } @@ -10695,8 +10694,11 @@ BUILDIN_FUNC(charcommand) { TBL_PC dummy_sd; TBL_PC* sd; + TBL_PC* temp_sd; + char output[200], temp[200], command[200], charname[NAME_LENGTH], param[200]; int fd; const char* cmd; + const char* message; cmd = script_getstr(st,2); @@ -10717,15 +10719,24 @@ BUILDIN_FUNC(charcommand) } } - // compatibility with previous implementation (deprecated!) - if(cmd[0] != charcommand_symbol) + if (*cmd == charcommand_symbol) { - cmd += strlen(sd->status.name); - while(*cmd != charcommand_symbol && *cmd != 0) - cmd++; + if (sscanf(cmd, "%99s \"%23[^\"]\" %99[^\n]", command, charname, param) > 2 + || sscanf(cmd, "%99s %23s %99[^\n]", command, charname, param) > 2) + { + if ( (temp_sd = map_nick2sd(charname)) != NULL ) + { + sprintf(output, "%s %s", cmd, param); + memcpy(temp, output, sizeof(output)); + message = temp; + is_atcommand_sub(fd,sd,message,99,sd->status.name); + } + } + } + else { + ShowWarning("script: buildin_charcommand: No '#' symbol!"); + script_reportsrc(st); } - - is_charcommand_sub(fd, sd, cmd, 99); return 0; } diff --git a/vcproj-6/map-server_sql.dsp b/vcproj-6/map-server_sql.dsp index 3d54e9287..7597f70d3 100644 --- a/vcproj-6/map-server_sql.dsp +++ b/vcproj-6/map-server_sql.dsp @@ -215,14 +215,6 @@ SOURCE=..\src\map\battle.h # End Source File # Begin Source File -SOURCE=..\src\map\charcommand.c -# End Source File -# Begin Source File - -SOURCE=..\src\map\charcommand.h -# End Source File -# Begin Source File - SOURCE=..\src\map\chat.c # End Source File # Begin Source File diff --git a/vcproj-6/map-server_txt.dsp b/vcproj-6/map-server_txt.dsp index 027eeea21..bcee75739 100644 --- a/vcproj-6/map-server_txt.dsp +++ b/vcproj-6/map-server_txt.dsp @@ -199,10 +199,6 @@ SOURCE=..\src\map\battle.c # End Source File # Begin Source File -SOURCE=..\src\map\charcommand.c -# End Source File -# Begin Source File - SOURCE=..\src\map\chat.c # End Source File # Begin Source File @@ -319,10 +315,6 @@ SOURCE=..\src\map\battle.h # End Source File # Begin Source File -SOURCE=..\src\map\charcommand.h -# End Source File -# Begin Source File - SOURCE=..\src\map\chat.h # End Source File # Begin Source File diff --git a/vcproj-7.1/map-server_sql.vcproj b/vcproj-7.1/map-server_sql.vcproj index 5c382f7ee..6a6e4feb8 100644 --- a/vcproj-7.1/map-server_sql.vcproj +++ b/vcproj-7.1/map-server_sql.vcproj @@ -160,12 +160,6 @@ - - - - diff --git a/vcproj-7.1/map-server_txt.vcproj b/vcproj-7.1/map-server_txt.vcproj index 6eaf802f4..f04a036cb 100644 --- a/vcproj-7.1/map-server_txt.vcproj +++ b/vcproj-7.1/map-server_txt.vcproj @@ -160,12 +160,6 @@ - - - - diff --git a/vcproj-8/map-server_sql.vcproj b/vcproj-8/map-server_sql.vcproj index b6a3194df..484876763 100644 --- a/vcproj-8/map-server_sql.vcproj +++ b/vcproj-8/map-server_sql.vcproj @@ -353,14 +353,6 @@ RelativePath="..\src\map\battle.h" > - - - - diff --git a/vcproj-8/map-server_txt.vcproj b/vcproj-8/map-server_txt.vcproj index be5c43759..4bf415daf 100644 --- a/vcproj-8/map-server_txt.vcproj +++ b/vcproj-8/map-server_txt.vcproj @@ -218,14 +218,6 @@ RelativePath="..\src\map\battle.h" > - - - - diff --git a/vcproj-9/map-server_sql.vcproj b/vcproj-9/map-server_sql.vcproj index d8b951deb..814c25fe6 100644 --- a/vcproj-9/map-server_sql.vcproj +++ b/vcproj-9/map-server_sql.vcproj @@ -358,14 +358,6 @@ RelativePath="..\src\map\battle.h" > - - - - diff --git a/vcproj-9/map-server_txt.vcproj b/vcproj-9/map-server_txt.vcproj index 2e6d1064d..679f2d287 100644 --- a/vcproj-9/map-server_txt.vcproj +++ b/vcproj-9/map-server_txt.vcproj @@ -1,7 +1,7 @@ - - - - @@ -265,6 +257,14 @@ RelativePath="..\src\map\guild.h" > + + + + @@ -313,14 +313,6 @@ RelativePath="..\src\map\mapreg_txt.c" > - - - - -- cgit v1.2.3-70-g09d2 From 9c2a0d9db60a698035ec6821239c20ab81b148ca Mon Sep 17 00:00:00 2001 From: sketchyphoenix Date: Tue, 23 Dec 2008 02:06:21 +0000 Subject: * Added a few missing atcommands. * Added more commands to configurations (bugreport:2565) * Added a missing charcommand symbol config to atcommand configs. * GM command configs under the old format will have a warning printed back to the console as being deprecated. * Other fixes/cleaning partially resolving bugreport:2549 git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13409 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 6 + conf/atcommand_athena.conf | 32 +++- src/map/atcommand.c | 371 ++++++++++++++++++++++++++++++++++++++++++--- src/map/atcommand.h | 2 +- src/map/map.c | 2 +- src/map/script.c | 4 +- 6 files changed, 392 insertions(+), 25 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 65ea86bd5..945b8f291 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,12 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2008/12/22 + * Added a few missing atcommands. [SketchyPhoenix] + * Added more commands to configurations (bugreport:2565) + * Added a missing charcommand symbol config to atcommand configs. + * GM command configs under the old format will have a warning printed back to the console as being deprecated. + * Other fixes/cleaning partially resolving bugreport:2549 2008/12/20 * Extended how duplicates work: (based on Orcao's work in bugreport:2361) [FlavioJS] - you can duplicate warps/shops/cashshops/npcs (before only npcs could be duplicated) diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index d8ef70652..ec7a1af57 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -6,12 +6,15 @@ // The symbol that will be used to recognize commands. // You can set any one character except control-characters (0x00-0x1f), // '%', '$' (party/guild chat speaking) and '/' (standard client commands). -// The symbol must also be different from from the GM charcommand symbol. +// command_symbol represents @commands used locally +// char_symbol represents #commands used on other players. command_symbol: @ +char_symbol: # // The following settings in this file use the format ": level(@),level(#)". // They define the minimum GM level required to execute the associated command. -// @ = self use, # = useable on other players +// @ = atcommand. most work only on yourself. +// # = charcommand. remote usage only. GMs will be able to use these on other players. // Adjust values as you like. Note that to activate commands for normal players, // (GM level 0), you also need to change the 'atcommand_gm_only' option to 'no'. // To completely disable a command, set its required GM level to 100. @@ -408,6 +411,18 @@ adopt: 40,40 // Play a Sound! sound: 40,40 +// Displays a player's storage +storagelist: 40,40 + +// Displays a player's cart contents +cartlist: 40,40 + +// Displays a player's items +itemlist: 40,40 + +// Displays a player's stats +stats: 40,40 + //--------------------- // 50: Sub-GM+ commands @@ -620,6 +635,17 @@ homhungry: 60,60 // Re-calculates stats, as if the homun was sent back to level 1 and re-leveled homshuffle: 60,60 +// WoE 2 start/stop commands +agitstart2: 60,60 +agitend: 60,60 + +// Resets player stats +streset: 60,60 + +// Resets player skills +skreset: 60,60 + + //---------------------- // 80: GM Chief commands @@ -765,7 +791,7 @@ fireworks: 99,99 sakura: 99,99 -leaves:99 +leaves:99,99 // Stop all weather effects clearweather: 99,99 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 2d336ddf9..2e522d541 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8236,6 +8236,321 @@ int atcommand_allowks(const int fd, struct map_session_data *sd, const char *com return 0; } +int atcommand_resetstat(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + nullpo_retr(-1, sd); + + pc_resetstate(sd); + sprintf(atcmd_output, msg_txt(207), sd->status.name); + clif_displaymessage(fd, atcmd_output); + return 0; +} + +int atcommand_resetskill(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + nullpo_retr(-1,sd); + + pc_resetskill(sd,1); + sprintf(atcmd_output, msg_txt(206), sd->status.name); + clif_displaymessage(fd, atcmd_output); + return 0; +} + +/*========================================== + * #storagelist : Displays the items list of a player's storage. + *------------------------------------------*/ +int atcommand_storagelist(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + struct item_data *item_data, *item_temp; + int i, j, count = 0, counter = 0, counter2 = 0; + char character[NAME_LENGTH], output[200], outputtmp[200]; + nullpo_retr(-1, sd); + + memset(character, '\0', sizeof(character)); + memset(output, '\0', sizeof(output)); + memset(outputtmp, '\0', sizeof(outputtmp)); + + for (i = 0; i < MAX_STORAGE; i++) + { + struct item* it = &sd->status.storage.items[i]; + if( it->nameid > 0 && (item_data = itemdb_search(it->nameid)) != NULL ) + { + counter = counter + it->amount; + count++; + if (count == 1) { + sprintf(output, "------ Storage items list of '%s' ------", sd->status.name); + clif_displaymessage(fd, output); + } + if (it->refine) + sprintf(output, "%d %s %+d (%s %+d, id: %d)", it->amount, item_data->name, it->refine, item_data->jname, it->refine, it->nameid); + else + sprintf(output, "%d %s (%s, id: %d)", it->amount, item_data->name, item_data->jname, it->nameid); + clif_displaymessage(fd, output); + + memset(output, '\0', sizeof(output)); + counter2 = 0; + for (j = 0; j < item_data->slot; j++) { + if (it->card[j]) { + if ((item_temp = itemdb_search(it->card[j])) != NULL) { + if (output[0] == '\0') + sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); + else + sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); + strcat(output, outputtmp); + } + } + } + if (output[0] != '\0') { + output[strlen(output) - 2] = ')'; + output[strlen(output) - 1] = '\0'; + clif_displaymessage(fd, output); + } + } + } + + if (count == 0) + clif_displaymessage(fd, "No item found in the storage of this player."); + else { + sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count); + clif_displaymessage(fd, output); + } + + return 0; +} + +/*========================================== + * Displays contents of target's cart [HiddenDragon] + *------------------------------------------*/ +int atcommand_cart_list(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + char outputtmp[200]; + char output[200]; + char character[NAME_LENGTH]; + struct item_data *item_data, *item_temp; + int i, j, count = 0, counter = 0, counter2; + nullpo_retr(-1, sd); + + memset(character, '\0', sizeof(character)); + memset(output, '\0', sizeof(output)); + memset(outputtmp, '\0', sizeof(outputtmp)); + + for (i = 0; i < MAX_CART; i++) { + if (sd->status.cart[i].nameid > 0 && (item_data = itemdb_search(sd->status.cart[i].nameid)) != NULL) { + counter = counter + sd->status.cart[i].amount; + count++; + if (count == 1) { + sprintf(output, "------ Cart items list of '%s' ------", sd->status.name); + clif_displaymessage(fd, output); + } + if (sd->status.cart[i].refine) + sprintf(output, "%d %s %+d (%s %+d, id: %d)", sd->status.cart[i].amount, item_data->name, sd->status.cart[i].refine, item_data->jname, sd->status.cart[i].refine, sd->status.cart[i].nameid); + else + sprintf(output, "%d %s (%s, id: %d)", sd->status.cart[i].amount, item_data->name, item_data->jname, sd->status.cart[i].nameid); + clif_displaymessage(fd, output); + memset(output, '\0', sizeof(output)); + counter2 = 0; + for (j = 0; j < item_data->slot; j++) { + if (sd->status.cart[i].card[j]) { + if ( (item_temp = itemdb_search(sd->status.cart[i].card[j])) != NULL) { + if (output[0] == '\0') + sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); + else + sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); + strcat(output, outputtmp); + } + } + } + if (output[0] != '\0') { + output[strlen(output) - 2] = ')'; + output[strlen(output) - 1] = '\0'; + clif_displaymessage(fd, output); + } + } + } + if (count == 0) + clif_displaymessage(fd, "No item found in the cart of this player."); + else { + sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count); + clif_displaymessage(fd, output); + } + + return 0; +} + +int atcommand_itemlist(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + struct item_data *item_data, *item_temp; + int i, j, equip, count, counter, counter2; + char character[NAME_LENGTH], output[200], equipstr[100], outputtmp[200]; + struct item *i_item; //Current inventory item. + nullpo_retr(-1, sd); + + memset(character, '\0', sizeof(character)); + memset(output, '\0', sizeof(output)); + memset(equipstr, '\0', sizeof(equipstr)); + memset(outputtmp, '\0', sizeof(outputtmp)); + + counter = 0; + count = 0; + for (i = 0; i < MAX_INVENTORY; i++) { + i_item = &sd->status.inventory[i]; + if (sd->status.inventory[i].nameid > 0 && (item_data = itemdb_exists(i_item->nameid)) != NULL) { + counter = counter + i_item->amount; + count++; + if (count == 1) { + sprintf(output, "------ Items list of '%s' ------", sd->status.name); + clif_displaymessage(fd, output); + } + if ((equip = i_item->equip)) { + strcpy(equipstr, "| equiped: "); + if (equip & EQP_GARMENT) + strcat(equipstr, "robe/gargment, "); + if (equip & EQP_ACC_L) + strcat(equipstr, "left accessory, "); + if (equip & EQP_ARMOR) + strcat(equipstr, "body/armor, "); + if ((equip & EQP_ARMS) == EQP_HAND_R) + strcat(equipstr, "right hand, "); + if ((equip & EQP_ARMS) == EQP_HAND_L) + strcat(equipstr, "left hand, "); + if ((equip & EQP_ARMS) == EQP_ARMS) + strcat(equipstr, "both hands, "); + if (equip & EQP_SHOES) + strcat(equipstr, "feet, "); + if (equip & EQP_ACC_R) + strcat(equipstr, "right accessory, "); + if ((equip & EQP_HELM) == EQP_HEAD_LOW) + strcat(equipstr, "lower head, "); + if ((equip & EQP_HELM) == EQP_HEAD_TOP) + strcat(equipstr, "top head, "); + if ((equip & EQP_HELM) == (EQP_HEAD_LOW|EQP_HEAD_TOP)) + strcat(equipstr, "lower/top head, "); + if ((equip & EQP_HELM) == EQP_HEAD_MID) + strcat(equipstr, "mid head, "); + if ((equip & EQP_HELM) == (EQP_HEAD_LOW|EQP_HEAD_MID)) + strcat(equipstr, "lower/mid head, "); + if ((equip & EQP_HELM) == EQP_HELM) + strcat(equipstr, "lower/mid/top head, "); + // remove final ', ' + equipstr[strlen(equipstr) - 2] = '\0'; + } else + memset(equipstr, '\0', sizeof(equipstr)); + if (i_item->refine) + sprintf(output, "%d %s %+d (%s %+d, id: %d) %s", i_item->amount, item_data->name, i_item->refine, item_data->jname, i_item->refine, i_item->nameid, equipstr); + else + sprintf(output, "%d %s (%s, id: %d) %s", i_item->amount, item_data->name, item_data->jname, i_item->nameid, equipstr); + clif_displaymessage(fd, output); + memset(output, '\0', sizeof(output)); + counter2 = 0; + + if(i_item->card[0]==CARD0_PET) { //pet eggs + if (i_item->card[3]) + sprintf(outputtmp, " -> (pet egg, pet id: %u, named)", (unsigned int)MakeDWord(i_item->card[1], i_item->card[2])); + else + sprintf(outputtmp, " -> (pet egg, pet id: %u, unnamed)", (unsigned int)MakeDWord(i_item->card[1], i_item->card[2])); + strcat(output, outputtmp); + } else + if(i_item->card[0]==CARD0_FORGE) { //forged items. + sprintf(outputtmp, " -> (crafted item, creator id: %u, star crumbs %d, element %d)", (unsigned int)MakeDWord(i_item->card[2], i_item->card[3]), i_item->card[1]>>8, i_item->card[1]&0x0f); + } else + if(i_item->card[0]==CARD0_CREATE) { //created items. + sprintf(outputtmp, " -> (produced item, creator id: %u)", (unsigned int)MakeDWord(i_item->card[2], i_item->card[3])); + strcat(output, outputtmp); + } else //Normal slots + for (j = 0; j < item_data->slot; j++) { + if (sd->status.inventory[i].card[j]) { + if ((item_temp = itemdb_exists(i_item->card[j])) != NULL) { + if (output[0] == '\0') + sprintf(outputtmp, " -> (card(s): #%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); + else + sprintf(outputtmp, "#%d %s (%s), ", ++counter2, item_temp->name, item_temp->jname); + strcat(output, outputtmp); + } + } + } + if (output[0] != '\0') { + output[strlen(output) - 2] = ')'; + output[strlen(output) - 1] = '\0'; + clif_displaymessage(fd, output); + } + } + } + if (count == 0) + { + clif_displaymessage(fd, "No item found on this player."); + return -1; + } + + sprintf(output, "%d item(s) found in %d kind(s) of items.", counter, count); + clif_displaymessage(fd, output); + return 0; +} + +int atcommand_stats(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + char character[NAME_LENGTH]; + char job_jobname[100]; + char output[200]; + int i; + struct { + const char* format; + int value; + } output_table[] = { + { "Base Level - %d", 0 }, + { NULL, 0 }, + { "Hp - %d", 0 }, + { "MaxHp - %d", 0 }, + { "Sp - %d", 0 }, + { "MaxSp - %d", 0 }, + { "Str - %3d", 0 }, + { "Agi - %3d", 0 }, + { "Vit - %3d", 0 }, + { "Int - %3d", 0 }, + { "Dex - %3d", 0 }, + { "Luk - %3d", 0 }, + { "Zeny - %d", 0 }, + { "Free SK Points - %d", 0 }, + { "JobChangeLvl - %d", 0 }, + { NULL, 0 } + }; + + memset(character, '\0', sizeof(character)); + memset(job_jobname, '\0', sizeof(job_jobname)); + memset(output, '\0', sizeof(output)); + + //direct array initialization with variables is not standard C compliant. + output_table[0].value = sd->status.base_level; + output_table[1].format = job_jobname; + output_table[1].value = sd->status.job_level; + output_table[2].value = sd->status.hp; + output_table[3].value = sd->status.max_hp; + output_table[4].value = sd->status.sp; + output_table[5].value = sd->status.max_sp; + output_table[6].value = sd->status.str; + output_table[7].value = sd->status.agi; + output_table[8].value = sd->status.vit; + output_table[9].value = sd->status.int_; + output_table[10].value = sd->status.dex; + output_table[11].value = sd->status.luk; + output_table[12].value = sd->status.zeny; + output_table[13].value = sd->status.skill_point; + output_table[14].value = sd->change_level; + + sprintf(job_jobname, "Job - %s %s", job_name(sd->status.class_), "(level %d)"); + sprintf(output, msg_txt(53), sd->status.name); // '%s' stats: + + clif_displaymessage(fd, output); + + for (i = 0; output_table[i].format != NULL; i++) { + sprintf(output, output_table[i].format, output_table[i].value); + clif_displaymessage(fd, output); + } + + return 0; +} + + + /*========================================== * atcommand_info[] structure definition *------------------------------------------*/ @@ -8530,6 +8845,12 @@ AtCommandInfo atcommand_info[] = { { "points", 60,60, atcommand_cash }, { "agitstart2", 60,60, atcommand_agitstart2 }, { "agitend2", 60,60, atcommand_agitend2 }, + { "skreset", 60,60, atcommand_resetskill }, + { "streset", 60,60, atcommand_resetstat }, + { "storagelist", 40,40, atcommand_storagelist }, + { "cartlist", 40,40, atcommand_cart_list }, + { "itemlist", 40,40, atcommand_itemlist }, + { "stats", 40,40, atcommand_stats }, }; @@ -8564,9 +8885,8 @@ int get_atcommand_level(const AtCommandFunc func) /// Executes an at-command. /// To be called by internal server code (bypasses various restrictions). -bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl, const char charname[NAME_LENGTH]) +bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl) { - struct map_session_data* ssd; AtCommandInfo* info; char command[100]; char args[100]; @@ -8594,12 +8914,9 @@ bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str } } - if( log_config.gm && info->level >= log_config.gm ) { - if( (ssd = map_nick2sd(charname)) != NULL ) - log_atcommand(ssd, str); - else + //fd will not equal sd->fd if it's a charcommand. Of course, using a charcommand on yourself would make it = sd->fd as well + if( log_config.gm && ( info->level >= log_config.gm || info->level2 >= log_config.gm ) && fd == sd->fd) log_atcommand(sd, str); - } if( info->func(fd, sd, command, args) != 0 ) { @@ -8619,6 +8936,8 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message char charname[NAME_LENGTH]; char cmd[100]; char param[100]; + char output[200]; + char output2[200]; const char* message2; int gmlvl = pc_isGM(sd); @@ -8651,22 +8970,22 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message { if ( (pl_sd = map_nick2sd(charname)) == NULL ) { - sprintf(atcmd_output, "%s failed. Player %s not found.", cmd, charname); - clif_displaymessage(fd, atcmd_output); + sprintf(output, "%s failed. Player %s not found.", cmd, charname); + clif_displaymessage(fd, output); return true; } else { //we pass fd instead of pl_sd->fd otherwise command output messages are sent to the target //also, the name is taken out of the message since it's not needed anymore - sprintf(atcmd_output, "%s %s", cmd, param); - memcpy(atcmd_temp, atcmd_output, sizeof(atcmd_output)); - message2 = atcmd_temp; - return is_atcommand_sub(fd,pl_sd,message2,gmlvl,sd->status.name); + sprintf(output, "%s %s", cmd, param); + memcpy(output2, output, sizeof(output2)); + message2 = output2; + return is_atcommand_sub(fd,pl_sd,message2,gmlvl); } } } - return is_atcommand_sub(fd,sd,message,gmlvl,sd->status.name); + return is_atcommand_sub(fd,sd,message,gmlvl); } @@ -8690,8 +9009,8 @@ int atcommand_config_read(const char* cfgName) if( line[0] == '/' && line[1] == '/' ) continue; - if( (sscanf(line, "%1023[^:]:%1023[^,],%1023s", w1, w2, w3)) != 3 - && ( sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2 && strcmpi(w1, "import") != 0 ) ) + if( (sscanf(line, "%1023[^:]:%1023[^,],%1023s", w1, w2, w3)) != 3 && ( sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2 + && strcmpi(w1, "import") != 0 ) && strcmpi(w1, "command_symbol") != 0 && strcmpi(w1, "char_symbol") != 0 ) continue; p = get_atcommandinfo_byname(w1); @@ -8699,8 +9018,16 @@ int atcommand_config_read(const char* cfgName) { p->level = atoi(w2); p->level = cap_value(p->level, 0, 100); - p->level2 = atoi(w3); - p->level2 = cap_value(p->level2, 0, 100); + if( (sscanf(line, "%1023[^:]:%1023s", w1, w2) == 2) && (sscanf(line, "%1023[^:]:%1023[^,],%1023s", w1, w2, w3)) != 3 ) + { + ShowWarning("atcommand_conf: setting %s:%d is deprecated! Please see atcommand_athena.conf for the new setting format.\n",w1,atoi(w2)); + ShowWarning("atcommand_conf: defaulting %s charcommand level to %d.\n",w1,atoi(w2)); + p->level2 = atoi(w2); + } + else { + p->level2 = atoi(w3); + p->level2 = cap_value(p->level2, 0, 100); + } } else if( strcmpi(w1, "import") == 0 ) @@ -8713,6 +9040,14 @@ int atcommand_config_read(const char* cfgName) w2[0] != '$' && // symbol of guild chat speaking w2[0] != '#' ) // remote symbol atcommand_symbol = w2[0]; + else + if( strcmpi(w1, "char_symbol") == 0 && + w2[0] > 31 && + w2[0] != '/' && + w2[0] != '%' && + w2[0] != '$' && + w2[0] != '@' ) + charcommand_symbol = w2[0]; else ShowWarning("Unknown setting '%s' in file %s\n", w1, cfgName); } diff --git a/src/map/atcommand.h b/src/map/atcommand.h index 03cbbfaf8..f74adb9f5 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -18,7 +18,7 @@ extern char charcommand_symbol; typedef int (*AtCommandFunc)(const int fd, struct map_session_data* sd, const char* command, const char* message); bool is_atcommand(const int fd, struct map_session_data* sd, const char* message); -bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl, const char charname[NAME_LENGTH]); +bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str, int gmlvl); int get_atcommand_level(const AtCommandFunc func); void do_init_atcommand(void); diff --git a/src/map/map.c b/src/map/map.c index dfefa7671..8c5e227db 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -2934,7 +2934,7 @@ int parse_console(char* buf) ShowInfo("Type of command: '%s' || Command: '%s' || Map: '%s' Coords: %d %d\n", type, command, map, x, y); if( n == 5 && strcmpi("admin",type) == 0 ){ - if( !is_atcommand_sub(sd.fd,&sd,command,99,sd.status.name) ) + if( !is_atcommand_sub(sd.fd,&sd,command,99) ) ShowInfo("Console: not atcommand\n"); } else if( n == 2 && strcmpi("server",type) == 0 ){ if( strcmpi("shutdown",command) == 0 || diff --git a/src/map/script.c b/src/map/script.c index 64047d46d..a40a50bd7 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -10685,7 +10685,7 @@ BUILDIN_FUNC(atcommand) cmd++; } - is_atcommand_sub(fd, sd, cmd, 99, sd->status.name); + is_atcommand_sub(fd, sd, cmd, 99); return 0; } @@ -10729,7 +10729,7 @@ BUILDIN_FUNC(charcommand) sprintf(output, "%s %s", cmd, param); memcpy(temp, output, sizeof(output)); message = temp; - is_atcommand_sub(fd,sd,message,99,sd->status.name); + is_atcommand_sub(fd,sd,message,99); } } } -- cgit v1.2.3-70-g09d2 From 318c755672a348465481047a2642a93db4c5c65e Mon Sep 17 00:00:00 2001 From: sketchyphoenix Date: Mon, 29 Dec 2008 04:36:14 +0000 Subject: * Added missing command #delitem. * Fixed charcommand behavior where those that can accept a name with no additional parameters being able to execute under said player's name with the name as a parameter.(bugreport:2601) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13420 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 4 ++ conf/atcommand_athena.conf | 3 ++ src/map/atcommand.c | 93 +++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 90 insertions(+), 10 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index fc319d3ee..53a90af7f 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,10 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2008/12/28 + * Added missing command #delitem. [SketchyPhoenix] + * Fixed charcommand behavior where those that can accept a name with no additional parameters + being able to execute under said player's name with the name as a parameter. (bugreport:2601) 2008/12/25 * Extended sv_escape_c to escape '\a','\b','\t','\v','\f','\?' characters to their respective representations instead of octal. [FlavioJS] diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index ec7a1af57..49526631c 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -508,6 +508,9 @@ item: 60,60 // Creates a complet item (card, etc...) of your choosing, either Item ID or Name. item2: 60,60 +// Deletes an item of your choosing, either Item ID or Name. +delitem: 60,60 + // Kill another character without hitting them. kill: 60,60 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 51142cf97..81d758513 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8549,6 +8549,66 @@ int atcommand_stats(const int fd, struct map_session_data* sd, const char* comma return 0; } +int atcommand_delitem(const int fd, struct map_session_data* sd, const char* command, const char* message) +{ + char item_name[100]; + int i, number = 0, item_id, item_position, count; + struct item_data *item_data; + char output[200]; + + nullpo_retr(-1, sd); + + memset(item_name, '\0', sizeof(item_name)); + memset(output, '\0', sizeof(output)); + + if (!message || !*message || ( + sscanf(message, "\"%99[^\"]\" %d", item_name, &number) < 2 && + sscanf(message, "%s %d", item_name, &number) < 2 + ) || number < 1) { + clif_displaymessage(fd, "Please, enter an item name/id, a quantity and a player name (usage: #delitem )."); + return -1; + } + + item_id = 0; + if ((item_data = itemdb_searchname(item_name)) != NULL || + (item_data = itemdb_exists(atoi(item_name))) != NULL) + item_id = item_data->nameid; + + if (item_id > 500) { + item_position = pc_search_inventory(sd, item_id); + if (item_position >= 0) { + count = 0; + for(i = 0; i < number && item_position >= 0; i++) { + + //Logs (A)dmins items [Lupus] + if(log_config.enable_logs&0x400) + log_pick_pc(sd, "A", sd->status.inventory[item_position].nameid, -1, &sd->status.inventory[item_position]); + + pc_delitem(sd, item_position, 1, 0); + count++; + item_position = pc_search_inventory(sd, item_id); // for next loop + } + sprintf(output, msg_txt(113), count); // %d item(s) removed by a GM. + clif_displaymessage(sd->fd, output); + if (number == count) + sprintf(output, msg_txt(114), count); // %d item(s) removed from the player. + else + sprintf(output, msg_txt(115), count, count, number); // %d item(s) removed. Player had only %d on %d items. + clif_displaymessage(fd, output); + } else { + clif_displaymessage(fd, msg_txt(116)); // Character does not have the item. + return -1; + } + } + else + { + clif_displaymessage(fd, msg_txt(19)); // Invalid item ID or name. + return -1; + } + + return 0; +} + /*========================================== @@ -8851,6 +8911,7 @@ AtCommandInfo atcommand_info[] = { { "cartlist", 40,40, atcommand_cart_list }, { "itemlist", 40,40, atcommand_itemlist }, { "stats", 40,40, atcommand_stats }, + { "delitem", 60,60, atcommand_delitem }, }; @@ -8965,13 +9026,15 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message if (*message == charcommand_symbol) { + //Fail any #commands without names. if( sscanf(message, "%99s %99[^\n]", cmd, param) == 1 ) { - sprintf(output, "%s failed. Please enter a player name.", cmd); + sprintf(output, "Charcommand failed. Usage: # .", cmd); clif_displaymessage(fd, output); return true; } - else if (sscanf(message, "%99s \"%23[^\"]\" %99[^\n]", cmd, charname, param) > 1 - || sscanf(message, "%99s %23s %99[^\n]", cmd, charname, param) > 1) + //Checks to see if #command has a name or a name + parameters. + else if (sscanf(message, "%99s \"%23[^\"]\" %99[^\n]", cmd, charname, param) >= 2 + || sscanf(message, "%99s %23s %99[^\n]", cmd, charname, param) >= 2) { if ( (pl_sd = map_nick2sd(charname)) == NULL ) { @@ -8980,14 +9043,24 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message return true; } else { - //we pass fd instead of pl_sd->fd otherwise command output messages are sent to the target - //also, the name is taken out of the message since it's not needed anymore - sprintf(output, "%s %s", cmd, param); - memcpy(output2, output, sizeof(output2)); - message2 = output2; - return is_atcommand_sub(fd,pl_sd,message2,gmlvl); + //If it's just a name and no params, send the command with no name. Otherwise, send it with the parameters. + if (sscanf(message, "%99s \"%23[^\"]\" %99[^\n]", cmd, charname, param) == 2 + || sscanf(message, "%99s %23s %99[^\n]", cmd, charname, param) == 2) + { + sprintf(output, "%s", cmd); + memcpy(output2, output, sizeof(output2)); + message2 = output2; + //NOTE: fd is passed to is_atcommand_sub instead of pl_sd->fd because we want output sent to the user of the command, not the target. + return is_atcommand_sub(fd,pl_sd,message2,gmlvl); + } + else { + sprintf(output, "%s %s", cmd, param); + memcpy(output2, output, sizeof(output2)); + message2 = output2; + return is_atcommand_sub(fd,pl_sd,message2,gmlvl); + } } - } + } } return is_atcommand_sub(fd,sd,message,gmlvl); -- cgit v1.2.3-70-g09d2 From 4981f26566e9d98ef813b5f2944dac86f1856421 Mon Sep 17 00:00:00 2001 From: sketchyphoenix Date: Mon, 5 Jan 2009 19:10:03 +0000 Subject: Added @charcommands to return a list of available charcommands (bugreport:2630) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13435 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 1 + conf/Changelog.txt | 2 ++ conf/atcommand_athena.conf | 3 +++ src/map/atcommand.c | 42 +++++++----------------------------------- 4 files changed, 13 insertions(+), 35 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 7706c47ed..696d4a028 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -7,6 +7,7 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. * Fixed @mobsearch and @showmobs (bugreport:2481) [ultramage] - now only search for mobs on the same map as the caller - now properly distinguish between dead and alive mobs + * Added @charcommands to return a list of available charcommands (bugreport:2630) [SketchyPhoenix] 2008/12/31 * Changes to the script engine: [FlavioJS] - new stack datatype script_retinfo for C_RETINFO to hold all the return state info diff --git a/conf/Changelog.txt b/conf/Changelog.txt index 2e5abc674..543d6dc47 100644 --- a/conf/Changelog.txt +++ b/conf/Changelog.txt @@ -1,4 +1,6 @@ Date Added +2009/1/5 + * Added @charcommands to return a list of available # commands [SketchyPhoenix] 2008/12/26 * Rev. 13444 Marked new Morroc fields as nomemo. [L0ne_W0lf] * Rev. 13415 Commented out maps no longer accessable with 12.1. [L0ne_W0lf] diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 49526631c..04dbec4f2 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -52,6 +52,9 @@ char_symbol: # // Displays a list of @ commands available to the player. commands: 1,1 +// Displays a list of # commands available to the player. +charcommands: 1,1 + // Displays the server rates. rates: 1,1 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index bf052f5ba..a8d139dc1 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8916,6 +8916,7 @@ AtCommandInfo atcommand_info[] = { { "itemlist", 40,40, atcommand_itemlist }, { "stats", 40,40, atcommand_stats }, { "delitem", 60,60, atcommand_delitem }, + { "charcommands", 1,1, atcommand_commands }, }; @@ -9002,8 +9003,7 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message char cmd[100]; char param[100]; char output[200]; - char output2[200]; - const char* message2; + char message2[200]; int gmlvl = pc_isGM(sd); @@ -9051,16 +9051,12 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message if (sscanf(message, "%99s \"%23[^\"]\" %99[^\n]", cmd, charname, param) == 2 || sscanf(message, "%99s %23s %99[^\n]", cmd, charname, param) == 2) { - sprintf(output, "%s", cmd); - memcpy(output2, output, sizeof(output2)); - message2 = output2; + sprintf(message2, "%s", cmd); //NOTE: fd is passed to is_atcommand_sub instead of pl_sd->fd because we want output sent to the user of the command, not the target. return is_atcommand_sub(fd,pl_sd,message2,gmlvl); } else { - sprintf(output, "%s %s", cmd, param); - memcpy(output2, output, sizeof(output2)); - message2 = output2; + sprintf(message2, "%s %s", cmd, param); return is_atcommand_sub(fd,pl_sd,message2,gmlvl); } } @@ -9169,31 +9165,9 @@ int atcommand_commands(const int fd, struct map_session_data* sd, const char* co { unsigned int slen; - if( gm_lvl < atcommand_info[i].level ) + if( gm_lvl < atcommand_info[i].level && stristr(command,"commands") ) continue; - - slen = (unsigned int)strlen(atcommand_info[i].command); - - // flush the text buffer if this command won't fit into it - if( slen + cur - line_buff >= CHATBOX_SIZE ) - { - clif_displaymessage(fd,line_buff); - cur = line_buff; - memset(line_buff,' ',CHATBOX_SIZE); - line_buff[CHATBOX_SIZE-1] = 0; - } - - memcpy(cur,atcommand_info[i].command,slen); - cur += slen+(10-slen%10); - - count++; - } - - for( i = 0; i < ARRAYLENGTH(atcommand_info); i++ ) - { - unsigned int slen; - - if( gm_lvl < atcommand_info[i].level2 ) + if( gm_lvl < atcommand_info[i].level2 && stristr(command,"charcommands") ) continue; slen = (unsigned int)strlen(atcommand_info[i].command); @@ -9210,15 +9184,13 @@ int atcommand_commands(const int fd, struct map_session_data* sd, const char* co memcpy(cur,atcommand_info[i].command,slen); cur += slen+(10-slen%10); - count2++; + count++; } clif_displaymessage(fd,line_buff); sprintf(atcmd_output, msg_txt(274), count); // "%d commands found." clif_displaymessage(fd, atcmd_output); - sprintf(atcmd_output, "%d charcommands found.", count2); - clif_displaymessage(fd, atcmd_output); return 0; } \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 4ae49e2bfd82567f5747eaed81f02f515e556441 Mon Sep 17 00:00:00 2001 From: sketchyphoenix Date: Mon, 12 Jan 2009 17:49:10 +0000 Subject: * #command parsing cleaned up. - Fixed charname reading problems from r13441 - Corrected agitend typo to agitend2 (bugreport:2654) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13444 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 3 +++ conf/Changelog.txt | 2 ++ conf/atcommand_athena.conf | 2 +- src/map/atcommand.c | 60 ++++++++++++++++++++++++---------------------- 4 files changed, 38 insertions(+), 29 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index c1b8e81bf..708fc491a 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -5,6 +5,9 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2009/01/12 * Added regen_db to reduce hp/sp processing delays (bugreport:2256) [ultramage] + * #command parsing cleaned up. [SketchyPhoenix] + - Fixed charname reading problems from r13441 + - Corrected agitend typo to agitend2 (bugreport:2654) 2009/01/05 * Fixed @mobsearch and @showmobs (bugreport:2481) [ultramage] - now only search for mobs on the same map as the caller diff --git a/conf/Changelog.txt b/conf/Changelog.txt index 543d6dc47..6d4788d3d 100644 --- a/conf/Changelog.txt +++ b/conf/Changelog.txt @@ -1,4 +1,6 @@ Date Added +2009/1/12 + * Second agitend corrected to agitend2 [SketchyPhoenix] 2009/1/5 * Added @charcommands to return a list of available # commands [SketchyPhoenix] 2008/12/26 diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 04dbec4f2..8b503baf9 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -643,7 +643,7 @@ homshuffle: 60,60 // WoE 2 start/stop commands agitstart2: 60,60 -agitend: 60,60 +agitend2: 60,60 // Resets player stats streset: 60,60 diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 21d467744..4fa21908b 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8984,6 +8984,7 @@ bool is_atcommand_sub(const int fd, struct map_session_data* sd, const char* str if( log_config.gm && info->level >= log_config.gm && *str == atcommand_symbol ) log_atcommand(sd, str); + // if( log_config.gm && info->level2 >= log_config.gm && *str == charcommand_symbol && (ssd = (struct map_session_data *)session[fd]->session_data) != NULL ) log_atcommand(ssd, str); @@ -9003,13 +9004,13 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message { struct map_session_data* pl_sd; - char charname[NAME_LENGTH]; + char charname[NAME_LENGTH], charname2[NAME_LENGTH]; char cmd[100]; - char param[100]; + char param[100], param2[100]; char output[200]; char message2[200]; - int gmlvl = pc_isGM(sd); + int x, y, z, gmlvl = pc_isGM(sd); nullpo_retr(false, sd); @@ -9035,35 +9036,38 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message if (*message == charcommand_symbol) { //Checks to see if #command has a name or a name + parameters. - if (sscanf(message, "%99s \"%23[^\"]\" %99[^\n]", cmd, charname, param) >= 2 - || sscanf(message, "%99s %23s %99[^\n]", cmd, charname, param) >= 2) + x = sscanf(message, "%99s \"%23[^\"]\" %99[^\n]", cmd, charname, param); + y = sscanf(message, "%99s %23s %99[^\n]", cmd, charname2, param2); + + //x being > 1 is unique to its proper syntax + z = ( x > 1 ) ? x : y; + + if ( (pl_sd = map_nick2sd(charname)) == NULL && ( (pl_sd = map_nick2sd(charname2)) == NULL ) ) { - if ( (pl_sd = map_nick2sd(charname)) == NULL ) - { - sprintf(output, "%s failed. Player %s not found.", cmd, charname); - clif_displaymessage(fd, output); - return true; - } - else { - //If it's just a name and no params, send the command with no name. Otherwise, send it with the parameters. - if (sscanf(message, "%99s \"%23[^\"]\" %99[^\n]", cmd, charname, param) == 2 - || sscanf(message, "%99s %23s %99[^\n]", cmd, charname, param) == 2) - { - sprintf(message2, "%s", cmd); - //NOTE: fd is passed to is_atcommand_sub instead of pl_sd->fd because we want output sent to the user of the command, not the target. - return is_atcommand_sub(fd,pl_sd,message2,gmlvl); - } - else { - sprintf(message2, "%s %s", cmd, param); - return is_atcommand_sub(fd,pl_sd,message2,gmlvl); - } - } - } - else { - sprintf(output, "Charcommand failed. Usage: # ."); + sprintf(output, "%s failed. Player not found.", cmd); clif_displaymessage(fd, output); return true; } + + if ( x == 3 && x > y ) { + sprintf(message2, "%s %s", cmd, param); + return is_atcommand_sub(fd,pl_sd,message2,gmlvl); + } + else if ( y > 2 ) { + sprintf(message2, "%s %s", cmd, param2); + return is_atcommand_sub(fd,pl_sd,message2,gmlvl); + } + + //Regardless of what style the #command is used, if it's correct, it will always have + //this value if there is no parameter. + if ( z == 2 ) { + sprintf(message2, "%s", cmd); + return is_atcommand_sub(fd,pl_sd,message2,gmlvl); + } + + sprintf(output, "Charcommand failed. Usage: # ."); + clif_displaymessage(fd, output); + return true; } return is_atcommand_sub(fd,sd,message,gmlvl); -- cgit v1.2.3-70-g09d2 From 5defa49ae0fcc5713ec20a062cb6d070359dca95 Mon Sep 17 00:00:00 2001 From: brianluau Date: Mon, 8 Jun 2009 16:39:54 +0000 Subject: - Added 'font' config in atcommand_athena.conf (bugreport:3123) - Changed some defaults in src to match defaults in config. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13865 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 3 +++ src/map/atcommand.c | 28 ++++++++++++++-------------- 2 files changed, 17 insertions(+), 14 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 8b503baf9..78b78343b 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -144,6 +144,9 @@ homstats: 1,1 // Kill Steal Protection noks: 1,1 +// Set Font +font: 1,1 + //--------------------------- // 10: Super player+ commands diff --git a/src/map/atcommand.c b/src/map/atcommand.c index a7334130f..54e826913 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8891,23 +8891,23 @@ AtCommandInfo atcommand_info[] = { { "homshuffle", 60,60, atcommand_homshuffle }, { "showmobs", 10,10, atcommand_showmobs }, { "feelreset", 10,10, atcommand_feelreset }, - { "auction", 60,60, atcommand_auction }, + { "auction", 1,1, atcommand_auction }, { "mail", 1,1, atcommand_mail }, - { "noks", 0,0, atcommand_ksprotection }, - { "allowks", 6,6, atcommand_allowks }, + { "noks", 1,1, atcommand_ksprotection }, + { "allowks", 40,40, atcommand_allowks }, { "cash", 60,60, atcommand_cash }, { "points", 60,60, atcommand_cash }, - { "agitstart2", 60,60, atcommand_agitstart2 }, - { "agitend2", 60,60, atcommand_agitend2 }, - { "skreset", 60,60, atcommand_resetskill }, - { "streset", 60,60, atcommand_resetstat }, - { "storagelist", 40,40, atcommand_storagelist }, - { "cartlist", 40,40, atcommand_cart_list }, - { "itemlist", 40,40, atcommand_itemlist }, - { "stats", 40,40, atcommand_stats }, - { "delitem", 60,60, atcommand_delitem }, - { "charcommands", 1,1, atcommand_commands }, - { "font", 1,1, atcommand_font }, + { "agitstart2", 60,60, atcommand_agitstart2 }, + { "agitend2", 60,60, atcommand_agitend2 }, + { "skreset", 60,60, atcommand_resetskill }, + { "streset", 60,60, atcommand_resetstat }, + { "storagelist", 40,40, atcommand_storagelist }, + { "cartlist", 40,40, atcommand_cart_list }, + { "itemlist", 40,40, atcommand_itemlist }, + { "stats", 40,40, atcommand_stats }, + { "delitem", 60,60, atcommand_delitem }, + { "charcommands", 1,1, atcommand_commands }, + { "font", 1,1, atcommand_font }, }; -- cgit v1.2.3-70-g09d2 From 01dc34c9a73819dfbf0e8242a9ba7e572d76955d Mon Sep 17 00:00:00 2001 From: brianluau Date: Mon, 10 May 2010 00:53:22 +0000 Subject: - Fixed the Juice Maker's "As many as I can" option. (bugreport:4155) - Removed a duplicate 'next' in Kiel Hyre Quest. (bugreport:4222) - Fixed 'checkequipedcard' not counter-checking for signed items. (bugreport:4231) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14294 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 1 + npc/quests/Kiel_Hyre_Quest.txt | 1 - npc/quests/juice_maker.txt | 2 ++ src/map/atcommand.c | 2 +- src/map/script.c | 2 ++ 5 files changed, 6 insertions(+), 2 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 78b78343b..b34ce4fcc 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -269,6 +269,7 @@ size: 20,20 // Can command what other npcs (by name) can say. npctalk: 20,20 +npctalkc: 20,20 //-------------------- // 40: Sub-GM commands diff --git a/npc/quests/Kiel_Hyre_Quest.txt b/npc/quests/Kiel_Hyre_Quest.txt index 04ee73837..49750fc43 100644 --- a/npc/quests/Kiel_Hyre_Quest.txt +++ b/npc/quests/Kiel_Hyre_Quest.txt @@ -1714,7 +1714,6 @@ kh_school,178,180,4 script Elly 895,{ mes "Grey Box you found inside"; mes "Kiel Hyre's Cottage.^000000"; next; - next; mes "^3355FFYou successfully open the"; mes "Grey Box with the Golden Key,"; mes "and find a Blue Keycard, along"; diff --git a/npc/quests/juice_maker.txt b/npc/quests/juice_maker.txt index fa9c7145d..d3745a7de 100644 --- a/npc/quests/juice_maker.txt +++ b/npc/quests/juice_maker.txt @@ -228,6 +228,8 @@ payon_in03,188,146,5 script Marx Hansen#juice 86,{ switch(select("As many as I can.:I want a certain amount.:Cancel.")) { case 1: set .@make,countitem(.@fruit); + if (countitem(713) < .@make) set .@make, countitem(713); + if (Zeny/3 < .@make) set .@make, Zeny/3; break; case 2: mes "[Merchant Marx Hansen]"; diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 7a4690efb..e5567aa2a 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8746,7 +8746,7 @@ AtCommandInfo atcommand_info[] = { { "mobsearch", 10,10, atcommand_mobsearch }, { "cleanmap", 40,40, atcommand_cleanmap }, { "npctalk", 20,20, atcommand_npctalk }, - { "npctalkc", 20,20, atcommand_npctalk }, + { "npctalkc", 20,20, atcommand_npctalk }, { "pettalk", 10,10, atcommand_pettalk }, { "users", 40,40, atcommand_users }, { "reset", 40,40, atcommand_reset }, diff --git a/src/map/script.c b/src/map/script.c index 19fb01cc3..12f3a8e23 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -11151,6 +11151,8 @@ BUILDIN_FUNC(checkequipedcard) if(sd){ for(i=0;istatus.inventory[i].nameid > 0 && sd->status.inventory[i].amount && sd->inventory_data[i]){ + if (itemdb_isspecial(sd->status.inventory[i].card[0])) + continue; for(n=0;ninventory_data[i]->slot;n++){ if(sd->status.inventory[i].card[n]==c){ script_pushint(st,1); -- cgit v1.2.3-70-g09d2 From dbb6b02733e07c315435d29e46b21e7a072ce3b0 Mon Sep 17 00:00:00 2001 From: ai4rei Date: Sat, 29 Jan 2011 11:30:24 +0000 Subject: * Removed @aw/@away which duplicates and collides with client's /am (away message) (bugreport:1235, topic:163083, since r4351). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@14686 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 1 + conf/atcommand_athena.conf | 4 ---- conf/msg_athena.conf | 8 +------- src/map/atcommand.c | 26 -------------------------- src/map/clif.c | 13 ------------- src/map/pc.h | 2 -- 6 files changed, 2 insertions(+), 52 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 51e294de6..4181a6bfc 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -1,6 +1,7 @@ Date Added 2011/01/29 + * Removed @aw/@away which duplicates and collides with client's /am (away message) (bugreport:1235, topic:163083, since r4351). [Ai4rei] * Fixed a map-server crash when invalid items are deleted (option 'item_check') from a logging-in character (bugreport:2604). [Ai4rei] - This removes the pc_checkitem call from pc_authok, as the check is done in clif_parse_LoadEndAck as well, after first status calc has taken place. - Inventory list is now sent before pc_checkitem in clif_parse_LoadEndAck, so that deleted items do not show up as 'unknown item'. diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index b34ce4fcc..6bbedeb8c 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -124,10 +124,6 @@ accept: 1,1 reject: 1,1 leave: 1,1 -// Away messsage -away: 1,1 -aw: 1,1 - // Main chat main: 1,1 diff --git a/conf/msg_athena.conf b/conf/msg_athena.conf index ef9fda3da..1c9b994c0 100644 --- a/conf/msg_athena.conf +++ b/conf/msg_athena.conf @@ -453,13 +453,7 @@ //541: %.0s%.0sSomeone got %s 542: '%s' stole %s's %s (chance: %0.02f%%) //542: %.0s%.0sSomeone stole %s -// @Away message bits -543: (Automessage has been sent) -544: Away [AT] - "%s" -545: Away - "%s" -546: Away automessage has been activated. -547: Away automessage has been disabled. -548: Usage: @away,@aw . Enter empty message for disable it. +// 543~548 are not used (previously @away messages) // @Autotrade 549: You should be vending to use @autotrade. diff --git a/src/map/atcommand.c b/src/map/atcommand.c index dce7441df..cebd881ce 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -8021,30 +8021,6 @@ ACMD_FUNC(cash) return 0; } -/*=================================== - * Away message (@away, @aw) [LuzZza] - *-----------------------------------*/ -ACMD_FUNC(away) -{ - if(strlen(message) > 0) { - if(strlen(message) > 128) - return -1; - strcpy(sd->away_message, message); - //"Away automessage has been activated." - clif_displaymessage(fd, msg_txt(546)); - } else { - if(strlen(sd->away_message) > 0) { - sd->away_message[0] = 0; - //"Away automessage has been disabled." - clif_displaymessage(fd, msg_txt(547)); - return 0; - } - //"Usage: @away,@aw . Enter empty message for disable it." - clif_displaymessage(fd, msg_txt(548)); - } - return 0; -} - // @clone/@slaveclone/@evilclone [Valaris] ACMD_FUNC(clone) { @@ -8878,8 +8854,6 @@ AtCommandInfo atcommand_info[] = { { "leave", 1,1, atcommand_leave }, { "accept", 1,1, atcommand_accept }, { "reject", 1,1, atcommand_reject }, - { "away", 1,1, atcommand_away }, - { "aw", 1,1, atcommand_away }, { "main", 1,1, atcommand_main }, { "clone", 50,50, atcommand_clone }, { "slaveclone", 50,50, atcommand_clone }, diff --git a/src/map/clif.c b/src/map/clif.c index 9831ef4c2..b724ddbab 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9283,19 +9283,6 @@ void clif_parse_WisMessage(int fd, struct map_session_data* sd) // notify sender of success clif_wis_end(fd, 0); // 0: success to send wisper - // if player has an auto-away message - if(dstsd->away_message[0] != '\0') - { - char output[256]; - sprintf(output, "%s %s", message, msg_txt(543)); // "(Automessage has been sent)" - clif_wis_message(dstsd->fd, sd->status.name, output, strlen(output) + 1); - if(dstsd->state.autotrade) - sprintf(output, msg_txt(544), dstsd->away_message); // "Away [AT] - "%s"" - else - sprintf(output, msg_txt(545), dstsd->away_message); // "Away - "%s"" - clif_wis_message(fd, dstsd->status.name, output, strlen(output) + 1); - return; - } // Normal message clif_wis_message(dstsd->fd, sd->status.name, message, messagelen); return; diff --git a/src/map/pc.h b/src/map/pc.h index 24d52a466..c48defbf5 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -384,8 +384,6 @@ struct map_session_data { int killerrid, killedrid; - char away_message[128]; // [LuzZza] - int cashPoints, kafraPoints; int rental_timer; -- cgit v1.2.3-70-g09d2 From 372828e4de3c2474891380c30ce94ce1d72e9127 Mon Sep 17 00:00:00 2001 From: brianluau Date: Mon, 12 Dec 2011 03:08:53 +0000 Subject: - Fixed some default #command levels that were raised in r13403. (bugreport:2615) - Changed default GM level to 100 for some commands that don't make sense to be run as #commands. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15071 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 240 ++++++++++++++++++++--------------------- npc/guides/guides_brasilis.txt | 1 - 2 files changed, 120 insertions(+), 121 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 6bbedeb8c..6a8ae3de2 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -65,7 +65,7 @@ uptime: 1,1 showdelay: 1,1 // Displays current levels and % progress. -exp: 1,1 +exp: 1,40 // To change your (own) email (characters protection) // note: this command doesn't check email itself, but check structure of the email (xxx@xxx) @@ -85,7 +85,7 @@ ii: 1,1 whodrops: 1,1 // Syncs the player's position on the client with the one stored on the server. -refresh: 1,1 +refresh: 1,40 // Give server time. (6 same commands) time: 1,1 @@ -100,7 +100,7 @@ version: 1,1 die: 1,1 // Enables you to rename your pet. -petrename: 1,1 +petrename: 1,50 // Organize a new party, with you as the party leader. party: 1,1 @@ -131,11 +131,11 @@ main: 1,1 noask: 1,1 // Displays remaining jail time -jailtime: 1,1 +jailtime: 1,40 // Homunculus commands for players -hominfo: 1,1 -homstats: 1,1 +hominfo: 1,40 +homstats: 1,40 // Kill Steal Protection noks: 1,1 @@ -188,7 +188,7 @@ showmobs: 10,10 whereis: 10,10 // Resets a Star Gladiator's marked maps -feelreset: 10,10 +feelreset: 10,60 //---------------------- // 20: Mediator commands @@ -211,17 +211,17 @@ gmotd: 20,20 follow: 20,20 // Sends a request to all connected GMs (via the gm whisper system) -request: 20,20 +request: 20,100 // Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). kick: 20,20 // Changes your appearance. -model: 20,20 +model: 20,50 // To get a peco to (un)ride (2 same commands). -mountpeco: 20,20 -mount: 20,20 +mountpeco: 20,50 +mount: 20,50 // Returns list of logged in characters with their position (2 same commands). who: 20,20 @@ -248,7 +248,7 @@ whomap3: 20,20 whogm: 20,20 // Change your appearence to other players to a mob. -disguise: 20,20 +disguise: 20,60 // Restore your normal appearance. undisguise: 20,20 @@ -258,14 +258,14 @@ undisguise: 20,20 me: 20,20 // Changes your name to your choice temporarily. -fakename: 20,20 +fakename: 20,50 // Changes your size. -size: 20,20 +size: 20,50 // Can command what other npcs (by name) can say. -npctalk: 20,20 -npctalkc: 20,20 +npctalk: 20,100 +npctalkc: 20,100 //-------------------- // 40: Sub-GM commands @@ -284,32 +284,32 @@ kamib: 40,40 kamic: 40,40 // Enables GvG on a map (2 same commands). -gvgon: 40,40 -gpvpon: 40,40 +gvgon: 40,100 +gpvpon: 40,100 // Turns GvG (Guild vs. Guild) off on a map (2 same commands). -gvgoff: 40,40 -gpvpoff: 40,40 +gvgoff: 40,100 +gpvpoff: 40,100 // Activate/Deactivate kill steal protection on a map -allowks: 40,40 +allowks: 40,100 // Modifies your HP/SP. -heal: 40,40 +heal: 40,60 // GM Hide (total invisibility to characters and monsters) (1 command + /hide). -hide: 40,40 +hide: 40,60 // Changes your job to one you specify (2 same commands). -job: 40,40 -jobchange: 40,40 +job: 40,60 +jobchange: 40,60 // Enables you to to jump randomly on a map (that you are already on). jump: 40,40 // Warps you to your last save point (2 same commands). -load: 40,40 -return: 40,40 +load: 40,60 +return: 40,60 // Warps you to a specific npc tonpc: 40,40 @@ -318,52 +318,52 @@ tonpc: 40,40 memo: 40,40 // Set your character display options. (Visual effects of your character) -option: 40,40 +option: 40,60 // Sets the level of intemecy of your pet. -petfriendly: 40,40 +petfriendly: 40,50 // Sets hunger level of your pet. -pethungry: 40,40 +pethungry: 40,50 // Turns PvP (Person vs. Person) off on a map. -pvpoff: 40,40 +pvpoff: 40,100 // Enables PvP on a map. -pvpon: 40,40 +pvpon: 40,100 // Permanently adds/removes a quest skill -questskill: 40,40 -lostskill: 40,40 +questskill: 40,60 +lostskill: 40,60 // Sets the speed you can walk/attack at. Default is 150. -speed: 40,40 +speed: 40,60 // Summons spirit spheres around you. -spiritball: 40,40 +spiritball: 40,60 // Warp yourself to a certain map, at (x,y) coordinates (2 same commands). -mapmove: 40,40 // (also /mm or /mapmove) -rura: 40,40 -warp: 40,40 +mapmove: 40,60 // (also /mm or /mapmove) +rura: 40,60 +warp: 40,60 // Changes GM clothes color (2 same commands) -dye: 40,40 -ccolor: 40,40 +dye: 40,50 +ccolor: 40,50 // Changes GM hair style (2 same commands) hairstyle: 40,40 hstyle: 40,40 // Changes GM hair color (2 same commands) -haircolor: 40,40 -hcolor: 40,40 +haircolor: 40,50 +hcolor: 40,50 // Deletes all your items. -itemreset: 40,40 +itemreset: 40,60 // Does a skill/stat reset. -reset: 40,40 +reset: 40,60 // Displays distribution of players on the server per map (% on each map which has players) users: 40,40 @@ -375,7 +375,7 @@ cleanmap: 40,40 killmonster2: 40,40 // Sets your spawn point (aka save point). -save: 40,40 +save: 40,60 // Do some visual effect on your character effect: 40,40 @@ -387,13 +387,13 @@ misceffect: 40,40 identify: 40,40 // Drop all your items -dropall: 40,40 +dropall: 40,60 // Store all your items -storeall: 40,40 +storeall: 40,60 // Allow other players to hit you out of PvP -killable: 40,40 +killable: 40,60 // Look up a skill by name skillid: 40,40 @@ -433,7 +433,7 @@ stats: 40,40 guild: 50,50 // Brings up your guild storage wherever you are. -gstorage: 50,50 +gstorage: 50,60 // Spawns a monster, and a certain amount (2 same commands + /monster). monster: 50,50 @@ -466,10 +466,10 @@ cash: 60,60 points: 60,60 // Starts Guild Wars -agitstart: 60,60 +agitstart: 60,100 // Ends Guild Wars -agitend: 60,60 +agitend: 60,100 // Resurects yourself. alive: 60,60 @@ -539,7 +539,7 @@ produce: 60,60 recall: 60,60 // Refines all weapons in your items list. -refine: 60,60 +refine: 60,80 // Will repair all broken items in inventory. repairall: 60,60 @@ -585,34 +585,34 @@ guildspy: 60,60 partyspy: 60,60 // Gives you money (zeny) of desired amount. -zeny: 60,60 +zeny: 60,80 // To block definitively a player (2 same commands) -block: 60,60 -charblock: 60,60 +block: 60,100 +charblock: 60,100 // To unblock a player (2 same commands) -unblock: 60,60 -charunblock: 60,60 +unblock: 60,100 +charunblock: 60,100 // To ban a player for a limited time (4 same commands) -ban: 60,60 -banish: 60,60 -charban: 60,60 -charbanish: 60,60 +ban: 60,100 +banish: 60,100 +charban: 60,100 +charbanish: 60,100 // To unban a player (4 same commands) -unban: 60,60 -unbanish: 60,60 -charunban: 60,60 -charunbanish: 60,60 +unban: 60,100 +unbanish: 60,100 +charunban: 60,100 +charunbanish: 60,100 // To send specified character in jails -jail: 60,60 +jail: 60,100 // To discharge a prisoner (2 same commands) -unjail: 60,60 -discharge: 60,60 +unjail: 60,100 +discharge: 60,100 // Timed jailing jailfor: 60,60 @@ -642,8 +642,8 @@ homhungry: 60,60 homshuffle: 60,60 // WoE 2 start/stop commands -agitstart2: 60,60 -agitend2: 60,60 +agitstart2: 60,100 +agitend2: 60,100 // Resets player stats streset: 60,60 @@ -655,17 +655,17 @@ skreset: 60,60 //---------------------- // 80: GM Chief commands -// Set the map you are on to day. -day: 80,80 +// Set the server to day. +day: 80,100 // Kills everyone on the server. -doom: 80,80 +doom: 80,100 // Kills everyone on the map you are on. doommap: 80,80 -// Set the map you are currently on to night. -night: 80,80 +// Set the server to night. +night: 80,100 // Recalls Everyone To Your Coordinates recallall: 80,80 @@ -674,133 +674,133 @@ recallall: 80,80 raisemap: 80,80 // Revives all players on the server. -raise: 80,80 +raise: 80,100 // Hides a NPC. -hidenpc: 80,80 +hidenpc: 80,100 // Unhides a NPC. -shownpc: 80,80 +shownpc: 80,100 // Loads a Script -loadnpc: 80,80 +loadnpc: 80,100 // Unloads a NPC -unloadnpc: 80,80 +unloadnpc: 80,100 // Move a NPC -npcmove: 80,80 +npcmove: 80,100 // turn skills on for a map -skillon: 80,80 +skillon: 80,100 // turn skills off for a map -skilloff: 80,80 +skilloff: 80,100 // Mute a player (prevents talking, usage of skills and commands) -mute: 80,80 +mute: 80,100 // Unmute a player -unmute: 80,80 +unmute: 80,100 //--------------------------- // 99: Administrator commands // Disconnect all users from the server -kickall: 99,99 +kickall: 99,100 // Closes Map-Server -mapexit: 99,99 +mapexit: 99,100 // Used for testing packet sends from the client (debug function) -send: 99,99 +send: 99,100 // Give information about terrain/area (debug function) -gat: 99,99 +gat: 99,100 // Displays a status change without really applying it (debug function) -displaystatus: 99,99 +displaystatus: 99,100 // Displays the animation of a skill without really using it (debug function) -displayskill: 99,99 +displayskill: 99,100 // Shows information about the map -mapinfo: 99,99 +mapinfo: 99,100 // Set Map Flags (WIP) -mapflag: 99,99 +mapflag: 99,100 // Re-load item database (admin command) -reloaditemdb: 99,99 +reloaditemdb: 99,100 // Re-load monsters database (admin command) -reloadmobdb: 99,99 +reloadmobdb: 99,100 // Re-load skills database (admin command) -reloadskilldb: 99,99 +reloadskilldb: 99,100 // Re-load scripts (admin command) -reloadscript: 99,99 +reloadscript: 99,100 // Change a battle_config flag without rebooting server -setbattleflag: 99,99 +setbattleflag: 99,100 // Re-load gm command config (admin command) -reloadatcommand: 99,99 +reloadatcommand: 99,100 // Re-load battle config (admin command) // Note that some player config settings won't take effect until relog // (display exp, display zeny, display skill delay fail, ...) -reloadbattleconf: 99,99 +reloadbattleconf: 99,100 // Re-load status database (admin command) -reloadstatusdb: 99,99 +reloadstatusdb: 99,100 // Re-load player info database (admin command) -reloadpcdb: 99,99 +reloadpcdb: 99,100 // Re-load the Message of the Day (admin command) -reloadmotd: 99,99 +reloadmotd: 99,100 // Changes the GM level of another character // (lasts until reboot, or gm list reload) -adjgmlvl: 99,99 +adjgmlvl: 99,100 // Changes the required GM level of an @ command // (effect lasts until restart or command reload) -adjcmdlvl: 99,99 +adjcmdlvl: 99,100 // [Un]Disguise All Players (admin command) -disguiseall: 99,99 -undisguiseall: 99,99 +disguiseall: 99,100 +undisguiseall: 99,100 // Mutes every player on screen (admin command) -mutearea: 99,99 -stfu: 99,99 +mutearea: 99,100 +stfu: 99,100 // Makes you immune to attacks (monsters/players/skills cannot target/hit you, admin command) -monsterignore: 99,99 -battleignore: 99,99 +monsterignore: 99,100 +battleignore: 99,100 //--------------------------------------------------------------- // 99: Weather effects -snow: 99,99 +snow: 99,100 -clouds: 99,99 +clouds: 99,100 -clouds2: 99,99 +clouds2: 99,100 -fog: 99,99 +fog: 99,100 -fireworks: 99,99 +fireworks: 99,100 -sakura: 99,99 +sakura: 99,100 -leaves:99,99 +leaves:99,100 // Stop all weather effects -clearweather: 99,99 +clearweather: 99,100 //--------------------------------------------------------------- // 100: Disabled commands diff --git a/npc/guides/guides_brasilis.txt b/npc/guides/guides_brasilis.txt index eab0b322b..77df5b4f5 100644 --- a/npc/guides/guides_brasilis.txt +++ b/npc/guides/guides_brasilis.txt @@ -12,7 +12,6 @@ //===== Additional Comments: ================================= //= 1.0 First Version, Renewal guide. //= 1.1 Added a missing close. -//= 1.1 Added a missing close. //============================================================ brasilis,219,97,3 script Brasilis Guide 478,{ -- cgit v1.2.3-70-g09d2 From 5e7b0903383e575393eabf5f36187ffcb49d6c52 Mon Sep 17 00:00:00 2001 From: mercurial123 Date: Sat, 24 Dec 2011 21:30:42 +0000 Subject: - Replaced all occurrences of "eAthena" to "rAthena" string git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15251 54d463be-8e91-2dee-dedb-b68131a5f0ec --- CMakeLists.txt | 20 +- Changelog-Trunk.txt | 8 +- conf/atcommand_athena.conf | 4 +- conf/battle/battle.conf | 4 +- conf/battle/battleground.conf | 2 +- conf/battle/client.conf | 4 +- conf/battle/drops.conf | 2 +- conf/battle/exp.conf | 2 +- conf/battle/feature.conf | 2 +- conf/battle/gm.conf | 2 +- conf/battle/guild.conf | 2 +- conf/battle/homunc.conf | 2 +- conf/battle/items.conf | 2 +- conf/battle/misc.conf | 2 +- conf/battle/monster.conf | 2 +- conf/battle/party.conf | 4 +- conf/battle/pet.conf | 2 +- conf/battle/player.conf | 2 +- conf/battle/skill.conf | 4 +- conf/battle/status.conf | 2 +- conf/battle_athena.conf | 2 +- conf/inter_athena.conf | 24 +- conf/log_athena.conf | 2 +- conf/map_athena.conf | 2 +- conf/mapflag/battleground.txt | 2 +- conf/mapflag/fireworks.txt | 2 +- conf/mapflag/gvg.txt | 4 +- conf/mapflag/jail.txt | 4 +- conf/mapflag/night.txt | 4 +- conf/mapflag/nightmare.txt | 4 +- conf/mapflag/nobranch.txt | 6 +- conf/mapflag/noexp.txt | 4 +- conf/mapflag/noicewall.txt | 4 +- conf/mapflag/noloot.txt | 2 +- conf/mapflag/nomemo.txt | 6 +- conf/mapflag/nopenalty.txt | 4 +- conf/mapflag/noreturn.txt | 4 +- conf/mapflag/nosave.txt | 6 +- conf/mapflag/noskill.txt | 4 +- conf/mapflag/noteleport.txt | 6 +- conf/mapflag/novending.txt | 2 +- conf/mapflag/nowarp.txt | 6 +- conf/mapflag/nowarpto.txt | 6 +- conf/mapflag/partylock.txt | 4 +- conf/mapflag/pvp.txt | 4 +- conf/mapflag/pvp_noguild.txt | 4 +- conf/mapflag/pvp_noparty.txt | 4 +- conf/mapflag/reset.txt | 2 +- conf/mapflag/restricted.txt | 4 +- conf/mapflag/town.txt | 2 +- conf/msg_athena.conf | 2 +- conf/script_athena.conf | 2 +- db/Changelog.txt | 2 +- db/mob_avail.txt | 2 +- db/mob_db2.txt | 2 +- db/mob_skill_db2.txt | 2 +- doc/ea_job_system.txt | 2 +- doc/item_bonus.txt | 2 +- doc/map_cache.txt | 8 +- doc/mob_db_mode_list.txt | 2 +- doc/notes/Changelog.txt | 28 +- doc/sample/PCLoginEvent.txt | 4 +- doc/sample/getequipcardid.txt | 4 +- doc/sample/localized_npc.txt | 10 +- doc/script_commands.txt | 4 +- npc/Changelog.txt | 2 +- npc/airports/airships.txt | 6 +- npc/airports/einbroch.txt | 4 +- npc/airports/lighthalzen.txt | 4 +- npc/airports/yuno.txt | 4 +- npc/battleground/bg_common.txt | 4 +- npc/battleground/flavius/flavius01.txt | 6 +- npc/battleground/flavius/flavius02.txt | 6 +- npc/battleground/flavius/flavius_enter.txt | 4 +- npc/battleground/kvm/kvm01.txt | 4 +- npc/battleground/kvm/kvm02.txt | 4 +- npc/battleground/kvm/kvm03.txt | 4 +- npc/battleground/kvm/kvm_enter.txt | 4 +- npc/battleground/kvm/kvm_item_pay.txt | 4 +- npc/battleground/tierra/tierra01.txt | 4 +- npc/battleground/tierra/tierra02.txt | 6 +- npc/battleground/tierra/tierra_enter.txt | 4 +- npc/cities/alberta.txt | 4 +- npc/cities/aldebaran.txt | 6 +- npc/cities/amatsu.txt | 8 +- npc/cities/ayothaya.txt | 4 +- npc/cities/brasilis.txt | 4 +- npc/cities/comodo.txt | 6 +- npc/cities/einbech.txt | 4 +- npc/cities/einbroch.txt | 4 +- npc/cities/geffen.txt | 4 +- npc/cities/gonryun.txt | 6 +- npc/cities/hugel.txt | 4 +- npc/cities/izlude.txt | 4 +- npc/cities/jawaii.txt | 6 +- npc/cities/lighthalzen.txt | 4 +- npc/cities/louyang.txt | 10 +- npc/cities/lutie.txt | 6 +- npc/cities/manuk.txt | 16 +- npc/cities/morocc.txt | 4 +- npc/cities/moscovia.txt | 6 +- npc/cities/niflheim.txt | 4 +- npc/cities/payon.txt | 6 +- npc/cities/prontera.txt | 4 +- npc/cities/rachel.txt | 4 +- npc/cities/splendide.txt | 4 +- npc/cities/umbala.txt | 6 +- npc/cities/veins.txt | 4 +- npc/cities/yuno.txt | 4 +- npc/custom/WoE_Setter.txt | 6 +- npc/custom/airplane.txt | 8 +- npc/custom/ayothaya.txt | 6 +- npc/custom/banks/bank.txt | 6 +- npc/custom/banks/kafra_bank.txt | 4 +- npc/custom/blackjack.txt | 4 +- npc/custom/breeder.txt | 8 +- npc/custom/card_remover.txt | 6 +- npc/custom/devnpc.txt | 14 +- npc/custom/dye.txt | 6 +- npc/custom/eAAC_Scripts/DonationGirl/donate.txt | 10 +- npc/custom/eAAC_Scripts/kafraExpress/config.txt | 4 +- .../kafraExpress/global_functionsKE.txt | 6 +- npc/custom/eAAC_Scripts/kafraExpress/kafras.txt | 4 +- npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt | 4 +- .../eAAC_Scripts/kafraExpress/ke_broadcast.txt | 4 +- npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt | 4 +- .../eAAC_Scripts/kafraExpress/ke_jobchange.txt | 4 +- .../eAAC_Scripts/kafraExpress/ke_jobswap.txt | 4 +- npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt | 4 +- npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt | 4 +- npc/custom/eAAC_Scripts/kafraExpress/ke_rent.txt | 4 +- npc/custom/eAAC_Scripts/kafraExpress/ke_shop.txt | 4 +- .../eAAC_Scripts/kafraExpress/ke_statmarket.txt | 4 +- npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt | 4 +- npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt | 4 +- .../eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt | 4 +- .../eAAC_Scripts/kafraExpress/ke_warp_pvp.txt | 4 +- .../eAAC_Scripts/kafraExpress/ke_warp_town.txt | 4 +- .../eAAC_Scripts/kafraExpress/ke_warp_woe.txt | 4 +- npc/custom/eAAC_Scripts/quest_warper.txt | 4 +- npc/custom/events/2006_dogs_year.txt | 4 +- npc/custom/events/draculax.txt | 4 +- npc/custom/events/hallow06.txt | 2 +- npc/custom/events/hyegun_event.txt | 2 +- npc/custom/events/kings_items.txt | 6 +- npc/custom/events/p_track/p_track_core.txt | 4 +- npc/custom/events/p_track/p_track_warpers.txt | 4 +- npc/custom/events/uneasy_cemetery.txt | 4 +- npc/custom/events/valentinesdayexp.txt | 2 +- npc/custom/events/xmas_rings_event.txt | 4 +- npc/custom/floating_rates.txt | 4 +- npc/custom/healers/heal.txt | 4 +- npc/custom/healers/heal_payment.txt | 2 +- npc/custom/jobs/jobmaster.txt | 8 +- npc/custom/jobs/reset.txt | 8 +- npc/custom/lottery.txt | 6 +- npc/custom/market.txt | 6 +- npc/custom/marriage.txt | 4 +- npc/custom/morroc_raceway.txt | 6 +- npc/custom/mvm.txt | 6 +- npc/custom/penal_servitude.txt | 8 +- npc/custom/platinum_skills.txt | 4 +- npc/custom/quests/bandit_beard.txt | 6 +- npc/custom/quests/berzebub.txt | 6 +- npc/custom/quests/bongunsword.txt | 6 +- npc/custom/quests/bookofthedevil.txt | 6 +- npc/custom/quests/dead_branch.txt | 6 +- npc/custom/quests/elvenear.txt | 6 +- npc/custom/quests/event_6_new_hats.txt | 6 +- npc/custom/quests/fashion.txt | 6 +- npc/custom/quests/ironcane.txt | 6 +- npc/custom/quests/kiel_quest.txt | 6 +- npc/custom/quests/lvl99_quest.txt | 6 +- npc/custom/quests/magicalhatquest.txt | 6 +- npc/custom/quests/may_hats.txt | 6 +- npc/custom/quests/sphinx_mask.txt | 8 +- npc/custom/quests/sunglasses.txt | 6 +- npc/custom/quests/tha_statues.txt | 6 +- npc/custom/quests/thq/THQS_ChatingNPC.txt | 6 +- npc/custom/quests/thq/THQS_GuildNPC.txt | 6 +- npc/custom/quests/thq/THQS_QuestNPC.txt | 4 +- npc/custom/quests/thq/THQS_Quests.txt | 4 +- npc/custom/quests/thq/THQS_TTShop.txt | 6 +- npc/custom/quests/umbalian_language.txt | 8 +- npc/custom/quests/valhallen.txt | 6 +- npc/custom/rpsroulette.txt | 6 +- npc/custom/shifty_assassin.txt | 6 +- npc/custom/sign_your_items.txt | 6 +- npc/custom/stock_market.txt | 4 +- npc/custom/warper.txt | 4 +- npc/events/MemorialDay_2008.txt | 6 +- npc/events/StPatrick_2008.txt | 4 +- npc/events/children_week.txt | 6 +- npc/events/christmas_2005.txt | 4 +- npc/events/christmas_2008.txt | 12 +- npc/events/dumplingfestival.txt | 4 +- npc/events/easter.txt | 2 +- npc/events/easter_2008.txt | 4 +- npc/events/event_skill_reset.txt | 4 +- npc/events/gdevent_aru.txt | 8 +- npc/events/gdevent_sch.txt | 8 +- npc/events/god_se_festival.txt | 4 +- npc/events/halloween_2006.txt | 4 +- npc/events/halloween_2008.txt | 6 +- npc/events/halloween_2009.txt | 6 +- npc/events/idul_fitri.txt | 4 +- npc/events/lunar_2008.txt | 4 +- npc/events/nguild/nguild_dunsw.txt | 4 +- npc/events/nguild/nguild_ev_agit.txt | 4 +- npc/events/nguild/nguild_flags.txt | 4 +- npc/events/nguild/nguild_guardians.txt | 4 +- npc/events/nguild/nguild_kafras.txt | 4 +- npc/events/nguild/nguild_managers.txt | 4 +- npc/events/nguild/nguild_treas.txt | 4 +- npc/events/nguild/nguild_warper.txt | 4 +- npc/events/twintowers.txt | 2 +- npc/events/valentinesday.txt | 4 +- npc/events/valentinesday_2009.txt | 6 +- npc/events/whiteday.txt | 4 +- npc/events/xmas.txt | 6 +- npc/guides/guides_alberta.txt | 4 +- npc/guides/guides_aldebaran.txt | 4 +- npc/guides/guides_amatsu.txt | 4 +- npc/guides/guides_ayothaya.txt | 4 +- npc/guides/guides_brasilis.txt | 4 +- npc/guides/guides_comodo.txt | 4 +- npc/guides/guides_einbroch.txt | 4 +- npc/guides/guides_geffen.txt | 4 +- npc/guides/guides_gonryun.txt | 4 +- npc/guides/guides_hugel.txt | 4 +- npc/guides/guides_izlude.txt | 4 +- npc/guides/guides_juno.txt | 4 +- npc/guides/guides_lighthalzen.txt | 4 +- npc/guides/guides_louyang.txt | 4 +- npc/guides/guides_lutie.txt | 4 +- npc/guides/guides_morroc.txt | 4 +- npc/guides/guides_moscovia.txt | 4 +- npc/guides/guides_niflheim.txt | 6 +- npc/guides/guides_payon.txt | 4 +- npc/guides/guides_prontera.txt | 4 +- npc/guides/guides_rachel.txt | 4 +- npc/guides/guides_umbala.txt | 4 +- npc/guides/guides_veins.txt | 4 +- npc/guild/agit_controller.txt | 4 +- npc/guild/agit_template.txt | 4 +- npc/guild/aldeg_cas01.txt | 4 +- npc/guild/aldeg_cas02.txt | 4 +- npc/guild/aldeg_cas03.txt | 4 +- npc/guild/aldeg_cas04.txt | 4 +- npc/guild/aldeg_cas05.txt | 4 +- npc/guild/gefg_cas01.txt | 4 +- npc/guild/gefg_cas02.txt | 4 +- npc/guild/gefg_cas03.txt | 4 +- npc/guild/gefg_cas04.txt | 4 +- npc/guild/gefg_cas05.txt | 4 +- npc/guild/payg_cas01.txt | 4 +- npc/guild/payg_cas02.txt | 4 +- npc/guild/payg_cas03.txt | 4 +- npc/guild/payg_cas04.txt | 4 +- npc/guild/payg_cas05.txt | 4 +- npc/guild/prtg_cas01.txt | 4 +- npc/guild/prtg_cas02.txt | 4 +- npc/guild/prtg_cas03.txt | 4 +- npc/guild/prtg_cas04.txt | 4 +- npc/guild/prtg_cas05.txt | 4 +- npc/guild2/agit_start_se.txt | 4 +- npc/guild2/arug_cas01.txt | 4 +- npc/guild2/arug_cas02.txt | 4 +- npc/guild2/arug_cas03.txt | 4 +- npc/guild2/arug_cas04.txt | 4 +- npc/guild2/arug_cas05.txt | 4 +- npc/guild2/guild_dungeon.txt | 4 +- npc/guild2/guild_flags.txt | 4 +- npc/guild2/schg_cas01.txt | 4 +- npc/guild2/schg_cas02.txt | 4 +- npc/guild2/schg_cas03.txt | 4 +- npc/guild2/schg_cas04.txt | 4 +- npc/guild2/schg_cas05.txt | 4 +- npc/instances/EndlessTower.txt | 4 +- npc/instances/NydhoggsNest.txt | 4 +- npc/instances/OrcsMemory.txt | 4 +- npc/instances/SealedShrine.txt | 4 +- npc/jobs/1-1/acolyte.txt | 4 +- npc/jobs/1-1/archer.txt | 6 +- npc/jobs/1-1/mage.txt | 6 +- npc/jobs/1-1/merchant.txt | 6 +- npc/jobs/1-1/swordman.txt | 6 +- npc/jobs/1-1/thief.txt | 6 +- npc/jobs/1-1e/gunslinger.txt | 6 +- npc/jobs/1-1e/ninja.txt | 6 +- npc/jobs/1-1e/taekwon.txt | 4 +- npc/jobs/2-1/assassin.txt | 4 +- npc/jobs/2-1/blacksmith.txt | 4 +- npc/jobs/2-1/hunter.txt | 10 +- npc/jobs/2-1/knight.txt | 4 +- npc/jobs/2-1/priest.txt | 10 +- npc/jobs/2-1/wizard.txt | 4 +- npc/jobs/2-1a/AssassinCross.txt | 4 +- npc/jobs/2-1a/HighPriest.txt | 4 +- npc/jobs/2-1a/HighWizard.txt | 4 +- npc/jobs/2-1a/LordKnight.txt | 4 +- npc/jobs/2-1a/Sniper.txt | 4 +- npc/jobs/2-1a/WhiteSmith.txt | 4 +- npc/jobs/2-1e/StarGladiator.txt | 4 +- npc/jobs/2-2/alchemist.txt | 4 +- npc/jobs/2-2/bard.txt | 6 +- npc/jobs/2-2/crusader.txt | 4 +- npc/jobs/2-2/dancer.txt | 4 +- npc/jobs/2-2/monk.txt | 4 +- npc/jobs/2-2/rogue.txt | 4 +- npc/jobs/2-2/sage.txt | 4 +- npc/jobs/2-2a/Champion.txt | 4 +- npc/jobs/2-2a/Clown.txt | 4 +- npc/jobs/2-2a/Creator.txt | 4 +- npc/jobs/2-2a/Gypsy.txt | 4 +- npc/jobs/2-2a/Paladin.txt | 4 +- npc/jobs/2-2a/Professor.txt | 4 +- npc/jobs/2-2a/Stalker.txt | 4 +- npc/jobs/2-2e/SoulLinker.txt | 4 +- npc/jobs/3-1/archbishop.txt | 4 +- npc/jobs/3-1/mechanic.txt | 6 +- npc/jobs/novice/novice.txt | 6 +- npc/jobs/novice/supernovice.txt | 4 +- npc/jobs/valkyrie.txt | 4 +- npc/kafras/cool_event_corp.txt | 4 +- npc/kafras/dts_warper.txt | 4 +- npc/kafras/functions_kafras.txt | 6 +- npc/kafras/kafras_alb.txt | 6 +- npc/kafras/kafras_alde.txt | 6 +- npc/kafras/kafras_brasilis.txt | 4 +- npc/kafras/kafras_com.txt | 6 +- npc/kafras/kafras_dungeons.txt | 6 +- npc/kafras/kafras_gef.txt | 6 +- npc/kafras/kafras_izl.txt | 6 +- npc/kafras/kafras_mor.txt | 6 +- npc/kafras/kafras_mosk.txt | 6 +- npc/kafras/kafras_new.txt | 6 +- npc/kafras/kafras_pay.txt | 6 +- npc/kafras/kafras_pron.txt | 6 +- npc/kafras/kafras_yun.txt | 6 +- npc/merchants/advanced_refiner.txt | 2 +- npc/merchants/alchemist.txt | 6 +- npc/merchants/ammo_boxes.txt | 8 +- npc/merchants/ammo_dealer.txt | 4 +- npc/merchants/buying_shops.txt | 6 +- npc/merchants/cash_hair.txt | 6 +- npc/merchants/cash_trader.txt | 4 +- npc/merchants/clothes_dyer.txt | 8 +- npc/merchants/dye_maker.txt | 6 +- npc/merchants/elemental_trader.txt | 6 +- npc/merchants/enchan_arm.txt | 4 +- npc/merchants/gemstone.txt | 2 +- npc/merchants/hair_dyer.txt | 4 +- npc/merchants/hair_style.txt | 8 +- npc/merchants/icecream.txt | 4 +- npc/merchants/inn.txt | 4 +- npc/merchants/kunai_maker.txt | 6 +- npc/merchants/manuk.txt | 6 +- npc/merchants/milk_trader.txt | 4 +- npc/merchants/novice_exchange.txt | 6 +- npc/merchants/old_pharmacist.txt | 4 +- npc/merchants/quivers.txt | 6 +- npc/merchants/refine.txt | 2 +- npc/merchants/renters.txt | 4 +- npc/merchants/shops.txt | 6 +- npc/merchants/socket_enchant.txt | 6 +- npc/merchants/socket_enchant2.txt | 4 +- npc/merchants/splendide.txt | 8 +- npc/merchants/wander_pet_food.txt | 6 +- npc/mobs/citycleaners.txt | 4 +- npc/mobs/dungeons/abbey.txt | 2 +- npc/mobs/dungeons/abyss.txt | 4 +- npc/mobs/dungeons/alde_dun.txt | 4 +- npc/mobs/dungeons/ama_dun.txt | 2 +- npc/mobs/dungeons/anthell.txt | 4 +- npc/mobs/dungeons/ayo_dun.txt | 4 +- npc/mobs/dungeons/beach_dun.txt | 4 +- npc/mobs/dungeons/bra_dun.txt | 4 +- npc/mobs/dungeons/c_tower.txt | 2 +- npc/mobs/dungeons/dic_dun.txt | 4 +- npc/mobs/dungeons/ein_dun.txt | 4 +- npc/mobs/dungeons/gef_dun.txt | 4 +- npc/mobs/dungeons/gefenia.txt | 6 +- npc/mobs/dungeons/glastheim.txt | 4 +- npc/mobs/dungeons/gld_dun.txt | 4 +- npc/mobs/dungeons/gld_dunSE.txt | 4 +- npc/mobs/dungeons/gon_dun.txt | 4 +- npc/mobs/dungeons/ice_dun.txt | 4 +- npc/mobs/dungeons/in_sphinx.txt | 4 +- npc/mobs/dungeons/iz_dun.txt | 4 +- npc/mobs/dungeons/juperos.txt | 6 +- npc/mobs/dungeons/kh_dun.txt | 4 +- npc/mobs/dungeons/lhz_dun.txt | 4 +- npc/mobs/dungeons/lou_dun.txt | 4 +- npc/mobs/dungeons/mag_dun.txt | 4 +- npc/mobs/dungeons/mjo_dun.txt | 4 +- npc/mobs/dungeons/moc_pryd.txt | 4 +- npc/mobs/dungeons/mosk_dun.txt | 4 +- npc/mobs/dungeons/nyd_dun.txt | 4 +- npc/mobs/dungeons/odin.txt | 4 +- npc/mobs/dungeons/orcsdun.txt | 4 +- npc/mobs/dungeons/pay_dun.txt | 4 +- npc/mobs/dungeons/prt_maze.txt | 4 +- npc/mobs/dungeons/prt_sew.txt | 2 +- npc/mobs/dungeons/ra_san.txt | 4 +- npc/mobs/dungeons/tha_t.txt | 2 +- npc/mobs/dungeons/thor_v.txt | 2 +- npc/mobs/dungeons/treasure.txt | 4 +- npc/mobs/dungeons/tur_dun.txt | 4 +- npc/mobs/dungeons/xmas_dun.txt | 2 +- npc/mobs/dungeons/yggdrasil.txt | 2 +- npc/mobs/fields/amatsu.txt | 4 +- npc/mobs/fields/ayothaya.txt | 2 +- npc/mobs/fields/brasilis.txt | 4 +- npc/mobs/fields/comodo.txt | 4 +- npc/mobs/fields/dicastes.txt | 6 +- npc/mobs/fields/einbroch.txt | 4 +- npc/mobs/fields/geffen.txt | 2 +- npc/mobs/fields/gonryun.txt | 4 +- npc/mobs/fields/hugel.txt | 4 +- npc/mobs/fields/jawaii.txt | 4 +- npc/mobs/fields/lighthalzen.txt | 6 +- npc/mobs/fields/louyang.txt | 4 +- npc/mobs/fields/lutie.txt | 2 +- npc/mobs/fields/manuk.txt | 4 +- npc/mobs/fields/mjolnir.txt | 4 +- npc/mobs/fields/morocc.txt | 4 +- npc/mobs/fields/moscovia.txt | 4 +- npc/mobs/fields/niflheim.txt | 4 +- npc/mobs/fields/payon.txt | 2 +- npc/mobs/fields/prontera.txt | 2 +- npc/mobs/fields/rachel.txt | 4 +- npc/mobs/fields/splendide.txt | 2 +- npc/mobs/fields/umbala.txt | 6 +- npc/mobs/fields/veins.txt | 4 +- npc/mobs/fields/yuno.txt | 4 +- npc/mobs/pvp.txt | 2 +- npc/mobs/towns/brasilis.txt | 2 +- npc/other/CashShop_Functions.txt | 4 +- npc/other/Global_Functions.txt | 4 +- npc/other/arena/arena_aco.txt | 4 +- npc/other/arena/arena_lvl50.txt | 4 +- npc/other/arena/arena_lvl60.txt | 4 +- npc/other/arena/arena_lvl70.txt | 2 +- npc/other/arena/arena_lvl80.txt | 2 +- npc/other/arena/arena_party.txt | 4 +- npc/other/arena/arena_point.txt | 4 +- npc/other/arena/arena_room.txt | 4 +- npc/other/auction.txt | 4 +- npc/other/books.txt | 2 +- npc/other/bulletin_boards.txt | 2 +- npc/other/comodo_gambling.txt | 4 +- npc/other/divorce.txt | 4 +- npc/other/fortune.txt | 910 ++++++++++----------- npc/other/guildpvp.txt | 4 +- npc/other/gympass.txt | 4 +- npc/other/hugel_bingo.txt | 4 +- npc/other/mail.txt | 4 +- npc/other/marriage.txt | 4 +- npc/other/mercenary_rent.txt | 6 +- npc/other/monster_museum.txt | 6 +- npc/other/monster_race.txt | 4 +- npc/other/msg_boards.txt | 4 +- npc/other/poring_war.txt | 6 +- npc/other/powernpc.txt | 2 +- npc/other/pvp.txt | 6 +- npc/other/resetskill.txt | 4 +- npc/other/sealstatus.txt | 4 +- npc/other/turbotrack/Expert_16.txt | 4 +- npc/other/turbotrack/Expert_4.txt | 6 +- npc/other/turbotrack/Expert_8.txt | 4 +- npc/other/turbotrack/Normal_16.txt | 4 +- npc/other/turbotrack/Normal_4.txt | 6 +- npc/other/turbotrack/Normal_8.txt | 4 +- npc/other/turbotrack/Normal_Solo.txt | 14 +- npc/other/turbotrack/Turbo_Track.txt | 4 +- npc/quests/2007_relay.txt | 4 +- npc/quests/Bard_Quest.txt | 4 +- npc/quests/Kiel_Hyre_Quest.txt | 4 +- npc/quests/Lvl4_weapon_quest.txt | 4 +- npc/quests/The_Sign_Quest.txt | 8 +- npc/quests/bunnyband.txt | 6 +- npc/quests/collection/quest_alligator.txt | 4 +- npc/quests/collection/quest_caramel.txt | 4 +- npc/quests/collection/quest_coco.txt | 4 +- npc/quests/collection/quest_creamy.txt | 4 +- npc/quests/collection/quest_demonpungus.txt | 4 +- npc/quests/collection/quest_dokebi.txt | 4 +- npc/quests/collection/quest_dryad.txt | 4 +- npc/quests/collection/quest_fabre.txt | 4 +- npc/quests/collection/quest_frilldora.txt | 4 +- npc/quests/collection/quest_goat.txt | 4 +- npc/quests/collection/quest_golem.txt | 4 +- npc/quests/collection/quest_hode.txt | 4 +- npc/quests/collection/quest_leafcat.txt | 4 +- npc/quests/collection/quest_pecopeco.txt | 4 +- npc/quests/collection/quest_pupa.txt | 4 +- npc/quests/cooking_quest.txt | 4 +- npc/quests/counteragent_mixture.txt | 4 +- npc/quests/doomed_swords.txt | 4 +- npc/quests/doomed_swords_quest.txt | 4 +- npc/quests/eden/11-25.txt | 6 +- npc/quests/eden/26-40.txt | 4 +- npc/quests/eden/41-55.txt | 4 +- npc/quests/eden/56-70.txt | 4 +- npc/quests/eden/71-85.txt | 4 +- npc/quests/eden/eden_common.txt | 4 +- npc/quests/eden/eden_quests.txt | 6 +- npc/quests/eden/eden_service.txt | 4 +- npc/quests/eye_of_hellion.txt | 4 +- npc/quests/first_class/tu_acolyte.txt | 4 +- npc/quests/first_class/tu_archer.txt | 4 +- npc/quests/first_class/tu_ma_th01.txt | 4 +- npc/quests/first_class/tu_magician01.txt | 4 +- npc/quests/first_class/tu_merchant.txt | 4 +- npc/quests/first_class/tu_sword.txt | 4 +- npc/quests/first_class/tu_thief01.txt | 4 +- npc/quests/guildrelay.txt | 4 +- npc/quests/gunslinger_quests.txt | 2 +- npc/quests/juice_maker.txt | 4 +- npc/quests/monstertamers.txt | 4 +- npc/quests/mrsmile.txt | 4 +- npc/quests/newgears/2004_headgears.txt | 4 +- npc/quests/newgears/2005_headgears.txt | 4 +- npc/quests/newgears/2006_headgear.txt | 2 +- npc/quests/ninja_quests.txt | 2 +- npc/quests/obb_quest.txt | 4 +- npc/quests/okolnir/godse_aru01.txt | 6 +- npc/quests/okolnir/godse_aru02.txt | 6 +- npc/quests/okolnir/godse_aru03.txt | 6 +- npc/quests/okolnir/godse_aru04.txt | 6 +- npc/quests/okolnir/godse_aru05.txt | 6 +- npc/quests/okolnir/godse_sch01.txt | 6 +- npc/quests/okolnir/godse_sch02.txt | 6 +- npc/quests/okolnir/godse_sch03.txt | 6 +- npc/quests/okolnir/godse_sch04.txt | 6 +- npc/quests/okolnir/godse_sch05.txt | 6 +- npc/quests/quests_13_1.txt | 4 +- npc/quests/quests_13_2.txt | 8 +- npc/quests/quests_airship.txt | 4 +- npc/quests/quests_alberta.txt | 4 +- npc/quests/quests_aldebaran.txt | 6 +- npc/quests/quests_amatsu.txt | 6 +- npc/quests/quests_ayothaya.txt | 4 +- npc/quests/quests_brasilis.txt | 4 +- npc/quests/quests_comodo.txt | 4 +- npc/quests/quests_ein.txt | 6 +- npc/quests/quests_geffen.txt | 4 +- npc/quests/quests_gonryun.txt | 4 +- npc/quests/quests_hugel.txt | 26 +- npc/quests/quests_izlude.txt | 6 +- npc/quests/quests_juperos.txt | 4 +- npc/quests/quests_lighthalzen.txt | 4 +- npc/quests/quests_louyang.txt | 6 +- npc/quests/quests_lutie.txt | 4 +- npc/quests/quests_morocc.txt | 8 +- npc/quests/quests_moscovia.txt | 30 +- npc/quests/quests_nameless.txt | 6 +- npc/quests/quests_niflheim.txt | 6 +- npc/quests/quests_payon.txt | 4 +- npc/quests/quests_prontera.txt | 4 +- npc/quests/quests_rachel.txt | 4 +- npc/quests/quests_umbala.txt | 6 +- npc/quests/quests_veins.txt | 6 +- npc/quests/quests_yuno.txt | 6 +- npc/quests/quiz/quiz_qt.txt | 4 +- npc/quests/seals/brisingamen_seal.txt | 4 +- npc/quests/seals/god_global.txt | 4 +- npc/quests/seals/god_weapon_creation.txt | 6 +- npc/quests/seals/megingard_seal.txt | 4 +- npc/quests/seals/mjolnir_seal.txt | 4 +- npc/quests/seals/sleipnir_seal.txt | 4 +- npc/quests/skills/acolyte_skills.txt | 4 +- npc/quests/skills/alchemist_skills.txt | 4 +- npc/quests/skills/archer_skills.txt | 6 +- npc/quests/skills/assassin_skills.txt | 6 +- npc/quests/skills/bard_skills.txt | 4 +- npc/quests/skills/blacksmith_skills.txt | 4 +- npc/quests/skills/crusader_skills.txt | 4 +- npc/quests/skills/dancer_skills.txt | 4 +- npc/quests/skills/hunter_skills.txt | 4 +- npc/quests/skills/knight_skills.txt | 4 +- npc/quests/skills/mage_skills.txt | 4 +- npc/quests/skills/merchant_skills.txt | 4 +- npc/quests/skills/monk_skills.txt | 4 +- npc/quests/skills/novice_skills.txt | 4 +- npc/quests/skills/priest_skills.txt | 4 +- npc/quests/skills/rogue_skills.txt | 4 +- npc/quests/skills/sage_skills.txt | 4 +- npc/quests/skills/swordman_skills.txt | 4 +- npc/quests/skills/thief_skills.txt | 4 +- npc/quests/skills/wizard_skills.txt | 4 +- npc/quests/thana_quest.txt | 4 +- npc/scripts_main.conf | 4 +- npc/warps/cities/alberta.txt | 2 +- npc/warps/cities/aldebaran.txt | 2 +- npc/warps/cities/amatsu.txt | 2 +- npc/warps/cities/ayothaya.txt | 2 +- npc/warps/cities/brasilis.txt | 4 +- npc/warps/cities/comodo.txt | 4 +- npc/warps/cities/einbech.txt | 4 +- npc/warps/cities/einbroch.txt | 2 +- npc/warps/cities/geffen.txt | 2 +- npc/warps/cities/gonryun.txt | 2 +- npc/warps/cities/hugel.txt | 2 +- npc/warps/cities/izlude.txt | 2 +- npc/warps/cities/lighthalzen.txt | 2 +- npc/warps/cities/louyang.txt | 2 +- npc/warps/cities/lutie.txt | 2 +- npc/warps/cities/manuk.txt | 2 +- npc/warps/cities/mid_camp.txt | 2 +- npc/warps/cities/morroc.txt | 2 +- npc/warps/cities/moscovia.txt | 2 +- npc/warps/cities/nameless.txt | 2 +- npc/warps/cities/niflheim.txt | 2 +- npc/warps/cities/payon.txt | 4 +- npc/warps/cities/prontera.txt | 2 +- npc/warps/cities/rachel.txt | 2 +- npc/warps/cities/splendide.txt | 2 +- npc/warps/cities/umbala.txt | 2 +- npc/warps/cities/veins.txt | 2 +- npc/warps/cities/yggdrasil.txt | 2 +- npc/warps/cities/yuno.txt | 2 +- npc/warps/dungeons/abbey.txt | 2 +- npc/warps/dungeons/abyss.txt | 2 +- npc/warps/dungeons/alde_dun.txt | 2 +- npc/warps/dungeons/ama_dun.txt | 2 +- npc/warps/dungeons/anthell.txt | 2 +- npc/warps/dungeons/ayo_dun.txt | 4 +- npc/warps/dungeons/beach_dun.txt | 2 +- npc/warps/dungeons/bra_dun.txt | 2 +- npc/warps/dungeons/c_tower.txt | 2 +- npc/warps/dungeons/ein_dun.txt | 4 +- npc/warps/dungeons/gef_dun.txt | 2 +- npc/warps/dungeons/gon_dun.txt | 2 +- npc/warps/dungeons/ice_dun.txt | 2 +- npc/warps/dungeons/in_sphinx.txt | 2 +- npc/warps/dungeons/iz_dun.txt | 2 +- npc/warps/dungeons/juperos.txt | 4 +- npc/warps/dungeons/kh_dun.txt | 4 +- npc/warps/dungeons/lhz_dun.txt | 2 +- npc/warps/dungeons/lou_dun.txt | 2 +- npc/warps/dungeons/mag_dun.txt | 2 +- npc/warps/dungeons/mjo_dun.txt | 2 +- npc/warps/dungeons/moc_pryd.txt | 2 +- npc/warps/dungeons/mosk_dun.txt | 2 +- npc/warps/dungeons/odin.txt | 2 +- npc/warps/dungeons/orcsdun.txt | 2 +- npc/warps/dungeons/pay_dun.txt | 4 +- npc/warps/dungeons/prt_maze.txt | 2 +- npc/warps/dungeons/ra_san.txt | 2 +- npc/warps/dungeons/tha_t.txt | 4 +- npc/warps/dungeons/thor_v.txt | 2 +- npc/warps/dungeons/treasure.txt | 2 +- npc/warps/dungeons/tur_dun.txt | 2 +- npc/warps/dungeons/um_dun.txt | 2 +- npc/warps/dungeons/xmas_dun.txt | 2 +- npc/warps/fields/abyss_warper.txt | 2 +- npc/warps/fields/amatsu_fild.txt | 2 +- npc/warps/fields/com_fild.txt | 2 +- npc/warps/fields/ein_fild.txt | 2 +- npc/warps/fields/gefenia.txt | 2 +- npc/warps/fields/geffen_fild.txt | 2 +- npc/warps/fields/glastheim.txt | 2 +- npc/warps/fields/hugel_fild.txt | 2 +- npc/warps/fields/jawaii.txt | 2 +- npc/warps/fields/lhalzen_fild.txt | 2 +- npc/warps/fields/lutie_fild.txt | 2 +- npc/warps/fields/man_fild.txt | 2 +- npc/warps/fields/morroc_fild.txt | 2 +- npc/warps/fields/mtmjolnir.txt | 2 +- npc/warps/fields/payon_fild.txt | 4 +- npc/warps/fields/prontera_fild.txt | 2 +- npc/warps/fields/rachel_fild.txt | 2 +- npc/warps/fields/spl_fild.txt | 2 +- npc/warps/fields/umbala_fild.txt | 2 +- npc/warps/fields/veins_fild.txt | 2 +- npc/warps/fields/yuno_fild.txt | 2 +- npc/warps/guild/guildcastles.txt | 2 +- npc/warps/other/airplane.txt | 2 +- npc/warps/other/arena.txt | 4 +- npc/warps/other/god.txt | 2 +- npc/warps/other/jobquests.txt | 2 +- npc/warps/other/kiel.txt | 2 +- npc/warps/other/other.txt | 2 +- npc/warps/other/sign.txt | 2 +- npc/warps/pvp/pvp.txt | 2 +- 687 files changed, 1938 insertions(+), 1938 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/CMakeLists.txt b/CMakeLists.txt index 51fc2e39e..96bd53a4a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ # CMP0017: Prefer files from the CMake module directory when including from there. set( CMAKE_LEGACY_CYGWIN_WIN32 0 ) cmake_minimum_required( VERSION 2.8.3 ) -project( eAthena C ) +project( rAthena C ) if( CYGWIN ) unset( WIN32 ) endif() @@ -121,9 +121,9 @@ if( SVNVERSION_EXECUTABLE ) endif() if( Subversion_FOUND AND SVNVERSION ) message( STATUS "Getting svn branch" ) - Subversion_WC_INFO( ${PROJECT_SOURCE_DIR} eAthena ) - if( eAthena_WC_URL ) - string( REGEX MATCH "[^/]+$" BRANCH ${eAthena_WC_URL} ) + Subversion_WC_INFO( ${PROJECT_SOURCE_DIR} rAthena ) + if( rAthena_WC_URL ) + string( REGEX MATCH "[^/]+$" BRANCH ${rAthena_WC_URL} ) set( SVNVERSION "${BRANCH}-${SVNVERSION}" ) message( STATUS "Found branch: ${BRANCH}" ) endif() @@ -371,7 +371,7 @@ endif() ##################################################################### # package stuff # -set( CPACK_PACKAGE_NAME "eAthena" ) +set( CPACK_PACKAGE_NAME "rAthena" ) set( CPACK_PACKAGE_DESCRIPTION_SUMMARY "MMORPG server package" ) set( CPACK_PACKAGE_VERSION ${SVNVERSION} ) set( CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE ) @@ -437,11 +437,11 @@ set( DEVELOPMENT_FILES "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt" "${CMAKE_CURRENT_SOURCE_DIR}/configure" "${CMAKE_CURRENT_SOURCE_DIR}/configure.in" - "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-6.dsw" - "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-7.1.sln" - "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-8.sln" - "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-9.sln" - "${CMAKE_CURRENT_SOURCE_DIR}/eAthena-10.sln" + "${CMAKE_CURRENT_SOURCE_DIR}/rAthena-6.dsw" + "${CMAKE_CURRENT_SOURCE_DIR}/rAthena-7.1.sln" + "${CMAKE_CURRENT_SOURCE_DIR}/rAthena-8.sln" + "${CMAKE_CURRENT_SOURCE_DIR}/rAthena-9.sln" + "${CMAKE_CURRENT_SOURCE_DIR}/rAthena-10.sln" ) set( DEVELOPMENT_DIRECTORIES "3rdparty" diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 67780ced1..7c788323d 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -543,7 +543,7 @@ Date (YYYY-MM-DD) - Control panel developers are encouraged to enable players to modify this value, as it is required for new character deletion (2010-08-03aRagexeRE and later, not yet implemented). * Removed unconditional redundant status change checks before status_change_end calls (follow up to r12890). [Ai4rei] * Replaced remaining occurences of '-1' with 'INVALID_TIMER', where appropriate (follow up to r12998). [Ai4rei] - * Removed 'gui' plug-in (support plug-in for 3rd party eAthena GUI front-ends) (topic:262934). [Ai4rei] + * Removed 'gui' plug-in (support plug-in for 3rd party rAthena GUI front-ends) (topic:262934). [Ai4rei] 2011/01/13 * Fixed mapflags 'restricted', 'nocommand', 'bexp' and 'jexp' still not getting completely initialized upon @reloadscript (bugreport:4710, follow up to r14548). [Ai4rei] * Removed ladmin (remote administration tool), all related support code and the checkversion.pl tool with it's support code, which was shared with ladmin (topic:262934, related bugreport:1147, bugreport:1889, r9408 and r9610). [Ai4rei] @@ -2335,7 +2335,7 @@ Date (YYYY-MM-DD) * merged the charserver acc modification code cleanup to TXT (r11324) * changed trunk's default server->client PACKETVER to 9 2008/03/26 - * Adjusted eAthena code to compile cleanly in C++ mode. + * Adjusted rAthena code to compile cleanly in C++ mode. 2008/03/25 * Added proper checks to adoption processing (followup to r12428). * Cleaned up some code / fixed some typos. [ultramage] @@ -3757,7 +3757,7 @@ Date (YYYY-MM-DD) - using 0.7 instead of 0.66 as modifier (so aspd will be lower now) - see topic:151132 for details 2007/08/16 - * Fixed eAthena's wrong interpretation of the respawn times [Playtester] + * Fixed rAthena's wrong interpretation of the respawn times [Playtester] * Added icons for NPC_CRITICALWOUND and NPC_SLOWCAST [Playtester] * Fixed npc chatrooms not being deleted on npc unload/reload (crash) * Modified chat code a bit for more clarity [ultramage] @@ -7504,7 +7504,7 @@ Date (YYYY-MM-DD) [Skotlex] * Added config setting "party_hp_mode" (battle/party.conf) which determines method to use to update party-mate hp bars. Aegis style is to update HP - bars whenever HP changes, while eAthena style is to update it together with + bars whenever HP changes, while rAthena style is to update it together with the map party dots. Defaults to aegis style. [Skotlex] * Fixed packet 0x22a having the manner and opt3 packets in inverted offsets. [Skotlex] diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 6a8ae3de2..76b0dacc9 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena atcommand configuration file. +// rAthena atcommand configuration file. // Originally translated by Peter Kieser //-------------------------------------------------------------- @@ -193,7 +193,7 @@ feelreset: 10,60 //---------------------- // 20: Mediator commands -// Displays helpfile in eAthena base directory (2 same commands). +// Displays helpfile in rAthena base directory (2 same commands). help: 20,20 h: 20,20 help2: 20,20 diff --git a/conf/battle/battle.conf b/conf/battle/battle.conf index 1c3ee627a..377ebabb2 100644 --- a/conf/battle/battle.conf +++ b/conf/battle/battle.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- @@ -98,7 +98,7 @@ vit_penalty_num: 5 // eg: 10 + 50 def becomes 0 + (10*type + 50) weapon_defense_type: 0 -//MDEF‚same as above....(MDEF*value) +//MDEF‚same as above....(MDEF*value) magic_defense_type: 0 // How to count the number of attackers when applying agi penalty ? (choose one) diff --git a/conf/battle/battleground.conf b/conf/battle/battleground.conf index 23840b7f2..98b2dd8db 100644 --- a/conf/battle/battleground.conf +++ b/conf/battle/battleground.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/client.conf b/conf/battle/client.conf index 97867d822..767956090 100644 --- a/conf/battle/client.conf +++ b/conf/battle/client.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- @@ -105,7 +105,7 @@ summer_ignorepalette: no // Set this to 1 if your clients have langtype problems and can't display motd properly motd_type: 0 -// Show eAthena version to users when the login? +// Show rAthena version to users when the login? display_version: yes // When affected with the "Hallucination" status effect, send the effect to client? (Note 1) diff --git a/conf/battle/drops.conf b/conf/battle/drops.conf index 591cdad7e..65fb8dd7f 100644 --- a/conf/battle/drops.conf +++ b/conf/battle/drops.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/exp.conf b/conf/battle/exp.conf index b8d8bd2ce..fbc7c2967 100644 --- a/conf/battle/exp.conf +++ b/conf/battle/exp.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/feature.conf b/conf/battle/feature.conf index 1fec01521..0dd3af0cf 100644 --- a/conf/battle/feature.conf +++ b/conf/battle/feature.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Feature Configuration File +// rAthena Feature Configuration File //-------------------------------------------------------------- // Note 1: Value is a config switch (on/off, yes/no or 1/0) // Note 2: Value is in percents (100 means 100%) diff --git a/conf/battle/gm.conf b/conf/battle/gm.conf index 921b4cc18..b7dc81909 100644 --- a/conf/battle/gm.conf +++ b/conf/battle/gm.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/guild.conf b/conf/battle/guild.conf index 06814b931..cbd3fc07b 100644 --- a/conf/battle/guild.conf +++ b/conf/battle/guild.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/homunc.conf b/conf/battle/homunc.conf index 7198e0a88..8349aae64 100644 --- a/conf/battle/homunc.conf +++ b/conf/battle/homunc.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/items.conf b/conf/battle/items.conf index 4cbf91298..691517b72 100644 --- a/conf/battle/items.conf +++ b/conf/battle/items.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/misc.conf b/conf/battle/misc.conf index be94046db..0105e542b 100644 --- a/conf/battle/misc.conf +++ b/conf/battle/misc.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/monster.conf b/conf/battle/monster.conf index a8ffafe97..301a1b8eb 100644 --- a/conf/battle/monster.conf +++ b/conf/battle/monster.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/party.conf b/conf/battle/party.conf index e9be9957c..490d80948 100644 --- a/conf/battle/party.conf +++ b/conf/battle/party.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- @@ -15,7 +15,7 @@ party_update_interval: 1000 // Method used to update party-mate hp-bars: // 0: Aegis - bar is updated every time HP changes (bandwidth intensive) -// 1: eAthena - bar is updated with the party map dots (up to 1 second delay) +// 1: rAthena - bar is updated with the party map dots (up to 1 second delay) party_hp_mode: 0 // When 'Party Share' item sharing is enabled in a party, diff --git a/conf/battle/pet.conf b/conf/battle/pet.conf index 2516e031f..de9056972 100644 --- a/conf/battle/pet.conf +++ b/conf/battle/pet.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/player.conf b/conf/battle/player.conf index 61d9eb66b..97a0f2b51 100644 --- a/conf/battle/player.conf +++ b/conf/battle/player.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle/skill.conf b/conf/battle/skill.conf index dce79681b..322a4778a 100644 --- a/conf/battle/skill.conf +++ b/conf/battle/skill.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- @@ -266,4 +266,4 @@ eq_single_target_reflectable: yes // On official server, you will receive damage from Reflection and some Tarot Card even in invincible status. // When this setting is enabled, it allows you to immune to all kinds of damage, including those stated previous. // (The number will show but no actual damage will be done) -invincible.nodamage: no \ No newline at end of file +invincible.nodamage: no diff --git a/conf/battle/status.conf b/conf/battle/status.conf index 3eabc3254..717db68bf 100644 --- a/conf/battle/status.conf +++ b/conf/battle/status.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker //-------------------------------------------------------------- diff --git a/conf/battle_athena.conf b/conf/battle_athena.conf index 557cad30b..fe03deb7e 100644 --- a/conf/battle_athena.conf +++ b/conf/battle_athena.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Battle Configuration File +// rAthena Battle Configuration File // Originally Translated by Peter Kieser // Made in to plainer English by Ancyker // Splitted up into multiple files by Skotlex. diff --git a/conf/inter_athena.conf b/conf/inter_athena.conf index 03e39b90d..278133e77 100644 --- a/conf/inter_athena.conf +++ b/conf/inter_athena.conf @@ -59,31 +59,31 @@ mapreg_txt: save/mapreg.txt // (currently only the login-server reads/obeys these settings) sql.db_hostname: 127.0.0.1 sql.db_port: 3306 -sql.db_username: ragnarok -sql.db_password: ragnarok -sql.db_database: ragnarok +sql.db_username: ro +sql.db_password: test1234 +sql.db_database: db_ro sql.codepage: // MySQL Character SQL server char_server_ip: 127.0.0.1 char_server_port: 3306 -char_server_id: ragnarok -char_server_pw: ragnarok -char_server_db: ragnarok +char_server_id: ro +char_server_pw: test1234 +char_server_db: db_ro // MySQL Map SQL Server map_server_ip: 127.0.0.1 map_server_port: 3306 -map_server_id: ragnarok -map_server_pw: ragnarok -map_server_db: ragnarok +map_server_id: ro +map_server_pw: test1234 +map_server_db: db_ro // MySQL Log SQL Database log_db_ip: 127.0.0.1 log_db_port: 3306 -log_db_id: ragnarok -log_db_pw: ragnarok -log_db_db: ragnarok +log_db_id: ro +log_db_pw: test1234 +log_db_db: db_ro log_codepage: // DO NOT CHANGE ANYTHING BEYOND THIS LINE UNLESS YOU KNOW YOUR DATABASE DAMN WELL diff --git a/conf/log_athena.conf b/conf/log_athena.conf index d8cd8bba7..2578c67cf 100644 --- a/conf/log_athena.conf +++ b/conf/log_athena.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -// eAthena Log Configuration File +// rAthena Log Configuration File //-------------------------------------------------------------- // Note 1: Value is a config switch (on/off, yes/no or 1/0) // Note 2: Value is in percents (100 means 100%) diff --git a/conf/map_athena.conf b/conf/map_athena.conf index 3d57ffdc9..f4b0511db 100644 --- a/conf/map_athena.conf +++ b/conf/map_athena.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------------- -//eAthena Map-Server Configuration File +//rAthena Map-Server Configuration File //-------------------------------------------------------------- // Note: "Comments" are all text on the right side of a double slash "//" diff --git a/conf/mapflag/battleground.txt b/conf/mapflag/battleground.txt index 4a1ff0f66..514d617ef 100644 --- a/conf/mapflag/battleground.txt +++ b/conf/mapflag/battleground.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Battleground map setting. '2' shows scoreboard. //===== By: ================================================== //= Epoque diff --git a/conf/mapflag/fireworks.txt b/conf/mapflag/fireworks.txt index 90d89eb1b..eedcc15e0 100644 --- a/conf/mapflag/fireworks.txt +++ b/conf/mapflag/fireworks.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Displays Fireworks effect (Depreciated) //===== By: ================================================== //= Epoque diff --git a/conf/mapflag/gvg.txt b/conf/mapflag/gvg.txt index 3e5b4c48f..a7de7657e 100644 --- a/conf/mapflag/gvg.txt +++ b/conf/mapflag/gvg.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= GvG On Map Flags //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.2 //===== Description: ========================================= diff --git a/conf/mapflag/jail.txt b/conf/mapflag/jail.txt index d7e8a3f95..b638f36bf 100644 --- a/conf/mapflag/jail.txt +++ b/conf/mapflag/jail.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map Flags for Jails ( ATCommand @jail ) //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== diff --git a/conf/mapflag/night.txt b/conf/mapflag/night.txt index 99f3538b8..71d6a7a74 100644 --- a/conf/mapflag/night.txt +++ b/conf/mapflag/night.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map Flags for maps where the night is visible. //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.0 [Skotlex] //===== Compatible With: ===================================== diff --git a/conf/mapflag/nightmare.txt b/conf/mapflag/nightmare.txt index 8bf7e3484..0436e5c59 100644 --- a/conf/mapflag/nightmare.txt +++ b/conf/mapflag/nightmare.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that allow players to drop items/equips on death //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== diff --git a/conf/mapflag/nobranch.txt b/conf/mapflag/nobranch.txt index 3802f8e42..3fb607fd3 100644 --- a/conf/mapflag/nobranch.txt +++ b/conf/mapflag/nobranch.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable dead branching //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.2 [Lupus] //= 1.3 [massdriller] //= 1.6a [Lupus] @@ -380,4 +380,4 @@ ecl_hub01 mapflag nobranch // Poring War ================== poring_w01 mapflag nobranch -poring_w02 mapflag nobranch \ No newline at end of file +poring_w02 mapflag nobranch diff --git a/conf/mapflag/noexp.txt b/conf/mapflag/noexp.txt index 78df18bbc..71e476d9a 100644 --- a/conf/mapflag/noexp.txt +++ b/conf/mapflag/noexp.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable gaining EXP //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.2 [Lupus] 1.3 [massdriller] 1.4 Lupus 1.5 Lorky //= 1.6 Added Lighthalzen (due to quests) [Lupus] //= 1.7 Commented out entries. (Quests are official) [L0ne_W0lf] diff --git a/conf/mapflag/noicewall.txt b/conf/mapflag/noicewall.txt index f82a2745c..7338454ed 100644 --- a/conf/mapflag/noicewall.txt +++ b/conf/mapflag/noicewall.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable icewall skill //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //============================================================= //= noicewall: Disables Icewall skill. //= To disable Icewall on a specific map add the mapname here. diff --git a/conf/mapflag/noloot.txt b/conf/mapflag/noloot.txt index 7c3c0bfa4..51dcfbc28 100644 --- a/conf/mapflag/noloot.txt +++ b/conf/mapflag/noloot.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mapflag from a script in the NPC folder //===== By: ================================================== //= Epoque diff --git a/conf/mapflag/nomemo.txt b/conf/mapflag/nomemo.txt index 78a279a8a..c01c508a7 100644 --- a/conf/mapflag/nomemo.txt +++ b/conf/mapflag/nomemo.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable warp portal memory //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.6a added up to Hugel maps. [Lupus] //= 1.6b Added job_knt map. [Samuray22] //= 1.7 Added all novice maps. [L0ne_W0lf] @@ -768,4 +768,4 @@ moc_prydn2 mapflag nomemo // Poring War ==================== poring_w01 mapflag nomemo -poring_w02 mapflag nomemo \ No newline at end of file +poring_w02 mapflag nomemo diff --git a/conf/mapflag/nopenalty.txt b/conf/mapflag/nopenalty.txt index 911b54729..a993f0c5e 100644 --- a/conf/mapflag/nopenalty.txt +++ b/conf/mapflag/nopenalty.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable exp. penalty on death. //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.2 [Lupus] //= 1.3 Added all novice maps. [L0ne_W0lf] //= 1.4 Removed Nightmare PVP maps. [L0ne_W0lf] diff --git a/conf/mapflag/noreturn.txt b/conf/mapflag/noreturn.txt index f6a31b272..ee4ad650e 100644 --- a/conf/mapflag/noreturn.txt +++ b/conf/mapflag/noreturn.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable use of Butterfly wings //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.4a [Lupus] //===== Notes: =============================================== //= For disabling Fly wings use noteleport diff --git a/conf/mapflag/nosave.txt b/conf/mapflag/nosave.txt index be5f430c5..8b6aa2896 100644 --- a/conf/mapflag/nosave.txt +++ b/conf/mapflag/nosave.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable auto saving //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.7 [Lupus] //===== Current Version: ===================================== @@ -320,4 +320,4 @@ arug_dun01 mapflag nosave SavePoint // Poring War ==================== poring_w01 mapflag nosave SavePoint -poring_w02 mapflag nosave SavePoint \ No newline at end of file +poring_w02 mapflag nosave SavePoint diff --git a/conf/mapflag/noskill.txt b/conf/mapflag/noskill.txt index 82b6eb52e..b91834786 100644 --- a/conf/mapflag/noskill.txt +++ b/conf/mapflag/noskill.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable skills on a map //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.0 [L0ne_W0lf] //= 1.1 Added additional maps. [L0ne_W0lf] //===== Current Version: ===================================== diff --git a/conf/mapflag/noteleport.txt b/conf/mapflag/noteleport.txt index 4dca5519f..49ffbd7ca 100644 --- a/conf/mapflag/noteleport.txt +++ b/conf/mapflag/noteleport.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable use of fly wings //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.6a [Lupus] //===== Notes: =============================================== //= For disabling Butterfly wings use noreturn @@ -439,4 +439,4 @@ nyd_dun02 mapflag noteleport // Poring War ==================== poring_w01 mapflag noteleport poring_w02 mapflag noteleport -poring_w02 mapflag monster_noteleport \ No newline at end of file +poring_w02 mapflag monster_noteleport diff --git a/conf/mapflag/novending.txt b/conf/mapflag/novending.txt index 34eb4549e..9825c2ba8 100644 --- a/conf/mapflag/novending.txt +++ b/conf/mapflag/novending.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mapflag from a script in the NPC folder //===== By: ================================================== //= Epoque diff --git a/conf/mapflag/nowarp.txt b/conf/mapflag/nowarp.txt index 853dcf586..1eac63d44 100644 --- a/conf/mapflag/nowarp.txt +++ b/conf/mapflag/nowarp.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable warp //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= v 1.2 //= 1.3 Added WoE SE maps //===== Current Version: ===================================== @@ -68,4 +68,4 @@ bat_a02 mapflag nowarp // Poring War ================== poring_w01 mapflag nowarp -poring_w02 mapflag nowarp \ No newline at end of file +poring_w02 mapflag nowarp diff --git a/conf/mapflag/nowarpto.txt b/conf/mapflag/nowarpto.txt index 3fc30624b..e52d4a7d3 100644 --- a/conf/mapflag/nowarpto.txt +++ b/conf/mapflag/nowarpto.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable warpto //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= v 1.3 //===== Current Version: ===================================== @@ -142,4 +142,4 @@ spl_in01 mapflag nowarpto // Poring War ==================== poring_w01 mapflag nowarpto -poring_w02 mapflag nowarpto \ No newline at end of file +poring_w02 mapflag nowarpto diff --git a/conf/mapflag/partylock.txt b/conf/mapflag/partylock.txt index ce304fadb..a080225de 100644 --- a/conf/mapflag/partylock.txt +++ b/conf/mapflag/partylock.txt @@ -1,8 +1,8 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flag that disable party modification. //= Currently not used officially by any maps. //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= v 1.0 //===== Current Version: ===================================== diff --git a/conf/mapflag/pvp.txt b/conf/mapflag/pvp.txt index 78f65b5e8..f2b430dac 100644 --- a/conf/mapflag/pvp.txt +++ b/conf/mapflag/pvp.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that enable pvp //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.0 //===== Description: ========================================= diff --git a/conf/mapflag/pvp_noguild.txt b/conf/mapflag/pvp_noguild.txt index 33937ea31..700d17d64 100644 --- a/conf/mapflag/pvp_noguild.txt +++ b/conf/mapflag/pvp_noguild.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable guilds on pvp grounds. //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= v 1.1 //===== Current Version: ===================================== diff --git a/conf/mapflag/pvp_noparty.txt b/conf/mapflag/pvp_noparty.txt index 4371ca365..ba3bc1e3f 100644 --- a/conf/mapflag/pvp_noparty.txt +++ b/conf/mapflag/pvp_noparty.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable parties in pvp maps //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= v 1.2 //===== Current Version: ===================================== diff --git a/conf/mapflag/reset.txt b/conf/mapflag/reset.txt index 0825c2f8d..226676884 100644 --- a/conf/mapflag/reset.txt +++ b/conf/mapflag/reset.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that enable the use of Neuralizer //===== By: ================================================== //= Daegaladh diff --git a/conf/mapflag/restricted.txt b/conf/mapflag/restricted.txt index 01709fb7d..6a9a293d8 100644 --- a/conf/mapflag/restricted.txt +++ b/conf/mapflag/restricted.txt @@ -1,8 +1,8 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Map flags that disable certain items/skills configured in //= item_noequip.txt and skill_nocast_db.txt //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= 1.0 [Komurka] //= 1.1 Added WoE:SE Map restrictions. [L0ne_W0lf] //= 1.2 Added Endless Tower Restrictions. (bugreport:4707) [L0ne_W0lf] diff --git a/conf/mapflag/town.txt b/conf/mapflag/town.txt index 13ba10939..162f27eba 100644 --- a/conf/mapflag/town.txt +++ b/conf/mapflag/town.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Allows Mailbox access //===== By: ================================================== //= Epoque diff --git a/conf/msg_athena.conf b/conf/msg_athena.conf index 315098099..2f5e50eea 100644 --- a/conf/msg_athena.conf +++ b/conf/msg_athena.conf @@ -1,4 +1,4 @@ -// eAthena msg_athena.conf +// rAthena msg_athena.conf // Message Configuration // For translation, just change msg here (second line), no need to modify source code, // or alternatively, use conf/import/msg_conf.txt diff --git a/conf/script_athena.conf b/conf/script_athena.conf index 5458c42ae..309f8ee41 100644 --- a/conf/script_athena.conf +++ b/conf/script_athena.conf @@ -1,5 +1,5 @@ //-------------------------------------------------------- -// eAthena Script Configuration File +// rAthena Script Configuration File //-------------------------------------------------------- diff --git a/db/Changelog.txt b/db/Changelog.txt index 310b32f57..e11523c6f 100644 --- a/db/Changelog.txt +++ b/db/Changelog.txt @@ -2501,7 +2501,7 @@ - Fixed some bugs and typos in the new cards effects. Probably there are more [Lupus] Note: ON finishing adjusting STEAL skill, we'd start adding cards into MOBs drops. 2006/04/28 - * Fixed the "stun" typo that has been in eAthena for ages [Playtester] + * Fixed the "stun" typo that has been in rAthena for ages [Playtester] - SC_STAN --> SC_STUN - Eff_Stan --> Eff_Stun * Storm Kick's range increased to 2. [Skotlex] diff --git a/db/mob_avail.txt b/db/mob_avail.txt index 4b2e57b34..755597da6 100644 --- a/db/mob_avail.txt +++ b/db/mob_avail.txt @@ -13,7 +13,7 @@ //1920,1047,0 //1921,1093,0 -// eAthena Dev Team +// rAthena Dev Team // Valaris //1900,4013,1,1,1,1254,0,67,12,54,16,1 // Valaris Worshiper diff --git a/db/mob_db2.txt b/db/mob_db2.txt index b1be13c97..4f9d94ddf 100644 --- a/db/mob_db2.txt +++ b/db/mob_db2.txt @@ -7,7 +7,7 @@ //1920,EASTER_EGG,Easter Egg,Easter Egg,3,300,0,4,4,0,1,2,20,20,1,1,1,1,1,20,10,12,0,0,60,128,1000,1001,1,1,0,0,0,0,0,0,0,0,1010,250,935,500,558,300,501,200,501,200,713,800,558,300,558,300,0,0,0,0 //1921,EASTER_BUNNY,Easter Bunny,Easter Bunny,6,1800,0,60,55,1,20,26,0,40,1,36,6,1,11,80,10,10,0,2,60,181,200,1456,456,336,0,0,0,0,0,0,0,0,2250,200,515,8000,727,1200,746,1500,706,30,622,50,534,5000,0,0,0,0,4006,70 -// eAthena Dev Team +// rAthena Dev Team //1900,VALARIS,Valaris,Valaris,99,668000,0,107250,37895,2,3220,4040,35,45,1,152,96,85,120,95,10,10,2,6,67,1973,100,1068,768,576,13000,5000,608,1000,750,400,923,3800,1466,200,2256,200,2607,800,714,500,617,3000,984,4300,985,5600,0,0,0,0,4147,1 //1901,VALARIS_WORSHIPPER,Valaris's Worshipper,Valaris's Worshipper,50,8578,0,2706,1480,1,487,590,15,25,1,75,55,1,93,45,10,12,0,6,27,1685,100,868,480,120,0,0,0,0,0,0,0,0,923,500,984,63,1464,2,607,50,610,100,503,300,2405,50,0,0,0,0,4129,1 //1902,MC_CAMERI,MC Cameri,MC Cameri,99,668000,0,107250,37895,2,3220,4040,35,45,1,152,96,85,120,95,10,10,2,6,67,1973,100,1068,768,576,13000,5000,608,1000,750,400,923,3800,1466,200,2256,200,2607,800,714,500,617,3000,984,4300,985,5600,0,0,0,0,4147,1 diff --git a/db/mob_skill_db2.txt b/db/mob_skill_db2.txt index 7ef8647be..12ab9fdc7 100644 --- a/db/mob_skill_db2.txt +++ b/db/mob_skill_db2.txt @@ -56,7 +56,7 @@ // hiding condition of being in hidden state // sight condition of being in unhidden state -// eAthena Dev Team +// rAthena Dev Team //1900,Valaris@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,,,,,,,, //1900,Valaris@AL_TELEPORT,walk,26,1,500,0,5000,yes,self,rudeattacked,,,,,,,, //1900,Valaris@KN_BRANDISHSPEAR,attack,57,10,2000,500,5000,no,target,always,0,,,,,,29, diff --git a/doc/ea_job_system.txt b/doc/ea_job_system.txt index 1ca05d6ce..a2bd01991 100644 --- a/doc/ea_job_system.txt +++ b/doc/ea_job_system.txt @@ -1,5 +1,5 @@ //===== Athena Doc=== ===================================== -//= eAthena Job System +//= rAthena Job System //===== By ================================================ //= Skotlex //===== Version =========================================== diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 97c305fcc..4dc8f1bcb 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -1,5 +1,5 @@ //===== Athena Doc ======================================== -//= eAthena Item Bonuses List +//= rAthena Item Bonuses List //===== By ================================================ //= Developers //===== Version =========================================== diff --git a/doc/map_cache.txt b/doc/map_cache.txt index 394a5c802..8f9505fa8 100644 --- a/doc/map_cache.txt +++ b/doc/map_cache.txt @@ -1,5 +1,5 @@ //===== Athena Doc ======================================== -//= eAthena Map Cache Builder and Format Documentation +//= rAthena Map Cache Builder and Format Documentation //===== By ================================================ //= DracoRPG //===== Version =========================================== @@ -8,7 +8,7 @@ //= 0.1 - Short howto for the initial builder version //= 1.0 - Complete manual covering the improved version //===== Description ======================================= -//= A complete manual for eAthena's map cache generator +//= A complete manual for rAthena's map cache generator //= as well as a reference on the map cache format used //========================================================= @@ -17,7 +17,7 @@ Preface: Since SVN revision ~10000, the map-server does not know how to read RO client files anymore. It reads maps from a "map cache" file that contains all and only the useful data about the maps. A map cache containing every official -kRO Sakray map currently supported by eAthena is provided as a default. +kRO Sakray map currently supported by rAthena is provided as a default. If you have custom maps or want to minimize the size of your map cache because your server does not load all of them (multi-map-server or light test server), you can use the map cache builder to generate a new one fitting your needs. @@ -25,7 +25,7 @@ Map cache builder manual: ------------------------------------------------------------------------------- The source code for the map cache builder is located in src/tool/. It can be built using "make tools" if you use the Makefile -or using the "mapcache" project under Visual Studio. Named "mapcache", the executable will be in your eAthena main folder. +or using the "mapcache" project under Visual Studio. Named "mapcache", the executable will be in your rAthena main folder. The map cache builder needs 3 file paths : one is a list of GRFs and/or data directory containing the maps, the second is the list of maps to add to the map cache, and the last one is the path of the map cache to generate. Default values for those paths are "tools/mapcache/grf_files.txt", "db/map_index.txt" and "db/map_cache.dat". diff --git a/doc/mob_db_mode_list.txt b/doc/mob_db_mode_list.txt index 26af0c167..c2d55f35c 100644 --- a/doc/mob_db_mode_list.txt +++ b/doc/mob_db_mode_list.txt @@ -1,5 +1,5 @@ //===== Athena Doc ======================================== -//= eAthena Monster Modes Reference +//= rAthena Monster Modes Reference //===== By ================================================ //= Developers //===== Version =========================================== diff --git a/doc/notes/Changelog.txt b/doc/notes/Changelog.txt index 0fbba0e39..6d4f5790c 100644 --- a/doc/notes/Changelog.txt +++ b/doc/notes/Changelog.txt @@ -3130,7 +3130,7 @@ Date Added * Fixed typo in msg_athena.conf and 'users with autoloot turned on will not have their rare drops announced.'. Thanks to Kaseki. * Mob should stop walking when hit if not enduring. Thanks to Playtester. [Lance] * Included pcre.dll and libmysql.dll from joshuali. [Lance] - * Eliminated Level 3 warnings. Setting compile warnings to Level 3. (Level 4 just kills eAthena XD) [Lance] + * Eliminated Level 3 warnings. Setting compile warnings to Level 3. (Level 4 just kills rAthena XD) [Lance] 2005/11/27 * Fixed an overflow pointer bug in the gvg eliminate timer. [Skotlex] * Updated the damage code if Spiral Pierce, Shield Chain and Shield @@ -6348,7 +6348,7 @@ Date Added * Removed battle option "enemy_critical" [Skotlex] Use enemy_critical_rate=0 instead. * Changed the default of enemy_critical_rate to 0 [Skotlex] - * Ported oA's imalive and flushtimer system to eAthena plugin 'gui' [celest] + * Ported oA's imalive and flushtimer system to rAthena plugin 'gui' [celest] - You will only need the plugin if you are using a gui program like wxOAGUI to run Athena - To configure it check addons/gui.conf @@ -6799,7 +6799,7 @@ Date Added TXT users with custom items can update their custom db using gawk (*nix or under Cygwin) this way (thanks to Sasuke): gawk -F, '{ for (i=1; i<= NF; i++) { if (i==16) { printf $i; printf ",";printf ","; } else if ( i==NF ) { print $i; } else { printf $i; printf ","; } } }' db/item_db2.txt > item_db2.new.txt - Run it from within the root eAthena directory, and you'll get an updated + Run it from within the root rAthena directory, and you'll get an updated item_db2.txt in your root directory. However, all custom items are not refineable by default this way, you still have to set to 1 the refineable column where it applies on your custom item_db. @@ -6888,9 +6888,9 @@ Date Added 05/24 * Added 'make addons' -- plugins will not be compiled by default now [celest] - * Ported uptime logging function to eAthena plugin [celest] - * Ported pid file creation function to eAthena plugin [celest] - * Ported stackdump creation function to eAthena plugin [celest] + * Ported uptime logging function to rAthena plugin [celest] + * Ported pid file creation function to rAthena plugin [celest] + * Ported stackdump creation function to rAthena plugin [celest] * Added capability to export to plugins [celest] * Fixed ensemble skills, thanks to Komurka * Fixed Dissonance damage, thanks to shadow @@ -6968,7 +6968,7 @@ Date Added - Might fix a few character names if you have no restrictions [Codemaster] * Fixed 'rudeattacked' skill condition, thanks to Komurka * Replaced zlib_win32.h and zconf_win32.h with the v1.2.2 files in /zlib [celest] - * Ported zlib.dll loading to eAthena plugin form [celest] + * Ported zlib.dll loading to rAthena plugin form [celest] * Fixed some NPC skills acquirable by @allskill [celest] * Merged sigpipe's handler with sig_proc [celest] * Optimised timer.c a bit (partially from Shinomori's changes) [celest] @@ -7655,7 +7655,7 @@ Date Added * sql native vc7 projects now build/link [1351: MouseJstr] * Began sql projects for VC7 [1349: MouseJstr] * text char-server and login-server now build using VC7. You - can use the eAthena.sln solution to build all three. These + can use the rAthena.sln solution to build all three. These are currently just the text versions of the servers. I have not added projects yet to build the sql versions. [SVN: 1347 MouseJstr] @@ -7924,7 +7924,7 @@ Date Added * Some changes in sig_dump to allow Cygwin produce stackdumps upon crash again, thanks to Ser [celest] * Changed the default stackdump creation folder from /save to /log [celest] - * Fixed a typo in TXT login server logging, thanks to Skyer / eAthenaC [celest] + * Fixed a typo in TXT login server logging, thanks to Skyer / rAthenaC [celest] * Added HP and SP rate underflow checking [celest] * Added stop auto attacking if no arrows were equipped [celest] * Added new script command: 'cardscnt'. It returns N of inserted cards in the same weapon. [Lupus] @@ -8113,7 +8113,7 @@ Date Added 02/18 * Fixed a bug with statpoint.txt reading and giving too much stat points, - thanks to Benz / eAthenaC [celest] + thanks to Benz / rAthenaC [celest] * Fixed client errors when pecopeco Lord Knights/Paladins log in with a weapon equipped [celest] * Added bAddRace2 -- check item_bonus.txt [celest] @@ -10814,7 +10814,7 @@ Date Added - less memory usage - less tests and loops (more speed) - more efficient (use directly char_dat position instead of search it) - * Added Official Assassin Job Quest. Now eAthena contains all 2-1 Job Quests! [kobra_k88] + * Added Official Assassin Job Quest. Now rAthena contains all 2-1 Job Quests! [kobra_k88] * Fixed scripts: 32hats, warper2, platinum_skills, added/changed some mapflags and other misc script changes [Lupus] * Added @disguise command (enter a mob_id or name, and you will appear to others as that mob/npc!) * Fixed code for mob disguises, should not crash clients now. @@ -10852,7 +10852,7 @@ Date Added * Added translated Gonryun town. Fixed map names of Louyang shops. Added missing Blacksmith, added extra Rapairmen into refine.txt. In Inns added 4 different prices based on Base Lvl.[kobra_k88] ----------eAthena 1.0.0 RC3 TXT--------- +---------rAthena 1.0.0 RC3 TXT--------- 08/04 * Set battle_athena.conf to more accurate settings. [Valaris] * Decreased default damage delay (stun after being hit) by 75%. [Valaris] @@ -10981,7 +10981,7 @@ Date Added - modification of makefile * Added a note in TODO 14: encrypted password - problem with client versions [Yor] ----------eAthena 1.0.0 RC2 TXT--------- +---------rAthena 1.0.0 RC2 TXT--------- 07/28 * Added metaller to equipped mobs. [Valaris] * Added a note in TODO 19 [Yor] @@ -11074,7 +11074,7 @@ Date Added * Fixed bugs in npc headers caused by someone using spaces and not tabs. (kafra.txt, guide.txt, yuno.txt) [Valaris] * Fixed a vending bug. [Valaris] ----------eAthena 1.0.0 RC1 TXT--------- +---------rAthena 1.0.0 RC1 TXT--------- 07/22 * Fixed numerous startup errors in aldebaron castles and one geffen castle. [Valaris] * Full Guild Wars Script Complete!!! [Akaru] diff --git a/doc/sample/PCLoginEvent.txt b/doc/sample/PCLoginEvent.txt index b7020b719..8f3649345 100644 --- a/doc/sample/PCLoginEvent.txt +++ b/doc/sample/PCLoginEvent.txt @@ -1,4 +1,4 @@ -// eAthena Special NPC +// rAthena Special NPC // PCLoginEvent NPC (davidsiaw) //============================================================================== @@ -50,4 +50,4 @@ prontera,156,176,0 script Another NPC 46,{ OnPCLoginEvent: // this part runs AS WELL close; -} \ No newline at end of file +} diff --git a/doc/sample/getequipcardid.txt b/doc/sample/getequipcardid.txt index b1fe55505..3449ed0c7 100644 --- a/doc/sample/getequipcardid.txt +++ b/doc/sample/getequipcardid.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //===== By: ================================================== //= Lupus //= Shows your HAT's slots IDs @@ -31,4 +31,4 @@ L_CHECK2: mes "Card Slot 0:"+getequipcardid(1,0)+" 1:"+getequipcardid(1,1); mes "Card Slot 2:"+getequipcardid(1,2)+" 3:"+getequipcardid(1,3); close; -} \ No newline at end of file +} diff --git a/doc/sample/localized_npc.txt b/doc/sample/localized_npc.txt index 3a721d108..b3946162e 100644 --- a/doc/sample/localized_npc.txt +++ b/doc/sample/localized_npc.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Sample localized NPC //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= v1.0 //===== Compatible With: ===================================== -//= eAthena with setd, getd +//= rAthena with setd, getd //===== Description: ========================================= //= Example of a localized NPC. //= @@ -146,6 +146,6 @@ OnInterIfInitOnce: callfunc "setmes2", "LNPC_lang", 0, "EN"; callfunc "setmes2", "LNPC_lang", 1, "PT"; callfunc "setmes2", "LNPC_text", 0, "Something in english"; - callfunc "setmes2", "LNPC_text", 1, "Algo em português"; + callfunc "setmes2", "LNPC_text", 1, "Algo em portugu�s"; end; -} \ No newline at end of file +} diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 1404d57ac..7029b9b72 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -1,4 +1,4 @@ -//===== Athena Doc ======================================== +//===== Athena Doc ======================================== //= rAthena Script Commands //===== Description ======================================= //= A reference manual for the rAthena scripting language. @@ -6685,7 +6685,7 @@ The first letter is position 0. Example: - charisupper("eAthena", 1); //returns 1 + charisupper("rAthena", 1); //returns 1 --------------------------------------- diff --git a/npc/Changelog.txt b/npc/Changelog.txt index 7699db8bf..7b1ce9563 100644 --- a/npc/Changelog.txt +++ b/npc/Changelog.txt @@ -464,7 +464,7 @@ Date Added - Added item checks to Ice Necklace quest. - Uncommented a warp in morroc_fild. 2008/12/26 - Rev. 13415 Happy boxing day, eAthena! Here have a massive update. [L0ne_W0lf] + Rev. 13415 Happy boxing day, rAthena! Here have a massive update. [L0ne_W0lf] * Implemented the first round of episode 12.1 change which include: - Many Morroc NPCs have been moved to Morroc Ruins. - The addition of new of NPCs to the ruins of Morroc. diff --git a/npc/airports/airships.txt b/npc/airports/airships.txt index 856a4fc3f..0de47427e 100644 --- a/npc/airports/airships.txt +++ b/npc/airports/airships.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= The Airship System Script //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN 3422+(Requires jA Script System) +//= rAthena SVN 3422+(Requires jA Script System) //===== Description: ========================================= //= The Airship System used in the official servers, however this //= one is still about 25% custom and is missing some npcs. diff --git a/npc/airports/einbroch.txt b/npc/airports/einbroch.txt index eb4fddd57..37bf6c2f7 100644 --- a/npc/airports/einbroch.txt +++ b/npc/airports/einbroch.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbroch Airport Staff //===== By: ================================================== //= L0ne_W0lf, Muad_Dib //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena Revision 3000+ +//= rAthena Revision 3000+ //===== Description: ========================================= //= Einbroch Airport Staff //===== Additional Comments: ================================= diff --git a/npc/airports/lighthalzen.txt b/npc/airports/lighthalzen.txt index 551ae93e8..81f565027 100644 --- a/npc/airports/lighthalzen.txt +++ b/npc/airports/lighthalzen.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lighthalzen Airport Staff //===== By: ================================================== //= L0ne_W0lf, Muad_Dib //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena Revision 3000+ +//= rAthena Revision 3000+ //===== Description: ========================================= //= Lighthalzen Airport Staff //===== Additional Comments: ================================= diff --git a/npc/airports/yuno.txt b/npc/airports/yuno.txt index bc01e1d3d..815280d27 100644 --- a/npc/airports/yuno.txt +++ b/npc/airports/yuno.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yuno Airport Staff //===== By: ================================================== //= L0ne_W0lf, Muad_Dib //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena Revision 3000+ +//= rAthena Revision 3000+ //===== Description: ========================================= //= Yuno Airport Staff //===== Additional Comments: ================================= diff --git a/npc/battleground/bg_common.txt b/npc/battleground/bg_common.txt index c092b5145..f9a40fddf 100644 --- a/npc/battleground/bg_common.txt +++ b/npc/battleground/bg_common.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - Common NPCs //===== By: ================================================== //= ????, L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Battleground npcs: diff --git a/npc/battleground/flavius/flavius01.txt b/npc/battleground/flavius/flavius01.txt index 8825db8b3..134af29e2 100644 --- a/npc/battleground/flavius/flavius01.txt +++ b/npc/battleground/flavius/flavius01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - Flavius //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Flavius Battleground. @@ -758,4 +758,4 @@ bat_b01,1,10,3 script Release all#b01 81,{ } } } -*/ \ No newline at end of file +*/ diff --git a/npc/battleground/flavius/flavius02.txt b/npc/battleground/flavius/flavius02.txt index e31223226..b83b4f43f 100644 --- a/npc/battleground/flavius/flavius02.txt +++ b/npc/battleground/flavius/flavius02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - Flavius Second //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Flavius Battleground. @@ -759,4 +759,4 @@ bat_b02,1,10,3 script Release all#b02 81,{ } } } -*/ \ No newline at end of file +*/ diff --git a/npc/battleground/flavius/flavius_enter.txt b/npc/battleground/flavius/flavius_enter.txt index c8c5c479a..468a7fef8 100644 --- a/npc/battleground/flavius/flavius_enter.txt +++ b/npc/battleground/flavius/flavius_enter.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - Flavius Entrance NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Flavius Battleground Entrance NPCs diff --git a/npc/battleground/kvm/kvm01.txt b/npc/battleground/kvm/kvm01.txt index 854e9bb8b..684df0e71 100644 --- a/npc/battleground/kvm/kvm01.txt +++ b/npc/battleground/kvm/kvm01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - KvM 80-99 //===== By: ================================================== //= ???, L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Kreiger Von Midgard Battleground for levels 80 to 99 diff --git a/npc/battleground/kvm/kvm02.txt b/npc/battleground/kvm/kvm02.txt index 815bcefe2..5f6c118d3 100644 --- a/npc/battleground/kvm/kvm02.txt +++ b/npc/battleground/kvm/kvm02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - KvM 1-59 //===== By: ================================================== //= ???, L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Kreiger Von Midgard Battleground for levels 1 to 59 diff --git a/npc/battleground/kvm/kvm03.txt b/npc/battleground/kvm/kvm03.txt index 9b3a1b3ea..4b685be55 100644 --- a/npc/battleground/kvm/kvm03.txt +++ b/npc/battleground/kvm/kvm03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - KvM 60-80 //===== By: ================================================== //= ???, L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Kreiger Von Midgard Battleground for levels 60 to 80 diff --git a/npc/battleground/kvm/kvm_enter.txt b/npc/battleground/kvm/kvm_enter.txt index 95ef27b0c..2df3c9a59 100644 --- a/npc/battleground/kvm/kvm_enter.txt +++ b/npc/battleground/kvm/kvm_enter.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - KvM Entrance NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Kreiger Von Midgard Battleground Entrance NPCs diff --git a/npc/battleground/kvm/kvm_item_pay.txt b/npc/battleground/kvm/kvm_item_pay.txt index 5ad475dc9..3af0c5a1b 100644 --- a/npc/battleground/kvm/kvm_item_pay.txt +++ b/npc/battleground/kvm/kvm_item_pay.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - KvM Item Dealer //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Kreiger Von Midgard Battleground Point redemption NPC diff --git a/npc/battleground/tierra/tierra01.txt b/npc/battleground/tierra/tierra01.txt index 9037c4eee..a9d60e5cb 100644 --- a/npc/battleground/tierra/tierra01.txt +++ b/npc/battleground/tierra/tierra01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - Tierra Gorge //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Tierra Gorge Battleground. diff --git a/npc/battleground/tierra/tierra02.txt b/npc/battleground/tierra/tierra02.txt index b498cab6e..ea09e4a94 100644 --- a/npc/battleground/tierra/tierra02.txt +++ b/npc/battleground/tierra/tierra02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - Tierra Gorge 2 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Second Tierra Gorge Battleground. @@ -943,4 +943,4 @@ bat_a02,1,1,3 script Release all#a02 81,{ } } */ - \ No newline at end of file + diff --git a/npc/battleground/tierra/tierra_enter.txt b/npc/battleground/tierra/tierra_enter.txt index 061957cdd..4ee74ceca 100644 --- a/npc/battleground/tierra/tierra_enter.txt +++ b/npc/battleground/tierra/tierra_enter.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // BattleGround System - Tierra Gorge Entrance NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //= Tierra Gorge Battleground Entrance NPCs diff --git a/npc/cities/alberta.txt b/npc/cities/alberta.txt index 5d1b9d82b..c3ba2fbb2 100644 --- a/npc/cities/alberta.txt +++ b/npc/cities/alberta.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Alberta Town //===== By: ================================================== //= DZeroX //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Town-specific Alberta NPCs //===== Additional Comments: ================================= diff --git a/npc/cities/aldebaran.txt b/npc/cities/aldebaran.txt index b8a6d8273..0a28caade 100644 --- a/npc/cities/aldebaran.txt +++ b/npc/cities/aldebaran.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Al De Baran Town //===== By: ================================================== -//= eAthena dev team; L0ne_W0lf +//= rAthena dev team; L0ne_W0lf //===== Current Version: ===================================== //= 2.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Al De Baran Town NPCs diff --git a/npc/cities/amatsu.txt b/npc/cities/amatsu.txt index d33c751b3..98c220a5f 100644 --- a/npc/cities/amatsu.txt +++ b/npc/cities/amatsu.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Amatsu Script //===== By: ================================================== -//= Some people & eAthena Dev Team +//= Some people & rAthena Dev Team //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Amatsu Town Script @@ -599,4 +599,4 @@ amatsu,262,197,1 script Legendary Tree 111,{ //= 1.08 Removed Duplicates [Silent] //= 1.1 Split quests into quests/quests_amatsu.txt [Evera] //= 1.2 Fixed missing name [Evera] -//============================================================ \ No newline at end of file +//============================================================ diff --git a/npc/cities/ayothaya.txt b/npc/cities/ayothaya.txt index de8dc3bcf..cf5fb8304 100644 --- a/npc/cities/ayothaya.txt +++ b/npc/cities/ayothaya.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ayotaya Town //===== By: ================================================== //= MasterOfMuppets //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Ayotaya Town Script diff --git a/npc/cities/brasilis.txt b/npc/cities/brasilis.txt index 45581fe6e..125fd2dd4 100644 --- a/npc/cities/brasilis.txt +++ b/npc/cities/brasilis.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brasilis Town //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Brasilis Town Script diff --git a/npc/cities/comodo.txt b/npc/cities/comodo.txt index a775e2fa1..f9f5f42a9 100644 --- a/npc/cities/comodo.txt +++ b/npc/cities/comodo.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Comodo Town //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.9 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Comodo Town NPCs diff --git a/npc/cities/einbech.txt b/npc/cities/einbech.txt index 1fc669907..3e39655e3 100644 --- a/npc/cities/einbech.txt +++ b/npc/cities/einbech.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbech Town //===== By: ================================================== //= Muad_Dib //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena Revision 3000+ +//= rAthena Revision 3000+ //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/cities/einbroch.txt b/npc/cities/einbroch.txt index fb0298857..710c57740 100644 --- a/npc/cities/einbroch.txt +++ b/npc/cities/einbroch.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbroch Town //===== By: ================================================== //= Everybody mentioned in the comments //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena Revision 3000+ +//= rAthena Revision 3000+ //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/cities/geffen.txt b/npc/cities/geffen.txt index 721dc9e30..5df83326b 100644 --- a/npc/cities/geffen.txt +++ b/npc/cities/geffen.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffen Town //===== By: ================================================== //= Everybody mentioned in the comments //===== Current Version: ===================================== //= 1.9 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Geffen Town NPCs diff --git a/npc/cities/gonryun.txt b/npc/cities/gonryun.txt index d294ddbb9..95b76f437 100644 --- a/npc/cities/gonryun.txt +++ b/npc/cities/gonryun.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kunlun Town //===== By: ================================================== //= x[tsk], KarLaeda //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Kunlun Town Script @@ -412,7 +412,7 @@ gonryun,169,71,3 script Guidev#gon 770,{ // Old changelog //============================================================ // May be missing npc's and dialogue. -//= 1.1 Fixed Typo’s [Nexon] +//= 1.1 Fixed Typo�s [Nexon] //= 1.2 Removed Duplicates [Silent] //= 1.3 Max NPC Name is 23 [Toms] //= 1.3a Removed temp NPC plugs due Broken Sword quest [Lupus] diff --git a/npc/cities/hugel.txt b/npc/cities/hugel.txt index ae25f5762..fdb85d481 100644 --- a/npc/cities/hugel.txt +++ b/npc/cities/hugel.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hugel City //===== By: ================================================== //= vicious_pucca, Poki#3, erKURITA, Munin, and everybody in the @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPC's for the City of Hugel. //===== Additional Comments: ================================= diff --git a/npc/cities/izlude.txt b/npc/cities/izlude.txt index c26b4ecad..66199333d 100644 --- a/npc/cities/izlude.txt +++ b/npc/cities/izlude.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Izlude Town //===== By: ================================================== //= kobra_k88 @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.8a //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Izlude town NPCs diff --git a/npc/cities/jawaii.txt b/npc/cities/jawaii.txt index a302a2572..e1fb0d526 100644 --- a/npc/cities/jawaii.txt +++ b/npc/cities/jawaii.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Jawaii (The Lovers' Paradise) Town script //===== By: ================================================== //= jAthena (1.0) @@ -7,7 +7,7 @@ //===== Current Version: ===================================== //= 3.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis OCnversion] //= Jawaii Town Npcs @@ -20,7 +20,7 @@ //= 1.5 Fixed Script, and spelling errors, some thanks to Sparkles [DNett123] //= 1.6 Final corrections (not complete), thanks to the public, and DNett123! //= 1.6c added missing monsters. Still 1 type is missing [Lupus] -//= 1.7 Fixed a lot of typo’s [Nexon] +//= 1.7 Fixed a lot of typo�s [Nexon] //= 1.8 Removed monster spawns, added aegis ep 8.5 spawns to npc/mobs/fields/jawaii.txt [MasterOfMuppets] //= 2.0 Updated the npcs according to iRO [MasterOfMuppets] //= 2.01 fixed missing @ at randomdrink, thanks to theultramage [Lupus] diff --git a/npc/cities/lighthalzen.txt b/npc/cities/lighthalzen.txt index 2684c8642..511f7cc32 100644 --- a/npc/cities/lighthalzen.txt +++ b/npc/cities/lighthalzen.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lighthalzen City //===== By: ================================================== //= erKURITA, Au{R}oN (Translated by Alan), $ephiroth //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Lighthalzen NPCs (Temporal names for now) [erKURITA] //===== Additional Comments: ================================== diff --git a/npc/cities/louyang.txt b/npc/cities/louyang.txt index 516676aa9..16af1cb92 100644 --- a/npc/cities/louyang.txt +++ b/npc/cities/louyang.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Louyang City NPC's //===== By: ================================================== //= Vidar (1.0) @@ -6,11 +6,11 @@ //= Dino9021, roughly translated by Celest (1.2) //= Mass Zero (1.3) //= MasterOfMuppets (2.0) -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 2.9 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Louyang Town Script @@ -331,7 +331,7 @@ louyang,84,254,0 script Exit#lou 111,{ //= 2.0 - Completely rewrote the current scripts based on iRO. // Added the 'Shouting Quest' and the 'Medicine Quest' //= 2.1 Optimized, made quest vars unique [Lupus] -//= 2.1a minor fix, 2.1b Fixed Typo’s [Nexon] +//= 2.1a minor fix, 2.1b Fixed Typo�s [Nexon] //= 2.2 Fixed exploits [Lupus] //= 2.2a Updated the color codes a little and fixed the shouting quest //= to broadcast green text. @@ -344,7 +344,7 @@ louyang,84,254,0 script Exit#lou 111,{ //= 2.6a Updated a few names with new item_db.txt names [Evera] //= 2.7 Split quests to quests/quests_louyang.txt [Evera] //= 2.7a Minor optimizations before Louyang quests [Lupus] -//= 2.7b Moved guides to the Guides folder. 2.7ñ more typos [Lupus] +//= 2.7b Moved guides to the Guides folder. 2.7� more typos [Lupus] //= 2.8 Moved some quest-related NPCs to proper file. [SinSloth] //= 2.9 Rescripted to Aegis 10.3 Standards. [L0ne_W0lf] //============================================================ diff --git a/npc/cities/lutie.txt b/npc/cities/lutie.txt index 1ea621634..dfee6d827 100644 --- a/npc/cities/lutie.txt +++ b/npc/cities/lutie.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lutie Town //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Lutie - City NPCs //===== Additional Comments: ================================= diff --git a/npc/cities/manuk.txt b/npc/cities/manuk.txt index 4528bf6af..1b33799f1 100644 --- a/npc/cities/manuk.txt +++ b/npc/cities/manuk.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Manuk Town //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Town-specific NPCs for Manuk. @@ -67,10 +67,10 @@ manuk,107,233,5 script Soldier#ep13_3 454,{ manuk,100,100,3 script Piom 454,{ if ((isequipped(2782) == 1) && (ep13_2_rhea == 100)) { mes "[Piom]"; - mes "Ä?¡­Õæ?¡£¿´Ñù×?ÃÏñ²»ÊÇFairy¡£"; - mes "??²»Ê?ÃËÀµÄFairy£¬"; - mes "¾?»ÊÇÎÒÃ?jÐÈ?¡ÊÀ½çÉÏ"; - mes "?Ó?ÐÈ?¬»òÕß?°?"; + mes "�?����?�������?�����Fairy��"; + mes "??���?�����Fairy��"; + mes "�?������?j��?�������"; + mes "?�?��?�����?�?"; close; } else { @@ -448,8 +448,8 @@ manuk,103,311,3 script Manuk Piom#tre2 455,{ manuk,194,189,3 script Manuk Galtun#tre3 450,{ if ((isequipped(2782) == 1) && (ep13_2_rhea == 100)) { mes "[Manuk Galtun]"; - mes "»¶?À´µ½ÂíU¿?£"; - mes "Ðè?ÎÒ?Äã?·Âð£¿"; + mes "��?������U�?�"; + mes "��?��?��?���"; } else { diff --git a/npc/cities/morocc.txt b/npc/cities/morocc.txt index 5faf5e4a6..5698016bb 100644 --- a/npc/cities/morocc.txt +++ b/npc/cities/morocc.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morroc Town //===== By: ================================================== //= kobra_k88; L0ne_W0lf //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Morroc Town NPCs diff --git a/npc/cities/moscovia.txt b/npc/cities/moscovia.txt index 456ce2851..bfc0cc633 100644 --- a/npc/cities/moscovia.txt +++ b/npc/cities/moscovia.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Moscovia Town //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Moscovia Town Script //===== Additional Comments: ================================= @@ -133,4 +133,4 @@ moscovia,253,166,4 script Soldier#mosk1 966,{ mosk_in,118,66,5 duplicate(MoscSoldier) Soldier#mosk02 966 mosk_in,133,110,3 duplicate(MoscSoldier) Soldier#mosk03 966 mosk_in,133,73,3 duplicate(MoscSoldier) Soldier#mosk04 966 -mosk_in,113,124,5 duplicate(MoscSoldier) Soldier#mosk05 966 \ No newline at end of file +mosk_in,113,124,5 duplicate(MoscSoldier) Soldier#mosk05 966 diff --git a/npc/cities/niflheim.txt b/npc/cities/niflheim.txt index c8e502514..fff3fb007 100644 --- a/npc/cities/niflheim.txt +++ b/npc/cities/niflheim.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Niflheim Script //===== By: ================================================== //= Fyrien, Dizzy, PKGINGO @@ -7,7 +7,7 @@ //= 1.5 //===== Compatible With: ===================================== //= [Aegis Conversion] -//= eAthena SVN; Niflheim Required +//= rAthena SVN; Niflheim Required //===== Description: ========================================= //= Official NPC's for Niflheim //= 1.01 Splitted file(guides, shops). Fixed rand() bugs, diff --git a/npc/cities/payon.txt b/npc/cities/payon.txt index 068931bdc..4af9f6d78 100644 --- a/npc/cities/payon.txt +++ b/npc/cities/payon.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Payon City //===== By: ================================================== //= Muad Dib (1.0) Darkchild (1.1) Muad Dib (1.2) @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 2.1b //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Payon City Npcs //===== Additional Comments: ================================= @@ -16,7 +16,7 @@ //= 1.5b - Used Dino9021's script for the Gemstone exchanger [DracoRPG] //= 1.5b1 fixed Gemstone Exchanger NPC [Lupus] //= 1.5b2 added adv.classes/baby classes support [Lupus] -//= 1.6 Fixed typo’s [Nexon] +//= 1.6 Fixed typo�s [Nexon] //= 1.7 Fixed bugs and exploits V__V [Lupus] //= 1.8 Removed Duplicates [Silent] //= 1.9 Fixed missing next;'s [Evera] diff --git a/npc/cities/prontera.txt b/npc/cities/prontera.txt index e48074e08..38de54920 100644 --- a/npc/cities/prontera.txt +++ b/npc/cities/prontera.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Town //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= NPCs in Prontera diff --git a/npc/cities/rachel.txt b/npc/cities/rachel.txt index cccd42f5b..cf6c0ed64 100644 --- a/npc/cities/rachel.txt +++ b/npc/cities/rachel.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rachel City NPCs //===== By: ================================================== //= First Version: Tsuyuki and Harp @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 0.9 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Partial Aegis Conversion] //= Arunafeltz NPCs diff --git a/npc/cities/splendide.txt b/npc/cities/splendide.txt index 58921e71e..87bf41a81 100644 --- a/npc/cities/splendide.txt +++ b/npc/cities/splendide.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Splendide Town //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Town-specific NPCs for Splendide. diff --git a/npc/cities/umbala.txt b/npc/cities/umbala.txt index 72c946509..5bf25f350 100644 --- a/npc/cities/umbala.txt +++ b/npc/cities/umbala.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Umbala Town script //===== By: ================================================== //= jAthena (1.0) Fusion Dev Team (1.1) Muad Dib (1.2) Darkchild (1.3) //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= eAthena SVN; RO Episode XX +//= rAthena SVN; RO Episode XX //===== Description: ========================================= //- [Aegis Conversion] //= Umbala Town Npcs @@ -15,7 +15,7 @@ //= 1.2 - Fixed Something by Muad Dib //= 1.3 - Fixed up For eA by Darkchild //= 1.4 - Fixed some wrong item names [Lupus] -//= 1.5 – Spell Checked [massdriller] +//= 1.5 � Spell Checked [massdriller] //= 1.6 - Fixed item names, added a chance to get to Niflheim via Jumping Bungy Area [Lupus] //= 1.7 - Fixed bugs and exploits [Lupus] //= 1.8 - Warps you to Niff with 1HP [Lance] diff --git a/npc/cities/veins.txt b/npc/cities/veins.txt index d9cc8344d..2f066f10d 100644 --- a/npc/cities/veins.txt +++ b/npc/cities/veins.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Veins Town script //===== By: ================================================== //= Muad_Dib //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Veins Town Npcs diff --git a/npc/cities/yuno.txt b/npc/cities/yuno.txt index b23d3ebc6..a9a7395ef 100644 --- a/npc/cities/yuno.txt +++ b/npc/cities/yuno.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Juno City //===== By: ================================================== //= KitsuneStarwind, kobra_k88, L0ne_W0lf //===== Current Version: ===================================== //= 1.4a //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= NPCs for the City of Juno diff --git a/npc/custom/WoE_Setter.txt b/npc/custom/WoE_Setter.txt index e78f797c9..61d5665eb 100644 --- a/npc/custom/WoE_Setter.txt +++ b/npc/custom/WoE_Setter.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium - Time Setter //===== By: ================================================== //= Fredzilla //===== Current Version: ===================================== //= 1.5a //===== Compatible With: ===================================== -//= eAthena 1.0 Final TXT +//= rAthena 1.0 Final TXT //===== Description: ========================================= //= Lets a GM set WoE times from inside the game //===== Additional Comments: ================================= @@ -184,4 +184,4 @@ L_Start: Announce "The War Of Emperium has begun!",8; AgitStart; end; -} \ No newline at end of file +} diff --git a/npc/custom/airplane.txt b/npc/custom/airplane.txt index b085397b7..5bc5d419c 100644 --- a/npc/custom/airplane.txt +++ b/npc/custom/airplane.txt @@ -1,12 +1,12 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= elRO Airship //===== By: ================================================== -//= Edited And removed irrelevent comments by eAthena Dev Team +//= Edited And removed irrelevent comments by rAthena Dev Team //= Draike\Bluto\Hephaestus //===== Current Version: ===================================== //= 2.2a //===== Compatible With: ===================================== -//= eAthena SVN 02/05/2005 + +//= rAthena SVN 02/05/2005 + //===== Description: ========================================= //= It's the elRO airship. XD //===== Additional Comments: ================================= @@ -436,4 +436,4 @@ setarray $alreadygoneto[$locationn[getarg(0)]], 1; set $destination,$locationn[$@currenttime]; announce "Pilot: The plane has arrived at "+$locationsname$[$locationn[getarg(1)]]+". Departure to "+ $locationsname$[$locationn[getarg(2)]] + " is in 3 minutes.",16; end; -} \ No newline at end of file +} diff --git a/npc/custom/ayothaya.txt b/npc/custom/ayothaya.txt index 13f2a8c48..2432bc970 100644 --- a/npc/custom/ayothaya.txt +++ b/npc/custom/ayothaya.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Wandering poet NPC //===== By: ================================================== //= by MouseJstr //===== Current Version: ===================================== //= 0.2a //===== Compatible With: ===================================== -//= eAthena 1.0 Final + +//= rAthena 1.0 Final + //===== Description: ========================================= ayothaya,58,134,5 script Louise Gluck 763,{ @@ -721,4 +721,4 @@ ayothaya,214,279,3 script Juliet 53,{ npcspeed 150; initnpctimer; end; -} \ No newline at end of file +} diff --git a/npc/custom/banks/bank.txt b/npc/custom/banks/bank.txt index fd2545671..71763543c 100644 --- a/npc/custom/banks/bank.txt +++ b/npc/custom/banks/bank.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Banker Script //===== By: ================================================== //= Syrus22 (1.0) //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= Any eAthena version with Account variables. +//= Any rAthena version with Account variables. //===== Description: ========================================= //= An account wide Banker to store Zeny //===== Additional Comments: ================================= @@ -123,4 +123,4 @@ Lcancel: mes "[Banker]"; mes "Very well... come again soon."; close; -} \ No newline at end of file +} diff --git a/npc/custom/banks/kafra_bank.txt b/npc/custom/banks/kafra_bank.txt index a02cce152..3cf851287 100644 --- a/npc/custom/banks/kafra_bank.txt +++ b/npc/custom/banks/kafra_bank.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= The 2nd Bank of Prontera ( with daily 0.01% income! ) //===== By: ================================================== //= Lupus (1.0) //===== Current Version: ===================================== //= 1.2a //===== Compatible With: ===================================== -//= eAthena 1.x +//= rAthena 1.x //===== Description: ========================================= //= A bank which has an interest % //===== Additional Comments: ================================= diff --git a/npc/custom/blackjack.txt b/npc/custom/blackjack.txt index bae7233d9..c3d5b8d8f 100644 --- a/npc/custom/blackjack.txt +++ b/npc/custom/blackjack.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Black Jack //===== By: ================================================== //= kobra_k88 @@ -346,4 +346,4 @@ sF_P5cards: mes " | "+@playCard$[3]+" | | "+@playCard$[4]+" | "; mes " '-----' '-----' "; return; -} \ No newline at end of file +} diff --git a/npc/custom/breeder.txt b/npc/custom/breeder.txt index 098665054..cec5fc522 100644 --- a/npc/custom/breeder.txt +++ b/npc/custom/breeder.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Custom Free Breeder aka Universal Renter (not reccomended) //===== By: ================================================== -//= eAthena Team +//= rAthena Team //===== Current Version: ===================================== //= 1.3a //===== Compatible With: ===================================== -//= eAthena 1.0 Final + +//= rAthena 1.0 Final + //===== Description: ========================================= //= A Free PecoPeco and Falcon Breeder //===== Additional Comments: ================================= @@ -50,4 +50,4 @@ prontera,124,201,1 script Universal Rental Npc 726,{ close; } } -} \ No newline at end of file +} diff --git a/npc/custom/card_remover.txt b/npc/custom/card_remover.txt index 035594f25..c336c0cda 100644 --- a/npc/custom/card_remover.txt +++ b/npc/custom/card_remover.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Card Removal NPC //===== By: ================================================== //= TyrNemesis^ //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Removes cards from equipped items. //===== Additional Comments: ================================= @@ -142,4 +142,4 @@ prt_in,28,73,4 script Wise Old Woman#eAcustom 78,{ mes "Very well. Return at once if you seek my services."; close; } -} \ No newline at end of file +} diff --git a/npc/custom/devnpc.txt b/npc/custom/devnpc.txt index ad0cef89e..732a8d9c0 100644 --- a/npc/custom/devnpc.txt +++ b/npc/custom/devnpc.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Dev edition NPCs! //===== By: ================================================== //= Most NPCs by Aria @@ -9,7 +9,7 @@ //===== Current Version: ===================================== //= 0.5 //===== Compatible With: ===================================== -//= eAthena 1.0 Final + +//= rAthena 1.0 Final + //===== Description: ========================================= //= NPCs of the devs! //===== Additional Comments: ================================= @@ -58,7 +58,7 @@ Lquote3: setnpctimer 0; end; Lquote4: - npctalk "I am the dark angel of eAthena.. withen weeks of my arrival, almost everybody was gone or dead.. fear me..."; + npctalk "I am the dark angel of rAthena.. withen weeks of my arrival, almost everybody was gone or dead.. fear me..."; setnpctimer 0; end; OnInit: @@ -113,7 +113,7 @@ Lquote2: setnpctimer 0; end; Lquote3: - npctalk "¿Donde estoy? *wonders* (<-- Means, where am I?)"; + npctalk "�Donde estoy? *wonders* (<-- Means, where am I?)"; setnpctimer 0; end; Lquote4: @@ -182,7 +182,7 @@ Lquote2: setnpctimer 0; end; Lquote3: - npctalk "¿Donde estoy? *wonders* (<-- Means, where am I?)"; + npctalk "�Donde estoy? *wonders* (<-- Means, where am I?)"; setnpctimer 0; end; Lquote4: @@ -208,7 +208,7 @@ prontera,156,179,4 script Aria 805,{ mes "Okay, I'm Evera's brother, Aria"; mes "^FF00FFAge^000000: 13 years"; mes "^FF00FFWhat I do^000000: Graphics and NPCs"; - mes "^FF00FFWhy I'm here^000000: Cuz eAthena ROX"; + mes "^FF00FFWhy I'm here^000000: Cuz rAthena ROX"; close; OnTimer15000: npcwalkto 150+rand(17),169+rand(16); @@ -505,4 +505,4 @@ doitagain: OnInit: initnpctimer; end; -} \ No newline at end of file +} diff --git a/npc/custom/dye.txt b/npc/custom/dye.txt index abc1f363e..33571ba19 100644 --- a/npc/custom/dye.txt +++ b/npc/custom/dye.txt @@ -1,12 +1,12 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Stylist Script //===== By: ================================================== -//= eAthena Dev team +//= rAthena Dev team //= Revised by Nekosume [pyRO v3.0] //===== Current Version: ===================================== //= 4.2 //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= Revised dye NPC //===== Additional Comments: ================================= diff --git a/npc/custom/eAAC_Scripts/DonationGirl/donate.txt b/npc/custom/eAAC_Scripts/DonationGirl/donate.txt index 91368fb5f..dc7c0bb2a 100644 --- a/npc/custom/eAAC_Scripts/DonationGirl/donate.txt +++ b/npc/custom/eAAC_Scripts/DonationGirl/donate.txt @@ -21,7 +21,7 @@ //= with decimals. //= 3.1 - Added quotes to some queries, fixed a variable and //= removed a comment. -//= 3.2 - Fixed a problem where eAthena would crash if a +//= 3.2 - Fixed a problem where rAthena would crash if a //= query returned NULL. //= 3.3 - Optimized query speeds by combining a few select //= queries into one. Requires Trunk 7975. @@ -36,7 +36,7 @@ //= 3.6 - Removed name column in donate_item_db. Added //= support for item_db2 table. //= 3.7 - Added Zeny support. $rate must be set for it to be -//= used. Removed truncate() in a query since eAthena +//= used. Removed truncate() in a query since rAthena //= automatically truncates floats to ints. //= 3.8 - Fixed problem with menus and null values. //= 3.9 - Explicit reset of @aid. @@ -46,7 +46,7 @@ //= 3.11 - Explicit reset of another variable. Fixed typo //= - with $rate. Added logmes for GM operations. //===== Compatible With ===================================== -//= eAthena SQL - any version with the new query_sql command +//= rAthena SQL - any version with the new query_sql command //= (Trunk 7975 and up). //= MySQL - 5.0.8 and up highly recommended but not required. //===== Description ========================================= @@ -57,7 +57,7 @@ //= amount donated by users and the items claimable. //===== Installation ======================================== //= You must import donate.sql and donate_item_db.sql (and -//= item_db.sql and item_db2.sql, which comes with eAthena) +//= item_db.sql and item_db2.sql, which comes with rAthena) //= before using this script. //=========================================================== //= Thanks to Vich for helping me with the SQL syntax. @@ -413,4 +413,4 @@ mes "[GM Menu]"; mes "The value of $1 successfully changed to "+$rate+"Z."; next; goto L_GM; -} \ No newline at end of file +} diff --git a/npc/custom/eAAC_Scripts/kafraExpress/config.txt b/npc/custom/eAAC_Scripts/kafraExpress/config.txt index ea29be42e..e3efab224 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/config.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/config.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Config Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.4 //===== Compatible With: ===================================== -//= Any eAthena Version with function support +//= Any rAthena Version with function support //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= This module contains the configuration of all modules. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt b/npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt index df30b9ae0..2b41f9190 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/global_functionsKE.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Global functions //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN R3424+, RO Ep6+ +//= rAthena SVN R3424+, RO Ep6+ //===== Description: ========================================= //= Global Functions //= @@ -329,4 +329,4 @@ function script GF_getJobClass { default: return -1; } -} \ No newline at end of file +} diff --git a/npc/custom/eAAC_Scripts/kafraExpress/kafras.txt b/npc/custom/eAAC_Scripts/kafraExpress/kafras.txt index e17e2da32..a8ed11e80 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/kafras.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/kafras.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - NPC definitions //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.7 //===== Compatible With: ===================================== -//= Any eAthena Version with function support; RO Episode 8+ (LightHalzen) +//= Any rAthena Version with function support; RO Episode 8+ (LightHalzen) //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Here is where the npcs are defined. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt index 65fed7d25..2f240b2df 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_bank.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Bank Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.8 //===== Compatible With: ===================================== -//= eAthena SVN R3524+ +//= rAthena SVN R3524+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers banking services with daily interests, and diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt index 4ff79c544..e750d5be0 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_broadcast.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Broadcasting Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 3.1 //===== Compatible With: ===================================== -//= eAthena SVN8637+ +//= rAthena SVN8637+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers broadcasting for party requests, pvp, general diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt index e70b6737d..75160f320 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_dye.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Stylist Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.0 //===== Compatible With: ===================================== -//= eAthena SVN8637+ +//= rAthena SVN8637+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers dying of hair, clothes and hair-style adjusts diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt index 371cc2b6a..e720af3aa 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_jobchange.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Job Changing Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 4.0 //===== Compatible With: ===================================== -//= eAthena SVN R8840+ +//= rAthena SVN R8840+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Enables job changing through the class trees. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt index adda7149e..f1499b2e6 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_jobswap.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Job Swapping Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 3.8 //===== Compatible With: ===================================== -//= eAthena SVN8840+ +//= rAthena SVN8840+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Enables job changing among classes of the same 'type' diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt index d291159c3..a8f65a2b2 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_main.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Main Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 5.7 //===== Compatible With: ===================================== -//= eAthena SVN R3424+ +//= rAthena SVN R3424+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= This module contains the main menu, plus the healing and diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt index b1ea5c987..d9ac1613b 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_refine.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Refining Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.8 //===== Compatible With: ===================================== -//= eAthena SVN R3424+ +//= rAthena SVN R3424+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Does item forging, ore purifying and repairing. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_rent.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_rent.txt index 9d3b52529..3806f20d8 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_rent.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_rent.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Rental Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN R3424+ +//= rAthena SVN R3424+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Rents PecoPecos, Falcons, Carts diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_shop.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_shop.txt index 43a53713f..0d103715d 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_shop.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_shop.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Portable Shop Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 0.1 //===== Compatible With: ===================================== -//= eAthena SVN R5195+ +//= rAthena SVN R5195+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers buying/selling shop. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt index 59bf13984..3951e2cd4 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_statmarket.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Expres - Stat/Skill Market Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.0 //===== Compatible With: ===================================== -//= eAthena SVN R3579+ +//= rAthena SVN R3579+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Lets players buy/sell skill points/stat points diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt index 064753fe7..d4d5f510e 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_stats.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Stat/Reset Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN R3424+ +//= rAthena SVN R3424+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers stat raising and Stat/Reset skills diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt index 1b750ac99..8c4f6f811 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_uncard.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Uncarder Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN R3424+ +//= rAthena SVN R3424+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers uncarding services. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt index ff8126eae..3b9c38fac 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_dungeon.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Dungeon Warps Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 4.2 //===== Compatible With: ===================================== -//= eAthena SVN R3424+, RO Episode 8+ (Hugel) +//= rAthena SVN R3424+, RO Episode 8+ (Hugel) //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers warping to dungeons. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt index 719f273dc..9e8c5cd3c 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_pvp.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Pvp Warping Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena SVN R3424+ +//= rAthena SVN R3424+ //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers warping to the PvP arenas. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt index e0c3ddd0d..66c7134c9 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_town.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - Warping Town Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN R3424+, RO Episode 8+ (Hugel) +//= rAthena SVN R3424+, RO Episode 8+ (Hugel) //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers warp services to towns. diff --git a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt index 6a59f368d..f713e1fce 100644 --- a/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt +++ b/npc/custom/eAAC_Scripts/kafraExpress/ke_warp_woe.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Express - WoE Warping Module //===== By: ================================================== //= Skotlex //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN R3424+, RO Episode 4.1+ (War of Emperium) +//= rAthena SVN R3424+, RO Episode 4.1+ (War of Emperium) //===== Description: ========================================= //= Part of the Kafra Express Script Package. //= Offers warping to the War of Emperium grounds. diff --git a/npc/custom/eAAC_Scripts/quest_warper.txt b/npc/custom/eAAC_Scripts/quest_warper.txt index 7ff06cd2e..427fff850 100644 --- a/npc/custom/eAAC_Scripts/quest_warper.txt +++ b/npc/custom/eAAC_Scripts/quest_warper.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ============================================ +//===== rAthena Script ============================================ //= Quest Warper Script //===== By: ======================================================= //= Old Warper 2 by Darkchild - Remade with quest format by DZeroX @@ -6,7 +6,7 @@ //===== Current Version: ========================================== //= 2.2 //===== Compatible With: ========================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ============================================== //= Warper that works only after locations are unlocked //===== Additional Comments: ====================================== diff --git a/npc/custom/events/2006_dogs_year.txt b/npc/custom/events/2006_dogs_year.txt index 1be5be4ff..d9df6e373 100644 --- a/npc/custom/events/2006_dogs_year.txt +++ b/npc/custom/events/2006_dogs_year.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Eastern New Year 2006 The Year Of The Fire Dog //===== By: ================================================== //= Lupus (1.0) //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena Version; 5xxx+ (with 'disguise' command) +//= rAthena Version; 5xxx+ (with 'disguise' command) //===== Description: ========================================= //= Custom event: For 28-29 January //===== Additional Comments: ================================= diff --git a/npc/custom/events/draculax.txt b/npc/custom/events/draculax.txt index 5e03ddb1e..1abd4e21d 100644 --- a/npc/custom/events/draculax.txt +++ b/npc/custom/events/draculax.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Dracula X Script //===== By: ================================================== //= valaris (1.0) //===== Current Version: ===================================== //= 1.0a //===== Compatible With: ===================================== -//= eAthena RC4+ +//= rAthena RC4+ //===== Description: ========================================= //= Custom Dracula X Event //============================================================ diff --git a/npc/custom/events/hallow06.txt b/npc/custom/events/hallow06.txt index 31085d169..9485abdc6 100644 --- a/npc/custom/events/hallow06.txt +++ b/npc/custom/events/hallow06.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Custom Halloween Event 2006 //===== By: ================================================== //= Stryker diff --git a/npc/custom/events/hyegun_event.txt b/npc/custom/events/hyegun_event.txt index e4837eb20..2a96dc57f 100644 --- a/npc/custom/events/hyegun_event.txt +++ b/npc/custom/events/hyegun_event.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= HyeGun Event //===== By: ================================================== //= Synesthesia diff --git a/npc/custom/events/kings_items.txt b/npc/custom/events/kings_items.txt index 4602877b4..1aed6bb1a 100644 --- a/npc/custom/events/kings_items.txt +++ b/npc/custom/events/kings_items.txt @@ -1,14 +1,14 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Event King Items //===== By: ================================================== //= $ephiroth //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena Version +//= rAthena Version //===== Description: ========================================= //= Grand Circlet Quest combined with Excalibur Quest. -//= Converted to eAthena format from Fusion. +//= Converted to rAthena format from Fusion. //= 2006/09/27: 1.0 Release and fully working. [$ephiroth] //============================================================ diff --git a/npc/custom/events/p_track/p_track_core.txt b/npc/custom/events/p_track/p_track_core.txt index 77b679b26..7edea017d 100644 --- a/npc/custom/events/p_track/p_track_core.txt +++ b/npc/custom/events/p_track/p_track_core.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Poring Track Main NPCs //===== By: ================================================== //= erKURITA //===== Current Version: ===================================== //= 0.0000000000000002 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= NPCs that has nothing to do with the race itself, but //= has important functions on the race itself. diff --git a/npc/custom/events/p_track/p_track_warpers.txt b/npc/custom/events/p_track/p_track_warpers.txt index 730dd2b0f..83cbfc938 100644 --- a/npc/custom/events/p_track/p_track_warpers.txt +++ b/npc/custom/events/p_track/p_track_warpers.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Poring Track Warpers //===== By: ================================================== //= erKURITA //===== Current Version: ===================================== //= 0.0000000000000002 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= NPC's for the City of Hugel. //===== Additional Comments: ================================= diff --git a/npc/custom/events/uneasy_cemetery.txt b/npc/custom/events/uneasy_cemetery.txt index 06fe4a8f8..570f88004 100644 --- a/npc/custom/events/uneasy_cemetery.txt +++ b/npc/custom/events/uneasy_cemetery.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Uneasy Prontera Cemetery Quest (original script!) //===== By: ================================================== //= Lupus //===== Current Version: ===================================== //= 1.2a (Tested and fully working!) //===== Compatible With: ===================================== -//= eAthena Version 1.0 +//= rAthena Version 1.0 //===== Description: ========================================= //= A periodical quest of the Uneasy Cemetery (Kill undead / Prevent their appearance) //= Every day, at the midnight Prontera receive a wave of Undeads. diff --git a/npc/custom/events/valentinesdayexp.txt b/npc/custom/events/valentinesdayexp.txt index 6d2b3355e..1b4436934 100644 --- a/npc/custom/events/valentinesdayexp.txt +++ b/npc/custom/events/valentinesdayexp.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Valentine Event Script + EXP bonus //===== By: ================================================== //= Lupus (based on Muad_Dib's work) diff --git a/npc/custom/events/xmas_rings_event.txt b/npc/custom/events/xmas_rings_event.txt index bc2fc3fad..b65f77cc2 100644 --- a/npc/custom/events/xmas_rings_event.txt +++ b/npc/custom/events/xmas_rings_event.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Karachun Event (Xmas Rings Quest) //===== By: ================================================== //= Lupus (1.0) //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena Version; 4880+ (with 'setItemScript' command) +//= rAthena Version; 4880+ (with 'setItemScript' command) //===== Description: ========================================= //= Custom event: Karachun (from 8 Dec till 8 Jan), X-Mas, HNY //===== Additional Comments: ================================= diff --git a/npc/custom/floating_rates.txt b/npc/custom/floating_rates.txt index 1e5f1d43e..26ab4a432 100644 --- a/npc/custom/floating_rates.txt +++ b/npc/custom/floating_rates.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ====================================================================== +//===== rAthena Script ====================================================================== //= Floating Server Rates //===== Original By ========================================================================= //= Lupus //===== Current Version: ==================================================================== //= 1.0 //===== Compatible With: ==================================================================== -//= Any eAthena, that has 'setbattleflag' function +//= Any rAthena, that has 'setbattleflag' function //===== Description: ======================================================================== //= It's a simply example of setbattleflag //= This script will change your server rates from 1x to 1.5x every 6 hours diff --git a/npc/custom/healers/heal.txt b/npc/custom/healers/heal.txt index ecce86cce..94d2f4f3b 100644 --- a/npc/custom/healers/heal.txt +++ b/npc/custom/healers/heal.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Heal Npc //===== By: ================================================== //= Lotsa People (1.x) //===== Current Version: ===================================== //= 3.1 //===== Compatible With: ===================================== -//= eAthena 0.1+; +//= rAthena 0.1+; //===== Description: ========================================= //= Healer NPC Which Heals For Free //===== Additional Comments: ================================= diff --git a/npc/custom/healers/heal_payment.txt b/npc/custom/healers/heal_payment.txt index f0c0a59b5..da1cd87db 100644 --- a/npc/custom/healers/heal_payment.txt +++ b/npc/custom/healers/heal_payment.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Healer Script (/w payments) //===== By: ================================================== //= Yor & abunch of other people diff --git a/npc/custom/jobs/jobmaster.txt b/npc/custom/jobs/jobmaster.txt index 3886ccf60..cfd7b83a1 100644 --- a/npc/custom/jobs/jobmaster.txt +++ b/npc/custom/jobs/jobmaster.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= -//= eAthena Jobchanger AKA Job Master +//===== rAthena Script ======================================= +//= rAthena Jobchanger AKA Job Master //===== By: ================================================== -//= eAthena Dev Team [Ori:LunatikBunnie] [Cur:Lance] +//= rAthena Dev Team [Ori:LunatikBunnie] [Cur:Lance] //===== Current Version: ===================================== //= 1.5a //===== Compatible With: ===================================== -//= eAthena SVN Trunk 6674 +//= rAthena SVN Trunk 6674 //===== Description: ========================================= //= Changes your job without asking too much //= For other info, please contact me at Lunatikbunnie@gmail.com diff --git a/npc/custom/jobs/reset.txt b/npc/custom/jobs/reset.txt index 64eaff29e..8592fc730 100644 --- a/npc/custom/jobs/reset.txt +++ b/npc/custom/jobs/reset.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Reset NPC for Athena by Script & DB Team //===== By: ================================================== -//= eAthena Team +//= rAthena Team //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= Resets skills, stats, or both. //===== Additional Comments: ================================= @@ -55,4 +55,4 @@ prontera,150,193,4 script Reset Girl 124,{ case 4: close; } -} \ No newline at end of file +} diff --git a/npc/custom/lottery.txt b/npc/custom/lottery.txt index 6ec520940..1165e0abb 100644 --- a/npc/custom/lottery.txt +++ b/npc/custom/lottery.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lottery Script //===== By: ================================================== //= acky - god@acky.com //===== Current Version: ===================================== //= 1.2.1a //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= Daily lottery draw. //===== Additional Comments: ================================= @@ -454,4 +454,4 @@ set $L_Rigged,1; close; } -prontera,141,182,5 duplicate(lottery) Lottery 76 \ No newline at end of file +prontera,141,182,5 duplicate(lottery) Lottery 76 diff --git a/npc/custom/market.txt b/npc/custom/market.txt index b16200972..b6eb18532 100644 --- a/npc/custom/market.txt +++ b/npc/custom/market.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Market Place //===== By =================================================== //= Lupus //===== Version ============================================== //= 1.1 //===== Compatible With ====================================== -//= eAthena 5760+ +//= rAthena 5760+ //===== Description ========================================== //= This script should move vending crowds from Prontera //= streets to a suitable market place. Save your traffic 8) @@ -38,4 +38,4 @@ prt_in mapflag novending //Market Place settings gon_test mapflag noteleport gon_test mapflag nomemo -gon_test mapflag nobranch \ No newline at end of file +gon_test mapflag nobranch diff --git a/npc/custom/marriage.txt b/npc/custom/marriage.txt index 2cf1e91ef..ed06b4abf 100644 --- a/npc/custom/marriage.txt +++ b/npc/custom/marriage.txt @@ -2,14 +2,14 @@ // Marriage Script // ////////////////////////////////////////////////////////// // -//=====eAthena Script==================================== +//=====rAthena Script==================================== // Wedding Script //=====By================================================ // AppleGirl and Evera(version 1.0) //=====Current Version=================================== // 2.9 //=====Compatible With:================================== -// eAthena Version SVN-R8637 and up; RO Episode 6+ +// rAthena Version SVN-R8637 and up; RO Episode 6+ //=====Description======================================= // Fully working wedding script for all kind of weddings //=====Additional Comments:============================== diff --git a/npc/custom/morroc_raceway.txt b/npc/custom/morroc_raceway.txt index 91dcf9efa..b81c7aca6 100644 --- a/npc/custom/morroc_raceway.txt +++ b/npc/custom/morroc_raceway.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morroc Raceway Script //===== By: ================================================== //= acky (god@acky.com) //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= Lets players race around Morroc (pvp_y_1-5) //===== Additional Comments: ================================= @@ -244,4 +244,4 @@ end; } pvp_y_1-5,174,238,4 script Finish Line#02 722,{ end; -} \ No newline at end of file +} diff --git a/npc/custom/mvm.txt b/npc/custom/mvm.txt index 1240faa48..42891324f 100644 --- a/npc/custom/mvm.txt +++ b/npc/custom/mvm.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Monster vs Monster //===== By: ================================================== //= acky - god@acky.com //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Players train monsters and battle other players. //= Experience can be earned and monsters upgraded. @@ -898,4 +898,4 @@ close; } gon_test,49,5,5 duplicate(SummonPad) Summon Pad 4 111,2,2 -gon_test,55,8,6 duplicate(monsterreferee) Referee#02 61 \ No newline at end of file +gon_test,55,8,6 duplicate(monsterreferee) Referee#02 61 diff --git a/npc/custom/penal_servitude.txt b/npc/custom/penal_servitude.txt index 673130979..725e32ddc 100644 --- a/npc/custom/penal_servitude.txt +++ b/npc/custom/penal_servitude.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Penal Servitude Script //===== By =================================================== //= Lupus //===== Version ============================================== //= 1.2 //===== Compatible With ====================================== -//= eAthena Final (SVN) +//= rAthena Final (SVN) //===== Description ========================================== //= A simple Penal Servitude Script. //= It could cheer up your prisoners a bit. @@ -80,7 +80,7 @@ L_RELEASE: close; M_Q1: -//EåñE1 +//�E��E1 mes "[Saddeus]"; mes "Our stocks are short of toadstools. Remember your morning's skilly? What about some work at our sponsored mushroom farm?"; next; @@ -191,4 +191,4 @@ sec_in02,138,55,100,100 monster Toadstool 1182,30,10000,10000,1 sec_in02,138,55,100,100 monster Fabre 1184,10,20000,20000 sec_in02,138,55,100,100 monster Chonchon 1183,11,20000,20000 sec_in02,138,55,100,100 monster Spore 1014,12,20000,20000 -sec_in02,138,55,100,100 monster Poison Spore 1077,3,20000,20000 \ No newline at end of file +sec_in02,138,55,100,100 monster Poison Spore 1077,3,20000,20000 diff --git a/npc/custom/platinum_skills.txt b/npc/custom/platinum_skills.txt index 03f137e96..dcaf25162 100644 --- a/npc/custom/platinum_skills.txt +++ b/npc/custom/platinum_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ====================================================================== +//===== rAthena Script ====================================================================== //= Platinum Skills NPC //===== By: ================================================================================= //= Keichii and edited by DarkChild //===== Current Version: ==================================================================== //= 2.7 //===== Compatible With: ==================================================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ======================================================================== //= Single NPC that assigns quests skills for all classes //===== Additional Comments: ================================================================ diff --git a/npc/custom/quests/bandit_beard.txt b/npc/custom/quests/bandit_beard.txt index cb38eff6d..a4e3bab27 100644 --- a/npc/custom/quests/bandit_beard.txt +++ b/npc/custom/quests/bandit_beard.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Bandit Beard Quest //===== By: ================================================== //= Mega Man Expert & Lupus //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 0.5.2 + +//= rAthena 0.5.2 + //===== Description: ========================================= //= A harmless quest for a simply item w/o any bonuses "Bandit Beard" //===== Additional Comments: ================================= @@ -234,4 +234,4 @@ On0001: set $@beardMob,0; set $@beardMobD,0; end; -} \ No newline at end of file +} diff --git a/npc/custom/quests/berzebub.txt b/npc/custom/quests/berzebub.txt index e4f2ff243..04d31d05c 100644 --- a/npc/custom/quests/berzebub.txt +++ b/npc/custom/quests/berzebub.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Berzebub Card Quest Script //===== By: ================================================== //= jabs //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= Any eAthena Version; RO Episode XX +//= Any rAthena Version; RO Episode XX //===== Description: ========================================= //= Quest to get the Berzebub Card //===== Additional Comments: ================================= @@ -71,4 +71,4 @@ prontera,165,178,8 script Old Woman 103,{ L_Already: mes "Hey I remember you! I already told you that you may only complete this quest once."; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/bongunsword.txt b/npc/custom/quests/bongunsword.txt index 55f1f2383..a7bc05dc5 100644 --- a/npc/custom/quests/bongunsword.txt +++ b/npc/custom/quests/bongunsword.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Munak and Bongun accessory / Taming items Quest //===== By: ================================================== -//= eAthena Team +//= rAthena Team //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Quest itms:Sword o'Chinese Exorcist,No Recipient,Her Heart //===== Additional Comments: ================================= diff --git a/npc/custom/quests/bookofthedevil.txt b/npc/custom/quests/bookofthedevil.txt index 4eaeb3925..165c1a3db 100644 --- a/npc/custom/quests/bookofthedevil.txt +++ b/npc/custom/quests/bookofthedevil.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Baphomet Jr. taming item quest. //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Book of Devil (MISC_QUEST | 256) //===== Additional Comments: ================================= diff --git a/npc/custom/quests/dead_branch.txt b/npc/custom/quests/dead_branch.txt index d2224666e..891b061d2 100644 --- a/npc/custom/quests/dead_branch.txt +++ b/npc/custom/quests/dead_branch.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Dead Branch (+Bloody Branch) Quest //===== By: ================================================== //= GM-Yevon //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena 0.5.2 + +//= rAthena 0.5.2 + //===== Description: ========================================= // Simple item trade-in quest, a person can get a Dead Branch // by simply providing the items: Log x3 (7201), Wooden Heart x1 (7189), @@ -102,4 +102,4 @@ M_END: mes "[Mister Mobry]"; mes "No spirit for you... then go!"; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/elvenear.txt b/npc/custom/quests/elvenear.txt index 8faab1ad4..188e9cf3d 100644 --- a/npc/custom/quests/elvenear.txt +++ b/npc/custom/quests/elvenear.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Daily Job Quest For Elven Ears //===== By: ================================================== //= Someone //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Elven Ears (require 75+ Base Level) //===== Additional Comments: ================================= @@ -65,4 +65,4 @@ L_Cancel: mes "Giving up already?"; mes "Oh well maybe you will participate in tommorow's quest."; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/event_6_new_hats.txt b/npc/custom/quests/event_6_new_hats.txt index 2e12104f9..17503c470 100644 --- a/npc/custom/quests/event_6_new_hats.txt +++ b/npc/custom/quests/event_6_new_hats.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Custom Quest For New Headgears //===== By: ================================================== //= RedxSwordxHero, Lupus //===== Current Version: ===================================== //= 1.4b //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= 4 brothers give you quests to get 6 new hats (missing //= from official quests) @@ -369,4 +369,4 @@ OnMinute46: if(rand(2)) end; enablenpc "Blac"; end; -} \ No newline at end of file +} diff --git a/npc/custom/quests/fashion.txt b/npc/custom/quests/fashion.txt index bbeb56b6b..82920c804 100644 --- a/npc/custom/quests/fashion.txt +++ b/npc/custom/quests/fashion.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest for Fashion Glasses (Daily Job Quest) //===== By: ================================================== //= 1.1 None //===== Current Version: ===================================== //= Any //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Quest for Fashion Glasses //===== Additional Comments: ================================= @@ -66,4 +66,4 @@ M_CANCEL: mes "participate in tommorow's"; mes "quest."; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/ironcane.txt b/npc/custom/quests/ironcane.txt index 18d37de5c..e0520765f 100644 --- a/npc/custom/quests/ironcane.txt +++ b/npc/custom/quests/ironcane.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest For Iron Cain //===== By: ================================================== //= eA Dev Team //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Iron Cain (lower part of a full helmet) //===== Additional Comments: ================================= @@ -46,4 +46,4 @@ L_Unfathomable: mes "What I had to go through was more unfathomable.."; mes "If you succeed in getting these items, you will have incredible strength!"; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/kiel_quest.txt b/npc/custom/quests/kiel_quest.txt index 4f6478f38..a672fd45b 100644 --- a/npc/custom/quests/kiel_quest.txt +++ b/npc/custom/quests/kiel_quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Custom Kiel Dungeon Warper //===== By: ================================================== //= Lupus //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= I't custom 8) But you have to pay every time u enter //===== Additional Comments: ================================= @@ -60,4 +60,4 @@ M_GO: end; } -kh_kiehl02,49,5,0 warp warpk06 1,1,kh_school,119,146 \ No newline at end of file +kh_kiehl02,49,5,0 warp warpk06 1,1,kh_school,119,146 diff --git a/npc/custom/quests/lvl99_quest.txt b/npc/custom/quests/lvl99_quest.txt index d301211b4..214580971 100644 --- a/npc/custom/quests/lvl99_quest.txt +++ b/npc/custom/quests/lvl99_quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest for 99 Base Level Players //===== By: ================================================== //= Lupus //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= It makes players stay longer at 99th level and get a //= Jewel Case as a reward @@ -64,4 +64,4 @@ lighthalzen,108,229,2 script La Fenn 766,{ emotion e_hmm; mes "..."; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/magicalhatquest.txt b/npc/custom/quests/magicalhatquest.txt index c24b22ed3..6191cf903 100644 --- a/npc/custom/quests/magicalhatquest.txt +++ b/npc/custom/quests/magicalhatquest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Wizard Hat Custom Quest //===== By: ================================================== //= Who //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Wizard Hat quest. Harmless, doesn't screw game balance. //===== Additional Comments: ================================= @@ -55,4 +55,4 @@ M_RIPOFF: mes "If you succeed in getting these items, you will have incredible strength!"; emotion e_hmm; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/may_hats.txt b/npc/custom/quests/may_hats.txt index 2d6578ac8..dc28a185f 100644 --- a/npc/custom/quests/may_hats.txt +++ b/npc/custom/quests/may_hats.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quests: Bird Nest, Lion Mask, Skeleton Manteau, //= Fashion Hip Sack & Sales Banner //===== By: ================================================== @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.01 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Custom quest for some RO mobile game bonus items //===== Additional Comments: ================================= @@ -177,4 +177,4 @@ M_EXIT: mes "[Yakima]"; mes callfunc("F_Bye"); close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/sphinx_mask.txt b/npc/custom/quests/sphinx_mask.txt index 178aee60d..059e69408 100644 --- a/npc/custom/quests/sphinx_mask.txt +++ b/npc/custom/quests/sphinx_mask.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Sphinx Mask Quest (custom) //===== By: ================================================== -//= sabernet09 & eAthena Team +//= sabernet09 & rAthena Team //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= this quest is related to Umbalian Chief //= 1.1 Removed it from official Umbala quests [Lupus] @@ -77,4 +77,4 @@ morocc,140,156,5 script Turban Thief 58,{ mes "[Turban Thief]"; mes "Are youz playin wit me? You don't have ze money!"; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/sunglasses.txt b/npc/custom/quests/sunglasses.txt index c708b011a..5b0f5cf49 100644 --- a/npc/custom/quests/sunglasses.txt +++ b/npc/custom/quests/sunglasses.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest For Slotted Sunglasses //===== By: ================================================== //= Aegis - amichan //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= Any eAthena Version; +//= Any rAthena Version; //===== Description: ========================================= //= Quest to get Slotted Sunglasses //===== Additional Comments: ================================= @@ -142,4 +142,4 @@ L_SG_Funds: mes "[Maseph]"; mes "You do not have enough money. Please come back to me when you do."; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/tha_statues.txt b/npc/custom/quests/tha_statues.txt index 133810d7b..47e4237c1 100644 --- a/npc/custom/quests/tha_statues.txt +++ b/npc/custom/quests/tha_statues.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Custom Thanatos Tower Quest //===== By: ================================================== //= Bibilol & Moryagorn //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= Any eAthena Version; +//= Any rAthena Version; //===== Description: ========================================= //= Custom Thanatos Tower Quest //===== Additional Comments: ================================= @@ -274,4 +274,4 @@ nook: next; set TSQ_CHK,0; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/thq/THQS_ChatingNPC.txt b/npc/custom/quests/thq/THQS_ChatingNPC.txt index 18d5bc48c..4fc4ad796 100644 --- a/npc/custom/quests/thq/THQS_ChatingNPC.txt +++ b/npc/custom/quests/thq/THQS_ChatingNPC.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Treasure Hunter Script //===== Converted By ========================================= //= Fredzilla @@ -12,7 +12,7 @@ //===== Version ============================================== //= 1.0 - Straight conversion of Aegis NPC file //===== Compatible With ====================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description ========================================== //= Start for Treasure hunter quests //===== Comments ============================================= @@ -100,4 +100,4 @@ N_Member: N_Chat: mes ""+strcharinfo(0)+" don't you have something better you could be doing? Like a quest."; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/thq/THQS_GuildNPC.txt b/npc/custom/quests/thq/THQS_GuildNPC.txt index ca851a997..69216e89d 100644 --- a/npc/custom/quests/thq/THQS_GuildNPC.txt +++ b/npc/custom/quests/thq/THQS_GuildNPC.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Treasure Hunter Script //===== Converted By ========================================= //= Fredzilla @@ -12,7 +12,7 @@ //===== Version ============================================== //= 1.0 - Straight conversion of Aegis NPC file //===== Compatible With ====================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description ========================================== //= Start for Treasure hunter quests //===== Comments ============================================= @@ -92,4 +92,4 @@ N_NVM: mes "Alright come back when you have the free time to spare."; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/thq/THQS_QuestNPC.txt b/npc/custom/quests/thq/THQS_QuestNPC.txt index f03cb4374..da184e10e 100644 --- a/npc/custom/quests/thq/THQS_QuestNPC.txt +++ b/npc/custom/quests/thq/THQS_QuestNPC.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Treasure Hunter Script //===== Converted By ========================================= //= Fredzilla @@ -12,7 +12,7 @@ //===== Version ============================================== //= 1.4 //===== Compatible With ====================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description ========================================== //= Start for Treasure hunter quests //===== Comments ============================================= diff --git a/npc/custom/quests/thq/THQS_Quests.txt b/npc/custom/quests/thq/THQS_Quests.txt index 8e6a79b70..a53d8a4b0 100644 --- a/npc/custom/quests/thq/THQS_Quests.txt +++ b/npc/custom/quests/thq/THQS_Quests.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Treasure Hunter Script //===== Converted By ========================================= //= Fredzilla @@ -12,7 +12,7 @@ //===== Version ============================================== //= 1.5 //===== Compatible With ====================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description ========================================== //= Start for Treasure hunter quests //===== Comments ============================================= diff --git a/npc/custom/quests/thq/THQS_TTShop.txt b/npc/custom/quests/thq/THQS_TTShop.txt index 9dbc07657..5bb80a597 100644 --- a/npc/custom/quests/thq/THQS_TTShop.txt +++ b/npc/custom/quests/thq/THQS_TTShop.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Treasure Hunter Script //===== Converted By ========================================= //= Fredzilla @@ -12,7 +12,7 @@ //===== Version ============================================== //= 1.1 //===== Compatible With ====================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description ========================================== //= Start for Treasure hunter quests //===== Comments ============================================= @@ -520,4 +520,4 @@ N_CZomb: logmes "Treasure Token: Bought a Zombie Card"; getitem 4038,1;//Items: Zombie_Card, close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/umbalian_language.txt b/npc/custom/quests/umbalian_language.txt index 1fd16f608..c3d0fed51 100644 --- a/npc/custom/quests/umbalian_language.txt +++ b/npc/custom/quests/umbalian_language.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Custom Umbalian Language Quest //===== By: ================================================== -//= sabernet09 & eAthena Team +//= sabernet09 & rAthena Team //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= 1.0 Removed it from offical Umbala Quests [Lupus] //============================================================ @@ -210,4 +210,4 @@ L_DONE: L_NOT_MET: mes "Oh yeah, tell them I sent you, their names are Marie, Mason and Mojo."; close; -} \ No newline at end of file +} diff --git a/npc/custom/quests/valhallen.txt b/npc/custom/quests/valhallen.txt index 4a1b1fe79..fbe79cd40 100644 --- a/npc/custom/quests/valhallen.txt +++ b/npc/custom/quests/valhallen.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Valhallen items Quests NPC //===== By: ================================================== //= Avaji //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= All-in-one: Mjollnir,Sleipnir,Brisingammen,Gleipnir,Megingjard //===== Additional Comments: ================================= @@ -194,4 +194,4 @@ L_OUT: mes "[Lenneth]"; mes "Please return when you change your mind."; close; -} \ No newline at end of file +} diff --git a/npc/custom/rpsroulette.txt b/npc/custom/rpsroulette.txt index 4eab9c692..75e31e972 100644 --- a/npc/custom/rpsroulette.txt +++ b/npc/custom/rpsroulette.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rock Scissors Roulette Script //===== By: ================================================== //= acky (1.1) //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= Plays a hybrid Russian Roulette Rock Scissors Paper game. //===== Additional Comments: ================================= @@ -283,4 +283,4 @@ P10: LEAVE: mes "Pansy."; close; -} \ No newline at end of file +} diff --git a/npc/custom/shifty_assassin.txt b/npc/custom/shifty_assassin.txt index ce454118d..0f8e32e4c 100644 --- a/npc/custom/shifty_assassin.txt +++ b/npc/custom/shifty_assassin.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Shifty Assassin //===== By: ================================================== //= acky - god@acky.com //===== Current Version: ===================================== //= 1.1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Players buy ninjas to assassinate other players //===== Additional Comments: ================================= @@ -206,4 +206,4 @@ end; OnInit: set $ninja_avail,$ninja_avail+1; end; -} \ No newline at end of file +} diff --git a/npc/custom/sign_your_items.txt b/npc/custom/sign_your_items.txt index 6e7f8cda2..bac8207ea 100644 --- a/npc/custom/sign_your_items.txt +++ b/npc/custom/sign_your_items.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= * Sign Your Items * //===== By: ================================================== //= Lupus //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 1 +//= rAthena 1 //===== Description: ========================================= //= Write you name on your rare equipment or weapon ^_- //= Original X-Mas mini-quest(could be used as a permanent one) @@ -212,4 +212,4 @@ M_END: mes "See you..."; emotion e_yawn; close; -} \ No newline at end of file +} diff --git a/npc/custom/stock_market.txt b/npc/custom/stock_market.txt index 8b907380c..23fdfe23f 100644 --- a/npc/custom/stock_market.txt +++ b/npc/custom/stock_market.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Stock Market Game //===== By: ================================================== //= acky (acky@bigpond.net.au) //===== Current Version: ===================================== //= 1.3.1 //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= NPC for a stock market game. //===== Additional Comments: ================================= diff --git a/npc/custom/warper.txt b/npc/custom/warper.txt index 55d2d4f54..a8bca48b2 100644 --- a/npc/custom/warper.txt +++ b/npc/custom/warper.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Warper Script //===== By: ================================================== //= Darkchild //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= Any eAthena Version; +//= Any rAthena Version; //===== Description: ========================================= //= Generic warper... //===== Additional Comments: ================================= diff --git a/npc/events/MemorialDay_2008.txt b/npc/events/MemorialDay_2008.txt index 9e67216a7..b93210497 100644 --- a/npc/events/MemorialDay_2008.txt +++ b/npc/events/MemorialDay_2008.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= In Memory of Heroes (iRO Memorial Day 2008) //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= // //===== Additional Comments: ================================= @@ -429,4 +429,4 @@ prontera,150,270,4 script Grast#Memorial 900,{ mes "That's a good idea."; mes "Then I'll be waiting for your return."; close; -} \ No newline at end of file +} diff --git a/npc/events/StPatrick_2008.txt b/npc/events/StPatrick_2008.txt index 8fac11831..3e85c8a04 100644 --- a/npc/events/StPatrick_2008.txt +++ b/npc/events/StPatrick_2008.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= St. Patrick's Day (2008) //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= iRO St. Patrick's Day. (2008) //= Find O'Riley's treasure for him, then hunt down coinds from diff --git a/npc/events/children_week.txt b/npc/events/children_week.txt index e8fcd770e..e0d3fec88 100644 --- a/npc/events/children_week.txt +++ b/npc/events/children_week.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Children Week Event //===== By: ================================================== //= Samuray22 //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Indian Ro: Children Week Event @@ -83,4 +83,4 @@ prontera,146,91,5 script Pandit chacha#child07 61,{ mes "Hahaha."; mes "Are you enjoying children week~? "; close; -} \ No newline at end of file +} diff --git a/npc/events/christmas_2005.txt b/npc/events/christmas_2005.txt index 7c3512541..fd82b553f 100644 --- a/npc/events/christmas_2005.txt +++ b/npc/events/christmas_2005.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= 2005 ChristMas Event //===== By: ================================================== //= Brainstorm //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Event 1: Louise's Kim creates Louise's Santa Hat. diff --git a/npc/events/christmas_2008.txt b/npc/events/christmas_2008.txt index a696de501..44aba7738 100644 --- a/npc/events/christmas_2008.txt +++ b/npc/events/christmas_2008.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO 2008 Christmas Event //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= iRO Christmas Event. (2008) //= Create Music Box and Cake. @@ -583,13 +583,13 @@ prontera,226,306,4 script Caroller#iROxmas08 79,{ mes "Let's see!!"; mes "One! Two! Three!"; if (.@SantaCardNpc == 1) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; } else if (.@SantaCardNpc == 2) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; } else if (.@SantaCardNpc == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; } next; set .@SantaCardTurn,.@SantaCardTurn+1; @@ -1050,4 +1050,4 @@ gef_fild14,0,0,0,0 monster Antonio 1247,1,0,0,0 xmas_fild01,0,0,0,0 monster Christmas Jakk 1244,5,0,0,0 xmas_fild01,0,0,0,0 monster Christmas Goblin 1245,5,0,0,0 xmas_fild01,0,0,0,0 monster Christmas Cookie 1246,5,0,0,0 -xmas_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0 \ No newline at end of file +xmas_fild01,0,0,0,0 monster Antonio 1247,1,0,0,0 diff --git a/npc/events/dumplingfestival.txt b/npc/events/dumplingfestival.txt index 898d20368..78d7e9e56 100644 --- a/npc/events/dumplingfestival.txt +++ b/npc/events/dumplingfestival.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Imitation of Dumpling Festival //===== By =================================================== //= Massdriller //===== Version ============================================== //= 1.01 //===== Compatible With ====================================== -//= eAthena 0.52+ +//= rAthena 0.52+ //===== Description ========================================== //= A complete redering of the Dumpling Festival. //===== Comments ============================================= diff --git a/npc/events/easter.txt b/npc/events/easter.txt index 0aa8bf626..258988c15 100644 --- a/npc/events/easter.txt +++ b/npc/events/easter.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Easter Egg Event //===== By: ================================================== //= kobra_k88 diff --git a/npc/events/easter_2008.txt b/npc/events/easter_2008.txt index 0d9f703da..026d2a3d2 100644 --- a/npc/events/easter_2008.txt +++ b/npc/events/easter_2008.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Easter Event (2008) //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= iRO Easter Event. (2008) //= Create Holy Eggs diff --git a/npc/events/event_skill_reset.txt b/npc/events/event_skill_reset.txt index 2ee77148a..6f5e80cff 100644 --- a/npc/events/event_skill_reset.txt +++ b/npc/events/event_skill_reset.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Official Skill Resetter Event in Yuno (kRO & idRO) //===== By: ================================================== //= $ephiroth //===== Current Version: ===================================== //= 1.02 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= 2006 - Edition Skill Reset NPC //= 2006/11/16: 1.0 Release and fully working. [$ephiroth] diff --git a/npc/events/gdevent_aru.txt b/npc/events/gdevent_aru.txt index 1c6c70d95..8fd4c4a1d 100644 --- a/npc/events/gdevent_aru.txt +++ b/npc/events/gdevent_aru.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Guild dungeon event, Arunafeltz. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Guild dungeon event, Arunafeltz. Retrieve Morestone's //= pickaxe from Kublin. @@ -985,8 +985,8 @@ arug_que01,100,81,3 script Pierrot Pier#aru_gd 715,{ } else { mes "[Pierrot Pier]"; - mes "Você encontrou o tesouro?"; - mes "Mostre-me o que você tem nas mãos agora."; + mes "Voc� encontrou o tesouro?"; + mes "Mostre-me o que voc� tem nas m�os agora."; next; mes "[Pierrot Pier]"; mes "Deixe-me ver..."; diff --git a/npc/events/gdevent_sch.txt b/npc/events/gdevent_sch.txt index 9f2064afd..6bf391b28 100644 --- a/npc/events/gdevent_sch.txt +++ b/npc/events/gdevent_sch.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Guild dungeon event, Schwaltzvalt. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Guild dungeon event, Schwaltzvalt. Retrieve Morestone's //= pickaxe from Kublin. @@ -984,8 +984,8 @@ schg_que01,100,81,3 script Pierrot Pier#sch_gd 715,{ } else { mes "[Pierrot Pier]"; - mes "Você encontrou o tesouro?"; - mes "Mostre-me o que você tem nas mãos agora."; + mes "Voc� encontrou o tesouro?"; + mes "Mostre-me o que voc� tem nas m�os agora."; next; mes "[Pierrot Pier]"; mes "Deixe-me ver..."; diff --git a/npc/events/god_se_festival.txt b/npc/events/god_se_festival.txt index 4d0bff4a3..c9f84d6e0 100644 --- a/npc/events/god_se_festival.txt +++ b/npc/events/god_se_festival.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Valkyrie's Gift NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Post-God Item SE Creation Summoning Event diff --git a/npc/events/halloween_2006.txt b/npc/events/halloween_2006.txt index f92f5a995..167bce60a 100644 --- a/npc/events/halloween_2006.txt +++ b/npc/events/halloween_2006.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= 2006 Halloween Event //===== By: ================================================== //= Brainstorm //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Event 1: Redeem "Pumpkin Mojo" for pumpkin headgear. diff --git a/npc/events/halloween_2008.txt b/npc/events/halloween_2008.txt index 9f467ae09..903ec125f 100644 --- a/npc/events/halloween_2008.txt +++ b/npc/events/halloween_2008.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Halloween (2008) //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= iRO Halloween (2008) //= Run away from the zombies for tickets. @@ -273,4 +273,4 @@ evt_zombie,267,89,1 script zombiewarp003 45,2,2,{ evt_zombie,0,0,0,0 monster Zombie 3000,150,0,0,0 evt_zombie,0,0,0,0 monster Ghoul 3001,80,0,0,0 -evt_zombie,0,0,0,0 monster Zombie Master 3002,20,0,0,0 \ No newline at end of file +evt_zombie,0,0,0,0 monster Zombie Master 3002,20,0,0,0 diff --git a/npc/events/halloween_2009.txt b/npc/events/halloween_2009.txt index cdabb699c..2e5586de4 100644 --- a/npc/events/halloween_2009.txt +++ b/npc/events/halloween_2009.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Halloween (2009) //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= iRO Halloween (2009) //= Quest for Weird Pumpkin Hat. @@ -439,4 +439,4 @@ prontera,156,195,5 duplicate(09HallowWiz) Halloween Wizard#1 737 geffen,133,122,5 duplicate(09HallowWiz) Halloween Wizard#2 737 payon,156,196,5 duplicate(09HallowWiz) Halloween Wizard#3 737 alberta,96,57,5 duplicate(09HallowWiz) Halloween Wizard#4 737 -aldebaran,146,122,5 duplicate(09HallowWiz) Halloween Wizard#5 737 \ No newline at end of file +aldebaran,146,122,5 duplicate(09HallowWiz) Halloween Wizard#5 737 diff --git a/npc/events/idul_fitri.txt b/npc/events/idul_fitri.txt index 1ca2bc36e..037c316ae 100644 --- a/npc/events/idul_fitri.txt +++ b/npc/events/idul_fitri.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Feast Day Of Ramadan Idul Fitri Event //===== By: ================================================== //= $ephiroth //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena Version +//= rAthena Version //===== Description: ========================================= //= Info : Official idRO //= 2006/10/16: 1.0 Release and fully working. [$ephiroth] diff --git a/npc/events/lunar_2008.txt b/npc/events/lunar_2008.txt index ff02788aa..7e5530981 100644 --- a/npc/events/lunar_2008.txt +++ b/npc/events/lunar_2008.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lunar New Year Event (2008) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= iRO Lunar New Year event; Year of the Rat. (2008) //= Kill Cramps, Taruus, and Matrins to retrieve "Rice Pouches" diff --git a/npc/events/nguild/nguild_dunsw.txt b/npc/events/nguild/nguild_dunsw.txt index 206fc4cd7..8a34362f3 100644 --- a/npc/events/nguild/nguild_dunsw.txt +++ b/npc/events/nguild/nguild_dunsw.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Dungeon Switch for NGuild Castles //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena 0.1+; RO Episode 4+ +//= rAthena 0.1+; RO Episode 4+ //===== Description: ========================================= //= Switch that warps guild members to the guild dungeon //===== Additional Comments: ================================= diff --git a/npc/events/nguild/nguild_ev_agit.txt b/npc/events/nguild/nguild_ev_agit.txt index 4ab643931..27b3908e1 100644 --- a/npc/events/nguild/nguild_ev_agit.txt +++ b/npc/events/nguild/nguild_ev_agit.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium - NGuild Wars Events //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena 0.1+; RO Episode 4+ +//= rAthena 0.1+; RO Episode 4+ //===== Description: ========================================= //= Event Triggers for NGuild Wars //===== Additional Comments: ================================= diff --git a/npc/events/nguild/nguild_flags.txt b/npc/events/nguild/nguild_flags.txt index fc8323ae2..1642c4419 100644 --- a/npc/events/nguild/nguild_flags.txt +++ b/npc/events/nguild/nguild_flags.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium N Guild Flags //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 0.1+; RO Episode 4+ +//= rAthena 0.1+; RO Episode 4+ //===== Description: ========================================= //= WoE flag scripts. Display guild emblems on flags. //===== Additional Comments: ================================= diff --git a/npc/events/nguild/nguild_guardians.txt b/npc/events/nguild/nguild_guardians.txt index ff16d075f..299c3a380 100644 --- a/npc/events/nguild/nguild_guardians.txt +++ b/npc/events/nguild/nguild_guardians.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium - nguild guardians script //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 0.1+; RO Episode 4+ +//= rAthena 0.1+; RO Episode 4+ //===== Description: ========================================= //= Re-spawns guardians on server start if they have been //= purchased. Also announces when a guardian dies. diff --git a/npc/events/nguild/nguild_kafras.txt b/npc/events/nguild/nguild_kafras.txt index e590c4b28..a4bd7ff01 100644 --- a/npc/events/nguild/nguild_kafras.txt +++ b/npc/events/nguild/nguild_kafras.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Kafras for N Guild Castles //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 0.1+; RO Episode 5+ +//= rAthena 0.1+; RO Episode 5+ //===== Description: ========================================= //= Provides Kafra services for guild members of NGuild Castles. //= Used in conjuction with function F_Kafra. diff --git a/npc/events/nguild/nguild_managers.txt b/npc/events/nguild/nguild_managers.txt index f6b554c2b..7d5bf52ff 100644 --- a/npc/events/nguild/nguild_managers.txt +++ b/npc/events/nguild/nguild_managers.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Managers for N Guild Castles //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena 0.1+; RO Episode 4+ +//= rAthena 0.1+; RO Episode 4+ //===== Description: ========================================= //= //============================================== diff --git a/npc/events/nguild/nguild_treas.txt b/npc/events/nguild/nguild_treas.txt index 594eba9e6..1fc8cbaf9 100644 --- a/npc/events/nguild/nguild_treas.txt +++ b/npc/events/nguild/nguild_treas.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Treasure Rooms for NGuild Guild Castles //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.3b //===== Compatible With: ===================================== -//= eAthena 0.1+; RO Episode 4+ +//= rAthena 0.1+; RO Episode 4+ //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/events/nguild/nguild_warper.txt b/npc/events/nguild/nguild_warper.txt index 548d37bb7..41d51ca59 100644 --- a/npc/events/nguild/nguild_warper.txt +++ b/npc/events/nguild/nguild_warper.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Novice's Guild Castles War of Emperium Usher NPC //===== By: ================================================== //= Lupus //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena 1+ with eaclass(); RO Episode 4+ +//= rAthena 1+ with eaclass(); RO Episode 4+ //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/events/twintowers.txt b/npc/events/twintowers.txt index 707c3f2a0..7557b7c6e 100644 --- a/npc/events/twintowers.txt +++ b/npc/events/twintowers.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Twin Towers NPCs //===== By: ================================================== //= sEiKaN (1.0) diff --git a/npc/events/valentinesday.txt b/npc/events/valentinesday.txt index e7a33ef8d..c067a1491 100644 --- a/npc/events/valentinesday.txt +++ b/npc/events/valentinesday.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Valentine Event Script //===== By: ================================================== //= Muad_Dib(Prometheus Project) @@ -11,7 +11,7 @@ //===== Additional Comments: ================================= //= 07/06/05 : Added 1st Version. [Muad_Dib] //= 08/28/05 : Ver. 1.01 Added a missing close; [Muad_Dib] -//= Converted to eAthena format by Dr.Evil +//= Converted to rAthena format by Dr.Evil //============================================================ diff --git a/npc/events/valentinesday_2009.txt b/npc/events/valentinesday_2009.txt index a9db606aa..57b2e3f22 100644 --- a/npc/events/valentinesday_2009.txt +++ b/npc/events/valentinesday_2009.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Valentine's Day Event (2009) //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= iRO Valentine's Day Event. (2009) //= Make Chocolate/Chocolate Boxes/Home-Made Chocolate. @@ -627,4 +627,4 @@ prt_castle,42,35,3 script Dessert Manager#Val09 47,{ close; } -} \ No newline at end of file +} diff --git a/npc/events/whiteday.txt b/npc/events/whiteday.txt index 0d46ca38d..8046bd4c1 100644 --- a/npc/events/whiteday.txt +++ b/npc/events/whiteday.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= White Day Event Script //===== By: ================================================== //= 1.0a Muad_Dib (Prometheus Project) @@ -10,7 +10,7 @@ //= Sells candy, candy cane and well baked cookie. //===== Additional Comments: ================================= //= 07/06/05 : Added 1st Version. [Muad_Dib] -//= Converted to eAthena format by Dr.Evil +//= Converted to rAthena format by Dr.Evil //============================================================ diff --git a/npc/events/xmas.txt b/npc/events/xmas.txt index d21f0de02..5a211c18d 100644 --- a/npc/events/xmas.txt +++ b/npc/events/xmas.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= X-mas Event //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= Any version of eAthena +//= Any version of rAthena //===== Description: ========================================= //= Beat up Antonios and grab his socks. Get at least 3 and //= give them to Santa Claus Claus in exchange for a present. diff --git a/npc/guides/guides_alberta.txt b/npc/guides/guides_alberta.txt index 921f8ec5e..79eae5cd9 100644 --- a/npc/guides/guides_alberta.txt +++ b/npc/guides/guides_alberta.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Alberta Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Alberta diff --git a/npc/guides/guides_aldebaran.txt b/npc/guides/guides_aldebaran.txt index f47bb1c79..c417761fc 100644 --- a/npc/guides/guides_aldebaran.txt +++ b/npc/guides/guides_aldebaran.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Al De Baran Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Al De baran diff --git a/npc/guides/guides_amatsu.txt b/npc/guides/guides_amatsu.txt index 6bb81586a..7d0379cf4 100644 --- a/npc/guides/guides_amatsu.txt +++ b/npc/guides/guides_amatsu.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Amatsu Guide //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Amatsu diff --git a/npc/guides/guides_ayothaya.txt b/npc/guides/guides_ayothaya.txt index 2ad076769..cafc85dc9 100644 --- a/npc/guides/guides_ayothaya.txt +++ b/npc/guides/guides_ayothaya.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ayothaya Guide //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Ayothaya diff --git a/npc/guides/guides_brasilis.txt b/npc/guides/guides_brasilis.txt index 77df5b4f5..3e85540ac 100644 --- a/npc/guides/guides_brasilis.txt +++ b/npc/guides/guides_brasilis.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brasilis Guide //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Brasilis diff --git a/npc/guides/guides_comodo.txt b/npc/guides/guides_comodo.txt index 4363a3578..d1d7f1125 100644 --- a/npc/guides/guides_comodo.txt +++ b/npc/guides/guides_comodo.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Comodo Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Comodo diff --git a/npc/guides/guides_einbroch.txt b/npc/guides/guides_einbroch.txt index 17a70e375..180a9bc29 100644 --- a/npc/guides/guides_einbroch.txt +++ b/npc/guides/guides_einbroch.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbroch, and Einbech Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Einbroch, and Einbech diff --git a/npc/guides/guides_geffen.txt b/npc/guides/guides_geffen.txt index 75e9c71ba..10951b509 100644 --- a/npc/guides/guides_geffen.txt +++ b/npc/guides/guides_geffen.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffen Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Geffen diff --git a/npc/guides/guides_gonryun.txt b/npc/guides/guides_gonryun.txt index d84f4f4a3..24b15dba0 100644 --- a/npc/guides/guides_gonryun.txt +++ b/npc/guides/guides_gonryun.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kunlun Guide //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Kunlun diff --git a/npc/guides/guides_hugel.txt b/npc/guides/guides_hugel.txt index 71a5b8d51..7b3fd27ac 100644 --- a/npc/guides/guides_hugel.txt +++ b/npc/guides/guides_hugel.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hugel Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Hugel diff --git a/npc/guides/guides_izlude.txt b/npc/guides/guides_izlude.txt index 76be52f29..45fe0cd8a 100644 --- a/npc/guides/guides_izlude.txt +++ b/npc/guides/guides_izlude.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Izlude Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Izlude diff --git a/npc/guides/guides_juno.txt b/npc/guides/guides_juno.txt index 5cd65f9ef..652b218af 100644 --- a/npc/guides/guides_juno.txt +++ b/npc/guides/guides_juno.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Juno Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Juno diff --git a/npc/guides/guides_lighthalzen.txt b/npc/guides/guides_lighthalzen.txt index ee034c82b..045e7b1a2 100644 --- a/npc/guides/guides_lighthalzen.txt +++ b/npc/guides/guides_lighthalzen.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lighthalzen Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Lighthalzen diff --git a/npc/guides/guides_louyang.txt b/npc/guides/guides_louyang.txt index ac12e26e2..a136391d4 100644 --- a/npc/guides/guides_louyang.txt +++ b/npc/guides/guides_louyang.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Louyang Guide //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Louyang diff --git a/npc/guides/guides_lutie.txt b/npc/guides/guides_lutie.txt index 117d6a1cd..60b9a97c2 100644 --- a/npc/guides/guides_lutie.txt +++ b/npc/guides/guides_lutie.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lutie Guide //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Lutie diff --git a/npc/guides/guides_morroc.txt b/npc/guides/guides_morroc.txt index 7ddb7acc5..8ff31b7ed 100644 --- a/npc/guides/guides_morroc.txt +++ b/npc/guides/guides_morroc.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morroc Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Morroc, and Morroc Ruins diff --git a/npc/guides/guides_moscovia.txt b/npc/guides/guides_moscovia.txt index c32ca5737..a4f96bcae 100644 --- a/npc/guides/guides_moscovia.txt +++ b/npc/guides/guides_moscovia.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Moscovia Guide //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Moscovia diff --git a/npc/guides/guides_niflheim.txt b/npc/guides/guides_niflheim.txt index 7ca237b53..b5c7a62fc 100644 --- a/npc/guides/guides_niflheim.txt +++ b/npc/guides/guides_niflheim.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Niflheim Guide //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Niflehim @@ -68,4 +68,4 @@ niflheim,201,187,3 script Niflheim Guide#01nif 849,{ close; } } -} \ No newline at end of file +} diff --git a/npc/guides/guides_payon.txt b/npc/guides/guides_payon.txt index c5399a541..c96e02532 100644 --- a/npc/guides/guides_payon.txt +++ b/npc/guides/guides_payon.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Payon Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Payon diff --git a/npc/guides/guides_prontera.txt b/npc/guides/guides_prontera.txt index b08be507c..8e254453c 100644 --- a/npc/guides/guides_prontera.txt +++ b/npc/guides/guides_prontera.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Prontera diff --git a/npc/guides/guides_rachel.txt b/npc/guides/guides_rachel.txt index 942f5d2bc..665ae6890 100644 --- a/npc/guides/guides_rachel.txt +++ b/npc/guides/guides_rachel.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rachel Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guide for the city of Rachel diff --git a/npc/guides/guides_umbala.txt b/npc/guides/guides_umbala.txt index 1f9b845cd..b6af2e934 100644 --- a/npc/guides/guides_umbala.txt +++ b/npc/guides/guides_umbala.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Umbala Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Umbala diff --git a/npc/guides/guides_veins.txt b/npc/guides/guides_veins.txt index f28b5d607..12cfb95bf 100644 --- a/npc/guides/guides_veins.txt +++ b/npc/guides/guides_veins.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Veins Guides //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guides for the city of Veins diff --git a/npc/guild/agit_controller.txt b/npc/guild/agit_controller.txt index 7fafd962f..4d21e1e82 100644 --- a/npc/guild/agit_controller.txt +++ b/npc/guild/agit_controller.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium - WoE Auto-Start //===== By: ================================================== //= kalen (1.0) @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 2.0 //===== Compatible With: ===================================== -//= eAthena SVN; RO Episode 4+ +//= rAthena SVN; RO Episode 4+ //===== Description: ========================================= //= Auto Start for War of Emperium //============================================= diff --git a/npc/guild/agit_template.txt b/npc/guild/agit_template.txt index 41b706fb2..c380c9fd0 100644 --- a/npc/guild/agit_template.txt +++ b/npc/guild/agit_template.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Guild Template File //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [ Aegis Conversion] //= ---------------------------------------------------------- diff --git a/npc/guild/aldeg_cas01.txt b/npc/guild/aldeg_cas01.txt index 01f17d148..9f3c86212 100644 --- a/npc/guild/aldeg_cas01.txt +++ b/npc/guild/aldeg_cas01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Al De baran) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Al De Baran Guild Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild/aldeg_cas02.txt b/npc/guild/aldeg_cas02.txt index faeb4e1c7..135da1f14 100644 --- a/npc/guild/aldeg_cas02.txt +++ b/npc/guild/aldeg_cas02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Al De baran) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Al De Baran Guild Castle 2 //===== Additional Comments: ================================= diff --git a/npc/guild/aldeg_cas03.txt b/npc/guild/aldeg_cas03.txt index 026fe1610..2e2f3163d 100644 --- a/npc/guild/aldeg_cas03.txt +++ b/npc/guild/aldeg_cas03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Al De baran) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Al De Baran Guild Castle 3 //===== Additional Comments: ================================= diff --git a/npc/guild/aldeg_cas04.txt b/npc/guild/aldeg_cas04.txt index bdde8593a..da68f8eb5 100644 --- a/npc/guild/aldeg_cas04.txt +++ b/npc/guild/aldeg_cas04.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Al De baran) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Al De Baran Guild Castle 4 //===== Additional Comments: ================================= diff --git a/npc/guild/aldeg_cas05.txt b/npc/guild/aldeg_cas05.txt index d86a2de40..e27c48887 100644 --- a/npc/guild/aldeg_cas05.txt +++ b/npc/guild/aldeg_cas05.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Al De baran) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Al De Baran Guild Castle 5 //===== Additional Comments: ================================= diff --git a/npc/guild/gefg_cas01.txt b/npc/guild/gefg_cas01.txt index 72c339b8b..6f2503cfa 100644 --- a/npc/guild/gefg_cas01.txt +++ b/npc/guild/gefg_cas01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Geffen) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Geffen Guild Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild/gefg_cas02.txt b/npc/guild/gefg_cas02.txt index 4deb9edeb..353557947 100644 --- a/npc/guild/gefg_cas02.txt +++ b/npc/guild/gefg_cas02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Geffen) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Geffen Guild Castle 2 //===== Additional Comments: ================================= diff --git a/npc/guild/gefg_cas03.txt b/npc/guild/gefg_cas03.txt index 9fad99607..93ca575cf 100644 --- a/npc/guild/gefg_cas03.txt +++ b/npc/guild/gefg_cas03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Geffen) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Geffen Guild Castle 3 //===== Additional Comments: ================================= diff --git a/npc/guild/gefg_cas04.txt b/npc/guild/gefg_cas04.txt index 2688756f6..d77826f5e 100644 --- a/npc/guild/gefg_cas04.txt +++ b/npc/guild/gefg_cas04.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Geffen) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Geffen Guild Castle 4 //===== Additional Comments: ================================= diff --git a/npc/guild/gefg_cas05.txt b/npc/guild/gefg_cas05.txt index 0bde801aea..91dd3ecd9 100644 --- a/npc/guild/gefg_cas05.txt +++ b/npc/guild/gefg_cas05.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Geffen) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Geffen Guild Castle 5 //===== Additional Comments: ================================= diff --git a/npc/guild/payg_cas01.txt b/npc/guild/payg_cas01.txt index 27db2f549..266597d38 100644 --- a/npc/guild/payg_cas01.txt +++ b/npc/guild/payg_cas01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Payon) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Payon Guild Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild/payg_cas02.txt b/npc/guild/payg_cas02.txt index 7152379a0..baa766e68 100644 --- a/npc/guild/payg_cas02.txt +++ b/npc/guild/payg_cas02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Payon) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Payon Guild Castle 2 //===== Additional Comments: ================================= diff --git a/npc/guild/payg_cas03.txt b/npc/guild/payg_cas03.txt index b5a9a4ccc..b067e7652 100644 --- a/npc/guild/payg_cas03.txt +++ b/npc/guild/payg_cas03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Payon) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Payon Guild Castle 3 //===== Additional Comments: ================================= diff --git a/npc/guild/payg_cas04.txt b/npc/guild/payg_cas04.txt index 5732da557..d884e604a 100644 --- a/npc/guild/payg_cas04.txt +++ b/npc/guild/payg_cas04.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Payon) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Payon Guild Castle 4 //===== Additional Comments: ================================= diff --git a/npc/guild/payg_cas05.txt b/npc/guild/payg_cas05.txt index 8759998ba..91b8aaca2 100644 --- a/npc/guild/payg_cas05.txt +++ b/npc/guild/payg_cas05.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Payon) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Payon Guild Castle 5 //===== Additional Comments: ================================= diff --git a/npc/guild/prtg_cas01.txt b/npc/guild/prtg_cas01.txt index a56d83f68..6cbd50803 100644 --- a/npc/guild/prtg_cas01.txt +++ b/npc/guild/prtg_cas01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Prontera) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Prontera Guild Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild/prtg_cas02.txt b/npc/guild/prtg_cas02.txt index fd58ff74d..12dcb6eee 100644 --- a/npc/guild/prtg_cas02.txt +++ b/npc/guild/prtg_cas02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Prontera) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Prontera Guild Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild/prtg_cas03.txt b/npc/guild/prtg_cas03.txt index 255372e47..9f73114e7 100644 --- a/npc/guild/prtg_cas03.txt +++ b/npc/guild/prtg_cas03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Prontera) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Prontera Guild Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild/prtg_cas04.txt b/npc/guild/prtg_cas04.txt index 9b39423a7..1695a87e7 100644 --- a/npc/guild/prtg_cas04.txt +++ b/npc/guild/prtg_cas04.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Prontera) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Prontera Guild Castle 4 //===== Additional Comments: ================================= diff --git a/npc/guild/prtg_cas05.txt b/npc/guild/prtg_cas05.txt index 0fd95ab2e..6676e4a0b 100644 --- a/npc/guild/prtg_cas05.txt +++ b/npc/guild/prtg_cas05.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium (Prontera) //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= NPCs that relate to Prontera Guild Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild2/agit_start_se.txt b/npc/guild2/agit_start_se.txt index 744f3dea0..81e16ac36 100644 --- a/npc/guild2/agit_start_se.txt +++ b/npc/guild2/agit_start_se.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium SE - Auto-Start //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN; RO Episode 11.3 +//= rAthena SVN; RO Episode 11.3 //===== Description: ========================================= //= Auto Start for War of Emperium //= To know how to set up WoE times, go to doc\woe_time_explanation.txt diff --git a/npc/guild2/arug_cas01.txt b/npc/guild2/arug_cas01.txt index 4f76e6496..37127e940 100644 --- a/npc/guild2/arug_cas01.txt +++ b/npc/guild2/arug_cas01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Arunafeltz Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild2/arug_cas02.txt b/npc/guild2/arug_cas02.txt index c29643ba7..8ebede317 100644 --- a/npc/guild2/arug_cas02.txt +++ b/npc/guild2/arug_cas02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Arunafeltz Castle 2 //===== Additional Comments: ================================= diff --git a/npc/guild2/arug_cas03.txt b/npc/guild2/arug_cas03.txt index 9bae4be4b..de6601362 100644 --- a/npc/guild2/arug_cas03.txt +++ b/npc/guild2/arug_cas03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Arunafeltz Castle 3 //===== Additional Comments: ================================= diff --git a/npc/guild2/arug_cas04.txt b/npc/guild2/arug_cas04.txt index 7a7ad1b0f..779c18898 100644 --- a/npc/guild2/arug_cas04.txt +++ b/npc/guild2/arug_cas04.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Arunafeltz Castle 4 //===== Additional Comments: ================================= diff --git a/npc/guild2/arug_cas05.txt b/npc/guild2/arug_cas05.txt index 5abdd6c85..8f97102da 100644 --- a/npc/guild2/arug_cas05.txt +++ b/npc/guild2/arug_cas05.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Arunafeltz Castle 5 //===== Additional Comments: ================================= diff --git a/npc/guild2/guild_dungeon.txt b/npc/guild2/guild_dungeon.txt index bb9e8ab1f..052b7441e 100644 --- a/npc/guild2/guild_dungeon.txt +++ b/npc/guild2/guild_dungeon.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Guild dungeon entrances in Juno and Rachel //===== Additional Comments: ================================= diff --git a/npc/guild2/guild_flags.txt b/npc/guild2/guild_flags.txt index af5f1d26d..f848c71de 100644 --- a/npc/guild2/guild_flags.txt +++ b/npc/guild2/guild_flags.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Guild Flags in Juno and Rachel //===== Additional Comments: ================================= diff --git a/npc/guild2/schg_cas01.txt b/npc/guild2/schg_cas01.txt index 0b565e6c6..b3e4e90ba 100644 --- a/npc/guild2/schg_cas01.txt +++ b/npc/guild2/schg_cas01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Schwaltzvalt Castle 1 //===== Additional Comments: ================================= diff --git a/npc/guild2/schg_cas02.txt b/npc/guild2/schg_cas02.txt index 575c1d128..2553f335a 100644 --- a/npc/guild2/schg_cas02.txt +++ b/npc/guild2/schg_cas02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Schwaltzvalt Castle 2 //===== Additional Comments: ================================= diff --git a/npc/guild2/schg_cas03.txt b/npc/guild2/schg_cas03.txt index 2960a6e61..c8dbe6b0b 100644 --- a/npc/guild2/schg_cas03.txt +++ b/npc/guild2/schg_cas03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Schwaltzvalt Castle 3 //===== Additional Comments: ================================= diff --git a/npc/guild2/schg_cas04.txt b/npc/guild2/schg_cas04.txt index 733fd4c74..53b6002cf 100644 --- a/npc/guild2/schg_cas04.txt +++ b/npc/guild2/schg_cas04.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Schwaltzvalt Castle 4 //===== Additional Comments: ================================= diff --git a/npc/guild2/schg_cas05.txt b/npc/guild2/schg_cas05.txt index 59465623b..3ebdab671 100644 --- a/npc/guild2/schg_cas05.txt +++ b/npc/guild2/schg_cas05.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= War of Emperium Second Edition //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= WoE SE Schwaltzvalt Castle 5 //===== Additional Comments: ================================= diff --git a/npc/instances/EndlessTower.txt b/npc/instances/EndlessTower.txt index 672a2b19c..62b01c2ae 100644 --- a/npc/instances/EndlessTower.txt +++ b/npc/instances/EndlessTower.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Endless Tower //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Endless Tower Memorial Dungeon diff --git a/npc/instances/NydhoggsNest.txt b/npc/instances/NydhoggsNest.txt index 51e029b76..c497cffe8 100644 --- a/npc/instances/NydhoggsNest.txt +++ b/npc/instances/NydhoggsNest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Nidhoggr's Nest //===== By: ================================================== //= L0ne_W0lf, various sources //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Nidhoggr's Nest Instance diff --git a/npc/instances/OrcsMemory.txt b/npc/instances/OrcsMemory.txt index 33476580f..fa2ab47c0 100644 --- a/npc/instances/OrcsMemory.txt +++ b/npc/instances/OrcsMemory.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Orc's Memory //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Relive the memory of an orc. diff --git a/npc/instances/SealedShrine.txt b/npc/instances/SealedShrine.txt index 1a7566fd9..06eefab6b 100644 --- a/npc/instances/SealedShrine.txt +++ b/npc/instances/SealedShrine.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Sealed Shrine //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Seal away the Great Demon Baphomet. diff --git a/npc/jobs/1-1/acolyte.txt b/npc/jobs/1-1/acolyte.txt index 611d99242..a200ec514 100644 --- a/npc/jobs/1-1/acolyte.txt +++ b/npc/jobs/1-1/acolyte.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Renewal Acolyte Job Change //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Job Change to Acolyte Class //===== Additional Comments: ================================= diff --git a/npc/jobs/1-1/archer.txt b/npc/jobs/1-1/archer.txt index 21577a88a..46325309c 100644 --- a/npc/jobs/1-1/archer.txt +++ b/npc/jobs/1-1/archer.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Renewal Archer Job Change //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Job Change to Archer Class //===== Additional Comments: ================================= @@ -126,4 +126,4 @@ payon_in02,64,71,4 script Archer Guildsman#archer 85,{ mes "If you have any questions, feel free to come and ask me."; close; } -} \ No newline at end of file +} diff --git a/npc/jobs/1-1/mage.txt b/npc/jobs/1-1/mage.txt index 2899d407c..8cef63917 100644 --- a/npc/jobs/1-1/mage.txt +++ b/npc/jobs/1-1/mage.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Renewal Mage Job Change //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Job Change to Mage Class //===== Additional Comments: ================================= @@ -128,4 +128,4 @@ geffen_in,164,124,4 script Mage Guildsman#mage 123,{ close; } } -} \ No newline at end of file +} diff --git a/npc/jobs/1-1/merchant.txt b/npc/jobs/1-1/merchant.txt index 5b49c9ea3..4b7e091f0 100644 --- a/npc/jobs/1-1/merchant.txt +++ b/npc/jobs/1-1/merchant.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Renewal Merchant Job Change //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Job Change to Merchant Class //===== Additional Comments: ================================= @@ -122,4 +122,4 @@ alberta_in,53,43,6 script Merchant#mer 86,{ case 4: close; } -} \ No newline at end of file +} diff --git a/npc/jobs/1-1/swordman.txt b/npc/jobs/1-1/swordman.txt index 0e5f2e476..6942c170b 100644 --- a/npc/jobs/1-1/swordman.txt +++ b/npc/jobs/1-1/swordman.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Renewal Swordman Job Change //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Job Change to Swordman Class //===== Additional Comments: ================================= @@ -124,4 +124,4 @@ izlude_in,74,172,4 script Swordman#swd 119,{ case 3: close; } -} \ No newline at end of file +} diff --git a/npc/jobs/1-1/thief.txt b/npc/jobs/1-1/thief.txt index b6f049518..a42295d91 100644 --- a/npc/jobs/1-1/thief.txt +++ b/npc/jobs/1-1/thief.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Renewal Thief Job Change //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Job Change to Thief Class //===== Additional Comments: ================================= @@ -204,4 +204,4 @@ moc_prydb1,42,133,2 script Thief Guildsman#thief 118,{ mes "Ho? Why is a novice like you visiting here?"; mes "If you are here to be a Thief, ask the nasty-tempered lady right next to me."; close; -} \ No newline at end of file +} diff --git a/npc/jobs/1-1e/gunslinger.txt b/npc/jobs/1-1e/gunslinger.txt index 9132827b2..f715eed90 100644 --- a/npc/jobs/1-1e/gunslinger.txt +++ b/npc/jobs/1-1e/gunslinger.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Gunslinger Job Quest //===== By: ================================================== //= erKURITA, RockmanEXE, Kisuka //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Gunslinger Job Change Quest //===== Additional Comments: ================================= @@ -420,4 +420,4 @@ payon,184,65,3 script Wise Bull Horn 866,{ mes "^333333*Phew*^000000"; close; } -} \ No newline at end of file +} diff --git a/npc/jobs/1-1e/ninja.txt b/npc/jobs/1-1e/ninja.txt index 269b90bd6..6ab056764 100644 --- a/npc/jobs/1-1e/ninja.txt +++ b/npc/jobs/1-1e/ninja.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ninja Job Quest //===== By: ================================================== //= Legionaire, Kisuka //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Ninja Job Change Quest //===== Additional Comments: ================================= @@ -583,4 +583,4 @@ einbroch,184,194,3 script Suspicious Man#nq 881,{ mes "are tiny in comparison..."; close; } -} \ No newline at end of file +} diff --git a/npc/jobs/1-1e/taekwon.txt b/npc/jobs/1-1e/taekwon.txt index 224b7741d..54a6c8ce2 100644 --- a/npc/jobs/1-1e/taekwon.txt +++ b/npc/jobs/1-1e/taekwon.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Taekwon Job Quest //===== By: ================================================== //= Tsuyuki & Samuray22 //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena/Freya +//= rAthena/Freya //===== Description: ========================================= //= Official iRO TaeKwon Job Change Quest //===== Additional Comments: ================================= diff --git a/npc/jobs/2-1/assassin.txt b/npc/jobs/2-1/assassin.txt index b77058e12..bf4e4a534 100644 --- a/npc/jobs/2-1/assassin.txt +++ b/npc/jobs/2-1/assassin.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Assassin Job Quest //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 3.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job Change quest for Assassin class. diff --git a/npc/jobs/2-1/blacksmith.txt b/npc/jobs/2-1/blacksmith.txt index bab99664e..413fe69fd 100644 --- a/npc/jobs/2-1/blacksmith.txt +++ b/npc/jobs/2-1/blacksmith.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Blacksmith Quest //===== By: ================================================== //= EREMES THE CANIVALIZER(Aegis) @@ -9,7 +9,7 @@ //===== Current Version: ===================================== //= 2.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job Change quest for Blacksmith class. diff --git a/npc/jobs/2-1/hunter.txt b/npc/jobs/2-1/hunter.txt index 9bdc84159..ec8a828c2 100644 --- a/npc/jobs/2-1/hunter.txt +++ b/npc/jobs/2-1/hunter.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hunter Job Quest //===== By: ================================================== //= EREMES THE CANIVALIZER (Aegis)Translated by yoshiki (Aegis) @@ -7,14 +7,14 @@ //===== Current Version: ===================================== //= 3.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job Change quest for Hunter class. //===== Additional Comments: ================================= //= 0.5 Fully working. //= 0.6 Changed global variable names to unique ones. -//= 0.7 - 0.8 Updates for eAthena +Knight2,Crusader2 fix +//= 0.7 - 0.8 Updates for rAthena +Knight2,Crusader2 fix //= 0.9 Fixed items quest fork bug [Lupus] //= 1.0 Fixed items quest bug: added extra condition [Lupus] //= 1.1 Fixed skillpoints check bug [Lupus] @@ -34,7 +34,7 @@ //= 2.3a 7 official sets of Demon Hunter,thx to Dr.Evil [Lupus] //= 2.4a Added missing next;, missing NPC names [Lupus] //= 2.5 "strcharinfo" -> "strcharinfo(0)" [FlavioJS] -//= 2.6 Fixed 3º Test. [Samuray22] +//= 2.6 Fixed 3� Test. [Samuray22] // -Changed Timers from 3 to 1 minute. // -Changed "Job Change Monsters". // -Thanks to ultradamage. @@ -1799,4 +1799,4 @@ job_hunte,125,67,0 duplicate(HntTrap2) 96-4 -1,0,0 job_hunte,126,70,0 duplicate(HntTrap2) 97-1 -1,0,0 job_hunte,126,71,0 duplicate(HntTrap2) 97-2 -1,0,0 job_hunte,127,70,0 duplicate(HntTrap2) 97-3 -1,0,0 -job_hunte,127,71,0 duplicate(HntTrap2) 97-4 -1,0,0 \ No newline at end of file +job_hunte,127,71,0 duplicate(HntTrap2) 97-4 -1,0,0 diff --git a/npc/jobs/2-1/knight.txt b/npc/jobs/2-1/knight.txt index 662b4c58f..d8b33b285 100644 --- a/npc/jobs/2-1/knight.txt +++ b/npc/jobs/2-1/knight.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Knight Job Quest //===== By: ================================================== //= PGRO TEAM (Aegis). @@ -7,7 +7,7 @@ //===== Current Version: ===================================== //= 3.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job Change quest for Knight class. diff --git a/npc/jobs/2-1/priest.txt b/npc/jobs/2-1/priest.txt index 6603c6f8e..3819e093d 100644 --- a/npc/jobs/2-1/priest.txt +++ b/npc/jobs/2-1/priest.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Priest Quest //===== By: ================================================== //= Translated By: Pgro Team (OwNaGe)(Aegis) @@ -7,7 +7,7 @@ //===== Current Version: ===================================== //= 2.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job Change quest for Priest class. @@ -1391,7 +1391,7 @@ OnTouch: mes "[Deviruchi]"; mes "But how about this...? Now, isn't this an attractive sight? A nice, shiny new card. Mint condition. Not too many people have this you know. But I happen to have soooo many, my pockets hurt."; next; - cutin "¹Ì½ºÆ®·¹½ºÄ«µå.bmp",4; + cutin "�̽�Ʈ����ī��.bmp",4; mes "[Deviruchi]"; mes "Isn't it everyone's dream to have one of these? Think about it, being a Priest can only bring you suffering..."; next; @@ -1401,7 +1401,7 @@ OnTouch: mes "This card can"; mes "can be yours..."; next; - cutin "¹Ì½ºÆ®·¹½ºÄ«µå.bmp",255; + cutin "�̽�Ʈ����ī��.bmp",255; mes "[Deviruchi]"; mes "Theoretically!"; mes "BWAHAHAHAHAHAHAHA!"; @@ -1410,7 +1410,7 @@ OnTouch: warp "mjolnir_05",200,200; end; } - cutin "¹Ì½ºÆ®·¹½ºÄ«µå.bmp",255; + cutin "�̽�Ʈ����ī��.bmp",255; mes "[Deviruchi]"; mes "Did..."; mes "Did you just tell"; diff --git a/npc/jobs/2-1/wizard.txt b/npc/jobs/2-1/wizard.txt index a573ef930..5b9dee1fa 100644 --- a/npc/jobs/2-1/wizard.txt +++ b/npc/jobs/2-1/wizard.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Wizard Job Quest //===== By: ================================================== //= (Aegis) Translated by yoshiki, converted by kobra_k88 @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 3.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job Change quest for Wizard class. diff --git a/npc/jobs/2-1a/AssassinCross.txt b/npc/jobs/2-1a/AssassinCross.txt index efdddf103..0776825fb 100644 --- a/npc/jobs/2-1a/AssassinCross.txt +++ b/npc/jobs/2-1a/AssassinCross.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-1a/HighPriest.txt b/npc/jobs/2-1a/HighPriest.txt index 4460a2c0f..ae96a122e 100644 --- a/npc/jobs/2-1a/HighPriest.txt +++ b/npc/jobs/2-1a/HighPriest.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-1a/HighWizard.txt b/npc/jobs/2-1a/HighWizard.txt index 1977999c3..58f1bfce8 100644 --- a/npc/jobs/2-1a/HighWizard.txt +++ b/npc/jobs/2-1a/HighWizard.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-1a/LordKnight.txt b/npc/jobs/2-1a/LordKnight.txt index 37542da57..ba998483e 100644 --- a/npc/jobs/2-1a/LordKnight.txt +++ b/npc/jobs/2-1a/LordKnight.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-1a/Sniper.txt b/npc/jobs/2-1a/Sniper.txt index 96e579294..cf5f4881e 100644 --- a/npc/jobs/2-1a/Sniper.txt +++ b/npc/jobs/2-1a/Sniper.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-1a/WhiteSmith.txt b/npc/jobs/2-1a/WhiteSmith.txt index 3423f0425..42ac6164b 100644 --- a/npc/jobs/2-1a/WhiteSmith.txt +++ b/npc/jobs/2-1a/WhiteSmith.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-1e/StarGladiator.txt b/npc/jobs/2-1e/StarGladiator.txt index 8623e75eb..348ebe793 100644 --- a/npc/jobs/2-1e/StarGladiator.txt +++ b/npc/jobs/2-1e/StarGladiator.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Star Gladiator Job Quest //===== By: ================================================== //= Celestria, Samuray22 //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job Change quest for Star Gladiator class. diff --git a/npc/jobs/2-2/alchemist.txt b/npc/jobs/2-2/alchemist.txt index 32c08548f..fd0f077f5 100644 --- a/npc/jobs/2-2/alchemist.txt +++ b/npc/jobs/2-2/alchemist.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Alchemist Job Quest //===== By: ================================================== //= nestor_zulueta (Fusion), converted by Darkchild //===== Current Version: ===================================== //= 3.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job quest for Alchemist classes diff --git a/npc/jobs/2-2/bard.txt b/npc/jobs/2-2/bard.txt index 4f33c36d5..a4b158ec8 100644 --- a/npc/jobs/2-2/bard.txt +++ b/npc/jobs/2-2/bard.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Bard Job Quest //===== By: ================================================== //= Muad_Dib(The Prometheus Project), Lupus, Samuray22 //===== Current Version: ===================================== //= 2.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job quest for Bard class @@ -940,7 +940,7 @@ S_ChangeJob: // Old changelog //============================================================ //= 07/06/05 : Added 1st Version. [Muad_Dib] -//= Converted to eAthena format by Dr.Evil +//= Converted to rAthena format by Dr.Evil //= Info about gifts and other info --> http://www.ragnainfo.net/forums/viewtopic.php?t=51467&start=0 //= 1.1 Optimized, changed some stuff, fixed some bugs [Lupus] //= 1.1a minor song test fix [Lupus] diff --git a/npc/jobs/2-2/crusader.txt b/npc/jobs/2-2/crusader.txt index 99a5ccb0b..5f0cebf45 100644 --- a/npc/jobs/2-2/crusader.txt +++ b/npc/jobs/2-2/crusader.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Crusader Quest //===== By: ================================================== //= Made by: Black Dragon @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 3.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job quest for Crusader classes diff --git a/npc/jobs/2-2/dancer.txt b/npc/jobs/2-2/dancer.txt index a9011e0be..db81f1a17 100644 --- a/npc/jobs/2-2/dancer.txt +++ b/npc/jobs/2-2/dancer.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Dancer Job Quest //===== By: ================================================== //= Kalen - Original jAthena @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 3.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job quest for Dancer classes diff --git a/npc/jobs/2-2/monk.txt b/npc/jobs/2-2/monk.txt index be224b989..869011f09 100644 --- a/npc/jobs/2-2/monk.txt +++ b/npc/jobs/2-2/monk.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Monk Job Quest //===== By: ================================================== //= Dino9021, Edited / Translated by Celest //===== Current Version: ===================================== //= 2.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job quest for Monk classes diff --git a/npc/jobs/2-2/rogue.txt b/npc/jobs/2-2/rogue.txt index 8598a42b1..6d9ffe14f 100644 --- a/npc/jobs/2-2/rogue.txt +++ b/npc/jobs/2-2/rogue.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rogue Job Quest //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 2.9 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job quest for Rogue classes diff --git a/npc/jobs/2-2/sage.txt b/npc/jobs/2-2/sage.txt index e1c601fe9..fead53630 100644 --- a/npc/jobs/2-2/sage.txt +++ b/npc/jobs/2-2/sage.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Sage Job Quest //===== By: ================================================== //= jAthena (0.9) - I guess @@ -7,7 +7,7 @@ //===== Current Version: ===================================== //= 2.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job quest for Sage classes diff --git a/npc/jobs/2-2a/Champion.txt b/npc/jobs/2-2a/Champion.txt index 7e7ec6373..28cd5a9e0 100644 --- a/npc/jobs/2-2a/Champion.txt +++ b/npc/jobs/2-2a/Champion.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-2a/Clown.txt b/npc/jobs/2-2a/Clown.txt index 331b1c6a4..656557647 100644 --- a/npc/jobs/2-2a/Clown.txt +++ b/npc/jobs/2-2a/Clown.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-2a/Creator.txt b/npc/jobs/2-2a/Creator.txt index 494182792..3b85907e9 100644 --- a/npc/jobs/2-2a/Creator.txt +++ b/npc/jobs/2-2a/Creator.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-2a/Gypsy.txt b/npc/jobs/2-2a/Gypsy.txt index 016cdb447..95503a1ba 100644 --- a/npc/jobs/2-2a/Gypsy.txt +++ b/npc/jobs/2-2a/Gypsy.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-2a/Paladin.txt b/npc/jobs/2-2a/Paladin.txt index abff9a7ef..7589ff3f6 100644 --- a/npc/jobs/2-2a/Paladin.txt +++ b/npc/jobs/2-2a/Paladin.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-2a/Professor.txt b/npc/jobs/2-2a/Professor.txt index 5439bdf60..b6b38afdc 100644 --- a/npc/jobs/2-2a/Professor.txt +++ b/npc/jobs/2-2a/Professor.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-2a/Stalker.txt b/npc/jobs/2-2a/Stalker.txt index 861d54b2c..a2a26e135 100644 --- a/npc/jobs/2-2a/Stalker.txt +++ b/npc/jobs/2-2a/Stalker.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advance Class jobchanger after kRO Normals. //===== By: ================================================== //= Nana @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 + +//= rAthena 1.0 + //===== Description: ========================================= //= Advance Class jobchanger after kRO Normals. //===== Additional Comments: ================================= diff --git a/npc/jobs/2-2e/SoulLinker.txt b/npc/jobs/2-2e/SoulLinker.txt index df5eb6d8d..fb8c726e2 100644 --- a/npc/jobs/2-2e/SoulLinker.txt +++ b/npc/jobs/2-2e/SoulLinker.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Soul Linker Job Quest //===== By: ================================================== //= Celestria & Samuray22 //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job quest for Soul Linker class. diff --git a/npc/jobs/3-1/archbishop.txt b/npc/jobs/3-1/archbishop.txt index bce24150b..f246e1561 100644 --- a/npc/jobs/3-1/archbishop.txt +++ b/npc/jobs/3-1/archbishop.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Arch Bishop Job Quest //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Job change script fr Third class (Arch Bishop) diff --git a/npc/jobs/3-1/mechanic.txt b/npc/jobs/3-1/mechanic.txt index 62ea89f0c..0c255b593 100644 --- a/npc/jobs/3-1/mechanic.txt +++ b/npc/jobs/3-1/mechanic.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mechanic Jobchange Quest //===== By: ================================================== //= Masao //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Jobchange Quest from Blacksmith / Whitesmith -> Mechanic. @@ -874,4 +874,4 @@ OnTouch: } } -jupe_core2,0,0,0,0 monster Dimik 1669,100,0,0,0 \ No newline at end of file +jupe_core2,0,0,0,0 monster Dimik 1669,100,0,0,0 diff --git a/npc/jobs/novice/novice.txt b/npc/jobs/novice/novice.txt index 818038dc9..d690db69d 100644 --- a/npc/jobs/novice/novice.txt +++ b/npc/jobs/novice/novice.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= New Novice Training Grounds //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= New Novice Training Grounds //= [Hand Scripted (No Programs or AEGIS Scripts)] @@ -2294,4 +2294,4 @@ new_5-3,0,0,0,0 monster Fabre 1184,5,0,0,0 new_5-3,0,0,0,0 monster Rocker 1052,10,0,0,0 new_5-3,0,0,0,0 monster Spore 1014,1,0,0,0 new_5-3,0,0,0,0 monster Thief Bug 1051,1,0,0,0 -new_5-3,0,0,0,0 monster Thief Bug 1053,1,0,0,0 \ No newline at end of file +new_5-3,0,0,0,0 monster Thief Bug 1053,1,0,0,0 diff --git a/npc/jobs/novice/supernovice.txt b/npc/jobs/novice/supernovice.txt index f81ffbdb6..628cb30ff 100644 --- a/npc/jobs/novice/supernovice.txt +++ b/npc/jobs/novice/supernovice.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Super Novice Script //===== By: ================================================== //= Darkchild //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Super Novice Job Change Npc diff --git a/npc/jobs/valkyrie.txt b/npc/jobs/valkyrie.txt index b77eed5ec..bf6aa5cb3 100644 --- a/npc/jobs/valkyrie.txt +++ b/npc/jobs/valkyrie.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Valkyrie Realm //===== By: ================================================== //= Nana, fixes by Poki @@ -7,7 +7,7 @@ //===== Current Version: ===================================== //= 3.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quest to become a Tranceded Class. (Advanced/Rebirthed) diff --git a/npc/kafras/cool_event_corp.txt b/npc/kafras/cool_event_corp.txt index a16dac8e4..24eae21ca 100644 --- a/npc/kafras/cool_event_corp.txt +++ b/npc/kafras/cool_event_corp.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Cool Event Corp. Staff //===== By: ================================================== //= Gepard //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Cool Event Corp. Staff (Save, Storage & Pushcart Service) //= in Arunafeltz Region. diff --git a/npc/kafras/dts_warper.txt b/npc/kafras/dts_warper.txt index 7aa6bb385..83d25102c 100644 --- a/npc/kafras/dts_warper.txt +++ b/npc/kafras/dts_warper.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Dungeon Teleport Service //===== By: ================================================== //= Evera //===== Current Version: ===================================== //= 2.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Cool Event Corp NPCs vs. Kafra Dungeon Teleport Service and voting system. diff --git a/npc/kafras/functions_kafras.txt b/npc/kafras/functions_kafras.txt index 96bf62130..3a0a1be37 100644 --- a/npc/kafras/functions_kafras.txt +++ b/npc/kafras/functions_kafras.txt @@ -1,13 +1,13 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kafra Functions //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //= Darlskies, Darkchild, Syrus22, Lupus, kobra_k88 (2.0) //= L0ne_W0lf //===== Current Version: ===================================== //= 6.3 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= These functions handle save, storage, cart rental, teleport, //= and Free Teleport/Warp/Rent Cart options for all Kafra NPCs. diff --git a/npc/kafras/kafras_alb.txt b/npc/kafras/kafras_alb.txt index 190665407..6058ca40d 100644 --- a/npc/kafras/kafras_alb.txt +++ b/npc/kafras/kafras_alb.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ============ +//===== rAthena Script ============ //= Alberta Kafras //===== By: ========================= -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: =================== //= 2.4 //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_alde.txt b/npc/kafras/kafras_alde.txt index de30234ea..39a88534c 100644 --- a/npc/kafras/kafras_alde.txt +++ b/npc/kafras/kafras_alde.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Al De Baran Kafras //===== By: ============================ -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ======================= //= 2.3a //===== Compatible With: ============================ -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_brasilis.txt b/npc/kafras/kafras_brasilis.txt index a91dfbc7c..ff5db0968 100644 --- a/npc/kafras/kafras_brasilis.txt +++ b/npc/kafras/kafras_brasilis.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brasilis Kafra //===== By: ========================= //= L0ne_W0lf //===== Current Version: =================== //= 1.1 //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_com.txt b/npc/kafras/kafras_com.txt index 22314b8ee..9360fa0d6 100644 --- a/npc/kafras/kafras_com.txt +++ b/npc/kafras/kafras_com.txt @@ -1,11 +1,11 @@ -//===== eAthena Script =============== +//===== rAthena Script =============== //= Comodo Kafras //===== By: ============================ -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ======================= //= 2.3 //===== Compatible With: ============================ -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_dungeons.txt b/npc/kafras/kafras_dungeons.txt index 85d6573b8..e5c19bff4 100644 --- a/npc/kafras/kafras_dungeons.txt +++ b/npc/kafras/kafras_dungeons.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ================ +//===== rAthena Script ================ //= Kafras in Dungeons and Fields //===== By: ============================ -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ======================= //= 2.7a //===== Compatible With: ============================ -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_gef.txt b/npc/kafras/kafras_gef.txt index ea066d09b..2fe2365bd 100644 --- a/npc/kafras/kafras_gef.txt +++ b/npc/kafras/kafras_gef.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffen Kafras //===== By: ========================= -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: =================== //= 2.5 //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_izl.txt b/npc/kafras/kafras_izl.txt index 763c3fd0a..ec42d2359 100644 --- a/npc/kafras/kafras_izl.txt +++ b/npc/kafras/kafras_izl.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Izlude Kafras //===== By: ========================= -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: =================== //= 2.3 //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_mor.txt b/npc/kafras/kafras_mor.txt index d7578ce6f..30358c61c 100644 --- a/npc/kafras/kafras_mor.txt +++ b/npc/kafras/kafras_mor.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morroc Kafras //===== By: ========================= -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: =================== //= 2.4 //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_mosk.txt b/npc/kafras/kafras_mosk.txt index eef44d058..644c56636 100644 --- a/npc/kafras/kafras_mosk.txt +++ b/npc/kafras/kafras_mosk.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Moscovia Kafras //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Kafras for the town of Moscovia. //===== Additional Comments: ================================= @@ -150,4 +150,4 @@ moscovia,223,191,4 script Kafra Staff#mosk 114,{ cutin "", 255; end; } -} \ No newline at end of file +} diff --git a/npc/kafras/kafras_new.txt b/npc/kafras/kafras_new.txt index 16e3dc955..ea9ab2f09 100644 --- a/npc/kafras/kafras_new.txt +++ b/npc/kafras/kafras_new.txt @@ -1,11 +1,11 @@ -//===== eAthena Script =========== +//===== rAthena Script =========== //= New Kafras //===== By: ========================= -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: =================== //= 3.1 //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_pay.txt b/npc/kafras/kafras_pay.txt index 6984828c9..caf636bba 100644 --- a/npc/kafras/kafras_pay.txt +++ b/npc/kafras/kafras_pay.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Payon Kafras //===== By: ========================= -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: =================== //= 2.4b //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_pron.txt b/npc/kafras/kafras_pron.txt index a826ee2cf..3de243c7b 100644 --- a/npc/kafras/kafras_pron.txt +++ b/npc/kafras/kafras_pron.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Kafras //===== By: ========================= -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: =================== //= 2.7 //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/kafras/kafras_yun.txt b/npc/kafras/kafras_yun.txt index dee43ef12..3f78529bf 100644 --- a/npc/kafras/kafras_yun.txt +++ b/npc/kafras/kafras_yun.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yuno Kafras //===== By: ========================= -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: =================== //= 2.4 //===== Compatible With: ===================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ============================================ //= Description of argument settings for callfunc "F_Kafra". //= arg(0): When set at 0 the default Kafra message is displayed. diff --git a/npc/merchants/advanced_refiner.txt b/npc/merchants/advanced_refiner.txt index 767b604bb..ed0124e29 100644 --- a/npc/merchants/advanced_refiner.txt +++ b/npc/merchants/advanced_refiner.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Advanced Refiner //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/merchants/alchemist.txt b/npc/merchants/alchemist.txt index 9c68c992b..8424525bb 100644 --- a/npc/merchants/alchemist.txt +++ b/npc/merchants/alchemist.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Alchemist Shop //===== By: ================================================== -//= eAthena Team +//= rAthena Team //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Selling Alchemist Materials and Manuals //===== Additional Comments: ================================= diff --git a/npc/merchants/ammo_boxes.txt b/npc/merchants/ammo_boxes.txt index 5ea85dbea..1ec561a33 100644 --- a/npc/merchants/ammo_boxes.txt +++ b/npc/merchants/ammo_boxes.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Magazine Dealer Kenny //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Turns bullets into magazines/packs. //===== Additional Comments: ================================= @@ -132,4 +132,4 @@ function script Func_Casing { mes "then come back to me later."; close; } -} \ No newline at end of file +} diff --git a/npc/merchants/ammo_dealer.txt b/npc/merchants/ammo_dealer.txt index 3163b3d43..545d8b3f5 100644 --- a/npc/merchants/ammo_dealer.txt +++ b/npc/merchants/ammo_dealer.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Bullet Dealer Tony //===== By =================================================== //= Playtester, Paradox924X //===== Version ============================================== //= 1.4 //===== Compatible With ====================================== -//= eAthena SVN +//= rAthena SVN //===== Description ========================================== //= Bullet trader. //===== Comments ============================================= diff --git a/npc/merchants/buying_shops.txt b/npc/merchants/buying_shops.txt index b58eb33fc..f7d209c89 100644 --- a/npc/merchants/buying_shops.txt +++ b/npc/merchants/buying_shops.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Buying Shop Licenses //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Buying Shop Licenses //===== Additional Comments: ================================= @@ -245,4 +245,4 @@ alberta_in,58,52,4 script Purchasing Team#Buying 59,{ mes "My time is solely dedicated to our customers in the Merchant industry."; close; } -} \ No newline at end of file +} diff --git a/npc/merchants/cash_hair.txt b/npc/merchants/cash_hair.txt index 18b0645c7..168445fa0 100644 --- a/npc/merchants/cash_hair.txt +++ b/npc/merchants/cash_hair.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Cash Hair Stylist //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Exchange cash item, New_Style_Coupon, for new hair styles. //===== Additional Comments: ================================= @@ -122,4 +122,4 @@ itemmall,19,74,5 script Stylist#cash 91,{ mes "hairstyle, come back"; mes "and let me know, okay?"; close; -} \ No newline at end of file +} diff --git a/npc/merchants/cash_trader.txt b/npc/merchants/cash_trader.txt index 3dfa04dc6..2de6e794e 100644 --- a/npc/merchants/cash_trader.txt +++ b/npc/merchants/cash_trader.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Cash Shop NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Sell Cash shop items. //= Based on iRO's Cash shop. Headgears omitted. diff --git a/npc/merchants/clothes_dyer.txt b/npc/merchants/clothes_dyer.txt index da7fcf96b..6a79ebb4c 100644 --- a/npc/merchants/clothes_dyer.txt +++ b/npc/merchants/clothes_dyer.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Clothes Dyer //===== By: ================================================== //= Usnul //===== Current Version: ===================================== //= 2.4 //===== Compatible With: ===================================== -//= eAthena 1.0+ +//= rAthena 1.0+ //===== Description: ========================================= //= Clothes dyer with standard palletes //===== Additional Comments: ================================= @@ -13,7 +13,7 @@ //= 2.1 Shortened some labels to make this script loading, //= Added Black+White Colors desc [Lupus] //= 2.1a - added adv classes + abby class support [Lupus] -//= 2.2 – Spell checked. [Nexon] +//= 2.2 � Spell checked. [Nexon] //= 2.3 - Fixed dis $hit! [Poki#3] //= 2.4 - Disabled cloth dyeing since it's not implemented // on official servers and cause your client to crash @@ -26,7 +26,7 @@ // Dyer Ginedin Rephere --------------------------------------------------- prt_in,284,168,2 script Dyer Ginedin Rephere 55,{ mes "[Dyer Ginedin Rephere]"; - mes "11... 12... Mmm... good. I think I'll be able to finish before tonight’s party. Oh! I didn't notice that you were here. Anyway how may I assist you?"; + mes "11... 12... Mmm... good. I think I'll be able to finish before tonight�s party. Oh! I didn't notice that you were here. Anyway how may I assist you?"; M_Menu: next; menu "-Talk",L_Talk,"-Dye Clothing",L_Busy,"-Price list",L_PriceList,"-Cancel",L_End; diff --git a/npc/merchants/dye_maker.txt b/npc/merchants/dye_maker.txt index 2d3983452..632e14f17 100644 --- a/npc/merchants/dye_maker.txt +++ b/npc/merchants/dye_maker.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Dye Maker //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //===== Additional Comments: ================================= diff --git a/npc/merchants/elemental_trader.txt b/npc/merchants/elemental_trader.txt index e20dd67ff..f86ef3c55 100644 --- a/npc/merchants/elemental_trader.txt +++ b/npc/merchants/elemental_trader.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Elemental Stone Trader //===== By: ================================================== -//= eAthena team & others? & MasterOfMuppets +//= rAthena team & others? & MasterOfMuppets //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Trade impure types of elemental stones for pure ones. diff --git a/npc/merchants/enchan_arm.txt b/npc/merchants/enchan_arm.txt index 802bfc17d..5353040a0 100644 --- a/npc/merchants/enchan_arm.txt +++ b/npc/merchants/enchan_arm.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Armor Enchanter //===== By: ================================================== //= L0ne_W0lf @@ -273,4 +273,4 @@ S_EnchantArmor: mes "Please come back with just ONE equipment to be enchanted."; close; } -} \ No newline at end of file +} diff --git a/npc/merchants/gemstone.txt b/npc/merchants/gemstone.txt index c591b32f9..db44002d7 100644 --- a/npc/merchants/gemstone.txt +++ b/npc/merchants/gemstone.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Gemstone trader //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/merchants/hair_dyer.txt b/npc/merchants/hair_dyer.txt index 7f6d24b01..ed69197ed 100644 --- a/npc/merchants/hair_dyer.txt +++ b/npc/merchants/hair_dyer.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hair Dyer //===== By: ================================================== //= kobra_k88; L0ne_W0lf //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Hair Dyer with standard palletes //===== Additional Comments: ================================= diff --git a/npc/merchants/hair_style.txt b/npc/merchants/hair_style.txt index 2db89db83..19f5b9dca 100644 --- a/npc/merchants/hair_style.txt +++ b/npc/merchants/hair_style.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hair Dresser //===== By: ================================================== //= Muad_Dib, Samuray22, Kisuka //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Allows you to change your hairstyle. @@ -1298,6 +1298,6 @@ lhz_in02,91,155,5 script Assistant Beautician#li 862,{ //===== Old Changelog: ================================= //= 07/06/05 : Added 1st Version. [Muad_Dib] -//= Converted to eAthena format by Dr.Evil Fixed typos [Nexon] +//= Converted to rAthena format by Dr.Evil Fixed typos [Nexon] //= 1.1 Removed Duplicates [Silent] -//============================================================ \ No newline at end of file +//============================================================ diff --git a/npc/merchants/icecream.txt b/npc/merchants/icecream.txt index e6a4deb23..55d7c41f7 100644 --- a/npc/merchants/icecream.txt +++ b/npc/merchants/icecream.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ice Cream Maker //===== By: ================================================== //= KOOK SWU, Kisuka //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= A man makes you ice-cream //===== Additional Comments: ================================= diff --git a/npc/merchants/inn.txt b/npc/merchants/inn.txt index 5d307eabd..8c366d783 100644 --- a/npc/merchants/inn.txt +++ b/npc/merchants/inn.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Inn Npcs //===== By: ================================================== //= Darkchild (1.1) @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 3.0a //===== Compatible With: ===================================== -//= eAthena 1.0+ +//= rAthena 1.0+ //===== Description: ========================================= //= Inn Npcs, Save and Heal //============================================================ diff --git a/npc/merchants/kunai_maker.txt b/npc/merchants/kunai_maker.txt index 196405ff0..ab630f72c 100644 --- a/npc/merchants/kunai_maker.txt +++ b/npc/merchants/kunai_maker.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kunai Merchant Kashin //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Trades a few shurikens + ninja stones for elemental kunai. //===== Additional Comments: ================================= diff --git a/npc/merchants/manuk.txt b/npc/merchants/manuk.txt index b98f040ea..e08034d4a 100644 --- a/npc/merchants/manuk.txt +++ b/npc/merchants/manuk.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Manuk Merchant //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Manuk coin redemption NPC. diff --git a/npc/merchants/milk_trader.txt b/npc/merchants/milk_trader.txt index cb5f26c74..7e7da5c3f 100644 --- a/npc/merchants/milk_trader.txt +++ b/npc/merchants/milk_trader.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Milk Trader //===== By: ================================================== //= kobra_k88; L0ne_W0lf //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Trades bottles for milk diff --git a/npc/merchants/novice_exchange.txt b/npc/merchants/novice_exchange.txt index 4d5688d30..61049f805 100644 --- a/npc/merchants/novice_exchange.txt +++ b/npc/merchants/novice_exchange.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Novice Goods Exchanger //===== By: ================================================== -//= ???, eAthena Team +//= ???, rAthena Team //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis COnversion] //= Exchanges your Basic Monster drops for Red Potions. diff --git a/npc/merchants/old_pharmacist.txt b/npc/merchants/old_pharmacist.txt index 8690a9dee..ba00b8f4d 100644 --- a/npc/merchants/old_pharmacist.txt +++ b/npc/merchants/old_pharmacist.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Old Pharmacist //===== By: ================================================== //= DZeroX //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN Trunk +//= rAthena SVN Trunk //===== Description: ========================================= //= Trade in items for potions //=============================== diff --git a/npc/merchants/quivers.txt b/npc/merchants/quivers.txt index 9690b7323..b193bac4c 100644 --- a/npc/merchants/quivers.txt +++ b/npc/merchants/quivers.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Arrow Quiver Event //===== By: ================================================== //= Muad_Dib (Prometheus Project); L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis COnversion] //= Turns arrows into Arrow Quivers. @@ -16,7 +16,7 @@ // arg(3): The quiver given by the NPC. (item ID) //===== Additional Comments: ================================= //= 07/06/05 : Added 1st Version. [Muad_Dib] -//= Converted to eAthena format by Dr.Evil +//= Converted to rAthena format by Dr.Evil //= added prize to quest - 500 Zeny //= Fixed a few spelling errors. [Nexon] //= 1.1 Added Holy Arrow Quivers [Playtester] diff --git a/npc/merchants/refine.txt b/npc/merchants/refine.txt index d8cca8451..5055a7ef2 100644 --- a/npc/merchants/refine.txt +++ b/npc/merchants/refine.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Refining NPCs //===== By: ================================================== //= Syrus22 (1.1) dafide18 (1.4) Skotlex (1.5) diff --git a/npc/merchants/renters.txt b/npc/merchants/renters.txt index cc3ef5e58..5b2efc97a 100644 --- a/npc/merchants/renters.txt +++ b/npc/merchants/renters.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Renters //===== By: ================================================== //= kobra_k88, mod by Lupus //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Knight and Crusader Peco Peco Breeders, Falcon Breeder scripts //===== Additional Comments: ================================= diff --git a/npc/merchants/shops.txt b/npc/merchants/shops.txt index bb73df394..cb337dfa1 100644 --- a/npc/merchants/shops.txt +++ b/npc/merchants/shops.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Shops //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 2.8 //===== Compatible With: ===================================== -//= eAthena 1.0+ +//= rAthena 1.0+ //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/merchants/socket_enchant.txt b/npc/merchants/socket_enchant.txt index 9e9af6d68..83e7aebc2 100644 --- a/npc/merchants/socket_enchant.txt +++ b/npc/merchants/socket_enchant.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Episode 11.1 Socket Enchant NPC //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 2.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Adds slots to selected weapons and armor. diff --git a/npc/merchants/socket_enchant2.txt b/npc/merchants/socket_enchant2.txt index e7f14c37c..107d38d5e 100644 --- a/npc/merchants/socket_enchant2.txt +++ b/npc/merchants/socket_enchant2.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Episode 12 Socket Enchant NPC //===== By: ================================================== //= Gepard //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Adds slots to selected weapons and armor. diff --git a/npc/merchants/splendide.txt b/npc/merchants/splendide.txt index 8bc8a9d34..b8d4f8f71 100644 --- a/npc/merchants/splendide.txt +++ b/npc/merchants/splendide.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Splendide Merchant //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Splendide coin redemption NPC. @@ -114,4 +114,4 @@ spl_in01,110,326,5 script Merchant of Splendide 439,{ mes "tasnarAndu Ie Ru"; close; } -} \ No newline at end of file +} diff --git a/npc/merchants/wander_pet_food.txt b/npc/merchants/wander_pet_food.txt index 802680eeb..3962b9a4f 100644 --- a/npc/merchants/wander_pet_food.txt +++ b/npc/merchants/wander_pet_food.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Spirit Liquor trader. //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Trade Broken Liquor Jars and alcohol for wanderer diff --git a/npc/mobs/citycleaners.txt b/npc/mobs/citycleaners.txt index b479fdae7..b866ce123 100644 --- a/npc/mobs/citycleaners.txt +++ b/npc/mobs/citycleaners.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= City Monster Spawn Script //===== By: ================================================== //= massdriller @@ -47,4 +47,4 @@ einbech,0,0,0,0 monster Tarou 1175,5,1800000,1500000,0 //================================================== // payon_in02 - Inside Payon //================================================== -payon_in02,23,68,5,5 monster Thief Bug Egg 1048,7,1200000,600000,0 \ No newline at end of file +payon_in02,23,68,5,5 monster Thief Bug Egg 1048,7,1200000,600000,0 diff --git a/npc/mobs/dungeons/abbey.txt b/npc/mobs/dungeons/abbey.txt index f76a591d9..c39adfe4e 100644 --- a/npc/mobs/dungeons/abbey.txt +++ b/npc/mobs/dungeons/abbey.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Abbey Dungeon Monster Spawn Script //===== By: ================================================== //= $ephiroth diff --git a/npc/mobs/dungeons/abyss.txt b/npc/mobs/dungeons/abyss.txt index 3640748dc..1c1ee63b0 100644 --- a/npc/mobs/dungeons/abyss.txt +++ b/npc/mobs/dungeons/abyss.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Abyss Lake Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -48,4 +48,4 @@ abyss_03,0,0,0,0 monster Ancient Mimic 1699,10,5000,0,0 abyss_03,0,0,0,0 monster Ferus 1714,10,5000,0,0 abyss_03,0,0,0,0 monster Ferus 1717,10,5000,0,0 abyss_03,0,0,0,0 monster Hydrolancer 1720,3,5000,0,0 -abyss_03,0,0,0,0 boss_monster Detardeurus 1719,1,10800000,600000,0 \ No newline at end of file +abyss_03,0,0,0,0 boss_monster Detardeurus 1719,1,10800000,600000,0 diff --git a/npc/mobs/dungeons/alde_dun.txt b/npc/mobs/dungeons/alde_dun.txt index b03082382..cc7dfb0e9 100644 --- a/npc/mobs/dungeons/alde_dun.txt +++ b/npc/mobs/dungeons/alde_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Al De Baran Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -38,4 +38,4 @@ alde_dun03,0,0,0,0 monster Drainliar 1111,55,5000,0,0 //================================================== alde_dun04,0,0,0,0 monster Bathory 1102,50,5000,0,0 alde_dun04,0,0,0,0 monster Whisper 1179,10,5000,0,0 -alde_dun04,0,0,0,0 monster Joker 1131,10,5000,0,0 \ No newline at end of file +alde_dun04,0,0,0,0 monster Joker 1131,10,5000,0,0 diff --git a/npc/mobs/dungeons/ama_dun.txt b/npc/mobs/dungeons/ama_dun.txt index cea4905d3..039afd13b 100644 --- a/npc/mobs/dungeons/ama_dun.txt +++ b/npc/mobs/dungeons/ama_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Amatsu Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/dungeons/anthell.txt b/npc/mobs/dungeons/anthell.txt index 72655ca3f..9794f1e26 100644 --- a/npc/mobs/dungeons/anthell.txt +++ b/npc/mobs/dungeons/anthell.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ant Hell Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -118,4 +118,4 @@ anthell02,0,0,0,0 monster Ant Egg 1097,15,5000,0,0 anthell02,0,0,0,0 monster Deniro 1105,15,5000,0,0 anthell02,0,0,0,0 monster Piere 1160,15,5000,0,0 anthell02,0,0,0,0 monster Giearth 1121,3,5000,0,0 -anthell02,0,0,0,0 boss_monster Maya 1147,1,7200000,600000,1 \ No newline at end of file +anthell02,0,0,0,0 boss_monster Maya 1147,1,7200000,600000,1 diff --git a/npc/mobs/dungeons/ayo_dun.txt b/npc/mobs/dungeons/ayo_dun.txt index f1f5d36e4..2d82007f3 100644 --- a/npc/mobs/dungeons/ayo_dun.txt +++ b/npc/mobs/dungeons/ayo_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ayothaya Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -28,4 +28,4 @@ ayo_dun01,0,0,0,0 monster Kraben 1587,5,5000,0,0 ayo_dun02,0,0,0,0 monster Tamruan 1584,100,5000,0,0 ayo_dun02,0,0,0,0 monster Whisper 1179,20,5000,0,0 ayo_dun02,0,0,0,0 monster Kraben 1587,20,5000,0,0 -ayo_dun02,150,90,15,30 boss_monster Lady Tanee 1688,1,25200000,600000,0 \ No newline at end of file +ayo_dun02,150,90,15,30 boss_monster Lady Tanee 1688,1,25200000,600000,0 diff --git a/npc/mobs/dungeons/beach_dun.txt b/npc/mobs/dungeons/beach_dun.txt index b63c7d6a2..cbadc8e5e 100644 --- a/npc/mobs/dungeons/beach_dun.txt +++ b/npc/mobs/dungeons/beach_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Beach Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -37,4 +37,4 @@ beach_dun2,0,0,0,0 monster Nereid 1255,3,5000,0,0 beach_dun3,0,0,0,0 monster Thara Frog 1034,50,5000,0,0 beach_dun3,0,0,0,0 monster Megalodon 1064,30,5000,0,0 beach_dun3,0,0,0,0 monster Hydra 1068,30,5000,0,0 -beach_dun3,0,0,0,0 monster Nereid 1255,1,5000,0,0 \ No newline at end of file +beach_dun3,0,0,0,0 monster Nereid 1255,1,5000,0,0 diff --git a/npc/mobs/dungeons/bra_dun.txt b/npc/mobs/dungeons/bra_dun.txt index 354fda79c..8e22c6e29 100644 --- a/npc/mobs/dungeons/bra_dun.txt +++ b/npc/mobs/dungeons/bra_dun.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Brasilis Dungeon Monster Spawn Script //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Official monster spawns in Brasilis Dungeon. //===== Additional Comments: ================================= diff --git a/npc/mobs/dungeons/c_tower.txt b/npc/mobs/dungeons/c_tower.txt index 90a1e982a..752a2437a 100644 --- a/npc/mobs/dungeons/c_tower.txt +++ b/npc/mobs/dungeons/c_tower.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Clock Tower Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/dungeons/dic_dun.txt b/npc/mobs/dungeons/dic_dun.txt index 570601013..6627f0ba1 100644 --- a/npc/mobs/dungeons/dic_dun.txt +++ b/npc/mobs/dungeons/dic_dun.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= El Dicastes Dungeon Monster Spawn Script //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Official monster spawns in El Dicastes Dungeon. //===== Additional Comments: ================================= diff --git a/npc/mobs/dungeons/ein_dun.txt b/npc/mobs/dungeons/ein_dun.txt index 8c3cdd40f..587e3df60 100644 --- a/npc/mobs/dungeons/ein_dun.txt +++ b/npc/mobs/dungeons/ein_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbech Mine Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -33,4 +33,4 @@ ein_dun02,0,0,0,0 monster Mineral 1614,50,5000,0,0 ein_dun02,0,0,0,0 monster Obsidian 1615,40,5000,0,0 ein_dun02,0,0,0,0 monster Old Stove 1617,30,5000,0,0 ein_dun02,0,0,0,0 monster Teddy Bear 1622,30,5000,0,0 -ein_dun02,0,0,0,0 boss_monster RSX-0806 1623,1,7500000,600000,0 \ No newline at end of file +ein_dun02,0,0,0,0 boss_monster RSX-0806 1623,1,7500000,600000,0 diff --git a/npc/mobs/dungeons/gef_dun.txt b/npc/mobs/dungeons/gef_dun.txt index a226cba74..babb96d55 100644 --- a/npc/mobs/dungeons/gef_dun.txt +++ b/npc/mobs/dungeons/gef_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffen Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -69,4 +69,4 @@ gef_dun03,0,0,0,0 monster Wraith Dead 1291,2,5000,0,0 gef_dun03,0,0,0,0 monster Wraith Dead 1291,2,60000,30000,0 gef_dun03,0,0,0,0 monster Hellion Revenant 1626,1,600000,300000,0 gef_dun03,0,0,0,0 monster Shining Plant 1083,3,1800000,900000,1 -gef_dun03,0,0,0,0 monster White Plant 1082,10,180000,90000,1 \ No newline at end of file +gef_dun03,0,0,0,0 monster White Plant 1082,10,180000,90000,1 diff --git a/npc/mobs/dungeons/gefenia.txt b/npc/mobs/dungeons/gefenia.txt index 5dc13714c..890d0879b 100644 --- a/npc/mobs/dungeons/gefenia.txt +++ b/npc/mobs/dungeons/gefenia.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffenia Dungeon Monster Spawn Script //===== By: ================================================== -//= Muad_Dib, eAthena dev team +//= Muad_Dib, rAthena dev team //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== @@ -68,4 +68,4 @@ gefenia04,0,0,0,0 monster Succubus 1370,10,5000,0,0 gefenia04,0,0,0,0 monster Bloody Knight 1268,1,3600000,3000000,0 gefenia04,0,0,0,0 monster Mysteltainn 1203,1,18000000,14400000,0 gefenia04,0,0,0,0 monster Executioner 1205,1,18000000,14400000,0 -gefenia04,0,0,0,0 monster Ogretooth 1204,1,18000000,14400000,0 \ No newline at end of file +gefenia04,0,0,0,0 monster Ogretooth 1204,1,18000000,14400000,0 diff --git a/npc/mobs/dungeons/glastheim.txt b/npc/mobs/dungeons/glastheim.txt index d46acb7e5..cbe5a31b7 100644 --- a/npc/mobs/dungeons/glastheim.txt +++ b/npc/mobs/dungeons/glastheim.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Glast Heim Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -179,4 +179,4 @@ gl_sew04,0,0,0,0 monster Drainliar 1111,10,5000,0,0 //================================================== gl_step,0,0,0,0 monster Wind Ghost 1263,100,5000,0,0 gl_step,0,0,0,0 monster Raydric Archer 1276,10,5000,0,0 -gl_step,0,0,0,0 monster Mimic 1191,5,5000,0,0 \ No newline at end of file +gl_step,0,0,0,0 monster Mimic 1191,5,5000,0,0 diff --git a/npc/mobs/dungeons/gld_dun.txt b/npc/mobs/dungeons/gld_dun.txt index dc47a4ad3..cb06564e2 100644 --- a/npc/mobs/dungeons/gld_dun.txt +++ b/npc/mobs/dungeons/gld_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Guild Dungeons Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -49,4 +49,4 @@ gld_dun04,0,0,0,0 monster Wraith Dead 1291,27,5000,0,0 gld_dun04,0,0,0,0 monster Mini Demon 1292,3,5000,0,0 gld_dun04,0,0,0,0 monster Dark Illusion 1302,1,1200000,0,0 gld_dun04,0,0,0,0 monster Ghostring 1120,1,14400000,7200000,1 -gld_dun04,0,0,0,0 boss_monster Dark Lord 1272,1,28800000,600000,1 \ No newline at end of file +gld_dun04,0,0,0,0 boss_monster Dark Lord 1272,1,28800000,600000,1 diff --git a/npc/mobs/dungeons/gld_dunSE.txt b/npc/mobs/dungeons/gld_dunSE.txt index 95e51c079..488875380 100644 --- a/npc/mobs/dungeons/gld_dunSE.txt +++ b/npc/mobs/dungeons/gld_dunSE.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Guild Dungeons Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -26,4 +26,4 @@ arug_dun01,0,0,0,0 monster Banshee Master 1974,22,0,0,0 arug_dun01,0,0,0,0 monster Beholder master 1975,22,5000,0,0 arug_dun01,0,0,0,0 monster Aunoe 1796,22,5000,0,0 arug_dun01,0,0,0,0 monster Necromancer 1870,18,0,0,0 -arug_dun01,0,0,0,0 monster Fanat 1797,5,5000,0,0 \ No newline at end of file +arug_dun01,0,0,0,0 monster Fanat 1797,5,5000,0,0 diff --git a/npc/mobs/dungeons/gon_dun.txt b/npc/mobs/dungeons/gon_dun.txt index d8c683dc7..98958a4dc 100644 --- a/npc/mobs/dungeons/gon_dun.txt +++ b/npc/mobs/dungeons/gon_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Gonryun Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -37,4 +37,4 @@ gon_dun03,0,0,0,0 monster Evil Nymph 1416,50,5000,0,0 gon_dun03,0,0,0,0 monster Taoist Hermit 1412,30,5000,0,0 gon_dun03,0,0,0,0 monster Hermit Plant 1413,20,5000,0,0 gon_dun03,0,0,0,0 boss_monster Evil Snake Lord 1418,1,5650000,600000,0 -gon_dun03,0,0,0,0 monster White Plant 1082,10,5000,0,0 \ No newline at end of file +gon_dun03,0,0,0,0 monster White Plant 1082,10,5000,0,0 diff --git a/npc/mobs/dungeons/ice_dun.txt b/npc/mobs/dungeons/ice_dun.txt index 09b9da34f..418006267 100644 --- a/npc/mobs/dungeons/ice_dun.txt +++ b/npc/mobs/dungeons/ice_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ice Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -35,4 +35,4 @@ ice_dun02,0,0,0,0 monster Ice Titan 1777,7,5000,0,0 ice_dun03,0,0,0,0 monster Ice Titan 1777,70,5000,0,0 ice_dun03,0,0,0,0 monster Gazeti 1778,42,5000,0,0 ice_dun03,0,0,0,0 monster Iceicle 1789,32,5000,0,0 -ice_dun03,0,0,0,0 monster Snowier 1775,15,5000,0,0 \ No newline at end of file +ice_dun03,0,0,0,0 monster Snowier 1775,15,5000,0,0 diff --git a/npc/mobs/dungeons/in_sphinx.txt b/npc/mobs/dungeons/in_sphinx.txt index 6b1745c63..7263f38d9 100644 --- a/npc/mobs/dungeons/in_sphinx.txt +++ b/npc/mobs/dungeons/in_sphinx.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morocc Sphinx Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -53,4 +53,4 @@ in_sphinx5,0,0,0,0 monster Side Winder 1037,20,5000,0,0 in_sphinx5,0,0,0,0 monster Matyr 1146,10,5000,0,0 in_sphinx5,0,0,0,0 monster Anubis 1098,10,5000,0,0 in_sphinx5,0,0,0,0 monster Mimic 1191,7,5000,0,0 -in_sphinx5,0,0,0,0 boss_monster Pharaoh 1157,1,3600000,600000,1 \ No newline at end of file +in_sphinx5,0,0,0,0 boss_monster Pharaoh 1157,1,3600000,600000,1 diff --git a/npc/mobs/dungeons/iz_dun.txt b/npc/mobs/dungeons/iz_dun.txt index 68430af10..00019de88 100644 --- a/npc/mobs/dungeons/iz_dun.txt +++ b/npc/mobs/dungeons/iz_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Byalan Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -106,4 +106,4 @@ iz_dun04,33,129,0,0 monster Hydra 1068,1,308000,150000,0 iz_dun04,42,129,0,0 monster Hydra 1068,1,312000,150000,0 iz_dun04,80,233,0,0 monster Hydra 1068,1,318000,150000,0 iz_dun04,69,243,0,0 monster Hydra 1068,1,321000,150000,0 -iz_dun04,33,115,0,0 monster Hydra 1068,1,321000,150000,0 \ No newline at end of file +iz_dun04,33,115,0,0 monster Hydra 1068,1,321000,150000,0 diff --git a/npc/mobs/dungeons/juperos.txt b/npc/mobs/dungeons/juperos.txt index 0e47c167c..d3db3aefe 100644 --- a/npc/mobs/dungeons/juperos.txt +++ b/npc/mobs/dungeons/juperos.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Juperos Dungeon Monster Spawn Script //===== By: ================================================== -// The Prometheus Project, eAthena dev team +// The Prometheus Project, rAthena dev team //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== @@ -49,4 +49,4 @@ jupe_core,0,0,0,0 monster Archdam 1668,40,5000,0,0 jupe_core,0,0,0,0 monster Venatu 1676,25,5000,0,0 jupe_core,0,0,0,0 monster Venatu 1677,25,5000,0,0 jupe_core,0,0,0,0 monster Venatu 1678,25,5000,0,0 -jupe_core,0,0,0,0 boss_monster Vesper 1685,1,7200000,600000,1 \ No newline at end of file +jupe_core,0,0,0,0 boss_monster Vesper 1685,1,7200000,600000,1 diff --git a/npc/mobs/dungeons/kh_dun.txt b/npc/mobs/dungeons/kh_dun.txt index 5b3be2502..9965585dd 100644 --- a/npc/mobs/dungeons/kh_dun.txt +++ b/npc/mobs/dungeons/kh_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kiel Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -56,4 +56,4 @@ kh_kiehl01,173,90,3,3 monster Aliot 1740,1,180000,120000,0 kh_kiehl01,156,101,3,3 monster Aliza 1746,1,180000,120000,0 kh_kiehl01,128,102,3,3 monster Alicel 1739,1,180000,120000,0 kh_kiehl01,128,102,3,3 monster Aliot 1740,1,180000,120000,0 -kh_kiehl01,122,155,3,3 monster Aliza 1746,1,180000,120000,0 \ No newline at end of file +kh_kiehl01,122,155,3,3 monster Aliza 1746,1,180000,120000,0 diff --git a/npc/mobs/dungeons/lhz_dun.txt b/npc/mobs/dungeons/lhz_dun.txt index 558e0a51f..1fdc316fd 100644 --- a/npc/mobs/dungeons/lhz_dun.txt +++ b/npc/mobs/dungeons/lhz_dun.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lighthalzen Dungeon(Biolabs) Monster Spawn Script //===== By: ================================================== -// The Prometheus Project, eAthena dev team +// The Prometheus Project, rAthena dev team //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== diff --git a/npc/mobs/dungeons/lou_dun.txt b/npc/mobs/dungeons/lou_dun.txt index 3cf9e50ce..46c40fa30 100644 --- a/npc/mobs/dungeons/lou_dun.txt +++ b/npc/mobs/dungeons/lou_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Louyang Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -40,4 +40,4 @@ lou_dun03,0,0,0,0 monster Yao Jun 1512,25,5000,0,0 lou_dun03,0,0,0,0 monster Mao Guai 1513,15,5000,0,0 lou_dun03,0,0,0,0 monster Green Maiden 1631,5,5000,0,0 lou_dun03,0,0,0,0 monster Green Maiden 1631,5,3000000,1800000,1 -lou_dun03,0,0,0,0 boss_monster White Lady 1630,1,7000000,600000,1 \ No newline at end of file +lou_dun03,0,0,0,0 boss_monster White Lady 1630,1,7000000,600000,1 diff --git a/npc/mobs/dungeons/mag_dun.txt b/npc/mobs/dungeons/mag_dun.txt index dda98c066..7fce2de53 100644 --- a/npc/mobs/dungeons/mag_dun.txt +++ b/npc/mobs/dungeons/mag_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Magma Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -29,4 +29,4 @@ mag_dun02,0,0,0,0 monster Deleter 1385,40,5000,0,0 mag_dun02,0,0,0,0 monster Deleter 1384,38,5000,0,0 mag_dun02,0,0,0,0 monster Blazer 1367,20,5000,0,0 mag_dun02,0,0,0,0 monster Diabolic 1382,15,5000,0,0 -mag_dun02,0,0,0,0 monster Gig 1387,10,5000,0,0 \ No newline at end of file +mag_dun02,0,0,0,0 monster Gig 1387,10,5000,0,0 diff --git a/npc/mobs/dungeons/mjo_dun.txt b/npc/mobs/dungeons/mjo_dun.txt index f54ad3e5d..435678446 100644 --- a/npc/mobs/dungeons/mjo_dun.txt +++ b/npc/mobs/dungeons/mjo_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Coal Mine(Dead pit) Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -32,4 +32,4 @@ mjo_dun03,0,0,0,0 monster Skeleton Worker 1169,70,5000,0,0 mjo_dun03,0,0,0,0 monster Myst 1151,35,5000,0,0 mjo_dun03,0,0,0,0 monster Giearth 1121,5,5000,0,0 mjo_dun03,0,0,0,0 monster Martin 1145,5,5000,0,0 -mjo_dun03,0,0,0,0 monster Cramp 1209,3,5000,0,0 \ No newline at end of file +mjo_dun03,0,0,0,0 monster Cramp 1209,3,5000,0,0 diff --git a/npc/mobs/dungeons/moc_pryd.txt b/npc/mobs/dungeons/moc_pryd.txt index 7bb89f233..e082fec52 100644 --- a/npc/mobs/dungeons/moc_pryd.txt +++ b/npc/mobs/dungeons/moc_pryd.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morocc Pryamid Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -61,4 +61,4 @@ moc_pryd06,0,0,0,0 monster Mimic 1191,30,5000,0,0 moc_pryd06,0,0,0,0 monster Verit 1032,30,5000,0,0 moc_pryd06,0,0,0,0 monster Arclouze 1194,20,5000,0,0 moc_pryd06,0,0,0,0 monster Ancient Mummy 1297,20,5000,0,0 -moc_pryd06,102,85,1,1 boss_monster Amon Ra 1511,1,3600000,600000,0 \ No newline at end of file +moc_pryd06,102,85,1,1 boss_monster Amon Ra 1511,1,3600000,600000,0 diff --git a/npc/mobs/dungeons/mosk_dun.txt b/npc/mobs/dungeons/mosk_dun.txt index 65facd118..b340ccb12 100644 --- a/npc/mobs/dungeons/mosk_dun.txt +++ b/npc/mobs/dungeons/mosk_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Moscovia Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -38,4 +38,4 @@ mosk_dun03,0,0,0,0 monster Mavka 1884,15,5000,0,0 mosk_dun03,207,221,5,5 boss_monster Gopinich 1885,1,7200000,600000,1 mosk_dun03,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0 mosk_dun03,0,0,0,0 monster White Plant 1082,10,5000,0,0 -mosk_dun03,0,0,0,0 monster Shining Plant 1083,5,10000,0,0 \ No newline at end of file +mosk_dun03,0,0,0,0 monster Shining Plant 1083,5,10000,0,0 diff --git a/npc/mobs/dungeons/nyd_dun.txt b/npc/mobs/dungeons/nyd_dun.txt index c28609ca4..8d10e2631 100644 --- a/npc/mobs/dungeons/nyd_dun.txt +++ b/npc/mobs/dungeons/nyd_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yggdrasil Root Dungeon //===== By: ================================================== //= Athena (1.0) @@ -27,4 +27,4 @@ nyd_dun01,53,221,0,0 monster Draco Egg 2014,1,60000,30000,0 nyd_dun01,58,216,0,0 monster Draco Egg 2014,1,60000,30000,0 nyd_dun01,60,226,0,0 monster Draco Egg 2014,1,60000,30000,0 nyd_dun01,53,228,0,0 monster Draco Egg 2014,1,60000,30000,0 -nyd_dun01,47,218,0,0 monster Draco Egg 2014,1,60000,30000,0 \ No newline at end of file +nyd_dun01,47,218,0,0 monster Draco Egg 2014,1,60000,30000,0 diff --git a/npc/mobs/dungeons/odin.txt b/npc/mobs/dungeons/odin.txt index 4eb11909a..b7a9038ca 100644 --- a/npc/mobs/dungeons/odin.txt +++ b/npc/mobs/dungeons/odin.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Odin Temple Monster Spawn Script //===== By: ================================================== //= Poki#3 (0.1) @@ -52,4 +52,4 @@ odin_tem03,0,0,0,0 monster Frus 1753,4,5000,0,0 odin_tem03,0,0,0,0 monster Valkyrie 1765,2,5400000,1800000,0 odin_tem03,0,0,0,0 boss_monster Valkyrie Randgris 1751,1,28800000,600000,1 odin_tem03,0,0,0,0 monster Blue Plant 1079,15,1800000,900000,1 -odin_tem03,0,0,0,0 monster Shining Plant 1083,15,1800000,900000,1 \ No newline at end of file +odin_tem03,0,0,0,0 monster Shining Plant 1083,15,1800000,900000,1 diff --git a/npc/mobs/dungeons/orcsdun.txt b/npc/mobs/dungeons/orcsdun.txt index 75b45229b..3a011ec5d 100644 --- a/npc/mobs/dungeons/orcsdun.txt +++ b/npc/mobs/dungeons/orcsdun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Orc Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -33,4 +33,4 @@ orcsdun02,0,0,0,0 monster Steel Chonchon 1042,20,5000,0,0 orcsdun02,0,0,0,0 monster Orc Archer 1189,5,5000,0,0 orcsdun02,0,0,0,0 monster Black Mushroom 1084,5,180000,90000,1 orcsdun02,105,37,10,10 monster White Plant 1082,2,180000,90000,1 -orcsdun02,37,44,10,10 monster White Plant 1082,3,180000,90000,1 \ No newline at end of file +orcsdun02,37,44,10,10 monster White Plant 1082,3,180000,90000,1 diff --git a/npc/mobs/dungeons/pay_dun.txt b/npc/mobs/dungeons/pay_dun.txt index 8bdd29684..eade9ece2 100644 --- a/npc/mobs/dungeons/pay_dun.txt +++ b/npc/mobs/dungeons/pay_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Payon Cave Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -147,4 +147,4 @@ pay_dun04,28,110,5,5 monster Shining Plant 1083,1,1800000,900000,1 pay_dun04,0,0,0,0 monster Red Plant 1078,10,180000,90000,1 pay_dun04,107,206,5,5 monster White Plant 1082,2,180000,90000,1 pay_dun04,28,110,10,10 monster White Plant 1082,2,180000,90000,1 -pay_dun04,190,207,5,5 monster White Plant 1082,2,180000,90000,1 \ No newline at end of file +pay_dun04,190,207,5,5 monster White Plant 1082,2,180000,90000,1 diff --git a/npc/mobs/dungeons/prt_maze.txt b/npc/mobs/dungeons/prt_maze.txt index c172e6e0d..169127050 100644 --- a/npc/mobs/dungeons/prt_maze.txt +++ b/npc/mobs/dungeons/prt_maze.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Maze(Hidden Temple) Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -99,4 +99,4 @@ prt_maze03,0,0,0,0 monster Red Plant 1078,5,180000,90000,1 prt_maze03,99,21,10,10 monster Black Mushroom 1084,3,180000,90000,1 prt_maze03,54,15,10,10 monster Black Mushroom 1084,3,180000,90000,1 prt_maze03,171,180,3,3 monster Red Mushroom 1085,2,180000,90000,1 -prt_maze03,174,187,3,3 monster Red Mushroom 1085,3,180000,90000,1 \ No newline at end of file +prt_maze03,174,187,3,3 monster Red Mushroom 1085,3,180000,90000,1 diff --git a/npc/mobs/dungeons/prt_sew.txt b/npc/mobs/dungeons/prt_sew.txt index 78511bd7c..23a10de97 100644 --- a/npc/mobs/dungeons/prt_sew.txt +++ b/npc/mobs/dungeons/prt_sew.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Sewers(Culvert) Dungeon Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/dungeons/ra_san.txt b/npc/mobs/dungeons/ra_san.txt index 3e862e5ad..46b4f255b 100644 --- a/npc/mobs/dungeons/ra_san.txt +++ b/npc/mobs/dungeons/ra_san.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rachel Sanctuary Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -55,4 +55,4 @@ ra_san05,0,0,0,0 monster Echio 1770,30,5000,0,0 ra_san05,0,0,0,0 monster Seeker 1774,20,5000,0,0 ra_san05,0,0,0,0 monster Hodremlin 1773,20,5000,0,0 ra_san05,0,0,0,0 monster Isilla 1772,10,5000,0,0 -ra_san05,0,0,0,0 boss_monster Gloom Under Night 1768,1,18000000,600000,0 \ No newline at end of file +ra_san05,0,0,0,0 boss_monster Gloom Under Night 1768,1,18000000,600000,0 diff --git a/npc/mobs/dungeons/tha_t.txt b/npc/mobs/dungeons/tha_t.txt index 5a25add53..681f086d8 100644 --- a/npc/mobs/dungeons/tha_t.txt +++ b/npc/mobs/dungeons/tha_t.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Thanatos Tower Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/dungeons/thor_v.txt b/npc/mobs/dungeons/thor_v.txt index 82ea23a64..077ada870 100644 --- a/npc/mobs/dungeons/thor_v.txt +++ b/npc/mobs/dungeons/thor_v.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Thor Volcano Monster Spawn Script //===== By: ================================================== //= Playtester diff --git a/npc/mobs/dungeons/treasure.txt b/npc/mobs/dungeons/treasure.txt index 8e5456404..e4073cfba 100644 --- a/npc/mobs/dungeons/treasure.txt +++ b/npc/mobs/dungeons/treasure.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Sunken Ship Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -117,4 +117,4 @@ treasure02,108,57,0,0 monster Hydra 1068,1,300000,100000,1 treasure02,100,85,0,0 monster Hydra 1068,1,300000,100000,1 treasure02,101,85,0,0 monster Hydra 1068,1,300000,100000,1 treasure02,0,0,0,0 monster Ghostring 1120,1,1980000,1200000,1 -treasure02,101,151,8,8 boss_monster Drake 1112,1,7200000,600000,1 \ No newline at end of file +treasure02,101,151,8,8 boss_monster Drake 1112,1,7200000,600000,1 diff --git a/npc/mobs/dungeons/tur_dun.txt b/npc/mobs/dungeons/tur_dun.txt index b901a13ca..467bee819 100644 --- a/npc/mobs/dungeons/tur_dun.txt +++ b/npc/mobs/dungeons/tur_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turtle Island Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -49,4 +49,4 @@ tur_dun04,99,93,20,20 boss_monster Turtle General 1312,1,3600000,600000,0 //================================================== tur_dun05,0,0,0,0 monster Freezer 1319,5,5000,0,0 tur_dun05,0,0,0,0 monster Permeter 1314,3,5000,0,0 -tur_dun05,0,0,0,0 monster Assaulter 1315,1,5000,0,0 \ No newline at end of file +tur_dun05,0,0,0,0 monster Assaulter 1315,1,5000,0,0 diff --git a/npc/mobs/dungeons/xmas_dun.txt b/npc/mobs/dungeons/xmas_dun.txt index a0b5df902..eeca02eef 100644 --- a/npc/mobs/dungeons/xmas_dun.txt +++ b/npc/mobs/dungeons/xmas_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Toy Factory Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/dungeons/yggdrasil.txt b/npc/mobs/dungeons/yggdrasil.txt index a7945f961..b3d401ac5 100644 --- a/npc/mobs/dungeons/yggdrasil.txt +++ b/npc/mobs/dungeons/yggdrasil.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yggdrasil Tree Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/fields/amatsu.txt b/npc/mobs/fields/amatsu.txt index f97c2b1a8..4368fc5a7 100644 --- a/npc/mobs/fields/amatsu.txt +++ b/npc/mobs/fields/amatsu.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Amatsu Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -34,4 +34,4 @@ ama_fild01,171,313,0,0 monster Hydra 1068,1,66000,33000,0 ama_fild01,171,314,0,0 monster Hydra 1068,1,69000,34500,0 ama_fild01,171,315,0,0 monster Hydra 1068,1,69000,34500,0 ama_fild01,175,314,0,0 monster Hydra 1068,1,72000,39000,0 -ama_fild01,169,315,0,0 monster Hydra 1068,1,72000,39000,0 \ No newline at end of file +ama_fild01,169,315,0,0 monster Hydra 1068,1,72000,39000,0 diff --git a/npc/mobs/fields/ayothaya.txt b/npc/mobs/fields/ayothaya.txt index 7675f32d4..896435a20 100644 --- a/npc/mobs/fields/ayothaya.txt +++ b/npc/mobs/fields/ayothaya.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ayothaya Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/fields/brasilis.txt b/npc/mobs/fields/brasilis.txt index 6f521ddac..923fa6ccc 100644 --- a/npc/mobs/fields/brasilis.txt +++ b/npc/mobs/fields/brasilis.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brasilis Fields Monster Spawn Script //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Additional Comments: ================================= //= 1.0 Official spawns from Aegis [Kisuka] //============================================================ diff --git a/npc/mobs/fields/comodo.txt b/npc/mobs/fields/comodo.txt index 2142156d1..eac8387ac 100644 --- a/npc/mobs/fields/comodo.txt +++ b/npc/mobs/fields/comodo.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Comodo Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -92,4 +92,4 @@ cmd_fild09,0,0,0,0 monster Metaller 1058,145,5000,0,0 cmd_fild09,0,0,0,0 monster Deniro 1105,15,5000,0,0 cmd_fild09,0,0,0,0 monster Piere 1160,15,5000,0,0 cmd_fild09,0,0,0,0 monster Andre 1095,15,5000,0,0 -cmd_fild09,0,0,0,0 monster Ant Egg 1097,10,5000,0,0 \ No newline at end of file +cmd_fild09,0,0,0,0 monster Ant Egg 1097,10,5000,0,0 diff --git a/npc/mobs/fields/dicastes.txt b/npc/mobs/fields/dicastes.txt index c9a758d2f..82f71bd21 100644 --- a/npc/mobs/fields/dicastes.txt +++ b/npc/mobs/fields/dicastes.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= El Dicastes Fields Monster Spawn Script //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Additional Comments: ================================= //= 1.0 Official spawns from Aegis [Kisuka] //============================================================ @@ -25,4 +25,4 @@ dic_fild02,0,0,0,0 monster Bradium Golem 2024,3,5000,0,0 dic_fild02,0,0,0,0 monster Centipede 1987,35,5000,0,0 dic_fild02,0,0,0,0 monster Centipede Larva 1999,10,5000,0,0 dic_fild02,0,0,0,0 monster Tatacho 1986,25,5000,0,0 -dic_fild02,0,0,0,0 monster Dolomedes 2092,80,5000,0,0 \ No newline at end of file +dic_fild02,0,0,0,0 monster Dolomedes 2092,80,5000,0,0 diff --git a/npc/mobs/fields/einbroch.txt b/npc/mobs/fields/einbroch.txt index 053c3538a..518e1d218 100644 --- a/npc/mobs/fields/einbroch.txt +++ b/npc/mobs/fields/einbroch.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbroch Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -102,4 +102,4 @@ ein_fild09,0,0,0,0 monster Red Mushroom 1085,10,120000,60000,0 //================================================== // ein_fild10 - Disabled on Renewal -//================================================== \ No newline at end of file +//================================================== diff --git a/npc/mobs/fields/geffen.txt b/npc/mobs/fields/geffen.txt index bfd057452..8daf2793d 100644 --- a/npc/mobs/fields/geffen.txt +++ b/npc/mobs/fields/geffen.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffen Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/fields/gonryun.txt b/npc/mobs/fields/gonryun.txt index 9652e8df4..60ac58acf 100644 --- a/npc/mobs/fields/gonryun.txt +++ b/npc/mobs/fields/gonryun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Gon Ryun Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -18,4 +18,4 @@ gon_fild01,0,0,0,0 monster Dumpling Child 1409,55,5000,0,0 gon_fild01,0,0,0,0 monster Baby Leopard 1415,40,5000,0,0 gon_fild01,0,0,0,0 monster Side Winder 1037,10,5000,0,0 gon_fild01,0,0,0,0 monster Green Plant 1080,5,5000,0,0 -gon_fild01,0,0,0,0 monster Shining Plant 1083,1,5000,0,0 \ No newline at end of file +gon_fild01,0,0,0,0 monster Shining Plant 1083,1,5000,0,0 diff --git a/npc/mobs/fields/hugel.txt b/npc/mobs/fields/hugel.txt index af4b51d2d..14b74aa17 100644 --- a/npc/mobs/fields/hugel.txt +++ b/npc/mobs/fields/hugel.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hugel Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -71,4 +71,4 @@ hu_fild06,234,251,14,120 monster Yellow Plant 1081,10,600000,0,0 //================================================== // hu_fild07 - Disabled on Renewal -//================================================== \ No newline at end of file +//================================================== diff --git a/npc/mobs/fields/jawaii.txt b/npc/mobs/fields/jawaii.txt index 0c63c6312..b34fa815b 100644 --- a/npc/mobs/fields/jawaii.txt +++ b/npc/mobs/fields/jawaii.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Jawaii the honeymoon Island Monster Spawn Script //===== By: ================================================== //= MasterOfMuppets (1.0) @@ -26,4 +26,4 @@ jawaii_in,128,121,1,4 monster Red Mushroom 1085,1,3000000,1200000,0 jawaii_in,124,76,1,1 monster Black Mushroom 1084,1,3600000,1200000,0 jawaii_in,72,74,5,1 monster Black Mushroom 1084,2,3000000,1200000,0 jawaii_in,73,117,4,4 monster Thief Bug Egg 1048,1,5400000,3000000,0 -jawaii_in,83,117,5,5 monster Thief Bug Egg 1048,1,4800000,2400000,0 \ No newline at end of file +jawaii_in,83,117,5,5 monster Thief Bug Egg 1048,1,4800000,2400000,0 diff --git a/npc/mobs/fields/lighthalzen.txt b/npc/mobs/fields/lighthalzen.txt index e7bd81a3d..05fed705e 100644 --- a/npc/mobs/fields/lighthalzen.txt +++ b/npc/mobs/fields/lighthalzen.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lighthalzen Fields Monster Spawn Script //===== By: ================================================== -//= Muad_Dib, eAthena dev team +//= Muad_Dib, rAthena dev team //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== @@ -47,4 +47,4 @@ lhz_fild03,0,0,0,0 monster Rafflesia 1162,20,5000,0,0 lhz_fild03,0,0,0,0 monster Metaling 1613,20,5000,0,0 lhz_fild03,0,0,0,0 monster Demon Pungus 1378,15,5000,0,0 lhz_fild03,0,0,0,0 monster Red Plant 1078,10,60000,30000,0 -lhz_fild03,0,0,0,0 monster Green Plant 1080,10,60000,30000,0 \ No newline at end of file +lhz_fild03,0,0,0,0 monster Green Plant 1080,10,60000,30000,0 diff --git a/npc/mobs/fields/louyang.txt b/npc/mobs/fields/louyang.txt index fab563b85..fd645faf3 100644 --- a/npc/mobs/fields/louyang.txt +++ b/npc/mobs/fields/louyang.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Louyang Fields Monster Spawn Script //===== By: ================================================== //= Evera/Lorri @@ -19,4 +19,4 @@ lou_fild01,0,0,0,0 monster Mi Gao 1516,40,5000,0,0 lou_fild01,0,0,0,0 monster Mantis 1139,19,5000,0,0 lou_fild01,0,0,0,0 monster Geographer 1368,19,5000,0,0 lou_fild01,0,0,0,0 monster Black Mushroom 1084,5,5000,0,0 -lou_fild01,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0 \ No newline at end of file +lou_fild01,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0 diff --git a/npc/mobs/fields/lutie.txt b/npc/mobs/fields/lutie.txt index 2ca535d67..19583ffe4 100644 --- a/npc/mobs/fields/lutie.txt +++ b/npc/mobs/fields/lutie.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lutie Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/fields/manuk.txt b/npc/mobs/fields/manuk.txt index 75dbbd68b..92f9866a1 100644 --- a/npc/mobs/fields/manuk.txt +++ b/npc/mobs/fields/manuk.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Manuk Fields Monster Spawn Script //===== By: ================================================== //= alexx, MaC @@ -33,4 +33,4 @@ man_fild02,0,0,0,0 monster Tatacho 1986,25,5000,0,0 man_fild03,0,0,0,0 monster Hillslion 1989,25,5000,0,0 man_fild03,0,0,0,0 monster Tatacho 1986,25,5000,0,0 man_fild03,0,0,0,0 monster Centipede 1987,25,5000,0,0 -man_fild03,0,0,0,0 monster Hardrock Mammoth 1990,1,14400000,0,0 \ No newline at end of file +man_fild03,0,0,0,0 monster Hardrock Mammoth 1990,1,14400000,0,0 diff --git a/npc/mobs/fields/mjolnir.txt b/npc/mobs/fields/mjolnir.txt index ee5ab7ffb..e2483c2a8 100644 --- a/npc/mobs/fields/mjolnir.txt +++ b/npc/mobs/fields/mjolnir.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mt. Mjolnir Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -226,4 +226,4 @@ mjolnir_11,295,271,0,0 monster Green Plant 1080,1,180000,90000,1 //================================================== mjolnir_12,0,0,0,0 monster Dustiness 1114,130,5000,0,0 mjolnir_12,0,0,0,0 monster Hunter Fly 1035,35,5000,0,0 -mjolnir_12,0,0,0,0 monster Mantis 1139,35,5000,0,0 \ No newline at end of file +mjolnir_12,0,0,0,0 monster Mantis 1139,35,5000,0,0 diff --git a/npc/mobs/fields/morocc.txt b/npc/mobs/fields/morocc.txt index 85bb02286..774e342da 100644 --- a/npc/mobs/fields/morocc.txt +++ b/npc/mobs/fields/morocc.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morocc Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -216,4 +216,4 @@ moc_fild22,0,0,0,0 monster Incarnation of Morroc 1918,60,30000,0,0 moc_fild22,0,0,0,0 monster Incarnation of Morroc 1919,60,30000,0,0 moc_fild22,0,0,0,0 monster Incarnation of Morroc 1920,60,30000,0,0 moc_fild22,0,0,0,0 monster Incarnation of Morroc 1921,25,10000,0,0 -moc_fild22,0,0,0,0 boss_monster Wounded Morroc 1917,1,43200000,600000,0 \ No newline at end of file +moc_fild22,0,0,0,0 boss_monster Wounded Morroc 1917,1,43200000,600000,0 diff --git a/npc/mobs/fields/moscovia.txt b/npc/mobs/fields/moscovia.txt index 5ab6cdce7..1edaf0464 100644 --- a/npc/mobs/fields/moscovia.txt +++ b/npc/mobs/fields/moscovia.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Moscovia Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -19,4 +19,4 @@ mosk_fild02,0,0,0,0 monster Argiope 1099,30,5000,0,0 mosk_fild02,0,0,0,0 monster Mantis 1139,10,5000,0,0 mosk_fild02,0,0,0,0 monster Geographer 1368,5,5000,0,0 mosk_fild02,0,0,0,0 monster Yellow Plant 1081,5,5000,0,0 -mosk_fild02,0,0,0,0 monster White Plant 1082,5,10000,0,0 \ No newline at end of file +mosk_fild02,0,0,0,0 monster White Plant 1082,5,10000,0,0 diff --git a/npc/mobs/fields/niflheim.txt b/npc/mobs/fields/niflheim.txt index 14cecfda8..ecdbf7835 100644 --- a/npc/mobs/fields/niflheim.txt +++ b/npc/mobs/fields/niflheim.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Niflheim Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -42,4 +42,4 @@ nif_fild02,0,0,0,0 monster Gibbet 1503,20,5000,0,0 nif_fild02,0,0,0,0 monster Bloody Murderer 1507,11,5000,0,0 nif_fild02,0,0,0,0 monster Dullahan 1504,10,5000,0,0 nif_fild02,0,0,0,0 monster Lude 1509,10,5000,0,0 -nif_fild02,0,0,0,0 monster Heirozoist 1510,10,5000,0,0 \ No newline at end of file +nif_fild02,0,0,0,0 monster Heirozoist 1510,10,5000,0,0 diff --git a/npc/mobs/fields/payon.txt b/npc/mobs/fields/payon.txt index 9d989897d..0f97f0265 100644 --- a/npc/mobs/fields/payon.txt +++ b/npc/mobs/fields/payon.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Payon Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/fields/prontera.txt b/npc/mobs/fields/prontera.txt index a6dc9f144..23eee3625 100644 --- a/npc/mobs/fields/prontera.txt +++ b/npc/mobs/fields/prontera.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/fields/rachel.txt b/npc/mobs/fields/rachel.txt index 9c62c5134..92708aa5e 100644 --- a/npc/mobs/fields/rachel.txt +++ b/npc/mobs/fields/rachel.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rachel Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -98,4 +98,4 @@ ra_fild12,0,0,0,0 monster Red Plant 1078,5,5000,0,1 //================================================== // ra_fild13 - Disabled on Renewal -//================================================== \ No newline at end of file +//================================================== diff --git a/npc/mobs/fields/splendide.txt b/npc/mobs/fields/splendide.txt index 20f3dab12..a3f6bc057 100644 --- a/npc/mobs/fields/splendide.txt +++ b/npc/mobs/fields/splendide.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Splendide Fields Monster Spawn Script //===== By: ================================================== //= alexx, MaC diff --git a/npc/mobs/fields/umbala.txt b/npc/mobs/fields/umbala.txt index a045ef7af..85c4dafb8 100644 --- a/npc/mobs/fields/umbala.txt +++ b/npc/mobs/fields/umbala.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Umbala Fields Monster Spawn Script //===== By: ================================================== //= Darkchild (1.0) //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= Any eAthena Version; RO Ep6+ +//= Any rAthena Version; RO Ep6+ //===== Additional Comments: ================================= //= 1.3 Official kRO 10.1 spawns [Playtester] //= 1.4 More accurate spawns [Playtester] @@ -56,4 +56,4 @@ um_fild04,0,0,0,0 monster Wooden Golem 1497,10,5000,0,0 um_fild04,0,0,0,0 monster Choco 1214,2,5000,0,0 um_fild04,0,0,0,0 monster Red Plant 1078,5,180000,90000,1 um_fild04,0,0,0,0 monster Yellow Plant 1081,5,180000,90000,1 -um_fild01,0,0,0,0 monster Shining Plant 1083,1,180000,90000,1 \ No newline at end of file +um_fild01,0,0,0,0 monster Shining Plant 1083,1,180000,90000,1 diff --git a/npc/mobs/fields/veins.txt b/npc/mobs/fields/veins.txt index 5d6c6f9d4..0ab4ecf58 100644 --- a/npc/mobs/fields/veins.txt +++ b/npc/mobs/fields/veins.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Veins Fields Monster Spawn Script //===== By: ================================================== //= $ephiroth @@ -73,4 +73,4 @@ ve_fild06,0,0,0,0 monster Shining Plant 1083,1,5000,0,0 ve_fild07,0,0,0,0 monster Stapo 1784,100,5000,0,0 ve_fild07,0,0,0,0 monster Drosera 1781,50,5000,0,0 ve_fild07,0,0,0,0 monster Muscipular 1780,30,5000,0,0 -ve_fild07,0,0,0,0 monster White Plant 1082,10,600000,0,0 \ No newline at end of file +ve_fild07,0,0,0,0 monster White Plant 1082,10,600000,0,0 diff --git a/npc/mobs/fields/yuno.txt b/npc/mobs/fields/yuno.txt index b3a754709..b5ea8aea2 100644 --- a/npc/mobs/fields/yuno.txt +++ b/npc/mobs/fields/yuno.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yuno Fields Monster Spawn Script //===== By: ================================================== //= Athena (1.0) @@ -134,4 +134,4 @@ yuno_fild11,0,0,0,0 monster Yellow Plant 1081,10,180000,90000,1 // yuno_fild12 - Border Checkpoint //================================================== yuno_fild12,0,0,0,0 monster Geographer 1368,60,5000,0,0 -yuno_fild12,0,0,0,0 monster Mantis 1139,30,5000,0,0 \ No newline at end of file +yuno_fild12,0,0,0,0 monster Mantis 1139,30,5000,0,0 diff --git a/npc/mobs/pvp.txt b/npc/mobs/pvp.txt index 4249418cf..9af49474e 100644 --- a/npc/mobs/pvp.txt +++ b/npc/mobs/pvp.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= PvP Nightmare Rooms Monster Spawn Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/mobs/towns/brasilis.txt b/npc/mobs/towns/brasilis.txt index be079c730..a8598a4b4 100644 --- a/npc/mobs/towns/brasilis.txt +++ b/npc/mobs/towns/brasilis.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brasilis Quest Monsters //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/other/CashShop_Functions.txt b/npc/other/CashShop_Functions.txt index f90572e0f..eb8b1f19e 100644 --- a/npc/other/CashShop_Functions.txt +++ b/npc/other/CashShop_Functions.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Cash Shop Functions //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Used explicitly in the Item Database for Cash shop items //= - Kafra Card diff --git a/npc/other/Global_Functions.txt b/npc/other/Global_Functions.txt index b93049e83..d469f9343 100644 --- a/npc/other/Global_Functions.txt +++ b/npc/other/Global_Functions.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Global Functions //===== By: ================================================== //= Lupus, kobra_k88 //===== Current Version: ===================================== //= 2.16 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/other/arena/arena_aco.txt b/npc/other/arena/arena_aco.txt index 8d56b9a59..247e71b87 100644 --- a/npc/other/arena/arena_aco.txt +++ b/npc/other/arena/arena_aco.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Izlude Arena script //===== By: ================================================== //= L0ne_W0lf @@ -1844,4 +1844,4 @@ arena_room,195,10,3 script acolink#arena 802,{ } } } -*/ \ No newline at end of file +*/ diff --git a/npc/other/arena/arena_lvl50.txt b/npc/other/arena/arena_lvl50.txt index 2672c6bc1..12df84255 100644 --- a/npc/other/arena/arena_lvl50.txt +++ b/npc/other/arena/arena_lvl50.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Izlude Arena lvl 50 //===== By: ================================================== //= SinSloth @@ -1118,4 +1118,4 @@ OnInit: if(!$top_50min && !$top_50sec) set $top_50min,5; end; -} \ No newline at end of file +} diff --git a/npc/other/arena/arena_lvl60.txt b/npc/other/arena/arena_lvl60.txt index 4eb9aafbe..72fc78819 100644 --- a/npc/other/arena/arena_lvl60.txt +++ b/npc/other/arena/arena_lvl60.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Izlude Arena lvl 60 //===== By: ================================================== //= SinSloth @@ -1119,4 +1119,4 @@ OnInit: if(!$top_60min && !$top_60sec) set $top_60min,6; end; -} \ No newline at end of file +} diff --git a/npc/other/arena/arena_lvl70.txt b/npc/other/arena/arena_lvl70.txt index 55132b857..cc2e5cfd5 100644 --- a/npc/other/arena/arena_lvl70.txt +++ b/npc/other/arena/arena_lvl70.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Izlude Arena lvl 70 //===== By: ================================================== //= SinSloth diff --git a/npc/other/arena/arena_lvl80.txt b/npc/other/arena/arena_lvl80.txt index ca0e881cb..501cb11c2 100644 --- a/npc/other/arena/arena_lvl80.txt +++ b/npc/other/arena/arena_lvl80.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Izlude Arena lvl 80 //===== By: ================================================== //= SinSloth diff --git a/npc/other/arena/arena_party.txt b/npc/other/arena/arena_party.txt index b163a528d..880b80e88 100644 --- a/npc/other/arena/arena_party.txt +++ b/npc/other/arena/arena_party.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Izlude Party Arena //===== By: ================================================== //= SinSloth @@ -1459,4 +1459,4 @@ OnInit: if(!$top_ptmin && !$top_ptsec) set $top_ptmin,10; end; -} \ No newline at end of file +} diff --git a/npc/other/arena/arena_point.txt b/npc/other/arena/arena_point.txt index 7aeab9994..7a6501cfa 100644 --- a/npc/other/arena/arena_point.txt +++ b/npc/other/arena/arena_point.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Point Exchanger //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Point exchanger: Turbo track points -> Arena Points diff --git a/npc/other/arena/arena_room.txt b/npc/other/arena/arena_room.txt index c742cc021..9653f4912 100644 --- a/npc/other/arena/arena_room.txt +++ b/npc/other/arena/arena_room.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================== +//===== rAthena Script ======================================== //= Izlude Arena Room //===== By: ================================================== //= SinSloth @@ -1224,4 +1224,4 @@ OnTouch: } end; -} \ No newline at end of file +} diff --git a/npc/other/auction.txt b/npc/other/auction.txt index 20fcde573..48e74107f 100644 --- a/npc/other/auction.txt +++ b/npc/other/auction.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Auction system //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Auction house releated NPCs, and warps diff --git a/npc/other/books.txt b/npc/other/books.txt index 302b2019f..d4623ab5d 100644 --- a/npc/other/books.txt +++ b/npc/other/books.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Library //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/other/bulletin_boards.txt b/npc/other/bulletin_boards.txt index 3840bdc91..fe95c7989 100644 --- a/npc/other/bulletin_boards.txt +++ b/npc/other/bulletin_boards.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Official scripts for beginners from iRO //===== By: ================================================== //= MasterOfMuppets diff --git a/npc/other/comodo_gambling.txt b/npc/other/comodo_gambling.txt index 9f563141f..f0223b8bb 100644 --- a/npc/other/comodo_gambling.txt +++ b/npc/other/comodo_gambling.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Comodo Gambling //===== By: ================================================== //= Reddozen, Cypress, Zefris //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN 6769+ (temporary npc variables) +//= rAthena SVN 6769+ (temporary npc variables) //===== Description: ========================================= //= Random items from 3carat diamonds in Comodo //===== Additional Comments: ================================= diff --git a/npc/other/divorce.txt b/npc/other/divorce.txt index e210e688b..691820c59 100644 --- a/npc/other/divorce.txt +++ b/npc/other/divorce.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Divorcing Deviruchi //===== By: ================================================== //= Perkka, Scriptor, LightFighter @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis COnversion] //= Official Divorce script. diff --git a/npc/other/fortune.txt b/npc/other/fortune.txt index f19f658ed..467a3a1a3 100644 --- a/npc/other/fortune.txt +++ b/npc/other/fortune.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Fortune Teller //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis conversion] //= Fortune teller NPC. Displays random Card image. @@ -68,7 +68,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; set .@card_1_love,rand(1,74); if (.@card_1_love == 1) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " You are afraid to show yourself working, to your loved one.. "; mes " But that is not love. Do not be afraid to show different sides of yourself to your loved one.. "; @@ -78,7 +78,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 2) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " Maybe you are using love as an excuse to work? The card is saying to try observing love from a different perspective. "; next; @@ -87,7 +87,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 3) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " How about taking a break from love and giving yourself time to relax.. I agree with what the card is saying. "; next; @@ -96,7 +96,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 4) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " A shovel..? "; next; @@ -109,7 +109,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 5) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " Its pure eyes look at a loved one but cannot recognize them, the wings flutter towards the loved one, but it helplessly stays in one place, "; mes " it calls its loved one, but they cannot hear.. "; @@ -120,7 +120,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 6) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The passion of love like a raging wave... You can't even hide it. "; mes " With such passionate love, isn't there only one way..? "; @@ -130,13 +130,13 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 7) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The teeth of dustiness are very strong. This means.. use your teeth for victory?! "; next; } if (.@card_1_love == 8) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The card is telling me, 'Fly to your loved one as if you were a butterfly and shoot at it as if you were a star.' "; mes "..even though it doesn't sound like something a moth would say. "; @@ -146,7 +146,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 9) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " Perhaps the person you believe to be a butterfly is actually a moth. This fortune is awaiting a prudent judgement. "; next; @@ -155,7 +155,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 10) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " The one you love will give you a kiss of death. "; mes " The irresistable kiss.. It is up to you to decide whether to avoid it or not. "; @@ -165,7 +165,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 11) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " You are looking at a wonderful person, but their eyes are fixed in darkness. "; mes " How about trying to grab their attention? "; @@ -175,7 +175,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 12) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Your love needs fresh blood. Healthy exercises and eating habits are necessary! "; mes " You must change your living pattern first. "; @@ -185,7 +185,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 13) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Don't you think you are infatuated by outer appearance and gambling with love? You might have to be more careful about it this time. "; next; @@ -194,13 +194,13 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 14) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " Become a pirate of love! It is a simple, yet strong fortune! "; next; } if (.@card_1_love == 15) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " No matter how romantic and beautiful love is, if it is not rightful, it is undesirable.. "; mes " is what this card means. "; @@ -210,7 +210,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 16) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " In the rough sea called the world, only pirates, the outlaws of love, are the law. "; mes " This card supports strong love. "; @@ -220,7 +220,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 17) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " It is a warning not to get involved in false love like pirated editions! "; mes " You may have to reconsider your love right now. "; @@ -230,7 +230,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 18) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " This is praising the type of love that is always there, yet barely has a form as if it does not exist. "; mes " Are you involved this type of love? "; @@ -240,7 +240,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 19) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " You must be careful. Love is quietly approaching and spreading poison. Be careful of the poison of love. "; next; @@ -249,7 +249,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 20) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " Aren't you already caught in love that you cannot run away from? Look around you. "; mes " You might be captured inside invisible walls. "; @@ -259,7 +259,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 21) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " This fortune is saying that love is.. approaching wobbly and softly~ and then bam~ embracing it. "; mes " Very romantic. Hehe. "; @@ -269,7 +269,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 22) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " This card is warning you to not treat your loved one like a puppet. "; mes " You're not doing this, are you? "; @@ -279,7 +279,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 23) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " Dolls understand a human's heart more than a human. Try treating your loved one as if they were a doll. "; next; @@ -288,7 +288,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 24) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " If you are afraid to look into a doll's eyes, that is because there is a dark shadow covering your love. "; mes " Rid yourselves of that shadow. Then the doll will smile as well. "; @@ -298,7 +298,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 25) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " Dolls become accustomed to the owner the more they are handled. Give your doll more attention. "; mes " The doll is craving attention. A lot of attention. "; @@ -308,7 +308,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 26) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " Do you fear the snake hair of a Medusa? However, love cannot be achieved with fear. "; mes " You must move forward! "; @@ -318,7 +318,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 27) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " Warriors that hastily attacked the Medusa all failed, but the one hero that used a mirror succeeded. "; mes " You cannot succeed in love with brute force. You must use wisdom. "; @@ -328,7 +328,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 28) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " Must you love the one that has hair of snakes? Reconsider this love and think about it earnestly. "; next; @@ -337,7 +337,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 29) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " It is a hint saying that a strong hairstyle is the key to turning over the situation. Change your hairstyle! "; next; @@ -346,7 +346,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 30) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " Love must have two things: great strength and the will to live. Have you thought about whether or not you can overcome this with your current self? "; next; @@ -355,7 +355,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 31) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " A scythe may seem burdensome but a strong Baphomet can freely use it. "; mes " It is the same concept. If you are ready, any type of love is possible. There is no such thing as impossible. "; @@ -365,7 +365,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 32) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " Love must have two things: great strength and the will to live. Have you thought about whether or not you can overcome this with your current self? "; next; @@ -374,7 +374,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 33) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " There are those who are born, destined to run into this wall, an obstacle. Your love seems to have reached that wall.. It must be hard. "; next; @@ -383,7 +383,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 34) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " This Baphomet looks as if it is having a hard time. The person must be exhausted even if it may not seem so. "; next; @@ -392,7 +392,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 35) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " Can't you hear the cry of the card? It is suffering. Love is like that.. "; next; @@ -401,7 +401,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 36) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " Your love right now is so bored that it is yawning. How about trying something fresh and new? "; next; @@ -410,7 +410,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 37) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " Deep sleep brings happiness and dreams. I think what you need right now is sleep. "; next; @@ -419,7 +419,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 38) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " I feel some sort of emptiness.. Maybe there is a gap in your love? "; next; @@ -428,7 +428,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 39) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Even a traditional beauty can seem cold to others. Try looking at your loved one from a different point of view. "; next; @@ -437,7 +437,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 40) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " They may seem dreary and ominous but their attire is spotless. They show devotion to the other. "; mes " Even though you are not satisfied with your love right now, take a look at their attire. "; @@ -447,7 +447,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 41) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " There is a person you must not deal with thoughtlessly nearby. Don't say or do anything carelessly. You must be careful when dealing with this person. "; next; @@ -456,7 +456,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 42) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Even if the wind blows and the trail of her clothes flutter, her posture never changes. Loving a person with that type of heart will bring goodwill and happiness. "; next; @@ -465,7 +465,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 43) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " That lightens and attacks with a pickaxe! You must aggressively move forward. What do you think? Your fortune is a good one. "; next; @@ -474,7 +474,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 44) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " The card only shows gaunt bones, but notice how it has all the necessary tools?"; mes " Even though your love right now may seem as if there is nothing to it, it has everything you need. "; @@ -484,7 +484,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 45) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " It has a lantern on its back and even in its hand.. it believes one light is insufficient. "; mes " If you are only shining one type of light to your loved one, shining another might help. "; @@ -494,7 +494,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 46) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " You know the smile of Mona Lisa.. Perhaps the person you are looking at has the same expression? "; next; @@ -503,7 +503,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 47) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " A knight on a horse is a fantasy in every person's heart. Make it so that this fantasy becomes real. "; next; @@ -512,7 +512,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 48) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " Is that soldier waiting to attack? I can feel great tension between the horse and knight. "; mes " Don't run forward carelessly. Raise your sword and wait for your chance. "; @@ -522,7 +522,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 49) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " He is falling asleep awaiting a battle. Is it because he is laid back, or simply pathetic? Depends on the situation I suppose. "; mes " But you've got to give him credit for his boldness. "; @@ -532,7 +532,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 50) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " Very favorable. It's to a point that I can feel strong energy from the card. I will give some of this energy to you. "; next; @@ -541,7 +541,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 51) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " What does the god of death have to say about love? It is something ominous for sure. "; next; @@ -550,7 +550,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 52) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " Hmm. How about giving a cute puppy as a gift? One with a round nose. Then they will surely be happy. "; next; @@ -559,7 +559,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 53) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " I can tell what it was doing from the way it is crying while holding an axe with blood. It is deeply wounded by love. "; next; @@ -568,7 +568,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 54) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The pattern of the clothes symbolizes a warning. It is saying to be careful of love. "; next; @@ -577,7 +577,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 55) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " He is a warning you not to drool over someone else. "; next; @@ -586,7 +586,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 56) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " Who is he so fiercly gazing at with those grand muscles? He is looking at someone else for sure. "; next; @@ -595,7 +595,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 57) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " Strengthen your body and observe the target. That is the step to success. "; next; @@ -604,7 +604,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 58) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " His navel is very pretty. You have to meet someone with that type of navel to be happy. "; next; @@ -613,7 +613,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 59) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " You'll get hurt if you mess around. This card is giving you a piece of advice. "; next; @@ -622,7 +622,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 60) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " From the way he is massaging its back because of a shoulder cramp, maybe your love is seeking someone to massage them. Love starts from little thoughts."; next; @@ -631,7 +631,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 61) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " His expression is in awe. When encountering an absurd incident, his face and expression becomes peculiarly distorted. "; mes " I think the one you are looking towards has that type of expression. "; @@ -641,13 +641,13 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 62) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " If the lover does something wrong he pokes them with a needle. How scary.. "; next; } if (.@card_1_love == 63) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " A person's heart is like this card. If you flip it over nobody can tell what is behind it. Try turning the person's card over. "; next; @@ -656,7 +656,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 64) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Jokers are sly, but that is just because it is their habit. "; mes " The reason the person may seem capricious or cunning is partially because they are born like that. "; @@ -666,7 +666,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 65) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " The joker can't use any of his strength because he is tied to a card. Perhaps the person is caught in something and can't show their true merit? "; next; @@ -675,7 +675,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 66) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Don't get fooled by tricks. They are a person, too. They know how to lie once in a while. Search for the trick calmly and carefully. "; next; @@ -684,7 +684,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 67) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " It is saying that daring action is necessary, such as that of the Hode that strikes up from the sand. "; next; @@ -693,7 +693,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 68) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Seeing that the Hode spits out sand to those who bother them, you must have done something to bother the person somehow. "; next; @@ -702,7 +702,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 69) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " The Hode has a very strong will to live. It is to survive in the forest. It is suggesting dating with that kind of will."; next; @@ -711,7 +711,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 70) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Ah.. there is a noble person up north. North it is. This direction will never change. "; next; @@ -720,7 +720,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 71) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " A walking bull is rare. The person you are looking towards is that rare. Don't let go of them. You may never see them again.. "; next; @@ -729,7 +729,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 72) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " Can you see the strong muscles that even arrows cannot pierce? The person is like that, too. "; next; @@ -738,7 +738,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 73) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " The scariest thing is not the hammer nor horn. It is the massive legs that support its heavy weight. Nobody can survive a hit by those legs. The person is also probably hiding the most dangerous part. "; next; @@ -747,7 +747,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_love == 74) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " No matter how fearful the bull may be, if it has a nose ring, it has already been tamed by humans. No matter how astonishing that person may be, taming is your responsibility. "; next; @@ -758,7 +758,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ mes "[Lhimetorra]"; mes " You seeked advice about love. "; mes " Even if you may not pleased with it, consider it calmly and make an effort to find true happiness. "; - cutin "°¡À̾ƽºÄ«µå",255; + cutin "���̾ƽ�ī��",255; next; mes "[Lhimetorra]"; mes " Then... "; @@ -770,7 +770,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; set .@card_1_money,rand(1,73); if (.@card_1_money == 1) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " You must work hard to become wealthy. Don't think of other things.. Focus on and put effort into achieving your goals. "; next; @@ -779,7 +779,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 2) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " Something very rare may come your way. A gold mine has been the dream of many since ancient times. You have a gold mine right in front of you. "; next; @@ -788,7 +788,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 3) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " In the stomach pocket, there must be a secret treasure. There may be something in your pocket as well. "; next; @@ -797,7 +797,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 4) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " The card says that you should not be too greedy, for that may cause you to dig your own grave. "; next; @@ -806,7 +806,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 5) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " Did you know that a moth's wings has infinite amounts of powder on it? A moth symbolizes wealth in the sense that it can gather wealth just as the powder on its wings. "; next; @@ -815,7 +815,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 6) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " You must work hard to become wealthy. Don't think of other things. Simply focusing on your goals putting effort into it will help. "; next; @@ -824,7 +824,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 7) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " There is a common saying that when a moth flaps its wings, wealth will fly away as well. It's not a very good sign. "; next; @@ -833,7 +833,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 8) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " Dustiness teeth are very strong. This means.. "; next; @@ -842,7 +842,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 9) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " When a dustiness flies around, a big expense comes up. You may need to spend some money soon. "; next; @@ -851,7 +851,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 10) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Dracula brings in money. Maybe it is the moral influence from when it was a count. It is expensive to be a vampire, but I've never seen a poor one before. "; next; @@ -860,7 +860,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 11) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " To Dracula, money is not important. Blood is more valuable. To you, money must not be that important. You don't need to be concerned about money. "; next; @@ -869,7 +869,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 12) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Dracula mocks human's money. To him it is worthless. "; next; @@ -878,7 +878,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 13) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " No matter what, stealing is wrong! Even if a Drake blesses you in the name of pirates! Stealing is forbidden! "; next; @@ -887,7 +887,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 14) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " You will gather good fortune in a secretive and peculiar way.. Although, there seems to be shadows over some parts of your life. "; next; @@ -896,7 +896,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 15) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " The reason pirates indulge in others assets in the vast rough ocean, is because it is the only way to let the people of the land know of their existence. "; next; @@ -905,7 +905,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 16) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " Marina prefers clean funds. It hates suspicious money. Your possessions should be clean as well. "; next; @@ -914,7 +914,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 17) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " The Marina gathers money quietly, little by little, and freely roaming at the same time. That's the real way to make money. The Marina is suggesting this method to you. "; next; @@ -923,7 +923,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 18) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " The Marina is not interested in money. The card suggests that you will resemble these traits as well. You will enjoy life apart from money. "; next; @@ -932,7 +932,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 19) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " You will gather money swiftly and quietly, then boom~ blow it all at once. "; next; @@ -941,7 +941,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 20) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette treasures art over wealth. Bear that in mind. Honor over assets. "; next; @@ -950,7 +950,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 21) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette likes shiny money. Not dull money, but the shiny kind. "; next; @@ -959,7 +959,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 22) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette requires lots of money. Its expenditures are enormous. You must have many expenditures ahead of you. "; next; @@ -968,7 +968,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 23) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette uses a lot of money. There is someone around you that is like that, too. "; next; @@ -977,7 +977,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 24) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The hair of the Medusa symbolizes the amount of wealth. Seems as if something good will happen to you, young one. "; next; @@ -986,7 +986,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 25) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The hair of the Medusa are all snakes. Snakes symbolize greed and slyness. When gathering things, it seems as if a cunning force will join you. It's not exactly a bright sign.. "; next; @@ -995,7 +995,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 26) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa is strongly recommending saving. This card is telling you to save. It says to put many savings accounts in your hair and make yourself resemble its head shape. "; next; @@ -1004,7 +1004,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 28) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa does not enjoy playing with money. If you are attempting to use money other than the way it should be used, you should stop. Why? "; next; @@ -1013,7 +1013,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 29) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The great strength of the Baphomet brings in fortune. It seems as if you will be able to gather much wealth with the aid of the Baphomet's force! "; next; @@ -1022,7 +1022,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 30) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The scythe of the Baphomet means a strong tool to gather wealth. If you have a strong tool like his, it should be easy to gather wealth. "; next; @@ -1031,13 +1031,13 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 31) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " How about getting involved in raising cattle? It seems like you can gather much wealth through it. "; next; } if (.@card_1_money == 32) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The Baphomet would like a tribute. He is saying that if you do, he will return great benefits. "; next; @@ -1046,7 +1046,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 33) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " The Sandman cries with sadness when money comes up. It is sad because money does not possess love or affection. "; next; @@ -1055,7 +1055,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 34) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " The Sandman is screaming because it saw too much money. It saw the money in the hands of your future. I wonder what all that money is? "; next; @@ -1064,7 +1064,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 35) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " The Sandman's body is empty inside. Your wallet seems to be emtpy, too. You should save up some money. "; next; @@ -1073,7 +1073,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 36) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " Money is like sand. Even if you save it, once the wind blows, it disappears. This card shows the emptiness of money. "; next; @@ -1082,7 +1082,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 37) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Sohee is wearing a fine article. To wear something like that, you would need plenty of money. Do you know what the secret is? Sohee saved very much when she was once alive. "; next; @@ -1091,7 +1091,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 38) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Sohee hates misers. She believes she has become like that because of a miser. Don't be stingy in front of Sohee! "; next; @@ -1100,7 +1100,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 39) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Sohee dislikes the wealthy. They try to gather money, but never use it for others. If you don't want to be cursed by Sohee, you need to learn how to be generous with money. "; next; @@ -1109,7 +1109,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 40) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Sohee likes foreign money. They are cute and pretty. If you have foreign currency, Sohee will love you. "; next; @@ -1118,7 +1118,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 41) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " Those who work hard will gather great fortune. The Skeleton says diligent work will help greatly in gathering wealth. "; next; @@ -1127,7 +1127,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 42) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " Its youth is gone after a lifetime of chasing after gold. It became a monster with only bones left. No matter how much you like money and your work, look after your life as well. "; next; @@ -1136,7 +1136,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 43) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " To become rich, you must work hard as if you became a skeleton. The Skeleton is saying to work hard until you become a skeleton. "; next; @@ -1145,7 +1145,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 44) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " The Skeleton says that you can make money by going north. Go north. "; next; @@ -1154,7 +1154,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 45) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " A knight is a job that requires a lot of money. A hint of a big expense. You might want to tighten your belt. "; next; @@ -1163,7 +1163,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 46) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " Knights do not fight for money. If they did, they would be a mercenary. A knight reaches for something higher. What the knight wants to tell you is the way to live. "; next; @@ -1172,7 +1172,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 47) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " A knight values honor more than fortune. They consider discussing wealth itself dirty not worthy. How would you be able to ask such a knight a fortune about wealth? "; next; @@ -1181,7 +1181,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 48) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " You need to think of an ideal more noble than money. The fortune the knight suggests is this: Knights never speak of ways to make money. "; next; @@ -1190,7 +1190,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 49) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " Working hard is the only way to gather wealth; don't get sidetracked and put effort into working will help your fortune. "; next; @@ -1199,7 +1199,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 50) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " What does the god of death have to say about wealth? It is surely a bad omen. It is trying to warn something. "; next; @@ -1208,7 +1208,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 51) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis is very interested in the sacrifices offered. The offerings he likes are youth and effort. "; next; @@ -1217,7 +1217,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 52) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis is giving a warning of the west. There is a being there that can break away your wealth. "; next; @@ -1226,7 +1226,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 53) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis hates those who try to gather money for his death. He believes it's a waste of money. Don't make the mistake of gathering money for death. "; next; @@ -1235,7 +1235,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 54) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord possesses much wealth. It's because of greed. Greed is essential in collecting money. The desire and greediness to make money is not something to be ashamed about. Be diligent and go make money. "; next; @@ -1244,7 +1244,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 55) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord starts drooling about anything involving money. He targets anybody with money. "; next; @@ -1256,7 +1256,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 56) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " There should be great wealth awaiting in the direction the Orc Lord's horn is pointing. The card is directing towards.. "; next; @@ -1265,7 +1265,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 57) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord likes gold. Of all the treasures, gold is the best. Closely watch gold. "; next; @@ -1274,7 +1274,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 58) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack makes money through jokes. Others' happiness is the key to his wealth. "; next; @@ -1283,7 +1283,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 59) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack likes fun money. He detests sad and burdensome money. "; mes " He always says this. Light-hearted and easy money isn't dangerous even if it piles up. "; @@ -1293,7 +1293,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 60) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack thinks of money as a foolish item. But somehow he makes that kind of money. "; mes " That's why those who are controlled by fools consider the other a fool, too. "; @@ -1304,7 +1304,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 61) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack is asking for money. Don't be stingy about paying those who bring entertainment and fun. "; next; @@ -1313,7 +1313,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 62) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Do you know what a joker's specialty is? It is tricking others and making money. Be wary of the joker. "; next; @@ -1322,7 +1322,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 63) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " The Joker says if you let him borrow money, he will repay you with more. You're going to refuse, right? But the Joker's temptation does not end after one try. "; mes " He will linger around you as a neighbor, or a rare item and ask for money. "; @@ -1332,7 +1332,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 64) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Even if a joker asks for change, never give any to him. He will ask for change, then end up ask for a big sum of money. "; mes " Jokers are like that. They have the ability to turn a small mistake into a big calamity. "; @@ -1342,7 +1342,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 65) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " There is only one reason a Joker requests money.. to take yours. "; mes " His goal is not to become rich. A real foul playful one. "; @@ -1352,7 +1352,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 66) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Hodes do not know about money. They just gobble everything up. But that might be the shortcut to gaining great wealth. "; next; @@ -1361,7 +1361,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 67) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Hodes do not know anything about money. But they do not forgive those who have an eye on their things. "; mes " Not being greedy and taking care of your share is the wisest way to manage your wealth. "; @@ -1371,7 +1371,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 68) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " The Hode knows nothing about money. But a very rare item drops from a Hode's body. "; mes " It has a treasure in it without knowing. "; @@ -1381,7 +1381,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 69) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Hodes are strong even though they live in the desert. Just because the environment is poor, doesn't mean that you can't gather wealth. "; next; @@ -1390,7 +1390,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 70) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " Do you know the saying that says those who work like bulls become rich? Working hard is the best way. "; next; @@ -1399,7 +1399,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 71) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " Bulls only know how to work, but the bull itself has a lot to offer. Meat, leather, horn.. "; next; @@ -1408,7 +1408,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 72) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " Bulls continue to work even on gloomy days. Then they can gather a lot of things. "; next; @@ -1417,7 +1417,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_money == 73) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " Bulls do not like working for money. They are disgruntled when others consider labor as money. "; mes " Shouldn't you reconsider working against your will just for money? "; @@ -1429,7 +1429,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ mes " Most people are curious about money. "; mes " It is a very humanly and common curiosity. Cards are very stingy about fortunes regarding wealth. "; next; - cutin "°¡À̾ƽºÄ«µå",255; + cutin "���̾ƽ�ī��",255; mes "[Lhimetorra]"; mes " Therefore, getting a fortune like this is considered being lucky. Use this fortune to prosper. "; break; @@ -1440,7 +1440,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; set .@card_1_future,rand(1,67); if (.@card_1_future == 1) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " Youth is not eternal. At one point when you wake up, you realize you are already a middle-aged worker. "; mes " Even reminiscing about the past over a cup of coffee can't bring back time. "; @@ -1450,7 +1450,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 2) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " This fortune is foreshadowing that you will become a strong and healthy worker in the future. "; mes " Not a normal worker, but one that has great strength and might.. "; @@ -1460,7 +1460,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 3) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " Smoking in a mine is an imprudent, life-threatening thing to do. You are wasting your precious life with that kind of behavior. "; next; @@ -1469,7 +1469,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 4) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " You may be shoveling in the future. In a dark dark place, shoveling that requires great strength. You must be careful young one. "; next; @@ -1478,7 +1478,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 5) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The moth is used when it is a caterpillar and ignored after it becomes a moth, by humans. "; mes " Which is better? "; @@ -1488,7 +1488,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 6) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The moth flies around without worrying about the future. It is telling you to fly freely rather than getting anxious about the future.. "; next; @@ -1497,7 +1497,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 7) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " Dustiness' teeth are very strong. This means... "; next; @@ -1506,7 +1506,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 8) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The moth says that this is not a time to think about wealth and prosperity. It says that someone important has appeared near you. "; next; @@ -1515,7 +1515,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 9) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " Dustiness symbolizes a hazy future. It is similar to your mind right now. It says it is obvious. "; mes " It says that there is no set path in the future. Isn't a relief in a way? "; @@ -1525,7 +1525,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 10) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Sometime in your future, a future like Dracula awaits you. "; next; @@ -1534,7 +1534,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 11) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " If the condition is just right, vampires can live forever. But, when that perfect condition is disrupted, they meet a tragic end. "; next; @@ -1543,7 +1543,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 12) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " The Dracula says to be true to the present. Indeed, thinking and being true to the present is much more important than trying to figure out your future. "; next; @@ -1552,7 +1552,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 13) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " Pirates do not have a future. That doesn't mean you do not have one. But.. you simply need to make more prudent decisions. "; next; @@ -1561,7 +1561,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 14) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " In this world, being a pirate out in the rough seas is very dangerous. But, they do not regret their decisions. "; next; @@ -1570,7 +1570,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 15) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " Pirates are remembered as pirates even after they pass away. A person's name is beyond the matter of life and death. "; next; @@ -1579,7 +1579,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 16) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " The Marina does not think of its future.. But I can tell you one thing. Survival. The Marina only thinks about survival and life. "; next; @@ -1588,7 +1588,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 17) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " The Marina doesn't think of its future.. but I can tell you one thing. Freedom. The Marina swims freely. "; next; @@ -1597,7 +1597,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 18) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " Leave your future to the Marina. The Marina treasures its precious ocean. The sea will be of great significance in your future, too. "; next; @@ -1606,7 +1606,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 19) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " A Marionette is a Marionette forever. Its past and future never changes. Its present is its future. Don't you think it is rather sad? "; next; @@ -1615,7 +1615,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 20) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " A Marionette is restrained but it has hope that it will be freed one day. "; next; @@ -1624,7 +1624,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 21) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The eyes of a Marionette symbolize 'challenge.' Challenge will mean a lot in your future. "; next; @@ -1633,7 +1633,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 22) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette believes the present is more important than the future. Basically, asking about the future is pointless. "; next; @@ -1642,7 +1642,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 23) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa symbolizes the absolute one who accepts everyone's challenge. Your future will be in a position that is challenged by many. "; next; @@ -1651,7 +1651,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 24) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa symbolizes the absolute one who accepts everyone's challenge. Your future must be filled with challenges! "; next; @@ -1660,7 +1660,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 25) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa says that there will be great chaos in the future. Chaos... I'm not sure what type of chaos it means, but it is definitely something that has never happened before. "; next; @@ -1669,7 +1669,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 26) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The hair of the Medusa are sticking up. It is nervous about the big change that is going to happen. A change that even makes the scary Medusa worried. "; next; @@ -1678,7 +1678,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 27) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The Baphomet doesn't care about a human's future. They simply observe quietly. Hmm... It seems like it has nothing to say about your future as well... "; next; @@ -1687,7 +1687,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 28) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The scythe the Baphomet is holding signifies the strong will to conquer the future. "; mes " What you need is not someone else's help or wisdom, but strong willpower. "; @@ -1697,7 +1697,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 29) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The Baphomet says that humans have no future. It says that their greed and selfishness shows no hope. "; mes " The future will only open to those that go beyond human's greed. "; @@ -1707,7 +1707,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 30) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The Baphomet is facing the future. No matter how much effort you put in, without an eye that looks towards the future, it is pointless. "; mes " The Baphomet is telling you to look towards the future. "; @@ -1717,7 +1717,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 31) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " A sand's future is simply sand. Not a rock, nor mud. Some things just don't change young one. "; next; @@ -1726,7 +1726,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 32) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " A sand dune changes its shape even after a day. The Sandman card is speaking of a future with many changes. "; next; @@ -1735,7 +1735,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 33) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " You will have a son in the future. Hmm? What'd you say? No plans for a baby? "; next; @@ -1744,7 +1744,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 34) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " There are rare and precious treasures in the sand. The Sandman says that in the vast sand of the world, a treasure, will be discovered. That treasure is you young one."; next; @@ -1753,7 +1753,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 35) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Do you know what a Sohee thinks the most pitiful thing is? The future. It is because she was not able to live her future. "; mes " That is why you cannot bring up the subject of future in front of Sohee. I'm very sorry I cannot help. "; @@ -1763,7 +1763,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 36) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " Even in darkness you will shine for your goal. "; mes " The Skeleton is encouraging you to not lose your light even in a life in dark and damp places. "; @@ -1773,7 +1773,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 37) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " The story I heard from the skeleton goes like this. I am the king of the future. What in the world is that supposed to mean? "; next; @@ -1782,7 +1782,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 38) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " If you want to do something great in the future, you must express your thankfulness to the Skeleton. "; mes " Then the Skeleton will help you. How do you express your thankfulness? "; @@ -1793,7 +1793,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 39) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " The Skeleton has the ability to dig where it feels the future, rather than looking into it. "; mes " It is digging in the east right now. How about it, won't you try going there? "; @@ -1803,7 +1803,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 40) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " A knight's future leads to death. An honorable death on the battlefield. "; mes " One cannot live as a knight without being proud of that type of future. "; @@ -1814,7 +1814,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 41) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " A knight commenting about a person's future is very rare. "; mes " It says nothing for you in particular. Nothing ominous. "; @@ -1824,7 +1824,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 42) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " A knight commenting about a person's future is very rare. "; mes " It says it will say one thing for you. Dark clouds can be seen beyond the clear skies. "; @@ -1834,7 +1834,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 43) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " It is necessary to reflect upon the past and present in order to look into the future. This card says to look carefully into your past. "; next; @@ -1843,7 +1843,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 44) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " What does the god of death want to say about the future? It is definitely an ominous sign. "; next; @@ -1852,7 +1852,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 45) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis likes comedy despite people's expectations. It looks forward to comedy. Comedy must be important in the future. "; next; @@ -1861,7 +1861,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 46) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis is the god of death, but it expresses more interest in the future than death. "; next; @@ -1870,7 +1870,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 47) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis says it has no interest in you. It is a good sign. "; next; @@ -1879,7 +1879,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 48) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord says that dairy farming will develop in the future. Why don't you invest in it as well? "; next; @@ -1888,7 +1888,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 49) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord says you need great strength in the future. Strength that is three, four times greater than now. "; next; @@ -1897,7 +1897,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 50) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord says that love for your companions will become great strength in the future. "; mes " Your strength is not enough. "; @@ -1907,7 +1907,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 51) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord is expressing opposition in being too curious about the future. "; mes " Pay a little more attention to the present. "; @@ -1917,7 +1917,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 52) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack says something interesting will happen in the future. According to him, the future will be more fun than the present. "; next; @@ -1926,7 +1926,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 53) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack says, in order to prepare for the future, a delightful preparation is necessary. "; mes " Delightful preparation? I don't understand.. I suppose I am too old. Maybe young ones get it.. "; @@ -1936,7 +1936,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 54) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack is jealous because a splendid person is headed your way in the future. "; mes " I wonder what type of person it is to make that Jack jealous! "; @@ -1946,7 +1946,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 56) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack says you may be frustrated in the future. "; mes " He says to overcome the frustration, it is necessary to think of happy thoughts. "; @@ -1956,7 +1956,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 57) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " The Joker is trying to trick you. This card has all different types of ominous fortunes. "; mes " He wants to enjoy watching you tremble with anxiety. "; @@ -1966,7 +1966,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 58) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Jokers don't just appear and go away. They come back in the future. "; mes " They will seduce you numerous times. "; @@ -1977,7 +1977,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 59) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Do you see the thing that looks like a leaf flying around the Joker? That is the spade mark. "; mes " Spades means death. Jokers leave those kinds of marks on purpose. "; @@ -1987,7 +1987,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 60) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Joker offers a nice insurance and says to prepare for the future, but most of it is a waste of time. "; next; @@ -1996,7 +1996,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 61) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Hodes do not know about tomorrow. But though they are quiet, they endanger other living things. "; mes " Effort into oneself puts great power into the mere existence of one. "; @@ -2006,7 +2006,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 62) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Hodes do not know about tomorrow, but they still know about death. "; mes " Even though you may be honest and simple, in a time of a crisis, you must be alert. "; @@ -2016,7 +2016,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 62) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Hodes do not ponder about life, but their will to live is very strong."; mes " You can gain a lot simply through the will to hold on to life. "; @@ -2026,7 +2026,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 63) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " Hodes are afraid of crises. You should try not to be afraid of crises either. "; next; @@ -2035,7 +2035,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 64) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " Before, bulls used to be thought of as foolishly honest workers, but these days bulls are great strong fighters. "; next; @@ -2044,7 +2044,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 65) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " Do bulls leave leather when they pass away? Or was it the tiger? "; mes " Anyways, he is jealous of the humans that leave their name in history. "; @@ -2055,7 +2055,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 66) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " It might seem funny that a bull will look into the future, but the bull is looking into your future right now. "; mes " He says your future is mixed with storms and fall weather. "; @@ -2065,7 +2065,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_future == 67) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " The bull thinks of the happiness awaiting in the future, but it doesn't like reduced efficiency because of that happiness. "; next; @@ -2078,7 +2078,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ mes " Speaking of the future is as dangerous act. "; mes " Humans may face disaster if speaking of the future carelessly. That's why we ask cards about the future. "; next; - cutin "°¡À̾ƽºÄ«µå",255; + cutin "���̾ƽ�ī��",255; mes "[Lhimetorra]"; mes " Your fortune is a rather good one. There are some in this world who get more horrible fortunes. "; mes " Use this fortune as a support in your life. Ok? "; @@ -2090,7 +2090,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; set .@card_1_warning,rand(1,70); if (.@card_1_warning == 1) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " Do you see the forbidden mark on its shoulder? It is telling you to not do something. "; next; @@ -2099,7 +2099,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 2) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " Someone is after you. The person is very strong like the picture. They might be holding grudges against you. "; next; @@ -2108,19 +2108,19 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 3) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " It is saying to be careful not to burn your mustache with a cigarette. When you do something, something is always at risk.. It is probably warning about that. "; next; } if (.@card_1_warning == 4) { - cutin "°¡À̾ƽºÄ«µå",4; + cutin "���̾ƽ�ī��",4; mes "[Lhimetorra]"; mes " 'Be careful of shoveling'.. You might get hit by a shovel. Should you be careful around a construction site? "; next; } if (.@card_1_warning == 5) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The sound of a moth's wings fluttering means chaos. A chaotic event may occur around you. "; next; @@ -2129,7 +2129,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 6) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " Be aware of the wings. Wings symbolize flight, adventure, and fickleness of a player. "; next; @@ -2138,43 +2138,43 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 7) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The teeth of Dustiness are very strong. This means.. Someone may attempt to bite you with their teeth?! "; next; } if (.@card_1_warning == 8) { - cutin "´õ½ºÆ¼³×½ºÄ«µå",4; + cutin "����Ƽ�׽�ī��",4; mes "[Lhimetorra]"; mes " The moth's warning: 'Dangerous!'. A very simple, yet obvious warning. "; next; } if (.@card_1_warning == 9) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Dracula says, 'Be careful in the streets at night.' "; next; } if (.@card_1_warning == 10) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Dracula says, 'Don't be too picky.' "; next; } if (.@card_1_warning == 11) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Dracula says, 'Brush your teeth 3 times a day.' Make sure you brush your teeth! "; next; } if (.@card_1_warning == 12) { - cutin "µå¶óÅ¥¶óÄ«µå",4; + cutin "���ť��ī��",4; mes "[Lhimetorra]"; mes " Dracula says, 'Study the important points first.' Cramming will not work! "; next; } if (.@card_1_warning == 13) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " If you see the flag of a pirate, either run or do as they say. Pirates do not give more than one warning. "; next; @@ -2183,7 +2183,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 14) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " Pirates give warnings about many things. But right now, this card is speaking of betrayal. "; next; @@ -2192,25 +2192,25 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 15) { - cutin "µå·¹ÀÌÅ©Ä«µå",4; + cutin "�巹��ũī��",4; mes "[Lhimetorra]"; mes " The pirate is warning you of your beauty. Don't show off your beauty too much. Pirates are very jealous of appearance, as well. "; next; } if (.@card_1_warning == 16) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " The Marina is warning of a hot stinging poison. Be cautious of poison. "; next; } if (.@card_1_warning == 17) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " The Marina is warning about a lazy lifestyle. It says such a lifestyle will lead to something like itself. "; next; } if (.@card_1_warning == 18) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " The Marina doesn't really think about anything else.. But it will say one thing. Food. The Marina loves food. "; next; @@ -2219,20 +2219,20 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 19) { - cutin "¸¶¸®³ªÄ«µå",4; + cutin "������ī��",4; mes "[Lhimetorra]"; mes " The Marina is warning about a big belly. It's not happy because it resembles itself.. How about losing some weight? "; next; } if (.@card_1_warning == 20) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette says that you must not rely on violence and to use a different method. "; mes " I'm not quite sure, but it may become an important word of advice to you..? "; next; } if (.@card_1_warning == 21) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette is warning about ominous activities. If you did something recently, you should settle it soon. "; next; @@ -2241,7 +2241,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 22) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette's eyes are warning about your falsehood. Lies, deceit, fake calculations and actions.. The Marionette is warning about all of them. "; next; @@ -2250,7 +2250,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 23) { - cutin "¸¶¸®¿À³×Ʈīµå",4; + cutin "��������Ʈī��",4; mes "[Lhimetorra]"; mes " The Marionette is emphasizing a proper diet. Don't rely too much on meat. "; next; @@ -2259,7 +2259,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 24) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa punishes those who challenge it without warning. Unexpected punishment. "; next; @@ -2268,7 +2268,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 25) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa is warning you to be nice to others, or else it will turn you into stone."; next; @@ -2277,7 +2277,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 26) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa is warning you to return anything you borrow on time. "; mes " Saying it will not forgive those who use other's things like a black hole.. borrowing and never returning "; @@ -2287,7 +2287,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 27) { - cutin "¸ÞµÎ»çÄ«µå",4; + cutin "�޵λ�ī��",4; mes "[Lhimetorra]"; mes " The Medusa is warning about a person near you. Of their existence.. and the relationship, "; next; @@ -2296,7 +2296,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 28) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The Baphomet says to beware when intervening with others' issues. "; next; @@ -2305,7 +2305,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 29) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The Baphomet is warning about arrogance. Even a strong and wise warrior must show respect to a Baphomet, "; mes " Arrogance takes away that respect. The Baphomet hates that type of arrogance. "; @@ -2315,7 +2315,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 30) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The Baphomet is warning about the laziness that stops one from sharpening the scythe. "; mes " That laziness will cause you to lose your life in an instant. "; @@ -2325,13 +2325,13 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 31) { - cutin "¹ÙÆ÷¸ÞƮīµå",4; + cutin "������Ʈī��",4; mes "[Lhimetorra]"; mes " The Baphomet says it has nothing to say. I wonder why? Isn't it a very good sign?!! "; next; } if (.@card_1_warning == 32) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " Sand is an instant cure of athlete's foot. He says to beware of athlete's foot and that he hates those rubbing their infected feet into his body. "; next; @@ -2340,7 +2340,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 33) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " A chicken puts sand in its mouth to aid its insufficient digestion system. "; mes " The Sandman says to watch out before you become like a chicken. "; @@ -2350,7 +2350,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 34) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " The Sandman says over-sleepers will be punished by society! "; next; @@ -2359,7 +2359,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 35) { - cutin "»÷µå¸ÇÄ«µå",4; + cutin "�����ī��",4; mes "[Lhimetorra]"; mes " One warning from the Sandman, respect your parents. "; next; @@ -2368,7 +2368,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 36) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Sohee dislikes stinky feet. Don't forget to wash your feet. "; next; @@ -2377,7 +2377,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 37) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Sohee stands on the tip of her toes. It is because her toes are very strong. "; mes " No matter what a person does, physical strength is the most important. Exercise and get stronger. "; @@ -2387,7 +2387,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 38) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Look at Sohee's hairstyle. Isn't it splendid. "; mes " Sohee likes to take care of her appearance. If you don't, Sohee will get mad at you. "; @@ -2398,7 +2398,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 39) { - cutin "¼ÒÈñÄ«µå",4; + cutin "����ī��",4; mes "[Lhimetorra]"; mes " Once, Sohee didn't get her change back when she asked a baby ghost to run an errand. "; mes " No can do! Always return the change. "; @@ -2408,7 +2408,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 40) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " Even though it is a skeleton with only bones, it has all the safety gear needed. "; next; @@ -2417,7 +2417,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 41) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " The skeleton card has a gray tone. If you read the grey, you can see the darkness. "; mes " It seems like darkness is on its way. Be careful, this darkness isn't ordinary. "; @@ -2427,7 +2427,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 42) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " The skeleton is warning you about an irregular eating pattern. "; mes " It says it became like that because of a bad eating habit. "; @@ -2437,7 +2437,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 43) { - cutin "½ºÄÌ¿öÄ¿Ä«µå",4; + cutin "���̿�Ŀī��",4; mes "[Lhimetorra]"; mes " The skeleton's pickaxe is very strong. Even though its body seems weak, with the right tools, it can do great things. "; next; @@ -2446,14 +2446,14 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 44) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " The knight is warning you of reckless driving. Do you ride a Pecopeco by any chance? "; mes " Anyhow, you should avoid reckless driving.. If a knight is saying that, it is a big problem. "; next; } if (.@card_1_warning == 45) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " The knight is warning you of cruelty. It could be yours or that of someone around you. "; next; @@ -2462,7 +2462,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 46) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " The misfortune shown in the knight card is hastiness. That is also what takes away a knight's life, too. "; next; @@ -2472,7 +2472,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 47) { - cutin "½ºÄ̳ªÀÌƮīµå",4; + cutin "���̳���Ʈī��",4; mes "[Lhimetorra]"; mes " This knight is warning you of loneliness. He doesn't have a person to help his horse, "; mes " nor a lover awaiting him, so loneliness hits him in the heart. "; @@ -2482,7 +2482,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 48) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The warning of the god of death is death itself. "; next; @@ -2491,7 +2491,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 49) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis says to be careful of darkness. In darkness, death lingers in the dark. "; next; @@ -2500,7 +2500,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 50) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis doesn't like foul language. You don't have a foul mouth, do you? "; mes " Watch your mouth. The Anubis is after those that say foul language."; @@ -2510,7 +2510,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 51) { - cutin "¾Æ´©ºñ½ºÄ«µå",4; + cutin "�ƴ���ī��",4; mes "[Lhimetorra]"; mes " The Anubis is warning you of hatred. Hatred only brings upon death. "; mes " The Anubis must not like being busy these days. "; @@ -2520,7 +2520,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 52) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord is warning you of self-righteousness. It is the most dangerous noxious bug that will feed on you. "; next; @@ -2529,7 +2529,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 53) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord is warning you about freedom. Isn't freedom a good thing? "; mes " Not always! Too much freedom can lead to self-indulgence! "; @@ -2539,7 +2539,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 54) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord warning you of the opposite sex. Yes. They are poisonous. Keep your distance. "; next; @@ -2548,7 +2548,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 55) { - cutin "¿ÀÅ©·ÎµåÄ«µå",4; + cutin "��ũ�ε�ī��",4; mes "[Lhimetorra]"; mes " The Orc Lord is warning about destruction. He knows destruction very well because he is a master of destruction. "; next; @@ -2557,7 +2557,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 56) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack is warning you of lame jokes. When he finds one saying them, he tends to hit them with his stick. "; next; @@ -2566,7 +2566,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 57) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " Jack is warning you about others' anger and that anger takes away happiness and kills a joke. "; next; @@ -2575,7 +2575,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 58) { - cutin "ÀèÄ«µå",4; + cutin "��ī��",4; mes "[Lhimetorra]"; mes " It seems like Jack is worried about excessive jokes. "; mes " Jokes are fun, but too much will turn you into a ghost like him. "; @@ -2585,7 +2585,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 59) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Jokers enjoy giving opposite warnings. He says to enjoy sleeping in."; next; @@ -2594,7 +2594,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 60) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Jokers enjoy giving opposite warnings. He says to enjoy a midnight snack. "; next; @@ -2603,7 +2603,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 61) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Jokers enjoy giving opposite warnings. "; mes " He says if someone has something you want, make it yours. "; @@ -2613,7 +2613,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 62) { - cutin "Á¶Ä¿Ä«µå",4; + cutin "��Ŀī��",4; mes "[Lhimetorra]"; mes " Joker enjoys giving opposite warnings. "; mes " What he is telling you is to not fear death. "; @@ -2623,7 +2623,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 63) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " The Hode can forgive others, but not those who hurt it. "; mes " You should also only not forgive those who hurt you. "; @@ -2633,7 +2633,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 64) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " The Hode is warning you of voracious eating that made it sluggish. "; mes " Eating is good, but the wild is a dangerous place. Leave your stomach partially empty. "; @@ -2643,7 +2643,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 65) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " The Hode is warning you of voracious eating that made it sluggish. "; mes " Eating is good, but the wild is a dangerous place. Leave your stomach partially empty."; @@ -2653,7 +2653,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 66) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " If you are to the point of being warned by a Hode.. you must be one considerable person. "; next; @@ -2662,7 +2662,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 67) { - cutin "È£µåÄ«µå",4; + cutin "ȣ��ī��",4; mes "[Lhimetorra]"; mes " The Bull warns of corruption. A lazy hedonist that is not diligent. "; mes " He believes that is like a cancer cell that can't be removed. "; @@ -2672,7 +2672,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 68) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " The bull is warning about ignorance about a crisis. "; mes " Not knowing that a crisis is a crisis is the most dangerous of all. "; @@ -2682,7 +2682,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 69) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " The bull is warning of something that will make life sad. "; mes " Sadness is a natural feeling, but don't let that put you down. "; @@ -2693,7 +2693,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ next; } if (.@card_1_warning == 70) { - cutin "Ȳ¼ÒÄ«µå",4; + cutin "Ȳ��ī��",4; mes "[Lhimetorra]"; mes " The bull is warning about meat from watered cows. "; mes " Saying that, that type of behavior will surely bring upon monsters' curses. "; @@ -2705,7 +2705,7 @@ payon_in03,117,128,5 script Fortune Teller 704,{ mes "[Lhimetorra]"; mes " A warning is always a useful fortune. You can never lose anything. "; next; - cutin "°¡À̾ƽºÄ«µå",255; + cutin "���̾ƽ�ī��",255; mes "[Lhimetorra]"; mes " I hope you will be able to avoid misfortune with this warning. Then... "; close; @@ -2772,142 +2772,142 @@ payon_in03,75,129,5 script Poring Fortune Teller 704,{ mes "[Chocarle]"; set .@card_2_love,rand(1,33); if (.@card_2_love == 1) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Oh! Your lover is about to leave your side! Hold on tight! "; } if (.@card_2_love == 2) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Agh! You're about to give your soul to your loved one! Take it down a notch! "; } if (.@card_2_love == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " No! Your heart is about to leave your love! Catch it! "; } if (.@card_2_love == 4) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Love is like juice in the forest! It is refreshing! Take care of your loved one! "; } if (.@card_2_love == 5) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Uh! You didn't share your juice with your loved one! What a shame! Take care of your loved one! "; } if (.@card_2_love == 6) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Why not share with your loved one? Don't be too greedy and try to keep it all! "; } if (.@card_2_love == 7) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " Your love is going to have a crisis! Protect your love! "; } if (.@card_2_love == 8) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " Hee! Go after your love like a mole! Puhahaha! "; } if (.@card_2_love == 9) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " Oh no! Your love is in danger! Run away from the menace! "; } if (.@card_2_love == 10) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " Oh no! You lost your loved one. And, nobody similar around you. Cheer up! "; } if (.@card_2_love == 11) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " Ah! A sexy rival has appeared! Don't get sidetracked! "; } if (.@card_2_love == 12) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " You are desperately searching for love! If you go beyond this desert, you can find love! "; } if (.@card_2_love == 13) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Prepare an event of love! They will be flying with happiness! "; } if (.@card_2_love == 14) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Love is sweet! Be careful not to get cavities! "; } if (.@card_2_love == 15) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Prepare a present for your love! They might get a heart attack because they will be overwhelmed with happiness! "; } if (.@card_2_love == 16) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " Don't be shy in front of your loved one! Love transcends everything! "; } if (.@card_2_love == 17) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " Embrace every aspect of your loved one! That is true love! "; } if (.@card_2_love == 18) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " Love will blossom with a totally different person! Wow, so cool! "; } if (.@card_2_love == 19) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " No matter what other people say, run towards your loved one! One-track love! "; } if (.@card_2_love == 20) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " Go to your loved one with a present! They will be very happy! "; } if (.@card_2_love == 21) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " Love requires health and strength! Exercise to become stronger! Power and love! "; } if (.@card_2_love == 22) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Even if you wish to approach your loved one, your body is discomforted! Take a break and rest! "; } if (.@card_2_love == 23) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Love is bending yourself for someone! Service! Sacrifice! "; } if (.@card_2_love == 24) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " You will be meeting your lover's parents! Prepare well! "; } if (.@card_2_love == 25) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Your relationship must be very happy as it seems you two are flying amongst the clouds! Very jealous! "; } if (.@card_2_love == 26) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Make an opportunity to be alone with each other! It will bring much happiness! "; } if (.@card_2_love == 27) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Uh oh! Someone is peeping at your love! Go scold them! "; } if (.@card_2_love == 28) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " Love blossoms from the foundation! Be true to the basics! "; } if (.@card_2_love == 29) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " When your loved one is hurt, be by them! They will be very happy! "; } if (.@card_2_love == 30) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " One day, when you wake up, your loved one will leave a present! Be happy! "; } if (.@card_2_love == 31) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " Give lots~~ of presents to your loved one! Then you will experience many~ many good things! "; } if (.@card_2_love == 32) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " Lean against a wall and await your love! *Boom* Love will appear! "; } if (.@card_2_love == 33) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " You must be lonely! It's ok, cheer up! "; } next; mes "[Chocarle]"; mes " A fortune of love was told! What do you think! Do you like it? "; mes " Even if you did not get the fortune you wished for, don't be do upset and simply go for your love! "; - cutin "°¡À̾ƽºÄ«µå",255; + cutin "���̾ƽ�ī��",255; next; mes "[Chocarle]"; mes " Then, see you next time~~~~~ "; @@ -2920,135 +2920,135 @@ payon_in03,75,129,5 script Poring Fortune Teller 704,{ mes "[Chocarle]"; set .@card_2_study,rand(1,33); if (.@card_2_study == 1) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Agh! Don't die from studying! Take breaks while you're at it! You need some rest! "; } if (.@card_2_study == 2) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Oh, no! You're missing the main points! Figure out the essentials! "; } if (.@card_2_study == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Mmph! You're dying not to study! At times like this, a break is the best! "; } if (.@card_2_study == 4) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Studying is just like hunting a monster in the desert. Resting for a little is the best. Understand? "; } if (.@card_2_study == 5) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " A nice cup of cold juice under the hot sun! Studying should be done like that, too! "; } if (.@card_2_study == 6) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Even though it is the desert, you seem to have a relaxed smile! Maybe you need to relax like this when studying as well! "; } if (.@card_2_study == 7) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " Your grades are in danger! You must study harder! "; } if (.@card_2_study == 8) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " There may be a big crisis! Don't get too stressed just because you can't study! "; } if (.@card_2_study == 9) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " It is saying studying in the dark night can be dangerous! Careful when studying at night! "; } if (.@card_2_study == 10) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " Studying came to a strange place! It needs to find its original path! You can do it! "; } if (.@card_2_study == 11) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " You're gazing at a smart friend with the eyes of a Poring! Heehee! Doing good! "; } if (.@card_2_study == 12) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " Eh? You're too smart! You're at a much higher level than your friends! Take a break! "; } if (.@card_2_study == 13) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " You will be rewarded for your accomplishments! It was worth the effort! "; } if (.@card_2_study == 14) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Forget about studying for a moment and enjoy the party! It should be refreshing~! "; } if (.@card_2_study == 15) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Study something that will make people happy! Future set! "; } if (.@card_2_study == 16) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " If you're not sure of something, ask a friend! It's not something to be ashamed about! You can do it! "; } if (.@card_2_study == 17) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " Don't think that your head is empty! Because, you are smart! You can do it! "; } if (.@card_2_study == 18) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " There's a phenomenon you don't understand! Do a little more research! You'll be able to figure it out soon! "; } if (.@card_2_study == 19) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " Don't get lazy about studying wherever you go! Seek the road of truth and go down it to find the answer! "; } if (.@card_2_study == 20) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " You need strength to study! Get stronger! Running is a start! "; } if (.@card_2_study == 21) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " You will become an admirable person because of all the effort put into studying! You must feel very worth while! "; } if (.@card_2_study == 22) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Try studying the history of our country! From when the tiger started smoking! "; } if (.@card_2_study == 23) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " You must be having a hard time studying because of all the pressure! Go out and get some fresh air! "; } if (.@card_2_study == 24) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Your head seems to be heavy because of studying! You need a diversion! Put studying aside for a moment! "; } if (.@card_2_study == 25) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Try studying aerospace or meteorology! Don't you think it would be fun? "; } if (.@card_2_study == 26) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " How about studying theology? You even get to study about angels! "; } if (.@card_2_study == 27) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Study little by little and make yourself feel lighter! You can't study if you're overloaded with words! "; } if (.@card_2_study == 28) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " When studying, you should have a snack! It may seem trivial, but it is rather important! "; } if (.@card_2_study == 29) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " Even when you are sick, don't forget about studying! Where there is effort, there is bound to be good results! "; } if (.@card_2_study == 30) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " Newton discovered gravity through a falling apple! Be wary of even the little things in your surroundings! "; } if (.@card_2_study == 31) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " Green is good for studying! Color your walls green or get a green drink! The lucky color! Green! "; } if (.@card_2_study == 32) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " There is a jewel in your mind! You need to bring all the wisdom to life! Don't study bad things! "; } if (.@card_2_study == 33) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " You will receive good results from studying! You can focus on your current studies! "; } next; @@ -3068,135 +3068,135 @@ payon_in03,75,129,5 script Poring Fortune Teller 704,{ mes "[Chocarle]"; set .@card_2_buddy,rand(1,33); if (.@card_2_buddy == 1) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Ah! Your friend has gone crazy! They need the heal of friendship! "; } if (.@card_2_buddy == 2) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Mmm! You both have gone crazy. You must overcome it through conversations! "; } if (.@card_2_buddy == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Agh! You are suffering because of your friend! Try opening your heart and be more lenient! "; } if (.@card_2_buddy == 4) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " You even split a pea between friends! Don't be so cruel. Reflect upon yourself and apologize! "; } if (.@card_2_buddy == 5) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Oh no! Your friend is ignoring you! Offer a bottle of juice to your friend! Your friendship may come back? "; } if (.@card_2_buddy == 6) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Eh!? What kind of friendship is this?! Hurry up and make up! "; } if (.@card_2_buddy == 7) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes "Oh no?! This person is not your friend, but an enemy! You must be careful! "; } if (.@card_2_buddy == 8) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " Your friend is in danger! You must help your friend! "; } if (.@card_2_buddy == 9) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " Your friendship is on the verge of falling apart! Cast a shield around your friendship! "; } if (.@card_2_buddy == 10) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " One person is left out amongst your friends! Be more friendly! "; } if (.@card_2_buddy == 11) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " Your friend hit you! Don't cry even if it may hurt! Hurry and make up! "; } if (.@card_2_buddy == 12) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " You must be alone! It must be hard to make friends! Try putting on a brighter face! "; } if (.@card_2_buddy == 13) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Give your friends a present! Your friendship will become deeper! "; } if (.@card_2_buddy == 14) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Prepare a hat to cover your friend's large head! They will be moved by your care! "; } if (.@card_2_buddy == 15) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " A friend is waiting for you! Be nice to your friend! "; } if (.@card_2_buddy == 16) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " Being close friends despite differences is true friendship! Shelter each other's differences! "; } if (.@card_2_buddy == 17) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " Your misunderstandings will be removed if you take the time to talk! Go have a conversation with your friend! "; } if (.@card_2_buddy == 18) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " When a friend is sick, visit them! They will be happy! For sure! "; } if (.@card_2_buddy == 19) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " Go out and have some fun with your friend! Your friendship will surely get stronger! "; } if (.@card_2_buddy == 20) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " Give your friend a present! They'll go bragging around town?! "; } if (.@card_2_buddy == 21) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " Share your bone with your friend! Sacrifices in friendship are beautiful! "; } if (.@card_2_buddy == 22) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Do anything for your friend! With all your heart and soul! Your friend will be delighted! "; } if (.@card_2_buddy == 23) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " No smoking, even with a friend! Stop smoking for your health! "; } if (.@card_2_buddy == 24) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " You and your friend will encounter hardships! Combine your powers and overcome it! "; } if (.@card_2_buddy == 25) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Go on a trip with your friend! Friendship can get stronger in new environments! "; } if (.@card_2_buddy == 26) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Give your friend a ride in a plane! They'll probably fly with joy!? "; } if (.@card_2_buddy == 27) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Don't forget your friend in heaven! Friendship is eternal! "; } if (.@card_2_buddy == 28) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " Help your friend's scar. Your friend would greatly appreciate it! "; } if (.@card_2_buddy == 29) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " You even split a slice of an apple among friends! Share more things with your friend! Something good will happen! "; } if (.@card_2_buddy == 30) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " When your friend is sleeping, think of them! Then there will be progress in your friendship! What do you think~ it means~?! "; } if (.@card_2_buddy == 31) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " Don't measure friendship with money! If you do, be careful for there will be a crack in your friendship! "; } if (.@card_2_buddy == 32) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " It seems as if your friend will give you many presents! Look forward to it! "; } if (.@card_2_buddy == 33) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " You must be lonely without a friend! A good friend will come along soon! "; } next; @@ -3216,135 +3216,135 @@ payon_in03,75,129,5 script Poring Fortune Teller 704,{ mes "[Chocarle]"; set .@card_2_future,rand(1,33); if (.@card_2_future == 1) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Oh no! You are not confident about the future! Trust yourself a little more! Hope! "; } if (.@card_2_future == 2) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Oh! Do you keep on thinking about your death in the future! First, forget about death and live your life! "; } if (.@card_2_future == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Cut! You are filled with uncertainty about the future! Let's get rid of this! Wee! It's gone! "; } if (.@card_2_future == 4) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Life may seem like a hot and dry desert, but in the future, delicious juice and rest awaits you! "; } if (.@card_2_future == 5) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Even in a hot and dry desert, isn't the future happier since you can encounter sweet juice? Put forth your strength! "; } if (.@card_2_future == 6) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Don't your troubles disappear watching a poring smile? Your future must be filled with good things! "; } if (.@card_2_future == 7) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " There is danger waiting ahead! You should avoid it for now! Take care of yourself! "; } if (.@card_2_future == 8) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " You must be fearing your future!? Don't worry too much! Think of happy thoughts! "; } if (.@card_2_future == 9) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " You may endanger someone in the future! Don't become a bad person~! "; } if (.@card_2_future == 10) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " You may have to stand alone in the future! Prepare yourself right now! "; } if (.@card_2_future == 11) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " Many hardships await you in the future! But you can overcome them! "; } if (.@card_2_future == 12) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " You might not even be able to buy summer clothes in the future! Don't waste your money! "; } if (.@card_2_future == 13) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Something exciting may happen! What can it be? Fun! Fun! "; } if (.@card_2_future == 14) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Something good might happen on this nice day! You can look forward to it! Yay! "; } if (.@card_2_future == 15) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " A splendid event will be held! Go get ready! Look forward to it! "; } if (.@card_2_future == 16) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " You will meet someone new! It will be very interesting! "; } if (.@card_2_future == 17) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " If you go little by little, something good will happen! Sit and take a look around you! "; } if (.@card_2_future == 18) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " You get a headache from thinking about the future? Empty your mind! You will feel refreshed! "; } if (.@card_2_future == 19) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " You will become a respectable person in the future! Good job! "; } if (.@card_2_future == 20) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " I can see you working hard in the future! What a lively future! "; } if (.@card_2_future == 21) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " You have a very busy future! Take care of your health! "; } if (.@card_2_future == 22) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Pick a job where you can work with other people! It will be very rewarding, right? "; } if (.@card_2_future == 23) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Try doing some volunteer work! It is worthwhile and you will feel good about it, too! "; } if (.@card_2_future == 24) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " You may become a commander! Mmm~! Kind of scary! "; } if (.@card_2_future == 25) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Choose a job that involves flying! You show potential! "; } if (.@card_2_future == 26) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Scrumptious ice cream that could even be eaten in heaven! Challenge yourself and get involved in a job making things of that sort! "; } if (.@card_2_future == 27) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " In the future, things that cannot be done right now will be accomplished! You can look forward to it! "; } if (.@card_2_future == 28) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " Little things in life will bring you happiness and joy in the future! Even more than now! "; } if (.@card_2_future == 29) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " Do what you have to do. Live life to the fullest, even though the world may end tomorrow! "; } if (.@card_2_future == 30) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " You will deal with fruits in the future! How about preparing yourself? "; } if (.@card_2_future == 31) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " Your future self will encounter a high wall! Although, I'm not sure what type of building it may be! "; } if (.@card_2_future == 32) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " Green symbolizes peace! Your future seems as if it will be very peaceful! It's a good thing, right? "; } if (.@card_2_future == 33) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " Romance lays ahead in your future! Relax yourself and prepare yourself! "; } next; @@ -3366,135 +3366,135 @@ payon_in03,75,129,5 script Poring Fortune Teller 704,{ mes "[Chocarle]"; set .@card_2_fortune,rand(1,33); if (.@card_2_fortune == 1) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Uh oh! You're about to be robbed! You must save a little first! "; } if (.@card_2_fortune == 2) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Kek! Your mind goes blank when you think about money! Think of other thoughts! Forget about money for a while! "; } if (.@card_2_fortune == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; mes " Bah! This isn't a time to think about money. Calm down and put your mind at ease! "; } if (.@card_2_fortune == 4) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " If you look carefully, it is not drinking juice, but underground water through a straw in the ground! Money is hidden where nobody expects! Good luck searching! "; } if (.@card_2_fortune == 5) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " As you can quench your thirst in the dry desert, you can gather money even in this difficult world! "; } if (.@card_2_fortune == 6) { - cutin "µå·ÓÇÁ½ºÄ«µå",4; + cutin "�������ī��",4; mes " Just like the juice inside the needles of a cactus, you can still gather wealth though you may be in anguish. You can do it! "; } if (.@card_2_fortune == 7) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes "Agh! Someone is after your possessions! Be careful! "; } if (.@card_2_fortune == 8) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " Uh oh! Someone is after your money! Take good care of it! "; } if (.@card_2_fortune == 9) { - cutin "¸ÇƼ½ºÄ«µå",4; + cutin "��Ƽ��ī��",4; mes " It says you might be tempted to do something bad to gather money! Don't forget about a kind heart! "; } if (.@card_2_fortune == 10) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " You have hidden money in your clothes! Hidden rich one! Be careful not to be caught! "; } if (.@card_2_fortune == 11) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " In the future, it seems like you will be kicking money around with your feet like those Porings! Congratulations! "; } if (.@card_2_fortune == 12) { - cutin "¹«³«Ä«µå",4; + cutin "����ī��",4; mes " You must be exhausted! Making money is not the easiest thing to do! But it will be that much more valuable! "; } if (.@card_2_fortune == 13) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Your tendency to spend money is growing! Be careful! Don't be left empty-handed! "; } if (.@card_2_fortune == 14) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Use your money to buy something fun! Then good luck will be headed your way! "; } if (.@card_2_fortune == 15) { - cutin "»êŸÆ÷¸µÄ«µå",4; + cutin "��Ÿ����ī��",4; mes " Use your money on something exciting! It looks as if good luck will be headed your way! "; } if (.@card_2_fortune == 16) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " It seems like you will have two lucky offerings! Don't miss these two opportunities! "; } if (.@card_2_fortune == 17) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " Doesn't it seem like there should be money in the small wallet? You will have some small income! Save money wisely! "; } if (.@card_2_fortune == 18) { - cutin "¼ÖÁ®½ºÄÌÅæÄ«µå",4; + cutin "����������ī��",4; mes " So~ empty. Upsetting, but don't worry too much about money! Something better ought to happen! "; } if (.@card_2_fortune == 19) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " Someone will return something you lost! What a relief! "; } if (.@card_2_fortune == 20) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " No need to worry about osteoporosis! Wasn't it a good thing to eat so much calcium? Oops! This isn't about money?! "; } if (.@card_2_fortune == 21) { - cutin "½ºÄÌ·¹ÅæÄ«µå",4; + cutin "���̷���ī��",4; mes " Seeing that you work so hard, seems like you will make lots of money! Congratz~! "; } if (.@card_2_fortune == 22) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Even if you save money, it disappears like smoke. Don't get too caught up with it! "; } if (.@card_2_fortune == 23) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " It's hard to make money, isn't it? But don't forget the good deeds in life! "; } if (.@card_2_fortune == 24) { - cutin "¿¡µå°¡Ä«µå",4; + cutin "���尡ī��",4; mes " Going around to collect money might lead you to a scary person! Be very careful! "; } if (.@card_2_fortune == 25) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Forget about money and fly~fly! You will feel very refreshed! "; } if (.@card_2_fortune == 26) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Money is like clouds! Instead of money, think about a happy life! "; } if (.@card_2_fortune == 27) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; mes " Even if it may seem pointless, if you persist, you will be able to make lots of money! You can do it! "; } if (.@card_2_fortune == 28) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " Don't neglect the trivial things on the floor! If you keep an open heart like that, you will be able to collect money! "; } if (.@card_2_fortune == 29) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " If you work with something that is related to mushrooms or apples, a good fortune awaits you! What kind of work would that be? "; } if (.@card_2_fortune == 30) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; mes " How can you think of money looking at such a peaceful card! That's not nice! Sniff..sniffles! Anyhow, it seems like you will gather much fortune! "; } if (.@card_2_fortune == 31) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " You have many fine stones! You will prosper if you are involved in this industry! "; } if (.@card_2_fortune == 32) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " It is an indication that you will prosper! No need to worry now! "; } if (.@card_2_fortune == 33) { - cutin "Æ÷Æ÷¸µÄ«µå",4; + cutin "������ī��",4; mes " You will collect many treasures! But the problem is protecting all of it! "; } next; diff --git a/npc/other/guildpvp.txt b/npc/other/guildpvp.txt index 1dcd51a1d..e9b59b803 100644 --- a/npc/other/guildpvp.txt +++ b/npc/other/guildpvp.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Guild Battle NPC //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guild Battle with PVP mechanics. diff --git a/npc/other/gympass.txt b/npc/other/gympass.txt index 7131b23e7..40bba2437 100644 --- a/npc/other/gympass.txt +++ b/npc/other/gympass.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Gym Pass Cash Item NPC //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Exchange Gym Passes to learn "Enlarge Weight Limit" diff --git a/npc/other/hugel_bingo.txt b/npc/other/hugel_bingo.txt index 78a4a7e79..16847aa54 100644 --- a/npc/other/hugel_bingo.txt +++ b/npc/other/hugel_bingo.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hugel Bingo script //===== By: ================================================== //= SinSloth //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= Hugel Bingo game //===== Additional Comments: ================================= diff --git a/npc/other/mail.txt b/npc/other/mail.txt index 778dba4f4..5909bd41f 100644 --- a/npc/other/mail.txt +++ b/npc/other/mail.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mail Boxes //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Pickup and write mail from/to players in game. diff --git a/npc/other/marriage.txt b/npc/other/marriage.txt index b1ab97450..8d6b3f349 100644 --- a/npc/other/marriage.txt +++ b/npc/other/marriage.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Player Marriage //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Official Marriage script. diff --git a/npc/other/mercenary_rent.txt b/npc/other/mercenary_rent.txt index 23c3e78c1..113d69225 100644 --- a/npc/other/mercenary_rent.txt +++ b/npc/other/mercenary_rent.txt @@ -1,12 +1,12 @@ -//===== eAthena Script ======================================= -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= +//===== rAthena Script ======================================= //= Mercenary related NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Sells Lancer, Sword, and Archer, mercenaries diff --git a/npc/other/monster_museum.txt b/npc/other/monster_museum.txt index ad0ec5d01..4f042f41f 100644 --- a/npc/other/monster_museum.txt +++ b/npc/other/monster_museum.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Juno Monster Museum //===== By: ================================================== //= Muad_Dib (The Prometheus Project) @@ -6,14 +6,14 @@ //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Juno Monster Museum - Non Player Character Locations //= - Information about various monsters //===== Additional Comments: ================================= // 07/06/05 : Added 1st Version. [Muad_Dib] -//= Adapted to eAthena Scripting Language by [Lance] +//= Adapted to rAthena Scripting Language by [Lance] //= 1.1a Fixed typos [Haplo] //= 1.2 Rescripted to Aegis 10.3 standards. [L0ne_W0lf] //= 1.3 Added a Missing "case 1:". [Samuray22] diff --git a/npc/other/monster_race.txt b/npc/other/monster_race.txt index f69bee822..884800570 100644 --- a/npc/other/monster_race.txt +++ b/npc/other/monster_race.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hugel Monster Races //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN (Trunk, r12752+) +//= rAthena SVN (Trunk, r12752+) //===== Description: ========================================= //= [Aegis Conversion] //= - Hugel Monster Races (Single and Double) diff --git a/npc/other/msg_boards.txt b/npc/other/msg_boards.txt index 10f6ac8a2..bbe1db2bb 100644 --- a/npc/other/msg_boards.txt +++ b/npc/other/msg_boards.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Misc. Message Boards //===== By: ================================================== //= kobra_k88 @@ -7,7 +7,7 @@ //= 1.6 //===== Compatible With: ===================================== //= [Aegis Conversion] -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= Misc. Message Boards for: //= - Prontera diff --git a/npc/other/poring_war.txt b/npc/other/poring_war.txt index 54c5fcf7e..d2f7b7bce 100644 --- a/npc/other/poring_war.txt +++ b/npc/other/poring_war.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Poring War //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Poring War @@ -1764,4 +1764,4 @@ OnTouch: next; mes "- Marins are cheerfully shouting for the victory. -"; close; -} \ No newline at end of file +} diff --git a/npc/other/powernpc.txt b/npc/other/powernpc.txt index f9f9740ce..eb12a84c4 100644 --- a/npc/other/powernpc.txt +++ b/npc/other/powernpc.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Official Gonryun Power Arena //===== By: ================================================== //= KarLaeda (Aegis script cnversion) diff --git a/npc/other/pvp.txt b/npc/other/pvp.txt index 9bd0bfe57..f44451854 100644 --- a/npc/other/pvp.txt +++ b/npc/other/pvp.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= PvP NPCs //===== By: ================================================== //= kobra_k88; L0ne_W0lf //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= PvP NPCs that are found in the Inns in major cities. @@ -560,4 +560,4 @@ OnTouch: case 5: warp "alberta",41,243; end; case 6: close; } -} \ No newline at end of file +} diff --git a/npc/other/resetskill.txt b/npc/other/resetskill.txt index 753a43467..10e63fa0f 100644 --- a/npc/other/resetskill.txt +++ b/npc/other/resetskill.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hypnotist //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis conversion] //= Permenent first class, base level 40 and under skill resetter. diff --git a/npc/other/sealstatus.txt b/npc/other/sealstatus.txt index cd269cae7..45203c0fd 100644 --- a/npc/other/sealstatus.txt +++ b/npc/other/sealstatus.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= God Item Seal Status //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Goid Item Seal Status. diff --git a/npc/other/turbotrack/Expert_16.txt b/npc/other/turbotrack/Expert_16.txt index 2098cbb5f..7131edc8d 100644 --- a/npc/other/turbotrack/Expert_16.txt +++ b/npc/other/turbotrack/Expert_16.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turbo Track - Expert - 16 Person //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Turbo Track Course: Expert (PVP) - 16 Person diff --git a/npc/other/turbotrack/Expert_4.txt b/npc/other/turbotrack/Expert_4.txt index 578649b16..18c618906 100644 --- a/npc/other/turbotrack/Expert_4.txt +++ b/npc/other/turbotrack/Expert_4.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turbo Track - Expert - 4 Person //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Turbo Track Course: Expert (PVP) - 4 Person @@ -678,7 +678,7 @@ OnEnable: end; } -// ÇåÆÃÄÚ½º +// �����ڽ� turbo_e_4,90,46,0 script hunting#e4 111,{ Onreset: killmonsterall "turbo_e_4"; diff --git a/npc/other/turbotrack/Expert_8.txt b/npc/other/turbotrack/Expert_8.txt index 0c25a62b0..46c8e7857 100644 --- a/npc/other/turbotrack/Expert_8.txt +++ b/npc/other/turbotrack/Expert_8.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turbo Track - Expert - 8 Person //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Turbo Track Course: Expert (PVP) - 8 Person diff --git a/npc/other/turbotrack/Normal_16.txt b/npc/other/turbotrack/Normal_16.txt index df40e7566..a5c8d42f3 100644 --- a/npc/other/turbotrack/Normal_16.txt +++ b/npc/other/turbotrack/Normal_16.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turbo Track - Normal - 16 Person //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Turbo Track Course: Normal (Non-PVP) - 16 Person diff --git a/npc/other/turbotrack/Normal_4.txt b/npc/other/turbotrack/Normal_4.txt index 866f4f164..811f40a29 100644 --- a/npc/other/turbotrack/Normal_4.txt +++ b/npc/other/turbotrack/Normal_4.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turbo Track - Normal - 4 Person //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Turbo Track Course: Normal (Non-PVP) - 4 Person @@ -678,7 +678,7 @@ OnEnable: end; } -// ÇåÆÃÄÚ½º +// �����ڽ� turbo_n_4,90,46,0 script hunting#n4 111,{ Onreset: killmonsterall "turbo_n_4"; diff --git a/npc/other/turbotrack/Normal_8.txt b/npc/other/turbotrack/Normal_8.txt index fa972c64a..1eddb6b43 100644 --- a/npc/other/turbotrack/Normal_8.txt +++ b/npc/other/turbotrack/Normal_8.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turbo Track - Normal - 8 Person //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Turbo Track Course: Normal (Non-PVP) - 8 Person diff --git a/npc/other/turbotrack/Normal_Solo.txt b/npc/other/turbotrack/Normal_Solo.txt index b6016c0f0..1594c400e 100644 --- a/npc/other/turbotrack/Normal_Solo.txt +++ b/npc/other/turbotrack/Normal_Solo.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turbo Track - Solo Mode //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Turbo Track Course: Solo Mode/Time Attack @@ -678,7 +678,7 @@ OnEnable: end; } -// ÇåÆÃÄÚ½º +// �����ڽ� turbo_n_1,90,46,0 script hunting#n1 111,{ Onreset: killmonsterall "turbo_n_1"; @@ -892,19 +892,19 @@ turbo_n_1,384,167,1 script Guide#TBT_n_1 47,{ set .@min_start,(($@start_time % 10000) / 100); set .@sec_start,$@start_time % 100; - //----- Á¾·á ¼­¹ö ½Ã°£À» ½ÃºÐÃÊ ºÎºÐÀ¸·Î ³ª´® ------- + //----- ���� ���� �� �ú��� ����� ���� ------- set .@hour_end,$@end_time / 10000; set .@min_end,(($@end_time % 10000) / 100); set .@sec_end,$@end_time % 100; - //----- 24½Ã -> 0½Ã·Î ³Ñ¾î°¡´Â °Í üũ + //----- 24�� -> 0�÷� �Ѿ�� �� üũ if (hour_start == 23 && hour_end == 0) set .@hour_end,24; - //----- ½ÃÀÛ,Á¾·á ½Ã°£À» ÃÊ´ÜÀ§·Î ¹Ù²ãÁÜ ------------- + //----- ����,���� �� �ʴ����� �ٲ��� ------------- set .@st_to_sec,((.@hour_start * 3600) + (.@min_start * 60) + (.@sec_start)); set .@et_to_sec,((.@hour_end * 3600) + (.@min_end * 60) + (.@sec_end)); - //----- ½ÃÀÛÇؼ­ Á¾·áÇϴµ¥ °É¸° ½Ã°£ ----------- + //----- �����ؼ� �����ϴµ� �ɸ� �ð� ----------- set .@record_time,(.@et_to_sec - .@st_to_sec); set .@record_hour,.@record_time / 3600; diff --git a/npc/other/turbotrack/Turbo_Track.txt b/npc/other/turbotrack/Turbo_Track.txt index 23c0ddc8c..ac29c7354 100644 --- a/npc/other/turbotrack/Turbo_Track.txt +++ b/npc/other/turbotrack/Turbo_Track.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Turbo Track NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= General Turbo Track NPCs, includes Kafra and Tool Merchant diff --git a/npc/quests/2007_relay.txt b/npc/quests/2007_relay.txt index bc3c0a298..31dea6319 100644 --- a/npc/quests/2007_relay.txt +++ b/npc/quests/2007_relay.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Party Relay Quest //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Party Relay Quest. diff --git a/npc/quests/Bard_Quest.txt b/npc/quests/Bard_Quest.txt index b249072fd..023aedf2e 100644 --- a/npc/quests/Bard_Quest.txt +++ b/npc/quests/Bard_Quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Wandering Minstrel Quest //===== By: ================================================== //= Riotblade and L0ne_W0lf //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Help the bard remember how his song goes. //===== Comments: ============================================ diff --git a/npc/quests/Kiel_Hyre_Quest.txt b/npc/quests/Kiel_Hyre_Quest.txt index cdc550b3b..ff4d29000 100644 --- a/npc/quests/Kiel_Hyre_Quest.txt +++ b/npc/quests/Kiel_Hyre_Quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kiel Hyre Quest //===== By: ================================================== //= L0ne_W0lf (Script), DZeroX (Timer) //===== Current Version: ===================================== //= 4.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Quest for opening Robot Factory first and second floors. //===== Comments: ============================================ diff --git a/npc/quests/Lvl4_weapon_quest.txt b/npc/quests/Lvl4_weapon_quest.txt index 2e26fe5b2..f4cfb3b53 100644 --- a/npc/quests/Lvl4_weapon_quest.txt +++ b/npc/quests/Lvl4_weapon_quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Grade A and Grade S weapon quests //===== By: ================================================== //= Vicious_Pucca, Reddozen & MasterOfMuppets //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN 3422+(Requires jA Script System) +//= rAthena SVN 3422+(Requires jA Script System) //===== Description: ========================================= //= [Aegis Conversion] //= Grade A and Grade S weapon quests diff --git a/npc/quests/The_Sign_Quest.txt b/npc/quests/The_Sign_Quest.txt index bb02f5572..6970a4a58 100644 --- a/npc/quests/The_Sign_Quest.txt +++ b/npc/quests/The_Sign_Quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= The Sign Quest //===== By: ================================================== //= SinSloth(Most of the NPCs), MasterOfMuppets(Some of the NPCs + bug fixes) & Kargha(The quiz NPCs) //===== Current Version: ===================================== //= 3.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quest for opening the doors to Geffenia. @@ -3202,7 +3202,7 @@ OnTouch: //prt_maze02,25,161,0 script #music -1,7,7,{ //OnTouch: -// soundeffect "effect\\¼®¾çÀÇ ¾î½Ø½Å.wav",1; +// soundeffect "effect\\������ ��ؽ�.wav",1; // end; //} @@ -14256,7 +14256,7 @@ gl_dun02,140,72,0 script Mysterious Energy#7 111,{ } } -// Angrboda's Seal 8 °¡Àå small 119 182 +// Angrboda's Seal 8 ���� small 119 182 gl_dun02,119,182,0 script Mysterious Energy#8 111,{ callfunc "F_UpdateSignVars"; set .@crash_s,rand(1,1000); diff --git a/npc/quests/bunnyband.txt b/npc/quests/bunnyband.txt index b34adf90f..7d32f96a1 100644 --- a/npc/quests/bunnyband.txt +++ b/npc/quests/bunnyband.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Bunny Band Quest //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= v1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quest to obtain a Bunny Band headgear. diff --git a/npc/quests/collection/quest_alligator.txt b/npc/quests/collection/quest_alligator.txt index 03802eab3..263ea2658 100644 --- a/npc/quests/collection/quest_alligator.txt +++ b/npc/quests/collection/quest_alligator.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_caramel.txt b/npc/quests/collection/quest_caramel.txt index 109e6abfe..4cb379b71 100644 --- a/npc/quests/collection/quest_caramel.txt +++ b/npc/quests/collection/quest_caramel.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_coco.txt b/npc/quests/collection/quest_coco.txt index ae64b19cd..0915d3988 100644 --- a/npc/quests/collection/quest_coco.txt +++ b/npc/quests/collection/quest_coco.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_creamy.txt b/npc/quests/collection/quest_creamy.txt index 6e7eb2d0f..4a1844719 100644 --- a/npc/quests/collection/quest_creamy.txt +++ b/npc/quests/collection/quest_creamy.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. (Dialog is semi-custom) diff --git a/npc/quests/collection/quest_demonpungus.txt b/npc/quests/collection/quest_demonpungus.txt index 697a180bc..7e659e1ca 100644 --- a/npc/quests/collection/quest_demonpungus.txt +++ b/npc/quests/collection/quest_demonpungus.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_dokebi.txt b/npc/quests/collection/quest_dokebi.txt index c6233dc7b..3e6bcf637 100644 --- a/npc/quests/collection/quest_dokebi.txt +++ b/npc/quests/collection/quest_dokebi.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_dryad.txt b/npc/quests/collection/quest_dryad.txt index 7fff46451..348dc75f9 100644 --- a/npc/quests/collection/quest_dryad.txt +++ b/npc/quests/collection/quest_dryad.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_fabre.txt b/npc/quests/collection/quest_fabre.txt index 48e575514..9c0c016a1 100644 --- a/npc/quests/collection/quest_fabre.txt +++ b/npc/quests/collection/quest_fabre.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_frilldora.txt b/npc/quests/collection/quest_frilldora.txt index 1d9b0700c..f0306d787 100644 --- a/npc/quests/collection/quest_frilldora.txt +++ b/npc/quests/collection/quest_frilldora.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_goat.txt b/npc/quests/collection/quest_goat.txt index 487462c80..64d729386 100644 --- a/npc/quests/collection/quest_goat.txt +++ b/npc/quests/collection/quest_goat.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_golem.txt b/npc/quests/collection/quest_golem.txt index da8aaec02..882d878dd 100644 --- a/npc/quests/collection/quest_golem.txt +++ b/npc/quests/collection/quest_golem.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_hode.txt b/npc/quests/collection/quest_hode.txt index bfa69d973..342ba5fc3 100644 --- a/npc/quests/collection/quest_hode.txt +++ b/npc/quests/collection/quest_hode.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_leafcat.txt b/npc/quests/collection/quest_leafcat.txt index a4844b7c9..69f313f75 100644 --- a/npc/quests/collection/quest_leafcat.txt +++ b/npc/quests/collection/quest_leafcat.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_pecopeco.txt b/npc/quests/collection/quest_pecopeco.txt index 020d3fa1d..1850180e1 100644 --- a/npc/quests/collection/quest_pecopeco.txt +++ b/npc/quests/collection/quest_pecopeco.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/collection/quest_pupa.txt b/npc/quests/collection/quest_pupa.txt index e8821a8fe..b6088a49f 100644 --- a/npc/quests/collection/quest_pupa.txt +++ b/npc/quests/collection/quest_pupa.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= iRO Repeatable EXP Quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Added Monster Killing quests. diff --git a/npc/quests/cooking_quest.txt b/npc/quests/cooking_quest.txt index 2f9b95e07..6387dbd21 100644 --- a/npc/quests/cooking_quest.txt +++ b/npc/quests/cooking_quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Cooking Quest //===== By: ================================================== //= Reddozen; L0ne_W0lf //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Official Cooking Quest (10.3) diff --git a/npc/quests/counteragent_mixture.txt b/npc/quests/counteragent_mixture.txt index 82759ca4a..f5558586a 100644 --- a/npc/quests/counteragent_mixture.txt +++ b/npc/quests/counteragent_mixture.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Counteragent and Mixture Quest(Morgenstein) //===== By: ================================================== //= kobra_k88 @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 2.2b //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis COnversion] //= Counteragent and Mixtures for making dyes & Alchemist Job Quest diff --git a/npc/quests/doomed_swords.txt b/npc/quests/doomed_swords.txt index 1d736c122..6a5ecc20f 100644 --- a/npc/quests/doomed_swords.txt +++ b/npc/quests/doomed_swords.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Doomed Swords Quest //===== By: ================================================== //= kobra_k88; L0ne_W0lf //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Doomed Swords Quest: diff --git a/npc/quests/doomed_swords_quest.txt b/npc/quests/doomed_swords_quest.txt index 5712807d2..1fa85fed4 100644 --- a/npc/quests/doomed_swords_quest.txt +++ b/npc/quests/doomed_swords_quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Doomed Swords Quest Part 3 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= - Creation of Doomed Swords: Grimtooth, Mysteltain, and diff --git a/npc/quests/eden/11-25.txt b/npc/quests/eden/11-25.txt index c81d0dec6..417e30f78 100644 --- a/npc/quests/eden/11-25.txt +++ b/npc/quests/eden/11-25.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // Eden Group Quests - Repeatable experience quests [11-25] //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [AEGIS Conversion] //===== Additional Comments: ================================= @@ -572,4 +572,4 @@ moc_para01,32,30,6 script Spikle#Tuto 914,{ mes "Why don't you look around and find some interesting tasks?"; close; } -} \ No newline at end of file +} diff --git a/npc/quests/eden/26-40.txt b/npc/quests/eden/26-40.txt index 368b28db6..01bf830ba 100644 --- a/npc/quests/eden/26-40.txt +++ b/npc/quests/eden/26-40.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // Eden Group Quests - Repeatable experience quests [26-40] //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [AEGIS Conversion] //===== Additional Comments: ================================= diff --git a/npc/quests/eden/41-55.txt b/npc/quests/eden/41-55.txt index d19759944..4b3ea744f 100644 --- a/npc/quests/eden/41-55.txt +++ b/npc/quests/eden/41-55.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // Eden Group Quests - Repeatable experience quests [41-55] //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [AEGIS Conversion] //===== Additional Comments: ================================= diff --git a/npc/quests/eden/56-70.txt b/npc/quests/eden/56-70.txt index c58289397..6e449ab45 100644 --- a/npc/quests/eden/56-70.txt +++ b/npc/quests/eden/56-70.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // Eden Group Quests - Repeatable experience quests [55-70] //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [AEGIS Conversion] //===== Additional Comments: ================================= diff --git a/npc/quests/eden/71-85.txt b/npc/quests/eden/71-85.txt index fd12230ea..24e6a7dea 100644 --- a/npc/quests/eden/71-85.txt +++ b/npc/quests/eden/71-85.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // Eden Group Quests - Experience quests [71-85] //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [AEGIS Conversion] //===== Additional Comments: ================================= diff --git a/npc/quests/eden/eden_common.txt b/npc/quests/eden/eden_common.txt index 40af1fcf4..8624763fe 100644 --- a/npc/quests/eden/eden_common.txt +++ b/npc/quests/eden/eden_common.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // Eden Group Quests - Common NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [AEGIS Conversion] //===== Additional Comments: ================================= diff --git a/npc/quests/eden/eden_quests.txt b/npc/quests/eden/eden_quests.txt index 39a7bae33..87b39a9e3 100644 --- a/npc/quests/eden/eden_quests.txt +++ b/npc/quests/eden/eden_quests.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // Eden Group Quest - Quests NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [AEGIS Conversion] //===== Additional Comments: ================================= @@ -3935,4 +3935,4 @@ sec_in02,25,33,4 script Assistant 422,{ mes "......meow wee."; close; } -*/ \ No newline at end of file +*/ diff --git a/npc/quests/eden/eden_service.txt b/npc/quests/eden/eden_service.txt index 1111e182b..cbfbc5a74 100644 --- a/npc/quests/eden/eden_service.txt +++ b/npc/quests/eden/eden_service.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= // Eden Group Quests - Service NPCs //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [AEGIS Conversion] //===== Additional Comments: ================================= diff --git a/npc/quests/eye_of_hellion.txt b/npc/quests/eye_of_hellion.txt index 058fb8762..634f02d5f 100644 --- a/npc/quests/eye_of_hellion.txt +++ b/npc/quests/eye_of_hellion.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= The Eye of Hellion Quest. //===== By: ================================================== //= MasterOfMuppets //===== Current Version: ===================================== //= 1.9 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quest for getting a Nile Rose diff --git a/npc/quests/first_class/tu_acolyte.txt b/npc/quests/first_class/tu_acolyte.txt index d49e3207d..3ad692b25 100644 --- a/npc/quests/first_class/tu_acolyte.txt +++ b/npc/quests/first_class/tu_acolyte.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Acolyte Class Tutorial and Job Specific Quest //===== By: ================================================== //= Fix up by Jukka //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN (Testet in Trunk 88xx) +//= rAthena SVN (Testet in Trunk 88xx) //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/quests/first_class/tu_archer.txt b/npc/quests/first_class/tu_archer.txt index 5243cfc86..a28fb9c13 100644 --- a/npc/quests/first_class/tu_archer.txt +++ b/npc/quests/first_class/tu_archer.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Archer Class Tutorial and Job Specific Quest //===== By: ================================================== //= Fix up by Jukka //===== Current Version: ===================================== //= 1.9 //===== Compatible With: ===================================== -//= eAthena SVN (Testet in Trunk 88xx) +//= rAthena SVN (Testet in Trunk 88xx) //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/quests/first_class/tu_ma_th01.txt b/npc/quests/first_class/tu_ma_th01.txt index bddc0b410..0399a5112 100644 --- a/npc/quests/first_class/tu_ma_th01.txt +++ b/npc/quests/first_class/tu_ma_th01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Theif Mage Quest Story Mode //===== By: ================================================== //= Fix up by Jukka //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN (Testet in Trunk 88xx) +//= rAthena SVN (Testet in Trunk 88xx) //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/quests/first_class/tu_magician01.txt b/npc/quests/first_class/tu_magician01.txt index a325d2bf7..f28d8cf71 100644 --- a/npc/quests/first_class/tu_magician01.txt +++ b/npc/quests/first_class/tu_magician01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Magican Class Tutorial and Job Specific Quest //===== By: ================================================== //= Fix up by Jukka //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN (Testet in Trunk 88xx) +//= rAthena SVN (Testet in Trunk 88xx) //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/quests/first_class/tu_merchant.txt b/npc/quests/first_class/tu_merchant.txt index 30f391490..2941ea030 100644 --- a/npc/quests/first_class/tu_merchant.txt +++ b/npc/quests/first_class/tu_merchant.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Merchant Class Tutorial and Job Specific Quest //===== By: ================================================== //= Fix up by Jukka //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN (Testet in Trunk 88xx) +//= rAthena SVN (Testet in Trunk 88xx) //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/quests/first_class/tu_sword.txt b/npc/quests/first_class/tu_sword.txt index 22c3ade54..d7ada691a 100644 --- a/npc/quests/first_class/tu_sword.txt +++ b/npc/quests/first_class/tu_sword.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Swordman Class Tutorial and Job Specific Quest //===== By: ================================================== //= Fix up by Jukka //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN (Testet in Trunk 88xx) +//= rAthena SVN (Testet in Trunk 88xx) //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/quests/first_class/tu_thief01.txt b/npc/quests/first_class/tu_thief01.txt index c79a48b4b..75d8f4ba8 100644 --- a/npc/quests/first_class/tu_thief01.txt +++ b/npc/quests/first_class/tu_thief01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Thief Class Tutorial and Job Specific Quest //===== By: ================================================== //= Fix up by Jukka //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN (Testet in Trunk 88xx) +//= rAthena SVN (Testet in Trunk 88xx) //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/quests/guildrelay.txt b/npc/quests/guildrelay.txt index 66c8bce3b..b4158c31e 100644 --- a/npc/quests/guildrelay.txt +++ b/npc/quests/guildrelay.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Guild Relay Quest //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Guild Relay Quest. diff --git a/npc/quests/gunslinger_quests.txt b/npc/quests/gunslinger_quests.txt index 957f3b737..503a8923a 100644 --- a/npc/quests/gunslinger_quests.txt +++ b/npc/quests/gunslinger_quests.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Gunslinger quests //===== By: ================================================== //= Playtester diff --git a/npc/quests/juice_maker.txt b/npc/quests/juice_maker.txt index d3745a7de..1a84a377e 100644 --- a/npc/quests/juice_maker.txt +++ b/npc/quests/juice_maker.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Juice Maker Quest //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis COnversion] //= Learn where to turn apples, bananas, carrots, and grapes diff --git a/npc/quests/monstertamers.txt b/npc/quests/monstertamers.txt index 44028f4c5..49ac93e8b 100644 --- a/npc/quests/monstertamers.txt +++ b/npc/quests/monstertamers.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Monster Tamers //===== By: ================================================== //= kobra_k88, Darkchild, x[tsk] //===== Current Version: ===================================== //= 1.4b //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Cute pet quest items //===== Additional Comments: ================================= diff --git a/npc/quests/mrsmile.txt b/npc/quests/mrsmile.txt index a6d22c9fb..4ac8c964f 100644 --- a/npc/quests/mrsmile.txt +++ b/npc/quests/mrsmile.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mr. Smile Quest //===== By: ================================================== //= kobra_k88, Akaru //===== Current Version: ===================================== //= 1.4a //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= [Aegis Conversion] //= Trade Clover, Fluff and Jellopy for a Mr. Smile mask. diff --git a/npc/quests/newgears/2004_headgears.txt b/npc/quests/newgears/2004_headgears.txt index f7275c771..42e5ceb12 100644 --- a/npc/quests/newgears/2004_headgears.txt +++ b/npc/quests/newgears/2004_headgears.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= 2004 Headgear Quests //===== By: ================================================== //= Dj-Yhn //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= 2004 New Headgears. Official Quests diff --git a/npc/quests/newgears/2005_headgears.txt b/npc/quests/newgears/2005_headgears.txt index 6487a7617..6df89a68f 100644 --- a/npc/quests/newgears/2005_headgears.txt +++ b/npc/quests/newgears/2005_headgears.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= 2005 Headgear Quests //===== By: ================================================== //= MasterOfMuppets //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= [Aegis Conversion] //= 2005 Headgears Official Quest. diff --git a/npc/quests/newgears/2006_headgear.txt b/npc/quests/newgears/2006_headgear.txt index 25d69475d..c468dca6f 100644 --- a/npc/quests/newgears/2006_headgear.txt +++ b/npc/quests/newgears/2006_headgear.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= 2006 Headgear //===== By: ================================================== //= DiviniaRO members, cleaned by reddozen diff --git a/npc/quests/ninja_quests.txt b/npc/quests/ninja_quests.txt index fd435fbd4..9a1342042 100644 --- a/npc/quests/ninja_quests.txt +++ b/npc/quests/ninja_quests.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ninja quests //===== By: ================================================== //= Playtester diff --git a/npc/quests/obb_quest.txt b/npc/quests/obb_quest.txt index c0524340c..fcc76b832 100644 --- a/npc/quests/obb_quest.txt +++ b/npc/quests/obb_quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Old Blue Box Quest //===== By =================================================== //= Celesta, Lupus //===== Version ============================================== //= 2.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= // [Aegis COnversion] //= Old Blue Box quest (?) diff --git a/npc/quests/okolnir/godse_aru01.txt b/npc/quests/okolnir/godse_aru01.txt index 34d39994d..5fb53aca2 100644 --- a/npc/quests/okolnir/godse_aru01.txt +++ b/npc/quests/okolnir/godse_aru01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Valfreja 1 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Asprika) @@ -3145,7 +3145,7 @@ que_qaru01,252,340,3 script Wish Maiden#aru01_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_aru02.txt b/npc/quests/okolnir/godse_aru02.txt index 04e26597c..78e52fd6c 100644 --- a/npc/quests/okolnir/godse_aru02.txt +++ b/npc/quests/okolnir/godse_aru02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Valfreja 2 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Asprika) @@ -3145,7 +3145,7 @@ que_qaru02,252,340,3 script Wish Maiden#aru02_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_aru03.txt b/npc/quests/okolnir/godse_aru03.txt index 416200fd1..e2d7c3831 100644 --- a/npc/quests/okolnir/godse_aru03.txt +++ b/npc/quests/okolnir/godse_aru03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Valfreja 3 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Asprika) @@ -3145,7 +3145,7 @@ que_qaru03,252,340,3 script Wish Maiden#aru03_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_aru04.txt b/npc/quests/okolnir/godse_aru04.txt index a4bcdb2e5..0f980744a 100644 --- a/npc/quests/okolnir/godse_aru04.txt +++ b/npc/quests/okolnir/godse_aru04.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Valfreja 4 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Asprika) @@ -3145,7 +3145,7 @@ que_qaru04,252,340,3 script Wish Maiden#aru04_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_aru05.txt b/npc/quests/okolnir/godse_aru05.txt index 94ac29ed7..dfeecd6cf 100644 --- a/npc/quests/okolnir/godse_aru05.txt +++ b/npc/quests/okolnir/godse_aru05.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Valfreja 5 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Asprika) @@ -3145,7 +3145,7 @@ que_qaru05,252,340,3 script Wish Maiden#aru05_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_sch01.txt b/npc/quests/okolnir/godse_sch01.txt index db4b2a007..27f747829 100644 --- a/npc/quests/okolnir/godse_sch01.txt +++ b/npc/quests/okolnir/godse_sch01.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Nidhoggr 1 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Brynhild) @@ -3145,7 +3145,7 @@ que_qsch01,252,340,3 script Wish Maiden#sch01_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_sch02.txt b/npc/quests/okolnir/godse_sch02.txt index c36703906..b9f4ab943 100644 --- a/npc/quests/okolnir/godse_sch02.txt +++ b/npc/quests/okolnir/godse_sch02.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Nidhoggr 2 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Brynhild) @@ -3144,7 +3144,7 @@ que_qsch02,252,340,3 script Wish Maiden#sch02_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_sch03.txt b/npc/quests/okolnir/godse_sch03.txt index cd2a570b6..fd260f30e 100644 --- a/npc/quests/okolnir/godse_sch03.txt +++ b/npc/quests/okolnir/godse_sch03.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Nidhoggr 3 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Brynhild) @@ -3144,7 +3144,7 @@ que_qsch03,252,340,3 script Wish Maiden#sch03_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_sch04.txt b/npc/quests/okolnir/godse_sch04.txt index 3e1337bd1..8891e15ff 100644 --- a/npc/quests/okolnir/godse_sch04.txt +++ b/npc/quests/okolnir/godse_sch04.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Nidhoggr 4 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Brynhild) @@ -3144,7 +3144,7 @@ que_qsch04,252,340,3 script Wish Maiden#sch04_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/okolnir/godse_sch05.txt b/npc/quests/okolnir/godse_sch05.txt index 69bcc0fea..a7996a67d 100644 --- a/npc/quests/okolnir/godse_sch05.txt +++ b/npc/quests/okolnir/godse_sch05.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Falicious Okolnir - Nidhoggr 5 //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= God Item SE Creation scipt (Brynhild) @@ -3144,7 +3144,7 @@ que_qsch05,252,340,3 script Wish Maiden#sch05_gift 403,{ else { cutin "wish_maiden12",1; mes "[Wish Maiden]"; - mes "¸ All of you worked together as a team..."; + mes "� All of you worked together as a team..."; mes "Humans are strong when they are united, but are easily swayed by lust."; next; mes "[Wish Maiden]"; diff --git a/npc/quests/quests_13_1.txt b/npc/quests/quests_13_1.txt index 054858926..23a1add3a 100644 --- a/npc/quests/quests_13_1.txt +++ b/npc/quests/quests_13_1.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Ash-Vacuum //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Contains Quests: diff --git a/npc/quests/quests_13_2.txt b/npc/quests/quests_13_2.txt index 583705a8c..49ba15f24 100644 --- a/npc/quests/quests_13_2.txt +++ b/npc/quests/quests_13_2.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Collection of episode 13.2 quests. //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Cat Hand Addition. (Leads to 13.2 areas) @@ -3540,7 +3540,7 @@ manuk,278,177,5 script Villager#ep13_11 454,{ mes "[Villager]"; mes "Das?"; mes "idh sd!"; - mes "Dh apa sd¡­is Das idh."; + mes "Dh apa sd��is Das idh."; close; } } @@ -5087,7 +5087,7 @@ man_in01,378,276,3 script Manuk Engineer#ep13_2 453,{ mes "[Manuk Engineer]"; mes "To prevent our bodies from becoming numb, we need Bradium."; mes "From the Bradium we can extract a special element that we need to survive."; - //mes "Ìá?ÌØÊâµ???¬²¢¾­³£'Óá£"; + //mes "��?����???�������'��"; next; mes "[Manuk Engineer]"; mes "The mining industry is primary here since our lives depend on it."; diff --git a/npc/quests/quests_airship.txt b/npc/quests/quests_airship.txt index 1b937c58f..81c28d4b6 100644 --- a/npc/quests/quests_airship.txt +++ b/npc/quests/quests_airship.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Airship Related Quests //===== By: ================================================== // Samuray22 //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Quest from the airplane to einbroch and einbech. //= Reward: -Free Ticket for Flyship. diff --git a/npc/quests/quests_alberta.txt b/npc/quests/quests_alberta.txt index 1539750da..24ceed894 100644 --- a/npc/quests/quests_alberta.txt +++ b/npc/quests/quests_alberta.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Alberta //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 2.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Dolls Quest //= Boy's Cap Quest diff --git a/npc/quests/quests_aldebaran.txt b/npc/quests/quests_aldebaran.txt index 696941f4e..9a4bde3f1 100644 --- a/npc/quests/quests_aldebaran.txt +++ b/npc/quests/quests_aldebaran.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Aldebaran //===== By: ================================================== -//= eAthena Dev Team +//= rAthena Dev Team //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= 'Doctor Band', 'Feather Bonnet', 'Opera Masque', 'Sakkat Hat' Quests. //===== Additional Comments: ================================= diff --git a/npc/quests/quests_amatsu.txt b/npc/quests/quests_amatsu.txt index a3d3a8fbf..840947699 100644 --- a/npc/quests/quests_amatsu.txt +++ b/npc/quests/quests_amatsu.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Amatsu //===== By: ================================================== -//= eAthena team & others? & MasterOfMuppets +//= rAthena team & others? & MasterOfMuppets //===== Current Version: ===================================== //= 1.4a //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Momotaro Event diff --git a/npc/quests/quests_ayothaya.txt b/npc/quests/quests_ayothaya.txt index c05004ef4..1751d05a2 100644 --- a/npc/quests/quests_ayothaya.txt +++ b/npc/quests/quests_ayothaya.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Ayothaya //===== By =================================================== //= Fredzilla, MasterOfMuppets //===== Version ============================================== //= 2.3 //===== Compatible With ====================================== -//= eAthena SVN +//= rAthena SVN //===== Description ========================================== //= [Aegis Conversion] //= Ayothaya Ring Quest diff --git a/npc/quests/quests_brasilis.txt b/npc/quests/quests_brasilis.txt index 0cb1f1ba0..1aecf9b71 100644 --- a/npc/quests/quests_brasilis.txt +++ b/npc/quests/quests_brasilis.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brasilis Qiests //===== By =================================================== //= L0ne_W0lf //===== Version ============================================== //= 1.0 //===== Compatible With ====================================== -//= eAthena SVN +//= rAthena SVN //===== Description ========================================== //= [Aegis COnversion] //= Lost Puppies (Repeatable, 24 hours.) diff --git a/npc/quests/quests_comodo.txt b/npc/quests/quests_comodo.txt index d070545e4..56d85b9dd 100644 --- a/npc/quests/quests_comodo.txt +++ b/npc/quests/quests_comodo.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Comodo //===== By: ================================================== //= kobra_k88; L0ne_W0lf //===== Current Version: ===================================== //= 1.5b //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Headgear Quests 1 [Aegis Conversion]: //= - 'Cross Hat', 'Bulb Hairband' diff --git a/npc/quests/quests_ein.txt b/npc/quests/quests_ein.txt index aa5d62139..dbaecf65f 100644 --- a/npc/quests/quests_ein.txt +++ b/npc/quests/quests_ein.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Einbroch and Einbech //===== By: ================================================== -//= Evera and The eAthena Dev Team +//= Evera and The rAthena Dev Team //===== Current Version: ===================================== //= 2.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis conversion] //= Oridecon/Mineral Quest diff --git a/npc/quests/quests_geffen.txt b/npc/quests/quests_geffen.txt index 7b1bdd118..1ac2330b1 100644 --- a/npc/quests/quests_geffen.txt +++ b/npc/quests/quests_geffen.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Geffen //===== By: ================================================== //= kobra_k88 & Samuray22 //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= Welding Mask and Headset Quests. //===== Additional Comments: ================================= diff --git a/npc/quests/quests_gonryun.txt b/npc/quests/quests_gonryun.txt index 2246139ba..398558399 100644 --- a/npc/quests/quests_gonryun.txt +++ b/npc/quests/quests_gonryun.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Gonryun //===== By: ================================================== //= KarLaeda //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Broken Sword Quest (Kept old mechanics) diff --git a/npc/quests/quests_hugel.txt b/npc/quests/quests_hugel.txt index 6298445a6..e7b8b4f8c 100644 --- a/npc/quests/quests_hugel.txt +++ b/npc/quests/quests_hugel.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hugel Quest NPCs //===== By: ================================================== //= MasterOfMuppets & SinSloth //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Quest NPC's related to Hugel //===== Additional Comments: ================================= @@ -3500,14 +3500,14 @@ hu_in01,317,312,0 script Book 111,{ mes "in creating a type of machine called ^FF0000Guardian^000000."; mes "I have a bad feeling about that, so I decided to write a journal"; mes "starting from today and keep everything in record."; - mes "¡¡"; + mes "��"; mes "\"^FF0000Guardian^000000\" is an android"; mes "that was created based on the idea of \"^3131FFGiantes^000000\","; mes "the giant tribe that was said to live in an ancient age."; mes "It is memorized with various commands,"; mes "so it is said to handle difficult things for humans as protecting"; mes "important facilities and such."; - mes "¡¡"; + mes "��"; mes "However, those things are our job, the mercenary soldiers' job."; mes "Mercenary soldier groups in many areas"; mes "are already agitated by the news of the Guardian creation."; @@ -3543,7 +3543,7 @@ hu_in01,317,312,0 script Book 111,{ mes "hard works. But it doesn't seem to be true."; mes "To me, they are nothing but \"^FF0000weapons of mass destruction^000000\"."; mes "Perhaps, they might be intended to be that way from the beginning."; - mes "¡¡"; + mes "��"; mes "What is going to be next after we finish testing the machines?"; mes "No matter how bad other people criticize us for being greedy toward money,"; mes "we always take pride in what we are doing, and we always do our best."; @@ -3551,7 +3551,7 @@ hu_in01,317,312,0 script Book 111,{ mes "But, now, we are losing our place to the lifeless machines."; mes "Many people have quit this job after the machines were introduced."; mes "I must admit that I am also being shaken by the thought."; - mes "¡¡"; + mes "��"; mes "Bah, god damn you, Rekenber! You just have created the worst invention in history!"; next; mes "..............................."; @@ -3579,7 +3579,7 @@ hu_in01,317,312,0 script Book 111,{ mes "One of the guardians caused an error and brought havoc."; mes "While we were terrified and didn't know what to do, that broken guardian"; mes "crushed the commander of 'Blade Canine Mercenary' to death."; - mes "¡¡"; + mes "��"; mes "I can't remember how we could regain control over the broken guardian."; mes "My mind is still baffled for the fact that that machine actually killed an innocent guy as I was kind of worried about."; mes "Many people were dispatched from Rekenber to investigate this matter, so hopefully they will figure out"; @@ -3601,17 +3601,17 @@ hu_in01,317,312,0 script Book 111,{ mes "Rekenber must have bribed the upper management of our troops with money."; mes "Otherwise, why would they want us to keep our mouth sealed about a such shocking incident?"; mes "We, angry mercenary soldiers burst into rage right after the morning session was over."; - mes "¡¡"; + mes "��"; mes "We went ahead and spread the story about the shocking incident to every mercenary troops."; mes "And then we destroyed every guardian which we found in hangars."; mes "The sounds of hammering metal and sirens were echoing everywhere, everywhere you went."; - mes "¡¡"; + mes "��"; mes "...We took refuge in a safe place out of our unit because of what happened."; mes "We are planning to assert our social security to the public and inform the public with"; mes "the danger of the guardians and the negligence of the government and Rekenber toward the incident."; mes "Our leader told us that he has sent out letters to every mercenary troop"; mes "to encourage them to participate in what we are trying to do."; - mes "¡¡"; + mes "��"; mes "I feel like...that I have just turn into a no-way-out."; mes "I am facing my future with a deep sense of gloom."; next; @@ -3648,7 +3648,7 @@ hu_in01,317,312,0 script Book 111,{ mes "But we were too weak to compete with their invincible guardians. We were literally swept away."; mes "They were quicker than we expected in taking action, and lines and lines of guardians were coming after us."; mes "There was nothing that we could do. We met with a disastrous defeat in the battle with guardians."; - mes "¡¡"; + mes "��"; mes "Everybody is still in shock, but we can't give up now."; mes "I think that we are going to visit a house of a sage called \"Varmunt\" early in the morning."; mes "I don't know why, but it seems that the sage is against the use of guardians."; @@ -3695,13 +3695,13 @@ hu_in01,317,312,0 script Book 111,{ mes "Although I didn't have a time to write a journal that time, the last fight in the Varmunt mansion turned out to be our miserable defeat...as I was worried."; mes "I was told that Sage Varmunt disappeared after the fight, and all of his documents were taken by Rekenber."; mes "I am afraid that they might create a more powerful version of the existing guardian by using his documents."; - mes "¡¡"; + mes "��"; mes "I lost one arm during the last fight, and I barely escaped to Hugel."; mes "I feel so lucky to be in Hugel, because when I arrived, I was a total mess with only one arm,"; mes "but the people in this town did not ask me anything but welcomed me."; mes " "; mes "I have nowhere to go any longer. I am planning to live my life here as long as nothing happens soon."; - mes "¡¡"; + mes "��"; mes "My arm is throbbing with pain again. The history of mercenary soldiers ended, and I need to rest."; mes "I hope that this will be the last page of my journal."; if(hg_tre == 48) set hg_tre,49; diff --git a/npc/quests/quests_izlude.txt b/npc/quests/quests_izlude.txt index ad2ade7cb..a56c91dfa 100644 --- a/npc/quests/quests_izlude.txt +++ b/npc/quests/quests_izlude.txt @@ -1,12 +1,12 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Izlude //===== By: ================================================== -//= Evera and The eAthena Dev Team +//= Evera and The rAthena Dev Team //= L0ne_W0lf //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Edgar's Offer: //= - [Aegis conversion] diff --git a/npc/quests/quests_juperos.txt b/npc/quests/quests_juperos.txt index 82d6cd6d0..59915d80e 100644 --- a/npc/quests/quests_juperos.txt +++ b/npc/quests/quests_juperos.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Juperos Dungeon Quests //===== By =================================================== //= MasterOfMuppets //===== Version ============================================== //= 1.7 //===== Compatible With ====================================== -//= eAthena SVN +//= rAthena SVN //===== Description ========================================== //= [Partial Aegis COnversion] //= Juperos Ruins related Quests/Events diff --git a/npc/quests/quests_lighthalzen.txt b/npc/quests/quests_lighthalzen.txt index d2f2b00b0..d229af56f 100644 --- a/npc/quests/quests_lighthalzen.txt +++ b/npc/quests/quests_lighthalzen.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs located in Lighthalzen //===== By: ================================================== //= Persian, Vicious_Pucca, aoa00, Evera, MasterOfMupppets, @@ -6,7 +6,7 @@ //===== Current Version: ===================================== //= 4.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Quests related to Lighthalzen City. //===== Additional Comments: ================================= diff --git a/npc/quests/quests_louyang.txt b/npc/quests/quests_louyang.txt index 816cb470e..1d0824732 100644 --- a/npc/quests/quests_louyang.txt +++ b/npc/quests/quests_louyang.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Louyang //===== By: ================================================== -//= Evera and The eAthena Dev Team +//= Evera and The rAthena Dev Team //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= [Aegis Conversion] //= Soup Quest diff --git a/npc/quests/quests_lutie.txt b/npc/quests/quests_lutie.txt index ac5d08289..97d566778 100644 --- a/npc/quests/quests_lutie.txt +++ b/npc/quests/quests_lutie.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Lutie //===== By: ================================================== //= TonyMan & Samuray22 //===== Current Version: ===================================== //= 1.3b //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Blush, Cake Hat, Candle, Chef Hat, Raccoon Hat, Rainbow Eggshell, //= Spore Hat, Wonder Nutshell Quests diff --git a/npc/quests/quests_morocc.txt b/npc/quests/quests_morocc.txt index 365c4d939..8e487250d 100644 --- a/npc/quests/quests_morocc.txt +++ b/npc/quests/quests_morocc.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Morroc //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 2.9 //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= [Aegis Conversion] //= - Stop Post @@ -2032,7 +2032,7 @@ moc_ruins,137,70,3 script Book-Touching Man#garas 48,{ if (barmunt_crow == 0) { mes "^660000Morroc, the City of the Desert, has been completely devastated by Satan Morroc.^000000"; next; - mes "^660000The people of Morroc were resilient enough to endure the region’s harsh weather, but their toughness to the weather could not prepare them enough as they witnessed the destruction brought down upon the city by Satan Morroc.^000000"; + mes "^660000The people of Morroc were resilient enough to endure the region�s harsh weather, but their toughness to the weather could not prepare them enough as they witnessed the destruction brought down upon the city by Satan Morroc.^000000"; next; mes "^660000This man, who looks as dry and thin as a fish dried up under the sun, still has a smile that reminds you of a benevolent god, and is touching a book in his hand.^000000"; next; @@ -2997,7 +2997,7 @@ yuno_in04,117,102,3 script Old News Scrapbook 844,{ mes "- Culture Page -"; mes "- Please Save My Water -"; mes " "; - mes "¡¡A recently acclaimed young author,"; + mes "��A recently acclaimed young author,"; mes "Jean Cadoc's new series"; mes "'Please Save My Water' has been ranked at the top"; mes "for the most checked-out book in libraries."; diff --git a/npc/quests/quests_moscovia.txt b/npc/quests/quests_moscovia.txt index f1da1b1b2..c12e0a7b3 100644 --- a/npc/quests/quests_moscovia.txt +++ b/npc/quests/quests_moscovia.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Moscovia Quests //===== By: ================================================== //= Kisuka //===== Current Version: ===================================== //= 1.9 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Quests for Moscovia. //= The Moving Island, Help Mikhail, Acorn Exchange, @@ -15898,7 +15898,7 @@ mosk_dun02,57,220,0 script House Ghost Jar#rus43 111,{ mes "One! Two! Three!!"; next; if (.@rucard_game01 == 1) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; emotion 0; emotion 5,1; next; @@ -15911,13 +15911,13 @@ mosk_dun02,57,220,0 script House Ghost Jar#rus43 111,{ next; }else{ if (.@rucard_game01 == 1) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; } else if (.@rucard_game01 == 2) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; } else if (.@rucard_game01 == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; } emotion 0; emotion 23,1; @@ -15939,7 +15939,7 @@ mosk_dun02,57,220,0 script House Ghost Jar#rus43 111,{ mes "One! Two! Three!!"; next; if (.@rucard_game01 == 2) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; emotion 0; emotion 5,1; next; @@ -15952,13 +15952,13 @@ mosk_dun02,57,220,0 script House Ghost Jar#rus43 111,{ next; }else{ if (.@rucard_game01 == 1) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; } else if (.@rucard_game01 == 2) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; } else if (.@rucard_game01 == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; } emotion 0; emotion 23,1; @@ -15980,7 +15980,7 @@ mosk_dun02,57,220,0 script House Ghost Jar#rus43 111,{ mes "One! Two! Three!!"; next; if (.@rucard_game01 == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; emotion 0; emotion 5,1; next; @@ -15993,13 +15993,13 @@ mosk_dun02,57,220,0 script House Ghost Jar#rus43 111,{ next; }else{ if (.@rucard_game01 == 1) { - cutin "Æ÷¸µÄ«µå",4; + cutin "����ī��",4; } else if (.@rucard_game01 == 2) { - cutin "¿£Á©¸µÄ«µå",4; + cutin "������ī��",4; } else if (.@rucard_game01 == 3) { - cutin "°í½ºÆ®¸µÄ«µå",4; + cutin "���Ʈ��ī��",4; } emotion 0; emotion 23,1; @@ -16547,4 +16547,4 @@ pay_dun04,163,186,0 script Ghost Tree#rus45 111,{ else { end; } -} \ No newline at end of file +} diff --git a/npc/quests/quests_nameless.txt b/npc/quests/quests_nameless.txt index bcd85764b..4aaac46e7 100644 --- a/npc/quests/quests_nameless.txt +++ b/npc/quests/quests_nameless.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Nameless Island Quests //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Collection of Nameless Island Quests @@ -1928,7 +1928,7 @@ nameless_n,259,218,3 script Larjes#Boat1 97,{ close; } mes "[Larjes]"; - mes "“Did you still want to"; + mes "�Did you still want to"; mes "investigate the island?"; next; if(select("No:yes")==1) { diff --git a/npc/quests/quests_niflheim.txt b/npc/quests/quests_niflheim.txt index e28400199..2ddd28ac7 100644 --- a/npc/quests/quests_niflheim.txt +++ b/npc/quests/quests_niflheim.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Niflheim //===== By: ================================================== -//= The eAthena Dev Team +//= The rAthena Dev Team //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= [Aegis Conversion] //= Piano Key Ouest diff --git a/npc/quests/quests_payon.txt b/npc/quests/quests_payon.txt index ad1bc3297..0e1f7ab66 100644 --- a/npc/quests/quests_payon.txt +++ b/npc/quests/quests_payon.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Payon //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= Pretend Murder, Ear Muffs, Oxygen, Derivuchi Cap, Helm of Angel Quests. //===== Additional Comments: ================================= diff --git a/npc/quests/quests_prontera.txt b/npc/quests/quests_prontera.txt index cdd8b5055..b5a3dd705 100644 --- a/npc/quests/quests_prontera.txt +++ b/npc/quests/quests_prontera.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Prontera //===== By: ================================================== //= kobra_k88; L0ne_W0lf //===== Current Version: ===================================== //= 2.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Collection of Prontera-based quests. //= * Culvert Access diff --git a/npc/quests/quests_rachel.txt b/npc/quests/quests_rachel.txt index afe1735fc..5302c9008 100644 --- a/npc/quests/quests_rachel.txt +++ b/npc/quests/quests_rachel.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rachel Quests //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 3.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= Collection of Rachel Quests //= Lost Child Quest: diff --git a/npc/quests/quests_umbala.txt b/npc/quests/quests_umbala.txt index 805950f40..cb48eac42 100644 --- a/npc/quests/quests_umbala.txt +++ b/npc/quests/quests_umbala.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Umbala //===== By: ================================================== -//= sabernet09 & eAthena Team +//= sabernet09 & rAthena Team //===== Current Version: ===================================== //= 2.2a //===== Compatible With: ===================================== -//= eAthena 7.15 + +//= rAthena 7.15 + //===== Description: ========================================= //= [Aegis Conversion] //= Umbalian Language Quest, Umbala Skeletal Gate Quest, diff --git a/npc/quests/quests_veins.txt b/npc/quests/quests_veins.txt index 9af6933fa..e5e3b6851 100644 --- a/npc/quests/quests_veins.txt +++ b/npc/quests/quests_veins.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Veins Quests //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== //= 2.0 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Collection of Veins Quests @@ -2027,7 +2027,7 @@ ein_in01,166,282,4 script Employee#sch 904,{ close; } -ein_in01,176,285,0 script °ÍµÂ ÌØÀæ¸ê#sch -1,1,1,{ +ein_in01,176,285,0 script �͵� �����#sch -1,1,1,{ OnTouch: if (que_sch == 15) { disablenpc "Corporate Figure#sch"; diff --git a/npc/quests/quests_yuno.txt b/npc/quests/quests_yuno.txt index 20d77df51..9acf3b7fa 100644 --- a/npc/quests/quests_yuno.txt +++ b/npc/quests/quests_yuno.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quest NPCs related to Juno //===== By: ================================================== -//= eAthena Dev Team; L0ne_W0lf +//= rAthena Dev Team; L0ne_W0lf //===== Current Version: ===================================== //= 2.0a //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Metto Quest: diff --git a/npc/quests/quiz/quiz_qt.txt b/npc/quests/quiz/quiz_qt.txt index ab77197a5..c9ea91263 100644 --- a/npc/quests/quiz/quiz_qt.txt +++ b/npc/quests/quiz/quiz_qt.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Quiz (Revolution) Part 1 //===== By: ================================================== //= CAHTXHuK //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= //===== Additional Comments: ================================= diff --git a/npc/quests/seals/brisingamen_seal.txt b/npc/quests/seals/brisingamen_seal.txt index de8aeaf96..da2cc1942 100644 --- a/npc/quests/seals/brisingamen_seal.txt +++ b/npc/quests/seals/brisingamen_seal.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brisingamen seal unlocking NPCs. //===== By: ================================================== //= SinSloth //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Quest for breaking the seal of Brisingamen. //===== Additional Comments: ================================= diff --git a/npc/quests/seals/god_global.txt b/npc/quests/seals/god_global.txt index b9d324ec0..c08ccb6f2 100644 --- a/npc/quests/seals/god_global.txt +++ b/npc/quests/seals/god_global.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Variable Management NPC for the god item quest //===== By: ================================================== //= MasterOfMuppets //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Use this NPC if the seals quest variables get messed up. //===== Additional Comments: ================================= diff --git a/npc/quests/seals/god_weapon_creation.txt b/npc/quests/seals/god_weapon_creation.txt index d4c2a80d7..3f7cb40ea 100644 --- a/npc/quests/seals/god_weapon_creation.txt +++ b/npc/quests/seals/god_weapon_creation.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= God items creation NPCs //===== By: ================================================== //= SinSloth //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= //===== Additional Comments: ================================= @@ -856,4 +856,4 @@ que_god01,293,3,0 script Godly Item Quests Related#god 90,{ } } } -*/ \ No newline at end of file +*/ diff --git a/npc/quests/seals/megingard_seal.txt b/npc/quests/seals/megingard_seal.txt index 4d54f9d79..2c0cd0c2e 100644 --- a/npc/quests/seals/megingard_seal.txt +++ b/npc/quests/seals/megingard_seal.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Megingjard seal unlocking NPCs. //===== By: ================================================== //= SinSloth //===== Current Version: ===================================== //= 1.9 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Quest for breaking the seal of Megingjard. //===== Additional Comments: ================================= diff --git a/npc/quests/seals/mjolnir_seal.txt b/npc/quests/seals/mjolnir_seal.txt index 5941b4330..95a3d5098 100644 --- a/npc/quests/seals/mjolnir_seal.txt +++ b/npc/quests/seals/mjolnir_seal.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mjolnir seal unlocking NPCs. //===== By: ================================================== //= SinSloth //===== Current Version: ===================================== //= 1.8 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Quest for breaking the seal of Mjolnir. //===== Additional Comments: ================================= diff --git a/npc/quests/seals/sleipnir_seal.txt b/npc/quests/seals/sleipnir_seal.txt index 69d3f292b..6fd6da4a5 100644 --- a/npc/quests/seals/sleipnir_seal.txt +++ b/npc/quests/seals/sleipnir_seal.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Sleipnir seal unlocking NPCs. //===== By: ================================================== //= MasterOfMuppets //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena +//= rAthena //===== Description: ========================================= //= Quest for breaking the seal of Sleipnir. //===== Additional Comments: ================================= diff --git a/npc/quests/skills/acolyte_skills.txt b/npc/quests/skills/acolyte_skills.txt index cb4b55607..f52d7dd70 100644 --- a/npc/quests/skills/acolyte_skills.txt +++ b/npc/quests/skills/acolyte_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Acolyte Skill Quest //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quest for skills: Holy Light diff --git a/npc/quests/skills/alchemist_skills.txt b/npc/quests/skills/alchemist_skills.txt index 511321369..987c6751d 100644 --- a/npc/quests/skills/alchemist_skills.txt +++ b/npc/quests/skills/alchemist_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Alchemist Skills Quests //===== By: ================================================== //= Lupus, Reddozen, Samuray22 //===== Current Version: ===================================== //= 2.2 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis COnversion] //= Quests for item: Elemental_Create_Book diff --git a/npc/quests/skills/archer_skills.txt b/npc/quests/skills/archer_skills.txt index 07c044628..f32315e87 100644 --- a/npc/quests/skills/archer_skills.txt +++ b/npc/quests/skills/archer_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Archer Skill Quest //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quest for skills: Arrow Crafting, Arrow Repel diff --git a/npc/quests/skills/assassin_skills.txt b/npc/quests/skills/assassin_skills.txt index f9666da05..e39444e32 100644 --- a/npc/quests/skills/assassin_skills.txt +++ b/npc/quests/skills/assassin_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Assassin Skills Quests //===== By: ================================================== //= Lupus, Reddozen //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Venom Knife, Sonic Acceleration @@ -952,7 +952,7 @@ OnTouch: } } -moc_pryd04,85,96,0 script ¡¡#crypt -1,3,3,{ +moc_pryd04,85,96,0 script ��#crypt -1,3,3,{ OnTouch: if (ASSN_SK == 4) { specialeffect EF_CONE; diff --git a/npc/quests/skills/bard_skills.txt b/npc/quests/skills/bard_skills.txt index 7108c054d..2ed03ba75 100644 --- a/npc/quests/skills/bard_skills.txt +++ b/npc/quests/skills/bard_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Bard Skill Quest //===== By: ================================================== //= Lupus, Reddozen; L0ne_W0lf //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Official quest for the Bard skill "Pang Voice" diff --git a/npc/quests/skills/blacksmith_skills.txt b/npc/quests/skills/blacksmith_skills.txt index 422e54132..aef3a8155 100644 --- a/npc/quests/skills/blacksmith_skills.txt +++ b/npc/quests/skills/blacksmith_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Blacksmith Skills Quests //===== By: ================================================== //= Lupus, Reddozen, Samuray22 //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Dubious Salesmanship, Greed diff --git a/npc/quests/skills/crusader_skills.txt b/npc/quests/skills/crusader_skills.txt index c70d1532e..65659b6d5 100644 --- a/npc/quests/skills/crusader_skills.txt +++ b/npc/quests/skills/crusader_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Crusader Skills Quests //===== By: ================================================== //= Lupus, Reddozen //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Shrink diff --git a/npc/quests/skills/dancer_skills.txt b/npc/quests/skills/dancer_skills.txt index 06f465c5d..971c100ca 100644 --- a/npc/quests/skills/dancer_skills.txt +++ b/npc/quests/skills/dancer_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Dancer Skills Quests //===== By: ================================================== //= Lupus, Reddozen //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Charming Wink diff --git a/npc/quests/skills/hunter_skills.txt b/npc/quests/skills/hunter_skills.txt index 356b6170d..e6f9f9d41 100644 --- a/npc/quests/skills/hunter_skills.txt +++ b/npc/quests/skills/hunter_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hunter Skills Quests //===== By: ================================================== //= Lupus, Reddozen, Kisuka //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena Revision 3800+ +//= rAthena Revision 3800+ //===== Description: ========================================= //= Temp quests for new skills for 2nd classes //===== Additional Comments: ================================= diff --git a/npc/quests/skills/knight_skills.txt b/npc/quests/skills/knight_skills.txt index 05af1638a..07bcfb03d 100644 --- a/npc/quests/skills/knight_skills.txt +++ b/npc/quests/skills/knight_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Knight Skills Quests //===== By: ================================================== //= Lupus, Reddozen, Samuray22 //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Charge Attack diff --git a/npc/quests/skills/mage_skills.txt b/npc/quests/skills/mage_skills.txt index 2777716fc..f9a098920 100644 --- a/npc/quests/skills/mage_skills.txt +++ b/npc/quests/skills/mage_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mage Skill Quest //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quest for skills: Energy Coat diff --git a/npc/quests/skills/merchant_skills.txt b/npc/quests/skills/merchant_skills.txt index b867c41e4..b2f8a5acc 100644 --- a/npc/quests/skills/merchant_skills.txt +++ b/npc/quests/skills/merchant_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Merchant Skills Quests //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Crazy Uproar, Change Cart, Cart diff --git a/npc/quests/skills/monk_skills.txt b/npc/quests/skills/monk_skills.txt index 281889344..46d0e6f77 100644 --- a/npc/quests/skills/monk_skills.txt +++ b/npc/quests/skills/monk_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Monk Skills Quests //===== By: ================================================== //= Lupus, Reddozen, Samuray22 //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Spiritual Bestowment, Excruciating Palm diff --git a/npc/quests/skills/novice_skills.txt b/npc/quests/skills/novice_skills.txt index 5b4ba9866..6f4cb8ffb 100644 --- a/npc/quests/skills/novice_skills.txt +++ b/npc/quests/skills/novice_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Novice Skills Quests //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quest for skills: First Aid, Trick Dead diff --git a/npc/quests/skills/priest_skills.txt b/npc/quests/skills/priest_skills.txt index 44dd9f46b..3b44e4de3 100644 --- a/npc/quests/skills/priest_skills.txt +++ b/npc/quests/skills/priest_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Priest Skills Quests //===== By: ================================================== //= Lupus, Reddozen //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Redempito diff --git a/npc/quests/skills/rogue_skills.txt b/npc/quests/skills/rogue_skills.txt index 6c35b4102..8b804e0cd 100644 --- a/npc/quests/skills/rogue_skills.txt +++ b/npc/quests/skills/rogue_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rogue Skills Quests //===== By: ================================================== //= Lupus, Reddozen //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: CLose Confine diff --git a/npc/quests/skills/sage_skills.txt b/npc/quests/skills/sage_skills.txt index 3191bc600..1058bb6a8 100644 --- a/npc/quests/skills/sage_skills.txt +++ b/npc/quests/skills/sage_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Sage Skills Quests //===== By: ================================================== //= Lupus, Reddozen //===== Current Version: ===================================== //= 1.4 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Create Converter, Elemental Change diff --git a/npc/quests/skills/swordman_skills.txt b/npc/quests/skills/swordman_skills.txt index 8f6ae3413..6cbdccfbe 100644 --- a/npc/quests/skills/swordman_skills.txt +++ b/npc/quests/skills/swordman_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Swordsman Skills Quests //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Fatal Blow, Mobile HP Recovery, diff --git a/npc/quests/skills/thief_skills.txt b/npc/quests/skills/thief_skills.txt index 999372439..616bfcda1 100644 --- a/npc/quests/skills/thief_skills.txt +++ b/npc/quests/skills/thief_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Thief Skills Quests //===== By: ================================================== //= kobra_k88 //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Sand Attack, Back Slide, Find Stone, diff --git a/npc/quests/skills/wizard_skills.txt b/npc/quests/skills/wizard_skills.txt index 1e8f67419..070c024bd 100644 --- a/npc/quests/skills/wizard_skills.txt +++ b/npc/quests/skills/wizard_skills.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Wizard Skills Quests //===== By: ================================================== //= Lupus, Reddozen //===== Current Version: ===================================== //= 1.5 //===== Compatible With: ===================================== -//= eAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Aegis Conversion] //= Quests for skills: Sight Blaster diff --git a/npc/quests/thana_quest.txt b/npc/quests/thana_quest.txt index c36bb22e8..64ca2b251 100644 --- a/npc/quests/thana_quest.txt +++ b/npc/quests/thana_quest.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Thanatos Tower Quest //===== By: ================================================== //= [Ishizu-chan] //===== Current Version: ===================================== //= 2.1 //===== Compatible With: ===================================== -//= Any eAthena Version i guess? +//= Any rAthena Version i guess? //===== Description: ========================================= //= It's the Thanatos Tower Quest... //===== Additional Comments: ================================= diff --git a/npc/scripts_main.conf b/npc/scripts_main.conf index fb239db6c..53fbeeea2 100644 --- a/npc/scripts_main.conf +++ b/npc/scripts_main.conf @@ -1,5 +1,5 @@ // -------------------------------------------------------------- -// - eAthena Primary Scripts File - +// - rAthena Primary Scripts File - // -------------------------------------------------------------- // The idea of this new system is to make scripts more organized // since the old system was rather messy with all the NPCs in one @@ -9,7 +9,7 @@ // in to scripts_custom.conf to follow the trend. // // Thanks, -// Ancyker and the rest of the eAthena Team +// Ancyker and the rest of the rAthena Team // // Note: "Comments" are all text on the right side of a double slash "//" // Whatever text is commented will not be parsed by the servers, and serves diff --git a/npc/warps/cities/alberta.txt b/npc/warps/cities/alberta.txt index f410ec860..66e3ce6eb 100644 --- a/npc/warps/cities/alberta.txt +++ b/npc/warps/cities/alberta.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Alberta Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/cities/aldebaran.txt b/npc/warps/cities/aldebaran.txt index b4582e4a6..f1d6398af 100644 --- a/npc/warps/cities/aldebaran.txt +++ b/npc/warps/cities/aldebaran.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Al de Baran Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/cities/amatsu.txt b/npc/warps/cities/amatsu.txt index 3262f1692..8614869d3 100644 --- a/npc/warps/cities/amatsu.txt +++ b/npc/warps/cities/amatsu.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Amatsu Warps Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/cities/ayothaya.txt b/npc/warps/cities/ayothaya.txt index 9e3c5723f..2d24763e8 100644 --- a/npc/warps/cities/ayothaya.txt +++ b/npc/warps/cities/ayothaya.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ayothaya Town Warps Script //===== By: ================================================== //= Muad_Dib, L0ne_W0lf (1.0) diff --git a/npc/warps/cities/brasilis.txt b/npc/warps/cities/brasilis.txt index b83c92ec6..891604902 100644 --- a/npc/warps/cities/brasilis.txt +++ b/npc/warps/cities/brasilis.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brasilis Town Warps Script //===== By: ================================================== //= L0ne_W0lf @@ -30,4 +30,4 @@ bra_in01,85,67,0 warp bra_in01_bra_in01#12 1,1,bra_in01,50,66 bra_in01,31,29,0 warp bra_in01_bra_in01#13 1,1,bra_in01,23,70 bra_in01,25,70,0 warp bra_in01_bra_in01#14 1,1,bra_in01,32,26 bra_in01,31,74,0 warp bra_in01_bra_in01#15 1,1,bra_in01,148,59 -bra_in01,148,57,0 warp bra_in01_bra_in01#16 1,1,bra_in01,31,72 \ No newline at end of file +bra_in01,148,57,0 warp bra_in01_bra_in01#16 1,1,bra_in01,31,72 diff --git a/npc/warps/cities/comodo.txt b/npc/warps/cities/comodo.txt index 72ff8aa11..8dfbc8198 100644 --- a/npc/warps/cities/comodo.txt +++ b/npc/warps/cities/comodo.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Comodo Warp Script //===== By: ================================================== -//= eAthena dev team +//= rAthena dev team //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== diff --git a/npc/warps/cities/einbech.txt b/npc/warps/cities/einbech.txt index 03e87dd86..fd4292fde 100644 --- a/npc/warps/cities/einbech.txt +++ b/npc/warps/cities/einbech.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbech Warps //===== By: ================================================== //= Muad Dib (1.0), SSUNNY@YOUNG(1.1) //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== -//= Any eAthena Version +//= Any rAthena Version //===== Description: ========================================= //= Einbech Town warps //===== Additional Comments: ================================= diff --git a/npc/warps/cities/einbroch.txt b/npc/warps/cities/einbroch.txt index 7518a4e65..696e7fa00 100644 --- a/npc/warps/cities/einbroch.txt +++ b/npc/warps/cities/einbroch.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbroch Warp Script //===== By: ================================================== //= Sara-chan (1.3), SSUNNY@YOUNG(1.7), erKURITA (1.8) diff --git a/npc/warps/cities/geffen.txt b/npc/warps/cities/geffen.txt index 87022525b..77016fb7c 100644 --- a/npc/warps/cities/geffen.txt +++ b/npc/warps/cities/geffen.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffen Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/cities/gonryun.txt b/npc/warps/cities/gonryun.txt index 98e17572a..5a37ed0c7 100644 --- a/npc/warps/cities/gonryun.txt +++ b/npc/warps/cities/gonryun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kunlun Town Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/cities/hugel.txt b/npc/warps/cities/hugel.txt index 5ecca5c0d..0daa5219b 100644 --- a/npc/warps/cities/hugel.txt +++ b/npc/warps/cities/hugel.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Garden City Hugel Warp Script //===== By: ================================================== //= Sara-chan (1.1) diff --git a/npc/warps/cities/izlude.txt b/npc/warps/cities/izlude.txt index a6454aa6d..2be7f8325 100644 --- a/npc/warps/cities/izlude.txt +++ b/npc/warps/cities/izlude.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Izlude Warp Script //===== By: ================================================== //= Athena (1.0), Nana (1.1) diff --git a/npc/warps/cities/lighthalzen.txt b/npc/warps/cities/lighthalzen.txt index c626a2060..04b9798c6 100644 --- a/npc/warps/cities/lighthalzen.txt +++ b/npc/warps/cities/lighthalzen.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lighthalzen Warp Script //===== By: ================================================== //= Sara-chan (1.0) diff --git a/npc/warps/cities/louyang.txt b/npc/warps/cities/louyang.txt index d6c4805d1..11679d3b0 100644 --- a/npc/warps/cities/louyang.txt +++ b/npc/warps/cities/louyang.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lou Yang Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/cities/lutie.txt b/npc/warps/cities/lutie.txt index 114439865..5f232974a 100644 --- a/npc/warps/cities/lutie.txt +++ b/npc/warps/cities/lutie.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lutie Warp Script //===== By: ================================================== //= Athena (1.0) Nana (1.1) diff --git a/npc/warps/cities/manuk.txt b/npc/warps/cities/manuk.txt index c87656caa..c7d63169c 100644 --- a/npc/warps/cities/manuk.txt +++ b/npc/warps/cities/manuk.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Manuk warp points. //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/warps/cities/mid_camp.txt b/npc/warps/cities/mid_camp.txt index d8d6e29c0..ed373f631 100644 --- a/npc/warps/cities/mid_camp.txt +++ b/npc/warps/cities/mid_camp.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Another World Warp Script //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/warps/cities/morroc.txt b/npc/warps/cities/morroc.txt index 1570d2248..8b95ed497 100644 --- a/npc/warps/cities/morroc.txt +++ b/npc/warps/cities/morroc.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morroc Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/cities/moscovia.txt b/npc/warps/cities/moscovia.txt index 0b97f511a..408753e3a 100644 --- a/npc/warps/cities/moscovia.txt +++ b/npc/warps/cities/moscovia.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Moscovia City Warp Script //===== By: ================================================== //= $ephiroth diff --git a/npc/warps/cities/nameless.txt b/npc/warps/cities/nameless.txt index b2f034306..3c126e978 100644 --- a/npc/warps/cities/nameless.txt +++ b/npc/warps/cities/nameless.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Nameless Island Warp Script //===== By: ================================================== //= $ephiroth diff --git a/npc/warps/cities/niflheim.txt b/npc/warps/cities/niflheim.txt index 61dffb504..62bc29ad2 100644 --- a/npc/warps/cities/niflheim.txt +++ b/npc/warps/cities/niflheim.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Niflheim Warp Script //===== By: ================================================== //= PKGINGO (1.0) diff --git a/npc/warps/cities/payon.txt b/npc/warps/cities/payon.txt index 19f3009a3..9347bb05e 100644 --- a/npc/warps/cities/payon.txt +++ b/npc/warps/cities/payon.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Payon Warps //===== By: ================================================== //= Muad Dib (1.0) @@ -7,7 +7,7 @@ //===== Current Version: ===================================== //= 1.6 //===== Compatible With: ===================================== -//= Any eAthena Mod +//= Any rAthena Mod //===== Description: ========================================= //= Payon warps //===== Additional Comments: ================================= diff --git a/npc/warps/cities/prontera.txt b/npc/warps/cities/prontera.txt index e22d27c39..93948e678 100644 --- a/npc/warps/cities/prontera.txt +++ b/npc/warps/cities/prontera.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/cities/rachel.txt b/npc/warps/cities/rachel.txt index ea2917329..8610fa3bf 100644 --- a/npc/warps/cities/rachel.txt +++ b/npc/warps/cities/rachel.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rachel Warp Script //===== By: ================================================== //= erKURITA & RockmanEXE diff --git a/npc/warps/cities/splendide.txt b/npc/warps/cities/splendide.txt index 55b610785..4782f4c9f 100644 --- a/npc/warps/cities/splendide.txt +++ b/npc/warps/cities/splendide.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Splendide warp points. //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/warps/cities/umbala.txt b/npc/warps/cities/umbala.txt index bc03774a2..fee11e26a 100644 --- a/npc/warps/cities/umbala.txt +++ b/npc/warps/cities/umbala.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Umbala Warp Script //===== By: ================================================== //= Darkchild (1.0v A) diff --git a/npc/warps/cities/veins.txt b/npc/warps/cities/veins.txt index c18fbd4a5..251b0d14c 100644 --- a/npc/warps/cities/veins.txt +++ b/npc/warps/cities/veins.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Veins City Warp Script //===== By: ================================================== //= $ephiroth diff --git a/npc/warps/cities/yggdrasil.txt b/npc/warps/cities/yggdrasil.txt index a65ad4a12..92f084372 100644 --- a/npc/warps/cities/yggdrasil.txt +++ b/npc/warps/cities/yggdrasil.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yggdrasil Tree Warp Script //===== By: ================================================== //= PKGINGO (1.0) diff --git a/npc/warps/cities/yuno.txt b/npc/warps/cities/yuno.txt index 54d559f57..6503091ce 100644 --- a/npc/warps/cities/yuno.txt +++ b/npc/warps/cities/yuno.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yuno Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/abbey.txt b/npc/warps/dungeons/abbey.txt index 5ebef4d3a..437290a7d 100644 --- a/npc/warps/dungeons/abbey.txt +++ b/npc/warps/dungeons/abbey.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Abbey Dungeon Warp Script //===== By: ================================================== //= $ephiroth diff --git a/npc/warps/dungeons/abyss.txt b/npc/warps/dungeons/abyss.txt index 509c832e9..b669a3226 100644 --- a/npc/warps/dungeons/abyss.txt +++ b/npc/warps/dungeons/abyss.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Abyss Lake Dungeon Warp Script //===== By: ================================================== //= Muad-Dib (1.0) diff --git a/npc/warps/dungeons/alde_dun.txt b/npc/warps/dungeons/alde_dun.txt index 95ea751ce..a51ccf413 100644 --- a/npc/warps/dungeons/alde_dun.txt +++ b/npc/warps/dungeons/alde_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Al de Baran Dungeon Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/ama_dun.txt b/npc/warps/dungeons/ama_dun.txt index 91d360651..a13422204 100644 --- a/npc/warps/dungeons/ama_dun.txt +++ b/npc/warps/dungeons/ama_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Amatsu Dungeon Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/anthell.txt b/npc/warps/dungeons/anthell.txt index 9cb30b8f5..d33b1e42c 100644 --- a/npc/warps/dungeons/anthell.txt +++ b/npc/warps/dungeons/anthell.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ant Hell Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/ayo_dun.txt b/npc/warps/dungeons/ayo_dun.txt index cf4c154e8..c1b013baf 100644 --- a/npc/warps/dungeons/ayo_dun.txt +++ b/npc/warps/dungeons/ayo_dun.txt @@ -1,7 +1,7 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ayothaya Dungeon Warp Script //===== By: ================================================== -//= eAthena Team (1.0) +//= rAthena Team (1.0) //===== Current Version: ===================================== //= 1.1 //===== Compatible With: ===================================== diff --git a/npc/warps/dungeons/beach_dun.txt b/npc/warps/dungeons/beach_dun.txt index 4fd5f181c..13ba8b428 100644 --- a/npc/warps/dungeons/beach_dun.txt +++ b/npc/warps/dungeons/beach_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Comodo Dungeon Warp //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/bra_dun.txt b/npc/warps/dungeons/bra_dun.txt index 0c95f3642..a151ed645 100644 --- a/npc/warps/dungeons/bra_dun.txt +++ b/npc/warps/dungeons/bra_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Brasilis Dungeon Warp //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/warps/dungeons/c_tower.txt b/npc/warps/dungeons/c_tower.txt index d6f849da1..e75f8e449 100644 --- a/npc/warps/dungeons/c_tower.txt +++ b/npc/warps/dungeons/c_tower.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Al de Baran Clock Tower Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/ein_dun.txt b/npc/warps/dungeons/ein_dun.txt index 58ccdbe40..c0b1f69be 100644 --- a/npc/warps/dungeons/ein_dun.txt +++ b/npc/warps/dungeons/ein_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbroch Warp Script //===== By: ================================================== //= Sara-chan (1.3), SSUNNY@YOUNG(1.4) @@ -21,4 +21,4 @@ ein_dun02,286,292,0 warp ein012a 1,1,ein_dun01,261,258 ein_dun02,216,210,0 warp EinCave01A_EinCave01B 1,1,ein_dun02,208,228 ein_dun02,228,109,0 warp EinCave02A_EinCave02B 1,1,ein_dun02,191,130 ein_dun02,210,225,0 warp EinCave01B_EinCave01A 1,1,ein_dun02,216,207 -ein_dun02,195,130,0 warp EinCave02B_EinCave02A 1,1,ein_dun02,233,109 \ No newline at end of file +ein_dun02,195,130,0 warp EinCave02B_EinCave02A 1,1,ein_dun02,233,109 diff --git a/npc/warps/dungeons/gef_dun.txt b/npc/warps/dungeons/gef_dun.txt index 573032d0d..967c91c15 100644 --- a/npc/warps/dungeons/gef_dun.txt +++ b/npc/warps/dungeons/gef_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffen Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/gon_dun.txt b/npc/warps/dungeons/gon_dun.txt index 7924fb513..8e02b8a31 100644 --- a/npc/warps/dungeons/gon_dun.txt +++ b/npc/warps/dungeons/gon_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kunlun Dungeon Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/ice_dun.txt b/npc/warps/dungeons/ice_dun.txt index 7f030f507..dc6983008 100644 --- a/npc/warps/dungeons/ice_dun.txt +++ b/npc/warps/dungeons/ice_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Ice Dungeon Warp Script //===== By: ================================================== //= Playtester diff --git a/npc/warps/dungeons/in_sphinx.txt b/npc/warps/dungeons/in_sphinx.txt index d403f45f2..70f1f63f8 100644 --- a/npc/warps/dungeons/in_sphinx.txt +++ b/npc/warps/dungeons/in_sphinx.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morroc Sphinx Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/iz_dun.txt b/npc/warps/dungeons/iz_dun.txt index 199e35116..0ccc42db9 100644 --- a/npc/warps/dungeons/iz_dun.txt +++ b/npc/warps/dungeons/iz_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Izlude Dungeon Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/dungeons/juperos.txt b/npc/warps/dungeons/juperos.txt index 5a835d577..900b79d86 100644 --- a/npc/warps/dungeons/juperos.txt +++ b/npc/warps/dungeons/juperos.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Juperos Dungeon Warp Script //===== By: ================================================== //= Muad-Dib (1.0) //===== Current Version: ===================================== //= 1.7 //===== Compatible With: ===================================== -//= eAthena with independant npctimer support; RO Episode 8+ +//= rAthena with independant npctimer support; RO Episode 8+ //===== Description: ========================================= //= Warp Points for Juperos Dungeon //===== Additional Comments: ================================= diff --git a/npc/warps/dungeons/kh_dun.txt b/npc/warps/dungeons/kh_dun.txt index ee2337871..c19e324ca 100644 --- a/npc/warps/dungeons/kh_dun.txt +++ b/npc/warps/dungeons/kh_dun.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kiel Dungeon Warp Script //===== By: ================================================== //= Lost Kakashi //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= eAthena 1.0 +//= rAthena 1.0 //===== Description: ========================================= //= Warp Points for the Kiel Dungeon //===== Additional Comments: ================================= diff --git a/npc/warps/dungeons/lhz_dun.txt b/npc/warps/dungeons/lhz_dun.txt index d75a10276..d8d0f7c5e 100644 --- a/npc/warps/dungeons/lhz_dun.txt +++ b/npc/warps/dungeons/lhz_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lighthalzen Dungeon Warp Script //===== By: ================================================== //= Sara-chan (1.0) diff --git a/npc/warps/dungeons/lou_dun.txt b/npc/warps/dungeons/lou_dun.txt index b7e74692c..dc4c4a0e7 100644 --- a/npc/warps/dungeons/lou_dun.txt +++ b/npc/warps/dungeons/lou_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Louyang Dungeon Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/mag_dun.txt b/npc/warps/dungeons/mag_dun.txt index 2459241e2..b81bad620 100644 --- a/npc/warps/dungeons/mag_dun.txt +++ b/npc/warps/dungeons/mag_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yuno Dungeon Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/mjo_dun.txt b/npc/warps/dungeons/mjo_dun.txt index 38d4f163d..1c23dc572 100644 --- a/npc/warps/dungeons/mjo_dun.txt +++ b/npc/warps/dungeons/mjo_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Coal Mine Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/moc_pryd.txt b/npc/warps/dungeons/moc_pryd.txt index a8b8d2a35..fc50e2a14 100644 --- a/npc/warps/dungeons/moc_pryd.txt +++ b/npc/warps/dungeons/moc_pryd.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morroc Pyramid Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/mosk_dun.txt b/npc/warps/dungeons/mosk_dun.txt index 3d06bee85..30dc257e7 100644 --- a/npc/warps/dungeons/mosk_dun.txt +++ b/npc/warps/dungeons/mosk_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Moscovia Dungeon Warp Script //===== By: ================================================== //= Kisuka, $ephiroth diff --git a/npc/warps/dungeons/odin.txt b/npc/warps/dungeons/odin.txt index d9791115b..b87aa430f 100644 --- a/npc/warps/dungeons/odin.txt +++ b/npc/warps/dungeons/odin.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Odin Temple Warp Script //===== By: ================================================== //= birkiczd (1.0) diff --git a/npc/warps/dungeons/orcsdun.txt b/npc/warps/dungeons/orcsdun.txt index debd6217c..4f067f6c2 100644 --- a/npc/warps/dungeons/orcsdun.txt +++ b/npc/warps/dungeons/orcsdun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Orc Dungeon Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/pay_dun.txt b/npc/warps/dungeons/pay_dun.txt index fd9e196d4..5f513e899 100644 --- a/npc/warps/dungeons/pay_dun.txt +++ b/npc/warps/dungeons/pay_dun.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Payon Cave Warps //===== By: ================================================== //= Nana (1.0) //===== Current Version: ===================================== //= 1.2 //===== Compatible With: ===================================== -//= Any eAthena Mod +//= Any rAthena Mod //===== Description: ========================================= //= Payon Dungeon Warps //===== Additional Comments: ================================= diff --git a/npc/warps/dungeons/prt_maze.txt b/npc/warps/dungeons/prt_maze.txt index 558e8718e..6cfd23abd 100644 --- a/npc/warps/dungeons/prt_maze.txt +++ b/npc/warps/dungeons/prt_maze.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Dungeons Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/ra_san.txt b/npc/warps/dungeons/ra_san.txt index 052f46529..6b9076b5f 100644 --- a/npc/warps/dungeons/ra_san.txt +++ b/npc/warps/dungeons/ra_san.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rachel Sanctuary Dungeon Warp Script //===== By =================================================== //= Playtester diff --git a/npc/warps/dungeons/tha_t.txt b/npc/warps/dungeons/tha_t.txt index 94af4b8f7..ab707f62f 100644 --- a/npc/warps/dungeons/tha_t.txt +++ b/npc/warps/dungeons/tha_t.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Thanatos Tower Warps //===== By: ================================================== //= [Ishizu-chan] //===== Current Version: ===================================== //= 1.1 Beta //===== Compatible With: ===================================== -//= Any eAthena Version i guess? +//= Any rAthena Version i guess? //===== Description: ========================================= //= It's the Thanatos Tower Warps... //===== Additional Comments: ================================= diff --git a/npc/warps/dungeons/thor_v.txt b/npc/warps/dungeons/thor_v.txt index 50889886d..342a8bc6d 100644 --- a/npc/warps/dungeons/thor_v.txt +++ b/npc/warps/dungeons/thor_v.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Thor's Volcano Dungeon Warp Script //===== By: ================================================== //= $ephiroth diff --git a/npc/warps/dungeons/treasure.txt b/npc/warps/dungeons/treasure.txt index 217cd39c6..72d93c2eb 100644 --- a/npc/warps/dungeons/treasure.txt +++ b/npc/warps/dungeons/treasure.txt @@ -1,4 +1,4 @@ -//==== eAthena Script ======================================== +//==== rAthena Script ======================================== //= Treasure Island warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/tur_dun.txt b/npc/warps/dungeons/tur_dun.txt index f822cf6cc..e61147e7d 100644 --- a/npc/warps/dungeons/tur_dun.txt +++ b/npc/warps/dungeons/tur_dun.txt @@ -1,4 +1,4 @@ -//==== eAthena Script ======================================== +//==== rAthena Script ======================================== //= Turtle Island warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/dungeons/um_dun.txt b/npc/warps/dungeons/um_dun.txt index 816f57265..4d453432e 100644 --- a/npc/warps/dungeons/um_dun.txt +++ b/npc/warps/dungeons/um_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Umbala Dungeon (Yggdrasil Cave) Warp Script //===== By: ================================================== //= Darkchild (1.0vA); Athena (1.0vB) diff --git a/npc/warps/dungeons/xmas_dun.txt b/npc/warps/dungeons/xmas_dun.txt index d797e074e..96374f412 100644 --- a/npc/warps/dungeons/xmas_dun.txt +++ b/npc/warps/dungeons/xmas_dun.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lutie Dungeon (Toy Factory) Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/fields/abyss_warper.txt b/npc/warps/fields/abyss_warper.txt index d6acd9294..8c4ea1e1c 100644 --- a/npc/warps/fields/abyss_warper.txt +++ b/npc/warps/fields/abyss_warper.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Abyss Cave Warper //===== By: ================================================== //= erKURITA diff --git a/npc/warps/fields/amatsu_fild.txt b/npc/warps/fields/amatsu_fild.txt index 5b692921b..37e94c3b8 100644 --- a/npc/warps/fields/amatsu_fild.txt +++ b/npc/warps/fields/amatsu_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Amatsu Field Warp's //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/fields/com_fild.txt b/npc/warps/fields/com_fild.txt index 3eafebe27..765874af1 100644 --- a/npc/warps/fields/com_fild.txt +++ b/npc/warps/fields/com_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Comodo Field Warp Script //===== By: ================================================== //= Nana diff --git a/npc/warps/fields/ein_fild.txt b/npc/warps/fields/ein_fild.txt index ef9cba74a..c83a13b1e 100644 --- a/npc/warps/fields/ein_fild.txt +++ b/npc/warps/fields/ein_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Einbroch Field Warp Script //===== By: ================================================== //= Sara-chan (1.0), SSUNNY@YOUNG(1.2) diff --git a/npc/warps/fields/gefenia.txt b/npc/warps/fields/gefenia.txt index b7707192f..832bdea74 100644 --- a/npc/warps/fields/gefenia.txt +++ b/npc/warps/fields/gefenia.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Gefenia Warp Script //===== By: ================================================== //= Muad Dib (1.0) diff --git a/npc/warps/fields/geffen_fild.txt b/npc/warps/fields/geffen_fild.txt index 657f5280d..08b0e46e2 100644 --- a/npc/warps/fields/geffen_fild.txt +++ b/npc/warps/fields/geffen_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Geffen Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/fields/glastheim.txt b/npc/warps/fields/glastheim.txt index 1564710da..e5d2d359b 100644 --- a/npc/warps/fields/glastheim.txt +++ b/npc/warps/fields/glastheim.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Glastheim Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/fields/hugel_fild.txt b/npc/warps/fields/hugel_fild.txt index 45c06ac9f..8b5de97b2 100644 --- a/npc/warps/fields/hugel_fild.txt +++ b/npc/warps/fields/hugel_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Hugel Field Warp Script //===== By: ================================================== //= Sara-chan (1.0) diff --git a/npc/warps/fields/jawaii.txt b/npc/warps/fields/jawaii.txt index 78cae5473..024f97c1f 100644 --- a/npc/warps/fields/jawaii.txt +++ b/npc/warps/fields/jawaii.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Jawaii Warp Script //===== By: ================================================== //= Muad Dib (1.0) diff --git a/npc/warps/fields/lhalzen_fild.txt b/npc/warps/fields/lhalzen_fild.txt index aa2e87bbb..10a5b5d7e 100644 --- a/npc/warps/fields/lhalzen_fild.txt +++ b/npc/warps/fields/lhalzen_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lighthalzen Field Warp Script //===== By: ================================================== //= Sara-chan (1.0) diff --git a/npc/warps/fields/lutie_fild.txt b/npc/warps/fields/lutie_fild.txt index 2adb2ed5d..8e944bd81 100644 --- a/npc/warps/fields/lutie_fild.txt +++ b/npc/warps/fields/lutie_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Lutie Field Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/fields/man_fild.txt b/npc/warps/fields/man_fild.txt index e7956da43..55e799a69 100644 --- a/npc/warps/fields/man_fild.txt +++ b/npc/warps/fields/man_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Manuk Field Warp Script //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/warps/fields/morroc_fild.txt b/npc/warps/fields/morroc_fild.txt index 9d4944589..6cd6c64b5 100644 --- a/npc/warps/fields/morroc_fild.txt +++ b/npc/warps/fields/morroc_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Morroc Field Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/fields/mtmjolnir.txt b/npc/warps/fields/mtmjolnir.txt index 08bb6afa7..1c49ddc96 100644 --- a/npc/warps/fields/mtmjolnir.txt +++ b/npc/warps/fields/mtmjolnir.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Mt. Mjolnir Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/fields/payon_fild.txt b/npc/warps/fields/payon_fild.txt index 9f9a76c78..d991f2280 100644 --- a/npc/warps/fields/payon_fild.txt +++ b/npc/warps/fields/payon_fild.txt @@ -1,11 +1,11 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Payon Field Warps //===== By: ================================================== //= Nana (1.0) //===== Current Version: ===================================== //= 1.3 //===== Compatible With: ===================================== -//= Any eAthena Mod +//= Any rAthena Mod //===== Description: ========================================= //= Payon Field Warps //===== Additional Comments: ================================= diff --git a/npc/warps/fields/prontera_fild.txt b/npc/warps/fields/prontera_fild.txt index 677da8c5f..e3461bb2a 100644 --- a/npc/warps/fields/prontera_fild.txt +++ b/npc/warps/fields/prontera_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Field Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/fields/rachel_fild.txt b/npc/warps/fields/rachel_fild.txt index 90002c8ad..475557200 100644 --- a/npc/warps/fields/rachel_fild.txt +++ b/npc/warps/fields/rachel_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Rachel Field Warp Script //===== By: ================================================== //= Playtester diff --git a/npc/warps/fields/spl_fild.txt b/npc/warps/fields/spl_fild.txt index 568735158..1860636ff 100644 --- a/npc/warps/fields/spl_fild.txt +++ b/npc/warps/fields/spl_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Splendid Field Warp Script //===== By: ================================================== //= L0ne_W0lf diff --git a/npc/warps/fields/umbala_fild.txt b/npc/warps/fields/umbala_fild.txt index 519828dc9..1282257e4 100644 --- a/npc/warps/fields/umbala_fild.txt +++ b/npc/warps/fields/umbala_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Umbala Field Warp Script //===== By: ================================================== //= Nana (1.0) diff --git a/npc/warps/fields/veins_fild.txt b/npc/warps/fields/veins_fild.txt index 6634bb847..ac05163ff 100644 --- a/npc/warps/fields/veins_fild.txt +++ b/npc/warps/fields/veins_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Veins Field Warp Script //===== By: ================================================== //= $ephiroth diff --git a/npc/warps/fields/yuno_fild.txt b/npc/warps/fields/yuno_fild.txt index 331c4e853..32d1924f5 100644 --- a/npc/warps/fields/yuno_fild.txt +++ b/npc/warps/fields/yuno_fild.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Yuno Field Warp Script //===== By: ================================================== //= Nana (1.0), Sara diff --git a/npc/warps/guild/guildcastles.txt b/npc/warps/guild/guildcastles.txt index 5283340af..a7f33e768 100644 --- a/npc/warps/guild/guildcastles.txt +++ b/npc/warps/guild/guildcastles.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Guild Castles Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/other/airplane.txt b/npc/warps/other/airplane.txt index 69e97c520..20025ba1f 100644 --- a/npc/warps/other/airplane.txt +++ b/npc/warps/other/airplane.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Airports & Airplanes Warp Script //===== By: ================================================== //= Sara-chan (1.0), SSUNNY@YOUNG(1.6) diff --git a/npc/warps/other/arena.txt b/npc/warps/other/arena.txt index 2ccaf6dcd..f0bb7e8df 100644 --- a/npc/warps/other/arena.txt +++ b/npc/warps/other/arena.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Arena Warps //===== By: ================================================== //= SinSloth @@ -69,4 +69,4 @@ DLGTEMP: mes "Closing control panel."; close; } -} \ No newline at end of file +} diff --git a/npc/warps/other/god.txt b/npc/warps/other/god.txt index 6ff9e65e8..f649b7e57 100644 --- a/npc/warps/other/god.txt +++ b/npc/warps/other/god.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= God Seal Quest Warps //===== By: ================================================== //= MasterOfMuppets && SinSloth diff --git a/npc/warps/other/jobquests.txt b/npc/warps/other/jobquests.txt index 1ccbdd94d..13b2da8ea 100644 --- a/npc/warps/other/jobquests.txt +++ b/npc/warps/other/jobquests.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Job Quest Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/other/kiel.txt b/npc/warps/other/kiel.txt index e43b754dd..76df1b28f 100644 --- a/npc/warps/other/kiel.txt +++ b/npc/warps/other/kiel.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Kiel Warp Script (Kiel Buildings) //===== By: ================================================== //= Playtester; L0ne_W0lf diff --git a/npc/warps/other/other.txt b/npc/warps/other/other.txt index 9e6bd30e2..011494794 100644 --- a/npc/warps/other/other.txt +++ b/npc/warps/other/other.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Other Warp Script //===== By: ================================================== //= Athena (1.0) diff --git a/npc/warps/other/sign.txt b/npc/warps/other/sign.txt index 566dbebd0..b4e3d370c 100644 --- a/npc/warps/other/sign.txt +++ b/npc/warps/other/sign.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Sign Quest Warps //===== By: ================================================== //= MasterOfMuppets diff --git a/npc/warps/pvp/pvp.txt b/npc/warps/pvp/pvp.txt index 13dd53250..da82d6d09 100644 --- a/npc/warps/pvp/pvp.txt +++ b/npc/warps/pvp/pvp.txt @@ -1,4 +1,4 @@ -//===== eAthena Script ======================================= +//===== rAthena Script ======================================= //= Prontera Arena & PvP Warp Script //===== By: ================================================== //= Athena (any) -- cgit v1.2.3-70-g09d2 From 75593a22c85de975b136fc261c477735d3bc407f Mon Sep 17 00:00:00 2001 From: shennetsind Date: Sun, 1 Jan 2012 18:00:20 +0000 Subject: Added new @/# command aliases pattern, all aliases can now be modified/added/removed in the front-end within atcommand_conf (no longer hardcoded). The aliases pattern was defined in this topic: tid:56343 atcommand_conf file rewrite/update belongs to Jguy and BrianL git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15343 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 460 +++++++++++++++++++--------- src/map/atcommand.c | 745 +++++++++++++++++++++++---------------------- src/map/atcommand.h | 2 +- src/map/clif.c | 40 +-- src/map/mail.c | 2 +- src/map/map.c | 1 - src/map/pc.c | 2 +- 7 files changed, 717 insertions(+), 535 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 76b0dacc9..67512206b 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -1,15 +1,16 @@ +//-------------------------------------------------------------- +// rAthena atcommand/charcommand Configuration File //-------------------------------------------------------------- -// rAthena atcommand configuration file. -// Originally translated by Peter Kieser -//-------------------------------------------------------------- + // The symbol that will be used to recognize commands. // You can set any one character except control-characters (0x00-0x1f), // '%', '$' (party/guild chat speaking) and '/' (standard client commands). // command_symbol represents @commands used locally // char_symbol represents #commands used on other players. -command_symbol: @ -char_symbol: # +command_symbol:@ +char_symbol:# + // The following settings in this file use the format ": level(@),level(#)". // They define the minimum GM level required to execute the associated command. @@ -19,6 +20,7 @@ char_symbol: # // (GM level 0), you also need to change the 'atcommand_gm_only' option to 'no'. // To completely disable a command, set its required GM level to 100. + // Default levels were chosen so that they form the following hierarchy: // 0: Normal player // -> no commands accessible @@ -42,81 +44,107 @@ char_symbol: # // -> commands that will not be available to anyone +// Syntax of file: +// command: @level,#level [] + + +// Example: +// command: 40,40 [alias,command2,alias2] + + + + //-------------------------- // 0: normal player commands // None for security purposes. + //------------------------- // 1: Super player commands + // Displays a list of @ commands available to the player. commands: 1,1 + // Displays a list of # commands available to the player. charcommands: 1,1 + // Displays the server rates. rates: 1,1 -// Show server uptime + +// Show server uptime since last map server restart uptime: 1,1 + // Shows/Hides the "there is a delay after a skill" message. showdelay: 1,1 + // Displays current levels and % progress. exp: 1,40 -// To change your (own) email (characters protection) + +// To change your (own) email // note: this command doesn't check email itself, but check structure of the email (xxx@xxx) // if you want be sure of each e-mail disable this option (value: 100) -email: 1,1 +email: 1,60 + // Show Monster info (rates, stats, drops, MVP stuff) -mobinfo: 1,1 -monsterinfo: 1,1 -mi: 1,1 +monsterinfo: 1,1 [mobinfo, mi] + // Show Item info (type, price, etc) -iteminfo: 1,1 -ii: 1,1 +iteminfo: 1,1 [ii] + // Show who drops an item (mobs with highest drop rate) whodrops: 1,1 + // Syncs the player's position on the client with the one stored on the server. refresh: 1,40 -// Give server time. (6 same commands) -time: 1,1 -date: 1,1 -serverdate: 1,1 -servertime: 1,1 + +// Give server time. (4 same commands) +time: 1,1 [date,serverdate,servertime] + // Displays SVN version of the server. version: 1,1 + // Suicide your character. die: 1,1 + // Enables you to rename your pet. petrename: 1,50 -// Organize a new party, with you as the party leader. + +// Organize a new party, with you as the party leader party: 1,1 -// Brings up your personal storage wherever you are. + +// Opens your Kafra storage wherever you are storage: 1,1 -// Opens your mailbox. + +// Opens your mailbox mail: 1,1 -// Opens auctions window. + +// Opens auctions window auction: 1,1 + // Locate someone on a map, returns your coordinates if the person isn't on. where: 1,1 + // Duel organizing commands duel: 1,1 invite: 1,1 @@ -124,62 +152,80 @@ accept: 1,1 reject: 1,1 leave: 1,1 + // Main chat main: 1,1 + // Autorejecting Deals/Invites noask: 1,1 + // Displays remaining jail time jailtime: 1,40 + // Homunculus commands for players hominfo: 1,40 homstats: 1,40 + // Kill Steal Protection noks: 1,1 + // Set Font font: 1,1 + //--------------------------- // 10: Super player+ commands -// Displays/Hides Experience gained + +// Displays/Hides Experience gained messages showexp: 10,10 -// Displays/Hides Zeny gained + +// Displays/Hides Zeny gained messages showzeny: 10,10 + // Warps you to predefined locations in major cities. go: 10,10 + // Enables/disables autolooting from killed mobs. autoloot: 10,10 + // Enables/disables autolooting an item. alootid: 10,10 + // Allows you continue vending offline. -autotrade: 10,10 -at: 10,10 +autotrade: 10,10 [at] + // Change Guild Master of your Guild changegm: 10,10 + // Change the leader of your party. changeleader: 10,10 + // Change the party exp- and item share rules. partyoption: 10,10 + // Command what the player's pet will say. pettalk: 10,10 + // Command what the player's homunculus will say. homtalk: 10,10 + // Locates and displays the position of a certain mob on the current map. mobsearch: 10,10 // Locates and displays the position of a certain mob on your mini-map @@ -187,95 +233,115 @@ showmobs: 10,10 // Prints out in which maps a monster normally spawns at (does not count script-invoked mobs) whereis: 10,10 + // Resets a Star Gladiator's marked maps feelreset: 10,60 + //---------------------- // 20: Mediator commands + // Displays helpfile in rAthena base directory (2 same commands). -help: 20,20 -h: 20,20 -help2: 20,20 -h2: 20,20 +help: 20,20 [h] +help2: 20,20 [h2] + // Warp yourself to a person (3 same commands + /shift). -jumpto: 20,20 -goto: 20,20 -warpto: 20,20 +goto: 20,20 [jumpto,warpto] + // Displays the motd file to all players gmotd: 20,20 + // Follow a player (including warping to them) follow: 20,20 + // Sends a request to all connected GMs (via the gm whisper system) request: 20,100 + // Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). kick: 20,20 + // Changes your appearance. model: 20,50 + // To get a peco to (un)ride (2 same commands). -mountpeco: 20,50 -mount: 20,50 +mount: 20,50 [mountpeco] + // Returns list of logged in characters with their position (2 same commands). -who: 20,20 -whois: 20,20 +who: 20,20 [whois] + // Returns list of logged in characters with their job. who2: 20,20 + // Returns list of logged in characters with their party/guild. who3: 20,20 + // Returns list of logged in characters with their position in a specifical map. whomap: 20,20 + // Returns list of logged in characters with their job in a specifical map. whomap2: 20,20 + // Returns list of logged in characters with their party/guild in a specifical map. whomap3: 20,20 + // Displays GMs online. For those who are higher GM level than yourself, // only the name is shown, for the rest, it displays the same info of // @who+@who2+who3 whogm: 20,20 + // Change your appearence to other players to a mob. disguise: 20,60 + // Restore your normal appearance. undisguise: 20,20 + // Displays the text as a normal message with the format "*name message*" // instead of "name : message" (Like the /me command in IRC) me: 20,20 + // Changes your name to your choice temporarily. fakename: 20,50 + // Changes your size. size: 20,50 + // Can command what other npcs (by name) can say. -npctalk: 20,100 -npctalkc: 20,100 +npctalk: 20,100 [npctalkc] + //-------------------- // 40: Sub-GM commands + // Broadcast to the whole server. Using (1 command + /nb, /b). broadcast: 40,40 + // Broadcast to the map you are on (1 command + /lb, /nlb). localbroadcast: 40,40 + // Broadcast (with or without name) kami: 40,40 // Same as kami but with blue color @@ -283,267 +349,326 @@ kamib: 40,40 // Same as kami but you can choose the color (uses different packet) kamic: 40,40 + // Enables GvG on a map (2 same commands). -gvgon: 40,100 -gpvpon: 40,100 +gvgon: 40,100 [gpvpon] + // Turns GvG (Guild vs. Guild) off on a map (2 same commands). -gvgoff: 40,100 -gpvpoff: 40,100 +gvgoff: 40,100 [gpvpoff] + // Activate/Deactivate kill steal protection on a map allowks: 40,100 + // Modifies your HP/SP. heal: 40,60 + // GM Hide (total invisibility to characters and monsters) (1 command + /hide). hide: 40,60 + // Changes your job to one you specify (2 same commands). -job: 40,60 -jobchange: 40,60 +job: 40,60 [jobchange] + // Enables you to to jump randomly on a map (that you are already on). jump: 40,40 + // Warps you to your last save point (2 same commands). -load: 40,60 -return: 40,60 +load: 40,60 [return] + // Warps you to a specific npc tonpc: 40,40 + // Saves a warp point. memo: 40,40 + // Set your character display options. (Visual effects of your character) option: 40,60 + // Sets the level of intemecy of your pet. petfriendly: 40,50 + // Sets hunger level of your pet. pethungry: 40,50 + // Turns PvP (Person vs. Person) off on a map. pvpoff: 40,100 + // Enables PvP on a map. pvpon: 40,100 -// Permanently adds/removes a quest skill + +// Permanently adds a quest skill questskill: 40,60 + + +// Permanently removes a quest skill lostskill: 40,60 + // Sets the speed you can walk/attack at. Default is 150. speed: 40,60 + // Summons spirit spheres around you. spiritball: 40,60 -// Warp yourself to a certain map, at (x,y) coordinates (2 same commands). -mapmove: 40,60 // (also /mm or /mapmove) -rura: 40,60 -warp: 40,60 + +// Warp yourself to a certain map, at (x,y) coordinates (2 same commands) + also /mm or /mapmove. +warp: 40,60 [rura,mapmove] + // Changes GM clothes color (2 same commands) -dye: 40,50 -ccolor: 40,50 +dye: 40,50 [ccolor] + // Changes GM hair style (2 same commands) -hairstyle: 40,40 -hstyle: 40,40 +hairstyle: 40,40 [hstyle] + // Changes GM hair color (2 same commands) -haircolor: 40,50 -hcolor: 40,50 +haircolor: 40,50 [hcolor] + // Deletes all your items. itemreset: 40,60 + // Does a skill/stat reset. reset: 40,60 + // Displays distribution of players on the server per map (% on each map which has players) users: 40,40 + // Deletes floor items in your range of sight cleanmap: 40,40 + // Kill all monsters in map (without drops) killmonster2: 40,40 + // Sets your spawn point (aka save point). save: 40,60 + // Do some visual effect on your character effect: 40,40 + // Do some visual effect on your character (misceffect) misceffect: 40,40 + // GM's magnifier identify: 40,40 + // Drop all your items dropall: 40,60 + // Store all your items storeall: 40,60 + // Allow other players to hit you out of PvP killable: 40,60 + // Look up a skill by name skillid: 40,40 + // Use a skill by id useskill: 40,40 + // What skills are required to get this skill skilltree: 40,40 + // Marriage commands marry: 40,40 divorce: 40,40 + // Adopt a novice into a family adopt: 40,40 + // Play a Sound! sound: 40,40 + // Displays a player's storage storagelist: 40,40 + // Displays a player's cart contents cartlist: 40,40 + // Displays a player's items itemlist: 40,40 + // Displays a player's stats stats: 40,40 + //--------------------- // 50: Sub-GM+ commands + // Creates a new guild, with you as the guildmaster. guild: 50,50 + // Brings up your guild storage wherever you are. gstorage: 50,60 + // Spawns a monster, and a certain amount (2 same commands + /monster). -monster: 50,50 -spawn: 50,50 +monster: 50,50 [spawn] + // Spawns a smaller sized version of a monster. monstersmall: 50,50 + // Spawns a larger sized version of a monster. monsterbig: 50,50 + // Spawns mobs that treat you as their master (they disappear after some time) summon: 50,50 + // It will spawn a supportive clone of the given player. clone: 50,50 + // It will spawn a supportive clone of the given player that follows the creator around. slaveclone: 50,50 + // It will spawn an aggresive clone of the given player. evilclone: 50,50 + + //---------------- // 60: GM commands -// Add or Remove Cash/Kafra points to yourself + +// Add or Remove Cash Points to/from yourself cash: 60,60 + + +// Add or Remove Kafra Points to/from yourself points: 60,60 + // Starts Guild Wars agitstart: 60,100 + // Ends Guild Wars agitend: 60,100 + // Resurects yourself. alive: 60,60 -// Levels your character to specified level (adds to your level) (7 same commands). -blvl: 60,60 -lvup: 60,60 -blevel: 60,60 -baselvl: 60,60 -baselvup: 60,60 -baselevel: 60,60 -baselvlup: 60,60 - -// Raises your job level (6 same commands). -jlvl: 60,60 -jlevel: 60,60 -joblvl: 60,60 -joblvup: 60,60 -joblevel: 60,60 -joblvlup: 60,60 + +// Raises your base level by specified amount (7 same commands). +blvl: 60,60 [lvup,blevel,baselvl,baselvup,baselevel,baselvlup] + + +// Raises your job level by specified amount (6 same commands). +jlvl: 60,60 [jlevel,joblvl,joblvup,joblevel,joblvlup] + // Changes the sex of yourself changesex: 60,60 -// Levels your guild to specified level (2 same commands). -glvl: 60,60 -glevel: 60,60 -guildlvl: 60,60 -guildlvup: 60,60 -guildlevel: 60,60 -guildlvlup: 60,60 + +// Raises your guild level by specified amount (6 same commands). +glvl: 60,60 [glevel,guildlvl,guildlvup,guildlevel,guildlvlup] + // Find an itemID based on item name idsearch: 60,60 + // Creates an item of your choosing, either Item ID or Name (1 command + /item). item: 60,60 + // Creates a complet item (card, etc...) of your choosing, either Item ID or Name. item2: 60,60 + // Deletes an item of your choosing, either Item ID or Name. delitem: 60,60 + // Kill another character without hitting them. kill: 60,60 + // Kill all monsters in map (with drops) killmonster: 60,60 + // Creates yourself a pet egg. makeegg: 60,60 + // Hatches an egg hatch: 60,60 + // Instantly kills player whose name is entered and deals insane damage to everything around nuke: 60,60 + // Enable hitting a player even when not in PvP killer: 60,60 + // Creates weapon of desired element. produce: 60,60 + // Warps a character to you (1 command + /recall). recall: 60,60 + // Refines all weapons in your items list. refine: 60,80 + // Will repair all broken items in inventory. repairall: 60,60 + // Change Status of your character str: 60,60 agi: 60,60 @@ -552,260 +677,313 @@ int: 60,60 dex: 60,60 luk: 60,60 -// Gets all skills (4 same commands) -allskill: 60,60 -allskills: 60,60 -skillall: 60,60 -skillsall: 60,60 -// Sets GM stats to maximum (4 same commands) -statall: 60,60 -statsall: 60,60 -allstats: 60,60 -allstat: 60,60 +// Gives all skills +allskill: 60,60 [allskills,skillall,skillsall] + + +// Sets GM stats to maximum +allstats: 60,60 [allstat,statall,statsall] + -// Gives you job points. +// Gives you stat points. stpoint: 60,60 + // Gives you skill points of desired amount. skpoint: 60,60 + // Warps all online character of a guild to you. (at least one member of that guild must be on.) guildrecall: 60,60 -// Warps all online character of a party to you. (at least one party member must be online.) + +// Warps all online character of a party to you. +// (at least one party member must be online.) partyrecall: 60,60 -// Allows you to spy on any Guilds Guild chat. (at least one member of that guild must be on.) + +// Allows you to spy on any Guilds Guild chat. +// (at least one member of that guild must be on.) // NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) guildspy: 60,60 -// Allows you to spy on any party's party chat. (at least one party member must be online.) + +// Allows you to spy on any party's party chat. +// (at least one party member must be online.) // NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) partyspy: 60,60 -// Gives you money (zeny) of desired amount. + +// Gives you zeny (or subtracts, if amount is negative) zeny: 60,80 -// To block definitively a player (2 same commands) -block: 60,100 -charblock: 60,100 -// To unblock a player (2 same commands) -unblock: 60,100 -charunblock: 60,100 +// Block a player indefinitely +block: 60,100 [charblock] + + +// Unblock a player +unblock: 60,100 [charunblock] -// To ban a player for a limited time (4 same commands) -ban: 60,100 -banish: 60,100 -charban: 60,100 -charbanish: 60,100 -// To unban a player (4 same commands) -unban: 60,100 -unbanish: 60,100 -charunban: 60,100 -charunbanish: 60,100 +// Ban a player for a limited time +ban: 60,100 [banish,charban,charbanish] + + +// Unban a player +unban: 60,100 [unbanish,charunban,charunbanish] + // To send specified character in jails jail: 60,100 -// To discharge a prisoner (2 same commands) -unjail: 60,100 -discharge: 60,100 + +// To discharge a jailed character (2 same commands) +unjail: 60,100 [discharge] + // Timed jailing jailfor: 60,60 + // Create a static warp portal that lasts until the next reboot addwarp: 60,60 + // Open a trade window with any player trade: 60,60 + // Changes the player's appearance (headgear) changelook: 60,60 + // Homunculus commands for GMs -hlvl: 60,60 -hlevel: 60,60 -homlvl: 60,60 -homlvup: 60,60 -homlevel: 60,60 -homevolve: 60,60 -homevolution: 60,60 +hlvl: 60,60 [homlevel,hlevel,homlvl,homlvup] + + +homevolve: 60,60 [homevolution] + + makehomun: 60,60 + + homfriendly: 60,60 + + homhungry: 60,60 + // Re-calculates stats, as if the homun was sent back to level 1 and re-leveled homshuffle: 60,60 + // WoE 2 start/stop commands agitstart2: 60,100 agitend2: 60,100 + // Resets player stats streset: 60,60 + // Resets player skills skreset: 60,60 + + //---------------------- // 80: GM Chief commands + // Set the server to day. day: 80,100 + +// Set the server to night. +night: 80,100 + + // Kills everyone on the server. doom: 80,100 + // Kills everyone on the map you are on. doommap: 80,80 -// Set the server to night. -night: 80,100 // Recalls Everyone To Your Coordinates recallall: 80,80 + // Revives all players on the map. raisemap: 80,80 + // Revives all players on the server. raise: 80,100 + // Hides a NPC. hidenpc: 80,100 + // Unhides a NPC. shownpc: 80,100 -// Loads a Script + +// Loads an NPC script by path loadnpc: 80,100 + // Unloads a NPC unloadnpc: 80,100 + // Move a NPC npcmove: 80,100 + // turn skills on for a map skillon: 80,100 + // turn skills off for a map skilloff: 80,100 + // Mute a player (prevents talking, usage of skills and commands) mute: 80,100 + // Unmute a player unmute: 80,100 + //--------------------------- // 99: Administrator commands + // Disconnect all users from the server kickall: 99,100 + // Closes Map-Server mapexit: 99,100 + // Used for testing packet sends from the client (debug function) send: 99,100 + // Give information about terrain/area (debug function) gat: 99,100 + // Displays a status change without really applying it (debug function) displaystatus: 99,100 + // Displays the animation of a skill without really using it (debug function) displayskill: 99,100 + // Shows information about the map mapinfo: 99,100 -// Set Map Flags (WIP) + +// Set Map Flags mapflag: 99,100 + // Re-load item database (admin command) reloaditemdb: 99,100 + // Re-load monsters database (admin command) reloadmobdb: 99,100 + // Re-load skills database (admin command) reloadskilldb: 99,100 + // Re-load scripts (admin command) reloadscript: 99,100 + // Change a battle_config flag without rebooting server setbattleflag: 99,100 + // Re-load gm command config (admin command) reloadatcommand: 99,100 + // Re-load battle config (admin command) // Note that some player config settings won't take effect until relog // (display exp, display zeny, display skill delay fail, ...) reloadbattleconf: 99,100 + // Re-load status database (admin command) reloadstatusdb: 99,100 + // Re-load player info database (admin command) reloadpcdb: 99,100 + // Re-load the Message of the Day (admin command) reloadmotd: 99,100 + // Changes the GM level of another character // (lasts until reboot, or gm list reload) adjgmlvl: 99,100 + // Changes the required GM level of an @ command // (effect lasts until restart or command reload) adjcmdlvl: 99,100 + // [Un]Disguise All Players (admin command) disguiseall: 99,100 undisguiseall: 99,100 + // Mutes every player on screen (admin command) -mutearea: 99,100 -stfu: 99,100 +mutearea: 99,100 [stfu] + // Makes you immune to attacks (monsters/players/skills cannot target/hit you, admin command) -monsterignore: 99,100 -battleignore: 99,100 +battleignore: 99,100 [monsterignore] + //--------------------------------------------------------------- // 99: Weather effects - snow: 99,100 - clouds: 99,100 - clouds2: 99,100 - fog: 99,100 - fireworks: 99,100 - sakura: 99,100 +leaves: 99,100 -leaves:99,100 // Stop all weather effects clearweather: 99,100 + //--------------------------------------------------------------- // 100: Disabled commands + //--------------------- // OTHER: not a command -import: conf/import/atcommand_conf.txt + +import:conf/import/atcommand_conf.txt \ No newline at end of file diff --git a/src/map/atcommand.c b/src/map/atcommand.c index 7c7939211..a546e4b9b 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -53,6 +53,8 @@ char* msg_table[MAX_MSG]; // Server messages (0-499 reserved for GM commands, 50 // local declarations #define ACMD_FUNC(x) int atcommand_ ## x (const int fd, struct map_session_data* sd, const char* command, const char* message) +DBMap* atcommand_db = NULL;//name -> AtCommandInfo + typedef struct AtCommandInfo { const char* command; @@ -62,7 +64,6 @@ typedef struct AtCommandInfo } AtCommandInfo; static AtCommandInfo* get_atcommandinfo_byname(const char* name); -static AtCommandInfo* get_atcommandinfo_byfunc(const AtCommandFunc func); ACMD_FUNC(commands); @@ -4268,9 +4269,9 @@ ACMD_FUNC(reloadskilldb) /*========================================== * @reloadatcommand - reloads atcommand_athena.conf *------------------------------------------*/ -ACMD_FUNC(reloadatcommand) -{ - atcommand_config_read(ATCOMMAND_CONF_FILENAME); +void atcommand_doload(); +ACMD_FUNC(reloadatcommand) { + atcommand_doload(); clif_displaymessage(fd, msg_txt(254)); return 0; } @@ -8800,340 +8801,289 @@ ACMD_FUNC(new_mount) { } return 0; } -/*========================================== - * atcommand_info[] structure definition - *------------------------------------------*/ - -AtCommandInfo atcommand_info[] = { - { "rura", 40,40, atcommand_mapmove }, - { "warp", 40,40, atcommand_mapmove }, - { "mapmove", 40,40, atcommand_mapmove }, // + /mm - { "where", 1,1, atcommand_where }, - { "jumpto", 20,20, atcommand_jumpto }, // + /shift - { "warpto", 20,20, atcommand_jumpto }, - { "goto", 20,20, atcommand_jumpto }, - { "jump", 40,40, atcommand_jump }, - { "who", 20,20, atcommand_who }, - { "whois", 20,20, atcommand_who }, - { "who2", 20,20, atcommand_who2 }, - { "who3", 20,20, atcommand_who3 }, - { "whomap", 20,20, atcommand_whomap }, - { "whomap2", 20,20, atcommand_whomap2 }, - { "whomap3", 20,20, atcommand_whomap3 }, - { "whogm", 20,20, atcommand_whogm }, - { "save", 40,40, atcommand_save }, - { "return", 40,40, atcommand_load }, - { "load", 40,40, atcommand_load }, - { "speed", 40,40, atcommand_speed }, - { "storage", 1,1, atcommand_storage }, - { "gstorage", 50,50, atcommand_guildstorage }, - { "option", 40,40, atcommand_option }, - { "hide", 40,40, atcommand_hide }, // + /hide - { "jobchange", 40,40, atcommand_jobchange }, - { "job", 40,40, atcommand_jobchange }, - { "die", 1,1, atcommand_die }, - { "kill", 60,60, atcommand_kill }, - { "alive", 60,60, atcommand_alive }, - { "kami", 40,40, atcommand_kami }, - { "kamib", 40,40, atcommand_kami }, - { "kamic", 40,40, atcommand_kami }, - { "heal", 40,60, atcommand_heal }, - { "item", 60,60, atcommand_item }, - { "item2", 60,60, atcommand_item2 }, - { "itemreset", 40,40, atcommand_itemreset }, - { "blvl", 60,60, atcommand_baselevelup }, - { "lvup", 60,60, atcommand_baselevelup }, - { "blevel", 60,60, atcommand_baselevelup }, - { "baselvl", 60,60, atcommand_baselevelup }, - { "baselvup", 60,60, atcommand_baselevelup }, - { "baselevel", 60,60, atcommand_baselevelup }, - { "baselvlup", 60,60, atcommand_baselevelup }, - { "jlvl", 60,60, atcommand_joblevelup }, - { "jlevel", 60,60, atcommand_joblevelup }, - { "joblvl", 60,60, atcommand_joblevelup }, - { "joblevel", 60,60, atcommand_joblevelup }, - { "joblvup", 60,60, atcommand_joblevelup }, - { "joblvlup", 60,60, atcommand_joblevelup }, - { "h", 20,20, atcommand_help }, - { "help", 20,20, atcommand_help }, - { "h2", 20,20, atcommand_help2 }, - { "help2", 20,20, atcommand_help2 }, - { "pvpoff", 40,40, atcommand_pvpoff }, - { "pvpon", 40,40, atcommand_pvpon }, - { "gvgoff", 40,40, atcommand_gvgoff }, - { "gpvpoff", 40,40, atcommand_gvgoff }, - { "gvgon", 40,40, atcommand_gvgon }, - { "gpvpon", 40,40, atcommand_gvgon }, - { "model", 20,20, atcommand_model }, - { "go", 10,10, atcommand_go }, - { "monster", 50,50, atcommand_monster }, - { "spawn", 50,50, atcommand_monster }, - { "monstersmall", 50,50, atcommand_monstersmall }, - { "monsterbig", 50,50, atcommand_monsterbig }, - { "killmonster", 60,60, atcommand_killmonster }, - { "killmonster2", 40,40, atcommand_killmonster2 }, - { "refine", 60,60, atcommand_refine }, - { "produce", 60,60, atcommand_produce }, - { "memo", 40,40, atcommand_memo }, - { "gat", 99,99, atcommand_gat }, - { "displaystatus", 99,99, atcommand_displaystatus }, - { "stpoint", 60,60, atcommand_statuspoint }, - { "skpoint", 60,60, atcommand_skillpoint }, - { "zeny", 60,60, atcommand_zeny }, - { "str", 60,60, atcommand_param }, - { "agi", 60,60, atcommand_param }, - { "vit", 60,60, atcommand_param }, - { "int", 60,60, atcommand_param }, - { "dex", 60,60, atcommand_param }, - { "luk", 60,60, atcommand_param }, - { "glvl", 60,60, atcommand_guildlevelup }, - { "glevel", 60,60, atcommand_guildlevelup }, - { "guildlvl", 60,60, atcommand_guildlevelup }, - { "guildlvup", 60,60, atcommand_guildlevelup }, - { "guildlevel", 60,60, atcommand_guildlevelup }, - { "guildlvlup", 60,60, atcommand_guildlevelup }, - { "makeegg", 60,60, atcommand_makeegg }, - { "hatch", 60,60, atcommand_hatch }, - { "petfriendly", 40,40, atcommand_petfriendly }, - { "pethungry", 40,40, atcommand_pethungry }, - { "petrename", 1,1, atcommand_petrename }, - { "recall", 60,60, atcommand_recall }, // + /recall - { "night", 80,80, atcommand_night }, - { "day", 80,80, atcommand_day }, - { "doom", 80,80, atcommand_doom }, - { "doommap", 80,80, atcommand_doommap }, - { "raise", 80,80, atcommand_raise }, - { "raisemap", 80,80, atcommand_raisemap }, - { "kick", 20,20, atcommand_kick }, // + right click menu for GM "(name) force to quit" - { "kickall", 99,99, atcommand_kickall }, - { "allskill", 60,60, atcommand_allskill }, - { "allskills", 60,60, atcommand_allskill }, - { "skillall", 60,60, atcommand_allskill }, - { "skillsall", 60,60, atcommand_allskill }, - { "questskill", 40,40, atcommand_questskill }, - { "lostskill", 40,40, atcommand_lostskill }, - { "spiritball", 40,40, atcommand_spiritball }, - { "party", 1,1, atcommand_party }, - { "guild", 50,50, atcommand_guild }, - { "agitstart", 60,60, atcommand_agitstart }, - { "agitend", 60,60, atcommand_agitend }, - { "mapexit", 99,99, atcommand_mapexit }, - { "idsearch", 60,60, atcommand_idsearch }, - { "broadcast", 40,40, atcommand_broadcast }, // + /b and /nb - { "localbroadcast", 40,40, atcommand_localbroadcast }, // + /lb and /nlb - { "recallall", 80,80, atcommand_recallall }, - { "reloaditemdb", 99,99, atcommand_reloaditemdb }, - { "reloadmobdb", 99,99, atcommand_reloadmobdb }, - { "reloadskilldb", 99,99, atcommand_reloadskilldb }, - { "reloadscript", 99,99, atcommand_reloadscript }, - { "reloadatcommand", 99,99, atcommand_reloadatcommand }, - { "reloadbattleconf", 99,99, atcommand_reloadbattleconf }, - { "reloadstatusdb", 99,99, atcommand_reloadstatusdb }, - { "reloadpcdb", 99,99, atcommand_reloadpcdb }, - { "reloadmotd", 99,99, atcommand_reloadmotd }, - { "mapinfo", 99,99, atcommand_mapinfo }, - { "dye", 40,40, atcommand_dye }, - { "ccolor", 40,40, atcommand_dye }, - { "hairstyle", 40,40, atcommand_hair_style }, - { "hstyle", 40,40, atcommand_hair_style }, - { "haircolor", 40,40, atcommand_hair_color }, - { "hcolor", 40,40, atcommand_hair_color }, - { "statall", 60,60, atcommand_stat_all }, - { "statsall", 60,60, atcommand_stat_all }, - { "allstats", 60,60, atcommand_stat_all }, - { "allstat", 60,60, atcommand_stat_all }, - { "block", 60,60, atcommand_char_block }, - { "charblock", 60,60, atcommand_char_block }, - { "ban", 60,60, atcommand_char_ban }, - { "banish", 60,60, atcommand_char_ban }, - { "charban", 60,60, atcommand_char_ban }, - { "charbanish", 60,60, atcommand_char_ban }, - { "unblock", 60,60, atcommand_char_unblock }, - { "charunblock", 60,60, atcommand_char_unblock }, - { "unban", 60,60, atcommand_char_unban }, - { "unbanish", 60,60, atcommand_char_unban }, - { "charunban", 60,60, atcommand_char_unban }, - { "charunbanish", 60,60, atcommand_char_unban }, - { "mount", 20,20, atcommand_mount_peco }, - { "mountpeco", 20,20, atcommand_mount_peco }, - { "guildspy", 60,60, atcommand_guildspy }, - { "partyspy", 60,60, atcommand_partyspy }, - { "repairall", 60,60, atcommand_repairall }, - { "guildrecall", 60,60, atcommand_guildrecall }, - { "partyrecall", 60,60, atcommand_partyrecall }, - { "nuke", 60,60, atcommand_nuke }, - { "shownpc", 80,80, atcommand_shownpc }, - { "hidenpc", 80,80, atcommand_hidenpc }, - { "loadnpc", 80,80, atcommand_loadnpc }, - { "unloadnpc", 80,80, atcommand_unloadnpc }, - { "time", 1,1, atcommand_servertime }, - { "date", 1,1, atcommand_servertime }, - { "serverdate", 1,1, atcommand_servertime }, - { "servertime", 1,1, atcommand_servertime }, - { "jail", 60,60, atcommand_jail }, - { "unjail", 60,60, atcommand_unjail }, - { "discharge", 60,60, atcommand_unjail }, - { "jailfor", 60,60, atcommand_jailfor }, - { "jailtime", 1,1, atcommand_jailtime }, - { "disguise", 20,20, atcommand_disguise }, - { "undisguise", 20,20, atcommand_undisguise }, - { "email", 1,1, atcommand_email }, - { "effect", 40,40, atcommand_effect }, - { "follow", 20,20, atcommand_follow }, - { "addwarp", 60,60, atcommand_addwarp }, - { "skillon", 80,80, atcommand_skillon }, - { "skilloff", 80,80, atcommand_skilloff }, - { "killer", 60,60, atcommand_killer }, - { "npcmove", 80,80, atcommand_npcmove }, - { "killable", 40,40, atcommand_killable }, - { "dropall", 40,40, atcommand_dropall }, - { "storeall", 40,40, atcommand_storeall }, - { "skillid", 40,40, atcommand_skillid }, - { "useskill", 40,40, atcommand_useskill }, - { "displayskill", 99,99, atcommand_displayskill }, - { "snow", 99,99, atcommand_snow }, - { "sakura", 99,99, atcommand_sakura }, - { "clouds", 99,99, atcommand_clouds }, - { "clouds2", 99,99, atcommand_clouds2 }, - { "fog", 99,99, atcommand_fog }, - { "fireworks", 99,99, atcommand_fireworks }, - { "leaves", 99,99, atcommand_leaves }, - { "summon", 60,60, atcommand_summon }, - { "adjgmlvl", 99,99, atcommand_adjgmlvl }, - { "adjcmdlvl", 99,99, atcommand_adjcmdlvl }, - { "trade", 60,60, atcommand_trade }, - { "send", 99,99, atcommand_send }, - { "setbattleflag", 99,99, atcommand_setbattleflag }, - { "unmute", 80,80, atcommand_unmute }, - { "clearweather", 99,99, atcommand_clearweather }, - { "uptime", 1,1, atcommand_uptime }, - { "changesex", 60,60, atcommand_changesex }, - { "mute", 80,80, atcommand_mute }, - { "refresh", 1,1, atcommand_refresh }, - { "identify", 40,40, atcommand_identify }, - { "gmotd", 20,20, atcommand_gmotd }, - { "misceffect", 50,50, atcommand_misceffect }, - { "mobsearch", 10,10, atcommand_mobsearch }, - { "cleanmap", 40,40, atcommand_cleanmap }, - { "npctalk", 20,20, atcommand_npctalk }, - { "npctalkc", 20,20, atcommand_npctalk }, - { "pettalk", 10,10, atcommand_pettalk }, - { "users", 40,40, atcommand_users }, - { "reset", 40,40, atcommand_reset }, - { "skilltree", 40,40, atcommand_skilltree }, - { "marry", 40,40, atcommand_marry }, - { "divorce", 40,40, atcommand_divorce }, - { "sound", 40,40, atcommand_sound }, - { "undisguiseall", 99,99, atcommand_undisguiseall }, - { "disguiseall", 99,99, atcommand_disguiseall }, - { "changelook", 60,60, atcommand_changelook }, - { "autoloot", 10,10, atcommand_autoloot }, - { "alootid", 10,10, atcommand_autolootitem }, - { "mobinfo", 1,1, atcommand_mobinfo }, - { "monsterinfo", 1,1, atcommand_mobinfo }, - { "mi", 1,1, atcommand_mobinfo }, - { "exp", 1,1, atcommand_exp }, - { "adopt", 40,40, atcommand_adopt }, - { "version", 1,1, atcommand_version }, - { "mutearea", 99,99, atcommand_mutearea }, - { "stfu", 99,99, atcommand_mutearea }, - { "rates", 1,1, atcommand_rates }, - { "iteminfo", 1,1, atcommand_iteminfo }, - { "ii", 1,1, atcommand_iteminfo }, - { "whodrops", 1,1, atcommand_whodrops }, - { "whereis", 10,10, atcommand_whereis }, - { "mapflag", 99,99, atcommand_mapflag }, - { "me", 20,20, atcommand_me }, - { "monsterignore", 99,99, atcommand_monsterignore }, - { "battleignore", 99,99, atcommand_monsterignore }, - { "fakename", 20,20, atcommand_fakename }, - { "size", 20,20, atcommand_size }, - { "showexp", 10,10, atcommand_showexp}, - { "showzeny", 10,10, atcommand_showzeny}, - { "showdelay", 1,1, atcommand_showdelay}, - { "autotrade", 10,10, atcommand_autotrade }, - { "at", 10,10, atcommand_autotrade }, - { "changegm", 10,10, atcommand_changegm }, - { "changeleader", 10,10, atcommand_changeleader }, - { "partyoption", 10,10, atcommand_partyoption}, - { "invite", 1,1, atcommand_invite }, - { "duel", 1,1, atcommand_duel }, - { "leave", 1,1, atcommand_leave }, - { "accept", 1,1, atcommand_accept }, - { "reject", 1,1, atcommand_reject }, - { "main", 1,1, atcommand_main }, - { "clone", 50,50, atcommand_clone }, - { "slaveclone", 50,50, atcommand_clone }, - { "evilclone", 50,50, atcommand_clone }, - { "tonpc", 40,40, atcommand_tonpc }, - { "commands", 1,1, atcommand_commands }, - { "noask", 1,1, atcommand_noask }, - { "request", 20,20, atcommand_request }, - { "hlvl", 60,60, atcommand_homlevel }, - { "hlevel", 60,60, atcommand_homlevel }, - { "homlvl", 60,60, atcommand_homlevel }, - { "homlvup", 60,60, atcommand_homlevel }, - { "homlevel", 60,60, atcommand_homlevel }, - { "homevolve", 60,60, atcommand_homevolution }, - { "homevolution", 60,60, atcommand_homevolution }, - { "makehomun", 60,60, atcommand_makehomun }, - { "homfriendly", 60,60, atcommand_homfriendly }, - { "homhungry", 60,60, atcommand_homhungry }, - { "homtalk", 10,10, atcommand_homtalk }, - { "hominfo", 1,1, atcommand_hominfo }, - { "homstats", 1,1, atcommand_homstats }, - { "homshuffle", 60,60, atcommand_homshuffle }, - { "showmobs", 10,10, atcommand_showmobs }, - { "feelreset", 10,10, atcommand_feelreset }, - { "auction", 1,1, atcommand_auction }, - { "mail", 1,1, atcommand_mail }, - { "noks", 1,1, atcommand_ksprotection }, - { "allowks", 40,40, atcommand_allowks }, - { "cash", 60,60, atcommand_cash }, - { "points", 60,60, atcommand_cash }, - { "agitstart2", 60,60, atcommand_agitstart2 }, - { "agitend2", 60,60, atcommand_agitend2 }, - { "skreset", 60,60, atcommand_resetskill }, - { "streset", 60,60, atcommand_resetstat }, - { "storagelist", 40,40, atcommand_itemlist }, - { "cartlist", 40,40, atcommand_itemlist }, - { "itemlist", 40,40, atcommand_itemlist }, - { "stats", 40,40, atcommand_stats }, - { "delitem", 60,60, atcommand_delitem }, - { "charcommands", 1,1, atcommand_commands }, - { "font", 1,1, atcommand_font }, + +/** + * Fills the reference of available commands in atcommand DBMap + **/ +void atcommand_basecommands(void) { /** - * For Testing Purposes, not going to be here after we're done. + * Command reference list, place the base of your commands here + * Dev note: I'd love to get rid of this, if you have a better idea on this please share with the poor mortals **/ - { "newmount", 0,99, atcommand_new_mount }, -}; + AtCommandInfo atcommand_base[] = { + { "warp", 40,40, atcommand_mapmove }, // + /mm + { "where", 1,1, atcommand_where }, + { "goto", 20,20, atcommand_jumpto }, // + /shift + { "jump", 40,40, atcommand_jump }, + { "who", 20,20, atcommand_who }, + { "who2", 20,20, atcommand_who2 }, + { "who3", 20,20, atcommand_who3 }, + { "whomap", 20,20, atcommand_whomap }, + { "whomap2", 20,20, atcommand_whomap2 }, + { "whomap3", 20,20, atcommand_whomap3 }, + { "whogm", 20,20, atcommand_whogm }, + { "save", 40,40, atcommand_save }, + { "load", 40,40, atcommand_load }, + { "speed", 40,40, atcommand_speed }, + { "storage", 1,1, atcommand_storage }, + { "gstorage", 50,50, atcommand_guildstorage }, + { "option", 40,40, atcommand_option }, + { "hide", 40,40, atcommand_hide }, // + /hide + { "job", 40,40, atcommand_jobchange }, + { "die", 1,1, atcommand_die }, + { "kill", 60,60, atcommand_kill }, + { "alive", 60,60, atcommand_alive }, + { "kami", 40,40, atcommand_kami }, + { "kamib", 40,40, atcommand_kami }, + { "kamic", 40,40, atcommand_kami }, + { "heal", 40,60, atcommand_heal }, + { "item", 60,60, atcommand_item }, + { "item2", 60,60, atcommand_item2 }, + { "itemreset", 40,40, atcommand_itemreset }, + { "blvl", 60,60, atcommand_baselevelup }, + { "jlvl", 60,60, atcommand_joblevelup }, + { "help", 20,20, atcommand_help }, + { "help2", 20,20, atcommand_help2 }, + { "pvpoff", 40,40, atcommand_pvpoff }, + { "pvpon", 40,40, atcommand_pvpon }, + { "gvgoff", 40,40, atcommand_gvgoff }, + { "gvgon", 40,40, atcommand_gvgon }, + { "model", 20,20, atcommand_model }, + { "go", 10,10, atcommand_go }, + { "monster", 50,50, atcommand_monster }, + { "monstersmall", 50,50, atcommand_monstersmall }, + { "monsterbig", 50,50, atcommand_monsterbig }, + { "killmonster", 60,60, atcommand_killmonster }, + { "killmonster2", 40,40, atcommand_killmonster2 }, + { "refine", 60,60, atcommand_refine }, + { "produce", 60,60, atcommand_produce }, + { "memo", 40,40, atcommand_memo }, + { "gat", 99,99, atcommand_gat }, + { "displaystatus", 99,99, atcommand_displaystatus }, + { "stpoint", 60,60, atcommand_statuspoint }, + { "skpoint", 60,60, atcommand_skillpoint }, + { "zeny", 60,60, atcommand_zeny }, + { "str", 60,60, atcommand_param }, + { "agi", 60,60, atcommand_param }, + { "vit", 60,60, atcommand_param }, + { "int", 60,60, atcommand_param }, + { "dex", 60,60, atcommand_param }, + { "luk", 60,60, atcommand_param }, + { "glvl", 60,60, atcommand_guildlevelup }, + { "makeegg", 60,60, atcommand_makeegg }, + { "hatch", 60,60, atcommand_hatch }, + { "petfriendly", 40,40, atcommand_petfriendly }, + { "pethungry", 40,40, atcommand_pethungry }, + { "petrename", 1,1, atcommand_petrename }, + { "recall", 60,60, atcommand_recall }, // + /recall + { "night", 80,80, atcommand_night }, + { "day", 80,80, atcommand_day }, + { "doom", 80,80, atcommand_doom }, + { "doommap", 80,80, atcommand_doommap }, + { "raise", 80,80, atcommand_raise }, + { "raisemap", 80,80, atcommand_raisemap }, + { "kick", 20,20, atcommand_kick }, // + right click menu for GM "(name) force to quit" + { "kickall", 99,99, atcommand_kickall }, + { "allskill", 60,60, atcommand_allskill }, + { "questskill", 40,40, atcommand_questskill }, + { "lostskill", 40,40, atcommand_lostskill }, + { "spiritball", 40,40, atcommand_spiritball }, + { "party", 1,1, atcommand_party }, + { "guild", 50,50, atcommand_guild }, + { "agitstart", 60,60, atcommand_agitstart }, + { "agitend", 60,60, atcommand_agitend }, + { "mapexit", 99,99, atcommand_mapexit }, + { "idsearch", 60,60, atcommand_idsearch }, + { "broadcast", 40,40, atcommand_broadcast }, // + /b and /nb + { "localbroadcast", 40,40, atcommand_localbroadcast }, // + /lb and /nlb + { "recallall", 80,80, atcommand_recallall }, + { "reloaditemdb", 99,99, atcommand_reloaditemdb }, + { "reloadmobdb", 99,99, atcommand_reloadmobdb }, + { "reloadskilldb", 99,99, atcommand_reloadskilldb }, + { "reloadscript", 99,99, atcommand_reloadscript }, + { "reloadatcommand", 99,99, atcommand_reloadatcommand }, + { "reloadbattleconf", 99,99, atcommand_reloadbattleconf }, + { "reloadstatusdb", 99,99, atcommand_reloadstatusdb }, + { "reloadpcdb", 99,99, atcommand_reloadpcdb }, + { "reloadmotd", 99,99, atcommand_reloadmotd }, + { "mapinfo", 99,99, atcommand_mapinfo }, + { "dye", 40,40, atcommand_dye }, + { "hairstyle", 40,40, atcommand_hair_style }, + { "haircolor", 40,40, atcommand_hair_color }, + { "allstats", 60,60, atcommand_stat_all }, + { "block", 60,60, atcommand_char_block }, + { "ban", 60,60, atcommand_char_ban }, + { "unblock", 60,60, atcommand_char_unblock }, + { "unban", 60,60, atcommand_char_unban }, + { "mount", 20,20, atcommand_mount_peco }, + { "guildspy", 60,60, atcommand_guildspy }, + { "partyspy", 60,60, atcommand_partyspy }, + { "repairall", 60,60, atcommand_repairall }, + { "guildrecall", 60,60, atcommand_guildrecall }, + { "partyrecall", 60,60, atcommand_partyrecall }, + { "nuke", 60,60, atcommand_nuke }, + { "shownpc", 80,80, atcommand_shownpc }, + { "hidenpc", 80,80, atcommand_hidenpc }, + { "loadnpc", 80,80, atcommand_loadnpc }, + { "unloadnpc", 80,80, atcommand_unloadnpc }, + { "time", 1,1, atcommand_servertime }, + { "jail", 60,60, atcommand_jail }, + { "unjail", 60,60, atcommand_unjail }, + { "jailfor", 60,60, atcommand_jailfor }, + { "jailtime", 1,1, atcommand_jailtime }, + { "disguise", 20,20, atcommand_disguise }, + { "undisguise", 20,20, atcommand_undisguise }, + { "email", 1,1, atcommand_email }, + { "effect", 40,40, atcommand_effect }, + { "follow", 20,20, atcommand_follow }, + { "addwarp", 60,60, atcommand_addwarp }, + { "skillon", 80,80, atcommand_skillon }, + { "skilloff", 80,80, atcommand_skilloff }, + { "killer", 60,60, atcommand_killer }, + { "npcmove", 80,80, atcommand_npcmove }, + { "killable", 40,40, atcommand_killable }, + { "dropall", 40,40, atcommand_dropall }, + { "storeall", 40,40, atcommand_storeall }, + { "skillid", 40,40, atcommand_skillid }, + { "useskill", 40,40, atcommand_useskill }, + { "displayskill", 99,99, atcommand_displayskill }, + { "snow", 99,99, atcommand_snow }, + { "sakura", 99,99, atcommand_sakura }, + { "clouds", 99,99, atcommand_clouds }, + { "clouds2", 99,99, atcommand_clouds2 }, + { "fog", 99,99, atcommand_fog }, + { "fireworks", 99,99, atcommand_fireworks }, + { "leaves", 99,99, atcommand_leaves }, + { "summon", 60,60, atcommand_summon }, + { "adjgmlvl", 99,99, atcommand_adjgmlvl }, + { "adjcmdlvl", 99,99, atcommand_adjcmdlvl }, + { "trade", 60,60, atcommand_trade }, + { "send", 99,99, atcommand_send }, + { "setbattleflag", 99,99, atcommand_setbattleflag }, + { "unmute", 80,80, atcommand_unmute }, + { "clearweather", 99,99, atcommand_clearweather }, + { "uptime", 1,1, atcommand_uptime }, + { "changesex", 60,60, atcommand_changesex }, + { "mute", 80,80, atcommand_mute }, + { "refresh", 1,1, atcommand_refresh }, + { "identify", 40,40, atcommand_identify }, + { "gmotd", 20,20, atcommand_gmotd }, + { "misceffect", 50,50, atcommand_misceffect }, + { "mobsearch", 10,10, atcommand_mobsearch }, + { "cleanmap", 40,40, atcommand_cleanmap }, + { "npctalk", 20,20, atcommand_npctalk }, + { "pettalk", 10,10, atcommand_pettalk }, + { "users", 40,40, atcommand_users }, + { "reset", 40,40, atcommand_reset }, + { "skilltree", 40,40, atcommand_skilltree }, + { "marry", 40,40, atcommand_marry }, + { "divorce", 40,40, atcommand_divorce }, + { "sound", 40,40, atcommand_sound }, + { "undisguiseall", 99,99, atcommand_undisguiseall }, + { "disguiseall", 99,99, atcommand_disguiseall }, + { "changelook", 60,60, atcommand_changelook }, + { "autoloot", 10,10, atcommand_autoloot }, + { "alootid", 10,10, atcommand_autolootitem }, + { "monsterinfo", 1,1, atcommand_mobinfo }, + { "exp", 1,1, atcommand_exp }, + { "adopt", 40,40, atcommand_adopt }, + { "version", 1,1, atcommand_version }, + { "mutearea", 99,99, atcommand_mutearea }, + { "rates", 1,1, atcommand_rates }, + { "iteminfo", 1,1, atcommand_iteminfo }, + { "whodrops", 1,1, atcommand_whodrops }, + { "whereis", 10,10, atcommand_whereis }, + { "mapflag", 99,99, atcommand_mapflag }, + { "me", 20,20, atcommand_me }, + { "battleignore", 99,99, atcommand_monsterignore }, + { "fakename", 20,20, atcommand_fakename }, + { "size", 20,20, atcommand_size }, + { "showexp", 10,10, atcommand_showexp}, + { "showzeny", 10,10, atcommand_showzeny}, + { "showdelay", 1,1, atcommand_showdelay}, + { "autotrade", 10,10, atcommand_autotrade }, + { "changegm", 10,10, atcommand_changegm }, + { "changeleader", 10,10, atcommand_changeleader }, + { "partyoption", 10,10, atcommand_partyoption}, + { "invite", 1,1, atcommand_invite }, + { "duel", 1,1, atcommand_duel }, + { "leave", 1,1, atcommand_leave }, + { "accept", 1,1, atcommand_accept }, + { "reject", 1,1, atcommand_reject }, + { "main", 1,1, atcommand_main }, + { "clone", 50,50, atcommand_clone }, + { "slaveclone", 50,50, atcommand_clone }, + { "evilclone", 50,50, atcommand_clone }, + { "tonpc", 40,40, atcommand_tonpc }, + { "commands", 1,1, atcommand_commands }, + { "noask", 1,1, atcommand_noask }, + { "request", 20,20, atcommand_request }, + { "hlvl", 60,60, atcommand_homlevel }, + { "homevolve", 60,60, atcommand_homevolution }, + { "makehomun", 60,60, atcommand_makehomun }, + { "homfriendly", 60,60, atcommand_homfriendly }, + { "homhungry", 60,60, atcommand_homhungry }, + { "homtalk", 10,10, atcommand_homtalk }, + { "hominfo", 1,1, atcommand_hominfo }, + { "homstats", 1,1, atcommand_homstats }, + { "homshuffle", 60,60, atcommand_homshuffle }, + { "showmobs", 10,10, atcommand_showmobs }, + { "feelreset", 10,10, atcommand_feelreset }, + { "auction", 1,1, atcommand_auction }, + { "mail", 1,1, atcommand_mail }, + { "noks", 1,1, atcommand_ksprotection }, + { "allowks", 40,40, atcommand_allowks }, + { "cash", 60,60, atcommand_cash }, + { "points", 60,60, atcommand_cash }, + { "agitstart2", 60,60, atcommand_agitstart2 }, + { "agitend2", 60,60, atcommand_agitend2 }, + { "skreset", 60,60, atcommand_resetskill }, + { "streset", 60,60, atcommand_resetstat }, + { "storagelist", 40,40, atcommand_itemlist }, + { "cartlist", 40,40, atcommand_itemlist }, + { "itemlist", 40,40, atcommand_itemlist }, + { "stats", 40,40, atcommand_stats }, + { "delitem", 60,60, atcommand_delitem }, + { "charcommands", 1,1, atcommand_commands }, + { "font", 1,1, atcommand_font }, + /** + * For Testing Purposes, not going to be here after we're done. + **/ + { "newmount", 0,99, atcommand_new_mount }, + }; + AtCommandInfo* atcommand; + int i; + + for( i = 0; i < ARRAYLENGTH(atcommand_base); i++ ) { + CREATE(atcommand, AtCommandInfo, 1); + + atcommand->command = atcommand_base[i].command; + atcommand->level = atcommand_base[i].level; + atcommand->level2 = atcommand_base[i].level2; + atcommand->func = atcommand_base[i].func; + + strdb_put(atcommand_db, atcommand->command, atcommand); + } + return; +} /*========================================== * Command lookup functions *------------------------------------------*/ -static AtCommandInfo* get_atcommandinfo_byname(const char* name) -{ - int i; +static AtCommandInfo* get_atcommandinfo_byname(const char* name) { if( *name == atcommand_symbol || *name == charcommand_symbol ) name++; // for backwards compatibility - ARR_FIND( 0, ARRAYLENGTH(atcommand_info), i, strcmpi(atcommand_info[i].command, name) == 0 ); - return ( i < ARRAYLENGTH(atcommand_info) ) ? &atcommand_info[i] : NULL; -} - -static AtCommandInfo* get_atcommandinfo_byfunc(const AtCommandFunc func) -{ - int i; - ARR_FIND( 0, ARRAYLENGTH(atcommand_info), i, atcommand_info[i].func == func ); - return ( i < ARRAYLENGTH(atcommand_info) ) ? &atcommand_info[i] : NULL; + if( strdb_exists(atcommand_db,name) ) + return (AtCommandInfo*)strdb_get(atcommand_db, name); + return NULL; } /*========================================== * Retrieve the command's required gm level *------------------------------------------*/ -int get_atcommand_level(const AtCommandFunc func) -{ - AtCommandInfo* info = get_atcommandinfo_byfunc(func); +int get_atcommand_level(const char* name) { + AtCommandInfo* info = (AtCommandInfo*)strdb_get(atcommand_db, name); return ( info != NULL ) ? info->level : 100; // 100: command can not be used } @@ -9247,8 +9197,7 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message params[0] = '\0'; //Grab the command information and check for the proper GM level required to use it or if the command exists - info = get_atcommandinfo_byname(command); - if( info == NULL || info->func == NULL || ( type && ((*atcmd_msg == atcommand_symbol && pc_isGM(sd) < info->level) || (*atcmd_msg == charcommand_symbol && pc_isGM(sd) < info->level2)) ) ) + if( (info = (AtCommandInfo*)strdb_get(atcommand_db, command+1)) == NULL || info->func == NULL || ( type && ((*atcmd_msg == atcommand_symbol && pc_isGM(sd) < info->level) || (*atcmd_msg == charcommand_symbol && pc_isGM(sd) < info->level2)) ) ) { if( pc_isGM(sd) ) { sprintf(output, msg_txt(153), command); // "%s is Unknown Command." @@ -9260,10 +9209,9 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message //Log atcommands if( *atcmd_msg == atcommand_symbol ) - log_atcommand(sd, info->level, atcmd_msg); - + log_atcommand(sd, info->level, atcmd_msg); //Log Charcommands - if( *atcmd_msg == charcommand_symbol && ssd != NULL ) + else if( *atcmd_msg == charcommand_symbol && ssd != NULL ) log_atcommand(sd, info->level2, message); //Attempt to use the command @@ -9277,61 +9225,97 @@ bool is_atcommand(const int fd, struct map_session_data* sd, const char* message return true; } +/** + * Splits and parses command aliases field + * Note: I'm not good (at all) with string manipulation, if you think you can improve, please do. I beg you. + **/ +void atcommand_parse_aliases(char aliases[1024],AtCommandInfo* base) { + char *str[99], *p; + int i, max = 0; + + p = aliases; + while( ISSPACE(*p) )//trim + ++p; + + //I assume nobody is getting over 98 alises in the same command lol + for( i = 0; i < 99; i++ ) { + str[i] = p; + p = strchr(p,','); + if( p == NULL ) { + max = i+1; + break;// comma not found + } + *p = '\0'; + ++p; + } + if( !str[0] )//no aliases at all + return; + + for(i = 0; i < max;i++) { + AtCommandInfo* atcommand; + + if( strdb_exists(atcommand_db, str[i]) ) { + ShowError("atcommand_conf: duplicate alises error: %s (from %s)\n",str[i],base->command); + continue; + } + + CREATE(atcommand, AtCommandInfo, 1); + + atcommand->command = str[i]; + atcommand->level = base->level; + atcommand->level2 = base->level2; + atcommand->func = base->func; + + strdb_put(atcommand_db, atcommand->command, atcommand); + } + return; +} /*========================================== * *------------------------------------------*/ int atcommand_config_read(const char* cfgName) { - char line[1024], w1[1024], w2[1024], w3[1024]; + char line[1024], w1[1024], w2[1024], w3[1024], w4[1024]; AtCommandInfo* p; FILE* fp; - - if( (fp = fopen(cfgName, "r")) == NULL ) - { + + if( (fp = fopen(cfgName, "r")) == NULL ) { ShowError("AtCommand configuration file not found: %s\n", cfgName); return 1; } - while( fgets(line, sizeof(line), fp) ) - { + while( fgets(line, sizeof(line), fp) ) { if( line[0] == '/' && line[1] == '/' ) continue; - - if( (sscanf(line, "%1023[^:]:%1023[^,],%1023s", w1, w2, w3)) != 3 && ( sscanf(line, "%1023[^:]:%1023s", w1, w2) != 2 - && strcmpi(w1, "import") != 0 ) && strcmpi(w1, "command_symbol") != 0 && strcmpi(w1, "char_symbol") != 0 ) - continue; - p = get_atcommandinfo_byname(w1); - if( p != NULL ) - { - p->level = atoi(w2); - p->level = cap_value(p->level, 0, 100); - if( (sscanf(line, "%1023[^:]:%1023s", w1, w2) == 2) && (sscanf(line, "%1023[^:]:%1023[^,],%1023s", w1, w2, w3)) != 3 ) - { - ShowWarning("atcommand_conf: setting %s:%d is deprecated! Please see atcommand_athena.conf for the new setting format.\n",w1,atoi(w2)); - ShowWarning("atcommand_conf: defaulting %s charcommand level to %d.\n",w1,atoi(w2)); - p->level2 = atoi(w2); + if( ( sscanf(line,"%1023[^:]:%1023[^,],%1023[^[][%1023[^]]",w1,w2,w3,w4) ) == 4 ) { + if( ( p = (AtCommandInfo*)strdb_get(atcommand_db, w1) ) != NULL ) { + + p->level = atoi(w2);//update @level + p->level2 = atoi(w3);//update #level + + /** + * Parse the alises + **/ + atcommand_parse_aliases(w4,p); + + continue;//we're done move on } - else { - p->level2 = atoi(w3); - } - p->level2 = cap_value(p->level2, 0, 100); - } - else + } else if( strcmpi(w1, "import") != 0 && strcmpi(w1, "command_symbol") != 0 && strcmpi(w1, "char_symbol") != 0 ) + continue; + if( strcmpi(w1, "import") == 0 ) atcommand_config_read(w2); - else - if( strcmpi(w1, "command_symbol") == 0 && + else if( strcmpi(w1, "command_symbol") == 0 && w2[0] > 31 && // control characters w2[0] != '/' && // symbol of standard ragnarok GM commands w2[0] != '%' && // symbol of party chat speaking w2[0] != '$' && // symbol of guild chat speaking w2[0] != '#' ) // remote symbol atcommand_symbol = w2[0]; - else - if( strcmpi(w1, "char_symbol") == 0 && + else if( strcmpi(w1, "char_symbol") == 0 && w2[0] > 31 && w2[0] != '/' && w2[0] != '%' && @@ -9346,14 +9330,33 @@ int atcommand_config_read(const char* cfgName) return 0; } -void do_init_atcommand() -{ +void atcommand_doload() { + + if( atcommand_db != NULL ) + db_destroy(atcommand_db); + + atcommand_db = strdb_alloc(DB_OPT_DUP_KEY, 0); + atcommand_basecommands();//fills initial atcommand_db with known commands + + atcommand_config_read(ATCOMMAND_CONF_FILENAME); + + return; +} + +void do_init_atcommand() { + + atcommand_doload(); + add_timer_func_list(atshowmobs_timer, "atshowmobs_timer"); + return; } -void do_final_atcommand() -{ +void do_final_atcommand() { + + db_destroy(atcommand_db); + + return; } @@ -9365,24 +9368,25 @@ void do_final_atcommand() ACMD_FUNC(commands) { char line_buff[CHATBOX_SIZE]; - int i, gm_lvl = pc_isGM(sd), count = 0; + int gm_lvl = pc_isGM(sd), count = 0; char* cur = line_buff; + AtCommandInfo* cmd; + DBIterator* iter = atcommand_db->iterator(atcommand_db); memset(line_buff,' ',CHATBOX_SIZE); line_buff[CHATBOX_SIZE-1] = 0; clif_displaymessage(fd, msg_txt(273)); // "Commands available:" - for( i = 0; i < ARRAYLENGTH(atcommand_info); i++ ) - { + for( cmd = (AtCommandInfo*)iter->first(iter,NULL); iter->exists(iter); cmd = (AtCommandInfo*)iter->next(iter,NULL) ) { unsigned int slen; - if( gm_lvl < atcommand_info[i].level && stristr(command,"commands") ) + if( gm_lvl < cmd->level && stristr(command,"commands") ) continue; - if( gm_lvl < atcommand_info[i].level2 && stristr(command,"charcommands") ) + if( gm_lvl < cmd->level2 && stristr(command,"charcommands") ) continue; - slen = strlen(atcommand_info[i].command); + slen = strlen(cmd->command); // flush the text buffer if this command won't fit into it if( slen + cur - line_buff >= CHATBOX_SIZE ) @@ -9393,11 +9397,12 @@ ACMD_FUNC(commands) line_buff[CHATBOX_SIZE-1] = 0; } - memcpy(cur,atcommand_info[i].command,slen); + memcpy(cur,cmd->command,slen); cur += slen+(10-slen%10); count++; } + iter->destroy(iter); clif_displaymessage(fd,line_buff); sprintf(atcmd_output, msg_txt(274), count); // "%d commands found." diff --git a/src/map/atcommand.h b/src/map/atcommand.h index 5456bc348..415aa9305 100644 --- a/src/map/atcommand.h +++ b/src/map/atcommand.h @@ -18,7 +18,7 @@ extern char charcommand_symbol; typedef int (*AtCommandFunc)(const int fd, struct map_session_data* sd, const char* command, const char* message); bool is_atcommand(const int fd, struct map_session_data* sd, const char* message, int type); -int get_atcommand_level(const AtCommandFunc func); +int get_atcommand_level(const char* name); void do_init_atcommand(void); void do_final_atcommand(void); diff --git a/src/map/clif.c b/src/map/clif.c index 3e2a20514..1054ec66a 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9169,7 +9169,7 @@ void clif_parse_MapMove(int fd, struct map_session_data *sd) if (battle_config.atc_gmonly && !pc_isGM(sd)) return; - if(pc_isGM(sd) < get_atcommand_level(atcommand_mapmove)) + if(pc_isGM(sd) < get_atcommand_level("warp")) return; map_name = (char*)RFIFOP(fd,2); @@ -9177,7 +9177,7 @@ void clif_parse_MapMove(int fd, struct map_session_data *sd) sprintf(output, "%s %d %d", map_name, RFIFOW(fd,18), RFIFOW(fd,20)); atcommand_mapmove(fd, sd, "@mapmove", output); sprintf(message, "/mm %s", output); - log_atcommand(sd, get_atcommand_level(atcommand_mapmove), message); + log_atcommand(sd, get_atcommand_level("warp"), message); } /*========================================== @@ -9534,7 +9534,7 @@ void clif_parse_Broadcast(int fd, struct map_session_data* sd) if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_broadcast)) ) + if( pc_isGM(sd) < (lv=get_atcommand_level("broadcast")) ) return; // as the length varies depending on the command used, just block unreasonably long strings @@ -10628,7 +10628,7 @@ void clif_parse_ResetChar(int fd, struct map_session_data *sd) if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if( pc_isGM(sd) < get_atcommand_level(atcommand_reset) ) + if( pc_isGM(sd) < get_atcommand_level("reset") ) return; if( RFIFOW(fd,2) ) @@ -10636,7 +10636,7 @@ void clif_parse_ResetChar(int fd, struct map_session_data *sd) else pc_resetstate(sd); - log_atcommand(sd, get_atcommand_level(atcommand_reset), RFIFOW(fd,2) ? "/resetskill" : "/resetstate"); + log_atcommand(sd, get_atcommand_level("reset"), RFIFOW(fd,2) ? "/resetskill" : "/resetstate"); } /*========================================== @@ -10652,7 +10652,7 @@ void clif_parse_LocalBroadcast(int fd, struct map_session_data* sd) if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_localbroadcast)) ) + if( pc_isGM(sd) < (lv=get_atcommand_level("localbroadcast")) ) return; // as the length varies depending on the command used, just block unreasonably long strings @@ -11613,7 +11613,7 @@ void clif_parse_GMKick(int fd, struct map_session_data *sd) return; } - lv = get_atcommand_level(atcommand_kick); + lv = get_atcommand_level("kick"); if( pc_isGM(sd) < lv ) { clif_GM_kickack(sd, 0); @@ -11631,7 +11631,7 @@ void clif_parse_GMKick(int fd, struct map_session_data *sd) break; case BL_MOB: { - lv = get_atcommand_level(atcommand_killmonster); + lv = get_atcommand_level("killmonster"); if( pc_isGM(sd) < lv ) { clif_GM_kickack(sd, 0); @@ -11650,7 +11650,7 @@ void clif_parse_GMKick(int fd, struct map_session_data *sd) case BL_NPC: { struct npc_data* nd = (struct npc_data *)target; - lv = get_atcommand_level(atcommand_unloadnpc); + lv = get_atcommand_level("unloadnpc"); if( pc_isGM(sd) < lv ) { clif_GM_kickack(sd, 0); @@ -11693,7 +11693,7 @@ void clif_parse_GMShift(int fd, struct map_session_data *sd) if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_jumpto)) ) + if( pc_isGM(sd) < (lv=get_atcommand_level("goto")) ) return; player_name = (char*)RFIFOP(fd,2); @@ -11719,7 +11719,7 @@ void clif_parse_GMRemove2(int fd, struct map_session_data* sd) return; } - if( pc_isGM(sd) < ( lv = get_atcommand_level(atcommand_jumpto) ) ) + if( pc_isGM(sd) < ( lv = get_atcommand_level("goto") ) ) { return; } @@ -11752,7 +11752,7 @@ void clif_parse_GMRecall(int fd, struct map_session_data *sd) if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if( pc_isGM(sd) < (lv=get_atcommand_level(atcommand_recall)) ) + if( pc_isGM(sd) < (lv=get_atcommand_level("recall")) ) return; player_name = (char*)RFIFOP(fd,2); @@ -11778,7 +11778,7 @@ void clif_parse_GMRecall2(int fd, struct map_session_data* sd) return; } - if( pc_isGM(sd) < ( lv = get_atcommand_level(atcommand_recall) ) ) + if( pc_isGM(sd) < ( lv = get_atcommand_level("recall") ) ) { return; } @@ -11816,18 +11816,18 @@ void clif_parse_GM_Monster_Item(int fd, struct map_session_data *sd) monster_item_name[NAME_LENGTH-1] = '\0'; if( mobdb_searchname(monster_item_name) ) { - if( pc_isGM(sd) < (level=get_atcommand_level(atcommand_monster)) ) + if( pc_isGM(sd) < (level=get_atcommand_level("monster")) ) return; atcommand_monster(fd, sd, "@monster", monster_item_name); // as @monster { //Log action. [Skotlex] - snprintf(message, sizeof(message)-1, "@spawn %s", monster_item_name); + snprintf(message, sizeof(message)-1, "@monster %s", monster_item_name); log_atcommand(sd, level, message); } return; } if( itemdb_searchname(monster_item_name) == NULL ) return; - if( pc_isGM(sd) < (level = get_atcommand_level(atcommand_item)) ) + if( pc_isGM(sd) < (level = get_atcommand_level("item")) ) return; atcommand_item(fd, sd, "@item", monster_item_name); // as @item { //Log action. [Skotlex] @@ -11844,7 +11844,7 @@ void clif_parse_GMHide(int fd, struct map_session_data *sd) if( battle_config.atc_gmonly && !pc_isGM(sd) ) return; - if( pc_isGM(sd) < get_atcommand_level(atcommand_hide) ) + if( pc_isGM(sd) < get_atcommand_level("hide") ) return; if( sd->sc.option & OPTION_INVISIBLE ) { @@ -11858,7 +11858,7 @@ void clif_parse_GMHide(int fd, struct map_session_data *sd) sd->sc.option |= OPTION_INVISIBLE; sd->vd.class_ = INVISIBLE_CLASS; clif_displaymessage(fd, "Invisible: On."); - log_atcommand(sd, get_atcommand_level(atcommand_hide), "/hide"); + log_atcommand(sd, get_atcommand_level("hide"), "/hide"); } clif_changeoption(&sd->bl); } @@ -11891,7 +11891,7 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd) if( dstsd == NULL ) return; - if( (level = pc_isGM(sd)) > pc_isGM(dstsd) && level >= get_atcommand_level(atcommand_mute) ) + if( (level = pc_isGM(sd)) > pc_isGM(dstsd) && level >= get_atcommand_level("mute") ) { clif_manner_message(sd, 0); clif_manner_message(dstsd, 5); @@ -11923,7 +11923,7 @@ void clif_parse_GMRc(int fd, struct map_session_data* sd) if( dstsd == NULL ) return; - if( pc_isGM(sd) > pc_isGM(dstsd) && pc_isGM(sd) >= get_atcommand_level(atcommand_mute) ) + if( pc_isGM(sd) > pc_isGM(dstsd) && pc_isGM(sd) >= get_atcommand_level("mute") ) { clif_manner_message(sd, 0); clif_manner_message(dstsd, 3); diff --git a/src/map/mail.c b/src/map/mail.c index dfa7889e0..f8adb5f0e 100644 --- a/src/map/mail.c +++ b/src/map/mail.c @@ -195,7 +195,7 @@ void mail_deliveryfail(struct map_session_data *sd, struct mail_message *msg) // This function only check if the mail operations are valid bool mail_invalid_operation(struct map_session_data *sd) { - if( !map[sd->bl.m].flag.town && pc_isGM(sd) < get_atcommand_level(atcommand_mail) ) + if( !map[sd->bl.m].flag.town && pc_isGM(sd) < get_atcommand_level("mail") ) { ShowWarning("clif_parse_Mail: char '%s' trying to do invalid mail operations.\n", sd->status.name); return true; diff --git a/src/map/map.c b/src/map/map.c index 30fb4fc28..8f7f7efb2 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -3740,7 +3740,6 @@ int do_init(int argc, char *argv[]) battle_config_read(BATTLE_CONF_FILENAME); msg_config_read(MSG_CONF_NAME); - atcommand_config_read(ATCOMMAND_CONF_FILENAME); script_config_read(SCRIPT_CONF_NAME); inter_config_read(INTER_CONF_NAME); log_config_read(LOG_CONF_NAME); diff --git a/src/map/pc.c b/src/map/pc.c index eef9188a1..d16c25b69 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -871,7 +871,7 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim pc_setequipindex(sd); status_change_init(&sd->bl); - if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) && (pc_isGM(sd) >= get_atcommand_level(atcommand_hide))) + if ((battle_config.atc_gmonly == 0 || pc_isGM(sd)) && (pc_isGM(sd) >= get_atcommand_level("hide"))) sd->status.option &= (OPTION_MASK | OPTION_INVISIBLE); else sd->status.option &= OPTION_MASK; -- cgit v1.2.3-70-g09d2 From d24f866943c36901666a66e692ead13375ee8252 Mon Sep 17 00:00:00 2001 From: jmanfffreak Date: Sun, 1 Jan 2012 18:29:57 +0000 Subject: Fixed a bunch of whitespace issues in atcommand_athena.conf, due to teamwork :P Changed the example at the beginning of the file (thanks to Slim!) git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15345 54d463be-8e91-2dee-dedb-b68131a5f0ec --- conf/atcommand_athena.conf | 244 +-------------------------------------------- 1 file changed, 4 insertions(+), 240 deletions(-) (limited to 'conf/atcommand_athena.conf') diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index 67512206b..ce06e2b37 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -2,7 +2,6 @@ // rAthena atcommand/charcommand Configuration File //-------------------------------------------------------------- - // The symbol that will be used to recognize commands. // You can set any one character except control-characters (0x00-0x1f), // '%', '$' (party/guild chat speaking) and '/' (standard client commands). @@ -11,7 +10,6 @@ command_symbol:@ char_symbol:# - // The following settings in this file use the format ": level(@),level(#)". // They define the minimum GM level required to execute the associated command. // @ = atcommand. most work only on yourself. @@ -20,7 +18,6 @@ char_symbol:# // (GM level 0), you also need to change the 'atcommand_gm_only' option to 'no'. // To completely disable a command, set its required GM level to 100. - // Default levels were chosen so that they form the following hierarchy: // 0: Normal player // -> no commands accessible @@ -43,108 +40,85 @@ char_symbol:# // 100: Disabled // -> commands that will not be available to anyone - // Syntax of file: // command: @level,#level [] +// Syntax Example: +// command: 40,40 [alias,alias2,alias3,alias4] +// If it has more than 4 aliases you can keep adding, just like in the example below: // Example: -// command: 40,40 [alias,command2,alias2] - - - +// blvl: 60,60 [lvup,blevel,baselvl,baselvup,baselevel,baselvlup] //-------------------------- // 0: normal player commands // None for security purposes. - //------------------------- // 1: Super player commands - // Displays a list of @ commands available to the player. commands: 1,1 - // Displays a list of # commands available to the player. charcommands: 1,1 - // Displays the server rates. rates: 1,1 - // Show server uptime since last map server restart uptime: 1,1 - // Shows/Hides the "there is a delay after a skill" message. showdelay: 1,1 - // Displays current levels and % progress. exp: 1,40 - // To change your (own) email // note: this command doesn't check email itself, but check structure of the email (xxx@xxx) // if you want be sure of each e-mail disable this option (value: 100) email: 1,60 - // Show Monster info (rates, stats, drops, MVP stuff) monsterinfo: 1,1 [mobinfo, mi] - // Show Item info (type, price, etc) iteminfo: 1,1 [ii] - // Show who drops an item (mobs with highest drop rate) whodrops: 1,1 - // Syncs the player's position on the client with the one stored on the server. refresh: 1,40 - // Give server time. (4 same commands) time: 1,1 [date,serverdate,servertime] - // Displays SVN version of the server. version: 1,1 - // Suicide your character. die: 1,1 - // Enables you to rename your pet. petrename: 1,50 - // Organize a new party, with you as the party leader party: 1,1 - // Opens your Kafra storage wherever you are storage: 1,1 - // Opens your mailbox mail: 1,1 - // Opens auctions window auction: 1,1 - // Locate someone on a map, returns your coordinates if the person isn't on. where: 1,1 - // Duel organizing commands duel: 1,1 invite: 1,1 @@ -152,80 +126,61 @@ accept: 1,1 reject: 1,1 leave: 1,1 - // Main chat main: 1,1 - // Autorejecting Deals/Invites noask: 1,1 - // Displays remaining jail time jailtime: 1,40 - // Homunculus commands for players hominfo: 1,40 homstats: 1,40 - // Kill Steal Protection noks: 1,1 - // Set Font font: 1,1 - //--------------------------- // 10: Super player+ commands - // Displays/Hides Experience gained messages showexp: 10,10 - // Displays/Hides Zeny gained messages showzeny: 10,10 - // Warps you to predefined locations in major cities. go: 10,10 - // Enables/disables autolooting from killed mobs. autoloot: 10,10 - // Enables/disables autolooting an item. alootid: 10,10 - // Allows you continue vending offline. autotrade: 10,10 [at] - // Change Guild Master of your Guild changegm: 10,10 - // Change the leader of your party. changeleader: 10,10 - // Change the party exp- and item share rules. partyoption: 10,10 - // Command what the player's pet will say. pettalk: 10,10 - // Command what the player's homunculus will say. homtalk: 10,10 - // Locates and displays the position of a certain mob on the current map. mobsearch: 10,10 // Locates and displays the position of a certain mob on your mini-map @@ -233,115 +188,88 @@ showmobs: 10,10 // Prints out in which maps a monster normally spawns at (does not count script-invoked mobs) whereis: 10,10 - // Resets a Star Gladiator's marked maps feelreset: 10,60 - //---------------------- // 20: Mediator commands - // Displays helpfile in rAthena base directory (2 same commands). help: 20,20 [h] help2: 20,20 [h2] - // Warp yourself to a person (3 same commands + /shift). goto: 20,20 [jumpto,warpto] - // Displays the motd file to all players gmotd: 20,20 - // Follow a player (including warping to them) follow: 20,20 - // Sends a request to all connected GMs (via the gm whisper system) request: 20,100 - // Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). kick: 20,20 - // Changes your appearance. model: 20,50 - // To get a peco to (un)ride (2 same commands). mount: 20,50 [mountpeco] - // Returns list of logged in characters with their position (2 same commands). who: 20,20 [whois] - // Returns list of logged in characters with their job. who2: 20,20 - // Returns list of logged in characters with their party/guild. who3: 20,20 - // Returns list of logged in characters with their position in a specifical map. whomap: 20,20 - // Returns list of logged in characters with their job in a specifical map. whomap2: 20,20 - // Returns list of logged in characters with their party/guild in a specifical map. whomap3: 20,20 - // Displays GMs online. For those who are higher GM level than yourself, // only the name is shown, for the rest, it displays the same info of // @who+@who2+who3 whogm: 20,20 - // Change your appearence to other players to a mob. disguise: 20,60 - // Restore your normal appearance. undisguise: 20,20 - // Displays the text as a normal message with the format "*name message*" // instead of "name : message" (Like the /me command in IRC) me: 20,20 - // Changes your name to your choice temporarily. fakename: 20,50 - // Changes your size. size: 20,50 - // Can command what other npcs (by name) can say. npctalk: 20,100 [npctalkc] - //-------------------- // 40: Sub-GM commands - // Broadcast to the whole server. Using (1 command + /nb, /b). broadcast: 40,40 - // Broadcast to the map you are on (1 command + /lb, /nlb). localbroadcast: 40,40 - // Broadcast (with or without name) kami: 40,40 // Same as kami but with blue color @@ -349,326 +277,244 @@ kamib: 40,40 // Same as kami but you can choose the color (uses different packet) kamic: 40,40 - // Enables GvG on a map (2 same commands). gvgon: 40,100 [gpvpon] - // Turns GvG (Guild vs. Guild) off on a map (2 same commands). gvgoff: 40,100 [gpvpoff] - // Activate/Deactivate kill steal protection on a map allowks: 40,100 - // Modifies your HP/SP. heal: 40,60 - // GM Hide (total invisibility to characters and monsters) (1 command + /hide). hide: 40,60 - // Changes your job to one you specify (2 same commands). job: 40,60 [jobchange] - // Enables you to to jump randomly on a map (that you are already on). jump: 40,40 - // Warps you to your last save point (2 same commands). load: 40,60 [return] - // Warps you to a specific npc tonpc: 40,40 - // Saves a warp point. memo: 40,40 - // Set your character display options. (Visual effects of your character) option: 40,60 - // Sets the level of intemecy of your pet. petfriendly: 40,50 - // Sets hunger level of your pet. pethungry: 40,50 - // Turns PvP (Person vs. Person) off on a map. pvpoff: 40,100 - // Enables PvP on a map. pvpon: 40,100 - // Permanently adds a quest skill questskill: 40,60 - // Permanently removes a quest skill lostskill: 40,60 - // Sets the speed you can walk/attack at. Default is 150. speed: 40,60 - // Summons spirit spheres around you. spiritball: 40,60 - // Warp yourself to a certain map, at (x,y) coordinates (2 same commands) + also /mm or /mapmove. warp: 40,60 [rura,mapmove] - // Changes GM clothes color (2 same commands) dye: 40,50 [ccolor] - // Changes GM hair style (2 same commands) hairstyle: 40,40 [hstyle] - // Changes GM hair color (2 same commands) haircolor: 40,50 [hcolor] - // Deletes all your items. itemreset: 40,60 - // Does a skill/stat reset. reset: 40,60 - // Displays distribution of players on the server per map (% on each map which has players) users: 40,40 - // Deletes floor items in your range of sight cleanmap: 40,40 - // Kill all monsters in map (without drops) killmonster2: 40,40 - // Sets your spawn point (aka save point). save: 40,60 - // Do some visual effect on your character effect: 40,40 - // Do some visual effect on your character (misceffect) misceffect: 40,40 - // GM's magnifier identify: 40,40 - // Drop all your items dropall: 40,60 - // Store all your items storeall: 40,60 - // Allow other players to hit you out of PvP killable: 40,60 - // Look up a skill by name skillid: 40,40 - // Use a skill by id useskill: 40,40 - // What skills are required to get this skill skilltree: 40,40 - // Marriage commands marry: 40,40 divorce: 40,40 - // Adopt a novice into a family adopt: 40,40 - // Play a Sound! sound: 40,40 - // Displays a player's storage storagelist: 40,40 - // Displays a player's cart contents cartlist: 40,40 - // Displays a player's items itemlist: 40,40 - // Displays a player's stats stats: 40,40 - //--------------------- // 50: Sub-GM+ commands - // Creates a new guild, with you as the guildmaster. guild: 50,50 - // Brings up your guild storage wherever you are. gstorage: 50,60 - // Spawns a monster, and a certain amount (2 same commands + /monster). monster: 50,50 [spawn] - // Spawns a smaller sized version of a monster. monstersmall: 50,50 - // Spawns a larger sized version of a monster. monsterbig: 50,50 - // Spawns mobs that treat you as their master (they disappear after some time) summon: 50,50 - // It will spawn a supportive clone of the given player. clone: 50,50 - // It will spawn a supportive clone of the given player that follows the creator around. slaveclone: 50,50 - // It will spawn an aggresive clone of the given player. evilclone: 50,50 - - - //---------------- // 60: GM commands - // Add or Remove Cash Points to/from yourself cash: 60,60 - // Add or Remove Kafra Points to/from yourself points: 60,60 - // Starts Guild Wars agitstart: 60,100 - // Ends Guild Wars agitend: 60,100 - // Resurects yourself. alive: 60,60 - // Raises your base level by specified amount (7 same commands). blvl: 60,60 [lvup,blevel,baselvl,baselvup,baselevel,baselvlup] - // Raises your job level by specified amount (6 same commands). jlvl: 60,60 [jlevel,joblvl,joblvup,joblevel,joblvlup] - // Changes the sex of yourself changesex: 60,60 - // Raises your guild level by specified amount (6 same commands). glvl: 60,60 [glevel,guildlvl,guildlvup,guildlevel,guildlvlup] - // Find an itemID based on item name idsearch: 60,60 - // Creates an item of your choosing, either Item ID or Name (1 command + /item). item: 60,60 - // Creates a complet item (card, etc...) of your choosing, either Item ID or Name. item2: 60,60 - // Deletes an item of your choosing, either Item ID or Name. delitem: 60,60 - // Kill another character without hitting them. kill: 60,60 - // Kill all monsters in map (with drops) killmonster: 60,60 - // Creates yourself a pet egg. makeegg: 60,60 - // Hatches an egg hatch: 60,60 - // Instantly kills player whose name is entered and deals insane damage to everything around nuke: 60,60 - // Enable hitting a player even when not in PvP killer: 60,60 - // Creates weapon of desired element. produce: 60,60 - // Warps a character to you (1 command + /recall). recall: 60,60 - // Refines all weapons in your items list. refine: 60,80 - // Will repair all broken items in inventory. repairall: 60,60 - // Change Status of your character str: 60,60 agi: 60,60 @@ -677,292 +523,215 @@ int: 60,60 dex: 60,60 luk: 60,60 - // Gives all skills allskill: 60,60 [allskills,skillall,skillsall] - // Sets GM stats to maximum allstats: 60,60 [allstat,statall,statsall] - // Gives you stat points. stpoint: 60,60 - // Gives you skill points of desired amount. skpoint: 60,60 - // Warps all online character of a guild to you. (at least one member of that guild must be on.) guildrecall: 60,60 - // Warps all online character of a party to you. // (at least one party member must be online.) partyrecall: 60,60 - // Allows you to spy on any Guilds Guild chat. // (at least one member of that guild must be on.) // NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) guildspy: 60,60 - // Allows you to spy on any party's party chat. // (at least one party member must be online.) // NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) partyspy: 60,60 - // Gives you zeny (or subtracts, if amount is negative) zeny: 60,80 - // Block a player indefinitely block: 60,100 [charblock] - // Unblock a player unblock: 60,100 [charunblock] - // Ban a player for a limited time ban: 60,100 [banish,charban,charbanish] - // Unban a player unban: 60,100 [unbanish,charunban,charunbanish] - // To send specified character in jails jail: 60,100 - // To discharge a jailed character (2 same commands) unjail: 60,100 [discharge] - // Timed jailing jailfor: 60,60 - // Create a static warp portal that lasts until the next reboot addwarp: 60,60 - // Open a trade window with any player trade: 60,60 - // Changes the player's appearance (headgear) changelook: 60,60 - // Homunculus commands for GMs hlvl: 60,60 [homlevel,hlevel,homlvl,homlvup] - - homevolve: 60,60 [homevolution] - - makehomun: 60,60 - - homfriendly: 60,60 - - homhungry: 60,60 - - // Re-calculates stats, as if the homun was sent back to level 1 and re-leveled homshuffle: 60,60 - // WoE 2 start/stop commands agitstart2: 60,100 agitend2: 60,100 - // Resets player stats streset: 60,60 - // Resets player skills skreset: 60,60 - - - //---------------------- // 80: GM Chief commands - // Set the server to day. day: 80,100 - // Set the server to night. night: 80,100 - // Kills everyone on the server. doom: 80,100 - // Kills everyone on the map you are on. doommap: 80,80 - // Recalls Everyone To Your Coordinates recallall: 80,80 - // Revives all players on the map. raisemap: 80,80 - // Revives all players on the server. raise: 80,100 - // Hides a NPC. hidenpc: 80,100 - // Unhides a NPC. shownpc: 80,100 - // Loads an NPC script by path loadnpc: 80,100 - // Unloads a NPC unloadnpc: 80,100 - // Move a NPC npcmove: 80,100 - // turn skills on for a map skillon: 80,100 - // turn skills off for a map skilloff: 80,100 - // Mute a player (prevents talking, usage of skills and commands) mute: 80,100 - // Unmute a player unmute: 80,100 - //--------------------------- // 99: Administrator commands - // Disconnect all users from the server kickall: 99,100 - // Closes Map-Server mapexit: 99,100 - // Used for testing packet sends from the client (debug function) send: 99,100 - // Give information about terrain/area (debug function) gat: 99,100 - // Displays a status change without really applying it (debug function) displaystatus: 99,100 - // Displays the animation of a skill without really using it (debug function) displayskill: 99,100 - // Shows information about the map mapinfo: 99,100 - // Set Map Flags mapflag: 99,100 - // Re-load item database (admin command) reloaditemdb: 99,100 - // Re-load monsters database (admin command) reloadmobdb: 99,100 - // Re-load skills database (admin command) reloadskilldb: 99,100 - // Re-load scripts (admin command) reloadscript: 99,100 - // Change a battle_config flag without rebooting server setbattleflag: 99,100 - // Re-load gm command config (admin command) reloadatcommand: 99,100 - // Re-load battle config (admin command) // Note that some player config settings won't take effect until relog // (display exp, display zeny, display skill delay fail, ...) reloadbattleconf: 99,100 - // Re-load status database (admin command) reloadstatusdb: 99,100 - // Re-load player info database (admin command) reloadpcdb: 99,100 - // Re-load the Message of the Day (admin command) reloadmotd: 99,100 - // Changes the GM level of another character // (lasts until reboot, or gm list reload) adjgmlvl: 99,100 - // Changes the required GM level of an @ command // (effect lasts until restart or command reload) adjcmdlvl: 99,100 - // [Un]Disguise All Players (admin command) disguiseall: 99,100 undisguiseall: 99,100 - // Mutes every player on screen (admin command) mutearea: 99,100 [stfu] - // Makes you immune to attacks (monsters/players/skills cannot target/hit you, admin command) battleignore: 99,100 [monsterignore] - //--------------------------------------------------------------- // 99: Weather effects snow: 99,100 @@ -973,17 +742,12 @@ fireworks: 99,100 sakura: 99,100 leaves: 99,100 - // Stop all weather effects clearweather: 99,100 - //--------------------------------------------------------------- // 100: Disabled commands - //--------------------- // OTHER: not a command - - import:conf/import/atcommand_conf.txt \ No newline at end of file -- cgit v1.2.3-70-g09d2 From 526217d77d50dc27b0815e3d5895df7bfa38ff76 Mon Sep 17 00:00:00 2001 From: gepard1984 Date: Mon, 13 Feb 2012 01:19:04 +0000 Subject: - Added `libconfig` (configuration file library: http://www.hyperrealm.com/libconfig/): - Updated VS9/10 project files. - Updated `configure` & `Makefile`s. - New GM, Commands & Permissions system: - '''This is a backwards compatibility breaking update''', please read tid:58877 - Replaced GM levels with Player Groups. - Commands permissions & other privileges now depend on group, not GM level. - `@help` command improvements: requires "commandname" param and shows more detailed info about commands. - Modified GM whisper system to deliver messages basing on permissions, not GM level. - Remote trade request is now possible only if player is allowed to use `@trade` command as well. - Added a proper permission to use `/changemaptype` command. - `clif_displaymessage` is now capable of displaying multiline messages. - All `ACMD_FUNC`s are static now, and the only way to invoke them is with `is_atcommand()`; all client commands (starting with `/`) are now translated into corresponding atcommands (with exception of `/kick` used on monster, as there is no atcommand to kill single monster). - Removed nonsense "bot check" triggering when player blocked (`/ex`) Server. - Merged `@monster`, `@monsterbig` and `@monstersmall`. - Improved flow of atcommand execution to avoid revealing info about online players or existing commands to non-privileged players. - Merged `atcommand` and `charcommand` script functions (`charcommand` is aliased to `atcommand`). - Fixed `atcommand` script function reading unknown memory area (possible access violation). git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@15572 54d463be-8e91-2dee-dedb-b68131a5f0ec --- 3rdparty/libconfig/LICENSE | 674 ++++++++ 3rdparty/libconfig/Makefile.in | 24 + 3rdparty/libconfig/grammar.c | 2001 +++++++++++++++++++++++ 3rdparty/libconfig/grammar.h | 113 ++ 3rdparty/libconfig/libconfig-1.4.8 | 0 3rdparty/libconfig/libconfig.c | 1615 +++++++++++++++++++ 3rdparty/libconfig/libconfig.h | 320 ++++ 3rdparty/libconfig/parsectx.h | 47 + 3rdparty/libconfig/scanctx.c | 170 ++ 3rdparty/libconfig/scanctx.h | 61 + 3rdparty/libconfig/scanner.c | 2362 ++++++++++++++++++++++++++++ 3rdparty/libconfig/scanner.h | 326 ++++ 3rdparty/libconfig/strbuf.c | 57 + 3rdparty/libconfig/strbuf.h | 39 + 3rdparty/libconfig/wincompat.h | 89 ++ Makefile.in | 13 +- conf/atcommand_athena.conf | 813 +--------- conf/battle/gm.conf | 87 - conf/char_athena.conf | 6 +- conf/groups.conf | 274 ++++ conf/help.txt | 402 +++-- conf/help2.txt | 94 -- conf/import-tmpl/atcommand_conf.txt | 0 conf/log_athena.conf | 6 +- conf/login_athena.conf | 7 +- conf/msg_athena.conf | 12 +- configure | 288 +++- configure.in | 6 +- doc/atcommands.txt | 213 +++ doc/permissions.txt | 21 + sql-files/upgrade_svn15572.sql | 3 + src/char/Makefile.in | 20 +- src/char/char.c | 22 +- src/common/Makefile.in | 30 +- src/common/conf.c | 109 ++ src/common/conf.h | 13 + src/common/showmsg.c | 16 + src/common/showmsg.h | 3 + src/login/Makefile.in | 21 +- src/login/account.h | 2 +- src/login/account_sql.c | 12 +- src/login/login.c | 24 +- src/login/login.h | 4 +- src/map/Makefile.in | 24 +- src/map/atcommand.c | 1587 ++++++++----------- src/map/atcommand.h | 30 +- src/map/battle.c | 26 - src/map/battle.h | 27 - src/map/buyingstore.c | 10 +- src/map/chat.c | 4 +- src/map/chrif.c | 8 +- src/map/clif.c | 499 ++---- src/map/clif.h | 2 - src/map/intif.c | 34 +- src/map/intif.h | 2 +- src/map/log.c | 15 +- src/map/log.h | 4 +- src/map/mail.c | 8 +- src/map/party.c | 8 +- src/map/pc.c | 144 +- src/map/pc.h | 37 +- src/map/pc_groups.c | 459 ++++++ src/map/pc_groups.h | 20 + src/map/script.c | 59 +- src/map/skill.c | 13 +- src/map/storage.c | 8 +- src/map/trade.c | 30 +- src/map/vending.c | 4 +- src/tool/Makefile.in | 14 +- vcproj-10/char-server_sql.vcxproj | 20 +- vcproj-10/char-server_sql.vcxproj.filters | 54 +- vcproj-10/login-server_sql.vcxproj | 20 +- vcproj-10/login-server_sql.vcxproj.filters | 54 +- vcproj-10/map-server_sql.vcxproj | 24 +- vcproj-10/map-server_sql.vcxproj.filters | 85 +- vcproj-10/mapcache.vcxproj | 8 +- vcproj-9/char-server_sql.vcproj | 86 +- vcproj-9/login-server_sql.vcproj | 88 +- vcproj-9/map-server_sql.vcproj | 140 +- vcproj-9/mapcache.vcproj | 12 +- 80 files changed, 11240 insertions(+), 2846 deletions(-) create mode 100644 3rdparty/libconfig/LICENSE create mode 100644 3rdparty/libconfig/Makefile.in create mode 100644 3rdparty/libconfig/grammar.c create mode 100644 3rdparty/libconfig/grammar.h create mode 100644 3rdparty/libconfig/libconfig-1.4.8 create mode 100644 3rdparty/libconfig/libconfig.c create mode 100644 3rdparty/libconfig/libconfig.h create mode 100644 3rdparty/libconfig/parsectx.h create mode 100644 3rdparty/libconfig/scanctx.c create mode 100644 3rdparty/libconfig/scanctx.h create mode 100644 3rdparty/libconfig/scanner.c create mode 100644 3rdparty/libconfig/scanner.h create mode 100644 3rdparty/libconfig/strbuf.c create mode 100644 3rdparty/libconfig/strbuf.h create mode 100644 3rdparty/libconfig/wincompat.h create mode 100644 conf/groups.conf delete mode 100644 conf/help2.txt delete mode 100644 conf/import-tmpl/atcommand_conf.txt create mode 100644 doc/atcommands.txt create mode 100644 doc/permissions.txt create mode 100644 sql-files/upgrade_svn15572.sql create mode 100644 src/common/conf.c create mode 100644 src/common/conf.h create mode 100644 src/map/pc_groups.c create mode 100644 src/map/pc_groups.h (limited to 'conf/atcommand_athena.conf') diff --git a/3rdparty/libconfig/LICENSE b/3rdparty/libconfig/LICENSE new file mode 100644 index 000000000..94a9ed024 --- /dev/null +++ b/3rdparty/libconfig/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/3rdparty/libconfig/Makefile.in b/3rdparty/libconfig/Makefile.in new file mode 100644 index 000000000..22642413d --- /dev/null +++ b/3rdparty/libconfig/Makefile.in @@ -0,0 +1,24 @@ + +LIBCONFIG_OBJ = libconfig.o grammar.o scanctx.o scanner.o strbuf.o +LIBCONFIG_H = libconfig.h grammar.h parsectx.h scanctx.h scanner.h strbuf.h wincompat.h + +@SET_MAKE@ + +##################################################################### +.PHONY : all clean help + +all: $(LIBCONFIG_OBJ) + +clean: + rm -rf *.o + +help: + @echo "possible targets are 'all' 'clean' 'help'" + @echo "'all' - builds $(LIBCONFIG_OBJ)" + @echo "'clean' - deletes $(LIBCONFIG_OBJ)" + @echo "'help' - outputs this message" + +##################################################################### + +%.o: %.c $(LIBCONFIG_H) + @CC@ @CFLAGS@ @LDFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $< diff --git a/3rdparty/libconfig/grammar.c b/3rdparty/libconfig/grammar.c new file mode 100644 index 000000000..e95a569f6 --- /dev/null +++ b/3rdparty/libconfig/grammar.c @@ -0,0 +1,2001 @@ + +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton implementation for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output. */ +#define YYBISON 1 + +/* Bison version. */ +#define YYBISON_VERSION "2.4.1" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 1 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + +/* Using locations. */ +#define YYLSP_NEEDED 0 + +/* Substitute the variable and function names. */ +#define yyparse libconfig_yyparse +#define yylex libconfig_yylex +#define yyerror libconfig_yyerror +#define yylval libconfig_yylval +#define yychar libconfig_yychar +#define yydebug libconfig_yydebug +#define yynerrs libconfig_yynerrs + + +/* Copy the first part of user declarations. */ + +/* Line 189 of yacc.c */ +#line 32 "grammar.y" + +#include +#include +#include "libconfig.h" +#ifdef WIN32 +#include "wincompat.h" + +/* prevent warnings about redefined malloc/free in generated code: */ +#ifndef _STDLIB_H +#define _STDLIB_H +#endif + +#include +#endif +#include "parsectx.h" +#include "scanctx.h" + +/* these delcarations are provided to suppress compiler warnings */ +extern int libconfig_yylex(); +extern int libconfig_yyget_lineno(); + +static const char *err_array_elem_type = "mismatched element type in array"; +static const char *err_duplicate_setting = "duplicate setting name"; + +#define _delete(P) free((void *)(P)) + +#define IN_ARRAY() \ + (ctx->parent && (ctx->parent->type == CONFIG_TYPE_ARRAY)) + +#define IN_LIST() \ + (ctx->parent && (ctx->parent->type == CONFIG_TYPE_LIST)) + +static void capture_parse_pos(void *scanner, struct scan_context *scan_ctx, + config_setting_t *setting) +{ + setting->line = (unsigned int)libconfig_yyget_lineno(scanner); + setting->file = scanctx_current_filename(scan_ctx); +} + +#define CAPTURE_PARSE_POS(S) \ + capture_parse_pos(scanner, scan_ctx, (S)) + +void libconfig_yyerror(void *scanner, struct parse_context *ctx, + struct scan_context *scan_ctx, char const *s) +{ + if(ctx->config->error_text) return; + ctx->config->error_line = libconfig_yyget_lineno(scanner); + ctx->config->error_text = s; +} + + + +/* Line 189 of yacc.c */ +#line 134 "grammar.c" + +/* Enabling traces. */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + +/* Enabling verbose error messages. */ +#ifdef YYERROR_VERBOSE +# undef YYERROR_VERBOSE +# define YYERROR_VERBOSE 1 +#else +# define YYERROR_VERBOSE 0 +#endif + +/* Enabling the token table. */ +#ifndef YYTOKEN_TABLE +# define YYTOKEN_TABLE 0 +#endif + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOK_BOOLEAN = 258, + TOK_INTEGER = 259, + TOK_HEX = 260, + TOK_INTEGER64 = 261, + TOK_HEX64 = 262, + TOK_FLOAT = 263, + TOK_STRING = 264, + TOK_NAME = 265, + TOK_EQUALS = 266, + TOK_NEWLINE = 267, + TOK_ARRAY_START = 268, + TOK_ARRAY_END = 269, + TOK_LIST_START = 270, + TOK_LIST_END = 271, + TOK_COMMA = 272, + TOK_GROUP_START = 273, + TOK_GROUP_END = 274, + TOK_SEMICOLON = 275, + TOK_GARBAGE = 276, + TOK_ERROR = 277 + }; +#endif +/* Tokens. */ +#define TOK_BOOLEAN 258 +#define TOK_INTEGER 259 +#define TOK_HEX 260 +#define TOK_INTEGER64 261 +#define TOK_HEX64 262 +#define TOK_FLOAT 263 +#define TOK_STRING 264 +#define TOK_NAME 265 +#define TOK_EQUALS 266 +#define TOK_NEWLINE 267 +#define TOK_ARRAY_START 268 +#define TOK_ARRAY_END 269 +#define TOK_LIST_START 270 +#define TOK_LIST_END 271 +#define TOK_COMMA 272 +#define TOK_GROUP_START 273 +#define TOK_GROUP_END 274 +#define TOK_SEMICOLON 275 +#define TOK_GARBAGE 276 +#define TOK_ERROR 277 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 214 of yacc.c */ +#line 85 "grammar.y" + + int ival; + long long llval; + double fval; + char *sval; + + + +/* Line 214 of yacc.c */ +#line 223 "grammar.c" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + + +/* Copy the second part of user declarations. */ + + +/* Line 264 of yacc.c */ +#line 235 "grammar.c" + +#ifdef short +# undef short +#endif + +#ifdef YYTYPE_UINT8 +typedef YYTYPE_UINT8 yytype_uint8; +#else +typedef unsigned char yytype_uint8; +#endif + +#ifdef YYTYPE_INT8 +typedef YYTYPE_INT8 yytype_int8; +#elif (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +typedef signed char yytype_int8; +#else +typedef short int yytype_int8; +#endif + +#ifdef YYTYPE_UINT16 +typedef YYTYPE_UINT16 yytype_uint16; +#else +typedef unsigned short int yytype_uint16; +#endif + +#ifdef YYTYPE_INT16 +typedef YYTYPE_INT16 yytype_int16; +#else +typedef short int yytype_int16; +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned int +# endif +#endif + +#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) + +#ifndef YY_ +# if YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(msgid) dgettext ("bison-runtime", msgid) +# endif +# endif +# ifndef YY_ +# define YY_(msgid) msgid +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YYUSE(e) ((void) (e)) +#else +# define YYUSE(e) /* empty */ +#endif + +/* Identity function, used to suppress warnings about constant conditions. */ +#ifndef lint +# define YYID(n) (n) +#else +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static int +YYID (int yyi) +#else +static int +YYID (yyi) + int yyi; +#endif +{ + return yyi; +} +#endif + +#if ! defined yyoverflow || YYERROR_VERBOSE + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's `empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined _STDLIB_H \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef _STDLIB_H +# define _STDLIB_H 1 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ + + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +/* Copy COUNT objects from FROM to TO. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(To, From, Count) \ + __builtin_memcpy (To, From, (Count) * sizeof (*(From))) +# else +# define YYCOPY(To, From, Count) \ + do \ + { \ + YYSIZE_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (To)[yyi] = (From)[yyi]; \ + } \ + while (YYID (0)) +# endif +# endif + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYSIZE_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / sizeof (*yyptr); \ + } \ + while (YYID (0)) + +#endif + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 6 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 35 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 23 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 20 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 39 +/* YYNRULES -- Number of states. */ +#define YYNSTATES 47 + +/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ +#define YYUNDEFTOK 2 +#define YYMAXUTOK 277 + +#define YYTRANSLATE(YYX) \ + ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ +static const yytype_uint8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22 +}; + +#if YYDEBUG +/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in + YYRHS. */ +static const yytype_uint8 yyprhs[] = +{ + 0, 0, 3, 4, 6, 8, 11, 12, 14, 15, + 17, 19, 20, 26, 27, 32, 33, 38, 40, 42, + 44, 46, 48, 51, 53, 55, 57, 59, 61, 63, + 65, 67, 71, 72, 74, 76, 80, 81, 83, 84 +}; + +/* YYRHS -- A `-1'-separated list of the rules' RHS. */ +static const yytype_int8 yyrhs[] = +{ + 24, 0, -1, -1, 25, -1, 28, -1, 25, 28, + -1, -1, 25, -1, -1, 20, -1, 17, -1, -1, + 10, 29, 11, 34, 27, -1, -1, 13, 31, 40, + 14, -1, -1, 15, 33, 38, 16, -1, 36, -1, + 30, -1, 32, -1, 41, -1, 9, -1, 35, 9, + -1, 3, -1, 4, -1, 6, -1, 5, -1, 7, + -1, 8, -1, 35, -1, 34, -1, 37, 17, 34, + -1, -1, 37, -1, 36, -1, 39, 17, 36, -1, + -1, 39, -1, -1, 18, 42, 26, 19, -1 +}; + +/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ +static const yytype_uint16 yyrline[] = +{ + 0, 100, 100, 102, 106, 107, 110, 112, 115, 117, + 118, 123, 122, 142, 141, 165, 164, 187, 188, 189, + 190, 194, 195, 199, 219, 241, 263, 285, 307, 325, + 353, 354, 357, 359, 363, 364, 367, 369, 374, 373 +}; +#endif + +#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "$end", "error", "$undefined", "TOK_BOOLEAN", "TOK_INTEGER", "TOK_HEX", + "TOK_INTEGER64", "TOK_HEX64", "TOK_FLOAT", "TOK_STRING", "TOK_NAME", + "TOK_EQUALS", "TOK_NEWLINE", "TOK_ARRAY_START", "TOK_ARRAY_END", + "TOK_LIST_START", "TOK_LIST_END", "TOK_COMMA", "TOK_GROUP_START", + "TOK_GROUP_END", "TOK_SEMICOLON", "TOK_GARBAGE", "TOK_ERROR", "$accept", + "configuration", "setting_list", "setting_list_optional", + "setting_terminator", "setting", "$@1", "array", "$@2", "list", "$@3", + "value", "string", "simple_value", "value_list", "value_list_optional", + "simple_value_list", "simple_value_list_optional", "group", "$@4", 0 +}; +#endif + +# ifdef YYPRINT +/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to + token YYLEX-NUM. */ +static const yytype_uint16 yytoknum[] = +{ + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277 +}; +# endif + +/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ +static const yytype_uint8 yyr1[] = +{ + 0, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 27, 29, 28, 31, 30, 33, 32, 34, 34, 34, + 34, 35, 35, 36, 36, 36, 36, 36, 36, 36, + 37, 37, 38, 38, 39, 39, 40, 40, 42, 41 +}; + +/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ +static const yytype_uint8 yyr2[] = +{ + 0, 2, 0, 1, 1, 2, 0, 1, 0, 1, + 1, 0, 5, 0, 4, 0, 4, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 0, 1, 1, 3, 0, 1, 0, 4 +}; + +/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state + STATE-NUM when YYTABLE doesn't specify something else to do. Zero + means the default is an error. */ +static const yytype_uint8 yydefact[] = +{ + 2, 11, 0, 3, 4, 0, 1, 5, 0, 23, + 24, 26, 25, 27, 28, 21, 13, 15, 38, 18, + 19, 8, 29, 17, 20, 36, 32, 6, 10, 9, + 12, 22, 34, 37, 0, 30, 33, 0, 7, 0, + 0, 14, 0, 16, 39, 35, 31 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + -1, 2, 3, 39, 30, 4, 5, 19, 25, 20, + 26, 21, 22, 23, 36, 37, 33, 34, 24, 27 +}; + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +#define YYPACT_NINF -26 +static const yytype_int8 yypact[] = +{ + -8, -26, 12, -8, -26, 5, -26, -26, 0, -26, + -26, -26, -26, -26, -26, -26, -26, -26, -26, -26, + -26, -6, 10, -26, -26, 23, 0, -8, -26, -26, + -26, -26, -26, 3, 7, -26, 6, 8, -8, 14, + 23, -26, 0, -26, -26, -26, -26 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -26, -26, -5, -26, -26, -3, -26, -26, -26, -26, + -26, -25, -26, -15, -26, -26, -26, -26, -26, -26 +}; + +/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule which + number is the opposite. If zero, do what YYDEFACT says. + If YYTABLE_NINF, syntax error. */ +#define YYTABLE_NINF -1 +static const yytype_uint8 yytable[] = +{ + 7, 35, 1, 9, 10, 11, 12, 13, 14, 15, + 32, 28, 6, 16, 29, 17, 8, 46, 18, 31, + 40, 41, 38, 42, 43, 45, 9, 10, 11, 12, + 13, 14, 15, 44, 0, 7 +}; + +static const yytype_int8 yycheck[] = +{ + 3, 26, 10, 3, 4, 5, 6, 7, 8, 9, + 25, 17, 0, 13, 20, 15, 11, 42, 18, 9, + 17, 14, 27, 17, 16, 40, 3, 4, 5, 6, + 7, 8, 9, 19, -1, 38 +}; + +/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_uint8 yystos[] = +{ + 0, 10, 24, 25, 28, 29, 0, 28, 11, 3, + 4, 5, 6, 7, 8, 9, 13, 15, 18, 30, + 32, 34, 35, 36, 41, 31, 33, 42, 17, 20, + 27, 9, 36, 39, 40, 34, 37, 38, 25, 26, + 17, 14, 17, 16, 19, 36, 34 +}; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY (-2) +#define YYEOF 0 + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab + + +/* Like YYERROR except do call yyerror. This remains here temporarily + to ease the transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ + +#define YYFAIL goto yyerrlab + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + yytoken = YYTRANSLATE (yychar); \ + YYPOPSTACK (1); \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (scanner, ctx, scan_ctx, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ +while (YYID (0)) + + +#define YYTERROR 1 +#define YYERRCODE 256 + + +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + + +/* YY_LOCATION_PRINT -- Print the location on the stream. + This macro was not mandated originally: define only if we know + we won't break user code: when these are the locations we know. */ + +#ifndef YY_LOCATION_PRINT +# if YYLTYPE_IS_TRIVIAL +# define YY_LOCATION_PRINT(File, Loc) \ + fprintf (File, "%d.%d-%d.%d", \ + (Loc).first_line, (Loc).first_column, \ + (Loc).last_line, (Loc).last_column) +# else +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif +#endif + + +/* YYLEX -- calling `yylex' with the right arguments. */ + +#ifdef YYLEX_PARAM +# define YYLEX yylex (&yylval, YYLEX_PARAM) +#else +# define YYLEX yylex (&yylval, scanner) +#endif + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (YYID (0)) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Type, Value, scanner, ctx, scan_ctx); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (YYID (0)) + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx) +#else +static void +yy_symbol_value_print (yyoutput, yytype, yyvaluep, scanner, ctx, scan_ctx) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; + void *scanner; + struct parse_context *ctx; + struct scan_context *scan_ctx; +#endif +{ + if (!yyvaluep) + return; + YYUSE (scanner); + YYUSE (ctx); + YYUSE (scan_ctx); +# ifdef YYPRINT + if (yytype < YYNTOKENS) + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); +# else + YYUSE (yyoutput); +# endif + switch (yytype) + { + default: + break; + } +} + + +/*--------------------------------. +| Print this symbol on YYOUTPUT. | +`--------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx) +#else +static void +yy_symbol_print (yyoutput, yytype, yyvaluep, scanner, ctx, scan_ctx) + FILE *yyoutput; + int yytype; + YYSTYPE const * const yyvaluep; + void *scanner; + struct parse_context *ctx; + struct scan_context *scan_ctx; +#endif +{ + if (yytype < YYNTOKENS) + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + else + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + + yy_symbol_value_print (yyoutput, yytype, yyvaluep, scanner, ctx, scan_ctx); + YYFPRINTF (yyoutput, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +#else +static void +yy_stack_print (yybottom, yytop) + yytype_int16 *yybottom; + yytype_int16 *yytop; +#endif +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (YYID (0)) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yy_reduce_print (YYSTYPE *yyvsp, int yyrule, void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx) +#else +static void +yy_reduce_print (yyvsp, yyrule, scanner, ctx, scan_ctx) + YYSTYPE *yyvsp; + int yyrule; + void *scanner; + struct parse_context *ctx; + struct scan_context *scan_ctx; +#endif +{ + int yynrhs = yyr2[yyrule]; + int yyi; + unsigned long int yylno = yyrline[yyrule]; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], + &(yyvsp[(yyi + 1) - (yynrhs)]) + , scanner, ctx, scan_ctx); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, Rule, scanner, ctx, scan_ctx); \ +} while (YYID (0)) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + +#if YYERROR_VERBOSE + +# ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen strlen +# else +/* Return the length of YYSTR. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static YYSIZE_T +yystrlen (const char *yystr) +#else +static YYSIZE_T +yystrlen (yystr) + const char *yystr; +#endif +{ + YYSIZE_T yylen; + for (yylen = 0; yystr[yylen]; yylen++) + continue; + return yylen; +} +# endif +# endif + +# ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else +/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in + YYDEST. */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static char * +yystpcpy (char *yydest, const char *yysrc) +#else +static char * +yystpcpy (yydest, yysrc) + char *yydest; + const char *yysrc; +#endif +{ + char *yyd = yydest; + const char *yys = yysrc; + + while ((*yyd++ = *yys++) != '\0') + continue; + + return yyd - 1; +} +# endif +# endif + +# ifndef yytnamerr +/* Copy to YYRES the contents of YYSTR after stripping away unnecessary + quotes and backslashes, so that it's suitable for yyerror. The + heuristic is that double-quoting is unnecessary unless the string + contains an apostrophe, a comma, or backslash (other than + backslash-backslash). YYSTR is taken from yytname. If YYRES is + null, do not copy; instead, return the length of what the result + would have been. */ +static YYSIZE_T +yytnamerr (char *yyres, const char *yystr) +{ + if (*yystr == '"') + { + YYSIZE_T yyn = 0; + char const *yyp = yystr; + + for (;;) + switch (*++yyp) + { + case '\'': + case ',': + goto do_not_strip_quotes; + + case '\\': + if (*++yyp != '\\') + goto do_not_strip_quotes; + /* Fall through. */ + default: + if (yyres) + yyres[yyn] = *yyp; + yyn++; + break; + + case '"': + if (yyres) + yyres[yyn] = '\0'; + return yyn; + } + do_not_strip_quotes: ; + } + + if (! yyres) + return yystrlen (yystr); + + return yystpcpy (yyres, yystr) - yyres; +} +# endif + +/* Copy into YYRESULT an error message about the unexpected token + YYCHAR while in state YYSTATE. Return the number of bytes copied, + including the terminating null byte. If YYRESULT is null, do not + copy anything; just return the number of bytes that would be + copied. As a special case, return 0 if an ordinary "syntax error" + message will do. Return YYSIZE_MAXIMUM if overflow occurs during + size calculation. */ +static YYSIZE_T +yysyntax_error (char *yyresult, int yystate, int yychar) +{ + int yyn = yypact[yystate]; + + if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) + return 0; + else + { + int yytype = YYTRANSLATE (yychar); + YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); + YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; + int yysize_overflow = 0; + enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; + char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; + int yyx; + +# if 0 + /* This is so xgettext sees the translatable formats that are + constructed on the fly. */ + YY_("syntax error, unexpected %s"); + YY_("syntax error, unexpected %s, expecting %s"); + YY_("syntax error, unexpected %s, expecting %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s"); + YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); +# endif + char *yyfmt; + char const *yyf; + static char const yyunexpected[] = "syntax error, unexpected %s"; + static char const yyexpecting[] = ", expecting %s"; + static char const yyor[] = " or %s"; + char yyformat[sizeof yyunexpected + + sizeof yyexpecting - 1 + + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) + * (sizeof yyor - 1))]; + char const *yyprefix = yyexpecting; + + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yycount = 1; + + yyarg[0] = yytname[yytype]; + yyfmt = yystpcpy (yyformat, yyunexpected); + + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) + { + if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) + { + yycount = 1; + yysize = yysize0; + yyformat[sizeof yyunexpected - 1] = '\0'; + break; + } + yyarg[yycount++] = yytname[yyx]; + yysize1 = yysize + yytnamerr (0, yytname[yyx]); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + yyfmt = yystpcpy (yyfmt, yyprefix); + yyprefix = yyor; + } + + yyf = YY_(yyformat); + yysize1 = yysize + yystrlen (yyf); + yysize_overflow |= (yysize1 < yysize); + yysize = yysize1; + + if (yysize_overflow) + return YYSIZE_MAXIMUM; + + if (yyresult) + { + /* Avoid sprintf, as that infringes on the user's name space. + Don't have undefined behavior even if the translation + produced a string with the wrong number of "%s"s. */ + char *yyp = yyresult; + int yyi = 0; + while ((*yyp = *yyf) != '\0') + { + if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) + { + yyp += yytnamerr (yyp, yyarg[yyi++]); + yyf += 2; + } + else + { + yyp++; + yyf++; + } + } + } + return yysize; + } +} +#endif /* YYERROR_VERBOSE */ + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +/*ARGSUSED*/ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +static void +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx) +#else +static void +yydestruct (yymsg, yytype, yyvaluep, scanner, ctx, scan_ctx) + const char *yymsg; + int yytype; + YYSTYPE *yyvaluep; + void *scanner; + struct parse_context *ctx; + struct scan_context *scan_ctx; +#endif +{ + YYUSE (yyvaluep); + YYUSE (scanner); + YYUSE (ctx); + YYUSE (scan_ctx); + + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + + switch (yytype) + { + + default: + break; + } +} + +/* Prevent warnings from -Wmissing-prototypes. */ +#ifdef YYPARSE_PARAM +#if defined __STDC__ || defined __cplusplus +int yyparse (void *YYPARSE_PARAM); +#else +int yyparse (); +#endif +#else /* ! YYPARSE_PARAM */ +#if defined __STDC__ || defined __cplusplus +int yyparse (void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx); +#else +int yyparse (); +#endif +#endif /* ! YYPARSE_PARAM */ + + + + + +/*-------------------------. +| yyparse or yypush_parse. | +`-------------------------*/ + +#ifdef YYPARSE_PARAM +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *YYPARSE_PARAM) +#else +int +yyparse (YYPARSE_PARAM) + void *YYPARSE_PARAM; +#endif +#else /* ! YYPARSE_PARAM */ +#if (defined __STDC__ || defined __C99__FUNC__ \ + || defined __cplusplus || defined _MSC_VER) +int +yyparse (void *scanner, struct parse_context *ctx, struct scan_context *scan_ctx) +#else +int +yyparse (scanner, ctx, scan_ctx) + void *scanner; + struct parse_context *ctx; + struct scan_context *scan_ctx; +#endif +#endif +{ +/* The lookahead symbol. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; + + /* Number of syntax errors so far. */ + int yynerrs; + + int yystate; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus; + + /* The stacks and their tools: + `yyss': related to states. + `yyvs': related to semantic values. + + Refer to the stacks thru separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* The state stack. */ + yytype_int16 yyssa[YYINITDEPTH]; + yytype_int16 *yyss; + yytype_int16 *yyssp; + + /* The semantic value stack. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs; + YYSTYPE *yyvsp; + + YYSIZE_T yystacksize; + + int yyn; + int yyresult; + /* Lookahead token as an internal (translated) token number. */ + int yytoken; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + +#if YYERROR_VERBOSE + /* Buffer for error messages, and its allocated size. */ + char yymsgbuf[128]; + char *yymsg = yymsgbuf; + YYSIZE_T yymsg_alloc = sizeof yymsgbuf; +#endif + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; + yystacksize = YYINITDEPTH; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yystate = 0; + yyerrstatus = 0; + yynerrs = 0; + yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + yyssp = yyss; + yyvsp = yyvs; + + goto yysetstate; + +/*------------------------------------------------------------. +| yynewstate -- Push a new state, which is found in yystate. | +`------------------------------------------------------------*/ + yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + yysetstate: + *yyssp = yystate; + + if (yyss + yystacksize - 1 <= yyssp) + { + /* Get the current used size of the three stacks, in elements. */ + YYSIZE_T yysize = yyssp - yyss + 1; + +#ifdef yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + YYSTYPE *yyvs1 = yyvs; + yytype_int16 *yyss1 = yyss; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * sizeof (*yyssp), + &yyvs1, yysize * sizeof (*yyvsp), + &yystacksize); + + yyss = yyss1; + yyvs = yyvs1; + } +#else /* no yyoverflow */ +# ifndef YYSTACK_RELOCATE + goto yyexhaustedlab; +# else + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + goto yyexhaustedlab; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yytype_int16 *yyss1 = yyss; + union yyalloc *yyptr = + (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + if (! yyptr) + goto yyexhaustedlab; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif +#endif /* no yyoverflow */ + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YYDPRINTF ((stderr, "Stack size increased to %lu\n", + (unsigned long int) yystacksize)); + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } + + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yyn == YYPACT_NINF) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token: ")); + yychar = YYLEX; + } + + if (yychar <= YYEOF) + { + yychar = yytoken = YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yyn == 0 || yyn == YYTABLE_NINF) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + + /* Discard the shifted token. */ + yychar = YYEMPTY; + + yystate = yyn; + *++yyvsp = yylval; + + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- Do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + `$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + case 11: + +/* Line 1455 of yacc.c */ +#line 123 "grammar.y" + { + ctx->setting = config_setting_add(ctx->parent, (yyvsp[(1) - (1)].sval), CONFIG_TYPE_NONE); + + if(ctx->setting == NULL) + { + libconfig_yyerror(scanner, ctx, scan_ctx, err_duplicate_setting); + YYABORT; + } + else + { + CAPTURE_PARSE_POS(ctx->setting); + } + } + break; + + case 13: + +/* Line 1455 of yacc.c */ +#line 142 "grammar.y" + { + if(IN_LIST()) + { + ctx->parent = config_setting_add(ctx->parent, NULL, CONFIG_TYPE_ARRAY); + CAPTURE_PARSE_POS(ctx->parent); + } + else + { + ctx->setting->type = CONFIG_TYPE_ARRAY; + ctx->parent = ctx->setting; + ctx->setting = NULL; + } + } + break; + + case 14: + +/* Line 1455 of yacc.c */ +#line 157 "grammar.y" + { + if(ctx->parent) + ctx->parent = ctx->parent->parent; + } + break; + + case 15: + +/* Line 1455 of yacc.c */ +#line 165 "grammar.y" + { + if(IN_LIST()) + { + ctx->parent = config_setting_add(ctx->parent, NULL, CONFIG_TYPE_LIST); + CAPTURE_PARSE_POS(ctx->parent); + } + else + { + ctx->setting->type = CONFIG_TYPE_LIST; + ctx->parent = ctx->setting; + ctx->setting = NULL; + } + } + break; + + case 16: + +/* Line 1455 of yacc.c */ +#line 180 "grammar.y" + { + if(ctx->parent) + ctx->parent = ctx->parent->parent; + } + break; + + case 21: + +/* Line 1455 of yacc.c */ +#line 194 "grammar.y" + { parsectx_append_string(ctx, (yyvsp[(1) - (1)].sval)); free((yyvsp[(1) - (1)].sval)); } + break; + + case 22: + +/* Line 1455 of yacc.c */ +#line 195 "grammar.y" + { parsectx_append_string(ctx, (yyvsp[(2) - (2)].sval)); free((yyvsp[(2) - (2)].sval)); } + break; + + case 23: + +/* Line 1455 of yacc.c */ +#line 200 "grammar.y" + { + if(IN_ARRAY() || IN_LIST()) + { + config_setting_t *e = config_setting_set_bool_elem(ctx->parent, -1, + (int)(yyvsp[(1) - (1)].ival)); + + if(! e) + { + libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); + YYABORT; + } + else + { + CAPTURE_PARSE_POS(e); + } + } + else + config_setting_set_bool(ctx->setting, (int)(yyvsp[(1) - (1)].ival)); + } + break; + + case 24: + +/* Line 1455 of yacc.c */ +#line 220 "grammar.y" + { + if(IN_ARRAY() || IN_LIST()) + { + config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, (yyvsp[(1) - (1)].ival)); + if(! e) + { + libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); + YYABORT; + } + else + { + config_setting_set_format(e, CONFIG_FORMAT_DEFAULT); + CAPTURE_PARSE_POS(e); + } + } + else + { + config_setting_set_int(ctx->setting, (yyvsp[(1) - (1)].ival)); + config_setting_set_format(ctx->setting, CONFIG_FORMAT_DEFAULT); + } + } + break; + + case 25: + +/* Line 1455 of yacc.c */ +#line 242 "grammar.y" + { + if(IN_ARRAY() || IN_LIST()) + { + config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, (yyvsp[(1) - (1)].llval)); + if(! e) + { + libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); + YYABORT; + } + else + { + config_setting_set_format(e, CONFIG_FORMAT_DEFAULT); + CAPTURE_PARSE_POS(e); + } + } + else + { + config_setting_set_int64(ctx->setting, (yyvsp[(1) - (1)].llval)); + config_setting_set_format(ctx->setting, CONFIG_FORMAT_DEFAULT); + } + } + break; + + case 26: + +/* Line 1455 of yacc.c */ +#line 264 "grammar.y" + { + if(IN_ARRAY() || IN_LIST()) + { + config_setting_t *e = config_setting_set_int_elem(ctx->parent, -1, (yyvsp[(1) - (1)].ival)); + if(! e) + { + libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); + YYABORT; + } + else + { + config_setting_set_format(e, CONFIG_FORMAT_HEX); + CAPTURE_PARSE_POS(e); + } + } + else + { + config_setting_set_int(ctx->setting, (yyvsp[(1) - (1)].ival)); + config_setting_set_format(ctx->setting, CONFIG_FORMAT_HEX); + } + } + break; + + case 27: + +/* Line 1455 of yacc.c */ +#line 286 "grammar.y" + { + if(IN_ARRAY() || IN_LIST()) + { + config_setting_t *e = config_setting_set_int64_elem(ctx->parent, -1, (yyvsp[(1) - (1)].llval)); + if(! e) + { + libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); + YYABORT; + } + else + { + config_setting_set_format(e, CONFIG_FORMAT_HEX); + CAPTURE_PARSE_POS(e); + } + } + else + { + config_setting_set_int64(ctx->setting, (yyvsp[(1) - (1)].llval)); + config_setting_set_format(ctx->setting, CONFIG_FORMAT_HEX); + } + } + break; + + case 28: + +/* Line 1455 of yacc.c */ +#line 308 "grammar.y" + { + if(IN_ARRAY() || IN_LIST()) + { + config_setting_t *e = config_setting_set_float_elem(ctx->parent, -1, (yyvsp[(1) - (1)].fval)); + if(! e) + { + libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); + YYABORT; + } + else + { + CAPTURE_PARSE_POS(e); + } + } + else + config_setting_set_float(ctx->setting, (yyvsp[(1) - (1)].fval)); + } + break; + + case 29: + +/* Line 1455 of yacc.c */ +#line 326 "grammar.y" + { + if(IN_ARRAY() || IN_LIST()) + { + const char *s = parsectx_take_string(ctx); + config_setting_t *e = config_setting_set_string_elem(ctx->parent, -1, s); + _delete(s); + + if(! e) + { + libconfig_yyerror(scanner, ctx, scan_ctx, err_array_elem_type); + YYABORT; + } + else + { + CAPTURE_PARSE_POS(e); + } + } + else + { + const char *s = parsectx_take_string(ctx); + config_setting_set_string(ctx->setting, s); + _delete(s); + } + } + break; + + case 38: + +/* Line 1455 of yacc.c */ +#line 374 "grammar.y" + { + if(IN_LIST()) + { + ctx->parent = config_setting_add(ctx->parent, NULL, CONFIG_TYPE_GROUP); + CAPTURE_PARSE_POS(ctx->parent); + } + else + { + ctx->setting->type = CONFIG_TYPE_GROUP; + ctx->parent = ctx->setting; + ctx->setting = NULL; + } + } + break; + + case 39: + +/* Line 1455 of yacc.c */ +#line 389 "grammar.y" + { + if(ctx->parent) + ctx->parent = ctx->parent->parent; + } + break; + + + +/* Line 1455 of yacc.c */ +#line 1788 "grammar.c" + default: break; + } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + + *++yyvsp = yyval; + + /* Now `shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + + yyn = yyr1[yyn]; + + yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; + if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yytable[yystate]; + else + yystate = yydefgoto[yyn - YYNTOKENS]; + + goto yynewstate; + + +/*------------------------------------. +| yyerrlab -- here on detecting error | +`------------------------------------*/ +yyerrlab: + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; +#if ! YYERROR_VERBOSE + yyerror (scanner, ctx, scan_ctx, YY_("syntax error")); +#else + { + YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); + if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) + { + YYSIZE_T yyalloc = 2 * yysize; + if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) + yyalloc = YYSTACK_ALLOC_MAXIMUM; + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); + yymsg = (char *) YYSTACK_ALLOC (yyalloc); + if (yymsg) + yymsg_alloc = yyalloc; + else + { + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + } + } + + if (0 < yysize && yysize <= yymsg_alloc) + { + (void) yysyntax_error (yymsg, yystate, yychar); + yyerror (scanner, ctx, scan_ctx, yymsg); + } + else + { + yyerror (scanner, ctx, scan_ctx, YY_("syntax error")); + if (yysize != 0) + goto yyexhaustedlab; + } + } +#endif + } + + + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval, scanner, ctx, scan_ctx); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + + /* Pacify compilers like GCC when the user code never invokes + YYERROR and the label yyerrorlab therefore never appears in user + code. */ + if (/*CONSTCOND*/ 0) + goto yyerrorlab; + + /* Do not reclaim the symbols of the rule which action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + for (;;) + { + yyn = yypact[yystate]; + if (yyn != YYPACT_NINF) + { + yyn += YYTERROR; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + yystos[yystate], yyvsp, scanner, ctx, scan_ctx); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + *++yyvsp = yylval; + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturn; + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturn; + +#if !defined(yyoverflow) || YYERROR_VERBOSE +/*-------------------------------------------------. +| yyexhaustedlab -- memory exhaustion comes here. | +`-------------------------------------------------*/ +yyexhaustedlab: + yyerror (scanner, ctx, scan_ctx, YY_("memory exhausted")); + yyresult = 2; + /* Fall through. */ +#endif + +yyreturn: + if (yychar != YYEMPTY) + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval, scanner, ctx, scan_ctx); + /* Do not reclaim the symbols of the rule which action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + yystos[*yyssp], yyvsp, scanner, ctx, scan_ctx); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif +#if YYERROR_VERBOSE + if (yymsg != yymsgbuf) + YYSTACK_FREE (yymsg); +#endif + /* Make sure YYID is used. */ + return YYID (yyresult); +} + + + +/* Line 1675 of yacc.c */ +#line 395 "grammar.y" + + diff --git a/3rdparty/libconfig/grammar.h b/3rdparty/libconfig/grammar.h new file mode 100644 index 000000000..2ce199dde --- /dev/null +++ b/3rdparty/libconfig/grammar.h @@ -0,0 +1,113 @@ + +/* A Bison parser, made by GNU Bison 2.4.1. */ + +/* Skeleton interface for Bison's Yacc-like parsers in C + + Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 + Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + + +/* Tokens. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + /* Put the tokens into the symbol table, so that GDB and other debuggers + know about them. */ + enum yytokentype { + TOK_BOOLEAN = 258, + TOK_INTEGER = 259, + TOK_HEX = 260, + TOK_INTEGER64 = 261, + TOK_HEX64 = 262, + TOK_FLOAT = 263, + TOK_STRING = 264, + TOK_NAME = 265, + TOK_EQUALS = 266, + TOK_NEWLINE = 267, + TOK_ARRAY_START = 268, + TOK_ARRAY_END = 269, + TOK_LIST_START = 270, + TOK_LIST_END = 271, + TOK_COMMA = 272, + TOK_GROUP_START = 273, + TOK_GROUP_END = 274, + TOK_SEMICOLON = 275, + TOK_GARBAGE = 276, + TOK_ERROR = 277 + }; +#endif +/* Tokens. */ +#define TOK_BOOLEAN 258 +#define TOK_INTEGER 259 +#define TOK_HEX 260 +#define TOK_INTEGER64 261 +#define TOK_HEX64 262 +#define TOK_FLOAT 263 +#define TOK_STRING 264 +#define TOK_NAME 265 +#define TOK_EQUALS 266 +#define TOK_NEWLINE 267 +#define TOK_ARRAY_START 268 +#define TOK_ARRAY_END 269 +#define TOK_LIST_START 270 +#define TOK_LIST_END 271 +#define TOK_COMMA 272 +#define TOK_GROUP_START 273 +#define TOK_GROUP_END 274 +#define TOK_SEMICOLON 275 +#define TOK_GARBAGE 276 +#define TOK_ERROR 277 + + + + +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef union YYSTYPE +{ + +/* Line 1676 of yacc.c */ +#line 85 "grammar.y" + + int ival; + long long llval; + double fval; + char *sval; + + + +/* Line 1676 of yacc.c */ +#line 105 "grammar.h" +} YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define yystype YYSTYPE /* obsolescent; will be withdrawn */ +# define YYSTYPE_IS_DECLARED 1 +#endif + + + + diff --git a/3rdparty/libconfig/libconfig-1.4.8 b/3rdparty/libconfig/libconfig-1.4.8 new file mode 100644 index 000000000..e69de29bb diff --git a/3rdparty/libconfig/libconfig.c b/3rdparty/libconfig/libconfig.c new file mode 100644 index 000000000..e64213c16 --- /dev/null +++ b/3rdparty/libconfig/libconfig.c @@ -0,0 +1,1615 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library. If not, see . + ---------------------------------------------------------------------------- +*/ + +#ifdef HAVE_CONFIG_H +#include "ac_config.h" +#endif + +#include "libconfig.h" +#include "grammar.h" +#include "scanner.h" +#include "scanctx.h" +#include "parsectx.h" +#include "wincompat.h" + +#include + +#ifdef HAVE_XLOCALE_H +#include +#endif + +#include +#include +#include + +#define PATH_TOKENS ":./" +#define CHUNK_SIZE 16 +#define FLOAT_PRECISION 10 + +#define _new(T) (T *)calloc(sizeof(T), 1) /* zeroed */ +#define _delete(P) free((void *)(P)) + +/* ------------------------------------------------------------------------- */ + +#ifndef LIBCONFIG_STATIC +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) + +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + return(TRUE); +} + +#endif /* WIN32 */ +#endif /* LIBCONFIG_STATIC */ + +/* ------------------------------------------------------------------------- */ + +static const char *__io_error = "file I/O error"; + +static void __config_list_destroy(config_list_t *list); +static void __config_write_setting(const config_setting_t *setting, + FILE *stream, int depth, + unsigned short tab_width); + +extern int libconfig_yyparse(void *scanner, struct parse_context *ctx, + struct scan_context *scan_ctx); +extern int libconfig_yylex_init_extra(struct scan_context *scan_ctx, + yyscan_t *scanner); + +/* ------------------------------------------------------------------------- */ + +static void __config_locale_override(void) +{ +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) \ + && ! defined(__MINGW32__) + + _configthreadlocale(_ENABLE_PER_THREAD_LOCALE); + setlocale(LC_NUMERIC, "C"); + +#elif defined(__APPLE__) + + locale_t loc = newlocale(LC_NUMERIC_MASK, "C", NULL); + uselocale(loc); + +#elif ((defined HAVE_NEWLOCALE) && (defined HAVE_USELOCALE)) + + locale_t loc = newlocale(LC_NUMERIC, "C", NULL); + uselocale(loc); + +#else + +#warning "No way to modify calling thread's locale!" + +#endif +} + +/* ------------------------------------------------------------------------- */ + +static void __config_locale_restore(void) +{ +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) \ + && ! defined(__MINGW32__) + + _configthreadlocale(_DISABLE_PER_THREAD_LOCALE); + +#elif ((defined HAVE_USELOCALE) && (defined HAVE_FREELOCALE)) + + locale_t loc = uselocale(LC_GLOBAL_LOCALE); + freelocale(loc); + +#else + +#warning "No way to modify calling thread's locale!" + +#endif +} + +/* ------------------------------------------------------------------------- */ + +static int __config_name_compare(const char *a, const char *b) +{ + const char *p, *q; + + for(p = a, q = b; ; p++, q++) + { + int pd = ((! *p) || strchr(PATH_TOKENS, *p)); + int qd = ((! *q) || strchr(PATH_TOKENS, *q)); + + if(pd && qd) + break; + else if(pd) + return(-1); + else if(qd) + return(1); + else if(*p < *q) + return(-1); + else if(*p > *q) + return(1); + } + + return(0); +} + +/* ------------------------------------------------------------------------- */ + +static void __config_indent(FILE *stream, int depth, unsigned short w) +{ + if(w) + fprintf(stream, "%*s", (depth - 1) * w, " "); + else + { + int i; + for(i = 0; i < (depth - 1); ++i) + fputc('\t', stream); + } +} + +/* ------------------------------------------------------------------------- */ + +static void __config_write_value(const config_value_t *value, int type, + int format, int depth, + unsigned short tab_width, FILE *stream) +{ + char fbuf[64]; + + switch(type) + { + /* boolean */ + case CONFIG_TYPE_BOOL: + fputs(value->ival ? "true" : "false", stream); + break; + + /* int */ + case CONFIG_TYPE_INT: + switch(format) + { + case CONFIG_FORMAT_HEX: + fprintf(stream, "0x%X", value->ival); + break; + + case CONFIG_FORMAT_DEFAULT: + default: + fprintf(stream, "%d", value->ival); + break; + } + break; + + /* 64-bit int */ + case CONFIG_TYPE_INT64: + switch(format) + { + case CONFIG_FORMAT_HEX: + fprintf(stream, "0x" INT64_HEX_FMT "L", value->llval); + break; + + case CONFIG_FORMAT_DEFAULT: + default: + fprintf(stream, INT64_FMT "L", value->llval); + break; + } + break; + + /* float */ + case CONFIG_TYPE_FLOAT: + { + char *q; + + snprintf(fbuf, sizeof(fbuf) - 3, "%.*g", FLOAT_PRECISION, value->fval); + + /* check for exponent */ + q = strchr(fbuf, 'e'); + if(! q) + { + /* no exponent */ + if(! strchr(fbuf, '.')) /* no decimal point */ + strcat(fbuf, ".0"); + else + { + /* has decimal point */ + char *p; + + for(p = fbuf + strlen(fbuf) - 1; p > fbuf; --p) + { + if(*p != '0') + { + *(++p) = '\0'; + break; + } + } + } + } + + fputs(fbuf, stream); + break; + } + + /* string */ + case CONFIG_TYPE_STRING: + { + char *p; + + fputc('\"', stream); + + if(value->sval) + { + for(p = value->sval; *p; p++) + { + int c = (int)*p & 0xFF; + switch(c) + { + case '\"': + case '\\': + fputc('\\', stream); + fputc(c, stream); + break; + + case '\n': + fputs("\\n", stream); + break; + + case '\r': + fputs("\\r", stream); + break; + + case '\f': + fputs("\\f", stream); + break; + + case '\t': + fputs("\\t", stream); + break; + + default: + if(c >= ' ') + fputc(c, stream); + else + fprintf(stream, "\\x%02X", c); + } + } + } + fputc('\"', stream); + break; + } + + /* list */ + case CONFIG_TYPE_LIST: + { + config_list_t *list = value->list; + + fprintf(stream, "( "); + + if(list) + { + int len = list->length; + config_setting_t **s; + + for(s = list->elements; len--; s++) + { + __config_write_value(&((*s)->value), (*s)->type, + config_setting_get_format(*s), + depth + 1, tab_width, stream); + + if(len) + fputc(',', stream); + + fputc(' ', stream); + } + } + + fputc(')', stream); + break; + } + + /* array */ + case CONFIG_TYPE_ARRAY: + { + config_list_t *list = value->list; + + fprintf(stream, "[ "); + + if(list) + { + int len = list->length; + config_setting_t **s; + + for(s = list->elements; len--; s++) + { + __config_write_value(&((*s)->value), (*s)->type, + config_setting_get_format(*s), + depth + 1, tab_width, stream); + + if(len) + fputc(',', stream); + + fputc(' ', stream); + } + } + + fputc(']', stream); + break; + } + + /* group */ + case CONFIG_TYPE_GROUP: + { + config_list_t *list = value->list; + + if(depth > 0) + { +#ifdef K_AND_R_STYLE /* Horrendous, but many people like it. */ + fputc(' ', stream); +#else + fputc('\n', stream); + + if(depth > 1) + __config_indent(stream, depth, tab_width); +#endif + fprintf(stream, "{\n"); + } + + if(list) + { + int len = list->length; + config_setting_t **s; + + for(s = list->elements; len--; s++) + __config_write_setting(*s, stream, depth + 1, tab_width); + } + + if(depth > 1) + __config_indent(stream, depth, tab_width); + + if(depth > 0) + fputc('}', stream); + + break; + } + + default: + /* this shouldn't happen, but handle it gracefully... */ + fputs("???", stream); + break; + } +} + +/* ------------------------------------------------------------------------- */ + +static void __config_list_add(config_list_t *list, config_setting_t *setting) +{ + if((list->length % CHUNK_SIZE) == 0) + { + list->elements = (config_setting_t **)realloc( + list->elements, + (list->length + CHUNK_SIZE) * sizeof(config_setting_t *)); + } + + list->elements[list->length] = setting; + list->length++; +} + +/* ------------------------------------------------------------------------- */ + +static config_setting_t *__config_list_search(config_list_t *list, + const char *name, + unsigned int *idx) +{ + config_setting_t **found = NULL; + unsigned int i; + + if(! list) + return(NULL); + + for(i = 0, found = list->elements; i < list->length; i++, found++) + { + if(! (*found)->name) + continue; + + if(! __config_name_compare(name, (*found)->name)) + { + if(idx) + *idx = i; + + return(*found); + } + } + + return(NULL); +} + +/* ------------------------------------------------------------------------- */ + +static config_setting_t *__config_list_remove(config_list_t *list, int idx) +{ + config_setting_t *removed = *(list->elements + idx); + int offset = (idx * sizeof(config_setting_t *)); + int len = list->length - 1 - idx; + char *base = (char *)list->elements + offset; + + memmove(base, base + sizeof(config_setting_t *), + len * sizeof(config_setting_t *)); + + list->length--; + + /* possibly realloc smaller? */ + + return(removed); +} + +/* ------------------------------------------------------------------------- */ + +static void __config_setting_destroy(config_setting_t *setting) +{ + if(setting) + { + if(setting->name) + _delete(setting->name); + + if(setting->type == CONFIG_TYPE_STRING) + _delete(setting->value.sval); + + else if((setting->type == CONFIG_TYPE_GROUP) + || (setting->type == CONFIG_TYPE_ARRAY) + || (setting->type == CONFIG_TYPE_LIST)) + { + if(setting->value.list) + __config_list_destroy(setting->value.list); + } + + if(setting->hook && setting->config->destructor) + setting->config->destructor(setting->hook); + + _delete(setting); + } +} + +/* ------------------------------------------------------------------------- */ + +static void __config_list_destroy(config_list_t *list) +{ + config_setting_t **p; + unsigned int i; + + if(! list) + return; + + if(list->elements) + { + for(p = list->elements, i = 0; i < list->length; p++, i++) + __config_setting_destroy(*p); + + _delete(list->elements); + } + + _delete(list); +} + +/* ------------------------------------------------------------------------- */ + +static int __config_vector_checktype(const config_setting_t *vector, int type) +{ + /* if the array is empty, then it has no type yet */ + + if(! vector->value.list) + return(CONFIG_TRUE); + + if(vector->value.list->length == 0) + return(CONFIG_TRUE); + + /* if it's a list, any type is allowed */ + + if(vector->type == CONFIG_TYPE_LIST) + return(CONFIG_TRUE); + + /* otherwise the first element added determines the type of the array */ + + return((vector->value.list->elements[0]->type == type) + ? CONFIG_TRUE : CONFIG_FALSE); +} + +/* ------------------------------------------------------------------------- */ + +static int __config_validate_name(const char *name) +{ + const char *p = name; + + if(*p == '\0') + return(CONFIG_FALSE); + + if(! isalpha(*p) && (*p != '*')) + return(CONFIG_FALSE); + + for(++p; *p; ++p) + { + if(! (isalpha(*p) || isdigit(*p) || strchr("*_-", (int)*p))) + return(CONFIG_FALSE); + } + + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +static int __config_read(config_t *config, FILE *stream, const char *filename, + const char *str) +{ + yyscan_t scanner; + struct scan_context scan_ctx; + struct parse_context parse_ctx; + YY_BUFFER_STATE buffer = NULL; + int r; + + /* Reinitialize the config */ + void (*destructor)(void *) = config->destructor; + const char *include_dir = config->include_dir; + unsigned short tab_width = config->tab_width; + unsigned short flags = config->flags; + + config->include_dir = NULL; + config_destroy(config); + config_init(config); + + config->destructor = destructor; + config->include_dir = include_dir; + config->tab_width = tab_width; + config->flags = flags; + + parsectx_init(&parse_ctx); + parse_ctx.config = config; + parse_ctx.parent = config->root; + parse_ctx.setting = config->root; + + __config_locale_override(); + + scanctx_init(&scan_ctx, filename); + scan_ctx.config = config; + libconfig_yylex_init_extra(&scan_ctx, &scanner); + + if(stream) + libconfig_yyrestart(stream, scanner); + else /* read from string */ + buffer = libconfig_yy_scan_string(str, scanner); + + libconfig_yyset_lineno(1, scanner); + r = libconfig_yyparse(scanner, &parse_ctx, &scan_ctx); + + if(r != 0) + { + YY_BUFFER_STATE buf; + + config->error_file = scanctx_current_filename(&scan_ctx); + config->error_type = CONFIG_ERR_PARSE; + + /* Unwind the include stack, freeing the buffers and closing the files. */ + while((buf = (YY_BUFFER_STATE)scanctx_pop_include(&scan_ctx)) != NULL) + libconfig_yy_delete_buffer(buf, scanner); + } + + libconfig_yylex_destroy(scanner); + config->filenames = scanctx_cleanup(&scan_ctx, &(config->num_filenames)); + parsectx_cleanup(&parse_ctx); + + __config_locale_restore(); + + return(r == 0 ? CONFIG_TRUE : CONFIG_FALSE); +} + +/* ------------------------------------------------------------------------- */ + +int config_read(config_t *config, FILE *stream) +{ + return(__config_read(config, stream, NULL, NULL)); +} + +/* ------------------------------------------------------------------------- */ + +int config_read_string(config_t *config, const char *str) +{ + return(__config_read(config, NULL, NULL, str)); +} + +/* ------------------------------------------------------------------------- */ + +static void __config_write_setting(const config_setting_t *setting, + FILE *stream, int depth, + unsigned short tab_width) +{ + if(depth > 1) + __config_indent(stream, depth, tab_width); + + if(setting->name) + { + fputs(setting->name, stream); + fprintf(stream, " %c ", (setting->type == CONFIG_TYPE_GROUP ? ':' : '=')); + } + + __config_write_value(&(setting->value), setting->type, + config_setting_get_format(setting), + depth, tab_width, stream); + + if(depth > 0) + { + fputc(';', stream); + fputc('\n', stream); + } +} + +/* ------------------------------------------------------------------------- */ + +void config_write(const config_t *config, FILE *stream) +{ + __config_locale_override(); + + __config_write_setting(config->root, stream, 0, config->tab_width); + + __config_locale_restore(); +} + +/* ------------------------------------------------------------------------- */ + +int config_read_file(config_t *config, const char *filename) +{ + int ret; + FILE *stream = fopen(filename, "rt"); + if(! stream) + { + config->error_text = __io_error; + config->error_type = CONFIG_ERR_FILE_IO; + return(CONFIG_FALSE); + } + + ret = __config_read(config, stream, filename, NULL); + fclose(stream); + + return(ret); +} + +/* ------------------------------------------------------------------------- */ + +int config_write_file(config_t *config, const char *filename) +{ + FILE *f = fopen(filename, "wt"); + if(! f) + { + config->error_text = __io_error; + config->error_type = CONFIG_ERR_FILE_IO; + return(CONFIG_FALSE); + } + + config_write(config, f); + fclose(f); + config->error_type = CONFIG_ERR_NONE; + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +void config_destroy(config_t *config) +{ + unsigned int count = config->num_filenames; + const char **f; + + __config_setting_destroy(config->root); + + for(f = config->filenames; count > 0; ++f, --count) + _delete(*f); + + _delete(config->filenames); + _delete(config->include_dir); + + memset((void *)config, 0, sizeof(config_t)); +} + +/* ------------------------------------------------------------------------- */ + +void config_init(config_t *config) +{ + memset((void *)config, 0, sizeof(config_t)); + + config->root = _new(config_setting_t); + config->root->type = CONFIG_TYPE_GROUP; + config->root->config = config; + config->tab_width = 2; +} + +/* ------------------------------------------------------------------------- */ + +void config_set_auto_convert(config_t *config, int flag) +{ + if(flag) + config->flags |= CONFIG_OPTION_AUTOCONVERT; + else + config->flags &= ~CONFIG_OPTION_AUTOCONVERT; +} + +/* ------------------------------------------------------------------------- */ + +int config_get_auto_convert(const config_t *config) +{ + return((config->flags & CONFIG_OPTION_AUTOCONVERT) != 0); +} + +/* ------------------------------------------------------------------------- */ + +static config_setting_t *config_setting_create(config_setting_t *parent, + const char *name, int type) +{ + config_setting_t *setting; + config_list_t *list; + + if((parent->type != CONFIG_TYPE_GROUP) + && (parent->type != CONFIG_TYPE_ARRAY) + && (parent->type != CONFIG_TYPE_LIST)) + return(NULL); + + setting = _new(config_setting_t); + setting->parent = parent; + setting->name = (name == NULL) ? NULL : strdup(name); + setting->type = type; + setting->config = parent->config; + setting->hook = NULL; + setting->line = 0; + + list = parent->value.list; + + if(! list) + list = parent->value.list = _new(config_list_t); + + __config_list_add(list, setting); + + return(setting); +} + +/* ------------------------------------------------------------------------- */ + +static int __config_setting_get_int(const config_setting_t *setting, + int *value) +{ + switch(setting->type) + { + case CONFIG_TYPE_INT: + *value = setting->value.ival; + return(CONFIG_TRUE); + + case CONFIG_TYPE_INT64: + if((setting->value.llval > INT32_MAX) + || (setting->value.llval < INT32_MIN)) + *value = 0; + else + *value = (int)(setting->value.llval); + return(CONFIG_TRUE); + + case CONFIG_TYPE_FLOAT: + if((setting->config->flags & CONFIG_OPTION_AUTOCONVERT) != 0) + { + *value = (int)(setting->value.fval); + return(CONFIG_TRUE); + } + else + { /* fall through */ } + + default: + return(CONFIG_FALSE); + } +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_get_int(const config_setting_t *setting) +{ + int value = 0; + __config_setting_get_int(setting, &value); + return(value); +} + +/* ------------------------------------------------------------------------- */ + +static int __config_setting_get_int64(const config_setting_t *setting, + long long *value) +{ + switch(setting->type) + { + case CONFIG_TYPE_INT64: + *value = setting->value.llval; + return(CONFIG_TRUE); + + case CONFIG_TYPE_INT: + *value = (long long)(setting->value.ival); + return(CONFIG_TRUE); + + case CONFIG_TYPE_FLOAT: + if((setting->config->flags & CONFIG_OPTION_AUTOCONVERT) != 0) + { + *value = (long long)(setting->value.fval); + return(CONFIG_TRUE); + } + else + { /* fall through */ } + + default: + return(CONFIG_FALSE); + } +} + +/* ------------------------------------------------------------------------- */ + +long long config_setting_get_int64(const config_setting_t *setting) +{ + long long value = 0; + __config_setting_get_int64(setting, &value); + return(value); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_lookup_int(const config_setting_t *setting, + const char *name, int *value) +{ + config_setting_t *member = config_setting_get_member(setting, name); + if(! member) + return(CONFIG_FALSE); + + return(__config_setting_get_int(member, value)); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_lookup_int64(const config_setting_t *setting, + const char *name, long long *value) +{ + config_setting_t *member = config_setting_get_member(setting, name); + if(! member) + return(CONFIG_FALSE); + + return(__config_setting_get_int64(member, value)); +} + +/* ------------------------------------------------------------------------- */ + +static int __config_setting_get_float(const config_setting_t *setting, + double *value) +{ + switch(setting->type) + { + case CONFIG_TYPE_FLOAT: + *value = setting->value.fval; + return(CONFIG_TRUE); + + case CONFIG_TYPE_INT: + if(config_get_auto_convert(setting->config)) + { + *value = (double)(setting->value.ival); + return(CONFIG_TRUE); + } + else + return(CONFIG_FALSE); + + case CONFIG_TYPE_INT64: + if(config_get_auto_convert(setting->config)) + { + *value = (double)(setting->value.llval); + return(CONFIG_TRUE); + } + else + { /* fall through */ } + + default: + return(CONFIG_FALSE); + } +} + +/* ------------------------------------------------------------------------- */ + +double config_setting_get_float(const config_setting_t *setting) +{ + double value = 0.0; + __config_setting_get_float(setting, &value); + return(value); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_lookup_float(const config_setting_t *setting, + const char *name, double *value) +{ + config_setting_t *member = config_setting_get_member(setting, name); + if(! member) + return(CONFIG_FALSE); + + return(__config_setting_get_float(member, value)); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_lookup_string(const config_setting_t *setting, + const char *name, const char **value) +{ + config_setting_t *member = config_setting_get_member(setting, name); + if(! member) + return(CONFIG_FALSE); + + if(config_setting_type(member) != CONFIG_TYPE_STRING) + return(CONFIG_FALSE); + + *value = config_setting_get_string(member); + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_lookup_bool(const config_setting_t *setting, + const char *name, int *value) +{ + config_setting_t *member = config_setting_get_member(setting, name); + if(! member) + return(CONFIG_FALSE); + + if(config_setting_type(member) != CONFIG_TYPE_BOOL) + return(CONFIG_FALSE); + + *value = config_setting_get_bool(member); + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_set_int(config_setting_t *setting, int value) +{ + switch(setting->type) + { + case CONFIG_TYPE_NONE: + setting->type = CONFIG_TYPE_INT; + /* fall through */ + + case CONFIG_TYPE_INT: + setting->value.ival = value; + return(CONFIG_TRUE); + + case CONFIG_TYPE_FLOAT: + if(config_get_auto_convert(setting->config)) + { + setting->value.fval = (float)value; + return(CONFIG_TRUE); + } + else + return(CONFIG_FALSE); + + default: + return(CONFIG_FALSE); + } +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_set_int64(config_setting_t *setting, long long value) +{ + switch(setting->type) + { + case CONFIG_TYPE_NONE: + setting->type = CONFIG_TYPE_INT64; + /* fall through */ + + case CONFIG_TYPE_INT64: + setting->value.llval = value; + return(CONFIG_TRUE); + + case CONFIG_TYPE_INT: + if((value > INT32_MAX) || (value < INT32_MIN)) + setting->value.ival = 0; + else + setting->value.ival = (int)value; + return(CONFIG_TRUE); + + case CONFIG_TYPE_FLOAT: + if(config_get_auto_convert(setting->config)) + { + setting->value.fval = (float)value; + return(CONFIG_TRUE); + } + else + return(CONFIG_FALSE); + + default: + return(CONFIG_FALSE); + } +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_set_float(config_setting_t *setting, double value) +{ + switch(setting->type) + { + case CONFIG_TYPE_NONE: + setting->type = CONFIG_TYPE_FLOAT; + /* fall through */ + + case CONFIG_TYPE_FLOAT: + setting->value.fval = value; + return(CONFIG_TRUE); + + case CONFIG_TYPE_INT: + if((setting->config->flags & CONFIG_OPTION_AUTOCONVERT) != 0) + { + setting->value.ival = (int)value; + return(CONFIG_TRUE); + } + else + return(CONFIG_FALSE); + + case CONFIG_TYPE_INT64: + if((setting->config->flags & CONFIG_OPTION_AUTOCONVERT) != 0) + { + setting->value.llval = (long long)value; + return(CONFIG_TRUE); + } + else + return(CONFIG_FALSE); + + default: + return(CONFIG_FALSE); + } +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_get_bool(const config_setting_t *setting) +{ + return((setting->type == CONFIG_TYPE_BOOL) ? setting->value.ival : 0); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_set_bool(config_setting_t *setting, int value) +{ + if(setting->type == CONFIG_TYPE_NONE) + setting->type = CONFIG_TYPE_BOOL; + else if(setting->type != CONFIG_TYPE_BOOL) + return(CONFIG_FALSE); + + setting->value.ival = value; + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +const char *config_setting_get_string(const config_setting_t *setting) +{ + return((setting->type == CONFIG_TYPE_STRING) ? setting->value.sval : NULL); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_set_string(config_setting_t *setting, const char *value) +{ + if(setting->type == CONFIG_TYPE_NONE) + setting->type = CONFIG_TYPE_STRING; + else if(setting->type != CONFIG_TYPE_STRING) + return(CONFIG_FALSE); + + if(setting->value.sval) + _delete(setting->value.sval); + + setting->value.sval = (value == NULL) ? NULL : strdup(value); + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_set_format(config_setting_t *setting, short format) +{ + if(((setting->type != CONFIG_TYPE_INT) + && (setting->type != CONFIG_TYPE_INT64)) + || ((format != CONFIG_FORMAT_DEFAULT) && (format != CONFIG_FORMAT_HEX))) + return(CONFIG_FALSE); + + setting->format = format; + + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +short config_setting_get_format(const config_setting_t *setting) +{ + return(setting->format != 0 ? setting->format + : setting->config->default_format); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_lookup_from(config_setting_t *setting, + const char *path) +{ + const char *p = path; + config_setting_t *found; + + for(;;) + { + while(*p && strchr(PATH_TOKENS, *p)) + p++; + + if(! *p) + break; + + if(*p == '[') + found = config_setting_get_elem(setting, atoi(++p)); + else + found = config_setting_get_member(setting, p); + + if(! found) + break; + + setting = found; + + while(! strchr(PATH_TOKENS, *p)) + p++; + } + + return(*p ? NULL : setting); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_lookup(const config_t *config, const char *path) +{ + return(config_lookup_from(config->root, path)); +} + +/* ------------------------------------------------------------------------- */ + +int config_lookup_string(const config_t *config, const char *path, + const char **value) +{ + const config_setting_t *s = config_lookup(config, path); + if(! s) + return(CONFIG_FALSE); + + if(config_setting_type(s) != CONFIG_TYPE_STRING) + return(CONFIG_FALSE); + + *value = config_setting_get_string(s); + + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +int config_lookup_int(const config_t *config, const char *path, + int *value) +{ + const config_setting_t *s = config_lookup(config, path); + if(! s) + return(CONFIG_FALSE); + + return(__config_setting_get_int(s, value)); +} + +/* ------------------------------------------------------------------------- */ + +int config_lookup_int64(const config_t *config, const char *path, + long long *value) +{ + const config_setting_t *s = config_lookup(config, path); + if(! s) + return(CONFIG_FALSE); + + return(__config_setting_get_int64(s, value)); +} + +/* ------------------------------------------------------------------------- */ + +int config_lookup_float(const config_t *config, const char *path, + double *value) +{ + const config_setting_t *s = config_lookup(config, path); + if(! s) + return(CONFIG_FALSE); + + return(__config_setting_get_float(s, value)); +} + +/* ------------------------------------------------------------------------- */ + +int config_lookup_bool(const config_t *config, const char *path, int *value) +{ + const config_setting_t *s = config_lookup(config, path); + if(! s) + return(CONFIG_FALSE); + + if(config_setting_type(s) != CONFIG_TYPE_BOOL) + return(CONFIG_FALSE); + + *value = config_setting_get_bool(s); + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_get_int_elem(const config_setting_t *vector, int idx) +{ + const config_setting_t *element = config_setting_get_elem(vector, idx); + + return(element ? config_setting_get_int(element) : 0); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_setting_set_int_elem(config_setting_t *vector, + int idx, int value) +{ + config_setting_t *element = NULL; + + if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) + return(NULL); + + if(idx < 0) + { + if(! __config_vector_checktype(vector, CONFIG_TYPE_INT)) + return(NULL); + + element = config_setting_create(vector, NULL, CONFIG_TYPE_INT); + } + else + { + element = config_setting_get_elem(vector, idx); + + if(! element) + return(NULL); + } + + if(! config_setting_set_int(element, value)) + return(NULL); + + return(element); +} + +/* ------------------------------------------------------------------------- */ + +long long config_setting_get_int64_elem(const config_setting_t *vector, + int idx) +{ + const config_setting_t *element = config_setting_get_elem(vector, idx); + + return(element ? config_setting_get_int64(element) : 0); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_setting_set_int64_elem(config_setting_t *vector, + int idx, long long value) +{ + config_setting_t *element = NULL; + + if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) + return(NULL); + + if(idx < 0) + { + if(! __config_vector_checktype(vector, CONFIG_TYPE_INT64)) + return(NULL); + + element = config_setting_create(vector, NULL, CONFIG_TYPE_INT64); + } + else + { + element = config_setting_get_elem(vector, idx); + + if(! element) + return(NULL); + } + + if(! config_setting_set_int64(element, value)) + return(NULL); + + return(element); +} + +/* ------------------------------------------------------------------------- */ + +double config_setting_get_float_elem(const config_setting_t *vector, int idx) +{ + config_setting_t *element = config_setting_get_elem(vector, idx); + + return(element ? config_setting_get_float(element) : 0.0); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_setting_set_float_elem(config_setting_t *vector, + int idx, double value) +{ + config_setting_t *element = NULL; + + if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) + return(NULL); + + if(idx < 0) + { + if(! __config_vector_checktype(vector, CONFIG_TYPE_FLOAT)) + return(NULL); + + element = config_setting_create(vector, NULL, CONFIG_TYPE_FLOAT); + } + else + element = config_setting_get_elem(vector, idx); + + if(! element) + return(NULL); + + if(! config_setting_set_float(element, value)) + return(NULL); + + return(element); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_get_bool_elem(const config_setting_t *vector, int idx) +{ + config_setting_t *element = config_setting_get_elem(vector, idx); + + if(! element) + return(CONFIG_FALSE); + + if(element->type != CONFIG_TYPE_BOOL) + return(CONFIG_FALSE); + + return(element->value.ival); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_setting_set_bool_elem(config_setting_t *vector, + int idx, int value) +{ + config_setting_t *element = NULL; + + if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) + return(NULL); + + if(idx < 0) + { + if(! __config_vector_checktype(vector, CONFIG_TYPE_BOOL)) + return(NULL); + + element = config_setting_create(vector, NULL, CONFIG_TYPE_BOOL); + } + else + element = config_setting_get_elem(vector, idx); + + if(! element) + return(NULL); + + if(! config_setting_set_bool(element, value)) + return(NULL); + + return(element); +} + +/* ------------------------------------------------------------------------- */ + +const char *config_setting_get_string_elem(const config_setting_t *vector, + int idx) +{ + config_setting_t *element = config_setting_get_elem(vector, idx); + + if(! element) + return(NULL); + + if(element->type != CONFIG_TYPE_STRING) + return(NULL); + + return(element->value.sval); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_setting_set_string_elem(config_setting_t *vector, + int idx, const char *value) +{ + config_setting_t *element = NULL; + + if((vector->type != CONFIG_TYPE_ARRAY) && (vector->type != CONFIG_TYPE_LIST)) + return(NULL); + + if(idx < 0) + { + if(! __config_vector_checktype(vector, CONFIG_TYPE_STRING)) + return(NULL); + + element = config_setting_create(vector, NULL, CONFIG_TYPE_STRING); + } + else + element = config_setting_get_elem(vector, idx); + + if(! element) + return(NULL); + + if(! config_setting_set_string(element, value)) + return(NULL); + + return(element); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_setting_get_elem(const config_setting_t *vector, + unsigned int idx) +{ + config_list_t *list = vector->value.list; + + if(((vector->type != CONFIG_TYPE_ARRAY) + && (vector->type != CONFIG_TYPE_LIST) + && (vector->type != CONFIG_TYPE_GROUP)) || ! list) + return(NULL); + + if(idx >= list->length) + return(NULL); + + return(list->elements[idx]); +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_setting_get_member(const config_setting_t *setting, + const char *name) +{ + if(setting->type != CONFIG_TYPE_GROUP) + return(NULL); + + return(__config_list_search(setting->value.list, name, NULL)); +} + +/* ------------------------------------------------------------------------- */ + +void config_set_destructor(config_t *config, void (*destructor)(void *)) +{ + config->destructor = destructor; +} + +/* ------------------------------------------------------------------------- */ + +void config_set_include_dir(config_t *config, const char *include_dir) +{ + _delete(config->include_dir); + config->include_dir = strdup(include_dir); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_length(const config_setting_t *setting) +{ + if((setting->type != CONFIG_TYPE_GROUP) + && (setting->type != CONFIG_TYPE_ARRAY) + && (setting->type != CONFIG_TYPE_LIST)) + return(0); + + if(! setting->value.list) + return(0); + + return(setting->value.list->length); +} + +/* ------------------------------------------------------------------------- */ + +void config_setting_set_hook(config_setting_t *setting, void *hook) +{ + setting->hook = hook; +} + +/* ------------------------------------------------------------------------- */ + +config_setting_t *config_setting_add(config_setting_t *parent, + const char *name, int type) +{ + if((type < CONFIG_TYPE_NONE) || (type > CONFIG_TYPE_LIST)) + return(NULL); + + if(! parent) + return(NULL); + + if((parent->type == CONFIG_TYPE_ARRAY) || (parent->type == CONFIG_TYPE_LIST)) + name = NULL; + + if(name) + { + if(! __config_validate_name(name)) + return(NULL); + } + + if(config_setting_get_member(parent, name) != NULL) + return(NULL); /* already exists */ + + return(config_setting_create(parent, name, type)); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_remove(config_setting_t *parent, const char *name) +{ + unsigned int idx; + config_setting_t *setting; + + if(! parent) + return(CONFIG_FALSE); + + if(parent->type != CONFIG_TYPE_GROUP) + return(CONFIG_FALSE); + + if(! (setting = __config_list_search(parent->value.list, name, &idx))) + return(CONFIG_FALSE); + + __config_list_remove(parent->value.list, idx); + __config_setting_destroy(setting); + + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_remove_elem(config_setting_t *parent, unsigned int idx) +{ + config_list_t *list; + config_setting_t *removed = NULL; + + if(! parent) + return(CONFIG_FALSE); + + list = parent->value.list; + + if(((parent->type != CONFIG_TYPE_ARRAY) + && (parent->type != CONFIG_TYPE_LIST) + && (parent->type != CONFIG_TYPE_GROUP)) || ! list) + return(CONFIG_FALSE); + + if(idx >= list->length) + return(CONFIG_FALSE); + + removed = __config_list_remove(list, idx); + __config_setting_destroy(removed); + + return(CONFIG_TRUE); +} + +/* ------------------------------------------------------------------------- */ + +int config_setting_index(const config_setting_t *setting) +{ + config_setting_t **found = NULL; + config_list_t *list; + int i; + + if(! setting->parent) + return(-1); + + list = setting->parent->value.list; + + for(i = 0, found = list->elements; i < (int)list->length; ++i, ++found) + { + if(*found == setting) + return(i); + } + + return(-1); +} + +/* ------------------------------------------------------------------------- */ +/* eof */ diff --git a/3rdparty/libconfig/libconfig.h b/3rdparty/libconfig/libconfig.h new file mode 100644 index 000000000..683bda80b --- /dev/null +++ b/3rdparty/libconfig/libconfig.h @@ -0,0 +1,320 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library. If not, see . + ---------------------------------------------------------------------------- +*/ + +#ifndef __libconfig_h +#define __libconfig_h + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +#if defined(LIBCONFIG_STATIC) +#define LIBCONFIG_API +#elif defined(LIBCONFIG_EXPORTS) +#define LIBCONFIG_API __declspec(dllexport) +#else /* ! LIBCONFIG_EXPORTS */ +#define LIBCONFIG_API __declspec(dllimport) +#endif /* LIBCONFIG_STATIC */ +#else /* ! WIN32 */ +#define LIBCONFIG_API +#endif /* WIN32 */ + +#define LIBCONFIG_VER_MAJOR 1 +#define LIBCONFIG_VER_MINOR 4 +#define LIBCONFIG_VER_REVISION 8 + +#include + +#define CONFIG_TYPE_NONE 0 +#define CONFIG_TYPE_GROUP 1 +#define CONFIG_TYPE_INT 2 +#define CONFIG_TYPE_INT64 3 +#define CONFIG_TYPE_FLOAT 4 +#define CONFIG_TYPE_STRING 5 +#define CONFIG_TYPE_BOOL 6 +#define CONFIG_TYPE_ARRAY 7 +#define CONFIG_TYPE_LIST 8 + +#define CONFIG_FORMAT_DEFAULT 0 +#define CONFIG_FORMAT_HEX 1 + +#define CONFIG_OPTION_AUTOCONVERT 0x01 + +#define CONFIG_TRUE (1) +#define CONFIG_FALSE (0) + +typedef union config_value_t +{ + int ival; + long long llval; + double fval; + char *sval; + struct config_list_t *list; +} config_value_t; + +typedef struct config_setting_t +{ + char *name; + short type; + short format; + config_value_t value; + struct config_setting_t *parent; + struct config_t *config; + void *hook; + unsigned int line; + const char *file; +} config_setting_t; + +typedef enum +{ + CONFIG_ERR_NONE = 0, + CONFIG_ERR_FILE_IO = 1, + CONFIG_ERR_PARSE = 2 +} config_error_t; + +typedef struct config_list_t +{ + unsigned int length; + config_setting_t **elements; +} config_list_t; + +typedef struct config_t +{ + config_setting_t *root; + void (*destructor)(void *); + unsigned short flags; + unsigned short tab_width; + short default_format; + const char *include_dir; + const char *error_text; + const char *error_file; + int error_line; + config_error_t error_type; + const char **filenames; + unsigned int num_filenames; +} config_t; + +extern LIBCONFIG_API int config_read(config_t *config, FILE *stream); +extern LIBCONFIG_API void config_write(const config_t *config, FILE *stream); + +extern LIBCONFIG_API void config_set_default_format(config_t *config, + short format); + +extern LIBCONFIG_API void config_set_auto_convert(config_t *config, int flag); +extern LIBCONFIG_API int config_get_auto_convert(const config_t *config); + +extern LIBCONFIG_API int config_read_string(config_t *config, const char *str); + +extern LIBCONFIG_API int config_read_file(config_t *config, + const char *filename); +extern LIBCONFIG_API int config_write_file(config_t *config, + const char *filename); + +extern LIBCONFIG_API void config_set_destructor(config_t *config, + void (*destructor)(void *)); +extern LIBCONFIG_API void config_set_include_dir(config_t *config, + const char *include_dir); + +extern LIBCONFIG_API void config_init(config_t *config); +extern LIBCONFIG_API void config_destroy(config_t *config); + +extern LIBCONFIG_API int config_setting_get_int( + const config_setting_t *setting); +extern LIBCONFIG_API long long config_setting_get_int64( + const config_setting_t *setting); +extern LIBCONFIG_API double config_setting_get_float( + const config_setting_t *setting); +extern LIBCONFIG_API int config_setting_get_bool( + const config_setting_t *setting); +extern LIBCONFIG_API const char *config_setting_get_string( + const config_setting_t *setting); + +extern LIBCONFIG_API int config_setting_lookup_int( + const config_setting_t *setting, const char *name, int *value); +extern LIBCONFIG_API int config_setting_lookup_int64( + const config_setting_t *setting, const char *name, long long *value); +extern LIBCONFIG_API int config_setting_lookup_float( + const config_setting_t *setting, const char *name, double *value); +extern LIBCONFIG_API int config_setting_lookup_bool( + const config_setting_t *setting, const char *name, int *value); +extern LIBCONFIG_API int config_setting_lookup_string( + const config_setting_t *setting, const char *name, const char **value); + +extern LIBCONFIG_API int config_setting_set_int(config_setting_t *setting, + int value); +extern LIBCONFIG_API int config_setting_set_int64(config_setting_t *setting, + long long value); +extern LIBCONFIG_API int config_setting_set_float(config_setting_t *setting, + double value); +extern LIBCONFIG_API int config_setting_set_bool(config_setting_t *setting, + int value); +extern LIBCONFIG_API int config_setting_set_string(config_setting_t *setting, + const char *value); + +extern LIBCONFIG_API int config_setting_set_format(config_setting_t *setting, + short format); +extern LIBCONFIG_API short config_setting_get_format( + const config_setting_t *setting); + +extern LIBCONFIG_API int config_setting_get_int_elem( + const config_setting_t *setting, int idx); +extern LIBCONFIG_API long long config_setting_get_int64_elem( + const config_setting_t *setting, int idx); +extern LIBCONFIG_API double config_setting_get_float_elem( + const config_setting_t *setting, int idx); +extern LIBCONFIG_API int config_setting_get_bool_elem( + const config_setting_t *setting, int idx); +extern LIBCONFIG_API const char *config_setting_get_string_elem( + const config_setting_t *setting, int idx); + +extern LIBCONFIG_API config_setting_t *config_setting_set_int_elem( + config_setting_t *setting, int idx, int value); +extern LIBCONFIG_API config_setting_t *config_setting_set_int64_elem( + config_setting_t *setting, int idx, long long value); +extern LIBCONFIG_API config_setting_t *config_setting_set_float_elem( + config_setting_t *setting, int idx, double value); +extern LIBCONFIG_API config_setting_t *config_setting_set_bool_elem( + config_setting_t *setting, int idx, int value); +extern LIBCONFIG_API config_setting_t *config_setting_set_string_elem( + config_setting_t *setting, int idx, const char *value); + +#define /* const char * */ config_get_include_dir(/* const config_t * */ C) \ + ((C)->include_dir) + +#define /* int */ config_setting_type(/* const config_setting_t * */ S) \ + ((S)->type) + +#define /* int */ config_setting_is_group(/* const config_setting_t * */ S) \ + ((S)->type == CONFIG_TYPE_GROUP) +#define /* int */ config_setting_is_array(/* const config_setting_t * */ S) \ + ((S)->type == CONFIG_TYPE_ARRAY) +#define /* int */ config_setting_is_list(/* const config_setting_t * */ S) \ + ((S)->type == CONFIG_TYPE_LIST) + +#define /* int */ config_setting_is_aggregate( \ + /* const config_setting_t * */ S) \ + (((S)->type == CONFIG_TYPE_GROUP) || ((S)->type == CONFIG_TYPE_LIST) \ + || ((S)->type == CONFIG_TYPE_ARRAY)) + +#define /* int */ config_setting_is_number(/* const config_setting_t * */ S) \ + (((S)->type == CONFIG_TYPE_INT) \ + || ((S)->type == CONFIG_TYPE_INT64) \ + || ((S)->type == CONFIG_TYPE_FLOAT)) + +#define /* int */ config_setting_is_scalar(/* const config_setting_t * */ S) \ + (((S)->type == CONFIG_TYPE_BOOL) || ((S)->type == CONFIG_TYPE_STRING) \ + || config_setting_is_number(S)) + +#define /* const char * */ config_setting_name( \ + /* const config_setting_t * */ S) \ + ((S)->name) + +#define /* config_setting_t * */ config_setting_parent( \ + /* const config_setting_t * */ S) \ + ((S)->parent) + +#define /* int */ config_setting_is_root( \ + /* const config_setting_t * */ S) \ + ((S)->parent ? CONFIG_FALSE : CONFIG_TRUE) + +extern LIBCONFIG_API int config_setting_index(const config_setting_t *setting); + +extern LIBCONFIG_API int config_setting_length( + const config_setting_t *setting); +extern LIBCONFIG_API config_setting_t *config_setting_get_elem( + const config_setting_t *setting, unsigned int idx); + +extern LIBCONFIG_API config_setting_t *config_setting_get_member( + const config_setting_t *setting, const char *name); + +extern LIBCONFIG_API config_setting_t *config_setting_add( + config_setting_t *parent, const char *name, int type); +extern LIBCONFIG_API int config_setting_remove(config_setting_t *parent, + const char *name); +extern LIBCONFIG_API int config_setting_remove_elem(config_setting_t *parent, + unsigned int idx); +extern LIBCONFIG_API void config_setting_set_hook(config_setting_t *setting, + void *hook); + +#define config_setting_get_hook(S) ((S)->hook) + +extern LIBCONFIG_API config_setting_t *config_lookup(const config_t *config, + const char *path); +extern LIBCONFIG_API config_setting_t *config_lookup_from( + config_setting_t *setting, const char *path); + +extern LIBCONFIG_API int config_lookup_int(const config_t *config, + const char *path, int *value); +extern LIBCONFIG_API int config_lookup_int64(const config_t *config, + const char *path, + long long *value); +extern LIBCONFIG_API int config_lookup_float(const config_t *config, + const char *path, double *value); +extern LIBCONFIG_API int config_lookup_bool(const config_t *config, + const char *path, int *value); +extern LIBCONFIG_API int config_lookup_string(const config_t *config, + const char *path, + const char **value); + +#define /* config_setting_t * */ config_root_setting( \ + /* const config_t * */ C) \ + ((C)->root) + +#define /* void */ config_set_default_format(/* config_t * */ C, \ + /* short */ F) \ + (C)->default_format = (F) + +#define /* short */ config_get_default_format(/* config_t * */ C) \ + ((C)->default_format) + +#define /* void */ config_set_tab_width(/* config_t * */ C, \ + /* unsigned short */ W) \ + (C)->tab_width = ((W) & 0x0F) + +#define /* unsigned char */ config_get_tab_width(/* const config_t * */ C) \ + ((C)->tab_width) + +#define /* unsigned short */ config_setting_source_line( \ + /* const config_setting_t * */ S) \ + ((S)->line) + +#define /* const char */ config_setting_source_file( \ + /* const config_setting_t * */ S) \ + ((S)->file) + +#define /* const char * */ config_error_text(/* const config_t * */ C) \ + ((C)->error_text) + +#define /* const char * */ config_error_file(/* const config_t * */ C) \ + ((C)->error_file) + +#define /* int */ config_error_line(/* const config_t * */ C) \ + ((C)->error_line) + +#define /* config_error_t */ config_error_type(/* const config_t * */ C) \ + ((C)->error_type) + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __libconfig_h */ diff --git a/3rdparty/libconfig/parsectx.h b/3rdparty/libconfig/parsectx.h new file mode 100644 index 000000000..0beb1111c --- /dev/null +++ b/3rdparty/libconfig/parsectx.h @@ -0,0 +1,47 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library. If not, see . + ---------------------------------------------------------------------------- +*/ + +#ifndef __libconfig_parsectx_h +#define __libconfig_parsectx_h + +#include "libconfig.h" +#include "strbuf.h" + +struct parse_context +{ + config_t *config; + config_setting_t *parent; + config_setting_t *setting; + char *name; + strbuf_t string; +}; + +#define parsectx_init(C) \ + memset((C), 0, sizeof(struct parse_context)) +#define parsectx_cleanup(C) \ + free((void *)(strbuf_release(&((C)->string)))) + +#define parsectx_append_string(C, S) \ + strbuf_append(&((C)->string), (S)) +#define parsectx_take_string(C) \ + strbuf_release(&((C)->string)) + +#endif /* __libconfig_parsectx_h */ diff --git a/3rdparty/libconfig/scanctx.c b/3rdparty/libconfig/scanctx.c new file mode 100644 index 000000000..7d7f4994c --- /dev/null +++ b/3rdparty/libconfig/scanctx.c @@ -0,0 +1,170 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library. If not, see . + ---------------------------------------------------------------------------- +*/ + +#include "scanctx.h" +#include "wincompat.h" + +#include +#include +#include + +#define STRING_BLOCK_SIZE 64 +#define CHUNK_SIZE 32 + +/* ------------------------------------------------------------------------- */ + +static const char *err_bad_include = "cannot open include file"; +static const char *err_include_too_deep = "include file nesting too deep"; + +/* ------------------------------------------------------------------------- */ + +static const char *__scanctx_add_filename(struct scan_context *ctx, + const char *filename) +{ + unsigned int count = ctx->num_filenames; + const char **f; + + for(f = ctx->filenames; count > 0; ++f, --count) + { + if(!strcmp(*f, filename)) + { + free((void *)filename); + return(*f); /* already in list */ + } + } + + if((ctx->num_filenames % CHUNK_SIZE) == 0) + { + ctx->filenames = (const char **)realloc( + (void *)ctx->filenames, + (ctx->num_filenames + CHUNK_SIZE) * sizeof(const char *)); + } + + ctx->filenames[ctx->num_filenames] = filename; + ++ctx->num_filenames; + return(filename); +} + +/* ------------------------------------------------------------------------- */ + +void scanctx_init(struct scan_context *ctx, const char *top_filename) +{ + memset(ctx, 0, sizeof(struct scan_context)); + if(top_filename) + ctx->top_filename = __scanctx_add_filename(ctx, strdup(top_filename)); +} + +/* ------------------------------------------------------------------------- */ + +const char **scanctx_cleanup(struct scan_context *ctx, + unsigned int *num_filenames) +{ + int i; + + for(i = 0; i < ctx->depth; ++i) + fclose(ctx->streams[i]); + + free((void *)(strbuf_release(&(ctx->string)))); + + *num_filenames = ctx->num_filenames; + return(ctx->filenames); +} + +/* ------------------------------------------------------------------------- */ + +FILE *scanctx_push_include(struct scan_context *ctx, void *buffer, + const char **error) +{ + FILE *fp = NULL; + const char *file; + char *full_file = NULL; + + *error = NULL; + + if(ctx->depth == MAX_INCLUDE_DEPTH) + { + *error = err_include_too_deep; + return(NULL); + } + + file = scanctx_take_string(ctx); + if(ctx->config->include_dir) + { + full_file = (char *)malloc(strlen(ctx->config->include_dir) + strlen(file) + + 2); + strcpy(full_file, ctx->config->include_dir); + strcat(full_file, FILE_SEPARATOR); + strcat(full_file, file); + } + + fp = fopen(full_file ? full_file : file, "rt"); + free((void *)full_file); + + if(fp) + { + ctx->streams[ctx->depth] = fp; + ctx->files[ctx->depth] = __scanctx_add_filename(ctx, file); + ctx->buffers[ctx->depth] = buffer; + ++(ctx->depth); + } + else + { + free((void *)file); + *error = err_bad_include; + } + + return(fp); +} + +/* ------------------------------------------------------------------------- */ + +void *scanctx_pop_include(struct scan_context *ctx) +{ + void *buffer; + + if(ctx->depth == 0) + return(NULL); /* stack underflow */ + + --(ctx->depth); + buffer = ctx->buffers[ctx->depth]; + fclose(ctx->streams[ctx->depth]); + + return(buffer); +} + +/* ------------------------------------------------------------------------- */ + +char *scanctx_take_string(struct scan_context *ctx) +{ + char *r = strbuf_release(&(ctx->string)); + + return(r ? r : strdup("")); +} + +/* ------------------------------------------------------------------------- */ + +const char *scanctx_current_filename(struct scan_context *ctx) +{ + return((ctx->depth == 0) ? ctx->top_filename : ctx->files[ctx->depth - 1]); +} + +/* ------------------------------------------------------------------------- */ +/* eof */ diff --git a/3rdparty/libconfig/scanctx.h b/3rdparty/libconfig/scanctx.h new file mode 100644 index 000000000..b8cc11e3d --- /dev/null +++ b/3rdparty/libconfig/scanctx.h @@ -0,0 +1,61 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library. If not, see . + ---------------------------------------------------------------------------- +*/ + +#ifndef __libconfig_scanctx_h +#define __libconfig_scanctx_h + +#include "libconfig.h" +#include "strbuf.h" + +#include +#include + +#define MAX_INCLUDE_DEPTH 10 + +struct scan_context +{ + config_t *config; + const char *top_filename; + const char *files[MAX_INCLUDE_DEPTH]; + void *buffers[MAX_INCLUDE_DEPTH]; + FILE *streams[MAX_INCLUDE_DEPTH]; + int depth; + strbuf_t string; + const char **filenames; + unsigned int num_filenames; +}; + +extern void scanctx_init(struct scan_context *ctx, const char *top_filename); +extern const char **scanctx_cleanup(struct scan_context *ctx, + unsigned int *num_filenames); + +extern FILE *scanctx_push_include(struct scan_context *ctx, void *prev_buffer, + const char **error); +extern void *scanctx_pop_include(struct scan_context *ctx); + +#define scanctx_append_string(C, S) \ + strbuf_append(&((C)->string), (S)) + +extern char *scanctx_take_string(struct scan_context *ctx); + +extern const char *scanctx_current_filename(struct scan_context *ctx); + +#endif /* __libconfig_scanctx_h */ diff --git a/3rdparty/libconfig/scanner.c b/3rdparty/libconfig/scanner.c new file mode 100644 index 000000000..c2eb7d188 --- /dev/null +++ b/3rdparty/libconfig/scanner.c @@ -0,0 +1,2362 @@ +#line 2 "scanner.c" + +#line 4 "scanner.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 35 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) + +#define YY_USE_CONST + +#endif /* defined (__STDC__) */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an unsigned + * integer for use as an array index. If the signed char is negative, + * we want to instead treat it as an 8-bit unsigned char, hence the + * double cast. + */ +#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN yyg->yy_start = 1 + 2 * + +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START ((yyg->yy_start - 1) / 2) +#define YYSTATE YY_START + +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) + +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE libconfig_yyrestart(yyin ,yyscanner ) + +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires + * access to the local variable yy_act. Since yyless() is a macro, it would break + * existing scanners that call yyless() from OUTSIDE libconfig_yylex. + * One obvious solution it to make yy_act a global. I tried that, and saw + * a 5% performance hit in a non-yylineno scanner, because yy_act is + * normally declared as a register variable-- so it is not worth it. + */ + #define YY_LESS_LINENO(n) \ + do { \ + int yyl;\ + for ( yyl = n; yyl < yyleng; ++yyl )\ + if ( yytext[yyl] == '\n' )\ + --yylineno;\ + }while(0) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = yyg->yy_hold_char; \ + YY_RESTORE_YY_MORE_OFFSET \ + yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) + +#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via libconfig_yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ + ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ + : NULL) + +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] + +void libconfig_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void libconfig_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE libconfig_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void libconfig_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void libconfig_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void libconfig_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void libconfig_yypop_buffer_state (yyscan_t yyscanner ); + +static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner ); +static void libconfig_yy_load_buffer_state (yyscan_t yyscanner ); +static void libconfig_yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); + +#define YY_FLUSH_BUFFER libconfig_yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) + +YY_BUFFER_STATE libconfig_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE libconfig_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE libconfig_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *libconfig_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *libconfig_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void libconfig_yyfree (void * ,yyscan_t yyscanner ); + +#define yy_new_buffer libconfig_yy_create_buffer + +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + libconfig_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } + +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + libconfig_yyensure_buffer_stack (yyscanner); \ + YY_CURRENT_BUFFER_LVALUE = \ + libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } + +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +#define libconfig_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +typedef unsigned char YY_CHAR; + +typedef int yy_state_type; + +#define yytext_ptr yytext_r + +static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); +static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); +static int yy_get_next_buffer (yyscan_t yyscanner ); +static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + yyg->yytext_ptr = yy_bp; \ + yyleng = (size_t) (yy_cp - yy_bp); \ + yyg->yy_hold_char = *yy_cp; \ + *yy_cp = '\0'; \ + yyg->yy_c_buf_p = yy_cp; + +#define YY_NUM_RULES 41 +#define YY_END_OF_BUFFER 42 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static yyconst flex_int16_t yy_accept[103] = + { 0, + 0, 0, 0, 0, 0, 0, 0, 0, 42, 40, + 21, 20, 20, 5, 40, 36, 37, 28, 40, 23, + 29, 40, 30, 30, 22, 38, 28, 28, 34, 35, + 24, 25, 21, 40, 3, 4, 3, 6, 14, 41, + 16, 19, 41, 21, 0, 39, 28, 29, 30, 29, + 0, 1, 0, 29, 0, 31, 0, 28, 28, 21, + 0, 0, 2, 6, 12, 0, 11, 10, 7, 8, + 9, 16, 18, 17, 0, 29, 29, 0, 0, 29, + 31, 32, 28, 28, 0, 0, 0, 29, 33, 28, + 26, 0, 13, 33, 27, 0, 0, 0, 0, 0, + + 15, 0 + } ; + +static yyconst flex_int32_t yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 4, 5, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 6, 7, 1, 1, 1, 1, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 18, 19, 1, + 20, 1, 1, 21, 22, 23, 23, 23, 24, 25, + 26, 26, 26, 26, 26, 27, 26, 26, 26, 26, + 26, 28, 29, 30, 31, 26, 26, 32, 26, 26, + 33, 34, 35, 1, 36, 1, 22, 23, 37, 38, + + 39, 40, 26, 26, 41, 26, 26, 42, 26, 43, + 26, 26, 26, 44, 29, 45, 46, 26, 26, 32, + 26, 26, 47, 1, 48, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static yyconst flex_int32_t yy_meta[49] = + { 0, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, + 1, 1, 3, 1, 1, 4, 4, 1, 1, 1, + 1, 4, 4, 4, 4, 3, 3, 3, 3, 3, + 3, 3, 1, 2, 1, 3, 4, 4, 4, 4, + 3, 3, 3, 3, 3, 3, 1, 1 + } ; + +static yyconst flex_int16_t yy_base[113] = + { 0, + 0, 47, 47, 48, 46, 47, 48, 49, 203, 204, + 200, 204, 204, 204, 198, 204, 204, 0, 45, 204, + 47, 50, 60, 74, 204, 204, 178, 28, 204, 204, + 204, 204, 64, 158, 204, 204, 183, 0, 204, 63, + 0, 204, 83, 195, 193, 204, 0, 88, 102, 98, + 62, 204, 190, 104, 119, 162, 0, 67, 65, 121, + 127, 124, 204, 0, 204, 0, 204, 204, 204, 204, + 204, 0, 204, 204, 108, 117, 122, 134, 132, 136, + 204, 139, 136, 116, 126, 0, 140, 142, 135, 130, + 0, 102, 204, 204, 0, 85, 72, 63, 98, 158, + + 204, 204, 169, 173, 177, 181, 183, 187, 191, 89, + 66, 63 + } ; + +static yyconst flex_int16_t yy_def[113] = + { 0, + 102, 1, 103, 103, 104, 104, 105, 105, 102, 102, + 102, 102, 102, 102, 106, 102, 102, 107, 102, 102, + 102, 102, 102, 102, 102, 102, 107, 107, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 108, 102, 102, + 109, 102, 102, 102, 106, 102, 107, 102, 102, 102, + 102, 102, 106, 102, 102, 102, 110, 107, 107, 102, + 102, 102, 102, 108, 102, 111, 102, 102, 102, 102, + 102, 109, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 110, 107, 107, 102, 112, 102, 102, 102, 107, + 107, 102, 102, 102, 107, 102, 102, 102, 102, 102, + + 102, 0, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102 + } ; + +static yyconst flex_int16_t yy_nxt[253] = + { 0, + 10, 11, 12, 13, 13, 14, 15, 16, 17, 18, + 19, 20, 19, 21, 22, 23, 24, 25, 26, 25, + 10, 18, 18, 18, 27, 18, 18, 18, 18, 28, + 18, 18, 29, 10, 30, 10, 18, 18, 18, 27, + 18, 18, 18, 18, 28, 18, 31, 32, 33, 36, + 36, 39, 39, 42, 42, 59, 37, 37, 48, 52, + 49, 49, 50, 50, 53, 60, 93, 34, 65, 86, + 51, 59, 75, 54, 75, 49, 49, 76, 76, 40, + 40, 43, 43, 55, 61, 51, 56, 54, 73, 49, + 49, 57, 82, 83, 66, 84, 67, 55, 55, 100, + + 56, 99, 68, 50, 50, 69, 70, 71, 83, 98, + 84, 51, 55, 50, 50, 54, 74, 49, 49, 77, + 77, 51, 60, 76, 76, 55, 51, 78, 56, 79, + 97, 79, 76, 76, 80, 80, 51, 77, 77, 91, + 55, 61, 78, 96, 87, 78, 87, 80, 80, 88, + 88, 80, 80, 95, 91, 88, 88, 88, 88, 100, + 78, 94, 92, 101, 90, 89, 85, 62, 95, 35, + 35, 35, 35, 38, 38, 38, 38, 41, 41, 41, + 41, 45, 45, 45, 45, 47, 47, 64, 81, 64, + 64, 72, 46, 72, 72, 46, 44, 63, 62, 58, + + 46, 44, 102, 9, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102 + } ; + +static yyconst flex_int16_t yy_chk[253] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 4, 5, 6, 7, 8, 28, 3, 4, 19, 22, + 19, 19, 21, 21, 22, 33, 112, 2, 40, 111, + 21, 28, 51, 23, 51, 23, 23, 51, 51, 5, + 6, 7, 8, 23, 33, 21, 23, 24, 43, 24, + 24, 23, 110, 58, 40, 59, 40, 24, 23, 99, + + 24, 98, 40, 48, 48, 40, 40, 40, 58, 97, + 59, 48, 24, 50, 50, 49, 43, 49, 49, 54, + 54, 50, 60, 75, 75, 49, 48, 54, 49, 55, + 96, 55, 76, 76, 55, 55, 50, 77, 77, 84, + 49, 60, 54, 92, 78, 77, 78, 79, 79, 78, + 78, 80, 80, 90, 84, 87, 87, 88, 88, 100, + 77, 89, 85, 100, 83, 82, 62, 61, 90, 103, + 103, 103, 103, 104, 104, 104, 104, 105, 105, 105, + 105, 106, 106, 106, 106, 107, 107, 108, 56, 108, + 108, 109, 53, 109, 109, 45, 44, 37, 34, 27, + + 15, 11, 9, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102 + } ; + +/* Table of booleans, true if rule could match eol. */ +static yyconst flex_int32_t yy_rule_can_match_eol[42] = + { 0, +0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, }; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +#line 1 "scanner.l" +/* -*- mode: C -*- */ +/* -------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License + as published by the Free Software Foundation; either version 2.1 of + the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, see + . + ---------------------------------------------------------------------------- +*/ +#define YY_NO_UNISTD_H 1 +#line 35 "scanner.l" + +#ifdef _MSC_VER +#pragma warning (disable: 4996) +#endif + +#include +#include +#include +#include "grammar.h" +#include "wincompat.h" +#include "parsectx.h" +#include "scanctx.h" + +#define YY_NO_INPUT // Suppress generation of useless input() function + +static unsigned long long fromhex(const char *s) +{ +#ifdef __MINGW32__ + + /* MinGW's strtoull() seems to be broken; it only returns the lower + * 32 bits... + */ + + const char *p = s; + unsigned long long val = 0; + + if(*p != '0') + return(0); + + ++p; + + if(*p != 'x' && *p != 'X') + return(0); + + for(++p; isxdigit(*p); ++p) + { + val <<= 4; + val |= ((*p < 'A') ? (*p & 0xF) : (9 + (*p & 0x7))); + } + + return(val); + +#else /* ! __MINGW32__ */ + + return(strtoull(s, NULL, 16)); + +#endif /* __MINGW32__ */ +} + + +#line 626 "scanner.c" + +#define INITIAL 0 +#define COMMENT 1 +#define STRING 2 +#define INCLUDE 3 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#define YY_EXTRA_TYPE struct scan_context * + +/* Holds the entire state of the reentrant scanner. */ +struct yyguts_t + { + + /* User-defined. Not touched by flex. */ + YY_EXTRA_TYPE yyextra_r; + + /* The rest are the same as the globals declared in the non-reentrant scanner. */ + FILE *yyin_r, *yyout_r; + size_t yy_buffer_stack_top; /**< index of top of stack. */ + size_t yy_buffer_stack_max; /**< capacity of stack. */ + YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ + char yy_hold_char; + int yy_n_chars; + int yyleng_r; + char *yy_c_buf_p; + int yy_init; + int yy_start; + int yy_did_buffer_switch_on_eof; + int yy_start_stack_ptr; + int yy_start_stack_depth; + int *yy_start_stack; + yy_state_type yy_last_accepting_state; + char* yy_last_accepting_cpos; + + int yylineno_r; + int yy_flex_debug_r; + + char *yytext_r; + int yy_more_flag; + int yy_more_len; + + YYSTYPE * yylval_r; + + }; /* end struct yyguts_t */ + +static int yy_init_globals (yyscan_t yyscanner ); + + /* This must go here because YYSTYPE and YYLTYPE are included + * from bison output in section 1.*/ + # define yylval yyg->yylval_r + +int libconfig_yylex_init (yyscan_t* scanner); + +int libconfig_yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int libconfig_yylex_destroy (yyscan_t yyscanner ); + +int libconfig_yyget_debug (yyscan_t yyscanner ); + +void libconfig_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE libconfig_yyget_extra (yyscan_t yyscanner ); + +void libconfig_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *libconfig_yyget_in (yyscan_t yyscanner ); + +void libconfig_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *libconfig_yyget_out (yyscan_t yyscanner ); + +void libconfig_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int libconfig_yyget_leng (yyscan_t yyscanner ); + +char *libconfig_yyget_text (yyscan_t yyscanner ); + +int libconfig_yyget_lineno (yyscan_t yyscanner ); + +void libconfig_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +YYSTYPE * libconfig_yyget_lval (yyscan_t yyscanner ); + +void libconfig_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int libconfig_yywrap (yyscan_t yyscanner ); +#else +extern int libconfig_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#ifdef __cplusplus +static int yyinput (yyscan_t yyscanner ); +#else +static int input (yyscan_t yyscanner ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + size_t n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int libconfig_yylex \ + (YYSTYPE * yylval_param ,yyscan_t yyscanner); + +#define YY_DECL int libconfig_yylex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK break; +#endif + +#define YY_RULE_SETUP \ + if ( yyleng > 0 ) \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \ + (yytext[yyleng - 1] == '\n'); \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + register yy_state_type yy_current_state; + register char *yy_cp, *yy_bp; + register int yy_act; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + +#line 100 "scanner.l" + + +#line 869 "scanner.c" + + yylval = yylval_param; + + if ( !yyg->yy_init ) + { + yyg->yy_init = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! yyg->yy_start ) + yyg->yy_start = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + libconfig_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + libconfig_yy_load_buffer_state(yyscanner ); + } + + while ( 1 ) /* loops until end-of-file is reached */ + { + yy_cp = yyg->yy_c_buf_p; + + /* Support of yytext. */ + *yy_cp = yyg->yy_hold_char; + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); +yy_match: + do + { + register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 103 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 204 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + + if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] ) + { + int yyl; + for ( yyl = 0; yyl < yyleng; ++yyl ) + if ( yytext[yyl] == '\n' ) + + do{ yylineno++; + yycolumn=0; + }while(0) +; + } + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = yyg->yy_hold_char; + yy_cp = yyg->yy_last_accepting_cpos; + yy_current_state = yyg->yy_last_accepting_state; + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 102 "scanner.l" +{ BEGIN COMMENT; } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 103 "scanner.l" +{ BEGIN INITIAL; } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 104 "scanner.l" +{ /* ignore */ } + YY_BREAK +case 4: +/* rule 4 can match eol */ +YY_RULE_SETUP +#line 105 "scanner.l" +{ /* ignore */ } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 107 "scanner.l" +{ BEGIN STRING; } + YY_BREAK +case 6: +/* rule 6 can match eol */ +YY_RULE_SETUP +#line 108 "scanner.l" +{ scanctx_append_string(yyextra, yytext); } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 109 "scanner.l" +{ scanctx_append_string(yyextra, "\n"); } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 110 "scanner.l" +{ scanctx_append_string(yyextra, "\r"); } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 111 "scanner.l" +{ scanctx_append_string(yyextra, "\t"); } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 112 "scanner.l" +{ scanctx_append_string(yyextra, "\f"); } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 113 "scanner.l" +{ scanctx_append_string(yyextra, "\\"); } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 114 "scanner.l" +{ scanctx_append_string(yyextra, "\""); } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 115 "scanner.l" +{ + char c[2] = { (char)(strtol(yytext + 2, NULL, 16) & 0xFF), + 0 }; + scanctx_append_string(yyextra, c); + } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 120 "scanner.l" +{ + yylval->sval = scanctx_take_string(yyextra); + BEGIN INITIAL; + return(TOK_STRING); + } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 126 "scanner.l" +{ BEGIN INCLUDE; } + YY_BREAK +case 16: +/* rule 16 can match eol */ +YY_RULE_SETUP +#line 127 "scanner.l" +{ scanctx_append_string(yyextra, yytext); } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 128 "scanner.l" +{ scanctx_append_string(yyextra, "\\"); } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 129 "scanner.l" +{ scanctx_append_string(yyextra, "\""); } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 130 "scanner.l" +{ + const char *error; + FILE *fp = scanctx_push_include(yyextra, + (void *)YY_CURRENT_BUFFER, + &error); + if(fp) + { + yyin = fp; + libconfig_yy_switch_to_buffer(libconfig_yy_create_buffer(yyin,YY_BUF_SIZE,yyscanner),yyscanner); + } + else + { + yyextra->config->error_text = error; + yyextra->config->error_file = scanctx_current_filename( + yyextra); + yyextra->config->error_line = libconfig_yyget_lineno( + yyscanner); + return TOK_ERROR; + } + BEGIN INITIAL; + } + YY_BREAK +case 20: +/* rule 20 can match eol */ +YY_RULE_SETUP +#line 154 "scanner.l" +{ /* ignore */ } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 155 "scanner.l" +{ /* ignore */ } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 157 "scanner.l" +{ return(TOK_EQUALS); } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 158 "scanner.l" +{ return(TOK_COMMA); } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 159 "scanner.l" +{ return(TOK_GROUP_START); } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 160 "scanner.l" +{ return(TOK_GROUP_END); } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 161 "scanner.l" +{ yylval->ival = 1; return(TOK_BOOLEAN); } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 162 "scanner.l" +{ yylval->ival = 0; return(TOK_BOOLEAN); } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 163 "scanner.l" +{ yylval->sval = yytext; return(TOK_NAME); } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 164 "scanner.l" +{ yylval->fval = atof(yytext); return(TOK_FLOAT); } + YY_BREAK +case 30: +YY_RULE_SETUP +#line 165 "scanner.l" +{ yylval->ival = atoi(yytext); return(TOK_INTEGER); } + YY_BREAK +case 31: +YY_RULE_SETUP +#line 166 "scanner.l" +{ yylval->llval = atoll(yytext); return(TOK_INTEGER64); } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 167 "scanner.l" +{ + yylval->ival = strtoul(yytext, NULL, 16); + return(TOK_HEX); + } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 171 "scanner.l" +{ yylval->llval = fromhex(yytext); return(TOK_HEX64); } + YY_BREAK +case 34: +YY_RULE_SETUP +#line 172 "scanner.l" +{ return(TOK_ARRAY_START); } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 173 "scanner.l" +{ return(TOK_ARRAY_END); } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 174 "scanner.l" +{ return(TOK_LIST_START); } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 175 "scanner.l" +{ return(TOK_LIST_END); } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 176 "scanner.l" +{ return(TOK_SEMICOLON); } + YY_BREAK +case 39: +*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ +yyg->yy_c_buf_p = yy_cp -= 1; +YY_DO_BEFORE_ACTION; /* set up yytext again */ +YY_RULE_SETUP +#line 177 "scanner.l" +{ /* ignore */ } + YY_BREAK +case 40: +YY_RULE_SETUP +#line 178 "scanner.l" +{ return(TOK_GARBAGE); } + YY_BREAK +case YY_STATE_EOF(INITIAL): +case YY_STATE_EOF(COMMENT): +case YY_STATE_EOF(STRING): +case YY_STATE_EOF(INCLUDE): +#line 180 "scanner.l" +{ + YY_BUFFER_STATE buf = (YY_BUFFER_STATE)scanctx_pop_include( + yyextra); + if(buf) + { + libconfig_yy_delete_buffer(YY_CURRENT_BUFFER,yyscanner); + libconfig_yy_switch_to_buffer(buf,yyscanner); + } + else + yyterminate(); + } + YY_BREAK +case 41: +YY_RULE_SETUP +#line 191 "scanner.l" +ECHO; + YY_BREAK +#line 1227 "scanner.c" + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = yyg->yy_hold_char; + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * libconfig_yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); + + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++yyg->yy_c_buf_p; + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = yyg->yy_c_buf_p; + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_END_OF_FILE: + { + yyg->yy_did_buffer_switch_on_eof = 0; + + if ( libconfig_yywrap(yyscanner ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = + yyg->yytext_ptr + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + yyg->yy_c_buf_p = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; + + yy_current_state = yy_get_previous_state( yyscanner ); + + yy_cp = yyg->yy_c_buf_p; + yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ +} /* end of libconfig_yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + register char *source = yyg->yytext_ptr; + register int number_to_move, i; + int ret_val; + + if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER; + + int yy_c_buf_p_offset = + (int) (yyg->yy_c_buf_p - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + libconfig_yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ,yyscanner ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = 0; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + yyg->yy_n_chars, (size_t) num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + if ( yyg->yy_n_chars == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + libconfig_yyrestart(yyin ,yyscanner); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) libconfig_yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + + yyg->yy_n_chars += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; + + yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (yyscan_t yyscanner) +{ + register yy_state_type yy_current_state; + register char *yy_cp; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + yy_current_state = yyg->yy_start; + yy_current_state += YY_AT_BOL(); + + for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) + { + register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 103 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) +{ + register int yy_is_jam; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ + register char *yy_cp = yyg->yy_c_buf_p; + + register YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + yyg->yy_last_accepting_state = yy_current_state; + yyg->yy_last_accepting_cpos = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 103 ) + yy_c = yy_meta[(unsigned int) yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; + yy_is_jam = (yy_current_state == 102); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (yyscan_t yyscanner) +#else + static int input (yyscan_t yyscanner) +#endif + +{ + int c; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + *yyg->yy_c_buf_p = yyg->yy_hold_char; + + if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) + /* This was really a NUL. */ + *yyg->yy_c_buf_p = '\0'; + + else + { /* need more input */ + int offset = yyg->yy_c_buf_p - yyg->yytext_ptr; + ++yyg->yy_c_buf_p; + + switch ( yy_get_next_buffer( yyscanner ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + libconfig_yyrestart(yyin ,yyscanner); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( libconfig_yywrap(yyscanner ) ) + return EOF; + + if ( ! yyg->yy_did_buffer_switch_on_eof ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(yyscanner); +#else + return input(yyscanner); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + yyg->yy_c_buf_p = yyg->yytext_ptr + offset; + break; + } + } + } + + c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ + *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ + yyg->yy_hold_char = *++yyg->yy_c_buf_p; + + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n'); + if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol ) + + do{ yylineno++; + yycolumn=0; + }while(0) +; + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * @param yyscanner The scanner object. + * @note This function does not reset the start condition to @c INITIAL . + */ + void libconfig_yyrestart (FILE * input_file , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! YY_CURRENT_BUFFER ){ + libconfig_yyensure_buffer_stack (yyscanner); + YY_CURRENT_BUFFER_LVALUE = + libconfig_yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + } + + libconfig_yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); + libconfig_yy_load_buffer_state(yyscanner ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * @param yyscanner The scanner object. + */ + void libconfig_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* TODO. We should be able to replace this entire function body + * with + * libconfig_yypop_buffer_state(); + * libconfig_yypush_buffer_state(new_buffer); + */ + libconfig_yyensure_buffer_stack (yyscanner); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + libconfig_yy_load_buffer_state(yyscanner ); + + /* We don't actually know whether we did this switch during + * EOF (libconfig_yywrap()) processing, but the only time this flag + * is looked at is after libconfig_yywrap() is called, so it's safe + * to go ahead and always set it. + */ + yyg->yy_did_buffer_switch_on_eof = 1; +} + +static void libconfig_yy_load_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + yyg->yy_hold_char = *yyg->yy_c_buf_p; +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * @param yyscanner The scanner object. + * @return the allocated buffer state. + */ + YY_BUFFER_STATE libconfig_yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) libconfig_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) libconfig_yyalloc(b->yy_buf_size + 2 ,yyscanner ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + libconfig_yy_init_buffer(b,file ,yyscanner); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with libconfig_yy_create_buffer() + * @param yyscanner The scanner object. + */ + void libconfig_yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + libconfig_yyfree((void *) b->yy_ch_buf ,yyscanner ); + + libconfig_yyfree((void *) b ,yyscanner ); +} + +#ifndef __cplusplus +extern int isatty (int ); +#endif /* __cplusplus */ + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a libconfig_yyrestart() or at EOF. + */ + static void libconfig_yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) + +{ + int oerrno = errno; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + libconfig_yy_flush_buffer(b ,yyscanner); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then libconfig_yy_init_buffer was _probably_ + * called from libconfig_yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * @param yyscanner The scanner object. + */ + void libconfig_yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + libconfig_yy_load_buffer_state(yyscanner ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * @param yyscanner The scanner object. + */ +void libconfig_yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (new_buffer == NULL) + return; + + libconfig_yyensure_buffer_stack(yyscanner); + + /* This block is copied from libconfig_yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *yyg->yy_c_buf_p = yyg->yy_hold_char; + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + yyg->yy_buffer_stack_top++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from libconfig_yy_switch_to_buffer. */ + libconfig_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * @param yyscanner The scanner object. + */ +void libconfig_yypop_buffer_state (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + if (!YY_CURRENT_BUFFER) + return; + + libconfig_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); + YY_CURRENT_BUFFER_LVALUE = NULL; + if (yyg->yy_buffer_stack_top > 0) + --yyg->yy_buffer_stack_top; + + if (YY_CURRENT_BUFFER) { + libconfig_yy_load_buffer_state(yyscanner ); + yyg->yy_did_buffer_switch_on_eof = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void libconfig_yyensure_buffer_stack (yyscan_t yyscanner) +{ + int num_to_alloc; + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (!yyg->yy_buffer_stack) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; + yyg->yy_buffer_stack = (struct yy_buffer_state**)libconfig_yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in libconfig_yyensure_buffer_stack()" ); + + memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + yyg->yy_buffer_stack_max = num_to_alloc; + yyg->yy_buffer_stack_top = 0; + return; + } + + if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + int grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = yyg->yy_buffer_stack_max + grow_size; + yyg->yy_buffer_stack = (struct yy_buffer_state**)libconfig_yyrealloc + (yyg->yy_buffer_stack, + num_to_alloc * sizeof(struct yy_buffer_state*) + , yyscanner); + if ( ! yyg->yy_buffer_stack ) + YY_FATAL_ERROR( "out of dynamic memory in libconfig_yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); + yyg->yy_buffer_stack_max = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE libconfig_yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return 0; + + b = (YY_BUFFER_STATE) libconfig_yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_scan_buffer()" ); + + b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = 0; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + libconfig_yy_switch_to_buffer(b ,yyscanner ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to libconfig_yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * libconfig_yy_scan_bytes() instead. + */ +YY_BUFFER_STATE libconfig_yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) +{ + + return libconfig_yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); +} + +/** Setup the input buffer state to scan the given bytes. The next call to libconfig_yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * @param yyscanner The scanner object. + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE libconfig_yy_scan_bytes (yyconst char * yybytes, int _yybytes_len , yyscan_t yyscanner) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = _yybytes_len + 2; + buf = (char *) libconfig_yyalloc(n ,yyscanner ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in libconfig_yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = libconfig_yy_scan_buffer(buf,n ,yyscanner); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in libconfig_yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) +{ + (void) fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = yyg->yy_hold_char; \ + yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ + yyg->yy_hold_char = *yyg->yy_c_buf_p; \ + *yyg->yy_c_buf_p = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the user-defined data for this scanner. + * @param yyscanner The scanner object. + */ +YY_EXTRA_TYPE libconfig_yyget_extra (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyextra; +} + +/** Get the current line number. + * @param yyscanner The scanner object. + */ +int libconfig_yyget_lineno (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yylineno; +} + +/** Get the current column number. + * @param yyscanner The scanner object. + */ +int libconfig_yyget_column (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + if (! YY_CURRENT_BUFFER) + return 0; + + return yycolumn; +} + +/** Get the input stream. + * @param yyscanner The scanner object. + */ +FILE *libconfig_yyget_in (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyin; +} + +/** Get the output stream. + * @param yyscanner The scanner object. + */ +FILE *libconfig_yyget_out (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyout; +} + +/** Get the length of the current token. + * @param yyscanner The scanner object. + */ +int libconfig_yyget_leng (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yyleng; +} + +/** Get the current token. + * @param yyscanner The scanner object. + */ + +char *libconfig_yyget_text (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yytext; +} + +/** Set the user-defined data. This data is never touched by the scanner. + * @param user_defined The data to be associated with this scanner. + * @param yyscanner The scanner object. + */ +void libconfig_yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyextra = user_defined ; +} + +/** Set the current line number. + * @param line_number + * @param yyscanner The scanner object. + */ +void libconfig_yyset_lineno (int line_number , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* lineno is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "libconfig_yyset_lineno called with no buffer" , yyscanner); + + yylineno = line_number; +} + +/** Set the current column. + * @param line_number + * @param yyscanner The scanner object. + */ +void libconfig_yyset_column (int column_no , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* column is only valid if an input buffer exists. */ + if (! YY_CURRENT_BUFFER ) + yy_fatal_error( "libconfig_yyset_column called with no buffer" , yyscanner); + + yycolumn = column_no; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param in_str A readable stream. + * @param yyscanner The scanner object. + * @see libconfig_yy_switch_to_buffer + */ +void libconfig_yyset_in (FILE * in_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyin = in_str ; +} + +void libconfig_yyset_out (FILE * out_str , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yyout = out_str ; +} + +int libconfig_yyget_debug (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yy_flex_debug; +} + +void libconfig_yyset_debug (int bdebug , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yy_flex_debug = bdebug ; +} + +/* Accessor methods for yylval and yylloc */ + +YYSTYPE * libconfig_yyget_lval (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + return yylval; +} + +void libconfig_yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + yylval = yylval_param; +} + +/* User-visible API */ + +/* libconfig_yylex_init is special because it creates the scanner itself, so it is + * the ONLY reentrant function that doesn't take the scanner as the last argument. + * That's why we explicitly handle the declaration, instead of using our macros. + */ + +int libconfig_yylex_init(yyscan_t* ptr_yy_globals) + +{ + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) libconfig_yyalloc ( sizeof( struct yyguts_t ), NULL ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + return yy_init_globals ( *ptr_yy_globals ); +} + +/* libconfig_yylex_init_extra has the same functionality as libconfig_yylex_init, but follows the + * convention of taking the scanner as the last argument. Note however, that + * this is a *pointer* to a scanner, as it will be allocated by this call (and + * is the reason, too, why this function also must handle its own declaration). + * The user defined value in the first argument will be available to libconfig_yyalloc in + * the yyextra field. + */ + +int libconfig_yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) + +{ + struct yyguts_t dummy_yyguts; + + libconfig_yyset_extra (yy_user_defined, &dummy_yyguts); + + if (ptr_yy_globals == NULL){ + errno = EINVAL; + return 1; + } + + *ptr_yy_globals = (yyscan_t) libconfig_yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); + + if (*ptr_yy_globals == NULL){ + errno = ENOMEM; + return 1; + } + + /* By setting to 0xAA, we expose bugs in + yy_init_globals. Leave at 0x00 for releases. */ + memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); + + libconfig_yyset_extra (yy_user_defined, *ptr_yy_globals); + + return yy_init_globals ( *ptr_yy_globals ); +} + +static int yy_init_globals (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from libconfig_yylex_destroy(), so don't allocate here. + */ + + yyg->yy_buffer_stack = 0; + yyg->yy_buffer_stack_top = 0; + yyg->yy_buffer_stack_max = 0; + yyg->yy_c_buf_p = (char *) 0; + yyg->yy_init = 0; + yyg->yy_start = 0; + + yyg->yy_start_stack_ptr = 0; + yyg->yy_start_stack_depth = 0; + yyg->yy_start_stack = NULL; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = (FILE *) 0; + yyout = (FILE *) 0; +#endif + + /* For future reference: Set errno on error, since we are called by + * libconfig_yylex_init() + */ + return 0; +} + +/* libconfig_yylex_destroy is for both reentrant and non-reentrant scanners. */ +int libconfig_yylex_destroy (yyscan_t yyscanner) +{ + struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + libconfig_yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); + YY_CURRENT_BUFFER_LVALUE = NULL; + libconfig_yypop_buffer_state(yyscanner); + } + + /* Destroy the stack itself. */ + libconfig_yyfree(yyg->yy_buffer_stack ,yyscanner); + yyg->yy_buffer_stack = NULL; + + /* Destroy the start condition stack. */ + libconfig_yyfree(yyg->yy_start_stack ,yyscanner ); + yyg->yy_start_stack = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * libconfig_yylex() is called, initialization will occur. */ + yy_init_globals( yyscanner); + + /* Destroy the main struct (reentrant only). */ + libconfig_yyfree ( yyscanner , yyscanner ); + yyscanner = NULL; + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) +{ + register int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) +{ + register int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *libconfig_yyalloc (yy_size_t size , yyscan_t yyscanner) +{ + return (void *) malloc( size ); +} + +void *libconfig_yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) +{ + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return (void *) realloc( (char *) ptr, size ); +} + +void libconfig_yyfree (void * ptr , yyscan_t yyscanner) +{ + free( (char *) ptr ); /* see libconfig_yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 191 "scanner.l" diff --git a/3rdparty/libconfig/scanner.h b/3rdparty/libconfig/scanner.h new file mode 100644 index 000000000..baa6f771f --- /dev/null +++ b/3rdparty/libconfig/scanner.h @@ -0,0 +1,326 @@ +#ifndef libconfig_yyHEADER_H +#define libconfig_yyHEADER_H 1 +#define libconfig_yyIN_HEADER 1 + +#line 6 "scanner.h" + +#line 8 "scanner.h" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 5 +#define YY_FLEX_SUBMINOR_VERSION 33 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; +#endif /* ! C99 */ + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#endif /* ! FLEXINT_H */ + +#ifdef __cplusplus + +/* The "const" storage-class-modifier is valid. */ +#define YY_USE_CONST + +#else /* ! __cplusplus */ + +#if __STDC__ + +#define YY_USE_CONST + +#endif /* __STDC__ */ +#endif /* ! __cplusplus */ + +#ifdef YY_USE_CONST +#define yyconst const +#else +#define yyconst +#endif + +/* An opaque pointer. */ +#ifndef YY_TYPEDEF_YY_SCANNER_T +#define YY_TYPEDEF_YY_SCANNER_T +typedef void* yyscan_t; +#endif + +/* For convenience, these vars (plus the bison vars far below) + are macros in the reentrant scanner. */ +#define yyin yyg->yyin_r +#define yyout yyg->yyout_r +#define yyextra yyg->yyextra_r +#define yyleng yyg->yyleng_r +#define yytext yyg->yytext_r +#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) +#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) +#define yy_flex_debug yyg->yy_flex_debug_r + +int libconfig_yylex_init (yyscan_t* scanner); + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +/* The following is because we cannot portably get our hands on size_t + * (without autoconf's help, which isn't available because we want + * flex-generated scanners to compile on their own). + */ + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef unsigned int yy_size_t; +#endif + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + yy_size_t yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +void libconfig_yyrestart (FILE *input_file ,yyscan_t yyscanner ); +void libconfig_yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +YY_BUFFER_STATE libconfig_yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); +void libconfig_yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void libconfig_yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); +void libconfig_yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); +void libconfig_yypop_buffer_state (yyscan_t yyscanner ); + +YY_BUFFER_STATE libconfig_yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); +YY_BUFFER_STATE libconfig_yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); +YY_BUFFER_STATE libconfig_yy_scan_bytes (yyconst char *bytes,int len ,yyscan_t yyscanner ); + +void *libconfig_yyalloc (yy_size_t ,yyscan_t yyscanner ); +void *libconfig_yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); +void libconfig_yyfree (void * ,yyscan_t yyscanner ); + +#define libconfig_yywrap(n) 1 +#define YY_SKIP_YYWRAP + +#define yytext_ptr yytext_r + +#ifdef YY_HEADER_EXPORT_START_CONDITIONS +#define INITIAL 0 +#define COMMENT 1 + +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int libconfig_yylex_destroy (yyscan_t yyscanner ); + +int libconfig_yyget_debug (yyscan_t yyscanner ); + +void libconfig_yyset_debug (int debug_flag ,yyscan_t yyscanner ); + +YY_EXTRA_TYPE libconfig_yyget_extra (yyscan_t yyscanner ); + +void libconfig_yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); + +FILE *libconfig_yyget_in (yyscan_t yyscanner ); + +void libconfig_yyset_in (FILE * in_str ,yyscan_t yyscanner ); + +FILE *libconfig_yyget_out (yyscan_t yyscanner ); + +void libconfig_yyset_out (FILE * out_str ,yyscan_t yyscanner ); + +int libconfig_yyget_leng (yyscan_t yyscanner ); + +char *libconfig_yyget_text (yyscan_t yyscanner ); + +int libconfig_yyget_lineno (yyscan_t yyscanner ); + +void libconfig_yyset_lineno (int line_number ,yyscan_t yyscanner ); + +YYSTYPE * libconfig_yyget_lval (yyscan_t yyscanner ); + +void libconfig_yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int libconfig_yywrap (yyscan_t yyscanner ); +#else +extern int libconfig_yywrap (yyscan_t yyscanner ); +#endif +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); +#endif + +#ifndef YY_NO_INPUT + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#define YY_READ_BUF_SIZE 8192 +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int libconfig_yylex (YYSTYPE * yylval_param ,yyscan_t yyscanner); + +#define YY_DECL int libconfig_yylex (YYSTYPE * yylval_param , yyscan_t yyscanner) +#endif /* !YY_DECL */ + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + +#undef YY_NEW_FILE +#undef YY_FLUSH_BUFFER +#undef yy_set_bol +#undef yy_new_buffer +#undef yy_set_interactive +#undef YY_DO_BEFORE_ACTION + +#ifdef YY_DECL_IS_OURS +#undef YY_DECL_IS_OURS +#undef YY_DECL +#endif + +#line 130 "scanner.l" + +#line 325 "scanner.h" +#undef libconfig_yyIN_HEADER +#endif /* libconfig_yyHEADER_H */ diff --git a/3rdparty/libconfig/strbuf.c b/3rdparty/libconfig/strbuf.c new file mode 100644 index 000000000..d2a667a7c --- /dev/null +++ b/3rdparty/libconfig/strbuf.c @@ -0,0 +1,57 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library. If not, see . + ---------------------------------------------------------------------------- +*/ + +#include "strbuf.h" + +#include +#include + +#define STRING_BLOCK_SIZE 64 + +/* ------------------------------------------------------------------------- */ + +char *strbuf_release(strbuf_t *buf) +{ + char *r = buf->string; + memset(buf, 0, sizeof(strbuf_t)); + return(r); +} + +/* ------------------------------------------------------------------------- */ + +void strbuf_append(strbuf_t *buf, const char *text) +{ + static const size_t mask = ~(STRING_BLOCK_SIZE - 1); + size_t len = strlen(text); + size_t newlen = buf->length + len + 1; /* add 1 for NUL */ + + if(newlen > buf->capacity) + { + buf->capacity = (newlen + (STRING_BLOCK_SIZE - 1)) & mask; + buf->string = (char *)realloc(buf->string, buf->capacity); + } + + strcpy(buf->string + buf->length, text); + buf->length += len; +} + +/* ------------------------------------------------------------------------- */ +/* eof */ diff --git a/3rdparty/libconfig/strbuf.h b/3rdparty/libconfig/strbuf.h new file mode 100644 index 000000000..90afd44c8 --- /dev/null +++ b/3rdparty/libconfig/strbuf.h @@ -0,0 +1,39 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library. If not, see . + ---------------------------------------------------------------------------- +*/ + +#ifndef __libconfig_strbuf_h +#define __libconfig_strbuf_h + +#include +#include + +typedef struct +{ + char *string; + size_t length; + size_t capacity; +} strbuf_t; + +char *strbuf_release(strbuf_t *buf); + +void strbuf_append(strbuf_t *buf, const char *text); + +#endif /* __libconfig_strbuf_h */ diff --git a/3rdparty/libconfig/wincompat.h b/3rdparty/libconfig/wincompat.h new file mode 100644 index 000000000..cfea2ec33 --- /dev/null +++ b/3rdparty/libconfig/wincompat.h @@ -0,0 +1,89 @@ +/* ---------------------------------------------------------------------------- + libconfig - A library for processing structured configuration files + Copyright (C) 2005-2010 Mark A Lindner + + This file is part of libconfig. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this library. If not, see . + ---------------------------------------------------------------------------- +*/ + +#ifndef __wincompat_h +#define __wincompat_h + +#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) + +#ifdef _MSC_VER +#pragma warning (disable: 4996) +#endif + +#define WIN32_LEAN_AND_MEAN +#include + +#define snprintf _snprintf + +#ifndef __MINGW32__ +#define atoll _atoi64 +#define strtoull _strtoui64 +#endif /* __MINGW32__ */ + +#endif + +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__) \ + || defined(__MINGW32__)) + +/* Why does gcc on MinGW use the Visual C++ style format directives + * for 64-bit integers? Inquiring minds want to know.... + */ + +#define INT64_FMT "%I64d" +#define UINT64_FMT "%I64u" + +#define INT64_HEX_FMT "%I64X" + +#define FILE_SEPARATOR "\\" + +#else /* defined(WIN32) || defined(__MINGW32__) */ + +#define INT64_FMT "%lld" +#define UINT64_FMT "%llu" + +#define INT64_HEX_FMT "%llX" + +#define FILE_SEPARATOR "/" + +#endif /* defined(WIN32) || defined(__MINGW32__) */ + +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) \ + && ! defined(__MINGW32__) + +#define INT64_CONST(I) (I ## i64) +#define UINT64_CONST(I) (I ## Ui64) + +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif + +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif + +#else /* defined(WIN32) && ! defined(__MINGW32__) */ + +#define INT64_CONST(I) (I ## LL) +#define UINT64_CONST(I) (I ## ULL) + +#endif /* defined(WIN32) && ! defined(__MINGW32__) */ + +#endif /* __wincompat_h */ diff --git a/Makefile.in b/Makefile.in index 02ca9b987..6fd5fff26 100644 --- a/Makefile.in +++ b/Makefile.in @@ -4,10 +4,10 @@ HAVE_MYSQL=@HAVE_MYSQL@ ifeq ($(HAVE_MYSQL),yes) ALL_DEPENDS=common_sql login_sql char_sql map_sql tools import SQL_DEPENDS=common_sql login_sql char_sql map_sql import - COMMON_SQL_DEPENDS=mt19937ar - LOGIN_SQL_DEPENDS=mt19937ar common_sql - CHAR_SQL_DEPENDS=mt19937ar common_sql - MAP_SQL_DEPENDS=mt19937ar common_sql + COMMON_SQL_DEPENDS=mt19937ar libconfig + LOGIN_SQL_DEPENDS=mt19937ar libconfig common_sql + CHAR_SQL_DEPENDS=mt19937ar libconfig common_sql + MAP_SQL_DEPENDS=mt19937ar libconfig common_sql CONVERTERS_DEPENDS=common_sql else ALL_DEPENDS=needs_mysql @@ -47,6 +47,9 @@ common_sql: $(COMMON_SQL_DEPENDS) mt19937ar: @$(MAKE) -C 3rdparty/mt19937ar +libconfig: + @$(MAKE) -C 3rdparty/libconfig + login_sql: $(LOGIN_SQL_DEPENDS) @$(MAKE) -C src/login sql @@ -74,6 +77,7 @@ import: clean: @$(MAKE) -C src/common $@ @$(MAKE) -C 3rdparty/mt19937ar $@ + @$(MAKE) -C 3rdparty/libconfig $@ @$(MAKE) -C src/login $@ @$(MAKE) -C src/char $@ @$(MAKE) -C src/map $@ @@ -85,6 +89,7 @@ help: @echo "possible targets are:" @echo "'common_sql' - builds object files used in SQL servers" @echo "'mt19937ar' - builds object file of Mersenne Twister MT19937" + @echo "'libconfig' - builds object files of libconfig @echo "'login_sql' - builds login server (SQL version)" @echo "'char_sql' - builds char server (SQL version)" @echo "'map_sql' - builds map server (SQL version)" diff --git a/conf/atcommand_athena.conf b/conf/atcommand_athena.conf index ce06e2b37..58813c1c7 100644 --- a/conf/atcommand_athena.conf +++ b/conf/atcommand_athena.conf @@ -1,753 +1,60 @@ -//-------------------------------------------------------------- -// rAthena atcommand/charcommand Configuration File -//-------------------------------------------------------------- - -// The symbol that will be used to recognize commands. -// You can set any one character except control-characters (0x00-0x1f), -// '%', '$' (party/guild chat speaking) and '/' (standard client commands). -// command_symbol represents @commands used locally -// char_symbol represents #commands used on other players. -command_symbol:@ -char_symbol:# - -// The following settings in this file use the format ": level(@),level(#)". -// They define the minimum GM level required to execute the associated command. -// @ = atcommand. most work only on yourself. -// # = charcommand. remote usage only. GMs will be able to use these on other players. -// Adjust values as you like. Note that to activate commands for normal players, -// (GM level 0), you also need to change the 'atcommand_gm_only' option to 'no'. -// To completely disable a command, set its required GM level to 100. - -// Default levels were chosen so that they form the following hierarchy: -// 0: Normal player -// -> no commands accessible -// 1: Super player -// -> some minor advantage: storage, petrename, etc... -// 10: Super player+ -// -> more powerful commands, like mobsearch and changegm -// 20: Mediator -// -> GM commands for finding players and moving to them (also kicking them) -// 40: Sub-GM -// -> GM commands for basic tasks, no significant impact on other players -// 50: Sub-GM+ -// -> GM commands to spawn mobs and create guilds -// 60: GM -// -> almost all commands available (except administration and mass commands) -// 80: GM Chief -// -> can do anything, except administration commands -// 99: Administrator -// -> can do anything! -// 100: Disabled -// -> commands that will not be available to anyone - -// Syntax of file: -// command: @level,#level [] - -// Syntax Example: -// command: 40,40 [alias,alias2,alias3,alias4] -// If it has more than 4 aliases you can keep adding, just like in the example below: - -// Example: -// blvl: 60,60 [lvup,blevel,baselvl,baselvup,baselevel,baselvlup] - -//-------------------------- -// 0: normal player commands -// None for security purposes. - -//------------------------- -// 1: Super player commands - -// Displays a list of @ commands available to the player. -commands: 1,1 - -// Displays a list of # commands available to the player. -charcommands: 1,1 - -// Displays the server rates. -rates: 1,1 - -// Show server uptime since last map server restart -uptime: 1,1 - -// Shows/Hides the "there is a delay after a skill" message. -showdelay: 1,1 - -// Displays current levels and % progress. -exp: 1,40 - -// To change your (own) email -// note: this command doesn't check email itself, but check structure of the email (xxx@xxx) -// if you want be sure of each e-mail disable this option (value: 100) -email: 1,60 - -// Show Monster info (rates, stats, drops, MVP stuff) -monsterinfo: 1,1 [mobinfo, mi] - -// Show Item info (type, price, etc) -iteminfo: 1,1 [ii] - -// Show who drops an item (mobs with highest drop rate) -whodrops: 1,1 - -// Syncs the player's position on the client with the one stored on the server. -refresh: 1,40 - -// Give server time. (4 same commands) -time: 1,1 [date,serverdate,servertime] - -// Displays SVN version of the server. -version: 1,1 - -// Suicide your character. -die: 1,1 - -// Enables you to rename your pet. -petrename: 1,50 - -// Organize a new party, with you as the party leader -party: 1,1 - -// Opens your Kafra storage wherever you are -storage: 1,1 - -// Opens your mailbox -mail: 1,1 - -// Opens auctions window -auction: 1,1 - -// Locate someone on a map, returns your coordinates if the person isn't on. -where: 1,1 - -// Duel organizing commands -duel: 1,1 -invite: 1,1 -accept: 1,1 -reject: 1,1 -leave: 1,1 - -// Main chat -main: 1,1 - -// Autorejecting Deals/Invites -noask: 1,1 - -// Displays remaining jail time -jailtime: 1,40 - -// Homunculus commands for players -hominfo: 1,40 -homstats: 1,40 - -// Kill Steal Protection -noks: 1,1 - -// Set Font -font: 1,1 - -//--------------------------- -// 10: Super player+ commands - -// Displays/Hides Experience gained messages -showexp: 10,10 - -// Displays/Hides Zeny gained messages -showzeny: 10,10 - -// Warps you to predefined locations in major cities. -go: 10,10 - -// Enables/disables autolooting from killed mobs. -autoloot: 10,10 - -// Enables/disables autolooting an item. -alootid: 10,10 - -// Allows you continue vending offline. -autotrade: 10,10 [at] - -// Change Guild Master of your Guild -changegm: 10,10 - -// Change the leader of your party. -changeleader: 10,10 - -// Change the party exp- and item share rules. -partyoption: 10,10 - -// Command what the player's pet will say. -pettalk: 10,10 - -// Command what the player's homunculus will say. -homtalk: 10,10 - -// Locates and displays the position of a certain mob on the current map. -mobsearch: 10,10 -// Locates and displays the position of a certain mob on your mini-map -showmobs: 10,10 -// Prints out in which maps a monster normally spawns at (does not count script-invoked mobs) -whereis: 10,10 - -// Resets a Star Gladiator's marked maps -feelreset: 10,60 - -//---------------------- -// 20: Mediator commands - -// Displays helpfile in rAthena base directory (2 same commands). -help: 20,20 [h] -help2: 20,20 [h2] - -// Warp yourself to a person (3 same commands + /shift). -goto: 20,20 [jumpto,warpto] - -// Displays the motd file to all players -gmotd: 20,20 - -// Follow a player (including warping to them) -follow: 20,20 - -// Sends a request to all connected GMs (via the gm whisper system) -request: 20,100 - -// Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). -kick: 20,20 - -// Changes your appearance. -model: 20,50 - -// To get a peco to (un)ride (2 same commands). -mount: 20,50 [mountpeco] - -// Returns list of logged in characters with their position (2 same commands). -who: 20,20 [whois] - -// Returns list of logged in characters with their job. -who2: 20,20 - -// Returns list of logged in characters with their party/guild. -who3: 20,20 - -// Returns list of logged in characters with their position in a specifical map. -whomap: 20,20 - -// Returns list of logged in characters with their job in a specifical map. -whomap2: 20,20 - -// Returns list of logged in characters with their party/guild in a specifical map. -whomap3: 20,20 - -// Displays GMs online. For those who are higher GM level than yourself, -// only the name is shown, for the rest, it displays the same info of -// @who+@who2+who3 -whogm: 20,20 - -// Change your appearence to other players to a mob. -disguise: 20,60 - -// Restore your normal appearance. -undisguise: 20,20 - -// Displays the text as a normal message with the format "*name message*" -// instead of "name : message" (Like the /me command in IRC) -me: 20,20 - -// Changes your name to your choice temporarily. -fakename: 20,50 - -// Changes your size. -size: 20,50 - -// Can command what other npcs (by name) can say. -npctalk: 20,100 [npctalkc] - -//-------------------- -// 40: Sub-GM commands - -// Broadcast to the whole server. Using (1 command + /nb, /b). -broadcast: 40,40 - -// Broadcast to the map you are on (1 command + /lb, /nlb). -localbroadcast: 40,40 - -// Broadcast (with or without name) -kami: 40,40 -// Same as kami but with blue color -kamib: 40,40 -// Same as kami but you can choose the color (uses different packet) -kamic: 40,40 - -// Enables GvG on a map (2 same commands). -gvgon: 40,100 [gpvpon] - -// Turns GvG (Guild vs. Guild) off on a map (2 same commands). -gvgoff: 40,100 [gpvpoff] - -// Activate/Deactivate kill steal protection on a map -allowks: 40,100 - -// Modifies your HP/SP. -heal: 40,60 - -// GM Hide (total invisibility to characters and monsters) (1 command + /hide). -hide: 40,60 - -// Changes your job to one you specify (2 same commands). -job: 40,60 [jobchange] - -// Enables you to to jump randomly on a map (that you are already on). -jump: 40,40 - -// Warps you to your last save point (2 same commands). -load: 40,60 [return] - -// Warps you to a specific npc -tonpc: 40,40 - -// Saves a warp point. -memo: 40,40 - -// Set your character display options. (Visual effects of your character) -option: 40,60 - -// Sets the level of intemecy of your pet. -petfriendly: 40,50 - -// Sets hunger level of your pet. -pethungry: 40,50 - -// Turns PvP (Person vs. Person) off on a map. -pvpoff: 40,100 - -// Enables PvP on a map. -pvpon: 40,100 - -// Permanently adds a quest skill -questskill: 40,60 - -// Permanently removes a quest skill -lostskill: 40,60 - -// Sets the speed you can walk/attack at. Default is 150. -speed: 40,60 - -// Summons spirit spheres around you. -spiritball: 40,60 - -// Warp yourself to a certain map, at (x,y) coordinates (2 same commands) + also /mm or /mapmove. -warp: 40,60 [rura,mapmove] - -// Changes GM clothes color (2 same commands) -dye: 40,50 [ccolor] - -// Changes GM hair style (2 same commands) -hairstyle: 40,40 [hstyle] - -// Changes GM hair color (2 same commands) -haircolor: 40,50 [hcolor] - -// Deletes all your items. -itemreset: 40,60 - -// Does a skill/stat reset. -reset: 40,60 - -// Displays distribution of players on the server per map (% on each map which has players) -users: 40,40 - -// Deletes floor items in your range of sight -cleanmap: 40,40 - -// Kill all monsters in map (without drops) -killmonster2: 40,40 - -// Sets your spawn point (aka save point). -save: 40,60 - -// Do some visual effect on your character -effect: 40,40 - -// Do some visual effect on your character (misceffect) -misceffect: 40,40 - -// GM's magnifier -identify: 40,40 - -// Drop all your items -dropall: 40,60 - -// Store all your items -storeall: 40,60 - -// Allow other players to hit you out of PvP -killable: 40,60 - -// Look up a skill by name -skillid: 40,40 - -// Use a skill by id -useskill: 40,40 - -// What skills are required to get this skill -skilltree: 40,40 - -// Marriage commands -marry: 40,40 -divorce: 40,40 - -// Adopt a novice into a family -adopt: 40,40 - -// Play a Sound! -sound: 40,40 - -// Displays a player's storage -storagelist: 40,40 - -// Displays a player's cart contents -cartlist: 40,40 - -// Displays a player's items -itemlist: 40,40 - -// Displays a player's stats -stats: 40,40 - -//--------------------- -// 50: Sub-GM+ commands - -// Creates a new guild, with you as the guildmaster. -guild: 50,50 - -// Brings up your guild storage wherever you are. -gstorage: 50,60 - -// Spawns a monster, and a certain amount (2 same commands + /monster). -monster: 50,50 [spawn] - -// Spawns a smaller sized version of a monster. -monstersmall: 50,50 - -// Spawns a larger sized version of a monster. -monsterbig: 50,50 - -// Spawns mobs that treat you as their master (they disappear after some time) -summon: 50,50 - -// It will spawn a supportive clone of the given player. -clone: 50,50 - -// It will spawn a supportive clone of the given player that follows the creator around. -slaveclone: 50,50 - -// It will spawn an aggresive clone of the given player. -evilclone: 50,50 - -//---------------- -// 60: GM commands - -// Add or Remove Cash Points to/from yourself -cash: 60,60 - -// Add or Remove Kafra Points to/from yourself -points: 60,60 - -// Starts Guild Wars -agitstart: 60,100 - -// Ends Guild Wars -agitend: 60,100 - -// Resurects yourself. -alive: 60,60 - -// Raises your base level by specified amount (7 same commands). -blvl: 60,60 [lvup,blevel,baselvl,baselvup,baselevel,baselvlup] - -// Raises your job level by specified amount (6 same commands). -jlvl: 60,60 [jlevel,joblvl,joblvup,joblevel,joblvlup] - -// Changes the sex of yourself -changesex: 60,60 - -// Raises your guild level by specified amount (6 same commands). -glvl: 60,60 [glevel,guildlvl,guildlvup,guildlevel,guildlvlup] - -// Find an itemID based on item name -idsearch: 60,60 - -// Creates an item of your choosing, either Item ID or Name (1 command + /item). -item: 60,60 - -// Creates a complet item (card, etc...) of your choosing, either Item ID or Name. -item2: 60,60 - -// Deletes an item of your choosing, either Item ID or Name. -delitem: 60,60 - -// Kill another character without hitting them. -kill: 60,60 - -// Kill all monsters in map (with drops) -killmonster: 60,60 - -// Creates yourself a pet egg. -makeegg: 60,60 - -// Hatches an egg -hatch: 60,60 - -// Instantly kills player whose name is entered and deals insane damage to everything around -nuke: 60,60 - -// Enable hitting a player even when not in PvP -killer: 60,60 - -// Creates weapon of desired element. -produce: 60,60 - -// Warps a character to you (1 command + /recall). -recall: 60,60 - -// Refines all weapons in your items list. -refine: 60,80 - -// Will repair all broken items in inventory. -repairall: 60,60 - -// Change Status of your character -str: 60,60 -agi: 60,60 -vit: 60,60 -int: 60,60 -dex: 60,60 -luk: 60,60 - -// Gives all skills -allskill: 60,60 [allskills,skillall,skillsall] - -// Sets GM stats to maximum -allstats: 60,60 [allstat,statall,statsall] - -// Gives you stat points. -stpoint: 60,60 - -// Gives you skill points of desired amount. -skpoint: 60,60 - -// Warps all online character of a guild to you. (at least one member of that guild must be on.) -guildrecall: 60,60 - -// Warps all online character of a party to you. -// (at least one party member must be online.) -partyrecall: 60,60 - -// Allows you to spy on any Guilds Guild chat. -// (at least one member of that guild must be on.) -// NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) -guildspy: 60,60 - -// Allows you to spy on any party's party chat. -// (at least one party member must be online.) -// NOTE: map server needs to be configured to enable spying to use this command (enable_spy: yes) -partyspy: 60,60 - -// Gives you zeny (or subtracts, if amount is negative) -zeny: 60,80 - -// Block a player indefinitely -block: 60,100 [charblock] - -// Unblock a player -unblock: 60,100 [charunblock] - -// Ban a player for a limited time -ban: 60,100 [banish,charban,charbanish] - -// Unban a player -unban: 60,100 [unbanish,charunban,charunbanish] - -// To send specified character in jails -jail: 60,100 - -// To discharge a jailed character (2 same commands) -unjail: 60,100 [discharge] - -// Timed jailing -jailfor: 60,60 - -// Create a static warp portal that lasts until the next reboot -addwarp: 60,60 - -// Open a trade window with any player -trade: 60,60 - -// Changes the player's appearance (headgear) -changelook: 60,60 - -// Homunculus commands for GMs -hlvl: 60,60 [homlevel,hlevel,homlvl,homlvup] -homevolve: 60,60 [homevolution] -makehomun: 60,60 -homfriendly: 60,60 -homhungry: 60,60 -// Re-calculates stats, as if the homun was sent back to level 1 and re-leveled -homshuffle: 60,60 - -// WoE 2 start/stop commands -agitstart2: 60,100 -agitend2: 60,100 - -// Resets player stats -streset: 60,60 - -// Resets player skills -skreset: 60,60 - -//---------------------- -// 80: GM Chief commands - -// Set the server to day. -day: 80,100 - -// Set the server to night. -night: 80,100 - -// Kills everyone on the server. -doom: 80,100 - -// Kills everyone on the map you are on. -doommap: 80,80 - -// Recalls Everyone To Your Coordinates -recallall: 80,80 - -// Revives all players on the map. -raisemap: 80,80 - -// Revives all players on the server. -raise: 80,100 - -// Hides a NPC. -hidenpc: 80,100 - -// Unhides a NPC. -shownpc: 80,100 - -// Loads an NPC script by path -loadnpc: 80,100 - -// Unloads a NPC -unloadnpc: 80,100 - -// Move a NPC -npcmove: 80,100 - -// turn skills on for a map -skillon: 80,100 - -// turn skills off for a map -skilloff: 80,100 - -// Mute a player (prevents talking, usage of skills and commands) -mute: 80,100 - -// Unmute a player -unmute: 80,100 - -//--------------------------- -// 99: Administrator commands - -// Disconnect all users from the server -kickall: 99,100 - -// Closes Map-Server -mapexit: 99,100 - -// Used for testing packet sends from the client (debug function) -send: 99,100 - -// Give information about terrain/area (debug function) -gat: 99,100 - -// Displays a status change without really applying it (debug function) -displaystatus: 99,100 - -// Displays the animation of a skill without really using it (debug function) -displayskill: 99,100 - -// Shows information about the map -mapinfo: 99,100 - -// Set Map Flags -mapflag: 99,100 - -// Re-load item database (admin command) -reloaditemdb: 99,100 - -// Re-load monsters database (admin command) -reloadmobdb: 99,100 - -// Re-load skills database (admin command) -reloadskilldb: 99,100 - -// Re-load scripts (admin command) -reloadscript: 99,100 - -// Change a battle_config flag without rebooting server -setbattleflag: 99,100 - -// Re-load gm command config (admin command) -reloadatcommand: 99,100 - -// Re-load battle config (admin command) -// Note that some player config settings won't take effect until relog -// (display exp, display zeny, display skill delay fail, ...) -reloadbattleconf: 99,100 - -// Re-load status database (admin command) -reloadstatusdb: 99,100 - -// Re-load player info database (admin command) -reloadpcdb: 99,100 - -// Re-load the Message of the Day (admin command) -reloadmotd: 99,100 - -// Changes the GM level of another character -// (lasts until reboot, or gm list reload) -adjgmlvl: 99,100 - -// Changes the required GM level of an @ command -// (effect lasts until restart or command reload) -adjcmdlvl: 99,100 - -// [Un]Disguise All Players (admin command) -disguiseall: 99,100 -undisguiseall: 99,100 - -// Mutes every player on screen (admin command) -mutearea: 99,100 [stfu] - -// Makes you immune to attacks (monsters/players/skills cannot target/hit you, admin command) -battleignore: 99,100 [monsterignore] - -//--------------------------------------------------------------- -// 99: Weather effects -snow: 99,100 -clouds: 99,100 -clouds2: 99,100 -fog: 99,100 -fireworks: 99,100 -sakura: 99,100 -leaves: 99,100 - -// Stop all weather effects -clearweather: 99,100 - -//--------------------------------------------------------------- -// 100: Disabled commands - -//--------------------- -// OTHER: not a command -import:conf/import/atcommand_conf.txt \ No newline at end of file +/* Atcommands and charcommands configuration file */ + +/* The symbol that will be used to recognize commands. +You can set any one character except: + - control-characters (0x00-0x1f), + - '%' (party chat symbol) + - '$' (guild chat symbol) + - '/' (client commands symbol) +atcommand_symbol represents @commands used locally. +charcommand_symbol represents #commands used on other players. +*/ + +atcommand_symbol : "@" +charcommand_symbol: "#" + +/* Command aliases +You can define aliases for any command. Aliases work just like original +command. +Format is + : ["", ...] +*/ + +aliases: { + mobinfo: ["monsterinfo", "mi"] + iteminfo: ["ii"] + time: ["date", "serverdate", "servertime"] + autotrade: ["at"] + help: ["h"] + jumpto: ["goto", "warpto"] + mount: ["mountpeco"] + who: ["whois"] + npctalk: ["npctalkc"] + gvgon: ["gpvpon"] + gvgoff: ["gpvpoff"] + jobchange: ["job"] + load: ["return"] + warp: ["rura", "mapmove"] + dye: ["ccolor"] + hairstyle: ["hstyle"] + haircolor: ["hcolor"] + monster: ["spawn"] + blvl: ["lvup", "blevel", "baselvl", "baselvup", "baselevel", "baselvlup"] + jlvl: ["jlevel", "joblvl", "joblvup", "joblevel", "joblvlup"] + glvl: ["glevel", "guildlvl", "guildlvup", "guildlevel", "guildlvlup"] + allskill: ["allskills", "skillall", "skillsall"] + allstats: ["allstat", "statall", "statsall"] + ban: ["banish"] + unban: ["unbanish"] + unjail: ["discharge"] + homlevel: ["hlvl", "hlevel", "homlvl", "homlvup"] + homevolution: ["homevolve"] + mutearea: ["stfu"] + monsterignore: ["battleignore"] + raise: ["revive"] +} + +/* Commands help file */ +help: { + @include "conf/help.txt" +} \ No newline at end of file diff --git a/conf/battle/gm.conf b/conf/battle/gm.conf index b7dc81909..fe07a6fc4 100644 --- a/conf/battle/gm.conf +++ b/conf/battle/gm.conf @@ -18,97 +18,10 @@ atcommand_slave_clone_limit: 25 // current map server. partial_name_scan: yes -// The level at which a player with access is considered a GM. -// An account with an access level lower than this is not effected -// by gm_can_drop_lv (battle_athena.conf). -lowest_gm_level: 1 - -// [GM] Can use all skills? (No or mimimum GM level) -gm_all_skill: no - -// [GM] Can equip anything? (No or minimum GM level, can cause client errors.) -gm_all_equipment: no - -// [GM] Can use skills without meeting the required conditions (items, etc...)? -// 'no' or minimum GM level to bypass requirements. -gm_skill_unconditional: no - -// [GM] Can join a password protected chat? (No or mimimum GM level) -gm_join_chat: no - -// [GM] Can't be kicked from a chat? (No or mimimum GM level) -gm_kick_chat: no - -// (@) GM Commands available only to GM's? (Note 1) -// set to 'No', Normal players (gm level 0) can use GM commands _IF_ you set the command level to 0. -// set to 'Yes', Normal players (gm level 0) can never use a GM command even if you set the command level to 0. -atcommand_gm_only: no - // (@) @allstats/@str/@agi/@vit/@int/@dex/@luk // allow gms to bypass the maximum stat parameter? ( if yes gm stats can go up to 32k ) default: no atcommand_max_stat_bypass: no -// Is the character of a GM account set as the object of a display by @ command etc. or not? -hide_GM_session: no - -// At what GM level can you see GMs and Account/Char IDs in the @who command? -who_display_aid: 40 - // Ban people that try trade dupe. // Duration of the ban, in minutes (default: 5). To disable the ban, set 0. ban_hack_trade: 5 - -// Set here minimum level of a (online) GM that can receive all informations about any player that try to hack, spoof a name, etc. -// Values are from 0 to 100. -// 100: disable information -// 0: send to any people, including normal players -// default: 60, according to GM definition in atcommand_athena.conf -hack_info_GM_level: 60 - -// The minimum GM level to bypass nowarp and nowarpto mapflags. -// This option is mainly used in commands which modify a character's -// map/coordinates (like @memo, @warp, @charwarp, @go, @jump, etc...). -// default: 20 (first level after normal player or super'normal' player) -any_warp_GM_min_level: 20 - -// The minimum level for a GM to be unable to distribute items. -// You should set this to the same level @item is set to in the atcommand.conf -// NEVER SET THIS VALUE TO 0, or you will block drop/trade for normal players -gm_cant_drop_min_lv: 1 - -//The trust level for your GMs. Any GMs ABOVE this level will be able to distribute items -//ie: Use Storage/Guild Storage, Drop Items, Use Vend, Trade items. -gm_cant_drop_max_lv: 0 - -// Minimum GM level to see the hp of every player? (Default: 60) -// no/0 can be used to disable it. -disp_hpmeter: 0 - -// Minimum GM level to view players equip regardless of their setting. -// (Default: 0 = Disabled). -gm_viewequip_min_lv: 0 - -// Can GMs invite non GMs to a party? (Note 1) -// set to 'No', GMs under the party invite trust level may not invite non GMs to a party. -// set to 'Yes', All GMs can invite any player to a party. -// Also, as long as this is off, players cannot invite GMs to a party as well. -gm_can_party: no - -//The trust level for GMs to invite to a party. Any GMs ABOVE OR EQUAL TO this level will be able to invite normal -//players into their party in addittion to other GMs. (regardless of gm_can_party) -gm_cant_party_min_lv: 20 - -// Players Titles (check msg_athena.conf for title strings) -// You may assign different titles for your Players and GMs -title_lvl1: 1 -title_lvl2: 10 -title_lvl3: 20 -title_lvl4: 40 -title_lvl5: 50 -title_lvl6: 60 -title_lvl7: 80 -title_lvl8: 99 - -// Minimum GM level required for client command /check (display character status) to work. -// Default: 60 -gm_check_minlevel: 60 diff --git a/conf/char_athena.conf b/conf/char_athena.conf index bc9e1ab1c..1b5e96a16 100644 --- a/conf/char_athena.conf +++ b/conf/char_athena.conf @@ -93,8 +93,10 @@ char_new_display: 0 // Maximum users able to connect to the server. Set to 0 for unlimited. max_connect_user: 0 -// Minimum GM level that is allowed to bypass the server limit of users. -gm_allow_level: 99 +// Group ID that is allowed to bypass the server limit of users. +// Default: -1 = nobody (there are no groups with ID < 0) +// See: conf/groups.conf +gm_allow_group: -1 // How often should the server save all files? (In seconds) // Note: Applies to all data files on TXT servers. diff --git a/conf/groups.conf b/conf/groups.conf new file mode 100644 index 000000000..d93d2aa09 --- /dev/null +++ b/conf/groups.conf @@ -0,0 +1,274 @@ +/* + +Player groups configuration file +--------------------------------- + +This file defines "player groups" and their privileges. + +Each group has its id and name, lists of available commands and other +permissions, and a list of other groups it inherits from. + + +Group settings +-------------- + +Unique group number. The only required field. + + +Any string. If empty, defaults to "Group ". It is used in several @who +commands. + + +Equivalent of GM level, which was used in revisions before r xxxxx. You can +set it to any number, but usually it's between 0 (default) and 99. Members of +groups with lower level can not perform some actions/commands (like @kick) on +members of groups with higher level. It is what script command getgmlevel() +returns. Group level can also be used to override trade restrictions +(db/item_trade.txt). + + +A group of settings + : +or + : [ , ] +First boolean value is for atcommand, second one for charcommand. If set to +true, group can use command. If only atcommand value is provided, false is +assumed for charcommand. If a command name is not included, false is assumed for +both atcommand and charcommand. +For a full list of available commands, see: doc/atcommands.txt. +Command names must not be aliases. + + +Boolean value. If true then all commands used by the group will be logged to +atcommandlog. If setting is omitted in a group definition, false is assumed. +Requires 'log_commands' to be enabled in 'conf/log_athena.conf'. + + +A group of settings + : +If a permission is not included, false is assumed. +For a full list of available permissions, see: doc/permissions.txt + + +A list of group names that given group will inherit commands and permissions +from. Group names are case-sensitive. + +Inheritance results +------------------- +Both multiple inheritance (Group 2 -> Group 1 and Group 3 -> Group 1) and +recursive inheritance (Group 3 -> Group 2 -> Group 1) are allowed. + +Inheritance rules should not create cycles (eg Group 1 inherits from Group 2, +and Group inherits from Group 1 at the same time). Configuration with cycles is +considered faulty and can't be processed fully by server. + +Command or permission is inherited ONLY if it's not already defined for the +group. +If group inherits from multiple groups, and the same command or permission is +defined for more than one of these groups, it's undefined which one will be +inherited. + +Syntax +------ +This config file uses libconfig syntax: +http://www.hyperrealm.com/libconfig/libconfig_manual.html#Configuration-Files + + +Upgrading from revisions before XXXXX +------------------------------------- + +*/ + +groups: ( +{ + id: 0 /* group 0 is the default group for every new account */ + name: "Player" + level: 0 + inherit: ( /*empty list*/ ) + commands: { + /* no commands by default */ + } + permissions: { + /* without this basic permissions regular players could not + trade or party */ + can_trade: true + can_party: true + } +}, +{ + id: 1 + name: "Super Player" + inherit: ( "Player" ) /* can do everything Players can and more */ + level: 0 + commands: { + /* informational commands */ + commands: true + charcommands: true + help: true + rates: true + uptime: true + showdelay: true + exp: true + mobinfo: true + iteminfo: true + whodrops: true + time: true + jailtime: true + hominfo: true + homstats: true + showexp: true + showzeny: true + whereis: true + /* feature commands */ + refresh: true + noask: true + noks: true + main: true + autoloot: true + alootid: true + autotrade: true + request: true + go: true + } + permissions: { + } +}, +{ + id: 2 + name: "Support" + inherit: ( "Super Player" ) + level: 1 + commands: { + version: true + where: true + jumpto: true + who: true + who2: true + who3: true + whomap: true + whomap2: true + whomap3: true + users: true + broadcast: true + localbroadcast: true + } + log_commands: true + permissions: { + receive_requests: true + view_equipment: true + } +}, +{ + id: 3 + name: "Script Manager" + inherit: ( "Support" ) + level: 1 + commands: { + tonpc: true + hidenpc: true + shownpc: true + loadnpc: true + unloadnpc: true + npcmove: true + addwarp: true + } + log_commands: true + permissions: { + any_warp: true + } +}, +{ + id: 4 + name: "Event Manager" + inherit: ( "Support" ) + level: 1 + commands: { + monster: true + monstersmall: true + monsterbig: true + killmonster2: true + cleanmap: true + item: [true, true] + zeny: [true, true] + disguise: [true, true] + undisguise: [true, true] + size: [true, true] + raise: true + raisemap: true + day: true + night: true + skillon: true + skilloff: true + pvpon: true + pvpoff: true + gvgon: true + gvgoff: true + allowks: true + me: true + marry: true + divorce: true + } + log_commands: true + permissions: { + can_trade: false + any_warp: true + } +}, +{ + id: 10 + name: "Law Enforcement" + inherit: ( "Support" ) + level: 2 + commands: { + hide: true + follow: true + kick: true + disguise: true + fakename: true + option: true + speed: true + warp: true + kill: true + recall: true + ban: true + block: true + jail: true + jailfor: true + mute: true + storagelist: true + cartlist: true + itemlist: true + stats: true + } + log_commands: true + permissions: { + join_chat: true + kick_chat: true + hide_session: true + who_display_aid: true + hack_info: true + any_warp: true + view_hpmeter: true + } +}, +{ + id: 99 + name: "Admin" + level: 99 + inherit: ( "Support", "Law Enforcement" ) + commands: { + } + log_commands: true + permissions: { + can_trade: true + can_party: true + all_skill: true + all_equipment: true + skill_unconditional: true + use_check: true + use_changemaptype: true + all_commands: true + } +} +) + diff --git a/conf/help.txt b/conf/help.txt index 13a958798..5a8f5871f 100644 --- a/conf/help.txt +++ b/conf/help.txt @@ -1,172 +1,230 @@ -// put at first, the minimum level to display the line - 1:To use one command, type it inside the message window where you usually type to chat. - 20:@h/@help - display this help guide. - 20:@h2/@help2 - displays the second help guide. - 1: - 1:--- MESSAGE CMD --- - 1:@main [on|off|message] - Turns on or off global chat (@main must be on to see global chat messages) - 1:@noask - Auto rejects Deals/Invites - 20:@gmotd - Broadcasts the Message of The Day file to all players. - 20:@me - Displays normal text as a message in this format: *name message* (like /me in mIRC) - 20:@fakename [Name] - Changes your name to your choice temporarly. - 20:@npctalk [NPC Name],[Message] - Forces a NPC to display a message in normal chat. - 40:/b/@broadcast - Broadcasts a GM message with name of the GM (in yellow) - 40:/nb /@kami - Broadcasts a GM message without name of the GM (in yellow) - 40:@kamib - Broadcasts a GM message without name of the GM (in blue) - 40:/lb/@localbroadcast - Broadcasts a GM message with name of the GM (in yellow) ONLY on your map - 40:/nlb - Broadcasts a GM message without name of the GM (in yellow) ONLY on your map - 1: - 1:--- INFORMATION CMD --- - 1:@commands - Displays a list of commands that you can use. - 1:@rates - Displays the server's current rates. - 1:@uptime - Displays how long the server has been online. - 1:@showdelay - Shows/Hides the "there is a delay after this skill" message. - 1:@exp - Displays current levels and % progress - 1:@mobinfo/@monsterinfo/@mi [Mob ID|Part of monster name] - Shows Monster Info (rates, stats, drops, MVP stuff) - 1:@iteminfo/@ii [Item ID|Part of item name] - Shows Item info (type, price, etc) - 1:@whodrops [Item ID|Part of item name] - Shows who drops an item (mobs with highest drop rates) - 1:@version - Displays SVN version of the server - 1:@email - to change your e-mail (characters protection) - 1:@where [char name] - Tells you the location of a character - 1:@time/@date/@server_date/@serverdate/@server_time/@servertime - Display the date/time of the server - 10:@showexp - Displays/Hides Experience gained. - 10:@showzeny - Displays/Hides Zeny gained. - 10:@mobsearch [Mob ID|Monster Name] - Shows the location of a certain mob on the current map. - 20:@who/@whois/@w [match_text] - Display a listing of who is online and their party/guild. - 20:@who2 [match_text] - Display a listing of who is online and their job. - 20:@who3 [match_text] - Display a listing of who is online and where. - 20:@whomap/@whomap2/@whomap3 [map] - like @who/@who2/@who3 but only for specifical map. - 20:@whogm [match_text] - Like @who+@who2+who3, but only for GM. - 40:@charcartlist - Displays all items of a player's cart. - 60: - 60:@guildspy - You will receive all messages of the guild channel (Chat logging must be enabled) - 60:@partyspy - You will receive all messages of the party channel (Chat logging must be enabled) - 99:@mapinfo [<0-3> [map]] - Give information about a map (general info +: 0: no more, 1: players, 2: NPC, 3: shops/chat). - 1: - 1:--- CHANGE GM STATE CMD --- - 1:@die - Kills yourself - 10:@go - Warps you to a city. - 10: -3: (Memo point 2) 1: morocc 5: izlude 9: yuno 13: niflheim - 10: -2: (Memo point 1) 2: geffen 6: aldebaran 10: amatsu 14: louyang - 10: -1: (Memo point 0) 3: payon 7: xmas (lutie) 11: gonryun 15: start point - 10: 0: prontera 4: alberta 8: comodo 12: umbala 16: prison/jail - 10: - 20:/shift/@jumpto/@warpto/@goto - Warps you to selected character - 20:@follow - follow a player - 20:@mountpeco - Give/remove you a peco (Class is required, but not skill) - 20:@disguise - Change your appearence to other players to a mob. - 20:@undisguise - Restore your normal appearance. - 20:@model - Changes your characters appearence. - 20:@size <1-3> Changes your size (1-Smallest 2-Biggest 3-Normal) - 40:/hide/@hide - Makes you character invisible (GM invisibility). Type /hide or@hide again become visible. - 40:@save - Sets respawn point to current spot - 40:@load/@return - Warps you to your save point - 40:/mm//mapmove/@warp/@rura/@mapmove - Warps you to the selected position - 40:@jump [x [y]]- Randomly warps you like a flywing. - 40:@job/@jobchange - Changes your job - 40: 0: Novice 18: Alchemist 4015: Paladin - 40: 1: Swordman 19: Bard 4016: Champion - 40: 2: Mage 20: Dancer 4017: Professor - 40: 3: Archer 23: Super Novice 4018: Stalker - 40: 4: Acolyte 4001: High Novice 4019: Creator - 40: 5: Merchant 4002: High Swordman 4020: Clown - 40: 6: Thief 4003: High Mage 4021: Gypsy - 40: 7: Knight 4004: High Archer 4046: Taekwon - 40: 8: Priest 4005: High Acolyte 4047: Star Gladiator - 40: 9: Wizard 4006: High Merchant 4049: Soul Linker - 40: 10: Blacksmith 4007: High Thief 24: Gunslinger - 40: 11: Hunter 4008: Lord Knight 25: Ninja - 40: 12: Assassin 4009: High Priest - 40: 14: Crusader 4010: High Wizard - 40: 15: Monk 4011: Whitesmith - 40: 16: Sage 4012: Sniper - 40: 17: Rogue 4013: Assassin Cross - 40: ---- Baby Classes ---- - 40: 4023: Baby 4024: Baby Swordman 4025: Baby Mage - 40: 4026: Baby Archer 4027: Baby Acolyte 4028: Baby Merchant - 40: 4029: Baby Thief 4030: Baby Knight 4031: Baby Priest - 40: 4032: Baby Wizard 4033: Baby Blacksmith 4034: Baby Hunter - 40: 4035: Baby Assassin 4037: Baby Crusader 4038: Baby Monk - 40: 4039: Baby Sage 4040: Baby Rogue 4041: Baby Alchemist - 40: 4042: Baby Bard 4043: Baby Dancer 4045: Super Baby - 40: - 40: (stackable) - 40: 1 Petrified (stackable) 01 Sight 32 Peco Peco riding 2048 Orc Head - 40: 2 Frozen 01 Poison 02 Hide 64 GM Perfect Hide 4096 Wedding Sprites - 40: 3 Stunned 02 Cursed 04 Cloak 128 Level 2 Cart 8192 Ruwach - 40: 4 Sleeping 04 Silenced 08 Level 1 Cart 256 Level 3 Cart - 40: 6 darkness 08 ??? 16 Falcon 512 Level 4 Cart - 40: 16 darkness 1024 Level 5 Cart - 40: - 40:@heal [ ] - Heals the desired amount of HP and SP. No value specified will do a full heal. - 40:@option - Adds different visual effects on or around your character - 40:@dye/@ccolor - Changes your characters appearence (only clothes color). - 40:@hairstyle/@hstyle - Changes your characters appearence (only hair style). - 40:@haircolor/@hcolor - Changes your characters appearence (only hair color). - 40:@speed <1-1000> - Changes you walking speed. 1 being the fastest and 1000 the slowest. Default 150. - 40:@effect [flag] - Give an efect to your character. - 40:@dropall - throws all your possession on the ground - 40:@storeall - puts all your possessions in storage - 40:@killable - make your character killable - 40:@memo [memo_position] - set/change a memo location (no position: display memo points). - 40:@spiritball - Gives you "spirit spheres" like from the skill "Call Spirits" - 40: (If the number you use is > 1000, your server may become instable or crash) - 40:@questskill <#> - Gives you the specified quest skill - 40:@lostskill <#> - Takes away the specified quest skill from you - 40:@skillid - look up a skill by name - 40:@useskill - use a skill on target - 40: Novice Swordsman Thief Merchant - 40: 142 = Emergency Care 144 = Moving HP Recovery 149 = Throw Sand 153 = Cart Revolution - 40: 143 = Act dead 145 = Attack Weak Point 150 = Back Sliding 154 = Change Cart - 40: Archer 146 = Auto Berserk 151 = Take Stone 155 = Crazy Uproar/Loud Voice - 40: 147 = Arrow Creation Acolyte 152 = Stone Throw Magician - 40: 148 = Charge Arrows 156 = Holy Light 157 = Energy Coat - 40: @skilltree < - 40: @marry , - marry two players - 40: @divorce - divorces the two players (you need just one name of them) - 60:@alive - Revives yourself from death - 60:@lvup/@blevel/@baselvlup - Raises your base level the desired number of levels. The max is 255 (User Defined). - 60:@joblvup/@jlevel/@joblvlup -Raises your job level the desired number of levels. The max is 50 For Basic Classes. For Super Novice and Advanced Classes it is 70. - 60:@allskill/@allskills/@skillall/@skillsall - Give you all skills. - 60:@stpoint - Gives you the desired number of stat points. - 60:@skpoint - Gives you the desired number of skill points. - 60:@zeny - Gives you desired amount of Zeny. - 60:@cash - Gives you the specified amount of cash points. - 60:@points - Gives you the specified amount of Kafra Points. - 60:@str,@agi,@vit,@int,@dex,@luk - Adds desired amount to any stat. For example "@str 10" raises your str by 10 - 60:@statall/@statsall/@allstats/@allstat [value] - Adds value in all stats (maximum if no value). - 60: @addwarp - 40: - 40:--- MONSTERS CMD --- - 40:@killmonster2 - kill all monsters of your map (without drops) - 50:/monster - Spawns 1 of the desired monster. - 50:@spawn/@monster/@summon [ [ [ []]]] - 50:@monster2 [ [ []]] - 50:@spawn/@monster/@summon/@monster2 "desired monster name" [ [ []]] - 50:@spawn/@monster/@summon/@monster2 "desired monster name" [ [ []]] - 50: Spawns the desired monster with any desired name. - 50:@monstersmall [Mob ID|Mob Name] - Spawns a smaller version of a monster. - 50:@monsterbig [Mob ID|Mob Name] - Spawns a larger version of a monster. - 60:@killmonster [map] - kill all monsters of the map (they drop) - 40: - 10:--- MISC CMD --- - 10:@autoloot [on|off|#] - Makes items go straight into your inventory. - 10:@autotrade/@at - Allows you to vend while you are offline. - 10:@changegm [Player Name] - Changes the leader of your guild (You must be guild leader) - 10:@changeleader [Player Name] - Changes the leader of your party (You must be party leader) - 20:@request [Message] - Sends a message to all connected GMs (via the gm whisper system) - 40:@sound [Path way to file in Data or GRF file] - Plays a sound from the data or grf file located on the client. - 50:@clone [Player Name] - Spawns a supportive clone of the given player. - 50:@slaveclone [Player Name] - Spawns a supportive clone of the given player that follows the creator around. - 50:@evilclone [Player Name] - Spawns an agressive clone of the given player. - 60:@changesex - Changes your gender. - 10: - 1:--- DUEL CMD --- - 1:@duel - Starts a duel. - 1:@invite - Invites a player to a duel. - 1:@accept - Accepts an invitation to a duel. - 1:@reject - Rejects an invitation to a duel. - 1:@leave - Leaves a duel. - 1: - 1:--- MAIL SYSTEM --- (SQL Only) - 1:@mail - Open mail box. +// This is help file that contains help messages for atcommands/charcommands. + +// Format: +// : "" + +// This file uses libconfig syntax. + +help: "Params: \n" "Shows help for specified command." +main: "Params: [on|off|]\n" "Turns on or off main (server-wide) chat. Sends message to main chat." +noask: "Auto rejects deals/invites." +gmotd: "Broadcasts the Message of The Day to all players." +me: "Params: \n" "Displays normal text as a message in this format: *name message* (like /me in mIRC)." +fakename: "Params: \n" "Changes your name to your choice temporarily." +npctalk: "Params: \n" "Forces a NPC to display a message in normal chat." +broadcast: "Params: \n" "Broadcasts a message with your name (in yellow)." +kami: "Params: \n" "Broadcasts a message without your name (in yellow)." +kamib: "Params: \n" "Broadcasts a message without your name (in blue)." +localbroadcast: "Params: \n" "Broadcasts a message with your name (in yellow) only on your map." +commands: "Displays a list of commands that you can use." +rates: "Displays the server's current rates." +uptime: "Displays how long the server has been online." +showdelay: "Shows/hides the \"There is a delay after this skill\" message." +exp: "Displays current levels and % progress." +mobinfo: "Params: |\n" "Shows monster info (stats, exp, drops etc)." +iteminfo: "Params: |\n" "Shows item info (type, price etc)." +whodrops: "Params: |\n" "Shows who drops an item (monster with highest drop rates)." +version: "Displays SVN version of the server." +email: "Params: \n" "Changes your account e-mail address." +where: "Params: \n" "Tells you the location of a character." +time: "Shows the date and time of the server." +showexp: "Displays/hides experience gained." +showzeny: "Displays/hides Zeny gained." +mobsearch: "Params: |\n" "Shows the location of a certain mob on the current map." +who: "Params: []\n" "Shows a list of online players and their party and guild." +who2: "Params: []\n" "Shows a list of online players and their job." +who3: "Params: []\n" "Shows a list of online players and their location." +whomap: "@whomap/@whomap2/@whomap3 [map] - like @who/@who2/@who3 but only for specifical map." +whogm: "Params: [match_text] - Like @who+@who2+who3, but only for GM." +guildspy: "Params: - You will receive all messages of the guild channel (Chat logging must be enabled)" +partyspy: "@partyspy - You will receive all messages of the party channel (Chat logging must be enabled)" +mapinfo: "Params: [<0-3> [map]] - Give information about a map (general info +: 0: no more, 1: players, 2: NPC, 3: shops/chat)." +die: "Kills yourself." +go: "Params: \n" "Warps you to a city.\n" + " -3: (Memo point 2) 1: morocc 5: izlude 9: yuno 13: niflheim \n" + " -2: (Memo point 1) 2: geffen 6: aldebaran 10: amatsu 14: louyang\n" + " -1: (Memo point 0) 3: payon 7: xmas (lutie) 11: gonryun 15: start point\n" + " 0: prontera 4: alberta 8: comodo 12: umbala 16: prison/jail\n" +jumpto: "Params: \n" "Warps you to selected character." +follow: "Params: \n" "Follow a player." +mount: "Give/remove you a peco (Class is required, but not skill)" +disguise: "Params: \n" "Change your appearence to other players to a mob." +undisguise: "Restore your normal appearance." +model: "Params: - Changes your characters appearence." +size: "Params: <1-3> Changes your size (1-Smallest 2-Biggest 3-Normal)" +hide: "Makes you character invisible (GM invisibility). Type again to become visible." +save: "Sets respawn point to current spot." +load: "Warps you to your save point." +warp: "Params: [ ]\n" "Warps you to the selected map and position." +jump: "Params: [ []]\n" "Randomly warps you like a flywing." +jobchange: "Params: \n" "Changes your job.\n" +" 0: Novice 18: Alchemist 4015: Paladin\n" +" 1: Swordman 19: Bard 4016: Champion\n" +" 2: Mage 20: Dancer 4017: Professor\n" +" 3: Archer 23: Super Novice 4018: Stalker\n" +" 4: Acolyte 4001: High Novice 4019: Creator\n" +" 5: Merchant 4002: High Swordman 4020: Clown\n" +" 6: Thief 4003: High Mage 4021: Gypsy\n" +" 7: Knight 4004: High Archer 4046: Taekwon\n" +" 8: Priest 4005: High Acolyte 4047: Star Gladiator\n" +" 9: Wizard 4006: High Merchant 4049: Soul Linker\n" +" 10: Blacksmith 4007: High Thief 24: Gunslinger\n" +" 11: Hunter 4008: Lord Knight 25: Ninja\n" +" 12: Assassin 4009: High Priest\n" +" 14: Crusader 4010: High Wizard\n" +" 15: Monk 4011: Whitesmith\n" +" 16: Sage 4012: Sniper\n" +" 17: Rogue 4013: Assassin Cross\n" +" ---- Baby Classes ----\n" +" 4023: Baby 4024: Baby Swordman 4025: Baby Mage\n" +" 4026: Baby Archer 4027: Baby Acolyte 4028: Baby Merchant\n" +" 4029: Baby Thief 4030: Baby Knight 4031: Baby Priest\n" +" 4032: Baby Wizard 4033: Baby Blacksmith 4034: Baby Hunter\n" +" 4035: Baby Assassin 4037: Baby Crusader 4038: Baby Monk\n" +" 4039: Baby Sage 4040: Baby Rogue 4041: Baby Alchemist\n" +" 4042: Baby Bard 4043: Baby Dancer 4045: Super Baby\n" +option: "Params: \n" "Adds different visual effects on or around your character.\n" +" (stackable) \n" +"1 Petrified (stackable) 01 Sight 32 Peco Peco riding 2048 Orc Head\n" +"2 Frozen 01 Poison 02 Hide 64 GM Perfect Hide 4096 Wedding Sprites\n" +"3 Stunned 02 Cursed 04 Cloak 128 Level 2 Cart 8192 Ruwach\n" +"4 Sleeping 04 Silenced 08 Level 1 Cart 256 Level 3 Cart\n" +"6 darkness 08 ??? 16 Falcon 512 Level 4 Cart\n" +" 16 darkness 1024 Level 5 Cart\n" +heal: "Params: [ ]\n" "Heals the desired amount of HP and SP. No value specified will do a full heal." +dye: "Params: \n" "Changes your characters clothes color." +hairstyle: "Params: \n" "Changes your hair style." +haircolor: "Params \n" "Changes your hair color." +speed: "Params: <1-1000>\n" "Changes you walking speed. 1 being the fastest and 1000 the slowest. Default is 150." +effect: "Params: []\n" "Give an effect to your character." +dropall: "Throws all your possession on the ground." +storeall: "Puts all your possessions in storage." +killable: "Make your character killable." +memo: "Params: [memo position]\n" "Set/change a memo location (no position: display memo points)." +spiritball: "Params: <1-100>\n" "Gives you \"spirit spheres\" like from the skill \"Call Spirits\".\n" +questskill: "Params: <#>\n" "Gives you the specified quest skill" +lostskill: "Params: <#>\n" "Takes away the specified quest skill from you\n" +" Novice Swordsman Thief Merchant\n" +" 142 = Emergency Care 144 = Moving HP Recovery 149 = Throw Sand 153 = Cart Revolution\n" +" 143 = Act dead 145 = Attack Weak Point 150 = Back Sliding 154 = Change Cart\n" +" Archer 146 = Auto Berserk 151 = Take Stone 155 = Crazy Uproar/Loud Voice\n" +" 147 = Arrow Creation Acolyte 152 = Stone Throw Magician\n" +" 148 = Charge Arrows 156 = Holy Light 157 = Energy Coat\n" +skillid: "Params: \n" "Look up a skill by name" +useskill: "Params: \n" "Use a skill on target" +skilltree: "Params: <" +marry: "Params: ,\n" "Marry two players." +divorce: "Params: \n" "Divorces the two players (you need just one name of them)" +alive: "Revives yourself from death." +blvl: "Params: \n" "Raises your base level the desired number of levels." +jlvl: "Params: \n" "Raises your job level the desired number of levels." +allskill: "Give you all skills." +stpoint: "Params: - Gives you the desired number of stat points." +skpoint: "Params: - Gives you the desired number of skill points." +zeny: "Params: - Gives you desired amount of Zeny." +cash: "Params: - Gives you the specified amount of cash points." +points: "Params: - Gives you the specified amount of Kafra Points." +str: "Params: \n" "Raises STR by given amount." +agi: "Params: \n" "Raises AGI by given amount." +dex: "Params: \n" "Raises DEX by given amount." +vit: "Params: \n" "Raises VIT by given amount." +int: "Params: \n" "Raises INT by given amount." +luk: "Params: \n" "Raises LUK by given amount." +allstats: "Params: \n" "Adds value in all stats (maximum if no value)." +addwarp: "Params: \n" +killmonster2: "Kills all monsters of your map (without drops)." +monster: "Params: [ [ [ []]]]\n" + "@monster2 [ [ []]]\n" +"@spawn/@monster/@summon/@monster2 \"desired monster name\" [ [ []]]\n" +"@spawn/@monster/@summon/@monster2 \"desired monster name\" [ [ []]]\n" +" Spawns the desired monster with any desired name." +monstersmall: "Params: [Mob ID|Mob Name]\n" "Spawns a smaller version of a monster." +monsterbig: "Params: [Mob ID|Mob Name]\n" "Spawns a larger version of a monster." +killmonster: "Params: [map]\n" "Kill all monsters of the map (they drop)" +autoloot: "Params: [on|off|#]\n" "Makes items go straight into your inventory." +autotrade: "Allows you to vend while you are offline." +changegm: "Params: [Player Name]\n" "Changes the leader of your guild (You must be guild leader)" +changeleader: "Params: [Player Name]\n" "Changes the leader of your party (You must be party leader)" +request: "Params: [Message]\n" "Sends a message to all connected GMs (via the gm whisper system)" +sound: "Params: [Path way to file in Data or GRF file]\n" "Plays a sound from the data or grf file located on the client." +clone: "Params: [Player Name]\n" "Spawns a supportive clone of the given player." +slaveclone: "Params: [Player Name]\n" "Spawns a supportive clone of the given player that follows the creator around." +evilclone: "Params: [Player Name]\n" "Spawns an agressive clone of the given player." +changesex: "Changes your gender." +duel: "Starts a duel." +invite: "Invites a player to a duel." +accept: "Accepts an invitation to a duel." +reject: "Rejects an invitation to a duel." +leave: "Leaves a duel." +mail: "Open mail box." +storage: "Opens storage." +itemreset: "Remove all your items." +guildstorage: "Opens guild storage." +idsearch: "Params: \n" "Search all items that name have part_of_item_name" +refine: "Params: <+/- amount>" +produce: "Params: <# of very's>\n" +" Element: 0=None 1=Ice 2=Earth 3=Fire 4=Wind\n" +" You can add up to 3 Star Crumbs and 1 element\n" +repairall: "Repair all items of your inventory" +item: "Params: \n" "Gives you the desired item." +item2: "Params: \n" "Gives you the desired item." +pvpon: "Turns pvp on on the current map" +pvpoff: "Turns pvp off on the current map" +gvgon: "Turns gvg on on the current map" +gvgoff: "Turns gvg off on the current map" +agitstart: "Starts War of Emperium" +agitend: "End War of Emperium" +party: "Params: \n" "Create a party." +guild: "Params: \n" "Create a guild." +glvl: "Params: <# of levels>\n" "Raise Guild by desired number of levels" +guildrecall: "Params: \n" "Warps all online characters of a guild to you." +partyrecall: "Params: \n" "Warps all online characters of a party to you." +petrename: "Re-enable pet rename" +pettalk: "Params: [Message]\n" "Makes your pet say a message." +petfriendly: "Params: <#>\n" "Set pet friendly amount (0-1000) 1000 = Max" +pethungry: "Params: <#>\n" "Set pet hungry amount (0-100) 100 = Max" +hatch: "Create a pet from your inventory eggs list." +makeegg: "Params: \n" "Gives pet egg for monster number in pet DB" +kick: "Params: \n" "Kicks specified character off the server" +unjail: "Params: \n" "Discharges specified character/prisoner" +kill: "Params: \n" "Kills specified character." +recall: "Params: \n" "Warps target character to you." +raise: "Params: \n" "Revives target character." +block: "Params: \n" "Blocks definitively a account" +unblock: "Params: \n" "Unblocks a account" +ban: "Params: