DO

Dinastias - Sensor System By Dokmos

Por Dokmos, 15 de dez. de 2008 em Actions e Talkactions

otserv
tibia
script
21
3.4k
DokmosD
15 de dezembro de 2008 às 13:41

logo-d10.jpg

 

 

 

Action Sensor System

by Dokmos



 

 

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

 

Aqui está o script que desenvolvi liberado do Dinastias, espero que gostem e divirtam-se! :party:

 





 



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



 

Características

 

 

A action é simples, o jogador instala o sensor no solo e este tem um certo tempo de duração, qualquer criatura que passar no local que o sensor está instalado enviará automaticamente uma menssagem de alerta para o jogador que instalou o sensor e se essa criatura for um jogador, após alguns segundos ele recebe um alerta que sua posição foi localizada por um sensor instalado.

 

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



 

Instalação

 

 

Salve essa função como data\actions\scripts\sensor.lua

 

------------------ Sensor System by Dokmos ------------------
local ACTIONID_EMPTY = 5000 -- Actionid livre para utilização.
local STORAGE_EMPTY = 5000 -- Storage para o jogador livre para utilização.
local PLANTING_DELAY = 5 -- Tempo de duração para instalar o sensor no solo em segundos.
local SENSOR_DELAY_MINUTES = 5 -- Minutos de duração do sensor.
local SENSOR_DELAY_SECONDS = 0 -- Segundos de duração do sensor (Lembre-se Minutos:Segundos).

local function doSendAlert(cid,creature)
  if isCreature(creature) == TRUE then
  if isPlayer(creature) == TRUE then
  doPlayerSendTextMessage(creature,20,"You was localized by "..getPlayerName(cid)..".")
  end   
  doSendMagicEffect(getThingPos(creature),13)	  
  if getPlayerStorageValue(cid,STORAGE_EMPTY) == 2 then
  setPlayerStorageValue(cid,STORAGE_EMPTY,1)
  end
  end
end   

local function doVerifySensor(cid,pos)
  if isPlayer(cid) == TRUE then
  creature = getThingfromPos(pos)
  if isPlayer(creature.uid) == TRUE and getPlayerStorageValue(cid,STORAGE_EMPTY) == 1 then
  setPlayerStorageValue(cid,STORAGE_EMPTY,2)
  doPlayerSendTextMessage(cid,20,"Sensor has localized "..getPlayerName(creature.uid).." a "..getPlayerVocationName(creature.uid).." Level "..getPlayerLevel(creature.uid)..".")
  addEvent(doSendAlert,2000,cid,creature.uid)
  elseif isCreature(creature.uid) == TRUE and getPlayerStorageValue(cid,STORAGE_EMPTY) == 1 then
  setPlayerStorageValue(cid,STORAGE_EMPTY,2)
  doPlayerSendTextMessage(cid,20,"Sensor has localized a "..getCreatureName(creature.uid)..".")
  addEvent(doSendAlert,2000,cid,creature.uid)
  end
  if getTileThingByPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).actionid == ACTIONID_EMPTY then
  addEvent(doVerifySensor,100,cid,pos)	  
  end
  end
end

local function doSendDuration(cid,pos,minutes,seconds)
  if isPlayer(cid) == TRUE then
  if seconds > 0 then
	 if minutes < 10 and seconds < 10 then
	 doPlayerSendTextMessage(cid,25,"Duration of Sensor: 0"..minutes..":0"..seconds.." minutes.")
	 elseif minutes < 10 then
	 doPlayerSendTextMessage(cid,25,"Duration of Sensor: 0"..minutes..":"..seconds.." minutes.")
	 else
	 doPlayerSendTextMessage(cid,25,"Duration of Sensor: "..minutes..":"..seconds.." minutes.")
	 end
  seconds = (seconds-1)
  addEvent(doSendDuration,1000,cid,pos,minutes,seconds)
  else
	 if minutes > 0 then
	 doPlayerSendTextMessage(cid,25,"Duration of Sensor: "..minutes..":0"..seconds.." minutes.")
	 minutes = (minutes-1)
	 seconds = 59
	 addEvent(doSendDuration,1000,cid,pos,minutes,seconds)
	 else
	 doPlayerSendTextMessage(cid,25,"Duration of sensor has finished.")
	 doSendMagicEffect(pos,4)
	 doSetItemActionId(getThingfromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).uid,100)
	 setPlayerStorageValue(cid,STORAGE_EMPTY,0)
	 end
  end
  else
  doSetItemActionId(getThingfromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).uid,100)
  end
end

local function doAddSensor(cid,time,tilepos)
  if time > 0 then
  doPlayerSendTextMessage(cid,24,"Planting sensor in "..time.." seconds.")
  time = (time-1)
  addEvent(doAddSensor,1000,cid,time)
  else
  pos = getThingPos(cid)
  doPlayerSendTextMessage(cid,24,"Sensor was successful planted.")
  doSendMagicEffect(pos,3)
  doPlayerSetNoMove(cid,0)
  doSendDuration(cid,pos,SENSOR_DELAY_MINUTES,SENSOR_DELAY_SECONDS)
  addEvent(doVerifySensor,3000,cid,pos)
  end
end

function onUse(cid, item, fromPosition, itemEx, toPosition)
local pos = getThingPos(cid)
  if getTileThingByPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).actionid <= 100 and getPlayerStorageValue(cid,STORAGE_EMPTY) < 1 then
  doSetItemActionId(getThingfromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=0}).uid,ACTIONID_EMPTY)
  setPlayerStorageValue(cid,STORAGE_EMPTY,1)
  addEvent(doAddSensor,0,cid,PLANTING_DELAY,tilepos)   
  doPlayerRemoveItem(cid,5809,1)
  doPlayerSetNoMove(cid,1)
  return TRUE
  else
  return FALSE
  end	  
end

 

Agora, adicione este código em data\actions\actions.xml

 

<action itemid="5809" script="other/sensor.lua"/>

 

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



 

Funcionamento

 

 

Você pode editar o script com as configurações que você desejar, eu coloquei as principais no começo do script, caso você não tenha certeza deixe o padrão como está. Qualquer erro ou bug no script poste aqui para eu dar uma verificada, lembrando que a configuração em seu OT fica nas mãos de vocês.

 

Para utilizar o sensor basta você dar um use no item 5809 (soul orb) e aproveitar!!!

 

:positive:

 

Atenciosamente,

Dokmos

Editado Dezembro 15 por Dokmos

h3onlineH
15 de dezembro de 2008 às 14:14

CARA FANTASTICOOOOOOOOOOOOOOOOOOOOOOOO!!! FUNFO BLZ AKI TU E DO NIVEL DE COLEX NOS SCRIPTS PARABENS MESMO N ESKECENDO CONDE SAPO E NEM do tibi4ee

Editado Dezembro 15 por h3online

DokmosD
15 de dezembro de 2008 às 14:20

Obrigado h3online,

Espero estar sempre contribuindo com o que tenho aprendido para aqueles que estão inciando nos scripts, pois sei como é difícil no começo e que acima de tudo é preciso ter vontade de crescer e superar-se! :smile_positivo:

EventideE
15 de dezembro de 2008 às 14:33

é, mereceu o 2° lugar naquele torneio... :-D

só achei que deveria ter encurtado mais U.u

tá muito grande e sem necessidade..

em breve eu posto o meu script. :-P

Editado Dezembro 15 por Eventide

DokmosD
15 de dezembro de 2008 às 14:43

Obrigado Eventide,

Gostaria de ver seu script ;) e sobre o tamanho do meu script, eu o fiz antes de ler aqueles tutoriais de tabelas e vetores, aliás seu tutorial de maths ficou muito bom! :positive:

MarcolinoGODM
16 de dezembro de 2008 às 13:40

Muito bom este script! Só por na entrada

da hunt e ver se alguem esta invadindo a cave...

 

Parabéns e obrigado por compartilhar!!! :smile_positivo:

NostradamusN
16 de dezembro de 2008 às 14:51

Gostei da idéia, bastante criativo e nada complexo de se fazer.

 

Nesse caso aí nem precisava declarar as funções como local já que o sistema de scripting dos servidores atual itera cada código individualmente. Claro, se você for criar funções de mesmo nome que essas, aí sim vale a pena usar as funções locais. O strackback não é muito preciso em qualquer tipo de declarações do tipo local, até mesmo para localização via _G.

DokmosD
17 de dezembro de 2008 às 09:22

Obrigado Nostradamus

 

Na verdade sempre tive esta dúvida de colocar ou não o local, valeu! :great:

Vi VanderlayskV
19 de dezembro de 2008 às 21:17

Aee \o/

Mto roxx ;}

Mas funfa em TFS ?

testei aki no meo ot e ele equipo e talz

mas num detecto nada .. passei por um monte de bixos no mesmo lugar várias vezes e ele num fez nada ...

 

Tem como fazer ele funfar equipando tipo como um amulet .. igual as Soft Boots?

[onEquip] ? tentei colocar isso em vez de [onUse]

 

Abraço !

e Obrigado pelo script :D

DokmosD
20 de dezembro de 2008 às 11:09

Vi Vanderlaysk,

Ele funciona sim em TFS, você tem que ver se a versão do seu TFS aceita a função doPlayerSetNoMove ou mayNotMove, aí é só trocar no script.

 

É possível utilizá-lo onEquipe, você precisaria adaptar alguns detalhes.

Vi VanderlayskV
22 de dezembro de 2008 às 09:52

Huumm .. interessante ... mas entao ..

 

Pode me dizer como faço isso ? :D Eh que nao sou scripter... tenho alguma dificuldades ainda de saber o que fazer em relaçao a scripst lua ;P

 

e tipo ... quando a gente coloca alguma coisa no OT e quer colocar créditos de alguma coisa

que é criada por outra pessoa ... qual a melhor forma de fazer isso ?

Por exemplo ... meu OT vai ser sério ... entao eu queria clocar créditos desse sistema pra vc, Dokmos...

Eu colocaria alguma coisa no proprio item ou na MOTD (Message of the Day) ?

Da um help ae xDD

 

Abraço!

ZaforZ
22 de dezembro de 2008 às 16:10

Rox...

Tem também como você posta o sistema de Magias =D

DokmosD
22 de dezembro de 2008 às 18:01
Huumm .. interessante ... mas entao ..

 

Pode me dizer como faço isso ? :D Eh que nao sou scripter... tenho alguma dificuldades ainda de saber o que fazer em relaçao a scripst lua ;P

 

e tipo ... quando a gente coloca alguma coisa no OT e quer colocar créditos de alguma coisa

que é criada por outra pessoa ... qual a melhor forma de fazer isso ?

Por exemplo ... meu OT vai ser sério ... entao eu queria clocar créditos desse sistema pra vc, Dokmos...

Eu colocaria alguma coisa no proprio item ou na MOTD (Message of the Day) ?

Da um help ae xDD

 

Abraço!

 

Obrigado pelo reconhecimento, melhor que ver o trabalho elogiado é vê-lo reconhecido! Isso até motiva scripters a compartilhar suas funções, actions e seus melhores trabalhos, pois além dos jogadores terem seus OT's com ótimas actions os progamadores têm seu trabalho reconhecido! :party:

 

Você pode colocar no MOTD Sensor System by Dokmos, é só você adicionar esta linha na linha 70 do script:

doPlayerSendCancel(cid,"Sensor System by Dokmos.")

 

Então o script ficará assim:

.

.

.

local function doAddSensor(cid,time,tilepos)

if time > 0 then

doPlayerSendTextMessage(cid,24,"Planting sensor in "..time.." seconds.")

doPlayerSendCancel(cid,"Sensor System by Dokmos.")

time = (time-1)

addEvent(doAddSensor,1000,cid,time)

else

pos = getThingPos(cid)

doPlayerSendTextMessage(cid,24,"Sensor was successful planted.")

doSendMagicEffect(pos,3)

doPlayerSetNoMove(cid,0)

doSendDuration(cid,pos,SENSOR_DELAY_MINUTES,SENSOR_DELAY_SECONDS)

addEvent(doVerifySensor,3000,cid,pos)

end

end

.

.

.

 

E novamente obrigado! Em breve libero outras actions bem legais... :positive:

Editado Dezembro 22 por Dokmos

RockyR
22 de dezembro de 2008 às 18:22

Noosssa muito bom...gostei desse sistema

muito criativo

 

VLW

 

forcedreamwq4.png

PedrinhuHenriqueP
22 de dezembro de 2008 às 18:24

Parabens Dokmos muito bom o script, bem inovador mesmo!