Jump to content
Gengo

otclient [OTClient] Sistema de Dialogo Otpokemon

Recommended Posts

por curiosidade se eu adicionar isso os outros npc existente fica com essa funçao ou precisa de algo a +
 

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 
Link to post
Share on other sites
14 minutos atrás, anderson127 disse:

por curiosidade se eu adicionar isso os outros npc existente fica com essa funçao ou precisa de algo a +
 

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 

greetCallback, que é quando inicia a fala com o npc, logo se você deseja que o seu npc comece dialogando e mostra o modulo de dialogo, você precisa adicionar o trecho de codigo a seguir, lembrando que é para cada npc que você deseje que o modulo de dialogo funcione.

function greetCallback(cid)
  -- Aqui vai a função do dialogo do npc
  return true             
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)

 

Link to post
Share on other sites

Parabéns pelo conteúdo! Vai ser muito útil para vários servidores.

 

Fico feliz que em pleno 2020 ainda há membros como você que trazem conteúdos e recursos novos para a comunidade do Xtibia, pois, muitas pessoas não ajudam em nada e não trazem conteúdos/recursos algum para o fórum, mas, para vir pegar conteúdos novos, aparecem rapidinho! Sendo que muitos desses, tem capacidade para contribuir. 

 

Enfim, fico feliz que ainda contribuam para a comunidade.

Link to post
Share on other sites

Não sei se é só comigo, mas se eu usar o módulo para mais conversas no mesmo npc, quando eu clico na opção final a janela não 'some' '-'

Link to post
Share on other sites
Agora, luangop disse:

Não sei se é só comigo, mas se eu usar o módulo para mais conversas no mesmo npc, quando eu clico na opção final a janela não 'some' '-'

Entre em contato comigo pelo discord Gengo#8230 ficará mas fácil eu tentar ajudar você do que eu ficar perguntando cada coisa até chegar no problema, assim não fica poluindo muito o tópico com mensagens.

Link to post
Share on other sites
10 minutos atrás, Gengo disse:

Entre em contato comigo pelo discord Gengo#8230 ficará mas fácil eu tentar ajudar você do que eu ficar perguntando cada coisa até chegar no problema, assim não fica poluindo muito o tópico com mensagens.

#Resolvido! Foi erro meu, não utilizei o npc disponibilizado e deixei passar em branco a função doSendDialogNpcClose(cid)

Vlw @Gengo

Link to post
Share on other sites
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function doBuyPokemonWithCasinoCoins(cid, poke) npcHandler:onSellpokemon(cid) 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 onThink() npcHandler:onThink() end

function getPlayerAllTowerItens(cid)
	if getPlayerItemCount(cid, 12163) >= 1000 and getPlayerItemCount(cid, 12161) >= 1000 and getPlayerItemCount(cid, 19500) >= 1500 and getPlayerItemCount(cid, 19501) >= 2000 and getPlayerItemCount(cid, 19540) >= 200 and getPlayerItemCount(cid, 15092) >= 100 and getPlayerItemCount(cid, 15098) >= 100 and getPlayerItemCount(cid, 15094) >= 100 and getPlayerItemCount(cid, 19536) >= 50 then
		return true
	end
	return false
end

function doRemoveItensTower(cid)
	doPlayerRemoveItem(cid, 12163, 1000)
	doPlayerRemoveItem(cid, 12161, 1000)
	doPlayerRemoveItem(cid, 19500, 1500)
	doPlayerRemoveItem(cid, 19501, 2000)
	doPlayerRemoveItem(cid, 19540, 200)
	doPlayerRemoveItem(cid, 15092, 100)
	doPlayerRemoveItem(cid, 15098, 100)
	doPlayerRemoveItem(cid, 15094, 100)
	doPlayerRemoveItem(cid, 19536, 50)
	return true
end

function creatureSayCallback(cid, type, msg)

if(not npcHandler:isFocused(cid)) then
return false
end

if (msgcontains(msg, 'Embedded Tower') or msgcontains(msg, 'embedded tower')) then

	if getPlayerStorageValue(cid, 509001) >= 1 then
		selfSay("Não preciso mais de sua ajuda, você agora pode explorar a Embedded Tower!")	
		return true
	end

	if getPlayerStorageValue(cid, 659875) == -1 then 
		 selfSay("Antes de tudo preciso checar se eis forte o suficiente para poder entrar lá, você poderia trazer-me {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}?", cid)
		 talkState[cid] = 1
	else
		 selfSay("Você já fez seus pedidos?", cid)
		 talkState[cid] = 2
	end

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 1 and getPlayerStorageValue(cid, 659875) == -1 then

	  if getPlayerAllTowerItens(cid) then
	
		doRemoveItensTower(cid)
		selfSay("É dito uma lenda à qual a antiga civilização pokémon adorava 3 grandes deuses que trariam prosperidade, hoje são representado-os pelas {Pedra Sagrada da Floresta}, {Pedra Sagrada da Terra} e a {Pedra Sagrada do Mar}, volte quando feito seus {pedidos}!", cid)
		setPlayerStorageValue(cid, 659875, 1)
	  
	  else
	 
         selfSay("Lembre-se, os itens são {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}...", cid)
         talkState[cid] = 0
         return true
      end
   
elseif msgcontains(msg, 'pedidos') and getPlayerStorageValue(cid, 659875) == 1 then
       selfSay("Você já fez seus pedidos?", cid)
       talkState[cid] = 2
       
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 2 and getPlayerStorageValue(cid, 659875) == 1 then

		if getPlayerStorageValue(cid, 60900) >= 1 and getPlayerStorageValue(cid, 60901) >= 1 and getPlayerStorageValue(cid, 60902) >= 1 then
			setPlayerStorageValue(cid, 509001, 1)
			setPlayerStorageValue(cid, 78501, 1)
			selfSay("Pronto agora você pode acessar a tower!", cid)
			talkState[talkUser] = 0		
		else
			selfSay("Você não fez seus pedidos às 3x pedras sagradas;", cid)
			talkState[talkUser] = 0	
		end
    
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'nao')) then
     selfSay("So good bye...", cid)
     talkState[cid] = 0
     return false 
end

end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

tipo ai eu tenho que adicionar apenas essa funçao que vc falou ou refazer todos os npc mesmo?

Link to post
Share on other sites
6 minutos atrás, anderson127 disse:
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}

function doBuyPokemonWithCasinoCoins(cid, poke) npcHandler:onSellpokemon(cid) 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 onThink() npcHandler:onThink() end

function getPlayerAllTowerItens(cid)
	if getPlayerItemCount(cid, 12163) >= 1000 and getPlayerItemCount(cid, 12161) >= 1000 and getPlayerItemCount(cid, 19500) >= 1500 and getPlayerItemCount(cid, 19501) >= 2000 and getPlayerItemCount(cid, 19540) >= 200 and getPlayerItemCount(cid, 15092) >= 100 and getPlayerItemCount(cid, 15098) >= 100 and getPlayerItemCount(cid, 15094) >= 100 and getPlayerItemCount(cid, 19536) >= 50 then
		return true
	end
	return false
end

function doRemoveItensTower(cid)
	doPlayerRemoveItem(cid, 12163, 1000)
	doPlayerRemoveItem(cid, 12161, 1000)
	doPlayerRemoveItem(cid, 19500, 1500)
	doPlayerRemoveItem(cid, 19501, 2000)
	doPlayerRemoveItem(cid, 19540, 200)
	doPlayerRemoveItem(cid, 15092, 100)
	doPlayerRemoveItem(cid, 15098, 100)
	doPlayerRemoveItem(cid, 15094, 100)
	doPlayerRemoveItem(cid, 19536, 50)
	return true
end

function creatureSayCallback(cid, type, msg)

if(not npcHandler:isFocused(cid)) then
return false
end

if (msgcontains(msg, 'Embedded Tower') or msgcontains(msg, 'embedded tower')) then

	if getPlayerStorageValue(cid, 509001) >= 1 then
		selfSay("Não preciso mais de sua ajuda, você agora pode explorar a Embedded Tower!")	
		return true
	end

	if getPlayerStorageValue(cid, 659875) == -1 then 
		 selfSay("Antes de tudo preciso checar se eis forte o suficiente para poder entrar lá, você poderia trazer-me {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}?", cid)
		 talkState[cid] = 1
	else
		 selfSay("Você já fez seus pedidos?", cid)
		 talkState[cid] = 2
	end

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 1 and getPlayerStorageValue(cid, 659875) == -1 then

	  if getPlayerAllTowerItens(cid) then
	
		doRemoveItensTower(cid)
		selfSay("É dito uma lenda à qual a antiga civilização pokémon adorava 3 grandes deuses que trariam prosperidade, hoje são representado-os pelas {Pedra Sagrada da Floresta}, {Pedra Sagrada da Terra} e a {Pedra Sagrada do Mar}, volte quando feito seus {pedidos}!", cid)
		setPlayerStorageValue(cid, 659875, 1)
	  
	  else
	 
         selfSay("Lembre-se, os itens são {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}...", cid)
         talkState[cid] = 0
         return true
      end
   
elseif msgcontains(msg, 'pedidos') and getPlayerStorageValue(cid, 659875) == 1 then
       selfSay("Você já fez seus pedidos?", cid)
       talkState[cid] = 2
       
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 2 and getPlayerStorageValue(cid, 659875) == 1 then

		if getPlayerStorageValue(cid, 60900) >= 1 and getPlayerStorageValue(cid, 60901) >= 1 and getPlayerStorageValue(cid, 60902) >= 1 then
			setPlayerStorageValue(cid, 509001, 1)
			setPlayerStorageValue(cid, 78501, 1)
			selfSay("Pronto agora você pode acessar a tower!", cid)
			talkState[talkUser] = 0		
		else
			selfSay("Você não fez seus pedidos às 3x pedras sagradas;", cid)
			talkState[talkUser] = 0	
		end
    
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'nao')) then
     selfSay("So good bye...", cid)
     talkState[cid] = 0
     return false 
end

end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

tipo ai eu tenho que adicionar apenas essa funçao que vc falou ou refazer todos os npc mesmo?

Ele respondeu: é para cada npc que você deseje que o modulo de dialogo funcione.

Link to post
Share on other sites

acontece que eu coloquei e nao foi o npchandler no final
 

function greetCallback(cid)
  -- Aqui vai a função do dialogo do npc
  return true             
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
Link to post
Share on other sites
1 minuto atrás, anderson127 disse:

acontece que eu coloquei e nao foi o npchandler no final
 

function greetCallback(cid)
  -- Aqui vai a função do dialogo do npc
  return true             
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)

Manda pm para mim que eu vou ajudar você.

Link to post
Share on other sites

e aquele npc ali em cima
 

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

function doBuyPokemonWithCasinoCoins(cid, poke) npcHandler:onSellpokemon(cid) 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 onThink() npcHandler:onThink() end

function getPlayerAllTowerItens(cid)
	if getPlayerItemCount(cid, 12163) >= 1000 and getPlayerItemCount(cid, 12161) >= 1000 and getPlayerItemCount(cid, 19500) >= 1500 and getPlayerItemCount(cid, 19501) >= 2000 and getPlayerItemCount(cid, 19540) >= 200 and getPlayerItemCount(cid, 15092) >= 100 and getPlayerItemCount(cid, 15098) >= 100 and getPlayerItemCount(cid, 15094) >= 100 and getPlayerItemCount(cid, 19536) >= 50 then
		return true
	end
	return false
end

function doRemoveItensTower(cid)
	doPlayerRemoveItem(cid, 12163, 1000)
	doPlayerRemoveItem(cid, 12161, 1000)
	doPlayerRemoveItem(cid, 19500, 1500)
	doPlayerRemoveItem(cid, 19501, 2000)
	doPlayerRemoveItem(cid, 19540, 200)
	doPlayerRemoveItem(cid, 15092, 100)
	doPlayerRemoveItem(cid, 15098, 100)
	doPlayerRemoveItem(cid, 15094, 100)
	doPlayerRemoveItem(cid, 19536, 50)
	return true
end

function creatureSayCallback(cid, type, msg)

if(not npcHandler:isFocused(cid)) then
return false
end

if (msgcontains(msg, 'Embedded Tower') or msgcontains(msg, 'embedded tower')) then

	if getPlayerStorageValue(cid, 509001) >= 1 then
		selfSay("Não preciso mais de sua ajuda, você agora pode explorar a Embedded Tower!")	
		return true
	end

	if getPlayerStorageValue(cid, 659875) == -1 then 
		 selfSay("Antes de tudo preciso checar se eis forte o suficiente para poder entrar lá, você poderia trazer-me {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}?", cid)
		 talkState[cid] = 1
	else
		 selfSay("Você já fez seus pedidos?", cid)
		 talkState[cid] = 2
	end

elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 1 and getPlayerStorageValue(cid, 659875) == -1 then

	  if getPlayerAllTowerItens(cid) then
	
		doRemoveItensTower(cid)
		selfSay("É dito uma lenda à qual a antiga civilização pokémon adorava 3 grandes deuses que trariam prosperidade, hoje são representado-os pelas {Pedra Sagrada da Floresta}, {Pedra Sagrada da Terra} e a {Pedra Sagrada do Mar}, volte quando feito seus {pedidos}!", cid)
		setPlayerStorageValue(cid, 659875, 1)
	  
	  else
	 
         selfSay("Lembre-se, os itens são {50x Giant Ruby}, {100x Sharpe Leave}, {100x Pawn}, {100x Crimson Feather}, {200x Linearly Guided Hypnosis}, {2000x enchanted gem}, {2000x Rubber Ball}, {1500x Earth Ball}, {1000x Seed}, {1000x water gem}...", cid)
         talkState[cid] = 0
         return true
      end
   
elseif msgcontains(msg, 'pedidos') and getPlayerStorageValue(cid, 659875) == 1 then
       selfSay("Você já fez seus pedidos?", cid)
       talkState[cid] = 2
       
elseif (msgcontains(msg, 'yes') or msgcontains(msg, 'sim')) and talkState[cid] == 2 and getPlayerStorageValue(cid, 659875) == 1 then

		if getPlayerStorageValue(cid, 60900) >= 1 and getPlayerStorageValue(cid, 60901) >= 1 and getPlayerStorageValue(cid, 60902) >= 1 then
			setPlayerStorageValue(cid, 509001, 1)
			setPlayerStorageValue(cid, 78501, 1)
			selfSay("Pronto agora você pode acessar a tower!", cid)
			talkState[talkUser] = 0		
		else
			selfSay("Você não fez seus pedidos às 3x pedras sagradas;", cid)
			talkState[talkUser] = 0	
		end
    
elseif (msgcontains(msg, 'no') or msgcontains(msg, 'nao')) then
     selfSay("So good bye...", cid)
     talkState[cid] = 0
     return false 
end

end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.


    Administrador |  Diretor |  Coordenador |  Moderador |  Suporter |  Estagiário |  Herói
  • Similar Content

    • By Vorkhon
      Eu baixei a ultima versão do OTClient, e no entergame.lua não esta aparecendo a linha que tinha nos anteriores. "function EnterGame.setUniqueServer(host, port, protocol, windowWidth, windowHeight)". 
       
      Como faz para por IPFixo no otclientv8-master?
       
      EnterGame = { } -- private variables local loadBox local enterGame local enterGameButton local clientBox local protocolLogin local server = nil local versionsFound = false local customServerSelectorPanel local serverSelectorPanel local serverSelector local clientVersionSelector local serverHostTextEdit local rememberPasswordBox local protos = {"740", "760", "772", "792", "800", "810", "854", "860", "870", "961", "1000", "1077", "1090", "1096", "1098", "1099", "1100", "1200", "1220"} local checkedByUpdater = {} -- private functions local function onProtocolError(protocol, message, errorCode) if errorCode then return EnterGame.onError(message) end return EnterGame.onLoginError(message) end local function onSessionKey(protocol, sessionKey) G.sessionKey = sessionKey end local function onCharacterList(protocol, characters, account, otui) if rememberPasswordBox:isChecked() then local account = g_crypt.encrypt(G.account) local password = g_crypt.encrypt(G.password) g_settings.set('account', account) g_settings.set('password', password) else EnterGame.clearAccountFields() end for _, characterInfo in pairs(characters) do if characterInfo.previewState and characterInfo.previewState ~= PreviewState.Default then characterInfo.worldName = characterInfo.worldName .. ', Preview' end end if loadBox then loadBox:destroy() loadBox = nil end CharacterList.create(characters, account, otui) CharacterList.show() g_settings.save() end local function onUpdateNeeded(protocol, signature) return EnterGame.onError(tr('Your client needs updating, try redownloading it.')) end local function onProxyList(protocol, proxies) for _, proxy in ipairs(proxies) do g_proxy.addProxy(proxy["host"], proxy["port"], proxy["priority"]) end end local function parseFeatures(features) for feature_id, value in pairs(features) do if value == "1" or value == "true" or value == true then g_game.enableFeature(feature_id) else g_game.disableFeature(feature_id) end end end local function validateThings(things) local incorrectThings = "" local missingFiles = false local versionForMissingFiles = 0 if things ~= nil then local thingsNode = {} for thingtype, thingdata in pairs(things) do thingsNode[thingtype] = thingdata[1] if not g_resources.fileExists("/things/" .. thingdata[1]) then incorrectThings = incorrectThings .. "Missing file: " .. thingdata[1] .. "\n" missingFiles = true versionForMissingFiles = thingdata[1]:split("/")[1] else local localChecksum = g_resources.fileChecksum("/things/" .. thingdata[1]):lower() if localChecksum ~= thingdata[2]:lower() and #thingdata[2] > 1 then if g_resources.isLoadedFromArchive() then -- ignore checksum if it's test/debug version incorrectThings = incorrectThings .. "Invalid checksum of file: " .. thingdata[1] .. " (is " .. localChecksum .. ", should be " .. thingdata[2]:lower() .. ")\n" end end end end g_settings.setNode("things", thingsNode) else g_settings.setNode("things", {}) end if missingFiles then incorrectThings = incorrectThings .. "\nYou should open data/things and create directory " .. versionForMissingFiles .. ".\nIn this directory (data/things/" .. versionForMissingFiles .. ") you should put missing\nfiles (Tibia.dat and Tibia.spr) " .. "from correct Tibia version." end return incorrectThings end local function onTibia12HTTPResult(session, playdata) local characters = {} local worlds = {} local account = { status = 0, subStatus = 0, premDays = 0 } if session["status"] ~= "active" then account.status = 1 end if session["ispremium"] then account.subStatus = 1 -- premium end if session["premiumuntil"] > g_clock.seconds() then account.subStatus = math.floor((session["premiumuntil"] - g_clock.seconds()) / 86400) end local things = { data = {G.clientVersion .. "/Tibia.dat", ""}, sprites = {G.clientVersion .. "/Tibia.spr", ""}, } local incorrectThings = validateThings(things) if #incorrectThings > 0 then g_logger.error(incorrectThings) if Updater and not checkedByUpdater[G.clientVersion] then checkedByUpdater[G.clientVersion] = true return Updater.check({ version = G.clientVersion, host = G.host }) else return EnterGame.onError(incorrectThings) end end onSessionKey(nil, session["sessionkey"]) for _, world in pairs(playdata["worlds"]) do worlds[world.id] = { name = world.name, port = world.externalportunprotected or world.externalportprotected or world.externaladdress, address = world.externaladdressunprotected or world.externaladdressprotected or world.externalport } end for _, character in pairs(playdata["characters"]) do local world = worlds[character.worldid] if world then table.insert(characters, { name = character.name, worldName = world.name, worldIp = world.address, worldPort = world.port }) end end -- proxies if g_proxy then g_proxy.clear() if playdata["proxies"] then for i, proxy in ipairs(playdata["proxies"]) do g_proxy.addProxy(proxy["host"], tonumber(proxy["port"]), tonumber(proxy["priority"])) end end end g_game.setCustomProtocolVersion(0) g_game.chooseRsa(G.host) g_game.setClientVersion(G.clientVersion) g_game.setProtocolVersion(g_game.getClientProtocolVersion(G.clientVersion)) g_game.setCustomOs(-1) -- disable if not g_game.getFeature(GameExtendedOpcode) then g_game.setCustomOs(5) -- set os to windows if opcodes are disabled end onCharacterList(nil, characters, account, nil) end local function onHTTPResult(data, err) if err then return EnterGame.onError(err) end if data['error'] and data['error']:len() > 0 then return EnterGame.onLoginError(data['error']) elseif data['errorMessage'] and data['errorMessage']:len() > 0 then return EnterGame.onLoginError(data['errorMessage']) end if type(data["session"]) == "table" and type(data["playdata"]) == "table" then return onTibia12HTTPResult(data["session"], data["playdata"]) end local characters = data["characters"] local account = data["account"] local session = data["session"] local version = data["version"] local things = data["things"] local customProtocol = data["customProtocol"] local features = data["features"] local settings = data["settings"] local rsa = data["rsa"] local proxies = data["proxies"] local incorrectThings = validateThings(things) if #incorrectThings > 0 then g_logger.info(incorrectThings) return EnterGame.onError(incorrectThings) end -- custom protocol g_game.setCustomProtocolVersion(0) if customProtocol ~= nil then customProtocol = tonumber(customProtocol) if customProtocol ~= nil and customProtocol > 0 then g_game.setCustomProtocolVersion(customProtocol) end end -- force player settings if settings ~= nil then for option, value in pairs(settings) do modules.client_options.setOption(option, value, true) end end -- version G.clientVersion = version g_game.setClientVersion(version) g_game.setProtocolVersion(g_game.getClientProtocolVersion(version)) g_game.setCustomOs(-1) -- disable if rsa ~= nil then g_game.setRsa(rsa) end if features ~= nil then parseFeatures(features) end if session ~= nil and session:len() > 0 then onSessionKey(nil, session) end -- proxies if g_proxy then g_proxy.clear() if proxies then for i, proxy in ipairs(proxies) do g_proxy.addProxy(proxy["host"], tonumber(proxy["port"]), tonumber(proxy["priority"])) end end end onCharacterList(nil, characters, account, nil) end -- public functions function EnterGame.init() if USE_NEW_ENERGAME then return end enterGame = g_ui.displayUI('entergame') serverSelectorPanel = enterGame:getChildById('serverSelectorPanel') customServerSelectorPanel = enterGame:getChildById('customServerSelectorPanel') serverSelector = serverSelectorPanel:getChildById('serverSelector') rememberPasswordBox = enterGame:getChildById('rememberPasswordBox') serverHostTextEdit = customServerSelectorPanel:getChildById('serverHostTextEdit') clientVersionSelector = customServerSelectorPanel:getChildById('clientVersionSelector') if Servers ~= nil then for name,server in pairs(Servers) do serverSelector:addOption(name) end end if serverSelector:getOptionsCount() == 0 or ALLOW_CUSTOM_SERVERS then serverSelector:addOption(tr("Another")) end for i,proto in pairs(protos) do clientVersionSelector:addOption(proto) end if serverSelector:getOptionsCount() == 1 then enterGame:setHeight(enterGame:getHeight() - serverSelectorPanel:getHeight()) serverSelectorPanel:setOn(false) end local account = g_crypt.decrypt(g_settings.get('account')) local password = g_crypt.decrypt(g_settings.get('password')) local server = g_settings.get('server') local host = g_settings.get('host') local clientVersion = g_settings.get('client-version') if serverSelector:isOption(server) then serverSelector:setCurrentOption(server, false) if Servers == nil or Servers[server] == nil then serverHostTextEdit:setText(host) end clientVersionSelector:setOption(clientVersion) else server = "" host = "" end enterGame:getChildById('accountPasswordTextEdit'):setText(password) enterGame:getChildById('accountNameTextEdit'):setText(account) rememberPasswordBox:setChecked(#account > 0) g_keyboard.bindKeyDown('Ctrl+G', EnterGame.openWindow) if g_game.isOnline() then return EnterGame.hide() end scheduleEvent(function() EnterGame.show() end, 100) end function EnterGame.terminate() if not enterGame then return end g_keyboard.unbindKeyDown('Ctrl+G') enterGame:destroy() if loadBox then loadBox:destroy() loadBox = nil end if protocolLogin then protocolLogin:cancelLogin() protocolLogin = nil end EnterGame = nil end function EnterGame.show() if not enterGame then return end enterGame:show() enterGame:raise() enterGame:focus() enterGame:getChildById('accountNameTextEdit'):focus() end function EnterGame.hide() if not enterGame then return end enterGame:hide() end function EnterGame.openWindow() if g_game.isOnline() then CharacterList.show() elseif not g_game.isLogging() and not CharacterList.isVisible() then EnterGame.show() end end function EnterGame.clearAccountFields() enterGame:getChildById('accountNameTextEdit'):clearText() enterGame:getChildById('accountPasswordTextEdit'):clearText() enterGame:getChildById('accountTokenTextEdit'):clearText() enterGame:getChildById('accountNameTextEdit'):focus() g_settings.remove('account') g_settings.remove('password') end function EnterGame.onServerChange() server = serverSelector:getText() if server == tr("Another") then if not customServerSelectorPanel:isOn() then serverHostTextEdit:setText("") customServerSelectorPanel:setOn(true) enterGame:setHeight(enterGame:getHeight() + customServerSelectorPanel:getHeight()) end elseif customServerSelectorPanel:isOn() then enterGame:setHeight(enterGame:getHeight() - customServerSelectorPanel:getHeight()) customServerSelectorPanel:setOn(false) end if Servers and Servers[server] ~= nil then serverHostTextEdit:setText(Servers[server]) end end function EnterGame.doLogin() if g_game.isOnline() then local errorBox = displayErrorBox(tr('Login Error'), tr('Cannot login while already in game.')) connect(errorBox, { onOk = EnterGame.show }) return end G.account = enterGame:getChildById('accountNameTextEdit'):getText() G.password = enterGame:getChildById('accountPasswordTextEdit'):getText() G.authenticatorToken = enterGame:getChildById('accountTokenTextEdit'):getText() G.stayLogged = true G.server = serverSelector:getText():trim() G.host = serverHostTextEdit:getText() G.clientVersion = tonumber(clientVersionSelector:getText()) if not rememberPasswordBox:isChecked() then g_settings.set('account', G.account) g_settings.set('password', G.password) end g_settings.set('host', G.host) g_settings.set('server', G.server) g_settings.set('client-version', G.clientVersion) g_settings.save() local server_params = G.host:split(":") if G.host:lower():find("http") ~= nil then if #server_params >= 4 then G.host = server_params[1] .. ":" .. server_params[2] .. ":" .. server_params[3] G.clientVersion = tonumber(server_params[4]) elseif #server_params >= 3 then if tostring(tonumber(server_params[3])) == server_params[3] then G.host = server_params[1] .. ":" .. server_params[2] G.clientVersion = tonumber(server_params[3]) end end return EnterGame.doLoginHttp() end local server_ip = server_params[1] local server_port = 7171 if #server_params >= 2 then server_port = tonumber(server_params[2]) end if #server_params >= 3 then G.clientVersion = tonumber(server_params[3]) end if type(server_ip) ~= 'string' or server_ip:len() <= 3 or not server_port or not G.clientVersion then return EnterGame.onError("Invalid server, it should be in format IP:PORT or it should be http url to login script") end local things = { data = {G.clientVersion .. "/Tibia.dat", ""}, sprites = {G.clientVersion .. "/Tibia.spr", ""}, } local incorrectThings = validateThings(things) if #incorrectThings > 0 then g_logger.error(incorrectThings) if Updater and not checkedByUpdater[G.clientVersion] then checkedByUpdater[G.clientVersion] = true return Updater.check({ version = G.clientVersion, host = G.host }) else return EnterGame.onError(incorrectThings) end end protocolLogin = ProtocolLogin.create() protocolLogin.onLoginError = onProtocolError protocolLogin.onSessionKey = onSessionKey protocolLogin.onCharacterList = onCharacterList protocolLogin.onUpdateNeeded = onUpdateNeeded protocolLogin.onProxyList = onProxyList EnterGame.hide() loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...')) connect(loadBox, { onCancel = function(msgbox) loadBox = nil protocolLogin:cancelLogin() EnterGame.show() end }) if G.clientVersion == 1000 then -- some people don't understand that tibia 10 uses 1100 protocol G.clientVersion = 1100 end -- if you have custom rsa or protocol edit it here g_game.setClientVersion(G.clientVersion) g_game.setProtocolVersion(g_game.getClientProtocolVersion(G.clientVersion)) g_game.setCustomProtocolVersion(0) g_game.setCustomOs(-1) -- disable g_game.chooseRsa(G.host) if #server_params <= 3 and not g_game.getFeature(GameExtendedOpcode) then g_game.setCustomOs(2) -- set os to windows if opcodes are disabled end -- extra features from init.lua for i = 4, #server_params do g_game.enableFeature(tonumber(server_params[i])) end -- proxies if g_proxy then g_proxy.clear() end if modules.game_things.isLoaded() then g_logger.info("Connecting to: " .. server_ip .. ":" .. server_port) protocolLogin:login(server_ip, server_port, G.account, G.password, G.authenticatorToken, G.stayLogged) else loadBox:destroy() loadBox = nil EnterGame.show() end end function EnterGame.doLoginHttp() if G.host == nil or G.host:len() < 10 then return EnterGame.onError("Invalid server url: " .. G.host) end loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...')) connect(loadBox, { onCancel = function(msgbox) loadBox = nil EnterGame.show() end }) local data = { type = "login", account = G.account, accountname = G.account, email = G.account, password = G.password, accountpassword = G.password, token = G.authenticatorToken, version = APP_VERSION, uid = G.UUID, stayloggedin = true } HTTP.postJSON(G.host, data, onHTTPResult) EnterGame.hide() end function EnterGame.onError(err) if loadBox then loadBox:destroy() loadBox = nil end local errorBox = displayErrorBox(tr('Login Error'), err) errorBox.onOk = EnterGame.show end function EnterGame.onLoginError(err) if loadBox then loadBox:destroy() loadBox = nil end local errorBox = displayErrorBox(tr('Login Error'), err) errorBox.onOk = EnterGame.show if err:lower():find("invalid") or err:lower():find("not correct") or err:lower():find("or password") then EnterGame.clearAccountFields() end end  
    • By Mask Ghoul
      Olá xTibia
      Hoje Trago pra vocês um pack de Client Wodbo Explorer Descompilado atual ano 2019 ( Não tenho certeza disso, eu nao lembro mais. deixei que minha notebook guardava mais o clientes.)
      Espero que vocês gostam.
       
      https://www.mediafire.com/file/zqnt30azbuvi1wc/WODBOExplorer.zip/file
      Imagens Pack Client Wodbo Explorer
      Creditos: Mask Ghost ( Descompilador Client's Pack )
      Scan: https://www.virustotal.com/gui/file/d6fa20a70c9e6578d55f0cccbda9888f6846fcf1faa4f8744d7d2089ed022cda/detection

      Não postem em outros fórum sem a minha permissão. é isto bom aprveito a todos. 2020 - Bom Dia. 
    • By Gengo
      Estava fazendo esse modulo e decidi postar, para quem quiser é um modulo de banco igual do OTPokemon, segue o demostrativo.
       

       
       
      OBS: Download contém apenas o módulo e não está completo.
       
       
    • By Devatensei
      Otclient Mobile 740,760,772,800,810,854,860,1090,1099
      Server Testados
      carnage76.4vps.eu:7171 "760"🇵🇱
      Mdq.pl:7171 "772"🇵🇱
      Devlandot.eu:7171 "800"🇲🇫
      854"Só achei derivado"
      Baiak-pelego24hrs.online:7171 "860"🇧🇷
      Realots.pl:7171  "1090"🇵🇱
      Oceraglobal.servegame.com:7171 "1099"🇧🇷
      Link: "Mega"
      https://mega.nz/file/a8wjiAwS#jHnSng73v5cARI1vI_ohBtn_7AZTHmGchB4LqOM_BO8
      Arquivo:
      gen_signed.apk
      Tamanho:
      190,02MB
      Instagram.com/deva.tenseisk8

    • By adrianokk
      Bom dia, estou tendo um problema muito chato com alguns Modulos que estou add em meu cliente.
      Eu faço exatamente o mesmo processo para add os Modulos dentro do servidor, porem alguns Modulos pegam normalmente, outros não aparecem o icone no TOP Menu e alguns estavam funcionando normalmente e de uma hora para outra eles não querem mas aparecer no TOP Menu.
       
×
×
  • Create New...