Jump to content
Notícia
  • Adquira já o seu VIP!

qqshutup

Membro
  • Content Count

    18
  • Joined

  • Last visited

  • WCoins

    360 [ Donate ]

Community Reputation

19

1 Follower

About qqshutup

  • Rank
    WebCheats

Recent Profile Visitors

172 profile views
  1. Sim, assim como consigo escrever funções para fazer por exemplo spam de chat: m eChatSate { eChat_All = 0x0, eChat_Team = 0x1, eChat_Clan = 0x2, eNum_ChatState = 0x3, }; // --- send->write_uint8( 104 ) //std::uint8_t send->write_bool( eChat_Team ) //bool send->write_w_string( L"Mensagem" ) //const wchar_t * Também consegui fazer um force vote kick, consigo kikar em exército solo, do outro time em qualquer modo, exceto sala com moderador, mas acredito que a verificacao seja client-side, pois vi um video de um arabe ou russo kikando um elite e com a segunda patente do jogo (R)... // FORCE KICK PLAYER BY INDEX // CHUDXMLVoteReq::SendKickInfo send->write_uint8( 182 ); // MID_VOTE ? send->write_uint8( 2 ); // Absolut send->write_uint32( ID ); //CLIENT_INFO::CAM_INFO_MGR::ID send->write_uint8( REASON ); // Reason for kick // CHUDXMLVote::SendVoteResult send->write_uint8( 182 ); // MID_VOTE ? send->write_uint8( 4 ); // Absolut send->write_bool( VOTE ); // Yes/No // CHUDXMLVote::OnMessage // SetKickedUser send->write_uint8( 182 ); // MID_VOTE ? send->write_uint8( 8 ); // Absolut Aqui tem alguns IDS que eu peguei com o logger, o nomes das funcoes eu hardcodei, nem todos IDS aparecem ai, muitos estao em funcoes da cshell mas nao sao chamados. write_uint8( 100 ) //std::uint8_t | FROM: CCBAPlayerMgr::UpdatePlayerInfo write_uint32( 16 ) //std::uint32_t write_uint8( 1 ) //std::uint8_t [?] read: 267B6A94 --------------------------------------------- write_uint8( 100 ) //std::uint8_t | FROM: CCBAPlayerMgr::UpdatePlayerInfo write_uint32( 21793 ) //std::uint32_t write_uint32( 307875 ) //std::uint32_t write_uint32( 308026 ) //std::uint32_t write_uint32( 0 ) //std::uint32_t write_uint8( 229 ) //std::uint8_t write_uint8( 0 ) //std::uint8_t write_uint8( 0 ) //std::uint8_t write_uint8( 33 ) //std::uint8_t write_comp_ltrotation( 0, -0.333806, 0, 0.942642 ) //LTRotation& write_ltvector( -760, -3150.9, -669 ) //LTVector& write_bits( 0, 24 ) //std::uint32_t, std::uint32_t write_uint8( 31 ) //std::uint8_t write_uint8( 2 ) //std::uint8_t write_ltvector( -760, -3183.9, -669 ) //LTVector& write_character_velocity( 0, 0, 0 ) //LTVector& write_float( -1100 ) //float write_uint8( 0 ) //std::uint8_t write_uint8( 0 ) //std::uint8_t [?] read: 267B6A94 --------------------------------------------- write_uint8( 104 ) //std::uint8_t | FROM: CHUDXMLChat::Send write_bool( false ) //bool write_w_string( a ) //const wchar_t * [?] read: 267B6A94 --------------------------------------------- write_uint8( 114 ) //std::uint8_t | FROM: ClientConnectionMgr::InitMultiPlayer write_uint32( 5 ) //std::uint32_t write_uint32( 11755531 ) //std::uint32_t write_uint16( 4260 ) //std::uint16_t write_uint32( 29797 ) //std::uint32_t write_float( 2.02336 ) //float write_float( 250 ) //float write_int8( 0 ) //std::int8_t write_int16( 43 ) //std::int16_t write_int16( 0 ) //std::int16_t write_int8( 2 ) //std::int8_t write_int8( 0 ) //std::int8_t write_int8( 1 ) //std::int8_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_bool( true ) //bool write_int8( 1 ) //std::int8_t write_int8( 0 ) //std::int8_t write_int8( -1 ) //std::int8_t write_string( ) //const char * write_string( ) //const char * write_int16( -1 ) //std::int16_t write_int16( 233 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int8( -1 ) //std::int8_t write_int8( 0 ) //std::int8_t write_int8( -1 ) //std::int8_t write_int8( -1 ) //std::int8_t write_int16( -1 ) //std::int16_t write_int8( 0 ) //std::int8_t write_int16( 0 ) //std::int16_t write_int16( 43 ) //std::int16_t write_uint32( 0 ) //std::uint32_t write_int8( 1 ) //std::int8_t write_int16( -1 ) //std::int16_t write_int16( 233 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_float( 700 ) //float write_uint32( 84442 ) //std::uint32_t write_uint8( 8 ) //std::uint8_t write_uint16( 1126 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 48 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 83 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 28 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_bool( false ) //bool write_uint32( 0 ) //std::uint32_t write_uint32( 0 ) //std::uint32_t write_bool( false ) //bool write_bool( false ) //bool write_bool( false ) //bool write_bool( false ) //bool write_int32( 1 ) //std::int32_t write_int32( 0 ) //std::int32_t write_int32( 0 ) //std::int32_t write_int32( -1 ) //std::int32_t write_int32( -1 ) //std::int32_t write_int32( 0 ) //std::int32_t [?] read: 267B6A4C --------------------------------------------- write_uint8( 118 ) //std::uint8_t | FROM: CMoveMgr::UpdateOnGround or CClientWeapon::Select write_uint8( 3 ) //std::uint8_t write_uint8( 2 ) //std::uint8_t [?] read: 267B6A4C --------------------------------------------- write_uint8( 127 ) //std::uint8_t | FROM: CPlayerMgr::HandleWeaponChanged write_uint8( 0 ) //std::uint8_t write_uint16( 1126 ) //std::uint16_t write_uint16( 181 ) //std::uint16_t [?] read: 267B6A4C --------------------------------------------- write_uint8( 130 ) //std::uint8_t | FROM: CCBAClientWeapon::SendWeaponFireMessages write_uint8( 1 ) //std::uint8_t write_uint16( 28 ) //std::uint16_t write_uint16( 28 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_ltvector( -297.509, -1920.51, 69.4295 ) //LTVector& write_ltvector( -302.663, -1916.9, 75.5266 ) //LTVector& write_ltrotation( 0.00566189, 0.884026, -0.0107115, 0.46728 ) //LTRotation& write_float( -4.11735 ) //float write_bool( false ) //bool write_bool( false ) //bool write_bool( false ) //bool write_uint8( 0 ) //std::uint8_t write_float( 1 ) //float write_int32( 60347 ) //std::int32_t write_ltvector( 0.826225, -0.0235167, -0.56285 ) //LTVector& write_bool( false ) //bool write_bool( false ) //bool write_bool( false ) //bool write_float( 1 ) //float write_bool( false ) //bool write_bool( false ) //bool [?] read: 26B78EEC --------------------------------------------- write_uint8( 131 ) //std::uint8_t | FROM: CCBAClienWeapon::ReloadClip write_uint16( 28 ) //std::uint16_t [?] read: 26B78EEC --------------------------------------------- write_uint8( 133 ) //std::uint8_t | FROM: CUserProfile::SendPerformanceMsg write_uint8( 2 ) //std::uint8_t write_bool( true ) //bool [?] read: 267B6A4C --------------------------------------------- write_uint8( 135 ) //std::uint8_t | FROM: CGameClientShell::SendClientLoadedMessage [?] read: 267B6A94 --------------------------------------------- write_uint8( 182 ) //std::uint8_t | FROM: CHUDXMLVoteReq::SendKickInfo write_uint8( 2 ) write_uint32( 1 ) write_uint8( 2 ) [?] read: 267B6A94 --------------------------------------------- write_uint8( 189 ) //std::uint8_t | FROM: CCBAInterfaceMgr::GameExit [?] read: 267B6A94 --------------------------------------------- write_uint8( 190 ) //std::uint8_t | FROM: CHUDXMLRadioMsg::OnCommand write_comp_pos( -760, -3183.9, -669 ) //LTVector& write_uint8( 0 ) //std::uint8_t write_uint8( 0 ) //std::uint8_t write_uint8( 0 ) //std::uint8_t write_bool( false ) //bool write_uint8( 0 ) //std::uint8_t [?] read: 267B6A94 --------------------------------------------- write_uint8( 202 ) //std::uint8_t | FROM: CMoveMgr::SendDashInfo write_bits( 0, 1 ) //std::uint32_t, std::uint32_t write_bits( 1, 1 ) //std::uint32_t, std::uint32_t [?] read: 267B6A94 --------------------------------------------- write_uint8( 219 ) //std::uint8_t | FROM: CHUDXMLRespawnToken::OnConfirmToUse write_uint8( 0 ) //std::uint8_t write_uint8( 5 ) //std::uint8_t write_uint32( 1 ) //std::uint32_t write_uint32( 21 ) //std::uint32_t [?] read: 26B78EEC
  2. Sobre o ID 130 Você pode enviar minas, granadas, explosivos.. tudo que é definido como projectiles no array da classe SFXMgr, em qualquer jogador a qualquer distância, mas não funcionará com FACA, PISTOLA, ARMAS COMUNS, no tiros que você der... eu até consegui fazer Weapon Range ( não funciona mais alterar o Range no loop de todas as armas igual antigamente, isso funciona no CA Reloaded e no CA Classic se não me engano, nas não no CABR ) com a função do tiro, mas preciso entender o funcionamento ainda. Também tem como fazer One Hit Kill utilizando a função do Tiro: Sobre o ID 100 Bom, existem algumas coisas que você pode fazer com o ID MID_PLAYER_UPDATE ( 100 ), que vem da função CCBAPlayerMgr::UpdatePlayerInfo... Tem como enviar outro yaw, rotação, pitch, twist yaw, posição do jogador, velocidade, gravidade etc.. Fiz um "anti-aim.. aka spinbot" como exemplo: Ficar sempre agachado para todos.. quando o player agacha, o cliente envia a informação para o servidor, você pode ficar alternando isso e burlar toda a verificação do SPAM de CTRL, para isso seria necessário enviar um write_uint8 quando ele não deveria ir... if( uc_flags & 0x10 ) { crouch_rate = read->read_uint8(); send->write_uint8( crouch_rate ); } Sobre Super Bullets No Combat Arms Reloaded a função ainda existe e permite que o super bullets funcione.. CShell.dll+1ADF20 - 55 - push ebp //Hook this function and return true CShell.dll+1ADF21 - 8B EC - mov ebp,esp CShell.dll+1ADF23 - FF 75 0C - push [ebp+0C] CShell.dll+1ADF26 - FF 75 08 - push [ebp+08] CShell.dll+1ADF29 - E8 32A7FBFF - call CShell.dll+168660 //CSurfaceMgr::GetSurface CShell.dll+1ADF2E - 8B 0D 484BBE37 - mov ecx,[CShell.dll+AE4B48] //CSurfaceMgr CShell.dll+1ADF34 - 83 C4 08 - add esp,08 { 8 } CShell.dll+1ADF37 - 50 - push eax CShell.dll+1ADF38 - E8 A3CFFBFF - call CShell.dll+16AEE0 //CSurfaceMgr::IsInvisible CShell.dll+1ADF3D - 84 C0 - test al,al CShell.dll+1ADF3F - 0F94 C0 - sete al CShell.dll+1ADF42 - 5D - pop ebp CShell.dll+1ADF43 - C3 - ret Essa mesma função não existe na versão BR ou CLASSIC pelo que vi, o máximo que eu cheguei a fazer é super bullets em caixas e paredes de madeira, a death room tem um bug nessa parede central ( tanto que a intersect segment retorna como visivel se você não filtrar as entidades ), e no caso o super bullets funciona. Sobre o logger E no caso eu tenho a classe CLTMessage_Write_Client inteira, então não faço uso da CAutoMessage que é desatualizada, ela não contém funções como write_character_velocity.. Se olhar no IDA a versão mais derivada é CLTMessage_Write_Client, e não CLTMessage_Write igual todos utilizam por ai. E como eu fiz um logger que recupera perfeitamente as chamadas, fica muito fácil reverter qualquer ID. O logger pega a estrutura inteira, como por exemplo do ID 114 ( ClientConnectionMgr::InitMultiPlayer ), dessa maneira tem como fazer spoofer para muita coisa, como plaquinha, personagem, equipamento, arma etc.. sem escrever na classe da CharInfo e na CharModelInfoMgr por exemplo.. write_uint8( 114 ) //std::uint8_t | FROM: ClientConnectionMgr::InitMultiPlayer write_uint32( 5 ) //std::uint32_t write_uint32( 11755531 ) //std::uint32_t write_uint16( 4260 ) //std::uint16_t write_uint32( 29797 ) //std::uint32_t write_float( 2.02336 ) //float write_float( 250 ) //float write_int8( 0 ) //std::int8_t write_int16( 43 ) //std::int16_t write_int16( 0 ) //std::int16_t write_int8( 2 ) //std::int8_t write_int8( 0 ) //std::int8_t write_int8( 1 ) //std::int8_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_bool( true ) //bool write_int8( 1 ) //std::int8_t write_int8( 0 ) //std::int8_t write_int8( -1 ) //std::int8_t write_string( ) //const char * write_string( ) //const char * write_int16( -1 ) //std::int16_t write_int16( 233 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int8( -1 ) //std::int8_t write_int8( 0 ) //std::int8_t write_int8( -1 ) //std::int8_t write_int8( -1 ) //std::int8_t write_int16( -1 ) //std::int16_t write_int8( 0 ) //std::int8_t write_int16( 0 ) //std::int16_t write_int16( 43 ) //std::int16_t write_uint32( 0 ) //std::uint32_t write_int8( 1 ) //std::int8_t write_int16( -1 ) //std::int16_t write_int16( 233 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_int16( -1 ) //std::int16_t write_float( 700 ) //float write_uint32( 84442 ) //std::uint32_t write_uint8( 8 ) //std::uint8_t write_uint16( 1126 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 48 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 83 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 28 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_uint16( 65535 ) //std::uint16_t write_bool( false ) //bool write_uint32( 0 ) //std::uint32_t write_uint32( 0 ) //std::uint32_t write_bool( false ) //bool write_bool( false ) //bool write_bool( false ) //bool write_bool( false ) //bool write_int32( 1 ) //std::int32_t write_int32( 0 ) //std::int32_t write_int32( 0 ) //std::int32_t write_int32( -1 ) //std::int32_t write_int32( -1 ) //std::int32_t write_int32( 0 ) //std::int32_t
  3. Alguns dias atrás eu reverti utilizando meu logger para a send to server o ID 130 que vem da função CCBAClientWeapon::SendWeaponFireMessages que é chamada pela função CCBAClientWeapon::Fire Se você alterar o model_node para 8 ( Head ) você poderá fazer always headshot, vai poder atirar em qualquer parte da hitbox do jogador e dar HS ( pode não funcionar com females, por algum motivo estranho... você vai matar de HS mas não será em um tiro ). auto read{ msg->clone() }; const auto message_id{ msg->read_uint8() }; if( message_id == 130 ) { clt_message_write_client *send{}; // this = CCBAClientWeapon std::uint8_t dummy_0{}; // absolut std::uint16_t weapon_id{}; // this->m_weapon_id std::uint16_t ammo_id{}; // this->m_ammo->id std::uint16_t weapon_id2{}; // unused ( 0xFFFF ), mod_item::id LTVector flash_pos{}; // this->m_flash_pos LTVector fire_pos{}; // (param)fire_pos LTRotation object_rot{}; // (param)camera_rot float yaw{}; // player_mgr->m_yaw bool zooming{}; // player_mgr->m_zoomview || player_mgr->m_zooming bool triple_shot_mode{}; // this->is_triple_shot_mode() bool last_fire_type{}; // this->m_last_fire_type != FT_NORMAL_FIRE std::uint8_t perturb{}; // (param)perturb * 255 ( 0.f ~ 1.f to uint8_t ) float dynamic_perturb_factor{}; // this->m_dynamic_perturb_factor std::uint32_t dynamic_perturb_factor_x{}; // this->dynamic_perturb_factor * 1000 LTVector vectors_per_round{}; // this->m_fire_path_for_multiple_vectos_per_round_bug or (param)direction bool hit_player{}; // this->m_hit_player void *victim{}; // this->m_victim std::uint32_t model_node{}; // this->m_model_node LTVector object_center{}; // lt_client->get_object_pos( this->m_victim, &object_center ); float impact_distance{}; // this->m_impact_distance std::uint32_t dummy_1{}; // ? std::uint32_t object_generation{}; // lt_client->get_object_generation( this->victim, &object_generation ); bool impact_point_narrow{}; // this->m_impact_point_narrow GameObjectClientPointOfViewData point_of_view_data{}; // lt_client->get_game_object_interpolated_data( this->m_victim, &point_of_view_data ) bool weapon_fire_debug{}; // g_client_weapon_fire_debug.m_init && g_client_weapon_fire_debug.m_val >= 1.0 std::uint32_t view_time_ms{}; // point_of_view_data.ViewTimeMS std::uint32_t previous_discrete_sequence_no{}; // point_of_view_data.PreviousDiscreteSequenceNo std::uint32_t discrete_sequence_no{}; // point_of_view_data.DiscreteSequenceNo std::uint32_t previous_from_sequence_no{}; // point_of_view_data.PreviousFromSequenceNo std::uint32_t from_sequence_no{}; // point_of_view_data.FromSequenceNo std::uint32_t to_sequence_no{}; // point_of_view_data.ToSequenceNo bool hit_me{}; // this->m_hit_me bool object{}; // (param)object != 0 float throw_fire_force{}; // CClientPerkSkill::GetThrowFireForce() bool is_dual_left_fire{}; // this->m_is_dual_left_fire bool write_debug{}; // !CPlayerMgr::IsFirstPerson() || ( bWriteDebug = 0, g_pPlayerMgr->m_bUsingExternalCamera ) dummy_0 = read->read_uint8(); weapon_id = read->read_uint16(); ammo_id = read->read_uint16(); weapon_id2 = read->read_uint16(); flash_pos = read->read_ltvector(); fire_pos = read->read_ltvector(); object_rot = read->read_ltrotation(); yaw = read->read_float(); zooming = read->read_bool(); triple_shot_mode = read->read_bool(); last_fire_type = read->read_bool(); perturb = read->read_uint8(); dynamic_perturb_factor = read->read_float(); dynamic_perturb_factor_x = read->read_uint32(); vectors_per_round = read->read_ltvector(); hit_player = read->read_bool(); send->write_uint8 ( message_id ); send->write_uint8 ( dummy_0 ); send->write_uint16 ( weapon_id ); send->write_uint16 ( ammo_id ); send->write_uint16 ( weapon_id2 ); send->write_ltvector ( flash_pos ); send->write_ltvector ( fire_pos ); send->write_ltrotation ( object_rot ); send->write_float ( yaw ); send->write_bool ( zooming ); send->write_bool ( triple_shot_mode ); send->write_bool ( last_fire_type ); send->write_uint8 ( perturb ); send->write_float ( dynamic_perturb_factor ); send->write_uint32 ( dynamic_perturb_factor_x ); send->write_ltvector ( vectors_per_round ); send->write_bool ( hit_player ); if ( hit_player ) { victim = read->read_object(); model_node = read->read_uint8(); send->write_object( victim ); send->write_uint8 ( model_node ); const auto g_use_fire_packet_impact_distance_client{ true }; if ( g_use_fire_packet_impact_distance_client ) // g_use_fire_packet_impact_distance_client == true { object_center = read->read_ltvector(); impact_distance = read->read_float(); dummy_1 = read->read_bits( 3 ); send->write_ltvector( object_center ); send->write_float ( impact_distance ); send->write_bits ( dummy_1, 3 ); if ( !dummy_1 ) //dummy1 != 0 { // unused // const auto b_normal_x{ read->read_bool() }; // this->m_normal_x != 0.f send->write_bool( b_normal_x ); if ( b_normal_x ) { const auto normal_x{ read->read_float() }; // this->m_normal_x send->write_float( normal_x ); } const auto b_normal_y{ read->read_bool() }; // this->m_normal_y != 0.f send->write_bool( b_normal_y); if( b_normal_y ) { const auto normal_y{ read->read_float() }; // this->m_normal_y send->write_float( normal_y ); } const auto b_normal_z{ read->read_bool() }; // this->m_normal_z != 0.f send->write_bool( b_normal_z ); if( b_normal_z ) { const auto normal_z{ read->read_float() }; // this->m_normal_z send->write_float( normal_z ); } } } else { // unused // const auto impact_point{ read->read_ltvector() }; // this->m_impact_point const auto normal { read->read_ltvector() }; // this->normal send->write_ltvector( impact_point ); send->write_ltvector( normal ); } const auto g_use_legacy_unguranted_update_packet_clientg{ false }; if ( !g_use_legacy_unguranted_update_packet_clientg ) // g_use_legacy_unguranted_update_packet_clientg == false { object_generation = read->read_uint32(); impact_point_narrow = read->read_bool(); send->write_uint32( object_generation ); send->write_bool ( impact_point_narrow ); const auto g_use_client_side_extrapolation_client{ false }; if ( g_use_client_side_extrapolation_client ) // g_use_client_side_extrapolation_client == false { // unused // const auto dummy_2{ read->read_uint32() }; const auto yaw{ read->read_uint32() }; send->write_uint32( dummy_2 ); send->write_uint32( yaw ); } else { // lt_client->get_game_object_interpolated_data( this->victim, &point_of_view_data ) // weapon_fire_debug = read->read_bool(); send->write_bool( weapon_fire_debug ); if ( weapon_fire_debug ) // weapon == false { // unused // const auto dims { read->read_ltvector() }; // local var const auto view_data{ read->read_ltvector() }; // local var const auto center { read->read_ltvector() }; // local var read->read_data ( &point_of_view_data, 0x600 ); // data send->write_ltvector( dims ); send->write_ltvector( view_data ); send->write_ltvector( center ); send->write_data ( &point_of_view_data, 0x600 ); } else { view_time_ms = read->read_uint32(); previous_discrete_sequence_no = read->read_uint32(); discrete_sequence_no = read->read_uint32(); previous_from_sequence_no = read->read_uint32(); from_sequence_no = read->read_uint32(); to_sequence_no = read->read_uint32(); send->write_uint32( view_time_ms ); send->write_uint32( previous_discrete_sequence_no ); send->write_uint32( discrete_sequence_no ); send->write_uint32( previous_from_sequence_no ); send->write_uint32( from_sequence_no ); send->write_uint32( to_sequence_no ); } } } } hit_me = read->read_bool(); object = read->read_bool(); send->write_bool( hit_me ); send->write_bool( object ); // unused // //if ( object && !hit_player ) // object == true if the fire is on a player //{ // /* // result.x = (param)impact_pos->x - (param)fire_pos->x; // result.y = (param)impact_pos->y - (param)fire_pos->y; // result.z = (param)impact_pos->z - (param)fire_pos->z; // // angle = (param)direction.x * result.x + (param)direction.y * result.y + (param)direction.z * result.z; // */ // const auto angle{ read->read_float() }; // angle // const auto object{ read->read_object() }; // (param)object // // send->write_float( angle ); // send->write_object( object ); //} throw_fire_force = read->read_float(); is_dual_left_fire = read->read_bool(); write_debug = read->read_bool(); send->write_float( throw_fire_force ); send->write_bool ( is_dual_left_fire ); send->write_bool ( write_debug ); return o_send_to_server( send->read(), flags ); } Créditos qqshutup
  4. Não existe necessidade de eu te adicionar, sua dúvida foi respondida. Encerre esse tópico por favor @Hellzing !
  5. Em anos, ninguém descobriu como burlar a verificação de caracteres especiais ao criar a conta ou mudar de nick, mesmo sabendo que era client-side ( o pessoal provava isso bugando com macro ).. Já postei a DLL e aqui vai a função para vocês. //55 8B 6C 24 08 85 ED 75 04 //Função: bool __cdecl `anonymous namespace'::VerifyNameString( const wchar_t *s, bool allow_space, bool allow_hypen, bool allow_dot, bool allow_ru, bool allow_kr ) //Função revertida //Se quiser impedir a verificação de caracteres, faça uma hook e retorne true. bool verify_name_string( const wchar_t *str, bool allow_space, bool allow_hypen, bool allow_dot, bool allow_ru, bool alloow_kr ) { static constexpr auto KEY_a{ 0x61u }; static constexpr auto KEY_z{ 0x7Au }; static constexpr auto KEY_A{ 0x41u }; static constexpr auto KEY_Z{ 0x5Au }; static constexpr auto NUM_0{ 0x30u }; static constexpr auto NUM_9{ 0x39u }; static constexpr auto UNLN{ 0x5Fu }; static constexpr auto HYPEN{ 0x2Du }; static constexpr auto DOT{ 0x2Eu }; static constexpr auto HANGUL_START{ 0xAC00u }; static constexpr auto HANGUL_END{ 0xD7A3u }; static constexpr auto RUSSIAN{ 0x401 }; static constexpr auto KOMI{ 0x501 }; static constexpr auto RUSSIAN_A{ 0x410 }; static constexpr auto SPACE{ 0x20 }; if ( !str ) return false; const auto len{ wcslen( str ) }; if ( ( len - 1u ) > 0x3Eu ) return false; auto chr_space{ 0x20 }; for ( auto idx{ 0 }; idx < len; ++idx ) { const auto chr{ str[ idx ] }; if ( ( chr < KEY_a || chr > KEY_z ) && ( chr < KEY_A || chr > KEY_Z ) && ( chr < NUM_0 || chr > NUM_9 ) && ( chr != UNLN ) && ( !allow_hypen || chr != HYPEN ) && ( !allow_dot || chr != DOT ) && ( !alloow_kr || chr < HANGUL_START || chr > HANGUL_END ) && ( !allow_ru || chr != RUSSIAN && chr != KOMI && ( chr - RUSSIAN_A ) > 0x3Fu ) && ( !allow_space || chr != SPACE || chr_space == SPACE ) ) { return false; } chr_space = chr; } return str[ len - 1 ] != SPACE; }
  6. Bom, eu não tenho conhecimento no crossfire mas a engine é a mesma do combat arms... Presumindo isso basta procurar por CClientWeaponMgr no IDA. Basta clicar duas vezes na string, ir até a função onde ela está sendo referênciada, entrar no pseudocode da função apertando F5, o primeiro argumento da função é o seu this pointer no caso o ponteiro da classe CClientWeaponMgr você pode por um breakpoint no inicio da função e quando ela for chamada o registro ECX será o endereço que você quer, ou faça uma hook nela.. se você não sabe nenhuma maneira de ambas que mencionei, vá aprender a somar 1 + 1 antes de querer fazer faculdade.
  7. Não irá falhar com zumbis como striker ou crusher. O esqueleto que muitos usam por ai falha, já que são copy & paste de pessoas que escreviam código muito mal. Da para adicionar os dedos da mão, mas fica com você fazer isso. enum MBoneNodes { M_BONE_FACEEYELID, M_BONE_FACEJAW, M_BONE_HEAD, M_BONE_NECK, M_BONE_HEAD01, M_BONE_NECK01, M_BONE_L_SHOULDER, M_BONE_L_UPPERARM, M_BONE_L_LOWERARM, M_BONE_L_HAND, M_BONE_R_SHOULDER, M_BONE_R_UPPERARM, M_BONE_R_LOWERARM, M_BONE_R_HAND, M_BONE_UPPERTORSO, M_BONE_TORSO, M_BONE_R_PELVIS, M_BONE_L_PELVIS, M_BONE_L_UPPERLEG, M_BONE_L_LOWERLEG, M_BONE_L_FOOT, M_BONE_L_TOE0, M_BONE_R_UPPERLEG, M_BONE_R_LOWERLEG, M_BONE_R_FOOT, M_BONE_R_TOE0, MAX }; static constexpr const char *bone_node[] { "Face_Eyelid", "Face_Jaw", "Head", "Neck", "Bip01 Head", "Bip01 Neck", "Left_shoulder", "Left_armu", "Left_arml", "Left_hand", "Right_shoulder", "Right_armu", "Right_arml", "Right_hand", "Upper_Torso", "Torso", "Right_pelvis", "Left_pelvis", "Left_legu", "Left_legl", "Left_foot", "Bip01 L Toe0", "Right_Legu", "Right_legl", "Right_foot", "Bip01 R Toe0" }; void skeleton( model_instance *obj, const ImColor &col ) { static constexpr int nodes[][ 2 ] { //Right leg { M_BONE_R_TOE0, M_BONE_R_FOOT }, { M_BONE_R_FOOT, M_BONE_R_LOWERLEG }, { M_BONE_R_LOWERLEG, M_BONE_R_UPPERLEG }, { M_BONE_R_UPPERLEG, M_BONE_L_PELVIS }, //Left leg { M_BONE_L_TOE0, M_BONE_L_FOOT }, { M_BONE_L_FOOT, M_BONE_L_LOWERLEG }, { M_BONE_L_LOWERLEG, M_BONE_L_UPPERLEG }, { M_BONE_L_UPPERLEG, M_BONE_L_PELVIS }, //Torso { M_BONE_L_PELVIS, M_BONE_R_PELVIS }, { M_BONE_R_PELVIS, M_BONE_TORSO }, { M_BONE_TORSO, M_BONE_UPPERTORSO }, { M_BONE_UPPERTORSO, M_BONE_NECK }, { M_BONE_UPPERTORSO, M_BONE_NECK01 }, //Right arm { M_BONE_NECK01, M_BONE_R_UPPERARM }, //non male, M_BONE_R_SHOULDER not exists... is a bug? { M_BONE_NECK, M_BONE_R_SHOULDER }, { M_BONE_R_SHOULDER, M_BONE_R_UPPERARM }, { M_BONE_R_UPPERARM, M_BONE_R_LOWERARM }, { M_BONE_R_LOWERARM, M_BONE_R_HAND }, //Left arm { M_BONE_NECK01, M_BONE_L_SHOULDER }, //non male, M_BONE_L_SHOULDER exists... { M_BONE_NECK, M_BONE_L_SHOULDER }, { M_BONE_L_SHOULDER, M_BONE_L_UPPERARM }, { M_BONE_L_UPPERARM, M_BONE_L_LOWERARM }, { M_BONE_L_LOWERARM, M_BONE_L_HAND }, //Head { M_BONE_NECK01, M_BONE_HEAD01 }, { M_BONE_NECK, M_BONE_HEAD }, { M_BONE_HEAD, M_BONE_FACEJAW }, { M_BONE_FACEJAW, M_BONE_FACEEYELID } }; for ( const auto &bone : nodes ) { static LTTransform obj_start{}; static LTTransform obj_end{}; static HMODELNODE model_node_start{}; static HMODELNODE model_node_end{}; static LTVector screen_start{}; static LTVector screen_end{}; const auto start_node{ engine_ctx.m_lt_client->get_model_lt()->get_node_c( obj, bone_node[ bone[ 0 ] ], model_node_start ) }; const auto end_node{ engine_ctx.m_lt_client->get_model_lt()->get_node_c( obj, bone_node[ bone[ 1 ] ], model_node_end ) }; if ( start_node == LT_OK && end_node == LT_OK ) { const auto start_transform{ engine_ctx.m_lt_client->get_model_lt()->get_node_transform( obj, model_node_start, &obj_start ) }; const auto end_transform{ engine_ctx.m_lt_client->get_model_lt()->get_node_transform( obj, model_node_end, &obj_end ) }; if ( start_transform == LT_OK && end_transform == LT_OK ) { if ( math::world_to_screen( &obj_start.m_vPos, &screen_start ) && math::world_to_screen( &obj_end.m_vPos, &screen_end ) ) { renderer::line( { screen_start.x, screen_start.y }, { screen_end.x, screen_end.y }, col ); } } } } }
  8. Provavelmente você já viu jogadores com símbolos no nick name, normalmente 1 apenas.. E se você pudesse ter quantos símbolos quisesse? E que tal ter um nick invisível? Testado nas versões Combat Arms Brasil / Combat Arms: The Classic. Pode ser que funcione na versão Reloaded, Latino e Rússia ( eu não testei mas tenho quase certeza que irá funcionar ). Combat Arms Brasil 1 - Abra o jogo normalmente, em seguida abra o Process Hacker ou seu gerenciador de processos que permita obter a linha de comando do executável. 2 - No Process Hacker clique com o botão direito no Engine.exe e vá até Properties e copie toda a linha de comando, conforme a imagem abaixo: 3 - Pode fechar o jogo e vá até a pasta onde ele está instalado, crie um atalho na área de trabalho para o ' Engine.exe ', então clique com o botão direito em cima desse atalho e no campo destino ( algo assim: "..\Combat Arms\Engine.exe" ) após a aspa de 1 espaço e cole a linha de comando que você havia copiado, ficará assim: "..\Combat Arms\Engine.exe" "Engine.exe" -windowtitle "CombatArms" -rez Engine.REZ -rez Game -authip 200.229.60.73 -authport 10001 -pcroom 0 -Ver VER_BR_2005.01 -UserId Lembre-se que o destino antes de ..\Combat Arms\Engine.exe será diferente em cada PC, depende de onde você instalou o jogo. Agora clique em aplicar. 4 - Abra o jogo clicando duas vezes no atalho que você criou e espere chegar ao LOGIN. 5 - Injete a DLL ( Processo: Engine.exe ) com o injetor que você quiser ( recomendo o GitHub - Extreme Injector pois é open-source ), logue em sua conta que você vai colocar caracteres especiais no nome e basta escolher o nick que você quer com os caracteres e criar a conta, ao logar vai levar DC então é só sair e abrir o jogo agora pelo Launcher normal ( não pelo atalho, ele é só para você criar a conta com o nick especial ). Combat Arms: The Classic 1 - Abra seu injetor ( recomendo o GitHub - Extreme Injector pois é open-source ), deixe no processo Engine.exe, selecione a DLL e deixe no modo automático e fechar após injetar. 2 - Abra o Combat Arms: The Classic pelo launcher normalmente, então o injetor vai demorar um pouco para fechar, após isso é só logar, escolher o nick e ao criar a conta e aparecer os servidores FECHE O JOGO e abra novamente sem injetar nada. Baixar/Scan [Hidden Content] VirusTotal Jotti Créditos qqshutup
  9. Se alguma dessas regiões estiver visível ele irá retornar ela. bool is_visible( const LTVector &cam, const LTVector &obj ) { intersect_query query{}; intersect_info info{}; query.m_from = cam; query.m_to = obj; return !engine_ctx.m_lt_client->intersect_segment( &query, &info ); } if ( priorize ) { HMODELNODE model_node{ INVALID_MODEL_NODE }; static constexpr const char *nodes[]{ "Head", "Right_arml", "Left_arml", "Right_foot", "Left_foot" }; for ( const auto &node : nodes ) { if ( engine_ctx.m_lt_client->get_model_lt()->get_node_c( object, node, model_node ) == LT_OK ) { if ( engine_ctx.m_lt_client->get_model_lt()->get_node_transform( object, model_node, &transform ) == LT_OK ) { // local = camera if ( is_visible( local->m_pos, transform.m_vPos ) ) { // LTVector *best_node for aimbot if ( best_node ) *best_node = transform.m_vPos; return true; } } } } } Você pode percorrer todos nodes da entidade, mas não recomendo pois é lento.
  10. Vai desenhar uma box 3d ( inteira branca ) e o esqueleto do jogador ( não é visível através de paredes ). A função que desenha o esqueleto é pesada, vai dropar bastante fps. using fn_draw_model = void( __cdecl * ) ( void * ); //NModelDebug::DrawModelBox fn_draw_model model_box{ reinterpret_cast< fn_draw_model >( 0x00661F70 ) }; //NModelDebug::DrawModelSkeleton fn_draw_model model_skeleton{ reinterpret_cast< fn_draw_model >( 0x00662120 ) }; //---------------------------- //Basta passar o objeto ( model_instance* ) //Na classe client_info é o 0x8, só chamar get_local_client()->obj ( 0x8 vem da classe cam_target_info que vai ser derivada pela client_info, get_local_client() é interna do client_info_mgr que retorna um ponteiro para a classe client_info ) //Na classe character_fx é o 0x10 ( player->server_obj, server_obj vem da classe special_fx que vai ser derivada pela character_fx ) //Depois só adicionar no loop dos personagens model_box( player->server_obj ); model_skeleton( player->server_obj );
  11. A hierarquia das classes está preservada. MAKE_VA_FUNC_PADDING = É um macro que adiciona uma função virtual void abstrata. MAKE_VA_FUNC_PADDING( 0 ) irá expandir para: virtual void function_0() = 0; MAKE_VFUNC_PADDING = É um macro que adiciona uma função virtual void. MAKE_VFUNC_PADDING( 0 ) irá expandir para: virtual void function_0(); class ilt_csbase { public: MAKE_VAFUNC_PADDING( 0 ); // _InterfaceImplementation MAKE_VAFUNC_PADDING( 1 ); // Common MAKE_VAFUNC_PADDING( 2 ); // Physics MAKE_VAFUNC_PADDING( 3 ); // GetTransformLT MAKE_VAFUNC_PADDING( 4 ); // GetModelLT MAKE_VAFUNC_PADDING( 5 ); // SoundMgr MAKE_VAFUNC_PADDING( 6 ); // CPrint MAKE_VAFUNC_PADDING( 7 ); // CPrintW MAKE_VAFUNC_PADDING( 8 ); // GetContainerCode MAKE_VAFUNC_PADDING( 9 ); // GetObjectContainers MAKE_VAFUNC_PADDING( 10 ); // GetContainedObjects MAKE_VAFUNC_PADDING( 11 ); // OpenFile MAKE_VAFUNC_PADDING( 12 ); // CopyFile MAKE_VAFUNC_PADDING( 13 ); // OpenMemoryStream MAKE_VAFUNC_PADDING( 14 ); // GetBlindObjectData MAKE_VAFUNC_PADDING( 15 ); // FreeBlindObjectData MAKE_VAFUNC_PADDING( 16 ); // CopyString MAKE_VAFUNC_PADDING( 17 ); // CreateString MAKE_VAFUNC_PADDING( 18 ); // FreeString MAKE_VAFUNC_PADDING( 19 ); // CompareStrings MAKE_VAFUNC_PADDING( 20 ); // CompareStringsUpper MAKE_VAFUNC_PADDING( 21 ); // GetStringData MAKE_VAFUNC_PADDING( 22 ); // GetVarValueFloat MAKE_VAFUNC_PADDING( 23 ); // GetVarValueVector MAKE_VAFUNC_PADDING( 24 ); // GetVarValueColor MAKE_VFUNC_PADDING( 25 ); // SetVarValueFloat MAKE_VAFUNC_PADDING( 26 ); // GetVarValueString MAKE_VAFUNC_PADDING( 27 ); // GetEngineVar MAKE_VAFUNC_PADDING( 28 ); // GetEngineVarValueInt MAKE_VAFUNC_PADDING( 29 ); // GetEngineVarValueFloat MAKE_VAFUNC_PADDING( 30 ); // GetEngineVarValueString MAKE_VAFUNC_PADDING( 31 ); // GetTime MAKE_VAFUNC_PADDING( 32 ); // GetTimeMS MAKE_VAFUNC_PADDING( 33 ); // GetFrameTime MAKE_VAFUNC_PADDING( 34 ); // GetFrameTimeMS MAKE_VAFUNC_PADDING( 35 ); // GetSourceWorldOffset MAKE_VAFUNC_PADDING( 36 ); // RemoveObject MAKE_VAFUNC_PADDING( 37 ); // GetLightGroupID MAKE_VAFUNC_PADDING( 38 ); // GetOccluderID MAKE_VAFUNC_PADDING( 39 ); // GetTextureEffectVarID MAKE_VAFUNC_PADDING( 40 ); // LinkObjRef MAKE_VAFUNC_PADDING( 41 ); // GetObjectRotation MAKE_VAFUNC_PADDING( 42 ); // GetObjectPos MAKE_VAFUNC_PADDING( 43 ); // GetAnimIndex MAKE_VAFUNC_PADDING( 44 ); // SetModelAnimation MAKE_VAFUNC_PADDING( 45 ); // GetModelAnimation MAKE_VAFUNC_PADDING( 46 ); // SetModelLooping MAKE_VAFUNC_PADDING( 47 ); // GetModelLooping MAKE_VAFUNC_PADDING( 48 ); // ResetModelAnimation MAKE_VAFUNC_PADDING( 49 ); // GetModelPlaybackState MAKE_VAFUNC_PADDING( 50 ); // GetPointContainers MAKE_VAFUNC_PADDING( 51 ); // GetObjectGeneration MAKE_VAFUNC_PADDING( 52 ); // SetObjectPosAndDimsWithoutPhysics MAKE_VAFUNC_PADDING( 53 ); // SetObjectPos MAKE_VAFUNC_PADDING( 54 ); // SetServerPosIgnoreLength MAKE_VAFUNC_PADDING( 55 ); // SetScreenModel MAKE_VAFUNC_PADDING( 56 ); // VideoMgr MAKE_VAFUNC_PADDING( 57 ); // GetDrawPrim MAKE_VAFUNC_PADDING( 58 ); // GetTexInterface MAKE_VAFUNC_PADDING( 59 ); // GetFontManager MAKE_VAFUNC_PADDING( 60 ); // Cursor MAKE_VAFUNC_PADDING( 61 ); // GetBenchmarkMgr MAKE_VAFUNC_PADDING( 62 ); // GetModelPlaybackAnimationState MAKE_VAFUNC_PADDING( 63 ); // GetModelPlaybackAnimationStateName MAKE_VAFUNC_PADDING( 64 ); // GetPointShade MAKE_VAFUNC_PADDING( 65 ); // IsEngine2 MAKE_VAFUNC_PADDING( 66 ); // GetRendererStats MAKE_VAFUNC_PADDING( 67 ); // SetObjectRenderGroup MAKE_VAFUNC_PADDING( 68 ); // SetObjectRenderGroupEnabled MAKE_VAFUNC_PADDING( 69 ); // SetAllObjectRenderGroupEnabled MAKE_VAFUNC_PADDING( 70 ); // AddGlowRenderStyleMapping MAKE_VAFUNC_PADDING( 71 ); // SetGlowDefaultRenderStyle MAKE_VAFUNC_PADDING( 72 ); // SetNoGlowRenderStyle MAKE_VAFUNC_PADDING( 73 ); // AddVertexShader MAKE_VAFUNC_PADDING( 74 ); // RemoveVertexShader MAKE_VAFUNC_PADDING( 75 ); // RemoveAllVertexShaders MAKE_VAFUNC_PADDING( 76 ); // GetVertexShader MAKE_VAFUNC_PADDING( 77 ); // AddPixelShader MAKE_VAFUNC_PADDING( 78 ); // RemovePixelShader MAKE_VAFUNC_PADDING( 79 ); // RemoveAllPixelShaders MAKE_VAFUNC_PADDING( 80 ); // GetPixelShader MAKE_VAFUNC_PADDING( 81 ); // GetSConValueFloat MAKE_VAFUNC_PADDING( 82 ); // GetSConValueString MAKE_VAFUNC_PADDING( 83 ); // GetDeviceObjectName MAKE_VAFUNC_PADDING( 84 ); // GetGlobalLightDir MAKE_VAFUNC_PADDING( 85 ); // SetGlobalLightDir MAKE_VAFUNC_PADDING( 86 ); // GetGlobalLightColor MAKE_VAFUNC_PADDING( 87 ); // SetGlobalLightColor MAKE_VAFUNC_PADDING( 88 ); // GetGlobalLightConvertToAmbient MAKE_VAFUNC_PADDING( 89 ); // SetGlobalLightConvertToAmbient MAKE_VAFUNC_PADDING( 90 ); // SendToServer MAKE_VAFUNC_PADDING( 91 ); // GetServerIPAddress MAKE_VAFUNC_PADDING( 92 ); // ProcessAttachments MAKE_VAFUNC_PADDING( 93 ); // AddParticle MAKE_VAFUNC_PADDING( 94 ); // IsLocalToServer MAKE_VAFUNC_PADDING( 95 ); // GetLightGroupColor MAKE_VAFUNC_PADDING( 96 ); // SetLightGroupColor MAKE_VAFUNC_PADDING( 97 ); // GetOccluderEnabled MAKE_VAFUNC_PADDING( 98 ); // SetOccluderEnabled MAKE_VAFUNC_PADDING( 99 ); // SetTextureEffectVar MAKE_VAFUNC_PADDING( 100 ); // GetSpriteControl MAKE_VAFUNC_PADDING( 101 ); // SetSpriteEffectShaderID MAKE_VAFUNC_PADDING( 102 ); // GetCanvasFn MAKE_VAFUNC_PADDING( 103 ); // SetCanvasFn MAKE_VAFUNC_PADDING( 104 ); // GetCanvasRadius MAKE_VAFUNC_PADDING( 105 ); // SetCanvasRadius MAKE_VAFUNC_PADDING( 106 ); // GetMaxRadiusInPoly MAKE_VAFUNC_PADDING( 107 ); // GetClientFrameCode MAKE_VAFUNC_PADDING( 108 ); // Get_ILanguageLocale MAKE_VAFUNC_PADDING( 109 ); // GetGameObjectInterpolatedData MAKE_VAFUNC_PADDING( 110 ); // CalculateGameObjectInterpolatedData MAKE_VAFUNC_PADDING( 111 ); // CalculateGameObjectOccasionalInterpolatedData MAKE_VAFUNC_PADDING( 112 ); // GetLastReceivedUpdateSequenceNoAndTime MAKE_VAFUNC_PADDING( 113 ); // FirstActiveWorldModelIterator MAKE_VAFUNC_PADDING( 114 ); // NextActiveWorldModelIterator MAKE_VAFUNC_PADDING( 115 ); // GetD3DXLocalPosition }; class ilt_client : public ilt_csbase { public: }; class clt_client : public ilt_client { public: MAKE_VFUNC_PADDING( 0 ); // _InterfaceImplementation MAKE_VFUNC_PADDING( 1 ); // Common MAKE_VFUNC_PADDING( 2 ); // Physics MAKE_VFUNC_PADDING( 3 ); // GetTransformLT MAKE_VFUNC_PADDING( 4 ); // GetModelLT MAKE_VFUNC_PADDING( 5 ); // SoundMgr MAKE_VFUNC_PADDING( 6 ); // CPrint MAKE_VFUNC_PADDING( 7 ); // CPrintW MAKE_VFUNC_PADDING( 8 ); // GetContainerCode MAKE_VFUNC_PADDING( 9 ); // GetObjectContainers MAKE_VFUNC_PADDING( 10 ); // GetContainedObjects MAKE_VFUNC_PADDING( 11 ); // OpenFile MAKE_VFUNC_PADDING( 12 ); // CopyFile MAKE_VFUNC_PADDING( 13 ); // OpenMemoryStream MAKE_VFUNC_PADDING( 14 ); // GetBlindObjectData MAKE_VFUNC_PADDING( 15 ); // FreeBlindObjectData MAKE_VFUNC_PADDING( 16 ); // CopyString MAKE_VFUNC_PADDING( 17 ); // CreateString MAKE_VFUNC_PADDING( 18 ); // FreeString MAKE_VFUNC_PADDING( 19 ); // CompareStrings MAKE_VFUNC_PADDING( 20 ); // CompareStringsUpper MAKE_VFUNC_PADDING( 21 ); // GetStringData MAKE_VFUNC_PADDING( 22 ); // GetVarValueFloat MAKE_VFUNC_PADDING( 23 ); // GetVarValueVector MAKE_VFUNC_PADDING( 24 ); // GetVarValueColor MAKE_VFUNC_PADDING( 25 ); // SetVarValueFloat MAKE_VFUNC_PADDING( 26 ); // GetVarValueString MAKE_VFUNC_PADDING( 27 ); // GetEngineVar MAKE_VFUNC_PADDING( 28 ); // GetEngineVarValueInt MAKE_VFUNC_PADDING( 29 ); // GetEngineVarValueFloat MAKE_VFUNC_PADDING( 30 ); // GetEngineVarValueString MAKE_VFUNC_PADDING( 31 ); // GetTime MAKE_VFUNC_PADDING( 32 ); // GetTimeMS MAKE_VFUNC_PADDING( 33 ); // GetFrameTime MAKE_VFUNC_PADDING( 34 ); // GetFrameTimeMS MAKE_VFUNC_PADDING( 35 ); // GetSourceWorldOffset MAKE_VFUNC_PADDING( 36 ); // RemoveObject MAKE_VFUNC_PADDING( 37 ); // GetLightGroupID MAKE_VFUNC_PADDING( 38 ); // GetOccluderID MAKE_VFUNC_PADDING( 39 ); // GetTextureEffectVarID MAKE_VFUNC_PADDING( 40 ); // LinkObjRef MAKE_VFUNC_PADDING( 41 ); // GetObjectRotation MAKE_VFUNC_PADDING( 42 ); // GetObjectPos MAKE_VFUNC_PADDING( 43 ); // GetAnimIndex MAKE_VFUNC_PADDING( 44 ); // SetModelAnimation MAKE_VFUNC_PADDING( 45 ); // GetModelAnimation MAKE_VFUNC_PADDING( 46 ); // SetModelLooping MAKE_VFUNC_PADDING( 47 ); // GetModelLooping MAKE_VFUNC_PADDING( 48 ); // ResetModelAnimation MAKE_VFUNC_PADDING( 49 ); // GetModelPlaybackState MAKE_VFUNC_PADDING( 50 ); // GetPointContainers MAKE_VFUNC_PADDING( 51 ); // GetObjectGeneration MAKE_VFUNC_PADDING( 52 ); // SetObjectPosAndDimsWithoutPhysics MAKE_VFUNC_PADDING( 53 ); // SetObjectPos MAKE_VFUNC_PADDING( 54 ); // SetServerPosIgnoreLength MAKE_VFUNC_PADDING( 55 ); // SetScreenModel MAKE_VFUNC_PADDING( 56 ); // VideoMgr MAKE_VFUNC_PADDING( 57 ); // GetDrawPrim MAKE_VFUNC_PADDING( 58 ); // GetTexInterface MAKE_VFUNC_PADDING( 59 ); // GetFontManager MAKE_VFUNC_PADDING( 60 ); // Cursor MAKE_VFUNC_PADDING( 61 ); // GetBenchmarkMgr MAKE_VFUNC_PADDING( 62 ); // GetModelPlaybackAnimationState MAKE_VFUNC_PADDING( 63 ); // GetModelPlaybackAnimationStateName MAKE_VFUNC_PADDING( 64 ); // GetPointShade MAKE_VFUNC_PADDING( 65 ); // IsEngine2 MAKE_VFUNC_PADDING( 66 ); // GetRendererStats MAKE_VFUNC_PADDING( 67 ); // SetObjectRenderGroup MAKE_VFUNC_PADDING( 68 ); // SetObjectRenderGroupEnabled MAKE_VFUNC_PADDING( 69 ); // SetAllObjectRenderGroupEnabled MAKE_VFUNC_PADDING( 70 ); // AddGlowRenderStyleMapping MAKE_VFUNC_PADDING( 71 ); // SetGlowDefaultRenderStyle MAKE_VFUNC_PADDING( 72 ); // SetNoGlowRenderStyle MAKE_VFUNC_PADDING( 73 ); // AddVertexShader MAKE_VFUNC_PADDING( 74 ); // RemoveVertexShader MAKE_VFUNC_PADDING( 75 ); // RemoveAllVertexShaders MAKE_VFUNC_PADDING( 76 ); // GetVertexShader MAKE_VFUNC_PADDING( 77 ); // AddPixelShader MAKE_VFUNC_PADDING( 78 ); // RemovePixelShader MAKE_VFUNC_PADDING( 79 ); // RemoveAllPixelShaders MAKE_VFUNC_PADDING( 80 ); // GetPixelShader MAKE_VFUNC_PADDING( 81 ); // GetSConValueFloat MAKE_VFUNC_PADDING( 82 ); // GetSConValueString MAKE_VFUNC_PADDING( 83 ); // GetDeviceObjectName MAKE_VFUNC_PADDING( 84 ); // GetGlobalLightDir MAKE_VFUNC_PADDING( 85 ); // SetGlobalLightDir MAKE_VFUNC_PADDING( 86 ); // GetGlobalLightColor MAKE_VFUNC_PADDING( 87 ); // SetGlobalLightColor MAKE_VFUNC_PADDING( 88 ); // GetGlobalLightConvertToAmbient MAKE_VFUNC_PADDING( 89 ); // SetGlobalLightConvertToAmbient MAKE_VFUNC_PADDING( 90 ); // SendToServer MAKE_VFUNC_PADDING( 91 ); // GetServerIPAddress MAKE_VFUNC_PADDING( 92 ); // ProcessAttachments MAKE_VFUNC_PADDING( 93 ); // AddParticle MAKE_VFUNC_PADDING( 94 ); // IsLocalToServer MAKE_VFUNC_PADDING( 95 ); // GetLightGroupColor MAKE_VFUNC_PADDING( 96 ); // SetLightGroupColor MAKE_VFUNC_PADDING( 97 ); // GetOccluderEnabled MAKE_VFUNC_PADDING( 98 ); // SetOccluderEnabled MAKE_VFUNC_PADDING( 99 ); // SetTextureEffectVar MAKE_VFUNC_PADDING( 100 ); // GetSpriteControl MAKE_VFUNC_PADDING( 101 ); // SetSpriteEffectShaderID MAKE_VFUNC_PADDING( 102 ); // GetCanvasFn MAKE_VFUNC_PADDING( 103 ); // SetCanvasFn MAKE_VFUNC_PADDING( 104 ); // GetCanvasRadius MAKE_VFUNC_PADDING( 105 ); // SetCanvasRadius MAKE_VFUNC_PADDING( 106 ); // GetMaxRadiusInPoly MAKE_VFUNC_PADDING( 107 ); // GetClientFrameCode MAKE_VFUNC_PADDING( 108 ); // Get_ILanguageLocale MAKE_VFUNC_PADDING( 109 ); // GetGameObjectInterpolatedData MAKE_VFUNC_PADDING( 110 ); // CalculateGameObjectInterpolatedData MAKE_VFUNC_PADDING( 111 ); // CalculateGameObjectOccasionalInterpolatedData MAKE_VFUNC_PADDING( 112 ); // GetLastReceivedUpdateSequenceNoAndTime MAKE_VFUNC_PADDING( 113 ); // FirstActiveWorldModelIterator MAKE_VFUNC_PADDING( 114 ); // NextActiveWorldModelIterator MAKE_VFUNC_PADDING( 115 ); // GetD3DXLocalPosition };
  12. A hierarquia das classes está preservada. MAKE_VA_FUNC_PADDING = É um macro que adiciona uma função virtual void abstrata. MAKE_VA_FUNC_PADDING( 0 ) irá expandir para: virtual void function_0() = 0; MAKE_VFUNC_PADDING = É um macro que adiciona uma função virtual void. MAKE_VFUNC_PADDING( 0 ) irá expandir para: virtual void function_0(); class iclient_shell { public: MAKE_VAFUNC_PADDING( 0 ); // _InterfaceImplementation MAKE_VAFUNC_PADDING( 1 ); // PreUpdate MAKE_VAFUNC_PADDING( 2 ); // PostUpdate MAKE_VAFUNC_PADDING( 3 ); // Update MAKE_VAFUNC_PADDING( 4 ); // OnObjectRotate MAKE_VAFUNC_PADDING( 5 ); // OnEngineInitialized MAKE_VAFUNC_PADDING( 6 ); // OnEngineTerm MAKE_VAFUNC_PADDING( 7 ); // OnEvent MAKE_VAFUNC_PADDING( 8 ); // OnTouchNotify MAKE_VAFUNC_PADDING( 9 ); // OnPlaySound MAKE_VAFUNC_PADDING( 10 ); // OnLockRenderer MAKE_VAFUNC_PADDING( 11 ); // OnUnLockRenderer MAKE_VAFUNC_PADDING( 12 ); // OnConsolePrint MAKE_VAFUNC_PADDING( 13 ); // OnKeyUp MAKE_VAFUNC_PADDING( 14 ); // OnKeyDown MAKE_VAFUNC_PADDING( 15 ); // OnCommandOff MAKE_VAFUNC_PADDING( 16 ); // OnCommandOn MAKE_VAFUNC_PADDING( 17 ); // OnModelKey MAKE_VAFUNC_PADDING( 18 ); // OnEnterWorld MAKE_VAFUNC_PADDING( 19 ); // OnExitWorld MAKE_VAFUNC_PADDING( 20 ); // OnMessage MAKE_VAFUNC_PADDING( 21 ); // PreLoadWorld MAKE_VAFUNC_PADDING( 22 ); // OnObjectMove MAKE_VAFUNC_PADDING( 23 ); // SpecialEffectNotify MAKE_VAFUNC_PADDING( 24 ); // OnObjectRemove MAKE_VAFUNC_PADDING( 25 ); // SetServerVar MAKE_VFUNC_PADDING( 26 ); // SetWSInstance MAKE_VFUNC_PADDING( 27 ); // GetWSInstance MAKE_VFUNC_PADDING( 28 ); // SetXignCodeInstance MAKE_VFUNC_PADDING( 29 ); // GetXignCodeInstance MAKE_VAFUNC_PADDING( 30 ); // - MAKE_VAFUNC_PADDING( 31 ); // - MAKE_VAFUNC_PADDING( 32 ); // - MAKE_VAFUNC_PADDING( 33 ); // - MAKE_VAFUNC_PADDING( 34 ); // - MAKE_VAFUNC_PADDING( 35 ); // - MAKE_VFUNC_PADDING( 36 ); // ClearTCPConnections MAKE_VFUNC_PADDING( 37 ); // ClearUDPConnections MAKE_VFUNC_PADDING( 38 ); // InitializeResources MAKE_VFUNC_PADDING( 39 ); // PreEngineInitialized MAKE_VFUNC_PADDING( 40 ); // PostInitializeResources MAKE_VFUNC_PADDING( 41 ); // IsRendererInitted MAKE_VFUNC_PADDING( 42 ); // OnObjectFileNames MAKE_VFUNC_PADDING( 43 ); // OnBlockConsoleCmd MAKE_VFUNC_PADDING( 44 ); // OnVertexShaderSetConstants MAKE_VFUNC_PADDING( 45 ); // OnPixelShaderSetConstants MAKE_VFUNC_PADDING( 46 ); // OnEffectShaderSetParams }; class iltclient_shell_stub : public iclient_shell { public: MAKE_VFUNC_PADDING( 1 ); // PreUpdate MAKE_VFUNC_PADDING( 2 ); // PostUpdate MAKE_VFUNC_PADDING( 3 ); // Update MAKE_VFUNC_PADDING( 4 ); // OnObjectRotate MAKE_VFUNC_PADDING( 5 ); // OnEngineInitialized MAKE_VFUNC_PADDING( 6 ); // OnEngineTerm MAKE_VFUNC_PADDING( 7 ); // OnEvent MAKE_VAFUNC_PADDING( 8 ); // OnTouchNotify MAKE_VFUNC_PADDING( 9 ); // OnPlaySound MAKE_VFUNC_PADDING( 10 ); // OnLockRenderer MAKE_VFUNC_PADDING( 11 ); // OnUnLockRenderer MAKE_VFUNC_PADDING( 12 ); // OnConsolePrint MAKE_VFUNC_PADDING( 13 ); // OnKeyUp MAKE_VFUNC_PADDING( 14 ); // OnKeyDown MAKE_VFUNC_PADDING( 15 ); // OnCommandOff MAKE_VFUNC_PADDING( 16 ); // OnCommandOn MAKE_VFUNC_PADDING( 17 ); // OnModelKey MAKE_VFUNC_PADDING( 18 ); // OnEnterWorld MAKE_VFUNC_PADDING( 19 ); // OnExitWorld MAKE_VFUNC_PADDING( 20 ); // OnMessage MAKE_VFUNC_PADDING( 21 ); // PreLoadWorld MAKE_VFUNC_PADDING( 22 ); // OnObjectMove MAKE_VFUNC_PADDING( 23 ); // SpecialEffectNotify MAKE_VFUNC_PADDING( 24 ); // OnObjectRemove MAKE_VFUNC_PADDING( 25 ); // SetServerVar MAKE_VAFUNC_PADDING( 30 ); // - MAKE_VAFUNC_PADDING( 31 ); // - MAKE_VAFUNC_PADDING( 32 ); // - MAKE_VAFUNC_PADDING( 33 ); // - MAKE_VAFUNC_PADDING( 34 ); // - MAKE_VAFUNC_PADDING( 35 ); // - MAKE_VFUNC_PADDING( 36 ); // ClearTCPConnections MAKE_VFUNC_PADDING( 37 ); // ClearUDPConnections MAKE_VFUNC_PADDING( 38 ); // InitializeResources MAKE_VFUNC_PADDING( 39 ); // PreEngineInitialized MAKE_VFUNC_PADDING( 40 ); // PostInitializeResources MAKE_VFUNC_PADDING( 41 ); // IsRendererInitted MAKE_VFUNC_PADDING( 42 ); // OnObjectFileNames MAKE_VFUNC_PADDING( 43 ); // OnBlockConsoleCmd MAKE_VFUNC_PADDING( 44 ); // OnVertexShaderSetConstants MAKE_VFUNC_PADDING( 45 ); // OnPixelShaderSetConstants MAKE_VFUNC_PADDING( 46 ); // OnEffectShaderSetParams MAKE_VFUNC_PADDING( 47 ); // OnTouchNotify MAKE_VFUNC_PADDING( 48 ); // srand }; class cgame_client_shell : public iltclient_shell_stub { public: MAKE_VFUNC_PADDING( 3 ); // Update MAKE_VFUNC_PADDING( 5 ); // OnEngineInitialized MAKE_VFUNC_PADDING( 6 ); // OnEngineTerm MAKE_VFUNC_PADDING( 8 ); // OnTouchNotify MAKE_VFUNC_PADDING( 19 ); // OnExitWorld MAKE_VFUNC_PADDING( 20 ); // OnMessage MAKE_VFUNC_PADDING( 30 ); // - MAKE_VFUNC_PADDING( 31 ); // - MAKE_VFUNC_PADDING( 32 ); // - MAKE_VFUNC_PADDING( 33 ); // - MAKE_VFUNC_PADDING( 34 ); // - MAKE_VFUNC_PADDING( 35 ); // - MAKE_VAFUNC_PADDING( 49 ); // GetAuthServer MAKE_VAFUNC_PADDING( 50 ); // GetLobbyServer MAKE_VFUNC_PADDING( 51 ); // PauseGame MAKE_VFUNC_PADDING( 52 ); // OnWin32Message MAKE_VAFUNC_PADDING( 53 ); // GetClientInfoMgr MAKE_VFUNC_PADDING( 54 ); // GetBotInfoMgr MAKE_VFUNC_PADDING( 55 ); // GetInterfaceMgr MAKE_VAFUNC_PADDING( 56 ); // GetPlayerMgr MAKE_VAFUNC_PADDING( 57 ); // GetClientWeaponAllocator MAKE_VFUNC_PADDING( 58 ); // PostLevelLoadFirstUpdate MAKE_VFUNC_PADDING( 59 ); // GetLastKeyInputTime MAKE_VFUNC_PADDING( 60 ); // RefreshLastKeyInputTime MAKE_VAFUNC_PADDING( 61 ); // SetupClientConnectionMgr MAKE_VAFUNC_PADDING( 62 ); // SetupMissionStuff MAKE_VAFUNC_PADDING( 63 ); // GetSFXMgr MAKE_VFUNC_PADDING( 64 ); // EnterChannelReq MAKE_VFUNC_PADDING( 65 ); // UpdatePerformanceStatistics }; class ccbagame_client_shell : public cgame_client_shell { public: MAKE_VFUNC_PADDING( 49 ); // GetAuthServer MAKE_VFUNC_PADDING( 50 ); // GetLobbyServer MAKE_VFUNC_PADDING( 53 ); // GetClientInfoMgr MAKE_VFUNC_PADDING( 56 ); // GetPlayerMgr MAKE_VFUNC_PADDING( 57 ); // GetClientWeaponAllocator MAKE_VFUNC_PADDING( 61 ); // SetupClientConnectionMgr MAKE_VFUNC_PADDING( 62 ); // SetupMissionStuff MAKE_VFUNC_PADDING( 63 ); // GetSFXMgr MAKE_VFUNC_PADDING( 66 ); // EnterChannelReq };
  13. A ultima vez que vi alguém usar do próprio SDK para obter ponteiros foi em 2013 ( Kamshak ) de lá para cá usam dezenas de endereços globais na base. //Engine.exe+326ECC é o endereço da variável global: static CDatataPtrs ptrs = NULL; //Se quiser o endereço dessa função é só digitar SetMasterDatabase onde você digita para ir para um endereço no memory viewer //Ou chamar GetProcAddress com Engine.exe de módulo //Engine.SetMasterDatabase //53 - push ebx //8B 5C 24 08 - mov ebx,[esp+08] //85 DB - test ebx,ebx //0F84 B1000000 - je Engine.exe+661AE //56 - push esi //8B 35 CC6E7800 - mov esi,[ Engine.exe+326ECC ] //85 F6 - test esi,esi //75 22 - jne Engine.exe+6612A //6A 24 - push 24 //E8 9195FDFF - call Engine.exe+3F6A0 //83 C4 04 - add esp,04 //85 C0 - test eax,eax //74 0A - je Engine.exe+66120 //89 30 - mov[ eax ],esi //89 70 0C - mov[ eax + 0C ],esi //89 70 18 - mov[ eax + 18 ],esi //EB 02 - jmp Engine.exe+66122 //33 C0 - xor eax,eax //8B F0 - mov esi,eax //89 35 CC6E7800 - mov[ Engine.exe+326ECC ],esi //3B 1E - cmp ebx,[ esi ] 8B 35 ? ? ? ? 85 F6 75 22 6A 24 E8 ? ? ? ? 83 C4 04 85 C0 74 0A 89 30 89 70 0C 89 70 18 EB 02 33 C0 8B F0 89 35 ? ? ? ? 3B 1E //Adicione + 0x2 para obter o endereço correto //Depois é so atribuir a ela const auto database_ptr{ reinterpret_cast< uint32_t* >( PATTERN_SCAN + 0x2 ) }; CDatabasePtrs *m_data_base_ptr{ *reinterpret_cast< CDatabasePtrs* >( *database_ptr ) }; Essa pattern provavelmente jamais vai parar de funcionar, por que não mexem em coisas antigas do jogo, essa função provavelmente nunca irá mudar. Depois disso é só olhar o SDK e mover a classe CDatabasePtrs do ltmodule.cpp para ltmodule.h, vocês conseguem obter as seguintes interfaces: Depois vocês podem fazer algo como: if( m_data_base_ptr ) { const auto num_interfaces{ m_data_base_ptr->local_database.pointer->interfaces()->Num() }; for ( uint32_t idx{ 0 }; idx < num_interfaces; ++idx ) { std::cout << "m_name: " << m_data_base_ptr->local_database.pointer->interfaces()->get( idx )->name << '\n'; std::cout << "m_version: " << m_data_base_ptr->local_database.pointer->interfaces()->get( idx )->version << '\n'; std::cout << "m_interfaces: " << m_data_base_ptr->local_database.pointer->interfaces()->get( idx )->interfaces << '\n'; std::cout << "m_holders: " << m_data_base_ptr->local_database.pointer->interfaces()->get( idx )->holders << '\n'; std::cout << "m_current_interface: " << m_data_base_ptr->local_database.pointer->interfaces()->get( idx )->current_interface << "\n\n"; } } Então vão obter: A versão mais recente do CE agora consegue fazer a mesma função do RECLASS.NET que é obter o RTTI de classes virtuais ou abstratas caso disponível. Se usarem um pouco da cabeça isso consegue ficar mais fácil ainda ( dica: crie uma enum ). Enjoy it.
  14. Estou postando um cerca de 40% da função ClientConnectionMgr->InitMultiPlayer(); Que nada mais é que o já conhecido ID 114. Vocês podem muito bem olhar em um debugger a função e vão ver facinho facinho como ela funciona. int __stdcall hk_send_to_server( ILTMessage_Read* p_msg, const unsigned int flags ) { ILTMessage_Read *clone { p_msg->Clone() }; if( clone->Readuint8() == 114 ) { ILTMessage_Read *msg { p_msg->Clone() }; std::cout << "----------------------------------\n"; std::cout << "Read type: " << "uint8" << " | " << static_cast< int >( msg->Readuint8() )<< '\n'; std::cout << "Read type: " << "uint32" << " | " << msg->Readuint32() << '\n'; std::cout << "Read type: " << "uint32" << " | " << std::hex << msg->Readuint32() << std::dec << '\n'; std::cout << "Read type: " << "uint16" << " | " << msg->Readuint16() << '\n'; std::cout << "Read type: " << "uint32" << " | " << msg->Readuint32() << '\n'; std::cout << "Read type: " << "float " << " | " << msg->Readfloat() << '\n'; //Seu KDR std::cout << "Read type: " << "float " << " | " << msg->Readfloat() << '\n'; std::cout << "---------------------------------\n"; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; //Character ID, que vocês dizem ser o sub-id 23 kakakaka std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "bool " << " | " << msg->Readbool() << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "String" << " | " << std::hex << msg->ReadString( reinterpret_cast< char* >( 0x0019EFBE ), 1 ) << std::dec << '\n'; //Check the address of this string. std::cout << "Read type: " << "String" << " | " << std::hex << msg->ReadString( reinterpret_cast< char* >( 0x0019F03E ), 1 ) << std::dec << '\n'; //Check the address of this string. std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "---------------------------------\n"; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "uint32" << " | " << msg->Readuint32() << '\n'; std::cout << "Read type: " << "int8 " << " | " << static_cast< int >( msg->Readint8() ) << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; // Aqui existe um loop que precisa ser checado para entender como funciona // As chamadas abaixo estão corretas !!! std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; std::cout << "Read type: " << "int16 " << " | " << msg->Readint16() << '\n'; // O loop termina aqui. std::cout << "Read type: " << "float " << " | " << msg->Readfloat() << '\n'; std::cout << "Read type: " << "uint32" << " | " << msg->Readuint32() << '\n'; std::cout << "Read type: " << "uint8 " << " | " << static_cast< int >( msg->Readuint8() ) << '\n'; std::cout << "----------------------------------\n"; } return o_send_to_server( p_msg, 1 ); } float GetKDR( const float deaths, const float kills ) { float tmp { 1.0f }; if ( kills ) { if ( deaths ) return ( deaths / kills ); } else if ( deaths ) { tmp = deaths; } return tmp; } ... const float kdr { GetKDR( *reinterpret_cast< float* >( char_info_ptr + 0x124 ), /*m_deaths*/ *reinterpret_cast< float* >( char_info_ptr + 0x128 ) ) }; /*m_kills*/ lt_message->Writefloat( kdr ); Também demonstrei acima usando a própria função do jogo como eles obtém seu KDR lel... Por hoje é só :)
  15. Como faz tempo que ninguém posta endereços do Combat Arms Brazil, estou postando. Me surpreende vocês nunca terem lido o básico do SDK. ------------------------------------------------------------ m_name: CA_IClientUserInfo.Default m_version: 1 m_interfaces: 02822CC0 m_holders: 02822CE8 CAPIHolder< CA_IClientUserInfo >: CAPIHolderBase __vfptr: 377CA194 m_api_name: CA_IClientUserInfo.Default m_version: 1 m_pointer: 0077BC68 m_current_interface: 0077BC68 ------------------------------------------------------------ m_name: CA_IHttpUploader.Default m_version: 1 m_interfaces: 02822D88 m_holders: 02822DB0 CAPIHolder< CA_IHttpUploader >: CAPIHolderBase __vfptr: 379D0354 m_api_name: CA_IHttpUploader.Default m_version: 1 m_pointer: 0071F418 m_current_interface: 0071F418 ------------------------------------------------------------ m_name: CA_IQueuedTaskThreadPool.Default m_version: 1 m_interfaces: 02822E70 m_holders: 02822E88 CAPIHolder< CA_IQueuedTaskThreadPool >: CAPIHolderBase __vfptr: 006D0D00 m_api_name: CA_IQueuedTaskThreadPool.Default m_version: 1 m_pointer: 0071F780 m_current_interface: 0071F780 ------------------------------------------------------------ m_name: CA_IURLDownloaderFactory.Default m_version: 1 m_interfaces: 02822F58 m_holders: 02822F80 CAPIHolder< CA_IURLDownloaderFactory >: CAPIHolderBase __vfptr: 377D1DA4 m_api_name: CA_IURLDownloaderFactory.Default m_version: 1 m_pointer: 0071F938 m_current_interface: 0071F938 ------------------------------------------------------------ m_name: ICallStack.Default m_version: 0 m_interfaces: 0282BD28 m_holders: 0282BEA8 CAPIHolder< ICallStack >: CAPIHolderBase __vfptr: 006D7BBC m_api_name: ICallStack.Default m_version: 0 m_pointer: 00000000 m_current_interface: 00000000 ------------------------------------------------------------ m_name: IClientDebugGraphMgr.Default m_version: 0 m_interfaces: 02826840 m_holders: 028266D8 CAPIHolder< IClientDebugGraphMgr >: CAPIHolderBase __vfptr: 006D2E04 m_api_name: IClientDebugGraphMgr.Default m_version: 0 m_pointer: 0072EED8 m_current_interface: 0072EED8 ------------------------------------------------------------ m_name: IClientFileMgr.Default m_version: 0 m_interfaces: 02826648 m_holders: 02826618 CAPIHolder< IClientFileMgr >: CAPIHolderBase __vfptr: 006D372C m_api_name: IClientFileMgr.Default m_version: 0 m_pointer: 00803E18 m_current_interface: 00803E18 ------------------------------------------------------------ m_name: IClientFormatMgr.Default m_version: 0 m_interfaces: 02826690 m_holders: 02826858 CAPIHolder< IClientFormatMgr >: CAPIHolderBase __vfptr: 006DDB60 m_api_name: IClientFormatMgr.Default m_version: 0 m_pointer: 0072E208 m_current_interface: 0072E208 ------------------------------------------------------------ m_name: IClientShell.Default m_version: 4 m_interfaces: 02821260 m_holders: 02821188 CAPIHolder< IClientShell >: CAPIHolderBase __vfptr: 006D2300 m_api_name: IClientShell.Default m_version: 4 m_pointer: 382EADD0 m_current_interface: 382EADD0 ------------------------------------------------------------ m_name: ICommandLineArgs.Default m_version: 0 m_interfaces: 028211A0 m_holders: 028211B8 CAPIHolder< ICommandLineArgs >: CAPIHolderBase __vfptr: 006D22EC m_api_name: ICommandLineArgs.Default m_version: 0 m_pointer: 00771E64 m_current_interface: 00771E64 ------------------------------------------------------------ m_name: ICompress.Default m_version: 0 m_interfaces: 028276E0 m_holders: 02827770 CAPIHolder< ICompress >: CAPIHolderBase __vfptr: 006D75FC m_api_name: ICompress.Default m_version: 0 m_pointer: 0073EE68 m_current_interface: 0073EE68 ------------------------------------------------------------ m_name: IErrorFilter.Default m_version: 0 m_interfaces: 0282BEC0 m_holders: 0282BDA0 CAPIHolder< IErrorFilter >: CAPIHolderBase __vfptr: 006D7BA8 m_api_name: IErrorFilter.Default m_version: 0 m_pointer: 00000000 m_current_interface: 00000000 ------------------------------------------------------------ m_name: IErrorPrint.Default m_version: 0 m_interfaces: 02821110 m_holders: 0282BDB8 CAPIHolder< IErrorPrint >: CAPIHolderBase __vfptr: 006D7B94 m_api_name: IErrorPrint.Default m_version: 0 m_pointer: 00000000 m_current_interface: 00000000 ------------------------------------------------------------ m_name: IFindObj.Default m_version: 0 m_interfaces: 02827740 m_holders: 028268D0 CAPIHolder< IFindObj >: CAPIHolderBase __vfptr: 006EAF64 m_api_name: IFindObj.Default m_version: 0 m_pointer: 0074F688 m_current_interface: 0074F688 ------------------------------------------------------------ m_name: IInstanceHandleClient.Default m_version: 4 m_interfaces: 02827530 m_holders: 028273E0 CAPIHolder< IInstanceHandleClient >: CAPIHolderBase __vfptr: 006D60F8 m_api_name: IInstanceHandleClient.Default m_version: 4 m_pointer: 37F722F8 m_current_interface: 37F722F8 ------------------------------------------------------------ m_name: IInstanceHandleServer.Default m_version: 1 m_interfaces: 028276F8 m_holders: 02827710 CAPIHolder< IInstanceHandleServer >: CAPIHolderBase __vfptr: 006D610C m_api_name: IInstanceHandleServer.Default m_version: 1 m_pointer: 00000000 m_current_interface: 00000000 ------------------------------------------------------------ m_name: ILTBenchmarkMgr.Default m_version: 0 m_interfaces: 028273F8 m_holders: 02827620 CAPIHolder< ILTBenchmarkMgr >: CAPIHolderBase __vfptr: 006D37E0 m_api_name: ILTBenchmarkMgr.Default m_version: 0 m_pointer: 0074FC70 m_current_interface: 0074FC70 ------------------------------------------------------------ m_name: ILTCSBase.Client m_version: 4 m_interfaces: 02827668 m_holders: 02827578 CAPIHolder< ILTCSBase >: CAPIHolderBase __vfptr: 377CF038 m_api_name: ILTCSBase.Client m_version: 4 m_pointer: 0073D760 m_current_interface: 0073D760 ------------------------------------------------------------ m_name: ILTCSBase.Server m_version: 4 m_interfaces: 0282BFF8 m_holders: 0282C010 No holder! m_current_interface: 00753CA0 ------------------------------------------------------------ m_name: ILTClient.Default m_version: 404 m_interfaces: 028210B0 m_holders: 028210C8 CAPIHolder< ILTClient >: CAPIHolderBase __vfptr: 006D2328 m_api_name: ILTClient.Default m_version: 404 m_pointer: 0073D760 m_current_interface: 0073D760 ------------------------------------------------------------ m_name: ILTClientSoundMgr.Default m_version: 0 m_interfaces: 02938208 m_holders: 02938340 No holder! m_current_interface: 00804E58 ------------------------------------------------------------ m_name: ILTCollisionMgr.Client m_version: 0 m_interfaces: 0282BF80 m_holders: 0282BF98 CAPIHolder< ILTCollisionMgr >: CAPIHolderBase __vfptr: 006DF4FC m_api_name: ILTCollisionMgr.Client m_version: 0 m_pointer: 00000000 m_current_interface: 00000000 ------------------------------------------------------------ m_name: ILTCollisionMgr.Server m_version: 0 m_interfaces: 029380A0 m_holders: 029382C8 CAPIHolder< ILTCollisionMgr >: CAPIHolderBase __vfptr: 006DF4FC m_api_name: ILTCollisionMgr.Server m_version: 0 m_pointer: 00000000 m_current_interface: 00000000 ------------------------------------------------------------ m_name: ILTCommon.Client m_version: 4 m_interfaces: 02826750 m_holders: 02826720 CAPIHolder< ILTCommon >: CAPIHolderBase __vfptr: 006D3768 m_api_name: ILTCommon.Client m_version: 4 m_pointer: 00772E90 m_current_interface: 00772E90 ------------------------------------------------------------ m_name: ILTCommon.Server m_version: 4 m_interfaces: 0282BE48 m_holders: 0282BF38 CAPIHolder< ILTCommon >: CAPIHolderBase __vfptr: 006D3768 m_api_name: ILTCommon.Server m_version: 4 m_pointer: 007731F0 m_current_interface: 007731F0 ------------------------------------------------------------ m_name: ILTCursor.Default m_version: 0 m_interfaces: 02821170 m_holders: 02821200 CAPIHolder< ILTCursor >: CAPIHolderBase __vfptr: 006D2314 m_api_name: ILTCursor.Default m_version: 0 m_pointer: 00773530 m_current_interface: 00773530 ------------------------------------------------------------ m_name: ILTDrawPrim.Default m_version: 0 m_interfaces: 02826900 m_holders: 02826918 CAPIHolder< ILTDrawPrim >: CAPIHolderBase __vfptr: 006D37B8 m_api_name: ILTDrawPrim.Default m_version: 0 m_pointer: 00781F78 m_current_interface: 00781F78 ------------------------------------------------------------ m_name: ILTFontManager.Default m_version: 0 m_interfaces: 02827440 m_holders: 028276B0 CAPIHolder< ILTFontManager >: CAPIHolderBase __vfptr: 006D37CC m_api_name: ILTFontManager.Default m_version: 0 m_pointer: 007794B4 m_current_interface: 007794B4 ------------------------------------------------------------ m_name: ILTModel.Client m_version: 0 m_interfaces: 02826768 m_holders: 02826780 CAPIHolder< ILTModel >: CAPIHolderBase __vfptr: 006D377C m_api_name: ILTModel.Client m_version: 0 m_pointer: 007722B0 m_current_interface: 007722B0 ------------------------------------------------------------ m_name: ILTModel.Server m_version: 0 m_interfaces: 0282BC80 m_holders: 0282BD88 CAPIHolder< ILTModel >: CAPIHolderBase __vfptr: 006D377C m_api_name: ILTModel.Server m_version: 0 m_pointer: 00772868 m_current_interface: 00772868 ------------------------------------------------------------ m_name: ILTModelClient.Default m_version: 0 m_interfaces: 02938280 m_holders: 029382F8 CAPIHolder< ILTModelClient >: CAPIHolderBase __vfptr: 377CEFAC m_api_name: ILTModelClient.Default m_version: 0 m_pointer: 007722B0 m_current_interface: 007722B0 ------------------------------------------------------------ m_name: ILTPhysics.Client m_version: 0 m_interfaces: 028275D8 m_holders: 02827698 CAPIHolder< ILTPhysics >: CAPIHolderBase __vfptr: 006D37F4 m_api_name: ILTPhysics.Client m_version: 0 m_pointer: 00773748 m_current_interface: 00773748 ------------------------------------------------------------ m_name: ILTPhysics.Server m_version: 0 m_interfaces: 0282BFE0 m_holders: 0282BFB0 CAPIHolder< ILTPhysics >: CAPIHolderBase __vfptr: 006D37F4 m_api_name: ILTPhysics.Server m_version: 0 m_pointer: 00773958 m_current_interface: 00773958 ------------------------------------------------------------ m_name: ILTRenderMgr.Default m_version: 0 m_interfaces: 0282BED8 m_holders: 0282BE60 CAPIHolder< ILTRenderMgr >: CAPIHolderBase __vfptr: 377CF010 m_api_name: ILTRenderMgr.Default m_version: 0 m_pointer: 007508B8 m_current_interface: 007508B8 ------------------------------------------------------------ m_name: ILTRenderStyles.Default m_version: 0 m_interfaces: 0282BEF0 m_holders: 0282BD58 CAPIHolder< ILTRenderStyles >: CAPIHolderBase __vfptr: 006D9114 m_api_name: ILTRenderStyles.Default m_version: 0 m_pointer: 00776990 m_current_interface: 00776990 ------------------------------------------------------------ m_name: ILTServer.Default m_version: 404 m_interfaces: 02820508 m_holders: 02821128 CAPIHolder< ILTServer >: CAPIHolderBase __vfptr: 006D1448 m_api_name: ILTServer.Default m_version: 404 m_pointer: 00753CA0 m_current_interface: 00753CA0 ------------------------------------------------------------ m_name: ILTSoundMgr.Client m_version: 0 m_interfaces: 02826828 m_holders: 028268E8 CAPIHolder< ILTSoundMgr >: CAPIHolderBase __vfptr: 006D3790 m_api_name: ILTSoundMgr.Client m_version: 0 m_pointer: 00804E58 m_current_interface: 00804E58 ------------------------------------------------------------ m_name: ILTSoundMgr.Server m_version: 0 m_interfaces: 0282BC68 m_holders: 0282BD40 CAPIHolder< ILTSoundMgr >: CAPIHolderBase __vfptr: 006D3790 m_api_name: ILTSoundMgr.Server m_version: 0 m_pointer: 00773D28 m_current_interface: 00773D28 ------------------------------------------------------------ m_name: ILTTexInterface.Default m_version: 0 m_interfaces: 028211E8 m_holders: 028210E0 CAPIHolder< ILTTexInterface >: CAPIHolderBase __vfptr: 006D22D8 m_api_name: ILTTexInterface.Default m_version: 0 m_pointer: 0074D590 m_current_interface: 0074D590 ------------------------------------------------------------ m_name: ILTTransform.Default m_version: 0 m_interfaces: 02826678 m_holders: 028266F0 CAPIHolder< ILTTransform >: CAPIHolderBase __vfptr: 006D3754 m_api_name: ILTTransform.Default m_version: 0 m_pointer: 00773AA0 m_current_interface: 00773AA0 ------------------------------------------------------------ m_name: ILTVideoMgr.Default m_version: 0 m_interfaces: 02826948 m_holders: 02826930 CAPIHolder< ILTVideoMgr >: CAPIHolderBase __vfptr: 006D37A4 m_api_name: ILTVideoMgr.Default m_version: 0 m_pointer: 00774308 m_current_interface: 00774308 ------------------------------------------------------------ m_name: ILocaleManager.Default m_version: 0 m_interfaces: 02827458 m_holders: 02827608 CAPIHolder< ILocaleManager >: CAPIHolderBase __vfptr: 006D41E4 m_api_name: ILocaleManager.Default m_version: 0 m_pointer: 00805EA8 m_current_interface: 00805EA8 ------------------------------------------------------------ m_name: IModelManipulator.Client m_version: 0 m_interfaces: 02938310 m_holders: 02938268 No holder! m_current_interface: 00804CB4 ------------------------------------------------------------ m_name: IModelManipulator.Server m_version: 0 m_interfaces: 029381C0 m_holders: 02938328 No holder! m_current_interface: 00804CFC ------------------------------------------------------------ m_name: IModelManipulatorClient.Default m_version: 0 m_interfaces: 02938160 m_holders: 02938178 CAPIHolder< IModelManipulatorClient >: CAPIHolderBase __vfptr: 377CEFFC m_api_name: IModelManipulatorClient.Default m_version: 0 m_pointer: 00804CB4 m_current_interface: 00804CB4 ------------------------------------------------------------ m_name: IServerConsoleState.Default m_version: 0 m_interfaces: 0282BE78 m_holders: 0282BCF8 CAPIHolder< IServerConsoleState >: CAPIHolderBase __vfptr: 006DADA0 m_api_name: IServerConsoleState.Default m_version: 0 m_pointer: 00753020 m_current_interface: 00753020 ------------------------------------------------------------ m_name: IServerFileMgr.Default m_version: 0 m_interfaces: 02827410 m_holders: 02827518 CAPIHolder< IServerFileMgr >: CAPIHolderBase __vfptr: 006D41D0 m_api_name: IServerFileMgr.Default m_version: 0 m_pointer: 00788070 m_current_interface: 00788070 ------------------------------------------------------------ m_name: IServerShell.Default m_version: 4 m_interfaces: 02821230 m_holders: 028210F8 CAPIHolder< IServerShell >: CAPIHolderBase __vfptr: 006D1470 m_api_name: IServerShell.Default m_version: 4 m_pointer: 00000000 m_current_interface: 00000000 ------------------------------------------------------------ m_name: ISysFontManager.Default m_version: 0 m_interfaces: 02938088 m_holders: 029380B8 CAPIHolder< ISysFontManager >: CAPIHolderBase __vfptr: 006E28CC m_api_name: ISysFontManager.Default m_version: 0 m_pointer: 00774928 m_current_interface: 00774928 ------------------------------------------------------------ m_name: IWorldBlindObjectData.Default m_version: 0 m_interfaces: 028267E0 m_holders: 02826810 CAPIHolder< IWorldBlindObjectData >: CAPIHolderBase __vfptr: 006D3740 m_api_name: IWorldBlindObjectData.Default m_version: 0 m_pointer: 00770E30 m_current_interface: 00770E30 ------------------------------------------------------------ m_name: IWorldBlockerData.Default m_version: 0 m_interfaces: 028274A0 m_holders: 028274D0 CAPIHolder< IWorldBlockerData >: CAPIHolderBase __vfptr: 006D4824 m_api_name: IWorldBlockerData.Default m_version: 0 m_pointer: 00770FA8 m_current_interface: 00770FA8 ------------------------------------------------------------ m_name: IWorldClient.Default m_version: 0 m_interfaces: 02827560 m_holders: 02827728 No holder! m_current_interface: 00771398 ------------------------------------------------------------ m_name: IWorldClientBSP.Default m_version: 0 m_interfaces: 028265D0 m_holders: 02826888 CAPIHolder< IWorldClientBSP >: CAPIHolderBase __vfptr: 006D3704 m_api_name: IWorldClientBSP.Default m_version: 0 m_pointer: 00771398 m_current_interface: 00771398 ------------------------------------------------------------ m_name: IWorldParticleBlockerData.Default m_version: 0 m_interfaces: 02827638 m_holders: 02827650 CAPIHolder< IWorldParticleBlockerData >: CAPIHolderBase __vfptr: 006D3808 m_api_name: IWorldParticleBlockerData.Default m_version: 0 m_pointer: 007715B8 m_current_interface: 007715B8 ------------------------------------------------------------ m_name: IWorldServer.Default m_version: 0 m_interfaces: 029382E0 m_holders: 02938370 No holder! m_current_interface: 00771910 ------------------------------------------------------------ m_name: IWorldServerBSP.Default m_version: 0 m_interfaces: 0282BD70 m_holders: 0282BE00 CAPIHolder< IWorldServerBSP >: CAPIHolderBase __vfptr: 006D848C m_api_name: IWorldServerBSP.Default m_version: 0 m_pointer: 00771910 m_current_interface: 00771910 ------------------------------------------------------------ m_name: IWorldSharedBSP.Default m_version: 0 m_interfaces: 02826630 m_holders: 02826708 CAPIHolder< IWorldSharedBSP >: CAPIHolderBase __vfptr: 006D3718 m_api_name: IWorldSharedBSP.Default m_version: 0 m_pointer: 00803D28 m_current_interface: 00803D28 ------------------------------------------------------------
×
×
  • Create New...