-
Автор темы
- #21
я так понимаю тут в кеш добавлять?m_pCustomData->m_vecEquipped.push_back({ unClass, unSlot });
я так понимаю тут в кеш добавлять?m_pCustomData->m_vecEquipped.push_back({ unClass, unSlot });
myItem->Equip();я так понимаю тут в кеш добавлять?
через CGCClient по идее можно же сделать?myItem->Equip();
SOUpdate(myItem);
дачерез CGCClient по идее можно же сделать?
классы в доте какие-то другие или просто ctrl + c со слитых сурсов?
ну как сказать. суть одна и та же но придется тебе там подредачить оффсеты хуеты и тдклассы в доте какие-то другие или просто ctrl + c со слитых сурсов?
а ты через че меняешь кеш?ну как сказать. суть одна и та же но придется тебе там подредачить оффсеты хуеты и тд
а ты через че меняешь кеш?
void DispatchSOUpdate(
SOID_t id,
SharedObject* obj,
ESOCacheEvent event_type
) const
{
for (const auto& listener : GetSOListeners())
{
listener->CallVFunc<SOUpdated_VFTable_Index>(id, obj, event_type);
}
}
я имею ввиду, ты используешь gc чтобы работать с кешем?C++:void DispatchSOUpdate( SOID_t id, SharedObject* obj, ESOCacheEvent event_type ) const { for (const auto& listener : GetSOListeners()) { listener->CallVFunc<SOUpdated_VFTable_Index>(id, obj, event_type); } }
через клиент. клиент содержит слушателей(и также является диспетчером. у меня ребилд диспатча, есть еще габеновская функа для диспатча). слушатели реагируют на апдейты.я имею ввиду, ты используешь gc чтобы работать с кешем?
CGameEventManager?через клиент. клиент содержит слушателей(и также является диспетчером. у меня ребилд диспатча, есть еще габеновская функа для диспатча). слушатели реагируют на апдейты.
какой ивент менеджер? при чем он здесь? это внутриигровой компонент, он не связан с экономикой/сетьюCGameEventManager?
Один не скромный вопрос, как ты нашел ее? Я ищу ее по хрефам и как-то все впустуюC++:void DispatchSOUpdate( SOID_t id, SharedObject* obj, ESOCacheEvent event_type ) const { for (const auto& listener : GetSOListeners()) { listener->CallVFunc<SOUpdated_VFTable_Index>(id, obj, event_type); } }
это ребилд если ты не заметил, я ничего не искал.Один не скромный вопрос, как ты нашел ее? Я ищу ее по хрефам и как-то все впустую
так ты ее вызываешь через индекс, а как ты его нашел?SOUpdated_VFTable_Index
? а сурсы и дилибы нафига нужны? "ничего не искал" имелось ввиду внутри игры(сиги и тд). искал я как раз в дилибах и сурсах.так ты ее вызываешь через индекс, а как ты его нашел?
так в дибилах класс очень маленький, все остальное функи вызываются другими, как ты нашел индекс?? а сурсы и дилибы нафига нужны? "ничего не искал" имелось ввиду внутри игры(сиги и тд). искал я как раз в дилибах и сурсах.
чет ты тупишь жоска.так в дибилах класс очень маленький, все остальное функи вызываются другими, как ты нашел индекс?
чет ты тупишь жоска.
ты думал нахуя мне символьная константа SOUpdated_VFTable_Index ? для того чтобы понимать что это и откуда оно взялось
SOUpdated очевидно это имя функции
_VFTable_Index это значит что константа представляет индекс в виртуальной таблице.
Посмотреть вложение 203651
Посмотреть вложение 203652
Посмотреть вложение 203653
либо еще проще
export
void UnlockDotaPlus()//invoke from main thread
{
const auto* SOCachePtr = GCClient::GetInstance()->GetInventorySOCache();
if (SOCachePtr) {
auto PlusCache = SOCachePtr->GetPlusAccountCache();
Logger::LogInfo("SOTypeCache GameAccountPlus Cache 0x%p\n", PlusCache);
if (PlusCache) {
for (const auto& objs = PlusCache->GetObjects(); const auto & obj : objs)
{
if (obj->IsGameAccountPlus())
{
Logger::LogInfo("SOTypeCache GameAccountPlus 0x%p\n", obj);
auto& accountProto = static_cast<CDOTAGameAccountPlus*>(obj)->GetProto();
accountProto.set_plus_flags(0);
accountProto.set_plus_status(1);//0 = lock, 1 = unlock
GCClient::GetInstance()->
DispatchSOUpdate(
SOCachePtr->GetOwner(),
obj,
ESOCacheEvent::eSOCacheEvent_Incremental
);
return;
}
}
Logger::LogError("UnlockDotaPlus: Could not get GameAccountPlus from cache");
}
else Logger::LogError("UnlockDotaPlus: PlusCache is nullptr");
}
else Logger::LogError("UnlockDotaPlus: SOCache is nullptr");
throw std::runtime_error{"UnlockDotaPlus -> failed to unlock dota plus."};
}
SOCache* GCClient::GetInventorySOCache() constкак вот тут ты получил SOCachePtr?Код:export void UnlockDotaPlus()//invoke from main thread { const auto* SOCachePtr = GCClient::GetInstance()->GetInventorySOCache(); if (SOCachePtr) { auto PlusCache = SOCachePtr->GetPlusAccountCache(); Logger::LogInfo("SOTypeCache GameAccountPlus Cache 0x%p\n", PlusCache); if (PlusCache) { for (const auto& objs = PlusCache->GetObjects(); const auto & obj : objs) { if (obj->IsGameAccountPlus()) { Logger::LogInfo("SOTypeCache GameAccountPlus 0x%p\n", obj); auto& accountProto = static_cast<CDOTAGameAccountPlus*>(obj)->GetProto(); accountProto.set_plus_flags(0); accountProto.set_plus_status(1);//0 = lock, 1 = unlock GCClient::GetInstance()-> DispatchSOUpdate( SOCachePtr->GetOwner(), obj, ESOCacheEvent::eSOCacheEvent_Incremental ); return; } } Logger::LogError("UnlockDotaPlus: Could not get GameAccountPlus from cache"); } else Logger::LogError("UnlockDotaPlus: PlusCache is nullptr"); } else Logger::LogError("UnlockDotaPlus: SOCache is nullptr"); throw std::runtime_error{"UnlockDotaPlus -> failed to unlock dota plus."}; }
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz