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

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

?? chatroom.c

?? 最新主流石器時代源代碼,包含諸多目前流行功能代碼.
?? C
?? 第 1 頁 / 共 3 頁
字號:
#include "version.h"
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include "readmap.h"
#include "object.h"
#include "char.h"
#include "char_base.h"
#include "chatmagic.h"
#include "battle.h"
#include "log.h"
#include "configfile.h"
#include "lssproto_serv.h"
#include "saacproto_cli.h"
#include "family.h"
#include "chatroom.h"
#include "net.h"
#include "util.h"
#ifdef _CHATROOMPROTOCOL			// (不可開) Syu ADD 聊天室頻道



#ifdef _UNIVERSE_CHATROOM

UniChatRoomlist ChatRoom[MAX_CHATROOM];
BOOL ChatCheck_BeMaster( int myindex, int chatnum)
{
	if( !CHAR_CHECKINDEX ( myindex ) ) 
		return FALSE;

	if( CHAR_getWorkInt ( myindex , CHAR_WORKCHATROOMNUM ) == 0 ) return FALSE;

	if( chatnum != -1 ){
		if( CHAR_getWorkInt ( myindex , CHAR_WORKCHATROOMNUM ) != chatnum )
			return FALSE;
	}
	if( CHAR_getWorkInt ( myindex , CHAR_WORKCHATROOMTYPE ) == 1 ) return TRUE;

	return FALSE;
}

BOOL ChatCheck_Free( int myindex)
{
	int old_gold;
	if ( !CHAR_CHECKINDEX ( myindex ) ) 
		return FALSE;
	old_gold = CHAR_getInt( myindex, CHAR_GOLD );
	if( old_gold < 200 ){
		CHAR_talkToCli ( myindex , -1 , "成立聊天室需花費200石幣" , CHAR_COLORYELLOW ); 
		return FALSE;
	}
	if ( CHAR_getInt ( myindex , CHAR_LV ) < 30 &&
		CHAR_getInt ( myindex , CHAR_TRANSMIGRATION ) < 1 ) {
		CHAR_talkToCli ( myindex , -1 , "成立聊天室需0轉30級以上!" , CHAR_COLORYELLOW );
		return FALSE;
	}
	if ( CHAR_getWorkInt ( myindex , CHAR_WORKCHATROOMTYPE ) != 0 ) {
		CHAR_talkToCli ( myindex , -1 , "你已經在其他聊天室中!" , CHAR_COLORYELLOW );
		return FALSE;
	}
	return TRUE;
}

void resetChat_users( int chat, int ti)
{
	if( chat<0 || chat >= MAX_CHATROOM ) return;
	if( ti<0 || ti >= MAX_PPLINROOM ) return;
	memset( ChatRoom[chat].charalist[ti].cdkey, 0, sizeof(ChatRoom[chat].charalist[ti].cdkey));
	memset( ChatRoom[chat].charalist[ti].name, 0, sizeof(ChatRoom[chat].charalist[ti].name));
	memset( ChatRoom[chat].charalist[ti].own, 0, sizeof(ChatRoom[chat].charalist[ti].own));
}

void InitChatRoom( void )
{
	int i, j;
	for ( i = 0 ; i < MAX_CHATROOM ; i ++ ) {
		ChatRoom[ i ].use=0; 
		ChatRoom[ i ].masindex= -1; 
		ChatRoom[ i ].charanum= 0; 
 		for ( j = 0 ; j < MAX_PPLINROOM ; j ++ )
			resetChat_users( i, j);
	}
}

int ChatRoom_getfree( void)
{
	int i;
	for ( i=0; i<MAX_CHATROOM; i++) {
		if( ChatRoom[ i ].use !=0 ) continue;
		return i;
	}
	return -1;
}

