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

📄 log.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 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"/* * * 夫弘白央奶伙及潘  反append 允月手及午仄卅中手及互丐月[ * append允月手及反  赓卞白央奶伙毛夫日中化云仁[ * 公丹匹卅中手及反踏五仇心及凶太卞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},     // Terry 2001/09/28#ifdef _SERVICE    { "SERVICE: ", "servicelog", "", NULL, TRUE},       #endif#ifdef _GAMBLE_ROULETTE	{ "", "gamblelog", "", NULL, TRUE}, #endif#ifdef _TEST_PETCREATE	{ "", "creatpetlog", "", NULL, TRUE},	{ "", "creatpetavglog", "", 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},#ifdef _STREET_VENDOR	{ "STREETVENDOR: ", "StreetVendorlog" ,"", NULL , TRUE},#endif#ifdef _ANGEL_SUMMON	{ "ANGEL: ", "angellog" ,"", NULL , TRUE},#endif#ifdef _LOG_OTHER	{ "OTHER: ", "otherlog" ,"", NULL , TRUE},#endif#ifdef _NEW_MANOR_LAW	{ "FMPKGETMONEY: ","FMPKGetMoneylog","",NULL,TRUE},	{ "FMFAMESHOP: ","FMFameShoplog","",NULL,TRUE},#endif};tagWarplog warplog[MAXMAPNUM];tagWarpCount warpCount[MAXMAPLINK];/*------------------------------------------------------------ * 夫弘涩烂白央奶伙毛  氏匹 file 毛钒仁 * 娄醒 *  filename        char*       夫弘涩烂白央奶伙   * 忒曰袄 *  FALSE   反褐  卅撩  匹丐月[ ------------------------------------------------------------*/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;	}}#ifdef _NEW_MANOR_LAWvoid LogFMPKGetMomey(char *szFMName,char *szID,char *szCharName,int iMomentum,int iGetMoney,int iDest){	struct  tm tm1;	char szDest[3][6] = {"身上","银行","错误"};	if(iDest < 0 || iDest > 1) iDest = 2;	memcpy(&tm1,localtime((time_t*)&NowTime.tv_sec),sizeof(tm1)); 	printl(LOG_FMPK_GETMONEY,"FMName:%s\tID:%s\tName:%s\tMomentum:%d\tGetMoney:%d\tAddTo:%s\t(%d:%d)",														szFMName,szID,szCharName,iMomentum,iGetMoney,szDest[iDest],tm1.tm_hour,tm1.tm_min);}void LogFMFameShop(char *szFMName,char *szID,char *szCharName,int iFame,int iCostFame){	struct  tm tm1;	memcpy(&tm1,localtime((time_t*)&NowTime.tv_sec),sizeof(tm1)); 	printl(LOG_FM_FAME_SHOP,"FMName:%s\tID:%s\tName:%s\tFame:%d\tCostFame:%d\t(%d:%d)",														szFMName,szID,szCharName,iFame,iCostFame,tm1.tm_hour,tm1.tm_min);}#endifvoid 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);}#ifdef _STREET_VENDORvoid LogStreetVendor( 	char *SellName,	char *SellID,	char *BuyName,	char *BuyID,	char *ItemPetName,	int PetLv, //若是道具此值为 -1	int iPrice,	char *Key,	int Sfloor,	int Sx,	int Sy,	int Bfloor,	int Bx,	int By,	char *uniquecode){	struct  tm tm1;	memcpy(&tm1,localtime((time_t *)&NowTime.tv_sec),sizeof(tm1));	printl(LOG_STREET_VENDOR,"Sell:%s\t%s\tBuy:%s\t%s\tName=%s:Lv=%d|Price:%d,%s,SXY(%d,%d,%d)BXY(%d,%d,%d)(%d:%d),%s",SellName,SellID,BuyName,BuyID, 														ItemPetName,PetLv,iPrice,Key,Sfloor,Sx,Sy,Bfloor,Bx,By,tm1.tm_hour,tm1.tm_min,uniquecode);}#endifvoid 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		//  祭        ){	struct  tm tm1;	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1)); 	printl( LOG_TENSEI, "%s\t%s\t%s=(%d,%d,%d,%d,%d,%d),(vi=%d->%d,str=%d->%d,tgh=%d->%d,dex=%d->%d),(%d,%d)" 			,CharName,  			CharID, 			Key, 			level, 			transNum, 			quest, 			home,

⌨️ 快捷键说明

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