-
Quem Está Navegando 0 membros estão online
Nenhum usuário registrado visualizando esta página.
-
Conteúdo Similar
-
Por buddha
Eu estou fazendo um script e preciso saber se a invocação(summon) de um player tem o nome "Scorpion"(ou qualquer outro), mas não sei como fazer isso em prática.
-
Por Shiuns
Versão Testada: Tibia 8.60 // TFS 0.3.6 & 0.4
Descrição: Evita jogadores que dão exit nos treiners upando skills. Eles são kikados automaticamente depois de alguns minutos e algumas verificações.
exit_treiner.lua
config_exit_treiner = { Warning = "Favor trocar seu char de direção para evitar que ele seja kikado", -- mensagem time = 3, -- a cada 3 minutos irá checar roudsKick = 3, -- se ele estiver parado na mesma direção por 3 checagem seguidas será kikado storages = {879780,879781}, -- n edite treiners = {"Trainer", "Training Monk"} -- coloque aqui os Treiners do seu ot } --[[Functions List]]-- function doAddRoundExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end setPlayerStorageValue(cid, config_exit_treiner.storages[1], getPlayerStorageValue(cid, config_exit_treiner.storages[1]) < 0 and 1 or getPlayerStorageValue(cid, config_exit_treiner.storages[1])+1) if getRoundExitTreiner(cid) >= config_exit_treiner.roudsKick then doKickExitTreiner(cid) end end function getRoundExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end return getPlayerStorageValue(cid, config_exit_treiner.storages[1]) < 0 and 1 or getPlayerStorageValue(cid, config_exit_treiner.storages[1]) end function doResetExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end return setPlayerStorageValue(cid, config_exit_treiner.storages[1], 0) end function doKickExitTreiner(cid) if not isCreature(cid) then return LUA_ERROR end if getTileInfo(getCreaturePosition(cid)).protection or not getTreinerSpectators(cid) then doResetExitTreiner(cid) setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) else doResetExitTreiner(cid) doRemoveCreature(cid) end end function getTreinerSpectators(cid) local t = getSpectators(getCreaturePosition(cid), 2, 2, false) if t then for _, cid in ipairs(t) do if isMonster(cid) and isInArray(config_exit_treiner.treiners, getCreatureName(cid)) then return true end end end return false end function doCheckLookDirExitTreiner(cid, r) if not isCreature(cid) then return LUA_ERROR end if getTreinerSpectators(cid) then local new = getCreatureLookDirection(cid) if r == new then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, config_exit_treiner.Warning) doAddRoundExitTreiner(cid) else doResetExitTreiner(cid) end addEvent(doCheckLookDirExitTreiner,config_exit_treiner.time*60*1000, cid, new) else setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) doResetExitTreiner(cid) end end --[[Script System]]-- function onLogin(cid) doResetExitTreiner(cid) setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) registerCreatureEvent(cid, "NewExitTreiner") return true end function onCombat(cid, target) if not isCreature(cid) or not isPlayer(cid) then return true end if getPlayerStorageValue(cid, config_exit_treiner.storages[2]) - os.time() > 0 then return true end if not isMonster(target) then return true end if isMonster(target) and not isInArray(config_exit_treiner.treiners, getCreatureName(target)) and getRoundExitTreiner(cid) > 0 then setPlayerStorageValue(cid, config_exit_treiner.storages[2], 0) doResetExitTreiner(cid) return true end if isMonster(target) and isInArray(config_exit_treiner.treiners, getCreatureName(target)) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, config_exit_treiner.Warning) addEvent(doCheckLookDirExitTreiner, config_exit_treiner.time*60*1000, cid, getCreatureLookDirection(cid)) setPlayerStorageValue(cid, config_exit_treiner.storages[2], os.time()+5*60) end return true end
TAG
<event type="login" name="ExitTreiners" event="script" value="exit_treiner.lua"/> <event type="combat" name="NewExitTreiner" event="script" value="exit_treiner.lua"/>
-
Por Cerberus
Versão testada : 8.6
a TAG tem 2 tipos uma com % da mana e outra com valor fixo, vou disponibilizar as 2 tags vc escolhe o que preferir.
<!-- Custom AVP Spells --> <instant name="SumonScript " words="Msg que vai sumonar você escolhe" lvl="lvl minimo para usar" maglv="ml para usar" manapercent="quanto gasta de mana em porcentagem 1,20,50,100" exhaustion="2000" needlearn="0" event="script" value="summon/summon_script.lua"> <vocation id="1"/>-- vocations do server que pode usar a magia , mecha de acordo com sua vontade <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> </instant> ou essa TAG
<!-- Custom AVP Spells --> <instant name="SummonScript" words="msg" lvl="40" maglv="ml para usar" mana="100" exhaustion="2000" needlearn="0" event="script" value="summon/Gnomo.lua"> <vocation id="1"/> <vocation id="2"/> <vocation id="3"/> <vocation id="4"/> </instant>
segue abaixo o lua. criei arquivo chamado summon_script.lua dentro da pasta data/spells/summon
Versão 1.2 do script (update) -- seguindo problema indicado pelo @KotZletY atualizei o script..
Agora o summon prefiro deixa a escolha de vocês so por o nome do monstro do seu servidor lem cima na tabela t.summon
eu puis o nome do demon uma creatura do tibia.
-
Por xWhiteWolf
Olá meus caros do Tibia King, hoje vim trazer pra vocês um sistema que bolei pra um concurso em outro fórum mas acabei ficando descontente e nunca cheguei a disponibilizar.
Eu gostaria de agradecer inicialmente à três acontecimentos que sem eles não seriam possíveis a criação desse sistema.
- A otlist obrigar que os servidores utilizem anti idle
- Os mages do meu servidor reclamarem que não dava pra treinar ml nos trainers
- Ao @Storm Night, que embora tenha me irritado muito nesse tópico aqui , botou a sementinha dessa idéia na minha cabeça.
Explicação É a combinação de dois sistemas que eu ja havia feito, o primeiro escolhe entre todas as salas de treiner aquela que está vazia pra te alocar e o segundo te mantém alimentado e rodando pra simular o anti idle. (Nota: ele não impede o anti idle de fato, se vc quiser fazer isso vc vai precisar editar o script de anti idle que vc utiliza pra ignorar players com determinado storage e adicionar o storage no player quando ele entrar na sala e tirar ao sair.. mas não sei até que ponto isso pode provocar ban da OTservlist por isso decidi não ensinar isso aqui.)
Sem mais delongas, talk is cheap, show me the code.
Idéia Basicamente dá pra reduzir toda a idéia do código nessa foto aqui:
Você tem diversas salas com trainers nesse formato (pode ser em linha reta horizontal ou vertical tb, mas assim fica melhor distribuído). Você inclusive pode criar salas no meio do void de forma que a distancia de uma vc nao consiga ver a outra e vai ser uma experiencia muito amigável para o player ver que está treinando sozinho na paz. Ao entrar no tp ele te aloca na primeira sala vazia, se não houverem salas vazias ele retorna que não tem posições livres
Instalação Você precisa criar as salinhas dos trainers equidistantemente, ou seja, tendo a mesma distância A em X e mesma distância B em Y. Sério, se vc errar nessa parte é porque vc não sabe oque significa equidistante. Vai pesquisar preguiçoso!! Já aviso que não vou dar suporte quanto à isso.
Você vai precisar criar salas parecidas com isso daqui:
Perceba que não tem como ter acesso a essa sala, não tem como ser puxado pra fora do trainer, não tem dor de cabeça nenhuma e quando o player quiser sair ele só entra no tp e volta pro templo ou pra onde vc definir.
Nesse teleport da sala vc adiciona o actionid 14877 e não bota nenhuma posição nele.
Naquele tile que o player irá ficar que inclusive tem id diferente vc bota actionid 14878.
Agora seleciona a area dessa sala no rme e vai copiando e colando percebendo sempre se vc tá criando as salas com mesma distância em X. Se o ponto inicial de uma sala é 140 e vc quer que todas tenham 12 sqm de distancia vc cria em 152, 164, 178.. por aí vai.
Quando terminar as salas que quiser e tiver montado as linhas e colunas da forma que desejou, vc vai criar um tp principal pra alocar os players nessa sala:
Lembrando que ele não deve ter posição no rme, vc só bota o actionID 14876 e deixa a toPos dele 0, 0, 0. Ele não tem q te teleportar pra nenhum lugar pois a posição será decidida por script.
Se você fez tudo certo até agora vc deve ter algo +- assim:
O importante é manter a distancia certinha entre cada sala. Aí no caso eu fiz rX = 11 e rY = 8 (é a terceira ou quarta vez q eu to falando isso, se vcs errarem pqp eu vou ficar muito irritado);
Vc não bota os trainers, e ali embaixo do spawn vc tem que botar um outro obstáculo pra impedir que o player ande pra baixo e dê a sala como livre.
Feito isso só adicionar os scripts abaixo:
movements.xml
<movevent type="StepIn" actionid="14876" event="script" value="trainertp.lua"/> <movevent type="StepIn" actionid="14877" event="script" value="trainertp2.lua"/> <movevent type="StepIn" actionid="14878" event="script" value="foodtrainer.lua"/>
movements/scripts/trainertp.lua:
movements/scripts/trainertp2.lua:
movements/scripts/foodtrainer.lua:
FIM, qualquer dúvida ou comentário ou sugestão coloquem abaixo. Se gostou REP+, se não gostou REP+ pq deu trabalho e vai ser útil pra alguém, mesmo que de estudo.
Abraços do Lobo.
E ao cara do outro fórum que ficou falando que ia dar erro e quis ficar me corrigindo e mandando scripts sem noção pra "mostrar" que sabia de lua:
-
Por xWhiteWolf
Fala galera do TK, hoje eu venho mais uma vez trazer uma das magias mais incríveis que eu já vi até hoje (sério). A magia original foi feita em outro fórum mas para a versão 10.1... como eu vi que ninguém conseguiu adaptar pra versões inferiores eu decidi criar a minha própria volatile spiderling.
Confesso que no começo eu tive muita dificuldade em achar as funções certas mas depois de tentar ajudar o membro @234567890z no suporte eu tive uma epifania. Sem mais delongas eu vou explicar oque o script faz e em seguida ensinar a colocá-lo no seu server.
• Explicação: A magia foi feita baseada na personagem Elise do jogo League of Legends: você faz uma cria que anda até os oponentes e se explodem causando dano em area e deixando eles envenenados. Aqui tem um gif da magia funcionando
obs: note que esse gif não fui eu que fiz mas ele demonstra exatamente como a magia funciona.
• Instalação: Pra instalá-lo no seu servidor vai ser um pouco complicado pois ele requer diversas modificações... antes de mais nada, coloque essas linhas no seu spells.xml:
<instant name="Volatile Spiderling" words="utevo res tera" lvl="40" mana="20" prem="1" selftarget="1" exhaustion="2000" groups="1,2000" icon="88" needlearn="0" event="script" value="especiais/spiderling.lua"> <vocation id="3"/> <vocation id="7"/> </instant> <instant name="poison explosion" words="poison explosion" lvl="0" mana="0" prem="0" aggressive="1" exhaustion="3000" needlearn="1" event="script" value="especiais/newspider.lua"> </instant> Agora você vai ter que criar os dois arquivos na pasta spells\scripts\especiais.
Em newspider.lua coloque o seguinte:
agora em spiderling.lua coloque o seguinte: Agora feito isso vc vai precisar criar o monstro que usará essa spell.. vá em monster\monsters.xml e adicione a seguinte linha: <monster name="Clone Spider" file="arachnids/newspider.xml"/> agora crie o arquivo data\monsters\arachnids\newspider.xml e adicione o seguinte nele:
Agora eu vou ensinar vocês a editarem... não tem muito oque mudar, apenas se vc quiser alterar os danos da spell vá em newspider.lua e será possível editar os danos do poison e da explosão:
local damageTable = { {4, -3}, {9, -2}, {20, -1} } aqui você muda quantos danos serão e quanto cada um tirará.. no caso serão 4 hits de -3, depois 9 hits de -2 e por fim 20 hits de -1 até o poison parar. Lembrando que esses danos saem de 4 em 4 segundos. Se você quiser que eles sejam mais rápidos é só editar aqui:
addDamageCondition(poisonpowder, t[1], 4000, t[2]) (4000 significa 4 segundos).
Feito isso será possível editar também a area e o dano da explosão respectivamente em: Area:
Dano:
doAreaCombatHealth(cid, 1, getThingPos(cid), area, -1, -30, 20)
Em vermelho temos o dano mínimo, analogamente, em azul, temos o dano máximo.
Em verde é possível editar o efeito da explosão
Só lembrando que as edições que forem feitas no newspider.lua devem ser feitas no spider.lua para que a magia tenha graça.. se não o dano da explosão/poison ao explodir será diferente caso ela morrer antes. Em spiderling.lua vc pode editar a quantidade máxima de crias que um player pode ter... o normal está setado para 2 mas vc pode sentir-se livre pra colocar quantas queira.
local maxsummon = 2 (Só lembre-se que ao explodir uma aranha pode acertar outra então não é muito bom deixar um numero maior que 3);
Se você for daqueles bem chatinhos com a magia você ainda pode editar algumas coisas importantes tais como:
O efeito que sai quando ela explode por morte ou pela spell:
doSendMagicEffect(getThingPos(cid), 16) O tempo em que ela executa a spell, a chance da spell sair naquele tempo e quantos sqm de distancia a criatura alvo deve estar pra aranha se explodir:
<attack name="poison explosion" interval="1000" range="1" chance="50"/> interval = de quantos em quantos segundos ela executa a spell
range = distancia em sqm que o alvo deve estar pra que ela execute a spell
chance = chance de executar a spell a cada interval (nesse caso a cada 1 segundo tem 50% de chance dela soltar a magia)
Você ainda pode editar aqui em vermelho:
o tempo que leva pra criatura executar a magia.. Por padrão eu deixei 2 segundos, ou seja... eu sumono a aranha, ela vai até o alvo e a cada segundo q ela passa grudada no alvo (1 sqm de distancia) ela tem 50% de chance de ativar a spell e ficar parada no lugar durante 2 segundos até explodir. Se você quiser que ela leve menos tempo pra explodir é só baixar o 2000 (em milisegundos).. Se você quiser aumentar o dano e deixar ela parada por mais tempo até explodir pode editar a vontade aumentando os 2000.
• Bom, isso é tudo que dava pra eu explicar... é óbvio que dá pra editar muito mais coisa mas se você não é scripter e não tem muita idéia de como editar eu dei uma ensinada básica doque você está autorizado a mexer. Espero que vocês curtam a spell e deem aquele REP+ pra fortalecer kkkk
Eu não pretendia liberar essa spell visto que ela é extremamente complexa e nenhum servidor tem ela, mas, acho que seria muito babaca da minha parte ficar guardando um script tão bonito hahaha. Qualquer erro ou dúvida postem nos comentários que eu tento ajudar.
ah, mais uma coisa: Os créditos são 90% meus visto que eu fiz praticamente tudo.. 9% é pro cara que fez a magia original (se vcs derem uma procurada vcs vão ver que não tem quase nada a ver com a minha mas os créditos dele são por ele ter me dado a idéia) e 1% pro cara no suporte que me pediu ajuda numa spell do mesmo gênero e me fez correr atrás de uma forma de fazer essa magia pra versões inferiores a TFS 1.0
-