--====================================================== --============ FIRESTORM EVENT ========================= --====================================================== function playersInArea(pos,pos2,limit) limit=limit or 999 local i=0 for x = pos.x,pos2.x,1 do for y = pos.y,pos2.y,1 do for z = pos.z,pos2.z,1 do if(isPlayerOnPos({x=x,y=y,z=z})) then i=i+1 if(limit==0)then --print("mamygracza") player = getThingfromPos({x=x,y=y,z=z,stackpos=253}) return player --print("Chuja") elseif(i>limit) then return i end end end end end return i end fireStorm={} function addEventWorkaround(obj) obj.f(obj.s) end function fireStorm:start(pos,pos2,settings) if(settings==nil)then settings={} end --doBroadcastMessage("Firestorm event starts in 5 minutes") local fse={} local obj = setmetatable(fse,{__index = fireStorm}) fse.posStart=pos fse.posEnd=pos2 fse.appearSpeed=settings.speed or 2000 fse.appearSpeedDecrease=settings.speedDecrease or 50 fse.appearLevelTime=settings.levelTime or 10000 fse.eventReward=settings.eventReward or function (winner) doPlayerAddExp(winner.uid,4200) end fse.teleportTo=settings.teleportTo or {x=438,y=502,z=8} fse.timeUntilStart=5 fse.players=0 fse.appearLevelTimer=fse.appearLevelTime fse:countdown(5) end function fireStorm:countdown() if(self.timeUntilStart>0) then --doBroadcastMessage("Firestorm event starts in ".. self.timeUntilStart .." minutes") self.timeUntilStart=self.timeUntilStart-1 addEvent(addEventWorkaround, 60, {s=self,f=function (obj) obj:countdown() end}) else self.players=playersInArea(self.posStart,self.posEnd) if(self.players>0) then --doBroadcastMessage("Firestorm event wystartowal.") addEvent(addEventWorkaround, self.appearSpeed, {s=self,f=function (obj) obj:run() end}) end end end function fireStorm:win() winner=playersInArea(self.posStart,self.posEnd,0) --doBroadcastMessage(winneruid) pos=getPlayerPosition(winner.uid) self.eventReward(winner) end function fireStorm:checkLevel() self.appearLevelTimer=self.appearLevelTimer-self.appearSpeed if(self.appearLevelTimer<=0)then if(self.appearSpeed-self.appearSpeedDecrease>0)then self.appearSpeed=self.appearSpeed-self.appearSpeedDecrease else self.appearSpeed=1 end self.appearLevelTimer=self.appearLevelTime end end --iks de function fireStorm:run() --if(self.players>1)then --doBroadcastMessage(self.players) if(self:fire({x=math.random(self.posStart.x,self.posEnd.x),y=math.random(self.posStart.y,self.posEnd.y),z=math.random(self.posStart.z,self.posEnd.z)})==true)then self.players=playersInArea(self.posStart,self.posEnd,2) end if(self.players==1)then self:win() else self:checkLevel() addEvent(addEventWorkaround, self.appearSpeed, {s=self,f=function (obj) obj:run() end}) end --else --self.win() --end end function fireStorm:fire(pos) doSendMagicEffect(pos, CONST_ME_FIREAREA) pos={x=pos.x,y=pos.y,z=pos.z,stackpos=253} if(isPlayerOnPos(pos))then doTeleportThing(getThingfromPos(pos).uid,self.teleportTo) return true end return false end