From 13a9a40fb01912aa9fb879426eddf2e43cd30109 Mon Sep 17 00:00:00 2001 From: Jared Adams Date: Thu, 10 Feb 2011 08:47:35 -0700 Subject: Add support for CSV map data Reviewed-by: Freeyorp --- src/resources/mapreader.cpp | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index b0720af5..6c06ec50 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -290,7 +290,7 @@ void MapReader::readLayer(xmlNodePtr node, Map *map) int len = strlen((const char*)dataChild->content) + 1; unsigned char *charData = new unsigned char[len + 1]; - const char *charStart = (const char*)dataChild->content; + const char *charStart = (const char*) xmlNodeGetContent(dataChild); unsigned char *charIndex = charData; while (*charStart) @@ -359,6 +359,39 @@ void MapReader::readLayer(xmlNodePtr node, Map *map) free(binData); } } + else if (encoding == "csv") + { + xmlNodePtr dataChild = childNode->xmlChildrenNode; + if (!dataChild) + continue; + + const char *data = (const char*) xmlNodeGetContent(dataChild); + std::string csv(data); + + size_t pos = 0; + size_t oldPos = 0; + + while (oldPos != csv.npos) + { + pos = csv.find_first_of(",", oldPos); + + const int gid = atoi(csv.substr(oldPos, pos - oldPos).c_str()); + + setTile(map, layer, x, y, gid); + + x++; + if (x == w) + { + x = 0; y++; + + // When we're done, don't crash on too much data + if (y == h) + break; + } + + oldPos = pos + 1; + } + } else { // Read plain XML map file -- cgit v1.2.3-70-g09d2 From 871203e820e8be156e62c873c366482cf18d1408 Mon Sep 17 00:00:00 2001 From: Stefan Dombrowski Date: Wed, 16 Feb 2011 13:58:57 +0100 Subject: Fixing query command handling Tab completion puts quotes around nicks. The query command now removes the quotes. Also avoiding the opening of a tab if no nick was given. Reviewed-by: Freeyorp --- src/commandhandler.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/commandhandler.cpp b/src/commandhandler.cpp index 1c375ad9..f8ef116c 100644 --- a/src/commandhandler.cpp +++ b/src/commandhandler.cpp @@ -50,6 +50,7 @@ void CommandHandler::handleCommand(const std::string &command, ChatTab *tab) std::string::size_type pos = command.find(' '); std::string type(command, 0, pos); std::string args(command, pos == std::string::npos ? command.size() : pos + 1); + trim(args); if (type == "help") // Do help before tabs so they can't override it { @@ -402,8 +403,21 @@ void CommandHandler::handleMsg(const std::string &args, ChatTab *tab) void CommandHandler::handleQuery(const std::string &args, ChatTab *tab) { - if (chatWindow->addWhisperTab(args, true)) + if (args.empty()) + { + tab->chatLog(_("No was given."), BY_SERVER); + return; + } + + if (args.length() > 1 && args[0] == '\"' && args[args.length() - 1] == '\"') + { + if (chatWindow->addWhisperTab(args.substr(1, args.length() - 2), true)) + return; + } + else if (chatWindow->addWhisperTab(args, true)) + { return; + } tab->chatLog(strprintf(_("Cannot create a whisper tab for nick \"%s\"! " "It either already exists, or is you."), args.c_str()), BY_SERVER); -- cgit v1.2.3-70-g09d2 From b74616db888fb69b81d49792ca3d68af3bdeaefe Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Wed, 16 Feb 2011 23:18:20 -0800 Subject: Add particle notification for "Unable to pick up item." --- src/localplayer.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 7826596c..cd1bb561 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -1247,6 +1247,12 @@ void LocalPlayer::pickedUp(const ItemInfo &itemInfo, int amount) { localChatTab->chatLog(_("Unable to pick up item."), BY_SERVER); } + if (mMap && config.getValue("showpickupparticle", 0)) + { + // Show pickup notification + addMessageToQueue(_("Unable to pick up item."), + UserPalette::PICKUP_INFO); + } } else { -- cgit v1.2.3-70-g09d2 From 85bf2ed70685a29b6a47279deeb61905c6d375b0 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Thu, 17 Feb 2011 20:32:49 -0800 Subject: Specific messages for each pickup failure reason. Reviewed-by: Jaxad0127 --- src/localplayer.cpp | 23 ++++++++++++++++++----- src/localplayer.h | 18 +++++++++++++++++- src/net/tmwa/inventoryhandler.cpp | 7 ++++--- 3 files changed, 39 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/localplayer.cpp b/src/localplayer.cpp index cd1bb561..62b45f62 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -1239,19 +1239,32 @@ void LocalPlayer::setMoney(int value) statusWindow->update(StatusWindow::MONEY); } -void LocalPlayer::pickedUp(const ItemInfo &itemInfo, int amount) +void LocalPlayer::pickedUp(const ItemInfo &itemInfo, int amount, + unsigned char fail) { - if (!amount) + if (fail) { + const char* msg; + switch (fail) + { + case PICKUP_BAD_ITEM: + msg = N_("Tried to pick up nonexistent item."); break; + case PICKUP_TOO_HEAVY: msg = N_("Item is too heavy."); break; + case PICKUP_TOO_FAR: msg = N_("Item is too far away"); break; + case PICKUP_INV_FULL: msg = N_("Inventory is full."); break; + case PICKUP_STACK_FULL: msg = N_("Stack is too big."); break; + case PICKUP_DROP_STEAL: + msg = N_("Item belongs to someone else."); break; + default: msg = N_("Unknown problem picking up item."); break; + } if (config.getValue("showpickupchat", 1)) { - localChatTab->chatLog(_("Unable to pick up item."), BY_SERVER); + localChatTab->chatLog(_(msg), BY_SERVER); } if (mMap && config.getValue("showpickupparticle", 0)) { // Show pickup notification - addMessageToQueue(_("Unable to pick up item."), - UserPalette::PICKUP_INFO); + addMessageToQueue(_(msg), UserPalette::PICKUP_INFO); } } else diff --git a/src/localplayer.h b/src/localplayer.h index 7706caeb..8033263b 100644 --- a/src/localplayer.h +++ b/src/localplayer.h @@ -106,6 +106,21 @@ enum NB_CHARACTER_ATTRIBUTES = CHAR_ATTR_END }; +/** + * Reasons an item can fail to be picked up. + */ +enum +{ + PICKUP_OKAY, + PICKUP_BAD_ITEM, + PICKUP_TOO_HEAVY, + PICKUP_TOO_FAR, + PICKUP_INV_FULL, + PICKUP_STACK_FULL, + PICKUP_DROP_STEAL, +}; + + /** * The local player character. */ @@ -273,7 +288,8 @@ class LocalPlayer : public Player /** * Shows item pickup notifications. */ - void pickedUp(const ItemInfo &itemInfo, int amount); + void pickedUp(const ItemInfo &itemInfo, int amount, + unsigned char fail); int getHp() const { return mHp; } diff --git a/src/net/tmwa/inventoryhandler.cpp b/src/net/tmwa/inventoryhandler.cpp index 3809399d..5e404e6c 100644 --- a/src/net/tmwa/inventoryhandler.cpp +++ b/src/net/tmwa/inventoryhandler.cpp @@ -230,13 +230,14 @@ void InventoryHandler::handleMessage(Net::MessageIn &msg) { const ItemInfo &itemInfo = ItemDB::get(itemId); - if (msg.readInt8() > 0) + unsigned char err = msg.readInt8(); + if (err) { - player_node->pickedUp(itemInfo, 0); + player_node->pickedUp(itemInfo, 0, err); } else { - player_node->pickedUp(itemInfo, amount); + player_node->pickedUp(itemInfo, amount, PICKUP_OKAY); Item *item = inventory->getItem(index); -- cgit v1.2.3-70-g09d2 From 42a0d79ebbcd8e583ded8ad4613df1d3ed21cfc5 Mon Sep 17 00:00:00 2001 From: Yohann Ferreira Date: Sat, 19 Feb 2011 19:49:11 +0100 Subject: Minor code formatting and fixed a comment. Trivial fix. --- src/resources/mapreader.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index 6c06ec50..c866c680 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -277,9 +277,11 @@ void MapReader::readLayer(xmlNodePtr node, Map *map) if (encoding == "base64") { - if (!compression.empty() && compression != "gzip" && compression != "zlib") + if (!compression.empty() && compression != "gzip" + && compression != "zlib") { - logger->log("Warning: only gzip layer compression supported!"); + logger->log("Warning: only gzip or zlib layer " + "compression supported!"); return; } -- cgit v1.2.3-70-g09d2 From 93e6f5ae132cda24eb87a6c7ddbe7487fa97de1f Mon Sep 17 00:00:00 2001 From: Stefan Dombrowski Date: Sat, 19 Feb 2011 20:11:16 +0100 Subject: Showing amount of picked up items in particle notification --- src/localplayer.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 62b45f62..cea27960 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -1282,7 +1282,11 @@ void LocalPlayer::pickedUp(const ItemInfo &itemInfo, int amount, if (mMap && config.getValue("showpickupparticle", 0)) { // Show pickup notification - addMessageToQueue(itemInfo.getName(), UserPalette::PICKUP_INFO); + std::string msg = ""; + if (amount > 1) + msg = strprintf("%i ", amount); + msg += itemInfo.getName(); + addMessageToQueue(msg, UserPalette::PICKUP_INFO); } } } -- cgit v1.2.3-70-g09d2 From 651a83db1d5e732a313c987a0518a868e8ec09b7 Mon Sep 17 00:00:00 2001 From: Ben Longbons Date: Sat, 19 Feb 2011 11:28:08 -0800 Subject: Reorder store option to the top, so it is more useful. --- src/gui/popupmenu.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/gui/popupmenu.cpp b/src/gui/popupmenu.cpp index 409a0eda..fa068cda 100644 --- a/src/gui/popupmenu.cpp +++ b/src/gui/popupmenu.cpp @@ -344,6 +344,11 @@ void PopupMenu::showPopup(Window *parent, int x, int y, Item *item, if (isInventory) { + if (InventoryWindow::isStorageActive()) + { + mBrowserBox->addRow(strprintf("@@store|%s@@", _("Store"))); + } + if (item->isEquipment()) { if (item->isEquipped()) @@ -363,11 +368,6 @@ void PopupMenu::showPopup(Window *parent, int x, int y, Item *item, { mBrowserBox->addRow(strprintf("@@split|%s@@", _("Split"))); } - - if (InventoryWindow::isStorageActive()) - { - mBrowserBox->addRow(strprintf("@@store|%s@@", _("Store"))); - } } // Assume in storage for now // TODO: make this whole system more flexible, if needed -- cgit v1.2.3-70-g09d2 From e95cf652072d6480454ffc2d5349d4ebbf597b45 Mon Sep 17 00:00:00 2001 From: Yohann Ferreira Date: Sun, 20 Feb 2011 18:18:44 +0100 Subject: Renamed default branding package from mana to manasource. Resolves: Mana-mantis #236. Reviewed-by: Mpa4Hu. --- src/client.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/client.cpp b/src/client.cpp index b57c3ae8..12564834 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1090,10 +1090,10 @@ void Client::initHomeDir() mLocalDataDir = getSpecialFolderLocation(CSIDL_LOCAL_APPDATA); if (mLocalDataDir.empty()) mLocalDataDir = std::string(PHYSFS_getUserDir()); - mLocalDataDir += "/Mana"; + mLocalDataDir += "/manasource"; #else mLocalDataDir = std::string(PHYSFS_getUserDir()) + - "/.local/share/mana"; + "/.local/share/manasource"; #endif } @@ -1107,16 +1107,16 @@ void Client::initHomeDir() if (mConfigDir.empty()){ #ifdef __APPLE__ - mConfigDir = mLocalDataDir + "/" + branding.getValue("appShort", "mana"); + mConfigDir = mLocalDataDir + "/" + branding.getValue("appShort", "manasource"); #elif defined WIN32 mConfigDir = getSpecialFolderLocation(CSIDL_APPDATA); if (mConfigDir.empty()) mConfigDir = mLocalDataDir; else - mConfigDir += "/mana/" + branding.getValue("appShort", "Mana"); + mConfigDir += "/mana/" + branding.getValue("appShort", "manasource"); #else mConfigDir = std::string(PHYSFS_getUserDir()) + - "/.config/mana/" + branding.getValue("appShort", "mana"); + "/.config/mana/" + branding.getValue("appShort", "manasource"); #endif } -- cgit v1.2.3-70-g09d2 From d4bb2d1d0e82ca9d046f9b2346a7893ca11e8d9c Mon Sep 17 00:00:00 2001 From: Thorbjørn Lindeijer Date: Mon, 21 Feb 2011 22:51:29 +0100 Subject: Renamed local data directory back to just "mana" This name represents the name of the client software, not the branding it received. Cleaned up the rest of the code a bit. Reviewed-by: Jared Adams --- src/client.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/client.cpp b/src/client.cpp index 12564834..abe3500c 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -1090,10 +1090,10 @@ void Client::initHomeDir() mLocalDataDir = getSpecialFolderLocation(CSIDL_LOCAL_APPDATA); if (mLocalDataDir.empty()) mLocalDataDir = std::string(PHYSFS_getUserDir()); - mLocalDataDir += "/manasource"; + mLocalDataDir += "/Mana"; #else mLocalDataDir = std::string(PHYSFS_getUserDir()) + - "/.local/share/manasource"; + "/.local/share/mana"; #endif } @@ -1105,18 +1105,19 @@ void Client::initHomeDir() mConfigDir = mOptions.configDir; - if (mConfigDir.empty()){ + if (mConfigDir.empty()) + { + const std::string app = branding.getValue("appShort", "manasource"); #ifdef __APPLE__ - mConfigDir = mLocalDataDir + "/" + branding.getValue("appShort", "manasource"); + mConfigDir = mLocalDataDir + "/" + app; #elif defined WIN32 mConfigDir = getSpecialFolderLocation(CSIDL_APPDATA); if (mConfigDir.empty()) mConfigDir = mLocalDataDir; else - mConfigDir += "/mana/" + branding.getValue("appShort", "manasource"); + mConfigDir += "/mana/" + app; #else - mConfigDir = std::string(PHYSFS_getUserDir()) + - "/.config/mana/" + branding.getValue("appShort", "manasource"); + mConfigDir = std::string(PHYSFS_getUserDir()) + "/.config/mana/" + app; #endif } -- cgit v1.2.3-70-g09d2