Jump to content
Yan Liima

C++ [Lua & C++] getOtsysTime() + getPlayerPing(cid) + doPlayerSendPing(cid)

Recommended Posts

#Introdução

Bom hoje estarei trazendo aqui o sistema de Ping feito pelo Mock, com uma pequena adaptação feita por mim para funcionar em TFS 0.4(talvez podendo funcionar em outras)

Pois o que ele disponibilizou foi apenas para TFS 0.3.6 e nem foi muito utilizado pela comunidade. Muitos servidores daqui para download tem script no talk mas a lib está totalmente errada e não tem o code nas sources.

Esse sistema tem varias utilizades, podendo usar o comando !ping para verificar seu ms ou até mesmo por para kikar jogadores com ms muito alto...

Se você não sabe o cliente já tem um sistema de ping, e getOtsystime é como os.time () + os.clock (), você tem ano, mês, dia, hora, minutos, segundos, milisegundos...

Enfim chega de enrolação e vamos lá!

 

Code para TFS 0.4 e OTX:

Spoiler

Em luascript.cpp procure por:


lua_register(m_luaState, "doSetMonsterOutfit"

de baixo dessa função adicione:


//doPlayerSendPing(cid)
    lua_register(m_luaState, "doPlayerSendPing", LuaInterface::luaDoPlayerSendPing);
    //getPlayerLastPing(cid)
    lua_register(m_luaState, "getPlayerLastPing", LuaInterface::luaGetPlayerLastPing);
    //getPlayerLastPong(cid)
    lua_register(m_luaState, "getPlayerLastPong", LuaInterface::luaGetPlayerLastPong);
    //getOtsysTime(cid)
    lua_register(m_luaState, "getOtsysTime", LuaInterface::luaGetOtsysTime);

Ainda em luascript.cpp, lá no final adicione:


int32_t LuaInterface::luaDoPlayerSendPing(lua_State* L) // Adaptado by Yan Liima(Night for tibiaking.com)
{
    //doPlayerSendPing(cid)
    ScriptEnviroment* env = getEnv();
    Player* player = env->getPlayerByUID(popNumber(L));
    if(!player)
    {
        lua_pushboolean(L, false);
        return 1;
    }
    int64_t timeNow = OTSYS_TIME();
    player->lastPing = timeNow;
    if(player->client)
    {
            void sendPing();
            lua_pushboolean(L, true);
    }else{
          lua_pushboolean(L, false);        
          }
    lua_pushboolean(L, true);
 
    return 1;
}
int32_t LuaInterface::luaGetOtsysTime(lua_State* L)
{
    //getOtsysTime()
    lua_pushnumber(L, OTSYS_TIME());
    return 1;
}
int32_t LuaInterface::luaGetPlayerLastPing(lua_State* L)
{
    //getPlayerLastPing(cid)
    ScriptEnviroment* env = getEnv();
    Player* player = env->getPlayerByUID(popNumber(L));
    if(!player)
    {
        errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
         lua_pushboolean(L, false);
        return 1;
    }
    lua_pushnumber(L, player->lastPing);
    return 1;
}
int32_t LuaInterface::luaGetPlayerLastPong(lua_State* L)
{
    //getPlayerLastPong(cid)
    ScriptEnviroment* env = getEnv();
    Player* player = env->getPlayerByUID(popNumber(L));
    if(!player)
    {
        errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
         lua_pushboolean(L, false);
        return 1;
    }
    lua_pushnumber(L, player->lastPong);
    return 1;
}

Em luascript.h procure por:


//lua functions

E em cima disso adicione:


//Ping
        static int32_t luaDoPlayerSendPing(lua_State* L);
        static int32_t luaGetPlayerLastPing(lua_State* L);
        static int32_t luaGetPlayerLastPong(lua_State* L);
        static int32_t luaGetOtsysTime(lua_State* L);

 

 

Code para TFS 0.3.6

Spoiler

Em luascript.cpp procure por:


lua_register(m_luaState, "doSetMonsterOutfit"

de baixo dessa função adicione:


//doPlayerSendPing(cid)
    lua_register(m_luaState, "doPlayerSendPing", LuaScriptInterface::luadoPlayerSendPing);
    //getPlayerLastPing(cid)
    lua_register(m_luaState, "getPlayerLastPing", LuaScriptInterface::luagetPlayerLastPing);
    //getPlayerLastPong(cid)
    lua_register(m_luaState, "getPlayerLastPong", LuaScriptInterface::luagetPlayerLastPong);
    //getOtsysTime(cid)
    lua_register(m_luaState, "getOtsysTime", LuaScriptInterface::luagetOtsysTime);

Ainda em luascript.cpp, lá no final adicione:


int32_t LuaScriptInterface::luadoPlayerSendPing(lua_State* L)
{
    //doPlayerSendPing(cid)
    ScriptEnviroment* env = getEnv();
    Player* player = env->getPlayerByUID(popNumber(L));
    if(!player)
    {
        lua_pushboolean(L, false);
        return 1;
    }
    int64_t timeNow = OTSYS_TIME();
    player->lastPing = timeNow;
    if(player->client)
    {
            player->client->sendPing();
            lua_pushboolean(L, true);
    }else{
          lua_pushboolean(L, false);        
          }
    lua_pushboolean(L, true);
 
    return 1;
}
int32_t LuaScriptInterface::luagetOtsysTime(lua_State* L)
{
    //getOtsysTime()
    lua_pushnumber(L, OTSYS_TIME());
    return 1;
}
int32_t LuaScriptInterface::luagetPlayerLastPing(lua_State* L)
{
    //getPlayerLastPing(cid)
    ScriptEnviroment* env = getEnv();
    Player* player = env->getPlayerByUID(popNumber(L));
    if(!player)
    {
        errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
         lua_pushboolean(L, false);
        return 1;
    }
    lua_pushnumber(L, player->lastPing);
    return 1;
}
int32_t LuaScriptInterface::luagetPlayerLastPong(lua_State* L)
{
    //getPlayerLastPong(cid)
    ScriptEnviroment* env = getEnv();
    Player* player = env->getPlayerByUID(popNumber(L));
    if(!player)
    {
        errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND));
         lua_pushboolean(L, false);
        return 1;
    }
    lua_pushnumber(L, player->lastPong);
    return 1;
}

Em luascript.h procure por:


//lua functions

E em cima disso adicione:


 static int32_t luadoPlayerSendPing(lua_State* L);
        static int32_t luagetPlayerLastPing(lua_State* L);
        static int32_t luagetPlayerLastPong(lua_State* L);
        static int32_t luagetOtsysTime(lua_State* L);

 

 

LIB:

Spoiler

Na pasta lib do teu servidor em 050-functions.lua adicione:


function getPlayerPing(cid) -- getPlayerPing By mock
    local c = getPlayerLastPong(cid)
    local l = getPlayerLastPing(cid)
    if not c or not l then
        return 'Disconected'
    end
    local ping = math.floor((c-l)/10)
    if ping < 0 then
        if ping*-1 > 2000 then
            return 'Disconected'
        end
        return 'Wating response'
    end
    return ping
end

Para ficar totalmente completo, crie uma arquivo na pasta lib chamado 123-pinglib.lua


---Pinglib by mock the bear
ping = {
    _VERSION = "1.0";
    _AUTHOR = "Mock the bear";
    test = function()
        if not getPlayerLastPong then
            print('Error! Cannot run this lib without source changes.')
            return false
        else
            return true
        end
    end,
    CONST_WATING_RESPONSE = -3,
    CONST_DISCONECTED = -2,
}
 
function ping.CheckPing(cid) -- getPlayerPing By mock
    local c = getPlayerLastPong(cid)
    local l = getPlayerLastPing(cid)
    if not c or not l then
        return -2
    end
    local ping = math.floor((c-l)/10)
    if ping < 0 then
        if ping*-1 > 2000 then
            return -2
        end
        return -3
    end
    return ping
end
 
function ping.loop(cid,storage,f,...) -- check
    if not isPlayer(cid) then
        return false
    end
    local p_ing = ping.CheckPing(cid)
    if p_ing ~= CONST_WATING_RESPONSE then
        if not tonumber(p_ing) then
            doPlayerSetStorageValue(cid,storage,ping.CONST_DISCONECTED)
            return
        else
            doPlayerSetStorageValue(cid,storage,p_ing)
                        f(cid,storage,p_ing,...)
            return
        end
    end
    addEvent(ping.loop,100,cid,storage,f,...)
end
 
function ping.getPing(cid,storage,f,...) --- This function will send a ping request and wait the response, so then will add an value on a storage.
    if ping.test() then
        doPlayerSetStorageValue(cid,storage,ping.CONST_WATING_RESPONSE)
        doPlayerSendPing(cid)
        ping.loop(cid,storage,f,...)
    end
end

 

 

 

Prontinho, agora seu servidor está pronto para utilizar as funções de Ping. Seja criativo!

Ahh você é daqueles que quer tudo na mão né? Aqui vai um talkactions para ver o ping.

 

Em talkactions/scripts crie um arquivo chamado playerping.lua, cole isto dentro:

-- Script by Yan Liima(Night for tibiaking.com)
function onSay(cid, words, param, channel)
local ms = ping.CheckPing(cid)
	doPlayerSendTextMessage(cid,22,"Ping aproximado --> ["..ms.."].")
	return true
end

Em talkactions.xml

<talkaction words="!ping" event="script" value="playerping.lua"/>

 

Edited by Yan Liima (see edit history)

════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

