Ei amigo! Só passando pra informar que finalizei a primeira parte do seu pedido. Peço desculpas pela demora, conforme lhe expliquei, minha faculdade é realmente puxada, agora mesmo estou virando a noite estudando, mas dei uma pausa e resolvi trabalhar no que você pediu pra esfriar a cabeça.
Enfim, fiz a parte sobre o summon seguir o jogador. Vamos lá.
Vá na pasta data/globalevents/scripts e crie um novo arquivo chamado summonseguir.lua e cole o seguinte conteúdo nele:
function onThink(cid, interval)
for _, pid in ipairs(getPlayersOnline()) do
local distmax = 3
local efeito = CONST_ME_TELEPORT
if #getCreatureSummons(pid) > 0 then
local tmp = #getCreatureSummons(pid)
if getTilePzInfo(getCreaturePosition(pid)) then return true else
while tmp > 0 do
if getDistanceBetween(getCreaturePosition(pid), getCreaturePosition(getCreatureSummons(pid)[tmp])) > distmax then
doTeleportThing(getCreatureSummons(pid)[tmp], getCreaturePosition(pid), false)
doSendMagicEffect(getCreaturePosition(getCreatureSummons(pid)[tmp]), efeito)
end
tmp = tmp - 1
end
end
end
end
return true
end
Logo no início do script você vê algumas variáveis locais. O valor da variável distmax representa, logicamente, a distância máxima que pode existir entre o summon e o jogador para que o summon seja teleportado. No caso eu coloquei 3, mas no script que você pegou tinha 7, então acho que é a melhor escolha usar igual aos de Pokémon. Por outro lado, a variável efeito foi criada mesmo só pra você conseguir alterar facilmente o efeito que aparecerá no summon quando ele for teleportado. Enfim, é basicamente isso de configuração. Continuemos.
Após ter criado o arquivo do script, vá no seu globalevents.xml e adicione a seguinte tag:
<globalevent name="Summon Seguir" interval="????" event="script" value="summonseguir.lua"/>
Perceba que no parâmetro interval eu coloquei interrogações. No lugar dessas interrogações, você deve colocar o tempo em milissegundos que leva para ocorrer a checagem de posição. Em outras palavras, é o delay pra que o summon seja teleportado. Quanto mais tempo, mais demorará a checagem, e maior é a probabilidade de o summon ficar muito distante. Eu realmente não faço ideia de quanto tempo eles usam nos OTs pokémon, mas acredito que seja uns 1000ms. Como eu te disse por MP, o problema da função onThink é que ela deixa o servidor muito pesado, então é bom não abusar. Contudo, pelos scripts que você postou, os próprios servidores de Pokémon usam desse jeito, então acho que não há problema.
O script que você passou dos servidores de pokémon teleportava apenas o primeiro summon do jogador. No caso de Poketibias, isso não atrapalha, pois cada jogador pode summonar no máximo uma criatura. Contudo, como seu servidor não é um Poketibia, fiz o script pensando em teleportar todos os summons que o jogador invocou, independentemente de qual a quantidade máxima de summons que seu servidor permite (aquela que você configura no config.lua). Porém, fique avisado que quanto maior for o número máximo de summons, mais pesado ficará o script, pois maior será a checagem. De um pra dois summons máximos parece coisa pouca, mas entenda que não é simplesmente "um" summon a mais, e sim um summon a mais por jogador. Dependendo de quantos jogadores online seu servidor tenha, isso é bastante coisa. Por isso, recomendo que deixe no máximo 2 summons por vez.
Enfim, é isso cara. Consegui arranjar um tempo pra fazer essa primeira parte, vou tentar não demorar muito pra concluir a segunda, mas como já te disse por MP meu tempo é apertado. Qualquer novidade posto nesse tópico e te aviso por MP.
Abraço.
@EDIT: Para quem tiver a mesma necessidade do dono do tópico, desenvolvi uma base para a magia Summon Creature na forma de MOD. Essa magia no TFS 0.4 é uma função pré-definida, impedindo que se faça algum tipo de alteração nela via script. Porém, como o que o autor do tópico queria era justamente uma personalização da Summon Creature, fez-se necessário reescrever a magia por completo na forma de script, e deixarei aqui para quem tiver interesse. Para utilizar, basta desativar a Summon Creature original no arquivo spells.xml e adicionar a seguinte mod ao seu servidor:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Summon Monster Personalizado" version="1.0" author="Tiago Melo Juca" contact="TibiaKing" enabled="yes">
<talkaction words="utevo res" filter="word-spaced" event="script"><![CDATA[
-- General Configuration
local lvlmin = 25
local exhaustion = 2000
local needlearn = 0
local learnstorage = 77890
local vocations = {1, 2, 5, 6}
local maxsummons = getConfigValue("maxPlayerSummons")
summonlist = {
[1] = {'rat', 50},
[2] = {'wolf', 100},
[3] = {'demon skeleton', 300}
}
-- Player Info
local lvl = getPlayerLevel(cid)
local vocp = getPlayerVocation(cid)
local mana = getCreatureMana(cid)
local pos = getCreaturePosition(cid)
-- Statements
local learned = 0
local voccan = 0
local cansummon = 0
local manacost = 0
local exhaustorage = 77889
-- Loop Control
local vocs = #vocations
local slistn = #summonlist
-- Conversions
param = string.lower(param)
param = string.gsub(param, '\"', '')
exhaustion = exhaustion/1000
-- Initial Verification
if needlearn == 0 then learned = 1 end
if needlearn == 1 and getPlayerStorageValue(cid, learnstorage) > 0 then learned = 1 end
while vocs > 0 do
if vocp == vocations[vocs] then voccan = 1 end
vocs = vocs - 1
end
while slistn > 0 do
if param == summonlist[slistn][1] then
cansummon = 1
manacost = summonlist[slistn][2]
end
slistn = slistn - 1
end
-- Summon Monster
if getTilePzInfo(pos) then
doPlayerSendCancel(cid, 'This action is not permitted in a protection zone.')
else
if lvl < lvlmin then
doSendMagicEffect(pos, CONST_ME_POFF)
doPlayerSendCancel(cid, 'You do not have enough level.')
else
if learned == 1 then
if voccan == 1 then
if getPlayerStorageValue(cid, exhaustorage) >= os.time() then
doSendMagicEffect(pos, CONST_ME_POFF)
doPlayerSendCancel(cid, 'You are exhausted.')
else
if cansummon == 1 then
if mana >= manacost then
if #getCreatureSummons(cid) < maxsummons then
doSendMagicEffect(pos, CONST_ME_MAGIC_BLUE)
doCreatureAddMana(cid, 0-manacost, false)
local summon = doCreateMonster(param, pos)
doConvinceCreature(cid, summon)
doSendMagicEffect(getCreaturePosition(summon), CONST_ME_TELEPORT)
setPlayerStorageValue(cid, exhaustorage, os.time()+exhaustion)
else
doSendMagicEffect(pos, CONST_ME_POFF)
doPlayerSendCancel(cid, 'You cannot summon more creatures.')
end
else
doSendMagicEffect(pos, CONST_ME_POFF)
doPlayerSendCancel(cid, 'You do not have enough mana.')
end
else
doSendMagicEffect(pos, CONST_ME_POFF)
doPlayerSendCancel(cid, 'Sorry, not possible.')
end
end
else
doSendMagicEffect(pos, CONST_ME_POFF)
doPlayerSendCancel(cid, 'Your vocation cannot use this spell.')
end
else
doSendMagicEffect(pos, CONST_ME_POFF)
doPlayerSendCancel(cid, 'You need to learn this spell first.')
end
end
end
return
]]></talkaction>
</mod>
A MOD acima nada mais é do que a magia Summon Creature do próprio Tibia reescrita na forma de script, a fim de poder fazer personalizações nela (no caso do autor do tópico, deixar os summons mais fortes de acordo com Level e Magic Level). Através dessa base, é possível fazer variações mais elaboradas da magia Summon Creature.
Lembrando que, por motivos de limitação do próprio TFS, monstros summonados por essa MOD devem, obrigatoriamente, apresentar a flag convinceable ligada em seu arquivo XML. Contudo, não é necessário que a flag summonable seja ligada; na realidade, pouco importa se ela está ligada ou desligada, pois a MOD trabalha com a flag convinceable e não summonable (uma vez que o TFS trabalha com doCreateMonster + doConvinceCreature). Outra ressalva é que todos os monstros que podem ser summonados devem ser adicionados naquela listinha no início do script, mas isso por incompetência minha mesmo, não arranjei uma forma mais fácil de fazer isso. Qualquer monstro que não esteja naquela listinha (nome e custo de mana para invocá-lo), não poderá ser summonado (será a mesma coisa de tentar summonar um Demon no tibia global, por ex, ele vai dizer que não é possível).
Bem, é isso. Espero que essa base para a magia ajude quem precisar de uma Summon Creature customizada! Por motivos éticos, não disponibilizarei a versão final adaptada para a necessidade do rheyn, já que é do projeto dele. Porém com a MOD que eu passei vocês facilmente incrementam a magia sozinhos.
Abraço.