MCPcopy Create free account
hub / github.com/alliedmodders/sourcemod / SetEntityCollisionGroup

Function SetEntityCollisionGroup

extensions/sdktools/vnatives.cpp:1634–1662  ·  view source on GitHub ↗

SetEntityCollisionGroup(int entity, int collisionGroup)

Source from the content-addressed store, hash-verified

1632
1633// SetEntityCollisionGroup(int entity, int collisionGroup)
1634static cell_t SetEntityCollisionGroup(IPluginContext *pContext, const cell_t *params)
1635{
1636 CBaseEntity *pEntity;
1637 ENTINDEX_TO_CBASEENTITY(params[1], pEntity);
1638
1639 int offsetCollisionGroup = -1;
1640 // Retrieve m_hOwnerEntity offset
1641 sm_datatable_info_t offset_data_info;
1642 datamap_t *offsetMap = gamehelpers->GetDataMap(pEntity);
1643 if (!offsetMap || !gamehelpers->FindDataMapInfo(offsetMap, "m_CollisionGroup", &offset_data_info))
1644 {
1645 return pContext->ThrowNativeError("\"SetEntityCollisionGroup\" Failed to retrieve m_CollisionGroup datamap on entity");
1646 }
1647 offsetCollisionGroup = offset_data_info.actual_offset;
1648
1649 // Reimplementation of CBaseEntity::SetCollisionGroup
1650 // https://github.com/ValveSoftware/source-sdk-2013/blob/0d8dceea4310fde5706b3ce1c70609d72a38efdf/sp/src/game/shared/baseentity_shared.cpp#L2477L2484
1651 int *collisionGroup = (int *)((uint8_t *)pEntity + offsetCollisionGroup);
1652 if ((*collisionGroup) != params[2])
1653 {
1654 *collisionGroup = params[2];
1655 // Returns false if CollisionRulesChanged hack isn't supported for this mod
1656 if (!CollisionRulesChanged(pEntity))
1657 {
1658 return pContext->ThrowNativeError("\"SetEntityCollisionGroup\" unsupported mod");
1659 }
1660 }
1661 return 1;
1662}
1663
1664static cell_t EntityCollisionRulesChanged(IPluginContext *pContext, const cell_t *params)
1665{

Callers

nothing calls this directly

Calls 3

CollisionRulesChangedFunction · 0.85
GetDataMapMethod · 0.80
FindDataMapInfoMethod · 0.80

Tested by

no test coverage detected