浏览代码

* Added documentation for mapflags - thanks to Lighta for the idea and assistance.
* Reformatted permissions documentation.
* Corrected some mistakes in script_commands.txt - a huge thanks to JaBote for finding them! (Hercules d0c5018)
* Re-added mob_boss entries deleted in r17330.
* Code by Lighta:
-- Added hook for 0x44A and 0x447 (unfinished).
-- Added timestr for DumpUnknow packet and moved to proper function for visibility.
-- Fixed VCC compile error with r17333.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17334 54d463be-8e91-2dee-dedb-b68131a5f0ec

euphyy 12 年之前
父节点
当前提交
99de377882

+ 1 - 1
conf/channels.conf

@@ -1,4 +1,4 @@
-/* Channel system configuration file */
+// Channel System Configuration File
 
 chsys: (
 {

+ 2 - 1
conf/mapflag/gvg.txt

@@ -9,8 +9,9 @@
 //===== Description: ========================================= 
 //= Players can attack other guilds, and will have their guild
 //= icons shown. WoE damage reductions will also take place.
-//= gvg: Turns on GvG mode
+//= gvg: Turns on GvG mode.
 //= gvg_castle: Describes castle maps for WoE.
+//= gvg_dungeon: Describes dungeon maps for WoE.
 //===== Additional Comments: ================================= 
 //= 1.1 - Added Novice Guild Castles.
 //= 1.2 - Updated with new meanings of gvg and gvg_castle.

+ 6 - 1
conf/mapflag/nowarp.txt

@@ -7,7 +7,12 @@
 //===== Compatible With: =====================================
 //= rAthena SVN
 //===== Description: ========================================= 
-//= Disables use of @go to a map.
+//= Disables warping from a map.
+//= Script commands 'warpparty' and 'warpguild' will not warp
+//=   players.
+//= Atcommands @warp, @go, @load, @jump, @partyrecall,
+//=   @guildrecall, and @recallall will not warp players.
+//= GD_EMERGENCYCALL and UNT_CALLFAMILY will not warp players.
 //===== Additional Comments: ================================= 
 //= 1.3 - Added WoE SE maps.
 //============================================================

+ 4 - 1
conf/mapflag/nowarpto.txt

@@ -7,7 +7,10 @@
 //===== Compatible With: =====================================
 //= rAthena SVN
 //===== Description: ========================================= 
-//= Disables use of @warp to a map.
+//= Disables warping to a map.
+//= Atcommands @warp, @go, @load, @jump, @partyrecall,
+//=   @guildrecall, and @recallall are disabled.
+//= Command /memo is disabled.
 //===== Additional Comments: ================================= 
 //= 1.0 - Initial script.
 //============================================================

+ 1 - 1
db/const.txt

@@ -368,7 +368,7 @@ mf_monster_noteleport	49
 mf_pvp_nocalcrank	50
 mf_battleground	51
 mf_reset	52
-mf_channoautojoin	53
+mf_nomapchannelautojoin	53
 mf_nousecart	54
 mf_noitemconsumption	55
 mf_sumstartmiracle	56

+ 4 - 3
db/packet_db.txt

@@ -1802,17 +1802,18 @@ packet_ver: 33
 
 //2013-03-20Ragexe (Judas)
 packet_ver: 34
+0x014f,6,guildrequestinfo,2
 0x01fd,15,repairitem,2
 //0x0281,-1,itemlistwindowselected,2:4:8
 0x035f,6,reqclickbuyingstore,2
 0x0363,6,ticksend,2
 0x0365,12,searchstoreinfolistitemclick,2:6:10
 0x0438,6,dropitem,2:4
-0x0447,2
+0x0447,2,booking_playcancel,0
+0x044A,6,clientversion,2
 0x0844,2,cashshopopen,0
 0x0848,-1,cashshopbuy,0
-0x084a,2,cashshopclose,0
-0x084b,19 //fallitem4
+0x084a,2,cashshopclose,00x084b,19 //fallitem4
 0x085a,90,useskilltoposinfo,2:4:6:8:10
 0x085d,18,bookingregreq,2:4
 0x0868,-1,itemlistwindowselected,2:4:8

+ 1 - 0
db/pre-re/mob_boss.txt

@@ -47,3 +47,4 @@
 1871,Falling Bishop,500000
 1873,Beelzebub,500000
 1885,Gopinich,500000
+2022,Nidhoggur's Shadow,500000

+ 3 - 0
db/re/mob_boss.txt

@@ -47,3 +47,6 @@
 1871,Falling Bishop,500000
 1873,Beelzebub,500000
 1885,Gopinich,500000
+2022,Nidhoggur's Shadow,500000
+2068,Boitata,500000
+2087,Scaraba Queen,500000

+ 356 - 0
doc/mapflags.txt

@@ -0,0 +1,356 @@
+//===== rAthena Documentation ================================
+//= Mapflag List
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Current Version: =====================================
+//= 20130526
+//===== Description: =========================================
+//= List of available mapflags and their functions.
+//============================================================
+
+This file describes the functions of mapflags, which determine the behavior of a
+map in various situations. For instructions on setting a mapflag, refer to the
+documentation in '/doc/script_commands.txt'.
+
+To search for a mapflag, write "*" before its name.
+The format of this file is as follows:
+	1. Restrictions
+	2. Battle-related
+	3. Map Effects
+	4. Miscellaneous
+
+===================
+| 1. Restrictions |
+===================
+---------------------------------------
+
+*noreturn
+
+Disables usage of map-warping items on a map:
+ - Butterfly Wing (ID 602)
+ - Yellow/Green/Red/Blue Butterfly Wing (IDs 14582-14585)
+ - Siege Teleport Scroll (ID 14591)
+ - Dungeon Teleport Scroll 1/2/3 (IDs 14527, 14581, 12352)
+
+The 'warpparty' and 'warpguild' script commands are also blocked for destinations outside the
+player's current map.
+
+---------------------------------------
+
+*noteleport
+
+Disables all means of teleportation within a map:
+ - Items Fly Wing (ID 601) and Giant Fly Wing (ID 12212) are disabled.
+ - Skills AL_TELEPORT, TK_HIGHJUMP, and SC_DIMENSIONDOOR are disabled.
+ - Skills RG_INTIMIDATE, NPC_EXPULSION, and CG_TAROTCARD will not teleport their intended targets.
+ - Script commands using "Random" as the destination will fail.
+ - Script command 'warpwaitingpc' will fail with "SavePoint" as the destination.
+ - Script command 'unitwarp' will fail for players.
+ - Atcommand @jump is disabled.
+
+---------------------------------------
+
+*nowarp
+
+Disables warping from a map:
+ - Script commands 'warpparty' and 'warpguild' will not warp players on 'nowarp' maps.
+ - Atcommands @warp, @go, @load, and @jump are disabled.
+ - Atcommands @partyrecall, @guildrecall, and @recallall will not warp players on 'nowarp' maps.
+ - Skill GD_EMERGENCYCALL will not warp players on 'nowarp' maps.
+ - Unit UNT_CALLFAMILY will not warp players on 'nowarp' maps.
+
+---------------------------------------
+
+*nowarpto
+
+Disables warping to a map:
+ - Atcommands @warp, @go, @load, and @jump are disabled to the 'nowarpto' map.
+ - Atcommands @partyrecall, @guildrecall, and @recallall are disabled.
+ - Command /memo is disabled.
+ - Skill GD_EMERGENCYCALL is disabled if flag 16 of 'emergency_call' is set in
+   '/conf/battle/skill.conf'. This will not work for 'gvg_castle' maps.
+
+---------------------------------------
+
+*nogo
+
+Disables usage of command @go on a map.
+
+---------------------------------------
+
+*nosave	<map name>
+
+Disables auto-saving on a map. Players who log off on the map will be warped to <map name> when
+they next log in. "SavePoint", without quotes, is also valid for this field.
+
+---------------------------------------
+
+*nomemo
+
+Disables the /memo command to save a warp point on a map, and also disables usage of marriage
+skills WE_CALLPARTNER, WE_CALLPARENT, and WE_CALLBABY.
+
+---------------------------------------
+
+*noitemconsumption
+
+Disables usage of items on a map.
+
+---------------------------------------
+
+*notrade
+
+Disables trading on a map.
+
+---------------------------------------
+
+*nodrop
+
+Disables dropping items on a map.
+
+Note that items may still be dropped if a player's inventory is full and 'item_flooritem_check'
+is disabled in '/conf/battle/items.conf'.
+
+---------------------------------------
+
+*noloot
+*nomobloot
+*nomvploot
+
+Disables normal monsters and MVPs from dropping items on a map. Looted items will always drop.
+'noloot' is the same as 'nomobloot' and 'nomvploot' combined.
+		
+---------------------------------------
+
+*noexp
+*nobaseexp
+*nojobexp
+
+Disables gaining base and job experience from monsters, including MVP bonuses, on a map.
+'noexp' is the same as 'nobaseexp' and 'nojobexp' combined.
+
+---------------------------------------
+
+*nopenalty
+*noexppenalty
+*nozenypenalty
+
+Disables the loss of experience and Zeny upon death on a map.
+'nopenalty' is the same as 'noexppenalty' and 'nozenypenalty' combined.
+
+Notes:
+'noexppenalty' also affects pets, and skills PR_REDEMPTIO and LG_INSPIRATION will not deduct EXP.
+'nozenypenalty' only applies if 'zeny_penalty' is enabled in '/conf/battle/exp.conf'.
+
+---------------------------------------
+
+*nochat
+*novending
+
+Disables chatroom and shop creation on a map.
+
+---------------------------------------
+
+*nousecart
+
+Disables cart usage on a map.
+
+---------------------------------------
+
+*noskill
+
+Disables skill usage on a map.
+
+---------------------------------------
+
+*restricted	<zone>
+
+Disables certain items and skills on a map through a specified zone number. The zone databases are
+located in 'db/(pre-)re/item_noequip.txt' and 'db/(pre-)re/skill_nocast_db.txt', both of which
+contain explanations and examples of how this mapflag is used.
+
+---------------------------------------
+
+*monster_noteleport
+
+Prevents monsters from teleporting on a map, including through the skill RG_INTIMIDATE.
+
+---------------------------------------
+
+*nobranch
+
+Disables usage of monster-spawning items on a map:
+ - Dead Branch (ID 604)
+ - Bloody Branch (ID 12103)
+ - Poring Box (ID 12109)
+ - Red Pouch (ID 12024)
+
+Note that when 'mob_warp' is enabled in '/conf/battle/monster.conf' and flag 4 is set, this will
+also prevent mobs from being warped onto the map.
+
+---------------------------------------
+
+*noicewall
+
+Disables skill WZ_ICEWALL on a map.
+
+---------------------------------------
+
+*nosumstarmiracle
+
+Disables Star Gladiator's "Solar, Lunar, and Stellar Miracle" from occurring on a map.
+
+---------------------------------------
+
+*nomineeffect
+
+Disables mine effects on a map.
+[More information needed.]
+
+---------------------------------------
+
+*nolockon
+
+Disables locking on a map.
+[More information needed.]
+
+---------------------------------------
+
+=====================
+| 2. Battle-related |
+=====================
+---------------------------------------
+
+*pvp
+*pvp_noparty
+*pvp_noguild
+*pvp_nocalcrank
+
+Enables Player vs. Player mode on a map and applies the corresponding damage adjustments.
+'pvp_noparty' will ignore party alliances.
+'pvp_noguild' will ignore guild alliances.
+'pvp_nocalcrank' will disable calculation of PvP rankings.
+
+---------------------------------------
+
+*pvp_nightmaredrop	<id>,<type>,<rate>
+
+Causes players to drop items upon death. This is not grouped with the other PvP mapflags
+because it does not necessarily require PvP mode to be set.
+
+<id> determines what will drop. It can be either a specific item ID or "random".
+<type> specifies where items are dropped from. It can be "inventory", "equip", or "all".
+<rate> is the chance that an item will drop (10000 = 100%).
+
+---------------------------------------
+
+*gvg
+*gvg_noparty
+*gvg_castle
+*gvg_dungeon
+
+Enables Guild vs. Guild mode on a map and applies the corresponding damage adjustments.
+'gvg_noparty' will ignore party alliances.
+'gvg_castle' marks a guild castle. GvG mode will be active only during the War of Emperium.
+'gvg_dungeon' marks a guild dungeon. Players will be warped out after two deaths.
+
+---------------------------------------
+
+*battleground	{<type>}
+
+Enables Battlegrounds on a map and applies the corresponding damage adjustments.
+If <type> is 2, a scoreboard will be shown. The default is 1 (nothing).
+
+---------------------------------------
+
+*partylock
+*guildlock
+
+Prevents alteration of parties and guilds on a map. This includes creating, leaving,
+inviting, expelling, breaking, and changing leaders.
+
+Notes:
+'partylock' will still allow party options to be changed.
+'guildlock' will also block changes to guild alliances.
+
+---------------------------------------
+
+==================
+| 3. Map Effects |
+==================
+---------------------------------------
+
+*clouds
+*clouds2
+*fireworks
+*fog
+*leaves
+*sakura
+*snow
+
+Displays a weather effect on a map.
+
+---------------------------------------
+
+*nightenabled
+
+Displays night mode effects on a map. This is used on most outdoor maps.
+
+---------------------------------------
+
+====================
+| 4. Miscellaneous |
+====================
+---------------------------------------
+
+*town
+
+Marks a map as a town. This allows players to access their mail and disables kill stealing.
+
+---------------------------------------
+
+*reset
+
+Allows usage of item Neuralizer (ID 12213).
+
+---------------------------------------
+
+*bexp	<rate>
+*jexp	<rate>
+
+Changes the base and job experience rates on a map.
+<rate> is given as a percentage (i.e. 100 = 1x EXP). This takes into account the modifiers
+'base_exp_rate' and 'job_exp_rate' in '/conf/battle/exp.conf'.
+
+---------------------------------------
+
+*loadevent
+
+Triggers the label "OnPCLoadMapEvent" when players enter a map (this also includes
+teleporting within the map). More details can be found in '/doc/script_commands.txt'.
+
+---------------------------------------
+
+*allowks
+
+Allows kill stealing on a map (rendering the @noks command useless).
+
+---------------------------------------
+
+*autotrade
+
+Allows the @autotrade command on a map.
+
+This only applies if 'at_mapflag' is enabled in '/conf/battle/misc.conf'. Otherwise, the
+atcommand is enabled on all maps by default.
+
+---------------------------------------
+
+*nomapchannelautojoin
+
+Stops players from automatically joining the #map channel on a map.
+
+This only applies if map channels are enabled and 'map_local_channel_autojoin' is true
+in '/conf/channels.conf'.
+
+---------------------------------------

+ 167 - 28
doc/permissions.txt

@@ -1,35 +1,174 @@
 //===== rAthena Documentation ================================
-//= Permission List
+//= Permissions List
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Current Version: =====================================
-//= 20130402
+//= 20130526
 //===== Description: =========================================
-//= Player group permissions, configured in /conf/groups.conf.
+//= List of available permissions and their functions.
 //============================================================
 
-can_trade : Ability to trade or otherwise distribute items (drop, storage, vending etc...).
-can_party : Ability to join parties.
-all_skill : Ability to use all skills.
-all_equipment : Ability to equip anything (can cause client errors).
-skill_unconditional : Ability to use skills without meeting the required conditions (SP, items, etc...).
-join_chat : Ability to join a password protected chatrooms.
-kick_chat : Protection from being kicked from a chat.
-hide_session : Hides player session from being displayed by @commands.
-who_display_aid : Ability to see GMs and Account/Char IDs in the @who command.
-hack_info : Ability to receive all informations about any player that try to hack, spoof a name, etc.
-any_warp : Ability to bypass nowarp, nowarpto, noteleport and nomemo mapflags.
-           This option is mainly used in commands which modify a character's
-           map/coordinates (like @memo, @mapmove, @go, @jump, etc...).
-view_hpmeter : Ability to see HP bar of every player.
-view_equipment : Ability to view players equipment regardless of their setting.
-use_check : Ability to use client command /check (display character status).
-use_changemaptype : Ability to use client command /changemaptype.
-all_commands : Ability to use all atcommands and charcommands.
-receive_requests : Ability to receive @requests.
-show_bossmobs : Ability to see boss mobs with @showmobs.
-disable_pvm : Ability to disable Player vs. Monster.
-disable_pvp : Ability to disable Player vs. Player.
-disable_commands_when_dead : Ability to disable @command usage when dead.
-channel_admin : Ability to modify channel settings regardless of ownership and join password-protected
-                channels without a password.
+This file describes the functions of player group permissions,
+configured in '/conf/groups.conf' under the "permissions" bracket.
+
+To search for a permission, write "*" before its name.
+The format of this file is as follows:
+	1. Basic Permissions
+	2. Extended Permissions
+	3. Command-related
+
+========================
+| 1. Basic Permissions |
+========================
+---------------------------------------
+
+*can_trade
+
+Allows player to distribute items, such as through trades, dropping,
+vending, storage, mail, etc.
+
+---------------------------------------
+
+*can_party
+
+Allows player to create and join parties.
+
+---------------------------------------
+
+===========================
+| 2. Extended Permissions |
+===========================
+---------------------------------------
+
+*all_skill
+
+Grants player all available skills in the player's skill tree.
+
+---------------------------------------
+
+*all_equipment
+
+Allows player to equip any item, regardless of requirements (class, level,
+etc.). Note that this can cause client errors if a sprite does not exist.
+
+---------------------------------------
+
+*skill_unconditional
+
+Allows player to use any skill, regardless of required conditions (SP,
+items, etc.).
+
+---------------------------------------
+
+*join_chat
+
+Allows player to join password-protected chatrooms.
+
+---------------------------------------
+
+*kick_chat
+
+Prevents player from being kicked from a chatroom.
+
+---------------------------------------
+
+*view_hpmeter
+
+Allows player to see the HP bar of every player.
+
+---------------------------------------
+
+*view_equipment
+
+Allows player to view the equipment of every player, regardless of that
+player's setting.
+
+---------------------------------------
+
+*hack_info
+
+Allows player to receive all information about players who try to hack,
+spoof a name, etc.
+
+---------------------------------------
+
+*disable_pvm
+
+Prevents player from attacking monsters.
+
+---------------------------------------
+
+*disable_pvp
+
+Prevents player from attacking other players.
+
+---------------------------------------
+
+======================
+| 3. Command-related |
+======================
+---------------------------------------
+
+*all_commands
+
+Allows usage of all atcommands and charcommands.
+
+---------------------------------------
+
+*disable_commands_when_dead
+
+Disables usage of atcommands when player is dead.
+
+---------------------------------------
+
+*hide_session
+
+Hides player session from being displayed by atcommands (@who, @whomap,
+etc.).
+
+---------------------------------------
+
+*who_display_aid
+
+Displays all GMs and character/account IDs in the @who command.
+
+---------------------------------------
+
+*any_warp
+
+Allows player to bypass 'nowarp', 'nowarpto', 'noteleport', and 'nomemo'
+mapflags in commands which modify a character's map or coordinates (@memo,
+@mapmove, @go, @jump, etc.).
+
+---------------------------------------
+
+*receive_requests
+
+Allows player to receive requests through the @requests command.
+
+---------------------------------------
+
+*show_bossmobs
+
+Displays boss mobs in the @showmobs command.
+
+---------------------------------------
+
+*channel_admin
+
+Allows player to modify #channel settings regardless of ownership and to
+join password-protected channels without a password.
+
+---------------------------------------
+
+*use_check
+
+Allows player to use the client command /check (displays character status).
+
+---------------------------------------
+
+*use_changemaptype
+
+Allows player to use the client command /changemaptype.
+
+---------------------------------------

+ 12 - 15
doc/script_commands.txt

@@ -136,8 +136,8 @@ Here is a list of valid top-level commands:
 This will, upon loading, set a specified map flag on a map you like. These are 
 normally in files inside 'conf/mapflag' and are loaded first, so by the time the 
 server's up, all the maps have the flags they should have. Map flags determine 
-the behavior of the map regarding various common problems, for a better 
-explanation, see 'setmapflag'.
+the behavior of the map in various situations. For more details, see 'setmapflag'
+and 'doc/mapflags.txt'.
 
 ** Create a permanent monster spawn:
 
@@ -997,9 +997,9 @@ From here on, we will have the commands sorted as follow:
 =====================
 ---------------------------------------
 
-*mes "<string>";
+*mes "<string>"{,"<string>"{,...}};
 
-This command will displays a box on the screen for the invoking character, if no 
+This command will display a box on the screen for the invoking character, if no
 such box is displayed already, and will print the string specified into that 
 box. There is normally no 'close' or 'next' button on this box, unless you 
 create one with 'close' or 'next', and while it's open the player can't do much 
@@ -1025,7 +1025,7 @@ English characters, the color codes might get screwed if they stick to letters
 with no intervening space. Separating them with spaces from the letters on 
 either side solves the problem.
 
-To display multiple lines of message while only using a single mes; command,
+To display multiple lines of message while only using a single 'mes' command,
 use the script command in the following format:
 
     mes "Line 1", "Line 2", "Line 3";
@@ -1049,7 +1049,7 @@ will terminate.
     mes "[Woman]";
     mes "This would appear on the page";
     next;
-    // This is needed cause it is a new page and the top will now be blank
+    // This is needed since it is a new page and the top will now be blank
     mes "[Woman]";
     mes "This would appear on the 2nd page";
 
@@ -1124,7 +1124,8 @@ of 'end' stops this, and ends the script.
 *set(<variable>,<expression>)
 
 This command will set a variable to the value that the expression results in. 
-This is the only way to set a variable directly.
+Variables may either be set through this command or directly, much like any
+other programming language (refer to the "Assigning variables" section).
 
 This is the most basic script command and is used a lot whenever you try to do 
 anything more advanced than just printing text into a message box.
@@ -4780,10 +4781,6 @@ about the guild skill trying to exceed the possible maximum. The full list of
 guild skills is available in 'db/(pre-)re/skill_db.txt', these are all the GD_ skills at 
 the end.
 
-The flag parameter is currently not functional and it's a mystery of what it 
-would actually do. (Though probably, like for character skills, it would allow 
-temporary bumping.) Using this command will bump the guild skill up permanently.
-
 // This would give your character's guild one level of Approval (GD_APPROVAL ID 
 // 10000). Notice that if you try to add two levels of Approval, or add
 // Approval when the guild already has it, it will only have one level of 
@@ -5045,7 +5042,7 @@ expected, refer only to an invoking character.
 What these commands do is 'attach' a script to the player which will get
 executed on attack (or when attacked in the case of autobonus2).
 
-Rate is the trigger rate of the script (1000 = 100%). 
+Rate is the trigger rate of the script (10000 = 100%). 
 
 Duration is the time that the bonus will last for since the script has triggered.
 
@@ -6096,9 +6093,9 @@ specified.
 
 *setmapflag "<map name>",<flag>{,<zone>};
 
-This command marks a specified map with a map flag given. Map flags alter the 
-behavior of the map, you can see the list of the available ones in 
-'db/const.txt' under 'mf_'.
+This command marks a specified map with the given map flag, which will alter the 
+behavior of the map. A full list of mapflags is located in 'db/const.txt' with
+the 'mf_' prefix, and documentation can be found in 'doc/mapflags.txt'.
 
 The map flags alter the behavior of the map regarding teleporting (mf_nomemo, 
 mf_noteleport, mf_nowarp, mf_nogo), storing location when disconnected 

+ 52 - 29
src/map/clif.c

@@ -16403,7 +16403,56 @@ void clif_parse_reqworldinfo(int fd,struct map_session_data *sd){
 	if(sd) clif_ackworldinfo(sd);
 }
 
+/// unknown usage (CZ_BLOCKING_PLAY_CANCEL)
+/// 0447
+void clif_parse_blocking_playcancel(int fd,struct map_session_data *sd){
+	//if(sd)
+	;
+}
+
+/// req world info (CZ_CLIENT_VERSION)
+/// 044A <version>.L
+void clif_parse_client_version(int fd,struct map_session_data *sd){
+	//if(sd)
+	;
+}
+
+#ifdef DUMP_UNKNOWN_PACKET
+void DumpUnknow(int fd,TBL_PC *sd,int cmd,int packet_len){
+	const char* packet_txt = "save/packet.txt";
+	FILE* fp;
+	time_t time_server;
+	struct tm *datetime;
+	char datestr[512];
+
+	time(&time_server);  // get time in seconds since 1/1/1970
+	datetime = localtime(&time_server); // convert seconds in structure
+	// like sprintf, but only for date/time (Sunday, November 02 2003 15:12:52)
+	strftime(datestr, sizeof(datestr)-1, "%A, %B %d %Y %X.", datetime); // Server time (normal time): %A, %B %d %Y %X.
+
+
+	if( ( fp = fopen( packet_txt , "a" ) ) != NULL ) {
+		if( sd ) {
+			fprintf(fp, "Unknown packet 0x%04X (length %d), %s session #%d, %d/%d (AID/CID) at %s \n", cmd, packet_len, sd->state.active ? "authed" : "unauthed", fd, sd->status.account_id, sd->status.char_id,datestr);
+		} else {
+			fprintf(fp, "Unknown packet 0x%04X (length %d), session #%d at %s\n", cmd, packet_len, fd,datestr);
+		}
+		WriteDump(fp, RFIFOP(fd,0), packet_len);
+		fprintf(fp, "\n");
+		fclose(fp);
+	} else {
+		ShowError("Failed to write '%s'.\n", packet_txt);
+		// Dump on console instead
+		if( sd ) {
+			ShowDebug("Unknown packet 0x%04X (length %d), %s session #%d, %d/%d (AID/CID) at %s\n", cmd, packet_len, sd->state.active ? "authed" : "unauthed", fd, sd->status.account_id, sd->status.char_id,datestr);
+		} else {
+			ShowDebug("Unknown packet 0x%04X (length %d), session #%d at %s\n", cmd, packet_len, fd,datestr);
+		}
 
+		ShowDump(RFIFOP(fd,0), packet_len);
+	}
+}
+#endif
 
 /*==========================================
  * Main client packet processing function
@@ -16523,37 +16572,9 @@ static int clif_parse(int fd)
 			packet_db[packet_ver][cmd].func(fd, sd);
 	}
 #ifdef DUMP_UNKNOWN_PACKET
-	else {
-		const char* packet_txt = "save/packet.txt";
-		FILE* fp;
-
-		if( ( fp = fopen( packet_txt , "a" ) ) != NULL ) {
-			if( sd ) {
-				fprintf(fp, "Unknown packet 0x%04X (length %d), %s session #%d, %d/%d (AID/CID)\n", cmd, packet_len, sd->state.active ? "authed" : "unauthed", fd, sd->status.account_id, sd->status.char_id);
-			} else {
-				fprintf(fp, "Unknown packet 0x%04X (length %d), session #%d\n", cmd, packet_len, fd);
-			}
-
-			WriteDump(fp, RFIFOP(fd,0), packet_len);
-			fprintf(fp, "\n");
-			fclose(fp);
-		} else {
-			ShowError("Failed to write '%s'.\n", packet_txt);
-
-			// Dump on console instead
-			if( sd ) {
-				ShowDebug("Unknown packet 0x%04X (length %d), %s session #%d, %d/%d (AID/CID)\n", cmd, packet_len, sd->state.active ? "authed" : "unauthed", fd, sd->status.account_id, sd->status.char_id);
-			} else {
-				ShowDebug("Unknown packet 0x%04X (length %d), session #%d\n", cmd, packet_len, fd);
-			}
-
-			ShowDump(RFIFOP(fd,0), packet_len);
-		}
-	}
+	else DumpUnknow(fd,sd,cmd,packet_len);
 #endif
-
 	RFIFOSKIP(fd, packet_len);
-
 	}; // main loop end
 
 	return 0;
@@ -17021,6 +17042,8 @@ void packetdb_readdb(void)
 		{ clif_parse_MoveItem , "moveitem" },
 		{ clif_parse_GuildInvite2 , "guildinvite2" },
 		{ clif_parse_reqworldinfo, "reqworldinfo"},
+		{ clif_parse_client_version, "clientversion"},
+		{ clif_parse_blocking_playcancel, "booking_playcancel"},
 		{NULL,NULL}
 	};
 

+ 11 - 11
src/map/elemental.c

@@ -76,27 +76,27 @@ int elemental_create(struct map_session_data *sd, int class_, unsigned int lifet
 	ele.mode = EL_MODE_PASSIVE; // Initial mode
 	i = db->status.size+1; // summon level
 
-	//[(Caster�s Max HP/ 3 ) + (Caster�s INT x 10 )+ (Caster�s Job Level x 20 )] x [(Elemental Summon Level + 2) / 3]
+	//[(Caster's Max HP/ 3 ) + (Caster's INT x 10 )+ (Caster's Job Level x 20 )] x [(Elemental Summon Level + 2) / 3]
 	ele.hp = ele.max_hp = (sd->battle_status.max_hp/3 + sd->battle_status.int_*10 + sd->status.job_level) * ((i + 2) / 3);
-	//Casters Max SP /4
+	//Caster's Max SP /4
 	ele.sp = ele.max_sp = sd->battle_status.max_sp/4;
-	//Casters [ Max SP / (18 / Elemental Summon Skill Level) 1- 100 ]
+	//Caster's [ Max SP / (18 / Elemental Summon Skill Level) 1- 100 ]
 	ele.atk = (sd->battle_status.max_sp / (18 / i)  * 1 - 100);
-	//Casters [ Max SP / (18 / Elemental Summon Skill Level) ]
+	//Caster's [ Max SP / (18 / Elemental Summon Skill Level) ]
 	ele.atk2 = sd->battle_status.max_sp / 18;
-	//Caster�s HIT + (Caster�s Base Level )
+	//Caster's HIT + (Caster's Base Level)
 	ele.hit = sd->battle_status.hit + sd->status.base_level;
-	//[Elemental Summon Skill Level x (Caster�s INT / 2 + Caster�s DEX / 4)]
+	//[Elemental Summon Skill Level x (Caster's INT / 2 + Caster's DEX / 4)]
 	ele.matk = i * (sd->battle_status.int_ / 2 + sd->battle_status.dex / 4);
-	//150 + [Casters DEX / 10] + [Elemental Summon Skill Level x 3 ]
+	//150 + [Caster's DEX / 10] + [Elemental Summon Skill Level x 3 ]
 	ele.amotion = 150 + sd->battle_status.dex / 10 + i * 3;
-	//Caster�s DEF + (Caster�s Base Level / (5 � Elemental Summon Skill Level)
+	//Caster's DEF + (Caster's Base Level / (5 - Elemental Summon Skill Level)
 	ele.def = sd->battle_status.def + sd->status.base_level / (5-i);
-	//Caster�s MDEF + (Caster�s INT / (5 - Elemental Summon Skill Level)
+	//Caster's MDEF + (Caster's INT / (5 - Elemental Summon Skill Level)
 	ele.mdef = sd->battle_status.mdef + sd->battle_status.int_ / (5-i);
-	//Caster�s FLEE + (Caster�s Base Level / (5 � Elemental Summon Skill Level)
+	//Caster's FLEE + (Caster's Base Level / (5 - Elemental Summon Skill Level)
 	ele.flee = sd->status.base_level / (5-i);
-	//Caster�s HIT + (Caster�s Base Level )
+	//Caster's HIT + (Caster's Base Level)
 	ele.hit = sd->battle_status.hit + sd->status.base_level;
 
 	//per individual bonuses

+ 1 - 1
src/map/map.c

@@ -1287,7 +1287,7 @@ int map_clearflooritem_timer(int tid, unsigned int tick, int id, intptr_t data)
 }
 
 /*
- * clears a single bl item out of the bazooonga.
+ * clears a single bl item out of the map.
  */
 void map_clearflooritem(struct block_list *bl) {
 	struct flooritem_data* fitem = (struct flooritem_data*)bl;

+ 4 - 4
src/map/pc.c

@@ -584,8 +584,7 @@ int pc_setnewpc(struct map_session_data *sd, int account_id, int char_id, int lo
 	return 0;
 }
 
-int pc_equippoint(struct map_session_data *sd,int n)
-{
+int pc_equippoint(struct map_session_data *sd,int n){
 	int ep = 0;
 
 	nullpo_ret(sd);
@@ -4112,7 +4111,7 @@ int pc_isUseitem(struct map_session_data *sd,int n)
 		return 0; // You cannot use this item while sitting.
 	}
 
-	switch( nameid ) //@TODO, lot oh harcoded nameid here
+	switch( nameid ) //@TODO, lot of hardcoded nameid here
 	{
 		case 605: // Anodyne
 			if( map_flag_gvg(sd->bl.m) )
@@ -4130,7 +4129,8 @@ int pc_isUseitem(struct map_session_data *sd,int n)
 			}
 		case 602: // ButterFly Wing
 		case 14527: // Dungeon Teleport Scroll
-		case 14581: // Dungeon Teleport Scroll
+		case 14581: // Dungeon Teleport Scroll 2
+		case 12352: // Dungeon Teleport Scroll 3
 		case 14582: // Yellow Butterfly Wing
 		case 14583: // Green Butterfly Wing
 		case 14584: // Red Butterfly Wing

+ 1 - 1
src/map/searchstore.c

@@ -114,6 +114,7 @@ void searchstore_query(struct map_session_data* sd, unsigned char type, unsigned
 	struct s_search_store_search s;
 	searchstore_searchall_t store_searchall;
 	time_t querytime;
+	DBMap *vending_db = vending_getdb();
 
 	if( !battle_config.feature_search_stores ) {
 		return;
@@ -178,7 +179,6 @@ void searchstore_query(struct map_session_data* sd, unsigned char type, unsigned
 	s.card_count = card_count;
 	s.min_price  = min_price;
 	s.max_price  = max_price;
-	DBMap *vending_db = vending_getdb();
 	iter         = db_iterator(vending_db);
 
 	for( pl_sd = dbi_first(iter); dbi_exists(iter);  pl_sd = dbi_next(iter) ) {