Olá pessoal, eu estava ajudando um amigo em um script de Tibia Naruto, e me deparei com a necessidade de usar uma função para trocar o nome de um summon, mas isso teria que ser inGame, e depois de procurar um pouco achei a função setCreatureName, que faz exatamente o que eu precisava. O que ela faz?
Como eu expliquei acima, ela muda o nome da Creature inGame, podendo ser bastante útil (dependendo da sua criatividade). Como instalar?
A instalação é feita inteiramente nas sources, então vamos lá .. 1 - No arquivo monster.h encontre esse trecho:
class Monster : public Creature
{
private:
Monster(MonsterType* _mType);
public:
E adicione isso abaixo de public::
std::string name, nameDescription;
2 - Ainda em monster.h procure por:
virtual const std::string& getName() const {return mType->name;}
E substitua por isso:
virtual const std::string& getName() const {return name;}
3 - Ainda em monster.h procure por:
virtual const std::string& getNameDescription() const {return mType->nameDescription;}
E substitua por isso:
virtual const std::string& getNameDescription() const {return nameDescription;}
4 - Ainda em monster.h procure por:
virtual std::string getDescription(int32_t) const {return mType->nameDescription + ".";}
E substitua por isso:
virtual std::string getDescription(int32_t) const {return nameDescription + ".";}
5 - Agora em monster.cpp procure por:
Monster::Monster(MonsterType* _mType):
Nas linhas abaixo tem a linha: raid = NULL; , adicione isso logo abaixo:
name = _mType->name;
nameDescription = _mType->nameDescription;
6 - Agora em luascript.h adicione isso perto das linhas semelhantes:
static int32_t luaSetCreatureName(lua_State* L);
7 - Agora em luascript.cpp adicione isso perto das linhas semelhantes:
//setCreatureName(cid, name, description)
lua_register(m_luaState, "setCreatureName", LuaInterface::luaSetCreatureName);
8 - Ainda em luascript.cpp adicione isso perto das linhas semelhantes:
int32_t LuaInterface::luaSetCreatureName(lua_State* L)
{
// setCreatureName(cid, newName, newDescription)
std::string newDesc = popString(L);
std::string newName = popString(L);
ScriptEnviroment* env = getEnv();
Creature* creature;
if (creature = env->getCreatureByUID(popNumber(L)))
{
Monster* monster = (Monster*)creature;
monster->name = newName;
monster->nameDescription = newDesc;
lua_pushboolean(L, true);
}
else
{
errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
lua_pushboolean(L, false);
}
return 1;
}
Pelo fato de algumas diferenças no modo de escrever a função entre as TFS, pode ocorrer erros, e então substitua as seguintes linhas dos 2 passos anteriores:
Créditos: Scarlet Ayeid
É isso pessoal ... um exemplo de uso dentro de alguma função é assim basicamente:
local pos = {x = 10, y = 10, z = 7}
local Teste = doCreateMonster("Rat", pos)
setCreatureName(Teste, ""..getCreatureName(cid).."", "a "..getCreatureName(cid).."")
Espero ter ajudado pessoal, até mais.