void ChatRoom_Refresh ( int Num )
{
	int fd , i, j; 
	char token[4096];
	char token2[4096];
	char buf[64];
	int playernum = CHAR_getPlayerMaxNum();
	if( ChatRoom[ Num ].use == FALSE ) return;
	if( ChatRoom[Num].masindex<0 || ChatRoom[Num].masindex>MAX_PPLINROOM ) return;

	sprintf ( token , "R|r%d|%s|%d|%s|p%d|" , 
		Num, ChatRoom[ Num ].chatname, ChatRoom[ Num ].masindex,
		ChatRoom[Num].charalist[ChatRoom[Num].masindex].name, ChatRoom[ Num ].charanum  );

	for ( i = 0 ; i < MAX_PPLINROOM ; i ++ ) {
		if ( ChatRoom[ Num ].charalist[i].use == 0 ) continue;
		sprintf( buf , "I%d|%s|%s|" , 
			i, ChatRoom[Num].charalist[i].name, ChatRoom[Num].charalist[i].own	);
		strncat ( token , buf , sizeof ( buf ) ) ; 
	}

	for ( j=0; j<playernum; j++) {
		if( !CHAR_getCharUse( j) ||
			CHAR_getInt( j, CHAR_WHICHTYPE)  != CHAR_TYPEPLAYER ) continue;
		if( CHAR_getWorkInt ( j, CHAR_WORKCHATROOMNUM) != Num ) continue;
		if( CHAR_getWorkInt( j, CHAR_WORKCHATROOMTYPE) == 0 ) continue;
//		if( !strcmp( ChatRoom[Num].charalist[ChatRoom[Num].masindex].cdkey, CHAR_getChar( j, CHAR_CDKEY)) &&
//			!strcmp( ChatRoom[Num].charalist[ChatRoom[Num].masindex].name, CHAR_getChar( j, CHAR_NAME)) ){
			fd=getfdFromCharaIndex ( j);
			sprintf ( token2, "%s%d|", token, CHAR_getWorkInt( j, CHAR_WORKCHATROOMTYPE));
			lssproto_CHATROOM_send ( fd , token2 ) ; 
//			break;
//		}
	}
}

void ChatRoom_List ( int fd )
{
	int i; 
	char buf[256];
	char token[2048] = "B|";
	for( i=0; i<MAX_CHATROOM; i++) {
		if( ChatRoom[ i ].use == 0 ) continue;
		sprintf( buf, "r%d|%s|%d|%s|p%d|", 
			i , ChatRoom[ i ].chatname, 
			ChatRoom[ i ].masindex , 
			ChatRoom[ i ].charalist[ChatRoom[ i ].masindex].name,
			ChatRoom[ i ].charanum );
		strncat ( token , buf , sizeof ( buf ) ) ; 

	}
	lssproto_CHATROOM_send( fd, token); 
}

void ChatRoom_Leave( int charaindex)
{
	int i, ti=-1, chat, fd;
	char token[1024];
	fd = getfdFromCharaIndex( charaindex);

	if( (chat = CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMNUM)) < 0 ) return;
	CHAR_setWorkInt( charaindex, CHAR_WORKCHATROOMNUM, -1);
	if( CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMTYPE) == 0 ) return;
	CHAR_setWorkInt( charaindex, CHAR_WORKCHATROOMTYPE, 0);

	for( i=0; i<MAX_PPLINROOM; i++){
		if( ChatRoom[chat].charalist[i].use == 0 ) continue;
		if( !strcmp( ChatRoom[chat].charalist[i].cdkey, CHAR_getChar(charaindex, CHAR_CDKEY)) &&
			!strcmp( ChatRoom[chat].charalist[i].name, CHAR_getChar(charaindex, CHAR_NAME)) ){
			ti = i;
			break;
		}
	}
	if( ti == -1 ) return;
	snprintf( token, sizeof( token),"L|%d|%d|", chat, ti );
	fd = getfdFromCharaIndex( charaindex);
	saacproto_ACUniChatroom_send( acfd, charaindex, CONNECT_getFdid(fd),
			   CHAR_getChar( charaindex, CHAR_CDKEY), token);

}

