⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 callfromac.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 4 页
字号:
			return;		}else {			if( atoi(data1) < 0 )	{				CHAR_setInt( charaindex, CHAR_GOLD, CHAR_getInt( charaindex, CHAR_GOLD ) -atoi(data1) );				CHAR_send_P_StatusString( charaindex , CHAR_P_STRING_GOLD);			}#ifdef _FAMILYBANKSTONELOG			CHAR_setInt(charaindex,CHAR_FMBANKGOLD,CHAR_getInt(charaindex,CHAR_FMBANKGOLD)+intdata);			LogFamilyBankStone(				CHAR_getChar( charaindex, CHAR_NAME ),				CHAR_getChar( charaindex, CHAR_CDKEY ),				intdata,				CHAR_getInt( charaindex, CHAR_GOLD ),				(intdata>0)?"FMBank(存款)(家族银行)":"FMBank(取款)(家族银行)",				CHAR_getInt( charaindex,CHAR_FLOOR),				CHAR_getInt( charaindex,CHAR_X ),				CHAR_getInt( charaindex,CHAR_Y ),				CHAR_getInt( charaindex,CHAR_FMBANKGOLD)				);#else			LogStone(				atoi(data2),				CHAR_getChar( charaindex, CHAR_NAME ),				CHAR_getChar( charaindex, CHAR_CDKEY ),				-intdata,				CHAR_getInt( charaindex, CHAR_GOLD ),				"FMBank(家族银行)",				CHAR_getInt( charaindex,CHAR_FLOOR),				CHAR_getInt( charaindex,CHAR_X ),				CHAR_getInt( charaindex,CHAR_Y )				);#endif		}	}else if( kindflag == FM_FIX_FMLEADERCHANGE ){		ACFMJob( clifd, ret, data1, data2 );	}	// CoolFish: 2001/10/03	else if (kindflag == FM_FIX_FMADV || kindflag == FM_FIX_FMFEED		|| kindflag == FM_FIX_FMSYNTHESIZE || kindflag == FM_FIX_FMDEALFOOD)	{		char	tmpbuf[1024], flag[128];#ifdef _NEW_MANOR_LAW		int i;#endif		if (kindflag == FM_FIX_FMADV)	strcpy(flag, "ADV");		else if (kindflag == FM_FIX_FMFEED)	strcpy(flag, "FEED");		else if (kindflag == FM_FIX_FMSYNTHESIZE)	strcpy(flag, "SYN");		else if (kindflag == FM_FIX_FMDEALFOOD)	strcpy(flag, "FOOD");		sprintf(tmpbuf, "%s::%d %s %s", flag,			CHAR_getInt(charaindex, CHAR_FMINDEX),			CHAR_getChar(charaindex, CHAR_FMNAME), data1);		// print("ACFixFMData tmpbuf:%s\n", tmpbuf);		LogFMPOP(tmpbuf);#ifdef _NEW_MANOR_LAW		for(i=0;i<FAMILY_MAXNUM;i++){			// 家族索引			if(fmdptop.fmtopid[i] == CHAR_getWorkInt(charaindex,CHAR_WORKFMINDEXI)) break;		}		if(i < FAMILY_MAXNUM){			sprintf(tmpbuf, "MOMENTUM::%d %s %d",CHAR_getInt(charaindex,CHAR_FMINDEX),				CHAR_getChar(charaindex,CHAR_FMNAME),fmdptop.fmMomentum[i]);			LogFMPOP(tmpbuf);		}#endif	}}void saacproto_ACFixFMPK_recv(int fd, char *result, int data, int winindex,	int loseindex){	int ret;	if (strcmp(result, SUCCESSFUL) == 0)	ret = 1;	else    ret = 0;         //        print("FixFMPK_recv result:%s data:%d winindex:%d loseindex:%d\n", result, data, winindex, loseindex);        if (ret == 1)        {        	char	tmpbuf[256];        	ACFixFMPK(winindex, loseindex, data);        	sprintf(tmpbuf, "FMPK(家族PK)::win(优胜家族):%d lose(落败家族):%d point:%d", winindex, loseindex, data);		//print("FixFMPK tmpbuf:%s\n", tmpbuf);        	LogFMPOP(tmpbuf);        }}void saacproto_ACGMFixFMData_recv(int fd, char *result, char *fmname, int charfdid){	int ret;	int clifd = getfdFromFdid(charfdid);	char buf[256];	if( CONNECT_checkfd(clifd) == FALSE )return;		if (strcmp(result, SUCCESSFUL) == 0)	ret = 1;	else    ret = 0;                 print("GMFixFMData_recv result:%s\n", result);                if (ret == 1)        {           sprintf(buf, "修改%s资料OK!", fmname);           CHAR_talkToCli(CONNECT_getCharaindex(clifd) , -1, buf, CHAR_COLORWHITE);        }        else        {           sprintf(buf, "修改%s资料失败!", fmname);           CHAR_talkToCli(CONNECT_getCharaindex(clifd) , -1, buf, CHAR_COLORWHITE);        }}extern int familyTax[];void saacproto_ACGetFMData_recv(int fd, char *result, int kindflag, int data,	int charfdid){	int ret;	char buf[256];	int clifd = getfdFromFdid(charfdid);	if( CONNECT_checkfd(clifd) == FALSE )return;		if (strcmp(result, SUCCESSFUL) == 0)	ret = 1;	else    ret = 0;		//print(" FMBank2_%d_%d_%d ", ret, kindflag, data );	if( ret == 0 ) return;		if( kindflag == 1 ) {		int fmindex = CHAR_getWorkInt(CONNECT_getCharaindex(clifd), CHAR_WORKFMINDEXI);		if( fmindex < 0 || fmindex >= FAMILY_MAXNUM ){			print(" fmindex:%d if FALSE !!\n", fmindex);			return;		}		familyTax[ fmindex] = data;		sprintf( buf, "B|T|%d", data );		lssproto_FM_send( clifd, buf );	}		}void saacproto_ACFMClearPK_recv(int fd, char *result, char *fmname, int fmindex,        int index){	int ret, i = 0;		if (strcmp(result, SUCCESSFUL) == 0)	ret = 1;	else    ret = 0;	for (i = 0; i < MAX_SCHEDULEMAN * MAX_SCHEDULE; i++)	{	   {	      if (fmpks[i].flag == -1)	continue;	      if (fmpks[i].host_index == index	      	 || fmpks[i].guest_index == index)	      {	         fmpks[i].host_index = -1;	         strcpy(fmpks[i].host_name, "");	         fmpks[i].guest_index = -1;	         strcpy(fmpks[i].guest_name, "");	         fmpks[i].prepare_time = -1;	         fmpks[i].max_player = -1;	         fmpks[i].win = -1;	         fmpks[i].flag = -1;	      }	   }	}}#ifdef _ACFMPK_LISTvoid saacproto_ACSendFmPk_recv( int fd, int toindex, int flg){	char buf[256];	if( flg == 0){		sprintf( buf, "庄园挑战登录失败!!");		CHAR_talkToCli( toindex, -1, buf, CHAR_COLORRED);	}else{		sprintf( buf, "庄园挑战登录确认OK,请好好准备。");		CHAR_talkToCli( toindex, -1, buf, CHAR_COLORYELLOW);	}}void saacproto_ACLoadFmPk_recv(int fd, char *data){	char buf[10], fm_pk_data[128];	char token[256], skip[256];	int fm_pk_num , fmpks_pos=-1;		easyGetTokenFromString( data , 1 , buf , sizeof(buf));	fm_pk_num = atoi(buf);	sprintf(fm_pk_data , "%s", data+2 );		if( ((fmpks_pos=fm_pk_num*MAX_SCHEDULE)== -1) || (fm_pk_num > FMPOINTNUM) ){				print("\n err fm_pk_num(%d)", fm_pk_num );		return;	}	// 时间	if (getStringFromIndexWithDelim(data,"|",2,token,sizeof(token))) {		fmpks[fmpks_pos+1].dueltime=atoi(token);	 }      	 // 主队 familyindex    	 if (getStringFromIndexWithDelim(data,"|",3,token,sizeof(token))) {                 		 fmpks[fmpks_pos+1].host_index=atoi(token);                	 }                	 // 主队 家族名                	 if (getStringFromIndexWithDelim(data,"|",4,token,sizeof(token))) {                  		 strcpy(fmpks[fmpks_pos+1].host_name,makeStringFromEscaped(token));                	 }                	 // 客队 familyindex                	 if (getStringFromIndexWithDelim(data,"|",5,token,sizeof(token))) {                  		 fmpks[fmpks_pos+1].guest_index=atoi(token);                	 }                	 // 客队 家族名                	 if (getStringFromIndexWithDelim(data,"|",6,token,sizeof(token))) {                  		 strcpy(fmpks[fmpks_pos+1].guest_name,makeStringFromEscaped(token));                	 }                	 // 准备时间                	 if (getStringFromIndexWithDelim(data,"|",7,token,sizeof(token))) {                  		 fmpks[fmpks_pos+1].prepare_time=atoi(token);                	 }                	 // 最大人数                	 if (getStringFromIndexWithDelim(data,"|",8,token,sizeof(token))) {		 int maxnum = atoi( token);		 if( maxnum < 50 ) maxnum = 50;		 fmpks[fmpks_pos+1].max_player = maxnum;	 }  	 // 旗标 			 if (getStringFromIndexWithDelim(data,"|",9,token,sizeof(token))) {	 		 fmpks[fmpks_pos+1].flag=atoi(token);	 }	 	 if( fmpks[fmpks_pos+1].flag == FMPKS_FLAG_MANOR_OTHERPLANET ){		 // 对战星球						 if (getStringFromIndexWithDelim(data,"|",10,token,sizeof(token))) {			 strcpy(fmpks[fmpks_pos+2].host_name,makeStringFromEscaped(token));			 strcpy(skip, makeStringFromEscaped(token));			 if (strcmp(getGameserverID(), skip)==0) {				 fmpks[fmpks_pos+1].flag=8;			 }else if( fmpks[fmpks_pos+1].flag == 8) {				 fmpks[fmpks_pos+1].flag=10;						 } 		 }	 }else{		 strcpy( fmpks[fmpks_pos+2].host_name, "");	 }}#endifvoid saacproto_ACManorPKAck_recv(int fd, char *data){  // 更新这个 server 的 庄园 pk scheduleman  int i;  char token[256], skip[256];  int char_max=CHAR_getCharNum();  print("ACManorPKAck_recv: %s\n",data);  for (i=0; i<char_max; i++) {    if (CHAR_getCharUse(i)) {      if (CHAR_getInt( i, CHAR_WHICHTYPE )==CHAR_TYPEMANORSCHEDULEMAN) {        if (getStringFromIndexWithDelim(data,"|",1,token,sizeof(token))) {          if (CHAR_getWorkInt(i, CHAR_NPCWORKINT2)==atoi(token)) {	// manor id            int fmpks_pos = CHAR_getWorkInt(i, CHAR_NPCWORKINT1)*MAX_SCHEDULE;            // 对战星球            if (getStringFromIndexWithDelim(data,"|",10,token,sizeof(token))) {              strcpy(skip, makeStringFromEscaped(token));              print("ACManorPKAck: %d %s\n", fmpks_pos, skip);                            if (strcmp(getGameserverID(), skip)!=0) {                strcpy(fmpks[fmpks_pos+2].host_name, skip);                                // 时间                if (getStringFromIndexWithDelim(data,"|",2,token,sizeof(token))) {                  fmpks[fmpks_pos+1].dueltime=atoi(token);                }                // 主队 familyindex                if (getStringFromIndexWithDelim(data,"|",3,token,sizeof(token))) {                  fmpks[fmpks_pos+1].host_index=atoi(token);                }                // 主队 家族名                if (getStringFromIndexWithDelim(data,"|",4,token,sizeof(token))) {                  strcpy(fmpks[fmpks_pos+1].host_name,makeStringFromEscaped(token));                }                // 客队 familyindex                if (getStringFromIndexWithDelim(data,"|",5,token,sizeof(token))) {                  fmpks[fmpks_pos+1].guest_index=atoi(token);                }                // 客队 家族名                if (getStringFromIndexWithDelim(data,"|",6,token,sizeof(token))) {                  strcpy(fmpks[fmpks_pos+1].guest_name,makeStringFromEscaped(token));                }                // 准备时间                if (getStringFromIndexWithDelim(data,"|",7,token,sizeof(token))) {                  fmpks[fmpks_pos+1].prepare_time=atoi(token);                }                // 最大人数                if (getStringFromIndexWithDelim(data,"|",8,token,sizeof(token))) {                  fmpks[fmpks_pos+1].max_player=atoi(token);                }                // 旗标                if (getStringFromIndexWithDelim(data,"|",9,token,sizeof(token))) {                  fmpks[fmpks_pos+1].flag=atoi(token);                }                // 对战星球                if (getStringFromIndexWithDelim(data,"|",10,token,sizeof(token))) {                  strcpy(fmpks[fmpks_pos+2].host_name,makeStringFromEscaped(token));                }              }            }          }        }      }    }  }}#ifdef _NEW_PLAYERGOLDvoid saacproto_ACNEWPlayerList_recv( int fd, char *CdKey, char *UserName, int charaindex, int RunType){	char buf[256];	if( !CHAR_CHECKINDEX( charaindex)){		return;	}	switch( RunType){	case NEW_ERR: //无法预期的错误!		CHAR_talkToCli( charaindex, -1, "无法预期的错误!", CHAR_COLORYELLOW);		break;	case NEW_DELOK://新帐号人物删除完成!		sprintf( buf,"新帐号人物[%s]确认完成!", CdKey);		CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);		if( CHAR_getInt( charaindex, CHAR_GOLD) >= 990000 ){			sprintf( buf,"帐号人物[%s]持有石币将超过100万,取消领取资格!", CdKey);			CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);		}else{			NPC_ActionAddGold( charaindex, 10000);		}		break;	case NEW_DELERR: //新帐号人物删除发生错误!		CHAR_talkToCli( charaindex, -1, "此帐号人物无法领取石币!", CHAR_COLORYELLOW);		break;	case NEW_ADDOK:		sprintf( buf,"新帐号人物[%s]增加完成!", CdKey);		CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);		break;	case NEW_ADDERR:		sprintf( buf,"新帐号人物[%s]增加发生错误!", CdKey);		CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);		break;	case NEW_LISTFULL:		CHAR_talkToCli( charaindex, -1, "新帐号人物列表已满!", CHAR_COLORYELLOW);		break;	}}#endif#ifdef _NEW_PLAYERGOLDvoid saacproto_LoadNEWPlayer_recv(int fd , int charaindex, char *data){	CHAR_talkToCli( charaindex, -1, data, CHAR_COLORYELLOW);}#endif#ifdef _WAEI_KICKvoid saacproto_ACKick_recv(int fd , int act, char* data ,int retfd){    int clifd = getfdFromFdid(retfd);    //char cdkey[CDKEYLEN];    int cindex = getCharindexFromFdid(retfd);		print("状态:%s \n", data);	switch( act)	{	case 0:	//FAIL		if( CONNECT_checkfd(clifd) == FALSE) return;		CHAR_talkToCli( cindex, -1, data, CHAR_COLORYELLOW);			break;	case 1:	//跨星球踢人		{			char cdkey[256];			char szName[256];			int i, MAX_USER=0;			BOOL find=FALSE;						print(" SAAC踢人:%s ", data);			MAX_USER=getFdnum();			for(i=0;i<MAX_USER;i++){				int i_use;				i_use=CONNECT_getUse(i);				if(i_use){					CONNECT_getCdkey( i, cdkey, sizeof( cdkey ));					if( !strcmp( cdkey, data) ){						int fd_charaindex = CONNECT_getCharaindex( i );						CONNECT_getCharname( i, szName, sizeof( szName ) );						if( retfd == -1 ){							print(" 因重复登入 ");							CHAR_talkToCli( fd_charaindex, -1, "因重复帐号登入而断线!",								CHAR_COLORYELLOW);						}#ifdef _CHANGEGALAXY						else if( retfd == -2 ){ // Robin add							print(" 因准备移民:%d->%s ", fd_charaindex, cdkey);							CHAR_talkToCli( fd_charaindex, -1, "因准备移民而断线!",								CHAR_COLORYELLOW);						}#endif#ifdef _TIMEOUTKICK						else if( retfd == -3 ){ // Robin add							print(" 因WGS点数不足:%d->%s ", fd_charaindex, cdkey);							CHAR_talkToCli( fd_charaindex, -1, "您的WGS点数不足!",								CHAR_COLORYELLOW);						}#endif						else{							print(" 因做坏事 ");							CHAR_talkToCli(fd_charaindex, -1, "因做坏事而断线。",								CHAR_COLORYELLOW);						}						CONNECT_setCloseRequest( i , 1 );						find=TRUE;					}				}			}						if( find == TRUE && retfd != -1 && CHAR_CHECKINDEX( cindex) )	{				char buf1[256];//, buf2[256];				sprintf(buf1,"系统将[%s]逐出伺服器。", /*CHAR_getChar( cindex, CHAR_NAME),*/ szName);				for( i=0; i<MAX_USER; i++){					if( CONNECT_getUse(i) )	{						int fd_charaindex = CONNECT_getCharaindex( i);						if( !CHAR_CHECKINDEX( fd_charaindex) ) continue;						CHAR_talkToCli( fd_charaindex, -1, buf1, CHAR_COLORYELLOW);						//						CHAR_talkToCli(fd_charaindex, -1, buf2, CHAR_COLORYELLOW);					}				}			} 		}		break;	case 2:		print("\n CASE 2");		break;	}}#endif#ifdef _CHAR_POOLITEMvoid saacproto_ACCharSavePoolItem_recv(int fd ,char* result, char* data,int retfd){	int charaindex = getCharindexFromFdid( retfd);	//print("\n ACCharSavePoolItem_recv:%s ", data);	if( !CHAR_CHECKINDEX(charaindex) ) return;	if( strstr( result, FAILED ) != NULL ){		CHAR_talkToCli( charaindex, -1, "道具仓库资料存档失败!", CHAR_COLORYELLOW);		return;	}}void saacproto_ACCharGetPoolItem_recv(int fd ,char* result, char* data,int retfd, int meindex) {	Char*   ch = NULL;	int i, clifd, charaindex;	//print("\n ACCharGetPoolItem_recv:%s ", data);	if( strcmp( result , SUCCESSFUL ) != 0 ) return;	charaindex = getCharindexFromFdid(retfd);	if( !CHAR_CHECKINDEX( charaindex) ) return;	clifd = getfdFromCharaIndex( charaindex);	if( CHAR_CheckDepotItem( charaindex) ) return;//仓库已存在

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -