diff options
-rw-r--r-- | conf/battle/client.conf | 6 | ||||
-rw-r--r-- | src/map/battle.c | 1 | ||||
-rw-r--r-- | src/map/battle.h | 2 | ||||
-rw-r--r-- | src/map/clif.c | 42 |
4 files changed, 44 insertions, 7 deletions
diff --git a/conf/battle/client.conf b/conf/battle/client.conf index 93ad536ee..c832163be 100644 --- a/conf/battle/client.conf +++ b/conf/battle/client.conf @@ -112,3 +112,9 @@ client_reshuffle_dice: yes // Official servers do not sort storage. (Note 1) // NOTE: Enabling this option degrades performance. client_sort_storage: no + +// Duration of client's self mute in minutes. +// Note: Do not enable this, if you enabled commands for players, +// because the client sees multiple commands in succession as spam. +// Default: 0 (means disabled) +client_accept_chatdori: 1 diff --git a/src/map/battle.c b/src/map/battle.c index 18c95c76d..d03afc431 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -6461,6 +6461,7 @@ static const struct _battle_data { { "item_enabled_npc", &battle_config.item_enabled_npc, 1, 0, 1, }, { "gm_ignore_warpable_area", &battle_config.gm_ignore_warpable_area, 0, 2, 100, }, { "packet_obfuscation", &battle_config.packet_obfuscation, 1, 0, 3, }, + { "client_accept_chatdori", &battle_config.client_accept_chatdori, 0, 0, 1, }, }; #ifndef STATS_OPT_OUT /** diff --git a/src/map/battle.h b/src/map/battle.h index 9a8c18fd7..9d1e3276d 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -452,6 +452,8 @@ struct Battle_Config { int gm_ignore_warpable_area; + int client_accept_chatdori; // [Ai4rei/Mirei] + } battle_config; diff --git a/src/map/clif.c b/src/map/clif.c index 1e05ced14..1cdb59966 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -13412,14 +13412,42 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd) if( type == 0 ) value = -value; - //If type is 2 and the ids don't match, this is a crafted hacked packet! - //Disabled because clients keep self-muting when you give players public @ commands... [Skotlex] - if (type == 2 /* && (pc->get_group_level(sd) > 0 || sd->bl.id != id)*/) - return; + if (type == 2) + { + if (!battle_config.client_accept_chatdori) + return; + if (pc->get_group_level(sd) > 0 || sd->bl.id != id) + return; - dstsd = iMap->id2sd(id); - if( dstsd == NULL ) - return; + dstsd = sd; + } + else + { + dstsd = iMap->id2sd(id); + if( dstsd == NULL ) + return; + } + + if (type == 2 || ( (pc->get_group_level(sd)) > pc->get_group_level(dstsd) && !pc->can_use_command(sd, "@mute"))) + { + clif->manner_message(sd, 0); + clif->manner_message(dstsd, 5); + + if (dstsd->status.manner < value) + { + dstsd->status.manner -= value; + sc_start(&dstsd->bl,SC_NOCHAT,100,0,0); + + } + else + { + dstsd->status.manner = 0; + status_change_end(&dstsd->bl, SC_NOCHAT, INVALID_TIMER); + } + + if( type != 2 ) + clif->GM_silence(sd, dstsd, type); + } sprintf(command, "%cmute %d %s", atcommand->at_symbol, value, dstsd->status.name); atcommand->parse(fd, sd, command, 1); |