Участник
смысл отдельный вар делать в том, чтобы не ошибиться(0x7ff напишешь одну f недопишешь и пизда тебе условно) + для ясности(это не математика здесь не надо называть переменные a b c x y и кучу какихто непонятных константвроде де бы
6 шмотко главный инветарь 9 шмоток стеш слот для тп + слот для нейтралки
получается 17 ( ну 32 взял чтобы точно попало) я один хуй там везде проверку влепил на валидность чтобы не крашнуло
про 0x7FFF уже запомнил наизусть не вижу смысла отводить отдельный вар для него
про итемс чутка не понял все и так работает и про uint64_t я просто взял хендл итема и сравнил с хендлами в моем ентити листе
ну и про функу мне удобнее передавать в нее ссылку на вектор чем создавать новый вектор )
работает и не крашит ну впринцепе и похуй а CHandle тоже впадлу делать у меня такой гавно код стайл как ты понял потому что впервый я узнал что такое плюсы 20 февраля и я далеко в них не гений а до этого только джс и питон где вприцепе типизации не было
Пожалуйста, авторизуйтесь для просмотра ссылки.
). ты везде пишешь 0x7fff. но еще лучше вариант - просто завернуть все это в класс тогда вместо & 0x7fff ты будешь писать GetIndex() просто. но вопрос - если ты сравниваешь равенство схендлов - нахуя тебе индекс( & 0x7fff )? сравнивай целиком весь хендл(сериал и индекс). и CHandle это не uint64_t, это uint32_t(точнее это класс конечно, но на низком уровне это просто юинт32)то что у тебя без итемс работает - просто совпадение. так звезды сошлись. ты например считываешь с переменной m_SharedCooldownList(и с 8 байт до нее. а это вмт). тебе просто повезло что там нет каких-то данных которые бы тебе помешали. ты считываешь кучу лишнего мусора который тебе нахуй не нужен. зачем? поэтому и крашит потому что хуйню какую-то делаешь.
еще раз,
m_Inventory это не итемы. это инвентарь. m_Inventory.m_hItems вот это уже итемы.
C_DOTA_UnitInventory m_Inventory(offset 0xf58)
+ MNetworkEnable
...
-----members of class C_DOTA_UnitInventory-----
CUtlVector< sSharedCooldownInfo > m_SharedCooldownList(offset 0x8)
CHandle< C_BaseEntity >[19] m_hItems(offset 0x20) //19 шмоток
+ MNetworkEnable
bool[19] m_bItemQueried(offset 0x6c)
int32 m_iParity(offset 0x80)
+ MNetworkEnable
+ MNetworkChangeCallback "OnInventoryParityChanged"
CHandle< C_BaseEntity > m_hInventoryParent(offset 0x84)
+ MNetworkEnable
bool m_bIsActive(offset 0x88)
bool m_bStashEnabled(offset 0x89)
+ MNetworkEnable
CHandle< C_BaseEntity > m_hTransientCastItem(offset 0x8c)
+ MNetworkEnable
bool m_bSendChangedMsg(offset 0xa8)
ну и по секрету скажу
(ent + 0x10)
знаешь что у ентити лежит на 0x10?
class C_BaseEntity(size: 0x580 bytes) extends CEntityInstance
-----members of class CEntityInstance-----
CUtlSymbolLarge m_iszPrivateVScripts(offset 0x8)
+ MNetworkDisable
CEntityIdentity* m_pEntity(offset 0x10)
+ MNetworkEnable
+ MNetworkPriority 56
у ентити на 0x10 лежит айдентити а не хендл)) а у тебя хендл
следовательно
твоя ent это НИХУЯ НЕ СУЩНОСТЬ.
это CEntityIdentity. АЙДЕНТИТИ. это У НЕЕ лежит на 0x10 хендл.
так что иди переименовывай пока не запутался нахуй(ent -> identity).
ну и конечно самый главный вопрос - нахуя ты итерируешь каждую сущность и чекаешь у нее равенство схендла когда ты можешь то же самое сделать быстрее в 100 раз взяв сущность из массива по индексу?(aka GetEntityByIndex) индекс в схендле это не просто какаято циферка, это индекс в массиве.
Последнее редактирование: