Histórico de Curtidas
-
Vitoxy deu reputação a WooX em Field owner onLook (Magic Wall, Fire Bombs, etc)Algumas pessoas vieram me pedir esse código, então hoje eu tirei um tempinho pra trazer pra vocês.
O que faz
Este código faz com que seja possivel ver através do look, quem jogou uma Magic Wall ou um Fire Bomb, isso é útil quando aquele amigo noob taca uma Magic Wall onde não deveria e diz que não foi ele, com esse código não tem como se esconder.
Como implementar
Este código foi testado apenas em TFS 0.x e OTX2, mas acredito que pode facilmente ser adaptado para TFS 1.x.
Originalmente eu fiz este código para ser usado com a Magic Wall, mas ele pode ser implementado em qualquer spell que utilize COMBAT_PARAM_CREATEITEM.
Script original da Magic Wall
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(cid, var) return doCombat(cid, combat, var) end Basta substituir o return doCombat pelo código abaixo.
ret = doCombat(cid, combat, var) if ret then local mWall = getTileItemById(variantToPosition(var), 1497).uid doItemSetAttribute(mWall, "description", string.format("It was cast by: %s.", getCreatureName(cid))) end return ret O código completo deve ficar parecido com este.
local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY) setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1497) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) function onCastSpell(cid, var) ret = doCombat(cid, combat, var) if ret then local mWall = getTileItemById(variantToPosition(var), 1497).uid doItemSetAttribute(mWall, "description", string.format("It was shot by: %s.", getCreatureName(cid))) end return ret end Note que 1497 é o ID da Magic Wall, para items como Fire Field e outros, o ID deve ser substituído.
Créditos
-
Há dois caminhos, um por modificação em 'source' e outro por meio de 'scripts'.
Embora seja um erro na 'source' ele pode ser contornado por meio de 'movements scripts'.
O de 'scripts' é mais fácil, então vamos falar dele. Se não funcionar vamos às 'sources'.
Isto deve resolver.
Caso não dê volte dizendo o que houve.
Ajudei?? Rep++
-
Vitoxy deu reputação a xWhiteWolf em Novo Sistema de Trainer [0.36~0.4]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:
-
Vitoxy recebeu reputação de Mateus Santosss em (Resolvido)Monster que sumona outros monsters<?xml version="1.0" encoding="UTF-8"?> <monster name="Kakuzu" nameDescription="Kakuzu" race="blood" experience="0" speed="650" manacost="0"> <health now="9065000" max="9065000"/> <look type="998" head="0" body="94" legs="79" feet="79" corpse="0"/> <targetchange interval="5000" chance="50"/> <strategy attack="90" defense="20"/> <flags> <flag summonable="1"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="1"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="65"/> <flag runonhealth="0"/> </flags> <script> </script> <attacks> <attack name="melee" interval="800" min="-550" max="-640"/> <attack name="manadrain" interval="1000" chance="10" range="7" min="-760" max="-815"> <attribute key="areaEffect" value="redshimmer"/> </attack> <attack name="Katon Dragon Furie" interval="2000" chance="100" radius="4" target="1" min="-14340" max="-5600"> </attack> <attack name="Doton Dragon Furie" interval="2200" chance="100" target="1" min="-14440" max="-5100"> </attack> </attacks> <defenses armor="80" defense="80"> <defense name="healing" interval="4000" chance="40" min="300" max="300"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="4000" chance="40" speedchange="600" duration="4000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> <elements> <element physicalPercent="20"/> <element icePercent="10"/> <element holyPercent="-15"/> <element deathPercent="35"/> </elements> <!--------> <summons maxSummons="4"> <summon name="demon" interval="1000" chance="10" max="4"/> </summons> <!-------> <immunities> <immunity poison="1"/> <immunity lifedrain="1"/> <immunity outfit="1"/> <immunity drunk="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="10"> <voice sentence=".." yell="1"/> </voices> <loot> </loot> </monster> Na tag 'summons', onde está demarcado:
Maxsummons - quantidade maxima do mosntro que ele vai summonar.
Name: nome do mosntro que será summonado.
Interval: Intervalo de tempo em que os monstros são summonados.
Chance: A chance do monstro possivelmente summonar.
Max: Maximo do mosntro denominado na area 'Name' que será summonado.
-
Vitoxy deu reputação a Celulose em (Resolvido)Perfect Upgrade System by OneShotamigo é sua tfs , pois tenho OTX v2 está ok
testei tfs 0.4 está
qual ref sua distro?
-
Vitoxy deu reputação a xWhiteWolf em New Library v. 1.2Fala galera, hoje vim trazer pra vocês uma nova biblioteca de funções que eu venho desenvolvendo, pretendo ir atualizando esse tópico constantemente sempre adicionando funções novas e explicando a utilização delas. Algumas funções que eu coloquei aqui estão presentes na OTAL também, porém algumas eu fiz pequenas correções de forma que essa lib poderia facilmente substituir a OTAL sem grandes problemas (pelo menos se você utilizava apenas as funções básicas da otal)
Todas as funções que não tem -- nome do autor do lado dela foram feitas por mim, xWhiteWolf ou Night Wolf (NW). O restante delas são créditos dos devidos autores, apenas coloquei pois considero funções vitais no server de cada um. Crie um arquivo em data/lib chamado 075 - White Wolf Functions.lua e coloque o seguinte código dentro:
Agora eu vou explicar oque cada função faz porque de nada adianta lançar uma lib e não explicar oque ela faz não é mesmo? hahaha
Obs inicial: quando uma função tiver em seus parametros um [] significa que oque está dentro do colchetes não é um parâmetro obrigatório.
Como usar: doShowTimeByPos(cid, getCreaturePosition(cid), 20, 20)
Irá fazer uma contagem regressiva na posição que o player se encontra começando de 20 e mandando a mensagem na mesma cor da fala dos monstros.
Essa função é bem útil em actions/spells para fazer contagem de tempo em runas como a magic wall e ver quanto tempo falta pra magic wall sumir)
Obs: Espero que ajude bastante pessoas a entender sobre funções, eu utilizei cid como o principal uid das funções nos exemplos mas você pode muito bem utilizar outros uids, fica a critério seu.
Qualquer dúvida comentem abaixo que eu vou tentar ajudar da melhor maneira.
Ahhh, isso daí foi testado em 8.54 mas deve funcionar em quase todas as versões que tenham as funções básicas do TFS.
EDIT: Pessoal, agora é sério, essa lib tem fácil umas 600 linhas, das quais umas 500 eu devo ter codado sozinho (na mão, linha por linha). Eu tive todo o trabalho de testar cada uma delas e oque eu peço é o mínimo de gratidão e respeito. Se eu te ajudei clique em Gostei, se você tiver alguma dúvida eu to me colocando a disposição de responder qualquer coisa relacionada ao tópico, mesmo que você não saiba nem oque é uma lib apenas venha aqui e escreva sua dúvida.
EDIT 2: Duas novas funções adicionas, espero que gostem!
EDIT 3: Três novas funções adicionadas juntamente com suas respectivas explicações.
-
Vitoxy recebeu reputação de ZoR em (Resolvido)Monster que sumona outros monsters<?xml version="1.0" encoding="UTF-8"?> <monster name="Kakuzu" nameDescription="Kakuzu" race="blood" experience="0" speed="650" manacost="0"> <health now="9065000" max="9065000"/> <look type="998" head="0" body="94" legs="79" feet="79" corpse="0"/> <targetchange interval="5000" chance="50"/> <strategy attack="90" defense="20"/> <flags> <flag summonable="1"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="1"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="1"/> <flag targetdistance="1"/> <flag staticattack="65"/> <flag runonhealth="0"/> </flags> <script> </script> <attacks> <attack name="melee" interval="800" min="-550" max="-640"/> <attack name="manadrain" interval="1000" chance="10" range="7" min="-760" max="-815"> <attribute key="areaEffect" value="redshimmer"/> </attack> <attack name="Katon Dragon Furie" interval="2000" chance="100" radius="4" target="1" min="-14340" max="-5600"> </attack> <attack name="Doton Dragon Furie" interval="2200" chance="100" target="1" min="-14440" max="-5100"> </attack> </attacks> <defenses armor="80" defense="80"> <defense name="healing" interval="4000" chance="40" min="300" max="300"> <attribute key="areaEffect" value="blueshimmer"/> </defense> <defense name="speed" interval="4000" chance="40" speedchange="600" duration="4000"> <attribute key="areaEffect" value="redshimmer"/> </defense> </defenses> <elements> <element physicalPercent="20"/> <element icePercent="10"/> <element holyPercent="-15"/> <element deathPercent="35"/> </elements> <!--------> <summons maxSummons="4"> <summon name="demon" interval="1000" chance="10" max="4"/> </summons> <!-------> <immunities> <immunity poison="1"/> <immunity lifedrain="1"/> <immunity outfit="1"/> <immunity drunk="1"/> <immunity invisible="1"/> </immunities> <voices interval="5000" chance="10"> <voice sentence=".." yell="1"/> </voices> <loot> </loot> </monster> Na tag 'summons', onde está demarcado:
Maxsummons - quantidade maxima do mosntro que ele vai summonar.
Name: nome do mosntro que será summonado.
Interval: Intervalo de tempo em que os monstros são summonados.
Chance: A chance do monstro possivelmente summonar.
Max: Maximo do mosntro denominado na area 'Name' que será summonado.
-
Vitoxy recebeu reputação de .Foxxy em (Resolvido)[[[ Save Player ]]]]Salva o server todo incluindo os players...
Mas existe uma talkaction individual que também faz isso, entretando cada player tem que se salvar sozinho.
talkactions/scripts/ save.lua
function onSay(cid, words, param, channel) local config = { s = 11548, -- n mexa exhau = 30 -- tempo em seegundos para salvar denovo } if (getPlayerStorageValue(cid, config.s) <= os.time()) then doPlayerSave(cid) setPlayerStorageValue(cid,config.s,os.time()+config.exhau) doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Seu Personagem foi salvo com sucesso!!.") else doPlayerSendCancel(cid, "Você tem que esperar " .. config.exhau .. " segundos para salvar novamente.") end return TRUE end
talkactions.XML
<talkaction words="!save" event="script" value="save.lua"/> @XandimH