修复m_glow

This commit is contained in:
Huoji's
2023-10-08 10:59:59 +00:00
parent 20379c7681
commit 27225439d7
2 changed files with 53 additions and 14 deletions

View File

@@ -78,7 +78,53 @@ extern auto SetStateChanged(Z_CBaseEntity* pEntity, int offset) -> void;
(uintptr_t)(this) + m_key.offset + extra_offset) = val; \
}
#define SCHEMA_FIELD_OFFSET_EX(type, datatableName, varName, extra_offset) \
std::add_lvalue_reference_t<type> varName() { \
static constexpr auto datatable_hash = \
hash_32_fnv1a_const(datatableName); \
static constexpr auto prop_hash = hash_32_fnv1a_const(#varName); \
\
static const auto m_key = \
schema::GetOffset(ThisClass, datatable_hash, #varName, prop_hash); \
\
return *reinterpret_cast<std::add_pointer_t<type>>( \
(uintptr_t)(this) + m_key.offset + extra_offset); \
} \
void varName(type val) { \
static constexpr auto datatable_hash = \
hash_32_fnv1a_const(datatableName); \
static constexpr auto prop_hash = hash_32_fnv1a_const(#varName); \
\
static const auto m_key = \
schema::GetOffset(ThisClass, datatable_hash, #varName, prop_hash); \
\
static const auto m_chain = schema::FindChainOffset(ThisClass); \
\
if (m_chain != 0 && m_key.networked) { \
LOG("Found chain offset %d for %s::%s\n", m_chain, ThisClass, \
#varName); \
Offset::FnNetworkStateChanged((uintptr_t)(this) + m_chain, \
m_key.offset + extra_offset, \
0xFFFFFFFF); \
} else if (m_key.networked) { \
/* WIP: Works fine for most props, but inlined classes in the \
middle of a class will need to have their this pointer \
corrected by the offset .*/ \
LOG("Attempting to call SetStateChanged on on %s::%s\n", \
ThisClass, #varName); \
if (!OffsetIsStruct) \
SetStateChanged((Z_CBaseEntity*)this, \
m_key.offset + extra_offset); \
else \
CALL_VIRTUAL(void, 1, this, m_key.offset + extra_offset, \
0xFFFFFFFF, 0xFFFF); \
} \
*reinterpret_cast<std::add_pointer_t<type>>( \
(uintptr_t)(this) + m_key.offset + extra_offset) = val; \
}
#define SCHEMA_FIELD(type, varName) SCHEMA_FIELD_OFFSET(type, varName, 0)
#define SCHEMA_FIELD_EX(type, dataTableName, varName) \
SCHEMA_FIELD_OFFSET_EX(type, dataTableName, varName, 0)
#define PSCHEMA_FIELD_OFFSET(type, varName, extra_offset) \
auto varName() { \
@@ -323,7 +369,7 @@ class CEntityInstance {
SCHEMA_FIELD(CEntityIdentity*, m_pEntity);
SCHEMA_FIELD(const char*, m_designerName);
};
class CGlowProperty;
class CBaseEntity : public CEntityInstance {
public:
DECLARE_CLASS(CBaseEntity);
@@ -333,6 +379,7 @@ class CBaseEntity : public CEntityInstance {
// SCHEMA_FIELD(Vector, m_vecBaseVelocity)
SCHEMA_FIELD(CCollisionProperty*, m_pCollision)
SCHEMA_FIELD(Vector, m_vecBaseVelocity)
SCHEMA_FIELD_EX(CGlowProperty, "CBaseModelEntity", m_Glow);
auto IsBasePlayerController() -> bool;
auto SpawnClientEntity() -> void;
};

View File

@@ -660,11 +660,7 @@ auto luaApi_SetPlayerGlowColor(lua_State* luaVm) -> int {
const auto b = lua_tonumber(luaVm, 4);
ExcutePlayerAction(playerIndex, [&](CCSPlayerController* playerController) {
playerController->m_hPawn()
.Get<CBaseModelEntity>()
->m_Glow()
.m_fGlowColor(Vector(r, g, b));
playerController->m_hPawn()
.Get<CBaseModelEntity>()
.Get<CCSPlayerPawn>()
->m_Glow()
.m_glowColorOverride(Color(r, g, b, 230));
});
@@ -676,14 +672,10 @@ auto luaApi_SetPlayerGlowEnable(lua_State* luaVm) -> int {
const auto playerIndex = lua_tointeger(luaVm, 1);
const auto isEnable = lua_toboolean(luaVm, 2);
ExcutePlayerAction(playerIndex, [&](CCSPlayerController* playerController) {
playerController->m_hPawn()
.Get<CBaseModelEntity>()
->m_Glow()
.m_bGlowing(isEnable);
playerController->m_hPawn()
.Get<CBaseModelEntity>()
->m_Glow()
.m_iGlowType(3);
playerController->m_hPawn().Get<CCSPlayerPawn>()->m_Glow().m_bGlowing(
isEnable);
playerController->m_hPawn().Get<CCSPlayerPawn>()->m_Glow().m_iGlowType(
3);
});
lua_pop(luaVm, 2);
return 0;