diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-02-20 18:06:03 +0000 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2008-02-20 18:06:03 +0000 |
commit | d8214f7e46ec507dac603ea2a108410f5f64a4bd (patch) | |
tree | 1a04035a97c81ef0aa9e2c43d205653af17b004c /src | |
parent | 9200c6879214c7ebca52c271e29ad0ee7f69d0b6 (diff) | |
download | mana-d8214f7e46ec507dac603ea2a108410f5f64a4bd.tar.gz mana-d8214f7e46ec507dac603ea2a108410f5f64a4bd.tar.bz2 mana-d8214f7e46ec507dac603ea2a108410f5f64a4bd.tar.xz mana-d8214f7e46ec507dac603ea2a108410f5f64a4bd.zip |
Merged revisions 3790,3799,3801-3807,3809-3810,3812-3813,3815-3816,3818-3821 via svnmerge from
https://themanaworld.svn.sourceforge.net/svnroot/themanaworld/tmw/branches/0.0
........
r3790 | b_lindeijer | 2007-12-18 14:54:17 +0100 (Tue, 18 Dec 2007) | 3 lines
Remember to delete the progressbar and label also when the game was not
started.
........
r3801 | b_lindeijer | 2007-12-21 12:56:23 +0100 (Fri, 21 Dec 2007) | 2 lines
Fixed shop list box not to scroll up when the selection is removed.
........
r3802 | b_lindeijer | 2007-12-21 13:37:17 +0100 (Fri, 21 Dec 2007) | 2 lines
Added logging of error on PHYSFS_addToSearchPath.
........
r3803 | b_lindeijer | 2007-12-21 15:56:38 +0100 (Fri, 21 Dec 2007) | 3 lines
Fixed inventory size not matching the size assumed by eAthena and related
memory corruption and increased default chat log length.
........
r3804 | the_enemy | 2007-12-21 16:07:20 +0100 (Fri, 21 Dec 2007) | 1 line
Attempted to fix client freeze when unable to connect to update host, and added exit dialog
........
r3805 | b_lindeijer | 2007-12-22 16:24:14 +0100 (Sat, 22 Dec 2007) | 2 lines
Updated version to 0.0.24. Release data set to tomorrow, we'll see.
........
r3806 | b_lindeijer | 2007-12-22 21:42:35 +0100 (Sat, 22 Dec 2007) | 2 lines
Make sure chat messages are also trimmed for the local player.
........
r3809 | crush_tmw | 2007-12-23 03:16:53 +0100 (Sun, 23 Dec 2007) | 1 line
Particle images are now reference-counted properly. Avoided attempts to load "data/graphics/" when a monster or equipment piece has no sprite. Error placeholder is now used when attempting to load a sprite definition file that doesn't exist.
........
r3810 | b_lindeijer | 2007-12-24 02:20:42 +0100 (Mon, 24 Dec 2007) | 2 lines
Updated release date.
........
r3812 | the_enemy | 2007-12-24 15:16:15 +0100 (Mon, 24 Dec 2007) | 1 line
Minor update, fixed disconnection dialog
........
r3813 | b_lindeijer | 2007-12-24 15:45:34 +0100 (Mon, 24 Dec 2007) | 2 lines
Fixed compile warning.
........
r3816 | b_lindeijer | 2007-12-25 13:31:21 +0100 (Tue, 25 Dec 2007) | 2 lines
Fixed year. :)
........
r3818 | b_lindeijer | 2007-12-25 23:11:55 +0100 (Tue, 25 Dec 2007) | 2 lines
Updated CMake file.
........
r3821 | b_lindeijer | 2007-12-26 19:06:15 +0100 (Wed, 26 Dec 2007) | 2 lines
Fixed year in README too.
........
Diffstat (limited to 'src')
-rw-r--r-- | src/game.cpp | 31 | ||||
-rw-r--r-- | src/gui/inventorywindow.cpp | 2 | ||||
-rw-r--r-- | src/gui/shoplistbox.cpp | 4 | ||||
-rw-r--r-- | src/gui/updatewindow.cpp | 15 | ||||
-rw-r--r-- | src/inventory.cpp | 6 | ||||
-rw-r--r-- | src/localplayer.cpp | 1 | ||||
-rw-r--r-- | src/localplayer.h | 4 | ||||
-rw-r--r-- | src/main.cpp | 3 | ||||
-rw-r--r-- | src/monster.cpp | 8 | ||||
-rw-r--r-- | src/net/chathandler.cpp | 1 | ||||
-rw-r--r-- | src/openglgraphics.cpp | 2 | ||||
-rw-r--r-- | src/particleemitter.cpp | 35 | ||||
-rw-r--r-- | src/particleemitter.h | 10 | ||||
-rw-r--r-- | src/player.cpp | 15 | ||||
-rw-r--r-- | src/resources/resourcemanager.cpp | 8 | ||||
-rw-r--r-- | src/resources/resourcemanager.h | 4 | ||||
-rw-r--r-- | src/resources/spritedef.cpp | 3 |
17 files changed, 126 insertions, 26 deletions
diff --git a/src/game.cpp b/src/game.cpp index 7ae21009..cf6dc547 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -60,6 +60,7 @@ #include "gui/ministatus.h" #include "gui/npclistdialog.h" #include "gui/npc_text.h" +#include "gui/ok_dialog.h" #include "gui/sdlinput.h" #include "gui/sell.h" #include "gui/setup.h" @@ -96,6 +97,7 @@ Joystick *joystick = NULL; extern Window *weightNotice; extern Window *deathNotice; QuitDialog *quitDialog = NULL; +OkDialog *disconnectedDialog = NULL; ChatWindow *chatWindow; MenuWindow *menuWindow; @@ -128,6 +130,21 @@ Particle *particleEngine = NULL; const int MAX_TIME = 10000; /** + * Listener used for exitting handling. + */ +namespace { + struct ExitListener : public gcn::ActionListener + { + void action(const gcn::ActionEvent &event) + { + if (event.getId() == "yes" || event.getId() == "ok") { + done = true; + } + } + } exitListener; +} + +/** * Advances game logic counter. */ Uint32 nextTick(Uint32 interval, void *param) @@ -407,6 +424,20 @@ void Game::logic() // Handle network stuff Net::flush(); + + // TODO: Fix notification when the connection is lost + if (false /*!mNetwork->isConnected() */) + { + if (!disconnectedDialog) + { + disconnectedDialog = new + OkDialog("Network Error", + "The connection to the server was lost, the program will now quit"); + disconnectedDialog->addActionListener(&exitListener); + } + + disconnectedDialog->requestMoveToTop(); + } } } diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp index bf23a419..0ef1ab35 100644 --- a/src/gui/inventorywindow.cpp +++ b/src/gui/inventorywindow.cpp @@ -65,7 +65,7 @@ InventoryWindow::InventoryWindow(): mDropButton = new Button(_("Drop"), "drop", this); mSplitButton = new Button(_("Split"), "split", this); - mItems = new ItemContainer(player_node->mInventory.get(), 10, 5); + mItems = new ItemContainer(player_node->mInventory, 10, 5); mItems->addSelectionListener(this); mInvenScroll = new ScrollArea(mItems); diff --git a/src/gui/shoplistbox.cpp b/src/gui/shoplistbox.cpp index ffa4d116..e6d3c516 100644 --- a/src/gui/shoplistbox.cpp +++ b/src/gui/shoplistbox.cpp @@ -114,10 +114,10 @@ void ShopListBox::setSelected(int selected) std::max(-1, selected)); gcn::Widget *parent = getParent(); - if (parent) + if (parent && mSelected >= 0) { gcn::Rectangle scroll; - scroll.y = (mSelected < 0) ? 0 : mRowHeight * mSelected; + scroll.y = mRowHeight * mSelected; scroll.height = mRowHeight; parent->showWidgetPart(this, scroll); } diff --git a/src/gui/updatewindow.cpp b/src/gui/updatewindow.cpp index 5d81bb9c..abae69f6 100644 --- a/src/gui/updatewindow.cpp +++ b/src/gui/updatewindow.cpp @@ -307,17 +307,20 @@ int UpdaterWindow::downloadThread(void *ptr) switch (res) { case CURLE_COULDNT_CONNECT: - // give more debug info on that error - std::cerr << "curl error " << res << ": " - << uw->mCurlError << " " << url.c_str() - << std::endl; - break; - default: std::cerr << "curl error " << res << ": " << uw->mCurlError << " host: " << url.c_str() << std::endl; + break; + } + + if (!uw->mStoreInMemory) + { + fclose(outfile); + ::remove(outFilename.c_str()); } + attempts++; + continue; } curl_easy_cleanup(curl); diff --git a/src/inventory.cpp b/src/inventory.cpp index bc4bd1c0..807e1223 100644 --- a/src/inventory.cpp +++ b/src/inventory.cpp @@ -26,6 +26,7 @@ #include <algorithm> #include "item.h" +#include "log.h" struct SlotUsed : public std::unary_function<Item*, bool> { @@ -64,6 +65,11 @@ void Inventory::addItem(int id, int quantity) void Inventory::setItem(int index, int id, int quantity) { + if (index < 0 || index >= INVENTORY_SIZE) { + logger->log("Warning: invalid inventory index: %d", index); + return; + } + if (!mItems[index] && id > 0) { mItems[index] = new Item(id, quantity); mItems[index]->setInvIndex(index); diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 12de3de4..085c80c5 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -69,6 +69,7 @@ LocalPlayer::LocalPlayer(): LocalPlayer::~LocalPlayer() { + delete mInventory; } void LocalPlayer::logic() diff --git a/src/localplayer.h b/src/localplayer.h index fca6f993..548325dc 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -24,8 +24,6 @@ #ifndef _TMW_LOCALPLAYER_H #define _TMW_LOCALPLAYER_H -#include <memory> - #include "player.h" // TODO move into some sane place... @@ -329,7 +327,7 @@ class LocalPlayer : public Player float mLastAttackTime; /**< Used to synchronize the charge dialog */ - std::auto_ptr<Inventory> mInventory; + Inventory *mInventory; std::auto_ptr<Equipment> mEquipment; protected: diff --git a/src/main.cpp b/src/main.cpp index 0726f5dc..9c69b203 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -191,7 +191,7 @@ void initConfiguration(const Options &options) config.setValue("fpslimit", 0); config.setValue("updatehost", "http://updates.themanaworld.org"); config.setValue("customcursor", 1); - config.setValue("ChatLogLength", 64); + config.setValue("ChatLogLength", 128); // Checking if the configuration file exists... otherwise create it with // default options. @@ -1055,7 +1055,6 @@ int main(int argc, char *argv[]) #ifdef PACKAGE_VERSION delete versionLabel; #endif - } catch (...) { diff --git a/src/monster.cpp b/src/monster.cpp index 9cbd28eb..ae749017 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -35,8 +35,12 @@ Monster::Monster(Uint16 id, Uint16 job, Map *map): Being(id, job, map) { - mSprites[BASE_SPRITE] = AnimatedSprite::load( - "graphics/sprites/" + getInfo().getSprite()); + std::string filename = getInfo().getSprite(); + if (filename.empty()) + filename = "error.xml"; + + mSprites[BASE_SPRITE] = + AnimatedSprite::load("graphics/sprites/" + filename); } Being::Type diff --git a/src/net/chathandler.cpp b/src/net/chathandler.cpp index 9fe231e6..d10c1556 100644 --- a/src/net/chathandler.cpp +++ b/src/net/chathandler.cpp @@ -191,6 +191,7 @@ void ChatHandler::handleMessage(MessageIn &msg) { chatMsg.erase(0, pos + 3); } + trim(chatMsg); player_node->setSpeech(chatMsg, SPEECH_TIME); } else diff --git a/src/openglgraphics.cpp b/src/openglgraphics.cpp index 51e99fa0..76eff9f5 100644 --- a/src/openglgraphics.cpp +++ b/src/openglgraphics.cpp @@ -89,7 +89,7 @@ bool OpenGLGraphics::setVideoMode(int w, int h, int bpp, bool fs, bool hwaccel) (gotDoubleBuffer ? "with" : "without")); char const *glExtensions = (char const *)glGetString(GL_EXTENSIONS); - int texSize; + GLint texSize; bool rectTex = strstr(glExtensions, "GL_ARB_texture_rectangle"); if (rectTex) { diff --git a/src/particleemitter.cpp b/src/particleemitter.cpp index 035882b6..6f66b632 100644 --- a/src/particleemitter.cpp +++ b/src/particleemitter.cpp @@ -237,9 +237,44 @@ ParticleEmitter::ParticleEmitter(xmlNodePtr emitterNode, Particle *target, Map * } } +ParticleEmitter::ParticleEmitter(const ParticleEmitter &o) +{ + *this = o; +} + +ParticleEmitter & ParticleEmitter::operator=(const ParticleEmitter &o) +{ + mParticlePosX = o.mParticlePosX; + mParticlePosY = o.mParticlePosY; + mParticlePosZ = o.mParticlePosZ; + mParticleAngleHorizontal = o.mParticleAngleHorizontal; + mParticleAngleVertical = o.mParticleAngleVertical; + mParticlePower = o.mParticlePower; + mParticleGravity = o.mParticleGravity; + mParticleRandomnes = o.mParticleRandomnes; + mParticleBounce = o.mParticleBounce; + mParticleTarget = o.mParticleTarget; + mParticleAcceleration = o.mParticleAcceleration; + mParticleDieDistance = o.mParticleDieDistance; + mParticleMomentum = o.mParticleMomentum; + mParticleLifetime = o.mParticleLifetime; + mParticleFadeOut = o.mParticleFadeOut; + mParticleFadeIn = o.mParticleFadeIn; + mMap = o.mMap; + mOutput = o.mOutput; + mParticleImage = o.mParticleImage; + mParticleAnimation = o.mParticleAnimation; + mParticleChildEmitters = o.mParticleChildEmitters; + + if (mParticleImage) mParticleImage->incRef(); + + return *this; +} + ParticleEmitter::~ParticleEmitter() { + if (mParticleImage) mParticleImage->decRef(); } diff --git a/src/particleemitter.h b/src/particleemitter.h index 37d067a6..c9524488 100644 --- a/src/particleemitter.h +++ b/src/particleemitter.h @@ -48,6 +48,16 @@ class ParticleEmitter ParticleEmitter(xmlNodePtr emitterNode, Particle *target, Map *map); /** + * Copy Constructor (necessary for reference counting of particle images) + */ + ParticleEmitter(const ParticleEmitter &o); + + /** + * Assignment operator that calls the copy constructor + */ + ParticleEmitter & operator=(const ParticleEmitter &o); + + /** * Destructor. */ ~ParticleEmitter(); diff --git a/src/player.cpp b/src/player.cpp index 050790e8..b1372925 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -128,9 +128,16 @@ void Player::setSprite(int slot, int id, const std::string &color) } else { - AnimatedSprite *equipmentSprite = AnimatedSprite::load( - "graphics/sprites/" + ItemDB::get(id).getSprite(mGender) + - "|" + color); + std::string filename = ItemDB::get(id).getSprite(mGender); + AnimatedSprite *equipmentSprite = NULL; + + if (!filename.empty()) + { + if (!color.empty()) + filename += "|" + color; + equipmentSprite = + AnimatedSprite::load("graphics/sprites/" + filename); + } if (equipmentSprite) equipmentSprite->setDirection(getSpriteDirection()); @@ -139,9 +146,7 @@ void Player::setSprite(int slot, int id, const std::string &color) mSprites[slot] = equipmentSprite; if (slot == WEAPON_SPRITE) - { mEquippedWeapon = &ItemDB::get(id); - } setAction(mAction); } diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp index 6f91390e..fb9da9d7 100644 --- a/src/resources/resourcemanager.cpp +++ b/src/resources/resourcemanager.cpp @@ -144,11 +144,15 @@ ResourceManager::setWriteDir(const std::string &path) return (bool) PHYSFS_setWriteDir(path.c_str()); } -void +bool ResourceManager::addToSearchPath(const std::string &path, bool append) { logger->log("Adding to PhysicsFS: %s", path.c_str()); - PHYSFS_addToSearchPath(path.c_str(), append ? 1 : 0); + if (!PHYSFS_addToSearchPath(path.c_str(), append ? 1 : 0)) { + logger->log("Error: %s", PHYSFS_getLastError()); + return false; + } + return true; } void diff --git a/src/resources/resourcemanager.h b/src/resources/resourcemanager.h index 46b17d1b..abfd629a 100644 --- a/src/resources/resourcemanager.h +++ b/src/resources/resourcemanager.h @@ -73,8 +73,10 @@ class ResourceManager * Adds a directory or archive to the search path. If append is true * then the directory is added to the end of the search path, otherwise * it is added at the front. + * + * @return <code>true</code> on success, <code>false</code> otherwise. */ - void + bool addToSearchPath(const std::string &path, bool append); /** diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp index de6f8d0b..d2e32c03 100644 --- a/src/resources/spritedef.cpp +++ b/src/resources/spritedef.cpp @@ -62,7 +62,8 @@ SpriteDef *SpriteDef::load(std::string const &animationFile, int variant) char *data = (char*) resman->loadFile (animationFile.substr(0, pos).c_str(), size); - if (!data) return NULL; + if (!data && animationFile != "graphics/sprites/error.xml") + return load("graphics/sprites/error.xml", 0); xmlDocPtr doc = xmlParseMemory(data, size); free(data); |