?? 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 + -