HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #7491  
Старый 03.04.2025, 15:39
4el0ve4ik
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами: 5526867

Репутация: 183


По умолчанию

Цитата:
Сообщение от tanksoftik  

C++:





Код:
int
AddParticle
(
FxSystem_c
*
particle
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}


C++:





Код:
patch
::
RedirectCall
(
0x6DF303
,
AddParticle
)
;
patch
::
RedirectCall
(
0x6DEE83
,
AddParticle
)
;
patch
::
RedirectCall
(
0x6DF0C3
,
AddParticle
)
;


функцию AddParticle что в ней передается брал фулл из ida

Цитата:
Сообщение от Спойлер  


psevdocode:





Код:
int __thiscall FxSystem_c::AddParticle(
        FxSystem_c *particle,
        CVector *position,
        CVector *velocity,
        float unk,
        FxPrtMult_c *particleData,
        float a6,
        float brightness,
        float a8,
        int a9)
{
  int v10; // esi
  int result; // eax
  FxPrim_c *particlePrim; // ecx
  float v13; // [esp+18h] [ebp-8h]
  int i; // [esp+3Ch] [ebp+1Ch]

  v10 = (rand() * 0.000030517578 * 100.0);
  result = Fx_c::GetFxQuality(&g_fx);
  if ( result || v10 >= 50 )
  {
    result = Fx_c::GetFxQuality(&g_fx);
    if ( result != FX_MEDIUM || v10 >= 25 )
    {
      v13 = 1.0;
      if ( brightness m_pBluePrint->m_nNumEmitters; i = ++result )
      {
        particlePrim = particle->PrimsList[result];
        if ( particlePrim->m_bEnabled )
        {
          (particlePrim->vtable->field_14)(
            particlePrim,
            position,
            velocity,
            LODWORD(unk),
            particleData,
            LODWORD(a6),
            COERCE_FLOAT(LODWORD(v13)),
            a9);
          result = i;
        }
      }
    }
  }
  return result;
}


но почему то крашит, пробовал пустую функцию делать все равно крашит
Потому что нужно соглашение о вызове указать.

C++:





Код:
int
__fastcall
AddParticle
(
FxSystem_c
*
particle
,
void
*
unused
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}


Кстати почему ты возвращаешь единицу, а не то что тебе отдает оригинальная функция, это задумка или проёб?
 
Ответить с цитированием

  #7492  
Старый 03.04.2025, 20:29
tanksoftik
Новичок
Регистрация: 10.03.2025
Сообщений: 17
С нами: 622067

Репутация: 8
По умолчанию

C++:





Код:
int
__fastcall
AddParticle
(
FxSystem_c
*
particle
,
void
*
unused
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particleData
->
m_color
.
red
=
1
;
particleData
->
m_color
.
green
=
0
;
particleData
->
m_color
.
blue
=
0
;
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}


как теперь можно получить CVehicle что бы получать нужный color или же activated
 
Ответить с цитированием

  #7493  
Старый 03.04.2025, 22:03
4el0ve4ik
Познавший АНТИЧАТ
Регистрация: 12.11.2015
Сообщений: 1,560
С нами: 5526867

Репутация: 183


По умолчанию

Цитата:
Сообщение от tanksoftik  

C++:





Код:
int
__fastcall
AddParticle
(
FxSystem_c
*
particle
,
void
*
unused
,
RwV3d
*
position
,
RwV3d
*
velocity
,
float
unk
,
FxPrtMult_c
*
particleData
,
float
a6
,
float
brightness
,
float
a8
,
int
a9
)
{
particleData
->
m_color
.
red
=
1
;
particleData
->
m_color
.
green
=
0
;
particleData
->
m_color
.
blue
=
0
;
particle
->
AddParticle
(
position
,
velocity
,
unk
,
particleData
,
a6
,
brightness
,
a8
,
a9
)
;
return
1
;
}


как теперь можно получить CVehicle что бы получать нужный color или же activated
Сделать прослойку где ты будешь передавать в регистр edx тот самый CVehicle*, в таком варианте он у тебя будет приходить вторым аргументом, который сейчас обзывается: void* unused. Это самый простой вариант.
 
Ответить с цитированием

  #7494  
Старый 06.04.2025, 18:36
tanksoftik
Новичок
Регистрация: 10.03.2025
Сообщений: 17
С нами: 622067

Репутация: 8
По умолчанию

какой оффсет Create3DTextLabel r1

пробовал искать в idb но чет там нету ну или я не нашел
 
Ответить с цитированием

  #7495  
Старый 06.04.2025, 18:56
Smeruxa
Познавший АНТИЧАТ
Регистрация: 27.11.2020
Сообщений: 1,431
С нами: 2874035

Репутация: 183


По умолчанию

Цитата:
Сообщение от tanksoftik  

какой оффсет Create3DTextLabel r1
пробовал искать в idb но чет там нету ну или я не нашел
в sampapi
 
Ответить с цитированием

  #7496  
