summaryrefslogtreecommitdiff
path: root/src/map/channel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/map/channel.c')
-rw-r--r--src/map/channel.c69
1 files changed, 38 insertions, 31 deletions
diff --git a/src/map/channel.c b/src/map/channel.c
index 4331f6767..023d22c06 100644
--- a/src/map/channel.c
+++ b/src/map/channel.c
@@ -5,29 +5,30 @@
#include "channel.h"
+#include "map/atcommand.h"
+#include "map/guild.h"
+#include "map/instance.h"
+#include "map/irc-bot.h"
+#include "map/map.h"
+#include "map/pc.h"
+#include "common/cbasetypes.h"
+#include "common/conf.h"
+#include "common/db.h"
+#include "common/memmgr.h"
+#include "common/nullpo.h"
+#include "common/random.h"
+#include "common/showmsg.h"
+#include "common/socket.h"
+#include "common/strlib.h"
+#include "common/timer.h"
+#include "common/utils.h"
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "atcommand.h"
-#include "guild.h"
-#include "instance.h"
-#include "irc-bot.h"
-#include "map.h"
-#include "pc.h"
-#include "../common/cbasetypes.h"
-#include "../common/conf.h"
-#include "../common/db.h"
-#include "../common/malloc.h"
-#include "../common/nullpo.h"
-#include "../common/random.h"
-#include "../common/showmsg.h"
-#include "../common/socket.h"
-#include "../common/strlib.h"
-#include "../common/timer.h"
-#include "../common/utils.h"
-
struct channel_interface channel_s;
+struct channel_interface *channel;
static struct Channel_Config channel_config;
@@ -254,21 +255,22 @@ void channel_send(struct channel_data *chan, struct map_session_data *sd, const
{
char message[150];
nullpo_retv(chan);
+ nullpo_retv(msg);
if (sd && chan->msg_delay != 0
&& DIFF_TICK(sd->hchsysch_tick + chan->msg_delay*1000, timer->gettick()) > 0
&& !pc_has_permission(sd, PC_PERM_HCHSYS_ADMIN)) {
- clif->colormes(sd->fd,COLOR_RED,msg_sd(sd,1455));
+ clif->messagecolor_self(sd->fd, COLOR_RED, msg_sd(sd,1455));
return;
} else if (sd) {
- snprintf(message, 150, "[ #%s ] %s : %s",chan->name,sd->status.name, msg);
+ safesnprintf(message, 150, "[ #%s ] %s : %s", chan->name, sd->status.name, msg);
clif->channel_msg(chan,sd,message);
if (chan->type == HCS_TYPE_IRC)
ircbot->relay(sd->status.name,msg);
if (chan->msg_delay != 0)
sd->hchsysch_tick = timer->gettick();
} else {
- snprintf(message, 150, "[ #%s ] %s",chan->name, msg);
+ safesnprintf(message, 150, "[ #%s ] %s", chan->name, msg);
clif->channel_msg2(chan, message);
if (chan->type == HCS_TYPE_IRC)
ircbot->relay(NULL, msg);
@@ -301,7 +303,7 @@ void channel_join_sub(struct channel_data *chan, struct map_session_data *sd, bo
/* someone is cheating, we kindly disconnect the bastard */
if (sd->channel_count > 200) {
- set_eof(sd->fd);
+ sockt->eof(sd->fd);
}
}
@@ -328,6 +330,7 @@ enum channel_operation_status channel_join(struct channel_data *chan, struct map
nullpo_retr(HCS_STATUS_FAIL, chan);
nullpo_retr(HCS_STATUS_FAIL, sd);
+ nullpo_retr(HCS_STATUS_FAIL, password);
if (idb_exists(chan->users, sd->status.char_id)) {
return HCS_STATUS_ALREADY;
@@ -352,7 +355,7 @@ enum channel_operation_status channel_join(struct channel_data *chan, struct map
} else {
sprintf(output, msg_sd(sd,1403), chan->name); // You're now in the '%s' channel
}
- clif->colormes(sd->fd, COLOR_DEFAULT, output);
+ clif->messagecolor_self(sd->fd, COLOR_DEFAULT, output);
}
if (chan->type == HCS_TYPE_ALLY) {
@@ -360,7 +363,7 @@ enum channel_operation_status channel_join(struct channel_data *chan, struct map
int i;
for (i = 0; i < MAX_GUILDALLIANCE; i++) {
struct guild *sg = NULL;
- if (g->alliance[i].opposition == 0 && g->alliance[i].guild_id && (sg = guild->search(g->alliance[i].guild_id))) {
+ if (g->alliance[i].opposition == 0 && g->alliance[i].guild_id && (sg = guild->search(g->alliance[i].guild_id)) != NULL) {
if (!(sg->channel->banned && idb_exists(sg->channel->banned, sd->status.account_id))) {
channel->join_sub(sg->channel, sd, stealth);
}
@@ -444,6 +447,7 @@ void channel_leave(struct channel_data *chan, struct map_session_data *sd)
*/
void channel_quit(struct map_session_data *sd)
{
+ nullpo_retv(sd);
while (sd->channel_count > 0) {
// Loop downward to avoid unnecessary array compactions by channel_leave
struct channel_data *chan = sd->channels[sd->channel_count-1];
@@ -460,10 +464,11 @@ void channel_quit(struct map_session_data *sd)
/**
* Joins the local map channel.
*
- * @param sd The target character
+ * @param sd The target character (sd must be non null)
*/
void channel_map_join(struct map_session_data *sd)
{
+ nullpo_retv(sd);
if (sd->state.autotrade || sd->state.standalone)
return;
if (!map->list[sd->bl.m].channel) {
@@ -474,18 +479,20 @@ void channel_map_join(struct map_session_data *sd)
map->list[sd->bl.m].channel->m = sd->bl.m;
}
- channel->join(map->list[sd->bl.m].channel, sd, NULL, false);
+ channel->join(map->list[sd->bl.m].channel, sd, "", false);
}
void channel_irc_join(struct map_session_data *sd)
{
struct channel_data *chan = ircbot->channel;
+
+ nullpo_retv(sd);
if (sd->state.autotrade || sd->state.standalone)
return;
- if (!channel->config->irc_name)
+ if (channel->config->irc_name[0] == '\0')
return;
if (chan)
- channel->join(chan, sd, NULL, false);
+ channel->join(chan, sd, "", false);
}
/**
@@ -547,12 +554,13 @@ void channel_guild_leave_alliance(const struct guild *g_source, const struct gui
/**
* Makes a character quit all guild-related channels.
*
- * @param sd The character
+ * @param sd The character (must be non null)
*/
void channel_quit_guild(struct map_session_data *sd)
{
unsigned char i;
+ nullpo_retv(sd);
for (i = 0; i < sd->channel_count; i++) {
struct channel_data *chan = sd->channels[i];
@@ -693,7 +701,6 @@ void read_channels_config(void)
safestrncpy(channel->config->colors_name[i], config_setting_name(color), HCS_NAME_LENGTH);
channel->config->colors[i] = (unsigned int)strtoul(libconfig->setting_get_string_elem(colors,i),NULL,0);
- channel->config->colors[i] = (channel->config->colors[i] & 0x0000FF) << 16 | (channel->config->colors[i] & 0x00FF00) | (channel->config->colors[i] & 0xFF0000) >> 16;//RGB to BGR
}
channel->config->colors_count = color_count;
}
@@ -770,8 +777,8 @@ void read_channels_config(void)
}
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' channels in '"CL_WHITE"%s"CL_RESET"'.\n", db_size(channel->db), config_filename);
- libconfig->destroy(&channels_conf);
}
+ libconfig->destroy(&channels_conf);
}
/*==========================================