// MAIN.H class AdminInterfaceListner { public: virtual void OnAdminInterfaceUnload() = 0; virtual void Client_Authorized(int id) = 0; }; class AdminInterface { public: virtual bool RegisterFlag(const char *Class, const char *Flag, const char *Description) = 0; virtual bool IsClient(int id) = 0; virtual bool HasFlag(int id, const char *Flag) = 0; virtual int GetInterfaceVersion() = 0; virtual const char* GetModName() = 0; virtual void AddEventListner(AdminInterfaceListner *ptr) = 0; virtual void RemoveListner(AdminInterfaceListner *ptr) = 0; }; class CESP : public ISmmPlugin, public IMetamodListener, public AdminInterfaceListner { ... public: void OnAdminInterfaceUnload() { m_AdminManager = NULL; }; void Client_Authorized(int id) { }; ... public: AdminInterface *m_AdminManager; }; // MAIN.CPP void CESP::AllPluginsLoaded() { if(m_AdminManager) return; void *addr = g_SMAPI->MetaFactory("AdminInterface", NULL, NULL); if(addr) { m_AdminManager = (AdminInterface *)addr; m_AdminManager->AddEventListner(this); } } // PLAYER.CPP void CPlayer::Active(edict_t *pEntity) { ... // HERE IT CRASHES WITHOUT BAT (I DON'T KNOW IF IT CRASHES WITH BAT TOO) // BUT IT CRASHES NOT FOR ALL PEOPLE if(!this->m_bIsAdmin && !this->m_bIsBot && g_ESP.m_AdminManager) { const int index = g_ESP.m_Engine->IndexOfEdict(pEntity); if(g_ESP.m_AdminManager->HasFlag(index, "kick")) { this->m_bIsAdmin = true; } } }