00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "net/ea/generalhandler.h"
00023
00024 #include "net/ea/network.h"
00025 #include "net/ea/protocol.h"
00026
00027 #include "net/ea/adminhandler.h"
00028 #include "net/ea/beinghandler.h"
00029 #include "net/ea/buysellhandler.h"
00030 #include "net/ea/chathandler.h"
00031 #include "net/ea/charserverhandler.h"
00032 #include "net/ea/equipmenthandler.h"
00033 #include "net/ea/inventoryhandler.h"
00034 #include "net/ea/itemhandler.h"
00035 #include "net/ea/loginhandler.h"
00036 #include "net/ea/logouthandler.h"
00037 #include "net/ea/maphandler.h"
00038 #include "net/ea/npchandler.h"
00039 #include "net/ea/playerhandler.h"
00040 #include "net/ea/partyhandler.h"
00041 #include "net/ea/tradehandler.h"
00042 #include "net/ea/skillhandler.h"
00043
00044 #include "net/ea/gui/partytab.h"
00045
00046 #include "net/messagein.h"
00047 #include "net/messageout.h"
00048
00049 #include "resources/itemdb.h"
00050
00051 #include "configuration.h"
00052 #include "log.h"
00053 #include "main.h"
00054
00055 #include "utils/gettext.h"
00056
00057 #include <list>
00058
00059 Net::GeneralHandler *generalHandler;
00060
00061 namespace EAthena {
00062
00063 GeneralHandler::GeneralHandler():
00064 mAdminHandler(new AdminHandler),
00065 mBeingHandler(new BeingHandler(config.getValue("EnableSync", 0) == 1)),
00066 mBuySellHandler(new BuySellHandler),
00067 mCharHandler(new CharServerHandler),
00068 mChatHandler(new ChatHandler),
00069 mEquipmentHandler(new EquipmentHandler),
00070 mInventoryHandler(new InventoryHandler),
00071 mItemHandler(new ItemHandler),
00072 mLoginHandler(new LoginHandler),
00073 mLogoutHandler(new LogoutHandler),
00074 mMapHandler(new MapHandler),
00075 mNpcHandler(new NpcHandler),
00076 mPartyHandler(new PartyHandler),
00077 mPlayerHandler(new PlayerHandler),
00078 mSkillHandler(new SkillHandler),
00079 mTradeHandler(new TradeHandler)
00080 {
00081 static const Uint16 _messages[] = {
00082 SMSG_CONNECTION_PROBLEM,
00083 0
00084 };
00085 handledMessages = _messages;
00086 generalHandler = this;
00087
00088 std::list<ItemDB::Stat*> stats;
00089 ItemDB::Stat stat;
00090 stat.tag = "str"; stat.format = N_("Strength: %d");
00091 stats.push_back(&stat);
00092 stat.tag = "agi"; stat.format = N_("Agility: %d");
00093 stats.push_back(&stat);
00094 stat.tag = "vit"; stat.format = N_("Vitality: %d");
00095 stats.push_back(&stat);
00096 stat.tag = "int"; stat.format = N_("Intelligence: %d");
00097 stats.push_back(&stat);
00098 stat.tag = "dex"; stat.format = N_("Dexterity: %d");
00099 stats.push_back(&stat);
00100 stat.tag = "luck"; stat.format = N_("Luck: %d");
00101 stats.push_back(&stat);
00102
00103 ItemDB::setStatsList(stats);
00104 }
00105
00106 GeneralHandler::~GeneralHandler()
00107 {
00108 delete mNetwork;
00109 }
00110
00111 void GeneralHandler::handleMessage(MessageIn &msg)
00112 {
00113 int code;
00114
00115 switch (msg.getId())
00116 {
00117 case SMSG_CONNECTION_PROBLEM:
00118 code = msg.readInt8();
00119 logger->log("Connection problem: %i", code);
00120
00121 switch (code) {
00122 case 0:
00123 errorMessage = _("Authentication failed");
00124 break;
00125 case 1:
00126 errorMessage = _("No servers available");
00127 break;
00128 case 2:
00129 errorMessage = _("This account is already logged in");
00130 break;
00131 case 3:
00132 errorMessage = _("Speed hack detected");
00133 break;
00134 case 8:
00135 errorMessage = _("Duplicated login");
00136 break;
00137 default:
00138 errorMessage = _("Unknown connection error");
00139 break;
00140 }
00141 state = STATE_ERROR;
00142 break;
00143 }
00144 }
00145
00146 void GeneralHandler::load()
00147 {
00148 mNetwork->registerHandler(mAdminHandler.get());
00149 mNetwork->registerHandler(mBeingHandler.get());
00150 mNetwork->registerHandler(mBuySellHandler.get());
00151 mNetwork->registerHandler(mChatHandler.get());
00152 mNetwork->registerHandler(mCharHandler.get());
00153 mNetwork->registerHandler(mEquipmentHandler.get());
00154 mNetwork->registerHandler(mInventoryHandler.get());
00155 mNetwork->registerHandler(mItemHandler.get());
00156 mNetwork->registerHandler(mLoginHandler.get());
00157 mNetwork->registerHandler(mLogoutHandler.get());
00158 mNetwork->registerHandler(mMapHandler.get());
00159 mNetwork->registerHandler(mNpcHandler.get());
00160 mNetwork->registerHandler(mPlayerHandler.get());
00161 mNetwork->registerHandler(mSkillHandler.get());
00162 mNetwork->registerHandler(mTradeHandler.get());
00163 mNetwork->registerHandler(mPartyHandler.get());
00164 }
00165
00166 void GeneralHandler::unload()
00167 {
00168 mNetwork->clearHandlers();
00169 }
00170
00171 void GeneralHandler::flushNetwork()
00172 {
00173 if (!mNetwork)
00174 return;
00175
00176 mNetwork->flush();
00177 mNetwork->dispatchMessages();
00178 }
00179
00180 bool GeneralHandler::isNetworkConnected()
00181 {
00182 return mNetwork->isConnected();
00183 }
00184
00185 void GeneralHandler::tick()
00186 {
00187 if (!mNetwork)
00188 return;
00189
00190 if (mNetwork->getState() == Network::NET_ERROR)
00191 {
00192 state = STATE_ERROR;
00193
00194 if (!mNetwork->getError().empty())
00195 errorMessage = mNetwork->getError();
00196 else
00197 errorMessage = _("Got disconnected from server!");
00198 }
00199 }
00200
00201 void GeneralHandler::guiWindowsLoaded()
00202 {
00203 partyTab = new PartyTab;
00204 }
00205
00206 void GeneralHandler::guiWindowsUnloaded()
00207 {
00208 delete partyTab;
00209 }
00210
00211 }