diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game-server/being.hpp | 11 | ||||
-rw-r--r-- | src/game-server/character.cpp | 6 | ||||
-rw-r--r-- | src/game-server/character.hpp | 11 | ||||
-rw-r--r-- | src/game-server/mapreader.cpp | 2 | ||||
-rw-r--r-- | src/game-server/npc.cpp | 3 | ||||
-rw-r--r-- | src/game-server/npc.hpp | 2 | ||||
-rw-r--r-- | src/game-server/state.cpp | 2 | ||||
-rw-r--r-- | src/scripting/lua.cpp | 18 | ||||
-rw-r--r-- | src/scripting/script.cpp | 3 | ||||
-rw-r--r-- | src/scripting/script.hpp | 7 |
10 files changed, 42 insertions, 23 deletions
diff --git a/src/game-server/being.hpp b/src/game-server/being.hpp index b725bfee..6c7ff398 100644 --- a/src/game-server/being.hpp +++ b/src/game-server/being.hpp @@ -218,6 +218,16 @@ class Being : public MovingObject */ virtual void modifiedAttribute(int) {} + /** Gets the name of the being. */ + std::string const & + getName() const + { return mName; } + + /** Sets the name of the being. */ + void + setName(const std::string& name) + { mName = name; } + protected: static const int TICKS_PER_HP_REGENERATION = 100; Action mAction; @@ -227,6 +237,7 @@ class Being : public MovingObject Being(Being const &rhs); Being &operator=(Being const &rhs); + std::string mName; /**< Name of the being. */ Hits mHitsTaken; /**< List of punches taken since last update */ AttributeModifiers mModifiers; /**< Currently modified attributes. */ int mHpRegenTimer; /**< timer for hp regeneration*/ diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp index e21de7c9..f169bd26 100644 --- a/src/game-server/character.cpp +++ b/src/game-server/character.cpp @@ -59,7 +59,7 @@ Character::Character(MessageIn &msg): mExperience.resize(CHAR_SKILL_NB, 0); // Get character data. mDatabaseID = msg.readLong(); - mName = msg.readString(); + setName(msg.readString()); deserializeCharacterData(*this, msg); for (int i = CHAR_ATTR_BEGIN; i < CHAR_ATTR_END; ++i) { @@ -120,7 +120,7 @@ void Character::respawn() { if (mAction != DEAD) { - LOG_WARN("Character \""<<mName<<"\" tried to respawn without being dead"); + LOG_WARN("Character \""<<getName()<<"\" tried to respawn without being dead"); return; } @@ -395,7 +395,7 @@ void Character::levelup() levelupMsg.writeShort(mCharacterPoints); levelupMsg.writeShort(mCorrectionPoints); gameHandler->sendTo(this, levelupMsg); - LOG_INFO(mName<<" reached level "<<mLevel); + LOG_INFO(getName()<<" reached level "<<mLevel); } AttribmodResponseCode Character::useCharacterPoint(size_t attribute) diff --git a/src/game-server/character.hpp b/src/game-server/character.hpp index 393a18d7..5e26b96c 100644 --- a/src/game-server/character.hpp +++ b/src/game-server/character.hpp @@ -139,16 +139,6 @@ class Character : public Being setDatabaseID(int id) { mDatabaseID = id; } - /** Gets the name of the character. */ - std::string const & - getName() const - { return mName; } - - /** Sets the name of the character. */ - void - setName(const std::string& name) - { mName = name; } - /** Gets the gender of the character (male or female). */ int getGender() const @@ -335,7 +325,6 @@ class Character : public Being std::vector<unsigned int> mExperience; /**< experience collected for each skill.*/ - std::string mName; /**< Name of the character. */ int mDatabaseID; /**< Character's database ID. */ unsigned char mGender; /**< Gender of the character. */ unsigned char mHairStyle; /**< Hair Style of the character. */ diff --git a/src/game-server/mapreader.cpp b/src/game-server/mapreader.cpp index 39d209d6..3d0a82ff 100644 --- a/src/game-server/mapreader.cpp +++ b/src/game-server/mapreader.cpp @@ -323,7 +323,7 @@ static Map *readMap(xmlNodePtr node, std::string const &path, MapComposite *comp if (npcId != -1 && scriptText != NULL) { - s->loadNPC(npcId, objX, objY, scriptText); + s->loadNPC(objName, npcId, objX, objY, scriptText); } else { diff --git a/src/game-server/npc.cpp b/src/game-server/npc.cpp index abc425ec..fd462c50 100644 --- a/src/game-server/npc.cpp +++ b/src/game-server/npc.cpp @@ -24,9 +24,10 @@ #include "game-server/npc.hpp" #include "scripting/script.hpp" -NPC::NPC(int id, Script *s): +NPC::NPC(const std::string &name, int id, Script *s): Being(OBJECT_NPC, 65535), mScript(s), mID(id) { + setName(name); } void NPC::update() diff --git a/src/game-server/npc.hpp b/src/game-server/npc.hpp index 2d790c4c..c4d8b384 100644 --- a/src/game-server/npc.hpp +++ b/src/game-server/npc.hpp @@ -34,7 +34,7 @@ class Character; class NPC : public Being { public: - NPC(int id, Script *); + NPC(const std::string &name, int id, Script *); void update(); diff --git a/src/game-server/state.cpp b/src/game-server/state.cpp index 03c6e3c1..a129e889 100644 --- a/src/game-server/state.cpp +++ b/src/game-server/state.cpp @@ -273,12 +273,14 @@ static void informPlayer(MapComposite *map, Character *p) { Monster *q = static_cast< Monster * >(o); enterMsg.writeShort(q->getSpecy()->getType()); + enterMsg.writeString(q->getName()); } break; case OBJECT_NPC: { NPC *q = static_cast< NPC * >(o); enterMsg.writeShort(q->getNPC()); + enterMsg.writeString(q->getName()); } break; default: diff --git a/src/scripting/lua.cpp b/src/scripting/lua.cpp index a8663f75..9f160bca 100644 --- a/src/scripting/lua.cpp +++ b/src/scripting/lua.cpp @@ -68,6 +68,8 @@ class LuaScript: public Script void push(int); + void push(const std::string &); + void push(Thing *); int execute(); @@ -180,11 +182,11 @@ static int LuaNpc_Choice(lua_State *s) /** * Callback for creating a NPC on the current map with the current script. - * tmw.npc_create(int id, int x, int y): npc + * tmw.npc_create(string name, int id, int x, int y): npc */ static int LuaNpc_Create(lua_State *s) { - if (!lua_isnumber(s, 1) || !lua_isnumber(s, 2) || !lua_isnumber(s, 3)) + if (!lua_isstring(s, 1), !lua_isnumber(s, 2) || !lua_isnumber(s, 3) || !lua_isnumber(s, 4)) { raiseScriptError(s, "npc_create called with incorrect parameters."); return 0; @@ -192,7 +194,7 @@ static int LuaNpc_Create(lua_State *s) lua_pushlightuserdata(s, (void *)®istryKey); lua_gettable(s, LUA_REGISTRYINDEX); Script *t = static_cast<Script *>(lua_touserdata(s, -1)); - NPC *q = new NPC(lua_tointeger(s, 1), t); + NPC *q = new NPC(lua_tostring(s, 1), lua_tointeger(s, 2), t); MapComposite *m = t->getMap(); if (!m) { @@ -200,7 +202,7 @@ static int LuaNpc_Create(lua_State *s) return 0; } q->setMap(m); - q->setPosition(Point(lua_tointeger(s, 2), lua_tointeger(s, 3))); + q->setPosition(Point(lua_tointeger(s, 3), lua_tointeger(s, 4))); bool b = GameState::insert(q); /* Do not try to deal with a failure there. There are some serious issues if an insertion failed on an almost empty map. */ @@ -711,6 +713,14 @@ void LuaScript::push(int v) ++nbArgs; } +void LuaScript::push(std::string const &v) +{ + assert(nbArgs >= 0); + lua_pushstring(mState, v.c_str()); + ++nbArgs; +} + + void LuaScript::push(Thing *v) { assert(nbArgs >= 0); diff --git a/src/scripting/script.cpp b/src/scripting/script.cpp index 0ebc2b4a..408bf28a 100644 --- a/src/scripting/script.cpp +++ b/src/scripting/script.cpp @@ -77,10 +77,11 @@ void Script::loadFile(std::string const &name) } } -void Script::loadNPC(int id, int x, int y, char const *prog) +void Script::loadNPC(std::string const &name, int id, int x, int y, char const *prog) { load(prog); prepare("create_npc_delayed"); + push(name); push(id); push(x); push(y); diff --git a/src/scripting/script.hpp b/src/scripting/script.hpp index 963c51f2..6a101edf 100644 --- a/src/scripting/script.hpp +++ b/src/scripting/script.hpp @@ -74,7 +74,7 @@ class Script * Loads a chunk of text and considers it as an NPC handler. This * handler will later be used to create the given NPC. */ - virtual void loadNPC(int id, int x, int y, char const *); + virtual void loadNPC(std::string const &name, int id, int x, int y, char const *); /** * Called every tick for the script to manage its data. @@ -94,6 +94,11 @@ class Script virtual void push(int) = 0; /** + * Pushes a string argument for the function being prepared. + */ + virtual void push(std::string const &) = 0; + + /** * Pushes a pointer argument to a game entity. * The interface can pass the pointer as an opaque value to the * scripting engine, if needed. This value will usually be passed |