1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-03-17 19:20:49 +00:00

Merge pull request #2621 from Capostrophic/getlos

Avoid using getPtr for object search in scripting (bug #5220)
This commit is contained in:
Andrei Kortunov 2019-12-01 20:04:59 +04:00 committed by GitHub
commit 721a7de8b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 7 deletions

View File

@ -178,6 +178,7 @@
Bug #5211: Screen fades in if the first loaded save is in interior cell Bug #5211: Screen fades in if the first loaded save is in interior cell
Bug #5213: SameFaction script function is broken Bug #5213: SameFaction script function is broken
Bug #5218: Crash when disabling ToggleBorders Bug #5218: Crash when disabling ToggleBorders
Bug #5220: GetLOS crashes when actor isn't loaded
Feature #1774: Handle AvoidNode Feature #1774: Handle AvoidNode
Feature #2229: Improve pathfinding AI Feature #2229: Improve pathfinding AI
Feature #3025: Analogue gamepad movement controls Feature #3025: Analogue gamepad movement controls

View File

@ -382,9 +382,11 @@ namespace MWScript
std::string actorID = runtime.getStringLiteral (runtime[0].mInteger); std::string actorID = runtime.getStringLiteral (runtime[0].mInteger);
runtime.pop(); runtime.pop();
MWWorld::Ptr actor = MWBase::Environment::get().getWorld()->getPtr(actorID, true); MWWorld::Ptr actor = MWBase::Environment::get().getWorld()->searchPtr(actorID, true, false);
Interpreter::Type_Integer value = MWBase::Environment::get().getMechanicsManager()->isActorDetected(actor, observer); Interpreter::Type_Integer value = 0;
if (!actor.isEmpty())
value = MWBase::Environment::get().getMechanicsManager()->isActorDetected(actor, observer);
runtime.push (value); runtime.push (value);
} }
@ -404,9 +406,9 @@ namespace MWScript
runtime.pop(); runtime.pop();
MWWorld::Ptr dest = MWBase::Environment::get().getWorld()->getPtr(actorID,true); MWWorld::Ptr dest = MWBase::Environment::get().getWorld()->searchPtr(actorID, true, false);
bool value = false; bool value = false;
if(dest != MWWorld::Ptr() && source.getClass().isActor() && dest.getClass().isActor()) if (!dest.isEmpty() && source.getClass().isActor() && dest.getClass().isActor())
{ {
value = MWBase::Environment::get().getWorld()->getLOS(source,dest); value = MWBase::Environment::get().getWorld()->getLOS(source,dest);
} }
@ -447,8 +449,9 @@ namespace MWScript
std::string targetID = runtime.getStringLiteral (runtime[0].mInteger); std::string targetID = runtime.getStringLiteral (runtime[0].mInteger);
runtime.pop(); runtime.pop();
MWWorld::Ptr target = MWBase::Environment::get().getWorld()->getPtr(targetID, true); MWWorld::Ptr target = MWBase::Environment::get().getWorld()->searchPtr(targetID, true, false);
MWBase::Environment::get().getMechanicsManager()->startCombat(actor, target); if (!target.isEmpty())
MWBase::Environment::get().getMechanicsManager()->startCombat(actor, target);
} }
}; };

View File

@ -1129,7 +1129,9 @@ namespace MWScript
return; return;
} }
MWWorld::Ptr target = MWBase::Environment::get().getWorld()->getPtr (targetId, false); MWWorld::Ptr target = MWBase::Environment::get().getWorld()->searchPtr(targetId, false, false);
if (target.isEmpty())
return;
MWMechanics::CastSpell cast(ptr, target, false, true); MWMechanics::CastSpell cast(ptr, target, false, true);
cast.playSpellCastingEffects(spell->mId, false); cast.playSpellCastingEffects(spell->mId, false);