亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chat.c

?? 最新的仙鏡傳說服務器C語言源碼
?? C
字號:
// $Id: chat.c,v 1.7 2003/06/29 05:52:56 lemit Exp $
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "db.h"
#include "map.h"
#include "clif.h"
#include "pc.h"
#include "chat.h"
#include "npc.h"

#ifdef MEMWATCH
#include "memwatch.h"
#endif

int chat_triggerevent(struct chat_data *cd);


/*==========================================
 * 僠儍僢僩儖乕儉嶌惉
 *------------------------------------------
 */
int chat_createchat(struct map_session_data *sd,int limit,int pub,char* pass,char* title,int titlelen)
{
	struct chat_data *cd;

	cd = calloc(sizeof(*cd), 1);
	if(cd==NULL){
		printf("out of memory : chat_createchat\n");
		exit(1);
	}

	cd->limit = limit;
	cd->pub = pub;
	cd->users = 1;
	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;

	cd->owner = (struct block_list **)(&cd->usersd[0]);
	cd->usersd[0] = sd;
	cd->bl.m = sd->bl.m;
	cd->bl.x = sd->bl.x;
	cd->bl.y = sd->bl.y;
	cd->bl.type = BL_CHAT;

	cd->bl.id = map_addobject(&cd->bl);	
	if(cd->bl.id==0){
		clif_createchat(sd,1);
		free(cd);
		return 0;
	}
	pc_setchatid(sd,cd->bl.id);

	clif_createchat(sd,0);
	clif_dispchat(cd,0);

	return 0;
}

/*==========================================
 * 婛懚僠儍僢僩儖乕儉偵嶲壛
 *------------------------------------------
 */
int chat_joinchat(struct map_session_data *sd,int chatid,char* pass)
{
	struct chat_data *cd;

	cd=(struct chat_data*)map_id2bl(chatid);
	if(cd==NULL)
		return 1;

	if(cd->bl.m != sd->bl.m || cd->limit <= cd->users){
		clif_joinchatfail(sd,0);
		return 0;
	}
	if(cd->pub==0 && strncmp(pass,cd->pass,8)){
		clif_joinchatfail(sd,1);
		return 0;
	}

	cd->usersd[cd->users] = sd;
	cd->users++;

	pc_setchatid(sd,cd->bl.id);

	
	clif_joinchatok(sd,cd);	// 怴偨偵嶲壛偟偨恖偵偼慡堳偺儕僗僩
	clif_addchat(cd,sd);	// 婛偵拞偵嫃偨恖偵偼捛壛偟偨恖偺曬崘
	clif_dispchat(cd,0);	// 廃埻偺恖偵偼恖悢曄壔曬崘

	chat_triggerevent(cd); // 僀儀儞僩
	
	return 0;
}

/*==========================================
 * 僠儍僢僩儖乕儉偐傜敳偗傞
 *------------------------------------------
 */
int chat_leavechat(struct map_session_data *sd)
{
	struct chat_data *cd;
	int i,leavechar;

	cd=(struct chat_data*)map_id2bl(sd->chatID);
	if(cd==NULL)
		return 1;

	for(i = 0,leavechar=-1;i < cd->users;i++){
		if(cd->usersd[i] == sd){
			leavechar=i;
			break;
		}
	}
	if(leavechar<0)	// 偦偺chat偵強懏偟偰偄側偄傜偟偄 (僶僌帪偺傒)
		return -1;

	if(leavechar==0 && cd->users>1 && (*cd->owner)->type==BL_PC){
		// 強桳幰偩偭偨&懠偵恖偑嫃傞&PC偺僠儍僢僩
		clif_changechatowner(cd,cd->usersd[1]);
		clif_clearchat(cd,0);
	}

	// 敳偗傞PC偵傕憲傞偺偱users傪尭傜偡慜偵幚峴
	clif_leavechat(cd,sd);

	cd->users--;
	pc_setchatid(sd,0);

	if(cd->users == 0 && (*cd->owner)->type==BL_PC){
			// 慡堳嫃側偔側偭偨&PC偺僠儍僢僩側偺偱徚偡
		clif_clearchat(cd,0);
		map_delobject(cd->bl.id);	// free傑偱偟偰偔傟傞
	} else {
		for(i=leavechar;i < cd->users;i++)
			cd->usersd[i] = cd->usersd[i+1];
		if(leavechar==0 && (*cd->owner)->type==BL_PC){
			// PC偺僠儍僢僩側偺偱強桳幰偑敳偗偨偺偱埵抲曄峏
			cd->bl.x=cd->usersd[0]->bl.x;
			cd->bl.y=cd->usersd[0]->bl.y;
		}
		clif_dispchat(cd,0);
	}

	return 0;
}

/*==========================================
 * 僠儍僢僩儖乕儉偺帩偪庡傪忳傞
 *------------------------------------------
 */
int chat_changechatowner(struct map_session_data *sd,char *nextownername)
{
	struct chat_data *cd;
	struct map_session_data *tmp_sd;
	int i,nextowner;

	cd=(struct chat_data*)map_id2bl(sd->chatID);
	if(cd==NULL || (struct block_list *)sd!=(*cd->owner))
		return 1;

	for(i = 1,nextowner=-1;i < cd->users;i++){
		if(strcmp(cd->usersd[i]->status.name,nextownername)==0){
			nextowner=i;
			break;
		}
	}
	if(nextowner<0) // 偦傫側恖偼嫃側偄
		return -1;

	clif_changechatowner(cd,cd->usersd[nextowner]);
	// 堦扷徚偡
	clif_clearchat(cd,0);

	// userlist偺弴斣曄峏 (0偑強桳幰側偺偱)
	tmp_sd = cd->usersd[0];
	cd->usersd[0] = cd->usersd[nextowner];
	cd->usersd[nextowner] = tmp_sd;

	// 怴偟偄強桳幰偺埵抲傊曄峏
	cd->bl.x=cd->usersd[0]->bl.x;
	cd->bl.y=cd->usersd[0]->bl.y;

	// 嵞搙昞帵
	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;
}

/*==========================================
 * 僠儍僢僩儖乕儉偐傜廟傝弌偡
 *------------------------------------------
 */
int chat_kickchat(struct map_session_data *sd,char *kickusername)
{
	struct chat_data *cd;
	int i,kickuser;

	cd=(struct chat_data*)map_id2bl(sd->chatID);
	if(cd==NULL || (struct block_list *)sd!=(*cd->owner))
		return 1;

	for(i = 0,kickuser=-1;i < cd->users;i++){
		if(strcmp(cd->usersd[i]->status.name,kickusername)==0){
			kickuser=i;
			break;
		}
	}
	if(kickuser<0) // 偦傫側恖偼嫃側偄
		return -1;

	chat_leavechat(cd->usersd[kickuser]);

	return 0;
}

/*==========================================
 * npc僠儍僢僩儖乕儉嶌惉
 *------------------------------------------
 */
int chat_createnpcchat(struct npc_data *nd,int limit,int trigger,char* title,int titlelen,const char *ev)
{
	struct chat_data *cd;

	cd = calloc(sizeof(*cd), 1);
	if(cd==NULL){
		printf("out of memory : chat_createchat\n");
		exit(1);
	}

	cd->limit = cd->trigger = limit;
	if(trigger>0)
		cd->trigger = trigger;
	cd->pub = 1;
	cd->users = 0;
	memcpy(cd->pass,"",8);
	if(titlelen>=sizeof(cd->title)-1) titlelen=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->bl.type = BL_CHAT;
	cd->owner_ = (struct block_list *)nd;
	cd->owner = &cd->owner_;
	memcpy(cd->npc_event,ev,sizeof(cd->npc_event));

	cd->bl.id = map_addobject(&cd->bl);	
	if(cd->bl.id==0){
		free(cd);
		return 0;
	}
	nd->chat_id=cd->bl.id;

	clif_dispchat(cd,0);

	return 0;
}
/*==========================================
 * npc僠儍僢僩儖乕儉嶍彍
 *------------------------------------------
 */
int chat_deletenpcchat(struct npc_data *nd)
{
	struct chat_data *cd=(struct chat_data*)map_id2bl(nd->chat_id);
	
	chat_npckickall(cd);
	clif_clearchat(cd,0);
	map_delobject(cd->bl.id);	// free傑偱偟偰偔傟傞
	nd->chat_id=0;
	
	return 0;
}

/*==========================================
 * 婯掕恖悢埲忋偱僀儀儞僩偑掕媊偝傟偰傞側傜幚峴
 *------------------------------------------
 */
int chat_triggerevent(struct chat_data *cd)
{
	if(cd->users>=cd->trigger && cd->npc_event[0])
		npc_event_do(cd->npc_event);
	return 0;
}

/*==========================================
 * 僀儀儞僩偺桳岠壔
 *------------------------------------------
 */
int chat_enableevent(struct chat_data *cd)
{
	cd->trigger&=0x7f;
	chat_triggerevent(cd);
	return 0;
}
/*==========================================
 * 僀儀儞僩偺柍岠壔
 *------------------------------------------
 */
int chat_disableevent(struct chat_data *cd)
{
	cd->trigger|=0x80;
	return 0;
}
/*==========================================
 * 僠儍僢僩儖乕儉偐傜慡堳廟傝弌偡
 *------------------------------------------
 */
