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

📄 acfamily.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
   	 || strcmp(family[*index].fmname, fmname) != 0)      {         log("CheckFM_3 [*index].fmindex:%d fmindex:%d [index].fmname:%s fmname:%s\n",         	family[*index].fmindex, fmindex, family[*index].fmname, fmname);         return -1;      }   }   if (*index == -1){      log ("CheckFM_4 index: -1 ? %d\n", *index);      return -1;   }   if(CheckFMUse(*index) == 0)   {	log ("CheckFM_5 index: -1 ? %d\n", *index);	return	-1;   }   if (family[*index].fmnum > MAX_MEMBERNUM || family[*index].fmjoinnum > MAX_MEMBERNUM)   {   	log ("CheckFM_6 fmnum: -1 ? %d\n", family[*index].fmnum);	return	-1;   }   return	0;}// 删除人数不足之家族或太久未上站之成员void delovertimeFMMem(int time){   int i = 0, j = 0, k = 0;   char data[150 * MAX_FAMILY];   extern gmsv gs[MAXCONNECTION];   for (i = 0 ; i <= fmindexmaxnum; i++){      if(CheckFMUse(i) == 0)         continue;		if ( ( (family[i].predel_time < time) && (family[i].predel_time != -1)		  && (family[i].fmsetupflag != 1)) || (family[i].fmjoinnum==0) ){			log("ACDelOverTimeFM fmindex:%d fmname:%s fmjoinnum:%d flag:%d \n",				family[i].fmindex, family[i].fmname,				family[i].fmjoinnum, family[i].fmsetupflag );			ACDelFM(i, family[i].fmname, family[i].fmindex);			// 传送家族已删除之讯息至各 GMSV			for (k = 0; k < MAXCONNECTION; k++){				if (gs[k].use && gs[k].name[0])					saacproto_ACFMAnnounce_send(k, SUCCESSFUL,						family[i].fmname, family[i].fmindex, i,						2, "", 0);			}                                                			db_familyupdate[i] = 1;			continue;		}      for (j = 1; j < family[i].fmmemberindexmaxnum; j++){         if (family[i].fmmemberindex[j].charflag == FMMEMBER_NONE)         	continue;         if ((family[i].fmmemberindex[j].predeltime < time)            && (family[i].fmmemberindex[j].predeltime != -1)){#ifdef _FMVER21            ACMemberLeaveFM(i, family[i].fmname, family[i].fmindex,            	family[i].fmmemberindex[j].charname, 0, j, 0);#else            ACMemberLeaveFM(i, family[i].fmname, family[i].fmindex,            	family[i].fmmemberindex[j].charname, 0, j);#endif                     db_familyupdate[i] = 1;			/*			// 通知族长有玩家已被删除			if (family[i].fmmemberindex[0].onlineflag > 0)			{				char buf[256];				sprintf(buf, "(%s)因太久未上线而离开您的家族了!目前家族人数:%4d人",					family[i].fmmemberindex[j].charname, family[i].fmjoinnum);				saacproto_ACFMAnnounce_send(family[i].fmmemberindex[0].onlineflag,					SUCCESSFUL, family[i].fmname, family[i].fmindex, i, 3, buf,					family[i].fmmemberindex[0].charfdid);			}			*/         } // if      } // for   } // for   if (db_familyupdate[i] == 1)   {      strcpy(data, "");      for (i = 0; i <= fmindexmaxnum; i++)      {         char msg[256];         if ((strcmp(family[i].fmname, "") != 0) && (family[i].fmindex != -1))         {#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望            sprintf(msg, "%d %s %s %d %d %d %d %d|", family[i].fmindex, family[i].fmname,               family[i].fmleadername, family[i].fmtotalfame, family[i].fmjoinnum, i,               family[i].fmsetupflag, family[i].fmacceptflag);#else            sprintf(msg, "%d %s %s %d %d %d %d %d|", family[i].fmindex, family[i].fmname,               family[i].fmleadername, family[i].fmpopular, family[i].fmjoinnum, i,               family[i].fmsetupflag, family[i].fmacceptflag);#endif            strcat(data, msg);         }      }      for (i = 0; i < MAXCONNECTION; i++)      {         if (gs[i].use && gs[i].name[0])            saacproto_ACShowFMList_send(i, SUCCESSFUL, fmnownum, data);      }   }}// 成立家族#ifdef _PERSONAL_FAMEint ACAddFM(int fd, int *workindex, char *fmname, char *fmleadername,	char *fmleaderid, int fmleaderlv, char *petname, char *petattr,	char *fmrule, int fmsprite, int fmleadergrano, int fame, int charfdid)#elseint ACAddFM(int fd, int *workindex, char *fmname, char *fmleadername,	char *fmleaderid, int fmleaderlv, char *petname, char *petattr,	char *fmrule, int fmsprite, int fmleadergrano, int charfdid)#endif{	int i = 0, index, fmindex;	time_t t1;	index = getblankindex();	if (index == -1) {   	return -1; // 家族数量已满	}	fmindex = getblankfmindex();	if (fmindex == -1){   	return -1; // 家族数量已满,无空的 fmindex	}	for (i = 0; i <= fmindexmaxnum; i++){   	if (strcmp(family[i].fmname, fmname) == 0)			return	-2; // 已有相同家族名称存在	}	*workindex = index;	family[index].fmindex = fmindex;	strcpy(family[index].fmname, fmname);	strcpy(family[index].fmleadername, fmleadername);	strcpy(family[index].fmleaderid, fmleaderid);	family[index].fmleadergrano = fmleadergrano;	strcpy(family[index].petname, petname);	strcpy(family[index].petattr, petattr);	family[index].fmnum = 1;	family[index].fmjoinnum = 1;	family[index].fmacceptflag = 1;	strcpy(family[index].fmrule, fmrule);	family[index].fmsprite = fmsprite;	family[index].fmpointindex = -1;	family[index].fmgold = 0;	family[index].fmmemberindexmaxnum = 1;	time(&t1);	family[index].apply_time = t1;	family[index].predel_time = t1 + PREDEL_TIME;	family[index].fmmemberindex[0].charlv = fmleaderlv;#ifdef _FMVER21	family[index].fmmemberindex[0].charflag = FMMEMBER_LEADER;	family[index].fmmemberindex[0].eventflag = 1;#else	family[index].fmmemberindex[0].charflag = 1;#endif	family[index].fmmemberindex[0].onlineflag = fd;	strcpy(family[index].fmmemberindex[0].charid, fmleaderid);   	strcpy(family[index].fmmemberindex[0].charname, fmleadername);	family[index].fmmemberindex[0].charfdid = charfdid;	family[index].fmmemberindex[0].predeltime = -1;	family[index].memonowwritenum = 0;	family[index].memonum = 0;	family[index].fmpopular = 0;	family[index].fmadv = 0;	family[index].fmfeed = 0;	family[index].fmsynthesize = 0;	family[index].fmdealfood = 0;	family[index].fmpk = 0;#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望	family[index].fmmemberindex[0].popular = fame;	family[index].fmtotalfame = fame;#endif#ifdef _NEW_MANOR_LAW	family[index].fmmomentum = 0;#endif		db_familyupdate[index] = 1;	fmnownum++;	if (fmindexmaxnum <= index)	fmindexmaxnum = index + 1;	log("AddFM fmindexmaxnum:%d fmnownum:%d\n", fmindexmaxnum, fmnownum);		AddFMMaintainSort(index);		return fmindex;}// 加入家族#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望int ACJoinFM(int fd, int index, char *fmname, int fmindex,	char *charname, char *charid, int charlv, int fame, int charfdid)#elseint ACJoinFM(int fd, int index, char *fmname, int fmindex,	char *charname, char *charid, int charlv, int charfdid)#endif{	int i = 0;	time_t t1;	if (CheckFM(&index, fmname, fmindex) < 0)	return -1;	if (family[index].fmacceptflag == 0)	return	-2;	if (family[index].fmnum >= MAX_MEMBERNUM || family[index].fmjoinnum >= MAX_MEMBERNUM)   	return	-3;		// 防止族长加入自己的家族  code:shan	if ((strcmp(family[index].fmmemberindex[0].charname, charname) == 0)		&& (strcmp(family[index].fmmemberindex[0].charid, charid) == 0))		return -1;		for (i = 1; i < MAX_MEMBERNUM; i++){		if ((strcmp(family[index].fmmemberindex[i].charname, "") == 0)			&& (strcmp(family[index].fmmemberindex[i].charid, "") == 0)){			strcpy(family[index].fmmemberindex[i].charname, charname);			strcpy(family[index].fmmemberindex[i].charid, charid);			family[index].fmmemberindex[i].charlv = charlv;#ifdef _FMVER21			family[index].fmmemberindex[i].charflag = FMMEMBER_APPLY;			family[index].fmmemberindex[i].eventflag = 0;#else			family[index].fmmemberindex[i].charflag = 2;#endif			family[index].fmmemberindex[i].onlineflag = fd;			family[index].fmmemberindex[i].charfdid = charfdid;			time(&t1);			family[index].fmmemberindex[i].predeltime = t1 + PREDEL_TIME;#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望			family[index].fmmemberindex[i].popular = fame;			log("fame:%d\n", fame);			// 这个时候还不可以把这个人的声望加到家族#endif#ifdef _NEW_MANOR_LAW			family[index].fmmemberindex[i].momentum = 0;#endif			family[index].fmnum = family[index].fmnum + 1;			if (family[index].fmmemberindexmaxnum <= i) family[index].fmmemberindexmaxnum = i + 1;			db_familyupdate[index] = 1;#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望			// 更新玩家资料			saacproto_ACFMCharLogin_send(				family[index].fmmemberindex[i].onlineflag,				SUCCESSFUL, index,ACgetFMFloor(fmindex), family[index].fmtotalfame,				family[index].fmmemberindex[i].charflag,				family[index].fmsetupflag, 1, i,				family[index].fmmemberindex[i].popular,	// Arminius 9.11				family[index].fmmemberindex[i].charfdid#ifdef _NEW_MANOR_LAW				,family[index].fmmemberindex[i].momentum#endif				);#else			saacproto_ACFMCharLogin_send(				family[index].fmmemberindex[i].onlineflag,				SUCCESSFUL, index,ACgetFMFloor(fmindex),family[index].fmpopular,				family[index].fmmemberindex[i].charflag,				family[index].fmsetupflag, 1, i,				family[index].fmmemberindex[i].charfdid);#endif			// 通知族长有玩家愿意加入			if (family[index].fmmemberindex[0].onlineflag > 0){				char buf[256];				sprintf(buf, "(%s lv:%d)正要求加入您的家族喔!目前家族人数:%4d人",					charname, charlv, family[index].fmjoinnum);				saacproto_ACFMAnnounce_send(family[index].fmmemberindex[0].onlineflag,					SUCCESSFUL, fmname, fmindex, index, 3, buf,					family[index].fmmemberindex[0].charfdid);			}			return 0;		}	}	return -1;}// 离开家族int ACLeaveFM(int index, char *fmname, int fmindex,	char *charname, char* charid){	int i = 0;	if (CheckFM(&index, fmname, fmindex) < 0)	return -1;		for (i = 1; i < family[index].fmmemberindexmaxnum; i++)	{   	if ((strcmp(family[index].fmmemberindex[i].charname, charname) == 0)			&& (strcmp(family[index].fmmemberindex[i].charid, charid) == 0))   	{#ifdef _FMVER21			ACMemberLeaveFM(index, fmname, fmindex, charname, 0, i, 0);#else			ACMemberLeaveFM(index, fmname, fmindex, charname, 0, i);#endif			db_familyupdate[index] = 1;			// 通知族长有玩家已离开家族			if (family[index].fmmemberindex[0].onlineflag > 0)			{				char buf[256];				sprintf(buf, "(%s)已经离开您的家族了!目前家族人数:%4d人",					charname, family[index].fmjoinnum);				saacproto_ACFMAnnounce_send(family[index].fmmemberindex[0].onlineflag,					SUCCESSFUL, fmname, fmindex, index, 3, buf,					family[index].fmmemberindex[0].charfdid);			}			return	0;   	}	}	return -1;}#ifdef _FAMILYBANKSTONELOGint ACgetFMBankgold(int index, char *fmname,int fmindex,int charindex){	return family[index].fmgold;}#endif// 修正家族资料// kindflag 1:是否继续招募家族成员 2:家族PK声望 3:家族守护兽 4:家族主旨//	    5:解散家族时间 6:家族基金 7:家族冒险声望 8:家族饲育声望//	    9:家族合成、加工声望 10:家族料理声望 11:族长禅让int ACFixFMData(int index, char *fmname, int fmindex, int kindflag, int charindex,	char *data1, char *data2){	int recvdata = 0;	if (CheckFM(&index, fmname, fmindex) < 0)	return -1;		if (kindflag == 1 || kindflag == 2 || (kindflag >= 6 && kindflag <= 11)#ifdef _NEW_MANOR_LAW		|| kindflag == 12 || kindflag == 13#endif		){		recvdata = atoi(data1);		if (recvdata > MAXRECVPOP && (kindflag == 2 || (kindflag >= 7 && kindflag <= 10))) {			log("ACDelOverTimePOP index:%d fmname:%s kindflag:%d charindex:%d recvdata:%d\n",				index, fmname, kindflag, charindex, recvdata);			return -1;		}	}	if (kindflag == 1)   	family[index].fmacceptflag = recvdata;	else if (kindflag == 2){   	family[index].fmpk = family[index].fmpk + recvdata;   	if (family[index].fmpk < MINFMPOPNUM)	family[index].fmpk = MINFMPOPNUM;   	if (family[index].fmpk > MAXFMPOPNUM)	family[index].fmpk = MAXFMPOPNUM;	}else if (kindflag == 3){   	if ((strcmp(data1, "") == 0) || (strcmp(data2, "") == 0))	return -1;   	strcpy(family[index].petname, data1);   	strcpy(family[index].petattr, data2);   	if (family[index].fmsetupflag == 1)			family[index].predel_time = -1;	}else if (kindflag == 4){   	if (strcmp(data1, "") == 0)	return -1;   	strcpy(family[index].fmrule, data1);	}else if (kindflag == 5){   	time_t t1;   	time(&t1);   	family[index].predel_time = t1 + PREDEL_TIME;	}else if (kindflag == 6){   	if (family[index].fmgold + recvdata < 0)	return	-1;   	family[index].fmgold = family[index].fmgold + recvdata;   	if (family[index].fmgold > FMMAXGOLD)			family[index].fmgold = FMMAXGOLD;		sprintf(data2,"%d",family[index].fmgold);	}	else if (kindflag == 7){   	family[index].fmadv = family[index].fmadv + recvdata;   	if (family[index].fmadv < 0)	family[index].fmadv = 0;   	if (family[index].fmadv > MAXFMPOPNUM)	family[index].fmadv = MAXFMPOPNUM;#ifdef _NEW_MANOR_LAW		family[index].fmmemberindex[charindex].momentum += recvdata;   	if (family[index].fmmemberindex[charindex].momentum < 0)	family[index].fmmemberindex[charindex].momentum = 0;   	if (family[index].fmmemberindex[charindex].momentum > MAXFMPOPNUM)	family[index].fmmemberindex[charindex].momentum = MAXFMPOPNUM;		family[index].fmmemberindex[charindex].popular = atoi(data2);#endif	}else if (kindflag == 8){   	family[index].fmfeed = family[index].fmfeed + recvdata;   	if (family[index].fmfeed < 0)	family[index].fmfeed = 0;   	if (family[index].fmfeed > MAXFMPOPNUM)	family[index].fmfeed = MAXFMPOPNUM;#ifdef _NEW_MANOR_LAW		family[index].fmmemberindex[charindex].momentum += recvdata;   	if (family[index].fmmemberindex[charindex].momentum < 0)	family[index].fmmemberindex[charindex].momentum = 0;   	if (family[index].fmmemberindex[charindex].momentum > MAXFMPOPNUM)	family[index].fmmemberindex[charindex].momentum = MAXFMPOPNUM;		family[index].fmmemberindex[charindex].popular = atoi(data2);#endif	}#ifndef _NEW_MANOR_LAW	else if (kindflag == 9){   	family[index].fmsynthesize = family[index].fmsynthesize + recvdata;   	if (family[index].fmsynthesize < 0)	family[index].fmsynthesize = 0;   	if (family[index].fmsynthesize > MAXFMPOPNUM)	family[index].fmsynthesize = MAXFMPOPNUM;	}	else if (kindflag == 10){		family[index].fmdealfood = family[index].fmdealfood + recvdata;		if (family[index].fmdealfood < 0)	family[index].fmdealfood = 0;		if (family[index].fmdealfood > MAXFMPOPNUM)	family[index].fmdealfood = MAXFMPOPNUM;  }#endif#ifdef _FMVER21  else if (kindflag == 11){		char	charname[256], charid[256];		int	charlv, onlineflag, charfdid, popular;#ifdef _NEW_MANOR_LAW		int momentum;#endif		int	floor =  ACgetFMFloor(fmindex);		if (strcmp(family[index].fmmemberindex[charindex].charname, data2) != 0			 || strcmp(family[index].fmmemberindex[charindex].charid, "") == 0)			 return	-1;

⌨️ 快捷键说明

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