Другое С/С++ Вопрос - Ответ

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,982
Если CBike будет наследовать CAutomobile, 0x0-0xN (произвольно), будет схож с CAutomobile. А вот то, что выходит за 0xN, будет совместимо конкретно с CBike, а не с CAutomobile.
Так то да, но вот например CHeli наследует весь CAutomobile в то время как CBike только лишь от CVehicle.
 

Const

Потрачен
28
54
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

manukhov

Известный
125
131
Добрый вечер, вот что из этого всего реально отвечает за смену навыков владения оружием?

1. CPed +0x72C = [byte] Навык владения оружием (0-4)

2. 0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: <номер оружия> + <смещение>. Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat.

3.
  • +0x30 = [dword] Владение оружием
    • 0 - POOR //Наихудшее
    • 1 - STD //Среднее
    • 2 - PRO //Наилучшее
    • 3 - особое
  • +0x34 = [dword] statrequired. Уровень статистики, необходимый для получения текущего навыка владения оружи
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,808
Добрый вечер, вот что из этого всего реально отвечает за смену навыков владения оружием?

1. CPed +0x72C = [byte] Навык владения оружием (0-4)

2. 0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: <номер оружия> + <смещение>. Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat.

3.
  • +0x30 = [dword] Владение оружием
    • 0 - POOR //Наихудшее
    • 1 - STD //Среднее
    • 2 - PRO //Наилучшее
    • 3 - особое
  • +0x34 = [dword] statrequired. Уровень статистики, необходимый для получения текущего навыка владения оружи
В спойлере скилл локального игрока в процентах. Может быть можно обратным способом записать туда значение. https://www.blast.hk/threads/10970/post-98968
 

manukhov

Известный
125
131

loganhackerdff

Известный
868
519
Ну так там считывают, а изменять то как? Что записать? ID оружия + 0x36?
в dwAddr просто перед адресом добавь (DWORD*)
C++:
template <typename T>
void WriteMem(DWORD* dwAddr, size_t size, T value)
{
    DWORD NewProtection;
    VirtualProtect(dwAddr, size, PAGE_EXECUTE_READWRITE, &NewProtection);
    *reinterpret_cast<T*>(dwAddr) = value;
    VirtualProtect(dwAddr, size, NewProtection, &NewProtection);
}
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,808
в dwAddr просто перед адресом добавь (DWORD*)
C++:
template <typename T>
void WriteMem(DWORD* dwAddr, size_t size, T value)
{
    DWORD NewProtection;
    VirtualProtect(dwAddr, size, PAGE_EXECUTE_READWRITE, &NewProtection);
    *reinterpret_cast<T*>(dwAddr) = value;
    VirtualProtect(dwAddr, size, NewProtection, &NewProtection);
}
Он экстреналы делает
 

manukhov

Известный
125
131
в dwAddr просто перед адресом добавь (DWORD*)
C++:
template <typename T>
void WriteMem(DWORD* dwAddr, size_t size, T value)
{
    DWORD NewProtection;
    VirtualProtect(dwAddr, size, PAGE_EXECUTE_READWRITE, &NewProtection);
    *reinterpret_cast<T*>(dwAddr) = value;
    VirtualProtect(dwAddr, size, NewProtection, &NewProtection);
}
ты точно этот код прикрепить хотел? Wpm для примера вполне хватит
 

Musaigen

abobusnik
Проверенный
1,607
1,365
Добрый вечер, вот что из этого всего реально отвечает за смену навыков владения оружием?

1. CPed +0x72C = [byte] Навык владения оружием (0-4)

2. 0xC8AAB8 - Начало блока, куда считывается информация об оружии с меткой J (оружие ближнего боя) и $ (остальное оружие). В этом блоке 0x50 элементов по 0x70 байт в каждом. Индекс элемента высчитывается по формуле: <номер оружия> + <смещение>. Смещение определяется навыком оружия skilllevel: STD - 0, POOR - 25, PRO - 36, особое (характеристики пистолета копов) - 47. Все имена взяты из заголовка оригинального weapon.dat.

3.
  • +0x30 = [dword] Владение оружием
    • 0 - POOR //Наихудшее
    • 1 - STD //Среднее
    • 2 - PRO //Наилучшее
    • 3 - особое
  • +0x34 = [dword] statrequired. Уровень статистики, необходимый для получения текущего навыка владения оружи
C++:
// Для internal'a
// weaponType - ID оружия.
// cSkill - сам скилл.
void CPed::SetWeaponSkill(eWeaponType weaponType, char cSkill)
{
    // Вместо eWeaponType можно и int
    reinterpret_cast<void(__thiscall*)(CPed*, eWeaponType, char)>(0x5E3C10)(this, weaponType, cSkill);
}
this можно заменить *reinterpret_cast<void**>(0xB6F5F0)
Ну и понятное дело вместо CPed* поставить void*
 
Последнее редактирование:

loganhackerdff

Известный
868
519
C++:
// Для internal'a
// weaponType - ID оружия.
// cSkill - сам скилл.
void CPed::SetWeaponSkill(eWeaponType weaponType, char cSkill)
{
    // Вместо eWeaponType можно и int
    reinterpret_cast<void(__thiscall*)(CPed*, eWeaponType, char)>(0x5E3C10, this, weaponType, cSkill);
}
this можно заменить reinterpret_cast<void*>(0xB6F5F0)
Ну и понятное дело вместо CPed* поставить void*
а почему инменно reinterept_cast а не static_cast и не простое разименование указателя?