int chat_npckickall(struct chat_data *cd)
{
	while(cd->users>0){
		chat_leavechat(cd->usersd[cd->users-1]);
	}
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品人人做人人爽人人添| 一区二区三区在线视频播放| 国产精品久久久久久妇女6080| 午夜精品视频在线观看| 成人午夜激情视频| 欧美一区二区日韩一区二区| 亚洲女爱视频在线| 国产宾馆实践打屁股91| 91麻豆精品国产自产在线| 亚洲欧美视频一区| 成人在线综合网| 精品久久久久久无| 日韩成人一区二区| 欧美日韩国产精品自在自线| 亚洲欧洲日韩综合一区二区| 国产成人精品免费| 久久香蕉国产线看观看99| 亚洲成人一区二区| 91久久精品国产91性色tv| 国产精品美女久久福利网站| 国产精品一区二区x88av| 日韩欧美国产不卡| 91激情五月电影| 国产精品美女久久久久久久网站| 国产一区二区久久| 日韩一区二区免费视频| 日韩不卡一二三区| 日韩欧美国产不卡| 国产一区二区三区在线观看免费| 日韩欧美精品在线视频| 久久99最新地址| 精品久久五月天| 国产精品91一区二区| 久久人人爽人人爽| 国产suv一区二区三区88区| 国产欧美一区视频| 91日韩精品一区| 一区二区三区四区激情| 欧美日韩在线播| 蜜臀av性久久久久蜜臀aⅴ流畅| 正在播放亚洲一区| 久久草av在线| 精品国产伦一区二区三区免费| 久久99精品视频| 国产亚洲一区二区三区| 99在线精品免费| 亚洲国产视频a| 日韩一区二区三区观看| 国产综合一区二区| 亚洲欧洲日韩在线| 91麻豆精品国产无毒不卡在线观看| 久久国产乱子精品免费女| 国产欧美一区二区三区沐欲| 91丨九色丨国产丨porny| 婷婷成人激情在线网| 精品盗摄一区二区三区| www.亚洲激情.com| 午夜精品在线视频一区| 欧美xxxx老人做受| 成人av午夜影院| 日一区二区三区| 欧美国产欧美综合| 欧美色网一区二区| 激情综合色播激情啊| 日韩理论在线观看| 日韩欧美的一区| 色欧美乱欧美15图片| 久久se精品一区精品二区| 中文字幕一区在线| 欧美一级片免费看| 97精品国产97久久久久久久久久久久| 日韩在线一二三区| 国产精品国产三级国产a | 日韩欧美成人激情| 粉嫩av一区二区三区在线播放 | 成人免费视频播放| 亚洲国产另类av| 国产精品情趣视频| 亚洲成人免费看| 国产精品麻豆网站| ww久久中文字幕| 欧美日韩精品综合在线| 91丨porny丨国产| 国产suv精品一区二区三区| 欧美aⅴ一区二区三区视频| 亚洲日本丝袜连裤袜办公室| 久久久久97国产精华液好用吗| 欧美日韩中字一区| 一本一道久久a久久精品| 国产电影一区二区三区| 九九精品一区二区| 日韩在线一二三区| 亚洲18影院在线观看| 亚洲乱码中文字幕综合| 国产精品视频线看| 久久久www成人免费无遮挡大片| 制服丝袜亚洲播放| 欧美日韩精品一区二区天天拍小说 | wwwwww.欧美系列| 亚洲国产视频一区二区| 国产精品丝袜一区| 日韩美女一区二区三区| 欧美xxx久久| 久久久91精品国产一区二区精品| 久久99深爱久久99精品| 久久久精品日韩欧美| 不卡一区二区三区四区| 亚洲精品少妇30p| 欧美激情艳妇裸体舞| 久久福利视频一区二区| 国产一区二区不卡在线| 精品一区免费av| 韩国欧美一区二区| 日韩二区三区在线观看| 丝袜亚洲精品中文字幕一区| 亚洲高清在线精品| 日韩专区在线视频| 青青草97国产精品免费观看| 日韩综合一区二区| 精品在线观看免费| 国产毛片精品视频| 国产成人综合在线| eeuss影院一区二区三区| 99久久婷婷国产综合精品| 91丝袜国产在线播放| 欧美日韩一卡二卡三卡| 91精品久久久久久久99蜜桃| 日韩片之四级片| 久久久99久久| 亚洲精品国产无套在线观| 亚洲综合色网站| 秋霞午夜鲁丝一区二区老狼| 精品中文字幕一区二区小辣椒| 九九国产精品视频| 99久久精品国产精品久久| 欧美在线|欧美| 欧美一级xxx| 国产丝袜欧美中文另类| 亚洲日本青草视频在线怡红院| 亚洲精品伦理在线| 午夜a成v人精品| 国产精品一色哟哟哟| 在线欧美日韩国产| 欧美大胆人体bbbb| 国产精品乱码人人做人人爱| 亚洲国产日韩a在线播放 | 欧美日本国产一区| 久久久精品tv| 一区二区久久久久久| 国产伦理精品不卡| 欧美日韩国产免费| 国产人久久人人人人爽| 视频一区视频二区在线观看| 国产精品资源在线看| 欧美日韩一区二区电影| 国产精品系列在线| 日韩国产在线观看一区| 东方aⅴ免费观看久久av| 欧美日本在线播放| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 8x8x8国产精品| 国产精品动漫网站| 经典一区二区三区| 欧美色男人天堂| 亚洲欧洲99久久| 久久国产福利国产秒拍| 欧美日韩精品一区二区| 国产精品天干天干在线综合| 蜜桃一区二区三区在线观看| 色综合久久88色综合天天| 久久久国际精品| 蜜桃视频在线观看一区| 色噜噜夜夜夜综合网| 国产精品蜜臀在线观看| 国产福利一区二区三区| 日韩欧美国产电影| 日韩在线观看一区二区| 欧美午夜精品一区二区蜜桃| 国产日产精品一区| 国产精品一区二区91| 26uuu久久天堂性欧美| 秋霞电影网一区二区| 欧美在线观看你懂的| 一区二区三区在线播放| 94-欧美-setu| 中文字幕一区二区不卡| 国产xxx精品视频大全| 国产网站一区二区| 国产精品白丝jk白祙喷水网站| 欧美tk—视频vk| 美女网站色91| 欧美大片一区二区| 另类小说一区二区三区| 日韩欧美中文字幕一区| 麻豆成人综合网| 国产性天天综合网| 高清不卡一区二区| 国产精品久久久久一区二区三区| 国产成人免费在线观看不卡| 久久欧美中文字幕|