Ir para conteúdo

Featured Replies

Postado

0.4

 

Boa tarde povo, eu tenho um script de npc de task. Voce mata certo bicho, e volta pra ele e ele te da uma recompensa.

 

Eu queria que quando voce fosse entregar a task, ele te desse um premio de acordo com sua vocação, somente entre 2. Se voce fosse sorcerer, ele te daria x item, se fosse druid, y item.

 

Script do NPC:
 

Citar

 

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

local talkState = {}
local quest = 22542
local reward = 70000

 

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)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(not npcHandler:isFocused(cid)) then
    return false
elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
    npcHandler:say("", cid)
    talkState[talkUser] = 2
elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then
    npcHandler:say("", cid)
    setPlayerStorageValue(cid, quest, 2)
    talkState[talkUser] = 0
elseif msgcontains(msg, "aceitar") then
    local str = getPlayerStorageValue(cid, quest)
    if(str < 2) then
        npcHandler:say("", cid)
        talkState[talkUser] = 1
        return true
    elseif(str == 2) then
        npcHandler:say("", cid)
    elseif(str == 3) then
        npcHandler:say(".", cid)
        doPlayerAddExp(cid, 50000)
        setPlayerStorageValue(cid, quest, 4)
    elseif(str == 4) then
        npcHandler:say("", cid)
    end
    talkState[talkUser] = 0
end
return TRUE
end

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

 

 

  • Respostas 5
  • Visualizações 596
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @Zazeros Veja se é isso que você quer   local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState =

Postado

Sou leigo na programação mas vou te dar uma solução pra você resolver seu problema.

 

 

Cria uma sala de recompensa com uma porta e coloca no uniqueid = 14799 (da porta)

e coloque o uniqueid = 14798 no bau

 

Mude o seu script para o script abaixo:   (mudei o storage para o player ganhar um storage para entrar na porta)

Citar

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

local talkState = {}
local quest = 22542
local reward = 70000

 

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)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
if(not npcHandler:isFocused(cid)) then
    return false
elseif msgcontains(msg, "yes") and talkState[talkUser] == 1 then
    npcHandler:say("", cid)
    talkState[talkUser] = 2
elseif msgcontains(msg, "yes") and talkState[talkUser] == 2 then
    npcHandler:say("", cid)
    setPlayerStorageValue(cid, quest, 2)
    talkState[talkUser] = 0
elseif msgcontains(msg, "aceitar") then
    local str = getPlayerStorageValue(cid, quest)
    if(str < 2) then
        npcHandler:say("", cid)
        talkState[talkUser] = 1
        return true
    elseif(str == 2) then
        npcHandler:say("", cid)
    elseif(str == 3) then
        npcHandler:say(".", cid)
        doPlayerAddExp(cid, 50000)
        setPlayerStorageValue(cid, 14799)
    elseif(str == 4) then
        npcHandler:say("", cid)
    end
    talkState[talkUser] = 0
end
return TRUE
end

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

 

 

Em actions.xml 

Citar

<action uniqueid="14798" script="chestvoc.lua" /

 

Na pasta scripts de action

Crie um arquivo chamado chestvoc.lua e cole isso abaixo: 

OBS: em (ID DO ITEM SE FOR...) voce coloca o ID do item que cada vocação vai receber

Citar

-- ITEM


if item.uid == 14798 then
playervoc = getPlayerVocation(cid)
queststatus = getPlayerStorageValue(cid,14798)

if queststatus == -1 then
if playervoc == 1 then
doPlayerSendTextMessage(cid,22,"Você achou um ITEM")
doPlayerAddItem(cid,ID DO ITEM SE FOR SORC,1)
setPlayerStorageValue(cid,14798,1)
else

if playervoc == 2 then
doPlayerSendTextMessage(cid,22,"Você achou um ITEM")
doPlayerAddItem(cid,ID DO ITEM SE FOR DRUID,1)
setPlayerStorageValue(cid,14798,1)
else

if playervoc == 3 then
doPlayerSendTextMessage(cid,22,"Você achou um ITEM")
doPlayerAddItem(cid,ID DO ITEM SE FOR PALLY,1)
setPlayerStorageValue(cid,14798,1)
else

if playervoc == 4 then
doPlayerSendTextMessage(cid,22,"Você achou um ITEM")
doPlayerAddItem(cid,ID DO ITEM SE FOR KINA,1)
setPlayerStorageValue(cid,14798,1)
end
else
doPlayerSendTextMessage(cid,22,"Está vazio!")
end
return 1
end

 

 

Explicando: Em vez do npc presentear o npc, ele vai ganhar um storage para abrir a porta

dentro da sala vai ter um baú que vai dar items conforme cada vocação.

 

Bom qualquer coisa me fale se deu certo ou errado, poste prints de erro caso de.

ABRAÇOS!

Postado
  • Autor

@Cricket Olá, vlw por responder. Eu ja tinha pensado nisso, mas como serão varios npc de quest em uma area relativamente pequena, não é possivel criar uma sala pra cada um para dar as recompensas, queria que o proprio npc conseguisse distinguir quem é quem e dar a recompensa apropriada

Postado

Então você pode colocar 1 unica sala de recompensas com os baus e em vez da porta colocar um teleport para essa sala ?

 

Agora criar um NPC vai dar mais trabalho... só se algum programador mesmo pegar seu script e refazer ele da forma que você quer...

 

Bom tentei ajudar =D

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo