DU
pedido

Npc

Por Duuhzinhow, 18 de fev. de 2014 em Scripts

npc
resolvido
11
1.4k
DuuhzinhowD
18 de fevereiro de 2014 às 17:10

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+

RigByR
19 de fevereiro de 2014 às 20:32

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.

Editado Fevereiro 19 por RigBy

DuuhzinhowD
19 de fevereiro de 2014 às 22:25

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'
20 de fevereiro de 2014 às 20:02

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())

Editado Fevereiro 20 por DuuhCarvalho

zipter98Z
20 de fevereiro de 2014 às 20:18

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
20 de fevereiro de 2014 às 21:20

 

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á .

Editado Fevereiro 20 por DuuhCarvalho

DuuhzinhowD
20 de fevereiro de 2014 às 21:38

Ae funcionou DuuhCarvalho, rep+!

zipter98Z
20 de fevereiro de 2014 às 22:27

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

devileticoD
21 de fevereiro de 2014 às 20:31

sera possible modificar para que remova X cantidad de Items

 

exemplo:

2195, 100,

2145, 50,

2160, 20,

22 de fevereiro de 2014 às 04:04

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())

Editado Fevereiro 22 por DuuhCarvalho

devileticoD
22 de fevereiro de 2014 às 17:37

Funcionou DuuhCarvalho, obrigado pela ajuda +Rep