?? acfamily.c
字號:
#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; // 留言數(shù)量 int fmsnowwritenum; // 目前留言位置 char memodata[FMSMEMONUM][FAMILY_MEMOLEN]; // 留言內(nèi)容};// 莊園struct FMPOINT{ int fl; // 莊園進(jìn)入圖層 int x; // 莊園進(jìn)入X座標(biāo) int y; // 莊園進(jìn)入Y座標(biāo) int fmfl; // 莊園族長圖層 int village; // 莊園鄰近之村莊 int hadfmindex; // 占領(lǐng)莊園之家族 index char hadfmname[CHARNAME_MAX]; // 占領(lǐng)莊園之家族 name int hadfmpopular; // 占領(lǐng)莊園之家族綜合聲望值};// 家族成員資料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; // 預(yù)計刪除成員時間 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]; // 守護(hù)獸名稱 char petattr[256]; // 守護(hù)獸資料 int fmnum; // 家族人數(shù),包含申請退出、加入人數(shù) int fmjoinnum; // 真正加入家族人數(shù) int fmacceptflag; // 是否接收成員 0:不接受 1:接受 int fmsetupflag; // 0:尚未成立 1:已成立 char fmrule[256]; // 家族主旨 int fmsprite; // 0:光明精靈 1:黑暗精靈 int fmpointindex; // 家族據(jù)點 index int fmpopular; // 家族綜合聲望#ifdef _PERSONAL_FAME // Arminius: 家族個人聲望 int fmtotalfame; // 家族綜合 + 家族個人聲望總合#endif#ifdef _NEW_MANOR_LAW int fmmomentum; // 家族氣勢#endif int fmgold; // 家族基金 int fmmemberindexmaxnum; // 家族目前最大人數(shù) int apply_time; // 家族申請時間 int setup_time; // 家族成立時間 int predel_time; // 預(yù)計刪除家族時間 int memonowwritenum; // 目前留言位置 int memonum; // 留言數(shù)量 int fmadv; // 冒險任務(wù)聲望 int fmfeed; // 飼育聲望 int fmsynthesize; // 合成加工聲望 int fmdealfood; // 料理聲望 int fmpk; // PK聲望 char memolist[FAMILY_MEMONUM][FAMILY_MEMOLEN]; // 留言內(nèi)容 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); }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -