avatar
Untitled

Guest 155 18th Jan, 2023

MARKUP 3.33 KB
                                           
                         --======================================================
--============ 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
                      
                                       
To share this paste please copy this url and send to your friends
RAW Paste Data
Recent Pastes
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM