TITANIC: Adding PET Control bot methods

This commit is contained in:
Paul Gilbert 2016-06-26 15:02:55 -04:00
parent 6f063c4703
commit ad873455cf
4 changed files with 77 additions and 7 deletions

View File

@ -1055,6 +1055,16 @@ CTreeItem *CGameObject::petContainerRemove(CGameObject *obj) {
return item;
}
bool CGameObject::petDismissBot(const CString &name) {
CPetControl *pet = getPetControl();
return pet ? pet->dismissBot(name) : false;
}
bool CGameObject::petDoorOrBellbotPresent() const {
CPetControl *pet = getPetControl();
return pet ? pet->isDoorOrBellbotPresent() : false;
}
void CGameObject::petDisplayMessage(int unused, const CString &msg) {
petDisplayMessage(msg);
}

View File

@ -543,6 +543,16 @@ public:
CTreeItem *petContainerRemove(CGameObject *obj);
/**
* Dismiss a bot
*/
bool petDismissBot(const CString &name);
/**
* Is Doorbot or Bellbot present in the current view
*/
bool petDoorOrBellbotPresent() const;
/**
* Display a message in the PET
*/

View File

@ -569,9 +569,9 @@ void CPetControl::summonBot(const CString &name, int val) {
}
void CPetControl::onSummonBot(const CString &name, int val) {
CGameObject *bot = findObject(name, getHiddenRoom());
CGameObject *bot = findBot(name, getHiddenRoom());
if (!bot) {
bot = findObject(name, getRoot());
bot = findBot(name, getRoot());
}
if (bot) {
@ -582,6 +582,46 @@ void CPetControl::onSummonBot(const CString &name, int val) {
}
}
bool CPetControl::dismissBot(const CString &name) {
CGameManager *gameManager = getGameManager();
if (!gameManager)
return false;
CViewItem *view = gameManager->getView();
if (!view)
return false;
bool result = false;
CDismissBotMsg dismissMsg;
for (CTreeItem *treeItem = view->getFirstChild(); treeItem;
treeItem = treeItem->scan(view)) {
if (!treeItem->getName().compareToIgnoreCase(name))
dismissMsg.execute(treeItem);
else
result = true;
}
return result;
}
bool CPetControl::isDoorOrBellbotPresent() const {
CGameManager *gameManager = getGameManager();
if (!gameManager)
return false;
CViewItem *view = gameManager->getView();
if (!view)
return false;
for (CTreeItem *treeItem = view->getFirstChild(); treeItem;
treeItem = treeItem->scan(view)) {
CString name = treeItem->getName();
if (static_cast<CGameObject *>(treeItem) &&
(name.contains("Doorbot") || name.contains("BellBot")))
return true;
}
return false;
}
void CPetControl::startPetTimer(uint timerIndex, uint firstDuration, uint duration, CPetSection *target) {
stopPetTimer(timerIndex);
_timers[timerIndex]._id = addTimer(timerIndex, firstDuration, duration);
@ -600,7 +640,7 @@ void CPetControl::setTimer44(int id, int val) {
getGameManager()->setTimer44(id, val);
}
CGameObject *CPetControl::findObject(const CString &name, CTreeItem *root) {
CGameObject *CPetControl::findBot(const CString &name, CTreeItem *root) {
for (CTreeItem *item = root; item; item = item->scan(root)) {
if (!item->getName().compareToIgnoreCase(name)) {
CGameObject *obj = static_cast<CGameObject *>(item);

View File

@ -98,12 +98,12 @@ private:
*/
bool isBotInView(const CString &name) const;
void setTimer44(int id, int val);
/**
* Find an object under a given root
* Find a bot under a given root
*/
CGameObject *findObject(const CString &name, CTreeItem *root);
CGameObject *findBot(const CString &name, CTreeItem *root);
void setTimer44(int id, int val);
protected:
bool MouseButtonDownMsg(CMouseButtonDownMsg *msg);
bool MouseDragStartMsg(CMouseDragStartMsg *msg);
@ -301,6 +301,16 @@ public:
*/
void onSummonBot(const CString &name, int val);
/**
* Dismiss an NPC
*/
bool dismissBot(const CString &name);
/**
* Returns true if Doorbot or Bellbot present
*/
bool isDoorOrBellbotPresent() const;
/**
* Start a timer for a Pet Area
*/