DB
programação

SetCreaturename Bunshin

Por Dbko, 01 de mai. de 2014 em Archived

bunshin com nome
otserv
tibia
script
17
3.3k
DbkoD
01 de maio de 2014 às 09:53

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.
esse codigo ja exist aki no xtibia mas so copie e postei no xtibia
Vamos começar.

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

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.

agora em Seu mapa Wolrd Procure por uma position bem distante do mapa e crie uma areá pequena assim

aula.gif[/spoiler

e após isso você va em data spells e naruto e procure por bunshin e coloque essa spells

function onCastSpell(cid, var)
local cloth = getCreatureOutfit(cid)
local health = getCreatureHealth(cid)
local maxhealth = getCreatureMaxHealth(cid)
local MaximoSummon = 2

local summons = getCreatureSummons(cid)
if(table.maxn(summons) < MaximoSummon) then
local pos = getPlayerPosition(cid)
local bpos = {x=pos.x+2, y = pos.y, z = pos.z}
local farAwayPos = {x = 2061, y = 2056, z = 7} -- aki é a position onde o bunshin vai ir e vai voltar
local Bunshin = doCreateMonster("Bunshin", farAwayPos)
doConvinceCreature(cid, Bunshin)
setCreatureMaxHealth(Bunshin, maxhealth)
doCreatureAddHealth(Bunshin, health)
doSetCreatureOutfit(Bunshin, cloth, -1)
setCreatureName(Bunshin, "".. getCreatureName(cid) .."", "a ".. getCreatureName(cid) .."")
addEvent(doSendMagicEffect, 300, pos, 2)
addEvent(doTeleportThing, 300, Bunshin, pos)
return TRUE
end
end



pronto salve o mapa na position e o spells e renicie sue servidor e teste

bunshin.gif



Caso Algum Erro So Deixar Que Estarei Ajudando

Editado Maio 1 por Dbko

HeelSpyH
01 de maio de 2014 às 09:55

Coloca os créditos porque dai oque tu fez foi nada.

DbkoD
01 de maio de 2014 às 09:56

eu to Colocando os Spells e como ficou pq to arrumando e ta bugando

TechrlzT
01 de maio de 2014 às 10:43

Este script ja existe no forum, arrisco em dizer que você deu apenas Control+C e Control+V do topico existente, reportado para removerem..

SlicerS
01 de maio de 2014 às 10:52

e ve se da enter nos codigos pq se n os caras vao por do jeito q ta e vai ficar tudo em comentario...

WiihtopW
01 de maio de 2014 às 11:14

luan ja tem esse topico aqui no xtibia :/

DbkoD
01 de maio de 2014 às 11:16

Mano Si eu dei um Ctrl c e v mas eu editei á Spells Pra criar o bunshin com nome que muitos procuram e coloquei como é que tem que por na sources pq n queria reviver um topico para não causar flood então resolvir criar esse tutorial como coloca na sources o spelsl e como ficou

TechrlzT
01 de maio de 2014 às 11:45

Cade os creditos de quem criou o codigo??

DbkoD
01 de maio de 2014 às 11:55

Mano Tava na Otland e o Dono Deixou e outra o codigo tbm tem aki no xtibia os povo do xtibia demora muito de entender uma coisa meu Deus eu so copie o codigo e coloquei aki e spells pra os leks testarem creio que vai funfar então se o dono do Codigo Tive-se Conta no xtibia não sei e eu soube-se o nome eu colocaria os creditos dele oky

TechrlzT
01 de maio de 2014 às 12:40

Mano Tava na Otland e o Dono Deixou e outra o codigo tbm tem aki no xtibia os povo do xtibia demora muito de entender uma coisa meu Deus eu so copie o codigo e coloquei aki e spells pra os leks testarem creio que vai funfar então se o dono do Codigo Tive-se Conta no xtibia não sei e eu soube-se o nome eu colocaria os creditos dele oky

 

Certo, coloque os creditos ou ele te deixou ter autoria 100% do trabalho dele?

DbkoD
01 de maio de 2014 às 12:43

Sim ele Deixou a Autoria Por isso Postei Aki se não eu não ia postar né

TechrlzT
01 de maio de 2014 às 13:09

Sim ele Deixou a Autoria Por isso Postei Aki se não eu não ia postar né

 

Certo, duvido que ele tenha te dado autoria do trabalho mais então bote nos creditos que você que fez.

SlicerS
01 de maio de 2014 às 15:19

n era mais facil posta a spell e botar o link pro topico q ja tem essa funçao? u,U sem fla q tu ainda n desse os 'enters' no codigo.. se alguem sem muito conhecimento for por isso nas sources vai ficar quase tudo como comentario...

Junior001J
02 de maio de 2014 às 00:38

Esta parte esta declarada errada:

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

o certo seria:

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

Editado Maio 2 por Junior Silva

LordbaxxL
02 de maio de 2014 às 00:53

Funciona para usar assim --> "setCreatureName(monster, nick, "a "..nick..".") " <--- ?

Se Sim REP+