ON

doStartTrade(cid, target, item)

Por Oneshot, 26 de out. de 2013 em Linguagens de Programação

otserv
tibia
script
18
3k
OneshotO
26 de outubro de 2013 às 17:40

Oi, pessoal.

 

Eu não sei se essa função é útil para vocês, mas lembro que um certo tempo atrás, teve um membro que pediu ela. Essa função no caso simula o funcionamento da opção "Trade with..."

 

Lembrando que foi feito com base no 0.4, então pode não funcionar em versões inferiores.

 

 

Em luascript.h, adicione essa linha, abaixo de linhas parecidas.

static int32_t luaDoStartTrade(lua_State* L);

Em luascript.cpp, adicione isso perto de linhas parecidas.

    //doStartTrade(cid, target, item)
    lua_register(m_luaState, "doStartTrade", LuaInterface::luaDoStartTrade);

Ainda em luascript.cpp, adicione isso logo abaixo de alguma estrutura parecida.

int32_t LuaInterface::luaDoStartTrade(lua_State* L)
{
    ScriptEnviroment* env = getEnv();

    Item* item = env->getItemByUID(popNumber(L));
    if(!item)
    {
        errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND));
        lua_pushboolean(L, false);
        return 1;
    }

    Player* target = env->getPlayerByUID(popNumber(L));
    Player* player = env->getPlayerByUID(popNumber(L));
    if(!player || !target)
    {
        errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
        lua_pushboolean(L, false);
        return 1;
    }


    if(g_game.internalStartTrade(player, target, item))
    {
        lua_pushboolean(L, true);
        return 1;
    }
    return 1;
}

Eu realmente não sei qual pode ser a utilização disso nos servidores, então, boa sorte com a criatividade, xtibianos.

 

Abraços.

Editado Janeiro 7 por Oneshot

BeekiB
26 de outubro de 2013 às 19:33

ótimo código, obrigado.

 

rep+

27 de outubro de 2013 às 08:17

poderia explicar pq tem duas variáveis com o msm valor o.O?

 

Player* target = env->getPlayerByUID(popNumber(L));
Player* player = env->getPlayerByUID(popNumber(L));

 

vlws, boa função

rep+

OneshotO
27 de outubro de 2013 às 08:19

poderia explicar pq tem duas variáveis com o msm valor o.O?

Player* target = env->getPlayerByUID(popNumber(L));
Player* player = env->getPlayerByUID(popNumber(L));

vlws, boa função

rep+

 

Elas não têm o mesmo valor. bigsmile.gif

Editado Outubro 27 por Oneshot

kttallanK
27 de outubro de 2013 às 10:42

Qual quer codigo de programação é bem vindo pois essa area não estar com muito conteud.

 

Parabens você é 10, Ja sei como vou usar ele haha ^^

gonorreiaswatG
27 de outubro de 2013 às 14:01

Não entendi exatamente o que faz, mas o código está ótimo.

LuckOakeL
27 de outubro de 2013 às 14:05

Maneiro, dá pra fazer muitas coisas com isso.

 

Poderia dar suporte pra trade com NPCs e até monstros (?), tipo parte de quest, ficaria legal.

1 mês depois...
MartelixM
08 de novembro de 2013 às 09:41

Com isso dá pra fazer um trade a distância (?)

 

Ótimos códigos você tem, parabéns!

OneshotO
08 de novembro de 2013 às 14:54

Com isso dá pra fazer um trade a distância (?)

 

Ótimos códigos você tem, parabéns!

 

Isso mesmo

MaenilseM
08 de novembro de 2013 às 15:21

muito bom esse codigo, vai ajudar muitas pessoas que querem esse sistema, ja to usando no meu tfs 0.3.6, dei uma adaptada para poder ser adcionada e ser compilada sem error, rep+ ae Umtiro seu lindao.

 

PS: aqui com a nova distro, funcionou sem problemas, com a adaptaçao q eu fiz, funciona o trade msm em distancia do mesmo.

Editado Novembro 8 por Maenilse

MartelixM
08 de novembro de 2013 às 16:51

 

Com isso dá pra fazer um trade a distância (?)

 

Ótimos códigos você tem, parabéns!

 

Isso mesmo

 

 

Oneshot, teria como fazer por exemplo para não aceitar qualquer tipo de runa/potion no trade porque se não tiraria o RPG do jogo dando trade à distância por exemplo para pegar pot para não sair da hunt.

ACredito que com um evento em creaturescripts de, não?

OneshotO
08 de novembro de 2013 às 19:25

 

 

Com isso dá pra fazer um trade a distância (?)

 

Ótimos códigos você tem, parabéns!

 

Isso mesmo

 

 

Oneshot, teria como fazer por exemplo para não aceitar qualquer tipo de runa/potion no trade porque se não tiraria o RPG do jogo dando trade à distância por exemplo para pegar pot para não sair da hunt.

ACredito que com um evento em creaturescripts de, não?

 

 

Na verdade, essa função ignora os creaturescripts. Então você teria que verificar, antes de usar, se o ID do item é uma potion, por exemplo.

2 meses depois...
igorlabancaI
07 de janeiro de 2014 às 05:44

 

Em luascript.h, adicione essa linha, abaixo de linhas parecidas.

static int32_t luaDoPlayerSendMailByName(lua_State* L);

 

 

Não seria para adicionar

static int32_t luaDoStartTrade(lua_State* L);

 

 

Editado Janeiro 7 por igorlabanca

meubkM
07 de janeiro de 2014 às 17:27

posso criar o item ao criar o script ?

local item = doPlayerAddItem(cid, 2160, 1)

doStartTrade(cid, target, item)

?

OneshotO
08 de janeiro de 2014 às 08:35

Sim, a função precisa de um UID, então dessa forma que você propôs, é possível, embora eu não tenha testado.

 

Att.