Skip to content

Commit 94264bd

Browse files
committed
GetMessageData: Fixed Coord/Angle float amx conversion Fixes #332
1 parent f08c8b7 commit 94264bd

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

reapi/src/natives/natives_hookmessage.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ cell AMX_NATIVE_CALL SetMessageData(AMX *amx, cell *params)
188188
break;
189189
case IMessage::ParamType::Angle:
190190
case IMessage::ParamType::Coord:
191-
g_activeMessageContext->setParamFloat(number, *(float *)value);
191+
g_activeMessageContext->setParamFloat(number, amx_CellToFloat(*value));
192192
break;
193193
case IMessage::ParamType::Byte:
194194
case IMessage::ParamType::Char:
@@ -266,10 +266,11 @@ cell AMX_NATIVE_CALL GetMessageData(AMX *amx, cell *params)
266266
case IMessage::ParamType::Angle:
267267
case IMessage::ParamType::Coord:
268268
{
269-
float flValue = g_activeMessageContext->getParamFloat(number);
269+
cell value = amx_FloatToCell(g_activeMessageContext->getParamFloat(number));
270270
if (PARAMS_COUNT > 2)
271-
*dstAddr = flValue;
272-
return flValue;
271+
*dstAddr = value;
272+
273+
return value;
273274
}
274275
case IMessage::ParamType::Entity:
275276
case IMessage::ParamType::Byte:
@@ -346,10 +347,10 @@ cell AMX_NATIVE_CALL GetMessageOrigData(AMX *amx, cell *params)
346347
case IMessage::ParamType::Angle:
347348
case IMessage::ParamType::Coord:
348349
{
349-
float flValue = g_activeMessageContext->getOriginalParamFloat(number);
350+
cell value = amx_FloatToCell(g_activeMessageContext->getOriginalParamFloat(number));
350351
if (PARAMS_COUNT > 2)
351-
*dstAddr = flValue;
352-
return flValue;
352+
*dstAddr = value;
353+
return value;
353354
}
354355
case IMessage::ParamType::Entity:
355356
case IMessage::ParamType::Byte:

reapi/src/type_conversion.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,16 @@ inline size_t indexOfPDataAmx(const T* pdata)
9797
return index;
9898
}
9999

100+
inline cell amx_FloatToCell(REAL x)
101+
{
102+
return *(cell *)&x;
103+
}
104+
105+
inline float amx_CellToFloat(cell x)
106+
{
107+
return *(REAL *)&x;
108+
}
109+
100110
inline cell getAmxVector(Vector& vec)
101111
{
102112
return g_amxxapi.PrepareCellArrayA(reinterpret_cast<cell *>(&vec), 3, true);

0 commit comments

Comments
 (0)