void ChatRoom_Destroy ( char *data)
{
	char buf[256];
	int chat, j, fd;
	int playernum = CHAR_getPlayerMaxNum();
	if( getStringFromIndexWithDelim( data , "|", 2, buf, sizeof( buf)) == FALSE ) return;
	chat = atoi( buf);
	if( chat < 0 || chat >= MAX_CHATROOM ) return;

	sprintf ( buf , "D|%d", chat);
	for ( j=0; j<playernum; j++) {
		if( !CHAR_getCharUse( j) ||
			CHAR_getInt( j, CHAR_WHICHTYPE)  != CHAR_TYPEPLAYER ) continue;
		if( CHAR_getWorkInt ( j, CHAR_WORKCHATROOMNUM) != chat ) continue;
		fd = getfdFromCharaIndex( j);
		lssproto_CHATROOM_send ( fd, buf);
		CHAR_setWorkInt ( j, CHAR_WORKCHATROOMTYPE, 0) ; 
		CHAR_setWorkInt ( j, CHAR_WORKCHATROOMNUM, -1) ; 
	}
	ChatRoom[ chat].use=0;
	ChatRoom[ chat].masindex= -1; 
	ChatRoom[ chat].charanum= 0; 
 	for ( j = 0 ; j < MAX_PPLINROOM ; j ++ )
		resetChat_users( chat, j);

}

//saacproto_ACUniChatroom_recv
void ChatRoom_recvall ( int fd , char *data )
{ 
	char Head[4];
	char token[1024];
	char buf[256];
	int charaindex;

	charaindex = CONNECT_getCharaindex(fd);
	if ( !CHAR_CHECKINDEX ( charaindex ) )return ;

	getStringFromIndexWithDelim( data , "|", 1, Head, sizeof(Head));

	//andy_log
	print( "CR:%s.\n", data);
	if ( strcmp ( Head , "C" ) == 0 ) { // 成立頻道
		char chatname[256];
		if( ChatCheck_Free( charaindex) == FALSE ) return;
		if( getStringFromIndexWithDelim( data , "|", 2, chatname, sizeof(chatname)) == FALSE ) return;
		if( strlen( chatname) >= 32 ) return;
		snprintf( token, sizeof( token),"C|%s|%s|%s|%s|",
			chatname, CHAR_getChar( charaindex, CHAR_CDKEY),
			CHAR_getChar( charaindex, CHAR_NAME),
			CHAR_getChar( charaindex, CHAR_OWNTITLE)
		);
	}else if ( strcmp ( Head , "D" ) == 0 ) { // 刪除頻道
		int chat;

		if( CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMTYPE) != 1 ) return;
		if( (chat = CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMNUM)) < 0 ) return;
		if( chat >= MAX_CHATROOM ) return;
		snprintf( token, sizeof( token),"D|%d|%s|%s|",
			chat, CHAR_getChar( charaindex, CHAR_CDKEY),
			CHAR_getChar( charaindex, CHAR_NAME)
		);
		//ChatRoom_Destroy( myindex);
/*
	}else if ( strcmp ( Head, "A") == 0 ) {// 同意加入頻道
		getStringFromIndexWithDelim( data , "|", 2, message, sizeof(message));
		getStringFromIndexWithDelim( data , "|", 3, buf, sizeof(buf));
		ChatRoom_Agree ( myindex , atoi( message ) , atoi( buf ) ) ;
*/
	}else if ( strcmp( Head , "J") == 0 ) {//加入頻道
		int chat;
		if( getStringFromIndexWithDelim( data , "|", 2, buf, sizeof(buf)) == FALSE ) return;
		chat = atoi( buf);
		if( chat < 0 || chat >= MAX_CHATROOM ) return;
		snprintf( token, sizeof( token),"J|%d|%s|%s|%s|",
			chat, CHAR_getChar( charaindex, CHAR_CDKEY),
			CHAR_getChar( charaindex, CHAR_NAME),
			CHAR_getChar( charaindex, CHAR_OWNTITLE)
		);
//		ChatRoom_Join ( myindex , atoi( message ) ) ;
	}else if ( strcmp( Head , "L") == 0 ) {// 離開頻道
		ChatRoom_Leave( charaindex);
		return;
	}else if ( strcmp ( Head , "K" ) == 0 ) {//踢出頻道
		int ti, chat;
		if( getStringFromIndexWithDelim( data , "|", 2, buf, sizeof( buf)) == FALSE ) return;
		ti = atoi( buf);
		if( ti<0 || ti>=MAX_PPLINROOM ) return;
		if( CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMTYPE) != 1 ) return;
		if( (chat = CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMNUM)) < 0 ) return;

		if( chat >= MAX_CHATROOM ) return;
		snprintf( token, sizeof( token),"K|%d|%s|%s|%d|",
			chat,
			CHAR_getChar( charaindex, CHAR_CDKEY),
			CHAR_getChar( charaindex, CHAR_NAME),
			ti );

