prerelease version + implemented logfile support

This commit is contained in:
False.Genesis 2007-01-12 14:03:08 +00:00
parent dda1afada0
commit fa4385c74f
12 changed files with 86 additions and 272 deletions

View File

@ -22,7 +22,7 @@ bool DefScriptPackage::SCpause(CmdSet Set){
bool DefScriptPackage::SCSendChatMessage(CmdSet Set){
if(!(((PseuInstance*)parentMethod)->GetWSession() && ((PseuInstance*)parentMethod)->GetWSession()->IsValid()))
{
printf("Invalid Script call: SCSendChatMessage: WorldSession not valid\n");
log("Invalid Script call: SCSendChatMessage: WorldSession not valid");
return false;
}
std::stringstream ss;
@ -64,7 +64,7 @@ bool DefScriptPackage::SCemote(CmdSet Set){
return true;
if(!(((PseuInstance*)parentMethod)->GetWSession() && ((PseuInstance*)parentMethod)->GetWSession()->IsValid()))
{
printf("Invalid Script call: SCEmote: WorldSession not valid\n");
log("Invalid Script call: SCEmote: WorldSession not valid");
return false;
}
uint32 id=atoi(Set.defaultarg.c_str());
@ -103,7 +103,7 @@ void DefScriptPackage::My_LoadUserPermissions(VarSet &vs)
{
usr = variables[i].name.substr(strlen(prefix), variables[i].name.length() - strlen(prefix));
my_usrPermissionMap[usr] = atoi(variables[i].value.c_str());
DEBUG( printf("Player '%s' permission = %u\n",usr.c_str(),atoi(variables[i].value.c_str())); )
DEBUG( log("Player '%s' permission = %u",usr.c_str(),atoi(variables[i].value.c_str())); )
}
}
}

View File

@ -68,6 +68,7 @@ PseuInstance::~PseuInstance()
}
bool PseuInstance::Init(void) {
log_prepare("logfile.txt",this);
if(_confdir.empty())
_confdir="./conf/";
@ -78,7 +79,7 @@ bool PseuInstance::Init(void) {
RAND_set_rand_method(RAND_SSLeay()); // init openssl randomizer
if(SDL_Init(0)==-1) {
printf("SDL_Init: %s\n", SDL_GetError());
log("SDL_Init: %s", SDL_GetError());
return false;
}
@ -86,53 +87,57 @@ bool PseuInstance::Init(void) {
_scp->SetParentMethod((void*)this);
_conf=new PseuInstanceConf();
log("Reading PseuWoW.conf...");
if(!_scp->variables.ReadVarsFromFile(_confdir + "PseuWoW.conf"))
{
printf("Error reading conf file [%s]",_confdir.append("PseuWoW.conf").c_str());
log("Error reading conf file [%s]",_confdir.append("PseuWoW.conf").c_str());
return false;
}
logdetail("Applying configuration...");
_conf->ApplyFromVarSet(_scp->variables);
log("Reading user permissions...");
if(_scp->variables.ReadVarsFromFile(_confdir + "users.conf"))
{
printf("-> Done reading users.\n");
log("-> Done reading users.");
}
else
{
printf("Error reading conf file [%s] - NO PERMISSIONS SET!\n",_confdir.append("users.conf").c_str());
log("Error reading conf file [%s] - NO PERMISSIONS SET!",_confdir.append("users.conf").c_str());
}
// //DEBUG1(printf("Main_Init: Setting up DefScripts path '%s'\n",defScpPath.c_str()););
logdebug("Setting up DefScripts path '%s'",_scpdir.c_str());
_scp->SetPath(_scpdir);
// //DEBUG1(printf("Main_Init: Setting up predefined DefScript macros...\n"););
logdebug("Setting up predefined DefScript macros...");
_scp->variables.Set("@version_short",_ver_short);
_scp->variables.Set("@version",_ver);
logdetail("Applying user permissions...");
_scp->My_LoadUserPermissions(_scp->variables);
// //DEBUG1(printf("Main_Init: Loading DefScripts from folder '%s'\n",defScpPath.c_str()););
log("Loading DefScripts from folder '%s'",_scpdir.c_str());
if(!_scp->RunScript("_startup",NULL))
{
printf("Main_Init: Error executing '_startup.def'\n");
printf("Error executing '_startup.def'");
}
if(GetConf()->enablecli)
{
log("Starting CLI...");
_cli = new CliRunnable(this);
ZThread::Thread t(_cli);
}
if(_stop){
printf("Errors while initializing, proc halted!!\n");
log("Errors while initializing, proc halted!!");
if(GetConf()->exitonerror)
exit(0);
while(true)SDL_Delay(1000);
}
// if(DEBUG)printf("Main_Init: Init complete.\n");
log("Init complete.\n");
_initialized=true;
return true;
}
@ -167,10 +172,10 @@ void PseuInstance::Run(void)
if(_fastquit)
{
printf("Aborting Instance...\n");
log("Aborting Instance...");
return;
}
printf("Shutting down instance...\n");
log("Shutting down instance...");
SaveAllCache();
@ -223,100 +228,6 @@ void PseuInstance::Sleep(uint32 msecs)
/*
printf("%s\n",ver);
for(unsigned int temp=0;temp<=strlen(ver);temp++)printf("~");printf("\n");
printf("[Compiled on: %s , %s]\n\n",__DATE__,__TIME__);
if (!initproc()) quitproc_error();
bool _auth_sent=false;
bool _first_wpacket=true;
clock_t ping_time=clock()-25000;
while (true) {
if(something_went_wrong){
if(inworld){
SendChatMessage(CHAT_MSG_YELL,0,"ERROR! Something went wrong, exiting...","");
}
printf("!!! Something went wrong, proc halted.!!!\n");
ctrlCon.Close();
worldCon.Close();
realmCon.Close();
if(exitonerror)quitproc();
while(true)SDL_Delay(1000);
}
if( !realmCon.IsConnected() && !worldCon.IsConnected() && !something_went_wrong){
printf("Opening realm TCP connection <%s:%d>\n",realmlist,rs_port);
while(!realmCon.ConnectTo(realmlist,rs_port));
_auth_sent=false;
}
if(realmCon.IsConnected() && !worldCon.IsConnected() && !something_went_wrong){
if(!_auth_sent){
CLIENT_LOGON_CHALLENGE(accname, accpass);
_auth_sent=true;
}
}
if(realmCon.HasData()){
Buf buf;
buf=realmCon.GetData();
rs_parser(buf.str,buf.len); // TODO: change type to Buf (also the func arg!)
}
while(worldCon.GetBufferLevel()>1){
////DEBUG3(
// printf("WS_IN, %d bytes. Buffer Level=%u\n",worldCon.GetKeepData().len,worldCon.GetBufferLevel());
// printchex(worldCon.GetKeepData().str,worldCon.GetKeepData().len,true);
//)
//_first_wpacket=false;
ByteBuffer pk2;
pk2.append(worldCon.GetDataString());
pk2.resize(pk2.size()-1);
HandleWorldPacket(pk2);
}
// this covers the first serverseed packet, which get sometimes merged into 1 packet instead of 2
if(worldCon.HasData() && _first_wpacket && worldCon.GetKeepData().len==8){
_first_wpacket=false;
ByteBuffer pk2;
pk2.append(worldCon.GetDataString());
pk2.resize(pk2.size()-1);
HandleWorldPacket(pk2);
}
if(!worldCon.IsConnected() && inworld){
printf("Disconnected from World server!\n");
inworld=false;
_first_wpacket=true;
_auth_sent=false;
}
if(clock()-ping_time>30000)
{
ping_time=clock();
SendPing(ping_time);
}
SDL_Delay(idleSleepTime);
if (error)return error;
void _SaveAllCache(void){
bool result;
result=plrNameCache.SaveToFile();
// +++
}
*/
PseuInstanceConf::PseuInstanceConf()
{
}

View File

@ -3,6 +3,7 @@
#define _PSEUWOW_H
#include "common.h"
#include "log.h"
#include "Auth/BigNumber.h"
#include "DefScript/DefScript.h"
#include "Network/SocketHandler.h"

View File

@ -133,8 +133,6 @@ void RealmSocket::_HandleRealmList(void)
uint8 cmd,count;
realmbuf >> cmd >> len >> unk >> count;
printf("DEBUG: Realm cmd=%u, count=%u, size=%u, unk=%u\n",cmd,count,len,unk);
// no realm?
if(count==0)
return;
@ -163,16 +161,13 @@ void RealmSocket::_HandleRealmList(void)
{
realmAddr=realms[i].addr_port;
}
printf("Realm: %s (%s)",realms[i].name.c_str(),realms[i].addr_port.c_str());
printf("[chars:%d][population:%f][timezone:%d]",realms[i].chars_here,realms[i].population,realms[i].timezone);
printf("\n");
log("Realm: %s (%s)",realms[i].name.c_str(),realms[i].addr_port.c_str());
logdetail(" [chars:%d][population:%f][timezone:%d]",realms[i].chars_here,realms[i].population,realms[i].timezone);
}
// now setup where the woldserver is and how to login there
if(realmAddr.empty()){
printf("Realm \"%s\" was not found on the realmlist!\n",GetInstance()->GetConf()->realmname.c_str());
//something_went_wrong=true;
//realmCon.Close();
log("Realm \"%s\" was not found on the realmlist!",GetInstance()->GetConf()->realmname.c_str());
return;
}
@ -196,7 +191,7 @@ void RealmSocket::OnRead(void)
{
TcpSocket::OnRead();
bool known=false;
printf("RealmSocket::OnRead() %u bytes\n",ibuf.GetLength());
//printf("RealmSocket::OnRead() %u bytes\n",ibuf.GetLength());
if(!ibuf.GetLength())
return;
uint8 cmd, i=0;
@ -212,96 +207,17 @@ void RealmSocket::OnRead(void)
}
if(!known)
{
printf("RealmSocket: Got unknown packet, cmd=%u\n",cmd);
log("RealmSocket: Got unknown packet, cmd=%u",cmd);
}
ibuf.Remove(ibuf.GetLength()); // if we have data crap left on the buf, delete it
}
/*
switch(rs_state){
unsigned int i;
case 1:{
if(pkt[2]==4){
printf("Realm Server did not find account \"%s\"!\n",accname);
something_went_wrong=true;
realmCon.Close();
} else
if(pkt[2]==6){
printf("Account \"%s\" is already logged in!\n",accname);
realmCon.Close();
something_went_wrong=true;
} else
if(pkt[2]!=0){
printf("Unknown realm server response! opcode=0x%x\n",(unsigned char)pkt[2]);
something_went_wrong=true;
realmCon.Close();
} else
if(pkt[2]==0){
//DEBUG1(printf("Login successful, now calculating proof packet...\n"););
ProcessClientLogonProof(pkt);
rs_state=2; // 2=waiting for server proof
}
}break;
case 2:{
if(pkt[1]==4){
printf("Wrong password!\n");
something_went_wrong=true;
realmCon.Close();
} else
if(pkt[0]==1 && pkt[1]==0 && memcmp(&pkt[2],Auth_M2,20)!=0){
printf("Something with Authenticating went wrong, although the password seems correct!\n");
//DEBUG1(printf("-> expected M2=");printchex(Auth_M2,20,true);)
//DEBUG1(printf("-> got M2=");printchex(&pkt[2],20,true);)
something_went_wrong=true;
realmCon.Close();
} else
if(pkt[0]==1 && pkt[1]==0 && memcmp(&pkt[2],Auth_M2,20)==0){
printf("Password is correct!! Requesting Realmlist.\n");
rs_state=3; // requesting realmlist
// Request Realmlist
char realmrequest[]={0x10,0,0,0,0}; // 0x10 is opcode, rest is an uint32, nulled
realmCon.Send(realmrequest,5);
}
else {
printf("Unknown ErrorID recieved, check the packet hexdump.\n");
printf("-> IDs=");printchex(pkt,2,true);
something_went_wrong=true;
realmCon.Close();
}
}break;
case 3:{
if(pkt[0]!=0x10){
printf("Expected a realmlist packet, got something different. opcode=0x%x\n",(unsigned char)pkt[0]);
something_went_wrong=true;
realmCon.Close();
}
ByteBuffer bbuf;
bbuf.append(pkt,size);
if(HandleRealmList(bbuf)==true){
printf("Connecting to realm \"%s\" at \"%s\", port %d\n",realmname,worldhost.c_str(),ws_port);
while(!worldCon.IsConnected()){
worldCon.ConnectTo((char*)worldhost.c_str(),ws_port); // init world server connection, we have all info we need to enter
}
realmCon.Close(); // close the realm server connection, its no longer needed now
}
}break;
// more?
default:{
//...
}
}
}
*/
void RealmSocket::SendLogonChallenge(void)
{
if(!this->Ready())
{
printf("Error sending AUTH_LOGON_CHALLENGE, port is not ready!\n");
log("Error sending AUTH_LOGON_CHALLENGE, port is not ready!\n");
return;
}
std::string acc = stringToUpper(GetInstance()->GetConf()->accname);
@ -322,8 +238,6 @@ void RealmSocket::SendLogonChallenge(void)
packet << (uint8)acc.length(); // length of acc name without \0
packet.append(acc.c_str(),acc.length()); // append accname, skip \0
packet.hexlike();
SendBuf((char*)packet.contents(),packet.size());
}
@ -335,21 +249,21 @@ PseuInstance *RealmSocket::GetInstance(void)
void RealmSocket::_HandleLogonChallenge(void)
{
printf("RealmSocket: Got AUTH_LOGON_CHALLENGE [%u of %u bytes]\n",ibuf.GetLength(),sizeof(sAuthLogonChallenge_S));
logdebug("RealmSocket: Got AUTH_LOGON_CHALLENGE [%u of %u bytes]",ibuf.GetLength(),sizeof(sAuthLogonChallenge_S));
sAuthLogonChallenge_S lc;
ibuf.Read((char*)&lc, sizeof(sAuthLogonChallenge_S));
switch (lc.error)
{
case 4:
printf("Realm Server did not find account \"%s\"!\n",GetInstance()->GetConf()->accname.c_str());
log("Realm Server did not find account \"%s\"!",GetInstance()->GetConf()->accname.c_str());
break;
case 6:
printf("Account \"%s\" is already logged in!\n",GetInstance()->GetConf()->accname.c_str());
log("Account \"%s\" is already logged in!",GetInstance()->GetConf()->accname.c_str());
break;
case 0:
{
printf("Login successful, now calculating proof packet...\n");
logdetail("Login successful, now calculating proof packet...");
// now lets start calculating
BigNumber N,A,B,a,u,x,v,S,salt,unk1,g,k(3); // init BNs, default k to 3
@ -362,17 +276,6 @@ void RealmSocket::_HandleLogonChallenge(void)
salt.SetBinary(lc.salt,32);
unk1.SetBinary(lc.unk3,16);
/*
// debug output
//DEBUG3(printchex(B_str,BNLEN,true);)
//DEBUG3(printchex(g_str,1,true);)
//DEBUG3(printchex(N_str,BNLEN,true);)
//DEBUG3(printchex(salt_str,BNLEN,true);)
//DEBUG3(printchex(unk1_str,16,true);)
*/
// client-side BN calculations:
////DEBUG3(printf("--> k=%s\n",k.AsHexStr());)
a.SetRand(19*8);
Sha1Hash userhash,xhash,uhash;
userhash.UpdateData(_authstr);
@ -381,23 +284,23 @@ void RealmSocket::_HandleLogonChallenge(void)
xhash.UpdateData(userhash.GetDigest(),userhash.GetLength());
xhash.Finalize();
x.SetBinary(xhash.GetDigest(),xhash.GetLength());
////DEBUG3(printf("--> x=%s\n",x.AsHexStr());)
logdebug("--> x=%s",x.AsHexStr());
v=g.ModExp(x,N);
////DEBUG3(printf("--> v=%s\n",v.AsHexStr());)
logdebug("--> v=%s",v.AsHexStr());
A=g.ModExp(a,N);
////DEBUG3(printf("--> A=%s\n",A.AsHexStr());)
logdebug("--> A=%s",A.AsHexStr());
uhash.UpdateBigNumbers(&A, &B, NULL);
uhash.Finalize();
u.SetBinary(uhash.GetDigest(), 20);
////DEBUG3(printf("--> u=%s\n",u.AsHexStr());)
logdebug("--> u=%s",u.AsHexStr());
S=(B - k*g.ModExp(x,N) ).ModExp((a + u * x),N);
////DEBUG3(printf("--> S=%s\n",S.AsHexStr());)
logdebug("--> S=%s",S.AsHexStr());
// calc M1 & M2
unsigned int i=0;
char S1[16+1],S2[16+1]; // 32/2=16 :) +1 for \0
// split it into 2 seperate strings, interleaved
for(i=0;i<=15;i++){
for(i=0;i<16;i++){
S1[i]=S.AsByteArray()[i*2];
S2[i]=S.AsByteArray()[i*2+1];
}
@ -445,10 +348,8 @@ void RealmSocket::_HandleLogonChallenge(void)
M2hash.Finalize();
////DEBUG3(
printf("--> M1=");printchex((char*)M1hash.GetDigest(),20,true);
printf("--> M2=");printchex((char*)M2hash.GetDigest(),20,true);
//)
//logdebug("--> M1=");printchex((char*)M1hash.GetDigest(),20,true);
//logdebug("--> M2=");printchex((char*)M2hash.GetDigest(),20,true);
// Calc CRC & CRC_hash
// i don't know yet how to calc it, so set it to zero
@ -475,7 +376,7 @@ void RealmSocket::_HandleLogonChallenge(void)
break;
default:
printf("Unknown realm server response! opcode=0x%x\n",(unsigned char)lc.error);
log("Unknown realm server response! opcode=0x%x\n",(unsigned char)lc.error);
break;
}
}
@ -483,10 +384,10 @@ void RealmSocket::_HandleLogonChallenge(void)
void RealmSocket::_HandleLogonProof(void)
{
printf("RealmSocket: Got AUTH_LOGON_PROOF [%u of %u bytes]\n",ibuf.GetLength(),26);
logdetail("RealmSocket: Got AUTH_LOGON_PROOF [%u of %u bytes]\n",ibuf.GetLength(),26);
sAuthLogonProof_S lp;
ibuf.Read((char*)&lp, 26); // the compiler didnt like 'sizeof(sAuthLogonProof_S)', said it was 28
printchex((char*)&lp, sizeof(sAuthLogonProof_S),true);
//printchex((char*)&lp, sizeof(sAuthLogonProof_S),true);
if(!memcmp(lp.M2,this->_m2,20))
{
// auth successful
@ -497,7 +398,7 @@ void RealmSocket::_HandleLogonProof(void)
}
else
{
printf("Auth failed, M2 differs!\n");
log("Auth failed, M2 differs!");
printf("My M2 :"); printchex((char*)_m2,20,true);
printf("Srv M2:"); printchex((char*)lp.M2,20,true);
@ -506,12 +407,12 @@ void RealmSocket::_HandleLogonProof(void)
void RealmSocket::OnConnect()
{
printf("DEBUG: RealmSocket connected!\n");
logdetail("RealmSocket connected!");
SendLogonChallenge();
}
void RealmSocket::OnConnectFailed(void)
{
printf("RealmSocket::OnConnectFailed()\n");
log("Connecting to Realm failed!");
}

View File

@ -17,7 +17,6 @@ void WorldSession::SendChatMessage(uint32 type, uint32 lang, std::string msg, st
case CHAT_MSG_GUILD:
case CHAT_MSG_OFFICER: // not sure about that
packet<<msg;
//DEBUG2(printf("W:CHAT->: \"%s\"\n",msg.c_str()););
break;
case CHAT_MSG_WHISPER:
if(to.empty())
@ -51,7 +50,7 @@ void WorldSession::SendPing(uint32 ping){
packet << ping;
packet.SetOpcode(CMSG_PING);
SendWorldPacket(packet);
//DEBUG2(printf("Sent CMSG_PING, clock=%u\n",ping););
logdebug("Sent CMSG_PING, clock=%u",ping);
}
void WorldSession::SendEmote(uint32 id){

View File

@ -38,13 +38,13 @@ uint64 PlayerNameCache::GetGuid(std::string name){
}
bool PlayerNameCache::SaveToFile(void){
printf("Saving PlayerNameCache...\n");
log("Saving PlayerNameCache...");
char *fn="./cache/playernames.cache";
std::fstream fh;
fh.open(fn, std::ios_base::out | std::ios_base::binary);
if(!fh)
{
printf("ERROR: could not write to file '%s'!\n",fn);
log("ERROR: could not write to file '%s'!",fn);
return false;
}
uint32 size=_cache.size();
@ -59,22 +59,22 @@ bool PlayerNameCache::SaveToFile(void){
len=(*i)->_name.length();
fh.write( (char*)&len,sizeof(uint8) );
fh.write( (char*)(*i)->_name.c_str(),len );
DEBUG(printf( "PlayerNameCache << " I64FMT " -> %s\n", (*i)->_guid, (*i)->_name.c_str()););
DEBUG(log( "PlayerNameCache << " I64FMT " -> %s", (*i)->_guid, (*i)->_name.c_str()););
}
fh.close();
printf("PlayerNameCache saved successfully.\n");
log("PlayerNameCache saved successfully.");
return true;
}
bool PlayerNameCache::ReadFromFile(void){
char *fn="./cache/playernames.cache";
printf("Loading PlayerNameCache...\n");
log("Loading PlayerNameCache...");
bool success=true;
std::fstream fh;
fh.open(fn, std::ios_base::in | std::ios_base::binary);
if(!fh)
{
printf("ERROR: could not open file '%s'!\n",fn);
log("ERROR: could not open file '%s'!",fn);
return false;
}
uint32 size;
@ -90,8 +90,8 @@ bool PlayerNameCache::ReadFromFile(void){
fh.read((char*)&(cacheItem->_guid),sizeof(uint64));
fh.read((char*)&len,sizeof(uint8));
if(len>12 || len<2){
printf("\nERROR: PlayerNameCache data seem corrupt [namelength=%d, should be <=12}]\n",len);
printf("-> Clearing cache, creating new.\n");
log("\nERROR: PlayerNameCache data seem corrupt [namelength=%d, should be <=12}]",len);
log("-> Clearing cache, creating new.\n");
_cache.clear();
success=false;
break;
@ -106,7 +106,7 @@ bool PlayerNameCache::ReadFromFile(void){
delete nameptr;
fh.close();
if(success)
printf("PlayerNameCache successfully loaded.\n");
log("PlayerNameCache successfully loaded.");
return success;
}

View File

@ -41,7 +41,7 @@ WorldSession::~WorldSession()
void WorldSession::Start(void)
{
printf("Connecting to '%s' on port %u\n",GetInstance()->GetConf()->worldhost.c_str(),GetInstance()->GetConf()->worldport);
log("Connecting to '%s' on port %u",GetInstance()->GetConf()->worldhost.c_str(),GetInstance()->GetConf()->worldport);
_socket->Open(GetInstance()->GetConf()->worldhost,GetInstance()->GetConf()->worldport);
GetInstance()->GetRSession()->SetCloseAndDelete(); // realm socket is no longer needed
_valid=true;
@ -108,7 +108,7 @@ void WorldSession::Update(void)
|| ((!known) && GetInstance()->GetConf()->showopcodes==2)
|| (GetInstance()->GetConf()->showopcodes==3) )
{
printf(">> Opcode %u [%s]\n",packet->GetOpcode(),LookupName(packet->GetOpcode(),g_worldOpcodeNames));
log(">> Opcode %u [%s]",packet->GetOpcode(),LookupName(packet->GetOpcode(),g_worldOpcodeNames));
}
@ -214,7 +214,7 @@ void WorldSession::_HandleAuthChallengeOpcode(WorldPacket& recvPacket)
std::string acc = stringToUpper(GetInstance()->GetConf()->accname);
uint32 serverseed;
recvPacket >> serverseed;
printf("W:auth: serverseed=0x%X\n",serverseed);
logdebug("Auth: serverseed=0x%X",serverseed);
Sha1Hash digest;
digest.UpdateData(acc);
uint32 unk=0;
@ -235,10 +235,6 @@ void WorldSession::_HandleAuthChallengeOpcode(WorldPacket& recvPacket)
auth<<(uint32)0; // no addons? no idea, but seems to work. MaNGOS doesnt accept without this.
auth.SetOpcode(CMSG_AUTH_SESSION);
//DEBUG3(
// printf("CMSG_AUTH_SESSION=");
// printchex((char*)outpkt.contents(),outpkt.size(),true);
//)
SendWorldPacket(auth);
// note that if the sessionkey/auth is wrong or failed, the server sends the following packet UNENCRYPTED!
@ -254,12 +250,12 @@ void WorldSession::_HandleAuthResponseOpcode(WorldPacket& recvPacket)
uint8 errcode;
recvPacket >> errcode;
if(errcode==0xC){
//DEBUG1(printf("World Authentication successful, preparing for char list request...\n"););
logdetail("World Authentication successful, preparing for char list request...");
WorldPacket pkt;
pkt.SetOpcode(CMSG_CHAR_ENUM);
SendWorldPacket(pkt);
} else {
printf("World Authentication failed, errcode=0x%X\n",(unsigned char)errcode);
log("World Authentication failed, errcode=0x%X",(unsigned char)errcode);
}
}
@ -272,11 +268,11 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
recvPacket >> num;
if(num==0){
printf("W:No chars found!\n");
log("No chars found!\n");
GetInstance()->Stop();
return;
}
printf("W: Chars in list: %u\n",num);
logdetail("W: Chars in list: %u\n",num);
for(unsigned int i=0;i<num;i++){
recvPacket >> plr[i]._guid;
recvPacket >> plr[i]._name;
@ -308,10 +304,10 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
}
bool char_found=false;
for(unsigned int i=0;i<num;i++){
printf("## %s (%u) [%s/%s]\n",
log("## %s (%u) [%s/%s]",
plr[i]._name.c_str(),plr[i]._level,raceName[plr[i]._race],className[plr[i]._class]);
//DEBUG1(printf("-> coords: map=%u zone=%u x=%f y=%f z=%f\n",
// plr[i]._mapId,plr[i]._zoneId,plr[i]._x,plr[i]._y,plr[i]._z);)
logdetail("-> coords: map=%u zone=%u x=%f y=%f z=%f",
plr[i]._mapId,plr[i]._zoneId,plr[i]._x,plr[i]._y,plr[i]._z);
if(plr[i]._name==GetInstance()->GetConf()->charname){
char_found=true;
_myGUID=plr[i]._guid;
@ -319,11 +315,11 @@ void WorldSession::_HandleCharEnumOpcode(WorldPacket& recvPacket)
}
if(!char_found){
printf("W: Character \"%s\" was not found on char list!\n",GetInstance()->GetConf()->charname.c_str());
log("Character \"%s\" was not found on char list!",GetInstance()->GetConf()->charname.c_str());
GetInstance()->Stop();
return;
} else {
printf("W: Entering World with Character \"%s\"...\n",GetInstance()->GetConf()->charname.c_str());
log("Entering World with Character \"%s\"...",GetInstance()->GetConf()->charname.c_str());
WorldPacket pkt;
pkt.SetOpcode(CMSG_PLAYER_LOGIN);
pkt << _myGUID;
@ -377,11 +373,11 @@ void WorldSession::_HandleMessageChatOpcode(WorldPacket& recvPacket)
recvPacket >> msglen >> msg;
if (type == CHAT_MSG_SYSTEM){
printf("W:SYSMSG: \"%s\"\n",msg.c_str());
log("SYSMSG: \"%s\"",msg.c_str());
} else if (type==CHAT_MSG_WHISPER ){
printf("W:WHISP: %s [%s]: %s\n",plrname.c_str(),LookupName(lang,langNames),msg.c_str());
log("W:WHISP: %s [%s]: %s",plrname.c_str(),LookupName(lang,langNames),msg.c_str());
} else {
printf("W:CHAT: %s [%s]: %s\n",plrname.c_str(),LookupName(lang,langNames),msg.c_str());
log("W:CHAT: %s [%s]: %s",plrname.c_str(),LookupName(lang,langNames),msg.c_str());
}
if(target_guid!=_myGUID && msg.length()>1 && msg.at(0)=='-' && GetInstance()->GetConf()->allowgamecmd)
@ -439,10 +435,9 @@ void WorldSession::_HandleNameQueryResponseOpcode(WorldPacket& recvPacket)
// rest of the packet is not interesting for now
if(plrNameCache.AddInfo(pguid,pname))
{
printf("CACHE: Assigned new player name: '%s'",pname.c_str());
logdetail("CACHE: Assigned new player name: '%s' = " I64FMTD ,pname.c_str(),pguid);
if(GetInstance()->GetConf()->debug > 1)
SendChatMessage(CHAT_MSG_SAY,0,"Player "+pname+" added to cache.","");
//DEBUG2(printf(" to guid "I64FMTD,pguid););
printf("\n");
}
}
@ -450,7 +445,7 @@ void WorldSession::_HandlePongOpcode(WorldPacket& recvPacket)
{
uint32 pong;
recvPacket >> pong;
printf("Recieved Ping reply: %u ms latency.\n",clock()-pong);
log("Recieved Ping reply: %u ms latency.",clock()-pong);
}
void WorldSession::_HandleTradeStatusOpcode(WorldPacket& recvPacket)
{

View File

@ -71,6 +71,7 @@ void abortproc(void)
int main(int argc, char* argv[]) {
try
{
printf("\n (C) 2006, Snowstorm Software\n\n\n");
_HookSignals();

View File

@ -159,6 +159,12 @@
<File
RelativePath=".\Client\DefScriptInterface.cpp">
</File>
<File
RelativePath=".\Client\log.cpp">
</File>
<File
RelativePath=".\Client\log.h">
</File>
<File
RelativePath=".\Client\main.cpp">
</File>

View File

@ -26,6 +26,5 @@
#include "DebugStuff.h"
#include "tools.h"
#endif

View File

@ -197,7 +197,7 @@ std::string getDateString(void)
{
time_t t = time(NULL);
tm* aTm = localtime(&t);
char str[19];
char str[30];
// YYYY year
// MM month (2 digits 01-12)
// DD day (2 digits 01-31)
@ -207,3 +207,4 @@ std::string getDateString(void)
sprintf(str,"%-4d-%02d-%02d %02d:%02d:%02d ",aTm->tm_year+1900,aTm->tm_mon+1,aTm->tm_mday,aTm->tm_hour,aTm->tm_min,aTm->tm_sec);
return std::string(str);
}