1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
- script @mute NPC32767,{
callfunc "argv_splitter";
if (GM < CMD_MUTE && GM < G_SYSOP) goto L_GM;
if (@argv$[1] == "") goto L_Failed;
.@target_id = getcharid(3, @argv$[1]);
if (.@target_id < 1 || !(isloggedin(.@target_id))) goto L_Failed;
if (@argv[0] > 120)
set @argv[0], 120; // max 2 hours
gmlog "@mute " + @args$;
if (@argv[0] == 0) goto L_UnMute;
message strcharinfo(0, .@target_id), "Server : ##BYou have been muted by a GM for "+@argv[0]+" minutes.";
MUTE_GLOBAL = 1, .@target_id;
#MUTE_UNTIL = (gettimetick(2) + (@argv[0] * 60)), .@target_id;
addtimer (@argv[0] * 60000) + 100, strnpcinfo(0) + "::OnCheckMute", .@target_id;
message strcharinfo(0), "mute : Player `"+strcharinfo(0, .@target_id)+"` has been muted for "+@argv[0]+" minutes.";
end;
OnSTFU:
if (GM < CMD_MUTE && GM < G_SYSOP) goto L_GM;
callfunc "argv_splitter";
if (@argv[0] < 1) set @argv[0], 1;
if (@argv[0] > 10) set @argv[0], 10;
gmlog "@stfu " + @argv[0];
@stfu_nr = 0;
foreach 0, getmapname(), (POS_X - .range), (POS_Y - .range), (POS_X + .range), (POS_Y + .range), strnpcinfo(0)+"::OnSTFUPC";
message strcharinfo(0), "mute : Every player within "+.range+" tiles have been muted for "+@argv[0]+" minutes. ["+@stfu_nr+"]";
@stfu_nr = 0;
end;
OnSTFUPC:
if (@target_id == BL_ID) end;
.@future = (gettimetick(2) + (@argv[0] * 60));
if (get(#MUTE_UNTIL, @target_id) > .@future) end; // if player already has a mute, don't reduce it
MUTE_GLOBAL = 1, @target_id;
#MUTE_UNTIL = .@future, @target_id;
addtimer (@argv[0] * 60000) + 100, strnpcinfo(0) + "::OnCheckMute", @target_id;
@stfu_nr = @stfu_nr + 1;
end;
OnPCLoginEvent:
if (#MUTE_UNTIL < 1) end;
.@s = (#MUTE_UNTIL - gettimetick(2));
if (.@s < 5) goto L_ClearMute;
.@m = .@s / 60;
message strcharinfo(0), "Server : ##BYou have been muted for "+ max(1, .@m) +" minutes.";
MUTE_GLOBAL = 1;
addtimer (.@s * 1000) + 100, strnpcinfo(0) + "::OnCheckMute";
end;
L_ClearMute:
message strcharinfo(0), "Server : ##BYour mute has expired while you were away. You have been automatically unmuted.";
if ((#MUTE_UNTIL - gettimetick(2)) >= (0 - 900))
wgm "=> Player `"+ strcharinfo(0) +"` has been automatically unmuted."; // only send if unmuted 15 minutes ago or less
#MUTE_UNTIL = 0;
end;
OnCheckMute:
if (#MUTE_UNTIL < 1) end;
if (gettimetick(2) - #MUTE_UNTIL < 0) end;
message strcharinfo(0), "Server : ##BYou have been automatically unmuted.";
wgm "=> Player `"+ strcharinfo(0) +"` has been automatically unmuted.";
MUTE_GLOBAL = 0;
#MUTE_UNTIL = 0;
end;
L_UnMute:
if (get(MUTE_GLOBAL, .@target_id))
message strcharinfo(0, .@target_id), "Server : ##BYou have been unmuted by a GM.";
MUTE_GLOBAL = 0, .@target_id;
#MUTE_UNTIL = 0, .@target_id;
message strcharinfo(0), "mute : Player `"+strcharinfo(0, .@target_id)+"` has been unmuted.";
end;
L_Failed:
message strcharinfo(0), "mute : Impossible to attach to the target player. Did you try putting the name in \"quotation marks\"?";
end;
L_GM:
message strcharinfo(0), "mute : GM command is level "+ CMD_MUTE +", but you are level " + GM;
end;
OnInit:
set .range, 14; // FIXME: this should be a const
registercmd chr(ATCMD_SYMBOL) + "mute", strnpcinfo(0);
registercmd chr(ATCMD_SYMBOL) + "stfu", strnpcinfo(0) + "::OnSTFU";
registercmd chr(ATCMD_SYMBOL) + "areamute", strnpcinfo(0) + "::OnSTFU"; // alias of STFU
end;
}
|