Npc

Duuhzinhow
em Scripts

Duuhzinhow

Projeto ViteraOt
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 14/01/14Posts: 276Gênero: MasculinoChar no Tibia: Sonda retro

Galera eu nao sei se é muito complexo ou nao, mas assim eu quero um npc que te teleporte para coordenadas "x=...y=...z=.."Mas apenas teleportar se o player tiver 9 itens de id diferente (Configuravel). Mas assim, caso o player pague esses itens uma vez, na proxima n ira precisar pagar.

 

Bem, espero que possam me ajudar, qualquer duvida sobre como quero só perguntar ai.. vlw!

 

Rep+

RigBy

Katrina? Romero Brito?
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 05/02/14Posts: 411Gênero: MasculinoChar no Tibia: Zeh Sergipano

Npc.lua

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
 
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 creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
 
local pos = {x= 1, y= 2, z= 3} -- posição pra onde sera teleportado
local itemid = {2382, 12252, 12253, 12254, 12255, 12256, 12257, 12258, 2160} --items que precisa pra pode passa
 
 
if(msgcontains(msg, 'yes') then
if getPlayerStorageValue(cid, 21321312312) == 1
doTeleportThing(cid, pos)
selfSay('Voce foi teleportado.', cid)
elseif getPlayerItemCount(cid, itemid) >= 1 then
doPlayerSetStorageValue(cid, 21321312312, 1)
doTeleportThing(cid, pos)
selfSay('Voce foi teleportado.', cid)
else
selfSay('Voce nao tem os items nessessarios.', cid)
end
end
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Npc.xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nome do npc" script="Nome do Script.lua" walkinterval="0" floorchange="0">
                <health now="100" max="100"/>
                <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/>
                <parameters>
                                <parameter key="message_greet" value="Oi |PLAYERNAME|, Voce que ser teleportado diga {yes}."/>
                </parameters>
</npc>

testa ai qualquer erro fala que eu resolvo.



DXBXk1i.gif

Duuhzinhow

Projeto ViteraOt
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 14/01/14Posts: 276Gênero: MasculinoChar no Tibia: Sonda retro

Deu esse erro aqui : [19/02/2014 22:23:24] [Error - LuaScriptInterface::loadFile] data/npc/scripts/teleporta.lua:20: ')' expected near 'then'

[19/02/2014 22:23:24] [Warning - NpcScript::NpcScript] Cannot load script: data/npc/scripts/teleporta.lua
[19/02/2014 22:23:24] data/npc/scripts/teleporta.lua:20: ')' expected near 'then'

DuuhCarvalho

:)
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 19/01/12Posts: 988Gênero: MasculinoChar no Tibia: Xerife Woody

ta ae ..

 

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


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 creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end


local pos = {x= 160, y= 54, z= 7}
local items = {2195, 
                2641, 
                7886, 
                2640, 
                2190, 
                2383, 
                2643, 
                7424, 
                2520}


local check = 0


local storage = 1015 


 if msgcontains(msg, 'yes') then
      if getPlayerStorageValue(cid, storage) <= 0 then
         for i = 1, #items do
           if getPlayerItemCount(cid, items[i]) >= 1 then
              check = check + 1
           end
         end
             if check == #items then
                doTeleportThing(cid, pos)
                  for j = 1, #items do
                   doPlayerRemoveItem(cid, items[j], 1)
                  end
                selfSay('Parabéns, Você foi teleportado.', cid)
                setPlayerStorageValue(cid, storage, 1)
             else
                selfSay('Voce precisa de todos os items.', cid)
             end
      else 
            doTeleportThing(cid, pos)
            selfSay('Parabéns, Você foi teleportado.', cid)
      end
      
 elseif msgcontains(msg, 'no') then
       selfSay('Ok, então', cid)
 end


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

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Para checar se o jogador possui os 9 items, eu recomendaria fazer assim:

 

local items = {ids}
local check = 0
    for i = 1, #items do
        if getPlayerItemCount(cid, items[i]) >= 1 then
            check = check + 1
        end
    end
    if check == #items then
        ...
    else
        ...
    end

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

DuuhCarvalho

:)
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 19/01/12Posts: 988Gênero: MasculinoChar no Tibia: Xerife Woody

 

Para checar se o jogador possui os 9 items, eu recomendaria fazer assim:

local items = {ids}
local check = 0
    for i = 1, #items do
        if getPlayerItemCount(cid, items[i]) >= 1 then
            check = check + 1
        end
    end
    if check == #items then
        ...
    else
        ...
    end

 

verdade mano. Acho que do jeito que eu tinha feito se o player não tivesse os 9 items o removia os items que o player tinha e não era teleportado.

 

agora vai funcionar direitinho . editei lá .

Duuhzinhow

Projeto ViteraOt
avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 14/01/14Posts: 276Gênero: MasculinoChar no Tibia: Sonda retro

Ae funcionou DuuhCarvalho, rep+!

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Tópico movido para a seção de dúvidas e pedidos resolvidos.

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

deviletico

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 27/07/12Posts: 11

sera possible modificar para que remova X cantidad de Items

 

exemplo:

2195, 100,

2145, 50,

2160, 20,

DuuhCarvalho

:)
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 19/01/12Posts: 988Gênero: MasculinoChar no Tibia: Xerife Woody

sera possible modificar para que remova X cantidad de Items

 

exemplo:

2195, 100,

2145, 50,

2160, 20,

 

testa ae ..

o seu eu fiz assim :

 

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

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 creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local pos = {x= 160, y= 54, z= 7} -- posição pra onde o player vai ser teleportado

local storage = 1015 -- storage que ganha (assim ele só paga os items 1 vez)

local item1 = 2195  -- id do item 1
local item2 = 2145  -- id do item 2
local item3 = 2160  -- id do item 3

local quant1 = 100 -- quanto vai remover do item 1
local quant2 = 50  -- quanto vai remover do item 2
local quant3 = 20  -- quanto vai remover do item 3

 if msgcontains(msg, 'yes') then
      
      if getPlayerStorageValue(cid, storage) <= 0 then
           if doPlayerRemoveItem(cid, item1, quant1) and doPlayerRemoveItem(cid, item2, quant2) and doPlayerRemoveItem(cid, item3, quant3) then
                doTeleportThing(cid, pos)
                selfSay('Parabéns, Você foi teleportado.', cid)
                setPlayerStorageValue(cid, storage, 1)
           else
                selfSay('Voce precisa de todos os items.', cid)
           end
      else 
            doTeleportThing(cid, pos)
            selfSay('Parabéns, Você foi teleportado.', cid)
      end
      
 elseif msgcontains(msg, 'no') then
       selfSay('Ok, então', cid)
 end

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

deviletico

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 27/07/12Posts: 11

Funcionou DuuhCarvalho, obrigado pela ajuda +Rep