📄 npc_manorsman.c
字号:
else{#ifdef _MANOR_PKRULE #ifdef _FIX_FAMILY_PK_LIMIT // WON ADD 将可挑战庄园的由前十大改为前二十大 sprintf(buf, "你的家族声望尚未进入前二十大家族,请再加油。"); #else sprintf(buf, "你的家族声望尚未进入前十大家族,请再加油。"); #endif#else sprintf(buf, "你的家族声望尚不足以挑战\n" "拥有这个庄园的家族,请再加油。");#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); } } break; case CHAR_WINDOWTYPE_CHECKMAN_MAIN: if (select==WINDOW_BUTTONTYPE_YES) {#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; #endif#ifdef _MANOR_PKRULE time_t timep; struct tm *p; time(&timep); p = gmtime(&timep); if( p->tm_hour+8 > 24) p->tm_hour = p->tm_hour-16; else p->tm_hour = p->tm_hour+8; if(p->tm_hour<18 && p->tm_hour>2){ sprintf(buf, "请於下午6:00至凌晨3:00再来约战吧!"); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_CHECKMAN_END, CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX), buf); break; } #endif // WON ADD 修正家族pk场的约战问题 if( fmpks[fmpks_pos+1].flag != FMPKS_FLAG_NONE ){ sprintf(buf, "这个庄园已经有人约战了喔。"); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_CHECKMAN_END, CHAR_getWorkInt(meindex, CHAR_WORKOBJINDEX), buf); return; }#ifdef _ACFMPK_LIST NPC_ManorSavePKSchedule(meindex, talkerindex, 0); sprintf( buf, "庄园挑战登陆确认中,请稍後。"); CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORYELLOW);#else NPC_ManorSavePKSchedule(meindex, talkerindex, 0);#endif } } break; }}void NPC_CleanPkList( int ti){// Terry fix 要清为-1不能清为0/* fmpks[ ti+1 ].host_index = 0; fmpks[ ti+1].guest_index=0; fmpks[ ti].host_index=0; fmpks[ ti].guest_index=0;*/ fmpks[ ti+1 ].host_index = -1; fmpks[ ti+1].guest_index=-1; fmpks[ ti].host_index=-1; fmpks[ ti].guest_index=-1; strcpy(fmpks[ ti+1].host_name,""); strcpy(fmpks[ ti+1].guest_name,""); strcpy(fmpks[ ti].host_name,""); strcpy(fmpks[ ti].guest_name,""); strcpy(fmpks[ ti+2].host_name,"");}void NPC_ManorSmanLoop(int meindex){ struct tm tm1; int fmpks_pos; if(CHAR_CHECKINDEX(meindex) == FALSE){ printf("\nNPC_ManorSmanLoop error!(meindex:%d)",meindex); return; } fmpks_pos = CHAR_getWorkInt(meindex, NPC_WORK_ID)*MAX_SCHEDULE; memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1)); switch (fmpks[fmpks_pos+1].flag) { case FMPKS_FLAG_NONE: break; case FMPKS_FLAG_MANOR_PREPARE: if(fmpks[fmpks_pos+1].dueltime <= NowTime.tv_sec){ memcpy(&fmpks[fmpks_pos], &fmpks[fmpks_pos+1], sizeof(FamilyPKSchedule)); fmpks[fmpks_pos].dueltime = tm1.tm_hour * 100 + tm1.tm_min; fmpks[fmpks_pos].flag = FMPKS_FLAG_SCHEDULED; fmpks[fmpks_pos+1].dueltime = 0; fmpks[fmpks_pos+1].flag = FMPKS_FLAG_MANOR_BATTLEBEGIN; NPC_talkToFloor(CHAR_getInt(meindex, CHAR_FLOOR) , fmpks[fmpks_pos].host_index, fmpks[fmpks_pos].guest_index, "庄园争夺战已经开始,请尽快入场!"); } break; case FMPKS_FLAG_MANOR_PEACE: if (fmpks[fmpks_pos+1].dueltime <= NowTime.tv_sec) { fmpks[fmpks_pos+1].dueltime = 0; fmpks[fmpks_pos+1].flag = FMPKS_FLAG_NONE; } break; case FMPKS_FLAG_MANOR_BATTLEBEGIN: break; case FMPKS_FLAG_MANOR_BATTLEEND: { fmpks[fmpks_pos].flag = FMPKS_FLAG_NONE; fmpks[fmpks_pos+1].dueltime = CHAR_getWorkInt(meindex, NPC_WORK_PEACEWAIT) + NowTime.tv_sec; fmpks[fmpks_pos+1].flag = FMPKS_FLAG_MANOR_PEACE_SAVE; NPC_CleanPkList( fmpks_pos); } break; case FMPKS_FLAG_MANOR_PEACE_SAVE: fmpks[fmpks_pos+1].flag = FMPKS_FLAG_MANOR_PEACE; break; case FMPKS_FLAG_MANOR_OTHERPLANET: break; case FMPKS_FLAG_MANOR_READYTOFIGHT: case FMPKS_FLAG_MANOR_CLEANFLAG: fmpks[fmpks_pos].flag = FMPKS_FLAG_NONE; fmpks[fmpks_pos+1].dueltime = CHAR_getWorkInt(meindex, NPC_WORK_PEACEWAIT) + NowTime.tv_sec; fmpks[fmpks_pos+1].flag = FMPKS_FLAG_NONE; NPC_CleanPkList( fmpks_pos); break; } CHAR_setWorkInt(meindex, NPC_WORK_PREVLOOPTIME, NowTime.tv_sec);}void NPC_ManorLoadPKSchedule(int meindex){#ifdef _ACFMPK_LIST int fmpks_pos = CHAR_getWorkInt(meindex, NPC_WORK_ID); saacproto_ACLoadFmPk_send(acfd, fmpks_pos);#else char filename[256], tmp[4096], token[256]; FILE *f; int fmpks_pos = CHAR_getWorkInt(meindex, NPC_WORK_ID)*MAX_SCHEDULE; snprintf(filename,sizeof(filename), "%s%d_%d_%d", SCHEDULEFILEDIR, CHAR_getInt(meindex, CHAR_FLOOR), CHAR_getInt(meindex, CHAR_X), CHAR_getInt(meindex, CHAR_Y) ); if( ! (f=fopen( filename, "r" )) ){ // create new schedule file f = fopen( filename, "w" ); if( !f ){ print( "ERROR:Can't create Schedule file %s!\n",filename ); return; } strcpy(tmp,"0|-1|-1|-1|-1|-1|-1|-1|-1\n"); fwrite(tmp, strlen(tmp), 1, f); } fseek(f, 0, SEEK_SET); // 档案开头 fgets(tmp, sizeof(tmp), f); fmpks[fmpks_pos].flag=-1; // 时间 if (getStringFromIndexWithDelim(tmp,"|",1,token,sizeof(token))) { fmpks[fmpks_pos+1].dueltime=atoi(token); } // 主队 familyindex if (getStringFromIndexWithDelim(tmp,"|",2,token,sizeof(token))) { fmpks[fmpks_pos+1].host_index=atoi(token); } // 主队 家族名 if (getStringFromIndexWithDelim(tmp,"|",3,token,sizeof(token))) { strcpy(fmpks[fmpks_pos+1].host_name,makeStringFromEscaped(token)); } // 客队 familyindex if (getStringFromIndexWithDelim(tmp,"|",4,token,sizeof(token))) { fmpks[fmpks_pos+1].guest_index=atoi(token); } // 客队 家族名 if (getStringFromIndexWithDelim(tmp,"|",5,token,sizeof(token))) { strcpy(fmpks[fmpks_pos+1].guest_name,makeStringFromEscaped(token)); } // 准备时间 if (getStringFromIndexWithDelim(tmp,"|",6,token,sizeof(token))) { fmpks[fmpks_pos+1].prepare_time=atoi(token); } // 最大人数 if (getStringFromIndexWithDelim(tmp,"|",7,token,sizeof(token))) { fmpks[fmpks_pos+1].max_player=atoi(token); } // 旗标 if (getStringFromIndexWithDelim(tmp,"|",8,token,sizeof(token))) { fmpks[fmpks_pos+1].flag=atoi(token); } // 对战星球 if (getStringFromIndexWithDelim(tmp,"|",9,token,sizeof(token))) { strcpy(fmpks[fmpks_pos+2].host_name,makeStringFromEscaped(token)); } // no schedule fmpks[fmpks_pos].flag=-1; // prepare time expired? if ((fmpks[fmpks_pos+1].flag==FMPKS_FLAG_MANOR_PREPARE) && (fmpks[fmpks_pos+1].dueltime<NowTime.tv_sec)) { fmpks[fmpks_pos].flag=-1;// Terry fix 要清为-1不能清为0// fmpks[fmpks_pos].host_index=0; fmpks[fmpks_pos].host_index=-1; strcpy(fmpks[fmpks_pos].host_name,"");// Terry fix 要清为-1不能清为0// fmpks[fmpks_pos].guest_index=0; fmpks[fmpks_pos].guest_index=-1; strcpy(fmpks[fmpks_pos].guest_name,""); fmpks[fmpks_pos+1].flag=-1; fmpks[fmpks_pos+1].dueltime=0; // fmpks[fmpks_pos+1].dueltime=NowTime.tv_sec+30*60; // add more 30 minutes } fclose(f);#endif // end AC_SEND_FM_PK}#ifdef _ACFMPK_LISTvoid NPC_ManorSavePKSchedule(int meindex, int toindex, int flg){ int fmpks_pos, manorid, dueltime; char msg[1024], n1[256], n2[256], n3[256]; char token[256], hadfmname[256]; int hadfmindex=0, hadfmpopular=0, tkfmindex=0; int PkFlg=0; if( toindex == -1 ){ dueltime = CHAR_getWorkInt(meindex, NPC_WORK_PEACEWAIT) + NowTime.tv_sec; sprintf(msg, "%d|%d|%s|%d|%s|%d|%d|%d|%s", dueltime, 0, "", 0, "", 0, 0, flg, ""); PkFlg = 0; }else{ struct tm tm1; int index; tkfmindex = CHAR_getWorkInt(toindex, CHAR_WORKFMINDEXI); fmpks_pos = CHAR_getWorkInt(meindex, NPC_WORK_ID) * MAX_SCHEDULE; manorid = CHAR_getWorkInt(meindex, NPC_WORK_MANORID); memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1)); dueltime = CHAR_getWorkInt(meindex, NPC_WORK_CHALLENGEWAIT) + NowTime.tv_sec - tm1.tm_min*60 + 1800; getStringFromIndexWithDelim( fmpointlist.pointlistarray[manorid-1], "|", 5, token, sizeof(token)); hadfmindex = atoi( token); getStringFromIndexWithDelim( fmpointlist.pointlistarray[manorid-1], "|", 7, token, sizeof(token)); hadfmpopular = atoi( token); getStringFromIndexWithDelim( fmpointlist.pointlistarray[manorid-1], "|", 6, token, sizeof(token)); strcpy( hadfmname, token); makeEscapeString( hadfmname, n1, sizeof(n1)); makeEscapeString( CHAR_getChar(toindex, CHAR_FMNAME), n2, sizeof(n2)); makeEscapeString( getGameserverID(), n3, sizeof(n3)); sprintf(msg, "%d|%d|%s|%d|%s|%d|%d|%d|%s", dueltime, hadfmindex-1, n1, tkfmindex, n2, 15, 50, FMPKS_FLAG_MANOR_OTHERPLANET, n3); PkFlg = 1; { char buf1[256]; sprintf( buf1,"%d", CHAR_getWorkInt( meindex, NPC_WORK_ID) ); Logfmpk( n1, hadfmindex-1, 0, n2, tkfmindex, 0, "", buf1, n3, 1); } } saacproto_ACSendFmPk_send( acfd, -1, PkFlg, CHAR_getWorkInt( meindex, NPC_WORK_ID), msg);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -