summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Sehmisch <mana@crushnet.org>2010-12-27 17:33:41 +0100
committerPhilipp Sehmisch <mana@crushnet.org>2010-12-27 17:33:41 +0100
commita1514113093733b65e36224dad81f6867edcb93c (patch)
tree2379ed168c9de7f8f6a920dc850210246c79fc5f
parent3f559162b2e3cb0b434095d0bac297f67ff53d86 (diff)
downloadmanaserv-a1514113093733b65e36224dad81f6867edcb93c.tar.gz
manaserv-a1514113093733b65e36224dad81f6867edcb93c.tar.bz2
manaserv-a1514113093733b65e36224dad81f6867edcb93c.tar.xz
manaserv-a1514113093733b65e36224dad81f6867edcb93c.zip
Transaction logging of various command, new transaction codes and style fix.
The @mute, @goto, @attribute and @announce commands now logs transactions to the database. Added new transaction codes to database. I've preliminarily added a lot of codes for not yet supported commands so that we needn't do a database update with every single commit which implements one. Also using the equivalent "say" helper function in place of the "GameState::sayTo" method in the command handler. Reviewed-by: Kage
-rw-r--r--example/serverdata/permissions.xml2
-rw-r--r--src/account-server/storage.cpp2
-rw-r--r--src/common/transaction.h23
-rw-r--r--src/game-server/commandhandler.cpp32
-rw-r--r--src/protocol.h3
-rw-r--r--src/sql/mysql/createTables.sql21
-rw-r--r--src/sql/mysql/updates/update_12_to_13.sql29
-rw-r--r--src/sql/sqlite/createTables.sql21
-rw-r--r--src/sql/sqlite/updates/update_12_to_13.sql30
9 files changed, 156 insertions, 7 deletions
diff --git a/example/serverdata/permissions.xml b/example/serverdata/permissions.xml
index 3f759951..52f9acaa 100644
--- a/example/serverdata/permissions.xml
+++ b/example/serverdata/permissions.xml
@@ -28,6 +28,8 @@
<allow>@ban</allow>
<allow>@mute</allow>
<allow>@history</allow>
+ <allow>@kick</allow>
+ <allow>@kill</allow>
</class>
<class level="5">
</class>
diff --git a/src/account-server/storage.cpp b/src/account-server/storage.cpp
index 43b32eeb..3862bd1b 100644
--- a/src/account-server/storage.cpp
+++ b/src/account-server/storage.cpp
@@ -39,7 +39,7 @@ static const char *DEFAULT_ITEM_FILE = "items.xml";
// Defines the supported db version
static const char *DB_VERSION_PARAMETER = "database_version";
-static const char *SUPPORTED_DB_VERSION = "12";
+static const char *SUPPORTED_DB_VERSION = "13";
/*
* MySQL specificities:
diff --git a/src/common/transaction.h b/src/common/transaction.h
index 2715176b..bc5d2a55 100644
--- a/src/common/transaction.h
+++ b/src/common/transaction.h
@@ -61,7 +61,28 @@ enum
TRANS_TRADE_MONEY,
TRANS_TRADE_ITEM,
TRANS_ATTR_INCREASE,
- TRANS_ATTR_DECREASE
+ TRANS_ATTR_DECREASE,
+ TRANS_CMD_MUTE,
+ TRANS_CMD_EXP,
+ TRANS_CMD_INVISIBLE,
+ TRANS_CMD_COMBAT,
+ TRANS_CMD_ANNOUNCE,
+ TRANS_CMD_LOCALANNOUNCE,
+ TRANS_CMD_KILL,
+ TRANS_CMD_FX,
+ TRANS_CMD_LOG,
+ TRANS_CMD_KILLMONSTERS,
+ TRANS_CMD_GOTO,
+ TRANS_CMD_GONEXT,
+ TRANS_CMD_GOPREV,
+ TRANS_CMD_IPBAN,
+ TRANS_CMD_WIPE_ITEMS,
+ TRANS_CMD_WIPE_LEVEL,
+ TRANS_CMD_SHUTDOWN_THIS,
+ TRANS_CMD_SHUTDOWN_ALL,
+ TRANS_CMD_RESTART_THIS,
+ TRANS_CMD_RESTART_ALL,
+ TRANS_CMD_ATTRIBUTE
};
#endif
diff --git a/src/game-server/commandhandler.cpp b/src/game-server/commandhandler.cpp
index 1daa6acc..5fbcb211 100644
--- a/src/game-server/commandhandler.cpp
+++ b/src/game-server/commandhandler.cpp
@@ -705,6 +705,11 @@ static void handleGoto(Character *player, std::string &args)
MapComposite *map = other->getMap();
const Point &pos = other->getPosition();
GameState::warp(player, map, pos.x, pos.y);
+
+ // log transaction
+ std::stringstream msg;
+ msg << "User warped own character to " << other->getName();
+ accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_GOTO, msg.str());
}
static void handleRecall(Character *player, std::string &args)
@@ -901,7 +906,7 @@ static void handleTakePermission(Character *player, std::string &args)
accountHandler->changeAccountLevel(other, permission);
// log transaction
- std::string msg = "User took right " + strPermission + " to " + other->getName();
+ std::string msg = "User took right " + strPermission + " from " + other->getName();
accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_SETGROUP, msg);
say("Sorry, "+player->getName()+" revoked your rights of a "+strPermission, other);
}
@@ -969,6 +974,12 @@ static void handleAttribute(Character *player, std::string &args)
// change the player's attribute
other->setAttribute(attr, value);
+
+ // log transaction
+ std::stringstream msg;
+ msg << "User changed attribute " << attr << " of player " << other->getName()
+ << " to " << value;
+ accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_ATTRIBUTE, msg.str());
}
static void handleReport(Character *player, std::string &args)
@@ -995,6 +1006,9 @@ static void handleAnnounce(Character *player, std::string &msg)
}
GameState::sayToAll(msg);
+
+ // log transaction
+ accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_ANNOUNCE, msg);
}
static void handleWhere(Character *player, std::string &)
@@ -1085,14 +1099,24 @@ static void handleMute(Character *player, std::string &args)
targetMsg << player->getName() << " unmuted you.";
userMsg << "You unmuted " << other->getName() << ".";
}
- GameState::sayTo(other, NULL, targetMsg.str());
- GameState::sayTo(player, NULL, userMsg.str());
+ say(targetMsg.str(), other);
+ say(userMsg.str(), player);
+
+ // log transaction
+ std::stringstream msg;
+ if (length > 0)
+ {
+ msg << "User muted " << other->getName() << " for " << length << " seconds.";
+ } else {
+ msg << "User unmuted " << other->getName();
+ }
+ accountHandler->sendTransaction(player->getDatabaseID(), TRANS_CMD_MUTE, msg.str());
}
static void handleDie(Character *player, std::string &args)
{
player->setAttribute(ATTR_HP, 0);
- GameState::sayTo(player, NULL, "You've killed yourself.");
+ say("You've killed yourself.", player);
}
void CommandHandler::handleCommand(Character *player,
diff --git a/src/protocol.h b/src/protocol.h
index 08539203..7c2e8e59 100644
--- a/src/protocol.h
+++ b/src/protocol.h
@@ -259,7 +259,8 @@ enum {
ERRMSG_ALREADY_TAKEN, // name used was already taken
ERRMSG_SERVER_FULL, // the server is overloaded
ERRMSG_TIME_OUT, // data failed to arrive in due time
- ERRMSG_LIMIT_REACHED // limit reached
+ ERRMSG_LIMIT_REACHED, // limit reached
+ ERRMSG_ADMINISTRATIVE_LOGOFF // kicked by server administrator
};
// used in AGMSG_REGISTER_RESPONSE to show state of item db
diff --git a/src/sql/mysql/createTables.sql b/src/sql/mysql/createTables.sql
index e080ec69..ab07cbda 100644
--- a/src/sql/mysql/createTables.sql
+++ b/src/sql/mysql/createTables.sql
@@ -456,3 +456,24 @@ INSERT INTO mana_transaction_codes VALUES ( 29, 'Trade money', 'Act
INSERT INTO mana_transaction_codes VALUES ( 30, 'Trade items', 'Actions' );
INSERT INTO mana_transaction_codes VALUES ( 31, 'Attribute increased', 'Character' );
INSERT INTO mana_transaction_codes VALUES ( 32, 'Attribute decreased', 'Character' );
+INSERT INTO mana_transaction_codes VALUES ( 33, 'Command MUTE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 34, 'Command EXP', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 35, 'Command INVISIBLE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 36, 'Command COMBAT', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 37, 'Command ANNOUNCE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 38, 'Command ANNOUNCE_LOCAL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 39, 'Command KILL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 40, 'Command FX', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 41, 'Command LOG', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 42, 'Command KILLMONSTER', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 43, 'Command GOTO', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 44, 'Command GONEXT', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 45, 'Command GOPREV', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 46, 'Command IPBAN', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 47, 'Command WIPE_ITEMS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 48, 'Command WIPE_LEVEL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 49, 'Command SHUTDOWN_THIS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 50, 'Command SHUTDOWN_ALL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 51, 'Command RESTART_THIS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 52, 'Command RESTART_ALL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 53, 'Command ATTRIBUTE', 'Commands' );
diff --git a/src/sql/mysql/updates/update_12_to_13.sql b/src/sql/mysql/updates/update_12_to_13.sql
new file mode 100644
index 00000000..27cb8340
--- /dev/null
+++ b/src/sql/mysql/updates/update_12_to_13.sql
@@ -0,0 +1,29 @@
+-- insert new transaction codes
+INSERT INTO mana_transaction_codes VALUES ( 33, 'Command MUTE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 34, 'Command EXP', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 35, 'Command INVISIBLE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 36, 'Command COMBAT', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 37, 'Command ANNOUNCE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 38, 'Command ANNOUNCE_LOCAL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 39, 'Command KILL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 40, 'Command FX', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 41, 'Command LOG', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 42, 'Command KILLMONSTER', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 43, 'Command GOTO', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 44, 'Command GONEXT', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 45, 'Command GOPREV', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 46, 'Command IPBAN', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 47, 'Command WIPE_ITEMS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 48, 'Command WIPE_LEVEL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 49, 'Command SHUTDOWN_THIS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 50, 'Command SHUTDOWN_ALL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 51, 'Command RESTART_THIS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 52, 'Command RESTART_ALL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 53, 'Command ATTRIBUTE', 'Commands' );
+
+-- Update database version.
+UPDATE mana_world_states
+SET value = '13',
+moddate = UNIX_TIMESTAMP()
+WHERE state_name = 'database_version';
+
diff --git a/src/sql/sqlite/createTables.sql b/src/sql/sqlite/createTables.sql
index 6ce52900..e279aece 100644
--- a/src/sql/sqlite/createTables.sql
+++ b/src/sql/sqlite/createTables.sql
@@ -441,3 +441,24 @@ INSERT INTO mana_transaction_codes VALUES ( 29, 'Trade money', 'Act
INSERT INTO mana_transaction_codes VALUES ( 30, 'Trade items', 'Actions' );
INSERT INTO mana_transaction_codes VALUES ( 31, 'Attribute increased', 'Character' );
INSERT INTO mana_transaction_codes VALUES ( 32, 'Attribute decreased', 'Character' );
+INSERT INTO mana_transaction_codes VALUES ( 33, 'Command MUTE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 34, 'Command EXP', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 35, 'Command INVISIBLE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 36, 'Command COMBAT', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 37, 'Command ANNOUNCE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 38, 'Command ANNOUNCE_LOCAL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 39, 'Command KILL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 40, 'Command FX', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 41, 'Command LOG', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 42, 'Command KILLMONSTER', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 43, 'Command GOTO', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 44, 'Command GONEXT', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 45, 'Command GOPREV', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 46, 'Command IPBAN', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 47, 'Command WIPE_ITEMS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 48, 'Command WIPE_LEVEL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 49, 'Command SHUTDOWN_THIS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 50, 'Command SHUTDOWN_ALL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 51, 'Command RESTART_THIS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 52, 'Command RESTART_ALL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 53, 'Command ATTRIBUTE', 'Commands' );
diff --git a/src/sql/sqlite/updates/update_12_to_13.sql b/src/sql/sqlite/updates/update_12_to_13.sql
new file mode 100644
index 00000000..af639df7
--- /dev/null
+++ b/src/sql/sqlite/updates/update_12_to_13.sql
@@ -0,0 +1,30 @@
+-- insert new transaction codes
+INSERT INTO mana_transaction_codes VALUES ( 33, 'Command MUTE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 34, 'Command EXP', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 35, 'Command INVISIBLE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 36, 'Command COMBAT', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 37, 'Command ANNOUNCE', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 38, 'Command ANNOUNCE_LOCAL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 39, 'Command KILL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 40, 'Command FX', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 41, 'Command LOG', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 42, 'Command KILLMONSTER', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 43, 'Command GOTO', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 44, 'Command GONEXT', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 45, 'Command GOPREV', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 46, 'Command IPBAN', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 47, 'Command WIPE_ITEMS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 48, 'Command WIPE_LEVEL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 49, 'Command SHUTDOWN_THIS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 50, 'Command SHUTDOWN_ALL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 51, 'Command RESTART_THIS', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 52, 'Command RESTART_ALL', 'Commands' );
+INSERT INTO mana_transaction_codes VALUES ( 53, 'Command ATTRIBUTE', 'Commands' );
+
+-- update the database version, and set date of update
+UPDATE mana_world_states
+ SET value = '13',
+ moddate = strftime('%s','now')
+ WHERE state_name = 'database_version';
+
+