CA

doCreateMonsterNick(monster, nick, pos)

Por caotic, 24 de jan. de 2014 em Linguagens de Programação

nick system
mudança de nome
pokemon nick
nick
name changer
name monster
otserv
tibia
script
29
7k
11 de março de 2014 às 00:12

Alguem podia concertar esse codigo dele porque o nome realmente não aparece

Nu77N
11 de março de 2014 às 06:11
virtual const std::string& getName() const {return nick;}

por

virtual const std::string& getName() const {return mType->name;}
caoticC
11 de março de 2014 às 16:25

Basta ir em monster.cpp e procurar:

currentOutfit = mType->outfit;

Adicionar embaixo:

nick = mType->name;

Editado Março 11 por caotic

AberosA
11 de março de 2014 às 18:50

é possivel usar essa função em um goback de poketibia para atribuir nick?

11 de março de 2014 às 19:23
if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster())
lua_pushstring(L, monster->realname.c_str());
else
{
errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
lua_pushboolean(L, false);
}
tem como por pra se não tiver um nick, ele executar a : lua_pushstring(L, creature->getName().c_str());
por uso um sistema onKill que pega a informação do nome, e eu preciso dessa sua função , mas ai ele só pega o nome real de creatura que tem nick, queria que funcionasse com monstro normal também.
caoticC
11 de março de 2014 às 23:39

 

if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster())
lua_pushstring(L, monster->realname.c_str());
else
{
errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
lua_pushboolean(L, false);
}
tem como por pra se não tiver um nick, ele executar a : lua_pushstring(L, creature->getName().c_str());

por uso um sistema onKill que pega a informação do nome, e eu preciso dessa sua função , mas ai ele só pega o nome real de creatura que tem nick, queria que funcionasse com monstro normal também.

 

int32_t LuaScriptInterface::luaGetCreatureNickRealName(lua_State* L)
{
//getCreatureNickRealName(cid)
std::string name;
if(!Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster()) {
errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
lua_pushboolean(L, false);
return 1;
}

name = monster->realname;
if (name || name != "") {
lua_pushstring(L, name.c_str());
return 1;
}

lua_pushstring(L, monster->getName().c_str());
return 1;
}

Editado Março 11 por caotic

nociamN
15 de março de 2014 às 12:56

Se pode dar um exemplo de como usar ele em um goback de pokemon pra quanto o pokemon tiver exemplo o nome shiny pikachu na hora de sumonar aparece so pikachu?

SlicerS
15 de março de 2014 às 14:12
if string.find(name, "Shiny") then
   doCreateMonsterNick(name, name:match("Shiny (.*)"), getThingPos(cid))
else
   doCreateMonster(name, getThingPos(cid))
end

algu +/- assim eu achu... -no caso o 'name' ali seria o nome do poke q vai ser invocado...-

Editado Março 15 por Slicer

Jakson SouzaJ
15 de março de 2014 às 21:40

muito bom!

lucasromeroL
15 de março de 2014 às 23:04

 

Continue em luascript.cpp e procure isto:

 

 

int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L)
{
    //getCreatureName(cid)
    ScriptEnviroment* env = getEnv();
    if(Creature* creature = env->getCreatureByUID(popNumber(L)))
        lua_pushstring(L, creature->getName().c_str());
    else
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }

    return 1;
}

 

 

 

Coloque isto:

 

 

 

int32_t LuaScriptInterface::luaGetCreatureNickRealName(lua_State* L)
{
    //getCreatureNickRealName(cid)
    ScriptEnviroment* env = getEnv();
    if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster())
        lua_pushstring(L, monster->realname.c_str());
    else
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }

    return 1;
}


int32_t LuaScriptInterface::luaDoCreateMonsterNick(lua_State* L)
{
    //doCreateMonsterNick(monster, nick, pos)
    ScriptEnviroment* env = getEnv();
    PositionEx pos;
    popPosition(L, pos);
    std::string nick = popString(L);
    const std::string name = popString(L).c_str();
    
    Monster* monster = Monster::createMonsterNick(name, nick);
    if(!monster)
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
        return 1;
}

    if(!g_game.placeCreature(monster, pos))
    {
        delete monster;
            errorEx("Cannot create monster: " + name);
        lua_pushboolean(L, false);
        return 1;
    }
    
            monster->realname = name;
    lua_pushnumber(L, env->addThing((Thing*)monster));    
    return 1;
}

 

 

 

Substituir ou colocar em baixo do código? Pois se eu substituir dá erro na hora de compilar.

Outra coisa, o script funcionou, copiou nome etc..

Mais quando eu estou UPANDO e mato um bixo não nasce o respawn.

Poderia ajudar?

 

@Edit

 

Pronto, arrumei o erro, era só dar uma editada no script(distro) e fica funcional para mim.

Ótimo script.

Editado Março 16 por lucasromero

nociamN
17 de março de 2014 às 18:10

 

 

Continue em luascript.cpp e procure isto:

 

 

