- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 600
- Реакции
- 16
В Валоранте адекватное определение того, что именно игрок держит в руках (будь то Vandal или ульта рейза), порой превращается в костыльный забег. Делюсь рабочим методом через ObjID.
Логика тут стандартная для external-проектов: читаем инвентарь актора, выходим на текущий используемый предмет и дергаем его ID.
Техническая реализация на C++:
Далее идет обычный свитч-кейс. Да, это хардкод, но для тех, кто не хочет возиться с FName или чтением строк из памяти напрямую — вариант вполне живучий.
В основном цикле это просто вешается на структуру павна:
Риски и нюансы:
Этот метод требует актуальных оффсетов Inventory, CurrentEquipable и самого ObjID. Если игра обновляется, ID предметов могут поплыть, хотя обычно они статичны долгое время.
Кто пробовал тянуть названия через FNamePool в текущем патче, есть ли профит по производительности или безопасности? Пишите свои мысли по реализации нормального инвентарь-чекера.
Логика тут стандартная для external-проектов: читаем инвентарь актора, выходим на текущий используемый предмет и дергаем его ID.
Техническая реализация на C++:
Код:
inline auto GetCurrentWeapon(uintptr_t Actor) -> std::string {
auto Inventory = Driver::Read<intptr_t>(Actor + Offsets::Inventory);
intptr_t CurrentEquip = Driver::Read<intptr_t>(Inventory + Offsets::CurrentEquipable);
int weaponObj = Driver::Read<int>(CurrentEquip + Offsets::ObjID);
return GetWeaponName(weaponObj);
}
Далее идет обычный свитч-кейс. Да, это хардкод, но для тех, кто не хочет возиться с FName или чтением строк из памяти напрямую — вариант вполне живучий.
- 14391538 — Knife
- 14228826 — Classic
- 14344465 — Shorty
- 14337836 — Sheriff
- 14318008 — Frenzy
- 14332155 — Ghost
- 14381675 — Stinger
- 14372761 — Spectre
- 14311523 — Bucky
- 14307093 — Judge
- 14291226 — Bulldog
- 14359498 — Guardian
- 14296107 — Phantom
- 14282114 — Vandal
- 14367503 — Marshal
- 14348192 — Operator
- 14277573 — Ares
- 14273931 — Odin
- 14246916 — Spike
- 14246939 — Defuser
- 14231466 — Orb
- 14229727 — Dark Cover (Omen)
- 14230055 — Paranoia (Omen)
- 14210631 — Raze Ult
- 14228592 — Sage Revive
- 14213404 — TOUR DE FORCE (Chamber)
- 14225817 — Neon Ult
- 0 — AFK
В основном цикле это просто вешается на структуру павна:
Код:
pawn.WeaponName = GetCurrentWeapon(pawn.Player);
Риски и нюансы:
Этот метод требует актуальных оффсетов Inventory, CurrentEquipable и самого ObjID. Если игра обновляется, ID предметов могут поплыть, хотя обычно они статичны долгое время.
Кто пробовал тянуть названия через FNamePool в текущем патче, есть ли профит по производительности или безопасности? Пишите свои мысли по реализации нормального инвентарь-чекера.