Improve AdventureBot travel recovery and destination eligibility
This commit is contained in:
1 parent
321a28640c
commit
49712aadfe
50 files changed
+984
-44
No files matched your search
@@ -1,3 +1,4 @@
|
||||
#include "ClientlessPositioning.h"
|
||||
#include "AdventureSocialActions.h"
|
||||
#include "AdventureLocationMgr.h"
|
||||
#include "AdventureEconomyPolicy.h"
|
||||
@@ -167,12 +168,14 @@ namespace
|
||||
bool Approach(Player* player,AdventureSocialScene& scene,WorldObject* target,AdventureSocialContext& c)
|
||||
{
|
||||
if(!InBounds(player,target,c))return false;
|
||||
Position crowded;bool hasCrowded=false,already=false;
|
||||
if(player->GetExactDist(target)<=3.8f && (scene.Kind=="work_skinning" || AtFront(player,target)) &&
|
||||
((AdventureEconomyPolicy::Economic(scene.Kind) || AdventureProfessionPolicy::Recognized(scene.Kind))?TargetVisible(player,target,scene.Kind):
|
||||
player->IsWithinLOS(target->GetPositionX(),target->GetPositionY(),target->GetPositionZ()+1.5f)))
|
||||
{
|
||||
scene.Approaching=false;
|
||||
return true;
|
||||
already=true;
|
||||
if(ClientlessPositioning::Clearance(player,*player)>=1.1f)
|
||||
{scene.Approaching=false;return true;}
|
||||
}
|
||||
// People are approached in front of their actual facing, not from the
|
||||
// bot's current bearing. Furniture may still be reached from any side.
|
||||
@@ -191,9 +194,15 @@ namespace
|
||||
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()+(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(ClientlessPositioning::Clearance(player,p)<1.1f)
|
||||
{if(!hasCrowded){crowded=p;hasCrowded=true;}continue;}
|
||||
if(!c.Move(p,(AdventureEconomyPolicy::Economic(scene.Kind) || AdventureExplorationPolicy::Inspection(scene.Kind) || AdventureProfessionPolicy::Recognized(scene.Kind))?350:55))continue;
|
||||
ClientlessPositioning::Reserve(player,p);
|
||||
scene.Destination=p;scene.Approaching=true;return true;
|
||||
}
|
||||
if(already){scene.Approaching=false;return true;}
|
||||
if(hasCrowded && c.Move(crowded,(AdventureEconomyPolicy::Economic(scene.Kind) || AdventureExplorationPolicy::Inspection(scene.Kind) || AdventureProfessionPolicy::Recognized(scene.Kind))?350:55))
|
||||
{scene.Destination=crowded;scene.Approaching=true;return true;}
|
||||
return false;
|
||||
}
|
||||
bool OnChair(Player* player,GameObject* chair,float& error)
|
||||
|
||||
Reference in new issue
Block a user