Skip to content

GetMessageOrigData(MsgMsgId) returns the current message ID instead of the original one #387

Open

Description

@Nord1cWarr1or

Summary

GetMessageOrigData with MsgMsgId returns the current message id (getId()) instead of the original one, breaking the native's contract ("Gets the message data original value in the current game message"). All other Original branches use the original getters correctly.

Evidence

reapi/src/natives/natives_hookmessage.cpp (function GetMessageOrigData):

case IMessage::DataType::Dest:
    return static_cast<cell>(g_activeMessageContext->getOriginalDest());   // OK
case IMessage::DataType::Index:
    return g_activeMessageContext->getId();                                // BUG: current id
case IMessage::DataType::Origin:
    *(Vector *)getAmxAddr(amx, params[arg_value]) = g_activeMessageContext->getOriginalOrigin(); // OK
case IMessage::DataType::Edict:
    return indexOfEdictAmx(g_activeMessageContext->getOriginalEdict());    // OK

The correct getter already exists in the interface: virtual int getOriginalId() const = 0; (include/cssdk/engine/IMessageManager.h, IMessageContext).

Repro (Pawn)

// inside a RegisterMessage callback (pre):
SetMessageData(MsgMsgId, 999);
new orig = GetMessageOrigData(MsgMsgId);
// expected: original message id; actual: 999 (the modified value)

Suggested fix

case IMessage::DataType::Index:
    return g_activeMessageContext->getOriginalId();

Environment

  • ReAPI module, current master (verified on local checkout, commit 0686229)
  • ReHLDS ReHLDS-3.x (message manager impl exposes getOriginalId())

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions