Validate profession scenes and fix native workstation and area targeting
clang PCH / build (push) Canceled after 0s
GCC PCH / build (push) Canceled after 0s

This commit is contained in:
Nico committed 2026-10-27 18:01:03 +01:00
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();