Replace get_server_flag() with get_server_umode()
This function gets the status of a single umode flag identified by umode char rather than internal server flag number. This also lets us remove all the USER_MODE* constants because they're no longer required. Invert the sense of the +w check in e_wall() - we only echo our OPERWALL if we're *not* +w, because if we are +w then the server will echo it back to us anyway.
This commit is contained in:
@@ -3251,7 +3251,10 @@ BUILT_IN_COMMAND(e_wall)
|
||||
|
||||
set_display_target(NULL, LOG_WALLOP);
|
||||
send_to_server("%s :%s", command, args);
|
||||
if (get_server_flag(from_server, USER_MODE_W))
|
||||
|
||||
/* Only show the message if we are _not_ +w, because if we are the server
|
||||
* will echo our WALLOPS back to us. */
|
||||
if (!get_server_umode(from_server, 'w'))
|
||||
put_it("!! %s", args);
|
||||
add_last_type(&last_sent_wall[0], 1, get_server_nickname(from_server), NULL, "*", args);
|
||||
reset_display_target();
|
||||
|
||||
@@ -281,7 +281,7 @@ static int already_done = 0;
|
||||
global_table[GET_SERVER_MOTD] = (Function_ptr) BX_get_server_motd;
|
||||
global_table[GET_SERVER_OPERATOR] = (Function_ptr) BX_get_server_operator;
|
||||
global_table[GET_SERVER_VERSION] = (Function_ptr) BX_get_server_version;
|
||||
global_table[GET_SERVER_FLAG] = (Function_ptr) BX_get_server_flag;
|
||||
global_table[GET_SERVER_UMODE] = (Function_ptr) BX_get_server_umode;
|
||||
global_table[GET_SERVER_PORT] = (Function_ptr) BX_get_server_port;
|
||||
global_table[GET_SERVER_LAG] = (Function_ptr) BX_get_server_lag;
|
||||
global_table[GET_SERVER2_8] = (Function_ptr) BX_get_server2_8;
|
||||
|
||||
@@ -57,7 +57,7 @@ CVS_REVISION(server_c)
|
||||
|
||||
static char * set_umode (int du_index);
|
||||
|
||||
const char * umodes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
static const char umodes[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
|
||||
/* server_list: the list of servers that the user can connect to,etc */
|
||||
Server *server_list = NULL;
|
||||
@@ -2007,53 +2007,68 @@ time_t get_server_awaytime(int server)
|
||||
return server_list[server].awaytime;
|
||||
}
|
||||
|
||||
static int umode_index(char mode)
|
||||
{
|
||||
const char *p = strchr(umodes, mode);
|
||||
|
||||
if (p)
|
||||
return p - umodes;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* update_server_umode()
|
||||
*
|
||||
* Updates the client's idea of the status of a single umode flag.
|
||||
*/
|
||||
void BX_update_server_umode(int server, char mode, int value)
|
||||
{
|
||||
const char *p = strchr(umodes, mode);
|
||||
const int flag = umode_index(mode);
|
||||
|
||||
if (server <= -1 || server > number_of_servers)
|
||||
return;
|
||||
|
||||
if (p)
|
||||
{
|
||||
const int flag = p - umodes;
|
||||
|
||||
if (flag > 31)
|
||||
{
|
||||
if (value)
|
||||
server_list[server].flags2 |= 0x1L << (flag - 32);
|
||||
else
|
||||
server_list[server].flags2 &= ~(0x1L << (flag - 32));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (value)
|
||||
server_list[server].flags |= 0x1L << flag;
|
||||
else
|
||||
server_list[server].flags &= ~(0x1L << flag);
|
||||
}
|
||||
set_umode(server);
|
||||
}
|
||||
else
|
||||
if (flag < 0)
|
||||
{
|
||||
yell("Ignoring invalid user mode '%c' from server", mode);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int BX_get_server_flag (int gsf_index, int flag)
|
||||
{
|
||||
if (gsf_index == -1)
|
||||
gsf_index = primary_server;
|
||||
else if (gsf_index >= number_of_servers)
|
||||
return 0;
|
||||
|
||||
if (flag > 31)
|
||||
return !!(server_list[gsf_index].flags2 & (0x1L << (flag - 32)));
|
||||
{
|
||||
if (value)
|
||||
server_list[server].flags2 |= 0x1L << (flag - 32);
|
||||
else
|
||||
server_list[server].flags2 &= ~(0x1L << (flag - 32));
|
||||
}
|
||||
else
|
||||
return !!(server_list[gsf_index].flags & (0x1L << flag));
|
||||
{
|
||||
if (value)
|
||||
server_list[server].flags |= 0x1L << flag;
|
||||
else
|
||||
server_list[server].flags &= ~(0x1L << flag);
|
||||
}
|
||||
set_umode(server);
|
||||
}
|
||||
|
||||
/* get_server_umode()
|
||||
*
|
||||
* Returns the status (set/unset) of a given umode flag.
|
||||
*/
|
||||
int BX_get_server_umode(int server, char mode)
|
||||
{
|
||||
const int flag = umode_index(mode);
|
||||
|
||||
if (server <= -1 || server > number_of_servers)
|
||||
return 0;
|
||||
|
||||
if (flag < 0)
|
||||
return 0;
|
||||
|
||||
if (flag > 31)
|
||||
return !!(server_list[server].flags2 & (0x1L << (flag - 32)));
|
||||
else
|
||||
return !!(server_list[server].flags & (0x1L << flag));
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user