Jump to content

OTClient [OTClient] Sistema de Dialogo Otpokemon


Recommended Posts

  • Assistente

Muito bom, vai agregar muitos servidores, obrigado pela contribuição.

Vou usa como base pra começa estuda os module no otclient 😁

Discord: Naze#3578

 

Ter Linux Dentro de Windows com Acesso 'localhost' para testes e +

AutoLoot Otimizado Direto na Source (tfs 0.4/otx)

 

// Pirataria é crime, original é roubo, compartilhar é legal.

 

tumblr_muk78tEwDQ1qah4nko1_500.gif

Link to post
Share on other sites

24 minutos atrás, Gengo disse:

[OTClient] Sistema de Dialogo Otpokemon

 

Venho através desse tópico contribuir para a comunidade, um simples modulo de dialogo no estilo do Otpokemon,

não é um sistema de dialogo avançado é algo simples que deixa seu servidor intuitivo.

 

1) Faça o download do modulo no qual se encontra no final do tópico e abrindo a pasta do seu client,, extraia e coloque o modulo na pasta modules.

 

2) O módulo utiliza uma função chamada switch que não é comum ter no otclient, porem podemos colocar sem muito esforço, na pasta do otclient abra o arquivo util.lua que se encontra em modules/corelib/ e no final do arquivo coloque o seguinte código:

  Mostrar conteúdo oculto


function switch(indice)
  return function(codetable)
    local case = codetable[indice] or codetable.default
    if ( case ) then
      if ( type(case) == "function" ) then
        return case(indice)
      else
        error("action "..tostring(indice).." not a function")
      end
    end
  end
end

 

 

Feito o passo 1 e 2, vamos para a parte do servidor.

 

1) Crie um arquivo na pasta data/lib/ podendo ter o nome de npcdialog_lib.lua e coloque o seguinte código:

  Mostrar conteúdo oculto


local OpcodeDialog = 80
local Actions = {
  open = 1,
  closed = 2
}

function doSendDialogNpc(cid, npc, msg, opc)
  if ( not opc ) then
    opc = ''
  end
  doSendPlayerExtendedOpcode(cid, OpcodeDialog, table.serialize({ action = Actions.open, data = { npcId = npc, message = msg, options = opc } })) 
end

function doSendDialogNpcClose(cid)
  doSendPlayerExtendedOpcode(cid, OpcodeDialog, table.serialize({ action = Actions.closed }))
end

 

 

2) O arquivo que acabamos de criar utiliza uma função chamada table.serialize que não é comum ter nos servidores, para que funcione sem erros vamos adicionar, abra o arquivo 012-table.lua que fica na pasta do seu servidor em data/lib/ ou você pode criar o arquivo e adicionar o seguinte código:

  Mostrar conteúdo oculto


table.serialize = function(x, recur)
  local t = type(x)
  recur = recur or {}

  if t == nil then
    return "nil"
  elseif t == "string" then
	return string.format("%q", x)
  elseif t == "number" then
	return tostring(x)
  elseif t == "boolean" then
	return t and "true" or "false"
  elseif getmetatable(x) then
	error("Can not serialize a table that has a metatable associated with it.")
  elseif t == "table" then
    if(table.find(recur, x)) then
	  error("Can not serialize recursive tables.")
	end
	table.insert(recur, x)

	local s = "{"
	for k, v in pairs(x) do
	  s = s .. "[" .. table.serialize(k, recur) .. "]"
	  s = s .. " = " .. table.serialize(v, recur) .. ","
	end
	s = s .. "}"
	return s
  else
	error("Can not serialize value of type '" .. t .. "'.")
  end
end

 

 

 

Feito todo esse procedimento, estarei disponibilizando um npc para que vocês possam ter uma noção de como utilizar esse sistema de dialogo.

 

1) Crie um arquivo na pasta do servidor em data/npc/ chamado Gengo.xml e adicione o seguinte código:

  Mostrar conteúdo oculto


<?xml version="1.0" encoding="UTF-8"?>

<npc name="Gengo" script="gengo.lua">
  <health now="150" max="150"/>
  <look type="1413" head="114" body="119" legs="114" feet="114" corpse="2212"/>
</npc>

 

 

2) Crie um arquivo na pasta do servidor em data/npc/lib/ com o nome gengo.lua e adicione o seguinte código:

 

  Mostrar conteúdo oculto


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onThink()                     npcHandler:onThink()                     end
function onCreatureAppear(cid)         npcHandler:onCreatureAppear(cid)	        end
function onCreatureDisappear(cid)      npcHandler:onCreatureDisappear(cid)	    end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg)	end

function greetCallback(cid)
  doSendDialogNpc(cid, getNpcId(), "Olá jovem, vejo que você conseguiu chegar até aqui!\nClique em Recompensa e fique feliz pela conquista!", "Fechar&Recompensa")
  return true             
end

function creatureSayCallback(cid, type, msg)
  if not npcHandler:isFocused(cid) then
    return false
  end
  
  if msgcontains(msg:lower(), "recompensa") then
    local message = ""
    if getPlayerStorageValue(cid, 7000) == -1 then
      setPlayerStorageValue(cid, 7000, 1)
	  doPlayerAddItem(cid, 2160, 1)
	  message = "Você acaba de ganhar uns trocado por chegar até aqui.\nVolte sempre!"
	else
	  message = "Você ja pegou sua recompensa, obrigado e volte sempre!"
    end	
	doSendDialogNpc(cid, getNpcId(), message, "Fechar")
  elseif msgcontains(msg:lower(), "fechar") then
	doSendDialogNpcClose(cid)
	npcHandler:unGreet(cid)	
  end

  return true
end

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:addModule(FocusModule:new())

 

 

O npc é algo simples, porem serve para que você possa ter uma noção de como utilizar as funções do npc.

 

Demostrativo dentro do game:

AivYsrD.png

 

Arquivos para download e o scan:

Como sempre top de mais parabéns  mesmo e obrigado pela contribuição 

Link to post
Share on other sites

que legal cara!!! :) 

APOIE NOSSAS CAUSAS - IBEACIBEAC

SEJA UM APOIADOR E AJUDE ALGUÉM

Se você acha que meu trabalho merece uma ajuda nessa quarentena, então seja um apoiador fiel doehttps://streamlabs.com/l3k0t1

 

 CANAL YOUTUBE: https://www.youtube.com/channel/UCMP25Br519j7dD1FFEMzPgA?view_as=subscriber

Meu grupo no Discord: https://discord.gg/qMS5pm9

"Você tem um sonho? Não deixe os outros te derrubarem e lute por aquilo que você acredita" by L3K0T  

 

GENTILEZA GERA GENTILEZA

 

 

Link to post
Share on other sites

  • 2 months later...

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 Sydion
      Alguém poderia me ajuda ?
      Bom , fui adicionar algumas sprites em meu old client .. mas ele ja chegou no maximo , e como não tem como extende-ló gostaria de saber , como posso o deixar em OTCLIENT
    • By vini464
      Falae galera blz ? bom eu to precisando que alguem descompile o client do wodbo wars , eu tentei aki mas ele ta protegido , mas nunca um client ta 100% protegido neh entao , se alguem ai manjar em descompilar o client "protegido" eu agradeço mtttt , eu to criando um server de wodbo e to precisando de algumas sprites pra voc nova entao é isso,Obrigado !!
       
      REP++++
    • By TsplayerT
      ALO, COM QUE EU FALO?

      Gente preciso de ajuda com um server de PokeTibia...
      Ele está sem level os pokémons e gostaria de colocar!!
      Como faço isso?

      Pode tbm só dizer quais arquivos devo editar/copiar pois já tenho um server com levei system.

      Dado do Server:
      Versão: 8.54
      Client: OtClient
    • By Unknown Beats
      Aí pessoal acabei de compilar o Otc sem mudar anda demais e ficou tudo bugado 😕
      Segui esse tutorial aqui:
       

    • By MarianoPT
      Boa tarde galera, to com esse erro quando tento compila a Source do meu Otclient. Já formatei pc, já desinstalei, já reinstalei.
      alguém pode me da uma luz? 
       
      Obs, não sei se estar no lugar correto
       

       
      The C compiler identification is GNU 6.3.0
      The CXX compiler identification is GNU 6.3.0
      Check for working C compiler: C:/MinGW/bin/gcc.exe
      Check for working C compiler: C:/MinGW/bin/gcc.exe -- works
      Detecting C compiler ABI info
      Detecting C compiler ABI info - done
      Check for working CXX compiler: C:/MinGW/bin/g++.exe
      Check for working CXX compiler: C:/MinGW/bin/g++.exe -- works
      Detecting CXX compiler ABI info
      Detecting CXX compiler ABI info - done
      Link to static libraries: ON
      Build type: RelWithDebInfo
      Build commit: devel
      Build revision: 0
      Boost version: 1.64.0
      Found the following Boost libraries:
      system
      thread
      filesystem
      chrono
      CMake Error at src/framework/CMakeLists.txt:221 (find_package):
      By not providing "FindLua.cmake" in CMAKE_MODULE_PATH this project has
      asked CMake to find a package configuration file provided by "Lua", but
      CMake did not find one.
       
      Could not find a package configuration file provided by "Lua" with any of
      the following names:
       
      LuaConfig.cmake
      lua-config.cmake
       
      Add the installation prefix of "Lua" to CMAKE_PREFIX_PATH or set "Lua_DIR"
      to a directory containing one of the above files. If "Lua" provides a
      separate development package or SDK, be sure it has been installed.
      Call Stack (most recent call first):
      CMakeLists.txt:13 (include)
       
       
      Configuring incomplete, errors occurred!
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...

Important Information

Confirmação de Termo