diff options
Diffstat (limited to 'src/game-server/character.cpp')
-rw-r--r-- | src/game-server/character.cpp | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp index 1fb9b2fe..7a9372fb 100644 --- a/src/game-server/character.cpp +++ b/src/game-server/character.cpp @@ -22,19 +22,22 @@ #include <cassert> -#include "defines.h" #include "game-server/character.hpp" + +#include "defines.h" +#include "game-server/buysell.hpp" #include "game-server/mapcomposite.hpp" #include "game-server/mapmanager.hpp" +#include "game-server/trade.hpp" #include "net/messagein.hpp" #include "net/messageout.hpp" #include "serialize/characterdata.hpp" Character::Character(MessageIn & msg): Being(OBJECT_CHARACTER, 65535), - mClient(NULL), mTrading(NULL), mDatabaseID(-1), + mClient(NULL), mTransactionHandler(NULL), mDatabaseID(-1), mMoney(0), mGender(0), mHairStyle(0), mHairColor(0), mLevel(0), - mAttributesChanged(true) + mTransaction(TRANS_NONE), mAttributesChanged(true) { // prepare attributes vector mAttributes.resize(NB_ATTRIBUTES_CHAR, 1); @@ -121,3 +124,47 @@ void Character::setMapId(int id) { setMap(MapManager::getMap(id)); } + +void Character::cancelTransaction() +{ + TransactionType t = mTransaction; + mTransaction = TRANS_NONE; + switch (t) + { + case TRANS_TRADE: + static_cast< Trade * >(mTransactionHandler)->cancel(this); + break; + case TRANS_BUYSELL: + static_cast< BuySell * >(mTransactionHandler)->cancel(); + break; + case TRANS_NONE: + return; + } +} + +Trade *Character::getTrading() const +{ + return mTransaction == TRANS_TRADE + ? static_cast< Trade * >(mTransactionHandler) : NULL; +} + +BuySell *Character::getBuySell() const +{ + return mTransaction == TRANS_BUYSELL + ? static_cast< BuySell * >(mTransactionHandler) : NULL; +} + +void Character::setTrading(Trade *t) +{ + cancelTransaction(); + mTransactionHandler = t; + mTransaction = TRANS_TRADE; +} + +void Character::setBuySell(BuySell *t) +{ + cancelTransaction(); + mTransactionHandler = t; + mTransaction = TRANS_BUYSELL; +} + |