From 069d63bc755e5a9335946eb70ba610956c307386 Mon Sep 17 00:00:00 2001 From: DracoRPG Date: Tue, 17 Apr 2007 00:17:15 +0000 Subject: Massive at+charcommand cleanup, big thanks to HiddenDragon git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@10272 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 1 + conf-tmpl/atcommand_athena.conf | 777 ++++----- conf-tmpl/charcommand_athena.conf | 243 ++- src/map/atcommand.c | 2437 +++++++++++----------------- src/map/atcommand.h | 59 +- src/map/charcommand.c | 3174 ++++++++++++++++++++++++++++++++----- src/map/charcommand.h | 56 +- 7 files changed, 4277 insertions(+), 2470 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 3f11486f9..746fac262 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,7 @@ 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/04/17 + * Massive at+charcommand cleanup, big thanks to HiddenDragon [DracoRPG] * Partially deobfuscated the grfio module * Finally fixed mingw problems, managed to build both TXT and SQL * Fixed the uint32 platform problem (Microsoft failed so I removed it :) diff --git a/conf-tmpl/atcommand_athena.conf b/conf-tmpl/atcommand_athena.conf index e4eacc9c2..b0d3b0ec4 100644 --- a/conf-tmpl/atcommand_athena.conf +++ b/conf-tmpl/atcommand_athena.conf @@ -45,170 +45,237 @@ command_symbol: @ //------------------------- // 1: Super player commands -//Displays a list of @ commands available to the player. -commands: 1 +// Enables/disables autolooting from killed mobs. +autoloot: 1 -//Displays the server rates. -rates: 1 +// Allows you continue vending offline. +autotrade: 1 +at: 1 -// Show server uptime -uptime: 1 +// Away messsage +away: 1 +aw: 1 -//Shows/Hides the "there is a delay after a skill" message. -showdelay: 1 +// Change Guild Master of your Guild +changegm: 1 -//Displays current levels and % progress. -exp: 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 -// Show Item info (type, price, etc) -iteminfo: 1 -ii: 1 +// Autorejecting Deals/Invites +noask: 1 -// Show who drops an item (mobs with highest drop rate) -whodrops: 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 -// Suicide your character. -die: 1 - -// Enables you to rename your pet. -petrename: 1 - -party: 1 +// Show who drops an item (mobs with highest drop rate) +whodrops: 1 -// Brings up your personal storage wherever you are. -storage: 1 +//--------------------------------------------------------------- +// 0: Mail System - SQL Only commands - Must be enabled -// Locate someone on a map, returns your coordinates if the person isn't on. -where: 1 +// Check # of messages. +checkmail: 1 -// Duel organizing commands -duel: 1 -invite: 1 -accept: 1 -reject: 1 -leave: 1 +// List all messages. +listmail: 1 -// Away messsage -away: 1 -aw: 1 +// List only new mail. +listnewmail: 1 -// Main chat -main: 1 +// Read a message. +readmail: 1 -// Autorejecting Deals/Invites -noask: 1 +// Send mail. +sendmail: 1 -// Displays remaining jail time -jailtime: 1 +// Send priority mail (tagged with Priority and cannot be deleted until read) +sendprioritymail: 80 -//Homunculus commands for players -hominfo: 1 -homstats: 1 +// Delete a message. +deletemail: 1 //--------------------------- // 10: Super player+ commands -//Displays/Hides Experience gained -showexp: 10 - -//Displays/Hides Zeny gained -showzeny: 10 +// Suicide your character. +die: 10 // Spawns you to set points in major cities. go: 10 -// Enables/disables autolooting from killed mobs. -autoloot: 10 - -// Allows you continue vending offline. -autotrade: 10 -at: 10 - -// Change Guild Master of your Guild -changegm: 10 - -// Change the leader of your party. -changeleader: 10 +// Brings up your guild storage wherever you are. +gstorage: 10 -// Change the party item share rules. -partyoption: 10 +// Create a guild +guild: 10 -// Command what the player's pet will say. -pettalk: 10 +// Brings up your personal storage wherever you are. +storage: 10 -// Command what the player's homunculus will say. -homtalk: 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 +// 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) -jumptoid: 20 jumptoid2: 20 -gotoid: 20 gotoid2: 20 -warptoid: 20 warptoid2: 20 -// Displays the motd file to all players -gmotd: 20 - -// follow a player (including warping to them) -follow: 20 +// allow other players to hit you out of pvp +killable: 20 -// Sends a request to all connected GMs (via the gm whisper system) -request: 20 +// To get a peco to (un)ride +mountpeco: 20 -// Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). -kick: 20 +// Can command what other npcs (by name) can say. +npctalk: 20 -// Disconnects a user from the server using their PID. -kickid: 20 -kickid2: 20 +// Sets the speed you can walk/attack at. Default is 150. +speed: 20 -// Changes your apperance. -model: 20 +//Restore your normal appearance. +undisguise: 20 -// To get a peco to (un)ride -mountpeco: 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 @@ -234,61 +301,50 @@ 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 - -//Restore your normal appearance. -undisguise: 20 - -// Display ignore list of a player (people from which the player ignore wisps) -charignorelist: 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 temporarly. -fakename: 20 +//-------------------- +// 40: Sub-GM commands -// Changes your size. -size: 20 -// Can command what other npcs (by name) can say. -npctalk: 20 +// Resurects yourself. +alive: 40 -//-------------------- -// 40: Sub-GM commands +// 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 -// Broadcast to the map you are on (1 command + /lb, /nlb). -localbroadcast: 40 +// Changes the sex of yourself +changesex: 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 +// Deletes floor items in your range of sight +cleanmap: 40 -// Enables GVG on a map (2 same commands). -gvgon: 40 -gpvpon: 40 +// drop all your items +dropall: 40 -// Turns GVG (Guild v. Guild) off on a map (2 same commands). -gvgoff: 40 -gpvpoff: 40 +//Hatches an egg +hatch: 60 -// Heals a person to full HP/SP. +// 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 @@ -296,140 +352,126 @@ jobchange: 40 // Enables you to to jump randomly on a map (that you are already on). jump: 40 -// Warps you to your last save point (2 same commands). -return: 40 -load: 40 - -// Warps you to a specific npc -tonpc: 40 +// Broadcast (with or without name). +kami: 40 +kamib: 40 -// Enables lost skills. -lostskill: 40 +// Disconnects a user from the server (1 command + right click menu for GM "(name) force to quit"). +kick: 40 -// Saves a warp point. -memo: 40 +// Disconnects a user from the server using their PID. +kickid2: 40 -// Set your character display options. (Visual effects of your character) -option: 40 +// Kill all monsters in map (without drops) +killmonster2: 40 -// Search the pet db for matching entries -petid: 40 +// Warps you to your last save point (2 same commands). +load: 40 +return: 40 -// Sets the level of intemecy of your pet. -petfriendly: 40 +// Broadcast to the map you are on (1 command + /lb, /nlb). +localbroadcast: 40 -// Sets hunger level of your pet. -pethungry: 40 +// Enables lost skills. +lostskill: 40 -// Turns PVP (Person v. Person) off on a map. -pvpoff: 40 +// To send specified character in jails +jail: 40 -// Enables PVP on a map. -pvpon: 40 +// To discharge a prisoner (2 same commands) +unjail: 40 +discharge: 40 -// Enables platinum skills. -questskill: 40 +// Timed jailing +jailfor: 40 -// Sets the speed you can walk/attack at. Default is 150. -speed: 40 -charspeed: 40 +// Raises your job level (3 same commands). +jlvl: 40 +jlevel: 40 +joblvl: 40 +joblevel: 40 -// Enables spirit sphere balls. -spiritball: 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). -mapmove: 40 // (also /mm or /mapmove) +// Warp yourself to a certain map, at (x,y) coordinates (2 same commands). /mm or /mapmove +mapmove: 40 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 +// Marriage skills +marry: 40 +divorce: 40 -// Do some visual effect on your character -effect: 40 +// Set your character display options. (Visual effects of your character) +option: 40 -// Display all items of a player's cart -charcartlist: 40 +// Sets the level of intemecy of your pet. +petfriendly: 40 -// GM's magnifier -identify: 40 +// Sets hunger level of your pet. +pethungry: 40 -// drop all your items -dropall: 40 +// Enables any skill. +questskill: 40 -// store all your items -storeall: 40 +// Does a skill/stat reset. +reset: 40 -// allow other players to hit you out of pvp -killable: 40 +// Sets your spawn point (aka save point). +save: 40 // look up a skill by name skillid: 40 -// use a skill by id -useskill: 40 - // What skills are required to get this skill skilltree: 40 -// Marriage commands -marry: 40 -divorce: 40 +// Play a Sound! +sound: 40 -// Adopt a novice into a family -adopt: 40 +// Enables spirit sphere balls. +spiritball: 40 -// make another player killable -charkillable: 40 +// Change Status of your character +str: 40 +agi: 40 +vit: 40 +int: 40 +dex: 40 +luk: 40 -// Same as above, cept uses PID. -charkillableid: 40 -charkillableid2: 40 +// Gets all skills (4 same commands) +allskill: 40 +allskills: 40 +skillall: 40 +skillsall: 40 -// Play a Sound! -sound: 40 +// sets GM stats to maximum (4 same commands) +statall: 40 +statsall: 40 +allstats: 40 +allstat: 40 -//--------------------- -// 50: Sub-GM+ commands +// Gives you job points. +stpoint: 40 -guild: 50 +// Gives you skill points of desired amount. +skpoint: 40 -// Brings up your guild storage wherever you are. -gstorage: 50 +// store all your items +storeall: 40 -// To get a peco to (un)ride for another player. -charmountpeco: 50 +// use a skill by id +useskill: 40 -// Spawns a monster, and a certain amount (2 same commands + /monster). -monster: 50 +//--------------------- +// 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 @@ -437,9 +479,6 @@ 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 @@ -453,38 +492,41 @@ evilclone: 50 //---------------- // 60: GM commands -// Starts Guild Wars -agitstart: 60 - -// Ends Guild Wars -agitend: 60 - -// Resurects yourself. -alive: 60 - -// Levels your character to specified level (adds to your level) (3 same commands). -lvup: 60 -baselvlup: 60 -blevel: 60 +// Create a static warp portal that lasts until the next reboot +addwarp: 60 -// Raises your job level (3 same commands). -joblvup: 60 -joblvlup: 60 -jlevel: 60 +// To block definitively a player (only administrator can unblock the account) (2 same commands) +block: 60 +charblock: 60 -// Changes the sex of yourself -changesex: 60 +// To unblock a player (2 same commands) +unblock: 60 +charunblock: 60 -// Remove items from a character -chardelitem: 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 -// Saves the respawn point of another character. -charsave: 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). @@ -497,32 +539,37 @@ item2: 60 kill: 60 // Same as above, cept uses PID. -killid: 60 killid2: 60 // Kill all monsters in map (with drops) killmonster: 60 -// Creates yourself a pet egg, have to use Pet ID. -makeegg: 60 +// Enable hitting a player even when not in pvp +killer: 60 -// Hatches an egg -hatch: 60 +// Mute a player (prevents talking, usage of skills and commands) +mute: 80 -// Instantly kills player whose name is entered and deals insane damage to everything around -nuke: 60 +// Warps all online character of a party to you. (at least one party member must be online.) +partyrecall: 60 -// Enable hitting a player even when not in pvp -killer: 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. -recallid: 60 recallid2: 60 // Refines all weapons in your items list. @@ -531,133 +578,45 @@ refine: 60 // Will repair all broken items in inventory. repairall: 60 -// Revives a character, and heals them. -revive: 60 - -// Same as above, cept uses PID. -reviveid: 60 +// Revives a character using their PID. reviveid2: 60 -// Warp another person to a certain map, at (x,y) coordinates (2 same commands). -charwarp: 60 - -// Change Status of your character -str: 60 -agi: 60 -vit: 60 -int: 60 -dex: 60 -luk: 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 +// Unmute a player +unmute: 60 // Gives you money (zeny) of desired amount. zeny: 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 - -// To send specified character in jails -jail: 60 - -// To discharge a prisoner (2 same commands) -unjail: 60 -discharge: 60 - -// Timed jailing -jailfor: 60 - -//Displays remaining jail time -charjailtime: 60 - -// To change disguise of another player/GM -chardisguise: 60 -charundisguise: 60 - -// Create a static warp portal that lasts until the next reboot -addwarp: 60 - -// drop a players possessions on the gruond -chardropall: 60 - -// put a players possessions in storage -charstoreall: 60 - -// open a trade window with any player -trade: 60 - -// changes the player's appearance (headgear) -changelook: 60 - -// Homunculus commands for gms -homlvup: 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 +// 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 @@ -691,43 +650,42 @@ skillon: 80 // turn skills off for a map skilloff: 80 -// Mute a player (prevents talking, usage of skills and commands) -mute: 80 - -// Unmute a player -unmute: 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 -// Used for testing packet sends from the client (debug function) -send: 99 - -// Enables debugging -packet: 99 - -// Give information about terrain/area (debug function) -gat: 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 -// Allows viewing/changing the map's water level (debug function) -// NOTE: Requires access to the .grf files since the map height properties are not stored in the map cache. -waterlevel: 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 @@ -743,10 +701,7 @@ reloadscript: 99 // Re-load GM level (admin command) reloadgmdb: 99 -// change a battle_config flag without rebooting server -setbattleflag: 99 - -// Refresh only status of players - SQL Only +// Refresh online status of players - SQL Only refreshonline: 99 // Re-load gm command config (admin command) @@ -766,23 +721,13 @@ reloadpcdb: 99 // Re-load the Message of the Day (admin command) reloadmotd: 99 -// Changes the GM level of another character -// (lasts until reboot, or gm list reload) -adjgmlvl: 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 +// Used for testing packet sends from the client (debug function) +send: 99 -// Mutes every player on screen (admin command) -mutearea: 99 -stfu: 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) +// Makes you inmune to attacks (monsters/players/skills cannot target/hit you, admin command) monsterignore: 99 battleignore: 99 @@ -806,33 +751,11 @@ leaves:99 // Stop all weather effects clearweather: 99 -//--------------------------------------------------------------- -// 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 - //--------------------------------------------------------------- // 100: Disabled commands gm: 100 +nuke: 100 + //--------------------- // OTHER: not a command diff --git a/conf-tmpl/charcommand_athena.conf b/conf-tmpl/charcommand_athena.conf index c0756b467..927a44054 100644 --- a/conf-tmpl/charcommand_athena.conf +++ b/conf-tmpl/charcommand_athena.conf @@ -8,91 +8,252 @@ // With default character, all commands begin by a '#', example: #save SomePlayer command_symbol: # -//Give another character a fake name -fakename: 20 +//-------------------------- +// 0: normal player commands +// None for security purposes. -//List a chacter's stats -stats: 40 +//------------------------- +// 1: Super player commands -//Give another character all stats -statsall: 40 +//--------------------------- +// 10: Super player+ commands -//List a chacter's items -itemlist: 40 +//---------------------- +// 20: Mediator commands + +//-------------------- +// 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 -//Rename another character's pet -petrename: 50 +//--------------------- +// 50: Sub-GM+ commands -//Make another character's pet friendly/not -petfriendly: 50 +//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 -//Apply a certain option to another character -option: 60 +//Give or remove a peco from a character +mount: 50 +mountpeco: 50 -//Save another character -save: 60 +//Make another character's pet friendly/not +petfriendly: 50 -//Performs a stat and skill reset on someone else -reset: 60 +//Rename another character's pet +petrename: 50 -//Give another character spiritball effect -spiritball: 60 +//Change a character's size +size: 50 + +//---------------- +// 60: GM commands + +//Resurrects a dead character +alive: 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 + +//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 -//Give another character zeny -zeny: 60 - -//Change another character's base level (3 same commands) -baselvl: 60 -blvl: 60 -baselvlup: 60 - //Change another character's job level (3 same commands) -joblvl: 60 jlvl: 60 -joblvlup: 60 +jlevel: 60 +joblvl: 60 +joblevel: 60 -//Give another character a platinum skill -questskill: 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 -// Resets another character's status, skills -streset: 60 -skreset: 60 +//Make a character immune to monsters +monsterignore: 60 +//Apply a certain option to another character +option: 60 -// Gives another character status points -stpoint: 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 -// Changes the sex of an online player (all characters on the account) -changesex: 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 -//Resets another character's designated maps -feelreset: 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/src/map/atcommand.c b/src/map/atcommand.c index 3f2c8ffea..b6fe0e20c 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -64,7 +64,6 @@ ACMD_FUNC(whozeny); // [Valaris] ACMD_FUNC(save); ACMD_FUNC(load); ACMD_FUNC(speed); -ACMD_FUNC(charspeed); ACMD_FUNC(storage); ACMD_FUNC(guildstorage); ACMD_FUNC(option); @@ -99,7 +98,7 @@ ACMD_FUNC(refine); ACMD_FUNC(produce); ACMD_FUNC(memo); ACMD_FUNC(gat); -ACMD_FUNC(packet); +ACMD_FUNC(displaystatus); ACMD_FUNC(statuspoint); ACMD_FUNC(skillpoint); ACMD_FUNC(zeny); @@ -112,7 +111,6 @@ ACMD_FUNC(pethungry); ACMD_FUNC(petrename); ACMD_FUNC(recall); ACMD_FUNC(recallall); -ACMD_FUNC(revive); ACMD_FUNC(night); ACMD_FUNC(day); ACMD_FUNC(doom); @@ -151,7 +149,6 @@ 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(char_mount_peco); // by Yor ACMD_FUNC(guildspy); // [Syrus22] ACMD_FUNC(partyspy); // [Syrus22] ACMD_FUNC(repairall); // [Valaris] @@ -163,19 +160,14 @@ ACMD_FUNC(hidenpc); ACMD_FUNC(loadnpc); ACMD_FUNC(unloadnpc); ACMD_FUNC(servertime); // by Yor -ACMD_FUNC(chardelitem); // by Yor ACMD_FUNC(jail); // by Yor ACMD_FUNC(unjail); // by Yor ACMD_FUNC(jailfor); // Alias Meruru ACMD_FUNC(jailtime); // Coltaro -ACMD_FUNC(charjailtime); // Coltaro ACMD_FUNC(disguise); // [Valaris] ACMD_FUNC(undisguise); // by Yor -ACMD_FUNC(chardisguise); // Kalaspuff -ACMD_FUNC(charundisguise); // Kalaspuff ACMD_FUNC(email); // by Yor ACMD_FUNC(effect);//by Apple -ACMD_FUNC(character_cart_list); // by Yor ACMD_FUNC(addwarp); // by MouseJstr ACMD_FUNC(follow); // by MouseJstr ACMD_FUNC(skillon); // by MouseJstr @@ -183,14 +175,11 @@ ACMD_FUNC(skilloff); // by MouseJstr ACMD_FUNC(killer); // by MouseJstr ACMD_FUNC(npcmove); // by MouseJstr ACMD_FUNC(killable); // by MouseJstr -ACMD_FUNC(charkillable); // by MouseJstr ACMD_FUNC(dropall); // by MouseJstr -ACMD_FUNC(chardropall); // by MouseJstr ACMD_FUNC(storeall); // by MouseJstr -ACMD_FUNC(charstoreall); // by MouseJstr ACMD_FUNC(skillid); // by MouseJstr ACMD_FUNC(useskill); // by MouseJstr -ACMD_FUNC(displayskill); // by MouseJstr +ACMD_FUNC(displayskill); //[Skotlex] ACMD_FUNC(summon); ACMD_FUNC(rain); ACMD_FUNC(snow); @@ -222,43 +211,14 @@ ACMD_FUNC(pettalk); ACMD_FUNC(users); ACMD_FUNC(reset); ACMD_FUNC(autoloot); // Improved version imported from Freya. - -#ifndef TXT_ONLY -ACMD_FUNC(checkmail); // [Valaris] -ACMD_FUNC(listmail); // [Valaris] -ACMD_FUNC(listnewmail); // [Valaris] -ACMD_FUNC(readmail); // [Valaris] -ACMD_FUNC(sendmail); // [Valaris] -ACMD_FUNC(sendprioritymail); // [Valaris] -ACMD_FUNC(deletemail); // [Valaris] -ACMD_FUNC(refreshonline); // [Valaris] -#endif /* TXT_ONLY */ - ACMD_FUNC(skilltree); // by MouseJstr - ACMD_FUNC(marry); // by MouseJstr ACMD_FUNC(divorce); // by MouseJstr - -ACMD_FUNC(grind); // by MouseJstr -ACMD_FUNC(grind2); // by MouseJstr - -#ifdef DMALLOC -ACMD_FUNC(dmstart); // by MouseJstr -ACMD_FUNC(dmtick); // by MouseJstr -#endif - -ACMD_FUNC(jumptoid); // by Dino9021 ACMD_FUNC(jumptoid2); // by Dino9021 -ACMD_FUNC(recallid); // by Dino9021 ACMD_FUNC(recallid2); // by Dino9021 -ACMD_FUNC(kickid); // by Dino9021 ACMD_FUNC(kickid2); // by Dino9021 -ACMD_FUNC(reviveid); // by Dino9021 ACMD_FUNC(reviveid2); // by Dino9021 -ACMD_FUNC(killid); // by Dino9021 ACMD_FUNC(killid2); // by Dino9021 -ACMD_FUNC(charkillableid); // by Dino9021 -ACMD_FUNC(charkillableid2); // by Dino9021 ACMD_FUNC(sound); ACMD_FUNC(undisguiseall); ACMD_FUNC(disguiseall); @@ -266,12 +226,9 @@ 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(mapflag); // Lupus @@ -286,23 +243,19 @@ 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] @@ -313,6 +266,21 @@ 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(checkmail); // [Valaris] +ACMD_FUNC(listmail); // [Valaris] +ACMD_FUNC(listnewmail); // [Valaris] +ACMD_FUNC(readmail); // [Valaris] +ACMD_FUNC(sendmail); // [Valaris] +ACMD_FUNC(sendprioritymail); // [Valaris] +ACMD_FUNC(deletemail); // [Valaris] +ACMD_FUNC(refreshonline); // [Valaris] +#endif +#ifdef DMALLOC +ACMD_FUNC(dmstart); // by MouseJstr +ACMD_FUNC(dmtick); // by MouseJstr +#endif /*========================================== *AtCommandInfo atcommand_info[] structure definition @@ -322,327 +290,302 @@ ACMD_FUNC(showmobs); //KarLaeda // 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_CharSpeed, "@charspeed", 40, atcommand_charspeed }, - { 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, "@lvup", 60, atcommand_baselevelup }, - { AtCommand_BaseLevelUp, "@blevel", 60, atcommand_baselevelup }, - { AtCommand_BaseLevelUp, "@baselvlup", 60, atcommand_baselevelup }, - { AtCommand_JobLevelUp, "@jlevel", 60, atcommand_joblevelup }, - { AtCommand_JobLevelUp, "@joblvup", 60, atcommand_joblevelup }, - { AtCommand_JobLevelUp, "@joblvlup", 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 }, // debug function - { AtCommand_Packet, "@packet", 99, atcommand_packet }, // debug function - { AtCommand_Packet, "@packetmode", 99, atcommand_packet }, // debug function - { 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, "@guildlvup", 60, atcommand_guildlevelup }, - { AtCommand_GuildLevelUp, "@guildlvlup", 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_Revive, "@revive", 60, atcommand_revive }, - { 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, "@mountpeco", 20, atcommand_mount_peco }, // by Valaris - { AtCommand_CharMountPeco, "@charmountpeco", 50, atcommand_char_mount_peco }, // by Yor - { 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_CharDelItem, "@chardelitem", 60, atcommand_chardelitem }, // 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 }, - { AtCommand_CharJailTime, "@charjailtime", 60, atcommand_charjailtime }, - { AtCommand_Disguise, "@disguise", 20, atcommand_disguise }, // [Valaris] - { AtCommand_UnDisguise, "@undisguise", 20, atcommand_undisguise }, // by Yor - { AtCommand_CharDisguise, "@chardisguise", 60, atcommand_chardisguise }, // Kalaspuff - { AtCommand_CharUnDisguise, "@charundisguise", 60, atcommand_charundisguise }, // Kalaspuff - { AtCommand_EMail, "@email", 1, atcommand_email }, // by Yor - { AtCommand_Effect, "@effect", 40, atcommand_effect }, // by Apple - { AtCommand_Char_Cart_List, "@charcartlist", 40, atcommand_character_cart_list }, // by Yor - { 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_CharKillable, "@charkillable", 40, atcommand_charkillable }, // by MouseJstr - { AtCommand_Dropall, "@dropall", 40, atcommand_dropall }, // MouseJstr - { AtCommand_Chardropall, "@chardropall", 60, atcommand_chardropall }, // MouseJstr - { AtCommand_Storeall, "@storeall", 40, atcommand_storeall }, // MouseJstr - { AtCommand_Charstoreall, "@charstoreall", 60, atcommand_charstoreall }, // MouseJstr - { AtCommand_Skillid, "@skillid", 40, atcommand_skillid }, // MouseJstr - { AtCommand_Useskill, "@useskill", 40, atcommand_useskill }, // MouseJstr - { AtCommand_DisplaySkill, "@displayskill", 99, atcommand_displayskill }, // MouseJstr -// { AtCommand_Rain, "@rain", 99, atcommand_rain }, //Client no longer supports rain! - { 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 - { AtCommand_Mute, "@mute", 80, atcommand_mute }, // [celest] - { AtCommand_WhoZeny, "@whozeny", 20, atcommand_whozeny }, // [Valaris] - { AtCommand_Refresh, "@refresh", 1, atcommand_refresh }, // by MC Cameri - { AtCommand_PetId, "@petid", 40, atcommand_petid }, // 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_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_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_PetId, "@petid", 40, atcommand_petid }, // 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_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_CheckMail, "@checkmail", 1, atcommand_listmail }, // [Valaris] - { AtCommand_ListMail, "@listmail", 1, atcommand_listmail }, // [Valaris] - { AtCommand_ListNewMail, "@listnewmail", 1, atcommand_listmail }, // [Valaris] - { AtCommand_ReadMail, "@readmail", 1, atcommand_readmail }, // [Valaris] - { AtCommand_DeleteMail, "@deletemail", 1, atcommand_readmail }, // [Valaris] - { AtCommand_SendMail, "@sendmail", 1, atcommand_sendmail }, // [Valaris] - { AtCommand_SendPriorityMail, "@sendprioritymail",80, atcommand_sendmail }, // [Valaris] - { AtCommand_RefreshOnline, "@refreshonline", 99, atcommand_refreshonline }, // [Valaris] - -#endif /* TXT_ONLY */ - { AtCommand_SkillTree, "@skilltree", 40, atcommand_skilltree }, // [MouseJstr] - { AtCommand_Marry, "@marry", 40, atcommand_marry }, // [MouseJstr] - { AtCommand_Divorce, "@divorce", 40, atcommand_divorce }, // [MouseJstr] - { AtCommand_Grind, "@grind", 99, atcommand_grind }, // [MouseJstr] - { AtCommand_Grind2, "@grind2", 99, atcommand_grind2 }, // [MouseJstr] - + { AtCommand_CheckMail, "@checkmail", 1, atcommand_listmail }, // [Valaris] + { AtCommand_ListMail, "@listmail", 1, atcommand_listmail }, // [Valaris] + { AtCommand_ListNewMail, "@listnewmail", 1, atcommand_listmail }, // [Valaris] + { AtCommand_ReadMail, "@readmail", 1, atcommand_readmail }, // [Valaris] + { AtCommand_DeleteMail, "@deletemail", 1, atcommand_readmail }, // [Valaris] + { AtCommand_SendMail, "@sendmail", 1, atcommand_sendmail }, // [Valaris] + { AtCommand_SendPriorityMail, "@sendprioritymail",80, atcommand_sendmail }, // [Valaris] + { AtCommand_RefreshOnline, "@refreshonline", 99, atcommand_refreshonline }, // [Valaris] +#endif #ifdef DMALLOC - { AtCommand_DMStart, "@dmstart", 99, atcommand_dmstart }, // [MouseJstr] - { AtCommand_DMTick, "@dmtick", 99, atcommand_dmtick }, // [MouseJstr] + { AtCommand_DMStart, "@dmstart", 99, atcommand_dmstart }, // [MouseJstr] + { AtCommand_DMTick, "@dmtick", 99, atcommand_dmtick }, // [MouseJstr] #endif - - { AtCommand_JumpToId, "@jumptoid", 20, atcommand_jumptoid }, // [Dino9021] - { AtCommand_JumpToId, "@warptoid", 20, atcommand_jumptoid }, // [Dino9021] - { AtCommand_JumpToId, "@gotoid", 20, atcommand_jumptoid }, // [Dino9021] - { AtCommand_JumpToId2, "@jumptoid2", 20, atcommand_jumptoid2 }, // [Dino9021] - { AtCommand_JumpToId2, "@warptoid2", 20, atcommand_jumptoid2 }, // [Dino9021] - { AtCommand_JumpToId2, "@gotoid2", 20, atcommand_jumptoid2 }, // [Dino9021] - { AtCommand_RecallId, "@recallid", 60, atcommand_recallid }, // [Dino9021] - { AtCommand_RecallId2, "@recallid2", 60, atcommand_recallid2 }, // [Dino9021] - { AtCommand_KickId, "@kickid", 99, atcommand_kickid }, // [Dino9021] - { AtCommand_KickId2, "@kickid2", 99, atcommand_kickid2 }, // [Dino9021] - { AtCommand_ReviveId, "@reviveid", 60, atcommand_reviveid }, // [Dino9021] - { AtCommand_ReviveId2, "@reviveid2", 60, atcommand_reviveid2 }, // [Dino9021] - { AtCommand_KillId, "@killid", 60, atcommand_killid }, // [Dino9021] - { AtCommand_KillId2, "@killid2", 60, atcommand_killid2 }, // [Dino9021] - { AtCommand_CharKillableId, "@charkillableid", 40, atcommand_charkillableid }, // [Dino9021] - { AtCommand_CharKillableId2, "@charkillableid2", 40, atcommand_charkillableid2 }, // [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_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, "@homlvup", 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 // add new commands before this line - { AtCommand_Unknown, NULL, 1, NULL } + { AtCommand_Unknown, NULL, 1, NULL } }; /*========================================= @@ -650,7 +593,7 @@ static AtCommandInfo atcommand_info[] = { *----------------------------------------- */ char atcmd_output[200]; -char atcmd_player_name[100]; +char atcmd_player_name[NAME_LENGTH]; char atcmd_temp[100]; /*========================================== @@ -670,13 +613,13 @@ char *estr_lower(char *str) // compare function for sorting high to lowest int hightolow_compare (const void * a, const void * b) { - return ( *(int*)b - *(int*)a ); + return ( *(int*)b - *(int*)a ); } // compare function for sorting lowest to highest int lowtohigh_compare (const void * a, const void * b) { - return ( *(int*)a - *(int*)b ); + return ( *(int*)a - *(int*)b ); } //----------------------------------------------------------- @@ -1046,9 +989,9 @@ int atcommand_send(const int fd, struct map_session_data* sd, const char* comman || sscanf(message, "%x", &type)==1) ) { clif_displaymessage(fd, "Usage:"); - clif_displaymessage(fd, " @send len "); - clif_displaymessage(fd, " @send {}*"); - clif_displaymessage(fd, " Value: or S\"\""); + clif_displaymessage(fd, " @send len "); + clif_displaymessage(fd, " @send {}*"); + clif_displaymessage(fd, " Value: or S\"\""); return -1; } @@ -1311,13 +1254,12 @@ int atcommand_rura( const int fd, struct map_session_data* sd, const char* comma clif_displaymessage(fd, msg_txt(248)); return -1; } - if (pc_setpos(sd, mapindex, x, y, 3) == 0) - clif_displaymessage(fd, msg_txt(0)); // Warped. - else { + if (pc_setpos(sd, mapindex, x, y, 3) != 0) { clif_displaymessage(fd, msg_txt(1)); // Map not found. return -1; } + clif_displaymessage(fd, msg_txt(0)); // Warped. return 0; } @@ -1328,7 +1270,6 @@ int atcommand_rura( const int fd, struct map_session_data* sd, const char* comma int atcommand_where(const int fd, struct map_session_data* sd, const char* command, const char* message) { struct map_session_data *pl_sd = NULL; - int GM_level, pl_GM_level; nullpo_retr(-1, sd); memset(atcmd_player_name, '\0', sizeof atcmd_player_name); @@ -1337,20 +1278,23 @@ int atcommand_where(const int fd, struct map_session_data* sd, const char* comma clif_displaymessage(fd, "Please, enter a player name (usage: @where )."); return -1; } - pl_sd = map_nick2sd(atcmd_player_name); - - if (pl_sd == NULL) + + if ((pl_sd = map_nick2sd(atcmd_player_name)) == NULL) + { + clif_displaymessage(fd, msg_txt(3)); // Character not found. return -1; + } if(strncmp(pl_sd->status.name,atcmd_player_name,NAME_LENGTH)!=0) + { + clif_displaymessage(fd, "You already know where you are..."); return -1; + } - GM_level = pc_isGM(sd);//also hide gms depending on settings in battle_athena.conf, show if they are aid [Kevin] - pl_GM_level = pc_isGM(pl_sd); - if (battle_config.hide_GM_session) { - if(GM_level < pl_GM_level) { - if (!(battle_config.who_display_aid && GM_level >= battle_config.who_display_aid)) { + if(pc_isGM(sd) < pc_isGM(pl_sd)) { + if (!(battle_config.who_display_aid && pc_isGM(sd) >= battle_config.who_display_aid)) { + clif_displaymessage(fd, msg_txt(3)); // Character not found. return -1; } } @@ -1373,30 +1317,38 @@ int atcommand_jumpto(const int fd, struct map_session_data* sd, const char* comm nullpo_retr(-1, sd); - if (!message || !*message || sscanf(message, "%23[^\n]", atcmd_player_name) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: @jumpto/@warpto/@goto )."); + if (!message || !*message) { + clif_displaymessage(fd, "Please, enter a player name (usage: @jumpto/@warpto/@goto )."); return -1; } - if(strncmp(sd->status.name,atcmd_player_name,NAME_LENGTH)==0) //Yourself mate? Tsk tsk tsk. - return -1; - - if ((pl_sd = map_nick2sd(atcmd_player_name)) != NULL) { - if (pl_sd->bl.m >= 0 && 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 (sd->bl.m >= 0 && 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), atcmd_player_name); // Jump to %s - clif_displaymessage(fd, atcmd_output); - } else { + if((pl_sd=map_nick2sd((char *)message)) == NULL && (pl_sd=map_charid2sd(atoi(message))) == NULL) + { clif_displaymessage(fd, msg_txt(3)); // Character not found. return -1; } + + if (pl_sd == sd) + { + clif_displaymessage(fd, "But you are already where you are..."); + return -1; + } + + if (pl_sd->bl.m >= 0 && map[pl_sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) + { + clif_displaymessage(fd, msg_txt(247)); // You are not authorized to warp to this map. + return -1; + } + + if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) + { + clif_displaymessage(fd, msg_txt(248)); // You are not authorized to warp from your current map. + return -1; + } + + pc_setpos(sd, pl_sd->mapindex, pl_sd->bl.x, pl_sd->bl.y, 3); + sprintf(atcmd_output, msg_txt(4), atcmd_player_name); // Jumped to %s + clif_displaymessage(fd, atcmd_output); return 0; } @@ -1420,11 +1372,11 @@ int atcommand_jump(const int fd, struct map_session_data* sd, const char* comman if (y <= 0) y = -1; if (sd->bl.m >= 0 && (map[sd->bl.m].flag.nowarp || map[sd->bl.m].flag.nowarpto) && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { - clif_displaymessage(fd, msg_txt(248)); + clif_displaymessage(fd, msg_txt(248)); // You are not authorized to warp from your current map. return -1; } pc_setpos(sd, sd->mapindex, x, y, 3); - sprintf(atcmd_output, msg_txt(5), sd->bl.x, sd->bl.y); // Jump to %d %d + sprintf(atcmd_output, msg_txt(5), sd->bl.x, sd->bl.y); // Jumped to %d %d clif_displaymessage(fd, atcmd_output); return 0; } @@ -2023,11 +1975,11 @@ int atcommand_load(const int fd, struct map_session_data* sd, const char* comman m = map_mapindex2mapid(sd->status.save_point.map); if (m >= 0 && map[m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { - clif_displaymessage(fd, msg_txt(249)); + clif_displaymessage(fd, msg_txt(249)); // You are not authorized to warp to your save map. return -1; } if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarp && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { - clif_displaymessage(fd, msg_txt(248)); + clif_displaymessage(fd, msg_txt(248)); // You are not authorized to warp from your current map. return -1; } @@ -2056,61 +2008,18 @@ int atcommand_speed(const int fd, struct map_session_data* sd, const char* comma } speed = atoi(message); - if (speed >= MIN_WALK_SPEED && speed <= MAX_WALK_SPEED) { - sd->base_status.speed = speed; - status_calc_bl(&sd->bl, SCB_SPEED); - clif_displaymessage(fd, msg_txt(8)); // Speed changed. - } else { - sprintf(atcmd_output, "Please, enter a valid speed value (usage: @speed <%d-%d>).", MIN_WALK_SPEED, MAX_WALK_SPEED); - clif_displaymessage(fd, atcmd_output); - return -1; - } - - return 0; -} - -/*========================================== - * - *------------------------------------------ - */ -int atcommand_charspeed(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - int speed; - - nullpo_retr(-1, sd); - - memset(atcmd_output, '\0', sizeof(atcmd_output)); - memset(atcmd_player_name, '\0', sizeof(atcmd_player_name)); - - if (!message || !*message || sscanf(message, "%d %23[^\n]", &speed, atcmd_player_name) < 2) { - sprintf(atcmd_output, "Please, enter a speed and a player name (usage: @charspeed > ).", MIN_WALK_SPEED, MAX_WALK_SPEED); - clif_displaymessage(fd, atcmd_output); - return -1; - } - - if ((pl_sd = map_nick2sd(atcmd_player_name)) == NULL) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. - return -1; - } - - if (pc_isGM(sd) < pc_isGM(pl_sd)) - { //GM level check - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; + if (speed < MIN_WALK_SPEED) + { + speed = MIN_WALK_SPEED; } - - if (speed >= MIN_WALK_SPEED && speed <= MAX_WALK_SPEED) { - pl_sd->base_status.speed = speed; - status_calc_bl(&pl_sd->bl, SCB_SPEED); - clif_displaymessage(fd, msg_txt(8)); // Speed changed. - if(pl_sd->fd) - clif_displaymessage(pl_sd->fd, msg_txt(8)); // Speed changed. - } else { - sprintf(atcmd_output, "Please, enter a valid speed value (usage: @speed <%d-%d>).", MIN_WALK_SPEED, MAX_WALK_SPEED); - clif_displaymessage(fd, atcmd_output); - return -1; + else if (speed > MAX_WALK_SPEED) + { + speed = MAX_WALK_SPEED; } + + sd->base_status.speed = speed; + status_calc_bl(&sd->bl, SCB_SPEED); + clif_displaymessage(fd, msg_txt(8)); // Speed changed. return 0; } @@ -2126,10 +2035,13 @@ int atcommand_storage(const int fd, struct map_session_data* sd, const char* com return -1; if (storage_storageopen(sd) == 1) - { //Already open. + { //Already open. clif_displaymessage(fd, msg_txt(250)); return -1; } + + clif_displaymessage(fd, "Storage opened."); + return 0; } @@ -2161,6 +2073,7 @@ int atcommand_guildstorage(const int fd, struct map_session_data* sd, const char return -1; } storage_guild_storageopen(sd); + clif_displaymessage(fd, "Guild storage opened."); return 0; } @@ -2310,7 +2223,29 @@ int atcommand_jobchange(const int fd, struct map_session_data* sd, const char* c } if (!found) { - clif_displaymessage(fd, "Please, enter job ID (usage: @job/@jobchange )."); + clif_displaymessage(fd, "Please, enter job ID (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"); + clif_displaymessage(fd, "[upper]: -1 (default) to automatically determine the 'level', 0 to force normal job, 1 to force high job."); return -1; } } @@ -2333,7 +2268,29 @@ int atcommand_jobchange(const int fd, struct map_session_data* sd, const char* c return -1; } } else { - clif_displaymessage(fd, "Please, enter a valid job ID (usage: @job/@jobchange )."); + clif_displaymessage(fd, "Please, enter a valid job ID (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"); + clif_displaymessage(fd, "[upper]: -1 (default) to automatically determine the 'level', 0 to force normal job, 1 to force high job."); return -1; } @@ -2365,23 +2322,27 @@ int atcommand_kill(const int fd, struct map_session_data* sd, const char* comman memset(atcmd_player_name, '\0', sizeof(atcmd_player_name)); - if (!message || !*message || sscanf(message, "%23[^\n]", atcmd_player_name) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: @kill )."); + if (!message || !*message) { + clif_displaymessage(fd, "Please, enter a player name (usage: @kill )."); return -1; } - if ((pl_sd = map_nick2sd(atcmd_player_name)) != NULL) { - if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can kill only lower or same level - status_kill(&pl_sd->bl); - clif_displaymessage(fd, msg_txt(14)); // Character killed. - } else { - clif_displaymessage(fd, msg_txt(81)); // Your GM level don't authorise you to do this action on this player. - return -1; - } - } else { + if((pl_sd=map_nick2sd((char *)message)) == NULL && (pl_sd=map_charid2sd(atoi(message))) == NULL) + { 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(pl_sd->fd, msg_txt(13)); // A pity! You've died. + if (fd != pl_sd->fd) + clif_displaymessage(fd, msg_txt(14)); // Character killed. return 0; } @@ -2394,7 +2355,10 @@ int atcommand_alive(const int fd, struct map_session_data* sd, const char* comma { nullpo_retr(-1, sd); if (!status_revive(&sd->bl, 100, 100)) + { + clif_displaymessage(fd, "You're not dead."); return -1; + } clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,4,1); clif_displaymessage(fd, msg_txt(16)); // You've been revived! It's a miracle! return 0; @@ -2911,10 +2875,10 @@ 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 (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. @@ -2922,7 +2886,9 @@ int atcommand_pvpoff(const int fd, struct map_session_data* sd, const char* comm } map[sd->bl.m].flag.pvp = 0; - clif_send0199(sd->bl.m, 0); + + if (!battle_config.pk_mode) + clif_send0199(sd->bl.m, 0); map_foreachinmap(atcommand_pvpoff_sub,sd->bl.m, BL_PC); map_foreachinmap(atcommand_stopattack,sd->bl.m, BL_CHAR, 0); clif_displaymessage(fd, msg_txt(31)); // PvP: Off. @@ -2939,23 +2905,26 @@ int atcommand_pvpon(const int fd, struct map_session_data* sd, const char* comma 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 (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; - 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; + 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. @@ -3456,7 +3425,7 @@ int atcommand_monstersmall(const int fd, struct map_session_data* sd, const char } if (mob_id == MOBID_EMPERIUM) { - clif_displaymessage(fd, msg_txt(83)); + clif_displaymessage(fd, msg_txt(83)); // Cannot spawn emperium return -1; } @@ -3532,7 +3501,7 @@ int atcommand_monsterbig(const int fd, struct map_session_data* sd, const char* } if (mob_id == MOBID_EMPERIUM) { - clif_displaymessage(fd, msg_txt(83)); + clif_displaymessage(fd, msg_txt(83)); // Cannot spawn emperium return -1; } @@ -3653,6 +3622,26 @@ int atcommand_refine(const int fd, struct map_session_data* sd, const char* comm if (!message || !*message || sscanf(message, "%d %d", &position, &refine) < 2) { clif_displaymessage(fd, "Please, enter a position and a amount (usage: @refine <+/- amount>)."); + sprintf(atcmd_output, "%d: Left Accessory", EQI_ACC_L); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Right Accessory", EQI_ACC_R); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Shoes", EQI_SHOES); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Garment", EQI_GARMENT); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Lower Headgear", EQI_HEAD_LOW); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Mid Headgear", EQI_HEAD_MID); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Top Headgear", EQI_HEAD_TOP); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Body Armor", EQI_ARMOR); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Left Hand", EQI_HAND_L); + clif_displaymessage(fd, atcmd_output); + sprintf(atcmd_output, "%d: Right Hand", EQI_HAND_R); + clif_displaymessage(fd, atcmd_output); return -1; } @@ -3863,47 +3852,18 @@ int atcommand_gat(const int fd, struct map_session_data* sd, const char* command * *------------------------------------------ */ -int atcommand_packet(const int fd, struct map_session_data* sd, const char* command, const char* message) +int atcommand_displaystatus(const int fd, struct map_session_data* sd, const char* command, const char* message) { - static int packet_mode = 0; - int i, x = 0, y = 0; + int i, type, flag; nullpo_retr(-1, sd); - - if (strstr(command, "packetmode")) { - packet_mode = atoi(message); - clif_displaymessage(fd, "Packet mode changed."); - return 0; - } - if (!message || !*message || (i = sscanf(message, "%d %d", &x, &y)) < 1) { - clif_displaymessage(fd, "Please, enter a status type/flag (usage: @packet )."); + if (!message || !*message || (i = sscanf(message, "%d %d", &type, &flag)) < 1) { + clif_displaymessage(fd, "Please, enter a status type/flag (usage: @displaystatus )."); return -1; } - if (i == 1) y = 1; + if (i == 1) flag = 1; - switch (packet_mode) - { - case 0: - clif_status_change(&sd->bl, x, y); - break; - case 1: - sd->status.skill[sd->cloneskill_id].id=0; - sd->status.skill[sd->cloneskill_id].lv=0; - sd->status.skill[sd->cloneskill_id].flag=0; - sd->cloneskill_id = x; - sd->status.skill[x].id = x; - sd->status.skill[x].lv = skill_get_max(x); - sd->status.skill[x].flag = 13;//cloneskill flag - clif_skillinfoblock(sd); - break; - case 2: - clif_skill_nodamage(&sd->bl,&sd->bl,x,y,1); - case 3: - clif_skill_poseffect(&sd->bl,x,y,sd->bl.x,sd->bl.y,gettick()); - default: - break; - //added later - } + clif_status_change(&sd->bl, type, flag); return 0; } @@ -4029,7 +3989,7 @@ int atcommand_param(const int fd, struct map_session_data* sd, const char* comma memset(atcmd_output, '\0', sizeof(atcmd_output)); if (!message || !*message || sscanf(message, "%d", &value) < 1 || value == 0) { - sprintf(atcmd_output, "Please, enter a valid value (usage: @str,@agi,@vit,@int,@dex,@luk <+/-adjustement>)."); + sprintf(atcmd_output, "Please, enter a valid value (usage: @str,@agi,@vit,@int,@dex,@luk <+/-adjustment>)."); clif_displaymessage(fd, atcmd_output); return -1; } @@ -4039,7 +3999,7 @@ int atcommand_param(const int fd, struct map_session_data* sd, const char* comma break; if (param[i] == NULL || i > MAX_STATUS_TYPE) { // normally impossible... - sprintf(atcmd_output, "Please, enter a valid value (usage: @str,@agi,@vit,@int,@dex,@luk <+/-adjustement>)."); + sprintf(atcmd_output, "Please, enter a valid value (usage: @str,@agi,@vit,@int,@dex,@luk <+/-adjustment>)."); clif_displaymessage(fd, atcmd_output); return -1; } @@ -4051,7 +4011,7 @@ int atcommand_param(const int fd, struct map_session_data* sd, const char* comma status[4] = &sd->status.dex; status[5] = &sd->status.luk; - max = pc_maxparameter(sd); + max = SHRT_MAX; new_value = cap_value(*status[i] + value, 1, max); if (new_value != (int)*status[i]) { @@ -4093,7 +4053,7 @@ int atcommand_stat_all(const int fd, struct map_session_data* sd, const char* co value = pc_maxparameter(sd); count = 0; - max = pc_maxparameter(sd); + max = SHRT_MAX; for (index = 0; index < (int)(sizeof(status) / sizeof(status[0])); index++) { if (value > 0 && *status[index] > max - value) @@ -4145,10 +4105,10 @@ int atcommand_guildlevelup(const int fd, struct map_session_data* sd, const char clif_displaymessage(fd, msg_txt(43)); // 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; - } + //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 @@ -4331,67 +4291,41 @@ int atcommand_recall(const int fd, struct map_session_data* sd, const char* comm nullpo_retr(-1, sd); - if (!message || !*message || sscanf(message, "%23[^\n]", atcmd_player_name) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: @recall )."); + if (!message || !*message) { + clif_displaymessage(fd, "Please, enter a player name (usage: @recall )."); return -1; } - if(strncmp(sd->status.name,atcmd_player_name,NAME_LENGTH)==0) - return -1; - - if ((pl_sd = map_nick2sd(atcmd_player_name)) != NULL) { - if (pc_isGM(sd) >= pc_isGM(pl_sd)) { // you can recall only lower or same level - if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { - clif_displaymessage(fd, "You are not authorised to warp somenone to your actual 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 authorized to warp this player from its actual map."); - return -1; - } - pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2); - sprintf(atcmd_output, msg_txt(46), atcmd_player_name); // %s recalled! - clif_displaymessage(fd, atcmd_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 { + if((pl_sd=map_nick2sd((char *)message)) == NULL && (pl_sd=map_charid2sd(atoi(message))) == NULL) + { clif_displaymessage(fd, msg_txt(3)); // Character not found. return -1; } + + if (pl_sd == sd) + { + clif_displaymessage(fd, "You are already where you are..."); + return -1; + } - return 0; -} - -/*========================================== - * - *------------------------------------------ - */ -int atcommand_revive(const int fd, struct map_session_data* sd, const char* command, const char* message) -{ - struct map_session_data *pl_sd; - nullpo_retr(-1, sd); - - memset(atcmd_player_name, '\0', sizeof(atcmd_player_name)); - - if (!message || !*message || sscanf(message, "%23[^\n]", atcmd_player_name) < 1) { - clif_displaymessage(fd, "Please, enter a player name (usage: @revive )."); + 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 = map_nick2sd(atcmd_player_name); - - if (!pl_sd) { - clif_displaymessage(fd, msg_txt(3)); // Character not found. + if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && battle_config.any_warp_GM_min_level > pc_isGM(sd)) { + clif_displaymessage(fd, "You are not authorised to warp somenone to your actual map."); return -1; } - - if (!status_revive(&pl_sd->bl, 100, 0)) + 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 authorized to warp this player from its actual map."); return -1; - - clif_skill_nodamage(&sd->bl,&pl_sd->bl,ALL_RESURRECTION,4,1); - clif_displaymessage(fd, msg_txt(51)); // Character revived. + } + pc_setpos(pl_sd, sd->mapindex, sd->bl.x, sd->bl.y, 2); + sprintf(atcmd_output, msg_txt(46), pl_sd->status.name); // %s recalled! + clif_displaymessage(fd, atcmd_output); + return 0; } @@ -4451,7 +4385,7 @@ int atcommand_char_ban(const int fd, struct map_session_data* sd, const char* co memset(atcmd_output, '\0', sizeof(atcmd_output)); memset(atcmd_player_name, '\0', sizeof(atcmd_player_name)); - if (!message || !*message || sscanf(message, "%199s %99[^\n]", atcmd_output, atcmd_player_name) < 2) { + if (!message || !*message || sscanf(message, "%s %23[^\n]", atcmd_output, atcmd_player_name) < 2) { clif_displaymessage(fd, "Please, enter ban time and a player name (usage: @charban/@ban/@banish/@charbanish