Ir para conteúdo
Propaganda

Posts Recomendados

  • Administrador
8 minutos atrás, Wang disse:
  • [OTClient] Sistema de Dialogo Otpokemon

vi em outro forum  achei  útil  vou compartilhar aqui com vocês porém todos créditos vão para o gengo 

 

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.find = function (table, value)
  for i, v in pairs(table) do
	if(v == value) then
	  return i
    end
  end
  return nil
end

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
 

 

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.

 

 

Link  module

 

Module: 

This is the hidden content, please

Scan: 

This is the hidden content, please

 

 

Demostrativo dentro do game:

 

 

AivYsrD.png

Tópico aprovado, obrigado pela contribuição.

  • Like 2
Link para o comentário
https://tibiadevs.com/forums/topic/14-otclient-di%C3%A1logo-system-tfs-036/#findComment-55
Compartilhar em outros sites

  • Moderador

Ótimo conteúdo, mas está faltando conteúdo nos Spoilers.
Assim que possível adicione os códigos faltantes.

  • Confused 1
Link para o comentário
https://tibiadevs.com/forums/topic/14-otclient-di%C3%A1logo-system-tfs-036/#findComment-56
Compartilhar em outros sites

  • 5 meses depois...
Em 27/07/2023 em 12:55, Wang disse:
  • [OTClient] Sistema de Dialogo Otpokemon

vi em outro forum  achei  útil  vou compartilhar aqui com vocês porém todos créditos vão para o gengo 

 

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.find = function (table, value)
  for i, v in pairs(table) do
	if(v == value) then
	  return i
    end
  end
  return nil
end

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
 

 

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

 

  Ocultar conteúdo
 
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.

 

 

Link  module

 

Module: 

This is the hidden content, please

Scan: 

This is the hidden content, please

 

 

Demostrativo dentro do game:

 

 

AivYsrD.png

Olá, como eu coloco pra ser desse estilo um npc de teleport? por level

  • Like 1
Link para o comentário
https://tibiadevs.com/forums/topic/14-otclient-di%C3%A1logo-system-tfs-036/#findComment-1486
Compartilhar em outros sites

  • 2 meses depois...
  • 3 semanas atrás...
Em 27/07/2023 em 12:55, Wang disse:
  • [OTClient] Sistema de Dialogo Otpokemon

vi em outro forum  achei  útil  vou compartilhar aqui com vocês porém todos créditos vão para o gengo 

 

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

  Ocultar conteúdo
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.find = function (table, value)
  for i, v in pairs(table) do
	if(v == value) then
	  return i
    end
  end
  return nil
end

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
 

 

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.

 

 

Link  module

 

Module: 

This is the hidden content, please

Scan: 

This is the hidden content, please

 

 

Demostrativo dentro do game:

 

 

AivYsrD.png

o link do dowload esta quebrado

 

  • Like 1
Link para o comentário
https://tibiadevs.com/forums/topic/14-otclient-di%C3%A1logo-system-tfs-036/#findComment-2142
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...