//		ChatRoom_Kick ( myindex , atoi( message ) ); 
	}else if ( strcmp ( Head , "M" ) == 0 ) { // 更換室長
		int ti, chat;
		if( getStringFromIndexWithDelim( data , "|", 2, buf, sizeof(buf)) == FALSE ) return;
		ti = atoi( buf);
		if( CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMTYPE) != 1 ) return;
		if( (chat = CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMNUM)) < 0 ) return;
		if( chat >= MAX_CHATROOM ) return;
		if( ChatRoom[chat].charalist[ti].use == 0 ) return;
		snprintf( token, sizeof( token),"M|%d|%s|%s|%d|",
			chat,
			CHAR_getChar( charaindex, CHAR_CDKEY),
			CHAR_getChar( charaindex, CHAR_NAME),
			ti );
//		ChatRoom_Make ( myindex , atoi( message ) ); 
	}else if ( strcmp ( Head , "T" ) == 0 ) {// 頻道訊息
		int chat;
		if( getStringFromIndexWithDelim( data , "|", 2, buf, sizeof(buf)) == FALSE ) return;
		if( CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMTYPE) == 0 ) return;
		if( (chat = CHAR_getWorkInt( charaindex, CHAR_WORKCHATROOMNUM)) < 0 ) return;
		if( chat >= MAX_CHATROOM ) return;
		snprintf( token, sizeof( token),"T|%d|%s|",	chat, buf);
		
