Ir para conteúdo
Entre para seguir isso  
Dokmos

Monster Sleeping

Recommended Posts

Dokmos    1
Dokmos

Monster Sleeping

Desenvolvido por Dokmos

Testado em TFS 8.4+

 

 

 

Funciomaneto

 

O script foi desenvolvido para simular uma espécie de soneca que os monstros podem tirar durante o jogo. Para que isso ocorra, existem zonas específicas configuradas no script e nome dos monstros que poderão tirar soneca. A soneca só ocorrerá se não houverem jogadores por perto dentro de uma distância mínima definida em SLEEP_RANGE.

 

Caso um monstro esteja dormindo e um jogador se aproximar, ele irá imediatamente acordar e, dependendo do monstro, atacar o jogador.

 

Portanto, esse script proporciona um mundo mais dinâmico e real ao mundo Open-Tibia Servers. Divirtam-se!

 

 

Configuração

 

A explicação detalhada do funcionamento e configuração do script estão dentro dele! Qualquer dúvida ou problema postem aqui.

 

 

Script

--[[-----------------Créditos---------------------

   Idealizado por Ramza (Rick / Ricardo Ianelli).
   Desenvolvido por Dokmos (Bruno Braz).
   Data: 19 de Março de 2010.    

-----------------Funcão do Script-----------------

   O script foi desenvolvido para simular uma espécie de soneca que os monstros podem tirar durante o jogo.
   Para que isso ocorra, existem zonas específicas configuradas no script e nome dos monstros que poderão tirar soneca.
   A soneca só ocorrerá se não houverem jogadores por perto dentro de uma distância mínima definida em SLEEP_RANGE.
   Caso um monstro esteja dormindo e um jogador se aproximar, ele irá imediatamente acordar e, dependendo do monstro, atacar o jogador.

   Portanto, esse script proporciona um mundo mais dinâmico e real ao mundo Open-Tibia Servers. Divirtam-se!

--------------Configuração do Script--------------

  SLEEP_RANGE: (Recomendável - 5)
  Declaração da expansão de área que irá verificar se há jogador perto de um monstro dormindo para acordá-lo. Ou seja, quanto maior ele for,
  as criaturas acordarão com a presença de outros jogadores mais distantes.

  SLEEP_PERCENT: (Recomendável - 0.3)
  Porcentagem de monstros dentro da zona que irão tirar soneca.
      Ex.: 0.4 Corresponde a 40%.
      Condição.: 0 < SLEEP_PERCENT <= 1.

  MONSTERS_NAME: (Facultativo a Alteração)
  Tabela com o nome dos monstros que podem tirar soneca.
      ATENÇÃO!
      Os nomes dos monstros deverão obrigatoriamente estar com letras minúsculas.

  MONSTERS_CORPSE: (Facultativo a Alteração)
  Tabela com o id dos corpos dos monstros que serão apresentados como se estivessem "dormindo".
      Obs.: A posição do id deve ser correspondente à posição do nome do monstro em MONSTERS_NAME.
      Para verificar qual é o id, basta ir no diretório de monstros e abrir o arquivo .xml do monstro desejado e pegar o valor de "corpse".       

  ZONE_MONTERS: (Obrigatório a Alteração)
  Armazenará tabelas para criação de zonas, onde as criaturas dentro da zona poderão tirar uma soneca aleatoriamente.
  A lógica dessa variável é armazenar posições centrais de zonas e a extensão das mesmas. Seguindo o padrão apresentado a seguir:
  {Posição X do Centro da Zona (CZ), Posição Y do CZ, Posição Z do CZ, Expansão (em sqm) da Zona}   
      Ex.:
      {x = 100, y = 200, z = 7, range = 5}
      Neste caso, irá criar uma zona ao redor da posição x = 100, y = 200, z = 7, de expansão 5 para todas direção (norte, leste, sul e oeste).  

  SIGNAL: (Não Alterar)
  É uma tabela que contém valores que serão utilizados para alterar o sinal das variáveis, a fim de checar todas posições possíveis.  

---------------------------------------------------]]     


--------------------Configuração--------------------
SLEEP_RANGE = 5

SLEEP_PERCENT = 0.3

MONSTERS_NAME = {"bat", "globin"}
MONSTERS_CORPSE = {6053, 6002}

ZONE_MONSTERS = {
{x = 94, y = 126, z = 7, range = 20},
{x = 92, y = 129, z = 8, range = 8},
}
----------------------------------------------------
SIGNAL = {{1, 1}, {1, -1}, {-1, 1}, {-1, -1}}
----------------------------------------------------


-- Função checkPlayers(pos)
-- Verifica se existem jogadores próximos as criaturas.
local function checkPlayers(pos)
   for i = 0, SLEEP_RANGE do
       for j = 0, SLEEP_RANGE do
           for k = 1, 4 do
           local PPos = {x = pos.x + (i*SIGNAL[k][1]), y = pos.y + (j*SIGNAL[k][2]), z = pos.z}
           local Player = getTopCreature(PPos).uid

               if isPlayer(Player) then
               return TRUE
               end
           end
       end
   end

return FALSE
end  


-- Função getMonsterByZone()
-- Checagem de monstros da zona pré-definida no começo do script.
local function getMonsterByZone()
local Zone = ZONE_MONSTERS
local Monsters = {}

   for i = 1, #Zone do   
       for j = 0, Zone[i].range do       
           for k = 0, Zone[i].range do                       
               for l = 1, 4 do
               local MPos = {x = Zone[i].x + (j*SIGNAL[l][1]), y = Zone[i].y + (k*SIGNAL[l][2]), z = Zone[i].z}
               local Monster = getTopCreature(MPos).uid   

                   if isMonster(Monster) then
                   local Name = string.lower(getCreatureName(Monster))                           
                   local NPos = table.find(MONSTERS_NAME, Name)
                   local Check = checkPlayers(MPos)

                       if not Check and NPos ~= nil then
                       table.insert(Monsters, {Monster, MONSTERS_CORPSE[NPos]})
                       end
                   end                                  
               end            
           end            
       end    
   end

return Monsters    
end


-- Função onSleep(monster, pos, corpse, speed, time)
-- Regula o estado do monstro, quer seja dormindo, quer seja para acordar.
local function onSleep(monster, pos, corpse, speed, time)    
   if isMonster(monster) then
   local Check = checkPlayers(pos)

       if not Check and (time > 0) then
       doSendMagicEffect(pos, 32)
       doSetItemOutfit(monster, corpse, 2000)
       addEvent(onSleep, 2000, monster, pos, corpse, speed, (time - 2))
       else
       doSendMagicEffect(pos, 13)
       doChangeSpeed(monster, speed)  
       end                                          
   end 
end       




-- Função onThink(interval, lastExecution)
-- Função principal que executa as demais funções e ações do script.
function onThink(interval, lastExecution)
local Monsters = getMonsterByZone()

   if #Monsters ~= 0 then

       for i = 1, math.floor(#Monsters*SLEEP_PERCENT) do
       local r = math.random(#Monsters)

           if isMonster(Monsters[r][1]) then
           local MPos = getCreaturePosition(Monsters[r][1])
           local Speed = getCreatureSpeed(Monsters[r][1])

           doChangeSpeed(Monsters[r][1], -Speed)
           onSleep(Monsters[r][1], MPos, Monsters[r][2], Speed, interval-10)
           table.remove(Monsters, r)
           end        
       end    
   end

return TRUE
end

 

Em data/glovalevents/globalevents.xml

<globalevent name="sleep" interval="300" event="script" value="sleeping.lua"/>

 

 

Imagem

 

imgzc.jpg

 

 

 

Bom isso é tudo, qualquer dúvida postem aqui. Divirtam-se! OiaeuMae

 

Obs.: Vocês vão perceber que configurei apenas dois monstros para dormirem, gostaria que alguém pudesse disponibilizar uma lista mais completa para eu atualizar o tópico!

 

 

 

Atenciosamente,

Dokmos

Editado por Dokmos

Compartilhar este post


Link para o post
Mock    32
Mock

C
omen
tario
:
Caramba que pog, 1 execução p cada monstro do server, até que é legal mais em servers grandes n da mto certo n. mais a ideia é boa e a criatividade tb ajudou. vlw ^^

 

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
dragonlorde    0
dragonlorde

Que legal cara... Tem umas coisas que não entendi como isso Monsters[r][1] mas a ideia ta muito boa.. Voce fez pro concurso?

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

C
omen
tario
:
Caramba que pog, 1 execução p cada monstro do server, até que é legal mais em servers grandes n da mto certo n. mais a ideia é boa e a criatividade tb ajudou. vlw ^^

 

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

bearpaw.png

Mock aproves.

 

Mock, creio que você não tenha entendido o funcionamento do script. :slap:

 

 

Primeiramente não serão todos os monstros que dormirão, por isso esse sistema funciona através de zonas e nomes de monstros, ou seja, quando configurado corretamente não irá apresentar nenhum excesso de informações notáveis ao servidor.

E sobre a questão de servidores grandes, isso é muito relativo, se você se tem um PC Celeron, 256 mb de RAM e 80 de HD, infelizmente não rodará muito bem nem com 5 jogadores, sinto muito. OiaeuMae

 

 

E sobre o seu dito POG, vejo que também não entende bem tal definição. Sistematicamente o 'POG' é a ausência dos algoritmos estruturados, ou seja, construção de algoritmos com o intuito exclusivamente da ação desejada, ignorando a legibilidade e o entendimento alheio.

Isso não quer dizer que todos algoritmos que você não consegue entender são POG's, há duas explicações:

 

1) Eles realmente são POG's.

2) Você não foi capaz de compreender a lógica do script.

 

O script está muito bem estruturado e comentado, creio que você não consiga estruturá-lo melhor. Portanto, peço que antes de postar um comentário sem fundamentos, justifique-o.

 

 

 

 

 

@Dragonlorde

Sim, foi para o concurso.

 

Sobre o Monsters[r][1] é o seguinte, o script irá executar inicialmente a função getMonsterByZone() a fim de criar uma tabela com os ids das criaturas presentes nas zonas. Como nem todas criaturas vão dormir (caso o SLEEP_PERCENT seja menor que 1), então para ficar mais dinâmico coloquei uma seleção aleatória, neste caso é o 'r'.

Editado por Dokmos

Compartilhar este post


Link para o post
tigerx2    1
tigerx2

Bem criativo e funcional !

 

Creio que vou usar em meu ot..

Valeu por postar aqui

 

-------------------

Dokmos humilhando Mock nos scripts :o

Compartilhar este post


Link para o post
Balder    23
Balder

Dok sempre com suas inovações mirabolantes! Sempre digo, são coisas simples assim que embelezam o servidor e chamam atenção!

 

Meus parabéns, cada vez melhor!

Compartilhar este post


Link para o post
Dokmos    1
Dokmos

Agradeço os comentários,

 

Qualquer dúvida em relação à instalação, postem aqui que, se preciso, explicarei detalhadamente.

Compartilhar este post


Link para o post
antiemoxlrlol    0
antiemoxlrlol

seria bom para uma quest tipo com legena a quest sera encontrada aonde os Monstros dormen O_O

tipo No comeso os playes nao vao entende isso dificuta uma quest Bom eu gostei do script poren nao testei mas obrigado por compartilhar suas atividades com os outros menbros By: antiemoXlr

Compartilhar este post


Link para o post
polus    0
polus

Nossa, eu nunca tinha postado nesse forum, mais esse script ficou realmente muito boom, parabens pela criatividade, coisas assim deixam o tibia muito mais interessante e realista...

