mirror of https://github.com/OpenRCT2/OpenRCT2.git
Fix crashes when custom plugin actions fail due to immutable state
This commit is contained in:
parent
9e57fcc6d4
commit
cdb16bf8bb
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue