Exemplo n.º 1
0
// Create a character
bool CCharServer::pakCreateChar( CCharClient* thisclient, CPacket* P )
{
	if (!thisclient->isLoggedIn) return false;

	// Get info from packet
	BYTE sex   = GETBYTE((*P), 0 ) % 2;
	BYTE hairstyle  = GETBYTE((*P), 2 );
	BYTE face  = GETBYTE((*P), 3 );
	string newname = (char*)&P->Buffer[7];
	MYSQL_RES *result;
	result = DB->QStore("SELECT id FROM characters WHERE account_name='%s'", thisclient->username);
	if(result==NULL) return false;
	if ( mysql_num_rows( result ) == 5 )
    {
        BEGINPACKET( pak, 0x713 );
        ADDWORD    ( pak, 4 );
		thisclient->SendPacket( &pak );
		DB->QFree( );
		return true;
	}
	DB->QFree( );

	//LMA: checking name validity.
    if(!CheckValidName(thisclient, newname.c_str()))
    {
        BEGINPACKET( pak, 0x713);
		ADDWORD    ( pak, 2 );
		thisclient->SendPacket( &pak );
		return true;
    }

	result = DB->QStore("SELECT id FROM characters WHERE char_name='%s'", newname.c_str());
    if(result==NULL) return false;
	if ( mysql_num_rows( result ) > 0 )
    {
		BEGINPACKET( pak, 0x713);
		ADDWORD    ( pak, 2 );
		thisclient->SendPacket( &pak );
		DB->QFree( );
		return true;
	}
	DB->QFree( );

	if(!DB->QExecute("INSERT INTO characters (account_name, char_name, face, hairStyle, sex) VALUES('%s','%s',%i,%i,%i)", thisclient->username, newname.c_str(), face, hairstyle, sex))
	   return false;
	unsigned int mid = (unsigned)mysql_insert_id( DB->Mysql );
    MYSQL_ROW row;
	if(!DB->QExecute("INSERT INTO items VALUES(%i,29,3,0,40,100,3,1,0,0,0,0,0)", mid))
		return false;
	if(!DB->QExecute("INSERT INTO items VALUES(%i,29,5,0,40,100,6,1,0,0,0,0,0)", mid))
		return false;
	if(!DB->QExecute("INSERT INTO items VALUES(%i,1,8,0,40,100,7,1,0,0,0,0,0)", mid))
		return false;

    if(sex==0)
    {
        if(!DB->QExecute("INSERT INTO items VALUES(%i,222,2,0,40,100,12,1,0,0,0,0,0)", mid))
            return false;
     }
    else
    {
        if(!DB->QExecute("INSERT INTO items VALUES(%i,221,2,0,40,100,12,1,0,0,0,0,0)", mid))
            return false;
    }

	BEGINPACKET( pak, 0x713 );
	ADDWORD    ( pak,  0 );
	thisclient->SendPacket( &pak );

	return true;
}
Exemplo n.º 2
0
// Create a new clan
bool CWorldServer::pakCreateClan ( CPlayer* thisclient, CPacket* P )
{
    if(thisclient->CharInfo->Zulies < 1000000)
        return true;

    thisclient->CharInfo->Zulies -= 1000000;
	//MYSQL_ROW row;
    int background = GETWORD((*P),1);
    int icon = GETWORD((*P),3);
    char*name=(char*)&P->Buffer[5];
    char*slogan=(char*)&P->Buffer[strlen(name)+6];

    //LMA: Check if name already exists and is short enough.
    if(!CheckValidName(thisclient,name))
    {
        return true;
    }

    //LMA: Checking if it needs to be escaped.
    if(!CheckEscapeMySQL(name,50,true))
    {
        return true;
    }

    //LMA: checking if the name is ok.
	MYSQL_RES *result = DB->QStore("SELECT name FROM list_clan WHERE name='%s'", name);
    if(result==NULL) return true;
	if ( mysql_num_rows( result ) > 0 )
    {
        BEGINPACKET( pak, 0x07e0 );
	    ADDWORD    ( pak, 0x42 );
		thisclient->client->SendPacket( &pak );
		DB->QFree( );
		return true;
	}
    DB->QFree( );

    //Check if user can create a clan
    if( thisclient->Clan->clanid != 0 )
    {
        BEGINPACKET( pak, 0x7e0 );
	    ADDWORD    ( pak, 0x44 );
		thisclient->client->SendPacket( &pak );
		return true;
	}

    char * lma_slogan = new char[strlen(slogan) + 1];
	strcpy(lma_slogan,slogan);
	char * new_slogan = new char[strlen(lma_slogan)*3 +1];
	mysql_real_escape_string(DB->Mysql, new_slogan,lma_slogan,strlen(lma_slogan));
	//mysql_real_escape_string(DB->Mysql, new_slogan,"abcdefghijk",11);
    Log(MSG_INFO,"[WS] New clan %s created, slogan detected=%s, cleaned=%s ",name,slogan,new_slogan);

    //LMA: checking slogan's size.
    if(strlen(new_slogan)>=100)
    {
        Log(MSG_HACK,"%s tried to create clan %s with too long slogan %s (%i>=100)",thisclient->CharInfo->charname,name,new_slogan,strlen(new_slogan));
        return true;
    }

    DB->QExecute( "INSERT into list_clan (logo,back,name,cp,grade,slogan,news) values (%i,%i,'%s',0,1,'%s','')",icon,background,name,new_slogan);
	thisclient->Clan->clanid = mysql_insert_id(DB->Mysql);
	thisclient->Clan->clanrank = 6;
    thisclient->Clan->logo = icon;
    thisclient->Clan->back = background;
    strncpy(thisclient->Clan->clanname,name,16);
    thisclient->Clan->grade = 1;

    //Update user clan information
    DB->QExecute( "UPDATE characters set clanid=%i,clan_rank=6 where id=%i",
                                    thisclient->Clan->clanid,thisclient->CharInfo->charid);
    //load clan info in char server
	BEGINPACKET( pak, 0x7e0 );
	ADDBYTE    ( pak, 0xfa ); //action to update clan informacion (charserver)
	ADDWORD    ( pak, thisclient->Clan->clanid );
	//ADDWORD    ( pak, thisclient->CharInfo->charid );
	ADDDWORD    ( pak, thisclient->CharInfo->charid );
	ADDWORD    ( pak, thisclient->clientid );
	cryptPacket( (char*)&pak, cct );
	send( csock, (char*)&pak, pak.Size, 0 );

    //Send to other players
    RESETPACKET( pak, 0x7e0 );
    ADDBYTE    ( pak, 0x35 );
    ADDWORD    ( pak, thisclient->clientid );
    ADDDWORD    ( pak, thisclient->Clan->clanid );//clanid
    ADDWORD    ( pak, thisclient->Clan->back );
    ADDWORD    ( pak, thisclient->Clan->logo );
    ADDBYTE    ( pak, thisclient->Clan->grade );//clan grade
    ADDBYTE    ( pak, thisclient->Clan->clanrank );//clan rank
    ADDSTRING  ( pak, thisclient->Clan->clanname );
    ADDBYTE    ( pak, 0x00 );
    SendToVisible( &pak, thisclient );

    delete[] lma_slogan;
	delete[] new_slogan;

    return true;
}