Ir para conteúdo
Entre para seguir isso  
Ramza

Monster Sleep(Bônus:Walk/Run) by Ramza

Recommended Posts

Ramza    11
Ramza

[b]Nome:[/b] Sistema de Monster Sleep + Sistema de walk/run
[b]Autor:[/b] Ramza (Ricardo Ianelli)
[b]Versão Testada:[/b] TFS 0.3.6 (Crying Damson) 

Introdução

 

Olá a todos!

Bem, antes que venham dizer "Carai esse cara roubou a idéia do Dokmos, tnc nobbão :fail:", quem viu o script do Dokmos direitinho sabe que eu que dei a idéia, pois eu estava na época tentando fazer esse sistema que estou postando aqui hoje, para o concurso, porém não obtive a tempo, e deixei que ele usasse minha idéia pra fazer um script dele. E ele criou um bem legal :D

Porém...

Eis que finalizei o meu sistema de monstros tirarem uma "soneca" de vez enquanto, e eu digo: Tá muito maneiro! :fist:

Todavia, não pense que não dará trabalho introduzir esse sistema no seu servidor, pois dará sim, não vou negar que esse sistema tá meio "POG", pois não conheço as diversas funções que os grandes scripters desse forum conhecem, devido a isso tenho de "improvisar".

 

Funcionamento

 

Para o sistema funcionar, você precisará mecher nos monstros que você quer que durmam, terá de criar uma magia, um creaturescript, duas talkactions, e ter a OTAL instalada para usar a função "hasSqm(pos)".

Sim, eu sei que é bastante coisa, mas o sistema envolve outros sistemas que se mostrarão necessários para o bom funcionamento e diferencial do script, como as talkactions walk! e run!

O sistema funciona da seguinte forma, as vezes os monstros estão tão cansados que tiram uma soneca, porém, como sabemos, soneca é apenas um breve cochilo, uma dormida "de leve". Então, caso você esteja explorando uma caverna cheia de monstros terríveis, você não irá querer acorda-los fazendo barulho, vai?

Portanto, você terá de se aproximar beeeem devagar, andando bem devagarzinho para não fazer barulho, e assim, não acorda-los.

Por isso incrementei o sistema de walk (andar) e run (correr) :yes:

 

 

Instalando

 

Vá até data\creaturescripts\scripts , faça uma cópia de qualquer arquivo, renomeie-o para sleeping.lua, apague tudo que estiver dentro e cole isto, depois salve:

 

 

function onCombat(cid, target)
 if getPlayerStorageValue(cid, 9070) == 2 then
 doCreatureSetLookDir(cid, getPlayerStorageValue(cid, 9071))
     return false
 else
return true
 end
end

Agora vá em data\creaturescripts e abra o arquivo creaturescripts.xml . Em seguida, adicione a seguinte tag ao arquivo e salve:

 

 

<event type="combat" name="sleeping" event="script" value="sleeping.lua"/>

Agora o próximo passo é ir às talkactions adicionar as funções walk! e run! Vá em data\talkactions\scripts, faça DUAS cópia de qualquer arquivo, renomeie-os para walk.lua e run.lua .

 

 

Em walk.lua, apague tudo que tiver dentro e cole isto:

 

function onSay(cid, words, param, channel)
 if getPlayerStorageValue(cid, 9050) == 2 then
doChangeSpeed(cid, getCreatureBaseSpeed(cid)-300)
doPlayerSendCancel(cid, "You are now walking")
setPlayerStorageValue(cid, 9050, 1)
 else
doPlayerSendCancel(cid, "You are already walking")
 end
end

E em run.lua, apague tudo que tiver dentro e cole isto:

 

function onSay(cid, words, param, channel)
 if getPlayerStorageValue(cid, 9050) ~= 2 then
doChangeSpeed(cid, getCreatureBaseSpeed(cid) - getCreatureSpeed(cid))
doPlayerSendCancel(cid, "You are now running") 
setPlayerStorageValue(cid, 9050, 2)
 else
doPlayerSendCancel(cid, "You are already running") 
 end
end

Agora vá em data\talkactions , abra o arquivo talkactions.xml e adicione as seguintes tags:

 

<talkaction log="yes" words="walk!" event="script" value="walk.lua"/>

e

 

<talkaction log="yes" words="run!" event="script" value="run.lua"/>

 

Pronto, estamos quase no final!

Agora vá em data\spells\scripts , crie um arquivo chamado sleep.lua e cole isto dentro, depois salve e feche.

 

-- FUNCTION BY RAMZA (RICARDO IANELLI) - DO NOT COPY WITHOUT PERMISSION.

local function onSleep(monster, pos, speed)    
 players = getSpectators(pos, 16, 16)
  for i = 1,#players do
      if isPlayer(players[i]) then
          if getPlayerStorageValue(players[i], 9050) == 1 then
          setPlayerStorageValue(monster, 9071, getPlayerLookPos(monster))
          doChangeSpeed(monster, -speed)
          doSendMagicEffect(getCreaturePosition(monster), 32)
          setPlayerStorageValue(monster, 9070, 2)
          addEvent(onSleep, 1000, monster, pos, speed)
          else
          doSendMagicEffect(pos, 29)
          doChangeSpeed(monster, getCreatureBaseSpeed(monster) - speed) 
          doSendAnimatedText(getCreaturePosition(monster), "!", TEXTCOLOR_DARKRED)
          setPlayerStorageValue(monster, 9070, 1)
          break
          end
      end
  end                                          
