GL

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

Por glugluguga, 19 de jun. de 2011 em Linguagens de Programação

otserv
tibia
script
38
11.3k
gluglugugaG
19 de junho de 2011 às 11:50

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 Julho 22 por glugluguga

jeancassio2010J
19 de junho de 2011 às 14:25

ai sim maninho, eu usei akela doCreateCustomMonster, mas era muito pesada pro nick system, vou fazer com essa ai e postar junto à um server!!

valew.

gluglugugaG
19 de junho de 2011 às 15:54

Valeu pq?

Eu só trouxe ela pra ca kkk.

Mesmo assim vlw pelo rep ae.

SkyDangerousS
19 de junho de 2011 às 18:22

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 +

gluglugugaG
19 de junho de 2011 às 20:15

Quem dera, se eu pudesse estaria sempre aqui ajudando ao xtibia e a todos.

CifferC
24 de junho de 2011 às 17:45

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 Junho 24 por Ciffer

Samuel2011S
24 de junho de 2011 às 18:52

muito bom gostei parabens obrigado pelo tutorial explicando exatamente com otem q faze :button_ok:

dranskrD
26 de junho de 2011 às 21:17

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.

jeancassio2010J
26 de junho de 2011 às 21:22

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 Junho 26 por jeancassio

dranskrD
26 de junho de 2011 às 21:28

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.

jeancassio2010J
26 de junho de 2011 às 22:17

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

dranskrD
26 de junho de 2011 às 23:36

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.

gluglugugaG
02 de julho de 2011 às 04:42

Jean, não vi esse erro ai não :S

: por ;

2 semanas depois...
meubkM
09 de julho de 2011 às 11:31

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 Julho 9 por xotservx

Henrique127H
10 de julho de 2011 às 13:14

So Uma Duvida Nao Consegui Acha O Monter.h ,, Alguem Poderia Me Dizer Aonde Se Encontra Ele ?

 

 

Gratoo !