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

📄 acfamily.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
#define _FAMILY_C_#include "version.h"#include "main.h"#include "acfamily.h"#include "util.h"#include "saacproto_serv.h"#include <malloc.h>#include <stdio.h>#include <time.h>#include <sys/types.h>#include <dirent.h>#include <sys/stat.h>// 家族 Int 资料static char* FAMILY_INTDATA[familymaxint] = {  "fmindex",  "fmleadergrano",  "fmnum",  "fmjoinnum",  "fmacceptflag",  "fmsetupflag",  "fmsprite",  "fmpointindex",  "fmpopular",  "fmgold",  "fmmemberindexmaxnum",  "apply_time",  "setup_time",  "predel_time",  "memonowwritenum",  "memonum",	"fmadv",  "fmfeed",  "fmsynthesize",  "fmdealfood",  "fmpk",#ifdef _NEW_MANOR_LAW	"fmmomentum",#endif};// 家族 char 资料static char* FAMILY_CHARDATA[familymaxchar] = {  "fmname",  "fmleadername",  "fmleaderid",  "petname",  "petattr",  "fmrule",};// 家族成员 int 资料static char* MEMBER_INTDATA[memberdatamaxint] = {	"charlv",	"charflag",	"onlineflag",	"charfdid",	"predeltime",	"popular",#ifdef _FMVER21	"eventflag",#endif#ifdef _NEW_MANOR_LAW	"momentum",#endif};// 家族成员 char 资料static char* MEMBER_CHARDATA[memberdatamaxchar] = {	"charname",	"charid",};// 成员种类 char 资料static char* MEMBERKIND_INTDATA[FMMEMBER_KINDNUM] = {	"无",	"一般成员",	"申请中",	"族长",	"长老",};// 家族之间留言板struct FMSMEMO{   int 		num;					// 留言数量   int		fmsnowwritenum;				// 目前留言位置   char		memodata[FMSMEMONUM][FAMILY_MEMOLEN];	// 留言内容};// 庄园struct FMPOINT{   int		fl;							// 庄园进入图层   int		x;							// 庄园进入X座标   int		y;							// 庄园进入Y座标   int		fmfl;						// 庄园族长图层   int 		village;					// 庄园邻近之村庄   int		hadfmindex;					// 占领庄园之家族 index   char		hadfmname[CHARNAME_MAX];	// 占领庄园之家族 name   int		hadfmpopular;				// 占领庄园之家族综合声望值};// 家族成员资料typedef struct{   char		charname[CHARNAME_MAX];	// 成员名字   char		charid[USERID_MAX];	// 成员帐号   int		charlv;			// 成员等级   int 		charflag;		/*    					   FMMEMBER_NONE   清空资料   					   FMMEMBER_MEMBER 家族成员   					   FMMEMBER_APPLY  申请中   					   FMMEMBER_LEADER 族长   					   FMMEMBER_ELDER  长老                                        */   int		onlineflag;		// 0:offline; gmsv index   int		charfdid;		// 成员在 gmsv 的 fd   int		predeltime;		// 预计删除成员时间   int 		popular;		// 成员的声望#ifdef _FMVER21   int		eventflag;		// 是否拥有族长资格#endif#ifdef _NEW_MANOR_LAW	 int		momentum;			// 成员气势#endif#ifdef _FM_MODIFY	 int		gsnum;			// 记录玩家是在那一个game server#endif}  MEMBERDATA;struct	FAMILY{   int 		fmindex;			// 家族 index   char		fmname[CHARNAME_MAX];		// 家族名称   char		fmleadername[CHARNAME_MAX];	// 族长名称   char		fmleaderid[USERID_MAX];		// 族长帐号   int		fmleadergrano;			// 族长照片   char		petname[CHARNAME_MAX];		// 守护兽名称   char		petattr[256];			// 守护兽资料   int		fmnum; 			// 家族人数,包含申请退出、加入人数   int		fmjoinnum; 		// 真正加入家族人数   int		fmacceptflag; 		// 是否接收成员 0:不接受 1:接受   int		fmsetupflag; 		// 0:尚未成立 1:已成立   char		fmrule[256];		// 家族主旨   int		fmsprite; 		// 0:光明精灵 1:黑暗精灵   int		fmpointindex;		// 家族据点 index   int 		fmpopular;		// 家族综合声望#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望   int		fmtotalfame;		// 家族综合 + 家族个人声望总合#endif#ifdef _NEW_MANOR_LAW	 int		fmmomentum;			// 家族气势#endif   int		fmgold;			// 家族基金   int		fmmemberindexmaxnum;	// 家族目前最大人数   int		apply_time;		// 家族申请时间   int		setup_time;		// 家族成立时间   int		predel_time;		// 预计删除家族时间   int		memonowwritenum;	// 目前留言位置   int 		memonum;		// 留言数量   int		fmadv;			// 冒险任务声望   int		fmfeed;			// 饲育声望   int		fmsynthesize;		// 合成加工声望   int		fmdealfood;		// 料理声望   int		fmpk;			// PK声望   char		memolist[FAMILY_MEMONUM][FAMILY_MEMOLEN];	// 留言内容   MEMBERDATA	fmmemberindex[MAX_MEMBERNUM];			// 成员资料};int db_familyupdate[MAX_FAMILY];int db_fmpointupdate = 0;int db_fmsmemoupdate = 0;int fmnownum = 0;int fmindexmaxnum = 0;extern gmsv gs[MAXCONNECTION];struct FAMILY family[MAX_FAMILY];int fmpopularindex[MAX_FAMILY];	// Arminius: sort family#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望int fmtotalfameindex[MAX_FAMILY];#endif#ifdef _NEW_MANOR_LAWint fmMomentumIndex[MAX_FAMILY];#endifint fmadvindex[MAX_FAMILY];int fmfeedindex[MAX_FAMILY];int fmsynthesizeindex[MAX_FAMILY];int fmdealfoodindex[MAX_FAMILY];int fmpkindex[MAX_FAMILY];struct FMPOINT fmpoint[MAX_FMPOINT];struct FMSMEMO	fmsmemo;// Arminius: sort family & output the sorted list// Make a sorted index (fmindex) for the family data (family)#ifdef _NEW_MANOR_LAWint fmMomentumcompar(const void *indexa, const void *indexb);#endif#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望int fmtotalfamecompar(const void *indexa, const void *indexb);#endifint fmpopularcompar(const void *indexa, const void *indexb);int fmadvcompar(const void *indexa, const void *indexb);int fmfeedcompar(const void *indexa, const void *indexb);int fmsynthesizecompar(const void *indexa, const void *indexb);int fmdealfoodcompar(const void *indexa, const void *indexb);int fmpkcompar(const void *indexa, const void *indexb);int CheckFM(int *index, char *fmname, int fmindex);int CheckFMUse(int index);void setFamilyFileDataToArg(int index, char *data);void setMemberFileDataToArg(int index, int memberindex, char *databuf);// sortFamily: call this after family loadedvoid sortFamily(void){  int i;  for(i = 0; i < MAX_FAMILY; i++)  {#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望	fmtotalfameindex[i] = i;#endif#ifdef _NEW_MANOR_LAW	fmMomentumIndex[i] = i;#endif  	fmpopularindex[i] = i;  	fmadvindex[i] = i;  	fmfeedindex[i] = i;  	fmsynthesizeindex[i] = i;  	fmdealfoodindex[i] = i;  	fmpkindex[i] = i;  }#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望  qsort(fmtotalfameindex, MAX_FAMILY, sizeof(int), &fmtotalfamecompar);#endif  qsort(fmpopularindex, MAX_FAMILY, sizeof(int), &fmpopularcompar);  qsort(fmadvindex, MAX_FAMILY, sizeof(int), &fmadvcompar);  qsort(fmfeedindex, MAX_FAMILY, sizeof(int), &fmfeedcompar);  qsort(fmsynthesizeindex, MAX_FAMILY, sizeof(int), &fmsynthesizecompar);  qsort(fmdealfoodindex, MAX_FAMILY, sizeof(int), &fmdealfoodcompar);  qsort(fmpkindex, MAX_FAMILY, sizeof(int), &fmpkcompar);#ifdef _NEW_MANOR_LAW	qsort(fmMomentumIndex,MAX_FAMILY,sizeof(int),&fmMomentumcompar);#endif}#ifdef _PERSONAL_FAME	// Arminius: 家族个人声望int fmtotalfamecompar(const void *indexa, const void *indexb){  int famea,fameb;    if ( CheckFMUse(* (int*) indexa)==0 ) return 1;	// empty record  if ( CheckFMUse(* (int*) indexb)==0 ) return -1;  famea = family[ * (int*) indexa ].fmtotalfame;  fameb = family[ * (int*) indexb ].fmtotalfame;  return (famea>fameb)? -1 : 1;}#endif#ifdef _NEW_MANOR_LAWint fmMomentumcompar(const void *indexa, const void *indexb){  int momentumA,momentumB;    if(CheckFMUse(*(int*)indexa) == 0) return 1;	// empty record  if(CheckFMUse(*(int*)indexb) == 0) return -1;  momentumA = family[*(int*)indexa].fmmomentum;  momentumB = family[*(int*)indexb].fmmomentum;  return (momentumA > momentumB) ? -1:1;}#endifint fmpopularcompar(const void *indexa, const void *indexb){  int fmpopulara,fmpopularb;    if ( CheckFMUse(* (int*) indexa)==0 ) return 1;	// empty record  if ( CheckFMUse(* (int*) indexb)==0 ) return -1;  fmpopulara = family[ * (int*) indexa ].fmpopular;  fmpopularb = family[ * (int*) indexb ].fmpopular;  return (fmpopulara>fmpopularb)? -1 : 1;}int fmadvcompar(const void *indexa, const void *indexb){  int fmadva,fmadvb;    if ( CheckFMUse(* (int*) indexa)==0 ) return 1;	// empty record  if ( CheckFMUse(* (int*) indexb)==0 ) return -1;  fmadva = family[ * (int*) indexa ].fmadv;  fmadvb = family[ * (int*) indexb ].fmadv;  return (fmadva>fmadvb)? -1 : 1;}int fmfeedcompar(const void *indexa, const void *indexb){  int fmfeeda,fmfeedb;    if ( CheckFMUse(* (int*) indexa)==0 ) return 1;	// empty record  if ( CheckFMUse(* (int*) indexb)==0 ) return -1;  fmfeeda = family[ * (int*) indexa ].fmfeed;  fmfeedb = family[ * (int*) indexb ].fmfeed;  return (fmfeeda>fmfeedb)? -1 : 1;}int fmsynthesizecompar(const void *indexa, const void *indexb){  int fmsynthesizea,fmsynthesizeb;    if ( CheckFMUse(* (int*) indexa)==0 ) return 1;	// empty record  if ( CheckFMUse(* (int*) indexb)==0 ) return -1;  fmsynthesizea = family[ * (int*) indexa ].fmsynthesize;  fmsynthesizeb = family[ * (int*) indexb ].fmsynthesize;  return (fmsynthesizea>fmsynthesizeb)? -1 : 1;}int fmdealfoodcompar(const void *indexa, const void *indexb){  int fmdealfooda,fmdealfoodb;    if ( CheckFMUse(* (int*) indexa)==0 ) return 1;	// empty record  if ( CheckFMUse(* (int*) indexb)==0 ) return -1;  fmdealfooda = family[ * (int*) indexa ].fmdealfood;  fmdealfoodb = family[ * (int*) indexb ].fmdealfood;  return (fmdealfooda>fmdealfoodb)? -1 : 1;}int fmpkcompar(const void *indexa, const void *indexb){  int fmpka,fmpkb;    if ( CheckFMUse(* (int*) indexa)==0 ) return 1;	// empty record  if ( CheckFMUse(* (int*) indexb)==0 ) return -1;  fmpka = family[ * (int*) indexa ].fmpk;  fmpkb = family[ * (int*) indexb ].fmpk;  return (fmpka>fmpkb)? -1 : 1;}// getFMsortedlist// arg: buf=returned list (format: "index 名次 家族名 族长名 popular|...")//      bufsize=sizeof(buf)//      bp=begin point (bp=-1 -> begin at 0)//      ep=end point   (ep=-1 -> end at MAX_FAMILY-1)// ret: 1=success; 0=failed// Arminius end// 取得家族各声望值列表// kindflag 1:综合 2:冒险 3:饲育 4:合成 5:料理 6:PK 7:总合(综合+个人)int ACShowTopFMList(char *data, int datasize, int kindflag){   int i = 0, j = 0;   char t1[4096];      strcpy(data, "");   if (kindflag == 1)   {      for (i = 0; i < MAX_FAMILY; i++) {         if (strcmp(family[fmpopularindex[i]].fmname, "") == 0)         {         	j++;         	continue;         }#ifdef _PERSONAL_FAME   // Arminius: 家族个人声望	#ifdef _NEW_MANOR_LAW				 sprintf(t1, "%d|%d|%s|%s|%d|%d|%d",fmtotalfameindex[i], i + 1,         	family[fmtotalfameindex[i]].fmname,         	family[fmtotalfameindex[i]].fmleadername,      		(family[fmtotalfameindex[i]].fmpopular / 100),      		(family[fmtotalfameindex[i]].fmtotalfame / 100),					(family[fmtotalfameindex[i]].fmmomentum));	#else         sprintf(t1, "%d|%d|%s|%s|%d|%d",fmtotalfameindex[i], i + 1,         	family[fmtotalfameindex[i]].fmname,         	family[fmtotalfameindex[i]].fmleadername,      		(family[fmtotalfameindex[i]].fmpopular / 100),      		(family[fmtotalfameindex[i]].fmtotalfame / 100));	#endif#else         sprintf(t1, "%d|%d|%s|%s|%d", fmpopularindex[i], i + 1,         	family[fmpopularindex[i]].fmname,         	family[fmpopularindex[i]].fmleadername,      		(family[fmpopularindex[i]].fmpopular / 100));#endif      	 if (i < MAX_FAMILY) strcat(t1, " ");      	 if (strlen(data) + strlen(t1) >= datasize){      	    log("getFMsortedlist: datafer overflow.");      	    return	-1;      	 }      	 strcat(data, t1);      }

⌨️ 快捷键说明

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