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

📄 log.c

📁 石器时代3.0源代码 2008.08.27最新版 完全可编译开服!
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include <stdio.h>#include <stdarg.h>#include <string.h>#include <time.h>#include "common.h"#include "util.h"#include "log.h"#include "handletime.h"#include "net.h"#include "char_base.h"/* * * 公丹匹卅中手及反踏五仇心及凶太卞fopen(..,"w")允月 * by ringo */struct tagLogconf{    char*   label;    char*   entry;    char    filename[256];    FILE*   f;    BOOL    append;             /* append 允月井}踏五仇心及凶太卞SEEK_SET允月井 */}LogConf[LOG_TYPE_NUM]={    { "TALK: ", "talklog" ,"", NULL , TRUE},    { "PROC: ", "proc" , "" , NULL , FALSE},    { "ITEM: ", "itemlog" ,"", NULL , TRUE},    { "STONE: ", "stonelog" ,"", NULL , TRUE},    { "PET: ", "petlog" ,"", NULL , TRUE},    { "TENSEI: ", "tenseilog" ,"", NULL , TRUE},    { "KILL: ", "killlog","",NULL,TRUE},    // CoolFish: 2001/4/19    { "TRADE: ", "tradelog", "", NULL, TRUE},    // Arminius: 2001/6/14    { "HACK: ", "hacklog", "", NULL, TRUE},    // Nuke: 0626 Speed    { "SPEED: ", "speedlog", "", NULL, TRUE},    // CoolFish: FMPopular 2001/9/12    { "FMPOP: ", "fmpoplog", "", NULL, TRUE},    // Robin 10/02    { "FAMILY: ", "familylog", "", NULL, TRUE},    // Shan 11/02    { "GM: ", "gmlog", "", NULL, TRUE},#ifdef _GAMBLE_ROULETTE	{ "", "gamblelog", "", NULL, TRUE}, #endif	{ "LOGIN: ", "loginlog", "", NULL, TRUE},	{ "", "pettranslog", "", NULL, TRUE},//Syu 增加庄园战胜负Log	{ "FMPKRESULT: ", "fmpkresultlog" ,"", NULL , TRUE},// Syu ADD 新增家族个人银行存取Log (不含家族银行)	{ "BANKSTONELOG: ", "bankstonelog" ,"", NULL , TRUE},	{ "ACMESSAGE: ", "acmessagelog" ,"", NULL , TRUE},	{ "PKCONTEND:", "pkcontendlog", "", NULL, TRUE},};tagWarplog warplog[MAXMAPNUM];tagWarpCount warpCount[MAXMAPLINK];/*------------------------------------------------------------ * 娄醒 * 忒曰袄 ------------------------------------------------------------*/static BOOL readLogConfFile( char* filename ){    FILE*   f;    char    line[256];    char    basedir[256];    int     linenum=0;    {        char*   r;        r = rindex( filename, '/' );        if( r  == NULL )snprintf(basedir,sizeof(basedir),"." );        else{            memcpy( basedir,filename,r-filename );            basedir[r-filename] = '\0';        }    }    f = fopen( filename , "r");    if( f == NULL ){        print( "Can't open %s\n" , filename );        return FALSE;    }    while( fgets( line, sizeof( line ) ,f ) ){        char    firstToken[256];        int     i;        BOOL    ret;        linenum++;        deleteWhiteSpace(line);          /* remove whitespace    */        if( line[0] == '#' )continue;        /* comment */        if( line[0] == '\n' )continue;       /* none    */        chomp( line );                    /* remove tail newline  */        ret = getStringFromIndexWithDelim( line , "=",  1, firstToken, sizeof(firstToken) );        if( ret == FALSE ){            print( "Find error at %s in line %d. Ignore\n",                   filename , linenum);            continue;        }        for( i=0 ; i<arraysizeof(LogConf) ; i++ ){            if( strcmp( LogConf[i].entry, firstToken )== 0 ){                char    secondToken[256];                ret = getStringFromIndexWithDelim( line, "=", 2,                                                   secondToken,                                                   sizeof(secondToken) );                if( ret == FALSE ){                    print( "Find error at %s in line %d. Ignore\n",                           filename , linenum);                    continue;                }                snprintf( LogConf[i].filename,                          sizeof( LogConf[i].filename ),                          "%s/%s",basedir,secondToken);            }        }    }    fclose(f);    return TRUE;}int openAllLogFile( void ){    int     i;    int     opencount=0;    for( i=0 ; i<arraysizeof(LogConf) ; i++ ){        if( ! LogConf[i].append )continue;        LogConf[i].f = fopen( LogConf[i].filename , "a" );        if( LogConf[i].f != NULL )opencount++;    }    return opencount;}void closeAllLogFile( void ){    int     i;	struct  tm tm1;	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));	// WON FIX    for( i=0 ; i<arraysizeof(LogConf) ; i++ ){        if( LogConf[i].f && LogConf[i].append ){			printl( i, "server down(%d:%d) " , tm1.tm_hour, tm1.tm_min);			fclose( LogConf[i].f );		}	}/*    for( i=0 ; i<arraysizeof(LogConf) ; i++ )        if( LogConf[i].f && LogConf[i].append )            fclose( LogConf[i].f );*/}void printl( LOG_TYPE logtype, char* format , ... ){    va_list arg;    if( logtype < 0 || logtype >= LOG_TYPE_NUM )return;    if( LogConf[logtype].append ){        if( !LogConf[logtype].f )return;        fputs( LogConf[logtype].label, LogConf[logtype].f);        va_start(arg,format);        vfprintf( LogConf[logtype].f,format,arg );        va_end( arg );        fputc( '\n', LogConf[logtype].f );    } else {        FILE *f = fopen( LogConf[logtype].filename ,"w" );        if( !f ) return;        fputs(LogConf[logtype].label , f );        va_start(arg,format);        vfprintf( f , format,arg);        va_end(arg);        fputc( '\n' , f);        fclose(f);    }}BOOL initLog( char* filename ){    if( readLogConfFile( filename ) == FALSE )return FALSE;    openAllLogFile();    return TRUE;}//Syu 增加庄园战胜负Logvoid Logfmpk(			 char *winner, int winnerindex, int num1,			 char *loser, int loserindex, int num2,			 char *date, char *buf1, char *buf2, int flg){	switch( flg){	case 1:		{			struct  tm tm1;			char buf[256];			memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));			sprintf( buf, " (%d:%d)", tm1.tm_hour, tm1.tm_min);			printl( LOG_FMPKRESULT, "\nFMPK: [%s]地点:%s %s(%d) 约战要求 %s(%d) time:%s",				buf1, buf2,				winner, winnerindex, loser, loserindex, buf);		}		break;	case 2:		printl( LOG_FMPKRESULT, "\nFMPK: Winner %s(%d)=>%d Loser %s(%d)=>%d time:%s",			winner, winnerindex, num1,			loser, loserindex, num2 ,date);		break;	}}void LogAcMess(	int fd, char *type, char *mess ){	struct  tm tm1;	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));	if( strstr( mess, "Broadcast") != NULL ) return; 	printl( LOG_ACMESS, "%d %s [%s] (%d:%d)" , fd, type, mess, tm1.tm_hour, tm1.tm_min);}void LogItem(	char *CharName, /* 平乓仿弁正   */        char *CharID, /* 平乓仿弁正ID */		int ItemNo, 	/* 失奶  丞  寞 */	char *Key, 		/* 平□伐□玉 */	int floor,		/* 甄   */	int x,	int y,	char *uniquecode, // shan 2001/12/14	char *itemname, int itemID){	struct  tm tm1;	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1)); 	printl( LOG_ITEM, "%s\t%s\t%d(%s)=%s,(%d,%d,%d)(%d:%d),%s" , CharName, CharID, 		itemID,	itemname,			Key, floor, x, y, tm1.tm_hour, tm1.tm_min, uniquecode );}void LogPkContend( char *teamname1, char *teamname2,	int floor,	int x,	int y,	int flg){	struct  tm tm1;	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));	if( flg == 0 ) { 		printl( LOG_PKCONTEND, "[%32s 胜 %32s],(%5d,%4d,%4d)(%d:%d)" ,			teamname1, teamname2, 			floor, x, y, tm1.tm_hour, tm1.tm_min);	}else{ 		printl( LOG_PKCONTEND, "Msg:[%s],(%5d,%4d,%4d)(%d:%d)" ,			teamname1, floor, x, y, tm1.tm_hour, tm1.tm_min);	}}void LogPetTrans(	char *cdkey, char *uniwuecde, char *uniwuecde2,	char *CharName, int floor, int x, int y,	int petID1, char *PetName1, int petLV, int petrank, int vital1, int str1, int tgh1, int dex1, int total1,	int petID2, char *PetName2, int vital2, int str2, int tgh2, int dex2, int total2,	int work0, int work1, int work2, int work3, int ans, int trans	){	struct  tm tm1;	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));	printl( PETTRANS, "\n*PETTRANS cdkey=%s unid=%s munid=%s %s (%d:%d)  %d=%s LV:%d rand:%d trans:%d :[ %d, %d, %d, %d]=%d  %d=%s :[ %d, %d, %d, %d]=%d  [ %d, %d, %d, %d]=%d\n",		cdkey, uniwuecde, uniwuecde2,				CharName, tm1.tm_hour, tm1.tm_min,				petID1, PetName1, petLV, petrank, trans, vital1, str1, tgh1, dex1, total1,				petID2, PetName2, vital2, str2, tgh2, dex2, total2,				work0, work1, work2, work3, ans	);}                                                                                        /*------------------------------------------------------------ * * 矢永玄夫弘毛潸月 *-------------------------------------------------------------*/void LogPet(	char *CharName, /* 平乓仿弁正   */	char *CharID,	char *PetName,	int  PetLv,	char *Key, 		/* 平□伐□玉 */	int floor,		/* 甄   */	int x,	int y,	char *uniquecode  // shan 2001/12/14	){	struct  tm tm1;	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));	// shan 2001/12/14 	//printl( LOG_PET, "%s\t%s\t%s:%d=%s,(%d,%d,%d)(%d:%d)" , CharName, CharID, 	//		PetName, PetLv, 	//		Key, 	//		floor, x, y, tm1.tm_hour, tm1.tm_min );	printl( LOG_PET, "%s\t%s\t%s:%d=%s,(%d,%d,%d)(%d:%d),%s" , CharName, CharID, 			PetName, PetLv, 			Key, 			floor, x, y, tm1.tm_hour, tm1.tm_min, uniquecode);}void LogBankStone(        char *CharName, /* 平乓仿弁正   */        char *CharId, /* 交□扒□ID */		int	meindex,        int Gold,               /* 嗯喊 */        char *Key,              /* 平□伐□玉 */        int floor,              /* 甄   */        int x,        int y,		int my_gold,		int my_personagold){        struct  tm tm1;        memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));        printl( LOG_STONE, "%s:%s\ts:%d=%s,(%d,%d,%d)(%d:%d) <<own=%d,bank=%d>>" ,			CharId, CharName, Gold, Key,        floor, x, y, tm1.tm_hour, tm1.tm_min , my_gold, my_personagold );}void LogPetPointChange( 	char * CharName, char *CharID, char *PetName, int petindex, int errtype,	int PetLv, char *Key,int floor, int x, int y)	{	struct tm tm1;	int vit,str,tgh,dex;	int l_vit,l_str,l_tgh,l_dex;	int pet_ID, levellvup;	pet_ID = CHAR_getInt( petindex, CHAR_PETID );	vit	= CHAR_getInt( petindex, CHAR_VITAL );	str = CHAR_getInt( petindex, CHAR_STR );	tgh = CHAR_getInt( petindex, CHAR_TOUGH );	dex = CHAR_getInt( petindex, CHAR_DEX );	levellvup = CHAR_getInt( petindex, CHAR_ALLOCPOINT);	l_vit = (levellvup >> 24);	l_str = (levellvup >> 16)&0xff;	l_tgh = (levellvup >> 8 )&0xff;	l_dex = (levellvup >> 0 )&0xff;	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1)); 	printl( LOG_PET, "%s\t%s\t%s:%d=%s,(%d,%d,%d)(%d:%d),err:%d %d<<%d,%d,%d,%d>>lvup<<%d,%d,%d,%d>>" , 		CharName, CharID, PetName, PetLv, Key, floor, x, y, tm1.tm_hour, tm1.tm_min , errtype,		pet_ID ,vit,str,tgh,dex,l_vit,l_str,l_tgh,l_dex);}/*------------------------------------------------------------ * * 鳖戏夫弘毛潸月 *-------------------------------------------------------------*/void LogTensei(	char *CharName, /* 平乓仿弁正   */	char *CharID,	char *Key, 		/* 平□伐□玉 */	int level,		//伊矛伙	int transNum,	//鳖戏荚醒	int quest,		//弁巨旦玄醒	int home,		//请褥哗	int item,		//  笛失奶  丞  井曰醒	int pet,		//  笛矢永玄  井曰醒	int vital,		//  祭蟆Vital	int b_vital,	//  祭  vital	int str,		//  祭蟆str	int b_str,		//  祭  str	int tgh,		//  祭蟆      	int b_tgh,		//  祭        	int dex,		//  祭蟆      	int b_dex		//  祭        ){

⌨️ 快捷键说明

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