?? npc_duelranking.c
字號:
#include "version.h"
#include <string.h>
#include "char.h"
#include "object.h"
#include "char_base.h"
#include "npcutil.h"
#include "net.h"
#include "lssproto_serv.h"
#include "saacproto_cli.h"
#include "npc_duelranking.h"
#ifdef _DEATH_CONTEND
#include "deathcontend.h"
#endif
#ifdef _DEATH_FAMILY_GM_COMMAND // WON ADD 家族戰(zhàn)GM指令
#include "family.h"
#endif
static void NPC_Duelranking_selectWindow( int meindex, int toindex, int num, int select );
#define NPC_DUELRANKING_WINDOWLINENUM 10
#ifdef _DEATH_FAMILYCONTEND
BOOL NPC_ReadFamilyPK_List( void);
BOOL NPC_BackupFamilyPK_List( void);
BOOL NPC_getFamilyPK_List( int ti, char *buf, int sizes);
BOOL NPC_CheckJoin_FamilyPK_List( int meindex, int toindex);
#endif
enum{
WINDOWTYPE_PKLIST_START=10,
WINDOWTYPE_PKLIST_SELECT,
WINDOWTYPE_PKLIST_SELECT1,
WINDOWTYPE_PKLIST_SELECT2,
WINDOWTYPE_FAMILYCONTENDSTART,
WINDOWTYPE_FAMILYCONTENDSELECT,
WINDOWTYPE_FAMILYCONTENDLIST,
WINDOWTYPE_FAMILYCONTENDJOIN,
NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT1,
NPC_WORK_BATTLELOOP = CHAR_NPCWORKINT2,
};
BOOL NPC_DuelrankingInit( int meindex )
{
#ifdef _DEATH_CONTEND
char buf1[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
CHAR_setWorkInt( meindex, NPC_WORK_BATTLELOOP, 0);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg) ) != NULL &&
NPC_Util_GetStrFromStrWithDelim( npcarg, "PKLoop", buf1, sizeof( buf1)) != NULL ){
CHAR_setInt( meindex, CHAR_LOOPINTERVAL, atoi(buf1));
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "PKLType", buf1, sizeof( buf1)) != NULL ){
CHAR_setWorkInt( meindex, NPC_WORK_BATTLELOOP, atoi( buf1));
}
if( NPC_Util_GetStrFromStrWithDelim( npcarg, "PKLDelay", buf1, sizeof( buf1)) != NULL ){
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec + (atoi( buf1)*60) );
}
}
#endif
#ifdef _DEATH_FAMILYCONTEND
{
char buf1[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
CHAR_setWorkInt( meindex, NPC_WORK_BATTLELOOP, 0);
CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg) ) != NULL &&
NPC_Util_GetStrFromStrWithDelim( npcarg, "LoadFMList", buf1, sizeof( buf1)) != NULL ){
if( strstr( buf1, "ON") != NULL )
NPC_ReadFamilyPK_List();
}
}
#endif
CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEDUELRANKING );
return TRUE;
}
void NPC_DuelrankingLooked( int meindex , int lookedindex)
{
#ifdef _DEATH_FAMILYCONTEND
char buf1[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg) ) != NULL &&
NPC_Util_GetStrFromStrWithDelim( npcarg, "FmPkJoin", buf1, sizeof( buf1)) != NULL ){
if( strstr( buf1, "ON") !=NULL ){
CHAR_setWorkInt( lookedindex, CHAR_WORKSHOPRELEVANT, 0);
NPC_Duelranking_selectWindow( meindex, lookedindex, 2, -1);
return;
}else{
return;
}
}
#endif
#ifdef _DEATH_CONTEND
char buf1[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
//static int first = 1;
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg) ) != NULL &&
NPC_Util_GetStrFromStrWithDelim( npcarg, "PKCharts", buf1, sizeof( buf1)) != NULL ){
if( strstr( buf1, "ON") !=NULL ){
CHAR_setWorkInt( lookedindex, CHAR_WORKSHOPRELEVANT, 0);
NPC_Duelranking_selectWindow( meindex, lookedindex, 2, -1);
//if( first == 1 ) saacproto_PKLISTCHARTS_send( acfd, 2, 1);
//first = 0;
return;
}else{
return;
}
}
#endif
#ifdef _DEATH_FAMILY_GM_COMMAND // WON ADD 家族戰(zhàn)GM指令
NPC_Duelranking_selectWindow( meindex, lookedindex, 2, -1);
#endif
NPC_Duelranking_selectWindow( meindex, lookedindex, 1, -1);
}
static void NPC_Duelranking_selectWindow( int meindex, int toindex, int num, int select)
{
int fd;
int button;
if( CHAR_getInt( toindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {
return;
}
if( NPC_Util_CharDistance( toindex, meindex ) > 1) return;
if( (fd = getfdFromCharaIndex( toindex)) == -1 ) return;
switch( num){
case 1:
{
char message[1024];
char buf[2048];
strcpy( message,
"1\n"
" 要看哪一個? \n\n\n"
" <強者們> \n\n"
" < 自己 > \n\n"
" <都不看> \n\n" );
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT,
WINDOW_BUTTONTYPE_NONE,
CHAR_WINDOWTYPE_DUELRANKING_START,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
makeEscapeString( message, buf, sizeof(buf)));
}
break;
#ifdef _DEATH_CONTEND
case 2:
char message[1024];
char buf[2048];
strcpy( message,
"1\n"
" 要看哪一個? \n\n"
// " <資格賽排行> \n"
" < 正式賽程表 > \n"
" < 隊伍資料 > \n"
// " < 參加賽程 > \n"
" < 賽程紀錄 > \n" );
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT,
WINDOW_BUTTONTYPE_CANCEL,
WINDOWTYPE_PKLIST_START,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
makeEscapeString( message, buf, sizeof(buf)));
}
break;
/* case 3:
{
char token[4096], buf[256], buf1[256],buf2[256];
char teamname[256];
int win, lose, battle, score;
int page, i, pagecount=10;
page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT);
button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT;
if( select == WINDOW_BUTTONTYPE_PREV || select == WINDOW_BUTTONTYPE_NEXT) {
if( select == WINDOW_BUTTONTYPE_NEXT ){
if( page < 40 ) page++;
}else if( select == WINDOW_BUTTONTYPE_PREV ){
if( page > 0 ) page--;
}
}else if( select == WINDOW_BUTTONTYPE_OK ){
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);
return;
}
if( page < 0 || page >= 40 ) page = 0;
if( page == 0 ) button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_NEXT;
if( page == 39 ) button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV;
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, page);
snprintf( token, sizeof( token),
" 資格賽排行榜\n\n"
"排名 隊伍 勝 負 場 積分\n\n" );
for( i=0; i<pagecount; i++ ){
if( PKLIST_GetChartsListData( (page*pagecount)+1+i, buf, sizeof(buf) ) == FALSE )continue;
if( !getStringFromIndexWithDelim( buf, "|", 1, teamname, sizeof( teamname)) ) continue;
if( !getStringFromIndexWithDelim( buf, "|", 2, buf1, sizeof( buf1)) ) continue;
win =atoi( buf1);
if( !getStringFromIndexWithDelim( buf, "|", 3, buf1, sizeof( buf1)) ) continue;
lose =atoi( buf1);
if( !getStringFromIndexWithDelim( buf, "|", 4, buf1, sizeof( buf1)) ) continue;
battle =atoi( buf1);
if( !getStringFromIndexWithDelim( buf, "|", 5, buf1, sizeof( buf1)) ) continue;
score =atoi( buf1);
strcpy( buf2, "-");
if( battle>= 30 && score > 0 ) strcpy( buf2, "★");
sprintf( buf1, "%4dth %-18s %3d %3d %3d %3d %s\n", (page*pagecount)+1+i,
teamname, win, lose, battle, score, buf2);
strcat( token, buf1);
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT,
button, WINDOWTYPE_PKLIST_SELECT, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token );
}
break;
*/
case 5://晉級隊伍
case 3://正式賽程
{
char token[4096], buf1[256];
char teamname1[256], teamname2[256], typestring[256];
int tindex, dtimes, stimes=0;
int page, i, pagecount=10;
int winno = WINDOWTYPE_PKLIST_SELECT;
page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT);
button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT;
if( select == WINDOW_BUTTONTYPE_PREV || select == WINDOW_BUTTONTYPE_NEXT) {
if( select == WINDOW_BUTTONTYPE_NEXT ){
if( page < 11 ) page++;
}else if( select == WINDOW_BUTTONTYPE_PREV ){
if( page > 0 ) page--;
}
}else if( select == WINDOW_BUTTONTYPE_OK ){
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);
return;
}
if( page < 0 || page >= 11 ) page = 0;
if( page == 0 ) button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_NEXT;
if( page == 10 ) button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV;
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, page);
switch( num){
case 3:
snprintf( token, sizeof( token),
" 賽程表\n\n"
"場次 隊伍 剩馀時間 狀態(tài)\n\n" );
break;
case 5:
snprintf( token, sizeof( token), " 隊伍名單&賽程紀錄\n\n"
"紀錄 \n\n" );
winno = WINDOWTYPE_PKLIST_SELECT2;
break;
}
for( i=0; i<pagecount; i++ ){
memset( teamname1, 0, sizeof(teamname1));
memset( teamname2, 0, sizeof(teamname2));
if( PKLIST_GetABattlelistDataString(
(page*pagecount)+1+i, &tindex, &stimes, teamname1, teamname2, typestring, num) == FALSE )
continue;
switch( num){
case 3:
dtimes = (stimes-(int)time(NULL));
if( dtimes<1 ) dtimes = 1;
sprintf( buf1, "場%2d %-12s VS %-12s %2d分%2d秒 %s \n", tindex,
teamname1, teamname2, (int)(dtimes/60), dtimes%60, typestring);
break;
case 5:
if( strstr(teamname2, "NULL") != NULL ){
sprintf( buf1, "%4d %-12s \n", tindex, teamname1);
}else{
sprintf( buf1, "%-12s vs %12s\n", teamname1, teamname2);
}
break;
}
strcat( token, buf1);
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT,
button, winno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token );
}
break;
case 4:
{
char token[4096];
int teanum = CHAR_getInt( toindex, CHAR_PKLISTTEAMNUM);
button = WINDOW_BUTTONTYPE_OK;
if( PKLIST_GetMyPKListTeamData( teanum, token, sizeof(token) ) == FALSE ) return;
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, button, -1,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token );
}
break;
/* case 6://加入賽程
{
int teamnum;
{
char buf1[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
if( NPC_Util_GetArgStr( meindex, npcarg, sizeof( npcarg) ) != NULL &&
NPC_Util_GetStrFromStrWithDelim( npcarg, "ServerType", buf1, sizeof( buf1)) != NULL ){
if( strstr( buf1, "OFF") !=NULL ){
return;
}
}else{
return;
}
}
if( (teamnum = CHAR_getInt( toindex, CHAR_PKLISTTEAMNUM)) < 0 ){
//andy_log
print("toindex:%d CHAR_PKLISTTEAMNUM:%d err !!\n", toindex, teamnum);
return;
}
if( CHAR_getInt( toindex, CHAR_PKLISTLEADER) != 1 ) {
CHAR_talkToCli( toindex, -1, "只有隊長可以代表隊伍加入賽程。", CHAR_COLORYELLOW);
return;
}
if( PKLIST_JoinPKProcedures( toindex) == FALSE ){
CHAR_talkToCli( toindex, -1, "加入賽程失敗!。", CHAR_COLORYELLOW);
}
}
break;
*/
#endif
#ifdef _DEATH_FAMILYCONTEND
case 2:
{
char message[1024];
char buf[2048];
strcpy( message,
"1\n"
" 要看哪一個? \n\n"
" <家族資格排行> \n"
" < 跨星系家族戰(zhàn)報名 > \n" );
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT,
WINDOW_BUTTONTYPE_CANCEL,
WINDOWTYPE_FAMILYCONTENDSTART,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
makeEscapeString( message, buf, sizeof(buf)));
}
break;
case 3:
{
char token[4096], buf[512], buf1[256];
char familyname[256], mname[256];
int famindex=-1, joinE = 0;
int page, i, pagecount=10;
page = CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT);
button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT;
if( select == WINDOW_BUTTONTYPE_PREV || select == WINDOW_BUTTONTYPE_NEXT) {
if( select == WINDOW_BUTTONTYPE_NEXT ){
if( page < 4 ) page++;
}else if( select == WINDOW_BUTTONTYPE_PREV ){
if( page > 0 ) page--;
}
}else if( select == WINDOW_BUTTONTYPE_OK ){
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 0);
return;
}
if( page < 0 || page >= 4 ) page = 0;
if( page == 0 ) button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_NEXT;
if( page == 3 ) button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV;
CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, page);
snprintf( token, sizeof( token),
" 跨星系家族賽資格排行榜\n\n"
"排名 家族名稱 家族族長名稱\n\n" );
for( i=0; i<pagecount; i++ ){
joinE = 0;
if( NPC_getFamilyPK_List( (page*pagecount)+i, buf, sizeof(buf)) == FALSE ) continue;
//andy_log
print("FPKList[%d]:%s\n", i, buf);
if( !getStringFromIndexWithDelim( buf, "|", 1, buf1, sizeof( buf1)) ) continue;
famindex =atoi( buf1);
if( !getStringFromIndexWithDelim( buf, "|", 2, familyname, sizeof( familyname)) ) continue;
if( !getStringFromIndexWithDelim( buf, "|", 4, mname, sizeof( mname)) ) continue;
if( !getStringFromIndexWithDelim( buf, "|", 5, buf1, sizeof( buf1)) ) continue;
joinE = atoi( buf1);
sprintf( buf1, "%2dth %-18s %-24s %s\n", (page*pagecount)+1+i,
familyname, mname, (joinE == 1)?"★":"");
strcat( token, buf1);
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT,
button, WINDOWTYPE_FAMILYCONTENDSELECT, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token );
}
break;
case 4: //報名
NPC_CheckJoin_FamilyPK_List( meindex, toindex);
break;
#endif
#ifdef _DEATH_FAMILY_GM_COMMAND // WON ADD 家族戰(zhàn)GM指令
case 2:
{
char message[1024] = {0};
char buf[2048]= {0};
strcpy( message,
"1\n"
" 要看哪一個? \n\n"
" < 跨星系家族戰(zhàn)排行 > \n" );
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT,
WINDOW_BUTTONTYPE_CANCEL,
WINDOWTYPE_PKLIST_START,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
makeEscapeString( message, buf, sizeof(buf)));
}
break;
case 3:
{
char token[4096];
char buf1[256];
int page, i, pagecount=10;
char all_msg[400][128];
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -