Ir para conteúdo

Setcreaturename, 8.50+, Muda O Nome Da Criature In-Game


Posts Recomendados

Versão testada pelo Autor do post: TFS 0.4 rev 4395

Provavelmente pode ser usada em outras versões

Versão testada por mim: TFS 0.3.6 pl1

Nome do code: setCreatureName(cid, newName, newNameDescription)

Pra quem não sabe nameDescription é o nomezinho que aparecerá quando você der look.

Exemplo: You see a troll.

a parte do "troll" é a descrição do nome.

Autor: Quetzalma(ou outro sei la, mais o que diz no post é que foi ele quem fez)

O que ela faz:

Esta função lhe permite renomear um único monstro no jogo para que, se você quiser um único monstro com um nome único, você não tem que fazer um arquivo novo monstro, simplesmente chamar esta função eo nome do monstro será o que você queria.

 

Vamos começar.

 

Bom, primeiramente queria dizer que este code não fui eu que fiz, e foi retirado da otland com autorização.

Se você não sabe absolutamente nada do que vou dizer, nem me pergunte como resolver o bug, eu apenas traduzi a página que foi postada este code.

 

Primeiramente vá em monster.h

 

E procure por:

class Monster : public Creature

 

feito isso você verá isto:

class Monster : public Creature
{
private:
	Monster(MonsterType* _mType);

public:
#ifdef __ENABLE_SERVER_DIAGNOSTIC__
	static uint32_t monsterCount;
#endif

 

Na parte de:

#ifdef __ENABLE_SERVER_DIAGNOSTIC__

 

Você adicionara em cima:

std::string name, nameDescription;

 

Ficando assim:

class Monster : public Creature
{
private:
	Monster(MonsterType* _mType);

public:
          std::string name, nameDescription;
#ifdef __ENABLE_SERVER_DIAGNOSTIC__
	static uint32_t monsterCount;
#endif

 

Agora você irá procurar por:

virtual const std::string& getName() const {return mType->name;}

e substituir por:

virtual const std::string& getName() const {return name;}

Depois procure por:

virtual const std::string& getNameDescription() const {return mType->nameDescription;}

substitua por:

virtual const std::string& getNameDescription() const {return nameDescription;}

novamente procure por:

virtual std::string getDescription(int32_t) const {return mType->nameDescription + ".";}

e substitua por:

virtual std::string getDescription(int32_t) const {return nameDescription + ".";}

 

Feito este você irá em monster.cpp

e procure por:

Monster::Monster(MonsterType* _mType):

provavelmente você verá:

Monster::Monster(MonsterType* _mType):
Creature()
{

   isIdle = true;
isMasterInRange = false;
teleportToMaster = false;
mType = _mType;
spawn = NULL;
raid = NULL;
   defaultOutfit = mType->outfit;
currentOutfit = mType->outfit;

e embaixo de raid = NULL; você adicionará:

    name = mType->name;
   nameDescription = mType->nameDescription;

 

feito isso você ira em luascript.h

e procure por:

		static int32_t luaDoPlayerSendCancel(lua_State* L);

logo abaixo você adicionará:

		static int32_t luaSetCreatureName(lua_State* L);

 

feito isso vá em luascript.cpp

e procure por:

	lua_register(m_luaState, "doPlayerSendCancel", LuaScriptInterface::luaDoPlayerSendCancel);

e adicione abaixo:

//setCreatureName(cid, name, description)
lua_register(m_luaState, "setCreatureName", LuaInterface::luaSetCreatureName);

depois procure por:

int32_t LuaScriptInterface::luaDoSendDefaultCancel(lua_State* L)

e adicione acima:

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;
}

 

Feito tudo o que foi pedido tecle Ctrl+F11 e bom proveito.

:thumbsupsmiley:

 

Dependendo do erro vá postando ai embaixo, quem sabe eu posso ajudar.

 

Agora quem saiba eu não possa fazer um nick system para o pessoal viciado em pokemon.

Editado por glugluguga
Link para o comentário
Compartilhar em outros sites

Olá glugluguga

 

Excelente trabalho , é bem legal utilizar essa função no jogo , depois eu vou testar certinho para ver se funciona , caso funcionar legalzinho eu fixo o tópico.

 

Obrigado por contribuir ao Xtibia.

 

REP +

Link para o comentário
Compartilhar em outros sites

Quando se é zika eh assim msm...



Rep+ continue assim manin

 

Mas tipo assim... eu sou novo em OT Servers, mas isso nao vem ao caso eu só quero saber onde fka esse "monter.h"

Editado por Ciffer
Link para o comentário
Compartilhar em outros sites

Olha adicionei tudo perfeitamente só que quando vai compilar onde tem

//setCreatureName(cid, name, description)
lua_register(m_luaState, "setCreatureName", LuaInterface::luaSetCreatureName);

em LuaInterface acontece um erro, então mudo para LuaScriptInterface como esta os outros e compila certo, ate ai beleza, agora quando tento executar a função no servidor não acontece nada e continua com o mesmo nick o monstro.

Queria saber se você testou e conseguiu executar a scritp perfeitamente me fale pois fiz tudo seguindo o seu tutorial ja que o tutorial da otland não conseguir intender direito.

 

Se resolver isso agradeço muito.

Link para o comentário
Compartilhar em outros sites

Vc tem que editar o codigo pra versao do TFS que vc ta usando!

essa ai é pra tfs 0.4(o guga pois 0.3.6pl1), mais nao é

BYE

edit:

ahh tbm tem isso que ta errado:

 

std::string name, nameDescription:

 

mude esse : para ; fikando assim:

 

std::string name, nameDescription;

 

 

Te ajudei??? Dê Rep++, não custa nada!

Editado por jeancassio
Link para o comentário
Compartilhar em outros sites

Eu fiz isso, o problema e que a função não ta rodando no server, apesar deu ter usado o 0.3.6 pl1 eu coloquei tudo certo para que pudesse ser compilado. O que quero saber e que se a função funciona mesmo e se algum ja testou pois aqui não deu certo.

Link para o comentário
Compartilhar em outros sites

Eu fiz isso, o problema e que a função não ta rodando no server, apesar deu ter usado o 0.3.6 pl1 eu coloquei tudo certo para que pudesse ser compilado. O que quero saber e que se a função funciona mesmo e se algum ja testou pois aqui não deu certo.

 

aki rodou normal, mas na versão 0.4, vo fazer na 0.3.6pl1 ai dps posto

flw

Link para o comentário
Compartilhar em outros sites

Conseguir resolver, o problema e que só e possível ver o nome trocado caso o monstro seja criado fora da areá do client, mesmo assim obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

há, vlw

 

REP +, por ter trazido, mais é da otland...

 

já fiz meu nick system :), fico perfect.

 

e arruma essa parte

std::string name, nameDescription:

 

que seria:

std::string name, nameDescription;

 

e tem que mudar algumas coisas pra tfs 0.3.6

Editado por xotservx
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...