Histórico de Curtidas
-
IagoNp recebeu reputação de Gabrielx17 em [Dúvida]Esconder Samples GESIORVocê pode fazer uma condição na busca, caso o resultado seja os samples vai dizer que a busca é inválida se não for os samples a busca continua normal, é claro que você terá que conhecer sobre php para fazer.. Mais é um jeito de não mostrar as informações sobre eles, acho que pela database é meio difícil.
O higthscore com o tempo eles vão sair da página pode ser fazer o mesmo..
-
IagoNp recebeu reputação de Alecrim em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de Gabrielx17 em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de Katiau em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de MatCollier em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de Yan Liima em [Resolvido] [Ajuda] Items da house não vai para o depot!Matheus tente o seu script original novamente... só que use essa tag na talkaction só pra testar ... aqui no meu servidor deu certo!
<talkaction log="yes" words="!leavehouse" filter="word-spaced" event="script" value="leavehouse.lua"/>
Ver se funciona espero que dê certo!
-
IagoNp recebeu reputação de Astalavistababy em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de peterson18 em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de Mathias Kenfi em Acabar o Premium e perder a casa@Up pode ser sistema de aluguel também se não tiver como ser só pelo premium.
-
IagoNp recebeu reputação de Eduardo1534 em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de nandooo em [Tutorial] Retirar e Colocar Item automáticoBom galera vi o Tópico que o PaulinhoAraujo criou pedindo ajuda sobre "[PEDIDO] Script que tira e coloca proteção no Portal".
Resolvi fazer um Tutorial para ensinar a fazer esse Script.
O script é automático, sendo assim é ótimo para que alguns eventos seja automáticos dependendo da criatividade do criador do evento!
PARA REMOVER 1 CERCA.
Vai na pasta do seu servidor data\globalevents\scripts copie algum arquivo lua e renomei para eventoinicio.
Agora coloque isso aqui no script:
<globalevent name="eventoinicio" time="06:41" event="script" value="eventoinicio.lua"/> <globalevent name="eventofim" time="21:05" event="script" value="eventofim.lua"/>
OBS: O nome do evento você muda ai conforme você quizer, questão de organização hehee!
E a questão do teleporte você ja coloca a coordenada nele para onde o evento vai ser, e colocar a cerca que ninguem vai entrar.
Veja na imagem:
OBS: Esse script serve para remover ou adicionar qualquer item, então se for fazer de um jeito diferente sintase a vontade só colocar o id do item que vai criar.
Caso o evento seja o inverso, ao invés de retirar o item primeiro você queira colocar um, como uma escada para subir e quando terminar o evento a escada desaparecer, é só alterar o tempo no globalevents.xml mudando o Time e colocando o id da escada no doCreateitem.
Créditos:
90% Kimoszin por criar o script.
10% Eu por fazer o tutorial e editar uma parte do script.
É isso ai, espero que ajude!
-
IagoNp recebeu reputação de Sekk em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de qkwvc1bb em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de Makakovisk em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de Nerivalhs em [PEDIDO] Low level protectDei REP + ... tava precisando de um script como esse .... ajudou mt hehee ,
-
IagoNp recebeu reputação de Bluetooth em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de Victoria em [Ajuda]Piso que teleportaFácil amigo, faça o seguinte.
Vai na pasta movements/scripts copie e renomeie o arquivo.lua para tiletp ou o nome que achar melhor.
Dentro do arquivo cole isto aqui:
local pos = {x = 1226, y = 800, z = 7} function onStepIn(cid, item, position, fromPosition) if getPlayerAccess(cid) then doTeleportThing(cid, pos) doSendMagicEffect(getThingPos(cid), 37) end return true end As posições é a única coisa que precisa configurar.
Em movements/movements.xml adicione essa tag:
<movevent type="StepIn" actionid="23020" event="script" value="tiletp.lua"/> Actionid = id do piso que você vai configurar no Mapa Editor.
Value = o nome do arquivo que você criou.
Pronto, teste e veja se funcionou!
-
IagoNp recebeu reputação de RenanPhellip em Erro Distro 2Olha eu vou passar o script do arquivo .bat para reiniciar só que não é pasta é só um arquivo..
Abra o Bloco de notas e copie isso aqui:
@echo off title OTserv Auto-restarter echo :: ========================================= echo :: --- OTserv Auto-Restarter --- echo :: --- Creditos Exclusivo: Narutox009 --- echo :: ========================================= echo :: :begin distro.exe echo :: echo :: ========================================= echo :: --- Criado por:Narutox009 --- echo :: ========================================= echo :: goto begin :goto begin Cole no bloco de notas e vá em Salvar Como, coloque o nome restart.bat ou outro que você queira mais lembrando de colocar o .bat no final e onde tem Tipo coloque Todos os Arquivos para não salvar em .Txt e salve na mesma pasta onde está o distro que vai ser reiniciado.
No distro do seu servidor renomeie ele para um nome pequeno e mude no arquivo que você acabou de criar onde está em vermelho:
:begin
distro.exe
Feito isso o auto-restarte já vai funcionar.
Agora para que funcione 100% é bom desativar as mensagens de erros da maquina, para isso faça o seguinte:
1° Vá em central de ações.
2° Agora em Alterar configurações da Central de Ações.
3° Desmarque a opção "Solução de Problemas do Windows".
Qualquer erro que faça o distro fechar o arquivo.bat criado fará com que o distro volte novamente..
A questão do distro ser 64x ou 32x não sei como ver isso direito não.. Geralmente aparece o erro no Distro no seu caso não tem esse erro!
Boa sorte no seu trabalho ai amigo.. Abraço!
-
IagoNp deu reputação a Thiago Mapper em (Resolvido)[AJUDA] Ip Changer Não Funciona 8.6manda mais fotos com o tibia aberto e com um IP melhor
vou te passar o meu ipchanger vc testa
ele
aqui so estrai e abre o IPchanger
Ip Changer 8.60.rar
-
IagoNp recebeu reputação de Alidev em Erro Distro 2Olha eu vou passar o script do arquivo .bat para reiniciar só que não é pasta é só um arquivo..
Abra o Bloco de notas e copie isso aqui:
@echo off title OTserv Auto-restarter echo :: ========================================= echo :: --- OTserv Auto-Restarter --- echo :: --- Creditos Exclusivo: Narutox009 --- echo :: ========================================= echo :: :begin distro.exe echo :: echo :: ========================================= echo :: --- Criado por:Narutox009 --- echo :: ========================================= echo :: goto begin :goto begin Cole no bloco de notas e vá em Salvar Como, coloque o nome restart.bat ou outro que você queira mais lembrando de colocar o .bat no final e onde tem Tipo coloque Todos os Arquivos para não salvar em .Txt e salve na mesma pasta onde está o distro que vai ser reiniciado.
No distro do seu servidor renomeie ele para um nome pequeno e mude no arquivo que você acabou de criar onde está em vermelho:
:begin
distro.exe
Feito isso o auto-restarte já vai funcionar.
Agora para que funcione 100% é bom desativar as mensagens de erros da maquina, para isso faça o seguinte:
1° Vá em central de ações.
2° Agora em Alterar configurações da Central de Ações.
3° Desmarque a opção "Solução de Problemas do Windows".
Qualquer erro que faça o distro fechar o arquivo.bat criado fará com que o distro volte novamente..
A questão do distro ser 64x ou 32x não sei como ver isso direito não.. Geralmente aparece o erro no Distro no seu caso não tem esse erro!
Boa sorte no seu trabalho ai amigo.. Abraço!
-
IagoNp deu reputação a MaXwEllDeN em (Resolvido)Falar saia e o npc desaparecerif msgcontains(message, 'saia') then local pos_npc = getThingPos(getNpcId()) doRemoveCreature(getNpcId()) addEvent(doCreateNpc, 4*1000, "Fulano", pos_npc) end
-
IagoNp deu reputação a augustomeneghetti em [PEDIDO] Como editar um monsterBom.. vamos começar por partes.
Vou dar um ctrl c + ctrl v em algumas partes e vou explicando passo a passo, vale lembrar que eu não manjo 100% pois nunca me preocupei com algumas coisas.. então o que eu tiver certeza vou deixar explicito, o que for uma hipotese para mim vou falar EU ACHO.
Vamos lá.
<monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="275" manacost="10000">
Auto-explicativo. Utilize para mudar o nome do monstro.
<monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="275" manacost="10000">
Serve para você escolher o que vai apareçer quanto você der look num monstro.. por exemplo você da look num demon.. vai apareçer "You se a demon".. ai se você quiser alterar isso, a vontade
<monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="275" manacost="10000">
Raça propriamente dita, essa parte é simples de entender porém eu nunca parie para prestar atenção no que isso influencia, mas provavelmente deve influenciar em algo.
<monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="275" manacost="10000">
Altere a experiencia do monstro aqui.. por exemplo, seu ot server é exp de 10x
Nesse caso um demon irá lhe dar 6000 de exp * 10, ficando então 60,000 de exp, se você alterar para 7000 a exp, irá dar 70,000 de exp o demon, você tem que levar em conta a exp como 1x elevado a rate do seu server, se você quer que um monstro de 10k de exp, você vai lá e põe 10k, e por seu server ser 10x ele vai dar 100k, algo que você não quer.. nesse caso utilize 1k de exp
<monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="275" manacost="10000">
Velocidade propriamente dita do monstro, altere isso para faze-lo andar mais rapido/devagar, ou deixe em zero para o monstro ficar parado
<monster name="Demon" nameDescription="a demon" race="fire" experience="6000" speed="275" manacost="10000">
Provavelmente deve ser a mana necessária para sumonar o demon, mas calma lá.. ja vamos chegar num ponto onde definimos se o monstro é sumonavel ou não.
-----------------------------
<health now="8200" max="8200"/>
Aqui você define a health do monstro.. por exemplo
<health now="500" max="8200"/>
Se você fizer isso, o monstro vai ter um TOTAL de 8200 de HP, mas quando ele nascer, ele vai nascer com 500 de HP, ou seja, a barrinha de life dele vai estar no vermelho praticamente
-----------------------------
<look type="35" corpse="5995"/>
Aqui você define o sprite do seu monstro
Não lembro de cabeça.. mas vamos fingir que o citizen outfit é look type 100, você tem o looktype 35, e quer fazer um demon com outfit de citizen, você muda para 100, ou qualquer outro valor referente ao outfit que você procura.
<look type="35" corpse="5995"/>
Aqui você define qual será o sprite do seu monstro quando ele morrer.
Agora, vamos fazer algo mais divertido?
Vamos alterar o seguinte código:
" <look type="35" corpse="5995"/>"
Suponha-se que você quer utilizar o outfit citizen, mas dessa maneira você não pode definir as cores, e nem fazer um monstro com addon, então agora vou te ensinar como fazer isso
Insira no código as seguintes informações destacadas:
<look type="35" head="114" body="114" legs="0" feet="0" addons="3" corpse="5995"/>
Agora vamos as explicações:
<look type="35" head="114" body="114" legs="0" feet="0" addons="3" corpse="5995"/>
Define a cor do cabelo do seu monstro, porém você tem que definir com numeros, ja te ensino o macete para descobrir como conseguir esses valores
No caso, 114 representa o preto, então seu monsto terá cabelo preto, se você definir como 0, será cabelo branco.
<look type="35" head="114" body="114" legs="0" feet="0" addons="3" corpse="5995"/>
Mesma coisa do caso acima, porém para o peitoral do corpo.. e assim por diante
Basta você imaginar na ordem do Set outfit do próprio Tibia, quando você vai em ser outfit, temos as seguintes coisas:
Head = Head
Primary = Body
Secondary = Legs
Detail = feet
Entendeu?
Para definir os addons do seu monstro você editará a seguinte parte:
<look type="35" head="114" body="114" legs="0" feet="0" addons="3" corpse="5995"/>
Se você quiser que ele tenha APENAS o addon 1, deixe dessa maneira:
addons="1"
Para o addon 2:
addons="2"
Agora, você quer saber a melhor maneira de deixar o monstro como você quer? Simples, coloque seu ot server online, e pegue um char de teste, selecione nele o outfit com as cores e addons que você quer, e depois deslogue do char, feito isso abra o MYSQL (a versão que você utilizar), lá vá em editar players, se você utilizar o SQLite Studio assim como eu, logo a frente do nome do seu char de teste, vai ter as informações com o numero da cor e outfit que você selecionou
<targetchange interval="5000" chance="8"/>
Nessa parte você coloca um valor para definir a cada QUANTO TEMPO ele irá sorteiar baseado no valor ao lado (chance) se o monstro irá mudar seu alvo de um jogador para outro.
Na parte a seguir vamos definir algumas coisas utilizando o padrão Binário, mas ai você me pergunta o que é binário?
Simples, definição de verdadeiro e falso a partir de 0 e 1.
Para verdadeiro utilizaremos 1, para falso 0.
<flag summonable="0"/>
Define se é possivel um player normal sumonar o monstro através da magia "utevo res".. no caso está definido como não, não é possivel.
<flag attackable="1"/>
Define se é possivel UM JOGADOR atacar o monstro, por exemplo, se você definir como 0, ao tentar atacar o monstro vai ser impossivel.
<flag hostile="1"/>
Define se é um monstro hostil, ou simplificando, se estiver como 1 ele te ataca, mas se estiver como 0 ele seria um rabbit da vida, pode ser atacado mas não ataca de volta.
<flag illusionable="0"/>
Define se é possivel utilizar a magia "utevo res ina" no monstro.. ou seja, um player comum (mage) se transformar no monstro por um determinado tempo
<flag convinceable="0"/>
Mesma coisa do summonable PRATICAMENTE, porém é através de uma runa que existe no jogo, se você utilizar ela num monstro ele irá virar seu summon.
<flag pushable="0"/>
No caso, demons não são possiveis de arrastar, mas se você alterar para 1, será possivel arrastar seu demon.
<flag canpushitems="1"/>
Define se o monstro em si irá arrastar itens, no caso você tacou uma parcel na frente do bixo e saiu correndo, ele arrasta ela tirando-a do seu caminho.
<flag canpushcreatures="1"/>
Mesma coisa do item anterior, porém com criaturas, se uma criatura entrar na frente do seu monstro, ele irá arrasta-lá para chegar até você.
<flag targetdistance="1"/>
A distancia que você quer que o monstro fique do jogador, exemplo: Você quer que o demon ataque o jogador a 2 sqm's de distancia, basta alterar para 2 o valor.
<flag staticattack="90"/>
Não sei dizer o que fazer, se alguem souber, peço que poste.
<flag runonhealth="0"/>
Define a vida em que o monstro irá fugir de você (porém não sei dizer se funciona como a vida mesmo ou em % da vida, se alguem puder deixar mais claro isso)
---------------------------
</flags>
<attacks>
<attack name="melee" interval="2000" skill="100" attack="110"/>
<attack name="manadrain" interval="2000" chance="13" range="7" min="0" max="-120"/>
<attack name="fire" interval="2000" chance="30" range="7" radius="7" target="1" min="-150" max="-250">
<attribute key="shootEffect" value="fire"/>
<attribute key="areaEffect" value="firearea"/>
</attack>
Nessa parte iremos trabalhar as spells do monstro.
A parte destacada em negrito, é onde você coloca os ataques, ou seja, todo ataque novo que você quiser fazer OU TIRAR, terá que ser assim, e sempre terá de ser dentro do padrão, no caso eu retirar todos os ataques e deixar apenas um novo.
<attacks>
<attack name="melee" interval="2000" skill="100" attack="110"/>
</attack>
Dessa maneira o demon irá utilizar APENAS o melee skill, com um intervalo de 2000 milésimos, a parte e skill e attack basta pensar que ele é um player, vamos utilizar um exemplo.
<attack name="melee" interval="2000" skill="100" attack="25"/>
Isso equivale a um jogador com skill 100 utilizando uma arma com attack 25. (Por exemplo um paladino com spear)
<defenses armor="55" defense="55">
<defense name="healing" interval="2000" chance="15" min="130" max="240">
<attribute key="areaEffect" value="blueshimmer"/>
</defense>
<defense name="speed" interval="1000" chance="8" speedchange="290" duration="5000">
<attribute key="areaEffect" value="redshimmer"/>
</defense>
</defenses>
O critério utilizado acima nos ataques, também servem para buffs do monstro, por exemplo aqui em defense, você pode ver que ele tem uma chamada speed, que é um haste que o monstro usa para correr mais rapido. Mas esse não é o foco que irei abordar aqui.
A parte em negrito aborda a defesa do monstro, mesmo criterio utilizado acima no ataque, porém para defesa.
Agora, você queria adicionar uma spell de healing, correto?
então vamos lá
Peguei como exemplo a linha de código de um monstro do meu servidor, basta você inserir isso no seu código que estará tudo perfeito.
<defense name="healing" interval="1000" chance="25" min="500000" max="50000000">
Interval define o intervalo do chance, ou seja, a cada 1000 milésimos será sortiado com uma chance de 25 de o monstro healar (detalhe, se não for sortiado dentro da chance o monsto não irá healar) entre o valor min e max, e a próposito, estou falando sortiar, mas o mais correto seria dizer:
"Sortear um valor random", pois não há como definir o valor a ser sortiado (se não nem sequer seria um sorteio né?"
-------------------------------------
<elements>
<element physicalPercent="30"/>
<element energyPercent="50"/>
<element earthPercent="20"/>
<element icePercent="-15"/>
<element holyPercent="-15"/>
<element deathPercent="20"/>
</elements>
Essa parte é BEM SIMPLES, é a % de defesa do monstro contra danos magicos/fisicos:
Levando em conta os dados acima vamos lá:
<element physicalPercent="30"/>
O monstro tem uma defesa de 30% contra physical, ou seja, se você iria hitar 100 nele, o valor 100 será diminuido para 70, que será o seu hit final
<element icePercent="-15"/>
Aqui ja fica diferente.. DESTAQUE para o sinal de -, isso significa que o monstro É FRACO ao elemento ice, ou seja, você iria hitar 100?
Seu hit final vai ser 100 + 15% = 115 de dano
É essa formula para qualquer valor, por exemplo:
300 de dano (15% do valor é igual a 45), ou seja, 345 de dano de ice
-----------------------------
<immunities>
<immunity fire="1"/>
<immunity drown="1"/>
<immunity paralyze="1"/>
<immunity invisible="1"/>
</immunities>
Aqui são as imunidades do monstro, vamos lá, 1 por 1:
<immunity fire="1"/>
Significa que o monsto tem 100% de proteção a fogo, então não importa o que ele não toma dano de fogo.
<immunity drown="1"/>
Não me lembro o que é drown, se não me engano é andar embaixo da água, se for 0 o monstro iria perder vida (SE NÃO ME ENGANO)
<immunity paralyze="1"/>
Ao utilizar a paralise rune no monstro, isso define se ele será afetado ou não
<immunity invisible="1"/>
Define se o monstro irá ver invisbilidade (utana vid ou stealth ring)
Caso essa opção esteja marcado como 0, se você utilizar utana vid, o demon não irá lhe atacar por não te ver.
-----------------------
<summons maxSummons="1">
<summon name="fire elemental" interval="1000" chance="12"/>
</summons>
O demon é um monsto que sumona bixos, no caso aqui você define em MAXSUMMONS qual o limite de bixos que ele poderá sumonar, e em baixo qual o bixo propriamente dito que será sumonado, no caso você pode alterar o fire elemental para um rat se quiser.
------------------------
<voices interval="5000" chance="10">
<voice sentence="MUHAHAHAHA!" yell="1"/>
<voice sentence="Your soul will be mine!" yell="0"/>
</voices>
Deixei apenas as 2 opções para uma explicação mais objetiva, o primeiro em negrito é uma fala do monstro, porém está como yell=1, isso significa que quando ele falar, ele irá gritar na verdade, então será possivel ver essa fala dele de fora da tela.
A fala de baixo no caso, ja representa uma simples fala qualquer que só se pode ser vista estando na mesma tela do monstro em si.
-----------
~
Enfim..
Só restou explicar a ultima parte de loot, mas com tudo que ja expliquei acima, creio que você pegou uma base e isso não será necessário né?
hehe, espero que esse post tenha lhe ajudado, qualquer dúvida, basta perguntar, ajudarei no que for possivel.
-
IagoNp deu reputação a MatheusVidaLoka em [GlobalEvents] Npc por tempo[GlobalEvents] Npc por tempo
Olá galera do Tibia King , venho trazer um novo script para vocês que pode ajudar muito em seu OTserver.
Como funciona o script ? : Esse script é assim , você escolhe um NPC de sua escolha e o NPC aparecerá no certo tempo que você escolher e na coordenada que você escolher .
Vamos para o Script então :
Vá em data/GlobalEvents/GlobalEvents.xml e adicione a tag abaixo :
Vermelho - o tempo que o npc aparecerá 3600 = 1 Hora
Vá em data/globalevents/Scripts , copie e cole um arquivo .lua , renomeie-o para npc.lua e adicione o script abaixo :
A explicação de como editar o script está dentro do script mesmo
Créditos :
Lailton 80 % (Por fazer o script)
MatheusVidaLoka 20 % (Por arrumar erros e por disponibilizar o Script aqui no Tibia King)
Autorização para postar o Script Concedida !
-
IagoNp deu reputação a xWhiteWolf em Anel de SauronFala galera do TK, criei esse anelzinho pra servers que procuram inovar..
bom, oque ele faz??
Simples, ele torna o usuário invisível.
aff, mas já existe o stealth ring que faz isso!
Sim mas dessa vez eu digo invisível mesmo, nenhum monstro ou players conseguirá te ver.
que lixo, assim qualquer player vai poder ficar invisível e passar no meio dos monstros e players.. vai estragar o server
Aí é que vc se engana porque o anel vem uma maldição, quem usar ele vai perdendo 3% de vida por segundo (ajustável) e só vai estragar o server se vc sair distribuindo o anel pra todos os players haha
O anel em si possui duas versões, na primeira ele retira 3% de vida por segundo, na segunda ele adiciona uma condição que te deixa perdendo uma quantidade fixa de vida, CONTUDO, na segunda versão aparece uma poça de sangue cada vez que toma o dano então dá pros players te pegarem caso vc coloque o anel e resolva fugir kkkkk
Vou chamar aqui de versão 1 e 2 respectivamente.
OBS: ISSO É EM MOVEMENTS!
1ª versão (sem sangue mas que tira 3% de vida por segundo):
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local percent = 3 local tempo = 1 -- em segundos function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") function lifesteal(cid) steal = addEvent(lifesteal, 1000*tempo, cid) if isCreature(cid) then doSendAnimatedText(getCreaturePos(cid), "-"..math.floor((getCreatureMaxHealth(cid) * (percent/100))), 144, cid) doCreatureAddHealth(cid, -math.floor(getCreatureMaxHealth(cid) * (percent/100))) end end lifesteal(cid) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") stopEvent(steal) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end 2ª versão (a cada 1,5 segundos ele te tira um dano configurado e deixa uma poça de sangue embaixo de vc facilitando que te identifiquem mesmo estando invisivel):
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE) local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false) local condition = createConditionObject(CONDITION_PHYSICAL) setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE) addDamageCondition(condition, -1, 1500, -500) function onEquip(cid, item, slot) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "By using this ring you will become fully invisible and lose health over time because of it's curse.") doAddCondition(cid, condition) doAddCondition(cid, invisible) doAddCondition(cid, outfit) doSendMagicEffect(getCreaturePos(cid), 12) return true end function onDeEquip(cid, item, slot) doTransformItem(item.uid, 2165) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You're no longer receiving the special bonus..") doRemoveCondition(cid, CONDITION_PHYSICAL) doRemoveCondition(cid, CONDITION_INVISIBLE) doSendMagicEffect(getCreaturePos(cid), 12) doRemoveCondition(cid, CONDITION_GAMEMASTER, GAMEMASTER_INVISIBLE) return true end Agora edite no items.xml o stealth ring pra que ele seja infinito:
<item id="2202" article="a" name="stealth ring"> <attribute key="weight" value="100" /> <attribute key="slotType" value="ring" /> <attribute key="transformDeEquipTo" value="2165" /> </item> e em movements.xml adicione essas linhas:
<movevent type="Equip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> <movevent type="DeEquip" itemid="2202" slot="ring" event="script" value="stealth.lua"/> Editando:
Na primeira versão vc pode alterar as seguintes coisas que estão em colorido:
local invisible = createConditionObject(CONDITION_GAMEMASTER, -1, false, GAMEMASTER_INVISIBLE)
local outfit = createConditionObject(CONDITION_INVISIBLE, -1, false)
local percent = 3
local tempo = 1 -- em segundos
em vermelho é o tempo que dura a invisibilidade... -1 é infinito
em azul é a porcentagem de vida que perde por tempo
em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo perde 3%
Na segunda versão vc pode editar as mesmas coisas do primeiro só que o tempo e o dano pelo tempo estão na condition:
local condition = createConditionObject(CONDITION_PHYSICAL)
setConditionParam(condition, CONDITION_PARAM_DELAYED, TRUE)
addDamageCondition(condition, -1, 1500, -500)
em vermelho é o numero de vezes que vai tirar vida. Mais uma vez -1 significa infinito (infinito até remover o anel)
em azul é o dano que vc toma a cada tempo (lembre-se de deixar sempre um - na frente se não ele vai adicionar vida)
em verde é o tempo em que se perde vida.. nesse caso a cada 1 segundo e meio retira 500 de vida
Bom, é isso.. um script simples mas que vai ajudar muita gente pelo fato de usar conditions não tão comuns e de uma forma diferente haha
-
IagoNp deu reputação a 3visan em Aula [8] Loops: while e repeatWhile & repeat
Aula 8
Primeiramente desculpe a demora por essa aula, ficou meio aquela de; ah faz você, não faz você, anem faz você; Mais em fim estamos de volta com uma coisa indispensável em scripting que são os loops. Antes de tudo devo avisa que loops são perigosos, você pode travar seu servidor inteiro usando errado um loop.
Os loops são usados para inicialmente quando temos varias funções juntas iguais, por exemplo, fazendo um jogador falar oi 10 vezes. Sem os loops você faria assim:
doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) doPlayerSay(cid,'oi',1) Com loops você resume isso a 4 linhas, e ainda pode fazer milhares de coisas com eles! While Sintaxe: while (sentença) do (bloco) end Traduzindo: enquanto (algo for verdadeiro) Fazer (coisas) fim Entao repare, enquanto algo for verdadeiro fazer... Ele vai executar o que estiver dentro do loop infinitas veses até que o ((sentença)) seja falso ou você mande ele parar. Veja um exemplo: while getPlayerLevel(cid) < 10 do --- Enquanto o level for menor que 10 doPlayerAddExp(cid,1000) adcionar 1k de exp por vez end Viram? enquanto o nível for menor que 10 ele vai adicionar 1k de exp. Ele ira verificar, se for false (maior que 10) ele pula tudo e vai para o que estiver depois do end, se for true (for menor que 10) ele ira adicionar 1k de exp e depois ira verificar dinovo, ele vai executar até que seje 10. Nessa hora que se tem que tomar cuidado, é na verificação. Se você colocar algo como: while 1 < 2 do, ele vai executar eternamente, até que vc encerre o programa forçadamente (ctrl-alt-del) ou reinicie o pc, ou entao fexe o programa no X Veja mais alguns exemplos: pos = {x=100,y=100,z=100,stackpos=0} local stack = 0 while stack < 255 do pos.stackpos = stack local item = getThingFromPos(pos) if item.itemid ~= 0 and isCreature(item.uid) == false then doRemoveItem(item.uid,item.type) end stack = stack+1 end player ou monster ele ira remover o item e no final adcionar +1 numero a nossa variavel stack, Nisso repare, ele ira executar 255 veze e ira deletar todos os items daquela posição imagina vc escrevendo isso 255 vezes sem o loop . Repeat Ao contrario do while ele é tudo ao contrario, a verificação é no fim e ele só repete se for false (contrario de while que é se for true) Sintaxe: repeat (bloco) until (sentença) Tradução: Repetir (coisas) até (bloco) Bem nao seria até seria até que nao, pois se você usar: until true ele vai parar, e se usar: until false ele vai continuar. è ao contrario especificando mais. Diferente do while, o repeat ele executa primeiro o bloco para depois verificar, a verificação é no final. Tambem perigoso pois se usado incorretamente vc vai travar seu server tambem. Mais nao ligue pra isso todos que começam a mexer com loops sempre travam seus servidores no começo é normal. Veja o repeat em uso: local n = 0 repeat n = n+1 print('ola pessoas este é o loop numero:'..n) until n == 10 Ele ira executar 10 vezes, ele ira parar quando n for 10. Agora veja o exemplo de limpar o char adaptado para o repeat e veja a diferença (repare nos sinais de > e< ) pos = {x=100,y=100,z=100,stackpos=0} local stack = 0 repeat pos.stackpos = stack local item = getThingFromPos(pos) if item.itemid ~= 0 and isCreature(item.uid) == false then doRemoveItem(item.uid,item.type) end stack = stack+1 until stack > 255 Viram? Ao invez da verificação ser no começo do loop ela é feita no final, entao ao final do lopp antes da verificação eu adciono +1 no valor da variavel stack, e ele so ira parar o loop assim que stack for maior que 255 (ou seja 256), entao assim que o script dentro do loop temrinar com o valor 256 ele ira parar o loop e prosseguir com o resto do script. break Antes de terminarmos irei falar rapidamente sobre o break. Ele é usado APENAS em loops e serve para "quebrar" o loop, acontece quando vc quer parar o loop sem a verificação, ou parar antes de algo. Veja: local parar = 0 while os.date('%S') == '45' do print('Verificando se agora são 45 segundos') if parar > 25 then break end print('Nem é agora são:'..os.date('%S')..' segundos') parar = para+1 end print('oi')
Nesse caso criei um script para ver se agora são X horas X minutos e 45 segundos (não importa quantas horas e minutos só os segundos), e se depois de 25 verificações não for 45 segundos ele ira usar o break. Quando usado ele ira finalizar o loop e irar continuar a executar o script depois do loop, no caso o print('oi') ai e o resto do script (caso exista)
Exercicios
Faça seguinte:
Crie um loop que execute enquanto o player estiver online, e enquanto ele estiver online colocar para kickar ele.
Use o repeat para criar um script que solte 25 magic effects diferentes.
Use qualquer loop para criar um scritp que mova um player por 5 sqm em direções aleatorias (o script deve parar com o break!)
DESAFIO
Crie um script que gere um loop infinite que so pare depois de 10 segundos de execução.
Creditos:
99% Mock
1% Vittu
Aula 9 Tabelas