/*========================================== * npcチャットルーム作成 *------------------------------------------ */ int chat_createnpcchat( struct npc_data *nd,int limit,int pub,int trigger,const char* title,int titlelen,const char *ev, int zeny,int lowlv,int highlv,unsigned int job,int upper) { int change_flag = 0; struct chat_data *cd; nullpo_retr(1, nd); // 既にチャットを持っているなら状態変更するだけ if( nd->chat_id && (cd = map_id2cd(nd->chat_id)) ) { change_flag = 1; memset(cd->npc_event, 0, sizeof(cd->npc_event)); } else { cd = (struct chat_data *)aCalloc(1,sizeof(struct chat_data)); cd->pass[0] = 0; cd->users = 0; cd->bl.type = BL_CHAT; cd->owner_ = &nd->bl; cd->owner = &cd->owner_; cd->bl.id = map_addobject(&cd->bl); if(cd->bl.id == 0) { aFree(cd); return 0; } nd->chat_id = cd->bl.id; } cd->limit = (unsigned char)limit; cd->trigger = (trigger > 0)? trigger: limit; cd->pub = pub; if(titlelen >= (int)(sizeof(cd->title) - 1)) { titlelen = (int)(sizeof(cd->title) - 1); } memcpy(cd->title,title,titlelen); cd->title[titlelen] = 0; cd->bl.m = nd->bl.m; cd->bl.x = nd->bl.x; cd->bl.y = nd->bl.y; cd->zeny = zeny; cd->lowlv = lowlv; cd->highlv = highlv; cd->job = job; cd->upper = upper; memcpy(cd->npc_event,ev,sizeof(cd->npc_event)); cd->npc_event[sizeof(cd->npc_event)-1] = '\0'; if(change_flag) clif_changechatstatus(cd); clif_dispchat(cd,-1); return 0; }
/*========================================== * change a chatroom's status (title, etc) *------------------------------------------*/ int chat_changechatstatus(struct map_session_data* sd, const char* title, const char* pass, int limit, bool pub) { struct chat_data* cd; nullpo_retr(1, sd); cd = (struct chat_data*)map_id2bl(sd->chatID); if( cd==NULL || (struct block_list *)sd != cd->owner ) return 1; safestrncpy(cd->title, title, CHATROOM_TITLE_SIZE); safestrncpy(cd->pass, pass, CHATROOM_PASS_SIZE); cd->limit = min(limit, ARRAYLENGTH(cd->usersd)); cd->pub = pub; clif_changechatstatus(cd); clif_dispchat(cd,0); return 0; }
/*========================================== * チャットの状態(タイトル等)を変更 *------------------------------------------ */ int chat_changechatstatus(struct map_session_data *sd,int limit,int pub,char* pass,char* title,int titlelen) { struct chat_data *cd; cd=(struct chat_data*)map_id2bl(sd->chatID); if(cd==NULL || (struct block_list *)sd!=(*cd->owner)) return 1; cd->limit = limit; cd->pub = pub; memcpy(cd->pass,pass,8); if(titlelen>=sizeof(cd->title)-1) titlelen=sizeof(cd->title)-1; memcpy(cd->title,title,titlelen); cd->title[titlelen]=0; clif_changechatstatus(cd); clif_dispchat(cd,0); return 0; }
/*========================================== * チャットの状態(タイトル等)を変更 *------------------------------------------ */ void chat_changechatstatus(struct map_session_data *sd, unsigned short limit, unsigned char pub, const char* pass, const char* title, int titlelen) { struct chat_data *cd; nullpo_retv(sd); cd = map_id2cd(sd->chatID); if(cd == NULL || &sd->bl != (*cd->owner)) return; cd->limit = (unsigned char)limit; cd->pub = pub; memcpy(cd->pass,pass,8); if(titlelen >= sizeof(cd->title) - 1) { titlelen = sizeof(cd->title) - 1; } memcpy(cd->title,title,titlelen); cd->title[titlelen] = 0; clif_changechatstatus(cd); clif_dispchat(cd,-1); return; }