chuyiwen_gmsv/char/family.c

3445 lines
108 KiB
C
Raw Normal View History

2016-12-24 08:45:52 +08:00
#include "version.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include "readmap.h"
#include "object.h"
#include "char.h"
#include "char_base.h"
#include "lssproto_serv.h"
#include "saacproto_cli.h"
#include "npcutil.h"
#include "family.h"
#include "log.h"
#include "handletime.h"
#include "buf.h"
#include "net.h"
#include "char_base.h"
#include "battle.h"
#include "npc_bus.h"
#include "char_talk.h"
#include "npc_scheduleman.h"
#ifdef _FM_MODIFY
#include "npc_fmdengon.h"
#endif
#ifdef _ALLBLUES_LUA
#include "mylua/function.h"
#endif
#define CHAR_MAXNAME 32
#define CHAR_MAXID 20
#define MINFMLEVLEFORPOINT 3 // 3 申请庄园最低等级
2016-12-24 08:45:52 +08:00
#ifdef _FAMILY_MANORNUM_CHANGE
#else
#define MANORNUM 4
#endif
#ifdef _FMRANK_POINT
int fmrankindex[20];
char fmrankname[20][50];
int fmrankpoint[20];
int fmranknum = 0;
#endif
struct FAMILY
{
int fmindex;
char name[CHAR_MAXNAME];
char leadername[CHAR_MAXNAME];
char leaderid[CHAR_MAXID];
int leadergraph;
char petname[CHAR_MAXNAME];
char petattr[256];
int fmnum;
int acceptflag;
char rule[256];
int village;
int pointindex;
int dp;
char memolist[35][100];
};
int familyNumTotal = 0;
char familyListBuf[MAXFAMILYLIST];
int familyTax[FAMILY_MAXNUM];
extern tagRidePetTable ridePetTable[296];
void LeaveMemberIndex( int charaindex, int fmindexi);
// Arminius: 取得家族 pk dp 增加/损失值
2016-12-24 08:45:52 +08:00
// getFMdpAward
// arg: windp=winner's fmdp losedp=loser's fmdp
// ret: dp award
//
#ifdef _MERGE_NEW_8
int fmdplevelexp[]={0, // 0
150000, // 1
500000, // 2
1000000, // 3
1500000, // 4
2000000, // 5
2500000, // 6
3500000, // 7
4500000, // 8
5000000, // 9
7000000 //10
};
#else
int fmdplevelexp[]={0, // 0
10000, // 1
30000, // 2
100000, // 3
500000, // 4
1500000, // 5
5000000, // 6
15000000, // 7
50000000, // 8
200000000, // 9
500000000 //10
};
#endif
// Arminius end
// shan begin
int getFmLv(int playerindex) // 合成时专用
2016-12-24 08:45:52 +08:00
{
int i, dp;
dp = CHAR_getWorkInt(playerindex, CHAR_WORKFMDP);
if( dp > fmdplevelexp[10] ){
// print("\n player DP->%d",dp);
return 10;
}
for(i=0; i<=10; i++)
if( dp <= fmdplevelexp[i+1] ) break;
// Nuke 20040217: Open the merge limit
//if(i>=9) i = 8;
if (i>=10) i=10;
return i;
}
struct FMMEMBER_LIST memberlist[FAMILY_MAXNUM];
struct FMS_MEMO fmsmemo;
struct FM_POINTLIST fmpointlist;
#ifdef _NEW_MANOR_LAW
ManorSchedule_t ManorSchedule[MANORNUM];
#endif
struct FMS_DPTOP fmdptop;
struct FM_PKFLOOR fmpkflnum[FAMILY_FMPKFLOOR]=
{
{142},
{143},
{144},
{145},
{146},
{1042},
{2032},
{3032},
{4032},
#ifdef _FAMILY_MANORNUM_CHANGE // CoolFish 用来修改装园数量
2016-12-24 08:45:52 +08:00
{5032},
{6032},
{7032},
{8032},
{9032},
{10032},
#endif
};
int leaderdengonindex = 0;
// shan end 新增图层需到 family.h 增加 FAMILY_FMPKFLOOR 数量
2016-12-24 08:45:52 +08:00
void SetFMPetVarInit(int meindex)
{
int i = 0, petindex = 0;
#ifdef _FMVER21
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)
#else
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1)
#endif
{
for (i = 0; i < CHAR_MAXPETHAVE; i++)
{
petindex = CHAR_getCharPet(meindex, i);
if (!CHAR_CHECKINDEX(petindex)) continue;
CHAR_setInt(petindex, CHAR_PETFAMILY, -1);
}
}
}
void SetFMVarInit(int meindex)
{
SetFMPetVarInit(meindex); // 清除守护兽 Flag
2016-12-24 08:45:52 +08:00
CHAR_setInt(meindex, CHAR_FMINDEX, -1);
CHAR_setChar(meindex, CHAR_FMNAME, "");
CHAR_setInt(meindex, CHAR_FMSPRITE, -1);
#ifdef _FMVER21
CHAR_setInt(meindex, CHAR_FMLEADERFLAG, FMMEMBER_NONE);
#else
CHAR_setInt(meindex, CHAR_FMLEADERFLAG, -1);
#endif
CHAR_setWorkInt(meindex, CHAR_WORKFMSETUPFLAG, -1);
CHAR_setWorkInt(meindex, CHAR_WORKFMINDEXI, -1);
CHAR_setWorkInt(meindex, CHAR_WORKFMCHARINDEX, -1);
}
void FAMILY_Init( void )
{
int i, j ,k;
for( i=0; i<FAMILY_MAXNUM; i++) {
for( j=0; j<FAMILY_MAXCHANNEL; j++)
for( k=0; k<FAMILY_MAXMEMBER; k++)
channelMember[i][j][k] = -1;
}
for( i=0; i<FAMILY_MAXNUM; i++)
for( j=0; j<FAMILY_MAXMEMBER; j++ )
familyMemberIndex[i][j] = -1;
#ifdef _NEW_MANOR_LAW
for(i=0;i<FAMILY_MAXHOME;i++){
fmpointlist.fm_momentum[i] = -1;
fmpointlist.fm_inwar[i] = FALSE;
}
memset(&ManorSchedule,0,sizeof(ManorSchedule));
for(j=0;j<MANORNUM;j++){
for(i=0;i<10;i++){
ManorSchedule[j].iSort[i] = ManorSchedule[j].iFmIndex[i] = -1;
}
}
#endif
familyListBuf[0] = '\0';
saacproto_ACShowFMList_send( acfd );
//print( "FamilyData_Init:%s ", familyListBuf );
}
void CHAR_Family(int fd, int index, char *message)
{
char firstToken[64];
char messageeraseescape[512];
char* messagebody;
{
if (*message == 0) return;
CHAR_getMessageBody(message, firstToken,
sizeof(firstToken), &messagebody);
if (!messagebody) return;
strcpysafe(messageeraseescape, sizeof(messageeraseescape),
messagebody);
makeStringFromEscaped(messageeraseescape);
switch(tolower(firstToken[0]))
{
case 'a':
// 成立家族
2016-12-24 08:45:52 +08:00
FAMILY_Add(fd, index, message);
break;
case 'j':
// 加入家族
2016-12-24 08:45:52 +08:00
FAMILY_Join(fd, index, message);
break;
case 'e':
// 离开、退出家族
2016-12-24 08:45:52 +08:00
FAMILY_Leave(fd, index, message);
break;
case 'm':
// 族长审核
2016-12-24 08:45:52 +08:00
FAMILY_CheckMember(fd, index, message);
break;
case 's':
// 取得家族相关资料
2016-12-24 08:45:52 +08:00
FAMILY_Detail(fd, index, message);
break;
case 'c':
// 家族频道
2016-12-24 08:45:52 +08:00
FAMILY_Channel(fd, index, message);
break;
case 'b':
// 家族银行
2016-12-24 08:45:52 +08:00
FAMILY_Bank(fd, index, message);
break;
case 'p':
// 申请家族据点
2016-12-24 08:45:52 +08:00
FAMILY_SetPoint(fd, index, message);
break;
case 't':
// 是否继续招募成员
2016-12-24 08:45:52 +08:00
FAMILY_SetAcceptFlag(fd, index, message);
break;
case 'x':
// 修改家族主旨
2016-12-24 08:45:52 +08:00
FAMILY_FixRule( fd, index, message );
break;
case 'r':
// 骑乘宠物
2016-12-24 08:45:52 +08:00
if(!FAMILY_RidePet( fd, index, message )){
CHAR_setInt( index , CHAR_RIDEPET, -1 );
CHAR_setInt( index , CHAR_BASEIMAGENUMBER , CHAR_getInt( index , CHAR_BASEBASEIMAGENUMBER) );
CHAR_complianceParameter( index );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( index, CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( index , CHAR_P_STRING_RIDEPET);
}
break;
case 'l':
// 族长功能
2016-12-24 08:45:52 +08:00
FAMILY_LeaderFunc( fd, index, message );
break;
#ifdef _FM_MODIFY
// 家族布告栏功能
2016-12-24 08:45:52 +08:00
case 'd':
#ifdef _UN_FMMEMO
#else
NPC_FmDengonLooked(0,index);
#endif
break;
#endif
default:
break;
}
}
}
int CheckFMLeader(int meindex)
{
if (CHAR_getInt(meindex, CHAR_FMINDEX) > 0) return -1;
if (strcmp(CHAR_getChar(meindex, CHAR_FMNAME), "") != 0) return -1;
#ifdef _FMVER21
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == FMMEMBER_LEADER) return -1;
#else
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == 1) return -1;
#endif
return 1;
}
int CheckFMMember(int meindex)
{
if (CHAR_getInt(meindex, CHAR_FMINDEX) > 0) return -1;
if (strcmp(CHAR_getChar(meindex, CHAR_FMNAME), "") != 0) return -1;
#ifdef _FMVER21
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) > 0 &&
CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_APPLY ) return -1;
#else
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) > 0 ) return -1;
#endif
return 1;
}
int CheckLeaderQ(int meindex)
{
if (CHAR_getInt(meindex, CHAR_LV) < FMLEADERLV
&& CHAR_getInt(meindex, CHAR_TRANSMIGRATION) <= 0)
return -1;
if (!NPC_EventCheckFlg(meindex, 4))
return -2;
return 0;
}
void FAMILY_Add(int fd, int meindex, char* message)
{
char token[128], fmname[128], charname[128], charid[128];
char petname[128], fmrule[256], petattr[256], buf[1024];
int charlv, havepetindex, petindex, fmsprite = 0, chargrano;
int gold, tmpflag;
if (!CHAR_CHECKINDEX(meindex)) return;
if (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE)
return;
#ifdef _FM_SERVERNO_SYS
if(getFmServerNo()!=getServernumber()){
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
getFmServerMsg());
return;
}
#endif
if (CHAR_getInt(meindex, CHAR_FMINDEX) >= 0
&& strcmp(CHAR_getChar(meindex, CHAR_FMNAME), "") != 0)
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你已经加入家族罗~无法再成立家族!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
tmpflag = CheckLeaderQ(meindex);
if(tmpflag == -1)
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n很抱歉喔!你的等级不足!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
if(tmpflag == -2)
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n很抱歉喔!你必须先完成成人礼才行!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
gold = CHAR_getInt(meindex, CHAR_GOLD);
#ifdef _NEWFM_GOLD
if( gold < getNewFmGold() )
{
char newfmmsg[256];
sprintf(newfmmsg,"\n很抱歉喔!成立家族需要%d元石币的手续费",getNewFmGold());
2016-12-24 08:45:52 +08:00
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
newfmmsg);
return;
}
else {
CHAR_setInt( meindex, CHAR_GOLD, gold-getNewFmGold() );
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_GOLD);
}
#else
if( gold < 10000 )
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n很抱歉喔成立家族需要10000元石币的手续费", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
else {
CHAR_setInt( meindex, CHAR_GOLD, gold-10000 );
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_GOLD);
}
#endif
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
sprintf(fmname, "%s", token);
if ((strstr(fmname, " ")) || (strcmp(fmname, "") == 0) || (strstr(fmname, " ")))
2016-12-24 08:45:52 +08:00
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n家族的名称请勿输入空格!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
if (getStringFromIndexWithDelim(message, "|", 3, token,
sizeof(token)) == FALSE) return;
havepetindex = atoi(token);
petindex = CHAR_getCharPet(meindex, havepetindex);
if (!CHAR_CHECKINDEX(petindex))
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n请选择一只宠物作为家族守护兽!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
if (getStringFromIndexWithDelim(message, "|", 4, token,
sizeof(token)) == FALSE) return;
fmsprite = atoi(token);
if (getStringFromIndexWithDelim(message, "|", 5, token,
sizeof(token)) == FALSE) return;
if (strcmp(token, "") == 0)
sprintf(fmrule, "");
2016-12-24 08:45:52 +08:00
else
sprintf(fmrule, "%s", token);
sprintf(charname, "%s", CHAR_getChar(meindex, CHAR_NAME));
sprintf(charid, "%s", CHAR_getChar(meindex, CHAR_CDKEY));
charlv = CHAR_getInt(meindex, CHAR_LV);
chargrano = CHAR_getInt(meindex, CHAR_FACEIMAGENUMBER);
if (strlen(CHAR_getChar(petindex, CHAR_USERPETNAME)) == 0)
sprintf(petname, "%s", CHAR_getChar(petindex, CHAR_NAME));
else
sprintf(petname, "%s", CHAR_getChar(petindex, CHAR_USERPETNAME));
sprintf(petattr, "%d %d %d %d",
CHAR_getInt(petindex, CHAR_BASEIMAGENUMBER),
CHAR_getWorkInt(petindex, CHAR_WORKATTACKPOWER),
CHAR_getWorkInt(petindex, CHAR_WORKDEFENCEPOWER),
CHAR_getWorkInt(petindex, CHAR_WORKQUICK));
CHAR_setInt(petindex, CHAR_PETFAMILY, 1);
CHAR_setChar(meindex, CHAR_FMNAME, fmname);
#ifdef _FMVER21
CHAR_setInt(meindex, CHAR_FMLEADERFLAG, FMMEMBER_LEADER);
#else
CHAR_setInt(meindex, CHAR_FMLEADERFLAG, 1);
#endif
CHAR_setInt(meindex, CHAR_FMSPRITE, fmsprite);
// print("%s %s %s %d %s %s %s %d %d\n", fmname, charname, charid, charlv, petname,
// petattr, fmrule, fmsprite, chargrano);
#ifdef _PERSONAL_FAME
saacproto_ACAddFM_send(acfd, fmname, charname, charid, charlv,
petname, petattr, fmrule, fmsprite, chargrano,
CHAR_getInt(meindex, CHAR_FAME), CONNECT_getFdid(fd));
// print("ACAddFM acfd:%d meindex:%d fmname:%s charname:%s fame:%d Connectfd:%d fd:%d\n",
// acfd, meindex, fmname, charname, CHAR_getInt(meindex, CHAR_FAME), CONNECT_getFdid(fd), fd);
#else
saacproto_ACAddFM_send(acfd, fmname, charname, charid, charlv,
petname, petattr, fmrule, fmsprite, chargrano, CONNECT_getFdid(fd));
#endif
// 要求最新家族列表
2016-12-24 08:45:52 +08:00
//saacproto_ACShowFMList_send( acfd );
}
/*
~~
     
   ~~~~~~~~~
2016-12-24 08:45:52 +08:00
*/
void ACAddFM(int fd, int result, int fmindex, int index)
{
int meindex = CONNECT_getCharaindex(fd);
char buf[1024];
// print("ACAddFM result:%d fmindex:%d meindex:%d\n", result, fmindex, meindex); // test
if (!CHAR_CHECKINDEX(meindex)) return;
// print("ACAddFM_2!\n");
if (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE)
return;
// print("ACAddFM_3!\n");
if(result == 1)
{
CHAR_setInt(meindex, CHAR_FMINDEX, fmindex);
CHAR_setWorkInt(meindex, CHAR_WORKFMINDEXI, index);
CHAR_setWorkInt(meindex, CHAR_WORKFMSETUPFLAG, 0);
#ifdef _NEW_MANOR_LAW
CHAR_setInt(meindex,CHAR_MOMENTUM,0);
CHAR_talkToCli(meindex,-1,"成立家族个人气势归零",CHAR_COLORYELLOW);
2016-12-24 08:45:52 +08:00
#endif
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n恭喜你成立了新的家族!但请在7天之内召集到10名族人加入,不然会取消家族资格喔。", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
JoinMemberIndex( meindex, index);
CHAR_charSaveFromConnect(meindex, FALSE);
// 要求最新家族资料
2016-12-24 08:45:52 +08:00
saacproto_ACShowFMList_send( acfd );
saacproto_ACShowMemberList_send( acfd, index );
saacproto_ACShowTopFMList_send(acfd, FM_TOP_INTEGRATE);
saacproto_ACShowTopFMList_send(acfd, FM_TOP_MOMENTUM);
LogFamily(
CHAR_getChar( meindex, CHAR_FMNAME),
CHAR_getInt( meindex, CHAR_FMINDEX),
CHAR_getChar( meindex, CHAR_NAME),
CHAR_getChar( meindex, CHAR_CDKEY),
"ADDFAMILY(成立家族)",
2016-12-24 08:45:52 +08:00
""
);
}
else
{
int i = 0, petindex = 0;
char tmpbuf[256];
int gold = CHAR_getInt(meindex, CHAR_GOLD);
#ifdef _NEWFM_GOLD
CHAR_setInt(meindex, CHAR_GOLD, gold + getNewFmGold());
#else
CHAR_setInt(meindex, CHAR_GOLD, gold + 10000);
#endif
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_GOLD);
SetFMVarInit(meindex);
for (i = 0; i < CHAR_MAXPETHAVE; i++)
{
petindex = CHAR_getCharPet(meindex, i);
if (!CHAR_CHECKINDEX(petindex)) continue;
CHAR_setInt(petindex, CHAR_PETFAMILY, -1);
}
if (fmindex == -2)
sprintf(tmpbuf, "\n已经有相同名字的家族成立了!");
2016-12-24 08:45:52 +08:00
else
sprintf(tmpbuf, "\n申请成立家族失败!");
2016-12-24 08:45:52 +08:00
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString(tmpbuf, buf, sizeof(buf)));
}
CHAR_sendStatusString( meindex, "F");
}
void FAMILY_Join(int fd, int meindex, char *message)
{
int fmindex, charlv, index, fmsprite;
char token[128], fmname[128], charname[128], charid[128], buf[1024];
if (!CHAR_CHECKINDEX(meindex)) return;
if ((CHAR_getWorkInt(meindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE)
|| (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE))
return;
if (CheckFMMember(meindex) < 0){
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你已经加入其他家族了喔!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
#ifdef _FM_JOINLIMIT
if( CHAR_getInt( meindex, CHAR_FMTIMELIMIT ) > (int)time(NULL) ){
char buff[255];
sprintf(buff, "\n如之前退出家族,\n需满%d小时才能再加入家族喔",(CHAR_getInt( meindex, CHAR_FMTIMELIMIT )-(int)time(NULL))/3600+1);
2016-12-24 08:45:52 +08:00
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK, -1, -1,
makeEscapeString( buff, buf, sizeof(buf)));
return;
}
#endif
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
index = atoi(token);
if (getStringFromIndexWithDelim(message, "|", 3, token,
sizeof(token)) == FALSE) return;
fmindex = atoi(token);
if (getStringFromIndexWithDelim(message, "|", 4, token,
sizeof(token)) == FALSE) return;
sprintf(fmname, "%s", token);
if (getStringFromIndexWithDelim(message, "|", 5, token,
sizeof(token)) == FALSE) return;
fmsprite = atoi(token);
sprintf(charname, "%s", CHAR_getChar(meindex, CHAR_NAME));
sprintf(charid, "%s", CHAR_getChar(meindex, CHAR_CDKEY));
charlv = CHAR_getInt(meindex, CHAR_LV);
CHAR_setInt(meindex, CHAR_FMINDEX, fmindex);
CHAR_setChar(meindex, CHAR_FMNAME, fmname);
#ifdef _FMVER21
CHAR_setInt(meindex, CHAR_FMLEADERFLAG, FMMEMBER_APPLY);
#else
CHAR_setInt(meindex, CHAR_FMLEADERFLAG, 0);
#endif
CHAR_setInt(meindex, CHAR_FMSPRITE, fmsprite);
CHAR_setWorkInt(meindex, CHAR_WORKFMINDEXI, index);
// print("JoinFM index:%d fmindex:%d fmname:%s charname:%s charid:%s charlv:%d sprite:%d\n",
// index, fmindex, fmname, charname, charid, charlv, fmsprite);
#ifdef _PERSONAL_FAME // Arminius: 家族个人声望
2016-12-24 08:45:52 +08:00
// print("fame:%d charfdid:%d\n", CHAR_getInt(meindex, CHAR_FAME),
// CONNECT_getFdid(fd));
saacproto_ACJoinFM_send(acfd, fmname, fmindex, charname, charid, charlv,
index, CHAR_getInt(meindex, CHAR_FAME), CONNECT_getFdid(fd));
#else
// print("charfdid:%d\n", CONNECT_getFdid(fd));
saacproto_ACJoinFM_send(acfd, fmname, fmindex, charname, charid, charlv,
index, CONNECT_getFdid(fd));
#endif
}
void ACJoinFM(int fd, int result, int recv)
{
int meindex = CONNECT_getCharaindex(fd);
char buf[1024];
if(!CHAR_CHECKINDEX(meindex)) return;
if ((CHAR_getWorkInt(meindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE)
|| (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE))
return;
if (result == 1) {
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n谢谢你的加入申请!请先等族长对你的审核通过之後,才算正式加入。", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
JoinMemberIndex( meindex, CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI) );
#ifdef _NEW_MANOR_LAW
CHAR_setInt(meindex,CHAR_MOMENTUM,0);
CHAR_talkToCli(meindex,-1,"加入家族个人气势归零",CHAR_COLORYELLOW);
2016-12-24 08:45:52 +08:00
#endif
sprintf(buf,"fame:%d",CHAR_getInt(meindex,CHAR_FAME));
LogFamily(
CHAR_getChar( meindex, CHAR_FMNAME),
CHAR_getInt( meindex, CHAR_FMINDEX),
CHAR_getChar( meindex, CHAR_NAME),
CHAR_getChar( meindex, CHAR_CDKEY),
"JOINFAMILY(申请加入家族)",
2016-12-24 08:45:52 +08:00
buf
);
}
else
{
SetFMVarInit(meindex);
if (recv == -2)
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n此家族目前不愿意招收成员!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
}
else if (recv == -3)
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n此家族目前无法招收成员,家族成员人数已到达上限!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
}
else
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n申请加入家族失败!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
}
CHAR_sendStatusString( meindex, "F");
}
void FAMILY_Leave(int fd, int meindex, char *message)
{
int result, fmindex, index;
char token[128], fmname[128], charname[128], charid[128], buf[1024];
if (!CHAR_CHECKINDEX(meindex)) return;
if (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE)
return;
if ((CHAR_getInt(meindex, CHAR_FMINDEX) == -1)
|| (strcmp(CHAR_getChar(meindex, CHAR_FMNAME), "") == 0)
#ifdef _FMVER21
|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == FMMEMBER_NONE))
#else
|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == -1))
#endif
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你并没有加入家族喔!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
{
int i, fmpks_pos;
for( i=1; i<=MANORNUM; i++){ // CoolFish 4->MANORNUM 2002/2/25
fmpks_pos = i * MAX_SCHEDULE;
#ifdef _FMVER21
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == FMMEMBER_LEADER){
#else
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == 1){
#endif
if( (fmpks[fmpks_pos+1].host_index+1) == CHAR_getInt(meindex, CHAR_FMINDEX) ||
(fmpks[fmpks_pos+1].guest_index+1) == CHAR_getInt(meindex, CHAR_FMINDEX) ){
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你目前的家族正约战中,因此无法解散家族!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
}
}
}
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
result = atoi(token);
if (result == 1)
{
fmindex = CHAR_getInt(meindex, CHAR_FMINDEX);
index = CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI);
sprintf(fmname, "%s", CHAR_getChar(meindex, CHAR_FMNAME));
sprintf(charname, "%s", CHAR_getChar(meindex, CHAR_NAME));
sprintf(charid, "%s", CHAR_getChar(meindex, CHAR_CDKEY));
#ifdef _FMVER21
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == FMMEMBER_LEADER) {
#else
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == 1) {
#endif
// print("DelFM index:%d fmindex:%d fmname:%s\n", index, fmindex, fmname);
#ifdef _FM_SERVERNO_SYS
if(getFmServerNo()!=getServernumber()){
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
getFmServerMsg());
return;
}
#endif
saacproto_ACDelFM_send(acfd, fmname, fmindex, index, charname, charid,
CONNECT_getFdid(fd));
#ifdef _FMRANK_POINT
if(sasql_fmpoint_query(fmindex)>0)
sasql_fmindex_del(fmindex);
#endif
// 要求最新家族列表
2016-12-24 08:45:52 +08:00
//saacproto_ACShowFMList_send( acfd );
}
else {
// print("LeaveFM index:%d fmindex:%d fmname:%s charname:%s charid:%s\n",
// index, fmindex, fmname, charname, charid);
saacproto_ACLeaveFM_send(acfd, fmname, fmindex, charname, charid, index,
CONNECT_getFdid(fd));
}
}
}
void ACLeaveFM( int fd, int result, int resultflag)
{
int meindex = CONNECT_getCharaindex(fd);
char buf[1024];
if (!CHAR_CHECKINDEX(meindex)) return;
if (result == 1){
// won 2002/01/05
LogFamily(
CHAR_getChar( meindex, CHAR_FMNAME),
CHAR_getInt( meindex, CHAR_FMINDEX),
CHAR_getChar( meindex, CHAR_NAME),
CHAR_getChar( meindex, CHAR_CDKEY),
"LEAVEFAMILY(离开家族)",
2016-12-24 08:45:52 +08:00
""
);
if( CHAR_getWorkInt( meindex, CHAR_WORKFMCHANNEL) != -1 )
CHAR_setWorkInt( meindex, CHAR_WORKFMCHANNEL, -1 );
LeaveMemberIndex( meindex, CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI) );
SetFMVarInit(meindex);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK, -1, -1,
makeEscapeString( "\n申请退出家族OK!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
CHAR_setWorkInt( meindex, CHAR_WORKFMFLOOR, -1);
#ifdef _FM_JOINLIMIT
CHAR_setInt( meindex, CHAR_FMTIMELIMIT, (int)time(NULL)+getJoinFamilyTime()*(60*60) );
#endif
#ifdef _NEW_MANOR_LAW
CHAR_setInt(meindex,CHAR_MOMENTUM,0);
CHAR_talkToCli(meindex,-1,"退出家族个人气势归零",CHAR_COLORYELLOW);
2016-12-24 08:45:52 +08:00
#endif
CHAR_setInt( meindex , CHAR_RIDEPET, -1 );
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , CHAR_getInt( meindex , CHAR_BASEBASEIMAGENUMBER) );
CHAR_complianceParameter( meindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_RIDEPET);
#ifdef _FM_METAMO
CHAR_ReMetamo(meindex);
#endif
}else
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK, -1, -1,
makeEscapeString( "\n申请退出家族失败!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
CHAR_sendStatusString( meindex, "F" );
}
void ACDelFM(int fd, int result)
{
char buf[1024];
int meindex = CONNECT_getCharaindex(fd);
if (!CHAR_CHECKINDEX(meindex)) return;
//if ((CHAR_getWorkInt(meindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE)
// || (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE))
// return;
if (result == 1)
{
// WON ADD
if(CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI)>-1){
LogFamily(
CHAR_getChar( meindex, CHAR_FMNAME),
CHAR_getInt( meindex, CHAR_FMINDEX),
CHAR_getChar( meindex, CHAR_NAME),
CHAR_getChar( meindex, CHAR_CDKEY),
"DELFAMILY(家族解散)",
2016-12-24 08:45:52 +08:00
""
);
LeaveMemberIndex( meindex, CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI) );
/*
for( i=0; i<FAMILY_MAXMEMBER; i++)
{
familyMemberIndex[ CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI) ][i] = -1;
}
*/
SetFMVarInit(meindex);
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n家族已经解散了!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
// 要求最新家族列表
2016-12-24 08:45:52 +08:00
saacproto_ACShowFMList_send( acfd );
// won 移到前面去
2016-12-24 08:45:52 +08:00
/*
LogFamily(
CHAR_getChar( meindex, CHAR_FMNAME),
CHAR_getInt( meindex, CHAR_FMINDEX),
CHAR_getChar( meindex, CHAR_NAME),
CHAR_getChar( meindex, CHAR_CDKEY),
"DELFAMILY(家族解散)",
2016-12-24 08:45:52 +08:00
""
);
*/
}
else
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n申请解散家族失败!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
CHAR_sendStatusString( meindex, "F");
}
void ACShowFMList(int result, int fmnum, char *data)
{
if( result != 1 )
return;
//print("\ngetFamilyListFromAC:%d", fmnum );
familyNumTotal = fmnum;
#ifdef _FMRANK_POINT
fmranknum = sasql_fm_query();
char newdata[100000];
memset(newdata, 0, sizeof(newdata));
if(fmranknum>0){
familyNumTotal = familyNumTotal + fmranknum;
int i;
char fmrankbuf[128];
memset(fmrankbuf, 0, sizeof(fmrankbuf));
char *tempbuf=NULL;
char fmrankdata[128];
memset(fmrankdata, 0, sizeof(fmrankdata));
for(i=0;i<fmranknum;i++){
sprintf(fmrankbuf,"%d %s",fmrankindex[i],fmrankname[i]);
tempbuf = strstr(data,fmrankbuf);
if(tempbuf != NULL){
if(getStringFromIndexWithDelim(tempbuf,"|", 1, fmrankdata, sizeof(fmrankdata))==FALSE)
break;
sprintf(fmrankbuf,"%s|",fmrankdata);
if(newdata!=NULL){
strcat(newdata,fmrankbuf);
}else{
sprintf(newdata,"%s",fmrankbuf);
}
}
}
}
if(newdata==NULL){
#endif
strcpy( familyListBuf, data );
#ifdef _FMRANK_POINT
}else{
strcat(newdata,data);
strcpy( familyListBuf, newdata );
}
#endif
//print( "FamilyData:%s ", familyListBuf );
}
void ACShowMemberList(int result, int index, int fmnum, int fmacceptflag, int fmjoinnum,char *data)
{
int j;
char numberid[3];
char tmpbuf[128];
if(result==0){
return;
}else{
if(fmnum == -1){
print("\n FamilyWorkIndex Error!!");
}
for(j=1;j<=FAMILY_MAXMEMBER;j++){
strcpy(memberlist[index].numberlistarray[j-1],"");
}
for(j=1;j<=fmnum;j++){
if(getStringFromIndexWithDelim(data," ",j,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
strcpy(memberlist[index].numberlistarray[j-1],tmpbuf);
getStringFromIndexWithDelim(tmpbuf,"|",1,numberid,sizeof(numberid));
memberlist[index].memberindex[j-1] = atoi(numberid);
}
memberlist[index].fmnum = fmnum;
memberlist[index].fmjoinnum = fmjoinnum;
memberlist[index].accept = fmacceptflag;
return;
}
}
void ACShowDpTop(int result,int num, char *data, int kindflag)
{
int i;
char tmpbuf[256],tmpbuf1[64];
if(result==0){
return;
}else{
switch( kindflag )
{
case FM_TOP_INTEGRATE:
{
for(i=0; i<FAMILY_MAXNUM; i++){
strcpy(fmdptop.topmemo[i], "");
fmdptop.fmtopid[i] = -1;
#ifdef _FMVER21
fmdptop.fmtopdp[i] = -1;
#endif
#ifdef _NEW_MANOR_LAW
fmdptop.fmMomentum[i] = -1;
fmdptop.momentum_topid[i] = -1;
strcpy(fmdptop.momentum_topmemo[i], "");
#endif
}
fmdptop.num = num;
for(i=0; i<fmdptop.num; i++){
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
strcpy(fmdptop.topmemo[i], tmpbuf);
// family index
getStringFromIndexWithDelim( tmpbuf, "|", 1, tmpbuf1, sizeof(tmpbuf1));
fmdptop.fmtopid[i] = atoi(tmpbuf1);
#ifdef _FMVER21
// family popularity
getStringFromIndexWithDelim( tmpbuf, "|", 6, tmpbuf1, sizeof(tmpbuf1));
fmdptop.fmtopdp[i] = atoi(tmpbuf1);
#endif
#ifdef _NEW_MANOR_LAW
getStringFromIndexWithDelim( tmpbuf, "|", 7, tmpbuf1, sizeof(tmpbuf1));
fmdptop.fmMomentum[i] = atoi(tmpbuf1);
#endif
}
}
break;
case FM_TOP_ADV:
{
for(i=0; i<30; i++)
strcpy(fmdptop.adv_topmemo[i], "");
fmdptop.adv_num = num;
for(i=0; i<fmdptop.adv_num; i++){
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
strcpy(fmdptop.adv_topmemo[i], tmpbuf);
}
}
break;
case FM_TOP_FEED:
{
for(i=0; i<30; i++)
strcpy(fmdptop.feed_topmemo[i], "");
fmdptop.feed_num = num;
for(i=0; i<fmdptop.feed_num; i++){
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
strcpy(fmdptop.feed_topmemo[i], tmpbuf);
}
}
break;
case FM_TOP_SYNTHESIZE:
{
for(i=0; i<30; i++)
strcpy(fmdptop.syn_topmemo[i], "");
fmdptop.syn_num = num;
for(i=0; i<fmdptop.syn_num; i++){
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
strcpy(fmdptop.syn_topmemo[i], tmpbuf);
}
}
break;
case FM_TOP_DEALFOOD:
{
for(i=0; i<30; i++)
strcpy(fmdptop.food_topmemo[i], "");
fmdptop.food_num = num;
for(i=0; i<fmdptop.food_num; i++){
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
strcpy(fmdptop.food_topmemo[i], tmpbuf);
}
}
break;
case FM_TOP_PK:
{
for(i=0; i<30; i++)
strcpy(fmdptop.pk_topmemo[i], "");
fmdptop.pk_num = num;
for(i=0; i<fmdptop.pk_num; i++){
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
strcpy(fmdptop.pk_topmemo[i], tmpbuf);
}
}
break;
#ifdef _NEW_MANOR_LAW
case FM_TOP_MOMENTUM:
{
for(i=0; i<FAMILY_MAXNUM; i++){
strcpy(fmdptop.momentum_topmemo[i], "");
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE) break;
strcpy(fmdptop.momentum_topmemo[i],tmpbuf);
}
for(i=0; i<num; i++){
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE) return;
getStringFromIndexWithDelim(tmpbuf,"|",1,tmpbuf1,sizeof(tmpbuf1));
// get top id
fmdptop.momentum_topid[i] = atoi(tmpbuf1);
}
}
break;
#endif
default:
break;
}
}
}
void ACShowPointList(int result, char *data)
{
int i;
char tmpbuf[100];
if(result==0){
return;
}else{
for(i=0;i<FAMILY_MAXHOME;i++){
if(getStringFromIndexWithDelim(data," ",i+1,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
strcpy(fmpointlist.pointlistarray[i],tmpbuf);
}
}
}
void ACShowFMMemo(int result, int index, int num, int dataindex, char *data)
{
int j;
char tmpbuf[220];
if(index==10000)
{
if(result==0){
return;
}else{
for(j=1;j<=140;j++){
strcpy(fmsmemo.memo[j-1],"");
}
for(j=1;j<=num;j++){
if(getStringFromIndexWithDelim(data,"|",j,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
makeStringFromEscaped(tmpbuf);
strcpy(fmsmemo.memo[j-1],tmpbuf);
}
fmsmemo.memonum = num;
fmsmemo.memoindex = dataindex-1;
return;
}
}else{
if(result==0){
return;
}else{
if(num == -1){
print("\n FamilyWorkIndex Error!!");
}
for(j=1;j<=35;j++){
strcpy(memberlist[index].memo[j-1],"");
}
for(j=1;j<=num;j++){
if(getStringFromIndexWithDelim(data,"|",j,tmpbuf,sizeof(tmpbuf)) == FALSE)
return;
makeStringFromEscaped(tmpbuf);
strcpy(memberlist[index].memo[j-1],tmpbuf);
}
memberlist[index].memonum = num;
memberlist[index].memoindex = dataindex-1;
return;
}
}
}
#ifdef _PERSONAL_FAME // Arminius: 家族显\\个人声望
2016-12-24 08:45:52 +08:00
void ACFMCharLogin(int fd, int result, int index, int floor, int fmdp,
int joinflag, int fmsetupflag, int flag, int charindex, int charfame
#ifdef _NEW_MANOR_LAW
,int momentum
#endif
)
#else
void ACFMCharLogin(int fd, int result, int index, int floor, int fmdp,
int joinflag, int fmsetupflag, int flag, int charindex)
#endif
{
char buf[1024];
int i, petindex;
int meindex = CONNECT_getCharaindex(fd);
if (!CHAR_CHECKINDEX(meindex)) return;
if (result == 1){
#ifdef _NEW_MANOR_LAW
// 气势回传为0时要把人物的气势设定为0,因为回传是0有可能是打完庄园战,所以气势要归零
2016-12-24 08:45:52 +08:00
if(momentum == 0) CHAR_setInt(meindex,CHAR_MOMENTUM,0);
else CHAR_setInt(meindex,CHAR_MOMENTUM,momentum);
#endif
if(charfame != CHAR_getInt(meindex,CHAR_FAME)){
sprintf(buf,"server fame:%d,ac fame:%d",CHAR_getInt(meindex,CHAR_FAME),charfame);
LogFamily(
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getChar(meindex, CHAR_NAME),
CHAR_getChar(meindex, CHAR_CDKEY),
"ACFMCharLogin",
buf
);
}
//CHAR_setInt(meindex,CHAR_FAME,charfame);
CHAR_setWorkInt(meindex, CHAR_WORKFMINDEXI, index);
CHAR_setWorkInt(meindex, CHAR_WORKFMFLOOR, floor);
CHAR_setWorkInt(meindex, CHAR_WORKFMDP, fmdp);
CHAR_setWorkInt(meindex, CHAR_WORKFMSETUPFLAG, fmsetupflag);
CHAR_setWorkInt(meindex, CHAR_WORKFMCHARINDEX, charindex);
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != joinflag)
SetFMPetVarInit(meindex);
CHAR_setInt(meindex, CHAR_FMLEADERFLAG, joinflag);
JoinMemberIndex(meindex, index);
CHAR_sendStatusString(meindex, "f");
CHAR_complianceParameter( meindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex , CHAR_WORKOBJINDEX ));
#ifdef _FMVER21
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == FMMEMBER_LEADER)
#else
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) == 1)
#endif
{
for (i = 0; i < CHAR_MAXPETHAVE; i++)
{
petindex = CHAR_getCharPet(meindex, i);
if (!CHAR_CHECKINDEX(petindex)) continue;
if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1)
return;
}
for (i = 0; i < CHAR_MAXPOOLPETHAVE; i++)
{
petindex = CHAR_getCharPoolPet(meindex, i);
if (!CHAR_CHECKINDEX(petindex)) continue;
if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1)
return;
}
lssproto_WN_send(fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString("\n家族守护兽消失了!\n请立刻再选定一只守护兽,\n否则家族在七天之後会消失唷!\n", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), FM_FIX_DELFMTIME,
"", "", CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
}
}
else
{
SetFMVarInit(meindex);
#ifdef _FM_JOINLIMIT
CHAR_setInt( meindex, CHAR_FMTIMELIMIT, (int)time(NULL)+getJoinFamilyTime()*(60*60) );
#endif
if (flag == 0){
CHAR_talkToCli(meindex, -1, "你已经退出家族或家族已经不存在了!", CHAR_COLORYELLOW);
2016-12-24 08:45:52 +08:00
CHAR_setWorkInt( meindex, CHAR_WORKFMFLOOR, -1);
CHAR_setInt( meindex , CHAR_RIDEPET, -1 );
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , CHAR_getInt( meindex , CHAR_BASEBASEIMAGENUMBER) );
CHAR_complianceParameter( meindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_RIDEPET);
#ifdef _FM_METAMO
CHAR_ReMetamo(meindex);
#endif
}
}
}
void FAMILY_Detail(int fd, int meindex, char *message)
{
char token[128], token2[128], fmname[128];
char buf[1024], subbuf[256], sendbuf[2048];
int pindex1, i, j;
int fmindex, tempindex;
if (!CHAR_CHECKINDEX(meindex)) return;
if ((CHAR_getWorkInt(meindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE)
|| (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE))
return;
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
if ( strcmp(token,"F") ==0 ) {
if (getStringFromIndexWithDelim(message, "|", 3, token2,
sizeof(token)) == FALSE) return;
strcpy( buf, "");
j = 0;
pindex1 = (atoi(token2) - 1)*10 +1;
for( i=pindex1 ; i< pindex1+10 ; i++ ) {
if( i > familyNumTotal ) break;
if( getStringFromIndexWithDelim( familyListBuf, "|", i, subbuf,
sizeof(subbuf) ) == FALSE) break;
strcat( buf, "|" );
strcat( buf, subbuf );
j++;
// print(" |%s| ", subbuf);
}
sprintf( sendbuf, "S|F|%d|%d|%d%s", familyNumTotal, atoi(token2), j, buf );
lssproto_FM_send( fd, sendbuf );
return;
}
// shan add
if (strcmp(token, "P") == 0 ){
#ifdef _CAX_FAMEBUTTON
if (strcmp( getfamebutton() , "") == 0)
2016-12-24 08:45:52 +08:00
{
fameButton( meindex); //ABlua声望按钮调用
2016-12-24 08:45:52 +08:00
}else{
#endif
int personfame;
char sendbuf[512];
int fd = getfdFromCharaIndex( meindex);
char* id = CHAR_getChar( meindex, CHAR_CDKEY );
int viptype = CHAR_getInt( meindex, CHAR_VIPRIDE );
int viptime = CHAR_getInt( meindex, CHAR_VIPTIME );
if(viptime>0)
{
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
timep = mktime(p);
viptime = viptime - timep;
}
#ifdef _PERSONAL_FAME
personfame = (CHAR_getInt( meindex, CHAR_FAME)/100);
#else
personfame = CHAR_getWorkInt( meindex, CHAR_WORKFMDP);
#endif
CHAR_talkToCli(meindex, -1, "您的账户信息:", CHAR_COLORYELLOW);
2016-12-24 08:45:52 +08:00
#ifdef _NEW_CurrencyShow
sprintf(sendbuf, "个人声望点数:%-12d 个人气势点数:%-12d 个人积分点数:%d", personfame,
2016-12-24 08:45:52 +08:00
CHAR_getInt(meindex,CHAR_MOMENTUM)/100, sasql_ampoint( CHAR_getChar(meindex,CHAR_CDKEY), 0,0));
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORGREEN);
sprintf(sendbuf, "个人贝壳点数:%-12d 个人活力点数:%-12d 个人会员点数:%d", CHAR_getInt(meindex,CHAR_CAMEO),
2016-12-24 08:45:52 +08:00
CHAR_getInt(meindex,CHAR_VIGOR), sasql_vippoint(id,0,0));
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORBLUE);
sprintf(sendbuf, "个人现金账户:%-12d 个人任务链数:%-12d 个人跑环环数:%d", sasql_rmbpoint(id,0,0),
2016-12-24 08:45:52 +08:00
CHAR_getInt(meindex,CHAR_MISSIONTRAIN_NUM), CHAR_getInt(meindex,CHAR_EVNUM));
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORPURPLE);
#ifdef _OFFLINE_SYSTEM
if(getOfflineCf()==0)
sprintf(sendbuf,"可用离线时间:%d分钟 (离线尚未开启)",(int)(CHAR_getInt(meindex,CHAR_OFFTIME)/60));
2016-12-24 08:45:52 +08:00
else if(getOfflineCf()==1)
sprintf(sendbuf,"可用离线时间:%d分钟",(int)(CHAR_getInt(meindex,CHAR_OFFTIME)/60));
2016-12-24 08:45:52 +08:00
else
sprintf(sendbuf,"可用离线时间:%d分钟 (离线不扣时间)",(int)(CHAR_getInt(meindex,CHAR_OFFTIME)/60));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#endif
if(viptime == 0){
CHAR_talkToCli(meindex, -1, "个人特殊权限:尚未开启", CHAR_COLORYELLOW);
2016-12-24 08:45:52 +08:00
}
if(viptime<0)
{
CHAR_setInt(meindex,CHAR_VIPRIDE,0);
CHAR_setInt(meindex,CHAR_VIPTIME,0);
CHAR_loginCheckUserItem(meindex);
viptype = CHAR_getInt(meindex,CHAR_VIPRIDE);
}
if(viptime>0)
{
viptime = (int)(viptime/60/60/24);
if(viptype==1)
{
sprintf(sendbuf,"普通会员剩余:%d天",viptime+1);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
}
else if(viptype==2)
{
sprintf(sendbuf,"黄金会员剩余:%d天",viptime+1);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
}
else if(viptype==3)
{
sprintf(sendbuf,"钻石会员剩余:%d天",viptime+1);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
}
}
sprintf(sendbuf,"本线基础经验:%d倍",getBattleexp());
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#ifdef _VIP_BATTLE_EXP
int nvipexp, nviptime;
nvipexp = CHAR_getInt( meindex, CHAR_NVIPEXP);
nviptime = CHAR_getInt( meindex, CHAR_NVIPTIME )/60;
if (nvipexp > 0 && CHAR_getInt( meindex, CHAR_VIPTIME ) == 0){
sprintf(sendbuf,"额外经验加成:%d倍 (时效:%d分钟)",getVipBattleExp(), nviptime);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORBLUE2);
}else if (CHAR_getInt( meindex, CHAR_VIPTIME ) > 0){
sprintf(sendbuf,"额外经验加成:%d倍 (时效:会员永久)",getVipBattleExp());
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORBLUE2);
}
#endif
#ifdef _EXP_TIME_OUT
int ITEM_ADDEXP,ITEM_ADDEXP_TIME;
ITEM_ADDEXP = CHAR_getInt( meindex, CHAR_ADDEXPPOWER );
if(ITEM_ADDEXP>0){
ITEM_ADDEXP_TIME = CHAR_getInt( meindex, CHAR_ADDEXPTIME )/60;
sprintf(sendbuf,"经验物品加成:%d (时效:%d分钟)",ITEM_ADDEXP,ITEM_ADDEXP_TIME);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORCYAN);
}
#endif
#else//_NEW_CurrencyShow
sprintf( sendbuf, "个人声望:%d", personfame);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#ifdef _NEW_MANOR_LAW
sprintf(sendbuf,"个人气势:%d",CHAR_getInt(meindex,CHAR_MOMENTUM)/100);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#endif
#ifdef _VIP_SERVER
sprintf(sendbuf,"个人积分:%d",sasql_ampoint( CHAR_getChar(meindex,CHAR_CDKEY), 0,0));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
if(viptime<0)
{
CHAR_setInt(meindex,CHAR_VIPRIDE,0);
CHAR_setInt(meindex,CHAR_VIPTIME,0);
CHAR_loginCheckUserItem(meindex);
viptype = CHAR_getInt(meindex,CHAR_VIPRIDE);
}
if(viptime>0)
{
viptime = (int)(viptime/60/60/24);
if(viptype==1)
{
sprintf(sendbuf,"你的剩余会员天数为:%d",viptime+1);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
}
else if(viptype==2)
{
sprintf(sendbuf,"你的剩余黄金会员天数为:%d",viptime+1);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
}
else if(viptype==3)
{
sprintf(sendbuf,"你的剩余钻石会员天数为:%d",viptime+1);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
}
}
#endif
sprintf(sendbuf,"会员点数:%d",sasql_vippoint(id,0,0));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#ifdef _VIGOR_SYS
sprintf(sendbuf,"活力点数:%d",CHAR_getInt(meindex,CHAR_VIGOR));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#endif
#ifdef _EV_NUM
sprintf(sendbuf,"跑环环数:%d",CHAR_getInt(meindex,CHAR_EVNUM));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#endif
//#ifdef _STU_SYS
// sprintf(sendbuf,"导师积分:%d",CHAR_getInt(meindex,CHAR_STUNUM));
2016-12-24 08:45:52 +08:00
// CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
//#endif
#ifdef _RMB_SYSTEM
sprintf(sendbuf,"现金账户:%d",sasql_rmbpoint(id,0,0));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#endif
#ifdef _OFFLINE_SYSTEM
if(getOfflineCf()==0)
sprintf(sendbuf,"离线时间:%d分钟本线不支持离线挂机",(int)(CHAR_getInt(meindex,CHAR_OFFTIME)/60));
2016-12-24 08:45:52 +08:00
else if(getOfflineCf()==1)
sprintf(sendbuf,"离线时间:%d分钟",(int)(CHAR_getInt(meindex,CHAR_OFFTIME)/60));
2016-12-24 08:45:52 +08:00
else
sprintf(sendbuf,"离线时间:%d分钟目前离线不扣时间",(int)(CHAR_getInt(meindex,CHAR_OFFTIME)/60));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#endif
sprintf(sendbuf,"本线基础经验:%d倍",getBattleexp());
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
#ifdef _EXP_TIME_OUT
int ITEM_ADDEXP,ITEM_ADDEXP_TIME;
ITEM_ADDEXP = CHAR_getInt( meindex, CHAR_ADDEXPPOWER );
if(ITEM_ADDEXP>0){
ITEM_ADDEXP_TIME = CHAR_getInt( meindex, CHAR_ADDEXPTIME )/60;
sprintf(sendbuf,"经验物品加成:%d% 时效:%d分钟",ITEM_ADDEXP,ITEM_ADDEXP_TIME);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli(meindex, -1, sendbuf, CHAR_COLORYELLOW);
}
#endif
#endif//_NEW_CurrencyShow
#ifdef _CAX_FAMEBUTTON
}
#endif
}
if(strcmp(token,"D") == 0){
if(getStringFromIndexWithDelim(message, "|", 3, fmname, sizeof(fmname)) == FALSE) return;
if(getStringFromIndexWithDelim(message, "|", 4, token2, sizeof(token2)) == FALSE) return;
fmindex = atoi( token2 );
if(getStringFromIndexWithDelim(message, "|", 5, token2, sizeof(token2)) == FALSE) return;
tempindex = atoi( token2 );
//print(" send_fmname_ac:%s ", fmname);
saacproto_ACFMDetail_send( acfd, fmname, fmindex, tempindex, CONNECT_getFdid(fd) );
}
// shan begin
else if (strcmp(token, "D2") ==0 ) {
char sendbuf[2048], tmpbuf[1024], leadernamebuf[64];
int h, i = 0;
int meindex = CONNECT_getCharaindex(fd);
int fmindex_wk = CHAR_getWorkInt( meindex, CHAR_WORKFMINDEXI);
if( fmindex_wk < 0 || fmindex_wk >= FAMILY_MAXNUM) return;
for( h=0; h<FAMILY_MAXNUM; h++)
if( fmdptop.fmtopid[h] == fmindex_wk )
break;
strcpy(tmpbuf, "");
for (i = 0 + 1; i < FAMILY_MAXHOME + 1; i++)
{
int fmpks_pos = i * MAX_SCHEDULE, index;
sprintf(fmname, "%s", CHAR_getChar(meindex, CHAR_FMNAME));
index = CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI);
if (fmpks[fmpks_pos + 1].flag == FMPKS_FLAG_MANOR_BATTLEBEGIN
|| fmpks[fmpks_pos + 1].flag == FMPKS_FLAG_MANOR_PREPARE
|| fmpks[fmpks_pos + 1].flag == FMPKS_FLAG_MANOR_OTHERPLANET)
{
if ((fmpks[fmpks_pos + 1].host_index == index
&& strcmp(fmname, fmpks[fmpks_pos + 1].host_name) == 0)
|| (fmpks[fmpks_pos + 1].guest_index == index
&& strcmp(fmname, fmpks[fmpks_pos + 1].guest_name) == 0))
{
struct tm tm1;
memcpy(&tm1, localtime((time_t *)&fmpks[fmpks_pos + 1].dueltime), sizeof(tm1));
sprintf(tmpbuf, "%d/%d %d:%d【%s】 %s %s",
2016-12-24 08:45:52 +08:00
tm1.tm_mon + 1, tm1.tm_mday, tm1.tm_hour, tm1.tm_min,
fmpks[fmpks_pos + 2].host_name,
fmpks[fmpks_pos + 1].guest_name,
fmpks[fmpks_pos + 1].host_name);
}
}
}
if (strcmp(tmpbuf, "") == 0)
#ifdef _FMWAR_MSG
sprintf(tmpbuf, "%s",getFmWarMsg());
#else
sprintf(tmpbuf, "无挑战排程");
2016-12-24 08:45:52 +08:00
#endif
getStringFromIndexWithDelim(memberlist[fmindex_wk].numberlistarray[0],
"|",2,leadernamebuf,sizeof(leadernamebuf));
// sendbuf -> 家族名称|人数|族长名称|家族排行|家族声望|个人声望|个人职位|家族精灵|PK
2016-12-24 08:45:52 +08:00
#ifdef _NEW_MANOR_LAW
sprintf( sendbuf, "%s|%d|%s|%d|%d|%d|%d|%d|%s|%d|%d",
#else
sprintf( sendbuf, "%s|%d|%s|%d|%d|%d|%d|%d|%s",
#endif
CHAR_getChar(meindex, CHAR_FMNAME),
memberlist[fmindex_wk].fmjoinnum,
leadernamebuf,
h+1,
#ifdef _FMVER21
fmdptop.fmtopdp[h],
#else
(CHAR_getWorkInt( meindex, CHAR_WORKFMDP)/100),
#endif
#ifdef _PERSONAL_FAME
(CHAR_getInt( meindex, CHAR_FAME)/100),
#else
(CHAR_getWorkInt( meindex, CHAR_WORKFMDP)/100),
#endif
CHAR_getInt( meindex, CHAR_FMLEADERFLAG),
CHAR_getInt( meindex, CHAR_FMSPRITE ),
tmpbuf
#ifdef _NEW_MANOR_LAW
,fmdptop.fmMomentum[h]/100 // 家族气势
,CHAR_getInt(meindex,CHAR_MOMENTUM)/100 // 个人气势
2016-12-24 08:45:52 +08:00
#endif
);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_FAMILYDETAIL,
WINDOW_BUTTONTYPE_OK,
-1,
-1,
makeEscapeString( sendbuf, buf, sizeof(buf)));
}
// shan end
}
void ACFMDetail(int ret, char *data, int clifd)
{
char sendbuf[1024];
//print(" Detail:%s ", data);
if( ret != 1 )
{
print(" ACFMDetailError!:%d ", clifd );
return;
}
//print(" ACFMDetail:%d:%s ", clifd, data );
/*
len = strlen(data);
strcpy( buf, data );
for( i=0 ; i<len ; i++ )
{
if( data[i] == '|' ) buf[i] = ' ';
else
if( data[i] == ' ' ) buf[i] = '|';
}
*/
//if (getStringFromIndexWithDelim(message, "|", 10, fmname,
// sizeof(fmname)) == FALSE) return;
//makeStringFromEscaped( buf );
//buf2 = lssproto_demkstr_string( buf );
int mycharaindex = CONNECT_getCharaindex( clifd );
if(CHAR_getInt(mycharaindex,CHAR_TRANSMIGRATION)<getFmBuffTrans()){
char fmtmpbuf[256];
int a1,a2,a3,a4,a5,a6;
char b1[256],b2[256],b3[256],b4[256],b5[256];
getStringFromIndexWithDelim(data,"|", 1, fmtmpbuf, sizeof(fmtmpbuf));
a1=atoi(fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 2, fmtmpbuf, sizeof(fmtmpbuf));
a2=atoi(fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 3, fmtmpbuf, sizeof(fmtmpbuf));
strcpy(b1,fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 4, fmtmpbuf, sizeof(fmtmpbuf));
strcpy(b2,fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 5, fmtmpbuf, sizeof(fmtmpbuf));
a3=atoi(fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 6, fmtmpbuf, sizeof(fmtmpbuf));
strcpy(b3,fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 7, fmtmpbuf, sizeof(fmtmpbuf));
strcpy(b4,fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 8, fmtmpbuf, sizeof(fmtmpbuf));
a4=atoi(fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 9, fmtmpbuf, sizeof(fmtmpbuf));
a5=atoi(fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 10, fmtmpbuf, sizeof(fmtmpbuf));
strcpy(b5,fmtmpbuf);
getStringFromIndexWithDelim(data,"|", 11, fmtmpbuf, sizeof(fmtmpbuf));
a6=atoi(fmtmpbuf);
sprintf(b5,"您没有达到%d转无法查看该家族宣言。",getFmBuffTrans());
2016-12-24 08:45:52 +08:00
sprintf(sendbuf,"S|D|%d|%d|%s|%s|%d|%s|%s|%d|%d|%s|%d",a1,a2,b1,b2,a3,b3,b4,a4,a5,b5,a6);
}else{
sprintf(sendbuf, "S|D|%s", data);
}
lssproto_FM_send( clifd, sendbuf );
//print(" Detail:%s ", sendbuf);
/*
lssproto_WN_send( clifd, WINDOW_MESSAGETYPE_FAMILYDETAIL,
WINDOW_BUTTONTYPE_OK,
-1, -1,
sendbuf );
*/
// from saac data
/*
sprintf(data, "%d|%d|%s|%s|%d|%s|%s|%d|%d|%s|%d", index, family[index].fmindex,
family[index].fmname, family[index].fmleadername,
family[index].fmleadergrano, family[index].petname, family[index].petattr,
family[index].fmjoinnum, family[index].fmacceptflag,
family[index].fmrule, family[index].fmsprite );
*/
}
void FAMILY_CheckMember(int fd, int meindex, char *message)
{
int result, charindex, i, index = 0;
char token[128], charname[128], fmname[128], buf[1024];
if (!CHAR_CHECKINDEX(meindex)){
return;
}
if (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE)
{
return;
}
index = CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI);
sprintf(fmname, "%s", CHAR_getChar(meindex, CHAR_FMNAME));
if ((index == -1) || (strcmp(fmname, "") == 0)
#ifdef _FMVER21
// || ((CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)
// && (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_ELDER)
// && (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_VICELEADER)))
|| ((CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)
&& (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_ELDER)))
#else
|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1))
#endif
{
// print("leaderflag:%d\n", CHAR_getInt(meindex, CHAR_FMLEADERFLAG));
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你不是族长,所以没有修改的权力唷!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
sprintf(charname, "%s", token);
if (getStringFromIndexWithDelim(message, "|", 3, token,
sizeof(token)) == FALSE) return;
charindex = atoi(token);
if (getStringFromIndexWithDelim(message, "|", 4, token,
sizeof(token)) == FALSE) return;
result = atoi(token);
// print("MemberCheck charname:%s charindex:%d mename:%s meworki:%d\n",
// charname, charindex, CHAR_getChar(meindex, CHAR_NAME),
// CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI));
if ((strcmp(charname, CHAR_getChar(meindex, CHAR_NAME)) == 0)
&& (charindex == CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI)))
return;
// print("MemberCheck message:%s\n", message);
if (result == FMMEMBER_MEMBER)
#ifdef _FMVER21
{
// shan begin
char sbuf[1024];
sprintf( sbuf, "族长代号:%d -> 人物名称:%s 人物索引 (设该人物为族员):%d\n", CHAR_getInt(meindex, CHAR_FMLEADERFLAG), charname, charindex);
2016-12-24 08:45:52 +08:00
LogFamily(
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getChar(meindex, CHAR_NAME),
CHAR_getChar(meindex, CHAR_CDKEY),
"CheckMember",
sbuf
);
// shan end
saacproto_ACMemberJoinFM_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX), charname, charindex,
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), result,
CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
}
#else
{
saacproto_ACMemberJoinFM_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX), charname, charindex,
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), result,
CONNECT_getFdid(fd));
}
#endif
#ifdef _FMVER21
else if (result == FMMEMBER_NONE)
#else
else if (result == 4)
#endif
{
for (i = 0 + 1; i < FAMILY_MAXHOME + 1; i++)
{
int fmpks_pos = i * MAX_SCHEDULE;
if ((fmpks[fmpks_pos].host_index == index
&& strcmp(fmname, fmpks[fmpks_pos].host_name) == 0)
|| (fmpks[fmpks_pos].guest_index == index
&& strcmp(fmname, fmpks[fmpks_pos].guest_name) == 0))
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n家族目前正在战斗中,所以无法审核成员。", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
// print("fmpks_pos:%d index:%d host:%d guest:%d\n", fmpks_pos,
// index, fmpks[fmpks_pos].host_index, fmpks[fmpks_pos].guest_index);
return;
}
}
#ifdef _FMVER21
{
// shan begin
char sbuf[1024];
sprintf( sbuf, "族长代号:%d -> 人物名称:%s 人物索引:%d (将该人物退出家族)\n", CHAR_getInt(meindex, CHAR_FMLEADERFLAG), charname, charindex);
2016-12-24 08:45:52 +08:00
LogFamily(
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getChar(meindex, CHAR_NAME),
CHAR_getChar(meindex, CHAR_CDKEY),
"CheckMember",
sbuf
);
// shan end
saacproto_ACMemberLeaveFM_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX), charname, charindex,
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI),
CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
}
#else
{
saacproto_ACMemberLeaveFM_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX), charname, charindex,
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI),
CONNECT_getFdid(fd));
}
#endif
}
#ifdef _FMVER21
// else if (result == FMMEMBER_ELDER || result == FMMEMBER_INVITE
// || result == FMMEMBER_BAILEE || result == FMMEMBER_VICELEADER )
else if (result == FMMEMBER_ELDER )
{
if (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)
return;
#ifdef _FMVER21
{
// shan begin
char sbuf[1024];
sprintf( sbuf, "族长代号:%d -> 人物名称:%s 人物索引:%d (设该人物为长老)\n", CHAR_getInt(meindex, CHAR_FMLEADERFLAG), charname, charindex);
2016-12-24 08:45:52 +08:00
LogFamily(
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getChar(meindex, CHAR_NAME),
CHAR_getChar(meindex, CHAR_CDKEY),
"CheckMember",
sbuf
);
// shan end
saacproto_ACMemberJoinFM_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX), charname, charindex,
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), result,
CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
}
#else
{
saacproto_ACMemberJoinFM_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX), charname, charindex,
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), result,
CONNECT_getFdid(fd));
}
#endif
}
#endif
// 要求最新家族列表
2016-12-24 08:45:52 +08:00
saacproto_ACShowFMList_send( acfd );
}
void FAMILY_Channel(int fd, int meindex, char *message)
{
char token[128], token2[128];
char buf[4096], subbuf[4096], sendbuf[4096];
int i, tempindex, fmindexi, channel, nowchannel, num;
fmindexi = CHAR_getWorkInt( meindex, CHAR_WORKFMINDEXI);
nowchannel = CHAR_getWorkInt( meindex, CHAR_WORKFMCHANNEL );
// print(" channelFM:%d ", fmindexi);
if( fmindexi < 0 ) {
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你还没有加入任何家族!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
if (getStringFromIndexWithDelim(message, "|", 3, token2,
sizeof(token2)) == FALSE) return;
channel = atoi( token2 );
if( strcmp( token, "J") == 0) {
if( channel < -1 || channel > FAMILY_MAXCHANNEL )return;
if( nowchannel >= 0 && nowchannel < FAMILY_MAXCHANNEL ) {
i = 0;
while( i < FAMILY_MAXMEMBER ) {
if( channelMember[fmindexi][nowchannel][i] == meindex ) {
channelMember[fmindexi][nowchannel][i] = -1;
break;
}
i++;
}
}
if( channel > 0 && channel < FAMILY_MAXCHANNEL ) {
i = 0;
while( i < FAMILY_MAXCHANNELMEMBER ) {
if( channelMember[fmindexi][channel][i] < 0 ) {
channelMember[fmindexi][channel][i] = meindex;
break;
}
i++;
}
if( i >= FAMILY_MAXCHANNELMEMBER ) {
CHAR_talkToCli( meindex, -1, "此频道人数已满。", CHAR_COLORWHITE);
2016-12-24 08:45:52 +08:00
return;
}
sprintf( buf, "加入家族频道 [%d]。", channel );
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buf, CHAR_COLORWHITE);
if( nowchannel >=0 && nowchannel < FAMILY_MAXCHANNEL ) {
sprintf( buf, "%s 退出频道。", CHAR_getChar( meindex, CHAR_NAME) );
2016-12-24 08:45:52 +08:00
for( i=0; i < FAMILY_MAXCHANNELMEMBER; i++ ) {
if( CHAR_CHECKINDEX(channelMember[fmindexi][nowchannel][i])
&& channelMember[fmindexi][nowchannel][i] != meindex ) {
CHAR_talkToCli( channelMember[fmindexi][nowchannel][i], -1, buf, CHAR_COLORWHITE);
}
}
}
sprintf( buf, "%s 加入频道。", CHAR_getChar( meindex, CHAR_NAME) );
2016-12-24 08:45:52 +08:00
for( i=0; i < FAMILY_MAXCHANNELMEMBER; i++ ) {
if( CHAR_CHECKINDEX(channelMember[fmindexi][channel][i])
&& channelMember[fmindexi][channel][i] != meindex ) {
CHAR_talkToCli( channelMember[fmindexi][channel][i], -1, buf, CHAR_COLORWHITE);
}
}
}
else if( channel == 0 ) {
i = 0;
while( i < FAMILY_MAXMEMBER ) {
if( channelMember[fmindexi][0][i] < 0 ) {
channelMember[fmindexi][0][i] = meindex;
break;
}
i++;
}
if( i >= FAMILY_MAXMEMBER ) {
#ifndef _CHANNEL_MODIFY
CHAR_talkToCli( meindex, -1, "此频道人数已满。", CHAR_COLORWHITE);
2016-12-24 08:45:52 +08:00
#endif
return;
}
#ifndef _CHANNEL_MODIFY
sprintf( buf, "加入家族频道 [全]。");
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buf, CHAR_COLORWHITE);
if( nowchannel >=0 && nowchannel < FAMILY_MAXCHANNEL ) {
sprintf( buf, "%s 退出频道。", CHAR_getChar( meindex, CHAR_NAME) );
2016-12-24 08:45:52 +08:00
for( i=0; i < FAMILY_MAXCHANNELMEMBER; i++ ) {
if( CHAR_CHECKINDEX(channelMember[fmindexi][nowchannel][i])
&& channelMember[fmindexi][nowchannel][i] != meindex ) {
CHAR_talkToCli( channelMember[fmindexi][nowchannel][i], -1, buf, CHAR_COLORWHITE);
}
}
}
sprintf( buf, "%s 加入频道。", CHAR_getChar( meindex, CHAR_NAME) );
2016-12-24 08:45:52 +08:00
for( i=0; i < FAMILY_MAXCHANNELMEMBER; i++ ) {
if( CHAR_CHECKINDEX(channelMember[fmindexi][channel][i])
&& channelMember[fmindexi][channel][i] != meindex ) {
CHAR_talkToCli( channelMember[fmindexi][channel][i], -1, buf, CHAR_COLORWHITE);
}
}
#endif
}
#ifdef _FMVER21
else if( channel == FAMILY_MAXCHANNEL && CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) == FMMEMBER_LEADER )
#else
else if( channel == FAMILY_MAXCHANNEL && CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) == 1 )
#endif
{
CHAR_talkToCli( meindex, -1, "启动族长广播。", CHAR_COLORWHITE);
2016-12-24 08:45:52 +08:00
}
else {
channel = -1;
#ifndef _CHANNEL_MODIFY
CHAR_talkToCli( meindex, -1, "退出家族频道。", CHAR_COLORWHITE);
2016-12-24 08:45:52 +08:00
#else
CHAR_talkToCli( meindex, -1, "关闭族长广播。", CHAR_COLORWHITE);
2016-12-24 08:45:52 +08:00
channel = 0;
i = 0;
while(i < FAMILY_MAXMEMBER){
if( channelMember[fmindexi][0][i] < 0 ) {
channelMember[fmindexi][0][i] = meindex;
break;
}
i++;
}
#endif
sprintf( buf, "%s 退出频道。", CHAR_getChar( meindex, CHAR_NAME) );
2016-12-24 08:45:52 +08:00
for( i=0; i < FAMILY_MAXCHANNELMEMBER; i++ ) {
if( CHAR_CHECKINDEX(channelMember[fmindexi][nowchannel][i])
&& channelMember[fmindexi][nowchannel][i] != meindex ) {
CHAR_talkToCli( channelMember[fmindexi][nowchannel][i], -1, buf, CHAR_COLORWHITE);
}
}
}
CHAR_setWorkInt( meindex, CHAR_WORKFMCHANNEL, channel);
if( channel != -1 ) CHAR_setWorkInt( meindex, CHAR_WORKFMCHANNELQUICK, channel);
sprintf( sendbuf, "C|J|%d", channel);
lssproto_FM_send( fd, sendbuf);
}
else if( strcmp( token, "L") == 0) {
int j, membernum, bFind = 0;
if( channel < 0 || channel >= FAMILY_MAXCHANNEL ) return;
subbuf[0] = '\0';
num = 0;
if( channel != 0 )
membernum = FAMILY_MAXCHANNELMEMBER;
else
membernum = FAMILY_MAXMEMBER;
for( j = 0 ; j < FAMILY_MAXMEMBER ; j++ ) {
bFind = 0;
tempindex = familyMemberIndex[fmindexi][j];
//if( tempindex >= 0 ) {
if( CHAR_CHECKINDEX(tempindex) ) {
for( i=0; i< membernum ; i++) {
if( tempindex == channelMember[fmindexi][channel][i] ) {
//if( CHAR_getChar( tempindex, CHAR_NAME ) == NULL ) {
// familyMemberIndex[fmindexi][j] = -1;
// channelMember[fmindexi][channel][i] = -1;
// continue;
//}
bFind = 1;
break;
}
}
if( bFind )
strcat( subbuf, "|1|" );
else
strcat( subbuf, "|0|" );
makeEscapeString( CHAR_getChar( tempindex, CHAR_NAME ), buf, sizeof(buf));
strcat( subbuf, buf );
num++;
}
}
sprintf( sendbuf, "C|L|%d|%d%s", channel, num, subbuf);
lssproto_FM_send( fd, sendbuf);
//print(" CList:%s ", sendbuf);
}
}
void FAMILY_Bank(int fd, int meindex, char *message)
{
if(CHAR_getWorkInt(meindex,CHAR_WORKSTREETVENDOR) > 0)
return;
char token[128], token2[128], buf[1024];
int fmindex, cash, bank, toBank;
int MaxGold;
MaxGold = CHAR_getMaxHaveGold( meindex);
fmindex = CHAR_getInt( meindex, CHAR_FMINDEX);
// add shan
if( fmindex <= 0 && CHAR_getInt( meindex, CHAR_BANKGOLD) < 1) {
CHAR_talkToCli( meindex, -1, "你必须先加入家族。", CHAR_COLORWHITE);
2016-12-24 08:45:52 +08:00
return;
}
if (getStringFromIndexWithDelim(message, "|", 2, token, sizeof(token)) == FALSE)
return;
if( strcmp(token, "G" )==0 ) {
if (getStringFromIndexWithDelim(message, "|", 3, token2, sizeof(token)) == FALSE)
return;
toBank = atoi( token2 );
cash = CHAR_getInt( meindex, CHAR_GOLD);
bank = CHAR_getInt( meindex, CHAR_BANKGOLD);
if( ((cash - toBank) >= 0) && ((cash - toBank) <= MaxGold )
&&((bank + toBank) >= 0)&&((bank + toBank) <= CHAR_MAXBANKGOLDHAVE) ) {
// shan add
if( toBank > 0 && CHAR_getInt( meindex, CHAR_FMINDEX ) < 1 ) {
sprintf(buf, "抱歉!你没有加入任何家族,所以仅能领取存款");
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buf, CHAR_COLORWHITE);
return;
}
CHAR_setInt( meindex, CHAR_GOLD, cash - toBank);
CHAR_setInt( meindex, CHAR_BANKGOLD, bank + toBank);
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_GOLD);
if( toBank >= 0 ) {
sprintf(buf, "存入%d到家族银行个人帐户。", toBank);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buf, CHAR_COLORWHITE);
// Syu ADD 新增家族个人银行存取Log (不含家族银行)
2016-12-24 08:45:52 +08:00
LogFamilyBankStone(
CHAR_getChar( meindex, CHAR_NAME ),
CHAR_getChar( meindex, CHAR_CDKEY ),
toBank,
CHAR_getInt( meindex, CHAR_GOLD ),
"myBank(存款)(家族个人银行)",
2016-12-24 08:45:52 +08:00
CHAR_getInt( meindex,CHAR_FLOOR),
CHAR_getInt( meindex,CHAR_X ),
CHAR_getInt( meindex,CHAR_Y ),
CHAR_getInt( meindex,CHAR_BANKGOLD)
);
}
else {
sprintf(buf, "从家族银行个人帐户取出%d。", -toBank);
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buf, CHAR_COLORWHITE);
// Syu ADD 新增家族个人银行存取Log (不含家族银行)
2016-12-24 08:45:52 +08:00
LogFamilyBankStone(
CHAR_getChar( meindex, CHAR_NAME ),
CHAR_getChar( meindex, CHAR_CDKEY ),
toBank,
CHAR_getInt( meindex, CHAR_GOLD ),
"myBank(提款)(家族个人银行)",
2016-12-24 08:45:52 +08:00
CHAR_getInt( meindex,CHAR_FLOOR),
CHAR_getInt( meindex,CHAR_X ),
CHAR_getInt( meindex,CHAR_Y ),
CHAR_getInt( meindex,CHAR_BANKGOLD)
);
}
// Syu ADD 新增家族个人银行存取Log (不含家族银行)
2016-12-24 08:45:52 +08:00
LogStone(
-1,
CHAR_getChar( meindex, CHAR_NAME ), /* 平乓仿 */
CHAR_getChar( meindex, CHAR_CDKEY ), /* 交□扒□ID */
-toBank, /* 嗯喊 */
2016-12-24 08:45:52 +08:00
CHAR_getInt( meindex, CHAR_GOLD ),
"myBank(家族个人银行)",
2016-12-24 08:45:52 +08:00
CHAR_getInt( meindex,CHAR_FLOOR),
CHAR_getInt( meindex,CHAR_X ),
CHAR_getInt( meindex,CHAR_Y )
);
}
else
print(" bank_error ");
}
if( strcmp(token, "I" )==0 ) {
}
if( strcmp(token, "T" )==0 ) {
int toTax;
int mygold;
int FMindex;
if (getStringFromIndexWithDelim(message, "|", 3, token2, sizeof(token)) == FALSE)
return;
toTax = atoi( token2 );
#ifdef _FMVER21
if( CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) != FMMEMBER_LEADER &&
CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) != FMMEMBER_ELDER && toTax < 0 )
return;
#endif
FMindex = CHAR_getWorkInt( meindex, CHAR_WORKFMINDEXI );
mygold = CHAR_getInt( meindex, CHAR_GOLD);
if( mygold < 0 || mygold > MaxGold || toTax == 0 ) return;
if( toTax > 0 ) {//+存款
2016-12-24 08:45:52 +08:00
if( ((mygold-toTax) < 0) || (familyTax[ FMindex] + toTax) > CHAR_MAXFMBANKGOLDHAVE ) {
return;
}
}else if( toTax < 0 ){ //-取款
2016-12-24 08:45:52 +08:00
if( ((mygold-toTax)>MaxGold) || (familyTax[ FMindex] + toTax) < 0 ) {
return;
}
}
if( toTax>0 ) { //存款预先扣款
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex, CHAR_GOLD, CHAR_getInt( meindex, CHAR_GOLD)-toTax );
}
sprintf( buf, "家族银行%s处理中....", (toTax>0)?"存款":"取款");
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex , -1, buf, CHAR_COLORYELLOW);
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_GOLD);
sprintf( buf, "%d", toTax );
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), FM_FIX_FMGOLD, buf,
"", CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX), CONNECT_getFdid(fd));
//print(" getTax:%s=%d ", CHAR_getChar(meindex, CHAR_FMNAME), toTax );
}
}
void ACFMPointList(int ret, char *data)
{
}
#ifdef _ADD_FAMILY_TAX // WON ADD 增加庄园税收
// GS 启动及定时向 AC 要求庄园税率
2016-12-24 08:45:52 +08:00
void GS_ASK_TAX(void)
{
saacproto_GS_ASK_TAX_send(acfd);
}
// 庄园族长修改税率
2016-12-24 08:45:52 +08:00
void FAMILY_FIX_TAX( int fd, int index, char* message)
{
int fmpointindex=0, tax=0, fmindex=-1, i;
char token[256];
char pointbuf[256];
// extern struct FM_POINTLIST fmpointlist; // 家族据点
// 判断资格
2016-12-24 08:45:52 +08:00
if (!CHAR_CHECKINDEX(index)) return;
if ((CHAR_getInt(index, CHAR_FMINDEX) == -1)
|| (strcmp(CHAR_getChar(index, CHAR_FMNAME), "") == 0)
#ifdef _FMVER21
|| (CHAR_getInt(index, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER))
#else
|| (CHAR_getInt(index, CHAR_FMLEADERFLAG) != 1))
#endif
{
return;
}
// 家族编号
2016-12-24 08:45:52 +08:00
fmindex = CHAR_getInt(index, CHAR_FMINDEX);
// 检查是否为庄园的家族
2016-12-24 08:45:52 +08:00
for( i=0 ; i<FAMILY_MAXHOME ; i++ ) {
if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 5, pointbuf, sizeof(pointbuf)) == FALSE )
continue;
if( fmindex == atoi(pointbuf) ){
if( getStringFromIndexWithDelim(message, "|", 3, token, sizeof(token)) == FALSE) return;
fmpointindex = atoi(token);
if( getStringFromIndexWithDelim( message, "|", 4, token, sizeof(token)) == FALSE) return;
tax = atoi(token);
saacproto_ACFMSetTAX_send( fd, tax, index, fmindex );
return;
}
}
}
#endif
void FAMILY_SetPoint(int fd, int meindex, char *message)
{
int i, fmpointindex, fl, x, y, fmdp, fmlevel = 0;
char token[128], buf[1024];
if (!CHAR_CHECKINDEX(meindex)) return;
if (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE)
return;
if ((CHAR_getInt(meindex, CHAR_FMINDEX) == -1)
|| (strcmp(CHAR_getChar(meindex, CHAR_FMNAME), "") == 0)
#ifdef _FMVER21
|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER))
#else
|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1))
#endif
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你不是族长,所以没有修改的权力唷!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
fmdp = CHAR_getWorkInt(meindex, CHAR_WORKFMDP);
for (i = 0; i < arraysizeof(fmdplevelexp); i++){
if (fmdp < fmdplevelexp[i + 1] && fmdp >= fmdplevelexp[i]){
fmlevel = i;
}
}
for (i = 1; i <= MANORNUM; i++) {
if (((strcmp(fmpks[i * MAX_SCHEDULE + 1].guest_name,
CHAR_getChar(meindex, CHAR_FMNAME)) == 0))
&& ((fmpks[i * MAX_SCHEDULE + 1].flag = FMPKS_FLAG_MANOR_BATTLEBEGIN)
|| (fmpks[i * MAX_SCHEDULE + 1].flag == FMPKS_FLAG_MANOR_PREPARE))){
char tmpbuf[256];
sprintf(tmpbuf, "\n你跟%s已经有预约庄园争夺赛了\n无法再申请庄园了喔!",
2016-12-24 08:45:52 +08:00
fmpks[i * MAX_SCHEDULE + 1].host_name);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString(tmpbuf, buf, sizeof(buf)));
return;
}
}
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
fmpointindex = atoi(token);
if (getStringFromIndexWithDelim(message, "|", 3, token,
sizeof(token)) == FALSE) return;
fl = atoi(token);
if (getStringFromIndexWithDelim(message, "|", 4, token,
sizeof(token)) == FALSE) return;
x = atoi(token);
if (getStringFromIndexWithDelim(message, "|", 5, token,
sizeof(token)) == FALSE) return;
y = atoi(token);
/*
print("SetFMPoint charname:%s fmindex:%d index:%d pointindex:%d fl:%d x:%d y:%d\n",
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI),
fmpointindex, fl, x, y);
*/
saacproto_ACSetFMPoint_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI),
fmpointindex, fl, x, y, CONNECT_getFdid(fd));
}
void ACSetFMPoint(int ret, int r, int clifd)
{
int meindex = CONNECT_getCharaindex(clifd);
char message[256], buf[512];
if (!CHAR_CHECKINDEX(meindex)) return;
if ((CHAR_getWorkInt(meindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE)
|| (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE))
return;
if (ret == 0){
if (r == -1)
sprintf(message, "申请家族失败!");
2016-12-24 08:45:52 +08:00
else if (r == -2)
sprintf(message, "你已经有家族据点了~不得重复申请!");
2016-12-24 08:45:52 +08:00
else if (r == -3)
sprintf(message, "尚未到达申请家族据点的资格!");
2016-12-24 08:45:52 +08:00
else if (r == -4)
sprintf(message, "家族据点已经有家族在使用中罗!");
2016-12-24 08:45:52 +08:00
else if (r == -5)
sprintf(message, "您的家族人数未达申请标准唷!");
2016-12-24 08:45:52 +08:00
}
else if (ret == 1)
sprintf(message, "申请家族据点OK!");
2016-12-24 08:45:52 +08:00
lssproto_WN_send( clifd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString(message, buf, sizeof(buf)));
}
void ACFMAnnounce(int ret, char *fmname, int fmindex, int index,
int kindflag, char *data, int color)
{
// kindflag 1:族长广播 2:系统公告家族被删除 3:系统通知讯息
2016-12-24 08:45:52 +08:00
int i, chindex;
if( ret != 1 ) return;
// print("fmname:%s fmindex:%d index:%d kindflag:%d data:%s color:%d\n",
// fmname, fmindex, index, kindflag, data, color);
for( i=0; i < FAMILY_MAXMEMBER; i++)
{
chindex = familyMemberIndex[index][i];
if( chindex >= 0 ) {
if( CHAR_getCharUse(chindex) )
{
if (kindflag == 1)
{
#ifdef _FMVER21
// shan 2001/12/13
//if( CHAR_getInt( chindex, CHAR_FMLEADERFLAG ) == FMMEMBER_MEMBER )
if( CHAR_getInt( chindex, CHAR_FMLEADERFLAG ) == FMMEMBER_MEMBER ||
CHAR_getInt( chindex, CHAR_FMLEADERFLAG ) == FMMEMBER_ELDER )
#else
if( CHAR_getInt( chindex, CHAR_FMLEADERFLAG ) == 2 )
#endif
CHAR_talkToCli( chindex, -1, data, color );
}
else if (kindflag == 2)
{
int fd = getfdFromCharaIndex( chindex );
if (fd == -1) return;
SetFMVarInit( chindex );
CHAR_talkToCli( chindex , -1, "由於您的家族在七天之内没有召收到10名家族成员,所以被迫解散了!",
2016-12-24 08:45:52 +08:00
CHAR_COLORRED);
}
}else
familyMemberIndex[index][i] = -1;
}
}
if (kindflag == 3)
{
int meindex = 0;
int clifd = getfdFromFdid(color);
if (CONNECT_checkfd(clifd) == FALSE) return;
meindex = CONNECT_getCharaindex(clifd);
if (!CHAR_CHECKINDEX(meindex)) return;
CHAR_talkToCli(meindex, -1, data, CHAR_COLORRED);
if(strstr(data,"已经审核完毕您的加入申请!")!=NULL){
2016-12-24 08:45:52 +08:00
}else if(strstr(data,"已经将你踢出家族了!")!=NULL){
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex , CHAR_RIDEPET, -1 );
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , CHAR_getInt( meindex , CHAR_BASEBASEIMAGENUMBER) );
CHAR_complianceParameter( meindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_RIDEPET);
#ifdef _FM_METAMO
CHAR_ReMetamo(meindex);
#endif
}
}
if (kindflag == 4)
{
int meindex = 0;
char buf[1024];
int clifd = getfdFromFdid(color);
// print("Here1\n");
if (CONNECT_checkfd(clifd) == FALSE) return;
meindex = CONNECT_getCharaindex(clifd);
if (!CHAR_CHECKINDEX(meindex)) return;
// print("Here2\n");
lssproto_WN_send(clifd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString(data, buf, sizeof(buf)));
}
}
void FAMILY_SetAcceptFlag(int fd, int meindex, char *message)
{
int result;
char token[128], buf[1024];
if (!CHAR_CHECKINDEX(meindex)) return;
if ((CHAR_getWorkInt(meindex, CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE)
|| (CHAR_getWorkInt(meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE))
return;
if ((CHAR_getInt(meindex, CHAR_FMINDEX) == -1)
|| (strcmp(CHAR_getChar(meindex, CHAR_FMNAME), "") == 0)
#ifdef _FMVER21
// || ((CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)
// && (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_ELDER)
// && (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_VICELEADER)))
|| ((CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)
&& (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_ELDER)))
#else
|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1))
#endif
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你不是族长,所以没有修改的权力唷!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
result = atoi(token);
if ((result == 0) || (result == 1))
{
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), FM_FIX_ACCEPTFLAG,
token, "", CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
}
}
void FAMILY_FixRule( int fd, int meindex, char* message )
{
char token[1024], buf[1024];
if (!CHAR_CHECKINDEX(meindex))return;
if ((CHAR_getInt(meindex, CHAR_FMINDEX) == -1)
|| (strcmp(CHAR_getChar(meindex, CHAR_FMNAME), "") == 0)
#ifdef _FMVER21
|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER))
#else
|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1))
#endif
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n你不是族长,所以没有修改的权力唷!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
if( strcmp( token, "R") == 0 )
{
if (getStringFromIndexWithDelim(message, "|", 3, buf,
sizeof( buf ) ) == FALSE)return;
if (strcmp( buf, "") == 0)
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n家族主旨不可为空白唷!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}
// print(" new_rule:%s ", buf);
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), FM_FIX_FMRULE,
buf, "", CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
return;
}
if( strcmp( token, "P") == 0 )
{
int havepetindex, petindex, i;
char petname[20], petattr[512];
// 检查是否已有守护兽
2016-12-24 08:45:52 +08:00
for( i =0; i< CHAR_MAXPETHAVE; i++ )
{
int petindex = CHAR_getCharPet(meindex, i);
if (!CHAR_CHECKINDEX(petindex)) continue;
if( CHAR_getInt( petindex , CHAR_PETFAMILY ) ==1 )
{
// lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
// WINDOW_BUTTONTYPE_OK,
// -1, -1,
// makeEscapeString( "\n原本的守护兽还在唷。", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
// return;
CHAR_setInt( petindex , CHAR_PETFAMILY,0 );
}
}
// 检查是否已有守护兽(寄宠)
2016-12-24 08:45:52 +08:00
for( i =0; i< CHAR_MAXPOOLPETHAVE; i++ )
{
int petindex = CHAR_getCharPoolPet(meindex, i);
if (!CHAR_CHECKINDEX(petindex)) continue;
if( CHAR_getInt( petindex , CHAR_PETFAMILY ) ==1 )
{
// lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
// WINDOW_BUTTONTYPE_OK,
// -1, -1,
// makeEscapeString( "\n原本的守护兽还在唷。", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
// return;
CHAR_setInt( petindex , CHAR_PETFAMILY,0 );
}
}
if (getStringFromIndexWithDelim(message, "|", 3, buf,
sizeof( buf ) ) == FALSE) return;
havepetindex = atoi( buf );
petindex = CHAR_getCharPet(meindex, havepetindex);
if (!CHAR_CHECKINDEX(petindex)) return;
if (strlen(CHAR_getChar(petindex, CHAR_USERPETNAME)) == 0)
sprintf(petname, "%s", CHAR_getChar(petindex, CHAR_NAME));
else
sprintf(petname, "%s", CHAR_getChar(petindex, CHAR_USERPETNAME));
sprintf(petattr, "%d %d %d %d",
CHAR_getInt(petindex, CHAR_BASEIMAGENUMBER),
CHAR_getWorkInt(petindex, CHAR_WORKATTACKPOWER),
CHAR_getWorkInt(petindex, CHAR_WORKDEFENCEPOWER),
CHAR_getWorkInt(petindex, CHAR_WORKQUICK));
CHAR_setInt(petindex, CHAR_PETFAMILY, 1);
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), FM_FIX_FMPET,
petname, petattr, CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
return;
}
}
void JoinMemberIndex( int meindex, int fmindexi )
{
int i;
for( i = 0 ; i < FAMILY_MAXMEMBER; i++){
if( familyMemberIndex[fmindexi][i] == meindex ) familyMemberIndex[fmindexi][i] = -1;
}
for( i = 0 ; i < FAMILY_MAXMEMBER; i++){
if( familyMemberIndex[fmindexi][i] < 0 ){
familyMemberIndex[fmindexi][i] = meindex;
break;
}
}
#ifdef _CHANNEL_MODIFY
i = 0;
// 先清掉旧的频道记录
2016-12-24 08:45:52 +08:00
while(i < FAMILY_MAXMEMBER){
if(channelMember[fmindexi][0][i] == meindex){
channelMember[fmindexi][0][i] = -1;
}
i++;
}
i = 0;
// 加入频道
2016-12-24 08:45:52 +08:00
while(i < FAMILY_MAXMEMBER){
if(channelMember[fmindexi][0][i] == -1){
channelMember[fmindexi][0][i] = meindex;
CHAR_setWorkInt(meindex,CHAR_WORKFMCHANNEL,0);
break;
}
i++;
}
#endif
}
void LeaveMemberIndex( int meindex, int fmindexi )
{
int i;
for( i = 0 ; i < FAMILY_MAXMEMBER; i++){
if( familyMemberIndex[fmindexi][i] == meindex ) familyMemberIndex[fmindexi][i] = -1;
}
#ifdef _CHANNEL_MODIFY
i = 0;
// 清掉旧的频道记录
2016-12-24 08:45:52 +08:00
while(i < FAMILY_MAXMEMBER){
if(channelMember[fmindexi][0][i] == meindex){
channelMember[fmindexi][0][i] = -1;
}
i++;
}
#endif
}
int FAMILY_RidePet( int fd, int meindex, char* message )
{
//print("...进入骑趁1111\n");
2016-12-24 08:45:52 +08:00
char token[64], token2[64];
int petindex, rideGraNo = 0, leaderimageNo;
// Arminius 8.25 recover
int i;
#ifndef _NEW_RIDEPETS
int big4fm = 0;
#endif
if (!CHAR_CHECKINDEX(meindex))return 0;
// Robin fix 战斗中不可骑
2016-12-24 08:45:52 +08:00
if( CHAR_getWorkInt( meindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE )
{
CHAR_talkToCli( meindex, -1, "战斗中不可骑宠!", CHAR_COLORYELLOW );
2016-12-24 08:45:52 +08:00
return 0;
}
// Robin fix 交易中不可骑
2016-12-24 08:45:52 +08:00
if( CHAR_getWorkInt(meindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE){
CHAR_talkToCli( meindex, -1, "交易中不可骑宠!", CHAR_COLORYELLOW );
2016-12-24 08:45:52 +08:00
return 0;
}
#ifdef _PETSKILL_BECOMEPIG
if( CHAR_getInt( meindex, CHAR_BECOMEPIG) > -1 ){ //处於乌力化状态
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex, CHAR_RIDEPET, -1 );
//宠物选项的状态依然为"骑乘",这里修正过来
2016-12-24 08:45:52 +08:00
CHAR_complianceParameter( meindex );
CHAR_send_P_StatusString( meindex, CHAR_P_STRING_RIDEPET);
CHAR_talkToCli( meindex, -1, "目前你处于乌力化状态,不能骑乘宠物。", CHAR_COLORYELLOW );
2016-12-24 08:45:52 +08:00
return 0;
}
#endif
if (getStringFromIndexWithDelim(message, "|", 2, token, sizeof(token)) == FALSE) return 0;
if( strcmp( token, "P") == 0) {
if (getStringFromIndexWithDelim(message, "|", 3, token2, sizeof(token2)) == FALSE)
return 0;
if( atoi(token2) != -1 ) {
petindex = CHAR_getCharPet( meindex, atoi( token2 ) );
if(!CHAR_CHECKINDEX(petindex))return;
if( CHAR_getInt( meindex, CHAR_DEFAULTPET ) == atoi( token2 ) ) return 0;
if( CHAR_getInt( meindex, CHAR_RIDEPET) != -1 ) return 0;
#ifdef _PET_BUG
if(CHAR_getInt( petindex, CHAR_VITAL)>=getPetPoint(0)*20 || CHAR_getInt(petindex,CHAR_STR)>=getPetPoint(1)*80 || CHAR_getInt(petindex,CHAR_TOUGH)>=getPetPoint(2)*80 || CHAR_getInt(petindex,CHAR_DEX)>=getPetPoint(3)*100)
{
CHAR_talkToCli( meindex, -1, "该宠物属性过高,无法骑乘。", CHAR_COLORYELLOW );
2016-12-24 08:45:52 +08:00
return 0;
}
#endif
#ifdef _NOT_PETRIDE
if(strstr(CHAR_getChar(petindex,CHAR_NAME),"*")){
CHAR_talkToCli(meindex, -1, "此宠物无法骑乘。", CHAR_COLORRED);
2016-12-24 08:45:52 +08:00
return 0;
}
#endif
if( CHAR_getInt( meindex, CHAR_LEARNRIDE) < CHAR_getInt( petindex, CHAR_LV ) )
{
char buff[255];
sprintf(buff,"你目前只能骑乘等级小于%d级的宠。",CHAR_getInt( meindex, CHAR_LEARNRIDE));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buff, CHAR_COLORYELLOW );
return 0;
}
if( CHAR_getWorkInt( petindex, CHAR_WORKFIXAI ) < 100 )
{
CHAR_talkToCli( meindex, -1, "该骑宠的忠小于100", CHAR_COLORYELLOW );
2016-12-24 08:45:52 +08:00
return 0;
}
#ifdef _RIDELEVEL
if( CHAR_getInt( meindex, CHAR_LV)+getRideLevel() < CHAR_getInt( petindex, CHAR_LV ) )
{
char buff[255];
sprintf(buff,"你最高只能骑宠等级比你大%d级的宠。",getRideLevel());
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buff, CHAR_COLORYELLOW );
return 0;
}
#else
if( CHAR_getInt( meindex, CHAR_LV)+5 < CHAR_getInt( petindex, CHAR_LV ) ) return 0;
#endif
#ifdef _PET_2TRANS
if( CHAR_getInt( petindex, CHAR_TRANSMIGRATION) > 2 ) return 0;
if( CHAR_getInt( petindex, CHAR_TRANSMIGRATION) > getPetRideTrans()) return 0;
#endif
#ifdef _RIDEBUG
if(CHAR_getInt(meindex, CHAR_DEFAULTPET) == petindex ){//如果骑宠是战宠
2016-12-24 08:45:52 +08:00
return 0;
}
#endif
#ifdef _CAX_PET_ITEMRIDE
if( getpetitemride() == 0 ){
{
int iindex = 0 ;
for(;iindex < CHAR_PETITEMNUM; iindex++){
if(CHAR_getItemIndex(petindex,iindex) != -1){
char buff[255];
sprintf(buff,"宠物身上有装备不可骑乘!");
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buff, CHAR_COLORYELLOW );
return 0;
}
}
}
}
#endif
#ifdef _ALLBLUES_LUA_1_6
if(FamilyRideFunction(meindex, petindex, atoi( token2 )) != FALSE){
return 1;
}
#endif
leaderimageNo = 100700
+ ((CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER)-100000)/20)*10
+ CHAR_getInt( meindex, CHAR_FMSPRITE)*5;
// Arminius 8.25 recover
for( i=0; i< arraysizeof(ridePetTable) ; i++ ){
#ifdef _NEW_RIDEPETS
if( (( CHAR_getInt( meindex, CHAR_BASEIMAGENUMBER) == ridePetTable[i].charNo ) ||
( CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].charNo ))
#else
if( ( CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].charNo )
#endif
&& ( CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].petNo ) ){
rideGraNo = ridePetTable[i].rideNo;
break;
}
#ifndef _NEW_RIDEPETS
if( ( leaderimageNo == ridePetTable[i].charNo )
&& ( CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].petNo )
#ifdef _EVERYONE_RIDE
&& big4fm != 0
&& CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) != FMMEMBER_NONE
&& CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) != FMMEMBER_APPLY )
#else
&& CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) == FMMEMBER_LEADER )
#endif
{
rideGraNo = ridePetTable[i].rideNo;
break;
}
#endif
}
#ifdef _NEW_RIDEPETS
if( rideGraNo == 0 ) {
int ti=-1, index, image=-1;
int petNo = CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER);
int playerNo = CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER);
int playerlowsride = CHAR_getInt( meindex, CHAR_LOWRIDEPETS);
#ifdef _RIDE_CF
int playerlowsride1 = CHAR_getInt( meindex, CHAR_LOWRIDEPETS1);
int playerhighride2 = CHAR_getInt( meindex, CHAR_HIGHRIDEPETS2);
//print( "骑趁,数据信息:lowride = %d, lowride1 = %d, highride1 = %d, highride2 = %d. \n", playerlowsride, playerlowsride1, playerhighsride1, playerhighsride2 );
2016-12-24 08:45:52 +08:00
if( (ti = RIDEPET_getPETindex( petNo, playerlowsride, playerlowsride1, playerhighride2 )) >= 0 )
//if( (ti = RIDEPET_getPETindex( petNo, playerlowsride, NULL, NULL )) >= 0 )
#else
if( (ti = RIDEPET_getPETindex( petNo, playerlowsride )) >= 0 )
#endif
{
if( (index = RIDEPET_getNOindex( playerNo)) >= 0 ){
if( (image = RIDEPET_getRIDEno( index,ti)) >= 0 ) {
rideGraNo = image;
//print("...进入骑趁1111, 222 rideGraNo= %d\n", image);
2016-12-24 08:45:52 +08:00
}
}
}
}
#endif
if( rideGraNo != 0 ){
#ifdef _ITEM_METAMO
// CHAR_setWorkInt( meindex, CHAR_WORKITEMMETAMO, 0);
#endif
//print("...进入骑趁1111, 222, 333 rideGraNo= %d, ridepet = %s\n", rideGraNo, token2);
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex , CHAR_RIDEPET, atoi( token2 ) );
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , rideGraNo );
CHAR_complianceParameter( meindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( meindex, CHAR_P_STRING_RIDEPET );
return 1;
}else{
int floor = CHAR_getWorkInt( meindex, CHAR_WORKFMFLOOR);
if( floor !=-1 && CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) != FMMEMBER_NONE
&& CHAR_getInt( meindex, CHAR_FMLEADERFLAG ) != FMMEMBER_APPLY){
#ifdef _FM_LEADER_RIDE
if(CHAR_FmLeaderRide( meindex, atoi( token2 )))return 1;
#endif
#ifdef _RIDEMODE_20
if(getRideMode()>0){
int ti=-1, index, image=-1;
int petNo = CHAR_getInt( petindex, CHAR_BASEBASEIMAGENUMBER);
int playerNo = CHAR_getInt( meindex, CHAR_BASEBASEIMAGENUMBER);
int petindex = CHAR_getCharPet( meindex, atoi( token2 ));
if(getRideMode()==1 || getRideMode()==2 ){
if(floor == 1041 || floor == 2031 || floor == 3031 || floor == 4031
|| floor == 5031 || floor == 6031 || floor == 7031
|| floor == 8031 || floor == 9031 || floor == 10031){
if( CHAR_getInt( meindex, CHAR_FMSPRITE ) == 0){
if(petNo==100372){
#ifdef _RIDE_CF
if( (ti = RIDEPET_getPETindex( petNo, RIDE_PET8, 0, 0 )) >= 0 )
#else
if( (ti = RIDEPET_getPETindex( petNo, RIDE_PET8 )) >= 0 )
#endif
{
if( (index = RIDEPET_getNOindex( playerNo)) >= 0 ){
if( (image = RIDEPET_getRIDEno( index,ti)) >= 0 ){
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , image );
}
}
}
}
}else if( CHAR_getInt( meindex, CHAR_FMSPRITE ) == 1){
if(petNo==100373){
#ifdef _RIDE_CF
if( (ti = RIDEPET_getPETindex( petNo, RIDE_PET9, 0, 0 )) >= 0 )
#else
if( (ti = RIDEPET_getPETindex( petNo, RIDE_PET9 )) >= 0 )
#endif
{
if( (index = RIDEPET_getNOindex( playerNo)) >= 0 ){
if( (image = RIDEPET_getRIDEno( index,ti)) >= 0 ){
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , image );
}
}
}
}
}
}
}else{
#ifdef _RIDE_CF
if( (ti = RIDEPET_getPETindex( petNo, RIDE_PET_ALL, 0, 0 )) >= 0 )
#else
if( (ti = RIDEPET_getPETindex( petNo, RIDE_PET_ALL )) >= 0 )
#endif
{
if( (index = RIDEPET_getNOindex( playerNo)) >= 0 ){
if( (image = RIDEPET_getRIDEno( index,ti)) >= 0 ){
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , image );
}
}
}
}
if(image!=-1){
CHAR_setInt( meindex , CHAR_RIDEPET, atoi( token2 ) );
CHAR_complianceParameter( meindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( meindex, CHAR_P_STRING_RIDEPET );
return 1;
}
}
#endif
}
#ifdef _ITEM_RIDE
{
int itemindex = CHAR_getItemIndex( meindex, 0 );
if(!ITEM_CHECKINDEX(itemindex)) return 0;
if( !strcmp( ITEM_getChar( itemindex, ITEM_USEFUNC), "ITEM_RIDE") ) {
char petmetamo[12],ridemetamo[12];
char *itemarg = ITEM_getChar( itemindex, ITEM_ARGUMENT);
getStringFromIndexWithDelim( itemarg, "|", 1, petmetamo, sizeof(petmetamo));
getStringFromIndexWithDelim( itemarg, "|", 2, ridemetamo, sizeof(ridemetamo));
int metamo= CHAR_getInt( petindex , CHAR_BASEIMAGENUMBER);
if(metamo==atoi(petmetamo)){
//print("...进入骑趁还原人物1111, 222, 333 , ridemetamo = %d, ridepet = %s \n", ridemetamo, token2);
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex , CHAR_RIDEPET, atoi( token2 ) );
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , atoi( ridemetamo ) );
CHAR_complianceParameter( meindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( meindex, CHAR_P_STRING_RIDEPET );
return 1;
}
}
}
#endif
}
}else { //还原人物 basebaseimage
//print("...进入骑趁还原人物1111, 222, 333 \n");
2016-12-24 08:45:52 +08:00
CHAR_setInt( meindex , CHAR_RIDEPET, -1 );
CHAR_setInt( meindex , CHAR_BASEIMAGENUMBER , CHAR_getInt( meindex , CHAR_BASEBASEIMAGENUMBER) );
CHAR_complianceParameter( meindex );
CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ));
CHAR_send_P_StatusString( meindex , CHAR_P_STRING_RIDEPET);
}
}
return 0;
}
void ACFixFMPK(int winindex, int loseindex, int data)
{
int i = 0, charindex = 0;
char msg1[256], msg2[256];
sprintf(msg1, "恭喜您!家族声望提高了%8d点", (data / 100));
sprintf(msg2, "家族声望减少了%8d点", (data / 100));
2016-12-24 08:45:52 +08:00
for (i = 0; i < FAMILY_MAXMEMBER; i++)
{
charindex = familyMemberIndex[winindex][i];
if( charindex >= 0 ) {
if( CHAR_getCharUse(charindex) )
CHAR_talkToCli( charindex , -1, msg1, CHAR_COLORYELLOW);
else
familyMemberIndex[winindex][i] = -1;
}
charindex = familyMemberIndex[loseindex][i];
if( charindex >= 0 ) {
if( CHAR_getCharUse(charindex) )
CHAR_talkToCli( charindex , -1, msg2, CHAR_COLORRED);
else
familyMemberIndex[loseindex][i] = -1;
}
}
}
void getNewFMList()
{
saacproto_ACShowFMList_send( acfd );
}
//int channelMember[FAMILY_MAXNUM][FAMILY_MAXCHANNEL][FAMILY_MAXMEMBER];
//int familyMemberIndex[FAMILY_MAXNUM][FAMILY_MAXMEMBER];
void checkFamilyIndex( void )
{
int i, j, k, charaindex, err1=0, err2=0;
// print(" checkFamilyIndex! ");
for( i=0; i<FAMILY_MAXNUM; i++){
for( j=0; j<FAMILY_MAXMEMBER; j++){
charaindex = familyMemberIndex[i][j];
if( charaindex == -1 ) continue;
if( !CHAR_CHECKINDEX(charaindex) ){
familyMemberIndex[i][j] = -1;
err1++;
continue;
}
if( CHAR_getWorkInt( charaindex, CHAR_WORKFMINDEXI ) != i )
{
familyMemberIndex[i][j] = -1;
err1++;
continue;
}
}
for( j=0; j<FAMILY_MAXCHANNEL; j++ )
for( k=0; k<FAMILY_MAXMEMBER; k++)
{
charaindex = channelMember[i][j][k];
if( charaindex == -1 ) continue;
if( !CHAR_CHECKINDEX(charaindex) )
{
channelMember[i][j][k] = -1;
err2++;
continue;
}
if( CHAR_getWorkInt(charaindex, CHAR_WORKFMINDEXI) != i )
{
channelMember[i][j][k] = -1;
err2++;
continue;
}
}
}
// if( err1 )
// print("家族索引建立错误:%d\n", err1);
2016-12-24 08:45:52 +08:00
// if( err2 )
// print("成员建立错误:%d\n", err2);
2016-12-24 08:45:52 +08:00
if( ! (err1&&err2) )
print("ok!\n");
}
void FAMILY_LeaderFunc( int fd, int meindex, char *message )
{
char token[1024], token2[1024], buf[1024];
if (!CHAR_CHECKINDEX(meindex))return;
if ((CHAR_getInt(meindex, CHAR_FMINDEX) == -1)
|| (strcmp(CHAR_getChar(meindex, CHAR_FMNAME), "") == 0)
//|| (CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)
)
{
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "你还未加入家族,所以不能使用唷!", buf, sizeof(buf) ));
2016-12-24 08:45:52 +08:00
return;
}
if (getStringFromIndexWithDelim(message, "|", 2, token,
sizeof(token)) == FALSE) return;
if( strcmp( token, "F") == 0 ){
int fmindex_wk;
char sendbuf[1024],buf[1024];
fmindex_wk = CHAR_getWorkInt( meindex, CHAR_WORKFMINDEXI);
#ifdef _FMVER21
// if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER &&
// CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_ELDER &&
// CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_VICELEADER ) return;
if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER &&
CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_ELDER ) return;
#else
if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1) return;
#endif
if( CHAR_getInt(meindex, CHAR_FMINDEX) > 0 ){
if( fmindex_wk < 0 || fmindex_wk >= FAMILY_MAXNUM){
print("FamilyNumber Data Error!!");
return;
}
}
saacproto_ACShowMemberList_send( acfd, fmindex_wk);
sprintf( sendbuf, " 『族 长 需 知』\n请小心处理族员的资料,一经修改後就无法回复原态,敬请小心。");
2016-12-24 08:45:52 +08:00
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_FM_MESSAGE2,
CHAR_getWorkInt( leaderdengonindex, CHAR_WORKOBJINDEX),
makeEscapeString( sendbuf, buf, sizeof(buf)));
}
if( strcmp( token, "L") == 0 ){
int i, kind, letterNo = 0;
char subtoken[256];
#ifdef _FMVER21
// if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER &&
// CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_INVITE &&
// CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_VICELEADER) return;
if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER &&
CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_ELDER ) return;
#else
if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1) return;
#endif
if (getStringFromIndexWithDelim(message, "|", 3, token2,
sizeof(token2)) == FALSE) return;
kind = atoi( token2 );
for( i=0 ; i<FMPOINTNUM ; i++ ) {
getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 5, subtoken, sizeof(subtoken));
if( CHAR_getInt( meindex, CHAR_FMINDEX ) == atoi(subtoken) ) {
getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 9, subtoken, sizeof(subtoken));
if( kind == 1 ) {
switch( atoi(subtoken) ) {
case 1:
letterNo = 19001; break;
case 2:
letterNo = 19002; break;
case 3:
letterNo = 19003; break;
case 4:
letterNo = 19004; break;
#ifdef _NEW_RIDEPETS
case 5:
letterNo = 20229; break;
case 6:
letterNo = 20230; break;
case 7:
letterNo = 20231; break;
case 8:
letterNo = 20232; break;
case 9:
letterNo = 20233; break;
case 10:
if( CHAR_getInt( meindex, CHAR_FMSPRITE ) == 0)
letterNo = 20768;
else if( CHAR_getInt( meindex, CHAR_FMSPRITE ) == 1)
letterNo = 20769;
break;
#endif
}
} else
if( kind == 2 ) {
switch( atoi(subtoken) ) {
case 1:
letterNo = 19005; break;
case 2:
letterNo = 19006; break;
case 3:
letterNo = 19007; break;
case 4:
letterNo = 19008; break;
#ifdef _NEW_RIDEPETS
case 5:
letterNo = 20224; break;
case 6:
letterNo = 20225; break;
case 7:
letterNo = 20226; break;
case 8:
letterNo = 20227; break;
case 9:
letterNo = 20228; break;
case 10:
if( CHAR_getInt( meindex, CHAR_FMSPRITE ) == 0)
letterNo = 20766;
else if( CHAR_getInt( meindex, CHAR_FMSPRITE ) == 1)
letterNo = 20767;
break;
#endif
}
}
}
}
if( letterNo == 0 ) {
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString("\n只有拥有庄园的族长,才能制作唷!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
return;
}else {
int emptyitemindexinchara = CHAR_findEmptyItemBox( meindex );
int itemindex = ITEM_makeItemAndRegist( letterNo );
if( itemindex == -1 ) return;
if( emptyitemindexinchara < 0 ) {
CHAR_talkToCli( meindex, -1, "道具栏已满。", CHAR_COLORWHITE);
2016-12-24 08:45:52 +08:00
return;
}
#ifdef _CAX_FAME_KOUFEI
if ( CHAR_getInt(meindex, CHAR_FAME) >= getfamekoufei()*100 ){
CHAR_setInt( meindex, CHAR_FAME, CHAR_getInt(meindex, CHAR_FAME) - getfamekoufei()*100 );
#endif
CHAR_setItemIndex( meindex, emptyitemindexinchara, itemindex );
ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX,-1);
ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, meindex);
CHAR_sendItemDataOne( meindex, emptyitemindexinchara);
#ifdef _CAX_FAME_KOUFEI
if ( getfamekoufei() > 0 ){
snprintf( buf, sizeof( buf), "制作%s成功。并扣除%d点声望资费",ITEM_getChar( itemindex, ITEM_NAME),getfamekoufei());
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buf, CHAR_COLORWHITE);
}else{
#endif
snprintf( buf, sizeof( buf), "制作%s成功。",ITEM_getChar( itemindex, ITEM_NAME));
2016-12-24 08:45:52 +08:00
CHAR_talkToCli( meindex, -1, buf, CHAR_COLORWHITE);
#ifdef _CAX_FAME_KOUFEI
}
}else{
CHAR_talkToCli( meindex, -1, "你的声望不够哦", CHAR_COLORYELLOW );
2016-12-24 08:45:52 +08:00
return;
}
#endif
}
}
if( strcmp( token, "CHANGE") == 0 ){
int fmindexi, j, num=0;
char subbuf[2048], sendbuf[2048];
if (getStringFromIndexWithDelim(message, "|", 3, token2,
sizeof(token2)) == FALSE) return;
fmindexi = CHAR_getWorkInt( meindex, CHAR_WORKFMINDEXI );
// 要求族长候选人列表
2016-12-24 08:45:52 +08:00
if( strcmp( token2, "L") == 0 ){
char subsub[128];
#ifdef _FMVER21
if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER) return;
#else
if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1) return;
#endif
strcpy( subbuf, "");
for( j = 0 ; j < FAMILY_MAXMEMBER ; j++ ) {
int tempindex = familyMemberIndex[fmindexi][j];
// CoolFish: 2001/9/22
if (!CHAR_CHECKINDEX(tempindex)) continue;
if (CheckLeaderQ(tempindex) >= 0 && tempindex != meindex )
{
char tmpbuf[1024];
sprintf(tmpbuf, "%s", CHAR_getChar(tempindex, CHAR_NAME));
makeEscapeString( tmpbuf, buf, sizeof(buf));
sprintf( subsub, "|%d|%s", j, buf );
strcat( subbuf, subsub );
num++;
}
}
sprintf( sendbuf, "L|CHANGE|L|%d%s", num, subbuf );
//lssproto_FM_send( fd, sendbuf);
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_LEADERSELECT,
WINDOW_BUTTONTYPE_OK,
-1, -1,
sendbuf );
}
// 询问族长候选人是否愿意接受
2016-12-24 08:45:52 +08:00
if( strcmp( token2, "Q") == 0 )
{
char token3[64], token4[64];
int toindex;
#ifdef _FMVER21
if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER) return;
#else
if( CHAR_getInt(meindex, CHAR_FMLEADERFLAG) != 1) return;
#endif
if (getStringFromIndexWithDelim(message, "|", 4, token3,
sizeof(token3)) == FALSE)return;
if (getStringFromIndexWithDelim(message, "|", 5, token4,
sizeof(token4)) == FALSE)return;
makeStringFromEscaped( token4 );
if( atoi(token3) < 0 || atoi(token3) > FAMILY_MAXMEMBER ) return;
toindex = familyMemberIndex[fmindexi][atoi(token3)];
if( !CHAR_CHECKINDEX( toindex ) ) return;
if( strcmp( token4, CHAR_getChar( toindex, CHAR_NAME)) != 0 ) return;
if( CheckLeaderQ(toindex) < 0 ) return;
// 双方都决定让位时CHAR_WORKLEADERCHANGE存放对方的charaindex
2016-12-24 08:45:52 +08:00
CHAR_setWorkInt( toindex, CHAR_WORKLEADERCHANGE, meindex);
CHAR_setWorkInt( meindex, CHAR_WORKLEADERCHANGE, toindex);
sprintf( sendbuf, "%s|%d", makeEscapeString( CHAR_getChar( meindex, CHAR_NAME ), buf, sizeof(buf)), meindex );
lssproto_WN_send( CHAR_getWorkInt( toindex, CHAR_WORKFD ), WINDOW_MESSAGETYPE_LEADERSELECTA,
WINDOW_BUTTONTYPE_OK,
-1, -1,
sendbuf );
}
// 候选人的答覆
2016-12-24 08:45:52 +08:00
if( strcmp( token2, "A") == 0 )
{
int leaderindex, answerflag;
char leadername[64], token3[64], token4[64];
// print( "%s", message );
if (getStringFromIndexWithDelim(message, "|", 4, token3,
sizeof(token3)) == FALSE) return;
answerflag = atoi( token3 );
if (getStringFromIndexWithDelim(message, "|", 5, leadername,
sizeof( leadername )) == FALSE)return;
makeStringFromEscaped( leadername );
if (getStringFromIndexWithDelim(message, "|", 6, token4,
sizeof(token4)) == FALSE)return;
//if( atoi(token4) < 0 || atoi(token4) > FAMILY_MAXMEMBER ) return;
leaderindex = atoi( token4 );
// 检查双方的CHAR_WORKLEADERCHANGE是否相符
2016-12-24 08:45:52 +08:00
if( CHAR_getWorkInt( meindex, CHAR_WORKLEADERCHANGE ) != leaderindex ) return;
if( !CHAR_CHECKINDEX(leaderindex) ) return;
if( strcmp( leadername, CHAR_getChar( leaderindex, CHAR_NAME) ) != 0 ) return;
if( CHAR_getWorkInt( leaderindex, CHAR_WORKLEADERCHANGE ) != meindex ) return;
CHAR_setWorkInt( leaderindex, CHAR_WORKLEADERCHANGE, -1 );
#ifdef _FMVER21
if( CHAR_getInt(leaderindex, CHAR_FMLEADERFLAG ) != FMMEMBER_LEADER ) return;
#else
if( CHAR_getInt(leaderindex, CHAR_FMLEADERFLAG ) != 1 ) return;
#endif
if( CHAR_getInt(meindex, CHAR_FMINDEX) != CHAR_getInt(leaderindex, CHAR_FMINDEX) ) return;
if( answerflag == 0 )
{
CHAR_setWorkInt( meindex, CHAR_WORKLEADERCHANGE, 0);
CHAR_setWorkInt( leaderindex, CHAR_WORKLEADERCHANGE, 0);
lssproto_WN_send( CHAR_getWorkInt( leaderindex, CHAR_WORKFD) , WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n对不起!对方不愿意接受!", buf, sizeof(buf)) );
2016-12-24 08:45:52 +08:00
return;
}
if( answerflag == 1 )
{
char tmpbuf[1024];
sprintf( buf, "%d", CHAR_getInt( meindex, CHAR_FACEIMAGENUMBER ) );
// CoolFish: add charname 2001/9/27
sprintf( tmpbuf, "%s", CHAR_getChar( meindex, CHAR_NAME ) );
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(meindex, CHAR_FMNAME),
CHAR_getInt(meindex, CHAR_FMINDEX),
CHAR_getWorkInt(meindex, CHAR_WORKFMINDEXI), FM_FIX_FMLEADERCHANGE , buf,
tmpbuf, CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX), CONNECT_getFdid(fd));
// "", CHAR_getWorkInt(meindex, CHAR_WORKFMCHARINDEX), CONNECT_getFdid(fd));
return;
}
}
}
}
void ACFMJob( int fd, int ret, char* data1, char* data2 )
{
int charaindex = CONNECT_getCharaindex( fd );
if( !CHAR_CHECKINDEX(charaindex) ) return;
if( 1 ){
int leaderindex = CHAR_getWorkInt( charaindex, CHAR_WORKLEADERCHANGE );
char buf[256], buf2[256];
CHAR_setWorkInt( charaindex, CHAR_WORKLEADERCHANGE, 0 );
print("leaderindex:%d:%s\n", leaderindex,CHAR_getChar(leaderindex,CHAR_NAME) );
if( !CHAR_CHECKINDEX(leaderindex) ) return;
//if( CHAR_getWorkInt( leaderindex, CHAR_WORKLEADERCHANGE ) != charaindex ) return;
CHAR_setWorkInt( leaderindex, CHAR_WORKLEADERCHANGE, 0 );
if( ret == 0 ){
CHAR_talkToCli( charaindex, -1, "族长让位失败!", CHAR_COLORYELLOW );
CHAR_talkToCli( leaderindex, -1, "族长让位失败!", CHAR_COLORYELLOW );
2016-12-24 08:45:52 +08:00
return;
}
// Robin 10/02 debug
if( CHAR_getInt( leaderindex, CHAR_FMINDEX) != CHAR_getInt( charaindex, CHAR_FMINDEX)
#ifdef _FMVER21
// || CHAR_getInt( leaderindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER )
#else
// || CHAR_getInt( leaderindex, CHAR_FMLEADERFLAG) != 1
#endif
)
{
sprintf( buf, "leaderindex:%d:%s\n", leaderindex, CHAR_getChar( leaderindex, CHAR_NAME) );
LogFamily(
CHAR_getChar(charaindex, CHAR_FMNAME),
CHAR_getInt(charaindex, CHAR_FMINDEX),
CHAR_getChar(charaindex, CHAR_NAME),
CHAR_getChar(charaindex, CHAR_CDKEY),
"LEADERCHANGE_ERROR(族长让位失败)",
2016-12-24 08:45:52 +08:00
buf
);
return;
}
//CHAR_setInt( leaderindex, CHAR_FMLEADERFLAG, FMMEMBER_MEMBER);
//CHAR_setInt( charaindex, CHAR_FMLEADERFLAG, FMMEMBER_LEADER);
SetFMPetVarInit( leaderindex );
SetFMPetVarInit( charaindex );
CHAR_sendStatusString( leaderindex, "F");
CHAR_sendStatusString( charaindex, "F");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( "\n恭喜你!你已经是新任的族长了。\n请好好的努力吧!\n对了~记得请先到村长家的家族管理员选择\n新的家族守护兽,否则家族将会被解散唷!", buf, sizeof(buf)));
2016-12-24 08:45:52 +08:00
sprintf( buf2, "\n辛苦你了!你已经将族长的位子交给%s了。", CHAR_getChar( charaindex, CHAR_NAME) );
2016-12-24 08:45:52 +08:00
lssproto_WN_send( CHAR_getWorkInt( leaderindex, CHAR_WORKFD) , WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
-1, -1,
makeEscapeString( buf2, buf, sizeof(buf)));
// print(" LeaderChange!! [%s]->[%s] ", CHAR_getChar(leaderindex, CHAR_CDKEY), CHAR_getChar(charaindex, CHAR_CDKEY) );
sprintf( buf, "%s\t%s\t%s",
CHAR_getChar(leaderindex, CHAR_FMNAME),
CHAR_getChar(leaderindex, CHAR_NAME),
CHAR_getChar(leaderindex, CHAR_CDKEY)
);
LogFamily(
CHAR_getChar(charaindex, CHAR_FMNAME),
CHAR_getInt(charaindex, CHAR_FMINDEX),
CHAR_getChar(charaindex, CHAR_NAME),
CHAR_getChar(charaindex, CHAR_CDKEY),
"LEADERCHANGE(族长让位)",
2016-12-24 08:45:52 +08:00
buf);
}
}
#ifdef _CAX_LNS_CHARSUOXU
int Char_GetFm( int id, int x)
{
int fd = getfdFromCharaIndex( id);
if (x == 1) //获得家族气势
2016-12-24 08:45:52 +08:00
return fmdptop.fmMomentum[id];
else if (x == 2)//获得家族声望fmtopdp
2016-12-24 08:45:52 +08:00
return fmdptop.fmtopdp[id];
else if (x == 3)//获得家族资金
2016-12-24 08:45:52 +08:00
{
//saacproto_ACGetFMData_send( fd, CHAR_getChar( id, CHAR_FMNAME),
//CHAR_getInt( id, CHAR_FMINDEX ),
//CHAR_getWorkInt( id, CHAR_WORKFMINDEXI ),
//1,
//CONNECT_getFdid(fd)
//);
return familyTax[CHAR_getWorkInt( id, CHAR_WORKFMINDEXI )];
}
}
char * FM_getManorData(int ManorId,int Flg)
{
char *pointbuf = "";
if( getStringFromIndexWithDelim(fmpointlist.pointlistarray[ManorId], "|", Flg, pointbuf, sizeof(pointbuf)) == FALSE ) return -1;
return pointbuf;
}
#endif