end   

function onCastSpell(cid, var)
  registerCreatureEvent(cid, "sleeping")
  if getPlayerStorageValue(cid, 9070) ~= 2 then
  local pos, vida, speed = getCreaturePosition(cid), getCreatureHealth(cid), getCreatureSpeed(cid)
  onSleep(cid, pos, speed)
  return TRUE
  else
  return false
  end
end

Depois vá em data\spells e adicione isto ao arquivo spells.xml :

 

<instant name="sleep" words="sleep" enabled="0" script="sleep.lua"/>

Agora é só ir nos monstros que você quer que durmam, no meu exemplo, fiz no monstro "Monk" e onde estiver assim:

 

    <defenses armor="20" defense="22">
       <defense name="healing" interval="1000" chance="17" min="30" max="50">
           <attribute key="areaEffect" value="blueshimmer"/>
       </defense>
       <defense name="speed" interval="1000" chance="10" speedchange="300" duration="3000">
           <attribute key="areaEffect" value="redshimmer"/>
       </defense>
   </defenses>

 

Você adiciona esta tag:

 

<defense name="sleep" interval="1000" chance="[b][color=Red]15[/color][/b]">
</defense>

 

Ficando assim, no caso do Monk:

 

<defenses armor="20" defense="22">
        <defense name="sleep" interval="1000" chance="[b][color=Red]15[/color][/b]">
</defense>
       <defense name="healing" interval="1000" chance="17" min="30" max="50">
           <attribute key="areaEffect" value="blueshimmer"/>
       </defense>
       <defense name="speed" interval="1000" chance="10" speedchange="300" duration="3000">
           <attribute key="areaEffect" value="redshimmer"/>
       </defense>
   </defenses>

 

Reparem que botei '15' ali no chance, pois é um número que eu achei legal, a chance dele durmir. Porém, pra testar, aconselho colocar algo em torno de 30-50.

 

Testando

Bem, assim que tiver colocado em todos os monstros que quiser, ou no monstro que quiser usar pra testar, apenas salve tudo e vamos entrar no jogo para que você teste!

Faça o seguinte:

 

  • Entre num char que não seja GM.
  • Use o comando walk! para fazer seu player "andar", para que você não acorde o monstro.
  • Vá andando em direção ao monstro, e caso ele não esteja durmindo, fique de longe esperando que em menos de 1 minuto ele deva durmir.
  • Assim que ele durmir, pode chegar bem pertinho dele para constatar que ele não se meche, não olha pra você, e nem te atacar.
  • Agora, experimente falar run! e saia correndo, pois ele irá acordar e virá te atacar furioso!

Agradecimentos

 

Eu gostaria de agradecer ao meu amigo Mock, que me disponibilizou sua função getPosByAreaMOCK(pos, arr). Mesmo eu não a usando mais no sistema, obrigado ursão :yes:

Bem, é isso galera, espero que gostem!

E POR FAVOR, sugestões, críticas, são MUITO bem vindas, pois me fazem crescer.

Agradeço desde já, Ricardo Ianelli.

Obs.: Editei o sistema para melhorar o sistema devido à sugestão do usuário "Conde2". Obrigado Conde!

Editado por Black Ice

Compartilhar este post


Link para o post
Mock    32
Mock

C
omen
tario
:
Como é bom aprovar um script que merece ser aprovado.

 

:P

aproposito seu script ta MTO bom so que apesar da quantidade de getThingFomrPos que ele executa vai causar um lagzinho mais ainda sim ta otimo

 

A
pro
va
do
ico_aprovado.png
&
M
ovi
do
icon_movido.giffechado22xnux7.gif

bearpaw.png

Mock aproves.

Compartilhar este post


Link para o post
Ramza    11
Ramza

Valeu mockzito <3

Que bom que vocês gostaram, e eu gostaria de agradecer a cada um de vocês, grandes scripters, que me ensinam cada dia mais com as aulas, tutoriais e sistemas. E não, isso não é puxar saco. hauauuahaa

Obrigado mesmo.

Compartilhar este post


Link para o post
Conde2    0
Conde2

Olha ta muito bom mesmo cara mais como o mock disse isso vai causar um lag.

Recomendo você usar essa função:

getSpectators(centerPos, rangex, rangey[, multifloor = false])

 

Não tenho certeza absoluta mais com ela você vai capturar todas as criaturas.

Com isso vai te retornar uma tabela ai você checa quem que player na tabela e executa a ação para esse player.

 

Assim você pode tirar toda a checagem inúteis e optimizar seu sistema em pelo menos 10x acredito eu.

Compartilhar este post


Link para o post
Ramza    11
Ramza
Olha ta muito bom mesmo cara mais como o mock disse isso vai causar um lag.

