diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-10-17 22:07:24 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-10-17 22:07:24 +0300 |
commit | d14bb7a27ee23cc83b3af1db2f1976eaaa55d78a (patch) | |
tree | 5f128768c66436eefd70632f02889607596609d4 /src/net/ea | |
parent | f1e92aca00a4859047e83fab76220767b9a2f814 (diff) | |
parent | e93e6beb456d105987da3190c2a80847b6900081 (diff) | |
download | plus-d14bb7a27ee23cc83b3af1db2f1976eaaa55d78a.tar.gz plus-d14bb7a27ee23cc83b3af1db2f1976eaaa55d78a.tar.bz2 plus-d14bb7a27ee23cc83b3af1db2f1976eaaa55d78a.tar.xz plus-d14bb7a27ee23cc83b3af1db2f1976eaaa55d78a.zip |
Merge branch 'master' into strippedstripped1.1.10.16
Conflicts:
data/fonts/mplus-1p-bold.ttf
data/fonts/mplus-1p-regular.ttf
Diffstat (limited to 'src/net/ea')
-rw-r--r-- | src/net/ea/adminhandler.h | 3 | ||||
-rw-r--r-- | src/net/ea/beinghandler.cpp | 82 | ||||
-rw-r--r-- | src/net/ea/buysellhandler.h | 3 | ||||
-rw-r--r-- | src/net/ea/charserverhandler.cpp | 2 | ||||
-rw-r--r-- | src/net/ea/chathandler.cpp | 36 | ||||
-rw-r--r-- | src/net/ea/gui/guildtab.h | 3 | ||||
-rw-r--r-- | src/net/ea/gui/partytab.h | 4 | ||||
-rw-r--r-- | src/net/ea/guildhandler.cpp | 65 | ||||
-rw-r--r-- | src/net/ea/inventoryhandler.cpp | 31 | ||||
-rw-r--r-- | src/net/ea/inventoryhandler.h | 33 | ||||
-rw-r--r-- | src/net/ea/loginhandler.cpp | 8 | ||||
-rw-r--r-- | src/net/ea/partyhandler.cpp | 28 | ||||
-rw-r--r-- | src/net/ea/playerhandler.cpp | 13 | ||||
-rw-r--r-- | src/net/ea/specialhandler.cpp | 8 | ||||
-rw-r--r-- | src/net/ea/tradehandler.cpp | 26 |
15 files changed, 172 insertions, 173 deletions
diff --git a/src/net/ea/adminhandler.h b/src/net/ea/adminhandler.h index fcf1e25b2..2e311881f 100644 --- a/src/net/ea/adminhandler.h +++ b/src/net/ea/adminhandler.h @@ -38,7 +38,8 @@ namespace Ea class AdminHandler : public Net::AdminHandler { public: - virtual ~AdminHandler() { } + virtual ~AdminHandler() + { } virtual void kick(const std::string &name); diff --git a/src/net/ea/beinghandler.cpp b/src/net/ea/beinghandler.cpp index 4a5cfb841..8fca76353 100644 --- a/src/net/ea/beinghandler.cpp +++ b/src/net/ea/beinghandler.cpp @@ -58,7 +58,7 @@ namespace Ea { const int EMOTION_TIME = 500; /**< Duration of emotion icon */ -BeingHandler::BeingHandler(bool enableSync): +BeingHandler::BeingHandler(bool enableSync) : mSync(enableSync), mSpawnId(0) { @@ -133,8 +133,7 @@ void BeingHandler::processBeingVisibleOrMove(Net::MessageIn &msg, bool visible) speed = msg.readInt16(); stunMode = msg.readInt16(); // opt1 statusEffects = msg.readInt16(); // opt2 - statusEffects |= (static_cast<Uint32>( - msg.readInt16())) << 16; // option + statusEffects |= (static_cast<Uint32>(msg.readInt16())) << 16; // option job = msg.readInt16(); // class dstBeing = actorSpriteManager->findBeing(id); @@ -210,14 +209,22 @@ void BeingHandler::processBeingVisibleOrMove(Net::MessageIn &msg, bool visible) if (dstBeing->getType() == ActorSprite::MONSTER) { - int hp = msg.readInt32(); - int maxHP = msg.readInt32(); - if (hp && maxHP) + if (serverVersion > 0) { - int oldHP = dstBeing->getHP(); - if (!oldHP || oldHP > hp) - dstBeing->setHP(hp); - dstBeing->setMaxHP(maxHP); + int hp = msg.readInt32(); + int maxHP = msg.readInt32(); + if (hp && maxHP) + { + int oldHP = dstBeing->getHP(); + if (!oldHP || oldHP > hp) + dstBeing->setHP(hp); + dstBeing->setMaxHP(maxHP); + } + } + else + { + msg.readInt32(); + msg.readInt32(); } gloves = 0; } @@ -237,19 +244,26 @@ void BeingHandler::processBeingVisibleOrMove(Net::MessageIn &msg, bool visible) msg.readInt16(); // manner dstBeing->setStatusEffectBlock(32, msg.readInt16()); // opt3 - msg.readInt8(); // karma + if (serverVersion > 0 && dstBeing->getType() == ActorSprite::MONSTER) + { + int attackRange = msg.readInt8(); // karma + dstBeing->setAttackRange(attackRange); + } + else + { + msg.readInt8(); // karma + } gender = msg.readInt8(); // reserving bits for future usage - gender &= 1; if (dstBeing->getType() == ActorSprite::PLAYER) { - dstBeing->setGender((gender == 0) - ? GENDER_FEMALE : GENDER_MALE); + gender &= 1; + dstBeing->setGender((gender == 0) ? GENDER_FEMALE : GENDER_MALE); // Set these after the gender, as the sprites may be gender-specific setSprite(dstBeing, EA_SPRITE_HAIR, hairStyle * -1, - ColorDB::getHairColor(hairColor)); + ColorDB::getHairColor(hairColor)); setSprite(dstBeing, EA_SPRITE_BOTTOMCLOTHES, headBottom); setSprite(dstBeing, EA_SPRITE_TOPCLOTHES, headMid); setSprite(dstBeing, EA_SPRITE_HAT, headTop); @@ -283,8 +297,6 @@ void BeingHandler::processBeingVisibleOrMove(Net::MessageIn &msg, bool visible) dstBeing->setAction(Being::STAND); dstBeing->setTileCoords(srcX, srcY); dstBeing->setDestination(dstX, dstY); -// if (player_node && player_node->getTarget() == dstBeing) -// player_node->targetMoved(); } else { @@ -293,7 +305,6 @@ void BeingHandler::processBeingVisibleOrMove(Net::MessageIn &msg, bool visible) msg.readCoordinates(x, y, dir); dstBeing->setTileCoords(x, y); - if (job == 45 && socialWindow && outfitWindow) { int num = socialWindow->getPortalIndex(x, y); @@ -379,7 +390,7 @@ void BeingHandler::processBeingRemove(Net::MessageIn &msg) return; player_node->followMoveTo(dstBeing, player_node->getNextDestX(), - player_node->getNextDestY()); + player_node->getNextDestY()); // If this is player's current target, clear it. if (dstBeing == player_node->getTarget()) @@ -464,20 +475,15 @@ void BeingHandler::processBeingAction(Net::MessageIn &msg) if (!actorSpriteManager) return; - Being *srcBeing; - Being *dstBeing; - int param1; - int type; - - srcBeing = actorSpriteManager->findBeing(msg.readInt32()); - dstBeing = actorSpriteManager->findBeing(msg.readInt32()); + Being *srcBeing = actorSpriteManager->findBeing(msg.readInt32()); + Being *dstBeing = actorSpriteManager->findBeing(msg.readInt32()); msg.readInt32(); // server tick int srcSpeed = msg.readInt32(); // src speed msg.readInt32(); // dst speed - param1 = msg.readInt16(); + int param1 = msg.readInt16(); msg.readInt16(); // param 2 - type = msg.readInt8(); + int type = msg.readInt8(); msg.readInt16(); // param 3 switch (type) @@ -513,10 +519,7 @@ void BeingHandler::processBeingAction(Net::MessageIn &msg) { srcBeing->setMoveTime(); if (player_node) - { - player_node->imitateAction( - srcBeing, Being::SIT); - } + player_node->imitateAction(srcBeing, Being::SIT); } } break; @@ -529,23 +532,18 @@ void BeingHandler::processBeingAction(Net::MessageIn &msg) { srcBeing->setMoveTime(); if (player_node) - { - player_node->imitateAction( - srcBeing, Being::STAND); - } + player_node->imitateAction(srcBeing, Being::STAND); } } break; default: - break; -/* logger->log("QQQ1 SMSG_BEING_ACTION:"); if (srcBeing) logger->log("srcBeing:" + toString(srcBeing->getId())); if (dstBeing) logger->log("dstBeing:" + toString(dstBeing->getId())); logger->log("type: " + toString(type)); -*/ + break; } } @@ -584,8 +582,7 @@ void BeingHandler::processBeingEmotion(Net::MessageIn &msg) if (!(dstBeing = actorSpriteManager->findBeing(msg.readInt32()))) return; - if (player_relations.hasPermission(dstBeing, - PlayerRelation::EMOTE)) + if (player_relations.hasPermission(dstBeing, PlayerRelation::EMOTE)) { unsigned char emote = msg.readInt8(); if (emote) @@ -626,8 +623,7 @@ void BeingHandler::processNameResponse(Net::MessageIn &msg) Party *party = player_node->getParty(); if (party && party->isMember(dstBeing->getId())) { - PartyMember *member = party->getMember( - dstBeing->getId()); + PartyMember *member = party->getMember(dstBeing->getId()); if (member) member->setName(dstBeing->getName()); diff --git a/src/net/ea/buysellhandler.h b/src/net/ea/buysellhandler.h index 60931ef9b..196626b0d 100644 --- a/src/net/ea/buysellhandler.h +++ b/src/net/ea/buysellhandler.h @@ -40,9 +40,12 @@ class BuySellHandler : public Net::BuySellHandler BuySellHandler(); virtual void requestSellList(std::string nick); + virtual void requestBuyList(std::string nick); + virtual void sendBuyRequest(std::string nick, ShopItem* item, int amount); + virtual void sendSellRequest(std::string nick, ShopItem* item, int amount); diff --git a/src/net/ea/charserverhandler.cpp b/src/net/ea/charserverhandler.cpp index a0e5b392a..08c9a43c8 100644 --- a/src/net/ea/charserverhandler.cpp +++ b/src/net/ea/charserverhandler.cpp @@ -136,7 +136,7 @@ void CharServerHandler::processCharCreateFailed(Net::MessageIn &msg) case 0: default: errorMessage = _("Failed to create character. Most " - "likely the name is already taken."); + "likely the name is already taken."); break; case 2: errorMessage = _("Wrong name."); diff --git a/src/net/ea/chathandler.cpp b/src/net/ea/chathandler.cpp index c18b1bb9a..60af645be 100644 --- a/src/net/ea/chathandler.cpp +++ b/src/net/ea/chathandler.cpp @@ -168,13 +168,11 @@ void ChatHandler::processWhisper(Net::MessageIn &msg) return; } - if (player_relations.hasPermission( - nick, PlayerRelation::WHISPER)) + if (player_relations.hasPermission(nick, PlayerRelation::WHISPER)) { bool tradeBot = config.getBoolValue("tradebot"); bool showMsg = !config.getBoolValue("hideShopMessages"); - if (player_relations.hasPermission( - nick, PlayerRelation::TRADE)) + if (player_relations.hasPermission(nick, PlayerRelation::TRADE)) { if (shopWindow) { //commands to shop from player @@ -184,8 +182,7 @@ void ChatHandler::processWhisper(Net::MessageIn &msg) { if (showMsg && chatWindow) chatWindow->addWhisper(nick, chatMsg); - shopWindow->giveList(nick, - ShopWindow::SELL); + shopWindow->giveList(nick, ShopWindow::SELL); } } else if (chatMsg.find("!buylist ") == 0) @@ -194,8 +191,7 @@ void ChatHandler::processWhisper(Net::MessageIn &msg) { if (showMsg && chatWindow) chatWindow->addWhisper(nick, chatMsg); - shopWindow->giveList(nick, - ShopWindow::BUY); + shopWindow->giveList(nick, ShopWindow::BUY); } } else if (chatMsg.find("!buyitem ") == 0) @@ -205,7 +201,7 @@ void ChatHandler::processWhisper(Net::MessageIn &msg) if (tradeBot) { shopWindow->processRequest(nick, chatMsg, - ShopWindow::BUY); + ShopWindow::BUY); } } else if (chatMsg.find("!sellitem ") == 0) @@ -215,7 +211,7 @@ void ChatHandler::processWhisper(Net::MessageIn &msg) if (tradeBot) { shopWindow->processRequest(nick, chatMsg, - ShopWindow::SELL); + ShopWindow::SELL); } } else if (chatMsg.length() > 3 @@ -224,11 +220,8 @@ void ChatHandler::processWhisper(Net::MessageIn &msg) chatMsg = chatMsg.erase(0, 2); if (showMsg && chatWindow) chatWindow->addWhisper(nick, chatMsg); - if (chatMsg.find("B1") == 0 - || chatMsg.find("S1") == 0) - { + if (chatMsg.find("B1") == 0 || chatMsg.find("S1") == 0) shopWindow->showList(nick, chatMsg); - } } else if (chatWindow) { @@ -242,9 +235,8 @@ void ChatHandler::processWhisper(Net::MessageIn &msg) } else { - if (chatWindow && (showMsg - || (chatMsg.find("!selllist") - != 0 && chatMsg.find("!buylist") != 0))) + if (chatWindow && (showMsg || (chatMsg.find("!selllist") != 0 + && chatMsg.find("!buylist") != 0))) { chatWindow->addWhisper(nick, chatMsg); } @@ -277,8 +269,7 @@ void ChatHandler::processBeingChat(Net::MessageIn &msg) std::string sender_name = ((pos == std::string::npos) ? "" : chatMsg.substr(0, pos)); - if (sender_name != being->getName() - && being->getType() == Being::PLAYER) + if (sender_name != being->getName() && being->getType() == Being::PLAYER) { if (!being->getName().empty()) sender_name = being->getName(); @@ -296,8 +287,8 @@ void ChatHandler::processBeingChat(Net::MessageIn &msg) if (player_relations.checkPermissionSilently(sender_name, PlayerRelation::SPEECH_LOG) && chatWindow) { - chatWindow->resortChatLog(removeColors(sender_name) + " : " - + chatMsg, BY_OTHER); + chatWindow->resortChatLog(removeColors(sender_name) + + " : " + chatMsg, BY_OTHER); } if (player_relations.hasPermission(sender_name, @@ -347,7 +338,7 @@ void ChatHandler::processMVP(Net::MessageIn &msg) { // Display MVP player int id = msg.readInt32(); // id - if (localChatTab && actorSpriteManager) + if (localChatTab && actorSpriteManager && config.getBoolValue("showMVP")) { Being *being = actorSpriteManager->findBeing(id); if (!being) @@ -363,4 +354,3 @@ void ChatHandler::processMVP(Net::MessageIn &msg) } } // namespace Ea - diff --git a/src/net/ea/gui/guildtab.h b/src/net/ea/gui/guildtab.h index f4b87f8a2..2aad4a564 100644 --- a/src/net/ea/gui/guildtab.h +++ b/src/net/ea/gui/guildtab.h @@ -44,7 +44,8 @@ class GuildTab : public ChatTab void saveToLogFile(std::string &msg); - int getType() const { return ChatTab::TAB_GUILD; } + int getType() const + { return ChatTab::TAB_GUILD; } protected: void handleInput(const std::string &msg); diff --git a/src/net/ea/gui/partytab.h b/src/net/ea/gui/partytab.h index f34d51370..3a544d8db 100644 --- a/src/net/ea/gui/partytab.h +++ b/src/net/ea/gui/partytab.h @@ -35,13 +35,15 @@ class PartyTab : public ChatTab { public: PartyTab(); + ~PartyTab(); void showHelp(); bool handleCommand(const std::string &type, const std::string &args); - int getType() const { return ChatTab::TAB_PARTY; } + int getType() const + { return ChatTab::TAB_PARTY; } void saveToLogFile(std::string &msg); diff --git a/src/net/ea/guildhandler.cpp b/src/net/ea/guildhandler.cpp index 2accb1f1d..66488d5fb 100644 --- a/src/net/ea/guildhandler.cpp +++ b/src/net/ea/guildhandler.cpp @@ -177,24 +177,22 @@ void GuildHandler::processGuildBasicInfo(Net::MessageIn &msg) if (guildTab && showBasicInfo) { showBasicInfo = false; - guildTab->chatLog(strprintf( - _("Guild name: %s"), name.c_str()), BY_SERVER); - guildTab->chatLog(strprintf( - _("Guild master: %s"), master.c_str()), BY_SERVER); - guildTab->chatLog(strprintf( - _("Guild level: %d"), level), BY_SERVER); - guildTab->chatLog(strprintf( - _("Online members: %d"), members), BY_SERVER); - guildTab->chatLog(strprintf( - _("Max members: %d"), maxMembers), BY_SERVER); - guildTab->chatLog(strprintf( - _("Average level: %d"), avgLevel), BY_SERVER); - guildTab->chatLog(strprintf( - _("Guild exp: %d"), exp), BY_SERVER); - guildTab->chatLog(strprintf( - _("Guild next exp: %d"), nextExp), BY_SERVER); - guildTab->chatLog(strprintf( - _("Guild castle: %s"), castle.c_str()), BY_SERVER); + guildTab->chatLog(strprintf(_("Guild name: %s"), + name.c_str()), BY_SERVER); + guildTab->chatLog(strprintf(_("Guild master: %s"), + master.c_str()), BY_SERVER); + guildTab->chatLog(strprintf(_("Guild level: %d"), level), BY_SERVER); + guildTab->chatLog(strprintf(_("Online members: %d"), + members), BY_SERVER); + guildTab->chatLog(strprintf(_("Max members: %d"), + maxMembers), BY_SERVER); + guildTab->chatLog(strprintf(_("Average level: %d"), + avgLevel), BY_SERVER); + guildTab->chatLog(strprintf(_("Guild exp: %d"), exp), BY_SERVER); + guildTab->chatLog(strprintf(_("Guild next exp: %d"), + nextExp), BY_SERVER); + guildTab->chatLog(strprintf(_("Guild castle: %s"), + castle.c_str()), BY_SERVER); } Guild *g = Guild::getGuild(static_cast<short int>(guildId)); @@ -206,6 +204,8 @@ void GuildHandler::processGuildBasicInfo(Net::MessageIn &msg) void GuildHandler::processGuildAlianceInfo(Net::MessageIn &msg) { int length = msg.readInt16(); + if (length < 4) + return; int count = (length - 4) / 32; for (int i = 0; i < count; i++) @@ -219,6 +219,8 @@ void GuildHandler::processGuildAlianceInfo(Net::MessageIn &msg) void GuildHandler::processGuildMemberList(Net::MessageIn &msg) { int length = msg.readInt16(); + if (length < 4) + return; int count = (length - 4) / 104; if (!taGuild) { @@ -260,7 +262,6 @@ void GuildHandler::processGuildMemberList(Net::MessageIn &msg) m->setExp(exp); m->setPos(pos); m->setRace(race); -// m->setDisplayBold(!pos); if (actorSpriteManager) { Being *being = actorSpriteManager->findBeingByName( @@ -294,6 +295,8 @@ void GuildHandler::processGuildPosNameList(Net::MessageIn &msg) } int length = msg.readInt16(); + if (length < 4) + return; int count = (length - 4) / 28; for (int i = 0; i < count; i++) @@ -307,6 +310,8 @@ void GuildHandler::processGuildPosNameList(Net::MessageIn &msg) void GuildHandler::processGuildPosInfoList(Net::MessageIn &msg) { int length = msg.readInt16(); + if (length < 4) + return; int count = (length - 4) / 16; for (int i = 0; i < count; i++) @@ -348,6 +353,8 @@ void GuildHandler::processGuildEmblem(Net::MessageIn &msg) msg.readInt32(); // Guild ID msg.readInt32(); // Emblem ID + if (length < 12) + return; msg.skip(length - 12); // Emblem data (unknown format) } @@ -358,6 +365,8 @@ void GuildHandler::processGuildSkillInfo(Net::MessageIn &msg) msg.readInt16(); // 'Skill point' + if (length < 6) + return; for (int i = 0; i < count; i++) { msg.readInt16(); // ID @@ -429,7 +438,10 @@ void GuildHandler::processGuildLeave(Net::MessageIn &msg) if (taGuild) taGuild->removeMember(nick); - if (player_node && nick == player_node->getName()) + if (!player_node) + return; + + if (nick == player_node->getName()) { if (taGuild) { @@ -449,8 +461,7 @@ void GuildHandler::processGuildLeave(Net::MessageIn &msg) { if (guildTab) { - guildTab->chatLog(strprintf( - _("%s has left your guild."), + guildTab->chatLog(strprintf(_("%s has left your guild."), nick.c_str()), BY_SERVER); } if (actorSpriteManager) @@ -474,7 +485,10 @@ void GuildHandler::processGuildExpulsion(Net::MessageIn &msg) if (taGuild) taGuild->removeMember(nick); - if (player_node && nick == player_node->getName()) + if (!player_node) + return; + + if (nick == player_node->getName()) { if (taGuild) { @@ -514,6 +528,9 @@ void GuildHandler::processGuildExpulsion(Net::MessageIn &msg) void GuildHandler::processGuildExpulsionList(Net::MessageIn &msg) { int length = msg.readInt16(); + if (length < 4) + return; + int count = (length - 4) / 88; for (int i = 0; i < count; i++) @@ -540,7 +557,7 @@ void GuildHandler::processGuildMessage(Net::MessageIn &msg) std::string sender_name = ((pos == std::string::npos) ? "" : chatMsg.substr(0, pos)); - chatMsg.erase(0, pos + 3); + chatMsg.erase(0, pos + 3); trim(chatMsg); guildTab->chatLog(sender_name, chatMsg); diff --git a/src/net/ea/inventoryhandler.cpp b/src/net/ea/inventoryhandler.cpp index 1de681007..788b7f0fc 100644 --- a/src/net/ea/inventoryhandler.cpp +++ b/src/net/ea/inventoryhandler.cpp @@ -316,10 +316,7 @@ void InventoryHandler::processPlayerInventoryAdd(Net::MessageIn &msg) if (err) { if (player_node) - { - player_node->pickedUp(itemInfo, 0, identified, - floorId, err); - } + player_node->pickedUp(itemInfo, 0, identified, floorId, err); } else { @@ -334,13 +331,13 @@ void InventoryHandler::processPlayerInventoryAdd(Net::MessageIn &msg) Item *item = inventory->getItem(index); if (item && item->getId() == itemId) - amount += inventory->getItem(index)->getQuantity(); + amount += item->getQuantity(); if (serverVersion < 1 && identified > 1) identified = 1; inventory->setItem(index, itemId, amount, refine, - identified, equipType != 0); + identified, equipType != 0); } } } @@ -451,7 +448,6 @@ void InventoryHandler::processPlayerStorageAdd(Net::MessageIn &msg) { int index, amount, itemId, refine; unsigned char identified; -// int cards[4]; // Move an item into storage index = msg.readInt16() - STORAGE_OFFSET; @@ -475,8 +471,8 @@ void InventoryHandler::processPlayerStorageAdd(Net::MessageIn &msg) if (serverVersion < 1 && identified > 1) identified = 1; - mStorage->setItem(index, itemId, amount, refine, - identified, false); + mStorage->setItem(index, itemId, amount, + refine, identified, false); } } } @@ -502,7 +498,6 @@ void InventoryHandler::processPlayerStorageRemove(Net::MessageIn &msg) void InventoryHandler::processPlayerStorageClose(Net::MessageIn &msg A_UNUSED) { // Storage access has been closed - // Storage window deletes itself mStorageWindow = 0; @@ -569,12 +564,9 @@ void InventoryHandler::processPlayerEquipment(Net::MessageIn &msg) void InventoryHandler::processPlayerEquip(Net::MessageIn &msg) { - int index, equipType; - int flag; - - index = msg.readInt16() - INVENTORY_OFFSET; - equipType = msg.readInt16(); - flag = msg.readInt8(); + int index = msg.readInt16() - INVENTORY_OFFSET; + int equipType = msg.readInt16(); + int flag = msg.readInt8(); if (!flag) SERVER_NOTICE(_("Unable to equip.")) @@ -584,12 +576,9 @@ void InventoryHandler::processPlayerEquip(Net::MessageIn &msg) void InventoryHandler::processPlayerUnEquip(Net::MessageIn &msg) { - int equipType; - int flag; - msg.readInt16(); // inder val - INVENTORY_OFFSET; - equipType = msg.readInt16(); - flag = msg.readInt8(); + int equipType = msg.readInt16(); + int flag = msg.readInt8(); if (flag) mEquips.setEquipment(getSlot(equipType), -1); diff --git a/src/net/ea/inventoryhandler.h b/src/net/ea/inventoryhandler.h index cb1e84673..3a99bc47f 100644 --- a/src/net/ea/inventoryhandler.h +++ b/src/net/ea/inventoryhandler.h @@ -60,16 +60,22 @@ class EquipBackend : public Equipment::Backend if (invyIndex == -1) return NULL; - return PlayerInfo::getInventory()->getItem(invyIndex); + if (PlayerInfo::getInventory()) + return PlayerInfo::getInventory()->getItem(invyIndex); + else + return 0; } void clear() { + Inventory *inv = PlayerInfo::getInventory(); + if (!inv) + return; for (int i = 0; i < EQUIPMENT_SIZE; i++) { if (mEquipment[i] != -1) { - Item* item = PlayerInfo::getInventory()->getItem(i); + Item* item = inv->getItem(i); if (item) item->setEquipped(false); } @@ -80,16 +86,19 @@ class EquipBackend : public Equipment::Backend void setEquipment(int index, int inventoryIndex) { + Inventory *inv = PlayerInfo::getInventory(); + if (!inv) + return; + // Unequip existing item - Item* item = PlayerInfo::getInventory() - ->getItem(mEquipment[index]); + Item* item = inv->getItem(mEquipment[index]); if (item) item->setEquipped(false); mEquipment[index] = inventoryIndex; - item = PlayerInfo::getInventory()->getItem(inventoryIndex); + item = inv->getItem(inventoryIndex); if (item) item->setEquipped(true); @@ -115,14 +124,14 @@ class InventoryItem bool equip; InventoryItem(int slot0, int id0, int quantity0, int refine0, - unsigned char color0, bool equip0) + unsigned char color0, bool equip0) : + slot(slot0), + id(id0), + quantity(quantity0), + color(color0), + refine(refine0), + equip(equip0) { - slot = slot0; - id = id0; - quantity = quantity0; - refine = refine0; - color = color0; - equip = equip0; } }; diff --git a/src/net/ea/loginhandler.cpp b/src/net/ea/loginhandler.cpp index 9f7a5f07d..b11e60d4d 100644 --- a/src/net/ea/loginhandler.cpp +++ b/src/net/ea/loginhandler.cpp @@ -34,7 +34,7 @@ namespace Ea { -LoginHandler::LoginHandler(): +LoginHandler::LoginHandler() : mVersionResponse(false), mRegistrationEnabled(true) { @@ -184,10 +184,8 @@ void LoginHandler::processLoginData(Net::MessageIn &msg) world->updateHost = mUpdateHost; msg.skip(2); // unknown - logger->log("Network: Server: %s (%s:%d)", - world->name.c_str(), - ipToString(world->address), - world->port); + logger->log("Network: Server: %s (%s:%d)", world->name.c_str(), + ipToString(world->address), world->port); mWorlds.push_back(world); } diff --git a/src/net/ea/partyhandler.cpp b/src/net/ea/partyhandler.cpp index 36e192ce8..35cc77fbf 100644 --- a/src/net/ea/partyhandler.cpp +++ b/src/net/ea/partyhandler.cpp @@ -40,7 +40,7 @@ namespace Ea PartyTab *partyTab = 0; Party *taParty = 0; -PartyHandler::PartyHandler(): +PartyHandler::PartyHandler() : mShareExp(PARTY_SHARE_UNKNOWN), mShareItems(PARTY_SHARE_UNKNOWN) { @@ -344,7 +344,10 @@ void PartyHandler::processPartyLeave(Net::MessageIn &msg) int id = msg.readInt32(); std::string nick = msg.readString(24); msg.readInt8(); // fail - if (player_node && id == player_node->getId()) + if (!player_node) + return; + + if (id == player_node->getId()) { if (Ea::taParty) { @@ -431,21 +434,18 @@ void PartyHandler::processPartyMessage(Net::MessageIn &msg) int id = msg.readInt32(); std::string chatMsg = msg.readString(msgLength); - if (Ea::taParty) + if (Ea::taParty && Ea::partyTab) { PartyMember *member = Ea::taParty->getMember(id); - if (Ea::partyTab) + if (member) { - if (member) - { - Ea::partyTab->chatLog(member->getName(), chatMsg); - } - else - { - Ea::partyTab->chatLog(strprintf( - _("An unknown member tried to say: %s"), - chatMsg.c_str()), BY_SERVER); - } + Ea::partyTab->chatLog(member->getName(), chatMsg); + } + else + { + Ea::partyTab->chatLog(strprintf( + _("An unknown member tried to say: %s"), + chatMsg.c_str()), BY_SERVER); } } } diff --git a/src/net/ea/playerhandler.cpp b/src/net/ea/playerhandler.cpp index 3af237b5b..81e520415 100644 --- a/src/net/ea/playerhandler.cpp +++ b/src/net/ea/playerhandler.cpp @@ -70,7 +70,8 @@ namespace { void action(const gcn::ActionEvent &event A_UNUSED) { - Net::getPlayerHandler()->respawn(); + if (Net::getPlayerHandler()) + Net::getPlayerHandler()->respawn(); deathNotice = NULL; Client::closeDialogs(); @@ -326,13 +327,11 @@ void PlayerHandler::processPlayerStatUpdate1(Net::MessageIn &msg) case 0x0018: if (!weightNotice) { - const int max - = PlayerInfo::getAttribute(MAX_WEIGHT) / 2; - const int total - = PlayerInfo::getAttribute(TOTAL_WEIGHT); + const int max = PlayerInfo::getAttribute(MAX_WEIGHT) / 2; + const int total = PlayerInfo::getAttribute(TOTAL_WEIGHT); if (value >= max && total < max) { - weightNoticeTime = cur_time + 10; + weightNoticeTime = cur_time + 5; weightNotice = new OkDialog(_("Message"), _("You are carrying more than " "half your weight. You are " @@ -342,7 +341,7 @@ void PlayerHandler::processPlayerStatUpdate1(Net::MessageIn &msg) } else if (value < max && total >= max) { - weightNoticeTime = cur_time + 10; + weightNoticeTime = cur_time + 5; weightNotice = new OkDialog(_("Message"), _("You are carrying less than " "half your weight. You " diff --git a/src/net/ea/specialhandler.cpp b/src/net/ea/specialhandler.cpp index b78531434..fe56db52a 100644 --- a/src/net/ea/specialhandler.cpp +++ b/src/net/ea/specialhandler.cpp @@ -134,11 +134,8 @@ void SpecialHandler::processSkillFailed(Net::MessageIn &msg) std::string txt; if (success == SKILL_FAILED && skillId == SKILL_BASIC) { - if (player_node && bskill == BSKILL_EMOTE - && reason == RFAIL_SKILLDEP) - { + if (player_node && bskill == BSKILL_EMOTE && reason == RFAIL_SKILLDEP) player_node->stopAdvert(); - } switch (bskill) { @@ -171,8 +168,7 @@ void SpecialHandler::processSkillFailed(Net::MessageIn &msg) switch (reason) { case RFAIL_SKILLDEP: - txt += _("You have not yet reached a high enough " - "lvl!"); + txt += _("You have not yet reached a high enough lvl!"); break; case RFAIL_INSUFHP: txt += _("Insufficient HP!"); diff --git a/src/net/ea/tradehandler.cpp b/src/net/ea/tradehandler.cpp index a03782db2..bdbba9715 100644 --- a/src/net/ea/tradehandler.cpp +++ b/src/net/ea/tradehandler.cpp @@ -84,7 +84,7 @@ void TradeHandler::processTradeRequest(Net::MessageIn &msg) // special message about the player being occupied. std::string tradePartnerNameTemp = msg.readString(24); - if (player_relations.hasPermission(tradePartnerName, + if (player_relations.hasPermission(tradePartnerNameTemp, PlayerRelation::TRADE)) { if (PlayerInfo::isTrading() || confirmDlg) @@ -97,16 +97,13 @@ void TradeHandler::processTradeRequest(Net::MessageIn &msg) PlayerInfo::setTrading(true); if (tradeWindow) { - if (tradePartnerName.empty() - || tradeWindow->getAutoTradeNick() + if (tradePartnerName.empty() || tradeWindow->getAutoTradeNick() != tradePartnerName) { tradeWindow->clear(); - confirmDlg = new ConfirmDialog( - _("Request for Trade"), + confirmDlg = new ConfirmDialog(_("Request for Trade"), strprintf(_("%s wants to trade with you, do" - " you accept?"), tradePartnerName.c_str()), - true); + " you accept?"), tradePartnerName.c_str()), true); confirmDlg->addActionListener(&listener); } else @@ -128,22 +125,20 @@ void TradeHandler::processTradeResponse(Net::MessageIn &msg) { case 0: // Too far away SERVER_NOTICE(_("Trading isn't possible. Trade " - "partner is too far away.")) + "partner is too far away.")) break; case 1: // Character doesn't exist SERVER_NOTICE(_("Trading isn't possible. Character " - "doesn't exist.")) + "doesn't exist.")) break; case 2: // Invite request check failed... - SERVER_NOTICE(_("Trade cancelled due to an unknown " - "reason.")) + SERVER_NOTICE(_("Trade cancelled due to an unknown reason.")) break; case 3: // Trade accepted if (tradeWindow) { tradeWindow->reset(); - tradeWindow->setCaption(strprintf( - _("Trade: You and %s"), + tradeWindow->setCaption(strprintf(_("Trade: You and %s"), tradePartnerName.c_str())); tradeWindow->initTrade(tradePartnerName); tradeWindow->setVisible(true); @@ -201,7 +196,10 @@ void TradeHandler::processTradeItemAddResponse(Net::MessageIn &msg) { // Trade: New Item add response (was 0x00ea, now 01b1) const int index = msg.readInt16() - INVENTORY_OFFSET; - Item *item = PlayerInfo::getInventory()->getItem(index); + Item *item = 0; + if (PlayerInfo::getInventory()) + item = PlayerInfo::getInventory()->getItem(index); + if (!item) { if (tradeWindow) |