//		ChatRoom_Message ( myindex , message ) ; 
	}else if ( strcmp ( Head , "B" ) == 0 ) {// 聊天室清單
		ChatRoom_List ( fd );
		return;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日韩电影| 亚洲大型综合色站| 日韩区在线观看| 日韩亚洲电影在线| 欧美高清性hdvideosex| 欧美日本高清视频在线观看| 欧美视频在线一区| 欧美情侣在线播放| 日韩亚洲电影在线| 久久先锋资源网| 日本一区免费视频| 亚洲女子a中天字幕| 亚洲成人777| 久久精品免费看| 国产精品66部| 91一区在线观看| 欧美午夜在线一二页| 欧美一级生活片| 久久久久久电影| 亚洲日本欧美天堂| 天天操天天干天天综合网| 日本大胆欧美人术艺术动态 | 91麻豆精品一区二区三区| 99re66热这里只有精品3直播| 一本到三区不卡视频| 欧美剧情电影在线观看完整版免费励志电影 | 91成人免费在线| 在线播放中文一区| 久久久国际精品| 亚洲综合偷拍欧美一区色| 蜜桃一区二区三区在线| 成人午夜短视频| 欧美日韩一区在线观看| wwwwww.欧美系列| 18涩涩午夜精品.www| 日韩和欧美的一区| 岛国av在线一区| 欧美日韩亚洲另类| 国产精品欧美极品| 玖玖九九国产精品| 一本一本大道香蕉久在线精品 | 国产欧美日韩另类视频免费观看| 中文字幕字幕中文在线中不卡视频| 亚洲高清中文字幕| 不卡的电视剧免费网站有什么| 欧美妇女性影城| 亚洲素人一区二区| 激情偷乱视频一区二区三区| 欧美在线一二三| 欧美国产视频在线| 捆绑紧缚一区二区三区视频| 91污在线观看| 国产精品视频观看| 久久精品国产一区二区三区免费看| 色素色在线综合| 国产精品色一区二区三区| 蜜乳av一区二区三区| 欧美在线不卡一区| 亚洲欧美日韩人成在线播放| 国产传媒久久文化传媒| 精品国内片67194| 蜜臀av一区二区在线观看 | 日本欧美一区二区三区| 91免费国产在线| 国产精品久久久久影院老司| 国内欧美视频一区二区 | 国产精品99久久不卡二区| 日韩色在线观看| 日日夜夜精品视频免费| 欧美日韩高清一区二区| 一区二区三区产品免费精品久久75| 成人av在线一区二区| 国产精品色呦呦| www.日韩在线| 亚洲精品国产视频| 91久久精品一区二区三区| 中文字幕一区二区三区不卡在线| 国产91综合一区在线观看| 久久久蜜臀国产一区二区| 国内外成人在线| 久久久亚洲精华液精华液精华液| 国产一区二区三区最好精华液| 欧美成人精品1314www| 精东粉嫩av免费一区二区三区| 欧美一二三区精品| 国产一区福利在线| 久久精品夜夜夜夜久久| 成人黄动漫网站免费app| 成人欧美一区二区三区在线播放| 91免费国产视频网站| 亚洲成人免费在线观看| 日韩欧美一级精品久久| 国产一区二区三区在线观看免费视频| 久久先锋影音av鲁色资源网| 岛国精品一区二区| 亚洲一区二区三区免费视频| 7777精品伊人久久久大香线蕉的| 日本va欧美va欧美va精品| 欧美精品一区二| 97se狠狠狠综合亚洲狠狠| 午夜精品aaa| 久久久精品2019中文字幕之3| av一本久道久久综合久久鬼色| 一区二区免费看| 日韩欧美国产一区在线观看| 不卡视频一二三| 日韩高清一区在线| 中文在线资源观看网站视频免费不卡| 色综合天天做天天爱| 亚洲成av人影院| 欧美激情一区二区三区四区| 91天堂素人约啪| 精品无人区卡一卡二卡三乱码免费卡| 国产精品久久久久久久蜜臀| 欧美伦理电影网| 国产91精品免费| 日韩中文字幕1| 中文字幕欧美一| ww亚洲ww在线观看国产| 欧美亚洲综合久久| 国产成人av电影在线播放| 日韩电影免费一区| 亚洲麻豆国产自偷在线| 欧美精品一区二区在线播放| 欧美日韩精品是欧美日韩精品| 国产成人精品www牛牛影视| 丝袜亚洲另类丝袜在线| 亚洲欧美日韩国产手机在线| 久久久.com| 精品欧美久久久| 欧美日韩国产一级片| 色综合天天视频在线观看| 国产一区二区三区电影在线观看| 亚洲第一综合色| 亚洲综合免费观看高清在线观看| 国产精品五月天| 久久免费国产精品| 欧美一区二区三区小说| 欧美综合天天夜夜久久| 91首页免费视频| 99精品久久99久久久久| 国产成人免费高清| 国产福利精品一区| 国产成人精品www牛牛影视| 久久99精品一区二区三区| 日本三级韩国三级欧美三级| 午夜成人免费电影| 石原莉奈在线亚洲二区| 夜夜嗨av一区二区三区网页| 一区二区三区欧美日| 亚洲自拍偷拍网站| 亚洲综合在线五月| 亚洲最色的网站| 亚洲高清免费一级二级三级| 亚洲一区二区三区精品在线| 亚洲午夜在线电影| 五月综合激情网| 麻豆视频观看网址久久| 激情欧美一区二区三区在线观看| 麻豆成人综合网| 国产一区二三区| a亚洲天堂av| 色成年激情久久综合| 欧美日韩日日夜夜| 日韩欧美亚洲一区二区| 2020国产精品久久精品美国| 久久久.com| 亚洲免费在线播放| 日韩精品亚洲一区二区三区免费| 日韩av电影免费观看高清完整版| 日本大胆欧美人术艺术动态| 国产一区二区在线影院| www.欧美精品一二区| 欧美三级中文字幕在线观看| 欧美一区二区成人| xf在线a精品一区二区视频网站| 中文字幕欧美激情一区| 一区二区三区成人| 久久99久国产精品黄毛片色诱| 国产一区美女在线| 色香蕉成人二区免费| 91精品国产综合久久香蕉的特点| 欧美tickling网站挠脚心| 国产精品视频第一区| 性欧美疯狂xxxxbbbb| 国产精品456| 欧美日韩国产天堂| 中文在线免费一区三区高中清不卡| 一区二区在线观看视频在线观看| 人人狠狠综合久久亚洲| 成人av资源在线| 日韩一卡二卡三卡国产欧美| 国产精品的网站| 蜜臀av一区二区在线免费观看 | 蜜臀av一区二区三区| 99精品视频在线免费观看| 日韩一级高清毛片| 亚洲精品成人悠悠色影视| 久久草av在线| 欧美日韩免费观看一区二区三区|