📄 acfamily.c
字号:
|| 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 + -