diff options
Diffstat (limited to 'src/game-server')
-rw-r--r-- | src/game-server/accountconnection.cpp | 9 | ||||
-rw-r--r-- | src/game-server/accountconnection.hpp | 5 | ||||
-rw-r--r-- | src/game-server/commandhandler.cpp | 43 | ||||
-rw-r--r-- | src/game-server/gamehandler.cpp | 75 |
4 files changed, 128 insertions, 4 deletions
diff --git a/src/game-server/accountconnection.cpp b/src/game-server/accountconnection.cpp index a69c5ea..10bc6b4 100644 --- a/src/game-server/accountconnection.cpp +++ b/src/game-server/accountconnection.cpp @@ -376,3 +376,12 @@ void AccountConnection::updateOnlineStatus(int charId, bool online) mSyncBuffer->writeByte(online ? 0x01 : 0x00); syncChanges(); } + +void AccountConnection::sendTransaction(int id, int action, const std::string &message) +{ + MessageOut msg(GAMSG_TRANSACTION); + msg.writeLong(id); + msg.writeLong(action); + msg.writeString(message); + send(msg); +} diff --git a/src/game-server/accountconnection.hpp b/src/game-server/accountconnection.hpp index 6e7bd1b..da42ea9 100644 --- a/src/game-server/accountconnection.hpp +++ b/src/game-server/accountconnection.hpp @@ -153,6 +153,11 @@ class AccountConnection : public Connection */ void updateOnlineStatus(int charId, bool online); + /** + * Send transaction to account server + */ + void sendTransaction(int id, int action, const std::string &message); + protected: /** * Processes server messages. diff --git a/src/game-server/commandhandler.cpp b/src/game-server/commandhandler.cpp index 3c716da..3e61fe8 100644 --- a/src/game-server/commandhandler.cpp +++ b/src/game-server/commandhandler.cpp @@ -34,6 +34,8 @@ #include "monstermanager.hpp" #include "state.hpp" +#include "../common/transaction.hpp" + #include "../utils/string.hpp" static void say(const std::string error, Character *player) @@ -132,6 +134,7 @@ static void handleHelp(Character *player, std::string &args) say("@reload", player); say("@setgroup <character> <AL level>", player); say("@announce <message>", player); + say("@history <number of transactions>", player); } } else @@ -220,6 +223,10 @@ static void handleWarp(Character *player, std::string &args) // now warp the player GameState::warp(other, map, x, y); + + // log transaction + std::string msg = "User warped to " + xstr + "x" + ystr; + accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_WARP, msg); } static void handleItem(Character *player, std::string &args) @@ -293,6 +300,11 @@ static void handleItem(Character *player, std::string &args) // insert the item into the inventory Inventory(other).insert(ic->getDatabaseID(), value); + + // log transaction + std::stringstream str; + str << "User created item " << ic->getDatabaseID(); + accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_ITEM, str.str()); } static void handleDrop(Character *player, std::string &args) @@ -344,6 +356,11 @@ static void handleDrop(Character *player, std::string &args) item->setMap(player->getMap()); item->setPosition(player->getPosition()); GameState::insertSafe(item); + + // log transaction + std::stringstream str; + str << "User created item " << ic->getDatabaseID(); + accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_DROP, str.str()); } static void handleMoney(Character *player, std::string &args) @@ -391,6 +408,10 @@ static void handleMoney(Character *player, std::string &args) // change how much money the player has Inventory(other).changeMoney(value); + + // log transaction + std::string msg = "User created " + valuestr + " money"; + accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_MONEY, msg); } static void handleSpawn(Character *player, std::string &args) @@ -451,6 +472,10 @@ static void handleSpawn(Character *player, std::string &args) // The map is full. Break out. break; } + + // log transaction + std::string msg = "User created monster " + monster->getName(); + accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_SPAWN, msg); } } @@ -562,6 +587,10 @@ static void handleBan(Character *player, std::string &args) // ban the player accountHandler->banCharacter(other, length); + + // log transaction + std::string msg = "User banned " + other->getName(); + accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_BAN, msg); } static void handleSetGroup(Character *player, std::string &args) @@ -628,6 +657,10 @@ static void handleSetGroup(Character *player, std::string &args) // change the player's account level accountHandler->changeAccountLevel(other, level); + + // log transaction + std::string msg = "User changed account level of " + other->getName() + " to " + levelstr; + accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_SETGROUP, msg); } static void handleAttribute(Character *player, std::string &args) @@ -750,7 +783,10 @@ static void handleRights(Character *player) say(str.str(), player); } - +static void handleHistory(Character *player, std::string args) +{ + // TODO: Get args number of transactions and show them to the player +} void CommandHandler::handleCommand(Character *player, const std::string &command) @@ -842,6 +878,11 @@ void CommandHandler::handleCommand(Character *player, if (checkPermission(player, AL_ADMIN)) handleAnnounce(player, args); } + else if (type == "history") + { + if (checkPermission(player, AL_ADMIN)) + handleHistory(player, args); + } else { say("Command not found. Enter @help to view the list of available commands.", player); diff --git a/src/game-server/gamehandler.cpp b/src/game-server/gamehandler.cpp index 675a0fc..7caa719 100644 --- a/src/game-server/gamehandler.cpp +++ b/src/game-server/gamehandler.cpp @@ -24,6 +24,7 @@ #include "game-server/gamehandler.hpp" +#include "common/transaction.hpp" #include "game-server/accountconnection.hpp" #include "game-server/buysell.hpp" #include "game-server/commandhandler.hpp" @@ -195,6 +196,8 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) break; } GameState::sayAround(computer.character, say); + std::string msg = computer.character->getName() + " said " + say; + accountHandler->sendTransaction(computer.character->getDatabaseID(), TRANS_MSG_PUBLIC, msg); } break; case PGMSG_NPC_TALK: @@ -242,6 +245,12 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) Inventory(computer.character) .insert(ic->getDatabaseID(), item->getAmount()); GameState::remove(item); + // log transaction + std::stringstream str; + str << "User picked up item " << ic->getDatabaseID() + << " at " << opos.x << "x" << opos.y; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_ITEM_PICKUP, str.str()); break; } } @@ -257,6 +266,12 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) if (ic->use(computer.character)) { inv.removeFromSlot(slot, 1); + // log transaction + std::stringstream str; + str << "User used item " << ic->getDatabaseID() + << " from slot " << slot; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_ITEM_USED, str.str()); } } } break; @@ -277,7 +292,15 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) // The map is full. Put back into inventory. inv.insert(ic->getDatabaseID(), amount - nb); delete item; + break; } + // log transaction + Point pt = computer.character->getPosition(); + std::stringstream str; + str << "User dropped item " << ic->getDatabaseID() + << " at " << pt.x << "x" << pt.y; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_ITEM_DROP, str.str()); } } break; @@ -307,6 +330,12 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) int slot2 = message.readByte(); int amount = message.readByte(); Inventory(computer.character).move(slot1, slot2, amount); + // log transaction + std::stringstream str; + str << "User moved item " + << " from slot " << slot1 << " to slot " << slot2; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_ITEM_MOVE, str.str()); } break; case PGMSG_ATTACK: @@ -346,6 +375,13 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) break; } + // log transaction + std::stringstream str; + str << "User changed action from " << current + << " to " << action; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_ACTION_CHANGE, str.str()); + } break; case PGMSG_DIRECTION_CHANGE: @@ -398,6 +434,12 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) } new Trade(computer.character, q); + + // log transaction + std::string str; + str = "User requested trade with " + q->getName(); + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_TRADE_REQUEST, str); } break; case PGMSG_TRADE_CANCEL: @@ -405,6 +447,7 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) case PGMSG_TRADE_ADD_ITEM: case PGMSG_TRADE_SET_MONEY: { + std::stringstream str; Trade *t = computer.character->getTrading(); if (!t) break; @@ -415,14 +458,28 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) break; case PGMSG_TRADE_ACCEPT : t->accept(computer.character); + // log transaction + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_TRADE_END, "User finished trading"); break; case PGMSG_TRADE_SET_MONEY: - t->setMoney(computer.character, message.readLong()); - break; + { + int money = message.readLong(); + t->setMoney(computer.character, money); + // log transaction + str << "User added " << money << " money to trade."; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_TRADE_MONEY, str.str()); + } break; case PGMSG_TRADE_ADD_ITEM: + { int slot = message.readByte(); t->addItem(computer.character, slot, message.readByte()); - break; + // log transaction + str << "User add item from slot " << slot; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_TRADE_ITEM, str.str()); + } break; } } break; @@ -452,6 +509,12 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) computer.character->getCorrectionPoints(), attribute, computer.character->getAttribute(attribute)); + + // log transaction + std::stringstream str; + str << "User increased attribute " << attribute; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_ATTR_INCREASE, str.str()); } } break; @@ -472,6 +535,12 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message) computer.character->getCorrectionPoints(), attribute, computer.character->getAttribute(attribute)); + + // log transaction + std::stringstream str; + str << "User decreased attribute " << attribute; + accountHandler->sendTransaction(computer.character->getDatabaseID(), + TRANS_ATTR_DECREASE, str.str()); } } break; |