Fix crashes when custom plugin actions fail due to immutable state

This commit is contained in:
ζeh Matt 2023-06-24 16:20:21 +03:00
parent 9e57fcc6d4
commit cdb16bf8bb
No known key found for this signature in database
GPG Key ID: 18CE582C71A225B0
1 changed files with 18 additions and 10 deletions

View File

@ -1109,20 +1109,28 @@ GameActions::Result ScriptEngine::QueryOrExecuteCustomGameAction(const CustomAct
GameActions::Result ScriptEngine::DukToGameActionResult(const DukValue& d)
{
auto result = GameActions::Result();
result.Error = static_cast<GameActions::Status>(AsOrDefault<int32_t>(d["error"]));
result.ErrorTitle = AsOrDefault<std::string>(d["errorTitle"]);
result.ErrorMessage = AsOrDefault<std::string>(d["errorMessage"]);
result.Cost = AsOrDefault<int32_t>(d["cost"]);
auto expenditureType = AsOrDefault<std::string>(d["expenditureType"]);
if (!expenditureType.empty())
if (d.type() == DUK_TYPE_OBJECT)
{
auto expenditure = StringToExpenditureType(expenditureType);
if (expenditure != ExpenditureType::Count)
result.Error = static_cast<GameActions::Status>(AsOrDefault<int32_t>(d["error"]));
result.ErrorTitle = AsOrDefault<std::string>(d["errorTitle"]);
result.ErrorMessage = AsOrDefault<std::string>(d["errorMessage"]);
result.Cost = AsOrDefault<int32_t>(d["cost"]);
auto expenditureType = AsOrDefault<std::string>(d["expenditureType"]);
if (!expenditureType.empty())
{
result.Expenditure = expenditure;
auto expenditure = StringToExpenditureType(expenditureType);
if (expenditure != ExpenditureType::Count)
{
result.Expenditure = expenditure;
}
}
}
else
{
result.Error = GameActions::Status::Unknown;
result.ErrorTitle = "Unknown";
result.ErrorMessage = "Unknown";
}
return result;
}