PA

Tibia Real Temperature

Por patrickjean, 12 de jul. de 2011 em Mods, funções e outros

otserv
tibia
script
5.0 (1)
20
6.1k
patrickjeanP
12 de julho de 2011 às 21:48

Falaé Galera do XTibia, venho hoje postar um script muito legal que um amigo meu fez!

Então, vamos a ele!!

 

#Informações:

Nome: Tibia Real Temperature 1.0

Autor: Pc98 ( I )

Versão Testada: Tibia 8.42~8.7 ( distro tfs, mas deve funcionar em outras, com pequenas alterações, ou nenhuma)

 

@Comentarios:

Um sistema de temperatura para o Tibia ( em graus Celsios ). Resumindo, cada area tem sua temperatura, e piora ou melhor , se a cave for muito profunda, ou a outfit for muito quente, ou mesmo se subir muito uma montanha.

 

Ex: a beggar; se andar com ela no deserto, começa a perder vida, ate morrer, ou tirar ela.

 

 

#Instalação:

 

@CreatureScripts:

 

Vá em Creaturescripts/Scripts e crie um arquivo chamado temp.lua e adicione:

function onThink(cid, interval)
if isPlayer(cid) and getPlayerAccess(cid) == 0 then


------------------------- CONFIG ----------------------

-- Como configurar: Modifique os numeros abaixo da direita para
-- determinar a temperatura da outfit...
outfit_temp = {
              -- Female Outfits
              [136] = 6,        
              [137] = 5,        
              [138] = 5,        
              [139] = 6,        
              [140] = 7,        
              [141] = 6,        
              [142] = 8,        
              [147] = 11,       
              [148] = 6,        
              [149] = 6,        
              [150] = 8,        
              [155] = 7,        
              [156] = 2,   
              [157] = 20,  
              [158] = 11,   
              [152] = 9,
              [259] = 8,
              [270] = 14,
              [279] = 15,
              [288] = 4,
              [324] = 5,
              [336] = 6,
              [329] = 6,
              [366] = 8,
              -- Male Outfits
              [128] = 6, 
              [129] = 5, 
              [130] = 5,
              [131] = 6,
              [132] = 7,
              [133] = 6,
              [134] = 8,
              [143] = 11,
              [144] = 6,
              [145] = 6,
              [151] = 8,
              [152] = 7,
              [153] = 20,   
              [154] = 14,  
              [251] = 11,   
              [268] = 9,
              [273] = 8,
              [278] = 14,
              [279] = 15,
              [289] = 4,
              [325] = 5,
              [335] = 6,
              [328] = 6,
              [367] = 8,
              }     


temp_base = 20

min_dano = 15          -- Dano por temperatura um pouco alta/baixa
max_dano = 100         -- Dano por temperatura muito alta/baixa
delay = 2000         -- tempo em milissigundos dos danos

sub_config = 1                   -- Ativar temperatura subterranea? ( 0 - Nao ) ( 1 - SIM )


-----------------------------FIM DAS CONFIG ------------------------

temp_local = getPlayerStorageValue(cid, 121314)
pos = getCreaturePosition(cid)


  if temp_local == -1 then temp_local = 0 end

  temp_user = (temp_base + temp_local + outfit_temp[getCreatureOutfit(cid).lookType])

  if sub_config == 1 then 

  ----------------------- Subterraneo -------------------------------

  sub = { -11, -10, -8,-5 ,-3 ,-55 , [7] = 0, 55, 5, 7, 10, 12, 15}  

  if pos.z ~= 7 then                                             
     temp_user = temp_user + sub[pos.z]                                  
  end                                                              
  end                                                                 
  -------------------------------------------------------------------

  setPlayerStorageValue(cid, 12345, temp_user)  


  if temp_user >= 40 and temp_user < 50 then
     addEvent(Quente, delay, cid,min_dano)

  elseif temp_user >=50 then
     addEvent(Quente, delay, cid,max_dano)

  elseif temp_user <= 10  and temp_user > 0 then
         addEvent(Frio, delay, cid,min_dano)
  elseif temp_user < 0 then
         addEvent(Frio, delay, cid,max_dano)
  end
end   


end

function Quente(cid,dano,r)
doPlayerSendTextMessage(cid, 22, "Voce esta sentindo muito calor...")
doCreatureAddHealth(cid, -dano)
r = math.random(1,100)
if r <= 30 then
doCreateItem(2018, getCreaturePosition(cid))
end
end

function Frio(cid,dano)
doPlayerSendTextMessage(cid, 22, "Voce esta sentindo muito frio...")
doCreatureAddHealth(cid, -dano)
end  

 

Agora vá em Creaturescript/Scripts/login.lua e adicione a seguinte linha:

registerCreatureEvent(cid, "temp")

 

Agora, vá em Creaturescripts.xml e adicione a seguinte linha:

<creaturescripts>
<event type="think" name="temp" event="script" value="temp.lua"/>
</creaturescripts>

 

 

@Movements:

 

Vá em Movements/scripts e crie dois arquivos, um com o nome de temp_tiles_areia.lua e o outro com o nome de temp_tiles_gelo.lua

Em temp_tiles_areia.lua adicione isso:

function onStepIn(cid, item, position, fromPosition)

if isPlayer(cid) then
setPlayerStorageValue(cid, 121314, 20)
end

return true
end

function onStepOut(cid, item, position, fromPosition)

pos = {x=position.x,y=position.y,z=position.z,stackpos=0}
ground = getThingFromPos(pos)


--------- Deserto Tiles -------------

deserto_tile = {231}          --  Primeira ID "diferente do padrao de "ID=ID + 1 " ^^

deserto_tileid_min = 8315     -- Minimo ID do deserto
deserto_tileid_max = 8322     -- Maximo ID do deserto

for i=deserto_tileid_min, deserto_tileid_max, 1 do

 table.insert(deserto_tile,i)

end
-------------------------------------

if not isInArray(deserto_tile,ground.id) then
setPlayerStorageValue(cid, 121314, 0)
end

return true
end 

 

Em temp_tiles_gelo.lua adicione isso:

 function onStepIn(cid, item, position, fromPosition)

if isPlayer(cid) then
setPlayerStorageValue(cid, 121314, -20)
end

return true
end

function onStepOut(cid, item, position, fromPosition)

pos = {x=position.x,y=position.y,z=position.z,stackpos=0}
ground = getThingFromPos(pos)


--- GELO tiles----

gelo_tile = {}

gelo_tileid_min = 6580
gelo_tileid_max = 6608

for i=gelo_tileid_min, gelo_tileid_max, 1 do  
   table.insert(gelo_tile,i)
end             
---------------

if not isInArray(gelo_tile,ground.id) then
setPlayerStorageValue(cid, 121314, 0)
end

return true
end 

 

Agora, adicione as seguintes linhas em Movements.xml:

<!-- Areia tiles -->

   <movevent type="StepIn" itemid="231" event="script" value="temp_tiles_areia.lua"/>
   <movevent type="StepOut" itemid="231" event="script" value="temp_tiles_areia.lua"/>
   <movevent type="StepIn" fromid="8315" toid="8322" event="script" value="temp_tiles_areia.lua"/>
   <movevent type="StepOut" fromid="8315" toid="8322" event="script" value="temp_tiles_areia.lua"/>

   <!-- Gelo Tiles -->

      <movevent type="StepIn" fromid="6580" toid="6608" event="script" value="temp_tiles_gelo.lua"/>
   <movevent type="StepOut" fromid="6580" toid="6608" event="script" value="temp_tiles_gelo.lua"/>  

#TalkActions:

 

Vá em Talkactions/Scripts e crie um arquivo com o nome temp.lua e adicione:

function onSay(cid, words, param)

