Validate profession scenes and fix native workstation and area targeting
This commit is contained in:
1 parent
722b513ee0
commit
440c53acd7
17 files changed
+425
-13
No files matched your search
@@ -49,7 +49,7 @@ namespace
|
||||
// participants can see each other's head. Keep native VMAP geometry.
|
||||
return player->GetMap()->isInLineOfSight(player->GetPhaseShift(),
|
||||
player->GetPositionX(),player->GetPositionY(),player->GetPositionZ()+player->GetCollisionHeight(),
|
||||
target->GetPositionX(),target->GetPositionY(),target->GetPositionZ()+target->GetCollisionHeight(),
|
||||
target->GetPositionX(),target->GetPositionY(),target->GetPositionZ()+(AdventureProfessionPolicy::Recognized(kind) && target->ToGameObject()?std::max(1.5f,target->GetCollisionHeight()):target->GetCollisionHeight()),
|
||||
LINEOFSIGHT_ALL_CHECKS,VMAP::ModelIgnoreFlags::Nothing);
|
||||
}
|
||||
std::vector < Unit * > People(Player * player, std::string const & kind, AdventureSocialContext & c)
|
||||
@@ -189,7 +189,7 @@ namespace
|
||||
if(floor<=INVALID_HEIGHT+1||std::fabs(floor-target->GetPositionZ())>3)continue;
|
||||
p.m_positionZ=floor;
|
||||
if(!player->GetMap()->isInLineOfSight(player->GetPhaseShift(),p.GetPositionX(),p.GetPositionY(),floor+((AdventureEconomyPolicy::Economic(scene.Kind) || AdventureProfessionPolicy::Recognized(scene.Kind))?player->GetCollisionHeight():1.5f),
|
||||
target->GetPositionX(),target->GetPositionY(),target->GetPositionZ()+((AdventureEconomyPolicy::Economic(scene.Kind) || AdventureProfessionPolicy::Recognized(scene.Kind))?target->GetCollisionHeight():1.5f),
|
||||
target->GetPositionX(),target->GetPositionY(),target->GetPositionZ()+(AdventureProfessionPolicy::Recognized(scene.Kind) && target->ToGameObject()?std::max(1.5f,target->GetCollisionHeight()):AdventureEconomyPolicy::Economic(scene.Kind)?target->GetCollisionHeight():1.5f),
|
||||
LINEOFSIGHT_ALL_CHECKS,VMAP::ModelIgnoreFlags::Nothing))continue;
|
||||
if(!c.Move(p,(AdventureEconomyPolicy::Economic(scene.Kind) || AdventureExplorationPolicy::Inspection(scene.Kind) || AdventureProfessionPolicy::Recognized(scene.Kind))?350:55))continue;
|
||||
scene.Destination=p;scene.Approaching=true;return true;
|
||||
@@ -566,6 +566,13 @@ bool AdventureSocialActions::Update(Player * p, AdventureSocialScene & s, uint32
|
||||
{
|
||||
if (! InBounds(p, target, c)) return false;
|
||||
if(AdventureProfessionPolicy::Recognized(s.Kind) && !AdventureProfessionTargets::Valid(p,target,s.Kind,c))return false;
|
||||
if (AdventureProfessionPolicy::Recognized(s.Kind) && target->ToGameObject() && !s.Approaching &&
|
||||
(p->GetExactDist(target)>4 || !TargetVisible(p,target,s.Kind)))
|
||||
{
|
||||
if (++s.Repaths>3 || !Approach(p,s,target,c)) return false;
|
||||
// Do not advance a work cue while returning to the workplace.
|
||||
return true;
|
||||
}
|
||||
if (AdventureExplorationPolicy::Inspection(s.Kind))
|
||||
{
|
||||
auto object=target->ToGameObject();
|
||||
|
||||
Reference in new issue
Block a user