diff options
author | Erik Schilling <ablu.erikschilling@googlemail.com> | 2012-07-08 17:20:34 +0200 |
---|---|---|
committer | Erik Schilling <ablu.erikschilling@googlemail.com> | 2012-07-08 17:54:57 +0200 |
commit | 4d88724f011090de417284668d2264931f1bfcc3 (patch) | |
tree | 94e2783c3f588e43663d7307730bc21dc46a64c9 | |
parent | 6da6afe8ad3ffc3d690af9b60975c5f183f2aba8 (diff) | |
download | manaserv-4d88724f011090de417284668d2264931f1bfcc3.tar.gz manaserv-4d88724f011090de417284668d2264931f1bfcc3.tar.bz2 manaserv-4d88724f011090de417284668d2264931f1bfcc3.tar.xz manaserv-4d88724f011090de417284668d2264931f1bfcc3.zip |
Added bind for setting login callback
Reviewed-by: bjorn.
-rw-r--r-- | src/game-server/character.cpp | 6 | ||||
-rw-r--r-- | src/game-server/character.h | 6 | ||||
-rw-r--r-- | src/game-server/gamehandler.cpp | 2 | ||||
-rw-r--r-- | src/scripting/lua.cpp | 8 |
4 files changed, 22 insertions, 0 deletions
diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp index 4816f3c1..71427342 100644 --- a/src/game-server/character.cpp +++ b/src/game-server/character.cpp @@ -55,6 +55,7 @@ const float Character::EXP_LEVEL_FLEXIBILITY = 1.0f; Script::Ref Character::mDeathCallback; Script::Ref Character::mDeathAcceptedCallback; +Script::Ref Character::mLoginCallback; static bool executeCallback(Script::Ref function, Character *character) { @@ -830,3 +831,8 @@ void Character::clearSpecials() { mSpecials.clear(); } + +void Character::triggerLoginCallback() +{ + executeCallback(mLoginCallback, this); +} diff --git a/src/game-server/character.h b/src/game-server/character.h index b465a90e..b5ef578a 100644 --- a/src/game-server/character.h +++ b/src/game-server/character.h @@ -419,6 +419,11 @@ class Character : public Being static void setDeathAcceptedCallback(Script *script) { script->assignCallback(mDeathAcceptedCallback); } + static void setLoginCallback(Script *script) + { script->assignCallback(mLoginCallback); } + + void triggerLoginCallback(); + protected: /** * Gets the way the actor blocks pathfinding for other objects @@ -524,6 +529,7 @@ class Character : public Being static Script::Ref mDeathCallback; static Script::Ref mDeathAcceptedCallback; + static Script::Ref mLoginCallback; // Set as a friend, but still a lot of redundant accessors. FIXME. template< class T > diff --git a/src/game-server/gamehandler.cpp b/src/game-server/gamehandler.cpp index f7ee6af4..8b8c67a3 100644 --- a/src/game-server/gamehandler.cpp +++ b/src/game-server/gamehandler.cpp @@ -371,6 +371,8 @@ void GameHandler::tokenMatched(GameClient *computer, Character *character) computer->disconnect(result); return; } + // Trigger login script bind + character->triggerLoginCallback(); result.writeInt8(ERRMSG_OK); computer->send(result); diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp index 7ec7e053..51ebaa5e 100644 --- a/src/scripting/lua.cpp +++ b/src/scripting/lua.cpp @@ -92,6 +92,13 @@ static int on_character_death_accept(lua_State *s) return 0; } +static int on_character_login(lua_State *s) +{ + luaL_checktype(s, 1, LUA_TFUNCTION); + Character::setLoginCallback(getScript(s)); + return 0; +} + static int on_being_death(lua_State *s) { luaL_checktype(s, 1, LUA_TFUNCTION); @@ -2367,6 +2374,7 @@ LuaScript::LuaScript(): static luaL_Reg const callbacks[] = { { "on_character_death", &on_character_death }, { "on_character_death_accept", &on_character_death_accept }, + { "on_character_login", &on_character_login }, { "on_being_death", &on_being_death }, { "on_being_remove", &on_being_remove }, { "on_update", &on_update }, |