Browse Source

- Removed config setting "muting_players", and expanded the manner_system config to specify how having negative manner (mute) affects a player (see battle/misc.conf).
- Expanded the pk_mode setting from no/yes to 0/1/2. 1 is normal pk_mode, if 2 is used, it makes killing players give you a loss of 5 manner points.
- Fixed WS_WEAPONREFINE always failing when at less than job 50.
- Fixed a compilation warning in char-txt/int_homun.c


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

skotlex 19 years ago
parent
commit
fd6e193e90

+ 7 - 0
Changelog-Trunk.txt

@@ -4,6 +4,13 @@ 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.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 
 2006/08/21
 2006/08/21
+	* Removed config setting "muting_players", and expanded the manner_system
+	  config to specify how having negative manner (mute) affects a player (see
+	  battle/misc.conf). [Skotlex]
+	* Expanded the pk_mode setting from no/yes to 0/1/2. 1 is normal pk_mode,
+	  if 2 is used, it makes killing players give you a loss of 5 manner points.
+	  [Skotlex]
+	* Fixed WS_WEAPONREFINE always failing when at less than job 50. [Skotlex]
 	* Fixed the Autosave routine not working when there's only one player
 	* Fixed the Autosave routine not working when there's only one player
 	  online. [Skotlex]
 	  online. [Skotlex]
 	* Disabled command @rain since the client no longer supports it anyway.
 	* Disabled command @rain since the client no longer supports it anyway.

+ 7 - 0
conf-tmpl/Changelog.txt

@@ -1,5 +1,12 @@
 Date	Added
 Date	Added
 
 
+2006/08/21
+	* Removed config setting "muting_players", and expanded the manner_system
+	  config to specify how having negative manner (mute) affects a player (see
+	  battle/misc.conf). [Skotlex]
+	* Expanded the pk_mode setting from no/yes to 0/1/2. 1 is normal pk_mode,
+	  if 2 is used, it makes killing players give you a loss of 5 manner points.
+	  [Skotlex]
 2006/08/18
 2006/08/18
 	* Added monster_ai&128 to make aggressive mobs ignore that behaviour of
 	* Added monster_ai&128 to make aggressive mobs ignore that behaviour of
 	  always picking Homun targets above player targets regardless of who is
 	  always picking Homun targets above player targets regardless of who is

+ 15 - 8
conf-tmpl/battle/misc.conf

@@ -33,10 +33,20 @@
 // When players hunt monsters over 20 levels higher, they will receive 15% additional exp., and 25% chance of receiving more items. 
 // When players hunt monsters over 20 levels higher, they will receive 15% additional exp., and 25% chance of receiving more items. 
 // There is a nopvp.txt for setting up maps not to have pk on in this mode.  Novices cannot be attacked and cannot attack.
 // There is a nopvp.txt for setting up maps not to have pk on in this mode.  Novices cannot be attacked and cannot attack.
 // Normal pvp counter and rank display are disabled as well.
 // Normal pvp counter and rank display are disabled as well.
-pk_mode: no
-
-//Enable manner/karma system?
-manner_system: yes
+// Note: If pk_mode is set to 2 instead of 1 (yes), players will receive a 
+//   manner penalty of 5 each time they kill another player (see manner_system 
+//   config to adjust how this will affect players)
+pk_mode: 0
+
+//Manner/karma system configuration. Specifies how does negative manner
+//(red no chat bubble) affects players (add as needed):
+// 0: No penalties.
+// 1: Disables chatting (includes whispers, party/guild msgs, etc)
+// 2: Disables skill usage
+// 4: Disables commands usage
+// 8: Disables item usage/picking/dropping
+//16: Disables room creation (chatrooms and vending shops)
+manner_system: 15
 
 
 // For PK Server Mode. Change this to define the minimum level players can start PK-ing
 // For PK Server Mode. Change this to define the minimum level players can start PK-ing
 pk_min_level: 55
 pk_min_level: 55
@@ -53,9 +63,6 @@ pk_weapon_attack_damage_rate: 60
 pk_magic_attack_damage_rate: 60
 pk_magic_attack_damage_rate: 60
 pk_misc_attack_damage_rate: 60
 pk_misc_attack_damage_rate: 60
 
 
