Difference between revisions of "RegionEditor"

From Legends of Aria Admin and Modding Wiki
Jump to: navigation, search
(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==
*Download the EquipmentEditor.zip file
+
*Copy the scriptcommands override lua code blow
*Unpack the contents and copy the equipment_editor folder over to your mods/yourmodname/scripts direcotry.
+
*If you have a modded file for scriptcommands already, just paste in the information other then the require 'default:scriptcommands'
*open or create a mod file for your mods/yourmodname/scripts/scriptcommands.lua
+
*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
*at the end of the file, add 'require 'equipment_editor.scriptcommands'
+
*Load up your server and type /createregion and you will get a target cursor to verify it works.
*start up your standalone and type /edititem
+
*Enjoy
*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),"&quot;","\"")
 +
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),"&quot;","\"")
	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