Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CLoginServer::pakUserLogin( CLoginClient* thisclient, CPacket* pak )
- {
- CPacket pakout;
- pak->GetString_x( 6, thisclient->username, 20 );
- pak->GetString_x( 26, thisclient->password, 20 );
- Log( MSG_INFO, "Username: %s Password: %s ", thisclient->username, thisclient->password );
- MYSQL_RES *result;
- MYSQL_ROW row;
- rwmMySQL.acquireWriteLock( );
- DoSQL("SELECT id,username,password,accesslevel,verified,banned FROM accounts WHERE username='%s'", thisclient->username);
- rwmMySQL.releaseWriteLock( );
- result = mysql_store_result(mysql);
- // check if User exists
- if(mysql_num_rows(result) <= 0)
- {
- //09 00 0C 00 00 00 00 00 01
- pakout.StartPacket( LOGIN_REQUEST_HEADER );
- pakout.AddWord( LOGIN_REQUEST );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( AcountNotExist );
- SendPacket( thisclient, &pakout );
- return;
- }
- row = mysql_fetch_row(result);
- // check if password is correct
- if(strcmp(thisclient->password, row[2]) != 0)
- {
- pakout.StartPacket( LOGIN_REQUEST_HEADER );
- pakout.AddWord( LOGIN_REQUEST );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( WrongPassword );
- SendPacket( thisclient, &pakout );
- return;
- }
- thisclient->userid = atoi(row[0]);
- thisclient->accesslevels = atoi(row[3]);
- int banned = atoi(row[5]);
- // check if banned
- if( banned == AL_BANNED )
- {
- pakout.StartPacket( LOGIN_REQUEST_HEADER );
- pakout.AddWord( LOGIN_REQUEST );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( Suspended );
- SendPacket( thisclient, &pakout );
- return;
- }
- else
- {
- if (_atoi64(row[5]) <= time(NULL))
- {
- rwmMySQL.acquireReadLock( );
- DoSQL("UPDATE accounts SET banned = %d WHERE id = %d", AL_NORMAL, atoi(row[0]));
- banned = AL_NORMAL;
- rwmMySQL.releaseReadLock( );
- }
- }
- //check if already logged in
- for(unsigned i = 0; i < ClientList.size(); i++)
- {
- CLoginClient* otherclient = (CLoginClient*)ClientList[i];
- if((thisclient != otherclient) && (strcmp(thisclient->username, otherclient->username) == 0))
- {
- pakout.StartPacket( LOGIN_REQUEST_HEADER );
- pakout.AddWord( LOGIN_REQUEST );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( DuplicateConnection );
- SendPacket( thisclient, &pakout );
- return;
- }
- }
- // send the username information
- rwmMySQL.acquireReadLock( );
- DoSQL( "UPDATE accounts SET last_ip='%s' WHERE id='%d'", thisclient->ip, thisclient->userid );
- rwmMySQL.releaseReadLock( );
- pakChannelList( thisclient, pak );
- }
- void CLoginServer::pakChannelList( CLoginClient* thisclient, CPacket* pak )
- {
- CPacket pakout;
- pakout.StartPacket( LOGIN_CHANNEL_HEADER );
- pakout.AddWord( LOGIN_REQUEST );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( OK );
- pakout.AddByte( 1 );
- pakout.AddByte( 1 );
- pakout.AddWord( max_channel ); // channel ammount
- for ( int i = 0; i < max_server; i++)
- {
- for ( int j = 0; j < 1; j++)
- {
- pakout.AddWord( i ); // sever ammount
- pakout.AddWord( j ); // channel 1 - 10
- pakout.AddByte( 1 ); // exellent mabye...
- }
- }
- SendPacket( thisclient, &pakout );
- }
- void CLoginServer::pakChannelSelect( CLoginClient* thisclient, CPacket* pak )
- {
- unsigned server = pak->GetWord( 0x06 );
- unsigned channel = pak->GetWord( 0x08 );
- Log( MSG_INFO, "Username: %s has selected Server: %d and Channel: %d ", thisclient->username, server, channel );
- CPacket pakout;
- pakout.StartPacket( CHANNEL_SELECT_HEADER );
- pakout.AddWord( LOGIN_CHANNEL );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( OK );
- pakout.AddString( thisclient->ip );
- for(unsigned c=0; c<16-(unsigned)strlen(thisclient->ip); c++)
- pakout.AddByte( 0 );
- pakout.AddWord( wport );
- pakout.AddByte( 0 );
- SendPacket( thisclient, &pakout );
- }
- void CLoginServer::pakCheckAvailability( CLoginClient* thisclient, CPacket* pak )
- {
- CPacket pakout;
- pak->GetString_x( 6, thisclient->checkcharname, 20 );
- Log( MSG_INFO, "Username: %s is checking if CharName: %s exists ", thisclient->username, thisclient->checkcharname );
- MYSQL_RES *result;
- rwmMySQL.acquireWriteLock( );
- DoSQL("SELECT name FROM characters WHERE name='%s'", thisclient->checkcharname );
- rwmMySQL.releaseWriteLock( );
- result = mysql_store_result(mysql);
- // check if charname exists
- if( mysql_num_rows( result ) != 0 )
- {
- //09 00 0e 00 00 00 00 00 01
- pakout.StartPacket( LOGIN_REQUEST_HEADER );
- pakout.AddWord( LOGIN_CHECK_CHAR );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( 1 );// charname exists
- SendPacket( thisclient, &pakout );
- return;
- }
- pakout.StartPacket( LOGIN_REQUEST_HEADER );
- pakout.AddWord( LOGIN_CHECK_CHAR );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( OK );// charname OK
- SendPacket( thisclient, &pakout );
- }
- void CLoginServer::pakCharcCreate( CLoginClient* thisclient, CPacket* pak )
- {
- pak->GetString_x( 10 , thisclient->charname, 20);
- unsigned int slot = pak->GetByte( 6 );
- unsigned int job = pak->GetByte( 30 );
- unsigned int sex = pak->GetByte( 31 );
- unsigned int hair = pak->GetByte( 32 );
- unsigned int eyes = pak->GetByte( 33 );
- unsigned int shirt = pak->GetByte( 34 );
- unsigned int pants = pak->GetByte( 35 );
- Log( MSG_INFO,"charname='%s', slot=%d, job=%d, sex=%d, hair=%d, eyes=%d, shirt=%d, pants=%d", thisclient->charname, slot, job, sex, hair, eyes, shirt, pants );
- MYSQL_RES *result;
- rwmMySQL.acquireWriteLock( );
- DoSQL( "SELECT name FROM characters WHERE name='%s'", thisclient->charname );
- rwmMySQL.releaseWriteLock( );
- result = mysql_store_result( mysql );
- if( mysql_num_rows( result ) != 0 )
- {
- // makeing sure the charname exists
- Log( MSG_WARNING, "[Username: %s] is hacking charc create packet", thisclient->username );
- DisconnectClient( thisclient );
- return;
- }
- if( job == 1 )// Swordsman
- {
- /* Insert the data to MySQL */
- rwmMySQL.acquireWriteLock( );
- DoSQL( "INSERT INTO characters (owner,slot,name,gender,job,hair,eyes,shirt,pants,hp,mp,maxhp,maxmp,str,dex,intellect,luck,vit,wis ) \
- VALUES (%i,%i,'%s',%i,%i,%i,%i,%i,%i,97,20,97,20,13,9,3,5,17,5 )", thisclient->userid, slot, thisclient->charname, sex, job, hair, eyes, shirt, pants );
- rwmMySQL.releaseWriteLock( );
- }
- if( job == 2 )// Mage
- {
- rwmMySQL.acquireWriteLock( );
- DoSQL( "INSERT INTO characters (owner,slot,name,gender,job,hair,eyes,shirt,pants,hp,mp,maxhp,maxmp,str,dex,intellect,luck,vit,wis ) \
- VALUES (%i,%i,'%s',%i,%i,%i,%i,%i,%i,55,39,55,39,6,6,14,3,16,11 )", thisclient->userid, slot, thisclient->charname, sex, job, hair, eyes, shirt, pants );
- rwmMySQL.releaseWriteLock( );
- }
- if( job == 3 )// Thief
- {
- rwmMySQL.acquireWriteLock( );
- DoSQL( "INSERT INTO characters (owner,slot,name,gender,job,hair,eyes,shirt,pants,hp,mp,maxhp,maxmp,str,dex,intellect,luck,vit,wis ) \
- VALUES (%i,%i,'%s',%i,%i,%i,%i,%i,%i,68,20,68,20,7,11,5,9,15,6 )", thisclient->userid, slot, thisclient->charname, sex, job, hair, eyes, shirt, pants );
- rwmMySQL.releaseWriteLock( );
- }
- if( job == 4 )// Scout
- {
- rwmMySQL.acquireWriteLock( );
- DoSQL( "INSERT INTO characters (owner,slot,name,gender,job,hair,eyes,shirt,pants,hp,mp,maxhp,maxmp,str,dex,intellect,luck,vit,wis ) \
- VALUES (%i,%i,'%s',%i,%i,%i,%i,%i,%i,68,24,68,24,6,13,8,5,8,7 )", thisclient->userid, slot, thisclient->charname, sex, job, hair, eyes, shirt, pants );
- rwmMySQL.releaseWriteLock( );
- }
- pakSendCharCreate( thisclient, pak );
- }
- void CLoginServer::pakSendCharCreate( CLoginClient* thisclient, CPacket* pak )
- {
- MYSQL_RES* result;
- MYSQL_ROW row;
- rwmMySQL.acquireWriteLock( );
- DoSQL( "SELECT owner,slot,name,job,gender,level,str,dex,intellect,vit,luck,wis,hp,maxhp,mp,maxmp,shirt,pants,hair,eyes FROM characters WHERE owner=%i ", thisclient->userid );
- rwmMySQL.releaseWriteLock( );
- result = mysql_store_result( mysql );
- if( mysql_num_rows( result ) <= 0 )
- {
- // some sort of selecting the charc not to sure.....
- Log( MSG_WARNING, "[Username: %s] is hacking charc send list", thisclient->username );
- DisconnectClient( thisclient );
- return;
- }
- row = mysql_fetch_row(result);
- CPacket pakout;
- pakout.StartPacket( 141 );
- pakout.AddWord( LOGIN_CHARC_CREATE );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( OK );
- pakout.AddByte( atoi( row[1] ) ); //slot
- pakout.AddByte( 0 ); //??
- pakout.AddByte( 0 ); //??
- pakout.AddByte( 0 ); //??
- pakout.AddString( row[2] ); // charname
- for(unsigned c=0; c<20-(unsigned)strlen(row[2]); c++)
- pakout.AddByte( 0 );
- pakout.AddByte( atoi( row[3] ) ); // job1
- pakout.AddByte( 0 );// job2
- pakout.AddByte( 0 );// job3
- pakout.AddByte( 0 );// job4
- pakout.AddByte( atoi( row[4] ) ); // ?? 1 or 2 gender mabye
- pakout.AddWord( atoi( row[5] ) ); // lvl
- pakout.AddByte( 0 ); // exp
- pakout.AddWord( atoi( row[6] ) ); // str
- pakout.AddWord( atoi( row[7] ) ); // dex
- pakout.AddWord( atoi( row[8] ) ); // int
- pakout.AddWord( atoi( row[9] ) ); // vit
- pakout.AddWord( atoi( row[10] ) ); // luck
- pakout.AddWord( atoi( row[11] ) ); // wis
- pakout.AddWord( atoi( row[12] ) ); // hp
- pakout.AddWord( atoi( row[13] ) ); // maxhp
- pakout.AddWord( atoi( row[14] ) ); // mp
- pakout.AddWord( atoi( row[15] ) ); // maxmp
- pakout.AddByte( 0 ); // ??
- pakout.AddByte( 0 ); // ??
- pakout.AddByte( 0 ); // ??
- pakout.AddByte( 0 ); // ??
- pakout.AddByte( atoi( row[16] ) ); //?? 33 32 34 - shirt
- pakout.AddByte( 0 ); // ??
- pakout.AddByte( 0xDA ); // weapon ID 43 item id 218
- pakout.AddByte( 0 ); //??
- pakout.AddWord( 0 );
- pakout.AddByte( atoi( row[17] ) ); //?? 3b 3c - paints
- for( int i=0; i<13; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( atoi( row[18] ) ); //?? 0e 0f 10 - hair mabye
- pakout.AddByte( 0 ); //??
- pakout.AddByte( atoi( row[19] ) ); //?? 28 27 26 - eyes
- for( int i=0; i<53; i++ )
- pakout.AddByte( 0x00 );
- SendPacket( thisclient, &pakout );
- //34 00 2B 01 00 00 37 00 00 00 00 00 00 00 00 00
- //00 00 00 00 16 00 2E 00 00 00 00 00 00 00 00 00
- //00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
- //00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
- //00 00 00 00 00 00 00 00 00 00 00 00
- }
- void CLoginServer::pakSendInGame( CLoginClient* thisclient, CPacket* pak )
- {
- pak->GetString_x( 7 , thisclient->ingamecharname, 20);
- Log( MSG_INFO, "Charname: %s is entering game ", thisclient->ingamecharname );
- MYSQL_RES* result;
- MYSQL_RES* result2;
- MYSQL_ROW row2;
- rwmMySQL.acquireWriteLock( );
- DoSQL( "SELECT name FROM characters WHERE name='%s'", thisclient->ingamecharname );
- rwmMySQL.releaseWriteLock( );
- result = mysql_store_result( mysql );
- if( mysql_num_rows( result ) <= 0 )
- {
- // makeing sure the charname exists
- Log( MSG_WARNING, "[Username: %s] is hacking charc send ingame packet", thisclient->username );
- DisconnectClient( thisclient );
- return;
- }
- rwmMySQL.acquireWriteLock( );
- DoSQL( "SELECT password FROM accounts WHERE id=%i", thisclient->userid );
- rwmMySQL.releaseWriteLock( );
- result2 = mysql_store_result( mysql );
- if( mysql_num_rows( result2 ) <= 0 )
- {
- // makeing sure the charname exists
- Log( MSG_WARNING, "[Username: %s] is hacking or unable to find password", thisclient->username );
- DisconnectClient( thisclient );
- return;
- }
- row2 = mysql_fetch_row(result2);
- CPacket pakout;
- pakout.StartPacket( 42 );
- pakout.AddWord( LOGIN_CHARC_SELECT );
- for( int i=0; i<4; i++ )
- pakout.AddByte( 0 );
- pakout.AddByte( OK );
- pakout.AddString( row2[0] ); // password
- for(unsigned c=0; c<32-(unsigned)strlen(row2[0]); c++)
- pakout.AddByte( 0 );
- pakout.AddByte( 0 );
- SendPacket( thisclient, &pakout );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement