summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/script_commands.txt4
-rw-r--r--src/common/mmo.h2
-rw-r--r--src/map/pc.c8
-rw-r--r--src/map/script.c2
-rw-r--r--src/map/status.c5
5 files changed, 17 insertions, 4 deletions
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index f6cad66d5..1fd3c47a6 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -5296,6 +5296,10 @@ re-apply).
You can see the full list of status effects caused by skills in
'src/map/status.h' - they are currently not fully documented, but most of
that should be rather obvious.
+Note: to use SC_NOCHAT you should alter Manner
+ set Manner, -5; // Will mute a user for 5 minutes
+ set Manner, 0; // Will unmute a user
+ set Manner, 5; // Will unmute a user and prevent the next use of 'Manner'
---------------------------------------
diff --git a/src/common/mmo.h b/src/common/mmo.h
index cf3933d40..019472acb 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -392,7 +392,7 @@ struct mmo_charstatus {
unsigned int status_point,skill_point;
int hp,max_hp,sp,max_sp;
unsigned int option;
- short manner;
+ short manner; // Defines how many minutes a char will be muted, each negative point is equivalent to a minute.
unsigned char karma;
short hair,hair_color,clothes_color;
int party_id,guild_id,pet_id,hom_id,mer_id,ele_id;
diff --git a/src/map/pc.c b/src/map/pc.c
index b6964fc6e..42b79ed92 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -7466,7 +7466,13 @@ int pc_setparam(struct map_session_data *sd,int type,int val)
break;
case SP_MANNER:
sd->status.manner = val;
- break;
+ if( val < 0 )
+ sc_start(NULL, &sd->bl, SC_NOCHAT, 100, 0, 0);
+ else {
+ status_change_end(&sd->bl, SC_NOCHAT, INVALID_TIMER);
+ clif->manner_message(sd, 5);
+ }
+ return 1; // status_change_start/status_change_end already sends packets warning the client
case SP_FAME:
sd->status.fame = val;
break;
diff --git a/src/map/script.c b/src/map/script.c
index 296008536..312e40696 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -8687,7 +8687,7 @@ BUILDIN(savepoint) {
sd = script->rid2sd(st);
if( sd == NULL )
- return true;// no player attached, report source
+ return false;// no player attached, report source
str = script_getstr(st,2);
x = script_getnum(st,3);
diff --git a/src/map/status.c b/src/map/status.c
index fdbafd6b0..460af3179 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -7755,7 +7755,10 @@ int status_change_start(struct block_list *src, struct block_list *bl, enum sc_t
unit->stop_attack(bl);
break;
case SC_NOCHAT:
- // [GodLesZ] FIXME: is this correct? a hardcoded interval of 60sec? what about configuration ?_?
+ // A hardcoded interval of 60 seconds is expected, as the time that SC_NOCHAT uses is defined by
+ // mmocharstatus.manner, each negative point results in 1 minute with this status activated
+ // This is done this way because the message that the client displays is hardcoded, and only
+ // shows how many minutes are remaining. [Panikon]
tick = 60000;
val1 = battle_config.manner_system; //Mute filters.
if (sd)