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 Julho 24 por Oneshot
Sim, possui. Pode fazer a talk pra mim?
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 Julho 24 por Oneshot
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 Julho 24 por s0me0ne
É, 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
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 Julho 25 por s0me0ne
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
Certo, funcionou certim. Rep +.
Agora só uma dúvida. Para que essas barras \ nessa linha?
doCreatureSay(cid, "utevo res \"".. param .."\"")
Editado Julho 25 por s0me0ne
info
Grupo: Visconde
Registrado: 19/07/12
Posts: 395
Reputação: +36
Char no Tibia: Billy Poul

isso e do script. nao mecha.
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 Julho 25 por s0me0ne
É 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.





info
Grupo: Campones
Registrado: 10/07/12
Posts: 35
Reputação: +2
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.