diff options
author | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2008-07-30 02:24:04 +0000 |
---|---|---|
committer | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2008-07-30 02:24:04 +0000 |
commit | 68b3507828409d55fb856dff6b58f8fd93f6bbd0 (patch) | |
tree | 4cd9853c689987192bd87c978326ea296bad80d3 /src/map | |
parent | ec3b479889be0de9fae404d961728d2c474f8e4f (diff) | |
download | hercules-68b3507828409d55fb856dff6b58f8fd93f6bbd0.tar.gz hercules-68b3507828409d55fb856dff6b58f8fd93f6bbd0.tar.bz2 hercules-68b3507828409d55fb856dff6b58f8fd93f6bbd0.tar.xz hercules-68b3507828409d55fb856dff6b58f8fd93f6bbd0.zip |
Removed the IRC bot system, now a customization (see topic:194306)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13014 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/Makefile.in | 4 | ||||
-rw-r--r-- | src/map/clif.c | 4 | ||||
-rw-r--r-- | src/map/irc.c | 535 | ||||
-rw-r--r-- | src/map/irc.h | 64 | ||||
-rw-r--r-- | src/map/map.c | 6 | ||||
-rw-r--r-- | src/map/mob.c | 4 | ||||
-rw-r--r-- | src/map/script.c | 3 | ||||
-rw-r--r-- | src/map/vending.c | 8 |
8 files changed, 2 insertions, 626 deletions
diff --git a/src/map/Makefile.in b/src/map/Makefile.in index c92318060..ba2f3effd 100644 --- a/src/map/Makefile.in +++ b/src/map/Makefile.in @@ -17,14 +17,14 @@ MAP_OBJ = map.o chrif.o clif.o pc.o status.o npc.o \ npc_chat.o chat.o path.o itemdb.o mob.o script.o \ storage.o skill.o atcommand.o charcommand.o battle.o \ intif.o trade.o party.o vending.o guild.o pet.o \ - log.o mail.o date.o irc.o unit.o mercenary.o quest.o + log.o mail.o date.o unit.o mercenary.o quest.o MAP_TXT_OBJ = $(MAP_OBJ:%=obj_txt/%) MAP_SQL_OBJ = $(MAP_OBJ:%=obj_sql/%) MAP_H = map.h chrif.h clif.h pc.h status.h npc.h \ chat.h itemdb.h mob.h script.h path.h \ storage.h skill.h atcommand.h charcommand.h battle.h \ intif.h trade.h party.h vending.h guild.h pet.h \ - log.h mail.h date.h irc.h unit.h mercenary.h quest.h + log.h mail.h date.h unit.h mercenary.h quest.h HAVE_MYSQL=@HAVE_MYSQL@ ifeq ($(HAVE_MYSQL),yes) diff --git a/src/map/clif.c b/src/map/clif.c index 6752a9699..0190eb24e 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -34,7 +34,6 @@ #include "pet.h" #include "mercenary.h" //[orn] #include "log.h" -#include "irc.h" #include "clif.h" #include "mail.h" #include "quest.h" @@ -4489,9 +4488,6 @@ int clif_GMmessage(struct block_list* bl, const char* mes, int len, int flag) ALL_CLIENT); if(buf) aFree(buf); - if(use_irc && irc_announce_flag && !flag) - irc_announce(mes); - return 0; } diff --git a/src/map/irc.c b/src/map/irc.c deleted file mode 100644 index a93437860..000000000 --- a/src/map/irc.c +++ /dev/null @@ -1,535 +0,0 @@ -// Copyright (c) Athena Dev Teams - Licensed under GNU GPL -// For more information, see LICENCE in the main folder - -#include "../common/core.h" -#include "../common/socket.h" -#include "../common/malloc.h" -#include "../common/db.h" -#include "../common/timer.h" -#include "../common/strlib.h" -#include "../common/mmo.h" -#include "../common/showmsg.h" -#include "../common/version.h" -#include "../common/nullpo.h" - -#include "map.h" -#include "mob.h" -#include "pc.h" -#include "intif.h" //For GM Broadcast -#include "irc.h" - -#include <stdio.h> -#include <string.h> -#include <stdlib.h> - -// configuration -short use_irc=0; -short irc_autojoin=0; - -short irc_announce_flag=1; -short irc_announce_mvp_flag=1; -short irc_announce_jobchange_flag=1; -short irc_announce_shop_flag=1; - -char irc_nick[30]=""; -char irc_password[32]=""; -char irc_channel[32]=""; -char irc_channel_pass[32]=""; -char irc_trade_channel[32]=""; - -char irc_ip_str[128]=""; -unsigned long irc_ip=0; -unsigned short irc_port = 6667; - -// variables -int irc_fd=0; -IRC_SI *irc_si=NULL; -struct channel_data cd; -int last_cd_user=0; - -int irc_connect_timer(int tid, unsigned int tick, int id, intptr data) -{ - if(irc_si && session[irc_si->fd]) - return 0; - //Ok, this ShowInfo and printf are a little ugly, but they are meant to - //debug just how long the code freezes here. [Skotlex] - ShowInfo("(IRC) Connecting to %s... ", irc_ip_str); - irc_fd = make_connection(irc_ip,irc_port); - if(irc_fd > 0){ - ShowMessage("ok\n"); - session[irc_fd]->func_parse = irc_parse; - } else - ShowMessage("failed\n"); - return 0; -} - -void irc_announce(const char* buf) -{ - char send_string[256]; - - sprintf(send_string,"PRIVMSG %s :",irc_channel); - strcat(send_string, buf); - irc_send(send_string); -} - -void irc_announce_jobchange(struct map_session_data *sd) -{ - char send_string[256]; - - nullpo_retv(sd); - - sprintf(send_string,"PRIVMSG %s :%s has changed into a %s.",irc_channel,sd->status.name,job_name(sd->status.class_)); - irc_send(send_string); -} - -void irc_announce_shop(struct map_session_data *sd, int flag) -{ - char send_string[256]; - char mapname[16]; - int maplen = 0; - nullpo_retv(sd); - - if(flag){ - strcpy(mapname, map[sd->bl.m].name); - maplen = strcspn(mapname,"."); - mapname[maplen] = '\0'; - mapname[0]=TOUPPER(mapname[0]); - - sprintf(send_string,"PRIVMSG %s :%s has opened a shop, %s, at <%d,%d> in %s.",irc_trade_channel,sd->status.name,sd->message,sd->bl.x,sd->bl.y,mapname); - } else - sprintf(send_string,"PRIVMSG %s :%s has closed their shop.",irc_trade_channel,sd->status.name); - - irc_send(send_string); -} - -void irc_announce_mvp(struct map_session_data *sd, struct mob_data *md) -{ - char send_string[256]; - char mapname[16]; - int maplen = 0; - - nullpo_retv(sd); - nullpo_retv(md); - - strcpy(mapname, map[md->bl.m].name); - maplen = strcspn(mapname,"."); - mapname[maplen] = '\0'; - mapname[0]=TOUPPER(mapname[0]); - - sprintf(send_string,"PRIVMSG %s :%s the %s has MVP'd %s in %s.",irc_channel,sd->status.name,job_name(sd->status.class_),md->name, mapname); - irc_send(send_string); -} - -int irc_parse(int fd) -{ - if (session[fd]->flag.eof) - { - do_close(fd); - irc_si = NULL; - add_timer(gettick() + 15000, irc_connect_timer, 0, 0); - return 0; - } - - if (session[fd]->session_data == NULL) { - irc_si = (struct IRC_Session_Info*)aMalloc(sizeof(struct IRC_Session_Info)); - irc_si->fd = fd; - irc_si->state = 0; - session[fd]->session_data = irc_si; - } else if (!irc_si) { - irc_si = (struct IRC_Session_Info*)session[fd]->session_data; - irc_si->fd = fd; - } - - if(RFIFOREST(fd) > 0) - { - send_to_parser(fd, (char*)RFIFOP(fd,0), "\n"); - RFIFOSKIP(fd,RFIFOREST(fd)); - } - return 0; -} - -int irc_keepalive_timer(int tid, unsigned int tick, int id, intptr data) -{ - char send_string[128]; - sprintf(send_string,"PRIVMSG %s : ", irc_nick); - irc_send(send_string); - add_timer(gettick() + 30000, irc_keepalive_timer, 0, 0); - return 0; -} - -void irc_send(char *buf) -{ - int len; - int fd; - - if(!irc_si || !(fd = irc_si->fd) || !session[fd]) - return; - - len = strlen(buf) + 1; - WFIFOHEAD(fd, len); - sprintf((char*)WFIFOP(fd,0), "%s\n", buf); - WFIFOSET(fd, len); -} - -void irc_parse_sub(int fd, char *incoming_string) -{ - char source[256]; - char command[256]; - char target[256]; - char message[8192]; - char send_string[8192]; - char *source_nick=NULL; - char *source_ident=NULL; - char *source_host=NULL; - char *state_mgr=NULL; - - memset(source,'\0',256); - memset(command,'\0',256); - memset(target,'\0',256); - memset(message,'\0',8192); - memset(send_string,'\0',8192); - - sscanf(incoming_string, ":%255s %255s %255s :%4095[^\r\n]", source, command, target, message); - if (source != NULL) - { - if (strstr(source,"!") != NULL) - { - source_nick = strtok_r(source,"!",&state_mgr); - source_ident = strtok_r(NULL,"@",&state_mgr); - source_host = strtok_r(NULL,"%%",&state_mgr); - } - } - - switch (irc_si->state) - { - case 0: - sprintf(send_string, "NICK %s", irc_nick); - irc_send(send_string); - sprintf(send_string, "USER eABot 8 * : eABot"); - irc_send(send_string); - irc_si->state = 1; - break; - - case 1: - if(!strcmp(command,"001")) - { - ShowStatus("IRC: Connected to IRC.\n"); - sprintf(send_string, "PRIVMSG nickserv :identify %s", irc_password); - irc_send(send_string); - sprintf(send_string, "JOIN %s %s", irc_channel, irc_channel_pass); - irc_send(send_string); - sprintf(send_string,"NAMES %s",irc_channel); - irc_send(send_string); - irc_si->state = 2; - } - else - if(!strcmp(command,"433")) - { - ShowError("IRC: Nickname %s is already taken, IRC Client unable to connect.\n", irc_nick); - sprintf(send_string, "QUIT"); - irc_send(send_string); - if(session[fd]) - set_eof(fd); - } - break; - - case 2: - if(!strcmp(source, "PING")) - { - sprintf(send_string, "PONG %s", command); - irc_send(send_string); - } - else // channel message - if( strcmpi(target,irc_channel)==0 || strcmpi(target,irc_channel+1)==0 || strcmpi(target+1,irc_channel)==0 ) - { //TODO: why not allow talking to the bot directly? (|| strcmpi(irc_nick,target) == 0) - - // issue a command (usage: say @command <params> into the channel) - char cmdname[256]; - char cmdargs[256] = ""; - if((strcmpi(command,"privmsg")==0)&&(sscanf(message,"@%255s %255[^\r\n]",cmdname,cmdargs)>0)&&(target[0]=='#')) - { - if(strcmpi(cmdname,"kami")==0) - { - if(get_access(source_nick) < ACCESS_OP) - sprintf(send_string,"NOTICE %s :Access Denied",source_nick); - else - { - sprintf(send_string,"%s: %s",source_nick,cmdargs); - intif_GMmessage(send_string,strlen(send_string)+1,0); - sprintf(send_string,"NOTICE %s :Message Sent",source_nick); - } - irc_send(send_string); - } - else // Number of users online - if(strcmpi(cmdname,"users")==0) - { - int users = 0; - struct s_mapiterator* iter; - - iter = mapit_getallusers(); - for( mapit_first(iter); mapit_exists(iter); mapit_next(iter) ) - users++; - mapit_free(iter); - - sprintf(send_string, "PRIVMSG %s :Users Online: %d", irc_channel, users); - irc_send(send_string); - } - else // List all users online - if(strcmpi(cmdname,"who")==0) - { - int users = 0; - struct s_mapiterator* iter; - struct map_session_data* sd; - - iter = mapit_getallusers(); - for( mapit_first(iter); mapit_exists(iter); mapit_next(iter) ) - users++; - mapit_free(iter); - - if(users > 0) - { - sprintf(send_string,"NOTICE %s :%d Users Online",source_nick,users); - irc_send(send_string); - - iter = mapit_getallusers(); - for( sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter) ) - { - sprintf(send_string,"NOTICE %s :Name: \"%s\"",source_nick,sd->status.name); - irc_send(send_string); - } - mapit_free(iter); - } - else - { - sprintf(send_string,"NOTICE %s :No Users Online",source_nick); - irc_send(send_string); - } - } - } - else // Refresh Names - if((strcmpi(command,"join")==0)||(strcmpi(command,"part")==0)||(strcmpi(command,"mode")==0)||(strcmpi(command,"nick")==0)) - { - ShowInfo("IRC: Refreshing User List"); - irc_rmnames(); - ShowMessage("..."); - sprintf(send_string,"NAMES %s",irc_channel); - irc_send(send_string); - ShowMessage("Done\n"); - } - else // Autojoin on kick - if((strcmpi(command,"kick")==0)&&(irc_autojoin==1)) - { - sprintf(send_string, "JOIN %s %s", target, irc_channel_pass); - irc_send(send_string); - } - } - else // Names Reply - if((strcmpi(command,"353")==0)) - { - ShowInfo("IRC: NAMES received\n"); - parse_names_packet(incoming_string); - } - break; - } -} - -int send_to_parser(int fd, char *input,char key[2]) -{ - char *temp_string=NULL; - char *state_mgr=NULL; - int total_loops=0; - - temp_string = strtok_r(input,key,&state_mgr); - while (temp_string != NULL) - { - total_loops = total_loops+1; - irc_parse_sub(fd,temp_string); - temp_string = strtok_r(NULL,key,&state_mgr); - } - return total_loops; -} - -//NAMES Packet(353) parser -int parse_names_packet(char *str) -{ - char *tok; - char source[256]; - char numeric[10]; - char target[256]; - char channel[256]; - char names[1024]; - - memset(source,'\0',256); - memset(numeric,'\0',10); - memset(target,'\0',256); - memset(channel,'\0',256); - memset(names,'\0',1024); - - //TODO: fold this - tok=strtok(str,"\r\n"); - sscanf(tok,":%255s %10s %255s %*1[=@] %255s :%1023[^\r\n]",source,numeric,target,channel,names); - if(strcmpi(numeric,"353")==0) - parse_names(names); - - while((tok=strtok(NULL,"\r\n"))!=NULL) - { - sscanf(tok,":%255s %10s %255s %*1[=@] %255s :%1023[^\r\n]",source,numeric,target,channel,names); - if(strcmpi(numeric,"353")==0) - parse_names(names); - } - - return 0; -} - -//User access level prefix parser -int parse_names(char* str) -{ - //TODO: fold this copy-pasted junk - char* tok; - if (str == NULL) return 0; //Nothing to parse! - tok = strtok(str, " "); - switch(tok[0]) - { - case '~': set_access(tok+1,ACCESS_OWNER); break; - case '&': set_access(tok+1,ACCESS_SOP); break; - case '@': set_access(tok+1,ACCESS_OP); break; - case '%': set_access(tok+1,ACCESS_HOP); break; - case '+': set_access(tok+1,ACCESS_VOICE); break; - default : set_access(tok,ACCESS_NORM); break; - } - - while((tok = strtok(NULL, " ")) != NULL) - { - switch(tok[0]) - { - case '~': set_access(tok+1,ACCESS_OWNER); break; - case '&': set_access(tok+1,ACCESS_SOP); break; - case '@': set_access(tok+1,ACCESS_OP); break; - case '%': set_access(tok+1,ACCESS_HOP); break; - case '+': set_access(tok+1,ACCESS_VOICE); break; - default : set_access(tok,ACCESS_NORM); break; - } - } - - return 1; -} - -//Store user's access level -int set_access(char *nick,int newlevel) -{ - int i; - - for(i = 0; i <= MAX_CHANNEL_USERS; i++) { - if(strcmpi(cd.user[i].name, nick)==0) { - cd.user[i].level = newlevel; - return 1; - } - } - - strcpy(cd.user[last_cd_user].name, nick); - cd.user[last_cd_user].level = newlevel; - last_cd_user++; - - return 0; -} - -//Returns users access level -int get_access(char *nick) -{ - int i; - - for(i = 0; i <= MAX_CHANNEL_USERS; i++) - if(strcmpi(cd.user[i].name, nick)==0) - return (cd.user[i].level); - - return -1; -} - -int irc_rmnames() -{ - int i; - //TODO: why not just set the max counter to 0? - for(i = 0; i <= MAX_CHANNEL_USERS; i++) - cd.user[i].level=0; - - last_cd_user = 0; - return 0; -} - -int irc_read_conf(char *file) -{ - FILE *fp=NULL; - char w1[256]; - char w2[256]; - char path[256]; - char row[1024]; - - memset(w1,'\0',256); - memset(w2,'\0',256); - memset(path,'\0',256); - memset(row,'\0',256); - - sprintf(path,"conf/%s",file); - - if(!(fp=fopen(path,"r"))) { - ShowError("Cannot find file: %s\n",path); - return 0; - } - - while(fgets(row, sizeof(row), fp) != NULL) - { - if(row[0]=='/' && row[1]=='/') - continue; - - sscanf(row,"%[^:]: %255[^\r\n]",w1,w2); - if(strcmpi(w1,"use_irc")==0) - use_irc = config_switch(w2); - else if(strcmpi(w1,"irc_server")==0) - strcpy(irc_ip_str,w2); - else if(strcmpi(w1,"irc_port")==0) - irc_port = atoi(w2); - else if(strcmpi(w1,"irc_autojoin")==0) - irc_autojoin = atoi(w2); - else if(strcmpi(w1,"irc_channel")==0) - strcpy(irc_channel,w2); - else if(strcmpi(w1,"irc_channel_pass")==0) - strcpy(irc_channel_pass,w2); - else if(strcmpi(w1,"irc_trade_channel")==0) - strcpy(irc_trade_channel,w2); - else if(strcmpi(w1,"irc_nick")==0) - strcpy(irc_nick,w2); - else if(strcmpi(w1,"irc_pass")==0) { - if(strcmpi(w2,"0")!=0) - strcpy(irc_password,w2); - } - } - - ShowInfo("IRC Config read successfully\n"); - - return 1; -} - -void do_init_irc(void) -{ - if(!use_irc) - return; - - irc_ip = host2ip(irc_ip_str); - if (!irc_ip) - { - ShowError("Unable to resolve %s! Cannot connect to IRC server, disabling irc_bot.\n", irc_ip_str); - use_irc = 0; - return; - } - - irc_connect_timer(0, 0, 0, 0); - - add_timer_func_list(irc_connect_timer, "irc_connect_timer"); - add_timer_func_list(irc_keepalive_timer, "irc_keepalive_timer"); - add_timer(gettick() + 30000, irc_keepalive_timer, 0, 0); -} - -void do_final_irc(void) -{ - -} diff --git a/src/map/irc.h b/src/map/irc.h deleted file mode 100644 index c1970fb0e..000000000 --- a/src/map/irc.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) Athena Dev Teams - Licensed under GNU GPL -// For more information, see LICENCE in the main folder - -#ifndef _IRC_H_ -#define _IRC_H_ - -//#include "map.h" -struct map_session_data; - -// IRC .conf file [Zido] -#define IRC_CONF "irc_athena.conf" - -// IRC Access levels [Zido] -#define ACCESS_OWNER 5 -#define ACCESS_SOP 4 -#define ACCESS_OP 3 -#define ACCESS_HOP 2 -#define ACCESS_VOICE 1 -#define ACCESS_NORM 0 - -#define MAX_CHANNEL_USERS 500 - -extern short use_irc; - -extern short irc_announce_flag; -extern short irc_announce_mvp_flag; -extern short irc_announce_shop_flag; -extern short irc_announce_jobchange_flag; - -void irc_announce(const char* buf); -void irc_announce_jobchange(struct map_session_data *sd); -void irc_announce_shop(struct map_session_data *sd,int flag); -void irc_announce_mvp(struct map_session_data *sd, struct mob_data *md); - -int irc_parse(int fd); -void do_final_irc(void); -void do_init_irc(void); -void irc_send(char *buf); -void irc_parse_sub(int fd, char *incoming_string); -int send_to_parser(int fd, char *input,char key[2]); -struct IRC_Session_Info { - int state; - int fd; - char username[30]; - char password[33]; -}; - -typedef struct IRC_Session_Info IRC_SI; - -struct channel_data { - struct { - char name[256]; - int level; - }user[MAX_CHANNEL_USERS]; -}; - -int parse_names_packet(char *str); // [Zido] -int parse_names(char *str); // [Zido] -int set_access(char *nick,int level); // [Zido] -int get_access(char *nick); // [Zido] -int irc_rmnames(void); // [Zido] -int irc_read_conf(char *file); // [Zido] - -#endif /* _IRC_H_ */ diff --git a/src/map/map.c b/src/map/map.c index 95bec1b58..8d04e56f9 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -38,7 +38,6 @@ #include "atcommand.h" #include "charcommand.h" #include "log.h" -#include "irc.h" #ifndef TXT_ONLY #include "mail.h" #endif @@ -3161,8 +3160,6 @@ void do_final(void) do_final_skill(); do_final_status(); do_final_unit(); - if(use_irc) - do_final_irc(); map_db->destroy(map_db, map_db_final); @@ -3323,7 +3320,6 @@ int do_init(int argc, char *argv[]) } map_config_read(MAP_CONF_NAME); - irc_read_conf(IRC_CONF); // [Zido] chrif_checkdefaultlogin(); if (!map_ip_set || !char_ip_set) { @@ -3375,8 +3371,6 @@ int do_init(int argc, char *argv[]) add_timer_func_list(map_removemobs_timer, "map_removemobs_timer"); add_timer_interval(gettick()+1000, map_freeblock_timer, 0, 0, 60*1000); - if(use_irc) - do_init_irc(); do_init_atcommand(); do_init_battle(); do_init_chrif(); diff --git a/src/map/mob.c b/src/map/mob.c index 74dc4cb05..33d1ce58d 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -31,7 +31,6 @@ #include "script.h" #include "atcommand.h" #include "date.h" -#include "irc.h" #include <stdio.h> #include <stdlib.h> @@ -2475,9 +2474,6 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) mexp = (unsigned int)cap_value(exp, 1, UINT_MAX); - if(use_irc && irc_announce_mvp_flag) - irc_announce_mvp(mvp_sd,md); - clif_mvp_effect(mvp_sd); clif_mvp_exp(mvp_sd,mexp); pc_gainexp(mvp_sd, &md->bl, mexp,0); diff --git a/src/map/script.c b/src/map/script.c index 8766b1fe5..6179ebcac 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -39,7 +39,6 @@ #include "charcommand.h" #include "log.h" #include "unit.h" -#include "irc.h" #include "pet.h" #include "mail.h" #include "script.h" @@ -4595,8 +4594,6 @@ BUILDIN_FUNC(jobchange) return 0; pc_jobchange(sd, job, upper); - if(use_irc && irc_announce_jobchange_flag) - irc_announce_jobchange(sd); } return 0; diff --git a/src/map/vending.c b/src/map/vending.c index 0420d5288..c77b1ac78 100644 --- a/src/map/vending.c +++ b/src/map/vending.c @@ -16,8 +16,6 @@ #include "battle.h" #include "log.h" -#include "irc.h" - #include <stdio.h> #include <string.h> @@ -31,9 +29,6 @@ void vending_closevending(struct map_session_data* sd) sd->vender_id = 0; clif_closevendingboard(&sd->bl,0); - - if( use_irc && irc_announce_shop_flag ) - irc_announce_shop(sd,0); } /*========================================== @@ -297,7 +292,4 @@ void vending_openvending(struct map_session_data* sd, const char* message, bool pc_stop_walking(sd,1); clif_openvending(sd,sd->vender_id,sd->vending); clif_showvendingboard(&sd->bl,message,0); - - if( use_irc && irc_announce_shop_flag ) - irc_announce_shop(sd,1); } |