2019-06-19 01:10:15 -04:00
require ( " global " ) ;
properties = {
permissions = 0 ,
parameters = " sssssss " ,
description =
[ [
Warp player or < targetname > to a location from a list , or enter a zoneID with coordinates .
! warp < spawn list > |
! warp < zone > < x > < y > < z > |
! warp < zone > < x > < y > < z > < privateArea > < targetname > |
] ] ,
}
2022-02-06 23:17:59 -05:00
function onTrigger ( player , argc , p1 , p2 , p3 , p4 , privateArea , privateAreaType , name , lastName )
2019-06-19 01:10:15 -04:00
if name then
if lastName then
player = GetWorldManager ( ) : GetPCInWorld ( name .. " " .. lastName ) or nil ;
else
player = GetWorldManager ( ) : GetPCInWorld ( name ) or nil ;
end ;
end ;
if not player then
printf ( " [Command] [warp] error! No target or player specified! " ) ;
return ;
end ;
local messageID = MESSAGE_TYPE_SYSTEM_ERROR ;
local sender = " [warp] " ;
-- we're getting a list/array from c# so 0 index
local pos = player : GetPos ( ) ;
2022-01-27 17:38:15 -05:00
local player_x = pos [ 1 ] ;
local player_y = pos [ 2 ] ;
local player_z = pos [ 3 ] ;
local player_rot = pos [ 4 ] ;
local player_zone = pos [ 5 ] ;
2019-06-19 01:10:15 -04:00
local worldManager = GetWorldManager ( ) ;
2022-02-13 18:48:22 -05:00
privateAreaType = privateAreaType or 0 ;
2019-06-19 01:10:15 -04:00
if argc >= 3 then
if argc == 3 then
local x = tonumber ( applyPositionOffset ( p1 , player_x ) ) or player_x ;
local y = tonumber ( applyPositionOffset ( p2 , player_y ) ) or player_y ;
local z = tonumber ( applyPositionOffset ( p3 , player_z ) ) or player_z ;
player : SendMessage ( messageID , sender , string.format ( " setting coordinates X:%d Y:%d Z:%d within current zone (%d) " , x , y , z , player_zone ) ) ;
worldManager : DoPlayerMoveInZone ( player , x , y , z , player_rot , 0x00 ) ;
else
local zone = tonumber ( applyPositionOffset ( p1 , player_zone ) ) or player_zone ;
local x = tonumber ( applyPositionOffset ( p2 , player_x ) ) or player_x ;
local y = tonumber ( applyPositionOffset ( p3 , player_y ) ) or player_y ;
local z = tonumber ( applyPositionOffset ( p4 , player_z ) ) or player_z ;
2022-02-13 13:18:20 -05:00
if privateArea == nil then privateArea = nil end ;
if privateAreaType == nila then privateAreaType = 0 end ;
2019-06-19 01:10:15 -04:00
player : SendMessage ( messageID , sender , string.format ( " setting coordinates X:%d Y:%d Z:%d to new zone (%d) private area:%s " , x , y , z , zone , privateArea or " unspecified " ) ) ;
2022-02-06 23:17:59 -05:00
worldManager : DoZoneChange ( player , zone , privateArea , tonumber ( privateAreaType ) , 0x02 , x , y , z , 0.00 ) ;
2019-06-19 01:10:15 -04:00
end
else
player : SendMessage ( messageID , sender , " Unknown parameters! Usage: " .. properties.description ) ;
end ;
end ;
function applyPositionOffset ( str , offset )
local s = str ;
if s : find ( " @ " ) then
s = tonumber ( s : sub ( s : find ( " @ " ) + 1 , s : len ( ) ) ) ;
if s then s = s + offset end ;
end
print ( s ) ;
return s ;
end ;