não testei ainda, mais com certeza vou utiliza-lo em meu server, e a idéia de usa-lo em quests tbm foi muito inteligente...:yes:

Compartilhar este post


Link para o post
Dokmos    1
Dokmos
Nossa, eu nunca tinha postado nesse forum, mais esse script ficou realmente muito boom, parabens pela criatividade, coisas assim deixam o tibia muito mais interessante e realista...

não testei ainda, mais com certeza vou utiliza-lo em meu server, e a idéia de usa-lo em quests tbm foi muito inteligente...:yes:

 

 

Obrigado, comentários e reconhecimento como esse me anima a divulgar meus trabalhos e continuar contribuindo.

 

:bye:

Compartilhar este post


Link para o post
Mano    1
Mano

Putz, Adorei em lek, fico irado apesar deu não usar pois nem otservers crio, só fico vendo inovações. A sua ao meu ver está 10. /ok

Compartilhar este post


Link para o post
fezao    0
fezao

Cara , como diz o charles henriquepedia

isto esta ostimo

 

tipo , eh muito criativo só axei assim um pouco sem funçao

pois se o jogador se aproximas e acordar , quem vai notar isso alem de gods ??

mais muito interessante

apesar de minha critica gostei muito

Compartilhar este post


Link para o post
Dokmos    1
Dokmos
Cara , como diz o charles henriquepedia

isto esta ostimo

 

tipo , eh muito criativo só axei assim um pouco sem funçao

pois se o jogador se aproximas e acordar , quem vai notar isso alem de gods ??

mais muito interessante

apesar de minha critica gostei muito

 

Ao se aproximar do monstro, existe um tempo mínimo para ele acordar. Ou seja, jogadores quando passam perto vêem o monstro dormindo, após alguns segundos que os monstros "acordam" e perseguem os jogadores.

Compartilhar este post


Link para o post
savioeduardo    0
savioeduardo

Muito criativo e original.

Compartilhar este post


Link para o post
ADM MaX DE    0
ADM MaX DE

Nossa, agora que você falou disso do tempo eu intendi certinho, achei q o monstro só acordava quando você chegasse na área configurada, dependendo da area os players poderiam dar a volta e n acordarem o monstro (pensava eu), mas agora q entendi que tem um tempo pra eles acordarem posso deichar range 7 (maximo da tela na vertical) que vai ficar muito bom ^^'

 

Parabéns pelo trabalho, script bem complexo e fóda. :3

 

 

---------

Só me explica uma coisa, os 'sleep modes' dos monstros TEM que ser os respectivos 'Dead Modes'?

Porque em servidores com sprites editados como o meu, poderiam ser criado sprites de monstros dormindo, ficaria mais real pois o monstro n ficaria com sangue e nem feridas!! :P

 

Cya!

Compartilhar este post


Link para o post
Healfire    0
Healfire

issu da um estilo mais de rpg

bela criatividade e scripting

Compartilhar este post


Link para o post
Torola    0
Torola

Dokmos, você é nota 10 em scripts..

eu tinha visto todos seus trabalhos

ÓTIMO!

bb ..

Compartilhar este post


Link para o post
fezao    0
fezao
Ao se aproximar do monstro, existe um tempo mínimo para ele acordar. Ou seja, jogadores quando passam perto vêem o monstro dormindo, após alguns segundos que os monstros "acordam" e perseguem os jogadores.

 

uhm .. agora eu entendi :)

se for assim entao parabens cara , otimo script

Compartilhar este post


Link para o post
dav9shal    1
dav9shal

Pra que serve isso? Pode ate ser legalzinho, mas sem nenhuma utilidade. ^^

Compartilhar este post


Link para o post
Criticoo    4
Criticoo

Sem nenhuma utilidade?

Se você usar a cabeça poderia pensar que esse sistema serve para dar mais realismo aos servidores...

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.

×