Ir para conteúdo
  • 0

Missão p/ matar monstros e ganhar recompensa


Hudsin

Pergunta

Uso um sistema de missão com npc e creaturescripts, funciona, porém conforme o jogador mata o mostro que precisa, não aparece quantos ele ja matou.

 

  • Exemplo: Rotworms Killeds 1/20

 

É possível adicionar, isso de contar os monstros matados, nesse script? Preciso muito disso ><

 

Segue o npc que uso:

 

NPC:

 

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Heren, Primeira Missao" script="data/npc/scripts/rotworm_quest.lua" access="3" lookdir="2" walkinterval="3000" floorchange="0">
    <mana now="800" max="800"/>
    <health now="132" max="200"/>
<look type="128" head="58" body="68" legs="109" feet="131" addons="1"/>
 <parameters>
  <parameter key="message_greet" value="Olá |PLAYERNAME|, preciso de {ajuda}, existem vermes que veêm de um lugar desconhecido e estão acabando com minhas plantações! "/>
  <parameter key="module_keywords" value="1" />
    </parameters></npc>

SCRIPT:

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


local talkState = {}
local quest = 76669
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, "sim") and talkState[talkUser] == 1 then
npcHandler:say("Muito obrigado! Você será muito bem recompensado {ok}?", cid)
talkState[talkUser] = 2
elseif msgcontains(msg, "ok") and talkState[talkUser] == 2 then
npcHandler:say("Certo, entre nesse portal, seja cauteloso! Apresse-se!", cid)
setPlayerStorageValue(cid, quest, 2)
talkState[talkUser] = 0
elseif msgcontains(msg, "ajuda") then
local str = getPlayerStorageValue(cid, quest)
if(str < 2) then
npcHandler:say("Aventureiro, eu preciso que você limpe o lugar de onde esses vermes veêm! Elimine 20 rotworms para mim? {sim} ", cid) 
talkState[talkUser] = 1
return true
elseif(str == 2) then
npcHandler:say("Você iniciou missão, volte quando estiver completa.", cid)
elseif(str == 3) then
npcHandler:say("Muito obrigado por eliminar essas pragas! Aqui está sua recompensa.", cid)
doPlayerAddItem(cid, 2648, 1)
doPlayerAddExp(cid, 3100)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu uma Chain Legs e 3100EXP. Procure Arkires, no cemitério ao norte, ele precisa de sua ajuda. ")
setPlayerStorageValue(cid, quest, 4)
elseif(str == 4) then
npcHandler:say("Você tem feito o suficiente para mim, Siga ao Norte e encontre Arkires, ele precisa de sua ajuda! ", cid)
end
talkState[talkUser] = 0
end
return TRUE
end


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

CREATURESCRIPT:

local monsters = {--name = storage
["rotworm"] = 55004
}


function onKill(cid, target)
local monster = monsters[getCreatureName(target):lower()]
if(isPlayer(target) == FALSE and monster and getPlayerStorageValue(cid, 76669) == 2) then
if getPlayerStorageValue(cid, monster) < 20 then 
local killedMonsters = getPlayerStorageValue(cid, monster)
            if(killedMonsters == -1) then
                killedMonsters = 1
end
setPlayerStorageValue(cid, monster, killedMonsters + 1)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você matou " .. killedMonsters .. " de 20 rotworms.")
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você concluiu a missão de eliminar os vermes!")
setPlayerStorageValue(cid, 76669, 3)
end
end
return TRUE
end

heart.png

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

9 respostass a esta questão

Posts Recomendados

  • 0

Rotworm! havia colocado o creaturescript da outra missao sem querer, coloquei o certo agora. :D

 

Tenho notado que tanto no creaturescript quanto no npc, posuem linhas com a seguinte formula para enviar a mensagem pro jogador, e axo que o erro está nela:

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu uma Chain Legs e 3100EXP. Procure Arkires, no cemitério ao norte, ele precisa de sua ajuda. ")

É possivel fazer a mensagem chegar de uma forma diferente desse MESSAGE_INFO_DESCR?

Boa Tarde,

Há sim, diversos tipos diferentes de mensagens você pode colocar para aparecer, experimente:

 

MESSAGE_STATUS_CONSOLE_BLUE

Ficando assim:

 

doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você recebeu uma Chain Legs e 3100EXP. Procure Arkires, no cemitério ao norte, ele precisa de sua ajuda. ")

Aqui tem uma lista das constantes definidas nas libs:

 

MESSAGE_FIRST
MESSAGE_EVENT_ORANGE
MESSAGE_STATUS_CONSOLE_ORANGE
MESSAGE_STATUS_WARNING
MESSAGE_EVENT_ADVANCE
MESSAGE_EVENT_DEFAULT
MESSAGE_STATUS_DEFAULT
MESSAGE_INFO_DESCR
MESSAGE_STATUS_SMALL
MESSAGE_STATUS_CONSOLE_BLUE

Experimente e veja se a mensagem aparece normalmente.

Aguardando respostas.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite,
Você deve ter algum script na parte de creaturescripts para modificar a quantidade de monstros mortos, poste esse script aqui para que eu possa adaptar para você.
Aguardando, boa noite e um grande abraço.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite,

Você deve ter algum script na parte de creaturescripts para modificar a quantidade de monstros mortos, poste esse script aqui para que eu possa adaptar para você.

Aguardando, boa noite e um grande abraço.

 

 

Creaturescript foi adicionado!

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

  • 0

Boa noite,
Estou vendo o seu script aqui, e vejo que a linha:

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você derrotou " .. killedMonsters .. " de 20 orcs.")

Já faz o que você pede. Ela vai enviar ao player a mensagem:
"Você derrotou X de 20 orcs."

Onde X é a quantidade de Orcs que você ja matou.
Aparece algum erro? Quando você mata algum mostro que está fazendo task aparece alguma mensagem?
Aguardando a sua resposta. Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite,

Estou vendo o seu script aqui, e vejo que a linha:

 

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você derrotou " .. killedMonsters .. " de 20 orcs.")

Já faz o que você pede. Ela vai enviar ao player a mensagem:

"Você derrotou X de 20 orcs."

Onde X é a quantidade de Orcs que você ja matou.

Aparece algum erro? Quando você mata algum mostro que está fazendo task aparece alguma mensagem?

Aguardando a sua resposta. Abraços.

 

 

Não aparece mensagem de erro no distro e não aparece a mensagem pro player avisando quantos ja matou.

Ele funciona, eu contei de cabeça e entreguei a missão, ganhei a recompensa. Então está gravando. Só não manda a mensagem a cada rot q mata.

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

  • 0

 

Não aparece mensagem de erro no distro e não aparece a mensagem pro player avisando quantos ja matou.

Ele funciona, eu contei de cabeça e entreguei a missão, ganhei a recompensa. Então está gravando. Só não manda a mensagem a cada rot q mata.

 

É rot ou orc que você está matando?

Link para o comentário
Compartilhar em outros sites

  • 0

Rotworm! havia colocado o creaturescript da outra missao sem querer, coloquei o certo agora. :D

 

Tenho notado que tanto no creaturescript quanto no npc, posuem linhas com a seguinte formula para enviar a mensagem pro jogador, e axo que o erro está nela:

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Você recebeu uma Chain Legs e 3100EXP. Procure Arkires, no cemitério ao norte, ele precisa de sua ajuda. ")

É possivel fazer a mensagem chegar de uma forma diferente desse MESSAGE_INFO_DESCR?

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

×
×
  • Criar Novo...