2016-12-24 08:45:52 +08:00
|
|
|
|
#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"
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
*
|
2017-01-13 23:37:03 +08:00
|
|
|
|
* 公丹匹卅中手及反踏五仇心及凶太卞fopen(..,"w")允月
|
2016-12-24 08:45:52 +08:00
|
|
|
|
* by ringo
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
struct tagLogconf{
|
|
|
|
|
char* label;
|
|
|
|
|
char* entry;
|
|
|
|
|
char filename[256];
|
|
|
|
|
FILE* f;
|
2017-01-13 23:37:03 +08:00
|
|
|
|
BOOL append; /* append 允月井}踏五仇心及凶太卞SEEK_SET允月井 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
}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},
|
2017-01-13 23:37:03 +08:00
|
|
|
|
//Syu 增加庄园战胜负Log
|
2016-12-24 08:45:52 +08:00
|
|
|
|
{ "FMPKRESULT: ", "fmpkresultlog" ,"", NULL , TRUE},
|
|
|
|
|
|
2017-01-13 23:37:03 +08:00
|
|
|
|
// Syu ADD 新增家族个人银行存取Log (不含家族银行)
|
2016-12-24 08:45:52 +08:00
|
|
|
|
{ "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 _NEW_MANOR_LAW
|
|
|
|
|
{ "FMPKGETMONEY: ","FMPKGetMoneylog","",NULL,TRUE},
|
|
|
|
|
{ "FMFAMESHOP: ","FMFameShoplog","",NULL,TRUE},
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
{ "LOGOUT: ", "logoutlog", "", NULL, TRUE},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
tagWarplog warplog[MAXMAPNUM];
|
|
|
|
|
tagWarpCount warpCount[MAXMAPLINK];
|
|
|
|
|
|
|
|
|
|
/*------------------------------------------------------------
|
2017-01-13 23:37:03 +08:00
|
|
|
|
* 娄醒
|
|
|
|
|
* 忒曰袄
|
2016-12-24 08:45:52 +08:00
|
|
|
|
------------------------------------------------------------*/
|
|
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-13 23:37:03 +08:00
|
|
|
|
//Syu 增加庄园战胜负Log
|
2016-12-24 08:45:52 +08:00
|
|
|
|
void 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);
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_FMPKRESULT, "\nFMPK: [%s]地点:%s %s(%d) 约战要求 %s(%d) time:%s",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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 Logfmpk_war(int dueltime,int mytime){
|
|
|
|
|
printl( LOG_FMPKRESULT, "\nFMPK_WAR: dueltime=%d,mytime=%d",
|
|
|
|
|
dueltime,mytime);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef _NEW_MANOR_LAW
|
|
|
|
|
void LogFMPKGetMomey(char *szFMName,char *szID,char *szCharName,int iMomentum,int iGetMoney,int iDest)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char szDest[3][6] = {"身上","银行","错误"};
|
2016-12-24 08:45:52 +08:00
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
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(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharName, /* 平乓仿弁正 */
|
|
|
|
|
char *CharID, /* 平乓仿弁正ID */
|
|
|
|
|
int ItemNo, /* 失奶 丞 寞 */
|
|
|
|
|
char *Key, /* 平□伐□玉 */
|
|
|
|
|
int floor, /* 甄 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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 ) {
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_PKCONTEND, "[%32s 胜 %32s],(%5d,%4d,%4d)(%d:%d)" ,
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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 );
|
|
|
|
|
}
|
|
|
|
|
/*------------------------------------------------------------
|
|
|
|
|
*
|
2017-01-13 23:37:03 +08:00
|
|
|
|
* 矢永玄夫弘毛潸月
|
2016-12-24 08:45:52 +08:00
|
|
|
|
*
|
|
|
|
|
-------------------------------------------------------------*/
|
|
|
|
|
void LogPet(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharName, /* 平乓仿弁正 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
char *CharID,
|
|
|
|
|
char *PetName,
|
|
|
|
|
int PetLv,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *Key, /* 平□伐□玉 */
|
|
|
|
|
int floor, /* 甄 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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_VENDOR
|
|
|
|
|
void LogStreetVendor(
|
|
|
|
|
char *SellName,
|
|
|
|
|
char *SellID,
|
|
|
|
|
char *BuyName,
|
|
|
|
|
char *BuyID,
|
|
|
|
|
char *ItemPetName,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
int PetLv, //若是道具此值为 -1
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int iPrice,
|
|
|
|
|
char *Key,
|
|
|
|
|
int Sfloor,
|
|
|
|
|
int Sx,
|
|
|
|
|
int Sy,
|
|
|
|
|
int Bfloor,
|
|
|
|
|
int Bx,
|
|
|
|
|
int By,
|
|
|
|
|
char *uniquecode,
|
|
|
|
|
int streettype
|
|
|
|
|
){
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy(&tm1,localtime((time_t *)&NowTime.tv_sec),sizeof(tm1));
|
|
|
|
|
char *streetmsg=NULL;
|
2017-01-13 23:37:03 +08:00
|
|
|
|
if (streettype==0) streetmsg="石币";
|
|
|
|
|
if (streettype==1) streetmsg="声望";
|
|
|
|
|
if (streettype==2) streetmsg="会员点";
|
|
|
|
|
if (streettype==3) streetmsg="积分";
|
|
|
|
|
if (streettype==4) streetmsg="活力";
|
|
|
|
|
printl(LOG_STREET_VENDOR,"type:%s 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月%d日 %d:%d),%s",streetmsg,SellName,SellID,BuyName,BuyID,
|
2016-12-24 08:45:52 +08:00
|
|
|
|
ItemPetName,PetLv,iPrice,Key,Sfloor,Sx,Sy,Bfloor,Bx,By,tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour,tm1.tm_min,uniquecode);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void LogBankStone(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharName, /* 平乓仿弁正 */
|
|
|
|
|
char *CharId, /* 交□扒□ID */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int meindex,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
int Gold, /* 嗯喊 */
|
|
|
|
|
char *Key, /* 平□伐□玉 */
|
|
|
|
|
int floor, /* 甄 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*------------------------------------------------------------
|
|
|
|
|
*
|
2017-01-13 23:37:03 +08:00
|
|
|
|
* 鳖戏夫弘毛潸月
|
2016-12-24 08:45:52 +08:00
|
|
|
|
*
|
|
|
|
|
-------------------------------------------------------------*/
|
|
|
|
|
void LogTensei(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharName, /* 平乓仿弁正 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
char *CharID,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
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 // 祭
|
2016-12-24 08:45:52 +08:00
|
|
|
|
){
|
|
|
|
|
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,
|
|
|
|
|
item,
|
|
|
|
|
pet,
|
|
|
|
|
vital,
|
|
|
|
|
b_vital,
|
|
|
|
|
str,
|
|
|
|
|
b_str,
|
|
|
|
|
tgh,
|
|
|
|
|
b_tgh,
|
|
|
|
|
dex,
|
|
|
|
|
b_dex,
|
|
|
|
|
tm1.tm_hour, tm1.tm_min
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// LOG_TALK
|
|
|
|
|
void LogTalk(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharName, /* 平乓仿弁正 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
char *CharID,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
int floor, /* 甄 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int x,
|
|
|
|
|
int y,
|
|
|
|
|
char *message
|
|
|
|
|
){
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
|
|
|
|
|
printl( LOG_TALK, "%2d:%2d\t%s\t%s\t%d_%d_%d\tT=%s" ,
|
|
|
|
|
tm1.tm_hour, tm1.tm_min,
|
|
|
|
|
(CharID==NULL) ? "(null)" :CharID,
|
|
|
|
|
(CharName==NULL) ? "(null)" :CharName,
|
|
|
|
|
floor, x, y,
|
|
|
|
|
message );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
/*------------------------------------------------------------
|
2017-01-13 23:37:03 +08:00
|
|
|
|
* 涩烂卞仄凶互匀化允屯化及白央奶伙毛田永弁失永皿
|
|
|
|
|
* 白央奶伙反弁夫□术今木化中卅仃木壬弁夫□术允月
|
|
|
|
|
* 娄醒 struct tm
|
|
|
|
|
* 卅仄
|
|
|
|
|
* 忒曰袄
|
|
|
|
|
* 左□皿件仄凶白央奶伙及醒
|
2016-12-24 08:45:52 +08:00
|
|
|
|
------------------------------------------------------------*/
|
|
|
|
|
void backupAllLogFile( struct tm *ptm )
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
char szBuffer[256];
|
|
|
|
|
|
|
|
|
|
for( i=0 ; i<arraysizeof(LogConf) ; i++ ){
|
2017-01-13 23:37:03 +08:00
|
|
|
|
/* append 匹卅中手及反仄卅中 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
if( ! LogConf[i].append )continue;
|
|
|
|
|
|
|
|
|
|
sprintf( szBuffer, "%s.%4d%02d%02d", LogConf[i].filename,
|
|
|
|
|
ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday );
|
|
|
|
|
|
|
|
|
|
if( LogConf[i].f != NULL ){
|
2017-01-13 23:37:03 +08:00
|
|
|
|
/* 左□皿件今木化中凶日弁夫□术 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
fclose( LogConf[i].f );
|
2017-01-13 23:37:03 +08:00
|
|
|
|
/* 伉生□丞 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
rename( LogConf[i].filename, szBuffer );
|
2017-01-13 23:37:03 +08:00
|
|
|
|
/* 疯太左□皿件 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
LogConf[i].f = fopen( LogConf[i].filename , "a" );
|
|
|
|
|
|
|
|
|
|
}else{
|
2017-01-13 23:37:03 +08:00
|
|
|
|
/* 伉生□丞 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
rename( LogConf[i].filename, szBuffer );
|
2017-01-13 23:37:03 +08:00
|
|
|
|
/* 疯太左□皿件 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
LogConf[i].f = fopen( LogConf[i].filename , "a" );
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/*------------------------------------------------------------
|
|
|
|
|
*
|
2017-01-13 23:37:03 +08:00
|
|
|
|
* 云嗯毛胶丹
|
2016-12-24 08:45:52 +08:00
|
|
|
|
*
|
|
|
|
|
-------------------------------------------------------------*/
|
2017-01-13 23:37:03 +08:00
|
|
|
|
// Syu ADD 新增家族个人银行存取Log (不含家族银行)
|
2016-12-24 08:45:52 +08:00
|
|
|
|
void LogFamilyBankStone(
|
|
|
|
|
char *CharName,
|
|
|
|
|
char *CharId,
|
|
|
|
|
int Gold,
|
|
|
|
|
int MyGold,
|
|
|
|
|
char *Key,
|
|
|
|
|
int floor,
|
|
|
|
|
int x,
|
|
|
|
|
int y,
|
|
|
|
|
int banksum
|
|
|
|
|
){
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
printl( LOG_BANKSTONELOG, "%s:%s\t%d=%s [%d] CHAR_GOLD(%d),(%d,%d,%d)(%d:%d)" , CharId, CharName, Gold, Key,banksum,
|
|
|
|
|
MyGold, floor, x, y, tm1.tm_hour, tm1.tm_min );
|
|
|
|
|
print("\n%s:%s\t%d=%s [%d] CHAR_GOLD(%d),(%d,%d,%d)(%d:%d)\n" , CharId, CharName, Gold, Key,banksum,
|
|
|
|
|
MyGold, floor, x, y, tm1.tm_hour, tm1.tm_min );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LogStone(
|
|
|
|
|
int TotalGold,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharName, /* 平乓仿弁正 */
|
|
|
|
|
char *CharId, /* 交□扒□ID */
|
|
|
|
|
int Gold, /* 嗯喊 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int MyGold,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *Key, /* 平□伐□玉 */
|
|
|
|
|
int floor, /* 甄 */
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int x,
|
|
|
|
|
int y
|
|
|
|
|
){
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
if(TotalGold == -1){
|
|
|
|
|
printl( LOG_STONE, "%s:%s\t%d=%s TOTAL_GOLD(%d),CHAR_GOLD(%d),(%d,%d,%d)(%d:%d)" , CharId, CharName, Gold, Key,TotalGold,
|
|
|
|
|
MyGold, floor, x, y, tm1.tm_hour, tm1.tm_min );
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
printl( LOG_STONE, "%s:%s\t%d=%s CHAR_GOLD(%d),(%d,%d,%d)(%d:%d)" , CharId, CharName, Gold, Key,
|
|
|
|
|
MyGold, floor, x, y, tm1.tm_hour, tm1.tm_min );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ttom 12/26/2000 print the kill log
|
|
|
|
|
void LogKill(
|
|
|
|
|
char *CharName,
|
|
|
|
|
char *CharId,
|
|
|
|
|
char *CharPet_Item
|
|
|
|
|
){
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
printl( LOG_KILL, "Name=%s:ID=%s\t%s (%d:%d)" ,CharName,CharId, CharPet_Item,
|
|
|
|
|
tm1.tm_hour, tm1.tm_min );
|
|
|
|
|
}
|
|
|
|
|
//ttom
|
|
|
|
|
|
|
|
|
|
// CoolFish: Trade 2001/4/19
|
|
|
|
|
void LogTrade(char *message)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_TRADE, "%s (%d年%d月%d日 %d:%d)" , message, tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min );
|
2016-12-24 08:45:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CoolFish: Family Popular 2001/9/12
|
|
|
|
|
void LogFMPOP(char *message)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
|
|
|
|
|
printl( LOG_FMPOP, "%s (%d:%d)" , message, tm1.tm_hour, tm1.tm_min );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Arminius 2001/6/14
|
|
|
|
|
char hackmsg[HACK_TYPE_NUM][4096]=
|
2017-01-13 23:37:03 +08:00
|
|
|
|
{ "??? 什麽事也没有发生",
|
|
|
|
|
"无法取得通讯协定码",
|
|
|
|
|
"收到无法辨识的通讯协定码",
|
|
|
|
|
"检查码错误",
|
|
|
|
|
"人物的HP为负",
|
|
|
|
|
"账号封包出错",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void logHack(int fd, int errcode)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
char cdkey[4096];
|
|
|
|
|
char charname[4096];
|
|
|
|
|
unsigned long ip;
|
|
|
|
|
char ipstr[4096];
|
|
|
|
|
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
CONNECT_getCdkey( fd, cdkey, 4096);
|
|
|
|
|
CONNECT_getCharname( fd, charname, 4096);
|
|
|
|
|
ip=CONNECT_get_userip(fd);
|
|
|
|
|
sprintf(ipstr,"%d.%d.%d.%d",
|
|
|
|
|
((unsigned char *)&ip)[0],
|
|
|
|
|
((unsigned char *)&ip)[1],
|
|
|
|
|
((unsigned char *)&ip)[2],
|
|
|
|
|
((unsigned char *)&ip)[3]);
|
|
|
|
|
if ((errcode<0) || (errcode>=HACK_TYPE_NUM)) errcode=HACK_NOTHING;
|
|
|
|
|
|
|
|
|
|
printl( LOG_HACK, "(%d:%d) %s ip=%s cdkey=%s charname=%s",
|
|
|
|
|
tm1.tm_hour, tm1.tm_min, hackmsg[errcode], ipstr, cdkey, charname);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logHackKick(int fd)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
char cdkey[4096];
|
|
|
|
|
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
CONNECT_getCdkey( fd, cdkey, 4096);
|
|
|
|
|
if(strlen(cdkey)<1)
|
2017-01-13 23:37:03 +08:00
|
|
|
|
strcpy(cdkey,"空");
|
|
|
|
|
printl( LOG_LOGIN, "hack:(%d年%d月%d日 %d:%d) cdkey=%s ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min, cdkey);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logKong(char *ip)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_HACK, "(%d年%d月%d日 %d:%d) 空连接保护,IP=%s ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min,ip);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logCC(char *ip)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_HACK, "(%d年%d月%d日 %d:%d) 主动防御,IP=%s ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min,ip);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logWrongCdkey(char *ip)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_HACK, "(%d年%d月%d日 %d:%d) 错误账号,IP=%s ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min,ip);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logWrongBao(char *ip)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_HACK, "(%d年%d月%d日 %d:%d) 错误封包,IP=%s ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min,ip);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logRightBao(char *ip,int baolen)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_HACK, "(%d年%d月%d日 %d:%d) 正确封包,IP=%s,len=%d ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min,ip,baolen);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logBigBao(char *ip,int baolen)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_HACK, "(%d年%d月%d日 %d:%d) 大包,IP=%s,len=%d ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min,ip,baolen);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void logFengBao(int clifd,char *cdkey,int funcid,char *buf)
|
|
|
|
|
{
|
|
|
|
|
/*
|
|
|
|
|
int clicharaindex = CONNECT_getCharaindex( clifd );
|
|
|
|
|
if(CHAR_getWorkInt(clicharaindex,CHAR_WORKJILU)==1){
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_HACK, "(%d年%d月%d日 %d:%d) 截取封包,cdkey=%s,funcid=%d,buf=%s ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min,cdkey,funcid,buf);
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_HACK, "(%d年%d月%d日 %d:%d) 截取封包,cdkey=%s,funcid=%d,buf=%s ",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour, tm1.tm_min,cdkey,funcid,buf);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Nuke 0626
|
|
|
|
|
void logSpeed(int fd)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
char cdkey[4096];
|
|
|
|
|
char charname[4096];
|
|
|
|
|
unsigned long ip;
|
|
|
|
|
char ipstr[4096];
|
|
|
|
|
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
CONNECT_getCdkey( fd, cdkey, 4096);
|
|
|
|
|
CONNECT_getCharname( fd, charname, 4096);
|
|
|
|
|
ip=CONNECT_get_userip(fd);
|
|
|
|
|
sprintf(ipstr,"%d.%d.%d.%d",
|
|
|
|
|
((unsigned char *)&ip)[0],
|
|
|
|
|
((unsigned char *)&ip)[1],
|
|
|
|
|
((unsigned char *)&ip)[2],
|
|
|
|
|
((unsigned char *)&ip)[3]);
|
|
|
|
|
printl( LOG_SPEED, "(%d:%d) ip=%s cdkey=%s charname=%s",
|
|
|
|
|
tm1.tm_hour, tm1.tm_min, ipstr, cdkey, charname);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Shan
|
|
|
|
|
void LogGM(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharName, //角色名称
|
|
|
|
|
char *CharID, //玩家ID
|
|
|
|
|
char *Message, //指令内容
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int floor,
|
|
|
|
|
int x,
|
|
|
|
|
int y
|
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
|
|
|
|
|
memcpy(&tm1,localtime((time_t *)&NowTime.tv_sec),sizeof(tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl(LOG_GM,"%s\t%s\t%s\t(%d,%d,%d)\t(%d年%d月%d日 %d:%d)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CharName,CharID,Message,floor,x,y,tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour,tm1.tm_min);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Robin 10/02
|
|
|
|
|
void LogFamily(
|
|
|
|
|
char *FMName,
|
|
|
|
|
int fmindex,
|
|
|
|
|
char *charName,
|
|
|
|
|
char *charID,
|
|
|
|
|
char *keyWord,
|
|
|
|
|
char *data
|
|
|
|
|
){
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
// CoolFish: 2001/10/11 log time
|
|
|
|
|
printl( LOG_FAMILY, "%s\t%d\t%s\t%s\t= %s, %s (%d:%d)",
|
|
|
|
|
FMName, fmindex, charName, charID,
|
|
|
|
|
keyWord, data, tm1.tm_hour, tm1.tm_min );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef _GAMBLE_ROULETTE
|
|
|
|
|
void LogGamble(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharName, //角色名称
|
|
|
|
|
char *CharID, //玩家ID
|
|
|
|
|
char *Key, //说明
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int floor,
|
|
|
|
|
int x,
|
|
|
|
|
int y,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
int player_stone, //所拥有金钱
|
|
|
|
|
int Gamble_stone, //下注本金
|
|
|
|
|
int get_stone, //获得
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int Gamble_num,
|
2017-01-13 23:37:03 +08:00
|
|
|
|
int flg //flg = 1 玩家 2 庄家
|
2016-12-24 08:45:52 +08:00
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy(&tm1,localtime((time_t *)&NowTime.tv_sec),sizeof(tm1));
|
|
|
|
|
|
|
|
|
|
if( flg == 1 ) {
|
|
|
|
|
printl(LOG_GAMBLE,"%s\t%s\t TYPE:%s <<P_STONE:%9d,G_STONE:%9d,GET:%9d >>\t(%d,%d,%d)-(%d:%d) GAMBLENUM=%d",
|
|
|
|
|
CharName,CharID,Key, player_stone, Gamble_stone, get_stone, floor,x,y,tm1.tm_hour,tm1.tm_min, Gamble_num);
|
|
|
|
|
}else if( flg == 2 ) {
|
|
|
|
|
printl(LOG_GAMBLE,"%s\tROULETTE MASTER\t TYPE:%s <<MASTER_STONE:%24d >>\t(%d,%d,%d)-(%d:%d)",
|
|
|
|
|
CharName,Key, player_stone, floor,x,y,tm1.tm_hour,tm1.tm_min);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
void LogLogin(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharID, //玩家ID
|
|
|
|
|
char *CharName, //角色名称
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int saveIndex,
|
|
|
|
|
char *ipadress,char *pcid
|
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
|
|
|
|
|
memcpy(&tm1,localtime((time_t *)&NowTime.tv_sec),sizeof(tm1));
|
|
|
|
|
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl(LOG_LOGIN,"%s\t%s\ti=%d\t%s\tPCID=%s\t(%d年%d月%d日 %d:%d)",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CharID,CharName,saveIndex,ipadress,pcid,tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour,tm1.tm_min);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void LogLogout(
|
2017-01-13 23:37:03 +08:00
|
|
|
|
char *CharID, //玩家ID
|
|
|
|
|
char *CharName, //角色名称
|
2016-12-24 08:45:52 +08:00
|
|
|
|
int floor,
|
|
|
|
|
int hp,
|
|
|
|
|
char *file,
|
|
|
|
|
int line
|
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
|
|
|
|
|
memcpy(&tm1,localtime((time_t *)&NowTime.tv_sec),sizeof(tm1));
|
|
|
|
|
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl(LOG_LOGIN,"%s\t%s\tfloor=%d\thp=%d\t(%d年%d月%d日 %d:%d)\tfile=%s%d",
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CharID,CharName,floor,hp,tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour,tm1.tm_min,file,line);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void warplog_to_file()
|
|
|
|
|
{
|
|
|
|
|
int i =0;
|
|
|
|
|
char outbuf[128];
|
|
|
|
|
FILE *f;
|
|
|
|
|
f = fopen("log/warp1.log" ,"w" );
|
|
|
|
|
if( !f ) return;
|
|
|
|
|
|
|
|
|
|
for( i=0; i<MAXMAPNUM; i++) {
|
|
|
|
|
if( warplog[i].floor <= 0 ) continue;
|
|
|
|
|
sprintf( outbuf, "%6d,%10d,%10d\n", warplog[i].floor, warplog[i].incount, warplog[i].outcount );
|
|
|
|
|
fputs( outbuf, f);
|
|
|
|
|
}
|
|
|
|
|
fclose(f);
|
|
|
|
|
|
|
|
|
|
f = fopen("log/warp2.log" ,"w" );
|
|
|
|
|
if( !f ) return;
|
|
|
|
|
|
|
|
|
|
for( i=0; i<MAXMAPLINK; i++) {
|
|
|
|
|
if( warpCount[i].floor1 <= 0 ) continue;
|
|
|
|
|
sprintf( outbuf, "%6d,%6d,%10d\n", warpCount[i].floor1, warpCount[i].floor2, warpCount[i].count );
|
|
|
|
|
fputs( outbuf, f);
|
|
|
|
|
}
|
|
|
|
|
fclose(f);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void warplog_from_file()
|
|
|
|
|
{
|
|
|
|
|
int i =0;
|
|
|
|
|
char outbuf[128];
|
|
|
|
|
FILE *f;
|
|
|
|
|
|
|
|
|
|
print("warplog_from_file ");
|
|
|
|
|
|
|
|
|
|
f = fopen("log/warp1.log" ,"r" );
|
|
|
|
|
if( !f ) return;
|
|
|
|
|
|
|
|
|
|
while( fgets( outbuf, sizeof(outbuf), f) && i < MAXMAPNUM ) {
|
|
|
|
|
|
|
|
|
|
if( !sscanf( outbuf, "%d,%d,%d",
|
|
|
|
|
&warplog[i].floor, &warplog[i].incount, &warplog[i].outcount ) ) {
|
|
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//print(" %d", warplog[i].floor);
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
print(" read_count:%d\n", i);
|
|
|
|
|
|
|
|
|
|
fclose( f );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f = fopen("log/warp2.log" ,"r" );
|
|
|
|
|
if( !f ) return;
|
|
|
|
|
|
|
|
|
|
i = 0;
|
|
|
|
|
while( fgets( outbuf, sizeof(outbuf), f) && i < MAXMAPLINK ) {
|
|
|
|
|
|
|
|
|
|
if( !sscanf( outbuf, "%d,%d,%d",
|
|
|
|
|
&warpCount[i].floor1, &warpCount[i].floor2, &warpCount[i].count ) ) {
|
|
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
print(" read_count2:%d\n", i);
|
|
|
|
|
|
|
|
|
|
fclose( f );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void LogPetFeed(
|
|
|
|
|
char * CharName, char *CharID, char *PetName, int petindex,
|
|
|
|
|
int PetLv, char *Key,int floor, int x, int y, char *ucode) {
|
|
|
|
|
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
2017-01-13 23:37:03 +08:00
|
|
|
|
printl( LOG_PET, "%s\t%s\t%s:%d 喂蛋=%s (%d,%d,%d)(%d:%d) %s " ,
|
2016-12-24 08:45:52 +08:00
|
|
|
|
CharName, CharID, PetName, PetLv, Key, floor, x, y, tm1.tm_hour, tm1.tm_min, ucode);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef _ANGEL_SUMMON
|
|
|
|
|
void LogAngel( char *msg) {
|
|
|
|
|
|
|
|
|
|
struct tm tm1;
|
|
|
|
|
memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));
|
|
|
|
|
printl( LOG_ANGEL, "%s (%d:%d) ", msg, tm1.tm_hour, tm1.tm_min);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|