mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
67 lines
2.4 KiB
C++
67 lines
2.4 KiB
C++
#ifndef _PLAYERBOT_NEWRPGBASEACTION_H
|
|
#define _PLAYERBOT_NEWRPGBASEACTION_H
|
|
|
|
#include "Duration.h"
|
|
#include "LastMovementValue.h"
|
|
#include "MovementActions.h"
|
|
#include "NewRpgInfo.h"
|
|
#include "NewRpgStrategy.h"
|
|
#include "Object.h"
|
|
#include "ObjectDefines.h"
|
|
#include "ObjectGuid.h"
|
|
#include "PlayerbotAI.h"
|
|
#include "QuestDef.h"
|
|
#include "TravelMgr.h"
|
|
|
|
struct POIInfo
|
|
{
|
|
G3D::Vector2 pos;
|
|
int32 objectiveIdx;
|
|
};
|
|
|
|
/// A base (composition) class for all new rpg actions
|
|
/// All functions that may be shared by multiple actions should be declared here
|
|
/// And we should make all actions composable instead of inheritable
|
|
class NewRpgBaseAction : public MovementAction
|
|
{
|
|
public:
|
|
NewRpgBaseAction(PlayerbotAI* botAI, std::string name) : MovementAction(botAI, name) {}
|
|
|
|
protected:
|
|
/* MOVEMENT RELATED */
|
|
bool MoveFarTo(WorldPosition dest);
|
|
bool MoveWorldObjectTo(ObjectGuid guid, float distance = INTERACTION_DISTANCE);
|
|
bool MoveRandomNear(float moveStep = 50.0f, MovementPriority priority = MovementPriority::MOVEMENT_NORMAL);
|
|
bool ForceToWait(uint32 duration, MovementPriority priority = MovementPriority::MOVEMENT_NORMAL);
|
|
|
|
/* QUEST RELATED CHECK */
|
|
ObjectGuid ChooseNpcOrGameObjectToInteract(bool questgiverOnly = false, float distanceLimit = 0.0f);
|
|
bool HasQuestToAcceptOrReward(WorldObject* object);
|
|
bool InteractWithNpcOrGameObjectForQuest(ObjectGuid guid);
|
|
bool CanInteractWithQuestGiver(Object* questGiver);
|
|
bool IsWithinInteractionDist(Object* object);
|
|
uint32 BestRewardIndex(Quest const* quest);
|
|
bool IsQuestWorthDoing(Quest const* quest);
|
|
bool IsQuestCapableDoing(Quest const* quest);
|
|
|
|
/* QUEST RELATED ACTION */
|
|
bool SearchQuestGiverAndAcceptOrReward();
|
|
bool AcceptQuest(Quest const* quest, ObjectGuid guid);
|
|
bool TurnInQuest(Quest const* quest, ObjectGuid guid);
|
|
bool OrganizeQuestLog();
|
|
|
|
protected:
|
|
bool GetQuestPOIPosAndObjectiveIdx(uint32 questId, std::vector<POIInfo>& poiInfo, bool toComplete = false);
|
|
static WorldPosition SelectRandomGrindPos(Player* bot);
|
|
static WorldPosition SelectRandomCampPos(Player* bot);
|
|
bool SelectRandomFlightTaxiNode(ObjectGuid& flightMaster, uint32& fromNode, uint32& toNode);
|
|
bool RandomChangeStatus(std::vector<NewRpgStatus> candidateStatus);
|
|
bool CheckRpgStatusAvailable(NewRpgStatus status);
|
|
|
|
protected:
|
|
/* FOR MOVE FAR */
|
|
const float pathFinderDis = 70.0f;
|
|
const uint32 stuckTime = 5 * 60 * 1000;
|
|
};
|
|
|
|
#endif |