📄 npc_duelranking.c
字号:
FILE *fp=NULL;
memset( token, 0, sizeof( token));
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" );
for( i=0; i<40*10; i++){
memset( all_msg[i] , 0, sizeof( all_msg[i]));
}
if( (fp = fopen( "d_fm_pk_log.txt", "r" )) != NULL ){
i=0;
//andy_log
print( "read d_fm_pk_log.txt !!\n");
while( fgets( buf1, sizeof( buf1)-1, fp) ){
//andy_log
print( "read buf1:%s !!\n", buf1);
if( buf1[0] == 0 || buf1[0] == '#' ||strlen(buf1) <= 0 ) continue;
buf1[ strlen(buf1) -1] = 0;
snprintf( all_msg[i], sizeof( all_msg[i]), "%s", buf1);
i++;
}
fclose( fp );
}else{
//andy_log
print( "Can't read d_fm_pk_log.txt !!\n");
}
for( i=0; i<pagecount; i++ ){
sprintf( buf1, "%s\n", all_msg[ (page*pagecount) + i ]);
strcat( token, buf1);
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT,
button, WINDOWTYPE_PKLIST_SELECT1, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),
token );
}
break;
#endif
}
}
void NPC_DuelrankingWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data)
{
int fdid = getFdidFromCharaIndex( talkerindex);
if( fdid == -1 ) return;
if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return;
switch( seqno){
case CHAR_WINDOWTYPE_DUELRANKING_START:
if( atoi( data) == 3 ) {
saacproto_DBGetEntryByCount_send( acfd,
DB_DUELPOINT, 0,
NPC_DUELRANKING_WINDOWLINENUM, fdid,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
}
if( atoi( data) == 5 ) {
char dbkey[256];
CHAR_makeDBKey( talkerindex, dbkey, sizeof( dbkey));
saacproto_DBGetEntryRank_send( acfd, DB_DUELPOINT, dbkey, fdid,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
}
break;
case CHAR_WINDOWTYPE_DUELRANKING_TOPRANKING:
if( select == WINDOW_BUTTONTYPE_PREV || select == WINDOW_BUTTONTYPE_NEXT) {
int count = CHAR_getWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT);
if( select == WINDOW_BUTTONTYPE_NEXT ) {
count += NPC_DUELRANKING_WINDOWLINENUM;
}else {
count -= NPC_DUELRANKING_WINDOWLINENUM;
}
if( count < 0) count = 0;
saacproto_DBGetEntryByCount_send( acfd,
DB_DUELPOINT,
count,
NPC_DUELRANKING_WINDOWLINENUM, fdid,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
}else if( select == WINDOW_BUTTONTYPE_OK ) {
if( strlen( data) != 0 ) {
int count;
count = atoi( data);
if( count < 1 ) count = 1;
saacproto_DBGetEntryByCount_send( acfd,
DB_DUELPOINT,
count-1,
NPC_DUELRANKING_WINDOWLINENUM, fdid,
CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX));
}
}
break;
#ifdef _DEATH_CONTEND
case WINDOWTYPE_PKLIST_START:
{
switch( atoi( data)){
case 2://资格赛排行
NPC_Duelranking_selectWindow( meindex, talkerindex, 3, select);
break;
case 3://正式赛程
NPC_Duelranking_selectWindow( meindex, talkerindex, 4, select);
break;
case 4://队伍资料
NPC_Duelranking_selectWindow( meindex, talkerindex, 5, select);
break;
case 5://加入赛程
NPC_Duelranking_selectWindow( meindex, talkerindex, 6, -1);
break;
case 6://晋级队伍
NPC_Duelranking_selectWindow( meindex, talkerindex, 7, select);
break;
}
}
break;
case WINDOWTYPE_PKLIST_SELECT:
NPC_Duelranking_selectWindow( meindex, talkerindex, 3, select);
break;
case WINDOWTYPE_PKLIST_SELECT1:
NPC_Duelranking_selectWindow( meindex, talkerindex, 4, select);
break;
case WINDOWTYPE_PKLIST_SELECT2:
NPC_Duelranking_selectWindow( meindex, talkerindex, 5, select);
break;
#endif
#ifdef _DEATH_FAMILYCONTEND
case WINDOWTYPE_FAMILYCONTENDSTART:
{
switch( atoi( data)){
case 2://资格排行
NPC_Duelranking_selectWindow( meindex, talkerindex, 3, select);
break;
case 3://报名
NPC_Duelranking_selectWindow( meindex, talkerindex, 4, select);
break;
}
}
break;
case WINDOWTYPE_FAMILYCONTENDSELECT:
NPC_Duelranking_selectWindow( meindex, talkerindex, 3, select);
break;
#endif
#ifdef _DEATH_FAMILY_GM_COMMAND // WON ADD 家族战GM指令
case WINDOWTYPE_PKLIST_START:
{
switch( atoi( data ) ){
case 2:
NPC_Duelranking_selectWindow( meindex, talkerindex, 3, select);
break;
}
}
break;
case WINDOWTYPE_PKLIST_SELECT1:
NPC_Duelranking_selectWindow( meindex, talkerindex, 3, select);
break;
#endif
}
}
void NPC_Duelranking_PrintRanking( char *data, int count_start, int fdid, int msgid2)
{
char message[1024];
char buf[2048];
int i;
int cnt = 0;
int button = 0;
int fd = getfdFromFdid( fdid);
if( fd == -1 ) return;
message[0] = '\0';
snprintf( message, sizeof( message),
" 世界的强者们\n\n"
" Rank DuelPoint Lv Name\n\n" );
for( i = 1; ; i ++ ) {
char rankdata[256];
char cdandname[64];
char charaname[32];
char rank[16];
char score[64];
char msgbuf[512];
char cdkey[32];
char lv[16];
char hosi[6];
if( !getStringFromIndexWithDelim( data, "|", i, rankdata, sizeof( rankdata))) {
break;
}
if( !getStringFromIndexWithDelim( rankdata, ",", 2, rank, sizeof( rank)) ){
continue;
}
if( !getStringFromIndexWithDelim( rankdata, ",", 3, cdandname, sizeof( cdandname)) ){ continue;
}
makeStringFromEscaped( cdandname);
if( !getStringFromIndexWithDelim( cdandname, "_", 1, cdkey, sizeof( cdkey)) ){
continue;
}
if( !getStringFromIndexWithDelim( cdandname, "_", 2, charaname, sizeof( charaname)) ){
continue;
}
if( !getStringFromIndexWithDelim( rankdata, ",", 4, score, sizeof( score)) ){
continue;
}
if( !getStringFromIndexWithDelim( rankdata, ",", 5, lv, sizeof( lv)) ){
lv[0] = '\0';
}
{
char *mycdkey = CHAR_getChar( CONNECT_getCharaindex(fd), CHAR_CDKEY);
char *myname = CHAR_getChar( CONNECT_getCharaindex(fd), CHAR_NAME);
char engnum[4][3] = { "st","nd","rd","th"};
int dsprank = atoi(rank);
if( dsprank > 3) dsprank = 3;
if( mycdkey != NULL && myname != NULL && strcmp( cdkey, mycdkey) == 0 &&
strcmp( charaname, myname) == 0 ) {
strcpy( hosi, "★");
}else {
strcpy( hosi, " ");
}
snprintf( msgbuf, sizeof( msgbuf), "%s %5d%s %10s %3s %s\n",
hosi,
atoi(rank)+1, engnum[dsprank],
score, lv,
charaname );
}
strcatsafe( message, sizeof( message), msgbuf);
cnt ++;
}
if( cnt == 0 ) {
strcpy( message, "\n 没有其他的资料了。");
button = WINDOW_BUTTONTYPE_PREV|WINDOW_BUTTONTYPE_OK;
}else if( cnt < NPC_DUELRANKING_WINDOWLINENUM ) {
if( count_start >= NPC_DUELRANKING_WINDOWLINENUM) {
button = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV;
}else {
button = WINDOW_BUTTONTYPE_OK;
}
}else if( count_start == 0 ) {
button = WINDOW_BUTTONTYPE_NEXT|WINDOW_BUTTONTYPE_OK;
}else {
button = WINDOW_BUTTONTYPE_NEXT|WINDOW_BUTTONTYPE_PREV|WINDOW_BUTTONTYPE_OK;
}
lssproto_WN_send( fd, WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT,
button,
CHAR_WINDOWTYPE_DUELRANKING_TOPRANKING,
msgid2,
makeEscapeString( message, buf, sizeof(buf)));
if( cnt == 0 ) {
CHAR_setWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKSHOPRELEVANT, -1);
}else {
CHAR_setWorkInt( CONNECT_getCharaindex(fd), CHAR_WORKSHOPRELEVANT, count_start);
}
}
void NPC_Duelranking_CallMyRanking( int count, int msgid, int msgid2)
{
count -= 5;
if( count < 0 ) count = 0;
saacproto_DBGetEntryByCount_send( acfd, DB_DUELPOINT,
count, NPC_DUELRANKING_WINDOWLINENUM,
msgid, msgid2 );
}
#ifdef _DEATH_CONTEND
void NPC_Duelrankingloop( int meindex)
{
static int side = 0;
int i;
if( CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) < NowTime.tv_sec ){
char buf1[256];
char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];
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) );
}
}
}
if( CHAR_getWorkInt( meindex, NPC_WORK_BATTLELOOP) == 0 ) return;
for( i=0; i<MAXBATTLEPAGE; i++){
ABATTLE_CheckInABattle( i);
}
if( (++side)%3 == 0 ){
side = 0;
//ABATTLE_CheckBattlefromFl();
ABATTLE_GetRecordBattle();
}
ABATTLE_MakeInABattleString();
}
#endif
#ifdef _DEATH_FAMILYCONTEND
#define MAXJOINFM 35
typedef struct _tagProFamilyList
{
int fmindex;
char fmname[256];
char ucdkey[256];
char uname[256];
int join;
int use;
}ProFamilyList;
ProFamilyList JoinFamilyList[MAXJOINFM];
BOOL NPC_ReadFamilyPK_List( void)
{
FILE *fp=NULL;
int i, k=0;
char arg[1024], buf1[256];
for( i=0; i<MAXJOINFM; i++){
JoinFamilyList[i].use = 0;
JoinFamilyList[i].join = 0;
}
if( (fp=fopen("fmlist.txt", "r+")) == NULL ) return FALSE;
while( fgets( arg, sizeof(arg), fp) ){
if( arg[0] == '#' || strlen( arg) <= 0 ) continue;
if( !getStringFromIndexWithDelim( arg, "|", 1, buf1, sizeof( buf1)) ) continue; //fmindex
JoinFamilyList[k].fmindex = atoi( buf1);
if( !getStringFromIndexWithDelim( arg, "|", 2, buf1, sizeof( buf1)) ) continue;
snprintf( JoinFamilyList[k].fmname, sizeof(JoinFamilyList[k].fmname), "%s", buf1);
if( !getStringFromIndexWithDelim( arg, "|", 3, buf1, sizeof( buf1)) ) continue;
snprintf( JoinFamilyList[k].uname, sizeof(JoinFamilyList[k].uname), "%s", buf1);
if( !getStringFromIndexWithDelim( arg, "|", 4, buf1, sizeof( buf1)) ) continue;
snprintf( JoinFamilyList[k].ucdkey, sizeof(JoinFamilyList[k].ucdkey), "%s", buf1);
if( !getStringFromIndexWithDelim( arg, "|", 5, buf1, sizeof( buf1)) ) continue;
JoinFamilyList[k].join = atoi( buf1);
JoinFamilyList[k].use = 1;
print( "JFM[%d]:%d|%s|%s|%s|%d|\n",
k, JoinFamilyList[k].fmindex, JoinFamilyList[k].fmname,
JoinFamilyList[k].ucdkey, JoinFamilyList[k].uname, JoinFamilyList[k].join );
k++;
if( k >= MAXJOINFM ) break;
}
fclose( fp);
return TRUE;
}
BOOL NPC_BackupFamilyPK_List( void)
{
FILE *fp=NULL;
int i;
if( (fp=fopen("fmlist.txt", "w+")) == NULL ) return FALSE;
for( i=0; i<MAXJOINFM; i++){
if( JoinFamilyList[i].use == 0 ) continue;
fprintf( fp, "%d|%s|%s|%s|%d|\n",
JoinFamilyList[i].fmindex , JoinFamilyList[i].fmname ,
JoinFamilyList[i].uname , JoinFamilyList[i].ucdkey ,
JoinFamilyList[i].join );
}
fclose( fp);
return TRUE;
}
BOOL NPC_getFamilyPK_List( int ti, char *buf, int sizes)
{
//andy_log
print("ti:%d\n", ti);
if( ti < 0 || ti > MAXJOINFM ) return FALSE;
if( JoinFamilyList[ti].use == 0 ) return FALSE;
snprintf( buf, sizes, "%d|%s|%s|%s|%d|",
JoinFamilyList[ti].fmindex, JoinFamilyList[ti].fmname,
JoinFamilyList[ti].ucdkey, JoinFamilyList[ti].uname, JoinFamilyList[ti].join );
return TRUE;
}
BOOL NPC_CheckJoin_FamilyPK_List( int meindex, int toindex)
{
int i;
//andy_log
print( " *check: [%d,%s,%s]\n", CHAR_getInt( toindex, CHAR_FMINDEX),
CHAR_getChar( toindex, CHAR_CDKEY), CHAR_getChar( toindex, CHAR_NAME) );
for( i=0; i<MAXJOINFM; i++){
if( JoinFamilyList[i].use == 0 ) continue;
//andy_log
print( "check[%d]: [%d,%s,%s]\n",
i, JoinFamilyList[i].fmindex,
JoinFamilyList[i].ucdkey, JoinFamilyList[i].uname );
if( JoinFamilyList[i].fmindex != CHAR_getInt( toindex, CHAR_FMINDEX) ) continue;
if( CHAR_getInt( toindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER ) {
if( strcmp( CHAR_getChar( toindex, CHAR_CDKEY), JoinFamilyList[i].ucdkey ) ||
strcmp( CHAR_getChar( toindex, CHAR_NAME), JoinFamilyList[i].uname ) )
continue;
}
if( JoinFamilyList[i].join == 1 ){
CHAR_talkToCli( toindex, -1, "已经报名参加了。", CHAR_COLORYELLOW);
return FALSE;
}else{
CHAR_talkToCli( toindex, -1, "报名完成。", CHAR_COLORYELLOW);
JoinFamilyList[i].join = 1;
NPC_BackupFamilyPK_List();
return TRUE;
}
}
CHAR_talkToCli( toindex, -1, "无法报名,请确认你是否为资格名单上之家族族长。", CHAR_COLORYELLOW);
return FALSE;
}
//CHAR_FMINDEX
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -