Интересная идея с ghost hero. Я бы не додумался.
* * *
Крашится по правому клику на герое.
Можете прокомментировать вот этот участок кода:
- Код: Выделить всё
_Hero_* hero = (_Hero_*)(*(int*)(c->ebp + 8));
if((int)(hero->disguise) > -1)
{
CALL_2(_Hero_*, __thiscall, 0x406410, (_Hero_*)(pHeroes[hero->owner_id]), hero);
*(int*)(c->ebp + 8) = pHeroes[hero->owner_id];
hero = (_Hero_*)(*(int*)(c->ebp + 8));
...
Вместо _Hero_* hero = (_Hero_*)(*(int*)(c->ebp + 8)); лучше писать _Hero_* hero = *(_Hero_**)(c->ebp + 8);
hero->disguise почему-то беззнаковоев хедерах, но можно и без привидения типа обойтись: заменить условие (int)(hero->disguise) > -1 на hero->disguise != -1.
Кажется, не совсем то написал, что хотел - в плане распределения ghost heroes по ячейкам. Не
- Код: Выделить всё
pHeroes[hero->owner_id]
а что-то вроде
- Код: Выделить всё
pHeroes[o_ActivePlayerID]
в общем id игрока, который просматривает, а не которого.
лучше писать _Hero_* hero = *(_Hero_**)(c->ebp + 8);
У меня так не компилируется.
Можете прокомментировать вот этот участок кода:
Получаем указатель на просматриваемого героя, копируем его в призрачного героя, подменяем для процедуры анализа героя - настоящего на призрачного и, наконец, работаем с призрачным героем и в своем коде.
Крашится по правому клику на герое.
Ну, я бы не стал выкладывать что-то, если бы у меня совсем не работало. Вот не знаю, почему у Вас крашится, а у меня показывает то, что планировал...