summaryrefslogtreecommitdiff
path: root/src/being/being.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/being/being.cpp')
-rw-r--r--src/being/being.cpp40
1 files changed, 27 insertions, 13 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp
index 27cebc99c..4ba600294 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -177,8 +177,9 @@ Being::Being(const BeingId id,
mIsGM(false),
mType(type),
mSpeechBubble(nullptr),
- mWalkSpeed(playerHandler->getDefaultWalkSpeed()),
- mSpeed(playerHandler->getDefaultWalkSpeed().x),
+ mWalkSpeed(playerHandler ? playerHandler->getDefaultWalkSpeed()
+ : Vector(1, 1, 1)),
+ mSpeed(playerHandler ? playerHandler->getDefaultWalkSpeed().x : 0),
mIp(),
mSpriteRemap(new int[20]),
mSpriteHide(new int[20]),
@@ -423,9 +424,16 @@ void Being::setSubtype(const BeingTypeId subtype,
mYDiff = mInfo->getSortOffsetY();
const int speed = mInfo->getWalkSpeed();
if (!speed)
- setWalkSpeed(playerHandler->getDefaultWalkSpeed());
+ {
+ if (playerHandler)
+ setWalkSpeed(playerHandler->getDefaultWalkSpeed());
+ else
+ setWalkSpeed(Vector(1, 1, 0));
+ }
else
+ {
setWalkSpeed(Vector(speed, speed, 0));
+ }
}
}
else if (mType == ActorType::Player)
@@ -577,7 +585,7 @@ void Being::setSpeech(const std::string &text, const std::string &channel,
}
const int speech = mSpeechType;
- if (speech == BeingSpeech::TEXT_OVERHEAD && userPalette)
+ if (speech == BeingSpeech::TEXT_OVERHEAD)
{
delete mText;
mText = new Text(mSpeech,
@@ -592,8 +600,11 @@ void Being::setSpeech(const std::string &text, const std::string &channel,
const bool isShowName = (speech == BeingSpeech::NAME_IN_BUBBLE);
if (!mSpeechBubble)
createSpeechBubble();
- mSpeechBubble->setCaption(isShowName ? mName : "");
- mSpeechBubble->setText(mSpeech, isShowName);
+ if (mSpeechBubble)
+ {
+ mSpeechBubble->setCaption(isShowName ? mName : "");
+ mSpeechBubble->setText(mSpeech, isShowName);
+ }
}
}
@@ -894,7 +905,9 @@ void Being::handleAttack(Being *const victim, const int damage,
reset();
mActionTime = tick_time;
- if (!serverFeatures->haveAttackDirections() && this != localPlayer)
+ if (serverFeatures &&
+ !serverFeatures->haveAttackDirections() &&
+ this != localPlayer)
{
const uint8_t dir = calcDirection(victim->getTileX(),
victim->getTileY());
@@ -2287,7 +2300,7 @@ void Being::updateSprite(const unsigned int slot, const int id,
std::string color, const unsigned char colorId,
const bool isWeapon, const bool isTempSprite)
{
- if (slot >= charServerHandler->maxSprite())
+ if (!charServerHandler || slot >= charServerHandler->maxSprite())
return;
if (slot >= static_cast<unsigned int>(mSpriteIDs.size()))
@@ -2302,7 +2315,7 @@ void Being::setSprite(const unsigned int slot, const int id,
std::string color, const unsigned char colorId,
const bool isWeapon, const bool isTempSprite)
{
- if (slot >= charServerHandler->maxSprite())
+ if (!charServerHandler || slot >= charServerHandler->maxSprite())
return;
if (slot >= static_cast<unsigned int>(size()))
@@ -2509,7 +2522,7 @@ bool Being::updateFromCache()
if (mAdvanced)
{
const int flags = entry->getFlags();
- if (!serverFeatures->haveVending())
+ if (serverFeatures && !serverFeatures->haveVending())
mShop = ((flags & BeingFlag::SHOP) != 0);
mAway = ((flags & BeingFlag::AWAY) != 0);
mInactive = ((flags & BeingFlag::INACTIVE) != 0);
@@ -2518,7 +2531,7 @@ bool Being::updateFromCache()
}
else
{
- if (!serverFeatures->haveVending())
+ if (serverFeatures && !serverFeatures->haveVending())
mShop = false;
mAway = false;
mInactive = false;
@@ -2564,7 +2577,7 @@ void Being::addToCache() const
if (isAdvanced())
{
int flags = 0;
- if (!serverFeatures->haveVending() && mShop)
+ if (serverFeatures && !serverFeatures->haveVending() && mShop)
flags += BeingFlag::SHOP;
if (mAway)
flags += BeingFlag::AWAY;
@@ -2650,7 +2663,8 @@ void Being::talkTo() const
if (!PacketLimiter::limitPackets(PacketType::PACKET_NPC_TALK))
return;
- npcHandler->talk(mId);
+ if (npcHandler)
+ npcHandler->talk(mId);
}
void Being::draw(Graphics *const graphics,