Hello.
I am trying to set my own think and touch callbacks for entities in module, for example in HLSDK we can do it with macro:
PHP Code:
#define SetThink( a ) m_pfnThink = static_cast <void (CBaseEntity::*)(void)> (a)
#define SetTouch( a ) m_pfnTouch = static_cast <void (CBaseEntity::*)(CBaseEntity *)> (a)
My code is:
PHP Code:
#define m_pfnThink 4
#ifdef _WIN32
#define m_pfnTouch 5
#define PrivateToEdict(pPrivate) (*(entvars_t **)((char*)pPrivate + 4))->pContainingEntity
#elif __linux__
#define m_pfnTouch 6
#define PrivateToEdict(pPrivate) (*(entvars_t **)pPrivate)->pContainingEntity
#endif
...
...
// For example setting touch callback to entity in some function:
*((void**)pAmmoBox->pvPrivateData + m_pfnTouch) = (void*)(Ammo_Touch);
...
...
#ifdef _WIN32
void __fastcall Ammo_Touch(void *pPrivate, int i, void *pPrivate2)
#elif __linux__
void Ammo_Touch(void *pPrivate, void *pPrivate2)
#endif
{
print_srvconsole("AmmoBox Touch! (%d %d) \n",
ENTINDEX(PrivateToEdict(pPrivate)), ENTINDEX(PrivateToEdict(pPrivate2)));
}
On windows everything is okay, i can see "AmmoBox Touch! (100 500)" in server console when i'm touch entity, callback is working fine. But on linux, this code don't work. Any help?
__________________