Ir para conteúdo
  • Cadastre-se

(Resolvido)Receber item ao matar o mesmo monstro X vezes


Ir para solução Resolvido por Storm,

Posts Recomendados

TFS 0.4 - THE FORGOTTEN SERVER 0.4 (8.60), publicado por Firelement.

 

Pedido:

 

Eu encontrei esse código do Vankk: (pedido abaixo)

local k = {
	["Demon"] = {
		items = {
			{2160,10} -- item
		}
	}
}

function onKill(cid, target)
	for name, pos in pairs(k) do
		if (name == getCreatureName(target)) then
			doPlayerAddItem(cid, k.items[1], k.items[2])
			doSendMagicEffect(getCreaturePosition(cid), CONST_ME_GIFT_WRAPS)
		end
	end
	return true
end

 

Função do código:

Ao matar X quantidade do mesmo monstro, o player recebe um item especial. O jogador pode verificar através de um comando (!exemplo) quantos monstros ele já matou ao todo.

 

Ex:

(detalhe: apenas quem der o last hit recebe a contagem)

Matei 5 bosses, msg: você matou 5 bosses e recebeu um item.

Matei mais 5, msg: "                 "                       "

Usei comando !check, msg: você matou ao todo 10 bosses e recebeu 2 itens

 

Eu também queria entender como faz isso, se alguém que estiver disposto a fazer e puder explicar como eu agradeço.

 

Editado por Daniel (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

CreatureScripts

local storage = {

      a = 13456, -- Storage que ganhará ao matar o monstro
      b = 34156, -- Storage que ganhará ao matar 5 monstros
      c = 12345  -- Storage que ganhará ao ganhar o item
} 
local required = 5 -- Quantos monstros terá que matar
local itemid, count = 2160, 5 -- Item ID e sua count

function onDeath(cid, corpse, deathList)
local killer = deathList[1]

      if isPlayer(killer) and isMonster(cid) then
         doCreatureSetStorage(killer, storage.a, getCreatureStorage(killer, storage.a) + 1)
         if getCreatureStorage(killer, storage.a) >= required then
            doCreatureSetStorage(killer, storage.a, 0) 
            doCreatureSetStorage(killer, storage.b, getCreatureStorage(killer, storage.b) + 1)
            doCreatureSetStorage(killer, storage.c, getCreatureStorage(killer, storage.c) + 1)
            doPlayerAddItem(killer, itemid, count) 
            doPlayerSendTextMessage(killer, 18, "Voce recebeu ".. count .." ".. getItemInfo(itemid).name .." ao matar o monstro.") 
            return true
         end 
      return true
      end
return true
end

Login.lua , antes do ultimo return true você adiciona essas linhas:

local storage = {

      a = 13456, -- Storage que ganhará ao matar o monstro
      b = 34156, -- Storage que ganhará ao matar 5 monstros
      c = 12345  -- Storage que ganhará ao ganhar o item
} 
      if getCreatureStorage(cid, 13451) == -1 then
         doCreatureSetStorage(cid, storage.a, 0)
         doCreatureSetStorage(cid, storage.b, 0)
         doCreatureSetStorage(cid, storage.c, 0)
         doCreatureSetStorage(cid, 13451, 1)
      end

Talkactions

local required = 5 -- Quantos monstros terá que matar
local storage = {

      a = 13456, -- Storage que ganhará ao matar o monstro
      b = 34156, -- Storage que ganhará ao matar 5 monstros
      c = 12345  -- Storage que ganhará ao ganhar o item
} 
function onSay(cid, words, param, channel)
         doPlayerSendTextMessage(cid, 27, "Você já matou ".. getCreatureStorage(cid, storage.b) * required .." e recebeu ".. getCreatureStorage(cid, storage.c) .." itens especiais")
         return true
end

 

Link para o post
Compartilhar em outros sites

@Sttorm

 

Como eu entrego essa storage? É só um monstro específico.

 

Utilizo isso?

<script>
<event name="X"/>
</script>

 

E se eu fizer assim:

 

local storage = {

      a = 13456, -- Storage que ganhará ao matar o monstro
      b = 34156, -- Storage que ganhará ao matar 5 monstros
      c = 12345  -- Storage que ganhará ao ganhar o item
} 
local required = 5 -- Quantos monstros terá que matar
local itemid, count = 2160, 5 -- Item ID e sua count

local monsters {
  d = {"Demon", "dragon", "orc"],
    }

function onDeath(cid, corpse, deathList)
local killer = deathList[1]

      if isPlayer(killer) and isMonster(cid)  then
    	if getMonsterInfo(monsters.d) then
         doCreatureSetStorage(killer, storage.a, getCreatureStorage(killer, storage.a) + 1)
         if getCreatureStorage(killer, storage.a) >= required then
            doCreatureSetStorage(killer, storage.a, 0) 
            doCreatureSetStorage(killer, storage.b, getCreatureStorage(killer, storage.b) + 1)
            doCreatureSetStorage(killer, storage.c, getCreatureStorage(killer, storage.c) + 1)
            doPlayerAddItem(killer, itemid, count) 
            doPlayerSendTextMessage(killer, 18, "Voce recebeu ".. count .." ".. getItemInfo(itemid).name .." ao matar o monstro.") 
            return true
         end
            return true
         end 
         return true
      end
return true
end

 

Editado por Daniel (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Daniel Remova essa parte , não há necessidade: 

local monsters {
  d = {"Demon", "dragon", "orc"],
    }

Você vai registrar na XML de cada monstro e a script valerá por todos

Link para o post
Compartilhar em outros sites

Como o script ta adicionado aqui:

 

creaturescripts.xml

<event type="Kill" name="Sol" event="script" value="sol.lua"/>

 

login.lua

registerCreatureEvent(cid, "Sol")

 

e

 

local storage = {

      a = 13456, -- Storage que ganhará ao matar o monstro
      b = 34156, -- Storage que ganhará ao matar 5 monstros
      c = 12345  -- Storage que ganhará ao ganhar o item
}
      if getCreatureStorage(cid, 13451) == -1 then
         doCreatureSetStorage(cid, storage.a, 0)
         doCreatureSetStorage(cid, storage.b, 0)
         doCreatureSetStorage(cid, storage.c, 0)
         doCreatureSetStorage(cid, 13451, 1)
      end

    return true

 

 

 

sol.lua


 

local storage = { a = 13456 , -- Storage que ganhará ao matar o monstro b = 34156, -- Storage que ganhará ao matar 5 monstros c = 12345 -- Storage que ganhará ao ganhar o item } local required = 5 -- Quantos monstros terá que matar local itemid, count = 2160, 5 -- Item ID e sua count function onDeath(cid, corpse, deathList) local killer = deathList[1] if isPlayer(killer) and is Monster(cid) then doCreatureSetStorage(killer, storage.a, getCreatureStorage(killer, storage.a) + 1) if getCreatureStorage(killer, storage.a) >= required then doCreatureSetStorage(killer, storage.a, 0) doCreatureSetStorage(killer, storage.b, getCreatureStorage(killer, storage.b) + 1) doCreatureSetStorage(killer, storage.c, getCreatureStorage(killer, storage.c) + 1) doPlayerAddItem(killer, itemid, count) doPlayerSendTextMessage(killer, 18, "Voce recebeu ".. count .." ".. getItemInfo(itemid).name .." ao matar o monstro.") return true end return true end return true end

 

E o monstro para teste:

...

    </loot>
    <script>
<event name="Sol"/>
</script>
</monster>

 

 

 

Erros no console:

image.thumb.png.1c5c9c9b405e2eef9018db9e7448eca1.png

 

Ao matar o monstro:

image.png.1270aed02f7184a19acb0df63b10c212.png

 

@Sttorm e o script de checar as quantidades ta mostrando -1 pra quem não matou nenhum, tentei ajustar pra só enviar a msg pra quem tiver a storage > = 0 mas não deu certo

 

Link para o post
Compartilhar em outros sites

@Daniel não entendi o pedido do tópico, o que você está tentando fazer ? 

E porquê dois tópicos ? Esse e outro levando a esse ?

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

@KotZletY

O outro tópico é um sistema diferente, que eu usarei nesse e em outros montros.

 

Eu to tentando fazer um mosnter, que sempre que eu mato 5 dele, o player recebe um item e duas storages para a contagem:

Ex: !check = Você matou ao todo 50 monstros e recebeu 10 itens.

Editado por Daniel (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Daniel Você está errando nas configurações , primeiro que na XML fica assim

<event type="death" name="Sol" event="script" value="sol.lua"/>

Não precisa registrar evento no login.lua , apenas registra na XML do monstro

Link para o post
Compartilhar em outros sites
  • Solução

@Daniel Parece que você está copiando errado , ta aparecendo uns erros estranhos , enfim testei na minha propria base e não está com esses erros, vou te mandar a script atualizada e voce baixa e cola

creatureScripts.lua // Essa aqui vai ficar na pasta creaturescripts
talkactions.lua  // Esse vai ficar na talkactions 

No login.lua , você vai remover o evento que você adicionou desse sistema do Vankk, e vai registrar no monster em que você quiser essa tag

  <script>
    <event name="Event"/>
  </script>

Agora novamente no login.lua , você vai dar um CTRL + F e procurar por RETURN TRUE, e em cima do return true você vai colocar esse código

local storage = {

      a = 134567, -- Storage que ganhará ao matar o monstro
      b = 341567, -- Storage que ganhará ao matar 5 monstros
      c = 123457  -- Storage que ganhará ao ganhar o item
} 
      if getCreatureStorage(cid, 134511) == -1 then
         doCreatureSetStorage(cid, storage.a, 0)
         doCreatureSetStorage(cid, storage.b, 0)
         doCreatureSetStorage(cid, storage.c, 0)
         doCreatureSetStorage(cid, 134511, 1)
      end

Agora em creatureScripts.XML você cola a tag

<event type="death" name="Sol" event="script" value="sol.lua"/>

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo