diff options
Diffstat (limited to 'src/map/chat.c')
-rw-r--r-- | src/map/chat.c | 51 |
1 files changed, 31 insertions, 20 deletions
diff --git a/src/map/chat.c b/src/map/chat.c index a232781ca..976b1ce8e 100644 --- a/src/map/chat.c +++ b/src/map/chat.c @@ -6,24 +6,25 @@ #include "chat.h" +#include "map/atcommand.h" // msg_sd(sd,) +#include "map/battle.h" // struct battle_config +#include "map/clif.h" +#include "map/map.h" +#include "map/npc.h" // npc_event_do() +#include "map/pc.h" +#include "map/skill.h" // ext_skill_unit_onplace() +#include "common/cbasetypes.h" +#include "common/malloc.h" +#include "common/mmo.h" +#include "common/nullpo.h" +#include "common/showmsg.h" +#include "common/strlib.h" + #include <stdio.h> #include <string.h> -#include "atcommand.h" // msg_sd(sd,) -#include "battle.h" // struct battle_config -#include "clif.h" -#include "map.h" -#include "npc.h" // npc_event_do() -#include "pc.h" -#include "skill.h" // ext_skill_unit_onplace() -#include "../common/cbasetypes.h" -#include "../common/malloc.h" -#include "../common/mmo.h" -#include "../common/nullpo.h" -#include "../common/showmsg.h" -#include "../common/strlib.h" - struct chat_interface chat_s; +struct chat_interface *chat; /// Initializes a chatroom object (common functionality for both pc and npc chatrooms). /// Returns a chatroom object on success, or NULL on failure. @@ -31,6 +32,9 @@ struct chat_data* chat_createchat(struct block_list* bl, const char* title, cons { struct chat_data* cd; nullpo_retr(NULL, bl); + nullpo_retr(NULL, title); + nullpo_retr(NULL, pass); + nullpo_retr(NULL, ev); /* Given the overhead and the numerous instances (npc allocated or otherwise) wouldn't it be beneficial to have it use ERS? [Ind] */ cd = (struct chat_data *) aMalloc(sizeof(struct chat_data)); @@ -74,6 +78,8 @@ struct chat_data* chat_createchat(struct block_list* bl, const char* title, cons bool chat_createpcchat(struct map_session_data* sd, const char* title, const char* pass, int limit, bool pub) { struct chat_data* cd; nullpo_ret(sd); + nullpo_ret(title); + nullpo_ret(pass); if( sd->chatID ) return false; //Prevent people abusing the chat system by creating multiple chats, as pointed out by End of Exam. [Skotlex] @@ -88,12 +94,12 @@ bool chat_createpcchat(struct map_session_data* sd, const char* title, const cha return false; //Can't create chatrooms on this map. } - if( map->getcell(sd->bl.m,sd->bl.x,sd->bl.y,CELL_CHKNOCHAT) ) { + if (map->getcell(sd->bl.m, &sd->bl, sd->bl.x, sd->bl.y, CELL_CHKNOCHAT) ) { clif->message (sd->fd, msg_sd(sd,865)); // "Can't create chat rooms in this area." return false; } - pc_stop_walking(sd,1); + pc_stop_walking(sd, STOPWALKING_FLAG_FIXPOS); cd = chat->create(&sd->bl, title, pass, limit, pub, 0, "", 0, 1, MAX_LEVEL); if( cd ) { @@ -101,7 +107,7 @@ bool chat_createpcchat(struct map_session_data* sd, const char* title, const cha cd->usersd[0] = sd; pc_setchatid(sd,cd->bl.id); pc_stop_attack(sd); - clif->createchat(sd,0); + clif->createchat(sd,0); // 0 = success clif->dispchat(cd,0); return true; } @@ -117,6 +123,7 @@ bool chat_joinchat(struct map_session_data* sd, int chatid, const char* pass) { struct chat_data* cd; nullpo_ret(sd); + nullpo_ret(pass); cd = (struct chat_data*)map->id2bl(chatid); if( cd == NULL || cd->bl.type != BL_CHAT || cd->bl.m != sd->bl.m || sd->state.vending || sd->state.buyingstore || sd->chatID || ((cd->owner->type == BL_NPC) ? cd->users+1 : cd->users) >= cd->limit ) @@ -150,7 +157,7 @@ bool chat_joinchat(struct map_session_data* sd, int chatid, const char* pass) { return false; } - pc_stop_walking(sd,1); + pc_stop_walking(sd, STOPWALKING_FLAG_FIXPOS); cd->usersd[cd->users] = sd; cd->users++; @@ -254,6 +261,7 @@ bool chat_changechatowner(struct map_session_data* sd, const char* nextownername int i; nullpo_ret(sd); + nullpo_ret(nextownername); cd = (struct chat_data*)map->id2bl(sd->chatID); if( cd == NULL || (struct block_list*) sd != cd->owner ) @@ -297,6 +305,8 @@ bool chat_changechatstatus(struct map_session_data* sd, const char* title, const struct chat_data* cd; nullpo_ret(sd); + nullpo_ret(title); + nullpo_ret(pass); cd = (struct chat_data*)map->id2bl(sd->chatID); if( cd==NULL || (struct block_list *)sd != cd->owner ) @@ -324,6 +334,7 @@ bool chat_kickchat(struct map_session_data* sd, const char* kickusername) { int i; nullpo_ret(sd); + nullpo_ret(kickusername); cd = (struct chat_data *)map->id2bl(sd->chatID); @@ -339,7 +350,7 @@ bool chat_kickchat(struct map_session_data* sd, const char* kickusername) { idb_iput(cd->kick_list,cd->usersd[i]->status.char_id,1); - chat->leave(cd->usersd[i],1); + chat->leave(cd->usersd[i], true); return true; } @@ -440,7 +451,7 @@ bool chat_npckickall(struct chat_data* cd) nullpo_ret(cd); while( cd->users > 0 ) - chat->leave(cd->usersd[cd->users-1],0); + chat->leave(cd->usersd[cd->users-1], false); return true; } |