⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npc_duelranking.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 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"#include "handletime.h"static void NPC_Duelranking_selectWindow( int meindex, int toindex, int num, int select );#define		NPC_DUELRANKING_WINDOWLINENUM	10enum{	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 ){	CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEDUELRANKING );	return TRUE;}void NPC_DuelrankingLooked( int meindex , int lookedindex){	NPC_Duelranking_selectWindow( meindex, lookedindex, 1, -1);}static void NPC_Duelranking_selectWindow( int meindex, int toindex, int num, int select){		int		fd;	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;	}}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;	}}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 );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -