summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/being/being.cpp40
-rw-r--r--src/being/being.h6
-rw-r--r--src/being/crazymoves.cpp48
-rw-r--r--src/being/localplayer.cpp9
-rw-r--r--src/being/playerinfo.cpp48
5 files changed, 104 insertions, 47 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,
diff --git a/src/being/being.h b/src/being/being.h
index ff00d5bef..8926e5548 100644
--- a/src/being/being.h
+++ b/src/being/being.h
@@ -1069,9 +1069,9 @@ class Being notfinal : public ActorSprite,
Vector mWalkSpeed;
float mSpeed;
std::string mIp;
- int *mSpriteRemap;
- int *mSpriteHide;
- int *mSpriteDraw;
+ int *mSpriteRemap A_NONNULLPOINTER;
+ int *mSpriteHide A_NONNULLPOINTER;
+ int *mSpriteDraw A_NONNULLPOINTER;
std::string mComment;
#ifdef EATHENA_SUPPORT
std::string mBuyBoard;
diff --git a/src/being/crazymoves.cpp b/src/being/crazymoves.cpp
index 0405a0fcc..9636e6711 100644
--- a/src/being/crazymoves.cpp
+++ b/src/being/crazymoves.cpp
@@ -94,8 +94,12 @@ void CrazyMoves::crazyMove()
void CrazyMoves::crazyMove1()
{
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer ||
+ !playerHandler ||
+ localPlayer->getCurrentAction() == BeingAction::MOVE)
+ {
return;
+ }
// if (!PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION))
// return;
@@ -129,8 +133,12 @@ void CrazyMoves::crazyMove1()
void CrazyMoves::crazyMove2()
{
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer ||
+ !playerHandler ||
+ localPlayer->getCurrentAction() == BeingAction::MOVE)
+ {
return;
+ }
// if (!PacketLimiter::limitPackets(PacketType::PACKET_DIRECTION))
// return;
@@ -176,8 +184,12 @@ void CrazyMoves::crazyMove2()
void CrazyMoves::crazyMove3()
{
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer ||
+ !playerHandler ||
+ localPlayer->getCurrentAction() == BeingAction::MOVE)
+ {
return;
+ }
switch (settings.crazyMoveState)
{
@@ -210,8 +222,11 @@ void CrazyMoves::crazyMove3()
void CrazyMoves::crazyMove4()
{
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer ||
+ localPlayer->getCurrentAction() == BeingAction::MOVE)
+ {
return;
+ }
switch (settings.crazyMoveState)
{
@@ -230,8 +245,11 @@ void CrazyMoves::crazyMove4()
void CrazyMoves::crazyMove5()
{
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer ||
+ localPlayer->getCurrentAction() == BeingAction::MOVE)
+ {
return;
+ }
switch (settings.crazyMoveState)
{
@@ -250,8 +268,11 @@ void CrazyMoves::crazyMove5()
void CrazyMoves::crazyMove6()
{
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer ||
+ localPlayer->getCurrentAction() == BeingAction::MOVE)
+ {
return;
+ }
switch (settings.crazyMoveState)
{
@@ -294,8 +315,11 @@ void CrazyMoves::crazyMove6()
void CrazyMoves::crazyMove7()
{
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer ||
+ localPlayer->getCurrentAction() == BeingAction::MOVE)
+ {
return;
+ }
switch (settings.crazyMoveState)
{
@@ -322,7 +346,7 @@ void CrazyMoves::crazyMove7()
void CrazyMoves::crazyMove8()
{
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer || localPlayer->getCurrentAction() == BeingAction::MOVE)
return;
const Map *const map = localPlayer->getMap();
if (!map)
@@ -431,7 +455,7 @@ void CrazyMoves::crazyMove9()
int dx = 0;
int dy = 0;
- if (localPlayer->getCurrentAction() == BeingAction::MOVE)
+ if (!localPlayer || localPlayer->getCurrentAction() == BeingAction::MOVE)
return;
switch (settings.crazyMoveState)
@@ -452,7 +476,8 @@ void CrazyMoves::crazyMove9()
settings.crazyMoveState = 2;
if (!localPlayer->allowAction())
return;
- playerHandler->changeAction(BeingAction::SIT);
+ if (playerHandler)
+ playerHandler->changeAction(BeingAction::SIT);
break;
case 2:
settings.crazyMoveState = 3;
@@ -467,6 +492,9 @@ void CrazyMoves::crazyMove9()
void CrazyMoves::crazyMoveAm()
{
+ if (!localPlayer)
+ return;
+
settings.crazyMoveState ++;
if (settings.crazyMoveState < mMoveProgram.length())
{
diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp
index af3f3df03..b7d965a43 100644
--- a/src/being/localplayer.cpp
+++ b/src/being/localplayer.cpp
@@ -333,10 +333,11 @@ void LocalPlayer::slowLogic()
weightNoticeTime = 0;
}
- if (!serverFeatures->havePlayerStatusUpdate()
- && mEnableAdvert
- && !mBlockAdvert
- && mAdvertTime < cur_time)
+ if (serverFeatures &&
+ !serverFeatures->havePlayerStatusUpdate() &&
+ mEnableAdvert &&
+ !mBlockAdvert &&
+ mAdvertTime < cur_time)
{
uint8_t smile = BeingFlag::SPECIAL;
if (mTradebot && shopWindow && !shopWindow->isShopEmpty())
diff --git a/src/being/playerinfo.cpp b/src/being/playerinfo.cpp
index 8c7b55639..b3c3f5bb4 100644
--- a/src/being/playerinfo.cpp
+++ b/src/being/playerinfo.cpp
@@ -209,7 +209,9 @@ Inventory *getInventory()
Inventory *getStorageInventory()
{
- return inventoryHandler->getStorage();
+ if (inventoryHandler)
+ return inventoryHandler->getStorage();
+ return nullptr;
}
#ifdef EATHENA_SUPPORT
@@ -250,21 +252,24 @@ void equipItem(const Item *const item, const Sfx sfx)
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::EQUIP);
- inventoryHandler->equipItem(item);
+ if (inventoryHandler)
+ inventoryHandler->equipItem(item);
}
void unequipItem(const Item *const item, const Sfx sfx)
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::UNEQUIP);
- inventoryHandler->unequipItem(item);
+ if (inventoryHandler)
+ inventoryHandler->unequipItem(item);
}
void useItem(const Item *const item, const Sfx sfx)
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::USE);
- inventoryHandler->useItem(item);
+ if (inventoryHandler)
+ inventoryHandler->useItem(item);
}
void useEquipItem(const Item *const item, const Sfx sfx)
@@ -276,7 +281,8 @@ void useEquipItem(const Item *const item, const Sfx sfx)
{
if (mProtectedItems.find(item->getId()) == mProtectedItems.end())
{
- inventoryHandler->useCard(item);
+ if (inventoryHandler)
+ inventoryHandler->useCard(item);
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::USECARD);
}
@@ -289,20 +295,23 @@ void useEquipItem(const Item *const item, const Sfx sfx)
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::UNEQUIP);
- inventoryHandler->unequipItem(item);
+ if (inventoryHandler)
+ inventoryHandler->unequipItem(item);
}
else
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::EQUIP);
- inventoryHandler->equipItem(item);
+ if (inventoryHandler)
+ inventoryHandler->equipItem(item);
}
}
else
{
if (mProtectedItems.find(item->getId()) == mProtectedItems.end())
{
- inventoryHandler->useItem(item);
+ if (inventoryHandler)
+ inventoryHandler->useItem(item);
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::USE);
}
@@ -320,13 +329,15 @@ void useEquipItem2(const Item *const item, const Sfx sfx)
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::UNEQUIP);
- inventoryHandler->unequipItem(item);
+ if (inventoryHandler)
+ inventoryHandler->unequipItem(item);
}
else
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::EQUIP);
- inventoryHandler->equipItem(item);
+ if (inventoryHandler)
+ inventoryHandler->equipItem(item);
}
}
else
@@ -335,7 +346,8 @@ void useEquipItem2(const Item *const item, const Sfx sfx)
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::USE);
- inventoryHandler->useItem(item);
+ if (inventoryHandler)
+ inventoryHandler->useItem(item);
}
}
}
@@ -347,7 +359,8 @@ void dropItem(const Item *const item, const int amount, const Sfx sfx)
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::DROP);
- inventoryHandler->dropItem(item, amount);
+ if (inventoryHandler)
+ inventoryHandler->dropItem(item, amount);
}
}
@@ -355,7 +368,8 @@ void pickUpItem(const FloorItem *const item, const Sfx sfx)
{
if (sfx == Sfx_true)
ItemSoundManager::playSfx(item, ItemSoundEvent::PICKUP);
- playerHandler->pickUp(item);
+ if (playerHandler)
+ playerHandler->pickUp(item);
}
// --- Misc -------------------------------------------------------------------
@@ -582,18 +596,18 @@ BeingId getMercenaryId()
void updateMoveAI()
{
- if (mMercenary)
+ if (mMercenary && mercenaryHandler)
mercenaryHandler->moveToMaster();
- if (mHomunculus)
+ if (mHomunculus && homunculusHandler)
homunculusHandler->moveToMaster();
}
void updateAttackAi(const BeingId targetId,
const Keep keep)
{
- if (mMercenary)
+ if (mMercenary && mercenaryHandler)
mercenaryHandler->attack(targetId, keep);
- if (mHomunculus)
+ if (mHomunculus && homunculusHandler)
homunculusHandler->attack(targetId, keep);
}