• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua In a timer event called from:

ibarhim_95

New Member
Joined
Jan 1, 2011
Messages
53
Reaction score
3
Location
Sweden
local rain = Rain:new()

function onThink(interval, lastExecution)
local minX = 985
local minY = 1012
local maxX = 996
local maxY = 1022

local frompos = {x=math.random(minX, maxX), y=math.random(minY, maxY), z=7}
local topos = {x=math.random(frompos.x, maxX), y=math.random(frompos.y, maxY), z=7}

local effects = {
snow = {
disteffect = CONST_ANI_SNOWBALL,
effect = CONST_ME_ENERGYAREA
},
rain = {
disteffect = CONST_ANI_FIRE,
effect = 6

}
}
random = math.random(0, 10)
if (random == 0) then
rain.chance = math.random(10,30)
rain:start({fromPos = frompos, toPos = topos}, effects.snow, 300, math.random(50, 60))
else
rain.chance = math.random(30,100)
rain.createItem = {chance = math.random(0,10), item = {itemid = 1489, type = 1}}
rain:start({fromPos = frompos, toPos = topos}, effects.rain, math.random(50, 100), math.random(60, 100))
end
return TRUE
end
 

Attachments

where's your rain lib? this script isn't the error, it's the lib itself
-- Features:
-- chance = OBJECT.chance = INT
-- createItem = OBJECT.createItem = {chance = INT, item = {itemid = INT, type = INT}}


Rain = {ignoreIds = {4526}}

function Rain:new()
local obj = {}
setmetatable(obj, self)
self.__index = self
return obj
end
function Rain:getPositionInArea(fromPos, toPos)
self.positions = {}
for Y = fromPos.y, toPos.y do
for X = fromPos.x, toPos.x do
if (getTileThingByPos({x=X, y=Y, z=7, stackpos=0}).itemid ~= 0) then
if not (string.match(string.lower(getItemNameById(getTileThingByPos({x=X, y=Y, z=7, stackpos=0}).itemid)), "water")) then
table.insert(self.positions, {x=X, y=Y, z=Z})
end
end
end
end
return true
end

function Rain:doRain(position, disteffect, effect)
if (self.duraction ~= self.executed) then
local chance = self.chance or 100
if (math.random(0, 1000) <= chance) then
for Z = 0, 7 do
if (getTileThingByPos(({x = position.x, y = position.y, z = Z})).itemid ~= 0) then
doSendDistanceShoot({x = position.x - 7, y = position.y - 5, z = Z}, {x = position.x, y = position.y, z = Z}, disteffect)
doSendMagicEffect({x = position.x, y = position.y, z = Z}, effect)
if (self.createItem) then
if (math.random(0, 1000) <= self.createItem.chance) then
if (isInArray(self.ignoreIds, getTileThingByPos({x=X, y=Y, z=Z, stackpos=0}).itemid) == FALSE) then
local item = doCreateItem(self.createItem.item.itemid, self.createItem.item.type, {x=position.x, y=position.y, z=Z})
doDecayItem(item)
end
end
end
break
end
end
end
return true
else
return false
end
end

function Rain:start(positions, effects, duraction, delay, var)
self:getPositionInArea(positions.fromPos, positions.toPos)
if not (self.positions[1]) then
return false
end
self.delay = delay
self.var = var or self
self.effects = effects
self.duraction = duraction
self.executed = 0
addEvent(doCallback, self.delay, {var=self.var})
return true
end

function doCallback(p)
for _, v in pairs(p.var.positions) do
if not (p.var:doRain(v, p.var.effects.disteffect, p.var.effects.effect)) then
return true
end
end
addEvent(doCallback, p.var.delay, {var=p.var})
p.var.executed = p.var.executed+1
end
 
Back
Top