Ir para conteúdo
Close

REFORMULAMOS A SEÇÃO DE CLASSIFICADOS! - Crie grátis os seus anúncios de procura e oferta de serviços e produtos relacionados ao OTServ! - Acesse através do nosso menu ou clique aqui e confira já!

DEKU KUNNNN

Scripting [PEDIDO] Pagar npc para passar pelo tile

Posts Recomendados

Movements arquivo.lua:

function onStepIn(cid, item, position, fromPosition)
	if getPlayerStorageValue(cid, DEKU) <= 0 then
		doTeleportThing(cid, fromPosition, true)
		doPlayerSendCancel(cid, "Você não tem permissão para passar.")
	return true
	end
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Bem vindo ".. getCreatureName(cid) .."!")
return true
end

movements.xml:

<movevent type="StepIn" uniqueid="25641" event="script" value="arquivo.lua"/>

 

em data/npc/ crie um arquivo.xml com o nome que desejar e cole isso dentro:

<npc name="Nome do NPC" script="data/npc/scripts/arquivo.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1">
	<health now="150" max="150"/>
	<look type="5" head="132" body="79" legs="97" feet="132" corpse="2212"/>
</npc>

em data/npc/script crie um arquivo.lua e cole isso:

local focus = 0
local talk_start = 0
local target = 0
local following = false
local attacking = false

function onThingMove(creature, thing, oldpos, oldstackpos)

end


function onCreatureAppear(creature)

end


function onCreatureDisappear(cid, pos)
  	if focus == cid then
          selfSay('Good bye then.')
          focus = 0
          talk_start = 0
  	end
end


function onCreatureTurn(creature)

end


function msgcontains(txt, str)
  	return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))
end

function onCreatureSay(cid, type, msg)
  	msg = string.lower(msg)

	if (msgcontains(msg, 'hi') and (focus == 0)) and getDistanceToCreature(cid) < 4 then
  		selfSay('Olá ' .. getCreatureName(cid) .. '! gostaria de comprar acesso para passar no tile?')
  		focus = cid
  		talk_start = os.clock()

  	elseif msgcontains(msg, 'hi') and (focus ~= cid) and getDistanceToCreature(cid) < 4 then
  		selfSay('Desculpe, ' .. getCreatureName(cid) .. '! Estou ocupado.')

	elseif focus == cid then
		talk_start = os.clock()

        elseif msgcontains(msg, 'yes') then
                   if doPlayerRemoveMoney(cid,10000) == 1 then
			            selfSay('Ótimo, agora você podera passar')
                        setPlayerStorageValue(cid,DEKU,1)
                        else
                        selfSay('Você não tem dinheiro o suficiente.')
                        end
						
        elseif msgcontains(msg, 'bye') and getDistanceToCreature(cid) < 4 then
            selfSay('Adeus ' .. creatureGetName(cid) .. ', Volte Sempre.')
            focus = 0
            talk_start = 0

        elseif msg ~= "" then
            selfSay('Como? Eu não entendi!')
            talk_state = 0
        end
    end
end

function onCreatureChangeOutfit(creature)
end

function onThink()
    doNpcSetCreatureFocus(focus)
    if (os.clock() - talk_start) > 30 then
        if focus > 0 then
            selfSay('Proximo!!...')
        end
        focus = 0
        talk_start = 0
    end
    if focus ~= 0 then
        if getDistanceToCreature(focus) > 5 then
            selfSay('Good Bye')
            focus = 0
            talk_start = 0
        end
    end
end

 


Editado por Yan Liima (veja o histórico de edições)

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Yan Liima o negocio de não conseguir passar na area funcionou, mas o npc está bugado

primeiro veio com um error por ter um end a mais e agr eu não consigo responder ele em nenhum chat

ele só responde o "hi" e não abre o chat de npcs automaticamente


Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, DEKU KUNNNN disse:

@Yan Liima o negocio de não conseguir passar na area funcionou, mas o npc está bugado

primeiro veio com um error por ter um end a mais e agr eu não consigo responder ele em nenhum chat

ele só responde o "hi" e não abre o chat de npcs automaticamente

 

Troque aquele NPC por este, xml:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nome do NPC" script="arquivo.lua" walkinterval="2000" floorchange="0" access="5" level="1" maglevel="1">
<health now="100" max="100"/>
<look type="812" head="132" body="79" legs="97" feet="132" corpse="2212"/>
<parameters>
	<parameter key="message_greet" value="Olá |PLAYERNAME|! gostaria de comprar acesso para passar no tile?"/>
	<parameter key="message_farewell" value="Good bye, |PLAYERNAME|!"/>
</parameters>
</npc>

arquivo.lua

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:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
function creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
 
   if msgcontains(msg, "yes") then
	  if doPlayerRemoveMoney(cid,10000) == 1 then
	  selfSay("Ótimo, agora você podera passar", cid)
	  setPlayerStorageValue(cid,DEKU,1)
	  else
	  selfSay("Você não tem dinheiro o suficiente.", cid)
      end
   end
   return true
end
 
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 


Compartilhar este post


Link para o post
Compartilhar em outros sites
30 minutos atrás, DEKU KUNNNN disse:

@Yan Liima Testando

@Yan Liima 

error.png

o primeiro error já arrumei agr está dando esse:

 

error.png

 

O erro de cima era o caractere "?" vindo junto com o script ao copiar.

 

Sobre o segundo, qual distro você utiliza? Tente assim:

function onStepIn(cid, item, position, fromPosition)
   if isPlayer(cid) then
	if getPlayerStorageValue(cid, DEKU) <= 0 then
		doTeleportThing(cid, fromPosition, true)
		doPlayerSendCancel(cid, "Voce nao tem permissao para passar.")
	return true
	end
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Bem vindo ".. getCreatureName(cid) .."!")
	end
return true
end

 


Compartilhar este post


Link para o post
Compartilhar em outros sites

@Yan Liima  tfs 0.3.6

indo testar

@Yan Liima agr ele fala com o npc e compra só some o dinheiro e aparece isso:

17:20 Staminer: Testando naruto! gostaria de comprar acesso para passar no tile?
17:20 Testando naruto [487]: yes
17:20 Staminer: Você não tem dinheiro o suficiente.


Compartilhar este post


Link para o post
Compartilhar em outros sites
6 horas atrás, DEKU KUNNNN disse:

@Yan Liima  tfs 0.3.6

indo testar

@Yan Liima agr ele fala com o npc e compra só some o dinheiro e aparece isso:

17:20 Staminer: Testando naruto! gostaria de comprar acesso para passar no tile?
17:20 Testando naruto [487]: yes
17:20 Staminer: Você não tem dinheiro o suficiente.

 

Correção:

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:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
function creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
   local money = 10000
   local storage = DEKU

   if msgcontains(msg, "yes") then
     if getPlayerStorageValue(cid, storage) == 1 then
	  selfSay("Você já tem a passagem", cid)
	  elseif getPlayerStorageValue(cid, storage) <= 0 then
	  if getPlayerMoney(cid) >= money then
	  doPlayerRemoveMoney(cid,money)
	  setPlayerStorageValue(cid,storage,1)
	  selfSay("Ótimo, agora você podera passar", cid)
	  else
	  selfSay("Você não tem dinheiro o suficiente.", cid)
      end
   end
   return true
 end
end

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

Funcionou?


Compartilhar este post


Link para o post
Compartilhar em outros sites

@Yan Liima agora ele n pode passar KKKKKK

ops, funcionou perfeitamente esqueci de arrumar as storages

mas eu queria que o player pagasse toda vez que fosse entrar ali e ele só paga uma vez

tem como arrumar ?


Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria bom você por na script do tile para remover a storage assim que o jogador pisar la. Pois assim ele teria que ir comprar toda vez. Caso contrario, por ele ja ter comprado e ter a storage no jogador dele, ele podia passar sem pagar nada(com o npc que tu pediu)...

So adiciona la no script do tile isso:

setPlayerStorageValue(cid,DEKU,-1)

Mas se mesmo assim quer o npc sem verificar se já tem a storage, aqui esta..

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:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
function creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
   local money = 10000
   local storage = DEKU

   if msgcontains(msg, "yes") then
	  if getPlayerMoney(cid) >= money then
	  doPlayerRemoveMoney(cid,money)
	  setPlayerStorageValue(cid,storage,1)
	  selfSay("Ótimo, agora você podera passar", cid)
	  else
	  selfSay("Você não tem dinheiro o suficiente.", cid)
      end
   end
   return true
 end

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

 


Compartilhar este post


Link para o post
Compartilhar em outros sites
37 minutos atrás, DEKU KUNNNN disse:

@Yan Liima continua do mesmo jeito

 

Como você deixou os scripts?


Compartilhar este post


Link para o post
Compartilhar em outros sites

@Yan Liima 

Script Movements:

function onStepIn(cid, item, position, fromPosition)
   if isPlayer(cid) then
	if getPlayerStorageValue(cid, 394335) <= 0 then
		doTeleportThing(cid, fromPosition, true)
		doPlayerSendCancel(cid, "Voce nao tem permissao para passar.")
	return true
	end
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Bem vindo ".. getCreatureName(cid) .."!")
	end
return true
end

Script NPC:

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:lower())   end
function onThink()                  npcHandler:onThink()                  end
local talkState = {}
 
function creatureSayCallback(cid, type, msg)
   if(not npcHandler:isFocused(cid)) then
      return false
   end
 
   local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
   local money = 10000
   local storage = 394335

   if msgcontains(msg, "yes") then
	  if getPlayerMoney(cid) >= money then
	  doPlayerRemoveMoney(cid,money)
	  setPlayerStorageValue(cid,storage,1)
	  selfSay("Ótimo, agora você podera passar", cid)
	  else
	  selfSay("Você não tem dinheiro o suficiente.", cid)
      end
   end
   return true
 end

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

Perdão se errei algo, não tenho mto conhecimento com script


Compartilhar este post


Link para o post
Compartilhar em outros sites

Está certinho irmão. Verifique se o XML está certo também.

 

No script do movements você poderia deixar assim:

function onStepIn(cid, item, position, fromPosition)
   if isPlayer(cid) then
	if getPlayerStorageValue(cid, 394335) <= 0 then
		doTeleportThing(cid, fromPosition, true)
		doPlayerSendCancel(cid, "Voce nao tem permissao para passar.")
	   return true
	end
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE,"Bem vindo ".. getCreatureName(cid) .."!")
	setPlayerStorageValue(cid, 394335, -1)
	end
  return true
end

Ao acessar o tile tendo a storage ele iria remover a storage, ai depois o jogador teria que comprar de novo. Por isso seria bom usar aquele npc que te mandei, pro jogador não ficar perdendo dinheiro sendo que ele ja tem a storage. Mas ai no caso se ele pisasse no piso ai perderia e teria que comprar novamente... Tendeu?


Compartilhar este post


Link para o post
Compartilhar em outros sites

sim

eu quero que ele tenha que comprar dnv toda vez que for entrar no local de encher stamina

tô indo testar

@Yan Liima Agr ele não consegue passar pelo local igual antes


Compartilhar este post


Link para o post
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

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia partindo do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer publicidade para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução! A publicação do seu anuncio é instantânea!

×