-// Allow muting of players?
-muting_players: yes
-
 // Display skill usage/errors in console? (for debug only) (default: off) (Note 4)
 // Display skill usage/errors in console? (for debug only) (default: off) (Note 4)
 skill_log: 0
 skill_log: 0
 
 
@@ -141,4 +148,4 @@ cell_stack_limit: 1
 hvan_explosion_intimate: 45000
 hvan_explosion_intimate: 45000
 
 
 // Show stat growth to the owner when an Homunculus levels up
 // Show stat growth to the owner when an Homunculus levels up
-homunculus_show_growth: 0
+homunculus_show_growth: 0

+ 2 - 2
src/char/int_homun.c

@@ -24,8 +24,8 @@ int inter_homun_tostr(char *str,struct s_homunculus *p)
 	int i;
 	int i;
 
 
 	str+=sprintf(str,"%d,%d,%s\t%d,%d,%d,%d,%d,"
 	str+=sprintf(str,"%d,%d,%s\t%d,%d,%d,%d,%d,"
-		"%lu,%d,%d,%d,"
-		"%lu,%d,%d,"
+		"%u,%d,%d,%d,"
+		"%u,%d,%d,"
 		"%d,%d,%d,%d,%d,%d\t",
 		"%d,%d,%d,%d,%d,%d\t",
 		p->hom_id, p->class_, p->name,
 		p->hom_id, p->class_, p->name,
 		p->char_id, p->hp, p->max_hp, p->sp, p->max_sp,
 		p->char_id, p->hp, p->max_hp, p->sp, p->max_sp,

+ 6 - 21
src/map/atcommand.c

@@ -788,8 +788,7 @@ is_atcommand(const int fd, struct map_session_data* sd, const char* message, int
 
 
 	nullpo_retr(AtCommand_None, sd);
 	nullpo_retr(AtCommand_None, sd);
 
 
-	if (!battle_config.allow_atcommand_when_mute &&
-		sd->sc.count && sd->sc.data[SC_NOCHAT].timer != -1) {
+	if (sd->sc.count && sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCOMMAND) {
 		return AtCommand_Unknown;
 		return AtCommand_Unknown;
 	}
 	}
 
 
@@ -8473,7 +8472,8 @@ atcommand_pettalk(
 		return -1;
 		return -1;
 
 
 	if (sd->sc.count && //no "chatting" while muted.
 	if (sd->sc.count && //no "chatting" while muted.
-		(sd->sc.data[SC_BERSERK].timer!=-1 || sd->sc.data[SC_NOCHAT].timer != -1))
+		(sd->sc.data[SC_BERSERK].timer!=-1 ||
+		(sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)))
 		return -1;
 		return -1;
 
 
 	if (sscanf(message, "%99[^\n]", mes) < 1)
 	if (sscanf(message, "%99[^\n]", mes) < 1)
@@ -8718,17 +8718,11 @@ int atcommand_unmute(
 	struct map_session_data *pl_sd = NULL;
 	struct map_session_data *pl_sd = NULL;
 	nullpo_retr(-1, sd);
 	nullpo_retr(-1, sd);
 
 
-	if(!battle_config.muting_players) {
-		clif_displaymessage(fd, "Please enable the muting system before using it.");
-		return 0;
-	}
-
 	if (!message || !*message)
 	if (!message || !*message)
         	return -1;
         	return -1;
 
 
 	if((pl_sd=map_nick2sd((char *) message)) != NULL) {
 	if((pl_sd=map_nick2sd((char *) message)) != NULL) {
 		if(pl_sd->sc.data[SC_NOCHAT].timer!=-1) {
 		if(pl_sd->sc.data[SC_NOCHAT].timer!=-1) {
-			pl_sd->status.manner = 0; // have to set to 0 first [celest]
 			status_change_end(&pl_sd->bl,SC_NOCHAT,-1);
 			status_change_end(&pl_sd->bl,SC_NOCHAT,-1);
 			clif_displaymessage(sd->fd,"Player unmuted");
 			clif_displaymessage(sd->fd,"Player unmuted");
 		}
 		}
@@ -8794,11 +8788,6 @@ int atcommand_mute(
 	int manner;
 	int manner;
 	nullpo_retr(-1, sd);
 	nullpo_retr(-1, sd);
 
 
-	if(!battle_config.muting_players) {
-		clif_displaymessage(fd, "Please enable the muting system before using it.");
-		return 0;
-	}
-
 	if (!message || !*message || sscanf(message, "%d %23[^\n]", &manner, atcmd_player_name) < 1) {
 	if (!message || !*message || sscanf(message, "%d %23[^\n]", &manner, atcmd_player_name) < 1) {
 		clif_displaymessage(fd, "Usage: @mute <time> <character name>.");
 		clif_displaymessage(fd, "Usage: @mute <time> <character name>.");
 		return -1;
 		return -1;
@@ -10173,11 +10162,6 @@ int atcommand_mutearea(
 	int time;
 	int time;
 	nullpo_retr(0, sd);
 	nullpo_retr(0, sd);
 
 
-	if(!battle_config.muting_players) {
-		clif_displaymessage(fd, "Please enable the muting system before using it.");
-		return 0;
-	}
-
 	time = atoi(message);
 	time = atoi(message);
 	if (!time)
 	if (!time)
 		time = 15; // 15 minutes default
 		time = 15; // 15 minutes default
@@ -10262,7 +10246,8 @@ int atcommand_me(
 	memset(atcmd_output, '\0', sizeof(atcmd_output));
 	memset(atcmd_output, '\0', sizeof(atcmd_output));
 
 
 	if (sd->sc.count && //no "chatting" while muted.
 	if (sd->sc.count && //no "chatting" while muted.
-		(sd->sc.data[SC_BERSERK].timer!=-1 || sd->sc.data[SC_NOCHAT].timer != -1))
+		(sd->sc.data[SC_BERSERK].timer!=-1 ||
+		(sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)))
 		return -1;
 		return -1;
 
 
 	if (!message || !*message) {
 	if (!message || !*message) {
@@ -10725,7 +10710,7 @@ int atcommand_main(
 				sd->state.mainchat = 1;
 				sd->state.mainchat = 1;
 				clif_displaymessage(fd, msg_txt(380)); // Main chat has been activated.
 				clif_displaymessage(fd, msg_txt(380)); // Main chat has been activated.
 			}
 			}
-			if (sd->sc.data[SC_NOCHAT].timer != -1) {
+			if (sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT) {
 				clif_displaymessage(fd, msg_txt(387));
 				clif_displaymessage(fd, msg_txt(387));
 				return -1;
 				return -1;
 			}
 			}

+ 0 - 1
src/map/battle.c

@@ -3681,7 +3681,6 @@ static const struct battle_data_short {
 	{ "pet_hair_style",                    &battle_config.pet_hair_style	}, // added by [Skotlex]
 	{ "pet_hair_style",                    &battle_config.pet_hair_style	}, // added by [Skotlex]
 	{ "castrate_dex_scale",                &battle_config.castrate_dex_scale	}, // added by [MouseJstr]
 	{ "castrate_dex_scale",                &battle_config.castrate_dex_scale	}, // added by [MouseJstr]
 	{ "area_size",                         &battle_config.area_size	}, // added by [MouseJstr]
 	{ "area_size",                         &battle_config.area_size	}, // added by [MouseJstr]
-	{ "muting_players",                    &battle_config.muting_players}, // added by [Apple]
 	{ "zeny_from_mobs",                    &battle_config.zeny_from_mobs}, // [Valaris]
 	{ "zeny_from_mobs",                    &battle_config.zeny_from_mobs}, // [Valaris]
 	{ "mobs_level_up",                     &battle_config.mobs_level_up}, // [Valaris]
 	{ "mobs_level_up",                     &battle_config.mobs_level_up}, // [Valaris]
 	{ "mobs_level_up_exp_rate",		   &battle_config.mobs_level_up_exp_rate}, // [Valaris]
 	{ "mobs_level_up_exp_rate",		   &battle_config.mobs_level_up_exp_rate}, // [Valaris]

+ 0 - 1
src/map/battle.h

@@ -334,7 +334,6 @@ extern struct Battle_Config {
 	unsigned short hack_info_GM_level; // added by [Yor]
 	unsigned short hack_info_GM_level; // added by [Yor]
 	unsigned short any_warp_GM_min_level; // added by [Yor]
 	unsigned short any_warp_GM_min_level; // added by [Yor]
 	unsigned short packet_ver_flag; // added by [Yor]
 	unsigned short packet_ver_flag; // added by [Yor]
-	unsigned short muting_players; // added by [PoW]
 	
 	
 	unsigned short min_hair_style; // added by [MouseJstr]
 	unsigned short min_hair_style; // added by [MouseJstr]
 	unsigned short max_hair_style; // added by [MouseJstr]
 	unsigned short max_hair_style; // added by [MouseJstr]

+ 19 - 21
src/map/clif.c

@@ -3862,7 +3862,7 @@ void clif_getareachar_pc(struct map_session_data* sd,struct map_session_data* ds
 		)
 		)
 		clif_hpmeter_single(sd->fd, dstsd);
 		clif_hpmeter_single(sd->fd, dstsd);
 
 
-	if(dstsd->status.manner < 0 && battle_config.manner_system)
+	if(dstsd->status.manner < 0)
 		clif_changestatus(&dstsd->bl,SP_MANNER,dstsd->status.manner);
 		clif_changestatus(&dstsd->bl,SP_MANNER,dstsd->status.manner);
 		
 		
 	// pvp circle for duel [LuzZza]
 	// pvp circle for duel [LuzZza]
@@ -8358,7 +8358,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
 	if(sd->vd.cloth_color)
 	if(sd->vd.cloth_color)
 		clif_refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF);
 		clif_refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF);
 
 
-	if(battle_config.muting_players && sd->status.manner < 0 && battle_config.manner_system)
+	if(sd->status.manner < 0)
 		sc_start(&sd->bl,SC_NOCHAT,100,0,0);
 		sc_start(&sd->bl,SC_NOCHAT,100,0,0);
 
 
 // Lance
 // Lance
@@ -8664,7 +8664,8 @@ void clif_parse_GlobalMessage(int fd, struct map_session_data *sd) { // S 008c <
 		(is_charcommand(fd, sd, message,0) != CharCommand_None))
 		(is_charcommand(fd, sd, message,0) != CharCommand_None))
 		return;
 		return;
 	if (sd->sc.count &&
 	if (sd->sc.count &&
-		(sd->sc.data[SC_BERSERK].timer != -1 || sd->sc.data[SC_NOCHAT].timer != -1 ))
+		(sd->sc.data[SC_BERSERK].timer != -1 ||
+		(sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)))
 		return;
 		return;
 
 
 	if (battle_config.min_chat_delay)
 	if (battle_config.min_chat_delay)
@@ -9033,7 +9034,8 @@ void clif_parse_Wis(int fd, struct map_session_data *sd) { // S 0096 <len>.w <ni
 	}
 	}
 	if(gm_command) aFree(gm_command);
 	if(gm_command) aFree(gm_command);
 	if (sd->sc.count &&
 	if (sd->sc.count &&
-		(sd->sc.data[SC_BERSERK].timer!=-1 || sd->sc.data[SC_NOCHAT].timer != -1))
+		(sd->sc.data[SC_BERSERK].timer!=-1 ||
+		(sd->sc.data[SC_NOCHAT].timer != -1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)))
 		return;
 		return;
 
 
 	if (battle_config.min_chat_delay)
 	if (battle_config.min_chat_delay)
@@ -9104,10 +9106,6 @@ void clif_parse_Wis(int fd, struct map_session_data *sd) { // S 0096 <len>.w <ni
 			clif_displaymessage(fd, msg_txt(388)); // You should enable main chat with "@main on" command.
 			clif_displaymessage(fd, msg_txt(388)); // You should enable main chat with "@main on" command.
 			return;
 			return;
 		}
 		}
-		if (sd->sc.data[SC_NOCHAT].timer != -1) {
-			clif_displaymessage(fd, msg_txt(387));
-			return;
-		}
 		sprintf(output, msg_txt(386), sd->status.name, (char *)RFIFOP(fd,28));
 		sprintf(output, msg_txt(386), sd->status.name, (char *)RFIFOP(fd,28));
 		intif_announce(output, strlen(output) + 1, 0xFE000000, 0);
 		intif_announce(output, strlen(output) + 1, 0xFE000000, 0);
 		return;
 		return;
@@ -9213,7 +9211,7 @@ void clif_parse_TakeItem(int fd, struct map_session_data *sd) {
 		if(sd->sc.count && (
 		if(sd->sc.count && (
 			sd->sc.data[SC_TRICKDEAD].timer != -1 ||
 			sd->sc.data[SC_TRICKDEAD].timer != -1 ||
 			sd->sc.data[SC_BLADESTOP].timer != -1 ||
 			sd->sc.data[SC_BLADESTOP].timer != -1 ||
-			sd->sc.data[SC_NOCHAT].timer!=-1 )
+			(sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOITEM))
 		)
 		)
 			break;
 			break;
 
 
@@ -9242,8 +9240,9 @@ void clif_parse_DropItem(int fd, struct map_session_data *sd) {
 		return;
 		return;
 
 
 	if (sd->sc.count && (
 	if (sd->sc.count && (
-		sd->sc.data[SC_AUTOCOUNTER].timer != -1 || //オートカウンター
-		sd->sc.data[SC_BLADESTOP].timer != -1//白刃取り
+		sd->sc.data[SC_AUTOCOUNTER].timer != -1 ||
+		sd->sc.data[SC_BLADESTOP].timer != -1 ||
+		(sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOITEM)
 	))
 	))
 		return;
 		return;
 
 
@@ -9283,7 +9282,7 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd) {
 		sd->sc.data[SC_TRICKDEAD].timer != -1 || //死んだふり
 		sd->sc.data[SC_TRICKDEAD].timer != -1 || //死んだふり
 		sd->sc.data[SC_BLADESTOP].timer != -1 || //白刃取り
 		sd->sc.data[SC_BLADESTOP].timer != -1 || //白刃取り
 		sd->sc.data[SC_BERSERK].timer!=-1 ||	//バーサーク
 		sd->sc.data[SC_BERSERK].timer!=-1 ||	//バーサーク
-		sd->sc.data[SC_NOCHAT].timer!=-1 ||
+		(sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOITEM) ||
 		sd->sc.data[SC_GRAVITATION].timer!=-1	//会話禁止
 		sd->sc.data[SC_GRAVITATION].timer!=-1	//会話禁止
 	))
 	))
 		return;
 		return;
@@ -9488,6 +9487,8 @@ void clif_parse_NpcSellListSend(int fd,struct map_session_data *sd)
 void clif_parse_CreateChatRoom(int fd,struct map_session_data *sd)
 void clif_parse_CreateChatRoom(int fd,struct map_session_data *sd)
 {
 {
 	RFIFOHEAD(fd);
 	RFIFOHEAD(fd);
+	if (sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOROOM)
+		return;
 	if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 4){
 	if(battle_config.basic_skill_check == 0 || pc_checkskill(sd,NV_BASIC) >= 4){
 		chat_createchat(sd,RFIFOW(fd,4),RFIFOB(fd,6),(char*)RFIFOP(fd,7),(char*)RFIFOP(fd,15),RFIFOW(fd,2)-15);
 		chat_createchat(sd,RFIFOW(fd,4),RFIFOB(fd,6),(char*)RFIFOP(fd,7),(char*)RFIFOP(fd,15),RFIFOW(fd,2)-15);
 	} else
 	} else
@@ -10407,8 +10408,8 @@ void clif_parse_PartyMessage(int fd, struct map_session_data *sd) {
 		is_atcommand(fd, sd, (char*)RFIFOP(fd,4), 0) != AtCommand_None)
 		is_atcommand(fd, sd, (char*)RFIFOP(fd,4), 0) != AtCommand_None)
 		return;
 		return;
 	if	(sd->sc.count && (
 	if	(sd->sc.count && (
-			sd->sc.data[SC_BERSERK].timer!=-1 ||	//バーサーク時は会話も不可
-			sd->sc.data[SC_NOCHAT].timer!=-1		//チャット禁止
+			sd->sc.data[SC_BERSERK].timer!=-1 ||
+			(sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)
 		))
 		))
 		return;
 		return;
 
 
@@ -10459,6 +10460,8 @@ void clif_parse_OpenVending(int fd,struct map_session_data *sd) {
 	RFIFOHEAD(fd);
 	RFIFOHEAD(fd);
 	if (clif_trading(sd))
 	if (clif_trading(sd))
 		return;
 		return;
+	if (sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOROOM)
+		return;
 	vending_openvending(sd, RFIFOW(fd,2), (char*)RFIFOP(fd,4), RFIFOB(fd,84), RFIFOP(fd,85));
 	vending_openvending(sd, RFIFOW(fd,2), (char*)RFIFOP(fd,4), RFIFOB(fd,84), RFIFOP(fd,85));
 }
 }
 
 
@@ -10626,8 +10629,8 @@ void clif_parse_GuildMessage(int fd,struct map_session_data *sd) {
 		is_atcommand(fd, sd, (char*)RFIFOP(fd, 4), 0) != AtCommand_None)
 		is_atcommand(fd, sd, (char*)RFIFOP(fd, 4), 0) != AtCommand_None)
 		return;
 		return;
 	if (sd->sc.count && (
 	if (sd->sc.count && (
-		sd->sc.data[SC_BERSERK].timer!=-1 ||	//バーサーク時は会話も不可
-		sd->sc.data[SC_NOCHAT].timer!=-1		//チャット禁止
+		sd->sc.data[SC_BERSERK].timer!=-1 ||
+		(sd->sc.data[SC_NOCHAT].timer!=-1 && sd->sc.data[SC_NOCHAT].val1&MANNER_NOCHAT)
 	))
 	))
 		return;
 		return;
 
 
@@ -10872,11 +10875,6 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd)
 	struct block_list *bl;
 	struct block_list *bl;
 	struct map_session_data *dstsd;
 	struct map_session_data *dstsd;
 
 
-	if(!battle_config.muting_players) {
-		clif_displaymessage(fd, "Muting is disabled.");
-		return;
-	}
-
 	RFIFOHEAD(fd);
 	RFIFOHEAD(fd);
 	bl = map_id2bl(RFIFOL(fd,2));
 	bl = map_id2bl(RFIFOL(fd,2));
 	if (!bl || bl->type != BL_PC)
 	if (!bl || bl->type != BL_PC)

+ 2 - 2
src/map/mercenary.c

@@ -113,8 +113,8 @@ int merc_hom_dead(struct homun_data *hd, struct block_list *src)
 	struct map_session_data *sd = hd->master;
 	struct map_session_data *sd = hd->master;
 
 
 	clif_emotion(&hd->bl, 16) ;	//wah
 	clif_emotion(&hd->bl, 16) ;	//wah
-	if (!sd)
-		return 7;
+	if (!sd) //unit remove map will invoke unit free
+		return 3;
 
 
 	//Delete timers when dead.
 	//Delete timers when dead.
 	merc_hom_hungry_timer_delete(hd);
 	merc_hom_hungry_timer_delete(hd);

+ 3 - 4
src/map/pc.c

@@ -4847,11 +4847,11 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
 			pc_setglobalreg(ssd, "killedrid", sd->bl.id);
 			pc_setglobalreg(ssd, "killedrid", sd->bl.id);
 			npc_script_event(ssd, NPCE_KILLPC);
 			npc_script_event(ssd, NPCE_KILLPC);
 		}
 		}
-		if (battle_config.pk_mode && ssd->status.manner >= 0 && battle_config.manner_system) {
+		if (battle_config.pk_mode&2) {
 			ssd->status.manner -= 5;
 			ssd->status.manner -= 5;
 			if(ssd->status.manner < 0)
 			if(ssd->status.manner < 0)
 				sc_start(src,SC_NOCHAT,100,0,0);
 				sc_start(src,SC_NOCHAT,100,0,0);
-
+		
 		// PK/Karma system code (not enabled yet) [celest]
 		// PK/Karma system code (not enabled yet) [celest]
 		// originally from Kade Online, so i don't know if any of these is correct ^^;
 		// originally from Kade Online, so i don't know if any of these is correct ^^;
 		// note: karma is measured REVERSE, so more karma = more 'evil' / less honourable,
 		// note: karma is measured REVERSE, so more karma = more 'evil' / less honourable,
@@ -5486,9 +5486,8 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
 	if(sd->vd.cloth_color)
 	if(sd->vd.cloth_color)
 		clif_changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->vd.cloth_color);
 		clif_changelook(&sd->bl,LOOK_CLOTHES_COLOR,sd->vd.cloth_color);
 	
 	
-	if(battle_config.muting_players && sd->status.manner < 0 && battle_config.manner_system)
+	if(sd->status.manner < 0)
 		clif_changestatus(&sd->bl,SP_MANNER,sd->status.manner);
 		clif_changestatus(&sd->bl,SP_MANNER,sd->status.manner);
-
 	
 	
 	if(pc_isriding(sd)) //Remove Peco Status to prevent display <> class problems.
 	if(pc_isriding(sd)) //Remove Peco Status to prevent display <> class problems.
 		pc_setoption(sd,sd->sc.option&~OPTION_RIDING);
 		pc_setoption(sd,sd->sc.option&~OPTION_RIDING);

+ 6 - 5
src/map/skill.c

@@ -8921,11 +8921,11 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
 			}
 			}
 
 
 			per = percentrefinery [ditem->wlv][(int)item->refine];
 			per = percentrefinery [ditem->wlv][(int)item->refine];
-			per += (sd->status.job_level-50)/2; //Updated per the new kro descriptions. [Skotlex]
+			per += (((signed int)sd->status.job_level)-50)/2; //Updated per the new kro descriptions. [Skotlex]
 
 
+			pc_delitem(sd, i, 1, 0);
 			if (per > rand() % 100) {
 			if (per > rand() % 100) {
 				item->refine++;
 				item->refine++;
-				pc_delitem(sd, i, 1, 0);
 				if(item->equip) {
 				if(item->equip) {
 					ep = item->equip;
 					ep = item->equip;
 					pc_unequipitem(sd,idx,3);
 					pc_unequipitem(sd,idx,3);
@@ -8936,8 +8936,10 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
 				if (ep)
 				if (ep)
 					pc_equipitem(sd,idx,ep);
 					pc_equipitem(sd,idx,ep);
 				clif_misceffect(&sd->bl,3);
 				clif_misceffect(&sd->bl,3);
-				if(item->refine == MAX_REFINE && item->card[0] == CARD0_FORGE &&
-					MakeDWord(item->card[2],item->card[3]) == sd->char_id){ // Fame point system [DracoRPG]
+				if(item->refine == MAX_REFINE &&
+					item->card[0] == CARD0_FORGE &&
+					MakeDWord(item->card[2],item->card[3]) == sd->char_id)
+				{ // Fame point system [DracoRPG]
 					switch(ditem->wlv){
 					switch(ditem->wlv){
 						case 1:
 						case 1:
 							pc_addfame(sd,1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point
 							pc_addfame(sd,1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point
@@ -8951,7 +8953,6 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
 					}
 					}
 				}
 				}
 			} else {
 			} else {
-				pc_delitem(sd, i, 1, 0);
 				item->refine = 0;
 				item->refine = 0;
 				if(item->equip)
 				if(item->equip)
 					pc_unequipitem(sd,idx,3);
 					pc_unequipitem(sd,idx,3);

+ 6 - 11
src/map/status.c

@@ -1002,7 +1002,7 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int
 				(sc->data[SC_VOLCANO].timer != -1 && skill_num == WZ_ICEWALL) ||
 				(sc->data[SC_VOLCANO].timer != -1 && skill_num == WZ_ICEWALL) ||
 				(sc->data[SC_ROKISWEIL].timer != -1 && skill_num != BD_ADAPTATION && !(status->mode&MD_BOSS)) ||
 				(sc->data[SC_ROKISWEIL].timer != -1 && skill_num != BD_ADAPTATION && !(status->mode&MD_BOSS)) ||
 				(sc->data[SC_HERMODE].timer != -1 && skill_get_inf(skill_num) & INF_SUPPORT_SKILL) ||
 				(sc->data[SC_HERMODE].timer != -1 && skill_get_inf(skill_num) & INF_SUPPORT_SKILL) ||
-				sc->data[SC_NOCHAT].timer != -1
+				(sc->data[SC_NOCHAT].timer != -1 && sc->data[SC_NOCHAT].val1&MANNER_NOSKILL)
 			)
 			)
 				return 0;
 				return 0;
 
 
@@ -4709,6 +4709,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 			case SC_CLOSECONFINE2: //Can't be re-closed in.
 			case SC_CLOSECONFINE2: //Can't be re-closed in.
 			case SC_MARIONETTE:
 			case SC_MARIONETTE:
 			case SC_MARIONETTE2:
 			case SC_MARIONETTE2:
+			case SC_NOCHAT:
 				return 0;
 				return 0;
 			case SC_DANCING:
 			case SC_DANCING:
 			case SC_DEVOTION:
 			case SC_DEVOTION:
@@ -4941,11 +4942,8 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val
 			clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color);
 			clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color);
 			break;
 			break;
 		case SC_NOCHAT:
 		case SC_NOCHAT:
-			if(!battle_config.muting_players) { 
-				sd->status.manner = 0; //Zido
-				return 0;
-			}
 			tick = 60000;
 			tick = 60000;
+			val1 = battle_config.manner_system; //Mute filters.
 			if (sd) clif_updatestatus(sd,SP_MANNER);
 			if (sd) clif_updatestatus(sd,SP_MANNER);
 			break;
 			break;
 
 
@@ -5965,11 +5963,8 @@ int status_change_end( struct block_list* bl , int type,int tid )
 				status_change_end(bl,SC_LONGING,-1);				
 				status_change_end(bl,SC_LONGING,-1);				
 			break;
 			break;
 		case SC_NOCHAT:
 		case SC_NOCHAT:
-			if (sd && battle_config.manner_system)
-			{
-				//Why set it to 0? Can't we use good manners for something? [Skotlex]
-//					if (sd->status.manner >= 0) // weeee ^^ [celest]
-//						sd->status.manner = 0;
+			if (sd) {
+				if (sd->status.manner < 0) sd->status.manner = 0;
 				clif_updatestatus(sd,SP_MANNER);
 				clif_updatestatus(sd,SP_MANNER);
 			}
 			}
 			break;
 			break;
@@ -6555,7 +6550,7 @@ int status_change_timer(int tid, unsigned int tick, int id, int data)
 		}
 		}
 		break;
 		break;
 	case SC_NOCHAT:
 	case SC_NOCHAT:
-		if(sd && battle_config.manner_system){
+		if(sd){
 			sd->status.manner++;
 			sd->status.manner++;
 			clif_updatestatus(sd,SP_MANNER);
 			clif_updatestatus(sd,SP_MANNER);
 			if (sd->status.manner < 0)
 			if (sd->status.manner < 0)

+ 7 - 0
src/map/status.h

@@ -483,6 +483,13 @@ enum {
 
 
 #define OPTION_CART (OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5)
 #define OPTION_CART (OPTION_CART1|OPTION_CART2|OPTION_CART3|OPTION_CART4|OPTION_CART5)
 
 
+//Defines for the manner system [Skotlex]
+#define MANNER_NOCHAT 0x01
+#define MANNER_NOSKILL 0x02
+#define MANNER_NOCOMMAND 0x04
+#define MANNER_NOITEM 0x08
+#define MANNER_NOROOM 0x10
+
 //Define flags for the status_calc_bl function. [Skotlex]
 //Define flags for the status_calc_bl function. [Skotlex]
 #define SCB_NONE	0x00000000
 #define SCB_NONE	0x00000000
 #define SCB_BASE	0x00000001
 #define SCB_BASE	0x00000001