Ir para conteúdo

[npc]sistema De Clima


Shenlong

Posts Recomendados

NPC Sistema de Clima



 

Créditos: Nahruto (OTFans) & Colandus - OpenLua

Se já tiver aqui me descupem eu procurei e não achei!

 

Este é um npc criado pelo Nahruto, pelo o que eu entendi o NPC funciona assim:

É um NPC que durante um certo intervalo de tempo que nós programamos no script e a chance de efeitos ele envia uma tempestade para o server :D

Então agora vamos aos scripts.

 

Versão 1.0

vá em data/npc/scripts e crie um arquivo chamado de stormer.lua e coloque isto dentro:

 

local check_interval = 60*10

local mindamage = 30

local maxdamage = 100

---------------------------------End Configuration----------------------------------

local check_clock = os.clock()

local focus = 0

 

function getplayersfromArea(areapos)

local players = { }

for areax = 990, 1010 do

for areay = 990, 1007 do

areapos = {x=areax, y=areay, z=7, stackpos=253}

creature = getThingfromPos(areapos)

if creature.itemid > 0 then

if isPlayer(creature.uid) == TRUE then

table.insert (players, creature.uid)

end

end

end

end

return players

end

function onThink()

local chance = math.random(1,10)

if (os.clock() - check_clock) > check_interval and chance >=5 then

players_table = getplayersfromArea(areapos)

if #players_table >= 1 then

for i = 1, #players_table do

doNpcSetCreatureFocus(players_table)

formdamage = math.random(mindamage, maxdamage)

doCreatureAddHealth(players_table,-formdamage)

stormefects = math.random(40, 43)

doSendMagicEffect(getThingPos(players_table),stormefects)

doSendAnimatedText(getThingPos(players_table),formdamage,179)

doPlayerSendTextMessage(players_table,22,'You were beaten by a storm.')

check_clock = os.clock()

focus = 0

end

elseif table.getn(players_table) < 1 then

focus = 0

check_clock = os.clock()

end

end

focus = 0

end

Explicando

em vermelho é intervalo entre as tempestades.(60*10 = 10 minutos)

em azul é o menor dano causado pela tempestade

em rosa é o maior dano causado pela tempestade

 

Agóra vá na pasta data/npc e crie um arquivo chamado Stormer.xml e cole isto dentro:

 

<?xml version="1.0"?>

<npc name="Stormer" script="data/npc/scripts/stormer.lua" access="5" lookdir="2" autowalk="25">

<mana now="800" max="800"/>

<health now="200" max="200"/>

<look type="275" />

</npc>

 

Lembrete:

1 - você deve coloca o npc aonde os player não o vejam, afinal onde já se viu tempestade por npc?

2 - Ele está configurado para o templo do mapa Evolutions, para mudar para o seu server mude isto:

 

for areax = 990, 1010 do

for areay = 990, 1007 do

areapos = {x=areax, y=areay, z=7, stackpos=253}

 

Pronto a versão 1.0 está pronta agora vamos a versão 2.0.

 

Versão 2.0

 

* É uma versão avançada da anterior

* Nesta versão o npc tem uma visão de raio* Tem mais configurações* Mais fácil de se configurar

* Adicionado um pouco de brilho para tornar o golpe, de cor configurável.

* Ele acrescentou efeitos, e deixar a possibilidade de que o usuário facilmente adicionar efeitos.

 

Então agora vamos começar.

 

1 - adicione isto no global.lua

 

-- Area iterator by Colandus @ OpenLua.com

function mapArea(fromPos, toPos)

local x, y, z = fromPos.x, fromPos.y, fromPos.z

return function()

if (y < toPos.y) then

y = y+1

elseif (x < toPos.x) then

y = fromPos.y

x = x+1

else

x = fromPos.x

y = fromPos.y

z = z+1

end

if (x < toPos.x and y <= toPos.y or z < toPos.z) then

return x, y, z

end

end

end

 

-- Function by Colandus @ OpenLua.com

function getThingsfromArea(pos, radius, stackpos)

local things, thing = {}

local fromPos = {x=pos.x-radius, y=pos.y-radius, z=pos.z}

local toPos = {x=pos.x+radius, y=pos.y+radius, z=pos.z}

for x, y, z in mapArea(fromPos, toPos) do

if (getThingfromPos({x=x, y=y, z=z, stackpos=0}).itemid > 0) then

thing = getThingfromPos({x=x, y=y, z=z, stackpos=stackpos}).uid

if (isPlayer(thing) == 1) then

table.insert(things, thing)

end

end

end

return things

end

 

2 - Vá em data/npc/scripts e crie um arquivo chamado de climate.lua e cole isto dentro:

 

-- Script by Nahruto and Colandus --

 

-- Config --

local storm = {

interval = 60*10,

radius = 25,

damage = {min=30, max=100, color=179},

light = {color=210, duration=2},

message = "You were beaten by a storm.",

effects = {40, 41, 42, 43, 53}

}

-- Config --

 

local check_clock = os.clock()

function onThink()

local damage = 0

if (os.clock() - check_clock) > storm.interval then

screenPlayers = getThingsfromArea(getCreaturePosition(getNpcCid()), storm.radius, 253)

for _, player in pairs(screenPlayers) do

doNpcSetCreatureFocus(player)

damage = math.random(storm.damage.min, storm.damage.max)

doCreatureAddHealth(player, -damage)

doSetCreatureLight(player, 7, storm.light.color, storm.light.duration*1000)

doSendMagicEffect(getThingPos(player), storm.effects[math.random(1, #storm.effects)])

doSendAnimatedText(getThingPos(player), damage, storm.damage.color)

doPlayerSendTextMessage(player, 22, storm.message)

end

check_clock = os.clock()

end

end

 

Explicando

em vermelho é intervalo entre as tempestades.(60*10 = 10 minutos)

em rosa é os raios que o npc pega ( acho que são os SQM )

em laranja são os danos que a trovoada vai provocar e a cor do efeito do dano

em roxo é a cor e o tamanho do flash

em rosa claro é a mensagem que será enviada quando der o for atingido pela tempestade não intendi direito isso :(

em azul escuro os efeitos usados na tempestade

 

3 - agora vá em data/npc e crie um arquivo com nome de climate.xml e coloque isto dentro:

 

<?xml version="1.0"?>

<npc name="Climate" script="data/npc/scripts/climate.lua" access="5" lookdir="2" autowalk="25">

<mana now="800" max="800"/>

<health now="200" max="200"/>

<look type="275" />

</npc>

 

 

4 - Coloque o npc em seu mapa .

 

 

Lembrete:

-- Se o raio do npc está perto de uma zona sem um mapa, muitos erros no console, certifique-se de colocar o rádio, mesmo que a área tem mapa completo.

 

E aqui acaba meu primeiro tutorial :D

Espero que gostem :p

A versão 1.0 eu testei mais e 2.0 não :(

Tchau e até mais.

Link para o comentário
Compartilhar em outros sites

Nss!!.. mtoo lokooo!!..

Adoreii!.. esse ja ta confirmado

no meu 8.2!!.. :smile_positivo:

 

@Shenlong

Vlw por trazer para o XTibia!!.. ;D

Otimo Trabalho!..

 

Abraço!..

Link para o comentário
Compartilhar em outros sites

Northon

Realmente pena que não é meu mais o que importa é que estou ajudando o XTibia :D

Valeu pelo comentário

Dúvidas postem aqui

Editado por Shenlong
Link para o comentário
Compartilhar em outros sites

Ow....eu tava vendo akele seu tudo la de mudança de clima e ta dando erro ake....aparece...

 

 

Lua Script Error: [Npc interface ]

data/npc/scripts/climate.lua:onThink

 

luaGetThingfromPos <>. Tile not found

 

 

Oq eu faço?

 

Fiz td do jeito q ta la e da esse erro...ajuda plxxxx

 

 

Vlww

 

Abrasss

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...