Ir para conteúdo
  • 0

Summon Spell


s0me0ne

Pergunta

Versão do Tibia: 8.6

Informações: Eu gostaria de que alguém fizesse a spell Summon Monster (utevo res) em forma de .lua. Se for impossível, a função onWriteToChannel(cid, channelId, text) poderia tornar isso possível? Ou talvez até outra função que fosse preciso ser adicionada?

 

Caso não dê mesmo, preciso de um código nas sources que faça com que se o player tiver o Storage 4132, ele fica incapacidado de Summonar.

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Se seu servidor possuir a função getMonsterInfo(name), acho bem possível fazer um utevo res por talkaction e customizável a gosto.

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

  • 0


 

function onSay(cid, words, param, channel)
param = param:lower() or ""
local monster

if param == "" then
	doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
	doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
	return true
end

monster = getMonsterInfo(param)

if monster == nil or (monster.summonable == false and getPlayerFlagValue(cid, PLAYERFLAG_CANSUMMONALL) == false) then
	doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
	doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
	return true
end

if (#getCreatureSummons(cid) >= getConfigValue("maxPlayerSummons") and getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES) == false) or getCreatureStorage(cid, 4132) == 1 then
	doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
	doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
	return true
end

if getCreatureMana(cid) < monster.manaCost and getPlayerFlagValue(cid, PLAYERFLAG_HASINFINITEMANA) == false then
	doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
	doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
	return true
end

doSummonMonster(cid, param)
if getPlayerFlagValue(cid, PLAYERFLAG_HASINFINITEMANA) == false then
	doCreatureAddMana(cid, -monster.manaCost)
end
doSendMagicEffect(getThingPosition(cid), CONST_ME_MAGIC_BLUE)
doCreatureSay(cid, "utevo res \"".. param .."\"")
return true
end

 

<talkaction words="utevo res" filter="word-spaced" event="script" value="summon creature.lua"/>

 


 

Acho que está funcionando bem.

 

Um grande abraço.

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

  • 0

Brigadão ae novamente, Oneshot.

 

Tá ok, parcialmente funcional. Único erro.

 

Só funciona sem as aspas e não tem configuração de vocations.

 

22:32 Fulano: utevo res "monk

 

[24/07/2012 22:32:01] [Error - TalkAction Interface]
[24/07/2012 22:32:01] data/talkactions/scripts/summon creature.lua:onSay
[24/07/2012 22:32:01] Description:
[24/07/2012 22:32:01] (luaGetMonsterInfo) Monster not found

[24/07/2012 22:32:01] [Error - TalkAction Interface]
[24/07/2012 22:32:01] data/talkactions/scripts/summon creature.lua:onSay
[24/07/2012 22:32:01] Description:
[24/07/2012 22:32:01] data/talkactions/scripts/summon creature.lua:13: attempt to index local 'monster' (a boolean value)
[24/07/2012 22:32:01] stack traceback:
[24/07/2012 22:32:01]  data/talkactions/scripts/summon creature.lua:13: in function <data/talkactions/scripts/summon creature.lua:1>

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

  • 0

É, de fato, não pensei nisso.

 


function onSay(cid, words, param, channel)
   param = param:match('%"(%a+)') or param:lower() or ""

   local vocations = {"Druid", "Elder Druid"}
   local monster

   if param == "" then
       doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
       return true
   end

   monster = getMonsterInfo(param)

   if monster == nil or (monster.summonable == false and getPlayerFlagValue(cid, PLAYERFLAG_CANSUMMONALL) == false)then
       doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
       return true
   end

   if not isInArray(vocations, getPlayerVocationName(cid)) and getPlayerFlagValue(cid, PLAYERFLAG_IGNORESPELLCHECK) == false then
       doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
       doPlayerSendDefaultCancel(cid, RETURNVALUE_YOURVOCATIONCANNOTUSETHISSPELL)
       return true
   end

   if (#getCreatureSummons(cid) >= getConfigValue("maxPlayerSummons") and getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES) == false) or getCreatureStorage(cid, 4132) == 1 then
       doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTPOSSIBLE)
       return true
   end

   if getCreatureMana(cid) < monster.manaCost and getPlayerFlagValue(cid, PLAYERFLAG_HASINFINITEMANA) == false then
       doSendMagicEffect(getThingPosition(cid), CONST_ME_POFF)
       doPlayerSendDefaultCancel(cid, RETURNVALUE_NOTENOUGHMANA)
       return true
   end

   doSummonMonster(cid, param)
   if getPlayerFlagValue(cid, PLAYERFLAG_HASINFINITEMANA) == false then 
       doCreatureAddMana(cid, -monster.manaCost) 
   end
   doSendMagicEffect(getThingPosition(cid), CONST_ME_MAGIC_BLUE)
   doCreatureSay(cid, "utevo res \"".. param .."\"")
   return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

Agora sim. Porééém achei outro erro. Caso o player tente summonar um monstro que não existe:

 

13:20 Fulano: utevo res "monstro inexistente

 

[25/07/2012 13:20:49] [Error - TalkAction Interface]
[25/07/2012 13:20:49] data/talkactions/scripts/summon creature.lua:onSay
[25/07/2012 13:20:49] Description:
[25/07/2012 13:20:49] (luaGetMonsterInfo) Monster not found

[25/07/2012 13:20:49] [Error - TalkAction Interface]
[25/07/2012 13:20:49] data/talkactions/scripts/summon creature.lua:onSay
[25/07/2012 13:20:49] Description:
[25/07/2012 13:20:49] data/talkactions/scripts/summon creature.lua:15: attempt to index local 'monster' (a boolean value)
[25/07/2012 13:20:49] stack traceback:
[25/07/2012 13:20:49]  data/talkactions/scripts/summon creature.lua:15: in function <data/talkactions/scripts/summon creature.lua:1>

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

  • 0

Troque essa linha:

 


if monster == nil or (monster.summonable == false and getPlayerFlagValue(cid, PLAYERFLAG_CANSUMMONALL) == false)then

 

Por essa:

 


if monster == false or (monster.summonable == false and getPlayerFlagValue(cid, PLAYERFLAG_CANSUMMONALL) == false)then

Link para o comentário
Compartilhar em outros sites

  • 0

Certo, funcionou certim. Rep +.

 

Agora só uma dúvida. Para que essas barras \ nessa linha?

 

	doCreatureSay(cid, "utevo res \"".. param .."\"")

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

  • 0

Tchubaka, tem certeza do que você tá falando? Isso é apenas uma linha de Say, não vi necessidade no uso das barras. E eu não vou mexer, é só uma dúvida de por quê foram usadas.

 

@Oneshot

 

Para que servem as barras dessa linha?

 

doCreatureSay(cid, "utevo res \"".. param .."\"")

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

  • 0

É que, por exemplo, quando o jogador usado utevo res, o que acontece?

 

18:21 Oneshot: utevo res "rat"

 

Não importa se eu digito no console utevo res rat ou utevo res "rat, o jogador sempre vai falar do jeito acima.

 

Por isso as \ para entender que aquele " é parte da string e não o " de fechar a string.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...