inline edict_t *BaseEntityToEdict(CBaseEntity *pEntity) { IServerUnknown *pUnk = (IServerUnknown *)pEntity; IServerNetworkable *pNet = pUnk->GetNetworkable(); if(!pNet) return NULL; return pNet->GetEdict(); }
void CSourcePython::OnEntityCreated( CBaseEntity *pEntity ) { edict_t *pEdict; if (EdictFromBaseEntity(pEntity, pEdict)) { IServerUnknown* pServerUnknown = pEdict->GetUnknown(); if (pServerUnknown) pEdict->m_pNetworkable = pServerUnknown->GetNetworkable(); } CALL_LISTENERS(OnEntityCreated, ptr((CBaseEntityWrapper*) pEntity)); }
void CSourcePython::OnEntityCreated( CBaseEntity *pEntity ) { int iIndex = IndexFromBaseEntity(pEntity); edict_t *pEdict = EdictFromIndex(iIndex); if (pEdict) { IServerUnknown* pServerUnknown = pEdict->GetUnknown(); if (pServerUnknown) pEdict->m_pNetworkable = pServerUnknown->GetNetworkable(); } CALL_LISTENERS(OnEntityCreated, iIndex, ptr((CBaseEntityWrapper*) pEntity)); }
SMJS_Entity* GetEntityWrapper(CBaseEntity *pEntity){ if(pEntity == NULL) return NULL; auto ref = gamehelpers->EntityToReference(pEntity); auto it = refs.find(ref); if(it != refs.end()) return it->second; IServerUnknown *pUnk = (IServerUnknown *)pEntity; IServerNetworkable *pNet = pUnk->GetNetworkable(); SMJS_Entity *wrapper = new SMJS_Entity(pEntity); refs.insert(std::make_pair(ref, wrapper)); return wrapper; }
SMJS_Entity* GetEntityWrapper(int32_t ref){ if(ref == -1) return NULL; auto it = refs.find(ref); if(it != refs.end()) return it->second; CBaseEntity *pEntity = gamehelpers->ReferenceToEntity(ref); if(pEntity == NULL) return NULL; IServerUnknown *pUnk = (IServerUnknown *)pEntity; IServerNetworkable *pNet = pUnk->GetNetworkable(); SMJS_Entity *entity = new SMJS_Entity(pEntity); refs.insert(std::pair<cell_t, SMJS_Entity*>(ref, entity)); return entity; }
void SMJS_Entity::SetEntity(CBaseEntity *ent){ if(this->ent != NULL){ if(this->ent != ent){ throw "Cannot set entity twice"; } return; } this->valid = false; if(ent == NULL) return; this->ent = ent; IServerUnknown *pUnk = (IServerUnknown *)ent; IServerNetworkable *pNet = pUnk->GetNetworkable(); if(pNet){ edict = pNet->GetEdict(); entIndex = gamehelpers->IndexOfEdict(edict); } this->valid = true; }