int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L)
{
    //getCreatureName(cid)
    ScriptEnviroment* env = getEnv();
    if(Creature* creature = env->getCreatureByUID(popNumber(L)))
        lua_pushstring(L, creature->getName().c_str());
    else
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }

    return 1;
}

 

 

 

Coloque isto:

 

 

 

int32_t LuaScriptInterface::luaGetCreatureNickRealName(lua_State* L)
{
    //getCreatureNickRealName(cid)
    ScriptEnviroment* env = getEnv();
    if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster())
        lua_pushstring(L, monster->realname.c_str());
    else
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }

    return 1;
}


int32_t LuaScriptInterface::luaDoCreateMonsterNick(lua_State* L)
{
    //doCreateMonsterNick(monster, nick, pos)
    ScriptEnviroment* env = getEnv();
    PositionEx pos;
    popPosition(L, pos);
    std::string nick = popString(L);
    const std::string name = popString(L).c_str();
    
    Monster* monster = Monster::createMonsterNick(name, nick);
    if(!monster)
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
        return 1;
}

    if(!g_game.placeCreature(monster, pos))
    {
        delete monster;
            errorEx("Cannot create monster: " + name);
        lua_pushboolean(L, false);
        return 1;
    }
    
            monster->realname = name;
    lua_pushnumber(L, env->addThing((Thing*)monster));    
    return 1;
}

 

 

 

Substituir ou colocar em baixo do código? Pois se eu substituir dá erro na hora de compilar.

Outra coisa, o script funcionou, copiou nome etc..

Mais quando eu estou UPANDO e mato um bixo não nasce o respawn.

Poderia ajudar?

 

@Edit

 

Pronto, arrumei o erro, era só dar uma editada no script(distro) e fica funcional para mim.

Ótimo script.

 

Nao tinha reprado nisso mais o que vc fez pra arrumar o erro?

caoticC
18 de março de 2014 às 12:01

 

 

 

Continue em luascript.cpp e procure isto:

 

 

int32_t LuaScriptInterface::luaGetCreatureName(lua_State* L)
{
    //getCreatureName(cid)
    ScriptEnviroment* env = getEnv();
    if(Creature* creature = env->getCreatureByUID(popNumber(L)))
        lua_pushstring(L, creature->getName().c_str());
    else
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }

    return 1;
}

 

 

 

Coloque isto:

 

 

 

int32_t LuaScriptInterface::luaGetCreatureNickRealName(lua_State* L)
{
    //getCreatureNickRealName(cid)
    ScriptEnviroment* env = getEnv();
    if(Monster* monster = env->getCreatureByUID(popNumber(L))->getMonster())
        lua_pushstring(L, monster->realname.c_str());
    else
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
    }

    return 1;
}


int32_t LuaScriptInterface::luaDoCreateMonsterNick(lua_State* L)
{
    //doCreateMonsterNick(monster, nick, pos)
    ScriptEnviroment* env = getEnv();
    PositionEx pos;
    popPosition(L, pos);
    std::string nick = popString(L);
    const std::string name = popString(L).c_str();
    
    Monster* monster = Monster::createMonsterNick(name, nick);
    if(!monster)
    {
        errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
        lua_pushboolean(L, false);
        return 1;
}

    if(!g_game.placeCreature(monster, pos))
    {
        delete monster;
            errorEx("Cannot create monster: " + name);
        lua_pushboolean(L, false);
        return 1;
    }
    
            monster->realname = name;
    lua_pushnumber(L, env->addThing((Thing*)monster));    
    return 1;
}

 

 

 

Substituir ou colocar em baixo do código? Pois se eu substituir dá erro na hora de compilar.

Outra coisa, o script funcionou, copiou nome etc..

Mais quando eu estou UPANDO e mato um bixo não nasce o respawn.

Poderia ajudar?

 

@Edit

 

Pronto, arrumei o erro, era só dar uma editada no script(distro) e fica funcional para mim.

Ótimo script.

 

Nao tinha reprado nisso mais o que vc fez pra arrumar o erro?

 

e para colocar embaixo.

Editado Março 18 por caotic

1 mês depois...
CreatservC
22 de abril de 2014 às 18:51

Vou teste.

3 anos depois...
29 de março de 2018 às 19:54

 

Meu monster.cpp não esta assim:  Base tbm 0.3.6

 

Nao tem:

Monster* Monster::createMonster(const std::string& name)
{
MonsterType* mType = g_monsters.getMonsterType(name);
if(!mType)
return NULL;
 
return createMonster(mType);
}
para poder Substituir por:
Monster* Monster::createMonster(const std::string& name)
{
MonsterType* mType = g_monsters.getMonsterType(name);
if(!mType)
return NULL;
 
mType->name = name;
 
return createMonster(mType);
}
 
Monster* Monster::createMonsterNick(const std::string& name, std::string nick)
{
MonsterType* mType = g_monsters.getMonsterType(name);
if(!mType)
return NULL;
if (!(nick == "")) {
                  mType->name = nick;
                 }
  
return createMonster(mType);
}

nem:

currentOutfit = mType->outfit;

para add:

nick = mType->name;

 

Segue em anexo meus monster.cpp se tiver como ajudar e revisalo fico grato.  

monster.rar