Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 03/23/24 em todas áreas

  1. [OTX 2.x / 8.60] - OTSERVER

    King Laker reagiu a FeeTads por uma resposta no tópico

    1 ponto
    great contribution, there are still some cool ones, like for example, "monster cal walk on fields" putting assets in config.lua, I will make some changes and make necessary PR's, these changes (there were many), are certainly a great contribution to the community
  2. 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.
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo