Ir para conteúdo

[creatureevents] Killing In The Name Of... Quest!


Posts Recomendados

Fala pessoal, esse é meu primeiro script que posto aqui na comunidade, não sou muito bom nisso, mas depois de um tempo eu consegui fazer com que funcionasse 100%.

 

-----------------------------------------

Descrição:

É uma quest que, ao falar com um NPC, você deve matar 1000 monstros, e depois de feito, você ganha um prêmio em experiência e acesso a um local, onde randomicamente, um monstro é sumonado para você enfrentar (no caso, um boss pirate)

Mais infos, aqui.

Distro utilizado:

The Forgotten Server 0.2.2/0.2.3/0.2.4

Primeiro, vamos fazer o NPC.

Vá em data/npc e cria um arquivo .xml com o nome de Captain Alfred. Copie isso dentro do arquivo e salve:

 

<?xml version="1.0"?>

<npc name="Captain Alfred" script="data/npc/scripts/killing_quest.lua" access="3" lookdir="2" walkinterval="2000">

<mana now="800" max="800"/>

<health now="200" max="200"/>

<look type="151" head="115" body="76" legs="35" feet="117" addons="2" corpse="6080"/>

<parameters>

<parameter key="message_greet" value="Hiho! Do you want to do a {quest}? "/>

</parameters>

</npc>

 

Agora, em data/npc/scripts, crie um arquivo .lua chamado killing_quest e copie isto dentro dele:

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 talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid

local quest = 86669 ---storage value utilizado

 

if msgcontains(msg, 'quest') then

selfSay("Ok, you have to kill some monsters. Do you want to kill {pirates}?", cid)

talkState[talkUser] = 2

elseif(getPlayerStorageValue(cid, quest) == 2) then

selfSay("You have some more pirates to kill.", cid)

 

elseif(getPlayerStorageValue(cid, quest) == 3) then --pirates

selfSay("Wow, you did it! Now, you can enter in quest door of nargor!", cid)

doPlayerAddExp(cid, 300000)

setPlayerStorageValue(cid, quest, 4)

setPlayerStorageValue(cid, 696969, 1) ---questdoor storage---

 

elseif(getPlayerStorageValue(cid, quest) == 4) or (getPlayerStorageValue(cid, 696969) == 2) then

selfSay("You have already done my quest.", cid)

 

elseif msgcontains(msg, 'pirates') and talkState[talkUser] == 2 then

selfSay("So you wanna kill 1200 pirates yeah?", cid)

talkState[talkUser]= 3

 

elseif msgcontains(msg, 'yes') and talkState[talkUser] == 3 then

selfSay("Ok, now go and kill pirates. And after that go back and report!", cid)

setPlayerStorageValue(cid, quest, 2)

 

end

end

 

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Altere apenas o que está em vermelho, no caso as falas do NPC, suas respostas e o storagevalue da quest.

Você pode modificar também o prêmio da quest, ao invés de doPlayerAddExp(cid, quantidade), coloque doPlayerAddItem(cid, IDDOITEM, QUANTIDADE).

 

Agora vá na pasta data/creaturescripts/scripts e crie um arquivo com o nome de kill_counter.lua, em seguida, adicione isto nele:

 

local monsters = {

--name = storage

["pirate buccaneer"] = 45004,

["pirate corsair"] = 45004,

["pirate cutthroat"] = 45004,

["pirate marauder"] = 45004,

["pirate ghost"] = 45004

}

 

function onKill(cid, target)

if(isPlayer(target) ~= TRUE) then

local name = getCreatureName(target)

local monster = monsters[string.lower(name)]

if(monster) then

local killedMonsters = getPlayerStorageValue(cid, monster)

if(killedMonsters == -1) then

killedMonsters = 1

end

if(name == "pirate buccaneer" or name == "pirate corsair" or name == "pirate cutthroat" or name == "pirate marauder" or name == "pirate ghost") and getPlayerStorageValue(cid, 86669) == 2 then

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have killed " .. killedMonsters .. " of 1200 pirate's.")

setPlayerStorageValue(cid, monster, killedMonsters + 1)

if getPlayerStorageValue(cid, 45004)>=1200 then

setPlayerStorageValue(cid, 86669, 3)

 

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You have killed enought pirate's.")

end

 

end

end

return TRUE

end

end

 

Você pode alterar os nomes dos monstros a serem enfrentados, caso queira fazer uma quest diferente. Neste exemplo foram utilizados piratas :p

Ahh, para mudar a quantidade de monstros que o jogador deve matar, mude aqui onde está em vermelho:

if getPlayerStorageValue(cid, 45004)>=1200

1200 = quantidade de monstros

Caso modifique a quantidade, não se esqueça de mudar as mensagens destacadas em vermelho para o número correto de monstros a serem enfrentados, senão fica non-sense né?

 

Ainda na pasta creaturescripts/scripts, abra o arquivo login.lua e adicione o seguinte comando abaixo de "function onLogin(cid)":

registerCreatureEvent(cid, "KillingInTheNameOf")

 

Abra o arquivo onkill.lua e adicione o mesmo comando:

registerCreatureEvent(cid, "KillingInTheNameOf")

 

Agora vá em data/creaturescripts e abra o arquivo creaturescripts.xml, adicione a seguinte tag:

<event type="kill" name="KillingInTheNameOf" script="kill_counter.lua"/>

 

