illarion-content/handler/warpgroup.lua
2016-10-11 16:16:45 +02:00

43 lines
1.5 KiB
Lua

--[[
Illarion Server
This program is free software: you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your option) any
later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU Affero General Public License for more
details.
You should have received a copy of the GNU Affero General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.
]]
local class = require("base.class")
local common = require("base.common")
local M = {}
M.warpGroup = class(function(warpgr, centerpos, radius, destpos,gfx)
warpgr.startpos=centerpos;
warpgr.destpos=destpos;
warpgr.range = radius;
warpgr.gfx = gfx;
end);
function M.warpGroup:execute() --warps all players within a range radius from centerpos to destpos
local plyList = common.ExtgetPlayersInRangeOf(self.startpos, self.range)
for _, player in pairs(plyList) do
local dest = position( self.destpos.x - (self.startpos.x - player.pos.x) ,
self.destpos.y - (self.startpos.y - player.pos.y),
self.destpos.z );
if self.gfx~=nil then
world:gfx(self.gfx,player.pos);-- world:gfx(self.gfx,player.pos); -- "sun" graphic
end
player:warp( dest );
end
end
return M