summaryrefslogtreecommitdiffstats
path: root/src/game-server
diff options
context:
space:
mode:
authorPhilipp Sehmisch <tmw@crushnet.org>2008-11-01 19:03:14 +0000
committerPhilipp Sehmisch <tmw@crushnet.org>2008-11-01 19:03:14 +0000
commit7cdecda38dc75dd855a45af6faad14d1c1e4e72f (patch)
tree9fe6a6b31afcc0a710e6c327ad29a5c91db959ef /src/game-server
parentad5efe104cd7639009622393f16bfd93075fcb34 (diff)
Magic implementation roadmap phase 1 and 2 (calling a script function on PGMSG_USE_SPECIAL)
Diffstat (limited to 'src/game-server')
-rw-r--r--src/game-server/character.cpp15
-rw-r--r--src/game-server/character.hpp6
-rw-r--r--src/game-server/gamehandler.cpp8
3 files changed, 29 insertions, 0 deletions
diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp
index bf8355c..61a5e1d 100644
--- a/src/game-server/character.cpp
+++ b/src/game-server/character.cpp
@@ -39,6 +39,7 @@
#include "game-server/mapmanager.hpp"
#include "game-server/state.hpp"
#include "game-server/trade.hpp"
+#include "scripting/script.hpp"
#include "net/messagein.hpp"
#include "net/messageout.hpp"
#include "serialize/characterdata.hpp"
@@ -141,6 +142,20 @@ void Character::respawn()
modifiedAttribute(BASE_ATTR_HP);
}
+void Character::useSpecial(int id)
+{
+ //TODO: look up which of its special attacks the character wants to use
+ //TODO: check if the character is allowed to use it right now
+
+ Script *s = getMap()->getScript();
+ s->prepare("cast");
+ s->push(this);
+ s->push(id);
+ s->execute();
+
+ return;
+}
+
int Character::getMapId() const
{
return getMap()->getID();
diff --git a/src/game-server/character.hpp b/src/game-server/character.hpp
index 0300671..6e31e33 100644
--- a/src/game-server/character.hpp
+++ b/src/game-server/character.hpp
@@ -68,6 +68,12 @@ class Character : public Being
void respawn();
/**
+ * makes the character perform a special action
+ * when it is allowed to do so
+ */
+ void useSpecial(int id);
+
+ /**
* Gets client computer.
*/
GameClient *getClient() const
diff --git a/src/game-server/gamehandler.cpp b/src/game-server/gamehandler.cpp
index 9fd93a4..005c19c 100644
--- a/src/game-server/gamehandler.cpp
+++ b/src/game-server/gamehandler.cpp
@@ -321,6 +321,14 @@ void GameHandler::processMessage(NetComputer *comp, MessageIn &message)
computer.character->setAction(Being::ATTACK);
} break;
+ case PGMSG_USE_SPECIAL:
+ {
+ int specialID = message.readByte();
+ LOG_DEBUG("Character " << computer.character->getPublicID()
+ << " tries to use his special attack "<<specialID);
+ computer.character->useSpecial(specialID);
+ }
+
case PGMSG_ACTION_CHANGE:
{
Being::Action action = (Being::Action)message.readByte();