Старый 06.04.2025, 21:28
vmprotect
Постоянный
Регистрация: 15.09.2021
Сообщений: 396
С нами: 2453766

Репутация: 68
По умолчанию

Короче, как сделать, чтобы хук на LoadTxd редиректил в два разных адреса, в зависимости от того, какой txd'шник грузится? типа

Один FONT.TXD - 0x7320B0

Второй zalupa.txd - какой-то другой адрес

С++:





Код:
bool
__cdecl
TestHOOK
(
const
decltype
(
CTxdStore__LoadTxd_Hook
)
&
hook
,
int
index
,
const
char
*
filename
)
{
if
(
strcmp
(
filename
,
(
char
*
)
0x86A648
)
==
0
)
{
return
hook
.
call_trampoline
(
index
,
"FONT.TXD"
)
;
}
else
if
(
strcmp
(
filename
,
(
char
*
)
0x0000
)
==
0
)
{
return
hook
.
call_trampoline
(
index
,
"zalupa.txd"
)
;
}
return
hook
.
call_trampoline
(
index
,
filename
)
;
}
void
install_fucking_hook
(
)
{
CTxdStore__LoadTxd_Hook
.
set_dest
(
0x7320B0
)
;
CTxdStore__LoadTxd_Hook
.
set_cb
(
TestHOOK
)
;
CTxdStore__LoadTxd_Hook
.
install
(
)
;
}


а то я пытался делать в разных функциях, то оно работает только в одном из них а не все, допустим шрифт заменяется а другой txd нет
 
Ответить с цитированием

  #7497  
Старый 06.04.2025, 22:11
TokyoQq
Новичок
Регистрация: 14.01.2024
Сообщений: 20
С нами: 1228197

Репутация: 3
По умолчанию

как можно изменить handling для определенного cvehicle
 
Ответить с цитированием

  #7498  
Старый 06.04.2025, 23:45
ARMOR
Флудер
Регистрация: 02.02.2019
Сообщений: 5,070
С нами: 3831395

Репутация: 183


По умолчанию

Цитата:
Сообщение от TokyoQq  

как можно изменить handling для определенного cvehicle
Кажись у каждого CVehicle есть поле с хендлингом

plugin-sdk/plugin_sa/game_sa/CVehicle.h at master · DK22Pac/plugin-sdk

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com


plugin-sdk/plugin_sa/game_sa/tHandlingData.h at master · DK22Pac/plugin-sdk

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com
 
Ответить с цитированием

  #7499  
Старый 07.04.2025, 02:08
ARMOR
Флудер
Регистрация: 02.02.2019
Сообщений: 5,070
С нами: 3831395

Репутация: 183


По умолчанию

Цитата:
Сообщение от vmprotect  

Короче, как сделать, чтобы хук на LoadTxd редиректил в два разных адреса, в зависимости от того, какой txd'шник грузится? типа

Один FONT.TXD - 0x7320B0
Второй zalupa.txd - какой-то другой адрес

С++:





Код:
bool
__cdecl
TestHOOK
(
const
decltype
(
CTxdStore__LoadTxd_Hook
)
&
hook
,
int
index
,
const
char
*
filename
)
{
if
(
strcmp
(
filename
,
(
char
*
)
0x86A648
)
==
0
)
{
return
hook
.
call_trampoline
(
index
,
"FONT.TXD"
)
;
}
else
if
(
strcmp
(
filename
,
(
char
*
)
0x0000
)
==
0
)
{
return
hook
.
call_trampoline
(
index
,
"zalupa.txd"
)
;
}
return
hook
.
call_trampoline
(
index
,
filename
)
;
}
void
install_fucking_hook
(
)
{
CTxdStore__LoadTxd_Hook
.
set_dest
(
0x7320B0
)
;
CTxdStore__LoadTxd_Hook
.
set_cb
(
TestHOOK
)
;
CTxdStore__LoadTxd_Hook
.
install
(
)
;
}


а то я пытался делать в разных функциях, то оно работает только в одном из них а не все, допустим шрифт заменяется а другой txd нет
У ктхуков в контексте кажись есть метод для получения указателя на return_address. Можешь попробовать его изменить
 
Ответить с цитированием

  #7500  
Старый 07.04.2025, 07:55
TokyoQq
Новичок
Регистрация: 14.01.2024
Сообщений: 20
С нами: 1228197

Репутация: 3
По умолчанию

Цитата:
Сообщение от ARMOR  

Кажись у каждого CVehicle есть поле с хендлингом

plugin-sdk/plugin_sa/game_sa/CVehicle.h at master · DK22Pac/plugin-sdk

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com


plugin-sdk/plugin_sa/game_sa/tHandlingData.h at master · DK22Pac/plugin-sdk

An SDK for developing ASI/CLEO plugins for GTA San Andreas, GTA Vice City and GTA III - DK22Pac/plugin-sdk

github.com

при изменении меняется для всей модели а мне надо как то сделать для определеного CVehicle
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...