summaryrefslogtreecommitdiff
path: root/src/being
diff options
context:
space:
mode:
Diffstat (limited to 'src/being')
-rw-r--r--src/being/being.cpp18
-rw-r--r--src/being/being.h7
2 files changed, 20 insertions, 5 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp
index 399b3883c..5c89ba579 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -177,6 +177,7 @@ Being::Being(const int id, const Type type, const uint16_t subtype,
mPvpRank(0),
mNumber(100),
mLook(0),
+ mUsageCounter(1),
mHairColor(0),
mErased(false),
mEnemy(false),
@@ -3214,8 +3215,12 @@ void Being::addPet(const int id)
if (!actorManager || !config.getBoolValue("usepets"))
return;
- if (findChildPet(id))
+ Being *const pet = findChildPet(id);
+ if (pet)
+ {
+ pet->incUsage();
return;
+ }
Being *const being = actorManager->createBeing(
id, ActorSprite::PET, 0);
@@ -3252,10 +3257,13 @@ void Being::removePet(const int id)
Being *const pet = *it;
if (pet && pet->mId == id)
{
- pet->setOwner(nullptr);
- actorManager->erase(pet);
- mPets.erase(it);
- delete pet;
+ if (!pet->decUsage())
+ {
+ pet->setOwner(nullptr);
+ actorManager->erase(pet);
+ mPets.erase(it);
+ delete pet;
+ }
}
}
}
diff --git a/src/being/being.h b/src/being/being.h
index a93d0e3db..56319c352 100644
--- a/src/being/being.h
+++ b/src/being/being.h
@@ -924,6 +924,12 @@ class Being : public ActorSprite, public ConfigListener
void recreateItemParticles();
+ void incUsage()
+ { mUsageCounter ++; }
+
+ int decUsage()
+ { return --mUsageCounter; }
+
protected:
/**
* Updates name's location.
@@ -1084,6 +1090,7 @@ class Being : public ActorSprite, public ConfigListener
unsigned int mNumber;
int mPetId;
int mLook;
+ int mUsageCounter;
unsigned char mHairColor;
bool mErased;
bool mEnemy;