doPlayerSendCancel(cid,"Voce esta sentindo "..getPlayerStorageValue(cid, 12345).." Graus")
end

 

Adicione esta linha em Talkactions.xml:

<talkaction words="/temp" event="script" value="temp.lua"/>  

 

 

Isso ai, se vocês tiverem alguma duvida, postem aqui!!

 

Gostou?? Te Ajudei?? REP++ =D

13 de julho de 2011 às 00:32

Tópico movido para sistemas e mods.

 

Interessante script, abraços.

bregolaB
13 de julho de 2011 às 17:36

Amigo, gostei MUITO da ideia, porém estou testando aqui, ele está funcionando, mas está dando um erro sem parar, e causando lag no servidor.

 

 

[14/07/2011 02:20:10] [Error - CreatureScript Interface] 
[14/07/2011 02:20:10] data/creaturescripts/scripts/temp.lua:onThink
[14/07/2011 02:20:10] Description: 
[14/07/2011 02:20:10] data/creaturescripts/scripts/temp.lua:80: attempt to perform arithmetic on field '?' (a nil value)
[14/07/2011 02:20:10] stack traceback:
[14/07/2011 02:20:10] 	data/creaturescripts/scripts/temp.lua:80: in function <data/creaturescripts/scripts/temp.lua:1>

 

E este erro fica se repetindo a cada segundo, se tiver algum player conectado

Editado Julho 14 por bregola

patrickjeanP
15 de julho de 2011 às 17:53

isso n sei resolver n mano!! sorry, quando meu amigo entrar no MSN vo falar cm ele pra arrumar!!

Vlw!

15 de julho de 2011 às 18:10

Tá com cara de que copiou o script. Como você faz um script e não sabe resolver?

IgorzeraBRI
16 de julho de 2011 às 02:57

Tá com cara de que copiou o script. Como você faz um script e não sabe resolver?

 

Cara preste mais atenção antes de julgar as pessoas, observe que no inicio do topico ele diz ' venho aqui trazer o script que meu amigo fez'. Então hora nenhuma ele falou que o script era dele.

patrickjeanP
16 de julho de 2011 às 20:44

OMG!! Obrigado por me ajudar IgorZeraBR!! =D

PsyMcKenzieP
16 de julho de 2011 às 22:02

Muito Interessante o Script Cara,

Depois Vou Testar.

Abraço!

ultimate1996U
17 de julho de 2011 às 11:11

Meu deus, o cara ganhou +4 REP por 1 resposta idiota. Aonde nós vamos parar assim?

 

@topic

Está muito bom o script e aqui funcionou sem erro algum.. testei em TFS 0.3.6

patrickjeanP
17 de julho de 2011 às 13:24

da REP++ ae galera!!! Naum vai cair o dedo!! =D

FernandinandF
19 de julho de 2011 às 17:07

Igor, se continuar do jeito que está, criando contas para se auto-reputar, vamos ter que tomar providências drásticas, então, pare.

Editado Julho 19 por iToouch

eduardo190696E
21 de julho de 2011 às 17:45

KKKKKKKKKKKKKKKK Fake acc pra +Rep nossa mano qui feio

IlusionStarI
21 de julho de 2011 às 19:31

Gostaria de saber se esse script funciona na versão 8.60, testei ele em um baiak, não deu erro no log, parece ter funcionado, mais eu não sei ao certo, em quais "PISOS" que ele funciona... aguardo resposta, VLW.

patrickjeanP
21 de julho de 2011 às 19:54

Funciona nos pisos de Ice e de Sand!!

Ajudei?? Gostou?? REP ++ =D

IlusionStarI
22 de julho de 2011 às 13:42

Sei que estou pertubando com isso... mais teria como me mandar os IDS de tais pisos?

e no subteraneo, qual piso seria? o script vem programado, ou tem que arrumar ele, ei que são perguntas idiotas, mais sou novo na parte de script, Agradeço desde já, aguardo resposta...