egametang/ET · error · RpcException
Message: {response.Message} Request: {requestType.FullName}
Error message
Message: {response.Message} Request: {requestType.FullName} What it means
In CallInner, after the switch cases for ERR_NotFoundActor and ERR_MessageTimeout, the response carried an error code that IsRpcNeedThrowException flags as needing to throw — any non-zero error below ERR_WithoutException (200000000). This is the catch-all for unhandled hard RPC errors. The RpcException wraps the server's error code, response.Message, and the request type full name.
Source
Thrown at Packages/cn.etetet.actorlocation/Scripts/Hotfix/Server/MessageLocationSenderComponentSystem.cs:314
await root.TimerComponent.WaitAsync(failTimes * failTimes * 10);
messageLocationSender = messageLocationSenderRef;
if (messageLocationSender == null)
{
throw new RpcException(ErrorCode.ERR_ActorLocationSenderTimeout4, $"{requestType.FullName}");
}
messageLocationSender.ActorId = default;
continue;
}
case ErrorCode.ERR_MessageTimeout:
{
throw new RpcException(response.Error, $"{requestType.FullName}");
}
}
if (ErrorCode.IsRpcNeedThrowException(response.Error))
{
throw new RpcException(response.Error, $"Message: {response.Message} Request: {requestType.FullName}");
}
return response;
}
}
}
[EntitySystemOf(typeof(MessageLocationSenderComponent))]
public static partial class MessageLocationSenderManagerComponentSystem
{
[EntitySystem]
private static void Awake(this MessageLocationSenderComponent self)
{
}
public static MessageLocationSenderOneType Get(this MessageLocationSenderComponent self, int locationType)
{
MessageLocationSenderOneType messageLocationSenderOneType = self.GetChild<MessageLocationSenderOneType>(locationType);View on GitHub (pinned to 5cab01f7a8)
Solutions
- Inspect response.Error (accessible via RpcException.Error property) and response.Message in the exception to identify the specific failure.
- Fix the root cause on the target actor side — check its logs for the originating exception.
- Catch RpcException and handle the specific error code at the application level.
- Verify caller and target run compatible code versions with matching error code definitions.
Defensive patterns
Strategy: try-catch
Try / catch
try
{
IResponse resp = await senderOneType.Call(entityId, iLocationRequest);
}
catch (RpcException e)
{
// Inspect e.Error to determine the specific failure
Log.Error($"RPC failed: error={e.Error} msg={e.Message}");
if (e.Error == ErrorCode.ERR_RpcFail)
{
// target-side exception — check target logs
}
throw;
} Prevention
- Inspect RpcException.Error to identify the specific server-side error.
- Check target actor logs for the originating exception.
- Verify caller and target run compatible code versions.
- Handle specific error codes at the application level rather than relying on generic catch.
When it happens
Trigger: Call(entityId, iLocationRequest) where the target actor returns any error code in the ERR_WithException range (100000000–200000000) that isn't ERR_NotFoundActor or ERR_MessageTimeout — e.g., ERR_RpcFail, ERR_SessionSendOrRecvTimeout, or application-specific hard errors.
Common situations: Application logic on the target actor threw an exception that surfaced as a hard RPC error. Version mismatch introducing new error codes in the 100M range. Session or connection errors during the RPC. Target actor rejected the request with a hard error.
Related errors
- ERR_ActorLocationSenderTimeout3
- ERR_ActorLocationSenderTimeout4
- location db manager not found scene: {root.Name}
- location add failed key: {key} actorId: {actorId} error: {re
- location lock failed key: {key} actorId: {actorId} error: {r
AI-assisted analysis of egametang/ET@5cab01f7a8 (2026-08-13).
Data as JSON: /api/errors/842ce34f439bc1f3.
Report an issue: GitHub.