Newstory dbo+nto+bleach[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

 

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.png.579c2e3c78f88666e1ffda5e74db4516.png

 

Te Ajudei? Rep + e ficamos Quits

166420979_logoyanliimaornight.png.33f822b8970081a5b3646e85dbfd5934.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.png.890d5a38d7bcde75543c72b624a65de1.pngDiscord: Yan Liima #3702

Mini programador de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Share this post


Link to post
Share on other sites

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

Share this post


Link to post
Share on other sites

Eu tive somente este erro na compilação. 0.4 @Yan Liima

 

 

luascript.cpp: In static member function ‘static int32_t LuaInterface::luaGetPlayerLastPing(lua_State*)’:
luascript.cpp:2723:13: error: unused variable ‘timeNow’ [-Werror=unused-variable]
     int64_t timeNow = OTSYS_TIME();
             ^
cc1plus: all warnings being treated as errors
make: *** [obj/luascript.o] Error 1
 

Share this post


Link to post
Share on other sites
42 minutos atrás, theeusata55 disse:

Eu tive somente este erro na compilação. 0.4 @Yan Liima

 

 

luascript.cpp: In static member function ‘static int32_t LuaInterface::luaGetPlayerLastPing(lua_State*)’:
luascript.cpp:2723:13: error: unused variable ‘timeNow’ [-Werror=unused-variable]
     int64_t timeNow = OTSYS_TIME();
             ^
cc1plus: all warnings being treated as errors
make: *** [obj/luascript.o] Error 1
 

 

 

Bom ao analisar o erro reparei que podia ter algo de errado. Então eu mesmo copiei o codigo e coloquei aqui para analisar. E como eu suspeitava, ao copiar o codigo está vindo uma string incorreta. Observe:

DD.png.d4db4627dc188ab3aa24a3554a7d5771.png

 

Corrija isso(apagando o: -) que dará tudo certo.

Edited by Yan Liima (see edit history)

════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

Newstory dbo+nto+bleach[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

 

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.png.579c2e3c78f88666e1ffda5e74db4516.png

 

Te Ajudei? Rep + e ficamos Quits

166420979_logoyanliimaornight.png.33f822b8970081a5b3646e85dbfd5934.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.png.890d5a38d7bcde75543c72b624a65de1.pngDiscord: Yan Liima #3702

Mini programador de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Share this post


Link to post
Share on other sites
36 minutos atrás, Yan Liima disse:

 

Bom ao analisar o erro reparei que podia ter algo de errado. Então eu mesmo copiei o codigo e coloquei aqui para analisar. E como eu suspeitava, ao copiar o codigo está vindo uma string incorreta. Observe:

DD.png.d4db4627dc188ab3aa24a3554a7d5771.png

 

Corrija isso(apagando o: -) que dará tudo certo.

 

@Yan Liima man, nao é isso.. o meu nao tem, eu imaginei q fosse, até escrevi essas linhas ai na mão. Posta o codigo no pastebin pra ver se da certo.

Share this post


Link to post
Share on other sites
19 horas atrás, theeusata55 disse:

@Yan Liima man, nao é isso.. o meu nao tem, eu imaginei q fosse, até escrevi essas linhas ai na mão. Posta o codigo no pastebin pra ver se da certo.

 

https://pastebin.com/PpJQ4jeK


════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

Newstory dbo+nto+bleach[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

 

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.png.579c2e3c78f88666e1ffda5e74db4516.png

 

Te Ajudei? Rep + e ficamos Quits

166420979_logoyanliimaornight.png.33f822b8970081a5b3646e85dbfd5934.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.png.890d5a38d7bcde75543c72b624a65de1.pngDiscord: Yan Liima #3702

Mini programador de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Share this post


Link to post
Share on other sites
6 minutos atrás, Calidoress disse:

codigo sux:/

 

Por?


════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

Newstory dbo+nto+bleach[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

 

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.png.579c2e3c78f88666e1ffda5e74db4516.png

 

Te Ajudei? Rep + e ficamos Quits

166420979_logoyanliimaornight.png.33f822b8970081a5b3646e85dbfd5934.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.png.890d5a38d7bcde75543c72b624a65de1.pngDiscord: Yan Liima #3702

Mini programador de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Share this post


Link to post
Share on other sites

luascript.cpp: In static member function ‘static int32_t LuaInterface::luaGetPlayerLastPing(lua_State*)’:
luascript.cpp:11214: error: unused variable ‘timeNow’


"Sua mente é capaz de te fazer sentir o inferno. Mas também o paraíso, e é você quem escolhe..."

 


 
Night-war.com
OT BOSTA NÃO ENTRE!

Se leu eh viado!

 

 

Share this post


Link to post
Share on other sites

@Jnetworks @doda4ever @theeusata55

Corrigido! caso ainda forem utilizar por favor me de retorno.


════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

Newstory dbo+nto+bleach[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

 

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.png.579c2e3c78f88666e1ffda5e74db4516.png

 

Te Ajudei? Rep + e ficamos Quits

166420979_logoyanliimaornight.png.33f822b8970081a5b3646e85dbfd5934.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.png.890d5a38d7bcde75543c72b624a65de1.pngDiscord: Yan Liima #3702

Mini programador de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Share this post


Link to post
Share on other sites
3 minutos atrás, Fabian Marzan disse:

to buscando umo do Ping em Look.

Infelizmente esse não estou disponibilizando :/. Pelos testes feitos, parece estar muito mais preciso que desse que foi publicado. Quem sabe um dia trago aqui pra comunidade! 😄 


════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

ALGUNS DOS MEUS TRABALHOS:

Spoiler

WODBOHS[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

Newstory dbo+nto+bleach[DOWNLOAD DISPONIVEL EM OUTRO FÓRUM]

 

- Projetos lançados também feitos por mim {

DBO SKY

POKE SKY

WODBOWARS

Tic-tac-War

Dbo Universe(em desenvolvimento)

}

universe.png.579c2e3c78f88666e1ffda5e74db4516.png

 

Te Ajudei? Rep + e ficamos Quits

166420979_logoyanliimaornight.png.33f822b8970081a5b3646e85dbfd5934.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.png.890d5a38d7bcde75543c72b624a65de1.pngDiscord: Yan Liima #3702

Mini programador de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By Mor3nao
      Eu procurei aqui no TK um sistema pra vc "desativar" o proprio pvp, te impedindo de pegar pk e nao encontrei um bacana, os que encontrei nao serviram no meu server, entao tentei fazer um, e bom, eis o resultado:
       
      Como funciona: O jogador usa um comando(!pvp) e então, ele fica impossibilitado de causar dano à outro player, a não ser, que o outro player esteja com alguma skull(obs: isso não impede que ele seja atacado, só que pegue pz)
       
      Para adicionar: 
      Abra o seu Combat.cpp e procure por
          if (attacker->getSkull() == SKULL_BLACK && attacker->getSkullClient(target) == SKULL_NONE) {         return true;     }     return false;  
      e troque por:
          if (attacker->getSkull() == SKULL_BLACK && attacker->getSkullClient(target) == SKULL_NONE) {         return true;     }     int32_t value;     if (attacker->getStorageValue(77777412, value) && attacker->getSkullClient(target) == SKULL_NONE) {         if (value == 1) {             return RETURNVALUE_TURNSECUREMODETOATTACKUNMARKEDPLAYERS;         }     }     return false;  
      Então vá para seu /data/talkactions/talkactions.xml e adicione a tag:
       
      <talkaction words="!pvp" script="pvp.lua"/>  
      Aí no /data/talkactions/scripts/pvp.lua e coloque:
      function onSay(player)     local switch = player:getStorageValue(77777412) == -1 and 1 or -1     player:sendTextMessage(MESSAGE_INFO_DESCR, 'PVP: (' .. (switch == 1 and 'OFF' or 'ON') .. ')')     player:setStorageValue(77777412, switch) end  
      obs: Não sei em quais versões isso funciona, no meu caso, eu usei no otservbr-global 12.31 e dá certo.
       
      E bom, é isso, espero que gostem, façam bom proveito 😃
       
    • By L3K0T
      Bom galera hoje vou ensinar a vocês como acelerar as Sprites do seu jogo pra ficar como do Tíbia Global, assista o vídeo abaixo que você vai entender.
       
       
       
      Primeiramente vá na source do seu OTClient 0.6.6 "otclient-0.6.6\src\client"ou superior e abre o game.cpp depois de aberto procure.
       
      if(version >= 1050) mude para 
      if(version <= 1050) Salve e Agora vá em const.h e procure.
       
      INVISIBLE_TICKS_PER_FRAME = 500, ITEM_TICKS_PER_FRAME = 500, mude para
      INVISIBLE_TICKS_PER_FRAME = 100, ITEM_TICKS_PER_FRAME = 100,  
      Feito isso salve e da Rebuild no compilador do otcliente que voce usa "recompilação limpa"
       

       
      Depois de compilar vá no seu Object Builder e compile seu cliente pra "Improved Animations"
       

       
      pronto, agora só usar  
       
       
      ATENÇÃO
      USE SOMENTE EM CASO DE ERROS DO OTCLIENT, CASO NÃO LER SEU CLIENTE;
       
      ache
      function load() local version = g_game.getClientVersion() em baixo coloca
       
      g_game.enableFeature(GameSpritesU32)  
    • By mjokreaxasa
      https://gyazo.com/9339df0b4b4b2fe412b09a049dc1c42e
       
       
                                          /\
                                       GIFT
       
      Como posso solucionar?
    • By Yan Liima
      Salve meus queridos, tudo bom? Hoje decidi trazer uma pequena alteração na source. Vi que muita galera tem problemas com o limite do caracter da função doShowTextDialog, pois se excender o limite maximo de caractere da debug no client.
      Isso ocorre principalmente pra galera do derivado que costuma utilizar !spells/!tecnicas/!jutsu para checar os ataques disponiveis que existe pra tal personagem. 
      Se você é GOD, você consegue visualizar todas as spells do servidor , e se no servidor existir muitas, irá causar debug.
      Diferente do doPlayerPopupFYI, não há uma proteção de limite para TextDialog...
       
      Primeiramente, como que eu descobri?
      Seguinte, eu coloquei o máximo de spells possiveis, ou seja, o máximo de caracteres possiveis na caixinha de texto.
      Quando eu vi que começou dar debug no cliente, eu retirei alguns caracteres e fui testando.

      Até que consigui achar o valor máximo!
      Eu copiei tudo que estava na janela, e em um site online colei todo o conteúdo de lá para saber quantos caracteres existiam ali.
      E esse foi o resultado:

       
      8192, descobrimos o máximo de caracteres no doShowTextDialog.
      Após descobrir este valor, eu procurei nas sources e achei!
       
      ENTÃO VAMOOOS LÁ!
      TFS
       
      OTX
       
      Prontinho! Simples, não? haha
    • By L3K0T
      L3K0Ttfs 0.4
       
      Bom galera hoje vim trazer para aqueles que não tem em seu tfs a função DoSetCreatureLight, é uma função de LUZ, alguns tfs tem e outros não tem então resolvi compartilhar.
       
      abra seu luascript.cpp e procure por:
       
      lua_register(m_luaState, "getCreatureHealth", LuaInterface::luaGetCreatureHealth); em baixo add
      //doSetCreatureLight(cid, lightLevel, lightColor, time) lua_register(m_luaState, "doSetCreatureLight", LuaInterface::luaDoSetCreatureLight); Procure;;
      int32_t LuaInterface::luaGetThingFromPos(lua_State* L) { //getThingFromPos(pos[, displayError = true]) //Note: // stackpos = 255- top thing (movable item or creature) // stackpos = 254- magic field // stackpos = 253- top creature bool displayError = true; if(lua_gettop(L) > 1) displayError = popNumber(L); PositionEx pos; popPosition(L, pos); ScriptEnviroment* env = getEnv(); Thing* thing = NULL; if(Tile* tile = g_game.getMap()->getTile(pos)) { if(pos.stackpos == 255) { if(!(thing = tile->getTopCreature())) { Item* item = tile->getTopDownItem(); if(item && item->isMovable()) thing = item; } } else if(pos.stackpos == 254) thing = tile->getFieldItem(); else if(pos.stackpos == 253) thing = tile->getTopCreature(); else thing = tile->__getThing(pos.stackpos); if(thing) pushThing(L, thing, env->addThing(thing)); else pushThing(L, NULL, 0); return 1; } if(displayError) errorEx(getError(LUA_ERROR_TILE_NOT_FOUND)); pushThing(L, NULL, 0); return 1; } em baixo add;;
       
      int32_t LuaInterface::luaDoSetCreatureLight(lua_State* L) { //doSetCreatureLight(cid, lightLevel, lightColor, time) uint32_t time = popNumber(L); uint8_t color = (uint8_t)popNumber(L); uint8_t level = (uint8_t)popNumber(L); uint32_t cid = popNumber(L); ScriptEnviroment* env = getEnv(); Creature* creature = env->getCreatureByUID(cid); if(creature) { Condition* condition = Condition::createCondition(CONDITIONID_COMBAT, CONDITION_LIGHT, time, level | (color << 8)); creature->addCondition(condition); lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1; }  
      Agora em Luascript.h procure por:;;
      static int32_t luaCanPlayerWearOutfit(lua_State* L); em baixo add;;
      static int32_t luaDoSetCreatureLight(lua_State *L);  
      salva tudo em compila no modo rebuild.
       
       
      Usando em Summons;;
      doSetCreatureLight(getCreatureSummons(cid)[1], 10, 215, 60*1000) Usando em players;;
      doSetCreatureLight(cid, 9, 65, 10*60*1000) usando em Equipe;;
      function onEquip(cid, item, slot) doSetCreatureLight(cid, 9, 65, 10*60*1000) end function onDeEquip(cid, item, slot) doSetCreatureLight(cid, 7, 215, 1*1000) end Espero que gostem  
  • Recently Browsing   0 members

    No registered users viewing this page.


Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...