Difference between revisions of "RegionEditor"
(Created page with "==How To Add To Mod== *Download the EquipmentEditor.zip file *Unpack the contents and copy the equipment_editor folder over to your mods/yourmodname/scripts direcotry. *open o...") |
(→How To Add To Mod) |
||
Line 1: | Line 1: | ||
==How To Add To Mod== | ==How To Add To Mod== | ||
− | * | + | *Copy the scriptcommands override lua code blow |
− | * | + | *If you have a modded file for scriptcommands already, just paste in the information other then the require 'default:scriptcommands' |
− | * | + | *If you do not have a mod file setup, create a file in your mods/modname/scripts directory named scriptcommands.lua and paste the lua code below and save |
− | + | *Load up your server and type /createregion and you will get a target cursor to verify it works. | |
− | + | *Enjoy | |
− | + | ||
+ | ==scriptcommands.lua override file== | ||
+ | <syntaxhighlight lang="Lua"> | ||
+ | require 'default:scriptcommands' | ||
+ | |||
+ | GodCommandFuncs.CreateRegion = function() | ||
+ | -- create the two event handlers for target 1 and target 2 | ||
+ | RegisterSingleEventHandler(EventType.ClientTargetLocResponse, "CreateRegionTarget1", function (success,targetLoc,targetObj,user) | ||
+ | if(success and targetLoc and user) then | ||
+ | -- set up transfer temp objvar on caller of this command | ||
+ | this:SetObjVar("TempTargetData",targetLoc) | ||
+ | -- send client targeting to caller of this command for target 2 | ||
+ | this:RequestClientTargetLoc(this, "CreateRegionTarget2") | ||
+ | end | ||
+ | end) | ||
+ | RegisterSingleEventHandler(EventType.ClientTargetLocResponse, "CreateRegionTarget2", function (success,targetLoc,targetObj,user) | ||
+ | if(success and targetLoc and user) then | ||
+ | firstTarget = this:GetObjVar("TempTargetData") | ||
+ | ParseRegionToXml(GetRegionDataTable(firstTarget,targetLoc)) | ||
+ | this:DelObjVar("TempTargetData") | ||
+ | end | ||
+ | end) | ||
+ | -- send client targeting to caller of this command for target 1 | ||
+ | this:RequestClientTargetLoc(this, "CreateRegionTarget1") | ||
+ | |||
+ | -- make sure to delete the tempTargetData when done | ||
+ | end | ||
+ | |||
+ | function GetRegionDataTable(target1,target2) | ||
+ | local x1 = target1.X | ||
+ | local y1 = target1.Z | ||
+ | local x2 = target2.X | ||
+ | local y2 = target2.Z | ||
+ | |||
+ | local bigX,smallX,bigY,smallY = 0 | ||
+ | if(x1 > x2) then | ||
+ | bigX = x1 | ||
+ | smallX = x2 | ||
+ | end | ||
+ | if(x1 < x2) then | ||
+ | bigX = x2 | ||
+ | smallX = x1 | ||
+ | end | ||
+ | if(y1 > y2) then | ||
+ | bigY = y1 | ||
+ | smallY = y2 | ||
+ | end | ||
+ | if(y1 < y2) then | ||
+ | bigY = y2 | ||
+ | smallY = y1 | ||
+ | end | ||
+ | |||
+ | local Size = Loc((bigX-smallX),0.1,(bigY-smallY)) | ||
+ | local Center = Loc(bigX - (Size.X/2),0,bigY - (Size.Z/2)) | ||
+ | |||
+ | local regionDataTable = | ||
+ | { | ||
+ | SizeOfRegion = Size, | ||
+ | CenterOfRegeion = Center, | ||
+ | RectOfRegion = | ||
+ | { | ||
+ | MaxX = bigX, | ||
+ | MinX = smallX, | ||
+ | MaxY = bigY, | ||
+ | MinY = smallY, | ||
+ | }, | ||
+ | } | ||
+ | |||
+ | return regionDataTable | ||
+ | end | ||
+ | |||
+ | function ParseRegionToXml(regionDataTable) | ||
+ | -- create references to elements | ||
+ | local regionDefinitionElement = xml.new("RegionDefinition") | ||
+ | local regionNameElement = xml.new("RegionName") | ||
+ | local category = xml.new("Category") | ||
+ | local regionBounds = xml.new("RegionBounds") | ||
+ | --region bound elements | ||
+ | local rect = xml.new("Rect") | ||
+ | local center = xml.new("Center") | ||
+ | local size = xml.new("Size") | ||
+ | local position = xml.new("Position") | ||
+ | local rotation = xml.new("Rotation") | ||
+ | local scale = xml.new("Scale") | ||
+ | position[1] = "(0,0,0)" | ||
+ | rotation[1] = "(0,0,0)" | ||
+ | scale[1] = "(1,1,1)" | ||
+ | size[1] = "(" .. regionDataTable.SizeOfRegion.X .. ",0,"..regionDataTable.SizeOfRegion.Z ..")" | ||
+ | center[1] = "(" .. regionDataTable.CenterOfRegeion.X .. ",0,"..regionDataTable.CenterOfRegeion.Z ..")" | ||
+ | rect[1] = GetRectElementData(regionDataTable) | ||
+ | |||
+ | regionNameElement[1] = "ChangeMe" | ||
+ | category[1] = "Main" | ||
+ | --append the elements together now | ||
+ | regionBounds:append(position) | ||
+ | regionBounds:append(rotation) | ||
+ | regionBounds:append(scale) | ||
+ | regionBounds:append(size) | ||
+ | regionBounds:append(center) | ||
+ | regionBounds:append(rect) | ||
+ | regionDefinitionElement:append(regionNameElement) | ||
+ | regionDefinitionElement:append(category) | ||
+ | regionDefinitionElement:append(regionBounds) | ||
+ | |||
+ | local clipString = string.gsub(tostring(regionDefinitionElement),""","\"") | ||
+ | io.popen('clip','w'):write(clipString):close() | ||
+ | end | ||
+ | |||
+ | function GetRectElementData(regionDataTable) | ||
+ | local rectString = string.format("[(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)]", | ||
+ | regionDataTable.RectOfRegion.MaxX,0.05,regionDataTable.RectOfRegion.MinY, | ||
+ | regionDataTable.RectOfRegion.MinX,0.05,regionDataTable.RectOfRegion.MinY, | ||
+ | regionDataTable.RectOfRegion.MinX,0.05,regionDataTable.RectOfRegion.MaxY, | ||
+ | regionDataTable.RectOfRegion.MaxX,0.05,regionDataTable.RectOfRegion.MaxY, | ||
+ | regionDataTable.RectOfRegion.MaxX,-0.05,regionDataTable.RectOfRegion.MinY, | ||
+ | regionDataTable.RectOfRegion.MinX,-0.05,regionDataTable.RectOfRegion.MinY, | ||
+ | regionDataTable.RectOfRegion.MinX,-0.05,regionDataTable.RectOfRegion.MaxY, | ||
+ | regionDataTable.RectOfRegion.MaxX,-0.05,regionDataTable.RectOfRegion.MaxY) | ||
+ | return rectString | ||
+ | end | ||
+ | |||
+ | RegisterCommand { Command="createregion",Category="GizmosTools",AccessLevel=AccessLevel.God,Func=GodCommandFuncs.CreateRegion,Usage="<createregion>", Desc="You will be presented to click 2 locations for form a bounding box, then the region info will be sent to your clip board to CTRL+V paste into your WorldData.xml file." } | ||
+ | |||
+ | </syntaxhighlight> | ||
==Where to Get the Mod== | ==Where to Get the Mod== | ||
*Right Here [[Media:Equipment_editor.zip]] | *Right Here [[Media:Equipment_editor.zip]] |
Latest revision as of 10:50, 8 February 2022
How To Add To Mod
- Copy the scriptcommands override lua code blow
- If you have a modded file for scriptcommands already, just paste in the information other then the require 'default:scriptcommands'
- If you do not have a mod file setup, create a file in your mods/modname/scripts directory named scriptcommands.lua and paste the lua code below and save
- Load up your server and type /createregion and you will get a target cursor to verify it works.
- Enjoy
scriptcommands.lua override file
require 'default:scriptcommands'
GodCommandFuncs.CreateRegion = function()
-- create the two event handlers for target 1 and target 2
RegisterSingleEventHandler(EventType.ClientTargetLocResponse, "CreateRegionTarget1", function (success,targetLoc,targetObj,user)
if(success and targetLoc and user) then
-- set up transfer temp objvar on caller of this command
this:SetObjVar("TempTargetData",targetLoc)
-- send client targeting to caller of this command for target 2
this:RequestClientTargetLoc(this, "CreateRegionTarget2")
end
end)
RegisterSingleEventHandler(EventType.ClientTargetLocResponse, "CreateRegionTarget2", function (success,targetLoc,targetObj,user)
if(success and targetLoc and user) then
firstTarget = this:GetObjVar("TempTargetData")
ParseRegionToXml(GetRegionDataTable(firstTarget,targetLoc))
this:DelObjVar("TempTargetData")
end
end)
-- send client targeting to caller of this command for target 1
this:RequestClientTargetLoc(this, "CreateRegionTarget1")
-- make sure to delete the tempTargetData when done
end
function GetRegionDataTable(target1,target2)
local x1 = target1.X
local y1 = target1.Z
local x2 = target2.X
local y2 = target2.Z
local bigX,smallX,bigY,smallY = 0
if(x1 > x2) then
bigX = x1
smallX = x2
end
if(x1 < x2) then
bigX = x2
smallX = x1
end
if(y1 > y2) then
bigY = y1
smallY = y2
end
if(y1 < y2) then
bigY = y2
smallY = y1
end
local Size = Loc((bigX-smallX),0.1,(bigY-smallY))
local Center = Loc(bigX - (Size.X/2),0,bigY - (Size.Z/2))
local regionDataTable =
{
SizeOfRegion = Size,
CenterOfRegeion = Center,
RectOfRegion =
{
MaxX = bigX,
MinX = smallX,
MaxY = bigY,
MinY = smallY,
},
}
return regionDataTable
end
function ParseRegionToXml(regionDataTable)
-- create references to elements
local regionDefinitionElement = xml.new("RegionDefinition")
local regionNameElement = xml.new("RegionName")
local category = xml.new("Category")
local regionBounds = xml.new("RegionBounds")
--region bound elements
local rect = xml.new("Rect")
local center = xml.new("Center")
local size = xml.new("Size")
local position = xml.new("Position")
local rotation = xml.new("Rotation")
local scale = xml.new("Scale")
position[1] = "(0,0,0)"
rotation[1] = "(0,0,0)"
scale[1] = "(1,1,1)"
size[1] = "(" .. regionDataTable.SizeOfRegion.X .. ",0,"..regionDataTable.SizeOfRegion.Z ..")"
center[1] = "(" .. regionDataTable.CenterOfRegeion.X .. ",0,"..regionDataTable.CenterOfRegeion.Z ..")"
rect[1] = GetRectElementData(regionDataTable)
regionNameElement[1] = "ChangeMe"
category[1] = "Main"
--append the elements together now
regionBounds:append(position)
regionBounds:append(rotation)
regionBounds:append(scale)
regionBounds:append(size)
regionBounds:append(center)
regionBounds:append(rect)
regionDefinitionElement:append(regionNameElement)
regionDefinitionElement:append(category)
regionDefinitionElement:append(regionBounds)
local clipString = string.gsub(tostring(regionDefinitionElement),""","\"")
io.popen('clip','w'):write(clipString):close()
end
function GetRectElementData(regionDataTable)
local rectString = string.format("[(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)(%s,%s,%s)]",
regionDataTable.RectOfRegion.MaxX,0.05,regionDataTable.RectOfRegion.MinY,
regionDataTable.RectOfRegion.MinX,0.05,regionDataTable.RectOfRegion.MinY,
regionDataTable.RectOfRegion.MinX,0.05,regionDataTable.RectOfRegion.MaxY,
regionDataTable.RectOfRegion.MaxX,0.05,regionDataTable.RectOfRegion.MaxY,
regionDataTable.RectOfRegion.MaxX,-0.05,regionDataTable.RectOfRegion.MinY,
regionDataTable.RectOfRegion.MinX,-0.05,regionDataTable.RectOfRegion.MinY,
regionDataTable.RectOfRegion.MinX,-0.05,regionDataTable.RectOfRegion.MaxY,
regionDataTable.RectOfRegion.MaxX,-0.05,regionDataTable.RectOfRegion.MaxY)
return rectString
end
RegisterCommand { Command="createregion",Category="GizmosTools",AccessLevel=AccessLevel.God,Func=GodCommandFuncs.CreateRegion,Usage="<createregion>", Desc="You will be presented to click 2 locations for form a bounding box, then the region info will be sent to your clip board to CTRL+V paste into your WorldData.xml file." }
Where to Get the Mod
- Right Here Media:Equipment_editor.zip