📄 npc_manorsman.c
字号:
dd = timeleft / 86400;
hh = timeleft / 3600 - dd * 24;
mm = timeleft / 60 - dd * 24 * 60 - hh * 60;
memset(buf2,0,sizeof(buf2));
if(dd > 0) sprintf(buf," %d 天",dd); else strcpy(buf,"");
strcat(buf2,buf);
if(hh > 0) sprintf(buf," %d 小时",hh); else strcpy(buf,"");
strcat(buf2,buf);
if(mm > 0) sprintf(buf," %d 分锺",mm); else strcpy(buf,"");
strcat(buf2,buf);
if(strlen(buf2) == 0)
sprintf(buf,"庄园所有权争夺战\n『%s VS %s』\n\n即将开始,请准备入场。",
fmpks[fmpks_pos+1].guest_name,fmpks[fmpks_pos+1].host_name);
else
sprintf(buf,"庄园所有权争夺战\n『%s VS %s』\n\n预定将在%s後开始。",
fmpks[fmpks_pos+1].guest_name,fmpks[fmpks_pos+1].host_name,buf2);
lssproto_WN_send(fd,WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex,CHAR_WORKOBJINDEX),buf);
}
break;
// 休战期及准备期,五天
case FMPKS_FLAG_MANOR_PEACE:
case FMPKS_FLAG_MANOR_PEACE_SAVE:
{
int timeleft = fmpks[fmpks_pos+1].dueltime-NowTime.tv_sec;
int dd,hh,mm;
char buf2[4096];
dd = timeleft / 86400;
hh = timeleft / 3600 - dd*24;
mm = timeleft / 60 - dd*24*60 - hh*60;
memset(buf2,0,sizeof(buf2));
if(dd > 0) sprintf(buf," %d 天",dd); else strcpy(buf,"");
strcat(buf2,buf);
if(hh > 0) sprintf(buf," %d 小时",hh); else strcpy(buf,"");
strcat(buf2,buf);
if(mm > 0) sprintf(buf," %d 分锺",mm); else strcpy(buf,"");
strcat(buf2,buf);
if(strlen(buf2) == 0) strcpy(buf, "请稍等,让我准备一下申请踢馆的表格。");
else sprintf(buf, "现在非挑战时期,要挑战的话\n请%s後再来申请。",buf2);
lssproto_WN_send(fd,WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),buf);
}
break;
// 挑战中
case FMPKS_FLAG_MANOR_BATTLEBEGIN:
sprintf(buf,"庄园所有权争夺战\n『%s VS %s』\n\n开~打~罗~\n还没进场的人赶快进场吧。",
fmpks[fmpks_pos+1].guest_name,fmpks[fmpks_pos+1].host_name);
lssproto_WN_send(fd,WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),buf);
break;
case FMPKS_FLAG_MANOR_OTHERPLANET:
// 在别的星球进行战斗
sprintf(buf,"庄园所有权争夺战\n『%s VS %s』\n\n决斗地点在 %s 。",
fmpks[fmpks_pos+1].guest_name,fmpks[fmpks_pos+1].host_name,fmpks[fmpks_pos+2].host_name);
lssproto_WN_send(fd,WINDOW_MESSAGETYPE_MESSAGE,WINDOW_BUTTONTYPE_OK,CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex,CHAR_WORKOBJINDEX),buf);
break;
}
}
#endif
void NPC_ManorSmanWindowTalked(int meindex, int talkerindex,
int seqno, int select, char *data)
{
int fd, fmpks_pos, manorid, tkfmindex, tkfmdp;
char buf[4096],token[256];
int hadfmindex;
#ifndef _ACFMPK_LIST
char hadfmname[256];
#endif
int hadfmpopular;
if (NPC_Util_CharDistance(meindex,talkerindex) > 2) return;
if (!NPC_Util_isFaceToFace(meindex, talkerindex, 2)) return;
fd = getfdFromCharaIndex(talkerindex);
if (fd == -1) return;
fmpks_pos = CHAR_getWorkInt(meindex, NPC_WORK_ID)*MAX_SCHEDULE;
manorid = CHAR_getWorkInt(meindex, NPC_WORK_MANORID);
tkfmindex = CHAR_getWorkInt(talkerindex, CHAR_WORKFMINDEXI);
tkfmdp = CHAR_getWorkInt(talkerindex, CHAR_WORKFMDP);
getStringFromIndexWithDelim(fmpointlist.pointlistarray[manorid-1], "|", 5, token, sizeof(token));
hadfmindex = atoi(token);
getStringFromIndexWithDelim(fmpointlist.pointlistarray[manorid-1], "|", 7, token, sizeof(token));
hadfmpopular = atoi(token);
switch (seqno){
case CHAR_WINDOWTYPE_CHECKMAN_START:
if (select==WINDOW_BUTTONTYPE_YES){
#ifdef _ACFMPK_NOFREE
sprintf(buf, "庄园挑战会有一天的准备期\n"
"你可以随时询问我以得知剩下的时间\n"
"挑战结束後不论胜负将会有二天的休战期\n"
"休战期间不能挑战\n\n"
"你确定要挑战这个庄园吗?");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_YESNO,
CHAR_WINDOWTYPE_CHECKMAN_MAIN,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX), buf);
return;
#endif
#ifdef _FMVER21
if ((CHAR_getInt(talkerindex,CHAR_FMLEADERFLAG)==FMMEMBER_LEADER) &&
#else
if ((CHAR_getInt(talkerindex,CHAR_FMLEADERFLAG)==1) &&
#endif
(CHAR_getWorkInt(talkerindex, CHAR_WORKFMSETUPFLAG)==1)){
if (hadfmindex != -1) {
if (hadfmindex-1 != tkfmindex){
int check=0,i;
// Arminius 2.25 fix: fmpks 中第 1~"MANORNUM" 组一定要给 manorsman
for (i=0; i<=/*3*/MANORNUM-1; i++) { // 9个庄园
getStringFromIndexWithDelim(fmpointlist.pointlistarray[i], "|", 5, token, sizeof(token));
if (tkfmindex==atoi(token)-1) check=1;
}
for (i=1; i<=/*4*/MANORNUM; i++) { // 是否已经挑战其他庄园
if ((fmpks[i*MAX_SCHEDULE+1].guest_index==tkfmindex) &&
(strcmp(fmpks[i*MAX_SCHEDULE+1].guest_name,
CHAR_getChar(talkerindex, CHAR_FMNAME))==0)
) {
check=2;
}
}
if (check==0){
int won1;
#ifdef _MANOR_PKRULE // WON ADD 2002/01/22
#ifdef _NEW_MANOR_LAW
//-----------------------------------------
int index;
won1 = 1;
for(index=0;index<FAMILY_MAXNUM;index++){
// 找出挑战家族的索引
if(fmdptop.fmtopid[index] == tkfmindex) break;
}
if(index >= FAMILY_MAXNUM){
printf("\nNPC_ManorSmanWindowTalked():find tkfmIndex error (%d)",tkfmindex);
}
else
// 如果挑战家族气势不足守庄家族气势的九成,不能挑战
if(fmdptop.fmMomentum[index] < fmpointlist.fm_momentum[manorid-1]*0.9) won1 = 0;
//-----------------------------------------
#else
//-----------------------------------------
int i;
char won2[256];
won1 = 0;
#ifdef _FIX_FAMILY_PK_LIMIT // WON ADD 将可挑战庄园的由前十大改为前二十大
for(i=0; i< PK_LIMIT; i++){
#else
for(i=0; i<10; i++){
#endif
if( getStringFromIndexWithDelim( fmdptop.topmemo[i], "|", 3, won2, sizeof(won2)) == FALSE ) {
print("err Get fmdptop.topmemo[%d] if FALSE !!\n", i);
break;
}
if( strcmp(CHAR_getChar(talkerindex, CHAR_FMNAME) ,won2) == 0 ){
won1= 1;
break;
}
//-----------------------------------------
}
#endif
if(won1 == 1){
// WON END
#ifdef _NEW_MANOR_LAW
sprintf(buf,"确定庄园挑战资格後会有一天的准备时间\n"
"你可以随时询问我以得知剩下的时间\n"
"挑战结束後至下次挑战期将会有一天的休战期\n"
"和四天的准备期,在这五天期间内不能挑战\n\n"
"你确定要挑战这个庄园吗?");
#else
sprintf(buf,"庄园挑战会有一天的准备期\n"
"你可以随时询问我以得知剩下的时间\n"
"挑战结束後不论胜负将会有二天的休战期\n"
"休战期间不能挑战\n\n"
"你确定要挑战这个庄园吗?");
#endif
#else
if(tkfmdp >= hadfmpopular){
sprintf(buf,"庄园挑战会有一天的准备期\n"
"你可以随时询问我以得知剩下的时间\n"
"挑战结束後不论胜负将会有五天的休战期\n"
"休战期间不能挑战\n\n"
"你确定要挑战这个庄园吗?");
#endif
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_YESNO,
CHAR_WINDOWTYPE_CHECKMAN_MAIN,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),
buf);
}
else{
#ifdef _NEW_MANOR_LAW
sprintf(buf, "你的家族气势尚未到达庄园家族气势的九成,请再加油。");
#else
#ifdef _MANOR_PKRULE
#ifdef _FIX_FAMILY_PK_LIMIT // WON ADD 将可挑战庄园的由前十大改为前二十大
sprintf(buf, "你的家族声望尚未进入前二十大家族,请再加油。");
#else
sprintf(buf, "你的家族声望尚未进入前十大家族,请再加油。");
#endif
#else
sprintf(buf, "你的家族声望尚不足以挑战\n"
"拥有这个庄园的家族,请再加油。");
#endif
#endif
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),
buf);
}
}
else if(check == 2){
sprintf(buf, "你的家族正在挑战其他庄园,\n"
"请把机会留给其他家族吧!");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),
buf);
}
else{
sprintf(buf, "一个家族只能拥有一个庄园,\n"
"如果庄园家族之间需要切磋\n"
"请到家族PK场。");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),
buf);
}
}
else{
sprintf(buf, "这个庄园已经是你的家族的喔。");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),
buf);
}
}
else{
sprintf(buf, "现在并没有庄园家族,\n"
"直接去申请迁入就可以了哟。");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),
buf);
}
}
else{
sprintf(buf, "只有族长可以下战书喔。");
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE,
WINDOW_BUTTONTYPE_OK,
CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX),
buf);
}
}
#ifdef _NEW_MANOR_LAW
else if(select == WINDOW_BUTTONTYPE_NO){
int i,index,manorindex;
char szMsg[3072];
sprintf(buf," 庄园挑战排名表\n名次 家族名称 时间 气势\n");
manorindex = CHAR_getWorkInt(meindex,NPC_WORK_MANORID) - 1;
// 送出挑战排名
for(i=0;i<10;i++){
index = ManorSchedule[manorindex].iSort[i];
if(ManorSchedule[manorindex].iFmIndex[index] != -1){
sprintf(szMsg,"%2d %s\n",i+1,ManorSchedule[manorindex].szMemo[index]);
strcat(buf,szMsg);
}
}
lssproto_WN_send(fd,WINDOW_FMMESSAGETYPE_MANOR_SCHEDULE,WINDOW_BUTTONTYPE_OK,CHAR_WINDOWTYPE_CHECKMAN_END,
CHAR_getWorkInt(meindex,CHAR_WORKOBJINDEX),buf);
}
#endif
break;
case CHAR_WINDOWTYPE_CHECKMAN_MAIN:
if (select==WINDOW_BUTTONTYPE_YES) {
#ifdef _ACFMPK_NOFREE
#ifndef _NEW_MANOR_LAW
NPC_ManorSavePKSchedule(meindex, talkerindex, 0);
sprintf( buf, "庄园挑战登陆确认中,请稍後。");
CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORYELLOW);
#else
NPC_ManorAddToSchedule(meindex,talkerindex);
#endif
return;
#endif
#ifdef _FMVER21
if ((CHAR_getInt(talkerindex,CHAR_FMLEADERFLAG)==FMMEMBER_LEADER) &&
#else
if ((CHAR_getInt(talkerindex,CHAR_FMLEADERFLAG)==1) &&
#endif
(CHAR_getWorkInt(talkerindex, CHAR_WORKFMSETUPFLAG)==1) &&
(hadfmindex != -1) &&
(hadfmindex - 1 != tkfmindex)
#ifndef _MANOR_PKRULE
&& (tkfmdp >= hadfmpopular)
#endif
){
#ifndef _ACFMPK_LIST
struct tm tm1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -