Ir para conteúdo
  • 0

sistema de dialogo para tfs 1.3


narutomaniacos

Pergunta

Estou tentando implementar esse sistema: 

 

 

Estou recebendo o erro de nil value na função doSendPlayerExtendedOpcode. Já tentei usar Player.sendExtendedOpcode porém é retornado o seguinte erro: 

data/lib/core/player.lua:74: attempt to index local 'self' (a number value)
stack traceback:
        [C]: in function '__index'
        data/lib/core/player.lua:74: in function 'sendExtendedOpcode'
        data/lib/npcdialog_lib.lua:11: in function 'doSendDialogNpc'
        data/npc/scripts/kame.lua:11: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:340: in function 'greet'
        data/npc/lib/npcsystem/npchandler.lua:519: in function 'onGreet'
        data/npc/lib/npcsystem/modules.lua:223: in function 'callback'
        data/npc/lib/npcsystem/keywordhandler.lua:26: in function 'processMessage'
        data/npc/lib/npcsystem/keywordhandler.lua:136: in function 'processNodeMessage'
        data/npc/lib/npcsystem/keywordhandler.lua:111: in function 'processMessage'
        data/npc/lib/npcsystem/npchandler.lua:408: in function 'onCreatureSay'
        data/npc/scripts/kame.lua:8: in function <data/npc/scripts/kame.lua:8>

alguma sugestão de como resolver?

Editado por narutomaniacos
Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
4 horas atrás, narutomaniacos disse:
Versão do Servidor: TFS - 1.2
Tipo de Script:
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
  player:doSendPlayerExtendedOpcode(cid, OpcodeDialog, table.serialize({ action = Actions.open, data = { npcId = npc, message = msg, options = opc } })) 
end

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

table.find = function (table, value)
  for i, v in pairs(table) do
    if(v == value) then
      return i
    end
  end
  return nil
end

Estou tentando implementar esse sistema: 

 

 

Porém estou recebendo o erro de nil value na função doSendPlayerExtendedOpcode. Já tentei usar doPlayerSendExtendedOpcode, player:doSendPlayerExtendedOpcode, todos sem sucesso... alguma sugestão de como resolver?

É simples, o seu servidor não tem Opcode, vai precisar adicionar.

Editado por Nysman
Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, Nysman disse:

É simples, o seu servidor não tem Opcode, vai precisar adicionar.

Até onde eu sei tfs 1.3 já vem com opcode por padrão, e acho muito díficil não ter, visto que em lib/core/player.lua tem essa função que já veio no tfs

function Player.sendExtendedOpcode(self, opcode, buffer)
	if not self:isUsingOtClient() then
		return false
	end

	local networkMessage = NetworkMessage()
	networkMessage:addByte(0x32)
	networkMessage:addByte(opcode)
	networkMessage:addString(buffer)
	networkMessage:sendToPlayer(self)
	networkMessage:delete()
	return true
end

 e em data/creaturescripts/scripts tem o extendedopcode.lua

Link para o comentário
Compartilhar em outros sites

  • 0

 

O erro diz que não tem opcode, mas enfim.

Talvez um?

player.self = funcion (player, value)

 for i, v in pairs (player) do

    if (v == value) then

      return i

    end

 end

 return nil

end

Editado por Nysman
Link para o comentário
Compartilhar em outros sites

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

function Player.doSendDialogNpc(self, npc, msg, opc)
  if ( not opc ) then
    opc = {}
  end
  self:sendExtendedOpcode(OpcodeDialog, table.serialize({ action = Actions.open, data = { npcId = npc, message = msg, options = opc } })) 
end

function Player.doSendDialogNpcClose(self)
  self:sendExtendedOpcode(OpcodeDialog, table.serialize({ action = Actions.closed }))
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
6 horas atrás, Poccnn disse:

em quais arquivos tu fez essa mudança?

npcdialog_lib.lua

4 horas atrás, Nysman disse:

 

O erro diz que não tem opcode, mas enfim.

Tranquilo, obrigado por tentar ajudar

3 horas atrás, Gengo disse:

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

function Player.doSendDialogNpc(self, npc, msg, opc)
  if ( not opc ) then
    opc = {}
  end
  self:sendExtendedOpcode(OpcodeDialog, table.serialize({ action = Actions.open, data = { npcId = npc, message = msg, options = opc } })) 
end

function Player.doSendDialogNpcClose(self)
  self:sendExtendedOpcode(OpcodeDialog, table.serialize({ action = Actions.closed }))
end

 

Obrigado, resolveu o problema dessa lib, pode me ajudar em arrumar o npc também?

 

 

data/npc/scripts/kame.lua:11: attempt to call global 'doSendDialogNpc' (a nil value)
stack traceback:
        [C]: in function 'doSendDialogNpc'
        data/npc/scripts/kame.lua:11: in function 'callback'
        data/npc/lib/npcsystem/npchandler.lua:340: in function 'greet'
        data/npc/lib/npcsystem/npchandler.lua:519: in function 'onGreet'
        data/npc/lib/npcsystem/modules.lua:223: in function 'callback'
        data/npc/lib/npcsystem/keywordhandler.lua:26: in function 'processMessage'
        data/npc/lib/npcsystem/keywordhandler.lua:136: in function 'processNodeMessage'
        data/npc/lib/npcsystem/keywordhandler.lua:104: in function 'processMessage'
        data/npc/lib/npcsystem/npchandler.lua:408: in function 'onCreatureSay'
        data/npc/scripts/kame.lua:8: in function <data/npc/scripts/kame.lua:8>

Está sendo retornado esse erro, estou usando o npc padrão usado no seu post, somente troquei o getNpcId() por getNpcCid()

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Você precisa adaptar conforme suas necessidades, segue ai, se não funcionar, só lamento, como disse, vc precisa adaptar conforme suas tfs

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

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 greetCallback(player)
	player:doSendDialogNpc(Npc():getId(),  "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

end

function onReleaseFocus(player)
  player:doSendDialogNpcClose()
end

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

 

Link para o comentário
Compartilhar em outros sites

  • 0
43 minutos atrás, Gengo disse:

Você precisa adaptar conforme suas necessidades, segue ai, se não funcionar, só lamento, como disse, vc precisa adaptar conforme suas tfs


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

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 greetCallback(player)
	player:doSendDialogNpc(Npc():getId(),  "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

end

function onReleaseFocus(player)
  player:doSendDialogNpcClose()
end

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

 

Certo, desculpe pelo incomodo e obrigado.

Não funcionou de cara mas você me deu a luz necessária,pra quem ainda estiver com problema é só deixar a função assim:

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

 

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...