Recomendo você usar essa função:

getSpectators(centerPos, rangex, rangey[, multifloor = false])

 

Não tenho certeza absoluta mais com ela você vai capturar todas as criaturas.

Com isso vai te retornar uma tabela ai você checa quem que player na tabela e executa a ação para esse player.

 

Assim você pode tirar toda a checagem inúteis e optimizar seu sistema em pelo menos 10x acredito eu.

Hmm.. muito obrigado Conde!

Vou testar aqui ^^

Compartilhar este post


Link para o post
Dokmos    1
Dokmos
Olha ta muito bom mesmo cara mais como o mock disse isso vai causar um lag.

Recomendo você usar essa função:

getSpectators(centerPos, rangex, rangey[, multifloor = false])

 

Não tenho certeza absoluta mais com ela você vai capturar todas as criaturas.

Com isso vai te retornar uma tabela ai você checa quem que player na tabela e executa a ação para esse player.

 

Assim você pode tirar toda a checagem inúteis e optimizar seu sistema em pelo menos 10x acredito eu.

 

 

Seria a mesma coisa, pois essa função foi estruturada com o mesmo principío, isto é, chegagem de todas posições através de uma repetição.

Compartilhar este post


Link para o post
Lyon    3
Lyon

Olha o Ramza postando mais um script de qualidade e utilidade,mais uma vez parabéns você esta apetitoso ultimamente! :)

 

Obs: Se conseguir arrumar inserir a função indicada pelo Conde para aliviar o o script edita pra gente.

 

Vlw.

Compartilhar este post


Link para o post
Ramza    11
Ramza
Olha o Ramza postando mais um script de qualidade e utilidade,mais uma vez parabéns você esta apetitoso ultimamente! :)

 

Obs: Se conseguir arrumar inserir a função indicada pelo Conde para aliviar o o script edita pra gente.

 

Vlw.

Conseguí!

Editei já o tópico :D

Abração, e obrigado galera!

Compartilhar este post


Link para o post
Tyladron    1
Tyladron

nossa, perfeito...

sinceramente, acho que depois de teleports falantes, entre outros ai, esse está em um dos tops de criatividade! D:

Compartilhar este post


Link para o post
Conde2    0
Conde2
Seria a mesma coisa, pois essa função foi estruturada com o mesmo principío, isto é, chegagem de todas posições através de uma repetição.

 

 

Desculpa Dokmos mais se você não sabe lua é 1.1x mais lerdo que C

Sendo assim a função fica optimizada e o code tambem...

Alem disso ele tinha quer fazer outras checagens totalmente inúteis.

 

 

@Ramaz

Fico feliz por você ter conseguido xD

Bem melhor agora em, está de parabens.

Compartilhar este post


Link para o post
Ramza    11
Ramza

Obrigado Conde! Próximo sistema que vou fazer vai ser um sistema de batalha diferente pro tibia :D

Compartilhar este post


Link para o post
joao1000    0
joao1000

cara esse script so tem um problema no caso uma quest qualquer um jogador usa este comando e passa por todos os monstros livremente? ou tem um certo tempo pro monstro acordar ?

Compartilhar este post


Link para o post
Ramza    11
Ramza
cara esse script so tem um problema no caso uma quest qualquer um jogador usa este comando e passa por todos os monstros livremente? ou tem um certo tempo pro monstro acordar ?

Passa livremente, mas vai ser raro um monstro durmir assim...

Então é de boa :P

Compartilhar este post


Link para o post
Ramza    11
Ramza

Obrigado, espero postar mais scripts interessantes pra galera :)

Compartilhar este post


Link para o post
batatinha.avatar    0
batatinha.avatar

Esse é meu Ramza :P

Compartilhar este post


Link para o post
Jack Frost    0
Jack Frost

O monstro só dorme quando tem algum player na tela?

ou tem como ele dormir mesmo se ninguém ver, ai chega andando no !walk e passa por ele despercebido, sem nem ter precisado encontrar ele antes ?

Compartilhar este post


Link para o post
Ramza    11
Ramza
O monstro só dorme quando tem algum player na tela?

ou tem como ele dormir mesmo se ninguém ver, ai chega andando no !walk e passa por ele despercebido, sem nem ter precisado encontrar ele antes ?

Quando você chega perto dele ele já tem uma chance de dormir, mas isso antes de você conseguir vê-lo na tela. Daí dá a impressão de que ele já estava dormindo xD

Se fosse fazer pra ele dormir sozinho, a qualquer hora ter uma chance, mesmo sem ngm perto, iria dar um lag infernal no servidor :S

Compartilhar este post


Link para o post
Dargosh    0
Dargosh

Serio mt legal essa ideia!!

Só que deixa o server um poco mais pesado mais mesmo assim otimo!

Compartilhar este post


Link para o post
ahbom    0
ahbom

hum...?

Compartilhar este post


Link para o post
BLACKKKK    0
BLACKKKK

Pow cara, muito manero esse teu sisteminha. Deve ter dado um trabalho e tanto veio!

Apesar que deve dar um lag e tanto tbm né =D

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×