Postado Maio 28, 2024 2 anos desclpa reviver isso aqui, alguem mais tem o link?? ou sabe como fazer esse modulo?
Postado Maio 19 Mai 19 Em 29/08/2020 em 15:44, 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:Ocultar conteúdofunction 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 endendend 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:Ocultar conteúdolocal OpcodeDialog = 80local 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:Ocultar conteúdotable.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 .. "'.") endend 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:Ocultar conteúdo<?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: Ocultar conteúdolocal keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) function onThink() npcHandler:onThink() endfunction onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction 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 falseend 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 trueend 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: Arquivos para download e o scan:Ocultar conteúdoModule: https://mega.nz/file/hWp1lbIT#4vqL-YN-ZlLQ8N2XeojIw-cD5VWDHJCAYp6SfRHn84oScan: https://www.virustotal.com/gui/file/f7f5eff65c9d589faedffc0aa728b95c848669108026cb208ec872d5ad25b5b8/detection Opoderia reupar o modules
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.