Para finalizar, vá em data/actions/scripts, crie um arquivo chamado piratedoor.lua e adicione isto:

local bossroom = {x=880, y=617, z=2} ---coordenadas da sala onde o jogador será teleportado ao clicar na porta

local spawn = {x=886, y=608, z=2} ---coordenadas de onde irá nascer o boss

 

function onUse(cid, item, pos, frompos, item2, topos)

local randommonsters = {"brutus bloodbeard", "deadeye devious", "lethal lissy", "ron the ripper"}

local randomboss = math.random(1,4)

 

if getPlayerStorageValue(cid,696969) == 1 then

doTeleportThing(cid, bossroom)

doSendMagicEffect(bossroom,10)

doSummonCreature(randommonsters[randomboss], spawn)

setPlayerStorageValue(cid, 696969, 2)

else

 

if item.uid == 8735 and item.itemid == 5290 then

if getPlayerStorageValue(cid,696969) == 0 or getPlayerStorageValue(cid,696969) == 2 then

doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,'The door seems to be sealed against unwanted intruders.')

end

end

end

end

 

Depois abra o arquivo actions.xml, e adiciona a tag:

<action uniqueid="8735" script="piratedoor.lua" />

 

Altere apenas o que está em vermelho, lembrando que no final, 8735 é o uniqueid que você colocará na porta pelo map editor, 5290 é o id da porta, ambos podem ser alterados!

Crie uma área parecida com essa da screenshot, e não se esqueça de adiciona o NPC no mapa né.

Screenshot:

16150947.png

 

Caso encontrem algum erro, por favor postem aqui!

Agradecimentos ao slawkens (otfans) por criar parte do script, e ao Val por tirar uma dúvida :p

Abraços. :smile_positivo:

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

@hugobululu

Se vc reprovou foi por que não entendeu o que ele disse

 

@topic

Nossa, igualmente ao mod ai, não sabia que era scripter, porém continue assim eu li o seu script e axei ótimo, parabens

Aprovadissimo :button_ok:

Link para o comentário
Compartilhar em outros sites

  • 3 months later...

Olha, eu fiz tdo certinho maais, ñ consigo usar isso. :sosad:

 

[28/10/2009 19:36:57] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/task/piratedoor.lua)

[28/10/2009 19:36:57] cannot open data/actions/scripts/task/piratedoor.lua: No such file or directory

[28/10/2009 19:37:00] [Warning - Event::loadScript] Cannot load script (data/creaturescripts/scripts/kill_counter.lua)

[28/10/2009 19:37:00] cannot open data/creaturescripts/scripts/kill_counter.lua: No such file or directory

 

Tipo eu ja fiz a porta, o tp, o npc.

Mudei pra matar 50 pirates (ele nem conta) e msm antes de eu modificiar ja n tava funfando.

Lógico acho se o script ñ carregou eh porque n ta funfando.

Mas o npc ta 100% Eu axo :p

 

Obrigado, e por favor me ajuda, preciso disso urgente :excl:

Nice topic :yipi:

Link para o comentário
Compartilhar em outros sites

hrmm, eu estou vendo o forum todos os dias para ver se vc respondeu o Riuzaky pq eu fiz o dos pirates deu certo

mais nao consigo faser um para Dragon Lord Para matar o demodras.... pode explica tudo direitinho?

 

oq o numero "45004" vale etc etc~

Link para o comentário
Compartilhar em outros sites

  • 1 month later...
Olha, eu fiz tdo certinho maais, ñ consigo usar isso. :sosad:

 

 

 

Tipo eu ja fiz a porta, o tp, o npc.

Mudei pra matar 50 pirates (ele nem conta) e msm antes de eu modificiar ja n tava funfando.

Lógico acho se o script ñ carregou eh porque n ta funfando.

Mas o npc ta 100% Eu axo :p

 

Obrigado, e por favor me ajuda, preciso disso urgente :excl:

Nice topic :yipi:

 

Opa, foi mal a demora, fiquei afastado do fórum e só vi agora =d

confere no actions.xml se tem essa linha:

<action uniqueid="8735" script="task/piratedoor.lua" />

 

hrmm, eu estou vendo o forum todos os dias para ver se vc respondeu o Riuzaky pq eu fiz o dos pirates deu certo

mais nao consigo faser um para Dragon Lord Para matar o demodras.... pode explica tudo direitinho?

 

oq o numero "45004" vale etc etc~

Tipo, abre o arquivo do dragon lord lá na pasta monsters, o nome dele tem que estar escrito em letras minúsculas, ou seja:

<monster name="dragon lord" nameDescription="a dragon lord"

 

o número de um storagevalue é o que se usa pra verificar se o player já fez ou não a quest.

se for = -1 ou 0, ele não fez, se for 1 ou maior significa que já foi feita.

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

cara, vo fez um script que eu esperava a muito tempo, mas por que nao posso ver os spoils ??

vc pode me enviar um arquivo do word, por favor estou muito precisado, estou faze a mission de matar 2000 hydras para poder matar o boos The Many.... por favor.

e obrigado por sua atençao

Link para o comentário
Compartilhar em outros sites

siveralol tente abrir o spoil e esperar um pouco, as vezes demora mesmo

se não abrir tente atualizar a pagina, casa ainda não abra pessa ao criador

que manda em txt. =)

 

 

______

 

Edit - deve ser porque esses spoils são do antigo forum, agora que mudou o

forum deve ter bugado..

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...