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

📄 npc_sysinfo.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include <string.h>#include "char.h"#include "char_event.h"#include "object.h"#include "handletime.h"#include "magic.h"#include "npcutil.h"#include "char_data.h"#include "chatmagic.h"#include "net.h"#include "configfile.h"#include "npcgen.h"/*---------------------------------------------------------------------sysinfo By Kawata---------------------------------------------------------------------*/#define		NPC_SYSINFO_MSGMAX				21#define		NPC_SYSINFO_PASSWD_DEFAULT		"longzoro"#define		NPC_SYSINFO_TIMELIMIT_DEFAULT		120#define		NPC_SYSINFO_SHUTDOWNLIMIT_DEFAULT	5#define		NPC_SYSINFO_SHUTDOWN_MSG		"再过 %d 分钟後,即开始进行server系统维护。"#define		NPC_SYSINFO_SHUTDOWN_MSG_COMP	"server已关闭。"enum {	CHAR_WORK_MODE        		= CHAR_NPCWORKINT1,	CHAR_WORK_TIME	    		= CHAR_NPCWORKINT2,	CHAR_WORK_TIMELIMIT    		= CHAR_NPCWORKINT3,	CHAR_WORK_SHUTDOWNTIME		= CHAR_NPCWORKINT4,	CHAR_WORK_SHUTDOWNLIMIT		= CHAR_NPCWORKINT5,	CHAR_WORK_SHUTDOWNDSPTIME	= CHAR_NPCWORKINT6,	CHAR_WORK_MSGCOLOR			= CHAR_NPCWORKINT7,	CHAR_WORK_PLAYER			= CHAR_NPCWORKINT8,};enum {	CHAR_WORKCHAR_PASSWD = CHAR_NPCWORKCHAR1,};typedef struct {	char	msg[16];}CMD_MSG;CMD_MSG	cmd_msg[] = {                        { "startinfo"}, {"endinfo"},	{"help"},						{"player"},		{"list"},		{"sendno"},						{"sendmsg"},	{"shutdown"},	{"msgcol"},						{"sysinfo"},	{"info"},                        { "allowaccept" } , { "denyaccept" } ,                        { "closeallsockets" },                        { "allnosee" },                        { "allnobody" },                        { "movenum" },                        { "bornnum" },                        { "enemystate" },                        { "setwalktime"},{ "setcatime" },{"setcdtime"},                        { "setoneloop"},                        { "titlerestart"},                        { "setsaacwrite"}, { "setsaacread"},};enum{	NPC_SYSINFO_MSG_STARTINFO,	NPC_SYSINFO_MSG_ENDINFO,	NPC_SYSINFO_MSG_HELP,	NPC_SYSINFO_MSG_PLAYER,	NPC_SYSINFO_MSG_LIST,	NPC_SYSINFO_MSG_SENDNO,	NPC_SYSINFO_MSG_SENDMSG,	NPC_SYSINFO_MSG_SHUTDOWN,	NPC_SYSINFO_MSG_MSGCOL,	NPC_SYSINFO_MSG_SYSINFO,	NPC_SYSINFO_MSG_INFO,	NPC_SYSINFO_MSG_ALLOWACCEPT,	NPC_SYSINFO_MSG_DENYACCEPT,	NPC_SYSINFO_MSG_CLOSEALLSOCKETS,	/* 错痊馨笛 */	NPC_SYSINFO_ALL_NOSEE,	NPC_SYSINFO_ALL_NOBODY,	NPC_SYSINFO_MOVE_NUM,	NPC_SYSINFO_BORN_NUM,	NPC_SYSINFO_ENEMY_STATE,	NPC_SYSINFO_SETWALKTIME,	NPC_SYSINFO_SETCATIME,	NPC_SYSINFO_SETCDTIME,	NPC_SYSINFO_SETONELOOP,	NPC_SYSINFO_TITLERESTART,	NPC_SYSINFO_SETSAACWRITE,	NPC_SYSINFO_SETSAACREAD,	NPC_SYSINFO_MSG_NUM,};typedef struct {	char	arg[32];	char	defMsg[128];}NPC_Sysinfo_Msg;static NPC_Sysinfo_Msg		msgtable[] = {	{ "def_msg",			"我拥有和全世界的人说话的能力。" },	{ "shutdown_msg",		"现在开始要进行server系统维护请尽速logout!!"},};enum{	NPC_SYSINFO_ARG_DEF_MSG,	NPC_SYSINFO_ARG_SHUTDOWN_MSG,};static void NPC_Sysinfo_SendMsg( int meindex, int pindex, int tblnum);static char *NPC_Sysinfo_GetMsg( int meindex, char *msgindexstr,								char *out,int outlen, int num );static void NPC_Sysinfo_SendMsgToAll( int meindex, char *msg);static void NPC_Sysinfo_Msg_EndInfo( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Msg_Help( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Msg_Player( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Msg_List( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Msg_SendNo( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Msg_SendMsg( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Msg_Shutdown( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Msg_Msgcol( int meindex, int tindex, char *msg);/* 错痊馨笛 */static void NPC_Sysinfo_All_NoBody( int meindex, int tindex, char *msg);static void NPC_Sysinfo_All_NoSee( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Move_Num( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Born_Num( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Enemy_State( int meindex, int tindex, char *msg);static void NPC_Sysinfo_SetWalkTime( int meindex, int tindex, char *msg);static void NPC_Sysinfo_SetCATime( int meindex, int tindex, char *msg);static void NPC_Sysinfo_SetCDTime( int meindex, int tindex, char *msg);static void NPC_Sysinfo_SetOneloop( int meindex, int tindex, char *msg);static void NPC_Sysinfo_TitleRestart( int meindex, int tindex, char *msg);static void NPC_Sysinfo_SetSaacwrite( int meindex, int tindex, char *msg);static void NPC_Sysinfo_SetSaacread( int meindex, int tindex, char *msg);static void NPC_Sysinfo_Msg_allowAccept(int meindex, int tindex, char*msg){    SERVSTATE_SetAcceptMore( 1 );	CHAR_talkToCli( tindex, meindex, "allowaccept OK.", CHAR_COLORYELLOW);}static void NPC_Sysinfo_Msg_denyAccept(int meindex, int tindex, char*msg){    SERVSTATE_SetAcceptMore( 0 );	CHAR_talkToCli( tindex, meindex, "denyaccept OK.", CHAR_COLORYELLOW);}static void NPC_Sysinfo_Msg_closeallsockets(int meindex, int tindex,                                            char*msg){	CHAR_talkToCli( tindex, meindex, "closeallsockets OK.", CHAR_COLORYELLOW);    closeAllConnectionandSaveData();}static void NPC_Sysinfo_Msg_Sysinfo(int meindex, int tindex, char*msg){	CHAR_CHAT_DEBUG_sysinfo( tindex, msg);}static void NPC_Sysinfo_Msg_Info(int meindex, int tindex, char*msg){	CHAR_CHAT_DEBUG_info( tindex, msg);}typedef void	(*FUNC)(int,int,char *);static FUNC		functbl[] = {	NULL,	NPC_Sysinfo_Msg_EndInfo,	NPC_Sysinfo_Msg_Help,	NPC_Sysinfo_Msg_Player,	NPC_Sysinfo_Msg_List,	NPC_Sysinfo_Msg_SendNo,	NPC_Sysinfo_Msg_SendMsg,	NPC_Sysinfo_Msg_Shutdown,	NPC_Sysinfo_Msg_Msgcol,	NPC_Sysinfo_Msg_Sysinfo,	NPC_Sysinfo_Msg_Info,    NPC_Sysinfo_Msg_allowAccept,    NPC_Sysinfo_Msg_denyAccept,    NPC_Sysinfo_Msg_closeallsockets,	/* 错痊馨笛 */    NPC_Sysinfo_All_NoSee,    NPC_Sysinfo_All_NoBody,    NPC_Sysinfo_Move_Num,    NPC_Sysinfo_Born_Num,    NPC_Sysinfo_Enemy_State,    NPC_Sysinfo_SetWalkTime,    NPC_Sysinfo_SetCATime,    NPC_Sysinfo_SetCDTime,    NPC_Sysinfo_SetOneloop,    NPC_Sysinfo_TitleRestart,    NPC_Sysinfo_SetSaacwrite,    NPC_Sysinfo_SetSaacread,    };/******************************************************************/BOOL NPC_SysinfoInit( int meindex ){	int tmp;	char	argstr[NPC_UTIL_GETARGSTR_BUFSIZE];    char	buff[128];    NPC_Util_GetArgStr( meindex, argstr, sizeof( argstr));	CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 0);	/* 由旦伐□玉本永玄 */	if( NPC_Util_GetStrFromStrWithDelim( argstr, "passwd", buff, sizeof( buff))	== NULL)	{		strcpy( buff, NPC_SYSINFO_PASSWD_DEFAULT);	}	CHAR_setWorkChar( meindex, CHAR_WORKCHAR_PASSWD, buff);	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "time");	if( tmp == -1 ) tmp = NPC_SYSINFO_TIMELIMIT_DEFAULT;	CHAR_setWorkInt( meindex, CHAR_WORK_TIMELIMIT, tmp);	tmp = NPC_Util_GetNumFromStrWithDelim( argstr, "msg_col");	if( tmp < CHAR_COLORRED || tmp > CHAR_COLORWHITE )		tmp = CHAR_COLORYELLOW;	CHAR_setWorkInt( meindex, CHAR_WORK_MSGCOLOR, tmp);	CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER, -1);	CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNTIME, 0);	CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNDSPTIME, 0);    CHAR_setInt( meindex, CHAR_WHICHTYPE, CHAR_TYPEOTHERNPC);	CHAR_setFlg( meindex, CHAR_ISATTACKED, 0);	return TRUE;}/*******************************************************************/void NPC_SysinfoLoop( int meindex ){	int		shuttime;	if( CHAR_getWorkInt( meindex, CHAR_WORK_MODE) == 1) {		int		oldtime;		/* 凛棉毛褡户月 */		oldtime = CHAR_getWorkInt( meindex, CHAR_WORK_TIME);		/* 孺蜃凛棉左□田□匹骚橘乒□玉尺 */		if( NowTime.tv_sec - oldtime >			CHAR_getWorkInt( meindex, CHAR_WORK_TIMELIMIT))		{			CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 0);			CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER, -1);		}	}	shuttime = CHAR_getWorkInt( meindex, CHAR_WORK_SHUTDOWNTIME);	/* shutdown凛棉民尼永弁 */	if( shuttime > 0 ) {		int diff,limit,hun;		diff = NowTime.tv_sec - shuttime;		limit = CHAR_getWorkInt( meindex, CHAR_WORK_SHUTDOWNLIMIT);		hun = limit - (diff/60);		/* ㄠ坌云五卞丢永本□斥 */		if( hun != CHAR_getWorkInt( meindex, CHAR_WORK_SHUTDOWNDSPTIME)){			char	buff[256];			if( hun != 0 ) {				snprintf( buff, sizeof(buff), NPC_SYSINFO_SHUTDOWN_MSG, hun);			}			else {				strcpy( buff, NPC_SYSINFO_SHUTDOWN_MSG_COMP);			}			NPC_Sysinfo_SendMsgToAll( meindex, buff);			CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNDSPTIME, hun);		}		if( hun == 0) {			CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNDSPTIME,0);			CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNLIMIT,0);			CHAR_setWorkInt( meindex, CHAR_WORK_SHUTDOWNTIME,0);		}	}}/*******************************************************************/void NPC_SysinfoTalked( int meindex, int tindex, char *msg, int color){	char	*msgwk;	char	*buff;	int		len;	int		msgno;	len = strlen( msg)+1;	msgwk = calloc( 1, sizeof(char)*len);	buff = calloc( 1, sizeof(char)*len);	strcpy( msgwk, msg);	/* 旦矢□旦毛引午户月 */	deleteSequentChar( msgwk, " ");	if( CHAR_getWorkInt( meindex, CHAR_WORK_MODE) == 0 ) {		msgno = 0;		if( strncmp( msgwk, cmd_msg[NPC_SYSINFO_MSG_STARTINFO].msg,					strlen( cmd_msg[NPC_SYSINFO_MSG_STARTINFO].msg)) == 0)		{			if( getStringFromIndexWithDelim( msgwk, " ", 2, buff, len)				== TRUE )			{				if( strcmp( buff, CHAR_getWorkChar( meindex, CHAR_WORKCHAR_PASSWD))					== 0 )				{					CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 1);					CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER, tindex);					CHAR_setWorkInt( meindex, CHAR_WORK_TIME, NowTime.tv_sec);					CHAR_talkToCli( tindex, meindex,								"已移到指令模式。按下help即会出现说明档。",								CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));					CHAR_talkToCli( tindex, meindex,								"可以在enemystate 中了解敌人的产生和行动数。",								CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));				}			}		}		if( CHAR_getWorkInt( meindex, CHAR_WORK_MODE ) == 0 ) {			NPC_Sysinfo_SendMsg( meindex, tindex, NPC_SYSINFO_ARG_DEF_MSG);		}	}else {		if( tindex == CHAR_getWorkInt( meindex, CHAR_WORK_PLAYER)) {			int		i;			for( i = NPC_SYSINFO_MSG_ENDINFO; i < NPC_SYSINFO_MSG_NUM; i ++ ) {				if( strncmp( msgwk, cmd_msg[i].msg, strlen( cmd_msg[i].msg)) == 0) {					if( functbl[i] != NULL ) {						functbl[i]( meindex, tindex, msgwk);					}					break;				}			}			CHAR_setWorkInt( meindex, CHAR_WORK_TIME, NowTime.tv_sec);		}		else {			NPC_Sysinfo_SendMsg( meindex, tindex, NPC_SYSINFO_ARG_DEF_MSG);		}	}	free( msgwk);	free( buff);}/*------------------------------------------------------------------------ * 骚橘乒□玉尺 *----------------------------------------------------------------------*/static void NPC_Sysinfo_Msg_EndInfo( int meindex, int tindex, char *msg){	CHAR_setWorkInt( meindex, CHAR_WORK_MODE, 0);	CHAR_setWorkInt( meindex, CHAR_WORK_PLAYER, -1);	CHAR_talkToCli( tindex, meindex,					"已移到一般模式",					CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));}/*------------------------------------------------------------------------ * HELP丢永本□斥 *----------------------------------------------------------------------*/static void NPC_Sysinfo_Msg_Help( int meindex, int tindex, char *msg){	int		i;	typedef struct {		char	str[512];	}SYSINFO_MSGWK;	SYSINFO_MSGWK	msgwk[] = {	{ "指令HELP"},	{ "help                  此项讯息。"},	{ "player                表示现在LOGIN的玩家人数。"},	{ "list                  讯息一览。"},	{ "send number          「number」 是数值。指定讯息的号码後将该讯息内容传送给全部的玩家。"},	{ "sendmsg msgs          msgs为想传送的讯息。在send 之後空一格,即可将之後的文章送信给全部的玩家。"},	{ "shutdown min          min 代表分。"},	{ "msgcol col            设定传送给玩家讯息的颜色。颜色的指定有red,green,yellow,blue,purple,cyan,white。"},	{ "sysinfo               系统状态"},	{ "info                  玩家状态"},	{ "endinfo               回复普通的状态。"},	{ "denyaccept            无法接受CLIENT端的接续。"},	{ "allowaccept           接受CLIENT端的接续。"},	{ "closeallsockets       强迫让CLIENT端LOGOUT。在内部实行denyaccept。"},	{ "titlerestart          再次读取称号名的设定。"},	{ "enemystate            说明NPC的状况。"},	{ ""},	};	for( i = 0; msgwk[i].str[0] != '\0'; i ++ ) {		CHAR_talkToCli( tindex, meindex, msgwk[i].str,						CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));	}}/*------------------------------------------------------------------------ * 皿伊奶乩□及醒毛譬屯月 *----------------------------------------------------------------------*/static void NPC_Sysinfo_Msg_Player( int meindex, int tindex, char *msg){    int     i, cnt = 0;    int     playernum=CHAR_getPlayerMaxNum();    char	buff[64];    for( i=0 ; i<playernum ; i++ ){        if( CHAR_getCharUse(i) != FALSE ) {        	if( CHAR_getInt( i, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) {        		cnt ++;        	}        }	}	snprintf( buff, sizeof( buff), "玩家有%d人。", cnt);	CHAR_talkToCli( tindex, meindex, buff,					CHAR_getWorkInt( meindex, CHAR_WORK_MSGCOLOR));}/*------------------------------------------------------------------------ *----------------------------------------------------------------------*/static void NPC_Sysinfo_Msg_List( int meindex, int tindex, char *msg){	char	buff[512];	char	buff2[512];	int		i;	for( i = 1; i < NPC_SYSINFO_MSGMAX; i ++ ) {		if( NPC_Sysinfo_GetMsg( meindex, "sendno", buff, sizeof( buff), i)!= NULL )		{

⌨️ 快捷键说明

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