SetEntityCollisionGroup(int entity, int collisionGroup)
| 1632 | |
| 1633 | // SetEntityCollisionGroup(int entity, int collisionGroup) |
| 1634 | static 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 | |
| 1664 | static cell_t EntityCollisionRulesChanged(IPluginContext *pContext, const cell_t *params) |
| 1665 | { |
nothing calls this directly
no test coverage detected